{"version":3,"sources":["utils/recovery.ts","components/Snackbar/Snackbar.tsx","utils/alfie-config.ts","utils/IsOnlineStore.ts","utils/getUniqueId.ts","components/Snackbar/SnackbarController.tsx","components/Authorize/Auth0Wrapper.tsx","utils/appInsights.ts","components/Loader/LoaderOverlay.tsx","assets/images/alfiepay-logo.svg","assets/images/alfie-img.png","utils/pluraliser.ts","components/Authorize/AuthService.ts","components/FontLink.tsx","components/Snackbar/SnackbarControllerViewModel.ts","components/Input.tsx","components/Header/AdminHeader.tsx","utils/raygun.ts","assets/images/alfie-sad.png","utils/ErrorCustomDataSymbol.ts","utils/telemetry.ts","utils/debug.ts","api/Api.ts","utils/aurorStorageFileUploader.ts","utils/uuid.ts","styles/theme.ts","styles/index.ts","utils/currency.ts","api/Api.generated.ts","styles/styles.css","components/Organization/OrgFilter.tsx","utils/motochek-to-address.ts","pages/RecoveryAdmin/RecoveryAdminViewModel.ts","utils/motochek-parser.ts","components/Motochek/MotochekUploadViewModel.ts","components/RecoveryBlock/RecoveryBlockViewModel.ts","components/RecoveryBlock/RecoveryRowViewModel.ts","utils/motochek-csv.ts","assets/images/BP.svg","assets/images/Z.svg","assets/images/Mobil.svg","assets/images/Caltex.svg","assets/images/ColesExpress.svg","assets/images/Npd.svg","assets/images/alfiepay-logo-grey.svg","utils/globalHandleError.ts","assets/images/stripe.svg","stores/index.ts","utils/setupNonce.ts","api/FetchError.ts","styles/stripe-elements.css","styles/variables.css","components/AppCrashed/AppCrashed.tsx","components/AppOffline/AppOfflineSnackbar.tsx","components/Snackbar/SnackbarMessages.ts","components/Authorize/Login.tsx","components/Authorize/AuthorizedRoute.tsx","App.tsx","index.tsx","components/SvgIcon/SvgIcon.tsx","assets/icons/ArrowUp.icon.svg","assets/icons/Bars.icon.svg","assets/icons/CardBack.icon.svg","assets/icons/CheckCircle.icon.svg","assets/icons/ChevronDown.icon.svg","assets/icons/ExclamationTriangle.icon.svg","assets/icons/Flask.icon.svg","assets/icons/SyncAlt.icon.svg","assets/icons/Times.icon.svg","components/Organization/Organization.tsx","components/Layout/index.tsx","components/ActionButton.tsx","components/FormInput.tsx","components/Snackbar/StripeFailureSnackbar.tsx","utils/load-stripe.ts","pages/Payment/CardIcon.tsx","pages/Payment/Payment.tsx","utils/date.ts","utils/volume.ts","pages/Details/ConfirmDetails.tsx","utils/parseParam.ts","pages/Details/ConfirmPlate.tsx","pages/Home/Backdrop.tsx","pages/Home/Home.tsx","pages/NotFound/NotFound.tsx","pages/Payment/AlreadyPaid.tsx","pages/Payment/PaymentComplete.tsx","pages/Payment/PaymentFailed.tsx","pages/RecoveryAdmin/AdminPage.tsx","components/Printing/FirstLetterBP.tsx","components/Printing/FirstLetterBPFranchise.tsx","components/Printing/FirstLetterMobil.tsx","components/Printing/FirstLetterZ.tsx","components/Printing/SecondLetterBP.tsx","components/Printing/SecondLetterBPFranchise.tsx","components/Printing/SecondLetterZ.tsx","components/Printing/SecondLetterMobil.tsx","components/Printing/FirstLetterCaltex.tsx","components/Printing/SecondLetterCaltex.tsx","components/Printing/FirstLetterNPD.tsx","components/Printing/SecondLetterNPD.tsx","components/Printing/PdfBody.tsx","components/Printing/PrintPage.tsx","pages/Printing/PrintDocument.tsx","pages/Printing/PrintDocumentViewModel.ts","pages/PrintTriage/PrintTriageViewModel.ts","pages/PrintTriage/TriageImage.tsx","utils/useMousePosition.ts","pages/PrintTriage/TriageCard.tsx","pages/PrintTriage/RejectedStack.tsx","pages/PrintTriage/ToPrintStack.tsx","pages/PrintTriage/TriageStatus.tsx","pages/PrintTriage/UnassignedStack.tsx","pages/PrintTriage/PrintTriage.tsx","utils/preventDefault.ts","viewmodel/PublicAppViewModel.ts","pages/AddressUpload/AddressUpload.tsx","pages/AddressUpload/AddressUploadViewModel.ts","pages/PrintTriage/GenerateLetters.tsx","routing/index.tsx","viewmodel/PromiseViewModel.ts","utils/tryCancelPromise.ts","components/Spinner/Spinner.tsx"],"names":["toRecoveryKey","recovery","debtIdentifier","licensePlate","SnackbarRenderer","children","id","context","useContext","__DEV__","Error","useEffect","showSnackbar","content","persistent","handleDismiss","SnackbarContent","div","SnackbarText","span","RetryButton","SnackbarButton","className","color","props","alfieConfig","configEl","document","querySelector","json","innerHTML","Object","assign","JSON","parse","auth0","domain","clientId","audience","appInsights","instrumentationKey","raygun","apiKey","productInformation","region","stripe","staticFilesUrl","isOnlineStore","isOnline","navigator","onLine","offlineUsageReportedCount","window","addEventListener","whenOnline","this","Promise","resolve","bound","nextId","getUniqueId","SnackbarControllerContext","createContext","variants","visible","scaleY","opacity","hidden","SnackbarContainer","SnackbarAlert","SnackbarController","vm","snackbars","map","x","initial","animate","key","SnackbarItem","config","onDismiss","timeout","setTimeout","clearTimeout","SnackbarCloseButton","onClose","CloseButton","locator","outline","description","onClick","icon","size","DEFAULT_REDIRECT_CALLBACK","history","replaceState","title","location","pathname","Auth0Context","useAuth0","Auth0Provider","onRedirectCallback","isAuthenticated","setIsAuthenticated","user","setUser","auth0Client","setAuth0","loading","setLoading","setClient","neverEndingPromise","initOptions","auth0FromHook","search","includes","handleRedirectCallback","result","userIsAuthed","getUser","authUser","setCurrentUser","catch","Provider","value","redirectUser","getTokenSilently","o","token","reload","undefined","getIdTokenClaims","loginWithRedirect","logout","debug","ignoreRemoteDependencyTargets","setupAppInsights","downloadAndSetup","correlationHeaderExcludedDomains","queue","push","addTelemetryInitializer","envelope","data","baseType","baseData","target","exceptions","Array","some","hasFullStack","log","name","substr","lastIndexOf","getAppInsights","Overlay","LoadingOverlay","scale","module","exports","pluraliser","count","singular","plural","AuthService","client","FontLink","href","rel","snackbarsMap","deep","entries","has","set","delete","FixedHeader","HeaderBlock","RefreshButton","Button","LogoImg","img","AdminHeader","dropdownMenuItems","onSearch","refresh","refreshing","showSearch","orgKey","params","to","src","type","placeholder","onChange","disabled","Spinner","SvgIcon","UncontrolledDropdown","DropdownToggle","DropdownMenu","right","DropdownItem","tag","divider","menuItems","initRaygun","rg4js","ignore3rdPartyErrors","payload","tokenRe","callback","Details","Breadcrumbs","forEach","b","CustomData","from","forEachBreadcrumb","test","setRaygunUser","email","sub","identifier","isAnonymous","fullName","ErrorCustomDataSymbol","Symbol","fetchErrorsWithReducedSeverity","AbortError","NetworkError","NotFound","telemetry","setAuthenticatedUserContext","clearAuthenticatedUserContext","trackException","error","customData","fetchErrorName","createDebug","namespace","ns","debugFunction","logFactory","enabled","literals","message","join","args","extend","extendedNamespace","apiInstance","addAuthorizeHeaderCallback","Api","fetchResponse","actionName","url","init","headers","method","Headers","customHeaders","controller","AbortController","signal","promise","fetch","credentials","otherInits","response","status","innerErrorMessage","errorData","Unauthenticated","blob","then","open","URL","createObjectURL","InternalServerError","cancel","abort","responsePromise","contentType","get","JsonParsingError","sendChurnZeroEvent","body","stringify","getAddressCsv","aurorAdmin_ToPdf","request","aurorStorageFileUploader","file","createFileResponse","uploadAndGetFileId","fileId","btoa","String","fromCharCode","replace","substring","uploadBrowserData","uploadUrl","uploadUriWithSasToken","pipeline","AnonymousCredential","aborter","uploadData","abortSignal","blobHTTPHeaders","blobContentType","metadata","maxSingleShotSize","bpCss","errorColor","primaryColor","primaryHoverColor","textColor","linkColor","linkHoverColor","pdfVisitBackground","pdfVisitHeader","pdfVisitText","pdfRegistrationBackground","pdfRegistrationText","pdfCodeBackground","pdfCodeText","themeMap","bp","z","mobil","caltex","logoLength","npd","org1","testorg","colesexpress","baseTheme","bold","borderColor","borderRadius","fadedColor","inputBorder","placeholderColor","smallFontSize","tinyFontSize","white","successColor","warningColor","dangerColor","toStyledTheme","testOrgDetails","helpPhone","logo","storeDescription","teamName","orgDetailsMap","getOrgDetails","defaultTheme","ThemeContext","orgKeys","keys","Container","wide","Body","theme","H3","Logo","P","p","TinyP","Label","label","Input","input","PublicButton","button","PublicButtonLink","withComponent","Link","a","Form","form","ErrorBlock","getCurrencyFormatFromString","valueString","fractionalDigits","parseFloat","isNaN","getCurrencyFormat","Intl","NumberFormat","toLocaleString","minimumFractionDigits","maximumFractionDigits","toFixed","BatchStatusResponseCode","createQueryParameters","access_Confirm","accessRequest","analytics_TrackChurnZeroEvent","aurorAdmin_UploadDebtPostalAddresses","createDebtPostalAddresses","aurorAdmin_GetDebtDetailsByStates","states","organizationKey","page","pageSize","aurorAdmin_GetDebtDetailsByStatesAndPrintIndex","aurorAdmin_GetAllDebtDetails","aurorAdmin_GetDebtLetterDetails","aurorAdmin_FireDebtStateTrigger","aurorAdmin_StartLettersGeneration","outputFolderName","aurorAdmin_OverrideDebtState","aurorAdmin_CreateFile","payment_Create","createPaymentRequest","ChurnZeroEventName","Success","FailedSafeToReprocess","FailedUnsafeToReprocess","CreateFileTypeInvalidApiError","CreatePaymentApiError","DebtAlreadyPaidApiError","DebtInInvalidStateApiError","DebtPostalAddressWarningReason","AlfiepayAlreadyPaid","AlfiepayCallSupport","AlfiepayClickedIncorrectDetails","AlfiepayClickedPay","AlfiepayConfirmedDetails","AlfiepayEnteredCode","AlfiepayInvalidCode","AlfiepayPaid","AlfiepayPaidManually","AlfiepayPaidText","AlfiepayPaymentFailed","AlfiepayReceiptRequested","AlfiepayViewCodePage","AlfiepayViewDetailsPage","AlfiepayViewHomePage","AlfiepayViewNotFoundPage","AlfiepayViewPaymentPage","AlfiepayViewPaymentFailedPage","AlfiepayViewPaymentSuccessfulPage","AlfiepayTextMessageSent","AlfiepayTextMessageSent1","AlfiepayTextMessageSent2","AlfiepayLetterSent","AlfiepayLetterSent1","AlfiepayLetterSent2","isInstance","$$errorType","DebtState","NotInCorrectState","AddressWasInvalid","DebtDoesNotExist","DebtStateTrigger","InDebt","Settled","HandledExternally","NotifyExpired","NotifiedExpired","New","NeedPostalAddress","WaitingForPostalAddress","WaitingToSendSMS1","SendingSMS1","WaitingToSendSMS2","SendingSMS2","WaitingToSendLetter1","ReadyToSendLetter1","ReadyToSendLetter2","WaitingToSendLetter2","AllPossibleCommunicationsSent","NoCommunicationsSent","NotEligibleForRecovery","NeedOrangeboxInputLetter1","NeedOrangeboxInputLetter2","WaitingForOrangeboxInputLetter1","WaitingForOrangeboxInputLetter2","FileType","Waited","PaymentReceived","ExternallyHandled","FullyPaidInFawkes","CommunicationSent","CommunicationFailed","FoundMobileNumber","CantFindMobileNumber","RequestedPostalAddress","FoundPostalAddress","CantFindPostalAddressAndPriorCommunicationSent","Notified","Cancelled","PartiallyPaidExternally","Expired","ManualOverride","CantFindPostalAddressAndNoPriorCommunicationSent","RecoveryDeletedInFawkes","RejectedPrintDetails","IntelEventDeletedInFawkes","RecoveryNoLongerMeetsDebtCriteria","RecoveryMeetsDebtCriteria","VehicleInformationChanged","CollectionFeeAdded","RequestedOrangeboxInput","ReceivedOrangeboxInput","AddressChangedByOrangebox","RejectedByOrangebox","AllSmsSent","AllSmsFailed","PhoneNumberChanged","IncidentDetailsPropsBagKey","Other","Orangebox","MotochekResponse","InvalidBatchApiError","InvalidDebtStateApiError","LetterTemplateCode","SiteAddress","SiteName","LocationWithinSite","ProductName","ProductQuantity","ProductPrice","SitePhoneNumber","PaymentCreationStatus","Default","BpCorporate","BpFranchise","Z","Mobil","Caltex","Npd","DebtInInvalidState","PaymentViaStripeFailed","DebtHasAlreadyBeenPaid","OrgFilterGroup","OrgButton","ActiveOrgButton","OrgFilter","path","orgFilter","details","hasMailing","record","values","val","formatStreet","flat","streetNumber","num","formatLocality","suburb","rd","bag","formatTown","town","postcode","BlockTitles","fields","expectedWidth","reduce","width","parseLine","line","parser","raw","validateRecord","length","invalidMessageCodes","toRecords","addressRecords","s","lines","pop","item","address","street","mailingAddressFlatFloorName","mailingAddressStreetNumber","mailingAddressStreetName","locality","mailingAddressSuburb","mailingAddressRDNumber","mailingAddressBoxBagNumber","mailingAddressTown","mailingAddressPostcode","mailingAddressPropertyName","physicalAddressFlatFloorNumber","physicalAddressStreetNumber","physicalAddressStreetName","physicalAddressSuburb","physicalAddressRDNumber","physicalAddressTown","physicalAddressPostcode","physicalAddressPropertyName","toAddress","motochekAddress","mailingAddressBoxBagRd","mailingAddressBoxBagRD","mailingAddressRdNumber","registeredPersonName","plateNo","vin","messageCode1","postalAddress","recipient","valid","invalidRecords","filter","api","closeModal","uploadError","uploading","uploadResult","stateUpdates","errors","warnings","warning","currentDebtState","warningReason","handleMotochekUpload","records","motochekUpload","globalHandleError","updateFile","e","fileError","currentTarget","files","reader","FileReader","readAsText","onload","toString","onerror","createMotochekFile","motochekFileId","batchStatus","fileName","fileType","options","lastToggledId","expanded","blockAction","rowAction","onSelect","getAllRecoveries","selectedIds","selectedRows","recoveries","isChecked","every","debtState","matchingRecoveries","trim","toLowerCase","organizationName","siteName","amountIncludingCollectionFee","amountOwedForGoods","toggleAll","someChecked","toggleChecked","toggleRange","lastToggled","getRecovery","fromIndex","getRowIndex","toIndex","slice","selection","getSelection","empty","find","row","findIndex","clearSelectionByDebtId","ids","clearSelection","toggleExpanded","overrideState","debtIds","newState","debtIdentifiers","selectionCount","debtDetails","incidentDetails","downloadCSVForPlateBatch","batchNumber","plates","csvUrl","toDataUrl","hiddenElement","createElement","download","format","Date","click","output","Set","plate","toUpperCase","encodeURIComponent","activeBlockTitles","GenerateLettersAndSendToMailhouse","SendToMotochekForPostalAddress","UploadPostalAddressFromMotochek","SendToOrangeboxForOrdering","WaitForOrangeboxOrdering","snackbarVm","motochekIds","ingestingMotochek","fetching","actionInProgress","afterAction","invalidPrintRequest","motochekUploadVm","blockMap","NewDebt","createBlockVm","TextNotifications","LetterWaitingPeriod","fn","thisBatch","splice","downloadCSVs","motochekPlates","actionTitle","motochekVm","trigger","text","csv","getCsvDownloadFileName","goto","printLetters","PaidOnlineViaAlfiepay","PaidInStore","UnableToSendCommunications","DebtExpired","NoLongerADebt","registerState","blockVms","blockVm","getBlockVm","block","registerBlockState","state","assertNever","cancelAfterAction","startIngesting","fetchAdminDetails","closeIngestionModal","handleFetchAdminDetails","fireTrigger","processDebtStateChanges","alert","clearInvalidPrintRequest","printVm","detail","changes","failedChanges","r","currentState","errorMessage","ensureImagesAreLoaded","container","allImages","querySelectorAll","all","ensureImageIsLoaded","image","complete","reject","stack","originalError","console","routingStore","Context","routing","__alfie_nonce__","KnownFetchErrorNames","setPrototypeOf","FetchError","prototype","getFetchErrorName","Page","Alfie","AppCrashed","AppOfflineSnackbar","Snackbar","Backdrop","Instructions","AlfiepayLogo","Login","loc","redirect_uri","origin","AuthorizedRoute","component","client_id","AuthorizedComponent","appState","targetUrl","SnackbarControllerViewModel","isCrashed","componentDidCatch","errorInfo","setState","render","fallback","exact","store","browserHistory","getElementById","iconSizes","xs","sm","md","lg","StyledSvg","svg","rotation","viewBox","preferredSize","viewBoxSizeAsString","viewBoxSize","parseInt","attributes","xlinkHref","Component","symbol","add","Organization","orgPathMatch","matchOrgPath","matchOrgKey","PaymentFailedComponent","AlreadyPaidComponent","PaymentCompleteComponent","ConfirmPlateComponent","ConfirmDetailsComponent","NotFoundComponent","Footer","FooterLink","PublicLayout","footer","sendEvent","StyledButton","ActionButton","workingContent","completeContent","isComplete","FormInput","field","onBlur","validate","rest","initialValue","validator","hasBeenValidated","validationMessage","ref","StripeFailureSnackbar","loadStripe","script","async","appendChild","CardIconBlock","fade","Icon","i","CardIcon","brand","visa","mastercard","amex","discover","diners","jcb","unknown","brandToPf","Total","Amount","TotalAmount","LogoStrip","PoweredBy","PoweredByImg","H4","h4","CardBlock","IconBlock","border","CardNumber","CardExpiry","CardCVC","Payment","stripeKey","setStripeKey","Stripe","StripePayment","PaymentEl","alt","amount","total","onSubmit","preventDefault","handleCharge","noValidate","cardBrand","chargeError","numberComplete","numberError","expiryComplete","expiryError","cvcComplete","cvcError","cardError","stripeError","chargeButtonState","formatDate","date","parseISO","formatVolume","volume","ButtonBlock","LinkBlock","DesktopWrapper","DetailsRow","Detail","flexBasis","noBorder","Header","LocationName","LicensePlate","DetailLabel","DetailContent","Photo","PopoverCloseButton","ConfirmDetails","match","matchConfirmDetails","referenceNumber","handleFindDetails","plateCheckState","alreadyPaidRoute","cannotPayRoute","confirmPlateRoute","detailsConfirmed","hash","indexOf","imageUrl","locationName","locationAddress","locationPump","fuelType","price","showIncorrectDetails","Popover","placement","isOpen","incorrectDetails","toggle","hideModals","PopoverHeader","PopoverBody","doParse","parseParam","parsed","isArray","UpperCaseInput","HR","hr","ConfirmPlate","code","reg","err","parseLocation","detailsNotFound","detailsError","confirmDetailsRoute","canConfirmPlate","BackdropEl","Content","h1","A","Strip","Home","h2","SubHeader","h3","AlreadyPaid","CentredH3","CentredP","PaymentComplete","receiptUrl","PaymentFailed","AdminPageEl","AdminPage","FirstLetterBP","getSiteName","getCopyTime","getCopyDateShort","Phone","Url","Signoff","Signature","FirstLetterBPFranchise","FirstLetterMobil","FirstLetterZ","getCopyDate","SecondLetterBP","copyDate","collectionFeeDate","getCollectionFeeDate","collectionFee","SecondLetterBPFranchise","SecondLetterZ","SecondLetterMobil","FirstLetterCaltex","SecondLetterCaltex","FirstLetterNpd","SecondLetterNpd","PdfBody","letterTemplateCode","firstLetter","secondDebtLetterDetails","unsupported","AddressBlock","Name","Address","Workflow","StepsHeading","Steps","late","Step","Pay","Visit","NumberPlate","Code","PrintDate","DetailRow","DetailsImage","Plate","LateStrap","dateOfIncident","collectionFeeAppliedOn","detailsDate","pdfGenerationDate","siteAddress","productName","productQuantity","productPrice","fill","d","fawkesImage","thumbnailLargeUrl","GlobalPrintStyle","PrintDocument","PrintDocumentFrameContent","head","printError","confirmMarkChanges","printing","badDetails","unassigned","marking","rejected","toPrint","successfulPrintCount","batchSize","assigned","debt","unshift","isToPrint","isRejected","addToRejected","shift","acceptAll","addToPrint","undo","unassignDebt","excludeDebt","handlePrint","printAssigned","handleLoad","load","handleMarkChanges","markChanges","toggleMarkChanges","reset","toPrintIds","toRejectIds","fireDebtStateTriggerForBatch","batchOfIds","batchToMark","debts","loadDebtDetail","validVolume","validPrice","validPlate","validLetterTemplate","isValidDebt","debtLetterToPrint","reverse","batch","printMixedOrgLetters","letters","GeneratePDFName","iframe","style","display","iframeWindow","contentWindow","root","PrintDocumentViewModel","styleEl","cssRules","sheet","cssDeclarations","cssText","fawkesEventResourceLocators","html","outerHTML","res","remove","printingBatch","indexes","index","Math","min","padStart","max","Image","small","ImageBox","zoomable","zoomed","TriageImage","setZoom","position","el","setPosition","throttledSetPosition","setFromEvent","top","left","clientX","y","clientY","removeEventListener","useMousePosition","current","transformOrigin","transform","Card","TriageCard","translateX","imgUrl","imageFullSizeUrl","translateZ","transition","delay","zIndex","exit","RejectedStack","TriageHeader","EmptyTriageCard","TriageStack","rejectedData","DetailStrap","ToPrintStack","toPrintData","StyledAlert","Alert","TriageStatus","Modal","ModalHeader","ModalBody","ModalFooter","DetailItem","warn","TriageDetail","UnassignedStack","direction","unassignedData","isDefaultVolume","TriageStacks","ButtonBar","PrintTriage","setDirection","handleKeyDown","metaKey","ctrlKey","propertyKey","descriptor","wrapWithPreventDefault","enumerable","configurable","writable","defineProperty","pontentialEvent","apply","fees","cardValidated","isHandlingCharge","isValid","cardValid","fieldsValid","charge","clearError","findDetails","eventName","eventData","eventValue","debtId","createToken","tokenizationResult","emailAddress","saveEventErrorType","messageForUser","event","paymentCompleteRoute","thumbnailMediumUrl","PublicAppViewModelContext","StatusMessageContainer","AddressUpload","upload","FormGroup","for","CustomInput","azureStorageFileUploader","Done","invalid","Loading","statusMessage","retryFileUpload","currentFile","boundUploader","createOrangeboxFile","LetterGenerationComponent","inAction","setInAction","isErrorOnStartGeneration","setIsErrorOnStartGeneration","stats","setStats","startPrintGeneration","useCallback","lettersCount","GenerateLetters","HomeComponent","contextVm","OrgComponent","orgMatch","RecoveryAdminComponent","adminRoute","adminOrgRoute","PrintTriageComponent","GenerateLettersComponent","printTriageRoute","addressUploadComponent","addressUploadRoute","OperationState","createPromiseViewModel","onResolve","onReject","isCancelled","done","tryCancel","fromPromiseViewModel","cx","cy","spinnerOffset","PI","SpinnerSvg","ScalingSpinner","strokeDasharray","circle","stroke"],"mappings":"kGAKA,kCAAO,IAAMA,EAAgB,SAACC,GAC1B,OAAGA,EAASC,eAAc,IAAID,EAASE,YAAvC,C,8OCGSC,EAA4C,SAAC,G,IAAEC,EAAA,EAAAA,SACjDC,EAAD,gEAAC,GACDC,EAAU,IAAMC,WAAW,KACjC,IAAKD,GAAW,uKAAYE,QACxB,MAAM,IAAIC,MAAM,oEAcpB,OAXA,IAAMC,WAAU,WAMZ,OALO,OAAPJ,QAAO,IAAPA,KAASK,aAAaN,EAAI,CACtBO,QAASR,EACTS,YAAY,IAGT,WACI,OAAPP,QAAO,IAAPA,KAASQ,cAAcT,EAC3B,CACJ,GAAG,CAACA,EAAIC,EAASF,IAEV,IACX,EAEaW,EAAkB,IAAOC,IAAG,oEAAV,CAAU,+HAK5BC,EAAe,IAAOC,KAAI,gEAAX,CAAW,6EAI1BC,EAAc,YAAO,KAAO,gEAAd,CAAc,6TAQ5BC,EAAwC,SAAC,GAAE,IAAAhB,EAAA,EAAAA,SAAUiB,EAAA,EAAAA,UAAW,0CACzE,OACI,kBAACF,EAAW,aAACG,MAAM,UAAUD,UAAWA,GAAeE,GAClDnB,EAGb,C,mCChCA,kCAAO,IAAMoB,EAAc,CAAC,EAEtBC,EAAWC,SAASC,cAAc,iCACxC,GAAIF,EAAU,CACV,IAAMG,EAAOH,EAASI,UACtBC,OAAOC,OAAOP,EAAaQ,KAAKC,MAAML,G,MAGtCE,OAAOC,OAAOP,EAAa,CACvBU,MAAO,CAAEC,OAAQ,GAAIC,SAAU,GAAIC,SAAU,IAC7CC,YAAa,CAAEC,mBAAoB,IACnCC,OAAQ,CAAEC,OAAQ,IAClBC,mBAAoB,CAAEC,OAAQ,IAC9BC,OAAQ,CAAEH,OAAQ,gDAItBjB,EAAYqB,iBACZ,IAA0BrB,EAAYqB,eAAiB,I,uFCC9CC,EAAgB,IAnC7B,WAWI,wBATA,KAAAC,SAAWC,UAAUC,OAOrB,KAAAC,0BAA4B,EAGxBC,OAAOC,iBAAiB,WAAW,WAC/B,EAAKL,UAAW,CACpB,IACAI,OAAOC,iBACH,SACA,iBAAO,YAAY,WACf,EAAKL,UAAW,EAChB,EAAKG,0BAA4B,CACrC,IAER,CAWJ,OARI,YAAAG,WAAA,WADA,WAEI,OAAIC,KAAKP,SACEQ,QAAQC,WAGnBF,KAAKJ,4BACE,gBAAK,WAAM,SAAKH,QAAL,IACtB,EA9BA,aADC,c,+BAQD,aADC,c,gDAiBD,aADC,SAAOU,O,+BASZ,C,CAjCA,G,mCCLA,sCAAIC,EAAS,EACN,SAASC,IACZ,MAAO,MAAMD,GACjB,C,mNCWaE,EAA4B,IAAMC,cAC3C,MAOEC,EAAW,CACbC,QAAS,CAAEC,OAAQ,EAAGC,QAAS,KAC/BC,OAAQ,CAAEF,OAAQ,EAAGC,QAAS,IAG5BE,EAAoB,IAAOnD,IAAG,qEAAV,CAAU,iqBAkB9BoD,EAAgB,YAAO,IAAOpD,KAAI,kEAAlB,CAAkB,ueAc3BqD,EAA4D,aAAS,SAAC,G,IAAEC,EAAA,EAAAA,GACzEC,EAAA,EAAAA,UAAWzD,EAAA,EAAAA,cACnB,OACI,kBAACqD,EAAiB,KACbI,EAAUC,KAAI,SAAAC,GAAK,OAChB,kBAACL,EAAa,CAACM,QAAQ,SAASC,QAAQ,UAAUb,SAAUA,EAAUc,IAAKH,EAAEpE,IACzE,kBAACwE,EAAY,CACTD,IAAKH,EAAEpE,GACPA,GAAIoE,EAAEpE,GACNyE,OAAQL,EAAEK,OACVC,UAAWjE,IANH,IAYhC,IAQM+D,EAAgD,SAAC,G,IAAExE,EAAA,EAAAA,GAAIyE,EAAA,EAAAA,OAAQC,EAAA,EAAAA,UACzDnE,EAAA,EAAAA,QAASC,EAAA,EAAAA,WACjB,qBAAU,WACN,IAAIA,EAAJ,CAGA,IAAMmE,EAAU7B,OAAO8B,WAAWnE,EA7ET,KA8EzB,OAAO,WACCkE,GACA7B,OAAO+B,aAAaF,EAE5B,C,CACJ,GAAG,CAACF,EAAOjE,aAEX,IAAMC,EAAgB,WACd,IAAWiE,IACXA,EAAU1E,EAElB,EAEA,OACI,kBAAC,IAAe,KACQ,kBAAZO,EAAuB,kBAAC,IAAY,KAAEA,GAA0BA,EACxE,kBAACuE,EAAmB,CAACC,QAAStE,IAG1C,EAEMuE,EAAc,YAAO,KAAO,gEAAd,CAAc,yOAO5BF,EAA0E,SAAC,G,IAAEC,EAAA,EAAAA,QAC/E,OACI,kBAACC,EAAW,CACR/D,MAAM,UACNgE,QAAQ,iBACRC,SAAS,EACTC,YAAY,QACZC,QAASL,GAET,kBAAC,IAAO,CAACM,KAAM,IAAWC,KAAK,OAG3C,C,8KC5GMC,EAA4B,WAC9B,OAAAzC,OAAO0C,QAAQC,aAAa,CAAC,EAAGpE,SAASqE,MAAO5C,OAAO6C,SAASC,SAAhE,EAESC,EAAe,IAAMrC,cAAmC,MACxDsC,EAAW,WAAM,4BAAWD,EAAX,EACjBE,EAAgB,SAAC,GAC1B,IAAAhG,EAAA,EAAAA,SACA,IAAAiG,0BAAA,IAAqB,EAArB,IACA,mDAEM,wCAACC,EAAA,KAAiBC,EAAA,KAClB,sCAACC,EAAA,KAAMC,EAAA,KACP,sCAACC,EAAA,KAAaC,EAAA,KACd,wCAACC,EAAA,KAASC,EAAA,KAEhB,qBAAU,WACN,IAAYC,UAAUJ,GACtB,IAAYJ,gBAAkBA,CAClC,GAAG,CAACA,IAEJ,IAAMS,EAAqB,IAAIxD,SAAQ,WAAM,IAgB7C,qBAAU,WACY,6C,wEACQ,SAAM,IAAkByD,I,cAAxCC,EAAgB,SACtBN,EAASM,GAEL9D,OAAO6C,SAASkB,OAAOC,SAAS,SACjB,GAAMF,EAAcG,0BADnC,M,OACMC,EAAS,SACfhB,EAAmBgB,G,iBAGF,SAAMJ,EAAcX,mB,cAAnCgB,EAAe,SAErBf,EAAmBe,GAEfA,EACiB,GAAML,EAAcM,WADrC,M,OACMC,EAAW,SACjB,IAAUC,eAAeD,GACzBf,EAAQe,G,wBAGZX,GAAW,G,WAEHa,MAAM,IACtB,GAAG,IAWH,OACI,kBAACxB,EAAayB,SAAQ,CAClBC,MAAO,CACHtB,gBAAe,EACfE,KAAI,EACJI,QAAO,EACPQ,uBAfmB,+D,oEAEZ,OADfP,GAAW,GACI,GAAMH,EAAaU,0B,OACb,OADfC,EAAS,SACM,GAAMX,EAAaa,W,OAIxC,OAJMM,EAAe,SACrBhB,GAAW,GACXN,GAAmB,GACnBE,EAAQoB,GACD,CAAP,EAAOR,G,QASCS,iBAvDa,SAAOC,GAAsC,oD,yEAC9DrB,EACc,GAAMA,EAAYoB,iBAAiBC,IADjD,M,OAEA,OADMC,EAAQ,UAMP,CAAP,EAAOA,IAJHzB,GAAmB,GACnBpD,OAAO6C,SAASiC,SACT,CAAP,EAAOlB,I,OAIX,MAAO,CAAP,OAAOmB,G,QA8CHC,iBAAkB,SAACJ,GACf,OAAArB,EAAayB,iBAAiBJ,EAA9B,EACJK,kBAAmB,SAACL,GAA4B,OAAArB,EAAa0B,kBAAkBL,EAA/B,EAChDM,OAAQ,SAACN,GAAiC,OAAArB,EAAa2B,OAAON,EAApB,IAG7C3H,EAGb,C,uJCvGMkI,EAAQ,YAAY,eAEpBC,EAAgC,CAAC,gBAAiB,oBAEjD,SAASC,EAAiB1D,GAC7B,GAAKA,EAAL,CAGQ,IAAAvC,EAAA,cAAAA,mBAEHA,IAIL,cAAYkG,iBAAkB,CAC1BlG,mBAAkB,EAClBmG,iCAAkCH,IAGtCjG,YAAYqG,MAAMC,MAAK,WACnBtG,YAAYhC,QAAQuI,yBAAwB,SAAAC,GAExC,GAC+B,yBAA3BA,EAASC,KAAKC,UACdT,EAA8BpB,SAAS2B,EAASC,KAAKE,SAASC,QAE9D,OAAO,EAGX,GAA+B,kBAA3BJ,EAASC,KAAKC,SAA8B,CACpC,IAAAG,EAAA,gBAAAA,WACR,GAAIA,aAAsBC,MAGtB,OAAOD,EAAWE,MAAK,SAAA5E,GAAK,OAAAA,EAAE6E,YAAF,G,CAWpC,OANAhB,GACI,SAAAiB,GACI,OAAAA,EAAG,mCAA2D,KAE9D,MAFMT,EAASU,KAAKC,OAAOX,EAASU,KAAKE,YAAY,KAAO,GACxDZ,EAASC,KAAKE,SADlB,KAID,CACX,GACJ,IAEA,wCAA8BvB,MAAM,K,CACxC,CAEO,SAASiC,IACZ,OAAO,aACX,C,0GCxDMC,E,KAAU,EAAO5I,IAAG,2DAAV,CAAU,qaAYb6I,EAAiB,WAC1B,OACI,kBAACD,EAAO,KACJ,kBAAC,IAAO,CAACE,MAAO,IAG5B,C,sBCtBAC,EAAOC,QAAU,IAA0B,sC,mCCA5B,QAA0B,qC,mCCAzC,kCAAO,IAAMC,EAAa,SAACC,EAAeC,EAAkBC,GACxD,OAAc,IAAVF,EACO,KAAKC,EAEFD,EAAK,IAAIE,CAE3B,C,uFCkBaC,EAAc,IArB3B,wBAEI,KAAA/D,iBAAkB,EAGV,KAAAgE,YAAkCpC,CAc9C,QAZU,YAAAJ,iBAAN,W,qHACQxE,KAAKgH,OACE,GAAMhH,KAAKgH,OAAOxC,oBADzB,M,OACA,MAAO,CAAP,EAAO,U,OAEP,MAAO,CAAP,OAAOI,G,QAKf,YAAApB,UAAA,SAAUwD,GACNhH,KAAKgH,OAASA,CAClB,EAhBA,aADC,c,sCAID,aADC,c,6BAYD,aADC,SAAO7G,O,8BAIZ,C,CAnBA,G,mCCHA,sDAEa8G,EAAe,WAAM,OAC9B,0BACIC,KAAK,8FACLC,IAAI,cAHsB,C,sGCE5BnC,EAAQ,YAAY,sBAE1B,0BACqB,KAAAoC,aAAe,aAAWlG,IAA4B,GAAI,CAAEmG,MAAM,GAsBvF,QAnBI,sBAAI,wBAAS,C,IAAb,WACI,OAAO,YAAIrH,KAAKoH,aAAaE,WAAWpG,KAAI,SAAC,G,IAAA,mBAAiB,OAAGnE,GAAnB,KAAuByE,OAAnB,KAAY,GAClE,E,gCAGA,YAAAnE,aAAA,SAAaN,EAAYyE,GAChBxB,KAAKoH,aAAaG,IAAIxK,GAIvBiI,GAAM,SAAAiB,GAAO,OAAAA,EAAG,0DAAmB,MAAFlJ,EAApB,KAHbiI,GAAM,SAAAiB,GAAO,OAAAA,EAAG,wCAAU,MAAFlJ,EAAX,IACbiD,KAAKoH,aAAaI,IAAIzK,EAAIyE,GAIlC,EAGA,YAAAhE,cAAA,SAAcT,GACViI,GAAM,SAAAiB,GAAO,OAAAA,EAAG,4CAAY,MAAFlJ,EAAb,IACbiD,KAAKoH,aAAaK,OAAO1K,EAC7B,EAlBA,aADC,Y,8BAMD,aADC,SAAOoD,O,iCAWR,aADC,SAAOA,O,kCAKZ,C,CAvBA,E,oICHa,EAAQ,YAAO,KAAgB,yDAAvB,CAAuB,uyC,sGCuBtCuH,EAAc,IAAOhK,IAAG,gEAAV,CAAU,uYAWxBiK,EAAc,IAAOjK,IAAG,gEAAV,CAAU,iLAOjBkK,EAAgB,YAAOC,EAAA,GAAO,iEAAd,CAAc,2IAKrCC,EAAU,IAAOC,IAAG,4DAAV,CAAU,yEAIbC,EAA8C,SAAC,G,IACxD,IAAAC,kBACAC,EAAA,EAAAA,SACAC,EAAA,EAAAA,QACAC,EAAA,EAAAA,WACAC,EAAA,EAAAA,WAEMzJ,EAAQ,cAGN0J,EADA,cAAAC,OACAD,OAER,OACI,kBAACZ,EAAW,KACR,kBAACC,EAAW,CAAC5J,UAAU,aACnB,kBAAC,IAAI,CAACyK,GAAG,eAAezK,UAAU,QAC9B,kBAAC+J,EAAO,CAACW,IAAK,OAEjBJ,GAAcH,EACX,kBAAC,EAAK,CAACQ,KAAK,SAASC,YAAY,SAASC,SAAUV,IAEpD,yBAAKnK,UAAU,gBAEnB,kBAAC6J,EAAa,CACV5J,MAAM,UACNmE,QAASgG,EACTU,SAAUT,EACVnG,SAAS,GAERmG,EAAa,kBAACU,EAAA,EAAO,MAAM,kBAACC,EAAA,EAAO,CAAC1G,KAAK,KAAKD,KAAM,OAGzD,kBAAC4G,EAAA,EAAoB,KACjB,kBAACC,EAAA,EAAc,CACXhH,SAAS,EACTjE,MAAM,UACND,UAAU,OAAM,cACJ,YAEZ,kBAACgL,EAAA,EAAO,CAAC3G,KAAM,IAAUC,KAAK,QAElC,kBAAC6G,EAAA,EAAY,CAACC,OAAO,GACjB,kBAACC,EAAA,EAAY,CAACC,IAAK,IAAMb,GAAI,eAAY,QAGzC,kBAACY,EAAA,EAAY,CAACE,SAAS,IACvB,kBAACF,EAAA,EAAY,CAACC,IAAK,IAAMb,GAAI,YAAiBF,IAAO,oBAGpDiB,EACD,kBAACH,EAAA,EAAY,CAACE,SAAS,IACvB,kBAACF,EAAA,EAAY,CAACjH,QA3CnB,WAAM,OAAAvD,EAAMmG,QAAN,GA2C4B,aAMrD,C,mCCzGA,oEAKA,IAmBayE,EAAa,SAAChI,GAClBiI,OAAUjI,EAAOtC,OAAOC,SAG7BsK,MAAM,SAAUjI,EAAOtC,OAAOC,QAC9BsK,MAAM,wBAAwB,GAC9BA,MAAM,oCAAqC,CAAC,qBAC5CA,MAAM,UAAW,CAAEC,sBAAsB,IACzCD,MAAM,gBAAgB,SAACE,GAEnB,IAAMC,EAAU,gBAMhB,OAnCkB,SAACD,EAAcE,GAGjCF,aAAmBnL,QACnBmL,EAAQG,mBAAmBtL,QAC3BmL,EAAQG,QAAQC,uBAAuBjE,OAEvC6D,EAAQG,QAAQC,YAAYC,SAAQ,SAACC,GAE7BA,aAAazL,QACbyL,EAAEC,sBAAsB1L,QACK,kBAAtByL,EAAEC,WAAWC,MAEpBN,EAASI,EAAEC,WAEnB,GAER,CAaQE,CAAkBT,GAAS,SAAClE,GACpBA,EAAK0E,MAAQP,EAAQS,KAAK5E,EAAK0E,QAC/B1E,EAAK0E,KAAO,cAEpB,IACOR,CACX,IACJ,EAKaW,EAAgB,SAACpH,GAEtBuG,OAASvG,GAAQA,EAAKqH,OAASrH,EAAKsH,KACpCf,MAAM,UAAW,CACbgB,WAAYvH,EAAKsH,IACjBE,aAAa,EACbH,MAAOrH,EAAKqH,MACZI,SAAUzH,EAAKgD,MAG3B,C,mCC9De,QAA0B,qC,mCCAzC,kCAEO,IAAM0E,EAAwBC,OAAO,kB,mCCF5C,gEAIMC,EAAiC,CACnC,IAAqBC,WACrB,IAAqBC,aACrB,IAAqBC,UAGZC,EAAY,CACrB/G,eAAA,SAAejB,GACX,YAAcA,GACVA,EACA,cAAiBiI,4BAA4BjI,EAAKsH,KAElD,cAAiBY,+BAEzB,EACAC,eAAA,SAAeC,EAAoBC,GAC/B,IAAMC,EAAiB,YAAkBF,GAErCE,GAAkBV,EAA+BjH,SAAS2H,GAC1D,cAAiBH,eACbC,OACA1G,EACA2G,OACA3G,EACA,IAKR6E,MAAM,OAAQ,CAAE6B,MAAK,EAAEC,WAAU,IACjC,cAAiBF,eAAeC,OAAO1G,EAAW2G,GACtD,E,kGCGSE,EAAc,SAACC,GACxB,IAAMC,EAAK,IAAM,SAASD,GAEpBE,EAAgB,SAACC,GACdF,EAAGG,SAIRD,GAAW,SAACE,G,IAAgC,wDACxC,IAAMC,EAAUD,EAASE,KAAK,MAC9BN,EAAE,0BAACK,GAAYE,GACnB,GACJ,EAKA,OAHAN,EAAcE,QAAU,WAAM,OAAAH,EAAGG,OAAH,EAC9BF,EAAcO,OAAS,SAACC,GACpB,OAAAX,EAAY,CAACC,EAAWU,GAAmBH,KAAK,KAAhD,EACGL,CACX,C,scChDA,IAyJaS,EAAc,IAzJ3B,YACI,WAAqBC,GAArB,MACI,cAAO,K,OADU,EAAAA,6B,CAErB,CAoJJ,OAvJyB,YAAAC,EAAA,GAKrB,YAAAC,cAAA,SACIC,EACAC,EACAC,GAHJ,WAKY,IAAAC,QAAwBC,EAAA,EAAAA,OAAQ,sCAClCD,EAAU,IAAIE,QAAQC,GAAiB,CAAC,GAC9CH,EAAQpF,IAAI,mBAAoB,kBAEhC,IAAMwF,EAAa,IAAIC,gBACfC,EAAA,EAAAA,OAEFC,EAAW,wC,wEACb,SAAM,IAAcpN,c,OAGpB,OAHA,SAGA,GAAMC,KAAKsM,2BAA2BM,I,OAAtC,S,iBAIe,O,sBAAA,GAAM/M,OAAOuN,MAAMV,EAAK,yBAC/BW,YAAa,cACbH,OAAM,EACNL,OAAM,GACHS,GAAU,CACbV,QAAO,M,cALXW,EAAW,S,aAQX,M,WAAM,IAAI,IAAW,IAAqBvC,aAAc,gBAAiB,CACrEyB,WAAU,EACVe,OAAQ,EACRd,IAAG,EACHG,OAAM,EACNY,kBAAmB,EAAGzB,U,OAM9B,IAFQwB,EAAWD,EAAQ,SAEb,IAOV,OANMG,EAAkC,CACpCjB,WAAU,EACVe,OAAM,EACNd,IAAG,EACHG,OAAM,GAEFW,GACJ,KAAK,IAED,MACJ,KAAK,IACD,MAAM,IAAI,IACN,IAAqBG,gBACrB,kBACAD,GAGR,KAAK,IAED,MAAM,IAAI,IAAW,IAAqBzC,SAAU,YAAayC,GAErE,QAOI,MANI,uKAAYxQ,SACZqQ,EAASK,OAAOC,MAAK,SAAAD,GACjB/N,OAAOiO,KAAKC,IAAIC,gBAAgBJ,GACpC,GAAG,KAGD,IAAI,IACN,IAAqBK,oBACrB,wBACAP,GAMhB,MAAO,CAAP,EAAOH,G,OAKX,OAFAJ,EAAQe,OAAS,WAAM,OAAAlB,EAAWmB,OAAX,EAEhBhB,CACX,EAEA,YAAAC,MAAA,SAASX,EAAoBC,EAAaC,GAA1C,WACUyB,EAAkBpO,KAAKwM,cAAcC,EAAYC,EAAKC,GACtDQ,EAAW,wC,0EAEI,OADTN,EAAWF,EAAI,OACN,GAAMyB,G,OAGvB,GAHMb,EAAW,SACTC,EAAWD,EAAQ,SACrBc,EAAcd,EAASX,QAAQ0B,IAAI,mBACpBD,EAAYxK,SAAS,oBACtC,MAAO,CAAP,EAAO,M,iBAGA,O,sBAAA,GAAM0J,EAASjP,Q,OAAtB,MAAO,CAAP,EAAO,U,OAEP,M,WAAM,IAAI,IACN,IAAqBiQ,iBACrB,EAAGvC,SAAW,qBACd,CACIS,WAAU,EACVe,OAAM,EACNd,IAAG,EACHG,OAAM,I,wBAQtB,OAFAM,EAAQe,OAAS,WAAM,OAAAE,EAAgBF,QAAUE,EAAgBF,QAA1C,EAEhBf,CACX,EAEA,YAAAqB,mBAAA,SAAmB/I,GACf,IAAMkH,EAAoB,CAAEE,OAAQ,QAOpC,OAJAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBACjCmF,EAAK8B,KAAO/P,KAAKgQ,UAAUjJ,GAEpBzF,KAAKoN,MAAM,gCAAiC,8BAA+BT,EACtF,EAEA,YAAAgC,cAAA,WACI,IAAMhC,EAAoB,CAAEE,OAAQ,OAKpC,OAHAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBAE1BxH,KAAKwM,cAAc,yBAA0B,6BAA8BG,EACtF,EAEA,YAAAiC,iBAAA,SAAiBC,GACb,IAAMlC,EAAoB,CAAEE,OAAQ,QAOpC,OAJAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBACjCmF,EAAK8B,KAAO/P,KAAKgQ,UAAUG,GAEpB7O,KAAKwM,cAAc,iBAAkB,qBAAsBG,EACtE,EACJ,EAvJA,CAAyB,KAyJE,EAAQ,SAAMC,GAAO,oD,kEAC9B,SAAM,IAAYpI,oB,cAA1BE,EAAQ,WAEVkI,EAAQpF,IAAI,gBAAiB,UAAU9C,G,sMC9JxC,SAASoK,EACZC,EACAC,GAFJ,WAII,OAAO,YACiB,mB,qEACHC,EAAmBF,EAAMC,I,OAAtC,MAAO,CAAP,Y,eAGZ,CAEO,SAAeC,EAClBF,EACAC,G,sHAGiB,OADXE,ECdCC,KAAKC,OAAOC,aAAY,MAAnBD,OAAM,YAAiB,IAAO,KAAM,OAC3CE,QAAQ,MAAO,KACfA,QAAQ,MAAO,KACfC,UAAU,EAAG,IDYD,GAAMP,EAAmBE,I,OAC1C,OADM3B,EAAW,SACjB,GAAMiC,EAAkBjC,EAASkC,UAAWV,EAAcG,I,OAC1D,OADA,SACO,CAAP,EAAOA,G,OAGX,IAAMM,EAAoB,SAACE,EAA+B9B,EAAYsB,GAClE,IAAMS,EAAW,YAAY,IAAIC,EAAA,GAE3BC,EAAU,IAAI5C,EAAA,EAIdE,EAFa,IAAI,IAAgBuC,EAAuBC,GAEnCG,WAAWlC,EAAM,CACxCmC,YAAaF,EAAQ3C,OACrB8C,gBAAiB,CACbC,gBAAiBrC,EAAKlF,MAE1BwH,SAAUhB,EAAS,CAAEA,OAAM,QAAKtK,EAChCuL,kBAAmB,MAQvB,OALA3R,OAAOC,OAAO0O,EAAS,CACnBe,OAAQ,WACJ2B,EAAQ1B,OACZ,IAEGhB,CACX,C,sDEjDA,qVA4CMiD,EAAQ,CACVC,WAAY,UACZC,aAAc,UACdC,kBAAmB,UACnBC,UAAW,OACXC,UAAW,UACXC,eAAgB,UAChBC,mBAAoB,UACpBC,eAAgB,UAChBC,aAAc,OACdC,0BAA2B,UAC3BC,oBAAqB,OACrBC,kBAAmB,UACnBC,YAAa,QAGJC,EAAwD,CACjEC,GAAIf,EACJgB,EAAG,CACCf,WAAY,UACZC,aAAc,UACdC,kBAAmB,UACnBC,UAAW,OACXC,UAAW,UACXC,eAAgB,UAChBC,mBAAoB,UACpBC,eAAgB,UAChBC,aAAc,UACdC,0BAA2B,UAC3BC,oBAAqB,OACrBC,kBAAmB,UACnBC,YAAa,QAEjBI,MAAO,CACHhB,WAAY,UACZC,aAAc,UACdC,kBAAmB,UACnBC,UAAW,OACXC,UAAW,UACXC,eAAgB,UAChBC,mBAAoB,UACpBC,eAAgB,OAChBC,aAAc,OACdC,0BAA2B,UAC3BC,oBAAqB,OACrBC,kBAAmB,UACnBC,YAAa,WAEjBK,OAAQ,CACJjB,WAAY,UACZC,aAAc,UACdC,kBAAmB,UACnBC,UAAW,OACXC,UAAW,UACXC,eAAgB,UAChBC,mBAAoB,UACpBC,eAAgB,OAChBC,aAAc,OACdC,0BAA2B,UAC3BC,oBAAqB,UACrBC,kBAAmB,UACnBC,YAAa,OACbM,WAAY,KAEhBC,IAAK,CACDnB,WAAY,UACZC,aAAc,UACdC,kBAAmB,UACnBC,UAAW,OACXC,UAAW,UACXC,eAAgB,UAChBC,mBAAoB,UACpBC,eAAgB,OAChBC,aAAc,OACdC,0BAA2B,UAC3BC,oBAAqB,OACrBC,kBAAmB,UACnBC,YAAa,QAEjBQ,KAAMrB,EACNsB,QAAStB,EACTuB,aAAc,CACVtB,WAAY,UACZC,aAAc,UACdC,kBAAmB,UACnBC,UAAW,OACXC,UAAW,UACXC,eAAgB,UAChBC,mBAAoB,UACpBC,eAAgB,OAChBC,aAAc,OACdC,0BAA2B,UAC3BC,oBAAqB,UACrBC,kBAAmB,UACnBC,YAAa,OACbM,WAAY,MAIdK,EAAY,CACdC,KAAM,IACNC,YAAa,UACbC,aAAc,MACdC,WAAY,OACZC,YAAa,oBACbC,iBAAkB,wBAClBC,cAAe,WACfC,aAAc,WACdC,MAAO,OACPC,aAAc,UACdC,aAAc,UACdC,YAAa,WAGJC,EAAgB,SAACnK,GAC1B,GAAIA,KAAU4I,EACV,OAAO1S,OAAOC,OAAO,CAAC,EAAGmT,EAAWV,EAAS5I,GAIrD,EAQMoK,EAAiB,CACnBC,UAAW,gBACXC,KAAM,IACNC,iBAAkB,aAClBC,SAAU,iBAGRC,EAAmE,CACrE5B,GAAI,CACAwB,UAAW,eACXC,KAAM,IACNC,iBAAkB,aAClBC,SAAU,WAEd1B,EAAG,CACCuB,UAAW,eACXC,KAAM,IACNC,iBAAkB,IAClBC,SAAU,UAEdzB,MAAO,CACHsB,UAAW,GACXC,KAAM,IACNC,iBAAkB,GAClBC,SAAU,IAEdxB,OAAQ,CACJqB,UAAW,GACXC,KAAM,IACNC,iBAAkB,SAClBC,SAAU,eAEdtB,IAAK,CACDmB,UAAW,cACXC,KAAM,IACNE,SAAU,WACVD,iBAAkB,OAEtBpB,KAAMiB,EACNhB,QAASgB,EACTf,aAAc,CACVgB,UAAW,GACXC,KAAM,IACNC,iBAAkB,gBAClBC,SAAU,uBAILE,EAAgB,SAAC1K,GAC1B,OAAIA,GAAUA,KAAUyK,EACbA,EAAczK,GAGlB,CAAEqK,UAAW,GAAIC,KAAM,GAClC,EAEaK,EAAezU,OAAOC,OAAO,CAAC,EAAGmT,EAxMZ,CAC9BvB,WAAY,UACZC,aAAc,UACdC,kBAAmB,UACnBC,UAAW,OACXC,UAAW,UACXC,eAAgB,UAChBC,mBAAoB,UACpBC,eAAgB,UAChBC,aAAc,OACdC,0BAA2B,UAC3BC,oBAAqB,OACrBC,kBAAmB,UACnBC,YAAa,SA6LJiC,EAAe,IAAM3S,cAAckS,GAEnCU,EAAU3U,OAAO4U,KAAKL,E,wgBCtOtBM,EAAY,IAAO3V,IAAG,6DAAV,CAAU,iFAAoB,uDAS9C,SANH,SAAAO,GACE,OAAAA,EAAMqV,MACN,YAAG,gOADH,IAQKC,EAAO,IAAO7V,IAAG,yDAAV,CAAU,yOAEa,oIAA9B,SAAAO,GAAS,OAAAA,EAAMuV,MAAMhD,SAAZ,IAOTiD,EAAK,IAAO/V,IAAG,sDAAV,CAAU,oHACgB,uDAAzB,SAAAO,GAAS,OAAAA,EAAMuV,MAAM3B,IAAZ,IAKf6B,EAAO,IAAO3L,IAAG,wDAAV,CAAU,+JAGyB,YAAtC,SAAA9J,GAAS,OAAAA,EAAMuV,MAAMjC,YAAc,EAA1B,IAGboC,EAAI,IAAOC,EAAC,qDAAR,CAAQ,0FAC0B,iCAAlC,SAAA3V,GAAS,OAAAA,EAAMuV,MAAMrB,aAAZ,IAIb0B,EAAQ,IAAOD,EAAC,yDAAR,CAAQ,0FACqB,iCAAjC,SAAA3V,GAAS,OAAAA,EAAMuV,MAAMpB,YAAZ,IAIb0B,EAAQ,IAAOC,MAAK,0DAAZ,CAAY,gNAEkB,uBACP,sFAD3B,SAAA9V,GAAS,OAAAA,EAAMuV,MAAMrB,aAAZ,IACP,SAAAlU,GAAS,OAAAA,EAAMuV,MAAM3B,IAAZ,IAOfmC,EAAQ,IAAOC,MAAK,yDAAZ,CAAY,8SACa,yBACQ,iNAQA,iBATxC,SAAAhW,GAAS,OAAAA,EAAMuV,MAAMvB,WAAZ,IACF,SAAAhU,GAAS,OAAAA,EAAMuV,MAAMzB,YAAZ,IAQb,SAAA9T,GAAS,OAAAA,EAAMuV,MAAMtB,gBAAZ,IAIbgC,EAAe,IAAOC,OAAM,gEAAb,CAAa,suBAEU,4SAaI,qGAKK,qHAMA,iHAxB1C,SAAAlW,GAAS,OAAAA,EAAMuV,MAAMlD,YAAZ,IAaL,SAAArS,GAAS,OAAAA,EAAMuV,MAAMlD,YAAZ,IAKT,SAAArS,GAAS,OAAAA,EAAMuV,MAAMjD,iBAAZ,IAMT,SAAAtS,GAAS,OAAAA,EAAMuV,MAAMjD,iBAAZ,IAQlB6D,EAAmBF,EAAaG,cAAc,KAE9CC,EAAO,IAAOC,EAAC,yDAAR,CAAQ,8cAGe,uEAGQ,uBACP,oFAGG,iEAIS,qEAKJ,iBAhBvC,SAAAtW,GAAS,OAAAA,EAAMuV,MAAM/C,SAAZ,IAGL,SAAAxS,GAAS,OAAAA,EAAMuV,MAAMrB,aAAZ,IACP,SAAAlU,GAAS,OAAAA,EAAMuV,MAAM3B,IAAZ,IAGX,SAAA5T,GAAS,OAAAA,EAAMuV,MAAM/C,SAAZ,IAIL,SAAAxS,GAAS,OAAAA,EAAMuV,MAAM9C,cAAZ,IAKb,SAAAzS,GAAS,OAAAA,EAAMuV,MAAM9C,cAAZ,IAIb8D,EAAO,IAAOC,KAAI,wDAAX,CAAW,+BAElBC,EAAa,IAAOhX,IAAG,8DAAV,CAAU,8OACmB,yBACD,iBACV,qBACO,wGAH3B,SAAAO,GAAS,OAAAA,EAAMuV,MAAMnD,UAAZ,IACZ,SAAApS,GAAS,OAAAA,EAAMuV,MAAMzB,YAAZ,IACjB,SAAA9T,GAAS,OAAAA,EAAMuV,MAAMnD,UAAZ,IACL,SAAApS,GAAS,OAAAA,EAAMuV,MAAMrB,aAAZ,G,kCCtI1B,yFAEO,SAASwC,EAA4BC,EAAqBC,GAC7D,IAAMvQ,EAAQwQ,WAAWF,GACzB,OAAIG,MAAMzQ,GACC,GAEJ0Q,EAAkB1Q,EAAOuQ,EACpC,CAEO,SAASG,EAAkB1Q,EAAeuQ,GAgB7C,YAhB6C,IAAAA,MAAA,GAgBtC,KAWgB,kBAATI,MAAqBA,MAAQ,IAAWA,KAAKC,cAhBrD,GAAG5Q,EAAM6Q,oBAAevQ,EAAW,CACjCwQ,sBAAuBP,EACvBQ,sBAAuBR,IAEzB,GAAGvQ,EAAMgR,QAAQT,GAE3B,C,sjBC2MYU,E,SArNZ,0BA8MA,QA3MI,YAAAC,sBAAA,SAAsB/Q,GAClB,MAAO,IAAM,YAAsBA,EACvC,EAEA,YAAAgR,eAAA,SACIC,GAQA,IAAM/I,EAAoB,CAAEE,OAAQ,QAOpC,OAJAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBACjCmF,EAAK8B,KAAO/P,KAAKgQ,UAAUgH,GAEpB1V,KAAKoN,MAAM,iBAAkB,yBAA0BT,EAClE,EAEA,YAAAgJ,8BAAA,SAA8BlQ,GAC1B,IAAMkH,EAAoB,CAAEE,OAAQ,QAOpC,OAJAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBACjCmF,EAAK8B,KAAO/P,KAAKgQ,UAAUjJ,GAEpBzF,KAAKoN,MAAM,gCAAiC,8BAA+BT,EACtF,EAEA,YAAAiJ,qCAAA,SACIC,GAMA,IAAMlJ,EAAoB,CAAEE,OAAQ,QAOpC,OAJAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBACjCmF,EAAK8B,KAAO/P,KAAKgQ,UAAUmH,GAEpB7V,KAAKoN,MACR,uCACA,gDACAT,EAER,EAEA,YAAAmJ,kCAAA,SACIC,EACAC,EACAC,EACAC,GAGA,OAAOlW,KAAKoN,MACR,oCACA,8CAA8CpN,KAAKwV,sBAAsB,CACrEO,OAAM,EACNC,gBAAe,EACfC,KAAI,EACJC,SAAQ,IAPU,CAAErJ,OAAQ,OAWxC,EAEA,YAAAsJ,+CAAA,SACIJ,EACAC,EACAC,EACAC,GAGA,OAAOlW,KAAKoN,MACR,iDACA,2DAA2DpN,KAAKwV,sBAAsB,CAClFO,OAAM,EACNC,gBAAe,EACfC,KAAI,EACJC,SAAQ,IAPU,CAAErJ,OAAQ,OAWxC,EAEA,YAAAuJ,6BAAA,SAA6BJ,GAEzB,OAAOhW,KAAKoN,MACR,+BACA,yCAAyCpN,KAAKwV,sBAAsB,CAChEQ,gBAAe,IAJG,CAAEnJ,OAAQ,OAQxC,EAEA,YAAAwJ,gCAAA,SACIxH,GAMA,IAAMlC,EAAoB,CAAEE,OAAQ,QAOpC,OAJAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBACjCmF,EAAK8B,KAAO/P,KAAKgQ,UAAUG,GAEpB7O,KAAKoN,MACR,kCACA,kDACAT,EAER,EAEA,YAAA2J,gCAAA,SACIzH,GAEA,IAAMlC,EAAoB,CAAEE,OAAQ,QAOpC,OAJAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBACjCmF,EAAK8B,KAAO/P,KAAKgQ,UAAUG,GAEpB7O,KAAKoN,MACR,kCACA,sDACAT,EAER,EAEA,YAAA4J,kCAAA,SACIC,GAGA,OAAOxW,KAAKoN,MACR,oCACA,uDAAuDpN,KAAKwV,sBAAsB,CAC9EgB,iBAAgB,IAJE,CAAE3J,OAAQ,QAQxC,EAEA,YAAA4J,6BAAA,SAA6B5H,GACzB,IAAMlC,EAAoB,CAAEE,OAAQ,QAOpC,OAJAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBACjCmF,EAAK8B,KAAO/P,KAAKgQ,UAAUG,GAEpB7O,KAAKoN,MACR,+BACA,8CACAT,EAER,EAEA,YAAA+J,sBAAA,SACI7H,GAMA,IAAMlC,EAAoB,CAAEE,OAAQ,QAOpC,OAJAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBACjCmF,EAAK8B,KAAO/P,KAAKgQ,UAAUG,GAEpB7O,KAAKoN,MAAM,wBAAyB,uCAAwCT,EACvF,EAEA,YAAAgK,eAAA,SACIC,GAMA,IAAMjK,EAAoB,CAAEE,OAAQ,QAOpC,OAJAF,EAAKC,QAAU,IAAIE,QACnBH,EAAKC,QAAQpF,IAAI,eAAgB,oBACjCmF,EAAK8B,KAAO/P,KAAKgQ,UAAUkI,GAEpB5W,KAAKoN,MAAM,iBAAkB,yBAA0BT,EAClE,EACJ,EA9MA,IAqNA,SAAY4I,GACR,oBACA,gDACA,mDACH,CAJD,CAAYA,MAAuB,KAQ5B,IAQKsB,GAR2C,MAGlDtB,EAAwBuB,SAAU,UACnC,EAACvB,EAAwBwB,uBAAwB,wBACjD,EAACxB,EAAwByB,yBAA0B,2BAGvD,SAAYH,GACR,4CACA,4CACA,oEACA,0CACA,sDACA,4CACA,4CACA,8BACA,8CACA,sCACA,gDACA,sDACA,8CACA,oDACA,8CACA,sDACA,oDACA,gEACA,wEACA,oDACA,sDACA,sDACA,0CACA,4CACA,2CACH,CA1BD,CAAYA,MAAkB,KA8BvB,IAyEUI,EAcAC,EAkBAC,EAyCAC,EAyCLC,GA3LsC,MAEzCR,EAAmBS,qBAAsB,yBAC1C,EAACT,EAAmBU,qBAAsB,yBAC1C,EAACV,EAAmBW,iCAAkC,sCACtD,EAACX,EAAmBY,oBAAqB,wBACzC,EAACZ,EAAmBa,0BAA2B,8BAC/C,EAACb,EAAmBc,qBAAsB,yBAC1C,EAACd,EAAmBe,qBAAsB,yBAC1C,EAACf,EAAmBgB,cAAe,iBACnC,EAAChB,EAAmBiB,sBAAuB,0BAC3C,EAACjB,EAAmBkB,kBAAmB,sBACvC,EAAClB,EAAmBmB,uBAAwB,2BAC5C,EAACnB,EAAmBoB,0BAA2B,8BAC/C,EAACpB,EAAmBqB,sBAAuB,2BAC3C,EAACrB,EAAmBsB,yBAA0B,8BAC9C,EAACtB,EAAmBuB,sBAAuB,2BAC3C,EAACvB,EAAmBwB,0BAA2B,gCAC/C,EAACxB,EAAmByB,yBAA0B,8BAC9C,EAACzB,EAAmB0B,+BAAgC,qCACpD,EAAC1B,EAAmB2B,mCAAoC,yCACxD,EAAC3B,EAAmB4B,yBAA0B,sBAC9C,EAAC5B,EAAmB6B,0BAA2B,0BAC/C,EAAC7B,EAAmB8B,0BAA2B,0BAC/C,EAAC9B,EAAmB+B,oBAAqB,wBACzC,EAAC/B,EAAmBgC,qBAAsB,4BAC1C,EAAChC,EAAmBiC,qBAAsB,6BA+ClD,SAAiB7B,GACG,EAAA8B,WAAhB,SACItU,GAEA,MAAyB,kCAAlBA,EAAEuU,WACb,CACH,CAND,CAAiB/B,MAA6B,KAc9C,SAAiBC,GACG,EAAA6B,WAAhB,SACItU,GAEA,MAAyB,0BAAlBA,EAAEuU,WACb,CACH,CAND,CAAiB9B,MAAqB,KAkBtC,SAAiBC,GACG,EAAA4B,WAAhB,SACItU,GAEA,MAAyB,4BAAlBA,EAAEuU,WACb,CACH,CAND,CAAiB7B,MAAuB,KAyCxC,SAAiBC,GACG,EAAA2B,WAAhB,SACItU,GAEA,MAAyB,+BAAlBA,EAAEuU,WACb,CACH,CAND,CAAiB5B,MAA0B,KAyC3C,SAAYC,GACR,wCACA,wCACA,qCACH,CAJD,CAAYA,MAA8B,KAQnC,IAQK4B,GARkD,MAGzD5B,EAA+B6B,mBAAoB,oBACpD,EAAC7B,EAA+B8B,mBAAoB,oBACpD,EAAC9B,EAA+B+B,kBAAmB,oBAGvD,SAAYH,GACR,kBACA,oBACA,wCACA,gCACA,oCACA,YACA,wCACA,oDACA,wCACA,4BACA,wCACA,4BACA,8CACA,0CACA,0CACA,8CACA,gEACA,8CACA,kDACA,wDACA,wDACA,oEACA,mEACH,CAxBD,CAAYA,MAAS,KA4Bd,IAgCKI,GAhC6B,MACpCJ,EAAUK,QAAS,SACpB,EAACL,EAAUM,SAAU,UACrB,EAACN,EAAUO,mBAAoB,oBAC/B,EAACP,EAAUQ,eAAgB,gBAC3B,EAACR,EAAUS,iBAAkB,kBAC7B,EAACT,EAAUU,KAAM,MACjB,EAACV,EAAUW,mBAAoB,oBAC/B,EAACX,EAAUY,yBAA0B,0BACrC,EAACZ,EAAUa,mBAAoB,oBAC/B,EAACb,EAAUc,aAAc,cACzB,EAACd,EAAUe,mBAAoB,oBAC/B,EAACf,EAAUgB,aAAc,cACzB,EAAChB,EAAUiB,sBAAuB,uBAClC,EAACjB,EAAUkB,oBAAqB,qBAChC,EAAClB,EAAUmB,oBAAqB,qBAChC,EAACnB,EAAUoB,sBAAuB,uBAClC,EAACpB,EAAUqB,+BAAgC,gCAC3C,EAACrB,EAAUsB,sBAAuB,uBAClC,EAACtB,EAAUuB,wBAAyB,yBACpC,EAACvB,EAAUwB,2BAA4B,4BACvC,EAACxB,EAAUyB,2BAA4B,4BACvC,EAACzB,EAAU0B,iCAAkC,kCAC7C,EAAC1B,EAAU2B,iCAAkC,mCASjD,SAAYvB,GACR,kBACA,oCACA,wCACA,wCACA,wCACA,4CACA,wCACA,8CACA,kDACA,0CACA,kGACA,sBACA,wBACA,oDACA,oBACA,kCACA,sGACA,oDACA,8CACA,wDACA,wEACA,wDACA,wDACA,0CACA,oDACA,kDACA,wDACA,4CACA,0BACA,8BACA,yCACH,CAhCD,CAAYA,MAAgB,KAoCrB,IA2DKwB,GA3DoC,MAC3CxB,EAAiByB,QAAS,SAC3B,EAACzB,EAAiB0B,iBAAkB,kBACpC,EAAC1B,EAAiB2B,mBAAoB,oBACtC,EAAC3B,EAAiB4B,mBAAoB,oBACtC,EAAC5B,EAAiB6B,mBAAoB,oBACtC,EAAC7B,EAAiB8B,qBAAsB,sBACxC,EAAC9B,EAAiB+B,mBAAoB,oBACtC,EAAC/B,EAAiBgC,sBAAuB,uBACzC,EAAChC,EAAiBiC,wBAAyB,yBAC3C,EAACjC,EAAiBkC,oBAAqB,qBACvC,EAAClC,EAAiBmC,gDAAiD,iDACnE,EAACnC,EAAiBoC,UAAW,WAC7B,EAACpC,EAAiBqC,WAAY,YAC9B,EAACrC,EAAiBsC,yBAA0B,0BAC5C,EAACtC,EAAiBuC,SAAU,UAC5B,EAACvC,EAAiBwC,gBAAiB,iBACnC,EAACxC,EAAiByC,kDAAmD,mDACrE,EAACzC,EAAiB0C,yBAA0B,0BAC5C,EAAC1C,EAAiB2C,sBAAuB,uBACzC,EAAC3C,EAAiB4C,2BAA4B,4BAC9C,EAAC5C,EAAiB6C,mCAAoC,oCACtD,EAAC7C,EAAiB8C,2BAA4B,4BAC9C,EAAC9C,EAAiB+C,2BAA4B,4BAC9C,EAAC/C,EAAiBgD,oBAAqB,qBACvC,EAAChD,EAAiBiD,yBAA0B,0BAC5C,EAACjD,EAAiBkD,wBAAyB,yBAC3C,EAAClD,EAAiBmD,2BAA4B,4BAC9C,EAACnD,EAAiBoD,qBAAsB,sBACxC,EAACpD,EAAiBqD,YAAa,aAC/B,EAACrD,EAAiBsD,cAAe,eACjC,EAACtD,EAAiBuD,oBAAqB,sBA4B3C,SAAY/B,GACR,gBACA,wBACA,qCACH,CAJD,CAAYA,MAAQ,KAQb,IAeKgC,GAf4B,MACnChC,EAASiC,OAAQ,QAClB,EAACjC,EAASkC,WAAY,YACtB,EAAClC,EAASmC,kBAAmB,oBAYjC,SAAYH,GACR,4BACA,sBACA,0CACA,4BACA,oCACA,8BACA,mCACH,CARD,CAAYA,MAA0B,KAY/B,IAiBUI,EAaAC,EAaLC,GA3C8C,MAGrDN,EAA2BO,aAAc,cAC1C,EAACP,EAA2BQ,UAAW,WACvC,EAACR,EAA2BS,oBAAqB,qBACjD,EAACT,EAA2BU,aAAc,cAC1C,EAACV,EAA2BW,iBAAkB,kBAC9C,EAACX,EAA2BY,cAAe,eAC3C,EAACZ,EAA2Ba,iBAAkB,mBAQlD,SAAiBT,GACG,EAAAlE,WAAhB,SACItU,GAEA,MAAyB,yBAAlBA,EAAEuU,WACb,CACH,CAND,CAAiBiE,MAAoB,KAarC,SAAiBC,GACG,EAAAnE,WAAhB,SACItU,GAEA,MAAyB,6BAAlBA,EAAEuU,WACb,CACH,CAND,CAAiBkE,MAAwB,KAazC,SAAYC,GACR,oBACA,4BACA,4BACA,QACA,gBACA,kBACA,WACH,CARD,CAAYA,MAAkB,KAYvB,IA6BKQ,GA7BsC,MAEzCR,EAAmBS,SAAU,UAC9B,EAACT,EAAmBU,aAAc,cAClC,EAACV,EAAmBW,aAAc,cAClC,EAACX,EAAmBY,GAAI,IACxB,EAACZ,EAAmBa,OAAQ,QAC5B,EAACb,EAAmBc,QAAS,SAC7B,EAACd,EAAmBe,KAAM,OAqBlC,SAAYP,GACR,0CACA,kDACA,iDACH,CAJD,CAAYA,MAAqB,MAQoB,MAGhDA,EAAsBQ,oBAAqB,qBAC5C,EAACR,EAAsBS,wBAAyB,yBAChD,EAACT,EAAsBU,wBAAyB,wB,sBC7vBpD5X,EAAOC,QAAU,CAAC,C,8ICKZ4X,EAAiB,IAAO5gB,IAAG,mEAAV,CAAU,mQAQ3B6gB,EAAY,YAAO,KAAK,6DAAZ,CAAY,2mBAKsB,0GAMxC,4PANQ,SAAC,GAAc,OAAZ,EAAA/K,MAAkB1B,WAAN,GAM3B,KAeF0M,EAAkB,YAAOD,GAAU,mEAAjB,CAAiB,2GAY5BE,EAAoC,SAAC,G,IAAEzd,EAAA,EAAAA,GAC1C,gBAAEuH,EAAA,EAAAA,OAAQmW,EAAA,EAAAA,KACRpW,EAAA,EAAAA,OAMR,OAJA,qBAAU,WACNtH,EAAG2d,UAAYrW,CACnB,GAAG,CAACA,IAGA,kBAACgW,EAAc,KACV,IAAQpd,KAAI,SAACI,GACV,GAAY,YAARA,GAA6B,SAARA,EACrB,OAAO,KAEX,IAAMsd,EAAU,YAActd,GAC9B,OAAKsd,EAGEtd,IAAQgH,EACX,kBAACkW,EAAe,CAAChW,GAAI,YAAakW,GAAOpd,IAAKA,GAC1C,kBAAC,IAAI,CAACmH,IAAKmW,EAAQhM,QAGvB,kBAAC2L,EAAS,CAAC/V,GAAI,YAAakW,EAAM,CAAEpW,OAAQhH,IAAQA,IAAKA,GACrD,kBAAC,IAAI,CAACmH,IAAKmW,EAAQhM,QARhB,IAWf,IAGZ,C,+LC7EA,SAASiM,EAAWC,GAkBhB,OAjBetgB,OAAOugB,OAClB,IACID,EACA,6BACA,8BACA,6BACA,2BACA,yBACA,6BACA,yBACA,uBACA,qBACA,2BAKM/Y,MAAK,SAAAiZ,GAAO,QAAEA,CAAF,GAC9B,CAEA,SAASC,EAAaC,EAAcC,EAAsBjZ,GACtD,IAAMkZ,EAAM,IAAQ,CAACF,EAAMC,IAAelT,KAAK,KAE/C,OAAO,IAAQ,CAACmT,EAAKlZ,IAAO+F,KAAK,IACrC,CAEA,SAASoT,EAAeC,EAAgBC,EAAYC,GAChD,OAAID,EACO,MAAMA,EACNC,EACA,eAAeA,EAEfF,CAEf,CAEA,SAASG,EAAWC,EAAcC,GAC9B,OAAO,IAAQ,CAACD,EAAMC,IAAW1T,KAAK,IAC1C,CAEO,ICZK2T,ECqDCC,EAA2C,CACpD,CAAC,aAAc,GACf,CAAC,UAAW,GACZ,CAAC,mBAAoB,GACrB,CAAC,MAAO,IACR,CAAC,eAAgB,GACjB,CAAC,eAAgB,GACjB,CAAC,eAAgB,GACjB,CAAC,oBAAqB,GACtB,CAAC,OAAQ,IACT,CAAC,QAAS,IACV,CAAC,WAAY,IACb,CAAC,qBAAsB,GACvB,CAAC,uBAAwB,IACzB,CAAC,0BAA2B,IAC5B,CAAC,sBAAuB,GACxB,CAAC,eAAgB,GACjB,CAAC,gCAAiC,GAClC,CAAC,8BAA+B,IAChC,CAAC,iCAAkC,GACnC,CAAC,8BAA+B,GAChC,CAAC,4BAA6B,IAC9B,CAAC,0BAA2B,GAC5B,CAAC,wBAAyB,IAC1B,CAAC,sBAAuB,IACxB,CAAC,0BAA2B,GAC5B,CAAC,6BAA8B,IAC/B,CAAC,8BAA+B,GAChC,CAAC,6BAA8B,GAC/B,CAAC,2BAA4B,IAC7B,CAAC,yBAA0B,GAC3B,CAAC,6BAA8B,GAC/B,CAAC,yBAA0B,GAC3B,CAAC,uBAAwB,IACzB,CAAC,qBAAsB,IACvB,CAAC,yBAA0B,GAC3B,CAAC,gBAAiB,GAClB,CAAC,kBAAmB,GACpB,CAAC,eAAgB,GACjB,CAAC,wBAAyB,GAC1B,CAAC,2BAA4B,GAC7B,CAAC,qBAAsB,GACvB,CAAC,oBAAqB,GACtB,CAAC,cAAe,GAChB,CAAC,8BAA+B,GAChC,CAAC,8BAA+B,GAChC,CAAC,oBAAqB,GACtB,CAAC,aAAc,GACf,CAAC,eAAgB,GACjB,CAAC,WAAY,GACb,CAAC,YAAa,GACd,CAAC,eAAgB,GACjB,CAAC,4BAA6B,GAC9B,CAAC,8BAA+B,GAChC,CAAC,gCAAiC,GAClC,CAAC,yBAA0B,GAC3B,CAAC,4BAA6B,GAC9B,CAAC,8BAA+B,GAChC,CAAC,gCAAiC,GAClC,CAAC,eAAgB,GACjB,CAAC,kBAAmB,GACpB,CAAC,yBAA0B,GAC3B,CAAC,qBAAsB,GACvB,CAAC,iCAAkC,GACnC,CAAC,mCAAoC,GACrC,CAAC,kCAAmC,GACpC,CAAC,kBAAmB,KAGXC,EAAgBD,EAAOE,QAAO,SAACC,EAAO,GAAmB,OAAAA,EAAnB,iBAAG,EAAgB,GAAoB,GAE7EC,EAAY,SAACC,GACtB,IAAMC,EAAS,IAAIN,GACnB,OAAO,2BAAKM,EAAOD,IAAK,CAAEE,IAAKF,GACnC,EAEaG,EAAiB,SAACvB,GAC3B,OAAOA,EAAOsB,IAAIE,SAAWR,CACjC,EAEMS,EAAsB,CAAC,KAAM,KAAM,KAAM,MAClCC,EAAY,SAACvM,GACtB,IAEMwM,EAjGW,SAACC,GAEZ,IAAG,EAAH,8BAAG,SAOT,MAJgC,KAA5BC,EAAMA,EAAML,OAAS,IACrBK,EAAMC,MAGHD,EAAMzf,IAAI+e,EACrB,CAqFoBthB,CAAMsV,GAES/S,KAC3B,SAAA2f,GACI,IF7FuB/B,EE6FjBgC,EF/HO,SAAChC,GAGtB,GAFgBD,EAAWC,GAEd,CACT,IAAMiC,EAAS9B,EACXH,EAAOkC,4BACPlC,EAAOmC,2BACPnC,EAAOoC,0BAELC,EAAW9B,EACbP,EAAOsC,qBACPtC,EAAOuC,uBACPvC,EAAOwC,4BAEL5B,EAAOD,EAAWX,EAAOyC,mBAAoBzC,EAAO0C,wBAE1D,OAAO,IAAQ,CAAC1C,EAAO2C,2BAA4BV,EAAQI,EAAUzB,IAAOzT,KAAK,K,CAcjF,OAZM8U,EAAS9B,EACXH,EAAO4C,+BACP5C,EAAO6C,4BACP7C,EAAO8C,2BAELT,EAAW9B,EACbP,EAAO+C,sBACP/C,EAAOgD,wBACP,IAEEpC,EAAOD,EAAWX,EAAOiD,oBAAqBjD,EAAOkD,yBAEpD,IAAQ,CAAClD,EAAOmD,4BAA6BlB,EAAQI,EAAUzB,IAAOzT,KAAK,KAE1F,CE+F4BiW,CAAUrB,GACpBsB,EF7FXtD,EAD4BC,EE8FmB+B,GF5FvC,CACHS,2BAA4BxC,EAAOwC,2BACnCc,uBAAwBtD,EAAOuD,uBAC/BrB,4BAA6BlC,EAAOkC,4BACpCQ,uBAAwB1C,EAAO0C,uBAC/BC,2BAA4B3C,EAAO2C,2BACnCa,uBAAwBxD,EAAOuC,uBAC/BH,yBAA0BpC,EAAOoC,yBACjCD,2BAA4BnC,EAAOmC,2BACnCG,qBAAsBtC,EAAOsC,qBAC7BG,mBAAoBzC,EAAOyC,oBAGxB,CAEHD,2BAA4B,GAC5Bc,uBAAwB,GACxBpB,4BAA6BlC,EAAO4C,+BACpCF,uBAAwB1C,EAAOkD,wBAC/BP,2BAA4B3C,EAAOmD,4BACnCK,uBAAwBxD,EAAOgD,wBAC/BZ,yBAA0BpC,EAAO8C,0BACjCX,2BAA4BnC,EAAO6C,4BACnCP,qBAAsBtC,EAAO+C,sBAC7BN,mBAAoBzC,EAAOiD,qBEqEnB,IAAAQ,qBAAiCC,EAAA,EAAAA,QAASC,EAAA,EAAAA,IAAKC,EAAA,EAAAA,aAEnDC,EAAwD,KAS5D,OAPI7B,GAAW8B,IAAcrC,EAAoB1c,SAAS6e,KACtDC,EAAgB,CAAE7B,QAAO,EAAE8B,UAAS,EAAET,gBAAe,IAMlD,CACHvlB,aAHiB4lB,GAAWC,EAI5B3B,QAAS6B,EACTE,MAAOxC,EAAeQ,GAE9B,IAGEiC,EAAiBrC,EAAesC,QAAO,SAAAjE,GAAU,OAACA,EAAO+D,KAAR,IAEvD,GAA8B,IAA1BC,EAAexC,OACf,OAAOG,EAEP,MAAM,IAAItjB,MACN,oBAAoB2lB,EAAe5hB,KAAI,SAAA4d,GAAU,OAAAA,EAAOliB,YAAP,IAAqBqP,KAAK,MAGvF,E,SC3LA,aAwEI,WACa+W,EACAC,GADA,KAAAD,MACA,KAAAC,aArEb,KAAAC,iBAAsBte,EAMtB,KAAAue,WAAY,EAGZ,KAAAC,aAAyD,IA6DtD,CA+FP,OAtJI,sBAAI,4BAAa,C,IAAjB,WACI,OAAOpjB,KAAKojB,aAAepjB,KAAKojB,aAAaC,aAAa/C,OAAS,CACvE,E,gCAGA,sBAAI,2BAAY,C,IAAhB,WACI,OAAOtgB,KAAKojB,aAAepjB,KAAKojB,aAAaE,OAAS,EAC1D,E,gCAGA,sBAAI,2BAAY,C,IAAhB,WACI,OAAOtjB,KAAKojB,aAAepjB,KAAKojB,aAAaG,SAASjD,OAAS,CACnE,E,gCAGA,sBAAI,gCAAiB,C,IAArB,WACI,OAAKtgB,KAAKojB,aAGH,YACA5kB,OAAO8I,QACNtH,KAAKojB,aAAaG,SAASxD,QAAO,SAAChc,EAAQyf,GACvC,OAAKA,EAAQC,kBAGb1f,EAAOyf,EAAQC,mBAAqB1f,EAAOyf,EAAQC,mBAAqB,GAAK,EAEtE1f,GAJIA,CAKf,GAAG,CAAC,KAXD,EAcf,E,gCAGA,sBAAI,iCAAkB,C,IAAtB,WACI,OAAK/D,KAAKojB,aAGH,YACA5kB,OAAO8I,QACNtH,KAAKojB,aAAaG,SAASxD,QAAO,SAAChc,EAAQyf,GACvC,OAAKA,EAAQE,eAGb3f,EAAOyf,EAAQE,gBAAkB3f,EAAOyf,EAAQE,gBAAkB,GAAK,EAEhE3f,GAJIA,CAKf,GAAG,CAAC,KAXD,EAcf,E,gCAQA,YAAA4f,qBAAA,WACQ3jB,KAAK4jB,SACL5jB,KAAK6jB,eAAe7jB,KAAK4jB,SAASxf,MAAM0f,EAAA,EAEhD,EAGA,YAAAC,WAAA,SAAWC,GADX,WAQI,GALAhkB,KAAKikB,eAAYrf,EACjB5E,KAAKojB,aAAe,KACpBpjB,KAAK4jB,aAAUhf,EACf5E,KAAK+O,UAAOnK,EAEPof,EAAEE,cAAcC,OAAUH,EAAEE,cAAcC,MAAM,KAGrDnkB,KAAK+O,KAAOiV,EAAEE,cAAcC,OAASH,EAAEE,cAAcC,MAAM,GACtDnkB,KAAK+O,MAAV,CAGA,IAAMqV,EAAS,IAAIC,WACnBD,EAAOE,WAAWtkB,KAAK+O,KAAM,SAC7BqV,EAAOG,OAAS,WACJ,IAAAxgB,EAAA,EAAAA,OACR,GAAIA,EACA,IACI,EAAK6f,QAAUpD,EAAUzc,EAAOygB,W,CAClC,MAAOR,GACL,EAAKC,UAAY,UAAUD,EAAEhY,QAAO,8DACpC,OAAA8X,EAAA,GAAkBE,E,MAGtB,EAAKC,UAAY,6DAEzB,EACAG,EAAOK,QAAU,WACb,OAAC,EAAKR,UAAY,6DAAlB,C,CACR,EAGc,YAAAJ,eADd,SAC6Bla,GAAyC,0B,6EAMlE,GALA3J,KAAKkjB,iBAActe,EACnB5E,KAAKojB,aAAe,KACpBpjB,KAAKmjB,WAAY,GAGZnjB,KAAK+O,KACN,MAAM,IAAI5R,MAAM,0C,kDAIa,YAAmB6C,KAAK+O,MAAM,SAACG,GACxD,SAAKwV,mBAAmBxV,EAAxB,K,cADEyV,EAAiB,EAAH,O,GAIC3kB,KAAKgjB,IAAIpN,qCAAqC,CAC/D+O,eAAc,EACdhb,QAAO,K,cAFL5F,EAAS,EAAH,OAKR,IAAqBgV,WAAWhV,GAChC/D,KAAKkjB,YAAc,IAAI/lB,MACnB4G,EAAO6gB,cAAgB,IAAwB7N,sBACzC,gEACA,oEAGV/W,KAAKojB,aAAerf,E,+BAGxB/D,KAAKkjB,YAAc,EACnB,OAAAY,EAAA,GAAkB,G,oBAElB9jB,KAAKmjB,WAAY,E,wCAKX,YAAAuB,mBADd,SACiCxV,GAAc,0B,2EACpBlP,KAAKgjB,IAAItM,sBAAsB,CAClDxH,OAAM,EACN2V,SAAU,GACVC,SAAU,IAAS9H,oB,OAGvB,GANMzP,EAAW,EAAH,OAMV,IAA8BwL,WAAWxL,GACzC,MAAM,IAAIpQ,MAAM,kCAEhB,MAAO,CAAP,EAAOoQ,G,mBArKf,aADC,c,gCAID,aADC,c,kCAID,aADC,c,8BAID,aADC,c,gCAID,aADC,c,mCAID,aADC,c,2BAID,aADC,Y,kCAMD,aADC,Y,iCAMD,aADC,Y,iCAMD,aADC,Y,sCAoBD,aADC,Y,uCAyBD,aADC,SAAOpN,O,yCAQR,aADC,SAAOA,O,+BAsFZ,C,CA1KA,GCNA,aA4CI,WACI4kB,EASS/B,GAVb,WAUa,KAAAA,MA5Cb,KAAAgC,mBAAyBpgB,EAGzB,KAAAqgB,UAAW,EAGX,KAAArhB,OAAS,GAyCD,IAAAshB,EAAA,EAAAA,YACAhjB,EAAA,EAAAA,YACA6T,EAAA,EAAAA,OACAoP,EAAA,EAAAA,UACA1iB,EAAA,EAAAA,MACA2iB,EAAA,EAAAA,SACAC,EAAA,EAAAA,iBAEJrlB,KAAK+V,OAASA,EACd/V,KAAKkC,YAAcA,EACnBlC,KAAKyC,MAAQA,EACbzC,KAAKklB,YAAcA,EACnBllB,KAAKmlB,UAAYA,EACjBnlB,KAAKolB,SAAWA,EAChBplB,KAAKqlB,iBAAmBA,EAExB,mBAAQ,WACA,EAAKD,UACL,EAAKA,SAAS,EAAKE,YAE3B,GACJ,CA6HJ,OAvLI,sBAAI,qBAAM,C,IAAV,WACI,OAAOtlB,KAAKulB,aAAajF,OAAS,CACtC,E,gCAGA,sBAAI,0BAAW,C,IAAf,WACI,OAAOtgB,KAAKwlB,WAAWzf,MAAK,SAAArJ,GAAY,OAAAA,EAAS+oB,SAAT,GAC5C,E,gCAGA,sBAAI,yBAAU,C,IAAd,WACI,OAAOzlB,KAAKwlB,WAAWE,OAAM,SAAAhpB,GAAY,OAAAA,EAAS+oB,SAAT,GAC7C,E,gCAGA,sBAAI,yBAAU,C,IAAd,WADA,WAEI,OAAOzlB,KAAKqlB,mBAAmBtC,QAAO,SAAArmB,GAAY,SAAKqZ,OAAOlS,SAASnH,EAASipB,UAA9B,GACtD,E,gCAGA,sBAAI,2BAAY,C,IAAhB,WACI,OAAO3lB,KAAK4lB,mBAAmB7C,QAAO,SAAA5hB,GAAK,OAAAA,EAAEskB,SAAF,GAC/C,E,gCAuCA,sBAAI,0BAAW,C,IAAf,WACI,OAAOzlB,KAAKulB,aAAarkB,KAAI,SAAAC,GAAK,OAAAA,EAAExE,cAAF,GACtC,E,gCAGA,sBAAI,6BAAc,C,IAAlB,WACI,OAAOqD,KAAKulB,aAAajF,MAC7B,E,gCAGA,sBAAI,iCAAkB,C,IAAtB,WACI,IAAM1c,EAAS5D,KAAK4D,OAAOiiB,OAAOC,cAClC,OAAO9lB,KAAKwlB,WAAWzC,QAAO,SAAArmB,GAC1B,OACKkH,GACDlH,EAASC,eAAempB,cAAcjiB,SAASD,IAC/ClH,EAASE,aAAakpB,cAAcjiB,SAASD,IAC7ClH,EAASqpB,iBAAiBD,cAAcjiB,SAASD,IACjDlH,EAASspB,SAASF,cAAcjiB,SAASD,IACzCwL,OAAO1S,EAASupB,8BAA8BpiB,SAASD,IACvDwL,OAAO1S,EAASwpB,oBAAoBriB,SAASD,EAErD,GACJ,E,gCAGA,YAAAuiB,UAAA,WACY,IAAAC,EAAA,KAAAA,YAERpmB,KAAKwlB,WAAWxb,SAAQ,SAAA7I,GAAK,OAAAA,EAAEklB,eAAeD,EAAjB,GACjC,EAGA,YAAAE,YAAA,SAAYvpB,G,MACAwpB,EAAF,KAAEA,YAAaf,EAAf,KAAeA,WACf5f,EAAS5F,KAAKwmB,YAAYzpB,GAChC,GAAIwpB,GAAe3gB,EAAQ,CACvB,IAAI6gB,EAAYzmB,KAAK0mB,YAAYH,GAC7BI,EAAU3mB,KAAK0mB,YAAY9gB,GAC3B6gB,EAAYE,IACXF,GAAD,wBAAC,GAAWE,EAAA,MAEFnB,EAAWoB,MAAMH,EAAWE,EAAU,GAC9C3c,SAAQ,SAAA7I,GAAK,OAAAA,EAAEklB,cAAcE,EAAYd,UAA5B,IAGnB,IAAMoB,EAAYzoB,SAAS0oB,eACvBD,GACAA,EAAUE,O,MAEPnhB,GACPA,EAAOygB,gBAEXrmB,KAAKglB,cAAgBjoB,CACzB,EAEA,YAAAypB,YAAA,SAAYzpB,GACA,IAAAyoB,EAAA,KAAAA,WACR,OAAIzoB,EACOyoB,EAAWwB,MAAK,SAAA7lB,GAAK,OAAAA,EAAExE,iBAAmBI,CAArB,SAE5B,CAER,EACA,YAAA2pB,YAAA,SAAYO,GACA,IAAAzB,EAAA,KAAAA,WACR,OAAIyB,EACOzB,EAAW0B,WAAU,SAAA/lB,GAAK,OAAAA,EAAExE,iBAAmBsqB,EAAItqB,cAAzB,KAEzB,CAEhB,EAEA,sBAAI,0BAAW,C,IAAf,WACY,IAAAqoB,EAAA,KAAAA,cACR,OAAOhlB,KAAKwmB,YAAYxB,EAC5B,E,gCAGA,YAAAmC,uBAAA,SAAuBC,GACnBpnB,KAAKwlB,WAAWxb,SAAQ,SAAA7I,GAAK,OAAAimB,EAAIvjB,SAAS1C,EAAExE,iBAAmBwE,EAAEklB,eAAc,EAAlD,GACjC,EAGA,YAAAgB,eAAA,WACIrnB,KAAKwlB,WAAWxb,SAAQ,SAAA7I,GAAK,OAAAA,EAAEklB,eAAc,EAAhB,GACjC,EAGA,YAAAiB,eAAA,WACItnB,KAAKilB,UAAYjlB,KAAKilB,QAC1B,EAGM,YAAAsC,cADN,SACoBC,EAAmBC,GAAmB,0B,qEAChDznB,KAAKgjB,IAAIvM,6BAA6B,CACxCiR,gBAAiBF,EACjBC,SAAQ,K,cAFZ,SAKAznB,KAAKulB,aAAavb,SAAQ,SAAA7I,GACtBA,EAAEwkB,UAAY8B,CAClB,IACAznB,KAAKqnB,iB,uBAIT,sBAAI,gCAAiB,C,IAArB,WACU,IAAElC,EAAF,KAAEA,UAAWwC,EAAb,KAAaA,eAEnB,OAAIxC,EACOA,EAAUpR,MAAMzE,QAAQ,WAAW,WACtC,OAAuB,IAAnBqY,EACO,GAEA,KAAKA,EAAc,GAElC,SAEA,CAER,E,gCAhMA,aADC,c,oCAID,aADC,c,+BAID,aADC,c,6BAKD,aADC,Y,2BAMD,aADC,Y,gCAMD,aADC,Y,+BAMD,aADC,Y,+BAMD,aADC,Y,iCA0CD,aADC,Y,gCAMD,aADC,Y,mCAMD,aADC,Y,uCAiBD,aADC,SAAOxnB,O,8BAQR,aADC,SAAOA,O,gCAyCR,aADC,Y,gCAOD,aADC,SAAOA,O,2CAMR,aADC,SAAOA,O,mCAMR,aADC,SAAOA,O,mCAmBR,aADC,Y,sCAgBL,C,CA3MA,GCPA,aAcI,WAAYynB,GAZZ,KAAAnC,WAAY,EAaRzlB,KAAK2lB,UAAYiC,EAAYjC,UAE7B3lB,KAAKimB,6BAA+B2B,EAAY3B,6BAChDjmB,KAAKkmB,mBAAqB0B,EAAY1B,mBACtClmB,KAAKrD,eAAiBirB,EAAYjrB,eAClCqD,KAAK+lB,iBAAmB6B,EAAY7B,iBACpC/lB,KAAKpD,aAAegrB,EAAYhrB,aAChCoD,KAAKgmB,SAAY4B,EAAYC,iBAAmBD,EAAYC,gBAAgBxK,UAAa,EAC7F,CAUJ,OAPI,YAAAgJ,cAAA,SAAc/hB,GAENtE,KAAKylB,UADY,mBAAVnhB,EACUA,GAECtE,KAAKylB,SAE/B,EA9BA,aADC,c,gCAID,aADC,c,gCAsBD,aADC,SAAOtlB,O,kCAQZ,C,CAjCA,G,0BCSM2nB,EAA2B,SAACC,EAAqBC,GACnD,IAAMC,EAASC,EAAUF,GACnBG,EAAgB/pB,SAASgqB,cAAc,KAC7CD,EAAcjhB,KAAO,+BAAiC+gB,EACtDE,EAAcviB,OAAS,SACvBuiB,EAAcE,SAAW,YAAYN,EAAW,IAAI,OAAAO,EAAA,GAAO,IAAIC,KAAQ,uBAAsB,OAC7FJ,EAAcK,OAClB,EAEaN,EAAY,SAACF,GACtB,IAAMS,EAAS,YACR,IAAIC,IACHV,EAAO9mB,KAAI,SAAAynB,GACP,OAAAA,EACK9C,OACAvW,QAAQ,MAAO,IACfsZ,aAHL,MAQZ,OAAOC,mBAAmBJ,EAAOxc,KAAK,MAC1C,GLAA,SAAY2T,GACR,6EACA,qBACA,yCACA,wEACA,8CACA,mEACA,6DACA,8BACA,6BACA,mDACA,uEACA,mCACA,2EACA,6DACH,CAfD,CAAYA,MAAW,KAiCvB,IAAMkJ,EAAkC,CACpClJ,EAAYmJ,kCACZnJ,EAAYoJ,+BACZpJ,EAAYqJ,gCACZrJ,EAAYsJ,2BACZtJ,EAAYuJ,0BAGhB,aAoFI,WAAqBC,G,MAArB,OAAqB,KAAAA,aAlDZ,KAAApG,IASL,IAGJ,KAAAwC,WAAqC,GAGrC,KAAA5hB,OAAiB,GAGjB,KAAAylB,YAAwB,GAGxB,KAAAC,mBAAoB,EAGpB,KAAAC,UAAW,EAGX,KAAAC,kBAAmB,EAGnB,KAAAtG,iBAAsBte,EAGtB,KAAAue,WAAY,EAGZ,KAAAsG,YAAwC,KAMxC,KAAAC,oBAAuD,KAMvD,KAAAC,iBAAmD,KAG/C3pB,KAAK4pB,WAAQ,MACRhK,EAAYiK,SAAU7pB,KAAK8pB,cACxBlK,EAAYiK,QACZ,oJAEJ,EAACjK,EAAYmK,mBAAoB/pB,KAAK8pB,cAClClK,EAAYmK,kBACZ,wHAEJ,EAACnK,EAAYoK,qBAAsBhqB,KAAK8pB,cACpClK,EAAYoK,oBACZ,+KAEJ,EAACpK,EAAYoJ,gCAAiChpB,KAAK8pB,cAC/ClK,EAAYoJ,+BACZ,0EACA,CACI7D,UAAW,CACPpR,MAAO,kBACPkW,GAAI,YKjLA,SAACjC,GAGzB,IAFA,IACID,EAAc,EACZC,EAAO1H,OAAS,GAAG,CACrB,IAAM4J,EAAYlC,EAAOmC,OAAO,EAHlB,KAIdrC,EAAyBC,EAAamC,GACtCnC,G,CAER,CL0K4BqC,CAAa,EAAKC,gBAClB,EAAKZ,YAAc,CACfa,YAAa,oBACb9C,QAAS,EAAK+C,WAAWjF,YACzBkF,QAAS,IAAiBlP,wBAE9B,EAAKiP,WAAWlD,gBACpB,GAEJjC,SAAU,SAACiE,GAA0B,OAAC,EAAKA,YAAcA,CAApB,IAG7C,EAACzJ,EAAYqJ,iCAAkCjpB,KAAK8pB,cAChDlK,EAAYqJ,gCACZ,8FAEJ,EAACrJ,EAAYsJ,4BAA6BlpB,KAAK8pB,cAC3ClK,EAAYsJ,2BACZ,iHACA,CACI/D,UAAW,CACPpR,MAAO,qBACPkW,GAAwB,qC,wEACpB,GAAIjqB,KAAKwpB,iBACL,U,+CAGAxpB,KAAKwpB,kBAAmB,E,GACD,IAAY7a,iB,gBAAlB,EAAH,OACa8b,Q,cAArBC,EAAM,EAAH,OACHzC,EAASY,mBAAmB6B,IAC5BvC,EAAgB/pB,SAASgqB,cAAc,MAC/BlhB,KAAO,+BAA+B+gB,EACpDE,EAAcviB,OAAS,SACvBuiB,EAAcE,SAAWroB,KAAK2qB,yBAC9BxC,EAAcK,Q,+BAEdxoB,KAAKopB,WAAW/rB,aAAa,OAAAgD,EAAA,KAAe,CACxC/C,QAAS,yCACTC,YAAY,IAEhB,OAAAumB,EAAA,GAAkB,G,oBAElB9jB,KAAKwpB,kBAAmB,E,wCAM5C,EAAC5J,EAAYuJ,0BAA2BnpB,KAAK8pB,cACzClK,EAAYuJ,yBACZ,+DACA,CACIhE,UAAW,CACPpR,MAAO,+BACP6W,KAAM,iBAIlB,EAAChL,EAAYmJ,mCAAoC/oB,KAAK8pB,cAClDlK,EAAYmJ,kCACZ,8GACA,CACI7D,YAAa,CAAEnR,MAAO,QAASkW,GAAIjqB,KAAK6qB,gBAGhD,EAACjL,EAAYkL,uBAAwB9qB,KAAK8pB,cACtClK,EAAYkL,sBACZ,4DAEJ,EAAClL,EAAYmL,aAAc/qB,KAAK8pB,cAC5BlK,EAAYmL,YACZ,oHAEJ,EAACnL,EAAYtF,+BAAgCta,KAAK8pB,cAC9ClK,EAAYtF,8BACZ,gJAEJ,EAACsF,EAAYoL,4BAA6BhrB,KAAK8pB,cAC3ClK,EAAYoL,2BACZ,mYAEJ,EAACpL,EAAYqL,aAAcjrB,KAAK8pB,cAC5BlK,EAAYqL,YACZ,gRAEJ,EAACrL,EAAYsL,eAAgBlrB,KAAK8pB,cAC9BlK,EAAYsL,cACZ,yE,GAKR1sB,OAAOugB,OAAO,KAAW/U,QAAQhK,KAAKmrB,eAEtC,mBAAQ,WACJ,EAAKC,SAASphB,SAAQ,SAACqhB,GACnBA,EAAQznB,OAAS,EAAKA,MAC1B,GACJ,GACJ,CA+MJ,OA1ZI,sBAAI,6BAAc,C,IAAlB,WACY,IAAAylB,EAAA,KAAAA,YACR,OAAOrpB,KAAKwlB,WACPzC,QAAO,SAACrmB,GAAa,OAAA2sB,EAAYxlB,SAASnH,EAASC,eAA9B,IACrBuE,KAAI,SAACxE,GAAa,OAAAA,EAASE,YAAT,GAC3B,E,gCAGA,sBAAI,sBAAO,C,IAAX,WACI,OAAOoD,KAAKsrB,WAAW1L,EAAYmJ,kCACvC,E,gCAGA,sBAAI,yBAAU,C,IAAd,WACI,OAAO/oB,KAAKsrB,WAAW1L,EAAYoJ,+BACvC,E,gCAGA,sBAAI,uBAAQ,C,IAAZ,WACI,OAAOxqB,OAAOugB,OAAO/e,KAAK4pB,SAC9B,E,gCAGA,sBAAI,2BAAY,C,IAAhB,WACI,OAAO5pB,KAAKorB,SAASrI,QAAO,SAACwI,GAAU,OAAAzC,EAAkBjlB,SAAS0nB,EAAM9oB,MAAjC,GAC3C,E,gCAGA,sBAAI,kCAAmB,C,IAAvB,WACI,OAAOzC,KAAKorB,SAASrI,QAAO,SAACwI,GAAU,OAACzC,EAAkBjlB,SAAS0nB,EAAM9oB,MAAlC,GAC3C,E,gCA+KA,YAAAkoB,uBAAA,WACI,MAAO,aAAa,OAAArC,EAAA,GAAO,IAAIC,KAAQ,uBAAsB,MACjE,EAEA,YAAA+C,WAAA,SAAW7oB,GACP,OAAOzC,KAAK4pB,SAASnnB,EACzB,EAEA,YAAAqnB,cAAA,SACIrnB,EACAP,EACAqG,GAHJ,WASI,OAAO,IAAI,EACP,CACIrG,YAAW,EACXmjB,iBAAkB,WAAM,SAAKG,UAAL,EACxBJ,SAAU7c,GAAUA,EAAO6c,SAC3BF,YAAa3c,GAAUA,EAAO2c,YAC9BC,UAAW5c,GAAUA,EAAO4c,UAC5BpP,OAAQ,GACRtT,MAAK,GAETzC,KAAKgjB,IAEb,EAGA,YAAAwI,mBAAA,SAAmB/oB,EAAmBgpB,GAClCzrB,KAAKsrB,WAAW7oB,GAAOsT,OAAOzQ,KAAKmmB,EACvC,EAGA,YAAAN,cAAA,SAAcM,GACV,OAAQA,GACJ,KAAK,IAAU9R,IACf,KAAK,IAAUL,OACXtZ,KAAKwrB,mBAAmB5L,EAAYiK,QAAS4B,GAC7C,MAEJ,KAAK,IAAU1R,YACf,KAAK,IAAUD,kBACf,KAAK,IAAUG,YACf,KAAK,IAAUD,kBACXha,KAAKwrB,mBAAmB5L,EAAYmK,kBAAmB0B,GACvD,MAEJ,KAAK,IAAU7R,kBACX5Z,KAAKwrB,mBAAmB5L,EAAYoJ,+BAAgCyC,GACpE,MAEJ,KAAK,IAAU5R,wBACX7Z,KAAKwrB,mBAAmB5L,EAAYqJ,gCAAiCwC,GACrE,MAEJ,KAAK,IAAUtR,mBACf,KAAK,IAAUC,mBACXpa,KAAKwrB,mBAAmB5L,EAAYmJ,kCAAmC0C,GACvE,MAEJ,KAAK,IAAUvR,qBACf,KAAK,IAAUG,qBACXra,KAAKwrB,mBAAmB5L,EAAYoK,oBAAqByB,GACzD,MAEJ,KAAK,IAAUnR,8BACXta,KAAKwrB,mBAAmB5L,EAAYtF,8BAA+BmR,GACnE,MAEJ,KAAK,IAAUjS,kBACXxZ,KAAKwrB,mBAAmB5L,EAAYmL,YAAaU,GACjD,MAEJ,KAAK,IAAU/R,gBACf,KAAK,IAAUD,cACXzZ,KAAKwrB,mBAAmB5L,EAAYqL,YAAaQ,GACjD,MAEJ,KAAK,IAAUlS,QACXvZ,KAAKwrB,mBAAmB5L,EAAYkL,sBAAuBW,GAC3D,MAEJ,KAAK,IAAUlR,qBACXva,KAAKwrB,mBAAmB5L,EAAYoL,2BAA4BS,GAChE,MAEJ,KAAK,IAAUjR,uBACXxa,KAAKwrB,mBAAmB5L,EAAYsL,cAAeO,GACnD,MAEJ,KAAK,IAAUhR,0BACf,KAAK,IAAUC,0BACX1a,KAAKwrB,mBAAmB5L,EAAYsJ,2BAA4BuC,GAChE,MAEJ,KAAK,IAAU9Q,gCACf,KAAK,IAAUC,gCACX5a,KAAKwrB,mBAAmB5L,EAAYuJ,yBAA0BsC,GAC9D,MAEJ,SApWL,SAAqBtqB,GACxB,MAAM,IAAIhE,MAAM,sBAAwBgE,EAC5C,CAmWgBuqB,CAAYD,GAExB,EAGA,YAAAE,kBAAA,WACI3rB,KAAKypB,YAAc,IACvB,EAGA,YAAAmC,eAAA,WADA,WAEI5rB,KAAK2pB,iBAAmB,IAAI,EAAwB3pB,KAAKgjB,KAAK,WAC1D,EAAK6I,oBACL,EAAKC,qBACT,GACJ,EAGA,YAAAA,oBAAA,WACI9rB,KAAK2pB,iBAAmB,IAC5B,EAGA,YAAAoC,wBAAA,WACI/rB,KAAK6rB,oBAAoBznB,MAAM0f,EAAA,EACnC,EAGA,YAAA+G,aAAA,WACIhrB,OAAOiO,KAAK,cAAoB,SACpC,EAGA,YAAAke,YAAA,SAAYxE,EAAmBgD,GAD/B,WAEwB,mB,oGAEWxqB,KAAKgjB,IAAI1M,gCAAgC,CAC5DoR,gBAAiBF,EACjBgD,QAAO,K,cAFLjd,EAAW,EAAH,OAKdvN,KAAKisB,wBAAwB1e,G,+BAE7B2e,MAAM,+BACN,OAAApI,EAAA,GAAkB,G,sCAErB1f,MAAM0f,EAAA,EACf,EAGA,YAAAqI,yBAAA,WACI,GAAInsB,KAAK0pB,oBAAqB,CAClB,IAAA9K,EAAA,yBAAAA,QACR5e,KAAKosB,QAAQjF,uBAAuBvI,EAAQ1d,KAAI,SAACmrB,GAAW,OAAAA,EAAO1vB,cAAP,I,CAEhEqD,KAAK0pB,oBAAsB,IAC/B,EAGQ,YAAAuC,wBAAR,SAAgCK,GADhC,WAEUC,EAA0B,GAEhCD,EAAQtiB,SAAQ,SAAC7I,GACb,IAAMzE,EAAW,EAAK8oB,WAAWwB,MAAK,SAACwF,GAAM,OAAAA,EAAE7vB,iBAAmBwE,EAAExE,cAAvB,IAExCD,IAIDyE,EAAEsrB,eACF/vB,EAASipB,UAAYxkB,EAAEsrB,cAEvBtrB,EAAEurB,cACFH,EAAcjnB,KAAQnE,EAAExE,eAAc,IAAIwE,EAAEurB,cAEpD,IAEIH,EAAcjM,OAAS,GACvB4L,MAAM,0CAChBK,EAActgB,KAAK,MAEjB,EAGc,YAAA4f,kBADd,qC,oEAEI7rB,KAAKupB,UAAW,E,+CAEZvpB,KAAKwlB,WAAa,G,GACKxlB,KAAKgjB,IAAI5M,6BAA6BpW,KAAK2e,Y,cAA5DpR,EAAW,EAAH,OACdvN,KAAKwlB,WAAajY,EAASrM,KAAI,SAACC,GAAM,WAAI,EAAqBA,EAAzB,I,+BAEtCnB,KAAKopB,WAAW/rB,aAAa,OAAAgD,EAAA,KAAe,CACxC/C,QAAS,EAAE0O,QACXzO,YAAY,IAEhB,OAAAumB,EAAA,GAAkB,G,oBAElB9jB,KAAKupB,UAAW,E,wCAvZxB,aADC,Y,mCASD,aADC,Y,4BAMD,aADC,Y,+BAMD,aADC,Y,6BAMD,aADC,Y,iCAMD,aADC,Y,wCAiBD,aADC,c,iCAID,aADC,c,6BAID,aADC,c,kCAID,aADC,c,wCAID,aADC,c,+BAID,aADC,c,uCAID,aADC,c,kCAID,aADC,c,gCAID,aADC,c,kCAID,aADC,c,+BAID,aADC,c,0CAID,aADC,c,gCAID,aADC,c,uCA8JD,aADC,SAAOppB,O,uCAMR,aADC,SAAOA,O,kCA0ER,aADC,SAAOA,O,sCAMR,aADC,SAAOA,O,mCASR,aADC,SAAOA,O,wCAMR,aADC,SAAOA,O,4CAMR,aADC,SAAOA,O,iCAMR,aADC,SAAOA,O,gCAkBR,aADC,SAAOA,O,6CAUR,aADC,SAAOA,O,4CA0CZ,C,CA5ZA,GA8ZawsB,EAA4C,SAAOC,GAAsB,0B,2CAGlF,OAFMC,EAAYD,EAAUE,iBAAiB,OAEtC,CAAP,EAAO7sB,QAAQ8sB,IAAIjnB,MAAMqE,KAAK0iB,GAAW3rB,KAAI,SAACC,GAAM,OAAA6rB,EAAoB7rB,EAApB,K,YA5exD,U,EA+eM6rB,EAAsB,SAAOC,GAAuB,oD,4DACtD,OAAIA,EAAMC,SACN,IAGG,GAAM,IAAIjtB,SAAQ,SAACC,EAASitB,GAC/BF,EAAMntB,iBAAiB,OAAQI,GAC/B+sB,EAAMntB,iBAAiB,SAAS,WAAM,OAAAqtB,EAAO,IAAIhwB,MAAM,0BAAjB,GAC1C,K,OAHA,MAAO,CAAP,EAAO,U,2BMpfXsJ,EAAOC,QAAU,sxQ,oBCAjBD,EAAOC,QAAU,ikI,oBCAjBD,EAAOC,QAAU,yhC,oBCAjBD,EAAOC,QAAU,89C,oBCAjBD,EAAOC,QAAU,23O,oBCAjBD,EAAOC,QAAU,mgK,oBCAjBD,EAAOC,QAAU,s4N,kCCAjB,wDAGO,SAASod,EAAkBxY,EAAcC,GAC5CA,EAAa/M,OAAOC,OAAO,CAAC,EAAG8M,EAAYD,EAAM,MAEpB,kBAAlBA,EAAMU,SAA+C,kBAAhBV,EAAM8hB,QAClD7hB,EAAY8hB,cAAgB/hB,EAC5BA,EAAQ,IAAInO,MACR,kGAKRmwB,QAAQhiB,MAAMA,EAAO,CAAEC,WAAU,IACjC,IAAUF,eAAeC,EAAOC,EACpC,C,oBChBA9E,EAAOC,QAAU,m0C,kCCAjB,iGAGa6mB,EAAe,IAAI,cACnBC,EAAU,IAAMjtB,cAAc,CAAEktB,QAASF,G,mCCHtD,KAAoB1tB,OAAO6tB,e,4ICSfC,E,iBAAZ,SAAYA,GACR,0BACA,uCACA,yBACA,+CACA,sCACA,6BACH,CAPD,CAAYA,MAAoB,KAShC,kBAGI,WAAqBznB,EAA4B8F,EAAiBvG,GAAlE,MACI,YAASA,EAAKgH,WAAU,KAAKT,IAAU,K,OADtB,EAAA9F,OAMjB1H,OAAOovB,eAAe,EAAMC,EAAWC,WAEvC,EAAK,KAAyBroB,E,CAClC,CACJ,OAbgC,iBAahC,EAbA,CAAgCtI,OAuBzB,SAAS4wB,EAAkBziB,GAC9B,GAAIA,GAASA,aAAiBuiB,EAC1B,OAAOviB,EAAMpF,IAIrB,C,sBC/CAO,EAAOC,QAAU,CAAC,C,sBCAlBD,EAAOC,QAAU,CAAC,C,mNCIZsnB,EAAO,IAAOtwB,IAAG,wDAAV,CAAU,iYAUjBuwB,EAAQ,IAAOlmB,IAAG,yDAAV,CAAU,6HAKXmmB,EAAa,WAEtB,OACI,kBAACF,EAAI,KACD,kBAACC,EAAK,CAACxlB,IAAK,MACZ,oFACA,kBAACZ,EAAA,EAAM,CAAC1F,QALD,WAAM,OAAAtC,OAAO6C,SAASiC,QAAhB,EAKY3G,MAAM,WAAS,WAKpD,E,iBCzBamwB,EAAqB,aAC9B,SAAC,GAKG,OAJS,QAAAvuB,0BAIuB,EAExB,kBAACwuB,EAAA,EAAgB,KACb,kBAACA,EAAA,EAAY,KCfA,+FDoBlB,IACX,I,sDEdEC,EAAW,IAAO3wB,IAAG,4DAAV,CAAU,ibAYrB4wB,EAAe,IAAO1a,EAAC,iEAAR,CAAQ,iFAIvBL,EAAO,IAAO7V,IAAG,yDAAV,CAAU,6UAQjB6wB,EAAe,IAAOxmB,IAAG,gEAAV,CAAU,uHAKlBymB,EAAkB,WACnB,IAAA1pB,EAAA,cAAAA,kBAEA2pB,EAAA,OAAA/rB,SAER,OACI,kBAAC2rB,EAAQ,KACL,kBAACpnB,EAAA,EAAQ,MACT,kBAACsM,EAAI,KACD,kBAACgb,EAAY,CAAC9lB,IAAK,EAAA8L,IACnB,kBAAC+Z,EAAY,mCACb,kBAACzmB,EAAA,EAAM,CAAC7J,MAAM,UAAUmE,QAPtB,WAAM,OAAA2C,EAAkB,CAAE4pB,aAAiBD,EAAIE,OAAM,gBAA/C,GAO8B,YAMtD,EC9CaC,EAAwC,SAAC,GAAE,IAAAC,EAAA,EAAAA,UAAW,+BAC/D,OACI,kBAAC,IAAK,eAAK5wB,GACP,kBAAC,IAAa,CACVY,OAAQ,IAAYD,MAAMC,OAC1BiwB,UAAW,IAAYlwB,MAAME,SAC7BC,SAAU,IAAYH,MAAMG,SAC5B2vB,aAAiB7uB,OAAO6C,SAASisB,OAAM,eACvC5rB,mBAAoBA,GAEpB,kBAACgsB,EAAmB,aAACF,UAAWA,GAAe5wB,KAI/D,EAEM8E,EAAqB,SAAC,G,IAAEisB,EAAA,EAAAA,SAC1BnvB,OAAO0C,QAAQC,aACX,CAAC,EACDpE,SAASqE,MACTusB,GAAYA,EAASC,UAAYD,EAASC,UAAYpvB,OAAO6C,SAASC,SAE9E,EAEaosB,EAA+D,SAAC,G,IAAEF,EAAA,EAAAA,UACrE,gBAAE7rB,EAAA,EAAAA,gBAER,OAFyB,EAAAM,QAGd,kBAAC,IAAc,MACfN,EACA,kBAAC,IAAK,CAAC6rB,UAAWA,IAElB,kBAACL,EAAK,KAErB,E,oDCbMpF,EAAa,IAAI8F,EAAA,EAKvB,yE,OACI,EAAAzD,MAAQ,CACJ0D,WAAW,G,CA4CnB,QA9CiC,iBAI7B,YAAAC,kBAAA,SAAkB9jB,EAAc+jB,GAG5B,OAAAvL,EAAA,GAAkBxY,EAAO+jB,GAEzBrvB,KAAKsvB,SAAS,CAAEH,WAAW,GAC/B,EACA,YAAAI,OAAA,WACI,OAAIvvB,KAAKyrB,MAAM0D,UACJ,kBAACjB,EAAU,MAGlB,kBAACntB,EAAA,EAA0BsD,SAAQ,CAACC,MAAO8kB,GACvC,kBAAC,WAAQ,CAACoG,SAAU,kBAAC,IAAc,OAC/B,kBAAC,IAAM,KACH,kBAACZ,EAAe,CACZlQ,KAAK,8BACL+Q,OAAO,EACPZ,UAAW,MAEf,kBAACD,EAAe,CACZlQ,KAAK,gCACL+Q,OAAO,EACPZ,UAAW,MAEf,kBAACD,EAAe,CACZlQ,KAAM,cACN+Q,OAAO,EACPZ,UAAW,MAEf,kBAAC,IAAK,CAACnQ,KAAK,WAAWmQ,UAAW,MAClC,kBAAC,IAAK,CAACnQ,KAAK,IAAI+Q,OAAO,EAAMZ,UAAW,MAGxC,kBAAC,IAAK,CAACA,UAAW,QAG1B,kBAAC9tB,EAAA,EAAkB,CAACC,GAAIooB,IACxB,kBAAC+E,EAAkB,CAACuB,MAAO,MAGvC,EACJ,EA9CA,CAAiC,a,aChBjC,YAAiB,KACjB,YAAW,KAEX,IAAMC,EAAiB,cACjB,EAAU,+BAAqBA,EAAgB,KAErD,IAASJ,OACL,kBAAC,IAAM,CAAChtB,QAAS,GACb,kBAAC,EAAG,OAERnE,SAASwxB,eAAe,Q,wGCxBfC,EAAY,CACrBC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,IAUFC,EAAY,IAAOC,IAAG,8DAAV,CAAU,iGAAc,iBACC,mBACD,8BACQ,cAFpC,SAAC,G,IAAE9tB,EAAA,EAAAA,KAAW,OAAAwtB,EAAUxtB,EAAV,IACf,SAAC,G,IAAEA,EAAA,EAAAA,KAAW,OAAAwtB,EAAUxtB,EAAV,IACH,SAAC,GAAiB,OAAf,EAAA+tB,QAAe,IAG1C,2B,8CAuCA,QAvC6B,iBAOzB,YAAAb,OAAA,WACI,IAAM,aACF,IAAAntB,KAAQiuB,EAAA,EAAAA,QAAStzB,EAAA,EAAAA,GACjB,IAAAsF,KACAtE,EAAA,EAAAA,UACA,6CAEAsE,EAAOiuB,EACX,IAAKjuB,EAAM,CAED,IAACkuB,EAAD,uCAAC,GACDC,EAAcC,SAASF,EAAqB,IAElD,GAAIxb,MAAMyb,GACN,MAAM,IAAIrzB,MAAM,sDAAsDJ,EAAE,KAExEsF,EADOmuB,GAAeX,EAAUC,GACzB,KACAU,GAAeX,EAAUE,GACzB,KACAS,GAAeX,EAAUG,GACzB,KAEA,I,CAIf,OACI,kBAACE,EAAS,aAACnyB,UAAWA,GAAe2yB,EAAU,CAAEL,QAASA,EAAShuB,KAAMA,IACrE,yBAAKsuB,UAAW,IAAI5zB,IAGhC,EACJ,EAvCA,CAA6B,IAAM6zB,U,wVCrB/BC,EAAS,IAAI,IAAa,CAC5B,GAAM,eACN,IAAO,qBACP,QAAW,cACX,QAAW,icAGE,GADF,IAAOC,IAAID,GACT,GCPX,EAAS,IAAI,IAAa,CAC5B,GAAM,YACN,IAAO,kBACP,QAAW,cACX,QAAW,odAGE,GADF,IAAOC,IAAI,GACT,GCPX,EAAS,IAAI,IAAa,CAC5B,GAAM,gBACN,IAAO,sBACP,QAAW,YACX,QAAW,k4BAGE,GADF,IAAOA,IAAI,GACT,GCPX,EAAS,IAAI,IAAa,CAC5B,GAAM,mBACN,IAAO,yBACP,QAAW,cACX,QAAW,qsBAGE,GADF,IAAOA,IAAI,GACT,GCPX,EAAS,IAAI,IAAa,CAC5B,GAAM,mBACN,IAAO,yBACP,QAAW,YACX,QAAW,8NAGE,GADF,IAAOA,IAAI,GACT,GCPX,EAAS,IAAI,IAAa,CAC5B,GAAM,2BACN,IAAO,iCACP,QAAW,cACX,QAAW,8kBAGE,GADF,IAAOA,IAAI,GACT,GCPX,EAAS,IAAI,IAAa,CAC5B,GAAM,aACN,IAAO,mBACP,QAAW,cACX,QAAW,0aCJT,GDMS,IAAOA,IAAI,GCNX,IAAI,IAAa,CAC5B,GAAM,eACN,IAAO,qBACP,QAAW,cACX,QAAW,63BAGE,GADF,IAAOA,IAAI,GACT,GCPX,EAAS,IAAI,IAAa,CAC5B,GAAM,aACN,IAAO,mBACP,QAAW,cACX,QAAW,+hBAGE,GADF,IAAOA,IAAI,GACT,E,w/BCYFC,EAA6C,SAAC,G,IAAE/vB,EAAA,EAAAA,GACnDgwB,EAAeC,GAAa,IAAavuB,UACzC4F,EAAS4oB,GAAY,IAAaxuB,WAAa,GAC/C8Q,EAAQ,qBAAW,IAAX,CAAyBlL,GAMvC,OAJA,qBAAU,WACNtH,EAAGgV,gBAAkB1N,CACzB,GAAG,CAACA,IAECkL,GAAUwd,EAWX,kBAAC,IAAa,CAACxd,MAAOA,GAClB,kBAAC,IAAM,KACH,kBAAC,IAAK,CAACkL,KAASsS,EAAatS,KAAI,QAASmQ,UAAWsC,KACrD,kBAAC,IAAK,CACFzS,KAASsS,EAAatS,KAAI,gBAC1BmQ,UAAWuC,KAEf,kBAAC,IAAK,CAAC1S,KAASsS,EAAatS,KAAI,QAASmQ,UAAWwC,KACrD,kBAAC,IAAK,CACF3S,KAASsS,EAAatS,KAAI,OAC1B+Q,OAAO,EACPZ,UAAWyC,KAEf,kBAAC,IAAK,CACF5S,KAASsS,EAAatS,KAAI,kCAC1BmQ,UAAW0C,KAEf,kBAAC,IAAQ,CACLpnB,KAAM,GAAG6mB,EAAatS,KACtBlW,GAAOwoB,EAAatS,KAAI,OACxB+Q,OAAO,MAxBZ+B,GAAkBxwB,EA6BjC,E,+DCpDMywB,GAAS,IAAO/zB,IAAG,0DAAV,CAAU,4DAAmB,SAOnC,kCANH,SAAC,GACC,OADC,EAAA4V,MAED,YAAG,sOADH,IASFoe,GAAa,YAAO,MAAK,+DAAZ,CAAY,iFAIlBC,GAAgD,SAAC,G,IAC1D70B,EAAA,EAAAA,SACA,IAAA80B,cAAA,IAAS,GAAT,EACA,IAAAte,YAAA,IAAO,GAAP,EACAue,EAAA,EAAAA,UAMMvpB,EAAS4oB,GAAY,IAAaxuB,UAChCiQ,EAAA,eAAAA,UAER,OACI,kBAAC,KAAI,KACD,kBAAC,KAAS,CAACW,KAAMA,GACZxW,EACA80B,GAAUjf,GACP,kBAAC8e,GAAM,CAACne,KAAMA,GACV,kBAAC,KAAC,K,OACO,IACL,kBAACoe,GAAU,CAACvvB,QAfpB,WACZ0vB,EAAU,KAAmBta,oBAAqB,KACtD,EAasDrQ,KAAM,OAAOyL,GACtCA,GACS,I,wCAGlB,kBAAC,KAAK,wcAQ9B,E,+ECjDMmf,GAAe,YAAO,MAAa,iEAApB,CAAoB,mCAAwB,SAc5D,SAbC,SAAA7zB,GACE,MAAoB,YAAhBA,EAAMwtB,MACC,YAAG,uMAIa,aAAhBxtB,EAAMwtB,MACN,YAAG,8IAIV,CAER,IAGSsG,GAA0C,SAAC,GACpD,IAAAj1B,EAAA,EAAAA,SACA2uB,EAAA,EAAAA,MACAuG,EAAA,EAAAA,eACAC,EAAA,EAAAA,gBACA,yEAQA,MANc,YAAVxG,GAAuBuG,EACvBl1B,EAAWk1B,EACM,aAAVvG,GAAwBwG,IAC/Bn1B,EAAWm1B,GAIX,kBAACH,GAAY,aAACrG,MAAOA,GAAWxtB,EAAK,CAAE4K,SAAoB,SAAV4iB,IAClC,SAAVA,GAAoB,kBAAC3iB,GAAA,EAAO,CAACopB,WAAsB,aAAVzG,EAAsBrpB,MAAM,IACrEtF,EAGb,E,QC5Caq1B,GAAyD,cAAS,SAAAl0B,GACnE,IAAAm0B,EAAA,EAAAA,MAAO,2BAEf,OAAO,kBAAC,KAAK,aAAC9tB,MAAO8tB,EAAM9tB,MAAO+tB,OADnB,WAAM,OAAAD,EAAME,UAAN,GACiCC,GAC1D,IAEA,cAiBI,WAAYC,EAA+BC,GAAA,KAAAA,YAf3C,KAAAnuB,MAAgB,GAGhB,KAAAouB,kBAA4B,EAaxB1yB,KAAKsE,MAAQkuB,CACjB,CAOJ,OAlBI,sBAAI,gCAAiB,C,IAArB,WACI,OAAOxyB,KAAK0yB,iBAAmB1yB,KAAKyyB,UAAUzyB,KAAKsE,OAAS,IAChE,E,gCAGA,sBAAI,sBAAO,C,IAAX,WACI,OAAQtE,KAAK2yB,iBACjB,E,gCAOA,YAAAL,SAAA,WAEI,OADAtyB,KAAK0yB,kBAAmB,GAChB1yB,KAAK2yB,iBACjB,EAvBA,aADC,cAAWC,K,4BAIZ,aADC,e,uCAID,aADC,a,sCAMD,aADC,a,4BAUD,aADC,UAAOzyB,O,6BAKZ,C,CA1BA,G,UCLa0yB,GAAkE,SAAC,G,IAAE7mB,EAAA,EAAAA,QAE9E,OACI,kBAACoiB,GAAA,EAAgB,KACb,kBAACA,GAAA,EAAY,KAAEpiB,GACf,kBAACoiB,GAAA,EAAc,CAACjsB,QAJT,WAAM,OAAAtC,OAAO6C,SAASiC,QAAhB,GAIkB,UAG3C,E,0DCdamuB,GAAa,SAACvO,GAIvB,GAHiBnmB,SAASwxB,eAAe,aAIrC,KAAWrL,IAAWA,QAD1B,CAIA,IAAMwO,EAAS30B,SAASgqB,cAAc,UAEtC2K,EAAOh2B,GAAK,YACZg2B,EAAOtqB,IAAM,4BACbsqB,EAAOC,OAAQ,EACX,KAAWzO,IACXwO,EAAOjzB,iBAAiB,OAAQykB,GAGpCnmB,SAASqQ,KAAKwkB,YAAYF,E,CAC9B,EChBMG,GAAgB,IAAOx1B,IAAG,iEAAV,CAAU,2DAAmB,SAK1C,iCAJH,SAAAO,GACE,OAAAA,EAAMk1B,MACN,YAAG,sGADH,IAMFC,GAAO,IAAOC,EAAC,wDAAR,CAAQ,uEAuBRC,GAAwC,SAAC,G,IAAEC,EAAA,EAAAA,MAC9Cx1B,EAAY,MAlBJ,SAACw1B,GACf,IAAMryB,EAAM,CACRsyB,KAAM,UACNC,WAAY,gBACZC,KAAM,sBACNC,SAAU,cACVC,OAAQ,YACRC,IAAK,SACLC,QAAS,kBAEb,OAAO5yB,EAAIqyB,IAAUryB,EAAI4yB,OAC7B,CAO4BC,CAAUR,GAClC,OACI,kBAACL,GAAa,CAACC,KAAgB,YAAVI,GACjB,0BACIpsB,IAAI,aACJuB,KAAK,WACLxB,KAAK,qFAET,kBAACksB,GAAI,CAACr1B,UAAWA,IAG7B,EChBM+L,GAAU,IAAOpM,IAAG,2DAAV,CAAU,mSAQpBs2B,GAAQ,IAAOt2B,IAAG,0DAAV,CAAU,2JAIlBu2B,GAAS,IAAOv2B,IAAG,0DAAV,CAAU,mFAInBw2B,GAAc,YAAOF,IAAM,+DAAb,CAAa,mFAI3BG,GAAY,IAAOz2B,IAAG,6DAAV,CAAU,+OAOtB02B,GAAY,IAAO12B,IAAG,8DAAV,CAAU,6RAOtB22B,GAAe,IAAOtsB,IAAG,gEAAV,CAAU,iFAIzBusB,GAAK,IAAOC,GAAE,sDAAT,CAAS,uUAQdC,GAAY,IAAO92B,IAAG,8DAAV,CAAU,wVAE0B,yOAAjC,SAAAO,GAAS,OAAAA,EAAMuV,MAAMzB,YAAZ,IAUxB0iB,GAAY,IAAO/2B,IAAG,6DAAV,CAAU,oLAAsB,SAKzC,yIAMwC,iBAV3C,SAAC,GACC,OADC,EAAAg3B,QAED,YAAG,mGACkD,kBAAhC,SAAC,GAAc,OAAZ,EAAAlhB,MAAkBvB,WAAN,GAFpC,IASS,SAAC,GAAc,OAAZ,EAAAuB,MAAkB1B,WAAN,IAI1B6iB,GAAa,YAAO,sBAAkB,+DAAzB,CAAyB,6JACS,4FAAhC,SAAA12B,GAAS,OAAAA,EAAMuV,MAAMvB,WAAZ,IAOxB2iB,GAAa,YAAO,sBAAkB,+DAAzB,CAAyB,mGACQ,oCAAhC,SAAA32B,GAAS,OAAAA,EAAMuV,MAAMvB,WAAZ,IAIvB4iB,GAAU,YAAO,mBAAe,4DAAtB,CAAsB,+BAIzBC,GAAqD,cAAS,SAAC,G,IAAE9zB,EAAA,EAAAA,GACpE,0CAAC+zB,EAAA,KAAWC,EAAA,KAQlB,OAPA,qBAAU,WACNh0B,EAAGwN,mBAAmB,KAAmB8J,wBAAyBtX,EAAGrE,gBACrEm2B,IAAW,WACPkC,EAAaC,OAAO,KAAY31B,OAAOH,QAC3C,GACJ,GAAG,IAGC,kBAAC,kBAAc,CAACG,OAAQy1B,GACpB,kBAAC,YAAQ,KACL,kBAACG,GAAa,CAACl0B,GAAIA,KAInC,IAEam0B,GAAuD,cAAS,SAAC,G,IAAE71B,EAAA,EAAAA,OAAQ0B,EAAA,EAAAA,GAC5E4R,EAAA,+BAAAA,KAoCR,OACI,kBAAC+e,GAAY,CAACE,UAAW7wB,EAAGwN,oBACxB,kBAAC,KAAI,CAAC4mB,IAAI,GAAG3sB,IAAKmK,IAClB,kBAAC,KAAE,K,eAAc5R,EAAGpE,cACpB,kBAACkN,GAAO,KACJ,uCACA,kBAACmqB,GAAM,KAAE,aAAkBjzB,EAAGq0B,SAC9B,kBAACrB,GAAK,qBACN,kBAACE,GAAW,KAAE,aAAkBlzB,EAAGs0B,SAEvC,kBAAC,KAAI,CAACC,SAhBG,SAAOvR,GAAmC,oD,4CACvDA,EAAEwR,iBACFx0B,EAAGwN,mBAAmB,KAAmBiJ,mBAAoBzW,EAAGrE,gBAChEqE,EAAGy0B,aAAan2B,G,WAaco2B,YAAY,GAClC,kBAACpB,GAAE,6BACH,kBAACE,GAAS,KACN,kBAACC,GAAS,CAACC,QAAQ,GACf,kBAACpB,GAAQ,CAACC,MAAOvyB,EAAG20B,aAExB,kBAAChB,GAAU,CAAC/rB,SA5CL,SAACob,GACZ,IAAAuP,EAAA,EAAAA,MAAOrG,EAAA,EAAAA,SAAU5hB,EAAA0Y,EAAA1Y,MACzBtK,EAAG40B,iBAAchxB,EACjB5D,EAAG20B,UAAYpC,EACfvyB,EAAG60B,eAAiB3I,EACpBlsB,EAAG80B,YAAcxqB,CACrB,IAuCgB,kBAACspB,GAAU,CAAChsB,SArCL,SAACob,GACZ,IAAAkJ,EAAA,EAAAA,SAAU5hB,EAAA0Y,EAAA1Y,MAClBtK,EAAG40B,iBAAchxB,EACjB5D,EAAG+0B,eAAiB7I,EACpBlsB,EAAGg1B,YAAc1qB,CACrB,IAiCgB,kBAACupB,GAAO,CAACjsB,SA/BL,SAACob,GACT,IAAAkJ,EAAA,EAAAA,SAAU5hB,EAAA0Y,EAAA1Y,MAClBtK,EAAG40B,iBAAchxB,EACjB5D,EAAGi1B,YAAc/I,EACjBlsB,EAAGk1B,SAAW5qB,CAClB,IA2BgB,kBAACmpB,GAAS,KACN,kBAAC1rB,GAAA,EAAO,CAAC3G,KAAM,SAGtBpB,EAAGm1B,WAAa,kBAAC,KAAU,KAAEn1B,EAAGm1B,UAAUnqB,SAC1ChL,EAAG40B,aAAe,kBAAC,KAAU,K,UAAS50B,EAAG40B,aACzC50B,EAAGo1B,aAAe,kBAACvD,GAAqB,CAAC7mB,QAAShL,EAAGo1B,cACtD,kBAAC9B,GAAE,qBACH,kBAACnC,GAAS,CAACxpB,YAAY,kBAAkBypB,MAAOpxB,EAAGkF,KAAM0C,SA9DhD,SAACob,GAClBhjB,EAAGkF,KAAK5B,MAAQ0f,EAAEE,cAAc5f,KACpC,IA6DatD,EAAGkF,KAAKysB,mBAAqB,kBAAC,KAAU,KAAE3xB,EAAGkF,KAAKysB,mBACnD,kBAAC2B,GAAE,iDACH,kBAACnC,GAAS,CACNC,MAAOpxB,EAAGuJ,MACV3B,SAhEM,SAACob,GACnBhjB,EAAGuJ,MAAMjG,MAAQ0f,EAAEE,cAAc5f,KACrC,EA+DgBqE,YAAY,0BACZD,KAAK,UAER1H,EAAGuJ,MAAMooB,mBACN,kBAAC,KAAU,KAAE3xB,EAAGuJ,MAAMooB,mBAE1B,kBAACZ,GAAY,CAACrpB,KAAK,SAAS+iB,MAAOzqB,EAAGq1B,mB,OAC7B,aAAkBr1B,EAAGs0B,SAGlC,kBAAClB,GAAS,mBACV,kBAACD,GAAS,KACN,kBAACE,GAAY,CAACe,IAAI,GAAG3sB,IAAK,OAC1B,kCACA,kBAAC4rB,GAAY,CAACe,IAAI,GAAG3sB,IAAK,GAAA8L,KAI1C,IAEa2gB,GAAgB,wBAAaC,I,kDClO7BmB,GAAa,SAACC,EAAqB7V,GAI5C,MAHoB,kBAAT6V,IACPA,EAAO,OAAAC,GAAA,GAASD,IAEb,OAAAjO,GAAA,GAAOiO,EAAM7V,GACfpR,QAAQ,OAAQ,MAChBA,QAAQ,OAAQ,KACzB,E,UCTamnB,GAAe,SAACC,GAAmB,OAAAA,EAAOpnB,QAAQ,kBAAmB,KAAlC,ECqB1CqnB,GAAc,IAAOj5B,IAAG,gEAAV,CAAU,ieAWxBk5B,GAAY,IAAOl5B,IAAG,6DAAV,CAAU,6eAWtBm5B,GAAiB,IAAOn5B,IAAG,mEAAV,CAAU,+gBAY3B,GAAU,IAAOA,IAAG,4DAAV,CAAU,qGAIpBo5B,GAAa,IAAOp5B,IAAG,8DAAV,CAAU,2EAIvBq5B,GAAS,IAAOr5B,IAAG,0DAAV,CAAU,qHAA2C,SAI3D,SAMA,kFATH,SAAC,G,IAAEs5B,EAAA,EAAAA,UACD,mBAAG,2FACsB,mBAATA,EADhB,IAGF,SAAC,GACC,OADC,EAAAC,UAED,YAAG,8MADH,IAUFC,GAAS,IAAOx5B,IAAG,2DAAV,CAAU,qKAMnBy5B,GAAe,IAAOz5B,IAAG,iEAAV,CAAU,iFAIzB05B,GAAe,IAAO15B,IAAG,iEAAV,CAAU,6tBAezB25B,GAAc,IAAO35B,IAAG,gEAAV,CAAU,qOAGoB,0FAAjC,SAAAO,GAAS,OAAAA,EAAMuV,MAAMpB,YAAZ,IAMpBklB,GAAgB,IAAO55B,IAAG,iEAAV,CAAU,wHACmB,+DAAlC,SAAAO,GAAS,OAAAA,EAAMuV,MAAMrB,aAAZ,IAKpBolB,GAAQ,IAAOxvB,IAAG,yDAAV,CAAU,2fAYlByvB,GAAqB,IAAOrjB,OAAM,uEAAb,CAAa,mRAQ3BsjB,GAA+C,cAAS,SAAC,G,IAAEz2B,EAAA,EAAAA,GAC5DysB,EAAA,0BAAAA,QACR,qBAAU,WACNqF,KACA,IAAM4E,EAAQC,GAAoBlK,EAAQ/qB,UAC1C,GAAIg1B,EAAO,CACD,eAAEE,EAAA,EAAAA,gBAAiBh7B,EAAA,EAAAA,aAAc0L,EAAA,EAAAA,OACvCtH,EAAGgV,gBAAkB1N,EACrBtH,EAAG42B,gBAAkBA,EACrB52B,EAAGpE,aAAeA,EAClBoE,EAAG62B,mB,CAEX,GAAG,CAACpK,EAAQ/qB,SAASC,WACrB,qBAAU,WACE,QAAAm1B,gBACM,eAAVrM,EACAzqB,EAAGwN,mBAAmB,KAAmB2J,wBAAyBnX,EAAGrE,gBACpD,iBAAV8uB,EACPgC,EAAQne,QAAQyoB,GAAiB/2B,EAAGgV,kBACnB,uBAAVyV,EACPgC,EAAQne,QAAQ0oB,GAAeh3B,EAAGgV,kBACjB,oBAAVyV,EACPgC,EAAQne,QACJ2oB,GACIj3B,EAAGgV,gBACHhV,EAAG42B,gBACH52B,EAAGpE,aACH,YAGS,YAAV6uB,GACPgC,EAAQne,QACJ2oB,GAAkBj3B,EAAGgV,gBAAiBhV,EAAG42B,gBAAiB52B,EAAGpE,aAAc,OAGvF,GAAG,CAACoE,EAAG82B,kBACD,qCAAEllB,EAAA,EAAAA,KAAMD,EAAA,EAAAA,UAGd,qBAAU,WACN3R,EAAGk3B,iBAAmBzK,EAAQ/qB,SAASy1B,KAAKC,QAAQ,cAAgB,CACxE,GAAG,CAAC3K,EAAQ/qB,SAASy1B,OAQrB,MAA2B,YAAvBn3B,EAAG82B,gBACI,KAAcr4B,SAAW,kBAAC,KAAc,MAAM,KACvB,eAAvBuB,EAAG82B,iBAAoC92B,EAAGk3B,iBAC1C,kBAACpD,GAAO,CAAC9zB,GAAIA,IAGpB,oCACI,kBAAC2wB,GAAY,CAACre,MAAM,EAAMue,UAAW7wB,EAAGwN,oBACpC,kBAAC,KAAI,CAAC4mB,IAAI,GAAG3sB,IAAKmK,IAClB,kBAACikB,GAAc,KACX,kBAACK,GAAM,K,eAAcl2B,EAAGpE,cACxB,kBAAC26B,GAAK,CAAC9uB,IAAKzH,EAAGq3B,WACf,kBAAC,GAAO,KACJ,kBAACvB,GAAU,KACP,kBAACC,GAAM,CAACC,UAAW,KACf,kBAACK,GAAW,aACZ,kBAACC,GAAa,KACTt2B,EAAGu1B,MAAQD,GAAWt1B,EAAGu1B,KAAM,kCAI5C,kBAACO,GAAU,KACP,kBAACC,GAAM,CAACC,UAAW,KACf,kBAACK,GAAW,iBACZ,kBAACC,GAAa,KACV,kBAACH,GAAY,KAAEn2B,EAAGs3B,cAClB,6BAAMt3B,EAAGu3B,oBAIrB,kBAACzB,GAAU,KACP,kBAACC,GAAM,CAACC,UAAW,KACf,kBAACK,GAAW,aACZ,kBAACC,GAAa,KAAEt2B,EAAGw3B,gBAG3B,kBAAC1B,GAAU,KACP,kBAACC,GAAM,CAACC,UAAW,KACf,kBAACK,GAAW,qBACZ,kBAACD,GAAY,KAAEp2B,EAAGpE,eAEtB,kBAACm6B,GAAM,CAACC,UAAW,KACf,kBAACK,GAAW,kBACZ,kBAACC,GAAa,KAAEt2B,EAAGy3B,YAG3B,kBAAC3B,GAAU,KACP,kBAACC,GAAM,CAACC,UAAW,IAAKC,UAAU,GAC9B,kBAACI,GAAW,uBACZ,kBAACC,GAAa,KACT,aAA4Bt2B,EAAG03B,MAAO,KAG/C,kBAAC3B,GAAM,CAACC,UAAW,GAAIC,UAAU,GAC7B,kBAACI,GAAW,eACZ,kBAACC,GAAa,KAAEb,GAAaz1B,EAAG01B,UAEpC,kBAACK,GAAM,CAACC,UAAW,IAAKC,UAAU,GAC9B,kBAACI,GAAW,eACZ,kBAACC,GAAa,KAAE,aAAkBt2B,EAAGq0B,YAIjD,kBAACsB,GAAW,KACR,kBAAC,KAAY,CAACx0B,QAtEZ,WAClBnB,EAAGwN,mBAAmB,KAAmBkJ,yBAA0B1W,EAAGrE,gBAChE,iBAAEgG,EAAA,EAAAA,SAAUiB,EAAA,EAAAA,OAClB6pB,EAAQnoB,KAAK,GAAG3C,EAAWiB,EAAM,aACrC,GAkEwD,YAExC,kBAACgzB,GAAS,KACN,kBAAC,KAAI,CACD75B,GAAG,0BACHmK,KAAK,GACL/E,QAASnB,EAAG23B,sBAAoB,kCAOhD,kBAACC,GAAA,EAAO,CACJC,UAAU,OACVC,OAAQ93B,EAAG+3B,iBACXC,OAAQh4B,EAAGi4B,WACXrzB,OAAO,2BAEP,kBAACszB,GAAA,EAAa,KACV,kBAAC1B,GAAkB,CAACr1B,QAASnB,EAAGi4B,YAC5B,kBAAClwB,GAAA,EAAO,CAAC1G,KAAK,KAAKD,KAAM,SAGjC,kBAAC+2B,GAAA,EAAW,K,8DACoD,IAC5D,kBAAC,KAAI,CAACjyB,KAAM,OAAOyL,GAAcA,G,qBAKrD,I,mBCxRA,SAASymB,GAAQ12B,EAAqCpB,GAClD,IAAI0d,EAAyB,GAI7B,OAHItc,IACAsc,EAAM,iBAAMtc,EAASkB,QAAQtC,IAAQ,IAElC0d,CACX,CAQO,SAASqa,GAAW32B,EAAqCpB,G,MAGxD0d,EAFEsa,EAASF,GAAQ12B,EAAUpB,GAUjC,OALI0d,EADAlZ,MAAMyzB,QAAQD,GACRA,EAAO,IAAM,GAEbA,GAAU,IAGb,EAAP,IAAUh4B,GAAM0d,EAAG,CACvB,CCFA,I,mMAAMwa,GAAiB,YAAO,MAAM,kEAAb,CAAa,6NAOvBC,GAAK,IAAOC,GAAE,sDAAT,CAAS,2PAOdC,GAA4D,cAAS,SAAC,G,IAAE34B,EAAA,EAAAA,GACzEysB,EAAA,0BAAAA,QACF,iCAAE7a,EAAA,EAAAA,KAAMD,EAAA,EAAAA,UAGd,qBAAU,WACNmgB,KACA,IAAMvqB,EAjCd,SAAuB7F,GACnB,IAAMk3B,EAAOP,GAAW32B,EAAU,QAC5Bm3B,EAAMR,GAAW32B,EAAU,OAC3Bo3B,EAAMT,GAAW32B,EAAU,OAEjC,OAAO,uCAAKk3B,GAASE,GAAQD,EACjC,CA2BuBE,CAActM,EAAQ/qB,UACrC1B,EAAG44B,KAAOrxB,EAAOqxB,KACjB54B,EAAG64B,IAAMtxB,EAAOsxB,IAER,IAAAC,EAAA,EAAAA,IACJA,GACA94B,EAAGg5B,gBAA0B,YAARF,EACrB94B,EAAGi5B,aAAuB,YAARH,GAIlB94B,EAAGwN,mBAAmB,KAAmB0J,qBAAsBlX,EAAGrE,eAE1E,GAAG,IAmBH,OACI,kBAACg1B,GAAY,CAACre,MAAM,EAAOue,UAAW7wB,EAAGwN,oBACrC,kBAAC,KAAI,CAAC4mB,IAAI,GAAG3sB,IAAKmK,IAClB,kBAAC,KAAI,CAAC2iB,SAba,SAAOvR,GAA6B,oD,qCAC3DA,EAAEwR,iBACF,IACI/H,EAAQnoB,KAAK40B,GAAoBl5B,EAAGgV,gBAAiBhV,EAAG44B,KAAM54B,EAAG64B,MACjE74B,EAAGwN,mBAAmB,KAAmBmJ,oBAAqB3W,EAAGrE,e,CACnE,MAAOqnB,GACL,MAAM,OAAAF,GAAA,GAAkBE,E,mBAQpB,kBAAC,KAAK,qBACN,kBAACwV,GAAc,CACX7wB,YAAY,+BACZrE,MAAOtD,EAAG64B,IACVjxB,SAtBI,SAACob,GACjBhjB,EAAG64B,IAAM7V,EAAEE,cAAc5f,KAC7B,IAsBY,kBAAC,KAAK,oBACN,kBAAC,KAAK,CACFqE,YAAY,8BACZrE,MAAOtD,EAAG44B,KACVhxB,SA/BK,SAACob,GAClBhjB,EAAG44B,KAAO5V,EAAEE,cAAc5f,KAC9B,IA+BatD,EAAGi5B,cACA,kBAAC,KAAU,gEAEdj5B,EAAGg5B,iBACA,kBAAC,KAAU,wDAEf,kBAAC,KAAY,CAACnxB,UAAW7H,EAAGm5B,gBAAiBzxB,KAAK,UAAQ,oBAI7DiK,GAAa,kBAAC8mB,GAAE,MAG7B,I,yCCxGaW,GAAa,IAAO18B,IAAG,8DAAV,CAAU,keAGQ,qTAA1B,SAAC,GAAc,OAAZ,EAAA8V,MAAkBnB,KAAN,IAgBpBgc,GAAe,SAAC,G,IAAEvxB,EAAA,EAAAA,SAAe,OAC1C,kBAAC,IAAa,CAAC0W,MAAO,KAClB,kBAAC4mB,GAAU,KACP,kBAACnzB,GAAA,EAAQ,MACRnK,GAJiC,EChBjCyW,GAAO,IAAO7V,IAAG,wDAAV,CAAU,iSASxB28B,GAAU,IAAO38B,IAAG,2DAAV,CAAU,iIAKpB,GAAS,IAAO48B,GAAE,2DAAT,CAAS,iSAQlB5mB,GAAO,IAAO3L,IAAG,wDAAV,CAAU,iMAMjB4L,GAAI,IAAOC,EAAC,sDAAR,CAAQ,2IAKZ2mB,GAAI,IAAOhmB,EAAC,qDAAR,CAAQ,yRAULimB,GAAQ,IAAO98B,IAAG,0DAAV,CAAU,iPAQlBuwB,GAAQ,IAAOlmB,IAAG,0DAAV,CAAU,uRAQlB0yB,GAAqC,SAAC,G,IAAEz5B,EAAA,EAAAA,GAIjD,OAHA,qBAAU,WACNA,EAAGwN,mBAAmB,KAAmB4J,qBAAsBpX,EAAGrE,eACtE,IAEI,kBAAC0xB,GAAQ,KACL,kBAAC9a,GAAI,KACD,kBAAC,GAAM,K,aAEH,kBAACG,GAAI,CAACjL,IAAK,GAAA8L,KAEf,kBAAC8lB,GAAO,KACJ,kBAAC1mB,GAAC,K,cACa,uC,mIAC0E,IACrF,kBAAC4mB,GAAC,CAACrzB,KAAK,wBAAwBtB,OAAO,UAAQ,UAE1C,I,0FAMjB,kBAACqoB,GAAK,CAACxlB,IAAK,OACZ,kBAAC+xB,GAAK,MAGlB,E,UCrFM,GAAS,IAAOE,GAAE,0DAAT,CAAS,2PAMlBC,GAAY,IAAOC,GAAE,6DAAT,CAAS,2PAMrB,GAAI,IAAOhnB,EAAC,sDAAR,CAAQ,uFAIZ,GAAI,IAAOW,EAAC,sDAAR,CAAQ,iNASZ,GAAO,IAAOxM,IAAG,yDAAV,CAAU,yMAOVkD,GAAyC,SAAC,G,IAAEjK,EAAA,EAAAA,GAIrD,OAHA,qBAAU,WACNA,EAAGwN,mBAAmB,KAAmB6J,yBAA0BrX,EAAGrE,eAC1E,IAEI,kBAAC0xB,GAAQ,KACL,kBAAC,GAAI,CAAC5lB,IAAK,GAAA8L,IACX,kBAAChB,GAAI,KACD,kBAAC,GAAM,cACP,kBAAConB,GAAS,8BACV,kBAAC,GAAC,K,iBACgB,kBAAC,GAAC,CAACzzB,KAAK,KAAG,a,MAGjC,kBAACszB,GAAK,MACN,kBAACvM,GAAK,CAACxlB,IAAK,OAGxB,ECrDaoyB,GAA4C,SAAC,G,IAAE75B,EAAA,EAAAA,GAChD4R,EAAA,+BAAAA,KACR,OACI,kBAAC+e,GAAY,CAACE,UAAW7wB,EAAGwN,oBACxB,kBAAC,KAAI,CAAC4mB,IAAI,GAAG3sB,IAAKmK,IAClB,kBAAC,KAAE,mBACH,kBAAC,KAAC,0DACF,kBAAC6mB,GAAE,MAGf,ECFMqB,GAAY,YAAO,MAAG,8DAAV,CAAU,2XAOsB,gDAAjC,SAAC,GAAc,OAAZ,EAAAtnB,MAAkBlD,YAAN,IAK1ByqB,GAAW,YAAO,MAAE,4DAAT,CAAS,uFAIpB,GAAU,IAAOr9B,IAAG,2DAAV,CAAU,qPAGyB,8GAAlC,SAAC,GAAc,OAAZ,EAAA8V,MAAkBrB,aAAN,IAO1B,GAAS,IAAOzU,IAAG,0DAAV,CAAU,mFAIZs9B,GAA+D,cAAS,SAAC,G,IAAEh6B,EAAA,EAAAA,GACpF,qBAAU,WACN,GAAIA,EAAGi6B,WACHj6B,EAAGwN,mBACC,KAAmBgK,kCACnBxX,EAAGrE,oBAEJ,CACH,IAAM2L,EAAS4oB,GAAY,IAAaxuB,UACpC4F,GACAmlB,EAAQne,QAAQ2oB,GAAkB3vB,G,CAG9C,GAAG,CAACtH,EAAGi6B,aACC,IAAAxN,EAAA,0BAAAA,QACA7a,EAAA,+BAAAA,KACR,OACI,kBAAC+e,GAAY,CAACC,QAAQ,EAAOC,UAAW7wB,EAAGwN,oBACvC,kBAAC,KAAI,CAAC4mB,IAAI,GAAG3sB,IAAKmK,IAClB,kBAACkoB,GAAS,KACN,kBAAC/xB,GAAA,EAAO,CAAC1G,KAAK,KAAKD,KAAM,O,sBAG7B,kBAAC24B,GAAQ,mBACT,kBAACA,GAAQ,gEACT,kBAAC,GAAO,KACJ,sCACA,kBAAC,GAAM,KAAE/5B,EAAGkF,KAAK5B,OACjB,uCACA,kBAAC,GAAM,KAAE,aAAkBtD,EAAGq0B,UAEjCr0B,EAAGi6B,YACA,kBAAC,KAAgB,CAAC/zB,KAAMlG,EAAGi6B,WAAYr1B,OAAO,SAASuB,IAAI,uBAAqB,gBAMhG,IC3Ea+zB,GAA8C,SAAC,G,IAAEl6B,EAAA,EAAAA,GACpD,iCAAE4R,EAAA,EAAAA,KAAMD,EAAA,EAAAA,UAId,OAHA,qBAAU,WACN3R,EAAGwN,mBAAmB,KAAmB+J,8BAA+BvX,EAAGrE,eAC/E,IAEI,kBAACg1B,GAAY,CAACC,QAAQ,EAAOC,UAAW7wB,EAAGwN,oBACvC,kBAAC,KAAI,CAAC4mB,IAAI,GAAG3sB,IAAKmK,IAClB,kBAAC,KAAE,cACH,kBAAC,KAAC,K,8FAEc,uBAAG1L,KAAM,OAAOyL,GAAcA,G,qBAI1D,E,oBClBawoB,GAAc,IAAOz9B,IAAG,gEAAV,CAAU,mNAKxB09B,GAAgB,SAAC,G,IAAEt+B,EAAA,EAAAA,SAC5B,OACI,kBAAC,IAAa,CAAC0W,MAAO,KAClB,kBAAC2nB,GAAW,KAAEr+B,GAG1B,E,mDCAau+B,GAAwC,SAAC,G,IAAE3+B,EAAA,EAAAA,SAChD,iCAAEiW,EAAA,EAAAA,UAAWE,EAAA,EAAAA,iBAAkBC,EAAA,EAAAA,SAC/BkT,EAAWsV,GAAY5+B,GAE7B,OACE,6BACE,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,mFACiF,IACjF,2BAAIlmB,EAASE,c,sEAGf,kBAAC,GAAC,K,MACI2+B,GAAY7+B,G,OAAe8+B,GAAiB9+B,G,OAAespB,E,0DACtB,aAAkBtpB,EAAS24B,Q,2OAKtE,kBAAC,GAAC,K,oEACiE,kBAACoG,GAAK,KAAE9oB,GAAmB,I,yGAI9F,kBAAC,GAAC,K,gDAC8C,IAC9C,kBAAC+oB,GAAG,K,gBAAeh/B,EAASsZ,iB,WAA8B,2BAAItZ,EAASE,c,oBAC3D,2BAAIF,EAASC,gB,iDAAkE,IAC1FkW,E,4BAEH,kBAAC,GAAC,K,uHAE+BA,E,YAEjC,kBAAC8oB,GAAO,K,eAEN,kBAACC,GAAS,KAAE9oB,IAIpB,ECzCa+oB,GAAiD,SAAC,G,IAAEn/B,EAAA,EAAAA,SACvDoW,EAAA,+BAAAA,SACFkT,EAAWsV,GAAY5+B,GAE7B,OACE,6BACE,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,+EAC6E,IAC7E,2BAAIlmB,EAASE,c,sEAGf,kBAAC,GAAC,K,MACI2+B,GAAY7+B,G,OAAe8+B,GAAiB9+B,G,OAAespB,E,0DACtB,aAAkBtpB,EAAS24B,Q,2OAKtE,kBAAC,GAAC,K,+BAC4B,kBAACqG,GAAG,K,gBAAeh/B,EAASsZ,iB,UAA8B,IACtF,2BAAItZ,EAASE,c,oBAAkC,2BAAIF,EAASC,gB,wDACZqpB,E,sBAElD,kBAAC,GAAC,K,qHAE4BA,E,+BAG9B,kBAAC2V,GAAO,K,gBAEN,kBAACC,GAAS,KAAE9oB,IAIpB,ECpCagpB,GAA2C,SAAC,G,IAAEp/B,EAAA,EAAAA,SACnDspB,EAAWsV,GAAY5+B,GAE7B,OACE,6BACE,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,+EAC6E,IAC7E,2BAAIlmB,EAASE,c,sEAGf,kBAAC,GAAC,K,MACI2+B,GAAY7+B,G,OAAe8+B,GAAiB9+B,G,OAAespB,E,0DACtB,aAAkBtpB,EAAS24B,Q,2OAKtE,kBAAC,GAAC,K,6CAC0C,kBAACqG,GAAG,K,gBAAeh/B,EAASsZ,iB,WAC9D,2BAAItZ,EAASE,c,oBAAkC,2BAAIF,EAASC,gB,wDACpBqpB,E,sBAElD,kBAAC,GAAC,K,8BAC2B,2BAAItpB,EAASE,c,oDAI1C,kBAAC++B,GAAO,K,gBAEN,kBAACC,GAAS,K,eAAc5V,IAIhC,ECjCa+V,GAAuC,SAAC,G,IAAEr/B,EAAA,EAAAA,SAC7C,iCAAEiW,EAAA,EAAAA,UAAWE,EAAA,EAAAA,iBAAkBC,EAAA,EAAAA,SAC/BkT,EAAWsV,GAAY5+B,GAE7B,OACI,6BACI,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,+EAC+E,IAC7E,2BAAIlmB,EAASE,c,sEAGjB,kBAAC,GAAC,K,MACMo/B,GAAYt/B,G,OAAespB,E,yBAAgC,IAC9D,aAAkBtpB,EAAS24B,Q,iRAKhC,kBAAC,GAAC,K,6CAC6C,IAC3C,kBAACqG,GAAG,K,gBAAeh/B,EAASsZ,iB,UAA8B,IAC1D,2BAAItZ,EAASE,c,oBAAkC,2BAAIF,EAASC,gB,uDACbkW,E,8BAGnD,kBAAC,GAAC,K,6BAC4B,2BAAInW,EAASE,c,yDACZiW,E,0DAG/B,kBAAC,GAAC,K,qBACoB,kBAAC4oB,GAAK,KAAE9oB,G,sGAI9B,kBAACgpB,GAAO,K,gBAEJ,kBAACC,GAAS,KAAE9oB,IAI5B,ECzCampB,GAAyC,SAAC,G,IAAEv/B,EAAA,EAAAA,SACjD,iCAAEiW,EAAA,EAAAA,UAAWE,EAAA,EAAAA,iBAAkBC,EAAA,EAAAA,SAC/BkT,EAAWsV,GAAY5+B,GACvBw/B,EAAWF,GAAYt/B,GACvBy/B,EAAoBC,GAAqB1/B,GAE/C,OACE,6BACE,kBAAC,GAAC,K,QAAOA,EAASkmB,WAClB,kBAAC,GAAC,K,mFACiF,IACjF,2BAAIlmB,EAASE,c,sEAGf,kBAAC,GAAC,K,sCACoC,aAAkBF,EAAS24B,Q,8CACzC6G,E,OAAclW,E,4PAKtC,kBAAC,GAAC,K,oEACiE,kBAACyV,GAAK,KAAE9oB,GAAmB,I,yGAI9F,kBAAC,GAAC,K,gDAC8C,IAC9C,kBAAC+oB,GAAG,K,gBAAeh/B,EAASsZ,iB,WAA8B,2BAAItZ,EAASE,c,oBAC3D,2BAAIF,EAASC,gB,iDAAkE,IAC1FkW,E,4BAEFnW,EAAS2/B,eACR,kBAAC,GAAC,K,iEAC+D,IAC9D,aAAkB3/B,EAAS2/B,e,yDACfF,E,KAGjB,kBAACR,GAAO,K,gBAEN,kBAACC,GAAS,KAAE9oB,IAIpB,EC/CawpB,GAAkD,SAAC,G,IAAE5/B,EAAA,EAAAA,SACxDoW,EAAA,+BAAAA,SACFkT,EAAWsV,GAAY5+B,GACvBw/B,EAAWF,GAAYt/B,GAE7B,OACE,6BACE,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,+EAC6E,IAC7E,2BAAIlmB,EAASE,c,sEAGf,kBAAC,GAAC,K,sCACoC,aAAkBF,EAAS24B,Q,8CACzC6G,E,OAAclW,E,4PAKtC,kBAAC,GAAC,KACA,+GAEF,kBAAC,GAAC,K,+BAC4B,kBAAC0V,GAAG,K,gBAAeh/B,EAASsZ,iB,UAA8B,IACtF,2BAAItZ,EAASE,c,oBAAkC,2BAAIF,EAASC,gB,mDACjBqpB,E,sBAE7C,kBAAC,GAAC,iHAIF,kBAAC,GAAC,0EAEF,kBAAC2V,GAAO,K,gBAEN,kBAACC,GAAS,KAAE9oB,IAIpB,ECvCaypB,GAAwC,SAAC,G,IAAE7/B,EAAA,EAAAA,SAC9C,iCAAEiW,EAAA,EAAAA,UAAWG,EAAA,EAAAA,SACbkT,EAAWsV,GAAY5+B,GACvBw/B,EAAWF,GAAYt/B,GAE7B,OACI,6BACI,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,+EAC+E,IAC7E,2BAAIlmB,EAASE,c,sEAGjB,kBAAC,GAAC,K,gBACe,mC,gEAEjB,kBAAC,GAAC,K,sCACsC,aAAkBF,EAAS24B,Q,8CAC7B6G,E,OAAclW,E,wIAIpD,kBAAC,GAAC,K,0BACyB,kBAAC0V,GAAG,K,gBAAeh/B,EAASsZ,iB,UAA8B,IACjF,2BAAItZ,EAASE,c,oBAAkC,2BAAIF,EAASC,gB,mFAGhE,kBAAC,GAAC,K,wCACuC,2BAAID,EAASE,c,4RAMtD,kBAAC,GAAC,K,oDACmD,kBAAC6+B,GAAK,KAAE9oB,G,+DAI7D,kBAACgpB,GAAO,K,gBAEJ,kBAACC,GAAS,KAAE9oB,IAI5B,EC/Ca0pB,GAA4C,SAAC,G,IAAE9/B,EAAA,EAAAA,SACpDspB,EAAWsV,GAAY5+B,GACvBw/B,EAAWF,GAAYt/B,GAE7B,OACE,6BACE,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,+EAC6E,IAC7E,2BAAIlmB,EAASE,c,sEAGf,kBAAC,GAAC,K,sCACoC,aAAkBF,EAAS24B,Q,8CACzC6G,E,OAAclW,E,4PAKtC,kBAAC,GAAC,K,+BAC4B,kBAAC0V,GAAG,K,gBAAeh/B,EAASsZ,iB,UAA8B,IACtF,2BAAItZ,EAASE,c,oBAAkC,2BAAIF,EAASC,gB,wDACZqpB,E,sBAElD,kBAAC,GAAC,K,sJAEwDA,E,WAG1D,kBAAC2V,GAAO,K,gBAEN,kBAACC,GAAS,K,eAAc5V,IAIhC,ECjCayW,GAA4C,SAAC,G,IAAE//B,EAAA,EAAAA,SAClDoW,EAAA,+BAAAA,SACFkT,EAAWsV,GAAY5+B,GAE7B,OACE,6BACE,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,+EAC6E,IAC7E,2BAAIlmB,EAASE,c,sEAGf,kBAAC,GAAC,K,MACI2+B,GAAY7+B,G,OAAe8+B,GAAiB9+B,G,OAAespB,E,0DACtB,aAAkBtpB,EAAS24B,Q,2OAKtE,kBAAC,GAAC,K,+BAC4B,kBAACqG,GAAG,K,gBAAeh/B,EAASsZ,iB,UAA8B,IACtF,2BAAItZ,EAASE,c,oBAAkC,2BAAIF,EAASC,gB,wDACZqpB,E,sBAElD,kBAAC,GAAC,K,sHAE4BA,E,+BAG9B,kBAAC2V,GAAO,K,gBAEN,kBAACC,GAAS,KAAE9oB,IAIpB,ECpCa4pB,GAA6C,SAAC,G,IAAEhgC,EAAA,EAAAA,SACnDoW,EAAA,+BAAAA,SACFkT,EAAWsV,GAAY5+B,GACvBw/B,EAAWF,GAAYt/B,GAE7B,OACE,6BACE,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,+EAC6E,IAC7E,2BAAIlmB,EAASE,c,sEAGf,kBAAC,GAAC,K,sCACoC,aAAkBF,EAAS24B,Q,8CACzC6G,E,OAAclW,E,4PAKtC,kBAAC,GAAC,K,+BAC4B,kBAAC0V,GAAG,K,gBAAeh/B,EAASsZ,iB,UAA8B,IACtF,2BAAItZ,EAASE,c,oBAAkC,2BAAIF,EAASC,gB,wDACZqpB,E,sBAElD,kBAAC,GAAC,gGAEF,kBAAC2V,GAAO,K,gBAEN,kBAACC,GAAS,KAAE9oB,IAIpB,EChCa6pB,GAAyC,SAAC,G,IAAEjgC,EAAA,EAAAA,SAC/C,iCAAEiW,EAAA,EAAAA,UAAWE,EAAA,EAAAA,iBAAkBC,EAAA,EAAAA,SAC/BkT,EAAWsV,GAAY5+B,GAE7B,OACI,6BACI,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,+EAC+E,IAC7E,2BAAIlmB,EAASE,c,sEAGjB,kBAAC,GAAC,K,MACMo/B,GAAYt/B,G,OAAespB,E,8CAAqD,IACnF,aAAkBtpB,EAAS24B,Q,qFAGhC,kBAAC,GAAC,K,+BAC8B,kBAACqG,GAAG,K,gBAAeh/B,EAASsZ,iB,WAClD,2BAAItZ,EAASE,c,mBAAkC,IACrD,2BAAIF,EAASC,gB,mDAAoE,IAChFqpB,E,sBAEL,kBAAC,GAAC,K,2JAEwE,IACtE,kBAACyV,GAAK,KAAE9oB,G,iCAEZ,kBAAC,GAAC,K,sFACsF,IACnFE,E,YAGL,kBAAC8oB,GAAO,K,gBAEJ,kBAACC,GAAS,KAAE9oB,IAI5B,ECxCa8pB,GAA0C,SAAC,G,IAAElgC,EAAA,EAAAA,SAC9CoW,EAAA,+BAAAA,SACFkT,EAAWsV,GAAY5+B,GACvBw/B,EAAWF,GAAYt/B,GAE7B,OACI,6BACI,kBAAC,GAAC,K,QAAOA,EAASkmB,U,KAClB,kBAAC,GAAC,K,+EAC+E,IAC7E,2BAAIlmB,EAASE,c,sEAGjB,kBAAC,GAAC,K,sCACsC,aAAkBF,EAAS24B,Q,2DAChB6G,E,OAAclW,E,qFAGjE,kBAAC,GAAC,K,+BAC8B,kBAAC0V,GAAG,K,gBAAeh/B,EAASsZ,iB,WAClD,2BAAItZ,EAASE,c,mBAAkC,IACrD,2BAAIF,EAASC,gB,kDAAmE,IAC/EqpB,E,sBAEL,kBAAC,GAAC,kHAIF,kBAAC,GAAC,8GAIF,kBAAC2V,GAAO,K,gBAEJ,kBAACC,GAAS,KAAE9oB,IAI5B,EClCa+pB,GAAkC,SAAC,G,IAAEngC,EAAA,EAAAA,SACtCogC,EAAA,EAAAA,mBAEFC,GAFsB,EAAAC,wBAI5B,OAAQF,GACJ,KAAK,IAAmBjf,YACpB,OAAOkf,EACH,kBAAC1B,GAAa,CAAC3+B,SAAUA,IAEzB,kBAACu/B,GAAc,CAACv/B,SAAUA,IAElC,KAAK,IAAmBohB,YACpB,OAAOif,EACH,kBAAClB,GAAsB,CAACn/B,SAAUA,IAElC,kBAAC4/B,GAAuB,CAAC5/B,SAAUA,IAE3C,KAAK,IAAmBqhB,EACpB,OAAOgf,EACH,kBAAChB,GAAY,CAACr/B,SAAUA,IAExB,kBAAC6/B,GAAa,CAAC7/B,SAAUA,IAEjC,KAAK,IAAmBshB,MACpB,OAAO+e,EACH,kBAACjB,GAAgB,CAACp/B,SAAUA,IAE5B,kBAAC8/B,GAAiB,CAAC9/B,SAAUA,IAErC,KAAK,IAAmBuhB,OACpB,OAAO8e,EACH,kBAACN,GAAiB,CAAC//B,SAAUA,IAE7B,kBAACggC,GAAkB,CAAChgC,SAAUA,IAEtC,KAAK,IAAmBwhB,IACpB,OAAO6e,EACH,kBAACJ,GAAc,CAACjgC,SAAUA,IAE1B,kBAACkgC,GAAe,CAAClgC,SAAUA,IAGnC,KAAK,IAAmBkhB,QAIpB,OAHA,OAAAkG,GAAA,GACI,IAAI3mB,MAAM,uBAAuBT,EAASogC,mBAAkB,uBAEzD,KACX,QACI,IAAMG,EAAqBH,EAE3B,OADA,OAAAhZ,GAAA,GAAkB,IAAI3mB,MAAM,uBAAuB8/B,EAAW,uBACvD,KAEnB,ECvDMjP,GAAO,IAAOtwB,IAAG,yDAAV,CAAU,2+BAuBjB,GAAS,IAAOA,IAAG,2DAAV,CAAU,mQAOnB,GAAS,IAAOA,IAAG,2DAAV,CAAU,mPAQnBw/B,GAAe,IAAOx/B,IAAG,iEAAV,CAAU,qHAKzBy/B,GAAO,IAAOz/B,IAAG,yDAAV,CAAU,iCAEjB0/B,GAAU,IAAO1/B,IAAG,2DAAV,CAAU,+EAIpB,GAAO,IAAOqK,IAAG,yDAAV,CAAU,+KAOjBs1B,GAAW,IAAO3/B,IAAG,6DAAV,CAAU,2YAWrB4/B,GAAe,IAAO5/B,IAAG,gEAAV,CAAU,6GAKzB6/B,GAAQ,IAAO7/B,IAAG,yDAAV,CAAU,mPAAmB,OASlC,yNARL,SAAC,GACD,OADG,EAAA8/B,KAEC,YAAG,mHAGH,YAAG,wPAJP,IAoBEC,GAAO,IAAO//B,IAAG,yDAAV,CAAU,i8BA6BjBggC,GAAM,YAAOD,IAAK,uDAAZ,CAAY,mXAAmB,oGAYlC,4PAPL,SAAC,GACD,OADG,EAAAD,KAEC,YAAG,+HAGH,YAAG,kIAJP,IAuBEG,GAAQ,YAAOF,IAAK,0DAAZ,CAAY,qJAAoB,mBACS,eACX,QAQnC,0BAEuC,+CAGgB,eAdhD,SAAC,GAAc,OAAZ,EAAAjqB,MAAkB7C,kBAAN,IACpB,SAAC,GAAc,OAAZ,EAAA6C,MAAkB3C,YAAN,IACtB,SAAC,GACD,OADG,EAAA2sB,KAEC,YAAG,+HAGH,YAAG,kIAJP,IAQS,SAAC,GAAc,OAAZ,EAAAhqB,MAAkB5C,cAAN,IAGH,SAAC,GAAc,OAAZ,EAAA4C,MAAkB7C,kBAAN,IAIlCitB,GAAc,YAAOH,IAAK,gEAAZ,CAAY,iIAC8B,eACX,0CAEoB,eAHvD,SAAC,GAAc,OAAZ,EAAAjqB,MAAkB1C,yBAAN,IACpB,SAAC,GAAc,OAAZ,EAAA0C,MAAkBzC,mBAAN,IAED,SAAC,GAAc,OAAZ,EAAAyC,MAAkB1C,yBAAN,IAIlC+sB,GAAO,YAAOJ,IAAK,wDAAZ,CAAY,iIAC6B,eACX,0CAEoB,eAH/C,SAAC,GAAc,OAAZ,EAAAjqB,MAAkBxC,iBAAN,IACpB,SAAC,GAAc,OAAZ,EAAAwC,MAAkBvC,WAAN,IAED,SAAC,GAAc,OAAZ,EAAAuC,MAAkBxC,iBAAN,IAIlC,GAAO,IAAOtT,IAAG,yDAAV,CAAU,2QAQV,GAAI,IAAOA,IAAG,qDAAV,CAAU,mIAKrBogC,GAAY,IAAOpgC,IAAG,6DAAV,CAAU,qIAKfi+B,GAAU,IAAOj+B,IAAG,2DAAV,CAAU,6EAIpBk+B,GAAY,IAAOl+B,IAAG,6DAAV,CAAU,6EAI7B,GAAU,IAAOA,IAAG,4DAAV,CAAU,6MAMpBqgC,GAAY,IAAOrgC,IAAG,8DAAV,CAAU,+OAQfg+B,GAAM,IAAO99B,KAAI,uDAAX,CAAW,wGACc,yDAAjC,SAAC,GAAc,OAAZ,EAAA4V,MAAkBlD,YAAN,IAKpB0tB,GAAe,IAAOj2B,IAAG,iEAAV,CAAU,2OAOzB,GAAS,IAAOrK,IAAG,0DAAV,CAAU,wXAAuB,OAI3C,8VAHD,SAAC,G,IAAEs5B,EAAA,EAAAA,UACH,mBAAG,6EACoB,eAATA,EADd,IAyBEiH,GAAQ,IAAOvgC,IAAG,yDAAV,CAAU,yfAalBwgC,GAAY,IAAOxgC,IAAG,6DAAV,CAAU,mmBAcf+9B,GAAQ,IAAOxxB,EAAC,0DAAR,CAAQ,qFAIhB+xB,GAAc,SAACt/B,GAC1B,OAAA45B,GAAW,OAAAE,GAAA,GAAS95B,EAASyhC,gBAAiB,8BAA9C,EAEW3C,GAAmB,SAAC9+B,GAC/B,OAAA45B,GAAW,OAAAE,GAAA,GAAS95B,EAASyhC,gBAAiB,cAA9C,EAEW5C,GAAc,SAAC7+B,GAC1B,OAAA45B,GAAW,OAAAE,GAAA,GAAS95B,EAASyhC,gBAAiB,QAA9C,EAEW7C,GAAc,SAAC5+B,GAC1B,OAACA,EAASmrB,iBAAmBnrB,EAASmrB,gBAAgBxK,UAAa,EAAnE,EAKW+e,GAAuB,SAAC1/B,GACnC,GAAIA,EAASsgC,wBACX,OAAO1G,GACL,OAAAE,GAAA,GAAS95B,EAASsgC,wBAAwBoB,wBAE1C,mBAIN,EA8Ie,GA5IwC,SAAC,G,IAOlDA,EAPoD1hC,EAAA,EAAAA,SAChDkW,EAAA,+BAAAA,KACFyrB,EAAc/H,GAAW,OAAAE,GAAA,GAAS95B,EAASyhC,gBAAiB,+BAC5DG,EAAoBhI,GAAW,OAAAE,GAAA,GAAS95B,EAAS4hC,mBAAoB,oBAEnEtB,EAAA,EAAAA,wBAGJA,IACFoB,EAAyB9H,GACvB,OAAAE,GAAA,GAASwG,EAAwBoB,wBAEjC,qBAIJ,IAAMpY,EAAWsV,GAAY5+B,GACvB6hC,EAAe7hC,EAASmrB,iBAAmBnrB,EAASmrB,gBAAgBzK,aAAgB,GACpFohB,EAAe9hC,EAASmrB,iBAAmBnrB,EAASmrB,gBAAgBtK,aAAgB,GACpFkhB,EACH/hC,EAASmrB,iBAAmBnrB,EAASmrB,gBAAgBrK,iBAAoB,GACtEkhB,EAAgBhiC,EAASmrB,iBAAmBnrB,EAASmrB,gBAAgBpK,cAAiB,GAEtFjK,EAAQ,YAAc9W,EAASsZ,iBAErC,OACE,kBAAC,IAAa,CAACxC,MAAOA,GACpB,kBAACwa,GAAI,KACH,kBAAC,GAAM,KACL,kBAACkP,GAAY,KACX,kBAACC,GAAI,KAAEzgC,EAASkmB,WAChB,kBAACwa,GAAO,KAAE1gC,EAASimB,gBAErB,kBAAC,GAAI,CAACla,IAAKmK,IACX,kBAACyqB,GAAQ,KACP,kBAACC,GAAY,6BACb,kBAACC,GAAK,CAACC,OAAQY,GACb,kBAACT,GAAK,CAACH,OAAQY,GACb,qCACA,2B,gBAAiB1hC,EAASsZ,gB,SAE5B,kBAAC4nB,GAAW,KACV,4CACA,2BAAIlhC,EAASE,eAEf,kBAACihC,GAAI,KACH,2CACA,2BAAInhC,EAASC,iBAEf,kBAAC+gC,GAAG,CAACF,OAAQY,GACX,4B,MAEE,yBAAK/N,QAAQ,eACX,0BACEsO,KAAK,eACLC,EAAE,kQAEJ,0BACED,KAAK,eACLC,EAAE,uTAMXR,IACG1hC,EAAS2/B,cAIP3/B,EAASogC,oBAAsB,IAAmBjf,YACpD,kBAACqgB,GAAS,uFAIV,kBAACA,GAAS,K,UAASE,E,6BARnB,kBAACF,GAAS,K,UACAE,E,2CAWlB,kBAAC,GAAI,KACH,kBAACN,GAAS,KAAEQ,GACZ,kBAACzB,GAAO,CAACngC,SAAUA,IACnB,kBAAC,GAAO,KACLA,EAASmiC,aAAeniC,EAASmiC,YAAYC,mBAC5C,kBAACd,GAAY,CAACv1B,IAAK/L,EAASmiC,YAAYC,oBAE1C,kBAACf,GAAS,KACR,kBAAC,GAAM,CAAC/G,UAAW,KACjB,oCACA,6BAAMqH,KAGV,kBAACN,GAAS,KACR,kBAAC,GAAM,CAAC/G,UAAW,KACjB,wCACA,4BAAKhR,GACL,6BAAMuY,KAGV,kBAACR,GAAS,KACR,kBAAC,GAAM,CAAC/G,UAAW,KACjB,4CACA,kBAACiH,GAAK,KAAEvhC,EAASE,eAEnB,kBAAC,GAAM,CAACo6B,UAAW,KACjB,yCACA,6BAAMwH,KAGV,kBAACT,GAAS,KACR,kBAAC,GAAM,CAAC/G,UAAW,KACjB,8CACA,6BAAM,aAA4B0H,EAAc,KAElD,kBAAC,GAAM,CAAC1H,UAAW,IACjB,sCACA,6BAAMP,GAAagI,KAErB,kBAAC,GAAM,CAACzH,UAAW,KACjB,sCACA,6BAAM,aAAkBt6B,EAAS24B,aAKzC,kBAAC,GAAM,KACL,kBAAC,GAAC,K,qQAGsF,I,oLASlG,ECldM0J,GAAmB,YAAiB,ieAe7BC,GAAkD,cAAS,SAAC,G,IAAEh+B,EAAA,EAAAA,GACvE,OACI,oCACKA,EAAGwkB,WAAWtkB,KAAI,SAAAxE,GAAY,OAC3B,kBAAC,GAAS,CAAC4E,IAAK,aAAc5E,GAAWA,SAAUA,GADxB,IAK3C,IAEauiC,GAGR,cAAS,SAAC,G,IAAEj+B,EAAA,EAAAA,GAAIk+B,EAAA,EAAAA,KACjB,OACI,kBAAC,IAAiB,CAACt5B,OAAQs5B,GACvB,oCACI,kBAACH,GAAgB,MACjB,kBAACC,GAAa,CAACh+B,GAAIA,KAInC,IC9CA,GACI,SAAqBwkB,GAAA,KAAAA,YAAkC,E,wCCoC3D,cAsEI,WACa4D,EACTpG,GADS,KAAAoG,aApDb,KAAA+V,YAAa,EAGb,KAAAC,oBAAqB,EAKrB,KAAA7V,UAAW,EAGX,KAAA8V,UAAW,EAWX,KAAAC,WAAwC,GAGxC,KAAAC,WAAkC,GAGlC,KAAAC,SAAU,EAGV,KAAAC,SAAgC,GAGhC,KAAAC,QAA+B,GAG/B,KAAA9X,YAA6B,GAG7B,KAAA+X,qBAAuB,EAGvB,KAAAC,UAAY,IAGZ,KAAAtK,MAAQ,EAGA,KAAAuK,SAAgC,GAapC7/B,KAAKgjB,IAAMA,GAAO,GACtB,CAqSJ,OArXI,sBAAI,0BAAW,C,IAAf,WACI,OAAOhjB,KAAK0/B,QAAQ9Y,MAAM,EAnBF,GAoB5B,E,gCAEA,sBAAI,2BAAY,C,IAAhB,WACI,OAAO5mB,KAAKy/B,SAAS7Y,MAAM,EAvBH,GAwB5B,E,gCAEA,sBAAI,6BAAc,C,IAAlB,WACI,OAAO5mB,KAAKu/B,WAAW3Y,MAAM,EA3BL,GA4B5B,E,gCAEA,sBAAI,uBAAQ,C,IAAZ,WACI,OAAO5mB,KAAK0/B,QAAQx+B,KAAI,SAAAxE,GAAY,OAAAA,EAASC,cAAT,GACxC,E,gCAqEA,YAAAwwB,OAAA,SAAO2S,GACEA,IAGL9/B,KAAK6/B,SAASv6B,KAAKw6B,GACnB9/B,KAAKy/B,SAASM,QAAQD,GAC1B,EAEA,YAAAE,UAAA,SAAUF,GACN,OAAO9/B,KAAK0/B,QAAQxY,WAAU,SAAA/lB,GAAK,YAAcA,EAAG2+B,EAAjB,KAA2B,CAClE,EAEA,YAAAG,WAAA,SAAWH,GACP,OAAO9/B,KAAKy/B,SAASvY,WAAU,SAAA/lB,GAAK,YAAcA,EAAG2+B,EAAjB,KAA2B,CACnE,EAGA,YAAAI,cAAA,WACmC,IAA3BlgC,KAAKu/B,WAAWjf,QAGpBtgB,KAAKmtB,OAAOntB,KAAKu/B,WAAWY,QAChC,EAGA,YAAAC,UAAA,WACI,KAAOpgC,KAAKu/B,WAAWjf,OAAS,GAC5BtgB,KAAKqgC,YAEb,EAGA,YAAAA,WAAA,WACI,GAA+B,IAA3BrgC,KAAKu/B,WAAWjf,OAApB,CAGA,IAAMwf,EAAO9/B,KAAKu/B,WAAWY,QACxBL,IAGL9/B,KAAK6/B,SAASv6B,KAAKw6B,GACnB9/B,KAAK0/B,QAAQK,QAAQD,G,CACzB,EAGA,YAAAQ,KAAA,WACI,IAAMR,EAAO9/B,KAAK6/B,SAASjf,MAEvBkf,GACA9/B,KAAKugC,aAAaT,EAE1B,EAGA,YAAAS,aAAA,SAAaT,GACT,IAAMU,EAAc,SAACr/B,GACjB,QAAEA,EAAExE,iBAAmBmjC,EAAKnjC,gBAAkBwE,EAAEvE,eAAiBuE,EAAEvE,aAAnE,EAEAoD,KAAKigC,WAAWH,IAChB9/B,KAAKy/B,SAAWz/B,KAAKy/B,SAAS1c,OAAOyd,GACrCxgC,KAAKu/B,WAAWQ,QAAQD,IACjB9/B,KAAKggC,UAAUF,KACtB9/B,KAAK0/B,QAAU1/B,KAAK0/B,QAAQ3c,OAAOyd,GACnCxgC,KAAKu/B,WAAWQ,QAAQD,GAEhC,EAGA,YAAAW,YAAA,WACIzgC,KAAK0gC,eACT,EAGA,YAAAC,WAAA,WACI3gC,KAAK4gC,MACT,EAGA,YAAAC,kBAAA,WACI7gC,KAAK8gC,aACT,EAGA,YAAA34B,QAAA,WACInI,KAAK4gC,MACT,EAGA,YAAAG,kBAAA,WACI/gC,KAAKo/B,oBAAsBp/B,KAAKo/B,kBACpC,EAGQ,YAAA4B,MAAR,WACIhhC,KAAK4nB,YAAc,GACnB5nB,KAAKu/B,WAAa,GAClBv/B,KAAK6/B,SAAW,GAChB7/B,KAAK0/B,QAAU,GACf1/B,KAAKy/B,SAAW,GAChBz/B,KAAKs/B,WAAa,EACtB,EAGc,YAAAwB,YADd,sC,sEAEI9gC,KAAKw/B,SAAU,E,+CAELyB,EAAajhC,KAAK0/B,QAAQx+B,KAAI,SAAAC,GAAK,OAAAA,EAAExE,cAAF,IACnCukC,EAAclhC,KAAKy/B,SAASv+B,KAAI,SAAAC,GAAK,OAAAA,EAAExE,cAAF,I,GACrCqD,KAAKmhC,6BAA6BF,EAAY,IAAiB/lB,oB,cAArE,S,GACMlb,KAAKmhC,6BACPD,EACA,IAAiBllB,uB,cAFrB,S,GAIMhc,KAAK4gC,Q,cAAX,S,+BAEA,OAAA9c,GAAA,GAAkB,GAClB9jB,KAAKopB,WAAW/rB,aAAa,OAAAgD,GAAA,KAAe,CACxC/C,QAAS,EAAE0O,QACXzO,YAAY,I,oBAGhByC,KAAKw/B,SAAU,EACfx/B,KAAKo/B,oBAAqB,E,wCAI5B,YAAA+B,6BAAN,SAAmCC,EAAsB5W,G,sHAG/CoV,EAAY,G,wBACXwB,EAAW9gB,OAAS,GACjB+gB,EAAcD,EAAWjX,OAAO,EAAGyV,GACzC,GAAM5/B,KAAKgjB,IAAI1M,gCAAgC,CAC3CoR,gBAAiB2Z,EACjB7W,QAASA,MAJW,M,cAExB,S,+BAQM,YAAAoW,KADd,sC,sFAEI5gC,KAAKghC,QAELhhC,KAAKupB,UAAW,E,qDAEmBvpB,KAAKgjB,IAAI7M,+CACpC,CAAC,IAAUgE,mBAAoB,IAAUC,oBACzCpa,KAAK2e,UACL,EACA3e,KAAK4/B,Y,OAJH,WAAE0B,EAAK,QAAEhM,EAAK,QAMpBt1B,KAAK4nB,YAAc0Z,EACnBthC,KAAKs1B,MAAQA,EAGP9N,EAAU,YAAI,IAAIkB,IAAI1oB,KAAK4nB,YAAY1mB,KAAI,SAAAC,GAAK,OAAAA,EAAExE,cAAF,M,yCACrC,cAAA6qB,GAAO,W,sCAAbzqB,EAAE,Q,GACHiD,KAAKuhC,eAAexkC,K,OAA1B,S,4OAGJ,OAAA+mB,GAAA,GAAkB,GAClB9jB,KAAKopB,WAAW/rB,aAAa,OAAAgD,GAAA,KAAe,CACxC/C,QAAS,EAAE0O,QACXzO,YAAY,I,sBAGhByC,KAAKupB,UAAW,E,yCAKV,YAAAgY,eADd,SAC6BxkC,GAAU,2B,oFACfiD,KAAKgjB,IAAI3M,gCAAgC,CACzDqR,gBAAiB,CAAC3qB,M,cADhBukC,EAAQ,EAAH,OAIP,IAAyBvoB,WAAWuoB,IACpC,EAAAthC,KAAKs/B,YAAWh6B,KAAI,oBAAIg8B,EAAM1iB,UAE9B0iB,EAAMt3B,SAAQ,SAAA81B,IAtRC,SAAC,G,IAAEjY,EAAA,EAAAA,gBAAiBjrB,EAAA,EAAAA,aAAcoZ,EAAA,EAAAA,gBACnD0gB,EAAU7O,GAAmBA,EAAgBrK,iBAAoB,GACjEkb,EAAQ5jB,WAAY+S,GAAmBA,EAAgBpK,cAAiB,KAAO,EAE/E+jB,IAAgB9K,GAAiC,IAAvB5hB,WAAW4hB,GACrC+K,EAAa/I,EAAQ,EACrBgJ,GAAc,KAAKr3B,KAAKzN,GAGxB+kC,EAAuB3rB,KAAmB,IAEhD,OAAOwrB,GAAeC,GAAcC,GAAcC,CACtD,CA2QoBC,CAAY9B,GAGZ,EAAK3S,OAAO2S,GAFZ,EAAKP,WAAWj6B,KAAKw6B,EAI7B,I,uBAKM,YAAAY,cADd,sC,2EAEI1gC,KAAKq/B,UAAW,EACVwC,EAAoB7hC,KAAK0/B,QAAQoC,UAEvC9hC,KAAKm/B,YAAa,EAClBn/B,KAAK2/B,qBAAuB,E,wBAErBkC,EAAkBvhB,OAAS,GACxByhB,EAAQF,EAAkB1X,OAAO,EAAG,I,GAEZnqB,KAAKgiC,qBAAqBD,KAHzB,M,cAGP,EAAH,OAEjB/hC,KAAK2/B,sBAAwBoC,EAAMzhB,QAEnCtgB,KAAKm/B,YAAa,EAClB4C,EAAM/3B,SAAQ,SAAA81B,GACV,EAAKS,aAAaT,EACtB,K,oBAIR9/B,KAAKq/B,UAAW,EAChBr/B,KAAKo/B,oBAAqB,E,uBAIhB,YAAA4C,qBADd,SACmCC,GAA4B,2B,qHAIvD7jC,SAASqE,MAAQzC,KAAKkiC,gBAAgBD,IAEtCE,EAAS/jC,SAASgqB,cAAc,WACzBga,MAAMC,QAAU,OACvBjkC,SAASqQ,KAAKwkB,YAAYkP,GACpBG,EAAeH,EAAOI,cAEtBC,EAAOF,EAAalkC,SAASgqB,cAAc,OACjDka,EAAalkC,SAASqQ,KAAKwkB,YAAYuP,GAEjCxhC,EAAK,IAAIyhC,GAAuBR,GAEtC,KAAS1S,OACL,IAAMnH,cAAc6W,GAA2B,CAC3Cj+B,GAAE,EACFk+B,KAAMoD,EAAalkC,SAAS8gC,OAEhCsD,G,GAGE,aAAsBA,I,OAK5B,IALA,SAEME,EAAUJ,EAAalkC,SAAS8gC,KAAK7gC,cAAc,SACjDskC,EAAaD,EAASE,MAAuB,SAC/CC,EAA4B,GACzBxP,EAAI,EAAGA,EAAIsP,EAASriB,OAAQ+S,IACjCwP,EAAgBv9B,KAAKq9B,EAAStP,GAAGyP,S,OAE/BV,EAAQS,EAAgB52B,KAAK,KAE/B2B,OAAI,E,GACK5N,KAAKgjB,IACbpU,iBAAiB,CACdm0B,4BAA6Bd,EAAQ/gC,KAAI,SAAAC,GAAK,OAAAA,EAAExE,cAAF,IAC9CqmC,KAAM,sBAAsBZ,EAAK,iBAAiBI,EAAKS,YAE1Dp1B,MAAK,SAAAq1B,GAAO,OAAAA,EAAIt1B,MAAJ,K,cALjBA,EAAO,EAAH,QAOEua,EAAgB/pB,SAASgqB,cAAc,MAC/BlhB,KAAO6G,IAAIC,gBAAgBJ,GACzCua,EAAcviB,OAAS,SACvBuiB,EAAcE,SAAcjqB,SAASqE,MAAK,OAC1C0lB,EAAcK,Q,GAGR,IAAIvoB,SAAQ,SAAAC,GACdyB,YAAW,WACPwgC,GAAUA,EAAOgB,SACjBjjC,GACJ,GACJ,K,OACA,OANA,SAMO,CAAP,GAAO,G,OAGP,O,WADA,OAAA4jB,GAAA,GAAkB,GACX,CAAP,GAAO,G,oCAIP,YAAAoe,gBAAR,SAAwBD,GACpB,IAAMmB,EAAgBnB,EAAQ,GAAGmB,cAC3BC,EAAoBpB,EAAQ/gC,KAAI,SAAAC,GAAK,OAAAA,EAAEmiC,KAAF,IAQ3C,MAAO,kBAAkBF,EAAa,IAPrBG,KAAKC,IAAG,MAARD,KAAI,YAAQF,IACxB7e,WACAif,SAAS,EAAG,KAKiC,IAJjCF,KAAKG,IAAG,MAARH,KAAI,YAAQF,IACxB7e,WACAif,SAAS,EAAG,KAE6C,I5BxY3D,OAAAnb,GAAA,GAAO,IAAIC,KAAQ,sB4ByY1B,EApXA,aADC,a,gCAKD,aADC,a,iCAKD,aADC,a,mCAKD,aADC,a,6BAMD,aADC,e,iCAID,aADC,e,yCAMD,aADC,e,+BAID,aADC,e,+BAYD,aADC,e,iCAID,aADC,e,iCAID,aADC,e,8BAID,aADC,e,+BAID,aADC,e,8BAID,aADC,e,kCAID,aADC,e,2CAID,aADC,e,gCAID,aADC,e,4BAID,aADC,e,+BAkBD,aADC,UAAOpoB,O,2BAkBR,aADC,UAAOA,O,kCASR,aADC,UAAOA,O,8BAQR,aADC,UAAOA,O,+BAcR,aADC,UAAOA,O,yBAUR,aADC,UAAOA,O,iCAeR,aADC,UAAOA,O,gCAMR,aADC,UAAOA,O,+BAMR,aADC,UAAOA,O,sCAMR,aADC,UAAOA,O,4BAMR,aADC,UAAOA,O,sCAMR,aADC,UAAOA,O,0BAsMZ,C,CAvXA,G,qBC9BMwjC,GAAQ,IAAO57B,IAAG,0DAAV,CAAU,4LAAoB,wDAS7B,iHAPT,SAAC,GACC,OADC,EAAA67B,MAEK,YAAG,6IAGH,YAAG,4IAJT,IAYFC,GAAW,IAAOnmC,IAAG,6DAAV,CAAU,0HAAwD,qFAWpE,SAQN,SAfH,SAAC,GACC,OADC,EAAAkmC,MAEK,YAAG,6IAGH,YAAG,4IAJT,IAOF,SAAC,G,IAAEE,EAAA,EAAAA,SAAUC,EAAA,EAAAA,OACX,OAAAD,GACA,YAAG,kOAG8C,gCAA/BC,EAAS,WAAa,UAJxC,IASKC,GAA8C,SAAC,G,IAAEJ,EAAA,EAAAA,MAAOn7B,EAAA,EAAAA,IAC3D,kCAACs7B,EAAA,KAAQE,EAAA,KACTrR,EAAM,iBAAuB,MAC7BsR,EC9CsB,SAACC,GACvB,mDAACD,EAAA,KAAUE,EAAA,KACXC,EAAuB,KAASD,EAAa,KAiBnD,OAfA,qBAAU,WACN,GAAKD,EAAL,CAGA,IAAMG,EAAe,SAACtgB,GACZ,gCAAEugB,EAAA,EAAAA,IAAKC,EAAA,EAAAA,KACbH,EAAqB,CAAEljC,EAAG6iB,EAAEygB,QAAUD,EAAME,EAAG1gB,EAAE2gB,QAAUJ,GAC/D,EAGA,OAFAJ,EAAGrkC,iBAAiB,YAAawkC,GAE1B,WACHH,EAAGS,oBAAoB,YAAaN,EACxC,C,CACJ,GAAG,CAACH,IAEGD,CACX,CD0BqBW,CAAiBjS,EAAIkS,SAGhC1C,EAAQwB,OACRh/B,EACA,CACImgC,gBAAoBb,EAAS/iC,EAAC,MAAM+iC,EAASQ,EAAC,KAC9CM,UAAWjB,EAAS,kBAAen/B,GAG7C,OACI,kBAACi/B,GAAQ,CAAC1hC,QATD,WAAM,OAAA8hC,GAASF,EAAT,EASUnR,IAAKA,EAAKkR,UAAWF,EAAOG,OAAQA,EAAQH,MAAOA,GACxE,kBAACD,GAAK,CAACC,MAAOA,EAAOn7B,IAAKA,EAAK25B,MAAOA,IAGlD,EEhDM6C,GAAO,YAAO,KAAOvnC,KAAI,wDAAlB,CAAkB,qgBAYlBwnC,GAA4C,SAAC,G,IACtDpoC,EAAA,EAAAA,SACAwmC,EAAA,EAAAA,MACAliC,EAAA,EAAAA,QACA1E,EAAA,EAAAA,SACA,IAAAknC,aAAA,IAAQ,GAAR,EACAuB,EAAA,EAAAA,WAEMC,EAAS1oC,EAASmiC,aAAeniC,EAASmiC,YAAYwG,iBAC5D,OACI,kBAACJ,GAAI,CACD3jC,IAAK,aAAc5E,GACnB0E,SACgB,IAAZA,GACM,CACIT,QAAS,EACT6F,MAAO,EACP2+B,WAAU,EACVG,YAAgBhC,GAASM,EAAQ,EAAI,GAAE,OAIrDviC,QAAS,CACLV,QAAS,EACT6F,MAAO,EACP2+B,WAAY,EACZG,YAAgBhC,GAASM,EAAQ,EAAI,GAAE,MACvC2B,WAAY,CAAEC,MAAO5B,EAAQ,IAAO,GACpC6B,OHjCgB,GGiCWnC,GAE/BoC,KAAM,CACF/kC,QAAS,EACT6F,MAAO,GACP2+B,WAAU,EACVG,WAAY,OACZG,OHxCgB,GGwCWnC,IAG9B8B,GAAU,kBAACpB,GAAW,CAACJ,MAAOA,EAAOn7B,IAAK28B,IAC1CtoC,EAGb,ECxDa6oC,GAA0C,cAAS,SAAC,G,IAAE3kC,EAAA,EAAAA,GAC/D,OACI,6BACI,kBAAC4kC,GAAY,K,WACA5kC,EAAGy+B,SAASnf,OAAS,GAAK,IAAItf,EAAGy+B,SAASnf,OAAM,KAGrC,IAAvBtf,EAAGy+B,SAASnf,OACT,kBAACulB,GAAe,iBAEhB,kBAACC,GAAW,KACP9kC,EAAG+kC,aAAa7kC,KAAI,SAACxE,EAAU22B,GAC5B,OACI,kBAAC6R,GAAU,CACP5jC,IAAK,aAAc5E,GACnB4mC,MAAOjQ,EACP32B,SAAUA,EACVknC,OAAO,EACPuB,WAAY,IAEZ,kBAACa,GAAW,KACR,kBAAC,GAAY,KAAEtpC,EAASE,cACxB,kBAAC,GAAY,KAAEF,EAASsZ,kBAIxC,KAKpB,I,UC5BaiwB,GAAyC,cAAS,SAAC,G,IAAEjlC,EAAA,EAAAA,GAC9D,OACI,6BACI,kBAAC4kC,GAAY,K,YACC5kC,EAAG0+B,QAAQpf,OAAS,GAAK,IAAItf,EAAG0+B,QAAQpf,OAAM,KAErC,IAAtBtf,EAAG0+B,QAAQpf,OACR,kBAACulB,GAAe,iBAEhB,oCACI,kBAACC,GAAW,KACP9kC,EAAGklC,YAAYhlC,KAAI,SAACxE,EAAU22B,GAC3B,OACI,kBAAC6R,GAAU,CACP5jC,IAAK,aAAc5E,GACnB4mC,MAAOjQ,EACPuQ,OAAO,EACPlnC,SAAUA,EACVyoC,YAAa,IAEb,kBAACa,GAAW,KACR,kBAAC,GAAY,KAAEtpC,EAASE,cACxB,kBAAC,GAAY,KAAEF,EAASsZ,kBAIxC,MAIZ,kBAACnO,GAAA,EAAM,CACH0jB,OAAO,EACPvtB,MAAM,UACNmE,QAASnB,EAAGy/B,YACZ53B,SAAU7H,EAAGq+B,UAAkC,IAAtBr+B,EAAG0+B,QAAQpf,QAEnCtf,EAAGq+B,SACA,oCACI,kBAACv2B,GAAA,EAAO,CAAC/K,UAAU,S,YAAmBiD,EAAG2+B,qB,IACxC3+B,EAAG0+B,QAAQpf,QAGhB,oC,QACU,IACLtf,EAAG0+B,QAAQpf,OAAS,GACjB,OAAA3Z,GAAA,GAAW3F,EAAG0+B,QAAQpf,OAAQ,WAAY,gBAMtE,I,4DC7DM6lB,GAAc,YAAOC,GAAA,GAAM,gEAAb,CAAa,2FAc1B,I,uCAAMC,GAAyC,cAAS,SAAC,G,IAVxC3G,EAAiBD,EAUyBz+B,EAAA,EAAAA,GAC9D,OACI,kBAACslC,GAAA,EAAK,CAACxN,OAAQ93B,EAAGo+B,mBAAoBpG,OAAQh4B,EAAG+/B,mBAC7C,kBAACwF,GAAA,EAAW,CAACvN,OAAQh4B,EAAG+/B,mBAAiB,iCACzC,kBAACyF,GAAA,EAAS,K,mBAdE9G,EAeuB1+B,EAAG0+B,QAAQpf,OAfjBmf,EAeyBz+B,EAAGy+B,SAASnf,OAbtE,oCACKof,EAAU,GAAK,2BAAI,OAAA/4B,GAAA,GAAW+4B,EAAS,WAAY,c,eACnDA,EAAU,GAAKD,EAAW,GAAK,QAC/BA,EAAW,GAAK,2BAAI,OAAA94B,GAAA,GAAW84B,EAAU,WAAY,c,2DAYjDz+B,EAAGm+B,YACA,kBAACgH,GAAW,CAACnoC,MAAM,W,6EAC4D,IAC3E,yC,2BAIZ,kBAACyoC,GAAA,EAAW,KACR,kBAAC5+B,GAAA,EAAM,CAAC7J,MAAM,UAAUmE,QAASnB,EAAG6/B,kBAAmBh4B,SAAU7H,EAAGw+B,SAC/Dx+B,EAAGw+B,SAAW,kBAAC,KAAO,CAACn9B,KAAK,KAAKtE,UAAU,S,MAGhD,kBAAC8J,GAAA,EAAM,CAAC5F,SAAS,EAAME,QAASnB,EAAG+/B,kBAAmBl4B,SAAU7H,EAAGw+B,SAAO,WAM1F,ICzBMkH,GAAa,IAAOhpC,IAAG,+DAAV,CAAU,6OAAmB,0FAQvC,gIAJH,SAAC,GACC,OADC,EAAAipC,MAED,YAAG,wHADH,IAWFC,GAAe,IAAOlpC,IAAG,iEAAV,CAAU,6QAOlBmpC,GAAgD,cAAS,SAAC,G,IAAEC,EAAA,EAAAA,UAAW9lC,EAAA,EAAAA,GAChF,OACI,6BACI,kBAAC4kC,GAAY,KACR5kC,EAAGuoB,SACE,wBAAwBvoB,EAAGu+B,WAAWjf,OAAM,IAAIijB,KAAKC,IACjDxiC,EAAGs0B,MACHt0B,EAAG4+B,WACN,IACD,eAAe5+B,EAAGu+B,WAAWjf,OAAM,KAE7C,kBAAC,KAAe,KACc,IAAzBtf,EAAGu+B,WAAWjf,OACX,kBAACulB,GAAe,KAAE7kC,EAAGuoB,SAAW,kBAACzgB,GAAA,EAAO,MAAM,iBAE9C,kBAACg9B,GAAW,KACP9kC,EAAG+lC,eAAe7lC,KAAI,SAACxE,EAAU22B,GACtB,IAAAxL,EAAA,EAAAA,gBACF6O,EAAS7O,GAAmBA,EAAgBrK,gBAC5CwpB,EAA+C,IAA7BlyB,WAAW4hB,GAAU,IACvC8H,EAAc3W,GAAmBA,EAAgBtK,YACjDmb,EACF7Q,GAAmBA,EAAgBpK,aAC7B3I,WAAW+S,EAAgBpK,cAC3B,EACJihB,EAAehG,EAAQ,EAAI,aAAkBA,QAAS9zB,EAC5D,OACI,kBAACsgC,GAAU,CACP5jC,IAAK,aAAc5E,GACnB4mC,MAAOjQ,EACPjyB,SAAS,EACT1E,SAAUA,EACVyoC,WAAwB,IAAZ2B,GAEZ,kBAAC,GAAY,CAACH,KAAM,KAAKt8B,KAAK3N,EAASE,eAClCF,EAASE,cAEd,kBAAC,GAAY,KAAEF,EAASsZ,iBACxB,kBAAC4wB,GAAY,KACT,kBAACF,GAAU,CAACC,MAAM,GACd,2CACCjqC,EAASC,gBAEb6hC,GACG,kBAACkI,GAAU,CAACC,MAAM,GACd,0CACCnI,GAGT,kBAACkI,GAAU,CAACC,KAAMK,GACd,yCACCtQ,GAEJgI,GACG,kBAACgI,GAAU,CAACC,KAAMjO,EAAQ,GACtB,sCACCgG,IAMzB,MAMxB,IC5FaoH,GAAc,IAAOpoC,IAAG,gEAAV,CAAU,+hBAYxBkoC,GAAe,IAAOloC,IAAG,gEAAV,CAAU,qLAMhCupC,GAAe,IAAOvpC,IAAG,iEAAV,CAAU,6TAQlBmoC,GAAkB,IAAOnoC,IAAG,oEAAV,CAAU,ibAW5B,GAAe,IAAOA,IAAG,gEAAV,CAAU,+OAAoB,mNAYjD,SAJH,SAAC,GACC,OADC,EAAAipC,MAED,YAAG,wHADH,IAMKX,GAAc,IAAOtoC,IAAG,+DAAV,CAAU,8PAIjB,8CAAZ,IAKK,GAAe,IAAOA,IAAG,iEAAV,CAAU,iWAQhCwpC,GAAY,IAAOxpC,IAAG,6DAAV,CAAU,yUAUfypC,GAA8C,cAAS,SAAC,G,IAAEnmC,EAAA,EAAAA,GAC7D,uCAAC8lC,EAAA,KAAWM,EAAA,KACZ1kC,EAAW,cAEX2kC,EAAgB,SAACrjB,GACfhjB,EAAGq+B,WAGQ,cAAXrb,EAAE4V,MACFwN,GAAc,GACdpmC,EAAGk/B,iBACe,eAAXlc,EAAE4V,MACTwN,EAAa,GACbpmC,EAAGq/B,cACe,SAAXrc,EAAE4V,OAAoB5V,EAAEsjB,SAAWtjB,EAAEujB,SAC5CvmC,EAAGs/B,OACe,SAAXtc,EAAE4V,OAAoB5V,EAAEsjB,SAAWtjB,EAAEujB,UAC5CvmC,EAAGo/B,YAEX,EAQA,OANA,qBAAU,WAGN,OAFAp/B,EAAG2/B,aACHviC,SAAS0B,iBAAiB,UAAWunC,GAC9B,WAAM,OAAAjpC,SAASwmC,oBAAoB,UAAWyC,EAAxC,CACjB,GAAG,CAAC3kC,IAGA,kBAAC04B,GAAS,KACN,kBAACpzB,GAAA,EAAW,CAACG,QAASnH,EAAGmH,QAASC,WAAYpH,EAAGuoB,SAAUlhB,YAAY,IACvE,yBAAKtK,UAAU,aACX,kBAAC0gB,GAAA,EAAS,CAACzd,GAAIA,IACf,kBAACimC,GAAY,KACT,kBAACtB,GAAa,CAAC3kC,GAAIA,IACnB,kBAAC6lC,GAAe,CAACC,UAAWA,EAAW9lC,GAAIA,IAC3C,kBAACilC,GAAY,CAACjlC,GAAIA,KAGtB,kBAACkmC,GAAS,CAACnpC,UAAU,QACjB,kBAAC8J,GAAA,EAAM,CACHgB,SAAU7H,EAAGq+B,SACbrhC,MAAM,UACNiE,SAAS,EACTE,QAASnB,EAAGk/B,eAEZ,kBAACn3B,GAAA,EAAO,CAAC3G,KAAM,KAAaguB,SAAU,IAAK/tB,KAAK,KAAKtE,UAAU,S,gBAGnE,kBAAC8J,GAAA,EAAM,CACHgB,SAAU7H,EAAGq+B,SACbrhC,MAAM,UACNiE,SAAS,EACTE,QAASnB,EAAGq/B,Y,SAGZ,kBAACt3B,GAAA,EAAO,CAAC3G,KAAM,KAAaguB,SAAU,GAAI/tB,KAAK,KAAKtE,UAAU,WAGtE,kBAACmpC,GAAS,KACN,kBAACr/B,GAAA,EAAM,CAACgB,SAAU7H,EAAGq+B,SAAUrhC,MAAM,OAAOmE,QAASnB,EAAGs/B,KAAM79B,MAAM,YAAU,QAG9E,kBAACoF,GAAA,EAAM,CACHgB,SAAU7H,EAAGq+B,SACbthC,UAAU,mBACVC,MAAM,OACNmE,QAASnB,EAAGo/B,UACZ39B,MAAM,YAAU,eAMvBzB,EAAGs+B,WAAWhf,OAAS,GACpB,yBAAKviB,UAAU,aACX,6CACA,4BACKiD,EAAGs+B,WAAWp+B,KAAI,SAAC0d,EAASyU,GAAM,OAC/B,wBAAI/xB,IAAQsd,EAAQjiB,eAAc,IAAI02B,GACjCzU,EAAQjiB,e,KAAkBiiB,EAAQ1c,YAFR,OASnD,kBAACmkC,GAAY,CAACrlC,GAAIA,IAG9B,I,SCrLO,SAASw0B,GACZ5vB,EACA4hC,EACAC,GAIA,GAAIA,EAAY,CAEZ,IAAK,KAAWA,EAAWnjC,OACvB,MAAM,IAAInH,MAAM,0DAGpB,MAAO,CACHmH,MAAOojC,GAAuBD,EAAWnjC,OACzCqjC,YAAY,EACZC,cAAc,EACdC,UAAU,E,CAKlBrpC,OAAOspC,eAAeliC,EAAQ4hC,EAAa,CACvCI,cAAc,EACdD,YAAY,EACZr5B,IAAG,WAEH,EACA9G,IAAA,SAAIlD,GACA,IAAK,KAAWA,GACZ,MAAM,IAAInH,MAAM,0DAGpBqB,OAAOspC,eAAe9nC,KAAMwnC,EAAa,CACrCG,YAAY,EACZE,UAAU,EACVD,cAAc,EACdtjC,MAAOojC,GAAuBpjC,IAEtC,GAER,CAEA,SAASojC,GAAuBzd,GAC5B,OAAO,W,IAAoB,sDACjB,IAAC8d,EAAD,iBAAC,GAMP,OAJIA,GAAmB,KAAWA,EAAgBvS,iBAC9CuS,EAAgBvS,iBAGbvL,EAAG+d,MAAMhoC,KAAMkM,EAC1B,CACJ,C,qCCtBA,cAkJI,aA7GA,KAAA0tB,KAAO,GAEP,KAAAC,IAAM,GAEN,KAAAG,iBAAkB,EAElB,KAAAC,cAAe,EAMf,KAAAnC,gBAAmC,UAGnC,KAAAzB,kBAAiC,OAGjC,KAAA6B,kBAAmB,EAGnB,KAAAG,SAAW,GAGX,KAAAI,SAAW,GAGX,KAAA77B,aAAe,GAGf,KAAA25B,UAAc3xB,EAGd,KAAA0zB,aAAe,GAGf,KAAAC,gBAAkB,GAGlB,KAAAC,aAAe,GAGf,KAAAnD,OAAS,EAGT,KAAAqB,OAAS,GAGT,KAAAgC,MAAQ,GAYR,KAAAK,kBAAmB,EAGnB,KAAAkP,KAAO,EAGP,KAAAtS,UAAuB,UAGvB,KAAAprB,MAAQ,IAAI,GAAU,IAAI,SAACyU,GAEvB,QADAA,EAAMA,EAAI6G,SACK,KAAQ7G,GAAO,KAAO,uBACzC,IAGA,KAAA9Y,KAAO,IAAI,GAAU,IAAI,SAAC8Y,GAAQ,OAACA,EAAI6G,OAAS,KAAO,wBAArB,IAGlC,KAAAqiB,eAAgB,EAGhB,KAAArS,gBAAiB,EAEjB,KAAAC,iBAAwClxB,EAGxC,KAAAmxB,gBAAiB,EAEjB,KAAAC,iBAAwCpxB,EAGxC,KAAAqxB,aAAc,EAEd,KAAAC,cAAqCtxB,EAGrC,KAAAq2B,WAA4B,KAG5B,KAAArD,gBAA0B,GAG1B,KAAAj7B,eAAyB,GAGzB,KAAAqZ,gBAA0B,GAElB,KAAAmyB,kBAAmB,EAGvBnoC,KAAKgjB,IAAM,GACf,CA6NJ,OA/WI,sBAAI,oBAAK,C,IAAT,WACI,OAAOhjB,KAAKq1B,OAASr1B,KAAKioC,IAC9B,E,gCAEA,sBAAI,wBAAS,C,IAAb,WACI,OAAOjoC,KAAK61B,gBAAkB71B,KAAK+1B,gBAAkB/1B,KAAKi2B,WAC9D,E,gCAEA,sBAAI,sBAAO,C,IAAX,WACI,OAAOj2B,KAAKkoC,eAAiBloC,KAAKkG,KAAKkiC,SAAWpoC,KAAKuK,MAAM69B,OACjE,E,gCAGA,sBAAI,8BAAe,C,IAAnB,WACI,SAAUpoC,KAAK65B,IAAIhU,SAAU7lB,KAAK45B,KAAK/T,OAC3C,E,gCAGA,sBAAI,wBAAS,C,IAAb,WACI,OACI7lB,KAAK81B,aACL91B,KAAKg2B,aACLh2B,KAAKk2B,YACHl2B,KAAKkoC,eAAiBloC,KAAKqoC,eACvBzjC,EACA,CAAEoH,QAAS,qCAEzB,E,gCA0HA,YAAAsmB,SAAA,WACItyB,KAAKkoC,eAAgB,EACrB,IAAMI,EAAc,CAACtoC,KAAKkG,KAAMlG,KAAKuK,OAAOrJ,KAAI,SAACkxB,GAAU,OAAAA,EAAME,UAAN,IAG3D,OAFAgW,EAAYhjC,KAAKtF,KAAK61B,eAAgB71B,KAAK+1B,eAAgB/1B,KAAKi2B,aAEzDqS,EAAY5iB,OAAM,SAAC7C,GAAU,OAAAA,CAAA,GACxC,EAGA,YAAAoW,WAAA,WACIj5B,KAAK+4B,kBAAmB,CAC5B,EAIA,YAAAJ,qBAAA,WACI34B,KAAKwO,mBACD,KAAmBgJ,gCACnBxX,KAAKrD,gBAETqD,KAAK+4B,kBAAmB,CAC5B,EAGA,YAAAtD,aAAA,SAAan2B,GACTU,KAAKuoC,OAAOjpC,GAAQ8E,MAAM0f,GAAA,EAC9B,EAGA,YAAA0kB,WAAA,WACIxoC,KAAK0sB,kBAAe9nB,CACxB,EAGA,YAAAizB,kBAAA,WACI73B,KAAKyoC,cAAcrkC,MAAM0f,GAAA,EAC7B,EAGA,YAAAtV,mBAAA,SACIk6B,EACAhkC,EACAxC,QAAA,IAAAA,MAAA,MAEQ,WAAA01B,gBAER53B,KAAKgjB,IACAxU,mBAAmB,CAAEk6B,UAAS,EAAEC,UAAS,EAAEC,WAAY,EAAGlkC,MAAK,EAAExC,YAAW,IAC5EkC,MAAM0f,GAAA,EACf,EAGc,YAAAykB,OADd,SACqBjpC,GAAmD,2B,kFACpE,GAAIU,KAAKmoC,iBACL,UAEJnoC,KAAK41B,iBAAchxB,EACnB5E,KAAKo2B,iBAAcxxB,EACnB5E,KAAKmoC,kBAAmB,EAEAU,GAAlB,EAAoC7oC,MAAZ,eAAEuK,EAAK,Q,iBAIjC,O,uBADcvK,KAAKsyB,WAIdhzB,GAKLU,KAAKq2B,kBAAoB,U,GACnB,KAAct2B,gBALhBC,KAAKo2B,YAAc,yFACnB,KAJA,I,cAQJ,S,GACwB92B,EAAOwpC,YAAY,CAAE5iC,KAAMlG,KAAKkG,KAAK5B,S,OAE7D,OAFQI,EAAK,iBAMPqkC,EAAqBrkC,E,GAEJ1E,KAAKgjB,IAAIrM,eAAe,CAC3Cha,eAAgBksC,EAChBG,aAAcz+B,EAAMjG,MACpBykC,mBAAkB,OARlB/oC,KAAKo2B,YAAc,yFACnB,K,OAWJ,GAPM7oB,EAAW,EAAH,OAMdvN,KAAKq2B,kBAAoB,WACrB,KAAsBtd,WAAWxL,GAMjC,OALAvN,KAAKwO,mBACD,KAAmBwJ,sBACnBhY,KAAKrD,eACL,aAAkBqD,KAAKs1B,QAEnB/nB,EAAS07B,oBACb,KAAK,KAAsB7qB,uBACvBpe,KAAK41B,YACDroB,EAAS27B,gBACT,gDACJ,MACJ,KAAK,KAAsB7qB,uBACvB,IAAa/Y,KAAKyyB,GAAiB/3B,KAAKgW,kBACxC,MACJ,QACI,IAAa1Q,KAAK0yB,GAAeh4B,KAAKgW,uBAG9ChW,KAAKwO,mBACD,KAAmBqJ,aACnB7X,KAAKrD,eACL,aAAkBqD,KAAKs1B,QAGrB/sB,EAAS,iBAAM,IAAa7F,SAASkB,QACrCulC,EACF,MAAO5gC,EACD,KAAmBuP,qBACnB,KAAmBC,iBAC7B/X,KAAKwO,mBAAmB26B,EAAOnpC,KAAKrD,eAChC,aAAkBqD,KAAKs1B,QAEvB/qB,GACAvK,KAAKwO,mBACD,KAAmByJ,yBACnBjY,KAAKrD,eACL,aAAkBqD,KAAKs1B,QAG/Bt1B,KAAKi7B,WAAa1tB,EAAS0tB,WAC3B,IAAa31B,KAAK8jC,GAAqBppC,KAAKgW,kB,mBAShD,M,WANAhW,KAAKwO,mBACD,KAAmBwJ,sBACnBhY,KAAKrD,eACL,aAAkBqD,KAAKs1B,QAE3Bt1B,KAAK41B,YAAc,gDACb,E,cAEN51B,KAAKq2B,kBAAoB,OACzBr2B,KAAKmoC,kBAAmB,E,wCAKlB,YAAAM,YADd,sC,iFAEY7Q,GAAF,EAAqD53B,MAApC,gBAAEpD,EAAY,eAAEoZ,EAAe,mBAClD4hB,IAAmBh7B,EAAnB,YACAoD,KAAK83B,gBAAkB,UACvB93B,KAAKwoC,a,iDAGsBxoC,KAAKgjB,IAAIvN,eAAe,CAAEmiB,gBAAe,EAAEh7B,aAAY,K,OAE9E,OAFM2Q,EAAW,EAAH,OAEV,KAAwBwL,WAAWxL,IACnCvN,KAAK83B,gBAAkB,eACvB93B,KAAKwO,mBACD,KAAmB8I,oBACnBtX,KAAKrD,gBAET,KACO,KAA2Boc,WAAWxL,IAC7CvN,KAAK83B,gBAAkB,qBACvB,KAGAvqB,EAASyI,kBAAoBA,GAC7B,IAAa1G,QACT4qB,GACI3sB,EAASyI,gBACT4hB,EACAh7B,IAGR,OAGIirB,EAAoBta,EAAQ,kBAGhCvN,KAAKs4B,aAAezQ,EAAgBxK,UAAY,GAChDrd,KAAKu4B,gBAAkB1Q,EAAgBzK,aAAe,GACtDpd,KAAKw4B,aAAe3Q,EAAgBvK,oBAAsB,GAC1Dtd,KAAKy4B,SAAW5Q,EAAgBtK,aAAe,GAC/Cvd,KAAK02B,OAAS7O,EAAgBrK,iBAAmB,GACjDxd,KAAK04B,MAAQ7Q,EAAgBpK,cAAgB,KAE7Czd,KAAKs4B,aAAe,GACpBt4B,KAAKu4B,gBAAkB,GACvBv4B,KAAKw4B,aAAe,GACpBx4B,KAAKy4B,SAAW,GAChBz4B,KAAK02B,OAAS,GACd12B,KAAK04B,MAAQ,IAEjB14B,KAAKrD,eAAiB4Q,EAAS5Q,eAC/BqD,KAAKpD,aAAe2Q,EAAS3Q,aAC7BoD,KAAKq1B,OAAS9nB,EAAS8nB,OACvBr1B,KAAKgW,gBAAkBzI,EAASyI,gBAChChW,KAAKu2B,KAAO,OAAAC,GAAA,GAASjpB,EAAS4wB,gBAC9Bn+B,KAAKq4B,SACA9qB,EAASsxB,aAAetxB,EAASsxB,YAAYwK,oBAAuB,GACzErpC,KAAK83B,gBAAkB,a,cAIvB,G,WAFkB,aAAkB,KAElB,KAAqB7sB,SAGnC,OAFAjL,KAAK83B,gBAAkB,kBACvB93B,KAAKwO,mBAAmB,KAAmBoJ,oBAAqB,MAChE,IAIJ,MADA5X,KAAK83B,gBAAkB,UACjB,E,oCA3WlB,aADC,a,0BAKD,aADC,a,8BAKD,aADC,a,4BAMD,aADC,a,oCAMD,aADC,a,8BAkBD,aADC,e,2BAGD,aADC,e,0BAGD,aADC,e,sCAGD,aADC,e,mCAOD,aADC,e,sCAID,aADC,e,wCAID,aADC,e,uCAID,aADC,e,+BAID,aADC,e,+BAID,aADC,e,mCAID,aADC,e,2BAID,aADC,e,mCAID,aADC,e,sCAID,aADC,e,mCAID,aADC,e,6BAID,aADC,e,6BAID,aADC,e,4BAID,aADC,e,mCAID,aADC,e,kCAID,aADC,e,kCAID,aADC,e,uCAID,aADC,e,2BAID,aADC,e,gCAID,aADC,e,4BAOD,aADC,e,2BAID,aADC,e,oCAID,aADC,e,qCAGD,aADC,e,kCAID,aADC,e,qCAGD,aADC,e,kCAID,aADC,e,kCAGD,aADC,e,+BAID,aADC,e,iCAID,aADC,e,sCAID,aADC,e,qCAID,aADC,e,sCAUD,aADC,UAAO33B,O,6BAUR,aADC,UAAOA,O,+BAOR,aAFC,UAAOA,MACPq1B,I,yCAUD,aADC,UAAOr1B,O,iCAMR,aADC,UAAOA,O,+BAMR,aADC,UAAOA,O,sCAMR,aADC,UAAOA,O,uCAoLZ,C,CAjXA,GA+XampC,GAA4B,wBAAc,IAAI,I,4DC5ZrD,GAAU,IAAO5rC,IAAG,2DAAV,CAAU,yLAMpB2V,GAAY,IAAO3V,IAAG,8DAAV,CAAU,uIAKtB6rC,GAAyB,IAAO7rC,IAAG,0EAAV,CAAU,4DAA8C,gCAM9E,SAJH,SAAC,G,IAAEM,EAAA,EAAAA,MAAOwV,EAAA,EAAAA,MACR,OAAAxV,GACA,YAAG,qFACgC,iBAAtBwV,EAAMxV,EAAQ,SAF3B,IAUKwrC,GAAkD,cAAS,SAAC,G,MAAExoC,EAAA,EAAAA,GACjEyqB,EAAiB,QAAZ,EAAGzqB,EAAGyoC,cAAM,eAAEhe,MAEzB,OACI,kBAAC,IAAa,CAACjY,MAAO,KAClB,kBAAC,GAAO,KACJ,kBAACH,GAAS,KACN,kBAACq2B,GAAA,EAAS,KACN,kBAAC51B,GAAA,EAAK,CAAC61B,IAAI,iBAAe,wBAC1B,kBAACC,GAAA,EAAW,CACRlhC,KAAK,OACLE,SAAU5H,EAAG6oC,yBACb9sC,GAAG,gBACHmJ,KAAK,gBACL2c,MAAO4I,IAAU,KAAeqe,KAChCC,QAASte,IAAU,KAAetuB,MAClC0L,SAAU4iB,IAAU,KAAeue,UAEtCve,IAAU,KAAetuB,MACtB,kBAACosC,GAAsB,CAACvrC,MAAM,UACzBgD,EAAGipC,cAAe,IACnB,kBAACpiC,GAAA,EAAM,CAAC7J,MAAM,SAASqE,KAAK,KAAKF,QAASnB,EAAGkpC,iBAAe,UAIhEze,IAAU,KAAeue,QACzB,kBAACT,GAAsB,CAACvrC,MAAM,WAC1B,kBAAC,KAAO,CAACqE,KAAK,KAAKrE,MAAM,Y,IAAcgD,EAAGipC,eAE9Cxe,IAAU,KAAeqe,KACzB,kBAACP,GAAsB,CAACvrC,MAAM,WACzBgD,EAAGipC,eAGRjpC,EAAGipC,eACC,kBAACV,GAAsB,KAAEvoC,EAAGipC,kBAQ5D,I,UCtEA,cASI,WAAYjnB,GAPZ,KAAAmnB,YAA2B,KAG3B,KAAAV,OAA0C,KAKtCzpC,KAAKgjB,IAAMA,GAAO,GACtB,CAoDJ,OAlDY,YAAAonB,cAAR,SAAsBr7B,GAAtB,WACI,OAAO,OAAAD,GAAA,GAAyBC,GAAM,SAACG,GAAW,SAAKm7B,oBAAoBn7B,EAAzB,GACtD,EAGA,YAAAg7B,gBAAA,WACQlqC,KAAKmqC,cACLnqC,KAAKypC,OAASzpC,KAAKoqC,cAAcpqC,KAAKmqC,aAE9C,EAGA,YAAAN,yBAAA,SAAyBV,G,QACrBnpC,KAAKmqC,YAAwC,QAA7B,EAAqB,QAArB,EAAGhB,EAAMvjC,OAAOue,aAAK,eAAEtD,KAAK,UAAC,QAAK,KAE9C7gB,KAAKmqC,cACLnqC,KAAKypC,OAASzpC,KAAKoqC,cAAcpqC,KAAKmqC,aAE9C,EAGA,sBAAI,4BAAa,C,IAAjB,W,QACI,OAAmB,QAAnB,EAAQnqC,KAAKypC,cAAM,eAAEhe,OACjB,KAAK,KAAeue,QAChB,MAAO,4BACX,KAAK,KAAe7sC,MAChB,MAAO,WAAqB,QAArB,EAAU6C,KAAKypC,cAAM,eAAEn+B,OAClC,KAAK,KAAew+B,KAChB,MAAO,gCACX,KAAK,KAAepuB,UAChB,MAAO,mBACX,QACI,MAAO,GAEnB,E,gCAGc,YAAA2uB,oBADd,SACkCn7B,GAAc,2B,2EACrBlP,KAAKgjB,IAAItM,sBAAsB,CAClDxH,OAAM,EACN2V,SAAU,GACVC,SAAU,IAAS/H,a,OAGvB,GANMxP,EAAW,EAAH,OAMV,IAA8BwL,WAAWxL,GACzC,MAAM,IAAIpQ,MAAM,kCAEhB,MAAO,CAAP,EAAOoQ,G,mBA1Df,aADC,e,kCAID,aADC,e,6BAcD,aADC,UAAOpN,O,oCAQR,aADC,UAAOA,O,6CAUR,aADC,a,kCA8BL,C,CA/DA,GCOMmqC,GAAgE,SAAC,G,IAAEtnB,EAAA,EAAAA,IAC/D,kCAACunB,EAAA,KAAUC,EAAA,KACX,kCAACC,EAAA,KAA0BC,EAAA,KAC3B,oCAACC,EAAA,KAAOC,EAAA,KAERC,EAAuB,IAAMC,aAAY,+D,kEAC3CN,GAAY,G,iBAGJ,O,uBADJ,EAAAI,EACI,GAAM5nB,EAAIzM,kCAAkC+f,GAAW,IAAI/N,KAAQ,gB,cADvE,gBACI,W,6BAGJmiB,GAA4B,G,oBAE5BF,GAAY,G,8BAEjB,CAACI,EAAU5nB,IAEd,OACI,6BACK2nB,GACG,6BACI,6B,mBAAsBA,EAAMI,cAC5B,6B,cAAiBJ,EAAM9lB,S,KACvB,wHAMP4lB,GAA4B,kBAACrE,GAAA,EAAK,kCAClCmE,GACG,yHAKHA,GAAY,kBAACzhC,GAAA,EAAO,OACnB6hC,GACE,kBAAC9iC,GAAA,EAAM,CAAC7J,MAAM,UAAUmE,QAAS0oC,EAAsBhiC,SAAU0hC,GAC5DA,EAAW,wBAA0B,oBAK1D,EACaS,GAAsD,cAAS,SAAC,G,IAAEhoB,EAAA,EAAAA,IAC3E,OACI,kBAACoY,GAAS,KACN,kBAACpzB,GAAA,EAAW,CAACK,YAAY,EAAOD,YAAY,EAAOD,QAAS,WAAO,IACnE,yBAAKpK,UAAU,a,yCAEX,6BACA,kBAACusC,GAAyB,CAACtnB,IAAKA,KAIhD,IC/CaioB,GAAgB,WACzB,IAAMjqC,EAAK,qBAAWsoC,IACtB,OAAO,kBAAC7O,GAAI,CAACz5B,GAAIA,GACrB,EAEawwB,GAAoB,SAACxwB,GAC9B,IAAMkqC,EAAY,qBAAW5B,IAC7B,OAAO,kBAACr+B,GAAQ,CAACjK,GAAIA,GAAMkqC,GAC/B,EAEa5Z,GAAwB,WACjC,IAAMtwB,EAAK,qBAAWsoC,IACtB,OAAO,kBAAC3P,GAAY,CAAC34B,GAAIA,GAC7B,EAEamqC,GAAkE,SAACltC,GAC5E,IAAM+C,EAAK,qBAAWsoC,IACtB,OAAO,kBAACvY,EAAY,eAAK9yB,EAAK,CAAE+C,GAAIA,IACxC,EAGai3B,GAAoB,SAC7B3vB,EACAsxB,EACAC,EACAC,GAEA,IAAMvxB,EAAS,uCACPqxB,GAAQ,CAAEA,KAAI,IACdC,GAAO,CAAEA,IAAG,IACZC,GAAO,CAAEA,IAAG,IAGpB,OAAI,IAAQvxB,GACD,IAAID,EAAM,OAEV,IAAIA,EAAM,QAAQ,qBAAUC,EAE3C,EAEagpB,GAA0B,WACnC,IAAMvwB,EAAK,qBAAWsoC,IACtB,OAAO,kBAAC7R,GAAc,CAACz2B,GAAIA,GAC/B,EAEaiwB,GAAe,SAACxC,GACzB,OAAO,YAA8BA,EAAI9rB,SAAU,CAC/C+b,KAAM,YAEd,EAEawS,GAAc,SAACzC,GACxB,IAAM2c,EAAWna,GAAaxC,GAE9B,OAAO2c,GAAYA,EAAS7iC,OAAOD,MACvC,EAEaqvB,GAAsB,SAAClJ,GAChC,OAAO,YAAUA,EAAI9rB,SAAU,CAAE+b,KAAM,2CAK3C,EAEawb,GAAsB,SAC/B5xB,EACAsvB,EACAh7B,GAGA,MAAO,IAAI0L,EAAM,KADjBsvB,EAAkBA,EAAgB/R,QACE,IAAIjpB,EAAY,IACxD,EAEay0B,GAA2B,WACpC,IAAMrwB,EAAK,qBAAWsoC,IACtB,OAAO,kBAACtO,GAAe,CAACh6B,GAAIA,GAChC,EAEaooC,GAAuB,SAAC9gC,GACjC,MAAO,IAAIA,EAAM,OACrB,EAEa6oB,GAAyB,WAClC,IAAMnwB,EAAK,qBAAWsoC,IACtB,OAAO,kBAACpO,GAAa,CAACl6B,GAAIA,GAC9B,EAEag3B,GAAiB,SAAC1vB,GAC3B,MAAO,IAAIA,EAAM,OACrB,EAEa+iC,GAAyB,gBAAK,WAAM,wCAEpCC,GAAa,WACtB,MAAO,cACX,EACaC,GAAgB,WACzB,MAAO,uBACX,EAEana,GAAuB,WAChC,IAAMpwB,EAAK,qBAAWsoC,IACtB,OAAO,kBAACzO,GAAW,CAAC75B,GAAIA,GAC5B,EAEa+2B,GAAmB,SAACzvB,GAC7B,MAAO,IAAIA,EAAM,eACrB,EAEakjC,GAAuB,WAChC,IAAMpiB,EAAa,qBAAWroB,EAAA,IAA8B,IAAImuB,EAAA,EAC1DluB,EAAK,IAAI,GAAqBooB,GACpC,OAAO,kBAAC+d,GAAW,CAACnmC,GAAIA,GAC5B,EAEayqC,GAA2B,WACpC,OAAO,kBAACT,GAAe,CAAChoB,IAAK,KACjC,EAEa0oB,GAAmB,SAACpjC,GAC7B,OAAO,YAAgBgjC,KAAY,oBACvC,EAEaK,GAAyB,WAClC,IAAM3qC,EAAK,IAAI,GACf,OAAO,kBAACwoC,GAAa,CAACxoC,GAAIA,GAC9B,EAEa4qC,GAAqB,WAC9B,OAAUN,KAAY,iBAC1B,C,0GCtJYO,E,sBA8CL,SAASC,EACZ3+B,EACA4+B,EACAC,GAEA,OAAO,IAAI,EAAkC7+B,EAAS4+B,EAAWC,EAGrE,EAtDA,SAAYH,GACR,mBACA,qBACA,yBACA,4BACH,CALD,CAAYA,MAAc,KA8D1B,iBAcI,WACqB1+B,EACT4+B,EACAC,GAFS,KAAA7+B,UACT,KAAA4+B,YACA,KAAAC,WAZZ,KAAA1oC,SAAU,EAOF,KAAA2oC,aAAc,EASdjsC,KAAKksC,KADL/+B,EACYA,EAAQU,KAAK7N,KAAKE,QAASF,KAAKmtB,QAIhC,IAAIltB,SAAQ,WAAO,GAEvC,CAkDJ,OA/CI,YAAAksC,UAAA,WChGG,IAA0Bv4B,EDiGrB5T,KAAKsD,UACLtD,KAAKisC,aAAc,EACnBjsC,KAAKsD,SAAU,GCnGMsQ,EDoGJ5T,KAAKmN,UCnGD,oBAAbyG,EAAE1F,QACd0F,EAAE1F,SDoGN,EAGQ,YAAAhO,QAAR,SAAgBiB,GACRnB,KAAKisC,cAITjsC,KAAKsD,SAAU,EACftD,KAAKsE,MAAQnD,EAETnB,KAAK+rC,WACL/rC,KAAK+rC,UAAU5qC,GAEvB,EAGQ,YAAAgsB,OAAR,SAAenJ,GACPhkB,KAAKisC,cAITjsC,KAAKsD,SAAU,EACftD,KAAKsL,MAAQ0Y,EACb,OAAAF,EAAA,GAAkBE,EAAG,CAAEooB,sBAAsB,IAEzCpsC,KAAKgsC,UACLhsC,KAAKgsC,SAAShoB,GAEtB,EAGA,sBAAI,oBAAK,C,IAAT,WACI,OAAOhkB,KAAKisC,YACNJ,EAAenwB,UACf1b,KAAKsD,QACLuoC,EAAe7B,QACfhqC,KAAKsL,MACLugC,EAAe1uC,MACf0uC,EAAe/B,IACzB,E,gCA1EA,aADC,c,4BAID,aADC,c,8BAID,aADC,c,4BAuBD,aADC,SAAO3pC,O,8BAUR,aADC,SAAOA,O,4BAeR,aADC,SAAOA,O,2BAgBR,aADC,Y,0BAUL,C,CA7EA,E,6HE9DMkC,EAAO,GACPgqC,EAAKhqC,GACLiqC,EAAKjqC,GACLkqC,EAAqB,EAALF,EAAS9I,KAAKiJ,GAE9BC,EAAa,IAAOtc,IAAG,+DAAV,CAAU,64BAAc,iBACzB,mBACD,sjBAyBmC,KAAkB,iGAInB,KAAkB,sCACf,+DAGH,KAAkB,sCACf,8BAkCvC,QArED9tB,EACDA,EAyBmC,IAAhBkqC,EAAyBA,EAIT,GAAhBA,EAAwBA,EACN,IAAhBA,EAGc,GAAhBA,EAAwBA,EACN,IAAhBA,GAI5B,SAAAtuC,GACE,OAAAA,EAAMi0B,WACA,YAAG,6oCAOsC,ioBAAbqa,GAe5B,YAAG,ucAI4C,KAAkB,4CAArB,GAAhBA,EAAwBA,EA3B1D,IAgCFG,EAAiB,IAAOhvC,IAAG,mEAAV,CAAU,uEAAc,oCAMtC,SAYM,SAhBT,SAAAO,GACE,OAAAA,EAAMmE,MACN,YAAG,0HADH,IAIF,SAAAnE,GACE,YAAgB2G,IAAhB3G,EAAMuI,MACA,YAAG,uOAC+B,2EAEF,iCACD,yBAHRvI,EAAMuI,MAEfnE,EAAOpE,EAAMuI,MACdnE,EAAOpE,EAAMuI,OAE1B,YAAG,0IACe,iCACD,yBADHnE,EACDA,EATnB,IAoBD,SAASyG,EAAQ,G,IAAE/K,EAAA,EAAAA,UAAWm0B,EAAA,EAAAA,WAAY9vB,EAAA,EAAAA,KAAMoE,EAAA,EAAAA,MAC7CvI,EAAQ,YAAU,CAAE0uC,gBAAiB,KAAKJ,IAEhD,OACI,kBAACG,EAAc,CACX3uC,UAAWA,EACXqE,KAAMA,EACNggC,MAAO,CAAE4C,UAAW,UAASx+B,GAAS,GAAC,MAEvC,kBAACimC,EAAU,CAACva,WAAYA,GACpB,kBAAC,IAAS0a,OAAM,aACZ7uC,UAAU,OACV8uC,OAAO,eACPlO,KAAK,OACL0N,GAAIA,EACJC,GAAIA,EACJtH,UAAW,cAAcqH,EAAE,IAAIC,EAAE,IACjC9f,EAAG,GACCvuB,IAER,0BACI4uC,OAAO,eACPlO,KAAK,OACLqG,UAAU,gCAA+B,mBACxB,UACjBjnC,UAAU,OACV6gC,EAAE,0HAKtB,C","file":"static/js/main.5f33493d.chunk.js","sourcesContent":["interface IRecovery {\n debtIdentifier: string;\n licensePlate: string;\n}\n\nexport const toRecoveryKey = (recovery: IRecovery) =>\n `${recovery.debtIdentifier}-${recovery.licensePlate}`;\n","import React from 'react';\nimport { Button, ButtonProps } from 'reactstrap';\nimport styled from 'styled-components';\nimport { getUniqueId } from 'utils/getUniqueId';\nimport { SnackbarControllerContext } from './SnackbarController';\n\n/**\n * The components renders passed children in another react tree managed by SnackbarController\n */\nexport const SnackbarRenderer: React.FunctionComponent = ({ children }) => {\n const [id] = React.useState(() => getUniqueId());\n const context = React.useContext(SnackbarControllerContext);\n if (!context && process.env.__DEV__) {\n throw new Error('Snackbar cannot be rendered outside of SnackbarControllerContext');\n }\n\n React.useEffect(() => {\n context?.showSnackbar(id, {\n content: children,\n persistent: true,\n });\n\n return () => {\n context?.handleDismiss(id);\n };\n }, [id, context, children]);\n\n return null;\n};\n\nexport const SnackbarContent = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const SnackbarText = styled.span`\n flex: 1 1 auto;\n`;\n\nexport const RetryButton = styled(Button)`\n background: rgba(0, 0, 0, 0);\n border-color: transparent;\n border-radius: 2rem;\n flex: 0 0 auto;\n margin-right: 0.5rem;\n`;\n\nexport const SnackbarButton: React.FC = ({ children, className, ...props }) => {\n return (\n \n {children}\n \n );\n};\n","export interface AlfieConfig {\n auth0: {\n domain: string;\n clientId: string;\n audience: string;\n };\n appInsights: {\n instrumentationKey: string;\n };\n raygun: {\n apiKey: string;\n };\n productInformation: {\n region: string;\n };\n staticFilesUrl?: string;\n stripe: {\n apiKey: string;\n };\n}\n\nexport const alfieConfig = {} as AlfieConfig;\n\nconst configEl = document.querySelector('#root div[data-type=\"config\"]');\nif (configEl) {\n const json = configEl.innerHTML;\n Object.assign(alfieConfig, JSON.parse(json));\n} else {\n // couldn't find config block, add a minimally valid structure\n Object.assign(alfieConfig, {\n auth0: { domain: '', clientId: '', audience: '' },\n appInsights: { instrumentationKey: '' },\n raygun: { apiKey: '' },\n productInformation: { region: '' },\n stripe: { apiKey: 'pk_test_atHWm6UAe7ws2gW9XAapoJVP00V6fiD4xD' },\n });\n}\n\nif (alfieConfig.staticFilesUrl) {\n __webpack_public_path__ = alfieConfig.staticFilesUrl + '/';\n}\n","import { action, observable, when } from 'mobx';\n\n/**\n * Observable store to keep the browser's online state\n */\nclass IsOnlineStore {\n @observable\n isOnline = navigator.onLine;\n\n /**\n * The count of actions executed or awaiting while offline.\n * Stored as a count to show the snackback again if it's been closed by the user\n */\n @observable\n offlineUsageReportedCount = 0;\n\n constructor() {\n window.addEventListener('offline', () => {\n this.isOnline = false;\n });\n window.addEventListener(\n 'online',\n action('onOnline', () => {\n this.isOnline = true;\n this.offlineUsageReportedCount = 0;\n }),\n );\n }\n\n @action.bound\n whenOnline() {\n if (this.isOnline) {\n return Promise.resolve();\n }\n\n this.offlineUsageReportedCount++;\n return when(() => this.isOnline);\n }\n}\n\nexport const isOnlineStore = new IsOnlineStore();\n","let nextId = 0;\nexport function getUniqueId() {\n return `id-${nextId++}`;\n}\n","import { timesIcon } from 'assets/icons';\nimport { SvgIcon } from 'components/SvgIcon/SvgIcon';\nimport { motion } from 'framer-motion';\nimport isFunction from 'lodash.isfunction';\nimport { observer } from 'mobx-react-lite';\nimport React, { useEffect } from 'react';\nimport { Button } from 'reactstrap';\nimport styled from 'styled-components';\nimport { SnackbarContent, SnackbarText } from './Snackbar';\nimport { SnackbarConfig } from './Snackbar.types';\nimport { SnackbarControllerViewModel } from './SnackbarControllerViewModel';\n\nconst transientAlertDurationMs = 7000;\n\nexport const SnackbarControllerContext = React.createContext(\n null,\n);\n\nexport interface SnackbarControllerComponent {\n vm: SnackbarControllerViewModel;\n}\n\nconst variants = {\n visible: { scaleY: 1, opacity: 0.98 },\n hidden: { scaleY: 0, opacity: 0 },\n};\n\nconst SnackbarContainer = styled.div`\n z-index: 1065;\n position: fixed;\n top: 9rem;\n left: 1rem;\n right: 1rem;\n display: flex;\n align-items: stretch;\n flex-direction: column;\n pointer-events: none;\n\n @media (min-width: 768px) {\n width: 320px;\n left: 50%;\n transform: translateX(-50%);\n }\n`;\n\nconst SnackbarAlert = styled(motion.div)`\n color: #fff;\n background: #333;\n pointer-events: all;\n\n padding: 0.75rem 1.25rem;\n box-shadow: 0 0.25rem 0.75rem rgba(#000, 0.1);\n border-radius: 4px;\n\n & + & {\n margin-top: 1rem;\n }\n`;\n\nexport const SnackbarController: React.FC = observer(({ vm }) => {\n const { snackbars, handleDismiss } = vm;\n return (\n \n {snackbars.map(x => (\n \n \n \n ))}\n \n );\n});\n\ninterface SnackbarItemComponent {\n id: string;\n config: SnackbarConfig;\n onDismiss: (id: string) => void;\n}\n\nconst SnackbarItem: React.FC = ({ id, config, onDismiss }) => {\n const { content, persistent } = config;\n useEffect(() => {\n if (persistent) {\n return;\n }\n const timeout = window.setTimeout(handleDismiss, transientAlertDurationMs);\n return () => {\n if (timeout) {\n window.clearTimeout(timeout);\n }\n };\n }, [config.persistent]);\n\n const handleDismiss = () => {\n if (isFunction(onDismiss)) {\n onDismiss(id);\n }\n };\n\n return (\n \n {typeof content === 'string' ? {content} : content}\n \n \n );\n};\n\nconst CloseButton = styled(Button)`\n border-color: transparent;\n border-radius: 50%;\n color: #fff;\n padding: 0.375rem;\n`;\n\nconst SnackbarCloseButton: React.StatelessComponent<{ onClose?: () => void }> = ({ onClose }) => {\n return (\n \n \n \n );\n};\n","import createAuth0Client from '@auth0/auth0-spa-js';\nimport Auth0Client from '@auth0/auth0-spa-js/dist/typings/Auth0Client';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { globalHandleError } from 'utils/globalHandleError';\nimport { telemetry } from 'utils/telemetry';\nimport { AuthService } from './AuthService';\n\nexport interface Auth0Context {\n isAuthenticated: boolean;\n user: any;\n loading: boolean;\n handleRedirectCallback(): Promise;\n getIdTokenClaims(o?: getIdTokenClaimsOptions): Promise;\n loginWithRedirect(o: RedirectLoginOptions): Promise;\n getTokenSilently(o?: GetTokenSilentlyOptions): Promise;\n logout(o?: LogoutOptions): void;\n}\ninterface Auth0ProviderOptions {\n children: React.ReactElement;\n onRedirectCallback?(result: RedirectLoginResult): void;\n}\n\nconst DEFAULT_REDIRECT_CALLBACK = () =>\n window.history.replaceState({}, document.title, window.location.pathname);\n\nexport const Auth0Context = React.createContext(null);\nexport const useAuth0 = () => useContext(Auth0Context)!;\nexport const Auth0Provider = ({\n children,\n onRedirectCallback = DEFAULT_REDIRECT_CALLBACK,\n ...initOptions\n}: Auth0ProviderOptions & Auth0ClientOptions) => {\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [user, setUser] = useState();\n const [auth0Client, setAuth0] = useState();\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n AuthService.setClient(auth0Client);\n AuthService.isAuthenticated = isAuthenticated;\n }, [isAuthenticated]);\n\n const neverEndingPromise = new Promise(() => undefined);\n\n const getTokenSilently = async (o: GetTokenSilentlyOptions | undefined) => {\n if (auth0Client) {\n const token = await auth0Client.getTokenSilently(o);\n if (!token) {\n setIsAuthenticated(false);\n window.location.reload();\n return neverEndingPromise;\n }\n return token;\n } else {\n return undefined;\n }\n };\n\n useEffect(() => {\n const initAuth0 = async () => {\n const auth0FromHook = await createAuth0Client(initOptions);\n setAuth0(auth0FromHook);\n\n if (window.location.search.includes('code=')) {\n const result = await auth0FromHook.handleRedirectCallback();\n onRedirectCallback(result);\n }\n\n const userIsAuthed = await auth0FromHook.isAuthenticated();\n\n setIsAuthenticated(userIsAuthed);\n\n if (userIsAuthed) {\n const authUser = await auth0FromHook.getUser();\n telemetry.setCurrentUser(authUser);\n setUser(authUser);\n }\n\n setLoading(false);\n };\n initAuth0().catch(globalHandleError);\n }, []);\n\n const handleRedirectCallback = async () => {\n setLoading(true);\n const result = await auth0Client!.handleRedirectCallback();\n const redirectUser = await auth0Client!.getUser();\n setLoading(false);\n setIsAuthenticated(true);\n setUser(redirectUser);\n return result;\n };\n return (\n \n auth0Client!.getIdTokenClaims(o),\n loginWithRedirect: (o: RedirectLoginOptions) => auth0Client!.loginWithRedirect(o),\n logout: (o: LogoutOptions | undefined) => auth0Client!.logout(o),\n }}\n >\n {children}\n \n );\n};\n","import { initAppInsightsFetchMonitor } from 'application-insights-fetch-monitor';\nimport { AppInsights } from 'applicationinsights-js';\nimport { globalHandleError } from 'utils/globalHandleError';\nimport { AlfieConfig } from './alfie-config';\nimport { createDebug } from './debug';\n\nconst debug = createDebug('AppInsights');\n\nconst ignoreRemoteDependencyTargets = ['api.raygun.io', 'rs.fullstory.com'];\n\nexport function setupAppInsights(config?: AlfieConfig) {\n if (!config) {\n return;\n }\n const { instrumentationKey } = config.appInsights;\n\n if (!instrumentationKey) {\n return;\n }\n\n AppInsights.downloadAndSetup!({\n instrumentationKey,\n correlationHeaderExcludedDomains: ignoreRemoteDependencyTargets,\n });\n\n appInsights.queue.push(() => {\n appInsights.context.addTelemetryInitializer(envelope => {\n // do not log requests to raygun\n if (\n envelope.data.baseType === 'RemoteDependencyData' &&\n ignoreRemoteDependencyTargets.includes(envelope.data.baseData.target)\n ) {\n return false;\n }\n\n if (envelope.data.baseType === 'ExceptionData') {\n const { exceptions } = envelope.data.baseData;\n if (exceptions instanceof Array) {\n // only send error when exceptions have full stack\n // otherwise they come from browser extensions and can be ignored\n return exceptions.some(x => x.hasFullStack);\n }\n }\n\n // debug log all the telemetry details\n debug(\n log =>\n log`${envelope.name.substr(envelope.name.lastIndexOf('.') + 1)}: ${\n envelope.data.baseData\n }`,\n );\n return true;\n });\n });\n\n initAppInsightsFetchMonitor().catch(globalHandleError);\n}\n\nexport function getAppInsights() {\n return AppInsights;\n}\n","import { Spinner } from 'components/Spinner/Spinner';\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst Overlay = styled.div`\n align-items: center;\n background-color: #ccc;\n display: flex;\n position: fixed;\n top: 0;\n height: 100vh;\n justify-content: center;\n left: 0;\n width: 100vw;\n`;\n\nexport const LoadingOverlay = () => {\n return (\n \n \n \n );\n};\n","module.exports = __webpack_public_path__ + \"64e4256371f4d68f773d289ce0dbcba8.svg\";","export default __webpack_public_path__ + \"static/media/alfie-img.5a54050f.png\";","export const pluraliser = (count: number, singular: string, plural: string) => {\n if (count === 1) {\n return `1 ${singular}`;\n } else {\n return `${count} ${plural}`;\n }\n};\n","import Auth0Client from '@auth0/auth0-spa-js/dist/typings/Auth0Client';\nimport { action, observable } from 'mobx';\n\nclass AuthServiceViewModel {\n @observable\n isAuthenticated = false;\n\n @observable\n private client: Auth0Client | undefined = undefined;\n\n async getTokenSilently() {\n if (this.client) {\n return await this.client.getTokenSilently();\n } else {\n return undefined;\n }\n }\n\n @action.bound\n setClient(client?: Auth0Client) {\n this.client = client;\n }\n}\n\nexport const AuthService = new AuthServiceViewModel();\n","import React, { FC } from 'react';\n\nexport const FontLink: FC = () => (\n \n);\n","import { action, computed, observable } from 'mobx';\nimport { createDebug } from 'utils/debug';\nimport { SnackbarConfig } from './Snackbar.types';\n\nconst debug = createDebug('SnackbarController');\n\nexport class SnackbarControllerViewModel {\n private readonly snackbarsMap = observable.map([], { deep: false });\n\n @computed\n get snackbars() {\n return [...this.snackbarsMap.entries()].map(([id, config]) => ({ id, config }));\n }\n\n @action.bound\n showSnackbar(id: string, config: SnackbarConfig) {\n if (!this.snackbarsMap.has(id)) {\n debug(log => log`show ${id}`);\n this.snackbarsMap.set(id, config);\n } else {\n debug(log => log`already shown ${id}`);\n }\n }\n\n @action.bound\n handleDismiss(id: string) {\n debug(log => log`remove ${id}`);\n this.snackbarsMap.delete(id);\n }\n}\n","import { Input as ReactStrapInput } from 'reactstrap';\nimport styled from 'styled-components';\n\nexport const Input = styled(ReactStrapInput)`\n display: block;\n height: calc(1.5em + 0.75rem + 2px);\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--dark);\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid var(--gray);\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n &:disabled,\n &.disabled {\n background-color: var(--light);\n opacity: 0.65;\n }\n @media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n }\n`;\n","import { barsIcon, syncAltIcon } from 'assets/icons';\nimport alfiepayLogo from 'assets/images/alfie-img.png';\nimport { useAuth0 } from 'components/Authorize/Auth0Wrapper';\nimport { Input } from 'components/Input';\nimport { Spinner } from 'components/Spinner/Spinner';\nimport { SvgIcon } from 'components/SvgIcon/SvgIcon';\nimport React from 'react';\nimport { Link, useRouteMatch } from 'react-router-dom';\nimport {\n Button,\n DropdownItem,\n DropdownMenu,\n DropdownToggle,\n UncontrolledDropdown,\n} from 'reactstrap';\nimport { adminRoute, printTriageRoute } from 'routing';\nimport styled from 'styled-components';\n\ninterface AdminHeaderComponent {\n dropdownMenuItems?: JSX.Element[];\n refresh: () => void;\n refreshing: boolean;\n showSearch: boolean;\n onSearch?: (e: React.FormEvent) => void;\n}\n\nconst FixedHeader = styled.div`\n border-bottom: 1px solid var(--light);\n background: #fff;\n left: 0;\n padding: 1rem 0;\n position: sticky;\n top: 0;\n width: 100vw;\n z-index: 1000;\n`;\n\nconst HeaderBlock = styled.div`\n display: flex;\n > button {\n margin-left: 1rem;\n }\n`;\n\nexport const RefreshButton = styled(Button)`\n justify-content: center;\n min-width: 3rem;\n`;\n\nconst LogoImg = styled.img`\n height: 2rem;\n`;\n\nexport const AdminHeader: React.FC = ({\n dropdownMenuItems: menuItems,\n onSearch,\n refresh,\n refreshing,\n showSearch,\n}) => {\n const auth0 = useAuth0();\n const logout = () => auth0.logout();\n const { params } = useRouteMatch<{ orgKey?: string }>();\n const { orgKey } = params;\n\n return (\n \n \n \n \n \n {showSearch && onSearch ? (\n \n ) : (\n
\n )}\n \n {refreshing ? : }\n \n\n \n \n \n \n \n \n Home\n \n \n \n Generate letters\n \n {menuItems}\n \n Logout\n \n \n \n \n );\n};\n","import { AlfieConfig } from './alfie-config';\n\ninterface RaygunCustomData {\n from?: string;\n}\n/**\n * To mutate Breadcrumbs for a call to raygun. Intended to obfuscate access tokens\n * @param payload\n * @param callback\n */\nconst forEachBreadcrumb = (payload: any, callback: (data: RaygunCustomData) => void) => {\n // remove accessToken from breadcrumbs\n if (\n payload instanceof Object &&\n payload.Details instanceof Object &&\n payload.Details.Breadcrumbs instanceof Array\n ) {\n payload.Details.Breadcrumbs.forEach((b: any) => {\n if (\n b instanceof Object &&\n b.CustomData instanceof Object &&\n typeof b.CustomData.from === 'string'\n ) {\n callback(b.CustomData);\n }\n });\n }\n};\n\nexport const initRaygun = (config: AlfieConfig) => {\n if (!rg4js || !config.raygun.apiKey) {\n return;\n }\n rg4js('apiKey', config.raygun.apiKey);\n rg4js('enableCrashReporting', true);\n rg4js('setAutoBreadcrumbsXHRIgnoredHosts', ['visualstudio.com']);\n rg4js('options', { ignore3rdPartyErrors: true });\n rg4js('onBeforeSend', (payload: any) => {\n // could possibly loosen this to be `code=` -- discovered by inspecting `from` in errors after logging in\n const tokenRe = /code=.+state=/;\n forEachBreadcrumb(payload, (data: RaygunCustomData) => {\n if (data.from && tokenRe.test(data.from)) {\n data.from = '/[REDACTED]';\n }\n });\n return payload;\n });\n};\n\n/**\n * @param user comes from Auth0 which means it's weakly typed\n */\nexport const setRaygunUser = (user: any) => {\n // Because this user type is so squishy, make sure it has useful info before proceeding\n if (rg4js && user && user.email && user.sub) {\n rg4js('setUser', {\n identifier: user.sub,\n isAnonymous: false,\n email: user.email,\n fullName: user.name,\n });\n }\n};\n","export default __webpack_public_path__ + \"static/media/alfie-sad.de708e8a.png\";","// This allows us to add custom data to the instance of Error\n// Useful in cases when error needs to be thrown to stop execution without calling globalHandleError\nexport const ErrorCustomDataSymbol = Symbol('ErrorCustomData');\n","import { getFetchErrorName, KnownFetchErrorNames } from 'api/FetchError';\nimport { getAppInsights } from './appInsights';\nimport { setRaygunUser } from './raygun';\n\nconst fetchErrorsWithReducedSeverity = [\n KnownFetchErrorNames.AbortError,\n KnownFetchErrorNames.NetworkError,\n KnownFetchErrorNames.NotFound,\n];\n\nexport const telemetry = {\n setCurrentUser(user: any | undefined) {\n setRaygunUser(user);\n if (user) {\n getAppInsights().setAuthenticatedUserContext(user.sub);\n } else {\n getAppInsights().clearAuthenticatedUserContext();\n }\n },\n trackException(error: Error | any, customData?: any) {\n const fetchErrorName = getFetchErrorName(error);\n\n if (fetchErrorName && fetchErrorsWithReducedSeverity.includes(fetchErrorName)) {\n getAppInsights().trackException(\n error,\n undefined,\n customData,\n undefined,\n 1 /* Information */,\n );\n return;\n }\n\n rg4js('send', { error, customData });\n getAppInsights().trackException(error, undefined, customData);\n },\n};\n","import debug from 'debug';\n\n/**\n * @summary\n * Creates a namespaced `DebugFunction`.\n * The `DebugFunction` takes another function - `LogFunction` - as a parameter that actually prepares and outputs the debug message.\n * The `LogFunction` is only called when the namespace is enabled.\n * All this function in function syntax is needed to ensure that we don't evaluate message parameters when the debug namespace is disabled\n * because it can create performance issues.\n *\n * @example\n * const debug = createDebug('SnackbarController');\n *\n * debug(log => log`Log line with ${value1} and ${value2}`);\n * debug(log => log`My huge mobx viewmodel ${mobx.toJs(vm)}`);\n * // mobx.toJs(vm) will only be evaluated when the debug namespace is enabled.\n * // Otherwise, it's going to be a huge performance, especially if called on each keypress.\n *\n * @description\n * In order to use it in the browser, setup a `debug` variable in local storage with a comma separated list of namespaces\n * (DevTools -> Application -> Local Storage -> http://localhost:5000 -> double-click under the last variable).\n * It also supports wildcard.\n * For more configuration options: https://www.npmjs.com/package/debug#wildcards\n *\n * NOTE: All our debugs are prefaced with 'Auror:'.\n *\n * @example\n * // all\n * localStorage.debug = `Auror:*`;\n * // only SnackbarController\n * localStorage.debug = `Auror:SnackbarController:*`;\n *\n * @description\n * TIP: Getting the correct debug lines in console can be achieved by configuring blackboxing in Chrome Devtools -> Settings -> Blackboxing.\n * Add the following patterns:\n * - `/raygun.*$`\n * - `/debug.*$`\n */\nexport const createDebug = (namespace: string): DebugFunction => {\n const ns = debug(`Auror:${namespace}`);\n\n const debugFunction = (logFactory: (log: LogFunction) => void) => {\n if (!ns.enabled) {\n return;\n }\n\n logFactory((literals: TemplateStringsArray, ...args: any[]) => {\n const message = literals.join('%o');\n ns(message, ...args);\n });\n };\n\n debugFunction.enabled = () => ns.enabled;\n debugFunction.extend = (extendedNamespace: string) =>\n createDebug([namespace, extendedNamespace].join(':'));\n return debugFunction;\n};\n\nexport type LogFunction = (literals: TemplateStringsArray, ...args: any[]) => void;\n\nexport interface DebugFunction {\n (log: (log: LogFunction) => void): void;\n enabled(): boolean;\n extend(namespace: string): DebugFunction;\n}\n","import 'abortcontroller-polyfill';\nimport { AuthService } from 'components/Authorize/AuthService';\nimport { isOnlineStore } from 'utils/IsOnlineStore';\nimport { globalHandleError } from '../utils/globalHandleError';\nimport { ApiBase, EventDataRequest } from './Api.generated';\nimport { FetchError, FetchErrorCustomData, KnownFetchErrorNames } from './FetchError';\nexport * from './Api.generated';\n\nexport class Api extends ApiBase {\n constructor(readonly addAuthorizeHeaderCallback: (headers: Headers) => Promise) {\n super();\n }\n\n fetchResponse(\n actionName: string,\n url: string,\n init: RequestInit,\n ): CancellablePromise {\n const { headers: customHeaders, method, ...otherInits } = init;\n const headers = new Headers(customHeaders || {});\n headers.set('X-Requested-With', 'XMLHttpRequest');\n\n const controller = new AbortController();\n const { signal } = controller;\n\n const promise = (async () => {\n await isOnlineStore.whenOnline();\n\n // Let the auth service handle appending the \"authorization\" headers\n await this.addAuthorizeHeaderCallback(headers);\n\n let response: Response;\n try {\n response = await window.fetch(url, {\n credentials: 'same-origin',\n signal,\n method,\n ...otherInits,\n headers,\n });\n } catch (ex) {\n throw new FetchError(KnownFetchErrorNames.NetworkError, `Network Error`, {\n actionName,\n status: 0,\n url,\n method,\n innerErrorMessage: ex.message,\n });\n }\n\n const { status } = response;\n\n if (status >= 400) {\n const errorData: FetchErrorCustomData = {\n actionName,\n status,\n url,\n method,\n };\n switch (status) {\n case 422: // unprocessable entity\n // we got an ApiError back, just deserialize it\n break;\n case 401: {\n throw new FetchError(\n KnownFetchErrorNames.Unauthenticated,\n 'Unauthenticated',\n errorData,\n );\n }\n case 404: {\n // not found\n throw new FetchError(KnownFetchErrorNames.NotFound, 'Not Found', errorData);\n }\n default: {\n if (process.env.__DEV__) {\n response.blob().then(blob => {\n window.open(URL.createObjectURL(blob));\n }, globalHandleError);\n }\n\n throw new FetchError(\n KnownFetchErrorNames.InternalServerError,\n 'Internal Server Error',\n errorData,\n );\n }\n }\n }\n\n return response;\n })() as CancellablePromise;\n\n promise.cancel = () => controller.abort();\n\n return promise;\n }\n\n fetch(actionName: string, url: string, init: RequestInit): CancellablePromise {\n const responsePromise = this.fetchResponse(actionName, url, init);\n const promise = (async () => {\n const { method } = init;\n const response = await responsePromise;\n const { status } = response;\n const contentType = response.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json')) {\n return null;\n }\n try {\n return await response.json();\n } catch (ex) {\n throw new FetchError(\n KnownFetchErrorNames.JsonParsingError,\n ex.message || 'JSON Parsing error',\n {\n actionName,\n status,\n url,\n method,\n },\n );\n }\n })() as CancellablePromise;\n\n promise.cancel = () => responsePromise.cancel && responsePromise.cancel();\n\n return promise;\n }\n\n sendChurnZeroEvent(data: EventDataRequest): CancellablePromise {\n const init: RequestInit = { method: 'POST' };\n\n // [FromBody]: data\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n init.body = JSON.stringify(data);\n\n return this.fetch('analytics_TrackChurnZeroEvent', `api/spa/analytics/churnzero`, init);\n }\n\n getAddressCsv(): CancellablePromise {\n const init: RequestInit = { method: 'GET' };\n\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n\n return this.fetchResponse('download_getAddressCSV', `api/Download/getAddressCsv`, init);\n }\n\n aurorAdmin_ToPdf(request: ToPdfRequest): CancellablePromise {\n const init: RequestInit = { method: 'POST' };\n\n // [FromBody]: request\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n init.body = JSON.stringify(request);\n\n return this.fetchResponse('download_ToPdf', `api/Download/ToPdf`, init);\n }\n}\n\nexport const apiInstance = new Api(async headers => {\n const token = await AuthService.getTokenSilently();\n if (token) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n});\n\nexport interface ToPdfRequest {\n fawkesEventResourceLocators: string[];\n html: string;\n}\n","import { FileResponse } from '../api/Api';\nimport { uuid } from './uuid';\nimport { newPipeline, BlockBlobClient, AnonymousCredential } from '@azure/storage-blob';\nimport { AbortController } from '@azure/abort-controller';\nimport { createPromiseViewModel, PromiseViewModel } from '../viewmodel/PromiseViewModel';\n\nexport function aurorStorageFileUploader(\n file: File,\n createFileResponse: (fileId: string) => Promise,\n): PromiseViewModel {\n return createPromiseViewModel(\n transformToMobxFlow(async () => {\n return await uploadAndGetFileId(file, createFileResponse);\n })(),\n );\n}\n\nexport async function uploadAndGetFileId(\n file: File,\n createFileResponse: (fileId: string) => Promise,\n) {\n const fileId = uuid();\n const response = await createFileResponse(fileId);\n await uploadBrowserData(response.uploadUrl, file as Blob, fileId);\n return fileId;\n}\n\nconst uploadBrowserData = (uploadUriWithSasToken: string, blob: Blob, fileId: string) => {\n const pipeline = newPipeline(new AnonymousCredential());\n\n const aborter = new AbortController();\n\n const blobClient = new BlockBlobClient(uploadUriWithSasToken, pipeline);\n\n const promise = blobClient.uploadData(blob, {\n abortSignal: aborter.signal,\n blobHTTPHeaders: {\n blobContentType: blob.type,\n },\n metadata: fileId ? { fileId } : undefined,\n maxSingleShotSize: 100000000, // 100 MB is the max Content-Length for Azure CDN\n });\n\n Object.assign(promise, {\n cancel: () => {\n aborter.abort();\n },\n });\n return promise;\n};\n","import uuidv4 from 'uuid/v4';\n\n/**\n * Generates a new base64 encoded URL safe uuid\n * Lifted entirely from Fawkes 😘\n */\nexport function uuid() {\n return btoa(String.fromCharCode(...uuidv4(null, [])))\n .replace(/\\+/g, '-') // Replace + with - (see RFC 4648, sec. 5) to make it URL safe\n .replace(/\\//g, '_') // Replace / with _ (see RFC 4648, sec. 5) to make it URL safe\n .substring(0, 22); // Drop '==' padding\n}","import defaultLogo from 'assets/images/alfie-img.png';\nimport bpLogo from 'assets/images/BP.svg';\nimport zLogo from 'assets/images/Z.svg';\nimport mobilLogo from 'assets/images/Mobil.svg';\nimport caltexLogo from 'assets/images/Caltex.svg';\nimport colesExpressLogo from 'assets/images/ColesExpress.svg';\nimport npdLogo from 'assets/images/Npd.svg';\nimport React from 'react';\n\nexport type OrganizationKey = 'bp' | 'z' | 'mobil' | 'caltex' | 'npd' | 'org1' | 'testorg' | 'colesexpress';\n\ninterface AlfieCssTheme {\n errorColor: string;\n primaryColor: string;\n primaryHoverColor: string;\n textColor: string;\n linkColor: string;\n linkHoverColor: string;\n pdfVisitBackground: string;\n pdfVisitHeader: string;\n pdfVisitText: string;\n pdfRegistrationBackground: string;\n pdfRegistrationText: string;\n pdfCodeBackground: string;\n pdfCodeText: string;\n logoLength?: number;\n}\n\nconst alfieTheme: AlfieCssTheme = {\n errorColor: '#dc3545',\n primaryColor: '#009639',\n primaryHoverColor: '#008733',\n textColor: '#555',\n linkColor: '#4592ff',\n linkHoverColor: '#247fff',\n pdfVisitBackground: '#009639',\n pdfVisitHeader: '#ffda00',\n pdfVisitText: '#fff',\n pdfRegistrationBackground: '#a6ce39',\n pdfRegistrationText: '#555',\n pdfCodeBackground: '#ffda00',\n pdfCodeText: '#555',\n};\n\nconst bpCss = {\n errorColor: '#dc3545',\n primaryColor: '#009639',\n primaryHoverColor: '#008733',\n textColor: '#555',\n linkColor: '#4592ff',\n linkHoverColor: '#247fff',\n pdfVisitBackground: '#009639',\n pdfVisitHeader: '#ffda00',\n pdfVisitText: '#fff',\n pdfRegistrationBackground: '#a6ce39',\n pdfRegistrationText: '#555',\n pdfCodeBackground: '#ffda00',\n pdfCodeText: '#555',\n};\n\nexport const themeMap: { [key in OrganizationKey]: AlfieCssTheme } = {\n bp: bpCss,\n z: {\n errorColor: '#dc3545',\n primaryColor: '#251b62',\n primaryHoverColor: '#211858',\n textColor: '#555',\n linkColor: '#4592ff',\n linkHoverColor: '#247fff',\n pdfVisitBackground: '#f39202',\n pdfVisitHeader: '#251b62',\n pdfVisitText: '#251b62',\n pdfRegistrationBackground: '#00a7e0',\n pdfRegistrationText: '#fff',\n pdfCodeBackground: '#251b62',\n pdfCodeText: '#fff',\n },\n mobil: {\n errorColor: '#dc3545',\n primaryColor: '#0C67B2',\n primaryHoverColor: '#003771',\n textColor: '#555',\n linkColor: '#4592ff',\n linkHoverColor: '#247fff',\n pdfVisitBackground: '#0C67B2',\n pdfVisitHeader: '#fff',\n pdfVisitText: '#fff',\n pdfRegistrationBackground: '#4288B9',\n pdfRegistrationText: '#fff',\n pdfCodeBackground: '#A3C7E1',\n pdfCodeText: '#0C67B2',\n },\n caltex: {\n errorColor: '#dc3545',\n primaryColor: '#ED1B2E',\n primaryHoverColor: '#003771',\n textColor: '#555',\n linkColor: '#4592ff',\n linkHoverColor: '#247fff',\n pdfVisitBackground: '#ed1b2e',\n pdfVisitHeader: '#fff',\n pdfVisitText: '#fff',\n pdfRegistrationBackground: '#e5edf0',\n pdfRegistrationText: '#00526E',\n pdfCodeBackground: '#00526E',\n pdfCodeText: '#fff',\n logoLength: 164,\n },\n npd: {\n errorColor: '#dc3545',\n primaryColor: '#0063A8',\n primaryHoverColor: '#003771',\n textColor: '#555',\n linkColor: '#4592ff',\n linkHoverColor: '#247fff',\n pdfVisitBackground: '#0063A8',\n pdfVisitHeader: '#fff',\n pdfVisitText: '#fff',\n pdfRegistrationBackground: '#ED2C1B',\n pdfRegistrationText: '#FFF',\n pdfCodeBackground: '#333333',\n pdfCodeText: '#fff',\n },\n org1: bpCss,\n testorg: bpCss,\n colesexpress: {\n errorColor: '#dc3545',\n primaryColor: '#ED1B2E',\n primaryHoverColor: '#003771',\n textColor: '#555',\n linkColor: '#4592ff',\n linkHoverColor: '#247fff',\n pdfVisitBackground: '#ed1b2e',\n pdfVisitHeader: '#fff',\n pdfVisitText: '#fff',\n pdfRegistrationBackground: '#e5edf0',\n pdfRegistrationText: '#00526E',\n pdfCodeBackground: '#00526E',\n pdfCodeText: '#fff',\n logoLength: 164,\n }\n};\n\nconst baseTheme = {\n bold: 600,\n borderColor: '#eaeaea',\n borderRadius: '4px',\n fadedColor: '#aaa',\n inputBorder: '1px solid #eaeaea',\n placeholderColor: 'rgba(51, 51, 51, 0.5)',\n smallFontSize: '0.875rem',\n tinyFontSize: '0.625rem',\n white: '#fff',\n successColor: '#28a745',\n warningColor: '#ffc107',\n dangerColor: '#dc3545',\n};\n\nexport const toStyledTheme = (orgKey: string) => {\n if (orgKey in themeMap) {\n return Object.assign({}, baseTheme, themeMap[orgKey]);\n }\n\n return undefined;\n};\n\ninterface OrganizationDetails {\n helpPhone: string;\n logo: string;\n storeDescription?: string;\n teamName?: string;\n}\nconst testOrgDetails = {\n helpPhone: '0800 FAKE NUM',\n logo: defaultLogo,\n storeDescription: 'Alfiestore',\n teamName: 'Alfiepay Team',\n};\n\nconst orgDetailsMap: { [key in OrganizationKey]: OrganizationDetails } = {\n bp: {\n helpPhone: '0800 800 027',\n logo: bpLogo,\n storeDescription: 'bp Connect',\n teamName: 'bp Team',\n },\n z: {\n helpPhone: '0800 474 355',\n logo: zLogo,\n storeDescription: 'Z',\n teamName: 'Z Team'\n },\n mobil: {\n helpPhone: '',\n logo: mobilLogo,\n storeDescription: '',\n teamName: '',\n },\n caltex: {\n helpPhone: '',\n logo: caltexLogo,\n storeDescription: 'Caltex',\n teamName: 'Caltex Team',\n },\n npd: {\n helpPhone: '03 365 8988',\n logo: npdLogo,\n teamName: 'NPD Team',\n storeDescription: 'NPD'\n },\n org1: testOrgDetails,\n testorg: testOrgDetails,\n colesexpress: {\n helpPhone: '',\n logo: colesExpressLogo,\n storeDescription: 'Coles Express',\n teamName: 'Coles Express Team',\n },\n};\n\nexport const getOrgDetails = (orgKey: string | null): OrganizationDetails => {\n if (orgKey && orgKey in orgDetailsMap) {\n return orgDetailsMap[orgKey];\n }\n\n return { helpPhone: '', logo: '' };\n};\n\nexport const defaultTheme = Object.assign({}, baseTheme, alfieTheme);\n\nexport const ThemeContext = React.createContext(toStyledTheme);\n\nexport const orgKeys = Object.keys(orgDetailsMap);\n","import styled, { css } from 'styled-components';\n\nexport const Container = styled.div<{ wide?: boolean }>`\n width: 280px;\n padding-bottom: 2rem;\n ${props =>\n props.wide &&\n css`\n @media (min-width: 768px) {\n width: 640px;\n }\n `}\n`;\n\nexport const Body = styled.div`\n background: #f7f8f9;\n color: ${props => props.theme.textColor};\n font-family: Arial, Helvetica, sans-serif;\n display: flex;\n justify-content: center;\n min-height: 100vh;\n`;\n\nexport const H3 = styled.div`\n font-weight: ${props => props.theme.bold};\n font-size: 1rem;\n margin: 0 0 1rem;\n`;\n\nexport const Logo = styled.img`\n display: block;\n margin: 1rem auto;\n max-width: ${props => props.theme.logoLength || 96 }px;\n`;\n\nexport const P = styled.p`\n font-size: ${props => props.theme.smallFontSize};\n line-height: 1.4;\n`;\n\nexport const TinyP = styled.p`\n font-size: ${props => props.theme.tinyFontSize};\n line-height: 1.4;\n`;\n\nexport const Label = styled.label`\n display: block;\n font-size: ${props => props.theme.smallFontSize};\n font-weight: ${props => props.theme.bold};\n margin: 0.25rem 0;\n &:first-child {\n margin-top: 0;\n }\n`;\n\nexport const Input = styled.input`\n border: ${props => props.theme.inputBorder};\n border-radius: ${props => props.theme.borderRadius};\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);\n display: block;\n font-size: 1rem;\n margin: 0 0 1rem;\n padding: 0.4375rem 0.75rem;\n width: 100%;\n &::placeholder {\n color: ${props => props.theme.placeholderColor};\n }\n`;\n\nexport const PublicButton = styled.button`\n align-items: center;\n background: ${props => props.theme.primaryColor};\n border: none;\n border-radius: 1000px;\n color: #fff;\n cursor: pointer;\n display: inline-flex;\n font-size: 1rem;\n font-weight: 600;\n justify-content: center;\n padding: 0.5rem 0.6875rem;\n width: 100%;\n &:disabled,\n &.disabled {\n background: ${props => props.theme.primaryColor};\n cursor: not-allowed;\n opacity: 0.5;\n }\n &:hover {\n background: ${props => props.theme.primaryHoverColor};\n color: #fff;\n text-decoration: none;\n }\n &:active,\n &:focus {\n background: ${props => props.theme.primaryHoverColor};\n }\n @media (min-width: 768px) {\n align-self: center;\n max-width: 400px;\n }\n`;\n\nexport const PublicButtonLink = PublicButton.withComponent('a');\n\nexport const Link = styled.a`\n background: none;\n border: none;\n color: ${props => props.theme.linkColor};\n cursor: pointer;\n display: inline-block;\n font-size: ${props => props.theme.smallFontSize};\n font-weight: ${props => props.theme.bold};\n white-space: nowrap;\n &:not([href]):not([tabindex]) {\n color: ${props => props.theme.linkColor};\n\n &:hover,\n &:active {\n color: ${props => props.theme.linkHoverColor};\n }\n }\n &:hover,\n &:active {\n color: ${props => props.theme.linkHoverColor};\n }\n`;\n\nexport const Form = styled.form``;\n\nexport const ErrorBlock = styled.div`\n border: 1px solid ${props => props.theme.errorColor};\n border-radius: ${props => props.theme.borderRadius};\n color: ${props => props.theme.errorColor};\n font-size: ${props => props.theme.smallFontSize};\n line-height: 1.2;\n margin: 1rem 0;\n padding: 0.5rem;\n white-space: pre-wrap;\n`;\n","import isFunction from 'lodash.isfunction';\n\nexport function getCurrencyFormatFromString(valueString: string, fractionalDigits?: number) {\n const value = parseFloat(valueString);\n if (isNaN(value)) {\n return '';\n }\n return getCurrencyFormat(value, fractionalDigits);\n}\n\nexport function getCurrencyFormat(value: number, fractionalDigits: number = 2) {\n // For the currency symbol to be displayed automagically the style parameter must be set to \"currency\" and\n // a currency parameter must be passed. Possible values are the ISO 4217 currency codes, such as \"USD\" for\n // the US dollar, \"EUR\" for the euro. These currency values must come from the server. For now we will just\n // display all currency with the $ symbol.\n //\n // Setting the locales argument as undefined results in the runtime's default locale is used.\n //\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation\n const formattedValue = toLocaleStringSupportsOptions()\n ? `${value.toLocaleString(undefined, {\n minimumFractionDigits: fractionalDigits,\n maximumFractionDigits: fractionalDigits,\n })}`\n : `${value.toFixed(fractionalDigits)}`;\n return `$${formattedValue}`;\n}\n\n// ECMA-402 says that to support options for Number.prototype.toString, an implementation must:\n// - Be consistent with ECMAScript Ed 5.1 and its successors\n// - Extend the built–in Number.prototype\n// - Implement an Intl global object\n// - Support the Intl.NumberFormat constructor\n//\n// https://stackoverflow.com/questions/31871771/testing-for-tolocalestring-support/31872133#31872133\nfunction toLocaleStringSupportsOptions() {\n return typeof Intl === 'object' && Intl && isFunction(Intl.NumberFormat);\n}\n","import * as queryString from 'query-string';\n\n// This type expresses that the current type *might* be an instance of a TErrorData, and that you can look at the value in $$errorType to check\nexport type PossibleApiError =\n | Partial>\n | { $$errorType: string };\n\nexport type QueryStringParameters =\n | string\n | number\n | boolean\n | Instant\n | LocalDate\n | LocalTime\n | undefined\n | null;\n\nexport abstract class ApiBase {\n abstract fetch(actionName: string, url: string, init: RequestInit): CancellablePromise;\n\n createQueryParameters(o: { [key: string]: QueryStringParameters | QueryStringParameters[] }) {\n return '?' + queryString.stringify(o);\n }\n\n access_Confirm(\n accessRequest: AccessRequest,\n ): CancellablePromise<\n | (DebtDetailsRepresentation &\n PossibleApiError &\n PossibleApiError) /*Usually will return a DebtDetailsRepresentation but the following errors should be expected*/\n | DebtAlreadyPaidApiError /* Expect an error of type DebtAlreadyPaidApiError*/\n | DebtInInvalidStateApiError /* Expect an error of type DebtInInvalidStateApiError*/\n > {\n const init: RequestInit = { method: 'POST' };\n\n // [FromBody]: accessRequest\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n init.body = JSON.stringify(accessRequest);\n\n return this.fetch('access_Confirm', `api/spa/Access/confirm`, init);\n }\n\n analytics_TrackChurnZeroEvent(data: EventDataRequest): CancellablePromise {\n const init: RequestInit = { method: 'POST' };\n\n // [FromBody]: data\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n init.body = JSON.stringify(data);\n\n return this.fetch('analytics_TrackChurnZeroEvent', `api/spa/Analytics/churnzero`, init);\n }\n\n aurorAdmin_UploadDebtPostalAddresses(\n createDebtPostalAddresses: CreateDebtPostalAddressesRequest,\n ): CancellablePromise<\n | (CreateDebtPostalAddressesResponse &\n PossibleApiError) /*Usually will return a CreateDebtPostalAddressesResponse but the following errors should be expected*/\n | InvalidBatchApiError /* Expect an error of type InvalidBatchApiError*/\n > {\n const init: RequestInit = { method: 'POST' };\n\n // [FromBody]: createDebtPostalAddresses\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n init.body = JSON.stringify(createDebtPostalAddresses);\n\n return this.fetch(\n 'aurorAdmin_UploadDebtPostalAddresses',\n `api/spa/auroradmin/AurorAdmin/uploadAddresses`,\n init,\n );\n }\n\n aurorAdmin_GetDebtDetailsByStates(\n states?: Array,\n organizationKey?: string,\n page?: number,\n pageSize?: number,\n ): CancellablePromise {\n const init: RequestInit = { method: 'GET' };\n return this.fetch(\n 'aurorAdmin_GetDebtDetailsByStates',\n `api/spa/auroradmin/AurorAdmin/debtsByStates${this.createQueryParameters({\n states,\n organizationKey,\n page,\n pageSize,\n })}`,\n init,\n );\n }\n\n aurorAdmin_GetDebtDetailsByStatesAndPrintIndex(\n states?: Array,\n organizationKey?: string,\n page?: number,\n pageSize?: number,\n ): CancellablePromise {\n const init: RequestInit = { method: 'GET' };\n return this.fetch(\n 'aurorAdmin_GetDebtDetailsByStatesAndPrintIndex',\n `api/spa/auroradmin/AurorAdmin/debtsByStatesAndPrintIndex${this.createQueryParameters({\n states,\n organizationKey,\n page,\n pageSize,\n })}`,\n init,\n );\n }\n\n aurorAdmin_GetAllDebtDetails(organizationKey?: string): CancellablePromise> {\n const init: RequestInit = { method: 'GET' };\n return this.fetch(\n 'aurorAdmin_GetAllDebtDetails',\n `api/spa/auroradmin/AurorAdmin/allDebts${this.createQueryParameters({\n organizationKey,\n })}`,\n init,\n );\n }\n\n aurorAdmin_GetDebtLetterDetails(\n request: GetDebtLetterDetailsRequest,\n ): CancellablePromise<\n | (Array &\n PossibleApiError) /*Usually will return a Array but the following errors should be expected*/\n | InvalidDebtStateApiError /* Expect an error of type InvalidDebtStateApiError*/\n > {\n const init: RequestInit = { method: 'POST' };\n\n // [FromBody]: request\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n init.body = JSON.stringify(request);\n\n return this.fetch(\n 'aurorAdmin_GetDebtLetterDetails',\n `api/spa/auroradmin/AurorAdmin/debtLetterDetails`,\n init,\n );\n }\n\n aurorAdmin_FireDebtStateTrigger(\n request: FireDebtStateTriggerRequest,\n ): CancellablePromise> {\n const init: RequestInit = { method: 'POST' };\n\n // [FromBody]: request\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n init.body = JSON.stringify(request);\n\n return this.fetch(\n 'aurorAdmin_FireDebtStateTrigger',\n `api/spa/auroradmin/AurorAdmin/fireDebtStateTriggers`,\n init,\n );\n }\n\n aurorAdmin_StartLettersGeneration(\n outputFolderName?: string,\n ): CancellablePromise {\n const init: RequestInit = { method: 'POST' };\n return this.fetch(\n 'aurorAdmin_StartLettersGeneration',\n `api/spa/auroradmin/AurorAdmin/startLettersGeneration${this.createQueryParameters({\n outputFolderName,\n })}`,\n init,\n );\n }\n\n aurorAdmin_OverrideDebtState(request: OverrideDebtStateRequest): CancellablePromise {\n const init: RequestInit = { method: 'POST' };\n\n // [FromBody]: request\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n init.body = JSON.stringify(request);\n\n return this.fetch(\n 'aurorAdmin_OverrideDebtState',\n `api/spa/auroradmin/AurorAdmin/overrideState`,\n init,\n );\n }\n\n aurorAdmin_CreateFile(\n request: CreateFileRequest,\n ): CancellablePromise<\n | (FileResponse &\n PossibleApiError) /*Usually will return a FileResponse but the following errors should be expected*/\n | CreateFileTypeInvalidApiError /* Expect an error of type CreateFileTypeInvalidApiError*/\n > {\n const init: RequestInit = { method: 'POST' };\n\n // [FromBody]: request\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n init.body = JSON.stringify(request);\n\n return this.fetch('aurorAdmin_CreateFile', `api/spa/auroradmin/AurorAdmin/create`, init);\n }\n\n payment_Create(\n createPaymentRequest: CreatePaymentRequest,\n ): CancellablePromise<\n | (CompletedPaymentRepresentation &\n PossibleApiError) /*Usually will return a CompletedPaymentRepresentation but the following errors should be expected*/\n | CreatePaymentApiError /* Expect an error of type CreatePaymentApiError*/\n > {\n const init: RequestInit = { method: 'POST' };\n\n // [FromBody]: createPaymentRequest\n init.headers = new Headers();\n init.headers.set('Content-Type', 'application/json');\n init.body = JSON.stringify(createPaymentRequest);\n\n return this.fetch('payment_Create', `api/spa/Payment/Create`, init);\n }\n}\n\nexport interface AccessRequest {\n licensePlate: string | null;\n referenceNumber: string | null;\n}\n\nexport enum BatchStatusResponseCode {\n Success = 'Success',\n FailedSafeToReprocess = 'FailedSafeToReprocess',\n FailedUnsafeToReprocess = 'FailedUnsafeToReprocess',\n}\n\nexport type BatchStatusResponseCodeKeyType = keyof typeof BatchStatusResponseCode;\n\nexport const BatchStatusResponseCodeValueDescriptionMap: {\n [key in BatchStatusResponseCodeKeyType]: string;\n} = {\n [BatchStatusResponseCode.Success]: `Success`,\n [BatchStatusResponseCode.FailedSafeToReprocess]: `FailedSafeToReprocess`,\n [BatchStatusResponseCode.FailedUnsafeToReprocess]: `FailedUnsafeToReprocess`,\n};\n\nexport enum ChurnZeroEventName {\n AlfiepayAlreadyPaid = 'AlfiepayAlreadyPaid',\n AlfiepayCallSupport = 'AlfiepayCallSupport',\n AlfiepayClickedIncorrectDetails = 'AlfiepayClickedIncorrectDetails',\n AlfiepayClickedPay = 'AlfiepayClickedPay',\n AlfiepayConfirmedDetails = 'AlfiepayConfirmedDetails',\n AlfiepayEnteredCode = 'AlfiepayEnteredCode',\n AlfiepayInvalidCode = 'AlfiepayInvalidCode',\n AlfiepayPaid = 'AlfiepayPaid',\n AlfiepayPaidManually = 'AlfiepayPaidManually',\n AlfiepayPaidText = 'AlfiepayPaidText',\n AlfiepayPaymentFailed = 'AlfiepayPaymentFailed',\n AlfiepayReceiptRequested = 'AlfiepayReceiptRequested',\n AlfiepayViewCodePage = 'AlfiepayViewCodePage',\n AlfiepayViewDetailsPage = 'AlfiepayViewDetailsPage',\n AlfiepayViewHomePage = 'AlfiepayViewHomePage',\n AlfiepayViewNotFoundPage = 'AlfiepayViewNotFoundPage',\n AlfiepayViewPaymentPage = 'AlfiepayViewPaymentPage',\n AlfiepayViewPaymentFailedPage = 'AlfiepayViewPaymentFailedPage',\n AlfiepayViewPaymentSuccessfulPage = 'AlfiepayViewPaymentSuccessfulPage',\n AlfiepayTextMessageSent = 'AlfiepayTextMessageSent',\n AlfiepayTextMessageSent1 = 'AlfiepayTextMessageSent1',\n AlfiepayTextMessageSent2 = 'AlfiepayTextMessageSent2',\n AlfiepayLetterSent = 'AlfiepayLetterSent',\n AlfiepayLetterSent1 = 'AlfiepayLetterSent1',\n AlfiepayLetterSent2 = 'AlfiepayLetterSent2',\n}\n\nexport type ChurnZeroEventNameKeyType = keyof typeof ChurnZeroEventName;\n\nexport const ChurnZeroEventNameValueDescriptionMap: { [key in ChurnZeroEventNameKeyType]: string } =\n {\n [ChurnZeroEventName.AlfiepayAlreadyPaid]: `Alfiepay: Already Paid`,\n [ChurnZeroEventName.AlfiepayCallSupport]: `Alfiepay: Call Support`,\n [ChurnZeroEventName.AlfiepayClickedIncorrectDetails]: `Alfiepay: Clicked Incorrect Details`,\n [ChurnZeroEventName.AlfiepayClickedPay]: `Alfiepay: Clicked Pay`,\n [ChurnZeroEventName.AlfiepayConfirmedDetails]: `Alfiepay: Confirmed Details`,\n [ChurnZeroEventName.AlfiepayEnteredCode]: `Alfiepay: Entered Code`,\n [ChurnZeroEventName.AlfiepayInvalidCode]: `Alfiepay: Invalid Code`,\n [ChurnZeroEventName.AlfiepayPaid]: `Alfiepay: Paid`,\n [ChurnZeroEventName.AlfiepayPaidManually]: `Alfiepay: Paid Manually`,\n [ChurnZeroEventName.AlfiepayPaidText]: `Alfiepay: Paid Text`,\n [ChurnZeroEventName.AlfiepayPaymentFailed]: `Alfiepay: Payment Failed`,\n [ChurnZeroEventName.AlfiepayReceiptRequested]: `Alfiepay: Receipt Requested`,\n [ChurnZeroEventName.AlfiepayViewCodePage]: `Alfiepay: View Code Page`,\n [ChurnZeroEventName.AlfiepayViewDetailsPage]: `Alfiepay: View Details Page`,\n [ChurnZeroEventName.AlfiepayViewHomePage]: `Alfiepay: View Home Page`,\n [ChurnZeroEventName.AlfiepayViewNotFoundPage]: `Alfiepay: View Not Found Page`,\n [ChurnZeroEventName.AlfiepayViewPaymentPage]: `Alfiepay: View Payment Page`,\n [ChurnZeroEventName.AlfiepayViewPaymentFailedPage]: `Alfiepay: View Payment Failed Page`,\n [ChurnZeroEventName.AlfiepayViewPaymentSuccessfulPage]: `Alfiepay: View Payment Successful Page`,\n [ChurnZeroEventName.AlfiepayTextMessageSent]: `Alfiepay: Text sent`,\n [ChurnZeroEventName.AlfiepayTextMessageSent1]: `Alfiepay: 1st text sent`,\n [ChurnZeroEventName.AlfiepayTextMessageSent2]: `Alfiepay: 2nd text sent`,\n [ChurnZeroEventName.AlfiepayLetterSent]: `Alfiepay: Letter sent`,\n [ChurnZeroEventName.AlfiepayLetterSent1]: `Alfiepay: 1st letter sent`,\n [ChurnZeroEventName.AlfiepayLetterSent2]: `Alfiepay: 2nd letter sent`,\n };\n\nexport interface CompletedPaymentRepresentation {\n receiptUrl: string | null;\n}\n\nexport interface CreateDebtPostalAddressError {\n description: string;\n licensePlate: string;\n}\n\nexport interface CreateDebtPostalAddressesRequest {\n motochekFileId: string;\n payload: Array;\n}\n\nexport interface CreateDebtPostalAddressesResponse {\n batchStatusResponseCode: BatchStatusResponseCode;\n errors: Array;\n stateUpdates: Array;\n warnings: Array;\n}\n\nexport interface CreateDebtPostalAddressPayload {\n address: DebtPostalAddressRepresentation | null;\n licensePlate: string;\n}\n\nexport interface CreateDebtPostalAddressWarning {\n currentDebtState: DebtState | null;\n description: string;\n licensePlate: string;\n warningReason: DebtPostalAddressWarningReason;\n}\n\nexport interface CreateFileRequest {\n fileId: string;\n fileName: string;\n fileType: FileType;\n}\n\nexport interface CreateFileTypeInvalidApiError {\n $$errorType: 'CreateFileTypeInvalidApiError';\n userMessage: string;\n}\n\nexport namespace CreateFileTypeInvalidApiError {\n export function isInstance(\n o: PossibleApiError,\n ): o is CreateFileTypeInvalidApiError {\n return o.$$errorType === 'CreateFileTypeInvalidApiError';\n }\n}\n\nexport interface CreatePaymentApiError {\n $$errorType: 'CreatePaymentApiError';\n messageForUser: string | null;\n saveEventErrorType: PaymentCreationStatus;\n}\n\nexport namespace CreatePaymentApiError {\n export function isInstance(\n o: PossibleApiError,\n ): o is CreatePaymentApiError {\n return o.$$errorType === 'CreatePaymentApiError';\n }\n}\n\nexport interface CreatePaymentRequest {\n debtIdentifier: string | null;\n emailAddress: string | null;\n tokenizationResult: StripeTokenizationResultRepresentation | null;\n}\n\nexport interface DebtAlreadyPaidApiError {\n $$errorType: 'DebtAlreadyPaidApiError';\n}\n\nexport namespace DebtAlreadyPaidApiError {\n export function isInstance(\n o: PossibleApiError,\n ): o is DebtAlreadyPaidApiError {\n return o.$$errorType === 'DebtAlreadyPaidApiError';\n }\n}\n\nexport interface DebtDetails {\n amountIncludingCollectionFee: number /* WARNING: Server type Decimal has greater precision that JS number */;\n amountOwedForGoods: number /* WARNING: Server type Decimal has greater precision that JS number */;\n dateOfIncident: LocalDateTime;\n debtIdentifier: string;\n debtState: DebtState;\n incidentDetails: { [key in IncidentDetailsPropsBagKey]?: string | null } | null;\n licensePlate: string;\n organizationKey: string;\n organizationName: string;\n}\n\nexport interface DebtDetailsByStatesResponse {\n debts: Array;\n page: number;\n pageSize: number;\n total: number;\n}\n\nexport interface DebtDetailsRepresentation {\n amount: number /* WARNING: Server type Decimal has greater precision that JS number */;\n dateOfIncident: Instant;\n debtIdentifier: string;\n fawkesImage: FileRepresentation;\n incidentDetails: { [key in IncidentDetailsPropsBagKey]?: string | null } | null;\n licensePlate: string;\n organizationKey: string;\n}\n\nexport interface DebtInInvalidStateApiError {\n $$errorType: 'DebtInInvalidStateApiError';\n}\n\nexport namespace DebtInInvalidStateApiError {\n export function isInstance(\n o: PossibleApiError,\n ): o is DebtInInvalidStateApiError {\n return o.$$errorType === 'DebtInInvalidStateApiError';\n }\n}\n\nexport interface DebtLetterDetails {\n amount: number /* WARNING: Server type Decimal has greater precision that JS number */;\n collectionFee:\n | number /* WARNING: Server type Decimal has greater precision that JS number */\n | null;\n dateOfIncident: LocalDateTime;\n debtIdentifier: string;\n fawkesImage: FileRepresentation | null;\n incidentDetails: { [key in IncidentDetailsPropsBagKey]?: string | null } | null;\n index: number;\n letterTemplateCode: LetterTemplateCode;\n licensePlate: string;\n organizationKey: string;\n pdfGenerationDate: LocalDate;\n postalAddress: string;\n printingBatch: number /* WARNING: Server type Int64 has greater precision that JS number */;\n recipient: string;\n secondDebtLetterDetails: SecondDebtLetterDetails | null;\n}\n\nexport interface DebtLettersGenerationStats {\n batchesCount: number;\n batchSize: number;\n fileName: string | null;\n lettersCount: number;\n}\n\nexport interface DebtPostalAddressRepresentation {\n address: string;\n motochekAddress: MotochekAddressRepresentation;\n recipient: string;\n}\n\nexport enum DebtPostalAddressWarningReason {\n NotInCorrectState = 'NotInCorrectState',\n AddressWasInvalid = 'AddressWasInvalid',\n DebtDoesNotExist = 'DebtDoesNotExist',\n}\n\nexport type DebtPostalAddressWarningReasonKeyType = keyof typeof DebtPostalAddressWarningReason;\n\nexport const DebtPostalAddressWarningReasonValueDescriptionMap: {\n [key in DebtPostalAddressWarningReasonKeyType]: string;\n} = {\n [DebtPostalAddressWarningReason.NotInCorrectState]: `NotInCorrectState`,\n [DebtPostalAddressWarningReason.AddressWasInvalid]: `AddressWasInvalid`,\n [DebtPostalAddressWarningReason.DebtDoesNotExist]: `DebtDoesNotExist`,\n};\n\nexport enum DebtState {\n InDebt = 'InDebt',\n Settled = 'Settled',\n HandledExternally = 'HandledExternally',\n NotifyExpired = 'NotifyExpired',\n NotifiedExpired = 'NotifiedExpired',\n New = 'New',\n NeedPostalAddress = 'NeedPostalAddress',\n WaitingForPostalAddress = 'WaitingForPostalAddress',\n WaitingToSendSMS1 = 'WaitingToSendSMS1',\n SendingSMS1 = 'SendingSMS1',\n WaitingToSendSMS2 = 'WaitingToSendSMS2',\n SendingSMS2 = 'SendingSMS2',\n WaitingToSendLetter1 = 'WaitingToSendLetter1',\n ReadyToSendLetter1 = 'ReadyToSendLetter1',\n ReadyToSendLetter2 = 'ReadyToSendLetter2',\n WaitingToSendLetter2 = 'WaitingToSendLetter2',\n AllPossibleCommunicationsSent = 'AllPossibleCommunicationsSent',\n NoCommunicationsSent = 'NoCommunicationsSent',\n NotEligibleForRecovery = 'NotEligibleForRecovery',\n NeedOrangeboxInputLetter1 = 'NeedOrangeboxInputLetter1',\n NeedOrangeboxInputLetter2 = 'NeedOrangeboxInputLetter2',\n WaitingForOrangeboxInputLetter1 = 'WaitingForOrangeboxInputLetter1',\n WaitingForOrangeboxInputLetter2 = 'WaitingForOrangeboxInputLetter2',\n}\n\nexport type DebtStateKeyType = keyof typeof DebtState;\n\nexport const DebtStateValueDescriptionMap: { [key in DebtStateKeyType]: string } = {\n [DebtState.InDebt]: `InDebt`,\n [DebtState.Settled]: `Settled`,\n [DebtState.HandledExternally]: `HandledExternally`,\n [DebtState.NotifyExpired]: `NotifyExpired`,\n [DebtState.NotifiedExpired]: `NotifiedExpired`,\n [DebtState.New]: `New`,\n [DebtState.NeedPostalAddress]: `NeedPostalAddress`,\n [DebtState.WaitingForPostalAddress]: `WaitingForPostalAddress`,\n [DebtState.WaitingToSendSMS1]: `WaitingToSendSMS1`,\n [DebtState.SendingSMS1]: `SendingSMS1`,\n [DebtState.WaitingToSendSMS2]: `WaitingToSendSMS2`,\n [DebtState.SendingSMS2]: `SendingSMS2`,\n [DebtState.WaitingToSendLetter1]: `WaitingToSendLetter1`,\n [DebtState.ReadyToSendLetter1]: `ReadyToSendLetter1`,\n [DebtState.ReadyToSendLetter2]: `ReadyToSendLetter2`,\n [DebtState.WaitingToSendLetter2]: `WaitingToSendLetter2`,\n [DebtState.AllPossibleCommunicationsSent]: `AllPossibleCommunicationsSent`,\n [DebtState.NoCommunicationsSent]: `NoCommunicationsSent`,\n [DebtState.NotEligibleForRecovery]: `NotEligibleForRecovery`,\n [DebtState.NeedOrangeboxInputLetter1]: `NeedOrangeboxInputLetter1`,\n [DebtState.NeedOrangeboxInputLetter2]: `NeedOrangeboxInputLetter2`,\n [DebtState.WaitingForOrangeboxInputLetter1]: `WaitingForOrangeboxInputLetter1`,\n [DebtState.WaitingForOrangeboxInputLetter2]: `WaitingForOrangeboxInputLetter2`,\n};\n\nexport interface DebtStateChangeResult {\n currentState: DebtState | null;\n debtIdentifier: string;\n errorMessage: string | null;\n}\n\nexport enum DebtStateTrigger {\n Waited = 'Waited',\n PaymentReceived = 'PaymentReceived',\n ExternallyHandled = 'ExternallyHandled',\n FullyPaidInFawkes = 'FullyPaidInFawkes',\n CommunicationSent = 'CommunicationSent',\n CommunicationFailed = 'CommunicationFailed',\n FoundMobileNumber = 'FoundMobileNumber',\n CantFindMobileNumber = 'CantFindMobileNumber',\n RequestedPostalAddress = 'RequestedPostalAddress',\n FoundPostalAddress = 'FoundPostalAddress',\n CantFindPostalAddressAndPriorCommunicationSent = 'CantFindPostalAddressAndPriorCommunicationSent',\n Notified = 'Notified',\n Cancelled = 'Cancelled',\n PartiallyPaidExternally = 'PartiallyPaidExternally',\n Expired = 'Expired',\n ManualOverride = 'ManualOverride',\n CantFindPostalAddressAndNoPriorCommunicationSent = 'CantFindPostalAddressAndNoPriorCommunicationSent',\n RecoveryDeletedInFawkes = 'RecoveryDeletedInFawkes',\n RejectedPrintDetails = 'RejectedPrintDetails',\n IntelEventDeletedInFawkes = 'IntelEventDeletedInFawkes',\n RecoveryNoLongerMeetsDebtCriteria = 'RecoveryNoLongerMeetsDebtCriteria',\n RecoveryMeetsDebtCriteria = 'RecoveryMeetsDebtCriteria',\n VehicleInformationChanged = 'VehicleInformationChanged',\n CollectionFeeAdded = 'CollectionFeeAdded',\n RequestedOrangeboxInput = 'RequestedOrangeboxInput',\n ReceivedOrangeboxInput = 'ReceivedOrangeboxInput',\n AddressChangedByOrangebox = 'AddressChangedByOrangebox',\n RejectedByOrangebox = 'RejectedByOrangebox',\n AllSmsSent = 'AllSmsSent',\n AllSmsFailed = 'AllSmsFailed',\n PhoneNumberChanged = 'PhoneNumberChanged',\n}\n\nexport type DebtStateTriggerKeyType = keyof typeof DebtStateTrigger;\n\nexport const DebtStateTriggerValueDescriptionMap: { [key in DebtStateTriggerKeyType]: string } = {\n [DebtStateTrigger.Waited]: `Waited`,\n [DebtStateTrigger.PaymentReceived]: `PaymentReceived`,\n [DebtStateTrigger.ExternallyHandled]: `ExternallyHandled`,\n [DebtStateTrigger.FullyPaidInFawkes]: `FullyPaidInFawkes`,\n [DebtStateTrigger.CommunicationSent]: `CommunicationSent`,\n [DebtStateTrigger.CommunicationFailed]: `CommunicationFailed`,\n [DebtStateTrigger.FoundMobileNumber]: `FoundMobileNumber`,\n [DebtStateTrigger.CantFindMobileNumber]: `CantFindMobileNumber`,\n [DebtStateTrigger.RequestedPostalAddress]: `RequestedPostalAddress`,\n [DebtStateTrigger.FoundPostalAddress]: `FoundPostalAddress`,\n [DebtStateTrigger.CantFindPostalAddressAndPriorCommunicationSent]: `CantFindPostalAddressAndPriorCommunicationSent`,\n [DebtStateTrigger.Notified]: `Notified`,\n [DebtStateTrigger.Cancelled]: `Cancelled`,\n [DebtStateTrigger.PartiallyPaidExternally]: `PartiallyPaidExternally`,\n [DebtStateTrigger.Expired]: `Expired`,\n [DebtStateTrigger.ManualOverride]: `ManualOverride`,\n [DebtStateTrigger.CantFindPostalAddressAndNoPriorCommunicationSent]: `CantFindPostalAddressAndNoPriorCommunicationSent`,\n [DebtStateTrigger.RecoveryDeletedInFawkes]: `RecoveryDeletedInFawkes`,\n [DebtStateTrigger.RejectedPrintDetails]: `RejectedPrintDetails`,\n [DebtStateTrigger.IntelEventDeletedInFawkes]: `IntelEventDeletedInFawkes`,\n [DebtStateTrigger.RecoveryNoLongerMeetsDebtCriteria]: `RecoveryNoLongerMeetsDebtCriteria`,\n [DebtStateTrigger.RecoveryMeetsDebtCriteria]: `RecoveryMeetsDebtCriteria`,\n [DebtStateTrigger.VehicleInformationChanged]: `VehicleInformationChanged`,\n [DebtStateTrigger.CollectionFeeAdded]: `CollectionFeeAdded`,\n [DebtStateTrigger.RequestedOrangeboxInput]: `RequestedOrangeboxInput`,\n [DebtStateTrigger.ReceivedOrangeboxInput]: `ReceivedOrangeboxInput`,\n [DebtStateTrigger.AddressChangedByOrangebox]: `AddressChangedByOrangebox`,\n [DebtStateTrigger.RejectedByOrangebox]: `RejectedByOrangebox`,\n [DebtStateTrigger.AllSmsSent]: `AllSmsSent`,\n [DebtStateTrigger.AllSmsFailed]: `AllSmsFailed`,\n [DebtStateTrigger.PhoneNumberChanged]: `PhoneNumberChanged`,\n};\n\nexport interface DebtStateUpdateRepresentation {\n currentDebtState: DebtState;\n debtIdentifier: string;\n}\n\nexport interface EventDataRequest {\n description: string | null;\n eventData: string | null;\n eventName: ChurnZeroEventName;\n eventValue: number | null;\n token: string | null;\n}\n\nexport interface FileRepresentation {\n clientId: string | null;\n imageFullSizeUrl: string /* Uri */ | null;\n thumbnailLargeUrl: string /* Uri */ | null;\n thumbnailMediumUrl: string /* Uri */ | null;\n thumbnailSmallUrl: string /* Uri */ | null;\n}\n\nexport interface FileResponse {\n uploadUrl: string;\n}\n\nexport enum FileType {\n Other = 'Other',\n Orangebox = 'Orangebox',\n MotochekResponse = 'MotochekResponse',\n}\n\nexport type FileTypeKeyType = keyof typeof FileType;\n\nexport const FileTypeValueDescriptionMap: { [key in FileTypeKeyType]: string } = {\n [FileType.Other]: `Other`,\n [FileType.Orangebox]: `Orangebox`,\n [FileType.MotochekResponse]: `MotochekResponse`,\n};\n\nexport interface FireDebtStateTriggerRequest {\n debtIdentifiers: Array | null;\n trigger: DebtStateTrigger;\n}\n\nexport interface GetDebtLetterDetailsRequest {\n debtIdentifiers: Array | null;\n}\n\nexport enum IncidentDetailsPropsBagKey {\n SiteAddress = 'SiteAddress',\n SiteName = 'SiteName',\n LocationWithinSite = 'LocationWithinSite',\n ProductName = 'ProductName',\n ProductQuantity = 'ProductQuantity',\n ProductPrice = 'ProductPrice',\n SitePhoneNumber = 'SitePhoneNumber',\n}\n\nexport type IncidentDetailsPropsBagKeyKeyType = keyof typeof IncidentDetailsPropsBagKey;\n\nexport const IncidentDetailsPropsBagKeyValueDescriptionMap: {\n [key in IncidentDetailsPropsBagKeyKeyType]: string;\n} = {\n [IncidentDetailsPropsBagKey.SiteAddress]: `SiteAddress`,\n [IncidentDetailsPropsBagKey.SiteName]: `SiteName`,\n [IncidentDetailsPropsBagKey.LocationWithinSite]: `LocationWithinSite`,\n [IncidentDetailsPropsBagKey.ProductName]: `ProductName`,\n [IncidentDetailsPropsBagKey.ProductQuantity]: `ProductQuantity`,\n [IncidentDetailsPropsBagKey.ProductPrice]: `ProductPrice`,\n [IncidentDetailsPropsBagKey.SitePhoneNumber]: `SitePhoneNumber`,\n};\n\nexport interface InvalidBatchApiError {\n batchStatus: BatchStatusResponseCode;\n $$errorType: 'InvalidBatchApiError';\n}\n\nexport namespace InvalidBatchApiError {\n export function isInstance(\n o: PossibleApiError,\n ): o is InvalidBatchApiError {\n return o.$$errorType === 'InvalidBatchApiError';\n }\n}\n\nexport interface InvalidDebtStateApiError {\n details: Array;\n $$errorType: 'InvalidDebtStateApiError';\n}\n\nexport namespace InvalidDebtStateApiError {\n export function isInstance(\n o: PossibleApiError,\n ): o is InvalidDebtStateApiError {\n return o.$$errorType === 'InvalidDebtStateApiError';\n }\n}\n\nexport interface InvalidDebtStateDetails {\n debtIdentifier: string;\n description: string;\n}\n\nexport enum LetterTemplateCode {\n Default = 'Default',\n BpCorporate = 'BpCorporate',\n BpFranchise = 'BpFranchise',\n Z = 'Z',\n Mobil = 'Mobil',\n Caltex = 'Caltex',\n Npd = 'Npd',\n}\n\nexport type LetterTemplateCodeKeyType = keyof typeof LetterTemplateCode;\n\nexport const LetterTemplateCodeValueDescriptionMap: { [key in LetterTemplateCodeKeyType]: string } =\n {\n [LetterTemplateCode.Default]: `Default`,\n [LetterTemplateCode.BpCorporate]: `BpCorporate`,\n [LetterTemplateCode.BpFranchise]: `BpFranchise`,\n [LetterTemplateCode.Z]: `Z`,\n [LetterTemplateCode.Mobil]: `Mobil`,\n [LetterTemplateCode.Caltex]: `Caltex`,\n [LetterTemplateCode.Npd]: `Npd`,\n };\n\nexport interface MotochekAddressRepresentation {\n mailingAddressBoxBagNumber: string | null;\n mailingAddressBoxBagRd: string | null;\n mailingAddressFlatFloorName: string | null;\n mailingAddressPostcode: string | null;\n mailingAddressPropertyName: string | null;\n mailingAddressRdNumber: string | null;\n mailingAddressStreetName: string | null;\n mailingAddressStreetNumber: string | null;\n mailingAddressSuburb: string | null;\n mailingAddressTown: string | null;\n}\n\nexport interface OverrideDebtStateRequest {\n debtIdentifiers: Array | null;\n newState: DebtState;\n}\n\nexport enum PaymentCreationStatus {\n DebtInInvalidState = 'DebtInInvalidState',\n PaymentViaStripeFailed = 'PaymentViaStripeFailed',\n DebtHasAlreadyBeenPaid = 'DebtHasAlreadyBeenPaid',\n}\n\nexport type PaymentCreationStatusKeyType = keyof typeof PaymentCreationStatus;\n\nexport const PaymentCreationStatusValueDescriptionMap: {\n [key in PaymentCreationStatusKeyType]: string;\n} = {\n [PaymentCreationStatus.DebtInInvalidState]: `DebtInInvalidState`,\n [PaymentCreationStatus.PaymentViaStripeFailed]: `PaymentViaStripeFailed`,\n [PaymentCreationStatus.DebtHasAlreadyBeenPaid]: `DebtHasAlreadyBeenPaid`,\n};\n\nexport interface SecondDebtLetterDetails {\n collectionFeeAppliedOn: LocalDate;\n}\n\nexport interface StripeTokenizationResultRepresentation {\n card: StripeTokenizedCardRepresentation | null;\n client_ip: string /* IPAddress */ | null;\n created: number /* WARNING: Server type Int64 has greater precision that JS number */;\n id: string | null;\n livemode: boolean;\n object: string | null;\n type: string | null;\n used: boolean;\n}\n\nexport interface StripeTokenizedCardRepresentation {\n address_city: string | null;\n address_country: string | null;\n address_line1: string | null;\n address_line1_check: string | null;\n address_line2: string | null;\n address_state: string | null;\n address_zip: string | null;\n address_zip_check: string | null;\n brand: string | null;\n country: string | null;\n cvc_check: string | null;\n dynamic_last4: string | null;\n exp_month: number;\n exp_year: number;\n funding: string | null;\n id: string | null;\n last4: string | null;\n metadata: { [key: string]: any /* Object */ | null } | null;\n name: string | null;\n object: string | null;\n tokenization_method: any /* Object */ | null;\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {};","import React, { FC, useEffect } from 'react';\nimport { generatePath, Link, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { Logo } from 'styles';\nimport { getOrgDetails, orgKeys } from 'styles/theme';\n\nconst OrgFilterGroup = styled.div`\n align-items: center;\n background: #fff;\n display: flex;\n margin: 1rem 0;\n padding: 0.5rem;\n`;\n\nconst OrgButton = styled(Link)`\n align-items: center;\n background: #fff;\n border-width: 1px;\n border-style: solid;\n border-color: ${({ theme }) => theme.borderColor};\n display: flex;\n padding: 1rem;\n &:hover {\n text-decoration: none;\n }\n & ${Logo} {\n height: 2rem;\n margin: 0;\n }\n &:first-child {\n border-radius: 6px 0 0 6px;\n }\n &:not(:first-child) {\n margin-left: -1px;\n }\n &:last-child {\n border-radius: 0 6px 6px 0;\n }\n`;\n\nconst ActiveOrgButton = styled(OrgButton)`\n background: var(--light-blue);\n`;\n\ninterface OrgFilterableViewModel {\n orgFilter?: string;\n}\n\ninterface OrgFilterComponent {\n vm: OrgFilterableViewModel;\n}\n\nexport const OrgFilter: FC = ({ vm }) => {\n const { params, path } = useRouteMatch<{ orgKey?: string }>();\n const { orgKey } = params;\n\n useEffect(() => {\n vm.orgFilter = orgKey;\n }, [orgKey]);\n\n return (\n \n {orgKeys.map((key) => {\n if (key === 'testorg' || key === 'org1') {\n return null;\n }\n const details = getOrgDetails(key);\n if (!details) {\n return null;\n }\n return key === orgKey ? (\n \n \n \n ) : (\n \n \n \n );\n })}\n \n );\n};\n","import { MotochekAddressRepresentation } from 'api/Api';\nimport compact from 'lodash.compact';\nimport pick from 'lodash.pick';\nimport { MotochekRecord } from './motochek-parser';\n\nfunction hasMailing(record: MotochekRecord) {\n const values = Object.values(\n pick(\n record,\n 'mailingAddressPropertyName',\n 'mailingAddressFlatFloorName',\n 'mailingAddressStreetNumber',\n 'mailingAddressStreetName',\n 'mailingAddressBoxBagRD',\n 'mailingAddressBoxBagNumber',\n 'mailingAddressRDNumber',\n 'mailingAddressSuburb',\n 'mailingAddressTown',\n 'mailingAddressPostcode',\n ),\n );\n\n // true if ANY value is truthy\n return values.some(val => !!val);\n}\n\nfunction formatStreet(flat: string, streetNumber: string, name: string) {\n const num = compact([flat, streetNumber]).join('/');\n\n return compact([num, name]).join(' ');\n}\n\nfunction formatLocality(suburb: string, rd: string, bag: string) {\n if (rd) {\n return `RD ${rd}`;\n } else if (bag) {\n return `Private Bag ${bag}`;\n } else {\n return suburb;\n }\n}\n\nfunction formatTown(town: string, postcode: string) {\n return compact([town, postcode]).join(' ');\n}\n\nexport const toAddress = (record: MotochekRecord): string => {\n const mailing = hasMailing(record);\n\n if (mailing) {\n const street = formatStreet(\n record.mailingAddressFlatFloorName,\n record.mailingAddressStreetNumber,\n record.mailingAddressStreetName,\n );\n const locality = formatLocality(\n record.mailingAddressSuburb,\n record.mailingAddressRDNumber,\n record.mailingAddressBoxBagNumber,\n );\n const town = formatTown(record.mailingAddressTown, record.mailingAddressPostcode);\n\n return compact([record.mailingAddressPropertyName, street, locality, town]).join('\\n');\n } else {\n const street = formatStreet(\n record.physicalAddressFlatFloorNumber,\n record.physicalAddressStreetNumber,\n record.physicalAddressStreetName,\n );\n const locality = formatLocality(\n record.physicalAddressSuburb,\n record.physicalAddressRDNumber,\n '',\n );\n const town = formatTown(record.physicalAddressTown, record.physicalAddressPostcode);\n\n return compact([record.physicalAddressPropertyName, street, locality, town]).join('\\n');\n }\n};\n\nexport const toMotochekAddress = (record: MotochekRecord): MotochekAddressRepresentation => {\n if(hasMailing(record)) {\n return {\n mailingAddressBoxBagNumber: record.mailingAddressBoxBagNumber,\n mailingAddressBoxBagRd: record.mailingAddressBoxBagRD,\n mailingAddressFlatFloorName: record.mailingAddressFlatFloorName,\n mailingAddressPostcode: record.mailingAddressPostcode,\n mailingAddressPropertyName: record.mailingAddressPropertyName,\n mailingAddressRdNumber: record.mailingAddressRDNumber,\n mailingAddressStreetName: record.mailingAddressStreetName,\n mailingAddressStreetNumber: record.mailingAddressStreetNumber,\n mailingAddressSuburb: record.mailingAddressSuburb,\n mailingAddressTown: record.mailingAddressTown,\n };\n } else {\n return {\n // No box or bag for a physical address\n mailingAddressBoxBagNumber: \"\", \n mailingAddressBoxBagRd: \"\",\n mailingAddressFlatFloorName: record.physicalAddressFlatFloorNumber,\n mailingAddressPostcode: record.physicalAddressPostcode,\n mailingAddressPropertyName: record.physicalAddressPropertyName,\n mailingAddressRdNumber: record.physicalAddressRDNumber,\n mailingAddressStreetName: record.physicalAddressStreetName,\n mailingAddressStreetNumber: record.physicalAddressStreetNumber,\n mailingAddressSuburb: record.physicalAddressSuburb,\n mailingAddressTown: record.physicalAddressTown,\n }\n }\n}\n","import {\n Api,\n apiInstance,\n DebtState,\n DebtStateChangeResult,\n DebtStateTrigger,\n InvalidDebtStateApiError,\n} from 'api/Api';\nimport { MotochekUploadViewModel } from 'components/Motochek/MotochekUploadViewModel';\nimport { Action, RecoveryBlockViewModel } from 'components/RecoveryBlock/RecoveryBlockViewModel';\nimport { RecoveryRowViewModel } from 'components/RecoveryBlock/RecoveryRowViewModel';\nimport { SnackbarControllerViewModel } from 'components/Snackbar/SnackbarControllerViewModel';\nimport { format } from 'date-fns';\nimport { action, autorun, computed, observable } from 'mobx';\nimport { addressUploadRoute, printTriageRoute } from 'routing';\nimport { getUniqueId } from 'utils/getUniqueId';\nimport { globalHandleError } from 'utils/globalHandleError';\nimport { downloadCSVs } from 'utils/motochek-csv';\n\nexport interface AfterActionPrompt {\n debtIds: string[];\n actionTitle: string;\n trigger: DebtStateTrigger;\n}\n\nexport interface AfterActionViewModel {\n afterAction: AfterActionPrompt | null;\n fireTrigger: (debtIds: string[], trigger: DebtStateTrigger) => void;\n}\n\nexport function assertNever(x: never): never {\n throw new Error('Unexpected object: ' + x);\n}\n\nexport enum BlockTitles {\n GenerateLettersAndSendToMailhouse = 'Generate letters and send to mailhouse',\n NewDebt = 'New debt',\n TextNotifications = 'Text notifications',\n UploadPostalAddressFromMotochek = 'Upload postal address from Motochek',\n LetterWaitingPeriod = 'Letter waiting period',\n AllPossibleCommunicationsSent = 'All possible communications sent',\n UnableToSendCommunications = 'Unable to send communications',\n PaidInStore = 'Paid in-store',\n DebtExpired = 'Debt expired',\n PaidOnlineViaAlfiepay = 'Paid online via Alfiepay',\n SendToMotochekForPostalAddress = 'Send to Motochek for postal address',\n NoLongerADebt = 'No longer a debt',\n SendToOrangeboxForOrdering = 'Send to Orangebox for cleaning and ordering',\n WaitForOrangeboxOrdering = 'Upload clean data from Orangebox',\n}\n\nexport type BlockTitle =\n | BlockTitles.GenerateLettersAndSendToMailhouse\n | BlockTitles.NewDebt\n | BlockTitles.TextNotifications\n | BlockTitles.UploadPostalAddressFromMotochek\n | BlockTitles.LetterWaitingPeriod\n | BlockTitles.AllPossibleCommunicationsSent\n | BlockTitles.UnableToSendCommunications\n | BlockTitles.PaidInStore\n | BlockTitles.DebtExpired\n | BlockTitles.PaidOnlineViaAlfiepay\n | BlockTitles.SendToMotochekForPostalAddress\n | BlockTitles.NoLongerADebt\n | BlockTitles.SendToOrangeboxForOrdering\n | BlockTitles.WaitForOrangeboxOrdering;\n\nconst activeBlockTitles: BlockTitle[] = [\n BlockTitles.GenerateLettersAndSendToMailhouse,\n BlockTitles.SendToMotochekForPostalAddress,\n BlockTitles.UploadPostalAddressFromMotochek,\n BlockTitles.SendToOrangeboxForOrdering,\n BlockTitles.WaitForOrangeboxOrdering,\n];\n\nexport class RecoveryAdminViewModel {\n @computed\n get motochekPlates() {\n const { motochekIds } = this;\n return this.recoveries\n .filter((recovery) => motochekIds.includes(recovery.debtIdentifier))\n .map((recovery) => recovery.licensePlate);\n }\n\n @computed\n get printVm() {\n return this.getBlockVm(BlockTitles.GenerateLettersAndSendToMailhouse);\n }\n\n @computed\n get motochekVm() {\n return this.getBlockVm(BlockTitles.SendToMotochekForPostalAddress);\n }\n\n @computed\n get blockVms() {\n return Object.values(this.blockMap);\n }\n\n @computed\n get activeBlocks() {\n return this.blockVms.filter((block) => activeBlockTitles.includes(block.title));\n }\n\n @computed\n get informationalBlocks() {\n return this.blockVms.filter((block) => !activeBlockTitles.includes(block.title));\n }\n\n readonly api: Pick<\n Api,\n | 'aurorAdmin_GetAllDebtDetails'\n | 'aurorAdmin_UploadDebtPostalAddresses'\n | 'aurorAdmin_OverrideDebtState'\n | 'aurorAdmin_GetDebtLetterDetails'\n | 'aurorAdmin_FireDebtStateTrigger'\n | 'aurorAdmin_CreateFile'\n | 'aurorAdmin_StartLettersGeneration'\n > = apiInstance;\n\n @observable\n recoveries: RecoveryRowViewModel[] = [];\n\n @observable\n search: string = '';\n\n @observable\n motochekIds: string[] = [];\n\n @observable\n ingestingMotochek = false;\n\n @observable\n fetching = false;\n\n @observable\n actionInProgress = false;\n\n @observable\n uploadError?: Error = undefined;\n\n @observable\n uploading = false;\n\n @observable\n afterAction: AfterActionPrompt | null = null;\n\n @observable\n blockMap: { [title in BlockTitle]: RecoveryBlockViewModel };\n\n @observable\n invalidPrintRequest: InvalidDebtStateApiError | null = null;\n\n @observable\n orgFilter?: string;\n\n @observable\n motochekUploadVm: MotochekUploadViewModel | null = null;\n\n constructor(readonly snackbarVm: SnackbarControllerViewModel) {\n this.blockMap = {\n [BlockTitles.NewDebt]: this.createBlockVm(\n BlockTitles.NewDebt,\n 'This event has arrived from Auror, but not yet been put into the most relevant state, this happens automatically every hour between 9am and 5pm.',\n ),\n [BlockTitles.TextNotifications]: this.createBlockVm(\n BlockTitles.TextNotifications,\n 'The debt includes a phone number for the person, and is either receiving a 1st or 2nd text (if the number is valid).',\n ),\n [BlockTitles.LetterWaitingPeriod]: this.createBlockVm(\n BlockTitles.LetterWaitingPeriod,\n 'This event is in the waiting period before sending letters, these will move into the next relevant state automatically when they are ready to receive letter 1 or letter 2.',\n ),\n [BlockTitles.SendToMotochekForPostalAddress]: this.createBlockVm(\n BlockTitles.SendToMotochekForPostalAddress,\n 'These events need to be downloaded and sent to Motochek for an address.',\n {\n rowAction: {\n label: 'Download Plates',\n fn: () => {\n downloadCSVs(this.motochekPlates);\n this.afterAction = {\n actionTitle: 'Plates downloaded',\n debtIds: this.motochekVm.selectedIds,\n trigger: DebtStateTrigger.RequestedPostalAddress,\n };\n this.motochekVm.clearSelection();\n },\n },\n onSelect: (motochekIds: string[]) => (this.motochekIds = motochekIds),\n },\n ),\n [BlockTitles.UploadPostalAddressFromMotochek]: this.createBlockVm(\n BlockTitles.UploadPostalAddressFromMotochek,\n 'This event has been sent to Motochek and is waiting for the postal address to be uploaded.',\n ),\n [BlockTitles.SendToOrangeboxForOrdering]: this.createBlockVm(\n BlockTitles.SendToOrangeboxForOrdering,\n 'These events need to be downloaded and sent to Orangebox so they can send us an order and fix up the addresses',\n {\n rowAction: {\n label: 'Download Addresses',\n fn: transformToMobxFlow(async () => {\n if (this.actionInProgress) {\n return;\n }\n try {\n this.actionInProgress = true;\n const response = await apiInstance.getAddressCsv();\n const csv = await response.text();\n const csvUrl = encodeURIComponent(csv);\n const hiddenElement = document.createElement('a');\n hiddenElement.href = `data:text/csv;charset=utf-8,${csvUrl}`;\n hiddenElement.target = '_blank';\n hiddenElement.download = this.getCsvDownloadFileName();\n hiddenElement.click();\n } catch (e) {\n this.snackbarVm.showSnackbar(getUniqueId(), {\n content: 'Oops! Could not download Orangebox CSV',\n persistent: true,\n });\n globalHandleError(e);\n } finally {\n this.actionInProgress = false;\n }\n }),\n },\n },\n ),\n [BlockTitles.WaitForOrangeboxOrdering]: this.createBlockVm(\n BlockTitles.WaitForOrangeboxOrdering,\n 'Waiting for Orangebox to send a file with the correct order.',\n {\n rowAction: {\n label: 'Upload Orangebox sorted file',\n goto: addressUploadRoute(),\n },\n },\n ),\n [BlockTitles.GenerateLettersAndSendToMailhouse]: this.createBlockVm(\n BlockTitles.GenerateLettersAndSendToMailhouse,\n 'Postal addresses received from Motochek, ready to generate letters and send to the mailhouse to distribute.',\n {\n blockAction: { label: 'Print', fn: this.printLetters },\n },\n ),\n [BlockTitles.PaidOnlineViaAlfiepay]: this.createBlockVm(\n BlockTitles.PaidOnlineViaAlfiepay,\n 'This event has been paid in full online through Alfiepay',\n ),\n [BlockTitles.PaidInStore]: this.createBlockVm(\n BlockTitles.PaidInStore,\n 'We think this means that the debt has been paid in-store, or any other debt state change has happened in Fawkes.',\n ),\n [BlockTitles.AllPossibleCommunicationsSent]: this.createBlockVm(\n BlockTitles.AllPossibleCommunicationsSent,\n 'This event has had all possible communications, i.e. 2 texts if there was a valid mobile number, and/or 2 letters if we had a postal address',\n ),\n [BlockTitles.UnableToSendCommunications]: this.createBlockVm(\n BlockTitles.UnableToSendCommunications,\n 'Events will transition here manually if Motochek gives us a non-valid address and no texts have been sent, otherwise manually by Auror Admins for reasons (which can include no/incorrect mobile number, no/incorrect license plate details, no address returned from motochek, or the debt not being valid because the intel entered in Auror does not meet the criteria set by the customer).',\n ),\n [BlockTitles.DebtExpired]: this.createBlockVm(\n BlockTitles.DebtExpired,\n 'The event has not been paid, and 75 days has passed since the incident was created so it no longer qualifies for debt recovery through Alfiepay, has been marked as “3rd-Party Debt Collection” in Fawkes, and an exported list has been provided to the customer.',\n ),\n [BlockTitles.NoLongerADebt]: this.createBlockVm(\n BlockTitles.NoLongerADebt,\n 'The event has been edited and it longer meets the criteria for a debt',\n ),\n };\n\n // make sure all debtstates are presented to \"addBlock\"\n Object.values(DebtState).forEach(this.registerState);\n\n autorun(() => {\n this.blockVms.forEach((blockVm) => {\n blockVm.search = this.search;\n });\n });\n }\n\n getCsvDownloadFileName() {\n return `orangebox-${format(new Date(), 'yyyy-MM-dd-HH-mm-ss')}.csv`;\n }\n\n getBlockVm(title: BlockTitle) {\n return this.blockMap[title];\n }\n\n createBlockVm(\n title: BlockTitle,\n description: string,\n params?: {\n blockAction?: Action;\n rowAction?: Action;\n onSelect?: (ids: string[]) => void;\n },\n ) {\n return new RecoveryBlockViewModel(\n {\n description,\n getAllRecoveries: () => this.recoveries,\n onSelect: params && params.onSelect,\n blockAction: params && params.blockAction,\n rowAction: params && params.rowAction,\n states: [],\n title,\n },\n this.api,\n );\n }\n\n @action.bound\n registerBlockState(title: BlockTitle, state: DebtState) {\n this.getBlockVm(title).states.push(state);\n }\n\n @action.bound\n registerState(state: DebtState) {\n switch (state) {\n case DebtState.New:\n case DebtState.InDebt:\n this.registerBlockState(BlockTitles.NewDebt, state);\n break;\n\n case DebtState.SendingSMS1:\n case DebtState.WaitingToSendSMS1:\n case DebtState.SendingSMS2:\n case DebtState.WaitingToSendSMS2:\n this.registerBlockState(BlockTitles.TextNotifications, state);\n break;\n\n case DebtState.NeedPostalAddress:\n this.registerBlockState(BlockTitles.SendToMotochekForPostalAddress, state);\n break;\n\n case DebtState.WaitingForPostalAddress:\n this.registerBlockState(BlockTitles.UploadPostalAddressFromMotochek, state);\n break;\n\n case DebtState.ReadyToSendLetter1:\n case DebtState.ReadyToSendLetter2:\n this.registerBlockState(BlockTitles.GenerateLettersAndSendToMailhouse, state);\n break;\n\n case DebtState.WaitingToSendLetter1:\n case DebtState.WaitingToSendLetter2:\n this.registerBlockState(BlockTitles.LetterWaitingPeriod, state);\n break;\n\n case DebtState.AllPossibleCommunicationsSent:\n this.registerBlockState(BlockTitles.AllPossibleCommunicationsSent, state);\n break;\n\n case DebtState.HandledExternally:\n this.registerBlockState(BlockTitles.PaidInStore, state);\n break;\n\n case DebtState.NotifiedExpired:\n case DebtState.NotifyExpired:\n this.registerBlockState(BlockTitles.DebtExpired, state);\n break;\n\n case DebtState.Settled:\n this.registerBlockState(BlockTitles.PaidOnlineViaAlfiepay, state);\n break;\n\n case DebtState.NoCommunicationsSent:\n this.registerBlockState(BlockTitles.UnableToSendCommunications, state);\n break;\n\n case DebtState.NotEligibleForRecovery:\n this.registerBlockState(BlockTitles.NoLongerADebt, state);\n break;\n\n case DebtState.NeedOrangeboxInputLetter1:\n case DebtState.NeedOrangeboxInputLetter2:\n this.registerBlockState(BlockTitles.SendToOrangeboxForOrdering, state);\n break;\n\n case DebtState.WaitingForOrangeboxInputLetter1:\n case DebtState.WaitingForOrangeboxInputLetter2:\n this.registerBlockState(BlockTitles.WaitForOrangeboxOrdering, state);\n break;\n\n default:\n assertNever(state);\n }\n }\n\n @action.bound\n cancelAfterAction() {\n this.afterAction = null;\n }\n\n @action.bound\n startIngesting() {\n this.motochekUploadVm = new MotochekUploadViewModel(this.api, () => {\n this.fetchAdminDetails();\n this.closeIngestionModal();\n });\n }\n\n @action.bound\n closeIngestionModal() {\n this.motochekUploadVm = null;\n }\n\n @action.bound\n handleFetchAdminDetails() {\n this.fetchAdminDetails().catch(globalHandleError);\n }\n\n @action.bound\n printLetters() {\n window.open(printTriageRoute(), '_blank');\n }\n\n @action.bound\n fireTrigger(debtIds: string[], trigger: DebtStateTrigger) {\n transformToMobxFlow(async () => {\n try {\n const response = await this.api.aurorAdmin_FireDebtStateTrigger({\n debtIdentifiers: debtIds,\n trigger,\n });\n\n this.processDebtStateChanges(response);\n } catch (e) {\n alert('Oops, something went wrong!');\n globalHandleError(e);\n }\n })().catch(globalHandleError);\n }\n\n @action.bound\n clearInvalidPrintRequest() {\n if (this.invalidPrintRequest) {\n const { details } = this.invalidPrintRequest;\n this.printVm.clearSelectionByDebtId(details.map((detail) => detail.debtIdentifier));\n }\n this.invalidPrintRequest = null;\n }\n\n @action.bound\n private processDebtStateChanges(changes: DebtStateChangeResult[]) {\n const failedChanges: string[] = [];\n\n changes.forEach((x) => {\n const recovery = this.recoveries.find((r) => r.debtIdentifier === x.debtIdentifier);\n\n if (!recovery) {\n return;\n }\n\n if (x.currentState) {\n recovery.debtState = x.currentState;\n }\n if (x.errorMessage) {\n failedChanges.push(`${x.debtIdentifier} ${x.errorMessage}`);\n }\n });\n\n if (failedChanges.length > 0) {\n alert(`Unable to update the following debts:\n${failedChanges.join('\\n')}`);\n }\n }\n\n @transformToMobxFlow\n private async fetchAdminDetails() {\n this.fetching = true;\n try {\n this.recoveries = [];\n const response = await this.api.aurorAdmin_GetAllDebtDetails(this.orgFilter);\n this.recoveries = response.map((x) => new RecoveryRowViewModel(x));\n } catch (e) {\n this.snackbarVm.showSnackbar(getUniqueId(), {\n content: e.message,\n persistent: true,\n });\n globalHandleError(e);\n } finally {\n this.fetching = false;\n }\n }\n}\n\nexport const ensureImagesAreLoaded = transformToMobxFlow(async (container: HTMLElement) => {\n const allImages = container.querySelectorAll('img');\n\n return Promise.all(Array.from(allImages).map((x) => ensureImageIsLoaded(x)));\n});\n\nconst ensureImageIsLoaded = async (image: HTMLImageElement) => {\n if (image.complete) {\n return;\n }\n\n return await new Promise((resolve, reject) => {\n image.addEventListener('load', resolve);\n image.addEventListener('error', () => reject(new Error('error loading an image')));\n });\n};\n","import { CreateDebtPostalAddressPayload, DebtPostalAddressRepresentation } from 'api/Api';\nimport cav from 'chopped-and-viewed';\nimport { toAddress, toMotochekAddress } from './motochek-to-address';\n\nexport interface MotochekRecord {\n raw: string;\n recordType: string;\n plateNo: string;\n replacementPlate: string;\n vin: string;\n messageCode1: string;\n messageCode2: string;\n messageCode3: string;\n yearOfManufacture: string;\n make: string;\n model: string;\n submodel: string;\n dateQueryProcessed: string;\n registeredPersonName: string;\n tradingAsOrRepresenting: string;\n jointOwnerIndicator: string;\n sexOrCompany: string;\n dateOfBirthOfRegisteredPerson: string;\n physicalAddressPropertyName: string;\n physicalAddressFlatFloorNumber: string;\n physicalAddressStreetNumber: string;\n physicalAddressStreetName: string;\n physicalAddressRDNumber: string;\n physicalAddressSuburb: string;\n physicalAddressTown: string;\n physicalAddressPostcode: string;\n mailingAddressPropertyName: string;\n mailingAddressFlatFloorName: string;\n mailingAddressStreetNumber: string;\n mailingAddressStreetName: string;\n mailingAddressBoxBagRD: string;\n mailingAddressBoxBagNumber: string;\n mailingAddressRDNumber: string;\n mailingAddressSuburb: string;\n mailingAddressTown: string;\n mailingAddressPostcode: string;\n goneNoAddress: string;\n ownershipStatus: string;\n ticketNumber: string;\n queryDateForOwnerAsAt: string;\n acquisitionDateOwnership: string;\n registrationStatus: string;\n licenceExpiryDate: string;\n licenceType: string;\n dateOfIssueForLatestLicense: string;\n timeOfIssueForLatestLicense: string;\n continuousLicense: string;\n mainColour: string;\n secondColour: string;\n ccRating: string;\n bodyStyle: string;\n subjectToWOF: string;\n dateOfLatestWOFInspection: string;\n resultOfLatestWOFInspection: string;\n expiryDateOfLastSuccessfulWOF: string;\n subjectToCOFInspection: string;\n dateOfLatestCOFInspection: string;\n resultOfLatestCOFInspection: string;\n expiryDateOfLastSuccessfulCOF: string;\n subjectToRUC: string;\n importedDamaged: string;\n cancellationReasonCode: string;\n registeredOverseas: string;\n dayOfFirstRegistrationOverseas: string;\n monthOfFirstRegistrationOverseas: string;\n yearOfFirstRegistrationOverseas: string;\n inspectionAgent: string;\n}\n\nexport const parse = (s: string) => {\n // discard the header line\n const [, ...lines] = s.split(/\\r?\\n/);\n\n // discard the trailing line if it's empty\n if (lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n return lines.map(parseLine);\n};\n\n// https://www.nzta.govt.nz/assets/Vehicles/docs/Motochek/data-format-results.doc\nexport const fields: [keyof MotochekRecord, number][] = [\n ['recordType', 1],\n ['plateNo', 6],\n ['replacementPlate', 6],\n ['vin', 17],\n ['messageCode1', 2],\n ['messageCode2', 2],\n ['messageCode3', 2],\n ['yearOfManufacture', 4],\n ['make', 20],\n ['model', 20],\n ['submodel', 20],\n ['dateQueryProcessed', 8],\n ['registeredPersonName', 56],\n ['tradingAsOrRepresenting', 56],\n ['jointOwnerIndicator', 1],\n ['sexOrCompany', 1],\n ['dateOfBirthOfRegisteredPerson', 8],\n ['physicalAddressPropertyName', 35],\n ['physicalAddressFlatFloorNumber', 8],\n ['physicalAddressStreetNumber', 8],\n ['physicalAddressStreetName', 40],\n ['physicalAddressRDNumber', 7],\n ['physicalAddressSuburb', 35],\n ['physicalAddressTown', 40],\n ['physicalAddressPostcode', 8],\n ['mailingAddressPropertyName', 35],\n ['mailingAddressFlatFloorName', 8],\n ['mailingAddressStreetNumber', 8],\n ['mailingAddressStreetName', 40],\n ['mailingAddressBoxBagRD', 3],\n ['mailingAddressBoxBagNumber', 7],\n ['mailingAddressRDNumber', 7],\n ['mailingAddressSuburb', 35],\n ['mailingAddressTown', 40],\n ['mailingAddressPostcode', 8],\n ['goneNoAddress', 1],\n ['ownershipStatus', 1],\n ['ticketNumber', 6],\n ['queryDateForOwnerAsAt', 8],\n ['acquisitionDateOwnership', 8],\n ['registrationStatus', 1],\n ['licenceExpiryDate', 8],\n ['licenceType', 1],\n ['dateOfIssueForLatestLicense', 8],\n ['timeOfIssueForLatestLicense', 4],\n ['continuousLicense', 1],\n ['mainColour', 6],\n ['secondColour', 6],\n ['ccRating', 5],\n ['bodyStyle', 3],\n ['subjectToWOF', 1],\n ['dateOfLatestWOFInspection', 8],\n ['resultOfLatestWOFInspection', 1],\n ['expiryDateOfLastSuccessfulWOF', 8],\n ['subjectToCOFInspection', 1],\n ['dateOfLatestCOFInspection', 8],\n ['resultOfLatestCOFInspection', 1],\n ['expiryDateOfLastSuccessfulCOF', 8],\n ['subjectToRUC', 1],\n ['importedDamaged', 1],\n ['cancellationReasonCode', 1],\n ['registeredOverseas', 1],\n ['dayOfFirstRegistrationOverseas', 2],\n ['monthOfFirstRegistrationOverseas', 2],\n ['yearOfFirstRegistrationOverseas', 4],\n ['inspectionAgent', 56],\n];\n\nexport const expectedWidth = fields.reduce((width, [, fieldWidth]) => width + fieldWidth, 0);\n\nexport const parseLine = (line: string) => {\n const parser = cav(fields);\n return { ...parser(line), raw: line } as MotochekRecord;\n};\n\nexport const validateRecord = (record: MotochekRecord) => {\n return record.raw.length === expectedWidth;\n};\n\nconst invalidMessageCodes = ['21', '22', '41', '53'];\nexport const toRecords = (input: string) => {\n const records = parse(input);\n\n const addressRecords = records.map(\n item => {\n const address = toAddress(item);\n const motochekAddress = toMotochekAddress(item);\n const { registeredPersonName: recipient, plateNo, vin, messageCode1 } = item;\n\n let postalAddress: DebtPostalAddressRepresentation | null = null;\n // some message codes mean we shouldn't expect an address\n if (address && recipient && !invalidMessageCodes.includes(messageCode1)) {\n postalAddress = { address, recipient, motochekAddress };\n }\n\n // we fall back to the vin if the plateNo isn't populated, this is where Motochek puts 7+ character plates\n const licensePlate = plateNo || vin;\n\n return {\n licensePlate,\n address: postalAddress,\n valid: validateRecord(item),\n };\n },\n );\n\n const invalidRecords = addressRecords.filter(record => !record.valid);\n\n if (invalidRecords.length === 0) {\n return addressRecords;\n } else {\n throw new Error(\n `Invalid records: ${invalidRecords.map(record => record.licensePlate).join(', ')}`,\n );\n }\n};\n","import {\n Api,\n BatchStatusResponseCode,\n CreateDebtPostalAddressesResponse,\n CreateDebtPostalAddressPayload,\n CreateFileTypeInvalidApiError,\n FileResponse,\n FileType,\n InvalidBatchApiError,\n} from 'api/Api';\nimport { action, computed, observable } from 'mobx';\nimport { ChangeEvent } from 'react';\nimport { globalHandleError } from 'utils/globalHandleError';\nimport { toRecords } from 'utils/motochek-parser';\nimport { uploadAndGetFileId } from 'utils/aurorStorageFileUploader';\n\nexport class MotochekUploadViewModel {\n @observable\n fileError?: string;\n\n @observable\n uploadError?: Error = undefined;\n\n @observable\n records?: CreateDebtPostalAddressPayload[];\n\n @observable\n uploading = false;\n\n @observable\n uploadResult: CreateDebtPostalAddressesResponse | null = null;\n\n @observable\n file?: File;\n\n @computed\n get acceptedCount() {\n return this.uploadResult ? this.uploadResult.stateUpdates.length : 0;\n }\n\n @computed\n get uploadErrors() {\n return this.uploadResult ? this.uploadResult.errors : [];\n }\n\n @computed\n get ignoredCount() {\n return this.uploadResult ? this.uploadResult.warnings.length : 0;\n }\n\n @computed\n get ignoredDebtStates() {\n if (!this.uploadResult) {\n return [];\n }\n return [\n ...Object.entries(\n this.uploadResult.warnings.reduce((result, warning) => {\n if (!warning.currentDebtState) {\n return result;\n }\n result[warning.currentDebtState] = (result[warning.currentDebtState] || 0) + 1;\n\n return result;\n }, {} as { [key: string]: number }),\n ),\n ];\n }\n\n @computed\n get ignoredDebtReasons() {\n if (!this.uploadResult) {\n return [];\n }\n return [\n ...Object.entries(\n this.uploadResult.warnings.reduce((result, warning) => {\n if (!warning.warningReason) {\n return result;\n }\n result[warning.warningReason] = (result[warning.warningReason] || 0) + 1;\n\n return result;\n }, {} as { [key: string]: number }),\n ),\n ];\n }\n\n constructor(\n readonly api: Pick,\n readonly closeModal: () => void,\n ) {}\n\n @action.bound\n handleMotochekUpload() {\n if (this.records) {\n this.motochekUpload(this.records).catch(globalHandleError);\n }\n }\n\n @action.bound\n updateFile(e: ChangeEvent) {\n // clear any previous error & records\n this.fileError = undefined;\n this.uploadResult = null;\n this.records = undefined;\n this.file = undefined;\n\n if (!e.currentTarget.files || !e.currentTarget.files[0]) {\n return;\n }\n this.file = e.currentTarget.files && e.currentTarget.files[0];\n if (!this.file) {\n return;\n }\n const reader = new FileReader();\n reader.readAsText(this.file, 'UTF-8');\n reader.onload = () => {\n const { result } = reader;\n if (result) {\n try {\n this.records = toRecords(result.toString());\n } catch (e) {\n this.fileError = `Uh oh! ${e.message}. You'll need to edit the file to take out the bad records.`;\n globalHandleError(e);\n }\n } else {\n this.fileError = `Uh oh! Something went wrong uploading this file. Try again?`;\n }\n };\n reader.onerror = () =>\n (this.fileError = `Uh oh! Something went wrong uploading this file. Try again?`);\n }\n\n @transformToMobxFlow\n private async motochekUpload(payload: CreateDebtPostalAddressPayload[]) {\n this.uploadError = undefined; // clear any previous error\n this.uploadResult = null;\n this.uploading = true;\n\n //Upload File to Azure and Create File definition in Db\n if (!this.file) {\n throw new Error('Could not complete Motochek ingestion.');\n }\n\n try {\n const motochekFileId = await uploadAndGetFileId(this.file, (fileId) =>\n this.createMotochekFile(fileId),\n );\n\n const result = await this.api.aurorAdmin_UploadDebtPostalAddresses({\n motochekFileId,\n payload,\n });\n\n if (InvalidBatchApiError.isInstance(result)) {\n this.uploadError = new Error(\n result.batchStatus === BatchStatusResponseCode.FailedSafeToReprocess\n ? 'Address upload failed. It is safe to reprocess Motochek file.'\n : 'Address upload failed. It is not safe to reprocess Motochek file',\n );\n } else {\n this.uploadResult = result;\n }\n } catch (e) {\n this.uploadError = e;\n globalHandleError(e);\n } finally {\n this.uploading = false;\n }\n }\n\n @transformToMobxFlow\n private async createMotochekFile(fileId: string): Promise {\n const response = await this.api.aurorAdmin_CreateFile({\n fileId,\n fileName: '',\n fileType: FileType.MotochekResponse,\n });\n\n if (CreateFileTypeInvalidApiError.isInstance(response)) {\n throw new Error('Could not complete file upload');\n } else {\n return response;\n }\n }\n}\n","import { Api, DebtState } from 'api/Api';\nimport { action, autorun, computed, observable } from 'mobx';\nimport { BlockTitle } from 'pages/RecoveryAdmin/RecoveryAdminViewModel';\nimport { RecoveryRowViewModel } from './RecoveryRowViewModel';\n\nexport interface Action {\n label: string;\n fn?: () => void;\n goto?: string;\n}\nexport class RecoveryBlockViewModel {\n readonly description: string;\n readonly title: BlockTitle;\n readonly states: DebtState[];\n readonly blockAction?: Action;\n readonly rowAction?: Action;\n readonly onSelect?: (selectedIds: string[]) => void;\n readonly getAllRecoveries: () => RecoveryRowViewModel[];\n\n @observable\n lastToggledId?: string = undefined;\n\n @observable\n expanded = false;\n\n @observable\n search = '';\n\n // can act if any of `selections` is set to true\n @computed\n get canAct() {\n return this.selectedRows.length > 0;\n }\n\n @computed\n get someChecked() {\n return this.recoveries.some(recovery => recovery.isChecked);\n }\n\n @computed\n get allChecked() {\n return this.recoveries.every(recovery => recovery.isChecked);\n }\n\n @computed\n get recoveries(): RecoveryRowViewModel[] {\n return this.getAllRecoveries().filter(recovery => this.states.includes(recovery.debtState));\n }\n\n @computed\n get selectedRows() {\n return this.matchingRecoveries.filter(x => x.isChecked);\n }\n\n constructor(\n options: {\n description: string;\n title: BlockTitle;\n states: DebtState[];\n blockAction?: Action;\n rowAction?: Action;\n onSelect?: (selectedIds: string[]) => void;\n getAllRecoveries: () => RecoveryRowViewModel[];\n },\n readonly api: Pick,\n ) {\n const {\n blockAction,\n description,\n states,\n rowAction,\n title,\n onSelect,\n getAllRecoveries,\n } = options;\n this.states = states;\n this.description = description;\n this.title = title;\n this.blockAction = blockAction;\n this.rowAction = rowAction;\n this.onSelect = onSelect;\n this.getAllRecoveries = getAllRecoveries;\n\n autorun(() => {\n if (this.onSelect) {\n this.onSelect(this.selectedIds);\n }\n });\n }\n\n @computed\n get selectedIds() {\n return this.selectedRows.map(x => x.debtIdentifier);\n }\n\n @computed\n get selectionCount() {\n return this.selectedRows.length;\n }\n\n @computed\n get matchingRecoveries() {\n const search = this.search.trim().toLowerCase();\n return this.recoveries.filter(recovery => {\n return (\n !search ||\n recovery.debtIdentifier.toLowerCase().includes(search) ||\n recovery.licensePlate.toLowerCase().includes(search) ||\n recovery.organizationName.toLowerCase().includes(search) ||\n recovery.siteName.toLowerCase().includes(search) ||\n String(recovery.amountIncludingCollectionFee).includes(search) ||\n String(recovery.amountOwedForGoods).includes(search)\n );\n });\n }\n\n @action.bound\n toggleAll() {\n const { someChecked } = this;\n\n this.recoveries.forEach(x => x.toggleChecked(!someChecked));\n }\n\n @action.bound\n toggleRange(id: string) {\n const { lastToggled, recoveries } = this;\n const target = this.getRecovery(id);\n if (lastToggled && target) {\n let fromIndex = this.getRowIndex(lastToggled);\n let toIndex = this.getRowIndex(target);\n if (fromIndex > toIndex) {\n [fromIndex, toIndex] = [toIndex, fromIndex];\n }\n const range = recoveries.slice(fromIndex, toIndex + 1);\n range.forEach(x => x.toggleChecked(lastToggled.isChecked));\n\n // prevent weird text selection from shift-clicking\n const selection = document.getSelection();\n if (selection) {\n selection.empty();\n }\n } else if (target) {\n target.toggleChecked();\n }\n this.lastToggledId = id;\n }\n\n getRecovery(id?: string) {\n const { recoveries } = this;\n if (id) {\n return recoveries.find(x => x.debtIdentifier === id);\n } else {\n return undefined;\n }\n }\n getRowIndex(row: RecoveryRowViewModel) {\n const { recoveries } = this;\n if (row) {\n return recoveries.findIndex(x => x.debtIdentifier === row.debtIdentifier);\n } else {\n return -1;\n }\n }\n @computed\n get lastToggled() {\n const { lastToggledId } = this;\n return this.getRecovery(lastToggledId);\n }\n\n @action.bound\n clearSelectionByDebtId(ids: string[]) {\n this.recoveries.forEach(x => ids.includes(x.debtIdentifier) && x.toggleChecked(false));\n }\n\n @action.bound\n clearSelection() {\n this.recoveries.forEach(x => x.toggleChecked(false));\n }\n\n @action.bound\n toggleExpanded() {\n this.expanded = !this.expanded;\n }\n\n @transformToMobxFlow\n async overrideState(debtIds: string[], newState: DebtState) {\n await this.api.aurorAdmin_OverrideDebtState({\n debtIdentifiers: debtIds,\n newState,\n });\n\n this.selectedRows.forEach(x => {\n x.debtState = newState;\n });\n this.clearSelection();\n }\n\n @computed\n get interpolatedLabel() {\n const { rowAction, selectionCount } = this;\n\n if (rowAction) {\n return rowAction.label.replace(' $count', () => {\n if (selectionCount === 0) {\n return '';\n } else {\n return ` (${selectionCount})`;\n }\n });\n } else {\n return undefined;\n }\n }\n}\n","import { DebtDetails, DebtState } from 'api/Api';\nimport { action, observable } from 'mobx';\n\nexport class RecoveryRowViewModel {\n @observable\n isChecked = false;\n\n @observable\n debtState: DebtState;\n\n readonly amountIncludingCollectionFee: number;\n readonly amountOwedForGoods: number;\n readonly debtIdentifier: string;\n readonly organizationName: string;\n readonly licensePlate: string;\n readonly siteName: string;\n\n constructor(debtDetails: Readonly) {\n this.debtState = debtDetails.debtState;\n\n this.amountIncludingCollectionFee = debtDetails.amountIncludingCollectionFee;\n this.amountOwedForGoods = debtDetails.amountOwedForGoods;\n this.debtIdentifier = debtDetails.debtIdentifier;\n this.organizationName = debtDetails.organizationName;\n this.licensePlate = debtDetails.licensePlate;\n this.siteName = (debtDetails.incidentDetails && debtDetails.incidentDetails.SiteName) || '';\n }\n\n @action.bound\n toggleChecked(value?: boolean) {\n if (typeof value === 'boolean') {\n this.isChecked = value;\n } else {\n this.isChecked = !this.isChecked;\n }\n }\n}\n","import { format } from 'date-fns';\n\nexport const downloadCSVs = (plates: string[]) => {\n const batchSize = 999;\n let batchNumber = 1;\n while(plates.length > 0) {\n const thisBatch = plates.splice(0, batchSize);\n downloadCSVForPlateBatch(batchNumber, thisBatch);\n batchNumber++;\n }\n};\n\nconst downloadCSVForPlateBatch = (batchNumber: number, plates: string[]) => {\n const csvUrl = toDataUrl(plates);\n const hiddenElement = document.createElement('a');\n hiddenElement.href = 'data:text/csv;charset=utf-8,' + csvUrl;\n hiddenElement.target = '_blank';\n hiddenElement.download = `motochek-${batchNumber}-${format(new Date(), 'yyyy-MM-dd-HH-mm-ss')}.csv`;\n hiddenElement.click();\n};\n\nexport const toDataUrl = (plates: string[]) => {\n const output = [\n ...new Set(\n plates.map(plate =>\n plate\n .trim()\n .replace(/\\s/g, '')\n .toUpperCase(),\n ),\n ),\n ];\n\n return encodeURIComponent(output.join('\\n'));\n};\n","module.exports = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 213.35 213.35'%3E%3Cg data-name='Layer 2'%3E%3Cg data-name='Layer 1'%3E%3Cpath fill='%23009639' d='M150.21 24.86c0 4.66-1.64 11.08-8.23 11.08-7.95 0-7.95-8.92-7.95-10.79s0-11.36 8.17-11.36c7.45 0 8.01 8.21 8.01 11.07zM134.14 0h-5.33v34.29l-.11 5.11h5.15l.12-4.32a9 9 0 002.79 2.9 11.22 11.22 0 006.35 1.82 12 12 0 0010-4.89c1.42-1.87 2.72-4.88 2.72-10.39 0-6.24-1.93-9.08-3.34-10.73a11.69 11.69 0 00-9-3.63c-6.47 0-8.57 3.58-9.31 4.88zm30.89 26c0-2.56 0-11.59 8.52-11.59 6.3 0 7.83 5.34 7.83 10.45 0 2.05-.28 6.14-2.32 8.92a7.27 7.27 0 01-6 2.78c-7.52 0-8.03-7.1-8.03-10.56zm-5.11 24.36h5.28V36.22c1.53 2.5 4.6 4.26 8.75 4.26 6.81 0 13-4.66 13-15.28s-5.84-14.76-12-14.76c-2.32 0-7 .68-9.71 5.17l-.12-4.71h-5.39c.12 2.72.17 3.4.17 4.65zM117.59 70a116.6 116.6 0 00-10.91-19.66A115.16 115.16 0 0095.77 70a74.67 74.67 0 0110.91 14.88A74.28 74.28 0 01117.59 70zM95.77 193.68a115.58 115.58 0 0010.91 19.67 117 117 0 0010.91-19.67 74.93 74.93 0 01-10.91-14.88 75.33 75.33 0 01-10.91 14.88zm0-123.68a115.42 115.42 0 00-17-14.76 115.54 115.54 0 00-3.51 22.22 75.34 75.34 0 0115.36 10.25A75 75 0 0195.77 70zm21.82 123.68a114.64 114.64 0 0017 14.75 116.36 116.36 0 003.51-22.21A75.13 75.13 0 01122.74 176a75.67 75.67 0 01-5.15 17.68z'/%3E%3Cpath fill='%23009639' d='M75.29 77.47a116.93 116.93 0 00-21-8.07 115 115 0 004.3 22.09 73.92 73.92 0 0117.9 4.38 74.3 74.3 0 01-1.2-18.4zm62.78 108.75a115.31 115.31 0 0021 8.06 115.73 115.73 0 00-4.3-22.08 74.5 74.5 0 01-17.91-4.39 74.88 74.88 0 011.21 18.41z'/%3E%3Cpath fill='%23009639' d='M66.01 108.36a75.19 75.19 0 01-7.42-16.87 114.74 114.74 0 00-22.5-.4 117.07 117.07 0 0011.58 19.28 74.9 74.9 0 0118.34-2.01zm81.33 46.97a73.71 73.71 0 017.43 16.87 116.29 116.29 0 0022.49.4 115.47 115.47 0 00-11.58-19.29 75.32 75.32 0 01-18.34 2.02zm-99.67-44.96a115.07 115.07 0 00-21.26 7.32 116.78 116.78 0 0017.48 14.15 74.73 74.73 0 0116.52-8.15 75.86 75.86 0 01-12.74-13.32zm121.74 21.47a74.38 74.38 0 01-16.48 8.16 75.06 75.06 0 0112.75 13.31 114.42 114.42 0 0021.26-7.31 114.66 114.66 0 00-17.53-14.16zm-109 8.16a74.32 74.32 0 01-16.54-8.16A116 116 0 0026.41 146a115.27 115.27 0 0021.26 7.31A75.13 75.13 0 0160.41 140zm92.52-16.31a74.79 74.79 0 0116.48 8.15 115.41 115.41 0 0017.49-14.15 114.22 114.22 0 00-21.26-7.32 75.79 75.79 0 01-12.71 13.32z'/%3E%3Cpath fill='%23009639' d='M47.67 153.31a116.19 116.19 0 00-11.58 19.29 116.4 116.4 0 0022.5-.4 75 75 0 017.42-16.87 75.38 75.38 0 01-18.34-2.02zm118.01-42.94a115.88 115.88 0 0011.58-19.29 115.71 115.71 0 00-22.49.41 73.9 73.9 0 01-7.43 16.87 74.84 74.84 0 0118.34 2.01zm-89.19 57.44a74.9 74.9 0 01-17.9 4.39 114.92 114.92 0 00-4.3 22.08 115.87 115.87 0 0021-8.06 74.38 74.38 0 011.2-18.41zm60.37-71.94a74 74 0 0117.91-4.38 115.79 115.79 0 004.3-22.09 115.31 115.31 0 00-21 8.06 74.88 74.88 0 01-1.21 18.41zm-61.57 90.35a115.54 115.54 0 003.51 22.21 115.16 115.16 0 0017-14.75A75.19 75.19 0 0190.62 176a75.4 75.4 0 01-15.33 10.22zm62.78-108.76a116.36 116.36 0 00-3.51-22.21A114.89 114.89 0 00117.59 70a75.3 75.3 0 015.15 17.7 75.54 75.54 0 0115.33-10.24z'/%3E%3Cpath fill='%2378be20' d='M101.09 100.16a51.63 51.63 0 015.59-15.28A74.67 74.67 0 0095.77 70a75 75 0 00-5.15 17.7 51.31 51.31 0 0110.47 12.46zm11.18 63.37a52 52 0 01-5.59 15.27 74.93 74.93 0 0010.91 14.88 75.67 75.67 0 005.15-17.68 51.68 51.68 0 01-10.47-12.47zM76.49 95.87a51.49 51.49 0 0114.1 8.1 51.54 51.54 0 010-16.26 75.34 75.34 0 00-15.3-10.24 74.3 74.3 0 001.2 18.4zm60.37 71.94a51.7 51.7 0 01-14.09-8.1 51.84 51.84 0 010 16.26 75.13 75.13 0 0015.33 10.25 74.88 74.88 0 00-1.24-18.41z'/%3E%3Cpath fill='%2378be20' d='M82.04 111.16a51.59 51.59 0 01-5.55-15.29 73.92 73.92 0 00-17.9-4.38 75.19 75.19 0 007.42 16.87 51.76 51.76 0 0116.03 2.8zm49.28 41.36a51.57 51.57 0 015.54 15.29 74.5 74.5 0 0017.91 4.39 73.71 73.71 0 00-7.43-16.87 52 52 0 01-16.02-2.81zM60.41 123.69a51.16 51.16 0 0116-2.85 51.35 51.35 0 01-10.4-12.48 74.9 74.9 0 00-18.34 2 75.86 75.86 0 0012.74 13.33zM152.93 140a51.54 51.54 0 01-16 2.84 51.39 51.39 0 0110.43 12.49 75.32 75.32 0 0018.34-2A75.06 75.06 0 00152.93 140zm-78.43-8.16a52 52 0 01-14.09-8.15 74.73 74.73 0 00-16.54 8.15A74.32 74.32 0 0060.41 140a51.74 51.74 0 0114.09-8.16zm64.35 0a51.65 51.65 0 0114.08 8.16 74.38 74.38 0 0016.48-8.16 74.79 74.79 0 00-16.52-8.15 51.88 51.88 0 01-14.04 8.15zm-72.84 23.49a51.21 51.21 0 0110.4-12.49 51.44 51.44 0 01-16-2.84 75.13 75.13 0 00-12.76 13.31 75.38 75.38 0 0018.36 2.02zm81.33-46.97a51.53 51.53 0 01-10.43 12.48 51.26 51.26 0 0116 2.85 75.79 75.79 0 0012.75-13.32 74.84 74.84 0 00-18.32-2.01zm-65.3 44.16a52.07 52.07 0 01-16 2.81 75 75 0 00-7.42 16.87 74.9 74.9 0 0017.9-4.39 51.59 51.59 0 015.52-15.29zm49.28-41.36a51.65 51.65 0 0116-2.8 73.9 73.9 0 007.43-16.87 74 74 0 00-17.91 4.38 51.57 51.57 0 01-5.52 15.29zm-30.23 52.37A51.45 51.45 0 0190.62 176a75.19 75.19 0 005.15 17.71 75.33 75.33 0 0010.91-14.91 51.67 51.67 0 01-5.59-15.27zm-10.5-3.82a51.75 51.75 0 01-14.1 8.1 74.38 74.38 0 00-1.2 18.41A75.4 75.4 0 0090.62 176a51.54 51.54 0 01-.03-16.29zm21.68-59.55a51.35 51.35 0 0110.47-12.45A75.3 75.3 0 00117.59 70a74.28 74.28 0 00-10.91 14.88 51.91 51.91 0 015.59 15.28z'/%3E%3Cpath fill='%2378be20' d='M122.77 104a51.44 51.44 0 0114.09-8.1 74.88 74.88 0 001.21-18.41 75.54 75.54 0 00-15.33 10.22 51.84 51.84 0 01.03 16.29z'/%3E%3Cpath d='M101.11 116.56A44.08 44.08 0 0090.59 104a44.16 44.16 0 005.63 15.41 43.87 43.87 0 00-14.18-8.22 43.49 43.49 0 0010.56 12.55 44 44 0 00-16.19-2.9A44 44 0 0090.66 129a43.9 43.9 0 00-16.16 2.82 43.9 43.9 0 0016.16 2.82 44 44 0 00-14.25 8.2A43.76 43.76 0 0092.6 140a43.62 43.62 0 00-10.56 12.55 44.05 44.05 0 0014.18-8.22 44.16 44.16 0 00-5.63 15.41 44.17 44.17 0 0010.52-12.61 44.1 44.1 0 000 16.4 44.15 44.15 0 005.59-15.42 44.15 44.15 0 005.59 15.42 44.11 44.11 0 000-16.4 44.36 44.36 0 0010.53 12.58 44 44 0 00-5.64-15.41 44.31 44.31 0 0014.19 8.22A43.78 43.78 0 00120.76 140a43.72 43.72 0 0016.15 2.87 44.22 44.22 0 00-14.22-8.18 43.86 43.86 0 0016.16-2.82 43.86 43.86 0 00-16.16-2.87 44.22 44.22 0 0014.22-8.18 44 44 0 00-16.16 2.87 43.53 43.53 0 0010.57-12.55 44.31 44.31 0 00-14.19 8.22 44 44 0 005.64-15.36 44.27 44.27 0 00-10.53 12.59 44.1 44.1 0 000-16.4 44 44 0 00-5.59 15.42 44 44 0 00-5.59-15.42 44.1 44.1 0 00.05 16.37z' fill='%23fff' fill-rule='evenodd'/%3E%3Cpath fill='%23ffd100' d='M101.11 116.56a44.1 44.1 0 010-16.4 51.31 51.31 0 00-10.49-12.45 51.54 51.54 0 000 16.26 44.08 44.08 0 0110.49 12.59zm11.13 30.57a44.11 44.11 0 010 16.4 51.68 51.68 0 0010.5 12.47 51.84 51.84 0 000-16.26 44.36 44.36 0 01-10.5-12.61zM90.59 104a51.49 51.49 0 00-14.1-8.1 51.59 51.59 0 005.55 15.29 43.87 43.87 0 0114.18 8.22A44.16 44.16 0 0190.59 104zm32.18 55.71a51.7 51.7 0 0014.09 8.1 51.57 51.57 0 00-5.54-15.29 44.31 44.31 0 01-14.19-8.22 44 44 0 015.64 15.41z'/%3E%3Cpath fill='%23ffd100' d='M92.6 123.71a43.49 43.49 0 01-10.56-12.55 51.76 51.76 0 00-16-2.8 51.35 51.35 0 0010.37 12.48 44 44 0 0116.19 2.87zM120.76 140a43.78 43.78 0 0110.56 12.55 52 52 0 0016 2.81 51.39 51.39 0 00-10.43-12.49 43.72 43.72 0 01-16.13-2.87zm-30.1-11a44 44 0 01-14.25-8.16 51.16 51.16 0 00-16 2.85 52 52 0 0014.07 8.15A43.9 43.9 0 0190.66 129zm32.03 5.66a44.22 44.22 0 0114.22 8.18 51.54 51.54 0 0016-2.84 51.65 51.65 0 00-14.08-8.16 43.86 43.86 0 01-16.14 2.82zm-48.19-2.82A51.74 51.74 0 0060.41 140a51.44 51.44 0 0016 2.84 44 44 0 0114.21-8.18 43.9 43.9 0 01-16.12-2.82zm64.35 0a51.88 51.88 0 0014.08-8.15 51.26 51.26 0 00-16-2.85 44.22 44.22 0 01-14.24 8.16 43.86 43.86 0 0116.16 2.84zM92.6 140a43.76 43.76 0 01-16.19 2.84 51.21 51.21 0 00-10.4 12.49 52.07 52.07 0 0016-2.81A43.62 43.62 0 0192.6 140zm28.15-16.29a44 44 0 0116.16-2.87 51.53 51.53 0 0010.43-12.48 51.65 51.65 0 00-16 2.8 43.53 43.53 0 01-10.59 12.55zm-19.66 39.82a51.67 51.67 0 005.59 15.27 52 52 0 005.59-15.27 44.15 44.15 0 01-5.59-15.42 44.15 44.15 0 01-5.59 15.42zm.02-16.4a44.17 44.17 0 01-10.52 12.58 51.54 51.54 0 000 16.26 51.45 51.45 0 0010.47-12.44 44.1 44.1 0 01.05-16.4zm-19.07 5.39a51.59 51.59 0 00-5.55 15.29 51.75 51.75 0 0014.1-8.1 44.16 44.16 0 015.63-15.41 44.05 44.05 0 01-14.18 8.22zm30.23-52.36a51.91 51.91 0 00-5.59-15.28 51.63 51.63 0 00-5.59 15.28 44 44 0 015.59 15.42 44 44 0 015.59-15.42zm-.03 16.4A44.27 44.27 0 01122.77 104a51.84 51.84 0 000-16.26 51.35 51.35 0 00-10.47 12.45 44.1 44.1 0 01-.06 16.37zm19.08-5.4a51.57 51.57 0 005.54-15.29 51.44 51.44 0 00-14.09 8.13 44 44 0 01-5.64 15.41 44.31 44.31 0 0114.19-8.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\"","module.exports = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1542 1542'%3E%3Cpath fill='none' d='M0 0h1542v1542H0z'/%3E%3ClinearGradient id='a' gradientUnits='userSpaceOnUse' x1='357.085' y1='478.08' x2='1299.339' y2='1022.091'%3E%3Cstop offset='0' stop-color='%23fd0'/%3E%3Cstop offset='.086' stop-color='%23ffca06'/%3E%3Cstop offset='.271' stop-color='%23f8971d'/%3E%3Cstop offset='.411' stop-color='%23f37021'/%3E%3Cstop offset='.46' stop-color='%23f47621'/%3E%3Cstop offset='.541' stop-color='%23f6881f'/%3E%3Cstop offset='.642' stop-color='%23faa31a'/%3E%3Cstop offset='.76' stop-color='%23ffcb05'/%3E%3Cstop offset='.81' stop-color='%23fd0'/%3E%3C/linearGradient%3E%3Cpath d='M1122.9 1052.4c-.1-.1-.2-.1-.3-.2-9.2-6.5-143.1-100.5-195.5-136.3l-8.9-.4c39.6 31.1 119.4 101.2 146.5 124.3 31 26.4 83.1 87.1 52 100.1-.8.3-1.7.6-2.7.9-35.6 6.7-111-10.1-209.1-47.6-113.6-43.4-247-110-281.1-167.8 0 0 343.2-212.7 482.6-307.1 178-120.6 107.7-217.9 68.4-245.1-48.5-33.5-135.3-46.5-224.2-49.7.2 0 .4 0 .6.1-1.2-.1-2.1-.1-2.3-.1H947h.7c-98.3-3.2-198.9 5.4-253.1 11.4-26.7 2.7-284.5 33.4-307.4 91.9-2.7 8.8-3.8 16.8 19.4 47.3 3.8 5 63.3 80.5 141.9 129.3h7.2c-59-45.2-93.6-89.6-101.8-117.5-.7-2.3-1.1-4.5-1.2-6.6-.6-10.7 2.3-22.9 23.5-29.5 21.3-6.6 127-17 236.3-8.3 111.5 8.8 188.4 26.4 214.4 50.4l-.4.3c-33.6 18.9-422.9 253.9-530 327.4-139.2 95.4-53.2 214.4-15.9 245.3 47.2 39.1 115.6 65.8 182.5 84.4.2.1.4.1.7.2.1 0 .3.1.4.1h-.2c79.2 21.9 156.2 32.3 193 38.4 59.2 9.7 426 74.1 454.2-14.4 15.4-49.1-67.3-106.5-88.3-121.2z' fill='url(%23a)'/%3E%3ClinearGradient id='b' gradientUnits='userSpaceOnUse' x1='918.299' y1='1028.13' x2='1151.008' y2='1028.13'%3E%3Cstop offset='0' stop-color='%23fbad18'/%3E%3Cstop offset='.211' stop-color='%23f89a1c'/%3E%3Cstop offset='.601' stop-color='%23f37021'/%3E%3C/linearGradient%3E%3Cpath d='M1116.8 1139.8c-.8.3-1.7.6-2.8.9.1 0 .2 0 .3-.1-.2 0-.3.1-.5.1-.1 0-.2 0-.3.1 12.3-2.7 20.4-5.8 25.2-9.6 0 0 26-19.3 2.3-56.9-3.5-6-18.1-21.9-18.1-21.9-.1-.1-.2-.1-.3-.2-9.2-6.5-143.1-100.5-195.5-136.3l-8.9-.4c39.6 31.1 119.4 101.2 146.5 124.3 31 26.3 83.1 86.9 52.1 100z' fill='url(%23b)'/%3E%3ClinearGradient id='c' gradientUnits='userSpaceOnUse' x1='385.782' y1='462.914' x2='947.624' y2='462.914'%3E%3Cstop offset='0' stop-color='%23fd0'/%3E%3Cstop offset='.614' stop-color='%23f37021'/%3E%3C/linearGradient%3E%3Cpath d='M548.5 603.2h7.2c-59-45.2-93.6-89.6-101.8-117.5-.7-2.3-1.1-4.5-1.2-6.6v.2c-1.8-15.7 2.8-44.8 80.6-83.5 103.9-51.6 363.5-72.6 414.4-72.5-98.3-3.2-198.9 5.4-253.1 11.4-26.7 2.7-284.5 33.4-307.4 91.9-2.7 8.8-3.8 16.8 19.4 47.3 3.8 5 63.3 80.5 141.9 129.3z' fill='url(%23c)'/%3E%3ClinearGradient id='d' gradientUnits='userSpaceOnUse' x1='319.891' y1='736.313' x2='1222.156' y2='736.313'%3E%3Cstop offset='0' stop-color='%23f37021'/%3E%3Cstop offset='.033' stop-color='%23f47920'/%3E%3Cstop offset='.208' stop-color='%23faa31b'/%3E%3Cstop offset='.357' stop-color='%23ffc30d'/%3E%3Cstop offset='.472' stop-color='%23ffd600'/%3E%3Cstop offset='.54' stop-color='%23fd0'/%3E%3Cstop offset='.607' stop-color='%23ffd200'/%3E%3Cstop offset='.738' stop-color='%23fdb515'/%3E%3Cstop offset='.917' stop-color='%23f6871f'/%3E%3Cstop offset='1' stop-color='%23f37021'/%3E%3C/linearGradient%3E%3Cpath d='M489.2 1094.6c-16.1-30.2-18.3-69.9 46.7-113.1 11.9-7.9 45.3-29.2 87.9-56.1 0 0 343.2-212.7 482.6-307.1 178-120.6 107.7-217.9 68.4-245.1-48.5-33.5-135.3-46.5-224.2-49.7 11.5.9 73.3 8.9 78.7 66.3 3.6 37.9-60.8 76.9-102.5 102l-.4.3C892.8 511 503.5 746 396.4 819.5c-139.2 95.4-53.2 214.4-15.9 245.3 47.3 39.2 115.9 66 182.9 84.5-33.8-9.7-60.7-29.7-74.2-54.7z' fill='url(%23d)'/%3E%3ClinearGradient id='e' gradientUnits='userSpaceOnUse' x1='563.93' y1='1135.891' x2='1213.047' y2='1135.891'%3E%3Cstop offset='0' stop-color='%23f37021'/%3E%3Cstop offset='1' stop-color='%23fd0'/%3E%3C/linearGradient%3E%3Cpath d='M1122.9 1052.4s14.6 15.9 18.1 21.9c23.7 37.6-2.3 56.9-2.3 56.9-4.7 3.7-12.6 6.9-24.5 9.5h.1c-.1 0-.2 0-.3.1-.2 0-.4.1-.5.1.1 0 .2 0 .3-.1-1.6.4-3.4.7-5.5 1-77.9 11.9-515.3 15.3-544.4 7.6 79.2 21.9 156.2 32.3 193 38.4 59.2 9.7 426 74.1 454.2-14.4 15.5-48.9-67.2-106.3-88.2-121z' fill='url(%23e)'/%3E%3C/svg%3E\"","module.exports = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 320'%3E%3Cpath fill='%23ED1B2D' d='M107.526 166.782c0-19.18 15.554-34.74 34.725-34.74 19.181 0 34.733 15.56 34.733 34.74 0 19.194-15.553 34.724-34.733 34.724-19.171 0-34.725-15.529-34.725-34.724m34.697 15.943c8.793 0 15.912-7.127 15.912-15.928 0-8.793-7.119-15.928-15.912-15.928-8.807 0-15.913 7.135-15.913 15.928 0 8.801 7.106 15.928 15.913 15.928z'/%3E%3Cpath fill='%23006BB6' d='M10 110h29.038l16.412 55.006h.234L72.361 110h28.245v89.593H81.931v-63.36h-.248l-17.911 63.36h-17.16l-17.675-63.36h-.249v63.36H10V110m252.305 17.66h18.674V110h-18.674v17.66zm0 71.933h18.674v-65.635h-18.674v65.635zm29.022 0H310V110h-18.673v89.593zm-106.511 0h18.666v-5.814c4.8 5.306 10.855 7.333 17.924 7.333 18.806 0 33.074-15.766 33.074-34.205 0-18.409-14.145-34.446-33.074-34.446-6.812 0-12.734 2.136-17.924 6.568V110h-18.666v89.593m18.894-32.796c0-8.793 7.111-15.928 15.912-15.928s15.921 7.135 15.921 15.928c0 8.801-7.12 15.928-15.921 15.928s-15.912-7.127-15.912-15.928z'/%3E%3C/svg%3E\"","module.exports = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.165 0.5 299.67 210'%3E%3Cpath d='M.165 105.5c0 28.95 23.558 52.5 52.519 52.5 28.954 0 52.511-23.55 52.511-52.5S81.638 53 52.684 53C23.723 53 .165 76.55.165 105.5' fill='%23fff'/%3E%3Cpath d='M102.825 105.5c0 27.675-22.459 50.138-50.141 50.138S2.543 133.174 2.543 105.5 25 55.362 52.683 55.362s50.143 22.463 50.143 50.138' fill='%23ed1b2e'/%3E%3Cpath d='M52.654 55.363C24.979 55.4 2.543 77.825 2.543 105.5c0 16.463 7.946 31.088 20.208 40.238z' fill='%23004c5f'/%3E%3Cpath d='M41.783 88.025H6.323l28.62 20.7zm10.901-32.662L41.816 88.025h23.037z' fill='%23fff'/%3E%3Cpath d='M34.935 108.725l-11.91 36.113 29.659-22.125 32.205 21.6-12.251-35.625L99.57 88.025z' fill='%23fff'/%3E%3Cg fill='%23004c5f'%3E%3Cpath d='M156.36 122.637l13.012-34.687h7.56l12.747 34.687h-7.785l-8.73-25.875-8.599 25.875z'/%3E%3Cpath d='M165.589 122.637l7.575-6.075 7.447 6.075zM193.68 87.95h7.628v28.35h12.037v6.337H193.68zm16.721 0h24.544v6.262h-8.584v28.5h-7.8v-28.5h-8.16zm29.449.075h19.32v6.187h-11.771v7.65h11.092v6.263H247.4v8.1h15.078l-5.16 6.487H239.85zm25.444 0h10.005l5.561 9.712 5.438-9.712h9.975l-10.864 15.75 14.426 18.937h-9.675l-9.023-12.337-9.24 12.337h-9.757l14.183-18.862zm-111.259 9.187v-7.575c-8.408-3.937-17.243-1.162-22.658 7.163-3.847 6.6-3.337 13.125 1.53 19.65 4.208 5.212 11.19 7.837 21.128 5.4v-7.988c-6.266 3.338-13.598 1.875-16.53-3.262-3.259-7.838 1.264-15.113 7.594-15.713 3.285-.262 6.6.375 8.936 2.325'/%3E%3C/g%3E%3C/svg%3E\"","module.exports = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1000' height='534.513' viewBox='0 0 1000 534.513'%3E%3Cdefs%3E%3ClinearGradient x1='0' y1='0' x2='1' y2='0' gradientUnits='userSpaceOnUse' gradientTransform='matrix(41.2909 0 0 -41.2909 85.972 493.404)' spreadMethod='pad' id='i'%3E%3Cstop offset='0' stop-color='%23ee3124'/%3E%3Cstop offset='1' stop-color='%23f9a13b'/%3E%3C/linearGradient%3E%3ClinearGradient x1='0' y1='0' x2='1' y2='0' gradientUnits='userSpaceOnUse' gradientTransform='matrix(41.28825 0 0 -41.28825 85.97 502.21)' spreadMethod='pad' id='g'%3E%3Cstop offset='0' stop-color='%23ee3124'/%3E%3Cstop offset='1' stop-color='%23f9a13b'/%3E%3C/linearGradient%3E%3ClinearGradient x1='0' y1='0' x2='1' y2='0' gradientUnits='userSpaceOnUse' gradientTransform='matrix(41.29552 0 0 -41.29552 85.968 502.21)' spreadMethod='pad' id='f'%3E%3Cstop offset='0' stop-color='%23ee3124'/%3E%3Cstop offset='1' stop-color='%23f9a13b'/%3E%3C/linearGradient%3E%3ClinearGradient x1='0' y1='0' x2='1' y2='0' gradientUnits='userSpaceOnUse' gradientTransform='matrix(41.29144 0 0 -41.29144 85.97 502.202)' spreadMethod='pad' id='e'%3E%3Cstop offset='0' stop-color='%23ee3124'/%3E%3Cstop offset='1' stop-color='%23f9a13b'/%3E%3C/linearGradient%3E%3ClinearGradient x1='0' y1='0' x2='1' y2='0' gradientUnits='userSpaceOnUse' gradientTransform='matrix(41.29606 0 0 -41.29606 85.97 502.373)' spreadMethod='pad' id='d'%3E%3Cstop offset='0' stop-color='%23ee3124'/%3E%3Cstop offset='1' stop-color='%23f9a13b'/%3E%3C/linearGradient%3E%3ClinearGradient x1='0' y1='0' x2='1' y2='0' gradientUnits='userSpaceOnUse' gradientTransform='matrix(41.29695 0 0 -41.29695 85.97 500.41)' spreadMethod='pad' id='c'%3E%3Cstop offset='0' stop-color='%23ee3124'/%3E%3Cstop offset='1' stop-color='%23f9a13b'/%3E%3C/linearGradient%3E%3ClinearGradient x1='0' y1='0' x2='1' y2='0' gradientUnits='userSpaceOnUse' gradientTransform='matrix(41.28434 0 0 -41.28434 85.971 502.23)' spreadMethod='pad' id='b'%3E%3Cstop offset='0' stop-color='%23ee3124'/%3E%3Cstop offset='1' stop-color='%23f9a13b'/%3E%3C/linearGradient%3E%3ClinearGradient x1='0' y1='0' x2='1' y2='0' gradientUnits='userSpaceOnUse' gradientTransform='matrix(41.28416 0 0 -41.28416 85.97 502.202)' spreadMethod='pad' id='a'%3E%3Cstop offset='0' stop-color='%23ee3124'/%3E%3Cstop offset='1' stop-color='%23f9a13b'/%3E%3C/linearGradient%3E%3CclipPath clipPathUnits='userSpaceOnUse' id='h'%3E%3Cpath d='M87.49 490.929c-1.943-.669-3.084-.626-3.188-.125-.083.385.922 1.101 2.362 1.63 0 0 9.911 4.043 31.617 3.945 1.207-.003 2.188-.036 2.188-.131 0-.149-1.617-.202-2.256-.23 0 0-16.827-.277-30.723-5.089'/%3E%3C/clipPath%3E%3C/defs%3E%3Cpath d='M205.15 172.666c-11.272 45.245-52.436 78.394-100.763 78.394-57.5 0-103.888-46.532-103.888-104.017C.5 89.86 46.887 43.299 104.387 43.299c48.327 0 89.173 33.625 100.762 78.712h-42.118c-9.65-22.543-32.02-37.895-57.82-37.895-34.957 0-63.214 28.258-63.214 62.925 0 34.958 28.257 63.534 63.215 63.534 25.799 0 48.167-15.67 57.819-37.909h42.118m106.319 37.258c-34.797 0-62.724-28.258-62.724-62.883 0-34.335 27.925-62.592 62.725-62.592 34.624 0 62.549 28.257 62.549 62.594 0 34.623-27.925 62.88-62.55 62.88zm0-166.625c-57.485 0-104.032 46.562-104.032 103.742 0 57.487 46.547 104.019 104.032 104.019 57.153 0 103.54-46.532 103.54-104.017 0-57.183-46.387-103.744-103.54-103.744m111.86 205.142h45.589V.5h-45.588v247.941zM575.876 80.86c26.305 0 48.167 18.304 51.307 41.498l-51.307-.203-50.483-.145-.97.666c2.938-23.512 24.829-41.816 51.453-41.816zm4.412 131.321c-1.461 0-2.937 0-4.412-.145-30.038-1.952-54.072-24.683-54.23-51.466.332-.997.332-2.286.332-3.255h149.278c0-82.17-42.482-113.365-94.715-113.365h-.665c-40.5.319-98.318 26.623-97.97 103.093-.348 63.677 45.866 105 97.97 105h.665c45.23.333 83.443-26.94 92.76-72.185h-41.83c-6.67 20.43-24.64 32.325-47.183 32.325m214.938-103.397h39.515s1.462-35.262-27.925-52.9c0 0-13.89-12.906-52.74-12.906 0 0-39.212-.332-57.182 17.291 0 0-18.288 13.89-18.288 41.164 0 0-3.588 26.32 22.557 42.959 0 0 20.719 9.984 40.975 15.887 0 0 33.15 8.942 38.546 12.053 0 0 28.229 13.239 11.258 29.575 0 0-7.365 10.62-32.975 10.967 0 0-45.086 1.607-45.086-32.86h-40.007s-3.907 36.448 27.288 56.675c0 0 19.591 13.385 57.805 13.095 0 0 36.91-.362 56.515-14.396 0 0 24.975-17.956 24.975-48.834 0 0 3.225-31.875-36.593-49.527 0 0-40.195-13.543-50.469-16.016 0 0-39.515-8.638-31.512-28.563 0 0 1.62-13.542 33.466-13.542 0 0 22.543-.667 32.194 12.24 0 0 6.684 7.668 7.683 17.637' fill='%23ee3124'/%3E%3Cpath d='M75.148 500.624c-.555-.77-1.379-1.2-2.258-1.2-1.237 0-2.078.914-2.078 2.456h6.327c.033.431.051.734.051.93 0 2.369-1.469 3.855-3.691 3.855-2.687 0-4.639-2.007-4.639-4.875 0-2.437 1.666-4.05 4.119-4.05 1.49 0 2.564.573 3.532 1.827l-1.363 1.057zm-4.174 2.601c.233 1.109 1.164 1.808 2.435 1.808 1.112 0 1.811-.68 1.847-1.808h-4.282' transform='matrix(14.46903 0 0 -14.46903 -747.607 7630.021)' fill='url(%23a)'/%3E%3Cpath d='M79.57 502.417l-2.383 3.962h2.114l1.147-2.026c.144-.252.322-.504.412-.824.233.41.43.698.591.875l1.649 1.975h2.221l-3.404-3.979 2.563-4.318h-2.151l-1.38 2.597a3.342 3.342 0 00-.269.643c-.341-.482-.519-.787-.591-.86l-1.951-2.38h-2.223l3.655 4.335' transform='matrix(14.46903 0 0 -14.46903 -747.607 7630.021)' fill='url(%23b)'/%3E%3Cpath d='M85.972 506.379l-1.614-12.223h1.883l.663 5.088c.823-.947 1.774-1.415 2.903-1.415 2.276 0 3.906 1.937 3.906 4.93 0 2.526-1.236 3.906-3.404 3.906-1.005 0-1.865-.376-2.636-1.165l.09.879h-1.791zm5.789-3.89c0-1.991-.898-3.171-2.331-3.171-1.343 0-2.185.931-2.185 2.331 0 2.148.966 3.349 2.472 3.349 1.272 0 2.044-.877 2.044-2.509' transform='matrix(14.46903 0 0 -14.46903 -747.607 7630.021)' fill='url(%23c)'/%3E%3Cpath d='M98.468 504.998c-1.362 0-2.097-1.005-2.365-3.028l-.52-3.888h-1.882l1.094 8.297h1.81l-.144-1.08c.664.917 1.433 1.366 2.33 1.366.412 0 .804-.109 1.183-.322l-.611-1.634a1.432 1.432 0 01-.895.289' transform='matrix(14.46903 0 0 -14.46903 -747.607 7630.021)' fill='url(%23d)'/%3E%3Cpath d='M105.333 500.624c-.555-.77-1.378-1.2-2.257-1.2-1.235 0-2.078.914-2.078 2.456h6.324c.038.431.055.734.055.93 0 2.369-1.467 3.855-3.691 3.855-2.688 0-4.641-2.007-4.641-4.875 0-2.437 1.667-4.05 4.12-4.05 1.489 0 2.563.573 3.531 1.827l-1.363 1.057zm-4.176 2.601c.235 1.109 1.167 1.808 2.44 1.808 1.108 0 1.807-.68 1.845-1.808h-4.285' transform='matrix(14.46903 0 0 -14.46903 -747.607 7630.021)' fill='url(%23e)'/%3E%3Cpath d='M110.281 499.192c.805 0 1.307.395 1.307.967 0 .644-.519.915-1.396 1.399-1.309.734-2.062 1.271-2.062 2.49 0 1.542 1.236 2.63 3.118 2.63 1.127 0 2.077-.408 2.922-1.269l-1.167-1.198c-.537.663-1.218 1.001-1.952 1.001-.611 0-1.076-.413-1.076-.895 0-.772.736-.912 1.757-1.488 1.112-.612 1.702-1.18 1.702-2.367 0-1.628-1.201-2.722-3.19-2.722-1.271 0-2.4.519-3.243 1.525l1.092 1.255c.629-.88 1.399-1.328 2.188-1.328' transform='matrix(14.46903 0 0 -14.46903 -747.607 7630.021)' fill='url(%23f)'/%3E%3Cpath d='M116.86 499.192c.806 0 1.308.395 1.308.967 0 .644-.519.915-1.397 1.399-1.308.734-2.062 1.271-2.062 2.49 0 1.542 1.236 2.63 3.118 2.63 1.13 0 2.078-.408 2.921-1.269l-1.165-1.198c-.537.663-1.218 1.001-1.952 1.001-.61 0-1.077-.413-1.077-.895 0-.772.736-.912 1.756-1.488 1.112-.612 1.702-1.18 1.702-2.367 0-1.628-1.2-2.722-3.189-2.722-1.271 0-2.399.519-3.243 1.525l1.094 1.255c.627-.88 1.398-1.328 2.186-1.328' transform='matrix(14.46903 0 0 -14.46903 -747.607 7630.021)' fill='url(%23g)'/%3E%3Cg clip-path='url(%23h)' transform='matrix(14.46903 0 0 -14.46903 -747.607 7630.021)'%3E%3Cpath d='M51.704 527.3v-36.873h69.044V527.3' fill='url(%23i)'/%3E%3C/g%3E%3C/svg%3E\"","module.exports = \"data:image/svg+xml,%3Csvg width='734' height='324' viewBox='0 0 734 324' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='M0 323.548h733.711V0H0z'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M10.299 159.166c0 81.06 156.619 144.56 356.557 144.56 199.937 0 356.557-63.5 356.557-144.56 0-81.057-156.62-144.549-356.558-144.549S10.298 78.11 10.298 159.167' fill='%23FFFFFE'/%3E%3Cpath d='M715.067 159.166c0 75.213-155.9 136.183-348.212 136.183-192.312 0-348.21-60.97-348.21-136.183 0-75.21 155.898-136.18 348.21-136.18 192.311 0 348.212 60.97 348.212 136.18' fill='%23005992'/%3E%3Cpath d='M283.917 240.376h-64.832v-127.68H193.75v127.68H128.91v-127.68h-17.88V83.167h108.055c13.743 0 26.469 2.588 38.207 7.742 5.24 2.364 10.806 6.073 16.666 11.144 6.645 5.803 9.959 12.01 9.959 18.62v119.703z' fill='%23FFFFFE'/%3E%3Cmask id='b' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3C/mask%3E%3Cpath d='M359.929 210.843h25.344V112.7h-25.344v98.143zm90.167-8.109c0 9.695-6.549 18.439-19.647 26.225-3.287 1.996-7.731 3.943-13.343 5.846-10.784 3.713-21.381 5.571-31.833 5.571h-25.348v66.443H297.33V120.695c0-6.535 2.883-12.648 8.643-18.36 1.095-1.086 3.499-2.938 7.239-5.569 12.925-9.065 28.492-13.595 46.713-13.595h25.348c10.913 0 21.759 1.946 32.528 5.838 10.139 3.807 18.054 8.564 23.749 14.27 5.695 5.709 8.546 11.868 8.546 18.479v80.976zM529.509 210.843h26.83V112.7h-26.83v98.143zm90.173-8.081c0 13.762-11.021 24.437-33.023 32.051-10.784 3.705-21.316 5.563-31.631 5.563h-25.519c-11.389 0-22.314-1.881-32.762-5.643-10.459-3.756-18.307-8.586-23.536-14.468-5.695-6.516-8.536-12.731-8.536-18.619v-80.973c0-6.25 3.143-12.276 9.455-18.076 7.381-6.787 15.314-11.407 23.763-13.859 9.393-3.711 19.932-5.567 31.616-5.567h26.83V16.725h63.343v186.037z' fill='%23FFFFFE' mask='url(%23b)'/%3E%3Cpath d='M366.433 204.309h12.306v-85.508h-12.306v85.508zm-13.282 13.282h38.872V105.519h-38.872v112.072z' fill='%23FFFFFE' mask='url(%23b)'/%3E%3Cpath d='M613.774 203.245c0 10.637-9.71 19.377-28.852 25.973-10.145 3.482-20.162 5.248-29.771 5.248h-25.765c-10.668 0-21.041-1.782-30.83-5.29-9.458-3.393-16.533-7.675-20.999-12.693-4.625-5.276-6.967-10.105-6.967-14.355V120.62c0-4.393 2.415-8.74 7.385-13.295 6.657-6.1 13.837-10.296 21.349-12.469l.584-.2c8.664-3.413 18.583-5.144 29.478-5.144h33.726V22.638h50.662v180.607zm-169.589-.454c0 7.194-5.58 14.15-16.63 20.71-2.909 1.76-7 3.525-12.197 5.277-10.132 3.482-20.217 5.251-29.977 5.251h-32.23v66.881h-49.91V120.208c0-4.763 2.21-9.263 6.756-13.76.377-.375 1.761-1.598 6.44-4.88 11.854-8.286 26.442-12.488 43.355-12.488h25.589c10.197 0 20.491 1.844 30.514 5.456 9.292 3.48 16.562 7.801 21.611 12.847 4.496 4.488 6.679 9.031 6.679 13.892v81.516zm-166.18 31.675h-52.096V105.601h-38.833v128.865h-52.105V105.601h-18.029V89.076h102.326c12.847 0 24.911 2.44 35.796 7.226 4.707 2.125 9.818 5.562 15.169 10.192 5.23 4.573 7.772 9.084 7.772 13.793v114.18zM549.828 9.356v66.873h-20.442c-12.452 0-23.909 2.003-34.059 5.955-9.379 2.77-18.235 7.931-26.326 15.347-7.404 6.783-11.282 14.17-11.624 21.965-.469-7.769-3.965-15.003-10.482-21.51-6.4-6.395-15.26-11.74-26.419-15.917-11.552-4.16-23.359-6.27-35.095-6.27h-25.589c-19.688 0-36.836 5.005-50.975 14.887-5.419 3.803-7.21 5.376-8.162 6.32-5.407 5.345-8.768 11.15-10.07 17.314-1.482-6.38-5.36-12.363-11.633-17.848-6.348-5.494-12.545-9.624-18.483-12.304-12.639-5.558-26.501-8.374-41.201-8.374H103.66v43.09h18.029v128.863h78.669V118.883h12.27v128.864h77.332v66.445h76.473v-66.88h18.948c11.234 0 22.772-2.01 34.252-5.959 6.163-2.072 11.003-4.195 14.746-6.455 14.939-8.863 22.637-19.362 23.016-31.202.444 7.071 3.835 14.312 10.203 21.578 5.994 6.734 14.901 12.256 26.474 16.404 11.235 4.025 23.114 6.07 35.314 6.07h25.765c11.079 0 22.544-2.009 34.093-5.966 25.092-8.65 37.816-21.618 37.816-38.537V9.355h-77.232z' fill='%23FFFFFE' mask='url(%23b)'/%3E%3Cpath d='M536.03 204.742h13.798v-85.505H536.03v85.505zm-13.285 13.282h40.367V105.955h-40.367v112.069z' fill='%23FFFFFE' mask='url(%23b)'/%3E%3Cpath d='M283.919 240.376h-64.833v-127.68h-25.334v127.68h-64.84v-127.68h-17.875V83.167h108.049c13.744 0 26.47 2.588 38.21 7.742 5.238 2.364 10.803 6.073 16.664 11.144 6.645 5.803 9.959 12.01 9.959 18.62v119.703zM359.933 210.843h25.347V112.7h-25.347v98.143zm90.17-8.109c0 9.695-6.556 18.439-19.65 26.225-3.291 1.996-7.732 3.943-13.347 5.846-10.776 3.713-21.374 5.571-31.826 5.571h-25.351v66.443h-62.595V120.695c0-6.535 2.879-12.648 8.645-18.36 1.089-1.086 3.493-2.938 7.237-5.569 12.925-9.065 28.492-13.595 46.713-13.595h25.351c10.914 0 21.756 1.946 32.525 5.838 10.143 3.807 18.058 8.564 23.752 14.27 5.696 5.709 8.546 11.868 8.546 18.479v80.976zM529.509 210.843h26.834V112.7h-26.834v98.143zm90.173-8.081c0 13.762-11.018 24.437-33.019 32.051-10.781 3.705-21.32 5.563-31.627 5.563h-25.527c-11.381 0-22.31-1.881-32.762-5.643-10.452-3.756-18.303-8.586-23.53-14.468-5.698-6.516-8.535-12.731-8.535-18.619v-80.973c0-6.25 3.14-12.276 9.45-18.076 7.383-6.787 15.316-11.407 23.761-13.859 9.397-3.711 19.939-5.567 31.616-5.567h26.834V16.725h63.339v186.037z' fill='%23DB352A' mask='url(%23b)'/%3E%3C/g%3E%3C/svg%3E\"","module.exports = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 563.16 158.39'%3E%3Cpath fill='%236d6e6e' d='M162.707 64.739h-7.05c.292-1.86.547-3.563.84-5.25s.63-3.345.892-5.025c.128-.81.45-1.185 1.335-1.155 1.778.06 3.563 0 5.348 0 .607 0 .922-.098 1.035-.825 2.332-14.85 12.81-25.313 27.75-27.886 6.585-1.132 13.11-1.304 19.59.496a18.15 18.15 0 018.737 5.04c4.635 4.995 2.94 13.95-2.527 17.355-6.075 3.787-12.36 3.825-18.795 1.117-1.14-.48-1.298-1.147-.51-2.407a14.25 14.25 0 001.972-5.753c.33-2.355-.127-4.44-2.31-5.715s-4.447-.945-6.585.293c-2.535 1.5-3.675 3.802-4.095 6.607a21.563 21.563 0 00.18 7.568c.263 1.297.368 2.625.57 4.102h1.305c5.948 0 11.903-.06 17.858 0 4.425.06 8.475 1.313 11.655 4.553 3.54 3.6 4.642 8.047 3.825 12.9-1.898 11.197-3.938 22.364-5.918 33.547-.532 3-1.035 5.963-1.56 8.947-.277 1.56-.352 1.62-1.89 1.62h-21.885c-1.642 0-1.65 0-1.335-1.687a3414.637 3414.637 0 006.135-32.092c.638-3.42 1.103-6.893.39-10.38-.817-4.013-2.595-5.573-6.712-6-3.263-.315-3.33-.323-3.908 2.827-1.215 6.623-2.347 13.268-3.517 19.905q-2.303 13.118-4.553 26.198a1.313 1.313 0 01-1.5 1.275q-11.04-.045-22.072 0c-.96 0-1.223-.24-1.043-1.268 1.658-9.39 3.263-18.795 4.883-28.192q1.732-10.08 3.48-20.145c-.03-.113-.038-.225-.015-.57zM319.404 106.1c-.855 4.792-1.732 9.592-2.565 14.393q-1.755 10.072-3.45 20.144a1.252 1.252 0 01-1.455 1.193q-11.43-.045-22.86 0c-1.087 0-1.29-.375-1.125-1.343q1.763-10.072 3.473-20.137c1.425-8.318 2.82-16.643 4.252-24.96 1.08-6.3 2.25-12.593 3.278-18.9a33.045 33.045 0 00.405-9.953c-.3-2.25-1.148-4.162-3.06-5.467-.9-.615-.893-1.238-.36-2.085a17.145 17.145 0 016.922-5.91c4.11-2.138 8.415-3.09 13.058-2.085a12.668 12.668 0 0110.252 11.767c0 .45.083.885.15 1.65.585-.75.975-1.275 1.387-1.785 3.645-4.545 7.688-8.662 13.275-10.717 9-3.3 18-.705 22.77 8.827 2.513 5.055 3.21 10.5 3.053 16.028a51.045 51.045 0 01-5.385 21.412c-3.308 6.698-7.823 12.345-14.438 16.073a22.223 22.223 0 01-14.685 2.692c-5.565-.862-9.195-4.305-11.737-9.112-.308-.593-.585-1.2-.878-1.808zm22.14-28.74a34.5 34.5 0 00-.862-5.048c-1.373-4.672-6.143-6.322-10.103-3.465a16.545 16.545 0 00-3.855 3.96c-2.468 3.548-3.548 7.65-4.238 11.865-.63 3.848-.825 7.673.443 11.445 1.417 4.215 5.512 5.79 9.42 3.638a13.05 13.05 0 005.032-5.25c2.843-5.025 3.923-10.47 4.163-17.145zm142.717 25.605a36.322 36.322 0 01-7.942 8.663c-4.08 3.112-8.61 5.07-13.8 5.167-6.908.135-12-3.99-13.5-10.77-.863-3.87-.338-7.672.315-11.505 1.2-7.012 2.437-14.017 3.397-21.067a24.18 24.18 0 00-.375-6.878c-.397-2.542-2.19-4.177-4.402-5.317-.998-.51-1.05-1.065-.488-1.958a16.357 16.357 0 015.483-5.025c4.59-2.872 9.525-4.035 14.887-2.812a13.747 13.747 0 0110.808 12.75c.262 3.75-.653 7.372-1.29 11.025-1.035 5.887-2.145 11.76-3.18 17.647a17.415 17.415 0 00-.143 3.068c0 1.5.413 2.82 1.853 3.517s2.76.188 3.952-.637a16.313 16.313 0 005.138-6.075c1.583-3 2.16-6.345 2.738-9.683 1.62-9.472 3.322-18.93 4.965-28.402a1.245 1.245 0 011.432-1.215h22.185c.968 0 1.163.367 1.013 1.23-.75 4.29-1.425 8.587-2.153 12.877q-2.107 12.548-4.245 25.08c-1.095 6.383-1.972 12.81-3.45 19.103-2.377 10.125-7.612 18.517-16.41 24.382a38.94 38.94 0 01-20.662 6.413 32.828 32.828 0 01-10.373-.96c-5.872-1.696-10.792-4.77-14.04-10.11a17.025 17.025 0 01-2.445-9.893 3.623 3.623 0 01.473-1.597 1.432 1.432 0 012.377-.48 9.502 9.502 0 011.695 1.754c7.65 10.2 22.65 9.646 30.105 1.5a17.168 17.168 0 004.268-8.767c.622-3.382 1.207-6.75 1.807-10.17a7.11 7.11 0 00.008-.855zm-73.792 1.043c-2.19 2.317-4.252 4.694-6.525 6.847a22.747 22.747 0 01-11.31 6.18c-8.857 1.732-16.538-2.37-20.093-10.68-2.542-5.917-3.067-12.098-2.482-18.473a49.08 49.08 0 018.572-23.774c3.953-5.656 8.926-10.133 15.646-12.24 4.5-1.403 9.045-1.576 13.5.164 4.32 1.68 6.945 5.1 8.895 9.135l.51 1.043c.502-2.685 1.004-5.1 1.387-7.538.165-1.02.555-1.387 1.62-1.38h22.867c1.2 0 1.32.15 1.088 1.305-1.785 8.82-3.615 17.64-5.333 26.483-.922 4.785-1.755 9.6-2.422 14.43a22.582 22.582 0 00.135 5.775 7.665 7.665 0 003.592 5.782c1.2.75 1.2 1.08.435 2.303a15.705 15.705 0 01-5.505 4.995 20.55 20.55 0 01-12.322 3.143c-6.99-.533-11.775-5.445-12.173-12.623-.06-.307-.067-.6-.082-.877zm4.223-25.733a16.965 16.965 0 00-1.238-7.223 6 6 0 00-7.41-3.442c-3.435.99-5.505 3.555-7.035 6.54a33.51 33.51 0 00-3.683 17.445 17.362 17.362 0 001.08 4.95c1.125 3 3.675 4.417 6.878 3.848 2.962-.526 4.965-2.49 6.547-4.883 3.443-5.19 4.643-11.078 4.86-17.205zM250.974 90.981a10.77 10.77 0 005.64 8.25 17.513 17.513 0 007.86 2.085c7.192.307 13.837-1.74 20.205-4.883a2.393 2.393 0 01.705-.352c.585-.068 1.185-.053 1.77-.068 0 .6.277 1.373 0 1.778-1.695 2.452-3.263 5.062-5.325 7.177-5.895 6.045-12.915 10.373-21.3 11.88-10.2 1.838-19.5-.135-26.903-7.935a25.74 25.74 0 01-7.117-20.107c1.2-17.348 10.642-28.838 26.362-35.303a37.672 37.672 0 0126.798-.885 19.05 19.05 0 0110.5 7.913c3.502 5.587 3.382 11.4.712 17.25-2.377 5.25-6.622 8.512-11.707 10.747-6.75 3-13.89 3.578-21.158 3.098-2.287-.143-4.612-.42-7.042-.645zm.75-10.875c2.295 0 4.373.12 6.435 0a13.808 13.808 0 007.08-2.482 10.328 10.328 0 004.605-7.973 4.688 4.688 0 00-5.617-5.01 11.078 11.078 0 00-6.368 3.367c-3.225 3.3-4.635 7.583-6.09 12.098zm-95.528-53.145c-.292 1.763-.555 3.397-.832 5.025l-3.353 19.237q-2.107 12-4.215 24.038c-1.095 6.262-2.25 12.525-3.232 18.803a21.75 21.75 0 00.15 7.912 7.575 7.575 0 003.607 5.137c1.208.75 1.365 1.306.428 2.37a22.117 22.117 0 01-3.9 3.593c-4.35 3-9.105 4.703-14.497 4.448-7.186-.353-12.6-5.543-12.646-12.75a61.807 61.807 0 011.17-10.5c2.033-12.128 4.155-24.24 6.278-36.36 1.732-9.915 3.518-19.823 5.25-29.738.18-1.005.608-1.357 1.657-1.357 7.583.045 15.165 0 22.748 0 .405.075.81.112 1.388.142zM84.07 84.306a5.25 5.25 0 01.405 1.005l.12.45-.42.248c-.323.232-.653.457-.983.675-2.767 1.845-8.625 4.402-12.412 4.402a6.3 6.3 0 01-.75-.045c-1.545-.18-3.502-.862-4.11-3.12a6.135 6.135 0 01.877-4.133c1.778-2.804 6-4.544 8.903-4.544h.27a9 9 0 018.1 5.062zm31.942-29.625c.24-1.207.15-1.327-1.147-1.327h-22.14c-1.74 0-1.74 0-2.04 1.77-.39 2.25-.833 4.5-1.298 7.057-.247-.51-.382-.795-.525-1.072-1.897-3.915-4.432-7.253-8.602-8.94-4.5-1.808-9.053-1.635-13.553-.233-6.69 2.093-11.61 6.578-15.54 12.21a48.81 48.81 0 00-8.377 22.763c-.75 6.405-.263 12.75 2.34 18.75 4.747 10.957 14.767 13.11 23.302 9.75.315-.173.645-.36.968-.563 1.41-1.117 3.405-2.535 3.405-2.535a34.072 34.072 0 005.062-4.792 30.352 30.352 0 006.173-11.483l.187-.75-.637.398a35.168 35.168 0 01-3.983 2.115c-4.207 1.897-8.25 2.632-11.91 2.19a12.592 12.592 0 01-8.355-4.778 12.293 12.293 0 01-2.52-9.202c.465-3.518 2.88-7.628 6-10.238a22.567 22.567 0 0113.665-4.688 15.795 15.795 0 013.57.383 18.263 18.263 0 0111.168 7.74l.21.315.262-.277a28.178 28.178 0 004.778-7.26 26.918 26.918 0 001.372-4.223c.405-1.59.645-2.422 1.193-2.64a.75.75 0 01.592 0c.405.195.6.75.75 1.29 1.59 5.04-.907 12.848-6.277 19.83l-.083.105v.128c.84 4.98.113 10.597-2.1 16.252a44.895 44.895 0 01-5.662 10.17 12.473 12.473 0 007.365 3.75c5.722.9 10.777-.832 15.27-4.237a26.182 26.182 0 003.75-4.08.968.968 0 00-.36-1.598c-3.21-1.875-3.998-4.957-4.125-8.347-.165-4.313.75-8.498 1.59-12.683q3.135-15.51 6.262-31.02z'/%3E%3C/svg%3E\"","import { ErrorCustomDataSymbol } from 'utils/ErrorCustomDataSymbol';\nimport { telemetry } from 'utils/telemetry';\n\nexport function globalHandleError(error: Error, customData?: { [key: string]: any }) {\n customData = Object.assign({}, customData, error[ErrorCustomDataSymbol]);\n\n if (typeof error.message !== 'string' || typeof error.stack !== 'string') {\n customData!.originalError = error;\n error = new Error(\n `Error of unexpected type. The original error value is stored in the 'originalError' property.`,\n );\n }\n\n // tslint:disable-next-line:no-console\n console.error(error, { customData });\n telemetry.trackException(error, customData);\n}\n","module.exports = \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' x='0' y='0' viewBox='0 0 468 222.5' xml:space='preserve'%3E%3Cstyle%3E.st0%7Bfill-rule:evenodd;clip-rule:evenodd;fill:%2332325d%7D%3C/style%3E%3Cpath class='st0' d='M414 113.4c0-25.6-12.4-45.8-36.1-45.8-23.8 0-38.2 20.2-38.2 45.6 0 30.1 17 45.3 41.4 45.3 11.9 0 20.9-2.7 27.7-6.5v-20c-6.8 3.4-14.6 5.5-24.5 5.5-9.7 0-18.3-3.4-19.4-15.2h48.9c0-1.3.2-6.5.2-8.9zm-49.4-9.5c0-11.3 6.9-16 13.2-16 6.1 0 12.6 4.7 12.6 16h-25.8zM301.1 67.6c-9.8 0-16.1 4.6-19.6 7.8l-1.3-6.2h-22v116.6l25-5.3.1-28.3c3.6 2.6 8.9 6.3 17.7 6.3 17.9 0 34.2-14.4 34.2-46.1-.1-29-16.6-44.8-34.1-44.8zm-6 68.9c-5.9 0-9.4-2.1-11.8-4.7l-.1-37.1c2.6-2.9 6.2-4.9 11.9-4.9 9.1 0 15.4 10.2 15.4 23.3 0 13.4-6.2 23.4-15.4 23.4zM223.8 61.7l25.1-5.4V36l-25.1 5.3zM223.8 69.3h25.1v87.5h-25.1zM196.9 76.7l-1.6-7.4h-21.6v87.5h25V97.5c5.9-7.7 15.9-6.3 19-5.2v-23c-3.2-1.2-14.9-3.4-20.8 7.4zM146.9 47.6l-24.4 5.2-.1 80.1c0 14.8 11.1 25.7 25.9 25.7 8.2 0 14.2-1.5 17.5-3.3V135c-3.2 1.3-19 5.9-19-8.9V90.6h19V69.3h-19l.1-21.7zM79.3 94.7c0-3.9 3.2-5.4 8.5-5.4 7.6 0 17.2 2.3 24.8 6.4V72.2c-8.3-3.3-16.5-4.6-24.8-4.6C67.5 67.6 54 78.2 54 95.9c0 27.6 38 23.2 38 35.1 0 4.6-4 6.1-9.6 6.1-8.3 0-18.9-3.4-27.3-8v23.8c9.3 4 18.7 5.7 27.3 5.7 20.8 0 35.1-10.3 35.1-28.2-.1-29.8-38.2-24.5-38.2-35.7z'/%3E%3C/svg%3E\"","import { RouterStore } from 'mobx-react-router';\nimport React from 'react';\n\nexport const routingStore = new RouterStore();\nexport const Context = React.createContext({ routing: routingStore });\n","// @ts-ignore\n__webpack_nonce__ = window.__alfie_nonce__;\n","import { ErrorCustomDataSymbol } from '../utils/ErrorCustomDataSymbol';\n\n/**\n * Returns true if the error was caused by an aborted Fetch\n */\nexport function fetchErrorIsAbort(err: Error | any) {\n // https://github.com/mo/abortcontroller-polyfill\n return err.name === 'AbortError';\n}\n\nexport enum KnownFetchErrorNames {\n AbortError = 'AbortError',\n Unauthenticated = '401Unauthenticated',\n NotFound = '404NotFound',\n InternalServerError = '500InternalServerError',\n JsonParsingError = 'JsonParsingError',\n NetworkError = 'NetworkError',\n}\n\nexport class FetchError extends Error {\n [ErrorCustomDataSymbol]: FetchErrorCustomData;\n\n constructor(readonly name: KnownFetchErrorNames, message: string, data: FetchErrorCustomData) {\n super(`${data.actionName}: ${message}`);\n\n // Set the prototype explicitly.\n // Otherwise `instanceof FetchError` wouldn't work\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, FetchError.prototype);\n\n this[ErrorCustomDataSymbol] = data;\n }\n}\n\nexport interface FetchErrorCustomData {\n actionName: string;\n url: string;\n status: number;\n method?: string;\n innerErrorMessage?: string;\n}\n\nexport function getFetchErrorName(error: unknown) {\n if (error && error instanceof FetchError) {\n return error.name;\n }\n\n return undefined;\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {};","// extracted by mini-css-extract-plugin\nmodule.exports = {};","import sadAlfie from 'assets/images/alfie-sad.png';\nimport React from 'react';\nimport { Button } from 'reactstrap';\nimport styled from 'styled-components';\n\nconst Page = styled.div`\n align-items: center;\n display: flex;\n flex-direction: column;\n background: #fff;\n justify-content: center;\n min-width: 100vw;\n min-height: 100vh;\n`;\n\nconst Alfie = styled.img`\n max-width: 8rem;\n margin: 0 0 2rem;\n`;\n\nexport const AppCrashed = () => {\n const reload = () => window.location.reload();\n return (\n \n \n

Uh oh! Something went wrong. Try refreshing the page.

\n \n
\n );\n};\n","import { SnackbarRenderer, SnackbarText } from 'components/Snackbar/Snackbar';\nimport { AppOfflineMessage } from 'components/Snackbar/SnackbarMessages';\nimport { observer } from 'mobx-react-lite';\nimport React from 'react';\nimport { isOnlineStore } from 'utils/IsOnlineStore';\n\nexport const AppOfflineSnackbar = observer(\n ({\n store: { offlineUsageReportedCount },\n }: {\n store: Pick;\n }) => {\n if (offlineUsageReportedCount > 0) {\n return (\n \n {AppOfflineMessage}\n \n );\n }\n\n return null;\n },\n);\n","export const AppOfflineMessage = `Your internet connection appears to be offline. Please check your data or wifi connection.`;\nexport const PrintingFailedMessage = `Uh oh! There was a problem printing.`;\n","import alfiepayLogo from 'assets/images/alfiepay-logo.svg';\nimport { FontLink } from 'components/FontLink';\nimport React from 'react';\nimport { Button } from 'reactstrap';\nimport styled from 'styled-components';\nimport { useAuth0 } from './Auth0Wrapper';\n\nconst Backdrop = styled.div`\n background: var(--gray-dark);\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n`;\n\nconst Instructions = styled.p`\n margin: 0 0 1rem;\n`;\n\nconst Body = styled.div`\n align-items: center;\n background: #fff;\n border-radius: 1rem;\n display: flex;\n flex-direction: column;\n padding: 2rem 4rem;\n`;\nconst AlfiepayLogo = styled.img`\n margin: 0 0 1rem;\n width: 240px;\n`;\n\nexport const Login: React.FC = () => {\n const { loginWithRedirect } = useAuth0();\n\n const { location: loc } = window;\n const login = () => loginWithRedirect({ redirect_uri: `${loc.origin}/auror/admin` });\n return (\n \n \n \n \n Please sign in to continue\n \n \n \n );\n};\n","import { LoadingOverlay } from 'components/Loader/LoaderOverlay';\nimport React from 'react';\nimport { Route, RouteProps } from 'react-router';\nimport { alfieConfig } from 'utils/alfie-config';\nimport { Auth0Provider, useAuth0 } from './Auth0Wrapper';\nimport { Login } from './Login';\n\nexport const AuthorizedRoute: React.FC = ({ component, ...props }) => {\n return (\n \n \n \n \n \n );\n};\n\nconst onRedirectCallback = ({ appState }: { appState?: { targetUrl: string } }) => {\n window.history.replaceState(\n {},\n document.title,\n appState && appState.targetUrl ? appState.targetUrl : window.location.pathname,\n );\n};\n\nexport const AuthorizedComponent: React.FC> = ({ component }) => {\n const { isAuthenticated, loading } = useAuth0();\n\n if (loading) {\n return ;\n } else if (isAuthenticated) {\n return ;\n } else {\n return ;\n }\n};\n","import 'bootstrap/dist/css/bootstrap-reboot.css';\nimport 'bootstrap/dist/css/bootstrap.css';\n\nimport { AppCrashed } from 'components/AppCrashed/AppCrashed';\nimport { AppOfflineSnackbar } from 'components/AppOffline/AppOfflineSnackbar';\nimport { AuthorizedRoute } from 'components/Authorize/AuthorizedRoute';\nimport {\n SnackbarController,\n SnackbarControllerContext,\n} from 'components/Snackbar/SnackbarController';\nimport { SnackbarControllerViewModel } from 'components/Snackbar/SnackbarControllerViewModel';\nimport React, { Component, ErrorInfo, Suspense } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport {\n HomeComponent,\n NotFoundComponent,\n OrgComponent,\n adminOrgRoute,\n PrintTriageComponent,\n RecoveryAdminComponent,\n GenerateLettersComponent,\n} from 'routing';\nimport 'styles/styles.css';\nimport 'styles/variables.css';\nimport { globalHandleError } from 'utils/globalHandleError';\nimport { isOnlineStore } from 'utils/IsOnlineStore';\nimport { LoadingOverlay } from './components/Loader/LoaderOverlay';\n\nconst snackbarVm = new SnackbarControllerViewModel();\n\ninterface AppState {\n isCrashed: boolean;\n}\nexport default class App extends Component<{}, AppState> {\n state = {\n isCrashed: false,\n };\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n // this is quite a bad case, there was an uncaught exception in the component tree or during init\n // the only thing we can do is to report and show an error page\n globalHandleError(error, errorInfo);\n\n this.setState({ isCrashed: true });\n }\n render() {\n if (this.state.isCrashed) {\n return ;\n }\n return (\n \n }>\n \n \n \n \n \n \n\n {/* default route */}\n \n \n \n \n \n \n );\n }\n}\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport 'utils/setupNonce';\n\nimport { createBrowserHistory } from 'history';\nimport { syncHistoryWithStore } from 'mobx-react-router';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Router } from 'react-router';\nimport { routingStore } from 'stores';\nimport 'styles/styles.css';\nimport { initRaygun } from 'utils/raygun';\nimport App from './App';\n\nimport { alfieConfig } from 'utils/alfie-config';\nimport { setupAppInsights } from 'utils/appInsights';\n\nsetupAppInsights(alfieConfig);\ninitRaygun(alfieConfig);\n\nconst browserHistory = createBrowserHistory();\nconst history = syncHistoryWithStore(browserHistory, routingStore);\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root'),\n);\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport const iconSizes = {\n xs: 12,\n sm: 16,\n md: 24,\n lg: 48,\n};\n\nexport type SvgIconSize = 'xs' | 'sm' | 'md' | 'lg';\n\ninterface SvgComponent extends Omit, 'size'> {\n rotation?: number;\n size: SvgIconSize;\n}\n\nconst StyledSvg = styled.svg`\n height: ${({ size }) => iconSizes[size]}px;\n width: ${({ size }) => iconSizes[size]}px;\n transform: rotate(${({ rotation }) => rotation}deg);\n`;\n\nexport class SvgIcon extends React.Component<\n {\n icon: SpriteSymbol;\n size?: SvgIconSize;\n rotation?: number;\n } & Omit, 'size' | 'ref' | 'as'>\n> {\n render() {\n const {\n icon: { viewBox, id },\n size: preferredSize,\n className,\n ...attributes\n } = this.props;\n let size = preferredSize;\n if (!size) {\n // read size from viewbox ?\n const [viewBoxSizeAsString] = viewBox.split(/\\s/).reverse();\n const viewBoxSize = parseInt(viewBoxSizeAsString, 10);\n\n if (isNaN(viewBoxSize)) {\n throw new Error(`Please check that SVG viewbox attribute is set on '${id}'`);\n } else if (viewBoxSize <= iconSizes.xs) {\n size = 'xs';\n } else if (viewBoxSize <= iconSizes.sm) {\n size = 'sm';\n } else if (viewBoxSize <= iconSizes.md) {\n size = 'md';\n } else {\n size = 'lg';\n }\n }\n\n return (\n \n \n \n );\n }\n}\n","import SpriteSymbol from \"../../../node_modules/.pnpm/svg-baker-runtime@1.4.1/node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/.pnpm/svg-sprite-loader@4.1.6_patch_hash=qozg4yvpj3ozhoqofl2lexxsgu_webpack@4.47.0/node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ArrowUp.icon\",\n \"use\": \"ArrowUp.icon-usage\",\n \"viewBox\": \"0 0 448 512\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/.pnpm/svg-baker-runtime@1.4.1/node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/.pnpm/svg-sprite-loader@4.1.6_patch_hash=qozg4yvpj3ozhoqofl2lexxsgu_webpack@4.47.0/node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Bars.icon\",\n \"use\": \"Bars.icon-usage\",\n \"viewBox\": \"0 0 448 512\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/.pnpm/svg-baker-runtime@1.4.1/node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/.pnpm/svg-sprite-loader@4.1.6_patch_hash=qozg4yvpj3ozhoqofl2lexxsgu_webpack@4.47.0/node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"CardBack.icon\",\n \"use\": \"CardBack.icon-usage\",\n \"viewBox\": \"0 0 32 21\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/.pnpm/svg-baker-runtime@1.4.1/node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/.pnpm/svg-sprite-loader@4.1.6_patch_hash=qozg4yvpj3ozhoqofl2lexxsgu_webpack@4.47.0/node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"CheckCircle.icon\",\n \"use\": \"CheckCircle.icon-usage\",\n \"viewBox\": \"0 0 400 400\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/.pnpm/svg-baker-runtime@1.4.1/node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/.pnpm/svg-sprite-loader@4.1.6_patch_hash=qozg4yvpj3ozhoqofl2lexxsgu_webpack@4.47.0/node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ChevronDown.icon\",\n \"use\": \"ChevronDown.icon-usage\",\n \"viewBox\": \"0 0 12 12\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/.pnpm/svg-baker-runtime@1.4.1/node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/.pnpm/svg-sprite-loader@4.1.6_patch_hash=qozg4yvpj3ozhoqofl2lexxsgu_webpack@4.47.0/node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ExclamationTriangle.icon\",\n \"use\": \"ExclamationTriangle.icon-usage\",\n \"viewBox\": \"0 0 576 512\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/.pnpm/svg-baker-runtime@1.4.1/node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/.pnpm/svg-sprite-loader@4.1.6_patch_hash=qozg4yvpj3ozhoqofl2lexxsgu_webpack@4.47.0/node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Flask.icon\",\n \"use\": \"Flask.icon-usage\",\n \"viewBox\": \"0 0 448 512\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/.pnpm/svg-baker-runtime@1.4.1/node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/.pnpm/svg-sprite-loader@4.1.6_patch_hash=qozg4yvpj3ozhoqofl2lexxsgu_webpack@4.47.0/node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"SyncAlt.icon\",\n \"use\": \"SyncAlt.icon-usage\",\n \"viewBox\": \"0 0 512 512\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/.pnpm/svg-baker-runtime@1.4.1/node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/.pnpm/svg-sprite-loader@4.1.6_patch_hash=qozg4yvpj3ozhoqofl2lexxsgu_webpack@4.47.0/node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Times.icon\",\n \"use\": \"Times.icon-usage\",\n \"viewBox\": \"0 0 352 512\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import { PublicAppComponent } from 'pages/Details/ConfirmPlate';\nimport React, { useContext, useEffect } from 'react';\nimport { Redirect, Route, Switch } from 'react-router';\nimport {\n AlreadyPaidComponent,\n ConfirmDetailsComponent,\n ConfirmPlateComponent,\n matchOrgKey,\n matchOrgPath,\n NotFoundComponent,\n PaymentCompleteComponent,\n PaymentFailedComponent,\n} from 'routing';\nimport { routingStore } from 'stores';\nimport { ThemeProvider } from 'styled-components';\nimport { orgKeys, ThemeContext } from 'styles/theme';\n\nexport interface OrganizationParams {\n orgKey: string;\n}\n\nexport const Organization: React.FC = ({ vm }) => {\n const orgPathMatch = matchOrgPath(routingStore.location);\n const orgKey = matchOrgKey(routingStore.location) || '';\n const theme = useContext(ThemeContext)(orgKey);\n\n useEffect(() => {\n vm.organizationKey = orgKey;\n }, [orgKey]);\n\n if (!theme || !orgPathMatch) {\n if (process.env.NODE_ENV === 'development') {\n // tslint:disable-next-line:no-console\n console.error(\n `No theme found for org key \"${orgKey}\". Valid keys are: ${orgKeys.join(', ')}`,\n );\n }\n return NotFoundComponent(vm);\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n","import { ChurnZeroEventName } from 'api/Api.generated';\nimport React from 'react';\nimport { matchOrgKey } from 'routing';\nimport { routingStore } from 'stores';\nimport styled, { css } from 'styled-components';\nimport {Body, Container, Link, P, TinyP} from 'styles';\nimport { getOrgDetails } from 'styles/theme';\n\ninterface PublicLayoutComponent {\n footer?: boolean;\n wide?: boolean;\n sendEvent: (eventName: ChurnZeroEventName, token: string | null) => void;\n}\n\nconst Footer = styled.div<{ wide: boolean }>`\n ${({ wide }) =>\n wide &&\n css`\n @media (min-width: 768px) {\n padding: 0 2rem;\n }\n `}\n margin-top: 0.5rem;\n`;\n\nconst FooterLink = styled(Link)`\n font-weight: 400;\n`;\n\nexport const PublicLayout: React.FC = ({\n children,\n footer = true,\n wide = false,\n sendEvent,\n}) => {\n const onClick = () => {\n sendEvent(ChurnZeroEventName.AlfiepayCallSupport, null);\n };\n\n const orgKey = matchOrgKey(routingStore.location);\n const { helpPhone } = getOrgDetails(orgKey);\n\n return (\n \n \n {children}\n {footer && helpPhone && (\n
\n

\n Call{' '}\n \n {helpPhone}\n {' '}\n for more information and assistance.\n

\n \n If you have been sent a letter with your registered vehicle details, please note that this information has been obtained from the Motor Vehicle Register in order to provide you with notification of that vehicle’s involvement in non-payment at a fuel retailer (authorised by NZTA under New Zealand Gazette Notice Number 2022-au2513). An individual can notify the Registrar should they wish to remove their name and address from the register.\n \n
\n )}\n
\n \n );\n};\n","import React from 'react';\nimport { ButtonProps } from 'reactstrap';\nimport styled, { css } from 'styled-components';\nimport { PublicButton } from 'styles';\nimport { Spinner } from './Spinner/Spinner';\n\nexport type ButtonState = 'idle' | 'working' | 'complete';\n\ninterface ButtonComponent extends ButtonProps {\n workingContent?: React.ReactNode;\n completeContent?: React.ReactNode;\n state: ButtonState;\n}\n\nconst StyledButton = styled(PublicButton)<{ state: ButtonState }>`\n ${props => {\n if (props.state === 'working') {\n return css`\n opacity: 0.5;\n pointer-events: none;\n `;\n } else if (props.state === 'complete') {\n return css`\n pointer-events: none;\n `;\n } else {\n return undefined;\n }\n }}\n`;\n\nexport const ActionButton: React.FC = ({\n children,\n state,\n workingContent,\n completeContent,\n ...props\n}) => {\n if (state === 'working' && workingContent) {\n children = workingContent;\n } else if (state === 'complete' && completeContent) {\n children = completeContent;\n }\n\n return (\n \n {state !== 'idle' && }\n {children}\n \n );\n};\n","import { action, computed, observable } from 'mobx';\nimport { observer } from 'mobx-react-lite';\nimport React from 'react';\nimport { InputProps } from 'reactstrap';\nimport { Input } from 'styles';\n\nexport const FormInput: React.FC = observer(props => {\n const { field, ...rest } = props;\n const onBlur = () => field.validate();\n return ;\n});\n\nexport class FormField {\n @observable.ref\n value: string = '';\n\n @observable\n hasBeenValidated: boolean = false;\n\n @computed\n get validationMessage(): string | null {\n return this.hasBeenValidated ? this.validator(this.value) : null;\n }\n\n @computed\n get isValid() {\n return !this.validationMessage;\n }\n\n constructor(initialValue: string, readonly validator: (val: string) => string | null) {\n this.value = initialValue;\n }\n\n @action.bound\n validate() {\n this.hasBeenValidated = true;\n return !this.validationMessage;\n }\n}\n","import React from 'react';\nimport { SnackbarButton, SnackbarRenderer, SnackbarText } from './Snackbar';\n\ninterface StripeFailureSnackbarComponent {\n message: string;\n}\n\nexport const StripeFailureSnackbar: React.FC = ({ message }) => {\n const reload = () => window.location.reload();\n return (\n \n {message}\n Reload\n \n );\n};\n","import isFunction from 'lodash.isfunction';\nexport const loadStripe = (onload?: () => void) => {\n const existing = document.getElementById('stripe-js');\n\n // don't load twice\n if (existing) {\n isFunction(onload) && onload();\n return;\n }\n const script = document.createElement('script');\n\n script.id = 'stripe-js';\n script.src = 'https://js.stripe.com/v3/';\n script.async = true;\n if (isFunction(onload)) {\n script.addEventListener('load', onload);\n }\n\n document.body.appendChild(script);\n};\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nconst CardIconBlock = styled.div<{ fade: boolean }>`\n ${props =>\n props.fade &&\n css`\n color: #ccc;\n `}\n padding: 0 0.5rem;\n`;\nconst Icon = styled.i`\n width: 32px;\n`;\n\nexport type CardBrand = 'visa' | 'mastercard' | 'amex' | 'discover' | 'diners' | 'jcb' | 'unknown';\n\nconst brandToPf = (brand: CardBrand) => {\n const map = {\n visa: 'pf-visa',\n mastercard: 'pf-mastercard',\n amex: 'pf-american-express',\n discover: 'pf-discover',\n diners: 'pf-diners',\n jcb: 'pf-jcb',\n unknown: 'pf-credit-card',\n };\n return map[brand] || map.unknown;\n};\n\ninterface CardIconComponent {\n brand: CardBrand;\n}\n\nexport const CardIcon: React.FC = ({ brand }) => {\n const className = `pf ${brandToPf(brand)}`;\n return (\n \n \n \n \n );\n};\n","import { ChurnZeroEventName } from 'api/Api.generated';\nimport { cardBackIcon } from 'assets/icons';\nimport alfiepayLogo from 'assets/images/alfiepay-logo-grey.svg';\nimport stripeLogo from 'assets/images/stripe.svg';\nimport { ActionButton } from 'components/ActionButton';\nimport { FormInput } from 'components/FormInput';\nimport { PublicLayout } from 'components/Layout';\nimport { StripeFailureSnackbar } from 'components/Snackbar/StripeFailureSnackbar';\nimport { SvgIcon } from 'components/SvgIcon/SvgIcon';\nimport { observer } from 'mobx-react-lite';\nimport { PublicAppComponent } from 'pages/Details/ConfirmPlate';\nimport React, { useEffect, useState } from 'react';\nimport {\n CardCVCElement,\n CardExpiryElement,\n CardNumberElement,\n Elements,\n injectStripe,\n ReactStripeElements,\n StripeProvider,\n} from 'react-stripe-elements';\nimport styled, { css } from 'styled-components';\nimport { ErrorBlock, Form, H3, Logo } from 'styles';\nimport 'styles/stripe-elements.css';\nimport { getOrgDetails } from 'styles/theme';\nimport { alfieConfig } from 'utils/alfie-config';\nimport { getCurrencyFormat } from 'utils/currency';\nimport { loadStripe } from 'utils/load-stripe';\nimport { CardBrand, CardIcon } from './CardIcon';\n\nconst Details = styled.div`\n color: #555;\n display: grid;\n font-size: 0.875rem;\n grid-gap: 0.75rem 0;\n grid-template-columns: 1fr auto;\n`;\n\nconst Total = styled.div`\n border-top: 1px solid #ccc;\n padding-top: 0.75rem;\n`;\nconst Amount = styled.div`\n text-align: right;\n`;\n\nconst TotalAmount = styled(Total)`\n text-align: right;\n`;\n\nconst LogoStrip = styled.div`\n align-items: center;\n display: flex;\n justify-content: center;\n margin-bottom: 1rem;\n`;\n\nconst PoweredBy = styled.div`\n color: #6d6e6e;\n font-size: 0.6875rem;\n line-height: 1;\n margin: 1rem 0 0.1875rem;\n text-align: center;\n`;\nconst PoweredByImg = styled.img`\n height: 1.625rem;\n`;\n\nconst H4 = styled.h4`\n color: #555;\n font-family: Arial, Helvetica, sans-serif;\n font-weight: 600;\n font-size: 0.875rem;\n margin: 1.5rem 0 0.25rem;\n`;\n\nconst CardBlock = styled.div`\n background: #fff;\n border-radius: ${props => props.theme.borderRadius};\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);\n display: grid;\n grid: 40px 40px / 48px 1fr 1fr 40px;\n transition: box-shadow 150ms ease;\n &::focus-within {\n box-shadow: 0 1px 3px 0 #cfd7df;\n }\n`;\n\nconst IconBlock = styled.div<{ border?: boolean }>`\n ${({ border }) =>\n border &&\n css`\n border-bottom: ${({ theme }) => theme.inputBorder};\n `}\n align-items: center;\n align-self: stretch;\n display: flex;\n justify-content: center;\n & > svg {\n color: ${({ theme }) => theme.borderColor};\n }\n`;\n\nconst CardNumber = styled(CardNumberElement)`\n border-bottom: ${props => props.theme.inputBorder};\n grid-column: span 3;\n &.StripeElement {\n padding-left: 0;\n }\n`;\n\nconst CardExpiry = styled(CardExpiryElement)`\n border-right: ${props => props.theme.inputBorder};\n grid-column: span 2;\n`;\n\nconst CardCVC = styled(CardCVCElement)``;\n\ninterface PaymentComponent extends ReactStripeElements.InjectedStripeProps, PublicAppComponent {}\n\nexport const Payment: React.FunctionComponent = observer(({ vm }) => {\n const [stripeKey, setStripeKey] = useState(null);\n useEffect(() => {\n vm.sendChurnZeroEvent(ChurnZeroEventName.AlfiepayViewPaymentPage, vm.debtIdentifier);\n loadStripe(() => {\n setStripeKey(Stripe(alfieConfig.stripe.apiKey));\n });\n }, []);\n\n return (\n \n \n \n \n \n );\n});\n\nexport const PaymentEl: React.FunctionComponent = observer(({ stripe, vm }) => {\n const { logo } = getOrgDetails(vm.organizationKey);\n const onChangeName = (e: React.ChangeEvent) => {\n vm.name.value = e.currentTarget.value;\n };\n const onChangeEmail = (e: React.ChangeEvent) => {\n vm.email.value = e.currentTarget.value;\n };\n\n const onNumberChange = (e: stripe.elements.ElementChangeResponse) => {\n const { brand, complete, error } = e;\n vm.chargeError = undefined; // if was a charge error, now irrelevant\n vm.cardBrand = brand as CardBrand;\n vm.numberComplete = complete;\n vm.numberError = error;\n };\n\n const onExpiryChange = (e: stripe.elements.ElementChangeResponse) => {\n const { complete, error } = e;\n vm.chargeError = undefined; // if was a charge error, now irrelevant\n vm.expiryComplete = complete;\n vm.expiryError = error;\n };\n\n const onCvcChange = (e: stripe.elements.ElementChangeResponse) => {\n const { complete, error } = e;\n vm.chargeError = undefined; // if was a charge error, now irrelevant\n vm.cvcComplete = complete;\n vm.cvcError = error;\n };\n\n const onCharge = async (e: React.FormEvent) => {\n e.preventDefault();\n vm.sendChurnZeroEvent(ChurnZeroEventName.AlfiepayClickedPay, vm.debtIdentifier);\n vm.handleCharge(stripe);\n };\n\n return (\n \n \n

Payment for {vm.licensePlate}

\n
\n
Amount
\n {getCurrencyFormat(vm.amount)}\n Total to pay\n {getCurrencyFormat(vm.total)}\n
\n
\n

Credit or debit card

\n \n \n \n \n \n \n \n \n \n \n \n {vm.cardError && {vm.cardError.message}}\n {vm.chargeError && Uh oh! {vm.chargeError}}\n {vm.stripeError && }\n

Name on card

\n \n {vm.name.validationMessage && {vm.name.validationMessage}}\n

Email address (if you require a receipt)

\n \n {vm.email.validationMessage && (\n {vm.email.validationMessage}\n )}\n \n Pay {getCurrencyFormat(vm.total)}\n \n \n Powered by\n \n \n
&
\n \n
\n
\n );\n});\n\nexport const StripePayment = injectStripe(PaymentEl);\n","import { format, parseISO } from 'date-fns';\n\nexport const formatDate = (date: Date | string, s: string) => {\n if (typeof date === 'string') {\n date = parseISO(date);\n }\n return format(date, s)\n .replace(/AM\\b/, 'am')\n .replace(/PM\\b/, 'pm');\n};\n\nexport const toLocalDate = (date: Date): LocalDate => {\n return (format(date, 'yyyy-MM-dd') as any) as LocalDate;\n};\n\nexport const toLocalDateTime = (date: Date): LocalDateTime => {\n return (format(date, `yyyy-MM-dd'T'hh:mm:ss`) as any) as LocalDateTime;\n};\n\nexport const getPrintTime = () => {\n return format(new Date(), 'yyyy-MM-dd_HH.mm.ss');\n};\n","export const formatVolume = (volume: string) => volume.replace(/(\\.\\d[1-9]*)0+$/, '$1');\n","import { ChurnZeroEventName } from 'api/Api.generated';\nimport { timesIcon } from 'assets/icons';\nimport { PublicLayout } from 'components/Layout';\nimport { LoadingOverlay } from 'components/Loader/LoaderOverlay';\nimport { SvgIcon } from 'components/SvgIcon/SvgIcon';\nimport { observer } from 'mobx-react-lite';\nimport { Payment } from 'pages/Payment/Payment';\nimport React, { useContext, useEffect } from 'react';\nimport { Popover, PopoverBody, PopoverHeader } from 'reactstrap';\nimport { alreadyPaidRoute, cannotPayRoute, confirmPlateRoute, matchConfirmDetails } from 'routing';\nimport { Context } from 'stores';\nimport styled, { css } from 'styled-components';\nimport { Link, Logo, PublicButton } from 'styles';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat, getCurrencyFormatFromString } from 'utils/currency';\nimport { formatDate } from 'utils/date';\nimport { isOnlineStore } from 'utils/IsOnlineStore';\nimport { loadStripe } from 'utils/load-stripe';\nimport { formatVolume } from 'utils/volume';\nimport { PublicAppComponent } from './ConfirmPlate';\n\nconst ButtonBlock = styled.div`\n text-align: center;\n margin: 0 -1.875rem 0.5rem;\n padding: 0 2rem 0.5rem;\n width: calc(100% + 4rem);\n @media (min-width: 768px) {\n border-top: 1px solid #ccc;\n padding-top: 1rem;\n }\n`;\n\nconst LinkBlock = styled.div`\n text-align: center;\n width: calc(100% + 2rem);\n @media (max-width: 767px) {\n border-bottom: 1px solid #ccc;\n border-top: 1px solid #ccc;\n margin-bottom: 1rem;\n padding: 1rem 0;\n }\n`;\n\nconst DesktopWrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n @media (min-width: 768px) {\n background: #fff;\n border-radius: 4px;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.15);\n margin: 1rem 0;\n padding: 1rem 2rem;\n }\n`;\n\nconst Details = styled.div`\n flex: 1 1 calc(50% - 20px);\n`;\n\nconst DetailsRow = styled.div`\n display: flex;\n`;\n\nconst Detail = styled.div<{ flexBasis: number; noBorder?: boolean }>`\n ${({ flexBasis }) =>\n css`\n flex: 1 0 ${flexBasis}px;\n `}\n ${({ noBorder }) =>\n !noBorder &&\n css`\n border-bottom: 1px solid #ccc;\n margin-bottom: 1rem;\n `}\n display: flex;\n flex-direction: column;\n padding: 0 0 1rem;\n`;\n\nconst Header = styled.div`\n font-weight: bold;\n margin: 0 0 1rem;\n width: 100%;\n`;\n\nconst LocationName = styled.div`\n font-weight: 600;\n`;\n\nconst LicensePlate = styled.div`\n align-items: center;\n align-self: flex-start;\n border: 1px solid #555;\n border-radius: 4px;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.15);\n background-color: #fffbf0;\n display: inline-flex;\n font-size: 1.125rem;\n font-weight: 600;\n letter-spacing: 0.6px;\n line-height: 1;\n padding: 0.375rem 0.625rem;\n`;\n\nconst DetailLabel = styled.div`\n color: #555;\n font-weight: 600;\n font-size: ${props => props.theme.tinyFontSize};\n line-height: 1;\n margin: 0 0 0.375rem;\n text-transform: uppercase;\n`;\n\nconst DetailContent = styled.div`\n font-size: ${props => props.theme.smallFontSize};\n line-height: 1rem;\n word-break: word-break;\n`;\n\nconst Photo = styled.img`\n align-self: flex-start;\n margin: 0 1rem 0 0;\n max-width: 280px;\n flex: 0 1 calc(50% - 20px);\n @media (max-width: 767px) {\n max-width: 320px;\n min-height: 210px;\n margin: 0 -20px 1rem;\n }\n`;\n\nconst PopoverCloseButton = styled.button`\n background: #fff;\n border: none;\n display: inline-flex;\n padding: 0.375rem;\n line-height: 0.75rem;\n`;\n\nexport const ConfirmDetails: React.FC = observer(({ vm }) => {\n const { routing } = useContext(Context);\n useEffect(() => {\n loadStripe();\n const match = matchConfirmDetails(routing.location);\n if (match) {\n const { referenceNumber, licensePlate, orgKey } = match.params;\n vm.organizationKey = orgKey;\n vm.referenceNumber = referenceNumber;\n vm.licensePlate = licensePlate;\n vm.handleFindDetails();\n }\n }, [routing.location.pathname]);\n useEffect(() => {\n const { plateCheckState: state } = vm;\n if (state === 'successful') {\n vm.sendChurnZeroEvent(ChurnZeroEventName.AlfiepayViewDetailsPage, vm.debtIdentifier);\n } else if (state === 'already-paid') {\n routing.replace(alreadyPaidRoute(vm.organizationKey));\n } else if (state === 'invalid-debt-state') {\n routing.replace(cannotPayRoute(vm.organizationKey));\n } else if (state === 'invalid-details') {\n routing.replace(\n confirmPlateRoute(\n vm.organizationKey,\n vm.referenceNumber,\n vm.licensePlate,\n 'details',\n ),\n );\n } else if (state === 'errored') {\n routing.replace(\n confirmPlateRoute(vm.organizationKey, vm.referenceNumber, vm.licensePlate, 'err'),\n );\n }\n }, [vm.plateCheckState]);\n const { logo, helpPhone } = getOrgDetails(vm.organizationKey);\n\n // detect when people are going back & revert state back to successful\n useEffect(() => {\n vm.detailsConfirmed = routing.location.hash.indexOf('confirmed') >= 0;\n }, [routing.location.hash]);\n\n const handleConfirm = () => {\n vm.sendChurnZeroEvent(ChurnZeroEventName.AlfiepayConfirmedDetails, vm.debtIdentifier);\n const { pathname, search } = routing.location;\n routing.push(`${pathname}${search}#confirmed`);\n };\n\n if (vm.plateCheckState === 'working') {\n return isOnlineStore.isOnline ? : null;\n } else if (vm.plateCheckState === 'successful' && vm.detailsConfirmed) {\n return ;\n }\n return (\n <>\n \n \n \n
Details for {vm.licensePlate}
\n \n
\n \n \n Date\n \n {vm.date && formatDate(vm.date, `EEEE d MMMM yyyy 'at' h:mma`)}\n \n \n \n \n \n Location\n \n {vm.locationName}\n
{vm.locationAddress}
\n
\n
\n
\n \n \n Pump\n {vm.locationPump}\n \n \n \n \n Number plate\n {vm.licensePlate}\n \n \n Fuel Type\n {vm.fuelType}\n \n \n \n \n Cost per litre\n \n {getCurrencyFormatFromString(vm.price, 4)}\n \n \n \n Litres\n {formatVolume(vm.volume)}\n \n \n Amount\n {getCurrencyFormat(vm.amount)}\n \n \n
\n \n Pay now\n \n \n \n These details are incorrect\n \n \n
\n
\n \n \n \n \n \n \n \n If you believe these details are incorrect then please call{' '}\n {helpPhone} for assistance.\n \n \n \n );\n});\n","import { Location } from 'history';\nimport { parse } from 'query-string';\n\nfunction doParse(location: undefined | Location, key: string) {\n let val: string[] | string = '';\n if (location) {\n val = parse(location.search)[key] || '';\n }\n return val;\n}\n\n/**\n * Handles `location` being undefined\n * @param location\n * @param key\n * @returns `{ foo: 'x' }` for 'foo=x'\n */\nexport function parseParam(location: undefined | Location, key: string) {\n const parsed = doParse(location, key);\n\n let val;\n\n if (Array.isArray(parsed)) {\n val = parsed[0] || '';\n } else {\n val = parsed || '';\n }\n\n return { [key]: val };\n}\n\n/**\n * Handles `location` being undefined\n * @param location\n * @param key\n * @returns `['x']` for 'foo=x'\n */\nexport function parseArrayParam(location: undefined | Location, key: string) {\n const parsed = doParse(location, key);\n\n if (Array.isArray(parsed)) {\n return parsed;\n } else {\n return [parsed];\n }\n}\n","import { ChurnZeroEventName } from 'api/Api.generated';\nimport { PublicLayout } from 'components/Layout';\nimport { Location } from 'history';\nimport { observer } from 'mobx-react-lite';\nimport React, { FormEvent, useContext, useEffect } from 'react';\nimport { confirmDetailsRoute } from 'routing';\nimport { Context } from 'stores';\nimport styled from 'styled-components';\nimport { ErrorBlock, Form, Input, Label, Logo, PublicButton } from 'styles';\nimport { getOrgDetails } from 'styles/theme';\nimport { globalHandleError } from 'utils/globalHandleError';\nimport { loadStripe } from 'utils/load-stripe';\nimport { parseParam } from 'utils/parseParam';\nimport { PublicAppViewModel } from 'viewmodel/PublicAppViewModel';\n\nfunction parseLocation(location: Location) {\n const code = parseParam(location, 'code');\n const reg = parseParam(location, 'reg');\n const err = parseParam(location, 'err');\n\n return { ...code, ...err, ...reg };\n}\n\nexport interface PublicAppComponent {\n vm: PublicAppViewModel;\n}\n\nconst UpperCaseInput = styled(Input)`\n text-transform: uppercase;\n &::placeholder {\n text-transform: none;\n }\n`;\n\nexport const HR = styled.hr`\n background: #cccccc;\n border: none;\n height: 1px;\n margin: 2rem 0 1rem;\n width: 100%;\n`;\nexport const ConfirmPlate: React.FunctionComponent = observer(({ vm }) => {\n const { routing } = useContext(Context);\n const { logo, helpPhone } = getOrgDetails(vm.organizationKey);\n\n // listening to nothing, so only runs once\n useEffect(() => {\n loadStripe();\n const params = parseLocation(routing.location);\n vm.code = params.code;\n vm.reg = params.reg;\n\n const { err } = params;\n if (err) {\n vm.detailsNotFound = err === 'details';\n vm.detailsError = err !== 'details';\n } else {\n // we only send a view event if we don't have an error\n // as we assume errors come from already visiting here\n vm.sendChurnZeroEvent(ChurnZeroEventName.AlfiepayViewCodePage, vm.debtIdentifier);\n }\n }, []);\n\n const onChangeCode = (e: React.ChangeEvent) => {\n vm.code = e.currentTarget.value;\n };\n const onChangeReg = (e: React.ChangeEvent) => {\n vm.reg = e.currentTarget.value;\n };\n\n const goToConfirmDetails = async (e: FormEvent) => {\n e.preventDefault();\n try {\n routing.push(confirmDetailsRoute(vm.organizationKey, vm.code, vm.reg));\n vm.sendChurnZeroEvent(ChurnZeroEventName.AlfiepayEnteredCode, vm.debtIdentifier);\n } catch (e) {\n throw globalHandleError(e);\n }\n };\n\n return (\n \n \n
\n \n \n \n \n {vm.detailsError && (\n Uh oh! Something went wrong checking, please try again.\n )}\n {vm.detailsNotFound && (\n Those details aren't correct, please try again.\n )}\n \n Find my details\n \n \n {helpPhone &&
}\n
\n );\n});\n","import { FontLink } from 'components/FontLink';\nimport React, { FC } from 'react';\nimport styled, { ThemeProvider } from 'styled-components';\nimport { defaultTheme } from 'styles/theme';\n\nexport const BackdropEl = styled.div`\n align-items: center;\n justify-content: center;\n background: ${({ theme }) => theme.white};\n font-family: 'Open Sans', Arial, Helvetica, sans-serif;\n display: flex;\n top: 0;\n left: 0;\n width: 100vw;\n min-height: 100vh;\n & h1,\n & h2,\n & h3,\n & h4,\n & h5,\n & h6 {\n font-family: Poppins, 'Open Sans', Arial, Helvetica, sans-serif;\n }\n`;\nexport const Backdrop: FC = ({ children }) => (\n \n \n \n {children}\n \n \n);\n","import { ChurnZeroEventName } from 'api/Api.generated';\nimport alfieImg from 'assets/images/alfie-img.png';\nimport alfieLogo from 'assets/images/alfiepay-logo.svg';\nimport { PublicAppComponent } from 'pages/Details/ConfirmPlate';\nimport React, { useEffect } from 'react';\nimport styled from 'styled-components';\nimport { Backdrop } from './Backdrop';\n\nexport const Body = styled.div`\n max-width: calc(30rem + 1vw);\n padding: 0 1rem;\n\n @media (max-width: 639px) {\n max-width: 20rem;\n }\n`;\n\nconst Content = styled.div`\n align-items: center;\n display: flex;\n`;\n\nconst Header = styled.h1`\n font-size: calc(3rem + 1vw);\n font-weight: 600;\n line-height: 1;\n text-align: center;\n margin: 0 0 2rem;\n`;\n\nconst Logo = styled.img`\n display: block;\n height: calc(2rem + 3vw);\n margin: 0.5rem auto;\n`;\n\nconst P = styled.p`\n text-align: center;\n margin-bottom: 20vh;\n`;\n\nconst A = styled.a`\n color: inherit;\n font-weight: 600;\n &:hover,\n &:visited,\n &:active {\n color: inherit;\n }\n`;\n\nexport const Strip = styled.div`\n background: #00b5a5;\n position: fixed;\n bottom: 0;\n width: 100vw;\n height: 2rem;\n`;\n\nexport const Alfie = styled.img`\n position: fixed;\n height: calc(5rem + 10vw);\n bottom: calc(2rem - 0.7vw);\n right: 5vw;\n z-index: 1;\n`;\n\nexport const Home: React.FC = ({ vm }) => {\n useEffect(() => {\n vm.sendChurnZeroEvent(ChurnZeroEventName.AlfiepayViewHomePage, vm.debtIdentifier);\n });\n return (\n \n \n
\n Welcome to\n \n
\n \n

\n Welcome to Alfiepay, a payment portal providing a great online\n payment experience for some of the largest brands in Australia and New Zealand. With{' '}\n \n Stripe\n {' '}\n as our payment gateway you automatically get a secure and reliable payment\n solution!\n

\n
\n \n \n \n
\n );\n};\n","import { ChurnZeroEventName } from 'api/Api.generated';\nimport sadAlfie from 'assets/images/alfie-sad.png';\nimport alfieLogo from 'assets/images/alfiepay-logo.svg';\nimport { PublicAppComponent } from 'pages/Details/ConfirmPlate';\nimport { Backdrop } from 'pages/Home/Backdrop';\nimport { Alfie, Body, Strip } from 'pages/Home/Home';\nimport React, { useEffect } from 'react';\nimport styled from 'styled-components';\n\nconst Header = styled.h2`\n font-size: calc(3rem + 1vw);\n font-weight: 600;\n margin: 0 0 0.5rem;\n text-align: center;\n`;\nconst SubHeader = styled.h3`\n font-size: calc(1.5rem + 0.5vw);\n font-weight: 300;\n margin: 2rem 0;\n text-align: center;\n`;\nconst P = styled.p`\n text-align: center;\n`;\n\nconst A = styled.a`\n &,\n &:hover,\n &:active,\n &:visited {\n color: #00b5a5;\n }\n`;\n\nconst Logo = styled.img`\n position: fixed;\n top: 5vh;\n left: 5vw;\n width: calc(8ch + 8vw);\n`;\n\nexport const NotFound: React.FC = ({ vm }) => {\n useEffect(() => {\n vm.sendChurnZeroEvent(ChurnZeroEventName.AlfiepayViewNotFoundPage, vm.debtIdentifier);\n });\n return (\n \n \n \n
Oops!
\n There's nothing here.\n

\n Maybe try the home page?\n

\n \n \n \n
\n );\n};\n","import { PublicLayout } from 'components/Layout';\nimport { HR, PublicAppComponent } from 'pages/Details/ConfirmPlate';\nimport React from 'react';\nimport { H3, Logo, P } from 'styles';\nimport { getOrgDetails } from 'styles/theme';\n\nexport const AlreadyPaid: React.FC = ({ vm }) => {\n const { logo } = getOrgDetails(vm.organizationKey);\n return (\n \n \n

Good Work!

\n

It looks like this payment has already been made.

\n
\n
\n );\n};\n","import { ChurnZeroEventName } from 'api/Api.generated';\nimport { checkCircleIcon } from 'assets/icons';\nimport { PublicLayout } from 'components/Layout';\nimport { SvgIcon } from 'components/SvgIcon/SvgIcon';\nimport { observer } from 'mobx-react-lite';\nimport { PublicAppComponent } from 'pages/Details/ConfirmPlate';\nimport React, { useContext, useEffect } from 'react';\nimport { confirmPlateRoute, matchOrgKey } from 'routing';\nimport { Context, routingStore } from 'stores';\nimport styled from 'styled-components';\nimport { H3, Logo, P, PublicButtonLink } from 'styles';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\n\nconst CentredH3 = styled(H3)`\n align-items: center;\n display: flex;\n font-size: 1.125rem;\n justify-content: center;\n margin: 2rem 0;\n & svg {\n color: ${({ theme }) => theme.primaryColor};\n margin-right: 0.5rem;\n }\n`;\n\nconst CentredP = styled(P)`\n text-align: center;\n`;\n\nconst Details = styled.div`\n color: #555;\n display: grid;\n font-size: ${({ theme }) => theme.smallFontSize};\n grid-gap: 0.5rem;\n grid-template-columns: 1fr 1fr;\n margin: 3rem 0;\n width: 280px;\n`;\n\nconst Amount = styled.div`\n font-weight: 600;\n`;\n\nexport const PaymentComplete: React.FunctionComponent = observer(({ vm }) => {\n useEffect(() => {\n if (vm.receiptUrl) {\n vm.sendChurnZeroEvent(\n ChurnZeroEventName.AlfiepayViewPaymentSuccessfulPage,\n vm.debtIdentifier,\n );\n } else {\n const orgKey = matchOrgKey(routingStore.location);\n if (orgKey) {\n routing.replace(confirmPlateRoute(orgKey));\n }\n }\n }, [vm.receiptUrl]);\n const { routing } = useContext(Context);\n const { logo } = getOrgDetails(vm.organizationKey);\n return (\n \n \n \n \n Payment successful\n \n Thank you.\n This will appear on your statement as Alfiepay Limited.\n
\n
Payee
\n {vm.name.value}\n
Amount
\n {getCurrencyFormat(vm.amount)}\n
\n {vm.receiptUrl && (\n \n View receipt\n \n )}\n
\n );\n});\n","import { ChurnZeroEventName } from 'api/Api.generated';\nimport { PublicLayout } from 'components/Layout';\nimport { PublicAppComponent } from 'pages/Details/ConfirmPlate';\nimport React, { useEffect } from 'react';\nimport { H3, Logo, P } from 'styles';\nimport { getOrgDetails } from 'styles/theme';\n\nexport const PaymentFailed: React.FC = ({ vm }) => {\n const { logo, helpPhone } = getOrgDetails(vm.organizationKey);\n useEffect(() => {\n vm.sendChurnZeroEvent(ChurnZeroEventName.AlfiepayViewPaymentFailedPage, vm.debtIdentifier);\n });\n return (\n \n \n

Oops.

\n

\n It looks like this payment can no longer be made using Alfiepay. For more info\n please call {helpPhone} and we can help.\n

\n
\n );\n};\n","import React, { FC } from 'react';\nimport styled, { ThemeProvider } from 'styled-components';\nimport { defaultTheme } from 'styles/theme';\n\nexport const AdminPageEl = styled.div`\n background: var(--light-blue);\n min-height: 100vh;\n padding-bottom: 5rem;\n`;\nexport const AdminPage: FC = ({ children }) => {\n return (\n \n {children}\n \n );\n};\n","import React, { FC } from 'react';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCopyDateShort,\n getCopyTime,\n getSiteName,\n P,\n Phone,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const FirstLetterBP: FC = ({ recovery }) => {\n const { helpPhone, storeDescription, teamName } = getOrgDetails(recovery.organizationKey);\n const siteName = getSiteName(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with the number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor Vehicle\n Register.\n

\n

\n At {getCopyTime(recovery)} on {getCopyDateShort(recovery)} at {siteName}, we believe a\n vehicle with your number plate acquired {getCurrencyFormat(recovery.amount)} of fuel without\n full payment being received. This could have been for a variety of reasons, for example, if\n the vehicle in the photo isn't yours, you may be a victim of stolen or doctored plates and\n it's important you let us know.\n

\n

\n We want to fix this matter for you quickly, so please call us on {helpPhone}{' '}\n to discuss (select option 8 from the menu). Our phones are open Monday to Friday between 9am\n and 5pm.\n

\n

\n Or alternatively, you can pay now by visiting{' '}\n alfiepay.com/{recovery.organizationKey}, using {recovery.licensePlate} and\n unique code {recovery.debtIdentifier} when directed. Or you can pop into your local{' '}\n {storeDescription} store to pay in person.\n

\n

\n Until the matter is resolved by our team or payment is received, you will be asked to\n pre-pay for fuel purchases at {storeDescription} stores.\n

\n \n Kind regards\n {teamName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCopyDateShort,\n getCopyTime,\n getSiteName,\n P,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const FirstLetterBPFranchise: FC = ({ recovery }) => {\n const { teamName } = getOrgDetails(recovery.organizationKey);\n const siteName = getSiteName(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor Vehicle\n Register.\n

\n

\n At {getCopyTime(recovery)} on {getCopyDateShort(recovery)} at {siteName}, we believe a\n vehicle with your number plate acquired {getCurrencyFormat(recovery.amount)} of fuel without\n full payment being received. This could have been for a variety of reasons, for example, if\n the vehicle in the photo isn't yours, you may be a victim of stolen or doctored plates and\n it's important you let us know.\n

\n

\n You can pay now by visiting alfiepay.com/{recovery.organizationKey}, using{' '}\n {recovery.licensePlate} and unique code {recovery.debtIdentifier} when\n directed. Alternatively, you can pop back into {siteName} to pay in person.\n

\n

\n Until payment is received you will be required to prepay for fuel purchases at Caltex.\n Please contact our team at {siteName} if you have any questions.\n

\n\n \n Kind regards,\n {teamName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCopyDateShort,\n getCopyTime,\n getSiteName,\n P,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const FirstLetterMobil: FC = ({ recovery }) => {\n const siteName = getSiteName(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor Vehicle\n Register.\n

\n

\n At {getCopyTime(recovery)} on {getCopyDateShort(recovery)} at {siteName}, we believe a\n vehicle with your number plate acquired {getCurrencyFormat(recovery.amount)} of fuel without\n full payment being received. This could have been for a variety of reasons, for example, if\n the vehicle in the photo isn't yours, you may be a victim of stolen or doctored plates and\n it's important you let us know.\n

\n

\n Please pay by credit card now by visiting alfiepay.com/{recovery.organizationKey}\n , using {recovery.licensePlate} and unique code {recovery.debtIdentifier} when\n directed. Alternatively, you can pop back into {siteName} to pay in person.\n

\n

\n Until payment is received, {recovery.licensePlate} will be required to pre-pay for\n fuel purchases.\n

\n\n \n Kind regards,\n The Team at {siteName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCopyDate,\n getSiteName,\n P,\n Phone,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const FirstLetterZ: FC = ({ recovery }) => {\n const { helpPhone, storeDescription, teamName } = getOrgDetails(recovery.organizationKey);\n const siteName = getSiteName(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor\n Vehicle Register.\n

\n

\n At {getCopyDate(recovery)} at {siteName}, the vehicle received{' '}\n {getCurrencyFormat(recovery.amount)} of fuel without full payment being made. This\n could have happened for a variety of reasons such as a mistake whilst using\n Pay@Pump, accidentally paying for someone else’s fuel at the till or forgetting to\n pay on the day. Don’t worry, we know mistakes happen!\n

\n

\n You can pay by credit card now by visiting{' '}\n alfiepay.com/{recovery.organizationKey}, using{' '}\n {recovery.licensePlate} and unique code {recovery.debtIdentifier} when\n directed. Alternatively, you can pop into any {storeDescription} station to pay in\n person.\n

\n

\n Until payment is received {recovery.licensePlate} will be required to prepay\n for fuel purchases at all {storeDescription} stores. Sorry for the inconvenience\n this might cause.\n

\n

\n Please call us on {helpPhone} (0800 Z ENERGY) if you have any\n questions or need help. You can also email us at general@z.co.nz.\n

\n\n \n Kind regards,\n {teamName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCollectionFeeDate,\n getCopyDate,\n getSiteName,\n P,\n Phone,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const SecondLetterBP: FC = ({ recovery }) => {\n const { helpPhone, storeDescription, teamName } = getOrgDetails(recovery.organizationKey);\n const siteName = getSiteName(recovery);\n const copyDate = getCopyDate(recovery);\n const collectionFeeDate = getCollectionFeeDate(recovery);\n\n return (\n
\n

Dear {recovery.recipient}

\n

\n We are writing to you as the registered owner of a vehicle with the number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor Vehicle\n Register.\n

\n

\n This is a reminder that payment of {getCurrencyFormat(recovery.amount)} is still outstanding\n for fuel received at {copyDate} at {siteName}. We believe a vehicle with your number plate\n was involved and this could have been for a variety of reasons. For example, if the vehicle\n in the photo isn't yours, you may be a victim of stolen or doctored plates and it's\n important you let us know.\n

\n

\n We want to fix this matter for you quickly, so please call us on {helpPhone}{' '}\n to discuss (select option 8 from the menu). Our phones are open Monday to Friday between 9am\n and 5pm.\n

\n

\n Or alternatively, you can pay now by visiting{' '}\n alfiepay.com/{recovery.organizationKey}, using {recovery.licensePlate} and\n unique code {recovery.debtIdentifier} when directed. Or you can pop into your local{' '}\n {storeDescription} store to pay in person.\n

\n {recovery.collectionFee && (\n

\n As this is the second letter we have sent, a collection fee of{' '}\n {getCurrencyFormat(recovery.collectionFee)} may be applied if the matter hasn't been\n resolved by {collectionFeeDate}.\n

\n )}\n \n Kind regards,\n {teamName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCopyDate,\n getSiteName,\n P,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const SecondLetterBPFranchise: FC = ({ recovery }) => {\n const { teamName } = getOrgDetails(recovery.organizationKey);\n const siteName = getSiteName(recovery);\n const copyDate = getCopyDate(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor Vehicle\n Register.\n

\n

\n This is a reminder that payment of {getCurrencyFormat(recovery.amount)} is still outstanding\n for fuel received at {copyDate} at {siteName}. We believe a vehicle with your number plate\n was involved and this could have been for a variety of reasons. For example, if the vehicle\n in the photo isn't yours, you may be a victim of stolen or doctored plates and it's\n important you let us know.\n

\n

\n If you have already paid or resolved this matter, please disregard this letter.\n

\n

\n You can pay now by visiting alfiepay.com/{recovery.organizationKey}, using{' '}\n {recovery.licensePlate} and unique code {recovery.debtIdentifier} when\n directed. Alternatively, you can pop into {siteName} to pay in person.\n

\n

\n While this matter remains unresolved you will be required to prepay for fuel purchases at\n all bp stores.\n

\n

If you have any questions, feel free to come and see us in-store.

\n\n \n Kind regards,\n {teamName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCopyDate,\n getSiteName,\n P,\n Phone,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const SecondLetterZ: FC = ({ recovery }) => {\n const { helpPhone, teamName } = getOrgDetails(recovery.organizationKey);\n const siteName = getSiteName(recovery);\n const copyDate = getCopyDate(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor\n Vehicle Register.\n

\n

\n This is the 2nd letter we’ve sent regarding this unpaid fuel incident.\n

\n

\n This is a reminder that payment of {getCurrencyFormat(recovery.amount)} is still\n outstanding for fuel received at {copyDate} at {siteName}. We understand this may\n have been a mistake and would appreciate payment, or a phone call to help resolve\n the unpaid fuel incident.\n

\n

\n Please pay by visiting alfiepay.com/{recovery.organizationKey}, using{' '}\n {recovery.licensePlate} and unique code {recovery.debtIdentifier} when\n directed. Alternatively, you can pop into any Z station to pay in person.\n

\n

\n While this matter remains unresolved {recovery.licensePlate} will be required\n to prepay for fuel purchases at all Z stations. If you are unable to make payment or\n unable to contact us to discuss the unpaid fuel incident, we may consider providing\n your information to a debt collection agency and this could impact your future\n credit rating.\n

\n

\n For any help with this matter, please call us on {helpPhone} (0800 Z\n ENERGY). You can also email us at general@z.co.nz.\n

\n\n \n Kind regards,\n {teamName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCopyDate,\n getSiteName,\n P,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const SecondLetterMobil: FC = ({ recovery }) => {\n const siteName = getSiteName(recovery);\n const copyDate = getCopyDate(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor Vehicle\n Register.\n

\n

\n This is a reminder that payment of {getCurrencyFormat(recovery.amount)} is still outstanding\n for fuel received at {copyDate} at {siteName}. We believe a vehicle with your number plate\n was involved and this could have been for a variety of reasons. For example, if the vehicle\n in the photo isn't yours, you may be a victim of stolen or doctored plates and it's\n important you let us know.\n

\n

\n You can pay now by visiting alfiepay.com/{recovery.organizationKey}, using{' '}\n {recovery.licensePlate} and unique code {recovery.debtIdentifier} when\n directed. Alternatively, you can pop back into {siteName} to pay in person.\n

\n

\n While this matter remains unresolved, you will be required to prepay for fuel purchases. If\n you wish to query this matter, please head back to the {siteName} store.\n

\n\n \n Kind regards,\n The Team at {siteName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n P,\n getSiteName,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n getCopyTime,\n getCopyDateShort,\n} from './PrintPage';\n\nexport const FirstLetterCaltex: FC = ({ recovery }) => {\n const { teamName } = getOrgDetails(recovery.organizationKey);\n const siteName = getSiteName(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor Vehicle\n Register.\n

\n

\n At {getCopyTime(recovery)} on {getCopyDateShort(recovery)} at {siteName}, we believe a\n vehicle with your number plate acquired {getCurrencyFormat(recovery.amount)} of fuel without\n full payment being received. This could have been for a variety of reasons, for example, if\n the vehicle in the photo isn't yours, you may be a victim of stolen or doctored plates and\n it's important you let us know.\n

\n

\n You can pay now by visiting alfiepay.com/{recovery.organizationKey}, using{' '}\n {recovery.licensePlate} and unique code {recovery.debtIdentifier} when\n directed. Alternatively, you can pop back into {siteName} to pay in person.\n

\n

\n Until payment is received, you will be required to prepay for fuel purchases at Caltex.\n Please contact our team at {siteName} if you have any questions.\n

\n\n \n Kind regards,\n {teamName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCopyDate,\n P,\n getSiteName,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const SecondLetterCaltex: FC = ({ recovery }) => {\n const { teamName } = getOrgDetails(recovery.organizationKey);\n const siteName = getSiteName(recovery);\n const copyDate = getCopyDate(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor Vehicle\n Register.\n

\n

\n This is a reminder that payment of {getCurrencyFormat(recovery.amount)} is still outstanding\n for fuel received at {copyDate} at {siteName}. We believe a vehicle with your number plate\n was involved and this could have been for a variety of reasons. For example, if the vehicle\n in the photo isn't yours, you may be a victim of stolen or doctored plates and it's\n important you let us know.\n

\n

\n You can pay now by visiting alfiepay.com/{recovery.organizationKey}, using{' '}\n {recovery.licensePlate} and unique code {recovery.debtIdentifier} when\n directed. Alternatively, you can pop back into {siteName} to pay in person.\n

\n

Until payment is received, you will be required to prepay for fuel purchases at Caltex.

\n\n \n Kind regards,\n {teamName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCopyDate,\n getSiteName,\n P,\n Phone,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const FirstLetterNpd: FC = ({ recovery }) => {\n const { helpPhone, storeDescription, teamName } = getOrgDetails(recovery.organizationKey);\n const siteName = getSiteName(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor\n Vehicle Register.\n

\n

\n At {getCopyDate(recovery)} at {siteName}, a vehicle with your number plate received{' '}\n {getCurrencyFormat(recovery.amount)} of fuel without full payment being made. This\n could be for a variety of reasons.\n

\n

\n You can pay now by visiting alfiepay.com/{recovery.organizationKey},\n using {recovery.licensePlate} and unique code{' '}\n {recovery.debtIdentifier} when directed. Alternatively, you can pop into {' '}\n {siteName} to pay in person.\n

\n

\n If the vehicle in the photo isn't yours, you may be a victim of stolen or doctored\n plates. If you have any questions, feel free to call the NPD team on {' '}\n {helpPhone} or come and see us in-store.\n

\n

\n Until payment is received you will be required to pre-pay for fuel purchases at all{' '}\n {storeDescription} stores.\n

\n\n \n Kind regards,\n {teamName}\n \n
\n );\n};\n","import React, { FC } from 'react';\nimport { getOrgDetails } from 'styles/theme';\nimport { getCurrencyFormat } from 'utils/currency';\nimport {\n getCopyDate,\n getSiteName,\n P,\n PrintPageComponent,\n Signature,\n Signoff,\n Url,\n} from './PrintPage';\n\nexport const SecondLetterNpd: FC = ({ recovery }) => {\n const { teamName } = getOrgDetails(recovery.organizationKey);\n const siteName = getSiteName(recovery);\n const copyDate = getCopyDate(recovery);\n\n return (\n
\n

Dear {recovery.recipient},

\n

\n We are writing to you as the registered owner of a vehicle with number plate{' '}\n {recovery.licensePlate}. Your details have been obtained from the Motor\n Vehicle Register.\n

\n

\n This is a reminder that payment of {getCurrencyFormat(recovery.amount)} is still\n outstanding for fuel your vehicle received at {copyDate} at {siteName}. \n If you have already paid or resolved this matter, please disregard this letter.\n

\n

\n You can pay now by visiting alfiepay.com/{recovery.organizationKey},\n using {recovery.licensePlate} and unique code{' '}\n {recovery.debtIdentifier} when directed. Alternatively, you can pop into{' '}\n {siteName} to pay in person.\n

\n

\n While this matter remains unresolved you will be required to prepay for fuel\n purchases at all NPD stores.\n

\n

\n If you have any questions, feel free to call the NPD team on 03 365 8988 or come and see us in-store.\n

\n\n \n Kind regards,\n {teamName}\n \n
\n );\n};\n","import { LetterTemplateCode } from 'api/Api';\nimport React, { FC } from 'react';\nimport { globalHandleError } from 'utils/globalHandleError';\nimport { FirstLetterBP } from './FirstLetterBP';\nimport { FirstLetterBPFranchise } from './FirstLetterBPFranchise';\nimport { FirstLetterMobil } from './FirstLetterMobil';\nimport { FirstLetterZ } from './FirstLetterZ';\nimport { PrintPageComponent } from './PrintPage';\nimport { SecondLetterBP } from './SecondLetterBP';\nimport { SecondLetterBPFranchise } from './SecondLetterBPFranchise';\nimport { SecondLetterZ } from './SecondLetterZ';\nimport { SecondLetterMobil } from './SecondLetterMobil';\nimport { FirstLetterCaltex } from './FirstLetterCaltex';\nimport { SecondLetterCaltex } from './SecondLetterCaltex';\nimport { FirstLetterNpd } from './FirstLetterNPD';\nimport { SecondLetterNpd } from './SecondLetterNPD';\n\nexport const PdfBody: FC = ({ recovery }) => {\n const { letterTemplateCode, secondDebtLetterDetails } = recovery;\n\n const firstLetter = !secondDebtLetterDetails;\n\n switch (letterTemplateCode) {\n case LetterTemplateCode.BpCorporate:\n return firstLetter ? (\n \n ) : (\n \n );\n case LetterTemplateCode.BpFranchise:\n return firstLetter ? (\n \n ) : (\n \n );\n case LetterTemplateCode.Z:\n return firstLetter ? (\n \n ) : (\n \n );\n case LetterTemplateCode.Mobil:\n return firstLetter ? (\n \n ) : (\n \n );\n case LetterTemplateCode.Caltex:\n return firstLetter ? (\n \n ) : (\n \n );\n case LetterTemplateCode.Npd:\n return firstLetter ? (\n \n ) : (\n \n )\n \n case LetterTemplateCode.Default:\n globalHandleError(\n new Error(`LetterTemplateCode '${recovery.letterTemplateCode}' is not supported`),\n );\n return null;\n default:\n const unsupported: never = letterTemplateCode;\n globalHandleError(new Error(`LetterTemplateCode '${unsupported}' is not supported`));\n return null;\n }\n};\n","import { DebtLetterDetails, LetterTemplateCode } from 'api/Api';\nimport { parseISO } from 'date-fns';\nimport React from 'react';\nimport styled, { css, ThemeProvider } from 'styled-components';\nimport { getOrgDetails, toStyledTheme } from 'styles/theme';\nimport { getCurrencyFormat, getCurrencyFormatFromString } from 'utils/currency';\nimport { formatDate } from 'utils/date';\nimport { formatVolume } from 'utils/volume';\nimport { PdfBody } from './PdfBody';\n\n// WARNING: This is no longer used to generate letters. Instead see: Auror.Alfiepay.Functions>LetterRun>Templates\nexport interface PrintPageComponent {\n recovery: DebtLetterDetails;\n}\n\nconst Page = styled.div`\n width: 216mm;\n overflow: hidden;\n position: relative;\n -webkit-print-color-adjust: exact;\n -webkit-filter: opacity(1);\n color: rgba(40, 47, 54, 0.8);\n font-family: Arial, Helvetica, sans-serif;\n font-size: 12px;\n padding: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n &:not(:last-child) {\n page-break-after: always;\n }\n @media screen {\n background: white;\n box-shadow: 0 0.5mm 2mm rgba(0, 0, 0, 0.3);\n margin: 5mm auto;\n }\n`;\n\nconst Header = styled.div`\n background-color: rgba(234, 234, 234, 0.5);\n display: grid;\n flex: 0 0 103mm;\n grid: 71mm 32mm / 1fr;\n`;\n\nconst Footer = styled.div`\n display: grid;\n flex: 0 0 199mm;\n grid: 71mm 32mm / 1fr;\n padding: 0 20mm;\n font-size: 9px;\n`;\n\nconst AddressBlock = styled.div`\n padding: 45mm 30mm 0;\n z-index: 1;\n`;\n\nconst Name = styled.div``;\n\nconst Address = styled.div`\n white-space: pre;\n`;\n\nconst Logo = styled.img`\n height: 24mm;\n top: 6mm;\n position: absolute;\n right: 12mm;\n`;\n\nconst Workflow = styled.div`\n align-self: flex-start;\n font-size: 12px;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n padding-top: 19px;\n justify-self: center;\n z-index: 1;\n`;\n\nconst StepsHeading = styled.div`\n color: #555;\n font-size: 1rem;\n`;\n\nconst Steps = styled.div<{ late: boolean }>`\n ${({ late }) =>\n late\n ? css`\n border-radius: 4px;\n `\n : css`\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.15) !important;\n border-radius: 4px;\n `}\n display: flex;\n align-content: center;\n justify-content: center;\n & h4 {\n margin: 0 0 1px;\n font-size: 7px;\n line-height: 7px;\n font-weight: 400;\n text-transform: uppercase;\n }\n`;\n\nconst Step = styled.div`\n color: #555;\n display: flex;\n flex-direction: column;\n padding: 7px 8px 7px 26px;\n position: relative;\n & a {\n line-height: 14px;\n }\n & h4 {\n font-weight: 600;\n }\n &:first-child {\n padding-left: 8px;\n }\n &:after {\n content: '';\n position: absolute;\n right: -35px;\n top: 0;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n border-width: 18px;\n z-index: 1;\n }\n`;\n\nconst Pay = styled(Step)<{ late: boolean }>`\n align-items: center;\n flex-direction: row;\n background: #fff;\n padding-right: 12px;\n ${({ late }) =>\n late\n ? css`\n border-radius: 0 4px 0 0;\n `\n : css`\n border-radius: 0 4px 4px 0;\n `}\n h4 {\n align-items: center;\n display: flex;\n margin: 0;\n font-size: 12px;\n font-weight: 400;\n text-transform: unset;\n }\n svg {\n color: #009639;\n margin-left: 7px;\n height: 16px;\n width: 16px;\n }\n`;\n\nconst Visit = styled(Step)<{ late?: boolean }>`\n background: ${({ theme }) => theme.pdfVisitBackground};\n color: ${({ theme }) => theme.pdfVisitText};\n ${({ late }) =>\n late\n ? css`\n border-radius: 4px 0 0 0;\n `\n : css`\n border-radius: 4px 0 0 4px;\n `}\n & h4 {\n color: ${({ theme }) => theme.pdfVisitHeader};\n }\n &:after {\n border-left-color: ${({ theme }) => theme.pdfVisitBackground};\n }\n`;\n\nconst NumberPlate = styled(Step)`\n background: ${({ theme }) => theme.pdfRegistrationBackground};\n color: ${({ theme }) => theme.pdfRegistrationText};\n &:after {\n border-left-color: ${({ theme }) => theme.pdfRegistrationBackground};\n }\n`;\n\nconst Code = styled(Step)`\n background: ${({ theme }) => theme.pdfCodeBackground};\n color: ${({ theme }) => theme.pdfCodeText};\n &:after {\n border-left-color: ${({ theme }) => theme.pdfCodeBackground};\n }\n`;\n\nconst Body = styled.div`\n align-items: flex-start;\n display: grid;\n flex: 0 0 199mm;\n grid: auto 1fr / 1fr 1fr;\n padding: 0 20mm;\n`;\n\nexport const P = styled.div`\n line-height: 1.5;\n margin: 0 2rem 1rem 0;\n`;\n\nconst PrintDate = styled.div`\n grid-column: 1 / span 2;\n padding: 24px 0;\n`;\n\nexport const Signoff = styled.div`\n margin-top: 4em;\n`;\n\nexport const Signature = styled.div`\n margin-top: 1em;\n`;\n\nconst Details = styled.div`\n background-color: rgba(234, 234, 234, 0.5);\n font-size: 12px;\n width: 320px;\n`;\n\nconst DetailRow = styled.div`\n display: flex;\n border-top: 1px solid #cccccc;\n &:first-of-type {\n border-top: none;\n }\n`;\n\nexport const Url = styled.span`\n color: ${({ theme }) => theme.primaryColor};\n display: inline-block;\n font-weight: 600;\n`;\n\nconst DetailsImage = styled.img`\n border-radius: 4px 4px 0 0;\n max-width: 320px;\n max-height: 320px;\n justify-self: center;\n`;\n\nconst Detail = styled.div<{ flexBasis: number }>`\n ${({ flexBasis }) =>\n css`\n flex: 1 0 ${flexBasis}px;\n `}\n\n padding: 8px;\n font-size: 11px;\n line-height: 12px;\n\n & h4 {\n color: #555555;\n font-size: 8px;\n font-weight: 600;\n line-height: 8px;\n margin: 0 0 3px;\n text-transform: uppercase;\n }\n & h5 {\n color: #555555;\n font-size: 11px;\n font-weight: 600;\n line-height: 12px;\n margin: 0;\n }\n`;\n\nconst Plate = styled.div`\n align-items: center;\n border: 1px solid #555;\n border-radius: 4px;\n background-color: #fff;\n display: inline-flex;\n font-size: 18px;\n font-weight: 600;\n letter-spacing: 0.6px;\n line-height: 1;\n padding: 6px 12px;\n`;\n\nconst LateStrap = styled.div`\n background: #db524b;\n border-radius: 0 0 4px 4px;\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.15) !important;\n justify-self: stretch;\n color: #fff;\n font-size: 7px;\n font-weight: 600;\n padding: 4px 0;\n line-height: 1;\n text-align: center;\n text-transform: uppercase;\n`;\n\nexport const Phone = styled.b`\n white-space: nowrap;\n`;\n\nexport const getCopyDate = (recovery: DebtLetterDetails) =>\n formatDate(parseISO(recovery.dateOfIncident), `h:mma 'on' EEEE d MMMM yyyy`);\n\nexport const getCopyDateShort = (recovery: DebtLetterDetails) =>\n formatDate(parseISO(recovery.dateOfIncident), `d MMMM yyyy`);\n\nexport const getCopyTime = (recovery: DebtLetterDetails) =>\n formatDate(parseISO(recovery.dateOfIncident), `h:mma`);\n\nexport const getSiteName = (recovery: DebtLetterDetails) =>\n (recovery.incidentDetails && recovery.incidentDetails.SiteName) || '';\n\nexport const getSitePhone = (recovery: DebtLetterDetails) =>\n (recovery.incidentDetails && recovery.incidentDetails.SitePhoneNumber) || null;\n\nexport const getCollectionFeeDate = (recovery: DebtLetterDetails) => {\n if (recovery.secondDebtLetterDetails) {\n return formatDate(\n parseISO(recovery.secondDebtLetterDetails.collectionFeeAppliedOn),\n\n `EEEE d MMMM yyyy`,\n );\n }\n return undefined;\n};\n\nexport const PrintPage: React.FC = ({ recovery }) => {\n const { logo } = getOrgDetails(recovery.organizationKey);\n const detailsDate = formatDate(parseISO(recovery.dateOfIncident), `EEEE d MMMM yyyy 'at' h:mma`);\n const pdfGenerationDate = formatDate(parseISO(recovery.pdfGenerationDate), `EEEE d MMMM yyyy`);\n\n const { secondDebtLetterDetails } = recovery;\n\n let collectionFeeAppliedOn: string | undefined;\n if (secondDebtLetterDetails) {\n collectionFeeAppliedOn = formatDate(\n parseISO(secondDebtLetterDetails.collectionFeeAppliedOn),\n\n `EEEE d MMMM yyyy`,\n );\n }\n\n const siteName = getSiteName(recovery);\n const siteAddress = (recovery.incidentDetails && recovery.incidentDetails.SiteAddress) || '';\n const productName = (recovery.incidentDetails && recovery.incidentDetails.ProductName) || '';\n const productQuantity =\n (recovery.incidentDetails && recovery.incidentDetails.ProductQuantity) || '';\n const productPrice = (recovery.incidentDetails && recovery.incidentDetails.ProductPrice) || '';\n\n const theme = toStyledTheme(recovery.organizationKey);\n\n return (\n \n \n
\n \n {recovery.recipient}\n
{recovery.postalAddress}
\n
\n \n \n Payment instructions\n \n \n

Visit

\n alfiepay.com/{recovery.organizationKey}/pay\n
\n \n

Number plate

\n {recovery.licensePlate}\n
\n \n

Unique Code

\n {recovery.debtIdentifier}\n
\n \n

\n Pay\n \n \n \n \n

\n
\n
\n {collectionFeeAppliedOn &&\n (!recovery.collectionFee ? (\n \n Pay by {collectionFeeAppliedOn} to avoid further action being taken\n \n ) : recovery.letterTemplateCode == LetterTemplateCode.BpCorporate ? (\n \n If you have already paid or resolved this matter, please disregard this letter\n \n ) : (\n Pay by {collectionFeeAppliedOn} to avoid collection fees\n ))}\n
\n
\n \n {pdfGenerationDate}\n \n
\n {recovery.fawkesImage && recovery.fawkesImage.thumbnailLargeUrl && (\n \n )}\n \n \n

Date

\n
{detailsDate}
\n
\n
\n \n \n

Location

\n
{siteName}
\n
{siteAddress}
\n
\n
\n \n \n

Number plate

\n {recovery.licensePlate}\n
\n \n

Fuel Type

\n
{productName}
\n
\n
\n \n \n

Cost per litre

\n
{getCurrencyFormatFromString(productPrice, 4)}
\n
\n \n

Litres

\n
{formatVolume(productQuantity)}
\n
\n \n

Amount

\n
{getCurrencyFormat(recovery.amount)}
\n
\n
\n
\n \n
\n

\n If you have been sent a letter with your registered vehicle details, please note that\n this information has been obtained from the Motor Vehicle Register in order to provide\n you with notification of that vehicle's involvement in non-payment at a fuel retailer{' '}\n (authorised by NZTA under New Zealand Gazette Notice 2022-au2513). An individual can\n notify the Registrar should they wish to remove their name and address from the\n register.\n

\n
\n
\n
\n );\n};\n\nexport default PrintPage;\n","import PrintPage from 'components/Printing/PrintPage';\nimport { observer } from 'mobx-react-lite';\nimport React from 'react';\nimport { createGlobalStyle, StyleSheetManager } from 'styled-components';\nimport { toRecoveryKey } from 'utils/recovery';\nimport { PrintDocumentViewModel } from './PrintDocumentViewModel';\n\ninterface PrintDocumentComponent {\n vm: PrintDocumentViewModel;\n}\n\nconst GlobalPrintStyle = createGlobalStyle`\n@media print {\n @page {\n size: auto;\n margin: 0;\n }\n body {\n margin: 0;\n padding: 0;\n min-width: unset !important;\n -webkit-print-color-adjust: exact;\n }\n}\n`;\n\nexport const PrintDocument: React.FC = observer(({ vm }) => {\n return (\n <>\n {vm.recoveries.map(recovery => (\n \n ))}\n \n );\n});\n\nexport const PrintDocumentFrameContent: React.FC<{\n vm: PrintDocumentViewModel;\n head: HTMLHeadElement;\n}> = observer(({ vm, head }) => {\n return (\n \n <>\n \n \n \n \n );\n});\n","import { DebtLetterDetails } from 'api/Api';\n\nexport class PrintDocumentViewModel {\n constructor(readonly recoveries: DebtLetterDetails[]) {}\n}\n","import {\n Api,\n apiInstance,\n DebtDetails,\n DebtLetterDetails,\n DebtState,\n DebtStateTrigger,\n InvalidDebtStateApiError,\n InvalidDebtStateDetails,\n} from 'api/Api';\nimport { SnackbarControllerViewModel } from 'components/Snackbar/SnackbarControllerViewModel';\nimport fastDeepEqual from 'fast-deep-equal';\nimport { action, computed, observable } from 'mobx';\nimport { PrintDocumentFrameContent } from 'pages/Printing/PrintDocument';\nimport { PrintDocumentViewModel } from 'pages/Printing/PrintDocumentViewModel';\nimport { ensureImagesAreLoaded } from 'pages/RecoveryAdmin/RecoveryAdminViewModel';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { getPrintTime } from 'utils/date';\nimport { getUniqueId } from 'utils/getUniqueId';\nimport { globalHandleError } from 'utils/globalHandleError';\nimport {themeMap} from 'styles/theme';\n\nexport const visibleCardCount = 12;\n\nexport const isValidDebt = ({ incidentDetails, licensePlate, organizationKey }: DebtLetterDetails) => {\n const volume = (incidentDetails && incidentDetails.ProductQuantity) || '';\n const price = parseFloat((incidentDetails && incidentDetails.ProductPrice) || '') || 0;\n\n const validVolume = !!volume && parseFloat(volume) !== 1; // volume not default of \"1\"\n const validPrice = price < 5; // price < $5/L\n const validPlate = !/\\*/.test(licensePlate); // plate doesn't have * in it\n\n // Check if we have a valid theme for the letter template\n const validLetterTemplate = (organizationKey in themeMap);\n\n return validVolume && validPrice && validPlate && validLetterTemplate;\n};\n\nexport class PrintTriageViewModel {\n @computed\n get toPrintData() {\n return this.toPrint.slice(0, visibleCardCount);\n }\n @computed\n get rejectedData() {\n return this.rejected.slice(0, visibleCardCount);\n }\n @computed\n get unassignedData() {\n return this.unassigned.slice(0, visibleCardCount);\n }\n @computed\n get printIds() {\n return this.toPrint.map(recovery => recovery.debtIdentifier);\n }\n\n @observable\n printError = false;\n\n @observable\n confirmMarkChanges = false;\n\n orgFilter?: string;\n\n @observable\n fetching = false;\n\n @observable\n printing = false;\n\n readonly api: Pick<\n Api,\n | 'aurorAdmin_FireDebtStateTrigger'\n | 'aurorAdmin_GetDebtDetailsByStates'\n | 'aurorAdmin_GetDebtDetailsByStatesAndPrintIndex'\n | 'aurorAdmin_GetDebtLetterDetails'\n | 'aurorAdmin_ToPdf'\n >;\n @observable\n badDetails: InvalidDebtStateDetails[] = [];\n\n @observable\n unassigned: DebtLetterDetails[] = [];\n\n @observable\n marking = false;\n\n @observable\n rejected: DebtLetterDetails[] = [];\n\n @observable\n toPrint: DebtLetterDetails[] = [];\n\n @observable\n debtDetails: DebtDetails[] = [];\n\n @observable\n successfulPrintCount = 0;\n\n @observable\n batchSize = 250;\n\n @observable\n total = 0;\n\n @observable\n private assigned: DebtLetterDetails[] = [];\n\n constructor(\n readonly snackbarVm: SnackbarControllerViewModel,\n api?: Pick<\n Api,\n | 'aurorAdmin_FireDebtStateTrigger'\n | 'aurorAdmin_GetDebtDetailsByStates'\n | 'aurorAdmin_GetDebtDetailsByStatesAndPrintIndex'\n | 'aurorAdmin_GetDebtLetterDetails'\n | 'aurorAdmin_ToPdf'\n >,\n ) {\n this.api = api || apiInstance;\n }\n\n @action.bound\n reject(debt?: DebtLetterDetails) {\n if (!debt) {\n return;\n }\n this.assigned.push(debt);\n this.rejected.unshift(debt);\n }\n\n isToPrint(debt: DebtLetterDetails) {\n return this.toPrint.findIndex(x => fastDeepEqual(x, debt)) >= 0;\n }\n\n isRejected(debt: DebtLetterDetails) {\n return this.rejected.findIndex(x => fastDeepEqual(x, debt)) >= 0;\n }\n\n @action.bound\n addToRejected() {\n if (this.unassigned.length === 0) {\n return;\n }\n this.reject(this.unassigned.shift());\n }\n\n @action.bound\n acceptAll() {\n while (this.unassigned.length > 0) {\n this.addToPrint();\n }\n }\n\n @action.bound\n addToPrint() {\n if (this.unassigned.length === 0) {\n return;\n }\n const debt = this.unassigned.shift();\n if (!debt) {\n return;\n }\n this.assigned.push(debt);\n this.toPrint.unshift(debt);\n }\n\n @action.bound\n undo() {\n const debt = this.assigned.pop();\n\n if (debt) {\n this.unassignDebt(debt);\n }\n }\n\n @action.bound\n unassignDebt(debt: DebtLetterDetails) {\n const excludeDebt = (x: DebtLetterDetails) =>\n !(x.debtIdentifier === debt.debtIdentifier && x.licensePlate === x.licensePlate);\n\n if (this.isRejected(debt)) {\n this.rejected = this.rejected.filter(excludeDebt);\n this.unassigned.unshift(debt);\n } else if (this.isToPrint(debt)) {\n this.toPrint = this.toPrint.filter(excludeDebt);\n this.unassigned.unshift(debt);\n }\n }\n\n @action.bound\n handlePrint() {\n this.printAssigned();\n }\n\n @action.bound\n handleLoad() {\n this.load();\n }\n\n @action.bound\n handleMarkChanges() {\n this.markChanges();\n }\n\n @action.bound\n refresh() {\n this.load();\n }\n\n @action.bound\n toggleMarkChanges() {\n this.confirmMarkChanges = !this.confirmMarkChanges;\n }\n\n @action.bound\n private reset() {\n this.debtDetails = [];\n this.unassigned = [];\n this.assigned = [];\n this.toPrint = [];\n this.rejected = [];\n this.badDetails = [];\n }\n\n @transformToMobxFlow\n private async markChanges() {\n this.marking = true;\n try {\n const toPrintIds = this.toPrint.map(x => x.debtIdentifier);\n const toRejectIds = this.rejected.map(x => x.debtIdentifier);\n await this.fireDebtStateTriggerForBatch(toPrintIds, DebtStateTrigger.CommunicationSent);\n await this.fireDebtStateTriggerForBatch(\n toRejectIds,\n DebtStateTrigger.RejectedPrintDetails,\n );\n await this.load(); // reload in place\n } catch (e) {\n globalHandleError(e);\n this.snackbarVm.showSnackbar(getUniqueId(), {\n content: e.message,\n persistent: true,\n });\n } finally {\n this.marking = false;\n this.confirmMarkChanges = false;\n }\n }\n\n async fireDebtStateTriggerForBatch(batchOfIds: string[], trigger: DebtStateTrigger) {\n // If we send too big a batch to the FireDebtStateTrigger endpoint at a time, we\n // risk a time-out. Instead, let's send multiple small batches.\n const batchSize = 25;\n while (batchOfIds.length > 0) {\n const batchToMark = batchOfIds.splice(0, batchSize);\n await this.api.aurorAdmin_FireDebtStateTrigger({\n debtIdentifiers: batchToMark,\n trigger: trigger,\n });\n }\n }\n\n @transformToMobxFlow\n private async load() {\n this.reset();\n\n this.fetching = true;\n try {\n const { debts, total } = await this.api.aurorAdmin_GetDebtDetailsByStatesAndPrintIndex(\n [DebtState.ReadyToSendLetter1, DebtState.ReadyToSendLetter2],\n this.orgFilter,\n 1,\n this.batchSize,\n );\n this.debtDetails = debts;\n this.total = total;\n\n // make sure the debt ids are unique\n const debtIds = [...new Set(this.debtDetails.map(x => x.debtIdentifier))];\n for (const id of debtIds) {\n await this.loadDebtDetail(id);\n }\n } catch (e) {\n globalHandleError(e);\n this.snackbarVm.showSnackbar(getUniqueId(), {\n content: e.message,\n persistent: true,\n });\n } finally {\n this.fetching = false;\n }\n }\n\n @transformToMobxFlow\n private async loadDebtDetail(id: string) {\n const debts = await this.api.aurorAdmin_GetDebtLetterDetails({\n debtIdentifiers: [id],\n });\n\n if (InvalidDebtStateApiError.isInstance(debts)) {\n this.badDetails.push(...debts.details);\n } else {\n debts.forEach(debt => {\n if (isValidDebt(debt)) {\n this.unassigned.push(debt);\n } else {\n this.reject(debt);\n }\n });\n }\n }\n\n @transformToMobxFlow\n private async printAssigned() {\n this.printing = true;\n const debtLetterToPrint = this.toPrint.reverse();\n\n this.printError = false;\n this.successfulPrintCount = 0;\n\n while (debtLetterToPrint.length > 0) {\n const batch = debtLetterToPrint.splice(0, 25);\n\n const printSuccessful = await this.printMixedOrgLetters(batch);\n if (printSuccessful) {\n this.successfulPrintCount += batch.length;\n } else {\n this.printError = true;\n batch.forEach(debt => {\n this.unassignDebt(debt);\n });\n }\n }\n\n this.printing = false;\n this.confirmMarkChanges = true;\n }\n\n @transformToMobxFlow\n private async printMixedOrgLetters(letters: DebtLetterDetails[]) {\n let iframe: HTMLIFrameElement | undefined;\n\n try {\n document.title = this.GeneratePDFName(letters);\n\n iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n document.body.appendChild(iframe);\n const iframeWindow = iframe.contentWindow!;\n\n const root = iframeWindow.document.createElement('div');\n iframeWindow.document.body.appendChild(root);\n\n const vm = new PrintDocumentViewModel(letters);\n\n ReactDOM.render(\n React.createElement(PrintDocumentFrameContent, {\n vm,\n head: iframeWindow.document.head,\n }),\n root,\n );\n\n await ensureImagesAreLoaded(root);\n\n const styleEl = iframeWindow.document.head.querySelector('style');\n const { cssRules } = styleEl!.sheet! as CSSStyleSheet; // if this isn't there we have bigger problems\n const cssDeclarations: string[] = [];\n for (let i = 0; i < cssRules.length; i++) {\n cssDeclarations.push(cssRules[i].cssText);\n }\n const style = cssDeclarations.join(' ');\n\n let blob;\n blob = await this.api\n .aurorAdmin_ToPdf({\n fawkesEventResourceLocators: letters.map(x => x.debtIdentifier),\n html: `${root.outerHTML}`,\n })\n .then(res => res.blob());\n\n const hiddenElement = document.createElement('a');\n hiddenElement.href = URL.createObjectURL(blob);\n hiddenElement.target = '_blank';\n hiddenElement.download = `${document.title}.pdf`;\n hiddenElement.click();\n\n // wait for next tick to remove iframe to let printing happen consistently\n await new Promise(resolve => {\n setTimeout(() => {\n iframe && iframe.remove();\n resolve();\n });\n });\n return true;\n } catch (e) {\n globalHandleError(e);\n return false;\n }\n }\n\n private GeneratePDFName(letters: DebtLetterDetails[]): string {\n const printingBatch = letters[0].printingBatch;\n const indexes: number[] = letters.map(x => x.index);\n const minIndex = Math.min(...indexes)\n .toString()\n .padStart(5, '0');\n const maxIndex = Math.max(...indexes)\n .toString()\n .padStart(5, '0');\n\n return `Alfiepay_Print_${printingBatch}_${minIndex}_${maxIndex}_${getPrintTime()}`;\n }\n}\n","import React, { useRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport { useMousePosition } from 'utils/useMousePosition';\n\ninterface TriageImageComponent {\n small: boolean;\n src: string;\n}\n\nconst Image = styled.img<{ small: boolean }>`\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n ${({ small }) =>\n small\n ? css`\n max-height: 10rem;\n `\n : css`\n max-height: 20rem;\n `}\n max-width: 100%;\n\n transition: transform ease-in-out 0.1s, transform-origin ease-in-out 0.1s;\n`;\n\nconst ImageBox = styled.div<{ small: boolean; zoomable: boolean; zoomed: boolean }>`\n align-items: center;\n display: flex;\n justify-content: center;\n ${({ small }) =>\n small\n ? css`\n min-height: 10rem;\n `\n : css`\n min-height: 20rem;\n `}\n ${({ zoomable, zoomed }) =>\n zoomable &&\n css`\n overflow: hidden;\n &:hover img {\n cursor: ${zoomed ? 'zoom-out' : 'zoom-in'};\n }\n `}\n`;\n\nexport const TriageImage: React.FC = ({ small, src }) => {\n const [zoomed, setZoom] = React.useState(false);\n const ref = useRef(null);\n const position = useMousePosition(ref.current);\n\n const zoom = () => setZoom(!zoomed);\n const style = small\n ? undefined\n : {\n transformOrigin: `${position.x}px ${position.y}px`,\n transform: zoomed ? `scale(2.5)` : undefined,\n };\n\n return (\n \n \n \n );\n};\n","import throttle from 'lodash.throttle';\nimport { useEffect, useState } from 'react';\n\nexport const useMousePosition = (el: HTMLElement | null) => {\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const throttledSetPosition = throttle(setPosition, 100);\n\n useEffect(() => {\n if (!el) {\n return;\n }\n const setFromEvent = (e: MouseEvent) => {\n const { top, left } = el.getBoundingClientRect();\n throttledSetPosition({ x: e.clientX - left, y: e.clientY - top });\n };\n el.addEventListener('mousemove', setFromEvent);\n\n return () => {\n el.removeEventListener('mousemove', setFromEvent);\n };\n }, [el]);\n\n return position;\n};\n","import { DebtLetterDetails } from 'api/Api';\nimport { motion } from 'framer-motion';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { toRecoveryKey } from 'utils/recovery';\nimport { visibleCardCount } from './PrintTriageViewModel';\nimport { TriageImage } from './TriageImage';\n\ninterface TriageCardComponent {\n index: number;\n initial?: boolean;\n recovery: DebtLetterDetails;\n small?: boolean;\n translateX: number;\n}\n\nconst Card = styled(motion.div)`\n background: #fff;\n border: 1px solid #ccc;\n border-radius: 4px;\n box-shadow: 0 1px 4px 1px rgba(0, 0, 0, 0.25);\n margin: 0;\n grid-column: 1;\n grid-row: 1;\n overflow: hidden;\n padding: 0.25rem 0.25rem 0;\n`;\n\nexport const TriageCard: React.FC = ({\n children,\n index,\n initial,\n recovery,\n small = false,\n translateX,\n}) => {\n const imgUrl = recovery.fawkesImage && recovery.fawkesImage.imageFullSizeUrl;\n return (\n \n {imgUrl && }\n {children}\n \n );\n};\n","import { observer } from 'mobx-react-lite';\nimport React, { FC } from 'react';\nimport { toRecoveryKey } from 'utils/recovery';\nimport {\n DetailStrap,\n EmptyTriageCard,\n LicensePlate,\n Organization,\n PrintTriageComponent,\n TriageHeader,\n TriageStack,\n} from './PrintTriage';\nimport { TriageCard } from './TriageCard';\n\nexport const RejectedStack: FC = observer(({ vm }) => {\n return (\n
\n \n Invalid {vm.rejected.length > 0 && `(${vm.rejected.length})`}\n \n\n {vm.rejected.length === 0 ? (\n None yet\n ) : (\n \n {vm.rejectedData.map((recovery, i) => {\n return (\n \n \n {recovery.licensePlate}\n {recovery.organizationKey}\n \n \n );\n })}\n \n )}\n
\n );\n});\n","import { Spinner } from 'components/Spinner/Spinner';\nimport { observer } from 'mobx-react-lite';\nimport React, { FC } from 'react';\nimport { Button } from 'reactstrap';\nimport { pluraliser } from 'utils/pluraliser';\nimport { toRecoveryKey } from 'utils/recovery';\nimport {\n DetailStrap,\n EmptyTriageCard,\n LicensePlate,\n Organization,\n PrintTriageComponent,\n TriageHeader,\n TriageStack,\n} from './PrintTriage';\nimport { TriageCard } from './TriageCard';\n\nexport const ToPrintStack: FC = observer(({ vm }) => {\n return (\n
\n \n To print {vm.toPrint.length > 0 && `(${vm.toPrint.length})`}\n \n {vm.toPrint.length === 0 ? (\n None yet\n ) : (\n <>\n \n {vm.toPrintData.map((recovery, i) => {\n return (\n \n \n {recovery.licensePlate}\n {recovery.organizationKey}\n \n \n );\n })}\n \n \n )}\n \n {vm.printing ? (\n <>\n Printed {vm.successfulPrintCount}/\n {vm.toPrint.length}\n \n ) : (\n <>\n Print{' '}\n {vm.toPrint.length > 0 &&\n pluraliser(vm.toPrint.length, 'recovery', 'recoveries')}\n \n )}\n \n
\n );\n});\n","import { observer } from 'mobx-react-lite';\nimport React, { FC } from 'react';\nimport { Alert, Button, Modal, ModalBody, ModalFooter, ModalHeader, Spinner } from 'reactstrap';\nimport styled from 'styled-components';\nimport { pluraliser } from 'utils/pluraliser';\nimport { PrintTriageComponent } from './PrintTriage';\n\nconst StyledAlert = styled(Alert)`\n margin: 1rem -1rem 0;\n`;\n\nfunction confirmMessage(toPrint: number, rejected: number) {\n return (\n <>\n {toPrint > 0 && {pluraliser(toPrint, 'recovery', 'recoveries')} as printed}\n {toPrint > 0 && rejected > 0 && ' and '}\n {rejected > 0 && {pluraliser(rejected, 'recovery', 'recoveries')} as rejected}\n \n );\n}\n\nexport const TriageStatus: FC = observer(({ vm }) => {\n return (\n \n Mark recoveries as processed?\n \n This will mark {confirmMessage(vm.toPrint.length, vm.rejected.length)} and fetch\n more recoveries for review.\n {vm.printError && (\n \n Unfortunately there were some printing errors. These have been returned to{' '}\n Unassigned so you can try again.\n \n )}\n \n \n \n \n \n \n );\n});\n","import { Spinner } from 'components/Spinner/Spinner';\nimport { AnimatePresence } from 'framer-motion';\nimport { observer } from 'mobx-react-lite';\nimport React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\nimport { getCurrencyFormat } from 'utils/currency';\nimport { toRecoveryKey } from 'utils/recovery';\nimport {\n EmptyTriageCard,\n LicensePlate,\n Organization,\n PrintTriageComponent,\n TriageHeader,\n TriageStack,\n} from './PrintTriage';\nimport { TriageCard } from './TriageCard';\n\ninterface UnassignedStackComponent extends PrintTriageComponent {\n direction: number;\n}\n\nconst DetailItem = styled.div<{ warn: boolean }>`\n font-size: 0.875rem;\n padding: 0.25rem 0.5rem;\n text-align: center;\n ${({ warn }) =>\n warn &&\n css`\n background: #fffbcc;\n `}\n & label {\n display: block;\n font-weight: 600;\n line-height: 1;\n margin: 0;\n }\n`;\nconst TriageDetail = styled.div`\n align-items: center;\n display: flex;\n justify-content: space-between;\n padding: 0 0.75rem 0.75rem;\n`;\n\nexport const UnassignedStack: FC = observer(({ direction, vm }) => {\n return (\n
\n \n {vm.fetching\n ? `Fetching recoveries (${vm.unassigned.length}/${Math.min(\n vm.total,\n vm.batchSize,\n )})`\n : `Recoveries (${vm.unassigned.length})`}\n \n \n {vm.unassigned.length === 0 ? (\n {vm.fetching ? : 'All assigned!'}\n ) : (\n \n {vm.unassignedData.map((recovery, i) => {\n const { incidentDetails } = recovery;\n const volume = incidentDetails && incidentDetails.ProductQuantity;\n const isDefaultVolume = parseFloat(volume || '') === 1;\n const productName = incidentDetails && incidentDetails.ProductName;\n const price =\n incidentDetails && incidentDetails.ProductPrice\n ? parseFloat(incidentDetails.ProductPrice)\n : 0;\n const productPrice = price > 0 ? getCurrencyFormat(price) : undefined;\n return (\n \n \n {recovery.licensePlate}\n \n {recovery.organizationKey}\n \n \n \n {recovery.debtIdentifier}\n \n {productName && (\n \n \n {productName}\n \n )}\n \n \n {volume}\n \n {productPrice && (\n 5}>\n \n {productPrice}\n \n )}\n \n \n );\n })}\n \n )}\n \n
\n );\n});\n","import { arrowUpIcon } from 'assets/icons';\nimport { AdminHeader } from 'components/Header/AdminHeader';\nimport { OrgFilter } from 'components/Organization/OrgFilter';\nimport { SvgIcon } from 'components/SvgIcon/SvgIcon';\nimport { observer } from 'mobx-react-lite';\nimport { AdminPage } from 'pages/RecoveryAdmin/AdminPage';\nimport React, { useEffect, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { Button } from 'reactstrap';\nimport styled, { css } from 'styled-components';\nimport { PrintTriageViewModel } from './PrintTriageViewModel';\nimport { RejectedStack } from './RejectedStack';\nimport { ToPrintStack } from './ToPrintStack';\nimport { TriageStatus } from './TriageStatus';\nimport { UnassignedStack } from './UnassignedStack';\n\nexport interface PrintTriageComponent {\n vm: PrintTriageViewModel;\n}\n\nexport const TriageStack = styled.div`\n align-items: center;\n display: grid;\n flex-direction: column-reverse;\n grid: auto 1fr / auto;\n justify-content: center;\n padding: 0 0 2.5rem;\n position: relative;\n perspective: 80rem;\n perspective-origin: 50% 30rem;\n`;\n\nexport const TriageHeader = styled.div`\n font-size: 1.5rem;\n font-weight: 600;\n text-align: center;\n`;\n\nconst TriageStacks = styled.div`\n display: grid;\n grid: auto / 16rem 26rem 16rem;\n grid-gap: 1rem;\n padding: 1rem 2rem;\n justify-content: space-between;\n`;\n\nexport const EmptyTriageCard = styled.div`\n align-items: center;\n background: #fff;\n display: flex;\n height: 10rem;\n justify-content: center;\n margin: 0 0 2.5rem;\n border: 1px solid #ccc;\n border-radius: 4px;\n`;\n\nexport const LicensePlate = styled.div<{ warn?: boolean }>`\n align-items: center;\n display: flex;\n font-size: 1.5rem;\n font-weight: 600;\n font-family: 'Courier New', Courier, monospace;\n line-height: 1.5rem;\n justify-content: center;\n ${({ warn }) =>\n warn &&\n css`\n background: #fffbcc;\n `}\n`;\n\nexport const DetailStrap = styled.div`\n align-items: center;\n display: flex;\n justify-content: space-between;\n & ${LicensePlate} {\n font-size: 0.75rem;\n }\n`;\n\nexport const Organization = styled.div`\n font-family: 'Courier New', Courier, monospace;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n text-align: center;\n`;\n\nconst ButtonBar = styled.div`\n display: flex;\n justify-content: space-between;\n margin: 0 auto;\n width: 26rem;\n & > .btn {\n min-width: 8rem;\n }\n`;\n\nexport const PrintTriage: React.FC = observer(({ vm }) => {\n const [direction, setDirection] = useState(0);\n const location = useLocation();\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (vm.printing) {\n return;\n }\n if (e.code === 'ArrowLeft') {\n setDirection(-1);\n vm.addToRejected();\n } else if (e.code === 'ArrowRight') {\n setDirection(1);\n vm.addToPrint();\n } else if (e.code === 'KeyZ' && (e.metaKey || e.ctrlKey)) {\n vm.undo();\n } else if (e.code === 'KeyA' && (e.metaKey || e.ctrlKey)) {\n vm.acceptAll();\n }\n };\n\n useEffect(() => {\n vm.handleLoad();\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [location]);\n\n return (\n \n \n
\n \n \n \n \n \n \n\n \n \n \n Mark invalid\n \n \n Accept\n \n \n \n \n \n \n Accept all\n \n \n\n {vm.badDetails.length > 0 && (\n
\n

Invalid debts

\n
    \n {vm.badDetails.map((details, i) => (\n
  • \n {details.debtIdentifier}: {details.description}\n
  • \n ))}\n
\n
\n )}\n
\n \n
\n );\n});\n","import isFunction from 'lodash.isfunction';\n/**\n * Decorator to PreventDefault on a react method\n * @param target\n * @param {string} propertyKey\n * @param {TypedPropertyDescriptor} descriptor\n */\nexport function preventDefault(\n target: any,\n propertyKey: string,\n descriptor?: TypedPropertyDescriptor<(...args: any[]) => any>,\n): any {\n // the following code was ~taken from~ inspired by mobx\n\n if (descriptor) {\n // @preventDefault method() { }\n if (!isFunction(descriptor.value)) {\n throw new Error('@preventDefault decorator only works on with functions');\n }\n\n return {\n value: wrapWithPreventDefault(descriptor.value),\n enumerable: false,\n configurable: true,\n writable: true, // for typescript, this must be writable, otherwise it cannot inherit :/ (see inheritable actions test)\n };\n }\n\n // field decorator @preventDefault method = () => { }\n Object.defineProperty(target, propertyKey, {\n configurable: true,\n enumerable: false,\n get() {\n return undefined;\n },\n set(value: any) {\n if (!isFunction(value)) {\n throw new Error('@preventDefault decorator only works on with functions');\n }\n\n Object.defineProperty(this, propertyKey, {\n enumerable: false,\n writable: true,\n configurable: true,\n value: wrapWithPreventDefault(value),\n });\n },\n });\n}\n\nfunction wrapWithPreventDefault(fn: (...args: any[]) => any) {\n return function(this: any, ...args: any[]) {\n const [pontentialEvent] = args;\n\n if (pontentialEvent && isFunction(pontentialEvent.preventDefault)) {\n pontentialEvent.preventDefault();\n }\n\n return fn.apply(this, args);\n };\n}\n","import { Api, apiInstance } from 'api/Api';\nimport {\n ChurnZeroEventName,\n CreatePaymentApiError,\n DebtAlreadyPaidApiError,\n DebtInInvalidStateApiError,\n PaymentCreationStatus,\n} from 'api/Api.generated';\nimport { getFetchErrorName, KnownFetchErrorNames } from 'api/FetchError';\nimport { ButtonState } from 'components/ActionButton';\nimport { FormField } from 'components/FormInput';\nimport { parseISO } from 'date-fns';\nimport { action, computed, observable } from 'mobx';\nimport { CardBrand } from 'pages/Payment/CardIcon';\nimport { parse } from 'query-string';\nimport { createContext } from 'react';\nimport { ReactStripeElements } from 'react-stripe-elements';\nimport {\n alreadyPaidRoute,\n cannotPayRoute,\n confirmDetailsRoute,\n paymentCompleteRoute,\n} from 'routing';\nimport { routingStore } from 'stores';\nimport { globalHandleError } from 'utils/globalHandleError';\nimport { isOnlineStore } from 'utils/IsOnlineStore';\nimport { preventDefault } from 'utils/preventDefault';\nimport isEmail from 'validator/lib/isEmail';\nimport {getCurrencyFormat} from \"../utils/currency\";\n\ntype PlateCheckState =\n | 'working'\n | 'successful'\n | 'errored'\n | 'invalid-details'\n | 'already-paid'\n | 'invalid-debt-state';\n\nexport class PublicAppViewModel {\n @computed\n get total() {\n return this.amount + this.fees;\n }\n @computed\n get cardValid() {\n return this.numberComplete && this.expiryComplete && this.cvcComplete;\n }\n @computed\n get isValid() {\n return this.cardValidated && this.name.isValid && this.email.isValid;\n }\n\n @computed\n get canConfirmPlate() {\n return !!(this.reg.trim() && this.code.trim());\n }\n\n @computed\n get cardError() {\n return (\n this.numberError ||\n this.expiryError ||\n this.cvcError ||\n (!this.cardValidated || this.cardValid\n ? undefined\n : { message: 'Please complete your card details' })\n );\n }\n\n api: Pick;\n\n /**\n * Start ConfirmPlate properties\n */\n @observable\n code = '';\n @observable\n reg = '';\n @observable\n detailsNotFound = false;\n @observable\n detailsError = false;\n /**\n * End ConfirmPlate properties\n */\n\n @observable\n plateCheckState: PlateCheckState = 'working';\n\n @observable\n chargeButtonState: ButtonState = 'idle';\n\n @observable\n detailsConfirmed = false;\n\n @observable\n imageUrl = '';\n\n @observable\n fuelType = '';\n\n @observable\n licensePlate = '';\n\n @observable\n date?: Date = undefined;\n\n @observable\n locationName = '';\n\n @observable\n locationAddress = '';\n\n @observable\n locationPump = '';\n\n @observable\n amount = 0;\n\n @observable\n volume = '';\n\n @observable\n price = '';\n\n @observable\n errorMessage?: string;\n\n @observable\n chargeError?: string;\n\n @observable\n stripeError?: string;\n\n @observable\n incorrectDetails = false;\n\n @observable\n fees = 0;\n\n @observable\n cardBrand: CardBrand = 'unknown';\n\n @observable\n email = new FormField('', (val) => {\n val = val.trim();\n return !val || isEmail(val) ? null : 'Invalid email address';\n });\n\n @observable\n name = new FormField('', (val) => (val.trim() ? null : 'Please enter your name'));\n\n @observable\n cardValidated = false;\n\n @observable\n numberComplete = false;\n @observable\n numberError: stripe.Error | undefined = undefined;\n\n @observable\n expiryComplete = false;\n @observable\n expiryError: stripe.Error | undefined = undefined;\n\n @observable\n cvcComplete = false;\n @observable\n cvcError: stripe.Error | undefined = undefined;\n\n @observable\n receiptUrl: string | null = null;\n\n @observable\n referenceNumber: string = '';\n\n @observable\n debtIdentifier: string = '';\n\n @observable\n organizationKey: string = '';\n\n private isHandlingCharge = false;\n\n constructor() {\n this.api = apiInstance;\n }\n\n @action.bound\n validate() {\n this.cardValidated = true;\n const fieldsValid = [this.name, this.email].map((field) => field.validate());\n fieldsValid.push(this.numberComplete, this.expiryComplete, this.cvcComplete);\n\n return fieldsValid.every((valid) => valid);\n }\n\n @action.bound\n hideModals() {\n this.incorrectDetails = false;\n }\n\n @action.bound\n @preventDefault\n showIncorrectDetails() {\n this.sendChurnZeroEvent(\n ChurnZeroEventName.AlfiepayClickedIncorrectDetails,\n this.debtIdentifier,\n );\n this.incorrectDetails = true;\n }\n\n @action.bound\n handleCharge(stripe: ReactStripeElements.StripeProps | undefined) {\n this.charge(stripe).catch(globalHandleError);\n }\n\n @action.bound\n clearError() {\n this.errorMessage = undefined;\n }\n\n @action.bound\n handleFindDetails() {\n this.findDetails().catch(globalHandleError);\n }\n\n @action.bound\n sendChurnZeroEvent(\n eventName: ChurnZeroEventName,\n token: string | null,\n description: string | null = null,\n ) {\n const { referenceNumber: eventData } = this;\n\n this.api\n .sendChurnZeroEvent({ eventName, eventData, eventValue: 0, token, description })\n .catch(globalHandleError);\n }\n\n @transformToMobxFlow\n private async charge(stripe: ReactStripeElements.StripeProps | undefined) {\n if (this.isHandlingCharge) {\n return;\n }\n this.chargeError = undefined; // clear any previous error\n this.stripeError = undefined;\n this.isHandlingCharge = true;\n\n const { debtIdentifier: debtId, email } = this;\n\n try {\n const valid = this.validate();\n if (!valid) {\n return;\n }\n if (!stripe) {\n this.stripeError = `Uh oh! There was an issue contacting your payment provider. Please reload & try again.`;\n return;\n }\n\n this.chargeButtonState = 'working';\n await isOnlineStore.whenOnline();\n const { token } = await stripe.createToken({ name: this.name.value });\n\n if (!token) {\n this.stripeError = `Uh oh! There was an issue contacting your payment provider. Please reload & try again.`;\n return;\n }\n const tokenizationResult = token as ConvertStripeType;\n\n const response = await this.api.payment_Create({\n debtIdentifier: debtId,\n emailAddress: email.value,\n tokenizationResult,\n });\n\n this.chargeButtonState = 'complete';\n if (CreatePaymentApiError.isInstance(response)) {\n this.sendChurnZeroEvent(\n ChurnZeroEventName.AlfiepayPaymentFailed,\n this.debtIdentifier,\n getCurrencyFormat(this.total)\n );\n switch (response.saveEventErrorType) {\n case PaymentCreationStatus.PaymentViaStripeFailed:\n this.chargeError =\n response.messageForUser ||\n 'Something went wrong processing this payment.';\n break;\n case PaymentCreationStatus.DebtHasAlreadyBeenPaid:\n routingStore.push(alreadyPaidRoute(this.organizationKey));\n break;\n default:\n routingStore.push(cannotPayRoute(this.organizationKey));\n }\n } else {\n this.sendChurnZeroEvent(\n ChurnZeroEventName.AlfiepayPaid,\n this.debtIdentifier,\n getCurrencyFormat(this.total)\n );\n\n const params = parse(routingStore.location.search);\n const event =\n 'm' in params\n ? ChurnZeroEventName.AlfiepayPaidManually\n : ChurnZeroEventName.AlfiepayPaidText;\n this.sendChurnZeroEvent(event, this.debtIdentifier,\n getCurrencyFormat(this.total));\n\n if (email) {\n this.sendChurnZeroEvent(\n ChurnZeroEventName.AlfiepayReceiptRequested,\n this.debtIdentifier,\n getCurrencyFormat(this.total)\n );\n }\n this.receiptUrl = response.receiptUrl;\n routingStore.push(paymentCompleteRoute(this.organizationKey));\n }\n } catch (e) {\n this.sendChurnZeroEvent(\n ChurnZeroEventName.AlfiepayPaymentFailed,\n this.debtIdentifier,\n getCurrencyFormat(this.total)\n );\n this.chargeError = 'Something went wrong processing this payment.';\n throw e;\n } finally {\n this.chargeButtonState = 'idle';\n this.isHandlingCharge = false;\n }\n }\n\n @transformToMobxFlow\n private async findDetails() {\n const { referenceNumber, licensePlate, organizationKey } = this;\n if (referenceNumber && licensePlate) {\n this.plateCheckState = 'working';\n this.clearError();\n\n try {\n const response = await this.api.access_Confirm({ referenceNumber, licensePlate });\n\n if (DebtAlreadyPaidApiError.isInstance(response)) {\n this.plateCheckState = 'already-paid';\n this.sendChurnZeroEvent(\n ChurnZeroEventName.AlfiepayAlreadyPaid,\n this.debtIdentifier,\n );\n return;\n } else if (DebtInInvalidStateApiError.isInstance(response)) {\n this.plateCheckState = 'invalid-debt-state';\n return;\n }\n\n if (response.organizationKey !== organizationKey) {\n routingStore.replace(\n confirmDetailsRoute(\n response.organizationKey,\n referenceNumber,\n licensePlate,\n ),\n );\n return;\n }\n\n const { incidentDetails } = response;\n\n if (incidentDetails) {\n this.locationName = incidentDetails.SiteName || '';\n this.locationAddress = incidentDetails.SiteAddress || '';\n this.locationPump = incidentDetails.LocationWithinSite || '';\n this.fuelType = incidentDetails.ProductName || '';\n this.volume = incidentDetails.ProductQuantity || '';\n this.price = incidentDetails.ProductPrice || '';\n } else {\n this.locationName = '';\n this.locationAddress = '';\n this.locationPump = '';\n this.fuelType = '';\n this.volume = '';\n this.price = '';\n }\n this.debtIdentifier = response.debtIdentifier;\n this.licensePlate = response.licensePlate;\n this.amount = response.amount;\n this.organizationKey = response.organizationKey;\n this.date = parseISO(response.dateOfIncident);\n this.imageUrl =\n (response.fawkesImage && response.fawkesImage.thumbnailMediumUrl) || '';\n this.plateCheckState = 'successful';\n } catch (e) {\n const errorName = getFetchErrorName(e);\n\n if (errorName === KnownFetchErrorNames.NotFound) {\n this.plateCheckState = 'invalid-details';\n this.sendChurnZeroEvent(ChurnZeroEventName.AlfiepayInvalidCode, null);\n return;\n }\n\n this.plateCheckState = 'errored';\n throw e;\n }\n }\n }\n}\n\n// changing stripe types to use `null` instead of `undefined` because that's what our ApiCodegen uses\ntype ConvertStripeType = {\n [P in keyof T]-?: ConvertStripeTypeUndefinedToNull;\n};\n\ntype ConvertStripeTypeUndefinedToNull<\n TType,\n TPropertyName extends keyof TType\n> = TType extends Required>\n ? ConvertStripeType\n : ConvertStripeType | null;\n\nexport const PublicAppViewModelContext = createContext(new PublicAppViewModel());\n","import React from 'react';\nimport { AddressUploadViewModel } from './AddressUploadViewModel';\nimport { observer } from 'mobx-react-lite';\nimport { Button, CustomInput, FormGroup, Label } from 'reactstrap';\nimport { OperationState } from '../../viewmodel/PromiseViewModel';\nimport styled, { css, ThemeProvider } from 'styled-components';\nimport Spinner from 'reactstrap/lib/Spinner';\nimport { defaultTheme } from '../../styles/theme';\n\nconst Content = styled.div`\n padding-top: 2rem;\n display: flex;\n justify-content: center;\n`;\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst StatusMessageContainer = styled.div<{ color?: 'success' | 'warning' | 'danger' }>`\n margin-top: 1rem;\n ${({ color, theme }) =>\n color &&\n css`\n color: ${theme[color + 'Color']};\n `}\n`;\n\nexport interface AddressUploadComponent {\n vm: AddressUploadViewModel;\n}\n\nexport const AddressUpload: React.FC = observer(({ vm }) => {\n const state = vm.upload?.state;\n\n return (\n \n \n \n \n \n \n {state === OperationState.Error ? (\n \n {vm.statusMessage}{' '}\n \n \n ) : state === OperationState.Loading ? (\n \n {vm.statusMessage}\n \n ) : state === OperationState.Done ? (\n \n {vm.statusMessage}\n \n ) : (\n vm.statusMessage && (\n {vm.statusMessage}\n )\n )}\n \n \n \n \n );\n});\n","import { ChangeEvent } from 'react';\nimport { action, computed, observable } from 'mobx';\nimport { Api, apiInstance, CreateFileTypeInvalidApiError, FileResponse, FileType } from 'api/Api';\nimport { OperationState, PromiseViewModel } from '../../viewmodel/PromiseViewModel';\nimport { aurorStorageFileUploader } from '../../utils/aurorStorageFileUploader';\n\nexport class AddressUploadViewModel {\n @observable\n currentFile: File | null = null;\n\n @observable\n upload: PromiseViewModel | null = null;\n\n readonly api: Pick;\n\n constructor(api?: Pick) {\n this.api = api || apiInstance;\n }\n\n private boundUploader(file: File): PromiseViewModel {\n return aurorStorageFileUploader(file, (fileId) => this.createOrangeboxFile(fileId));\n }\n\n @action.bound\n retryFileUpload() {\n if (this.currentFile) {\n this.upload = this.boundUploader(this.currentFile);\n }\n }\n\n @action.bound\n azureStorageFileUploader(event: ChangeEvent) {\n this.currentFile = event.target.files?.item(0) ?? null;\n\n if (this.currentFile) {\n this.upload = this.boundUploader(this.currentFile);\n }\n }\n\n @computed\n get statusMessage(): string {\n switch (this.upload?.state) {\n case OperationState.Loading:\n return `Currently uploading…`;\n case OperationState.Error:\n return `Error: ${this.upload?.error}`;\n case OperationState.Done:\n return `Successfully uploaded! ✨`;\n case OperationState.Cancelled:\n return 'It was cancelled';\n default:\n return '';\n }\n }\n\n @transformToMobxFlow\n private async createOrangeboxFile(fileId: string): Promise {\n const response = await this.api.aurorAdmin_CreateFile({\n fileId,\n fileName: '',\n fileType: FileType.Orangebox,\n });\n\n if (CreateFileTypeInvalidApiError.isInstance(response)) {\n throw new Error('Could not complete file upload');\n } else {\n return response;\n }\n }\n}\n","import { AdminHeader } from 'components/Header/AdminHeader';\nimport { observer } from 'mobx-react-lite';\nimport { AdminPage } from 'pages/RecoveryAdmin/AdminPage';\nimport React from 'react';\nimport { Api, DebtLettersGenerationStats } from 'api/Api';\nimport { Alert, Button } from 'reactstrap';\nimport { Spinner } from 'components/Spinner/Spinner';\nimport { formatDate } from 'utils/date';\n\nexport interface GenerateLettersComponent {\n api: Pick;\n}\n\nconst LetterGenerationComponent: React.FC = ({ api }) => {\n const [inAction, setInAction] = React.useState(false);\n const [isErrorOnStartGeneration, setIsErrorOnStartGeneration] = React.useState(false);\n const [stats, setStats] = React.useState(null);\n\n const startPrintGeneration = React.useCallback(async () => {\n setInAction(true);\n try {\n setStats(\n await api.aurorAdmin_StartLettersGeneration(formatDate(new Date(), 'yyyy-MM-dd')),\n );\n } catch (e) {\n setIsErrorOnStartGeneration(true);\n } finally {\n setInAction(false);\n }\n }, [setStats, api]);\n\n return (\n
\n {stats && (\n
\n
Letters count : {stats.lettersCount}
\n
File name: {stats.fileName}
\n
\n When letters are generated, you will be notified in #alfiepay-letter-run\n slack channel\n
\n
\n )}\n {isErrorOnStartGeneration && Error on generation start}\n {inAction && (\n
\n We are starting the generation process, it can take a couple of minutes, please,\n wait...\n
\n )}\n {inAction && }\n {!stats && (\n \n )}\n
\n );\n};\nexport const GenerateLetters: React.FC = observer(({ api }) => {\n return (\n \n {}} />\n
\n Welcome to the new letters generation.\n
\n \n
\n
\n );\n});\n","import { apiInstance } from 'api/Api';\r\nimport { Organization, OrganizationParams } from 'components/Organization/Organization';\r\nimport { SnackbarControllerContext } from 'components/Snackbar/SnackbarController';\r\nimport { SnackbarControllerViewModel } from 'components/Snackbar/SnackbarControllerViewModel';\r\nimport { Location } from 'history';\r\nimport isEmpty from 'lodash.isempty';\r\nimport { ConfirmDetails } from 'pages/Details/ConfirmDetails';\r\nimport { ConfirmPlate } from 'pages/Details/ConfirmPlate';\r\nimport { Home } from 'pages/Home/Home';\r\nimport { NotFound } from 'pages/NotFound/NotFound';\r\nimport { AlreadyPaid } from 'pages/Payment/AlreadyPaid';\r\nimport { PaymentComplete } from 'pages/Payment/PaymentComplete';\r\nimport { PaymentFailed } from 'pages/Payment/PaymentFailed';\r\nimport { PrintTriage } from 'pages/PrintTriage/PrintTriage';\r\nimport { PrintTriageViewModel } from 'pages/PrintTriage/PrintTriageViewModel';\r\nimport { stringify } from 'query-string';\r\nimport React, { lazy, useContext } from 'react';\r\nimport { generatePath, match, matchPath, RouteComponentProps } from 'react-router';\r\nimport { PublicAppViewModel, PublicAppViewModelContext } from 'viewmodel/PublicAppViewModel';\r\nimport { AddressUpload } from '../pages/AddressUpload/AddressUpload';\r\nimport { AddressUploadViewModel } from '../pages/AddressUpload/AddressUploadViewModel';\r\nimport { GenerateLetters } from '../pages/PrintTriage/GenerateLetters';\r\n\r\nexport const HomeComponent = () => {\r\n const vm = useContext(PublicAppViewModelContext);\r\n return ;\r\n};\r\n\r\nexport const NotFoundComponent = (vm?: PublicAppViewModel) => {\r\n const contextVm = useContext(PublicAppViewModelContext);\r\n return ;\r\n};\r\n\r\nexport const ConfirmPlateComponent = () => {\r\n const vm = useContext(PublicAppViewModelContext);\r\n return ;\r\n};\r\n\r\nexport const OrgComponent: React.FC> = (props) => {\r\n const vm = useContext(PublicAppViewModelContext);\r\n return ;\r\n};\r\ntype PlateError = 'details' | 'err';\r\n\r\nexport const confirmPlateRoute = (\r\n orgKey: string,\r\n code?: string,\r\n reg?: string,\r\n err?: PlateError,\r\n) => {\r\n const params = {\r\n ...(code && { code }),\r\n ...(reg && { reg }),\r\n ...(err && { err }),\r\n };\r\n\r\n if (isEmpty(params)) {\r\n return `/${orgKey}/pay`;\r\n } else {\r\n return `/${orgKey}/pay?${stringify(params)}`;\r\n }\r\n};\r\n\r\nexport const ConfirmDetailsComponent = () => {\r\n const vm = useContext(PublicAppViewModelContext);\r\n return ;\r\n};\r\n\r\nexport const matchOrgPath = (loc: Location) => {\r\n return matchPath(loc.pathname, {\r\n path: '/:orgKey',\r\n });\r\n};\r\n\r\nexport const matchOrgKey = (loc: Location): string | null => {\r\n const orgMatch = matchOrgPath(loc);\r\n\r\n return orgMatch && orgMatch.params.orgKey;\r\n};\r\n\r\nexport const matchConfirmDetails = (loc: Location) => {\r\n return matchPath(loc.pathname, { path: '/:orgKey/:referenceNumber/:licensePlate' }) as match<{\r\n orgKey: string;\r\n referenceNumber: string;\r\n licensePlate: string;\r\n }> | null;\r\n};\r\n\r\nexport const confirmDetailsRoute = (\r\n orgKey: string,\r\n referenceNumber: string,\r\n licensePlate: string,\r\n) => {\r\n referenceNumber = referenceNumber.trim();\r\n return `/${orgKey}/${referenceNumber}/${licensePlate}?m`;\r\n};\r\n\r\nexport const PaymentCompleteComponent = () => {\r\n const vm = useContext(PublicAppViewModelContext);\r\n return ;\r\n};\r\n\r\nexport const paymentCompleteRoute = (orgKey: string) => {\r\n return `/${orgKey}/paid`;\r\n};\r\n\r\nexport const PaymentFailedComponent = () => {\r\n const vm = useContext(PublicAppViewModelContext);\r\n return ;\r\n};\r\n\r\nexport const cannotPayRoute = (orgKey: string) => {\r\n return `/${orgKey}/oops`;\r\n};\r\n\r\nexport const RecoveryAdminComponent = lazy(() => import('pages/RecoveryAdmin/RecoveryAdmin'));\r\n\r\nexport const adminRoute = () => {\r\n return '/auror/admin';\r\n};\r\nexport const adminOrgRoute = () => {\r\n return '/auror/admin/:orgKey?';\r\n};\r\n\r\nexport const AlreadyPaidComponent = () => {\r\n const vm = useContext(PublicAppViewModelContext);\r\n return ;\r\n};\r\n\r\nexport const alreadyPaidRoute = (orgKey: string) => {\r\n return `/${orgKey}/already-paid`;\r\n};\r\n\r\nexport const PrintTriageComponent = () => {\r\n const snackbarVm = useContext(SnackbarControllerContext) || new SnackbarControllerViewModel();\r\n const vm = new PrintTriageViewModel(snackbarVm);\r\n return ;\r\n};\r\n\r\nexport const GenerateLettersComponent = () => {\r\n return ;\r\n};\r\n\r\nexport const printTriageRoute = (orgKey?: string) => {\r\n return generatePath(`${adminRoute()}/generate-letters`);\r\n};\r\n\r\nexport const addressUploadComponent = () => {\r\n const vm = new AddressUploadViewModel();\r\n return ;\r\n};\r\n\r\nexport const addressUploadRoute = () => {\r\n return `${adminRoute()}/address-upload`;\r\n};\r\n","import { action, computed, observable } from 'mobx';\nimport { globalHandleError } from '../utils/globalHandleError';\nimport { tryCancelPromise } from '../utils/tryCancelPromise';\n\nexport enum OperationState {\n Done,\n Error,\n Loading,\n Cancelled\n}\n\nexport interface ResolvedOperation {\n value: T;\n error: undefined;\n state: OperationState.Done;\n}\n\nexport interface RejectedOperation {\n value: undefined;\n error: Error;\n state: OperationState.Error;\n}\n\nexport interface LoadingOperation {\n value: undefined;\n error: undefined;\n state: OperationState.Loading;\n}\n\nexport interface CancelledOperation {\n value: undefined;\n error: undefined;\n state: OperationState.Cancelled;\n}\n\nexport type Operation =\n | ResolvedOperation\n | RejectedOperation\n | LoadingOperation\n | CancelledOperation;\n\n/**\n * Handles the loading and error states for any single promise in an observable manner\n * Construct one with no promise for a placeholder that will always be 'loading'\n */\nexport type PromiseViewModel = Operation & {\n done: Promise;\n tryCancel(): void;\n};\n\nexport function createPromiseViewModel(\n promise?: Promise,\n onResolve?: (x: T) => void,\n onReject?: (e: Error) => void,\n): PromiseViewModel {\n return new PromiseViewModelImplementation(promise, onResolve, onReject) as PromiseViewModel<\n T\n >;\n}\n\nexport function isPromiseViewModel(\n value: PromiseViewModel | unknown,\n): value is PromiseViewModel {\n return value instanceof PromiseViewModelImplementation;\n}\n\nclass PromiseViewModelImplementation {\n @observable\n value?: T;\n\n @observable\n loading = true;\n\n @observable\n error?: Error;\n\n done: Promise;\n\n private isCancelled = false;\n\n constructor(\n private readonly promise?: Promise,\n private onResolve?: (x: T) => void,\n private onReject?: (e: Error) => void,\n ) {\n // todo: allow replacing the promise (and cancelling the old one?). Sounds way more complicated than just making a new PromiseViewModel!\n if (promise) {\n this.done = promise.then(this.resolve, this.reject);\n } else {\n // is never resolving promise what we want here ?\n // tslint:disable-next-line:no-empty\n this.done = new Promise(() => {});\n }\n }\n\n @action.bound\n tryCancel(): void {\n if (this.loading) {\n this.isCancelled = true;\n this.loading = false;\n tryCancelPromise(this.promise);\n }\n }\n\n @action.bound\n private resolve(x: T) {\n if (this.isCancelled) {\n return;\n }\n\n this.loading = false;\n this.value = x;\n\n if (this.onResolve) {\n this.onResolve(x);\n }\n }\n\n @action.bound\n private reject(e: Error) {\n if (this.isCancelled) {\n return;\n }\n\n this.loading = false;\n this.error = e;\n globalHandleError(e, { fromPromiseViewModel: true });\n\n if (this.onReject) {\n this.onReject(e);\n }\n }\n\n @computed\n get state(): OperationState {\n return this.isCancelled\n ? OperationState.Cancelled\n : this.loading\n ? OperationState.Loading\n : this.error\n ? OperationState.Error\n : OperationState.Done;\n }\n}\n","export function tryCancelPromise(p: CancellablePromise | undefined | null) {\n if (p && typeof p.cancel === 'function') {\n p.cancel();\n }\n}\n","import React from 'react';\nimport { animated, useSpring } from 'react-spring';\nimport styled, { css } from 'styled-components';\n\nconst size = 24;\nconst cx = size / 2;\nconst cy = size / 2;\nconst spinnerOffset = cx * 2 * Math.PI;\n\nconst SpinnerSvg = styled.svg`\n height: ${size}px;\n width: ${size}px;\n vertical-align: middle;\n\n .tick {\n visibility: hidden;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 15;\n stroke-dashoffset: -15;\n stroke-width: 2.5px;\n stroke: #fff;\n }\n .path {\n stroke-linecap: round;\n stroke-width: 2px;\n transition: stroke 0.15s ease-in-out;\n }\n\n @keyframes rotator {\n 100% {\n transform: rotate(360deg);\n }\n }\n @keyframes dash {\n 0% {\n stroke-dasharray: ${spinnerOffset * 0.02}, ${spinnerOffset};\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: ${spinnerOffset * 0.7}, ${spinnerOffset};\n stroke-dashoffset: -${spinnerOffset * 0.25};\n }\n 100% {\n stroke-dasharray: ${spinnerOffset * 0.7}, ${spinnerOffset};\n stroke-dashoffset: -${spinnerOffset * 0.98};\n }\n }\n\n ${props =>\n props.isComplete\n ? css`\n animation: none;\n transform: rotate(0);\n transition: transform 0.15s ease-in-out;\n\n & .path {\n animation: none;\n stroke-dasharray: ${spinnerOffset};\n stroke-dashoffset: 0;\n transition-duration: 0.15s;\n transition-timing-function: ease-in-out;\n transition-property: stroke, stroke-dashoffset;\n }\n & .tick {\n visibility: visible;\n stroke-dashoffset: 0;\n transition-duration: 0.15s;\n transition-timing-function: ease-in-out;\n transition-property: stroke-dashoffset;\n transform-origin: center;\n }\n `\n : css`\n animation: rotator 2s linear infinite;\n .path {\n animation: dash 2s ease-in-out infinite;\n stroke-dasharray: ${spinnerOffset * 0.7}, ${spinnerOffset};\n }\n `}\n`;\n\nconst ScalingSpinner = styled.div`\n display: inline-flex;\n ${props =>\n props.icon &&\n css`\n margin-right: 0.25rem;\n `}\n ${props =>\n props.scale !== undefined\n ? css`\n transform: scale(${props.scale});\n transform-origin: 0 0;\n height: ${size * props.scale}px;\n width: ${size * props.scale}px;\n `\n : css`\n height: ${size}px;\n width: ${size}px;\n `}\n`;\n\ninterface SpinnerProps {\n className?: string;\n isComplete?: boolean;\n icon?: boolean;\n scale?: number;\n}\n\nexport function Spinner({ className, isComplete, icon, scale }: SpinnerProps) {\n const props = useSpring({ strokeDasharray: `0,${spinnerOffset}` });\n\n return (\n \n \n \n \n \n \n );\n}\n"],"sourceRoot":""}