{"version":3,"sources":["css/input/InputStyles.module.css","css/footer/Footer.module.css","css/modal/GenericModal.module.css","css/pages/landing/LandingHeaderAndHero.module.css","css/pages/how-it-works/HowItWorksCard.module.css","css/pages/generate/trait-allocation/AllocateSingleTrait.module.css","utils/fileToDataUri.ts","css/common/ExplodedAndFinal.module.css","css/footer/FooterShort.module.css","css/input/GenericInput.module.css","css/input/TextInput.module.css","css/header/HeaderDesktop.module.css","css/header/HeaderMobile.module.css","css/pages/how-it-works/ExplodedWithDescription.module.css","css/common/GenerateStepsContainer.module.css","css/pages/generate/GenerateSteps.module.css","css/modal/GateModal.module.css","css/input/InputWithQuestionAndLabel.module.css","css/modal/PasteFromCsvModal.module.css","css/pages/landing/LandingBanner.module.css","css/pages/landing/LandingMarquee.module.css","css/modal/JoinDiscordModal.module.css","css/pages/generate/ProjectGrid.module.css","css/buttons/BigToggleButton.module.css","css/pages/generate/layer-ordering/LayerOrderingPage.module.css","css/header/Header.module.css","css/pages/landing/LandingInfo.module.css","css/modal/ImageModal.module.css","css/modal/MetadataModal.module.css","css/hoc/ElementMobileNotSupported.module.css","css/input/InputWithLeftLabel.module.css","css/ResponsiveContainer.module.css","css/loading/BackgroundOverlay.module.css","css/text/HeaderText.module.css","css/loading/LoadingSpinner.module.css","css/common/ContainerOuter.module.css","utils/generateSingleImage.ts","css/common/FolderGrid.module.css","css/buttons/NextAndBackButton.module.css","utils/isNotNull.ts","utils/filterNulls.ts","css/pages/generate/generation/GenerationPage.module.css","types/enums/BackgroundColorClass.ts","utils/joinClasses.ts","components/ResponsiveContainer.tsx","types/enums/AmplitudeEvent.ts","types/enums/GlobalClass.ts","types/enums/TextButtonTheme.ts","utils/amplitude/getAmplitude.ts","hooks/useLogEvent.ts","components/buttons/TextButton.tsx","types/enums/FontClass.ts","types/enums/ElementId.ts","components/loading/BackgroundOverlay.tsx","components/icons/CrossIcon.tsx","components/buttons/PlainButton.tsx","types/enums/ColorClass.ts","utils/deleteProperty.ts","utils/emptyFunction.ts","components/buttons/CloseButton.tsx","types/enums/ColorValue.ts","hooks/useOutsideClickHideModal.tsx","components/modal/OutsideClickHideModal.tsx","components/text/HeaderText.tsx","components/text/Header1.tsx","components/modal/GenericModal.tsx","components/text/BodyText.tsx","components/text/Body1.tsx","components/icons/TwitterIcon24.tsx","components/text/Body2.tsx","components/images/ImageWebp.tsx","components/modal/ContactUsModal.tsx","components/icons/TwitterIcon.tsx","components/icons/DiscordIcon.tsx","components/footer/Footer.tsx","types/enums/ButtonTheme.ts","components/buttons/ButtonWithText.tsx","utils/solana/misc/getRpcHostFromNetwork.ts","constants/SolanaContext.ts","context/SolanaContext.tsx","utils/solana/misc/getMintAddressesByOwner.ts","utils/firebase/getWhitelist.ts","utils/firebase/setWhitelist.ts","utils/solana/misc/MintAddresses.ts","context/WhitelistContext.tsx","hooks/useSolanaContext.ts","hooks/useWhitelistContext.ts","components/buttons/ConnectWalletButton.tsx","hooks/useWindowDimensions.ts","components/header/HeaderDesktop.tsx","components/icons/HamburgerIcon.tsx","components/buttons/HamburgerButton.tsx","components/header/MenuMobile.tsx","components/header/HeaderMobile.tsx","components/header/Header.tsx","components/common/ExplodedAndFinal.tsx","components/pages/landing/LandingHeaderAndHero.tsx","components/pages/landing/LandingInfo.tsx","utils/range.ts","components/pages/landing/LandingMarquee.tsx","hooks/useLogPageView.ts","components/pages/landing/LandingPage.tsx","components/icons/DiscordIcon24.tsx","components/footer/FooterShort.tsx","components/common/ContainerOuter.tsx","components/pages/how-it-works/HowItWorksCard.tsx","components/pages/how-it-works/HowItWorksPage1.tsx","components/pages/how-it-works/HowItWorksPage.tsx","components/text/Header3.tsx","components/pages/how-it-works/ExplodedWithDescription.tsx","components/pages/how-it-works/HowItWorksPage2.tsx","components/pages/how-it-works/HowItWorksPage3.tsx","types/enums/Blockchain.ts","constants/DsStore.ts","types/enums/LocalStorageKey.ts","utils/local-storage/getLocalStorage.ts","utils/local-storage/prefixKeyWithProjectId.ts","utils/local-storage/setLocalStorage.ts","utils/local-storage/setStateLocalStorageWrapper.ts","utils/local-storage/addLocalStorageProjectId.ts","utils/local-storage/setLocalStorageProjectId.ts","utils/local-storage/getManyLocalStorage.ts","utils/local-storage/printLocalStorageInfo.ts","utils/local-storage/setManyLocalStorage.ts","types/enums/GenerateStep.ts","components/loading/LoadingSpinner.tsx","utils/getGenerateStepIndex.ts","utils/getGenerateStepHref.ts","components/pages/generate/GenerateSteps.tsx","hooks/useGenerateStep.ts","components/common/GenerateStepsContainer.tsx","components/icons/LayersIcon.tsx","components/icons/SearchIcon.tsx","utils/isPixelArt.ts","constants/PixelArtMaxSize.ts","components/modal/ImageModal.tsx","components/modal/MetadataModal.tsx","components/text/QuestionText.tsx","utils/isTraitWeightsValid.ts","utils/numberWithCommas.ts","constants/DataUriGifPrefix.ts","utils/isDataUriGif.ts","components/modal/JoinDiscordModal.tsx","components/hoc/ElementMobileNotSupported.tsx","components/pages/generate/generation/GenerationPage.tsx","utils/getDataFromDataUri.ts","constants/DataUriPngPrefix.ts","utils/generateMetadataObject.ts","utils/randomNumber.ts","utils/generateImages.ts","constants/ExampleProjectId.ts","utils/getImageDimensions.ts","utils/isDependentFolder.ts","utils/filesToFilesMap.ts","utils/filesToFilesMapDependent.ts","utils/getExampleProjectFiles.ts","utils/sumArray.ts","context/GenerateConfigContext.tsx","utils/addTraitValueExtension.ts","hooks/useGenerateConfigContext.ts","components/common/FolderGrid.tsx","components/text/ButtonText.tsx","components/pages/generate/ProjectGrid.tsx","hooks/useProjectIdsAndNames.ts","components/modal/GateModal.tsx","components/pages/generate/GeneratePage.tsx","components/input/GenericInput.tsx","components/input/TextInput.tsx","utils/isNumber.ts","utils/numberRemoveCommas.ts","components/input/InputWithQuestionAndLabel.tsx","components/buttons/BigToggleButton.tsx","components/buttons/NextButton.tsx","utils/getFileExtension.ts","components/pages/generate/basic-info/BasicInfoPage.tsx","components/icons/MoveHandleIcon.tsx","components/buttons/NextAndBackButton.tsx","components/buttons/BackButton.tsx","components/pages/generate/layer-ordering/LayerOrderingPage.tsx","components/input/TextArea.tsx","components/pages/generate/metadata/MetadataPage.tsx","components/input/InputWithLeftLabel.tsx","components/modal/PasteFromCsvModal.tsx","utils/formatPercentage.ts","components/pages/generate/trait-allocation/AllocateSingleTrait.tsx","utils/removeExt.ts","components/pages/generate/trait-allocation/TraitAllocationPage.tsx","types/enums/SortOrder.ts","utils/getCompareByProperty.ts","components/pages/shuffle/ShufflePage.tsx","routes/Routes.tsx","components/text/Body1Bold.tsx","components/pages/landing/LandingBanner.tsx","utils/firebase/firebaseApp.ts","App.tsx","reportWebVitals.ts","index.tsx","css/pages/generate/metadata/MetadataPage.module.css","css/pages/shuffle/ShufflePage.module.css","css/buttons/ButtonWithText.module.css","css/buttons/TextButton.module.css","css/header/MenuMobile.module.css","css/pages/generate/basic-info/BasicInfoPage.module.css","css/pages/how-it-works/HowItWorksPage.module.css","css/modal/ContactUsModal.module.css","css/pages/generate/GeneratePage.module.css"],"names":["module","exports","fileToDataUri","file","a","Buffer","arrayBuffer","from","toString","loadImage","url","Promise","resolve","reject","image","Image","onload","onerror","error","src","blobToBase64","blob","_","reader","FileReader","onloadend","result","readAsDataURL","stream","pipe","_reject","bufs","on","d","push","buf","concat","parseGif","gifFiles","gifFrame","frames","outputType","all","map","frame","frameIndex","frameInfo","Blob","getImage","type","uri","parsed","mergeFrames","files","gifs","filter","lengths","gif","length","framesLength","Math","min","Array","i","index","mergeImages","merged","mergeGif","allColors","width","Set","reduce","acc","currVal","context","document","createElement","getContext","invariant","drawImage","colors","j","getImageData","data","slice","join","getImageColors","allColorsUnique","color","split","flat","GIF","globalPalette","undefined","workers","workerScript","process","quality","forEach","addFrame","delay","abort","freeWorkers","w","terminate","render","generateSingleImage","some","name","includes","parsedFiles","mergedFrames","filterNulls","uris","isNotNull","value","arr","BackgroundColorClass","joinClasses","cssClasses","className","ResponsiveContainer","children","height","id","containerStyles","container","style","AmplitudeEvent","GlobalClass","TextButtonTheme","amplitudeInstance","getAmplitude","amplitude","getInstance","init","useLogEvent","event","callback","logEvent","origin","window","self","pathname","location","referrer","FontClass","THEME_TO_CLASS_NAME","Navy","styles","buttonNavy","Purple","buttonPurple","White","buttonWhite","THEME_TO_ACTIVE_CLASS_NAME","buttonNavyActive","buttonPurpleActive","buttonWhiteActive","TextButton","buttonName","buttonTheme","display","fontClass","href","htmlFor","icon","isActive","logProperties","onClick","textDecoration","textTransform","classNameJoined","button","childrenWithIcon","iconContainer","HideText","onClickWithLog","e","ButtonClick","to","target","rel","label","ElementId","BackgroundOverlay","backgroundOverlay","CrossIcon","colorValue","viewBox","fill","xmlns","stroke","strokeWidth","strokeLinecap","strokeLinejoin","ColorClass","PlainButton","forwardRef","props","ref","obj","key","produce","draft","ButtonPlain","hideText","transparent","backgroundColor","emptyFunction","CloseButton","isShown","fontSize","visibility","ColorValue","KEYUP","MOUSEUP","EMPTY_ARRAY","OutsideClickHideModal","excludeRefs","hideModal","wrapperRef","useRef","useEffect","handleClickOutside","excludeRef","current","contains","HTMLElement","handleKeyUp","addEventListener","removeEventListener","position","HeaderText","colorClass","textAlign","header","Header1","Header3","Error","GenericModal","hideCloseButton","hideWithVisibility","footer","onHide","title","body","clientWidth","overflowY","ReactDOM","createPortal","top","scrollY","outsideClick","modal","closeButton","BodyText","Body1","Body1Bold","Body1Medium","Body1SemiBold","Body2","Body2Bold","Body2Medium","Body2SemiBold","ButtonText","QuestionText","TwitterIcon24","ImageWebp","splits","dir","srcWebp","srcSet","TeamMemberProfile","description","srcNft","srcReal","twitterHandle","twitterHref","useState","isReal","setIsReal","teamMemberProfile","teamMemberProfileImage","onMouseOut","onMouseOver","teamMemberProfileTwitter","teamMemberProfileDescription","ContactUsModal","teamMemberProfiles","TwitterIcon","DiscordIcon","Buttons","onClickContactUs","buttons","Footer","setIsShown","containerInner","logo","icons","mycoverse","mycoverseLink","ButtonTheme","ButtonWithText","disabled","iconPosition","styleToUse","isLink","purpleThemeLink","purpleTheme","getClassNameForButtonTheme","buttonAutoWidth","button100Width","iconLeft","iconRight","linkContent","getRpcHostFromNetwork","network","WalletAdapterNetwork","Devnet","Mainnet","Testnet","defaultNetwork","defaultRpcHost","defaultConnection","anchor","Connection","theme","createTheme","palette","overrides","MuiButtonBase","root","justifyContent","MuiButton","containedPrimary","background","contained","boxShadow","padding","disableRipple","startIcon","marginRight","endIcon","marginLeft","SolanaContext","createContext","connection","txTimeout","setNetwork","SolanaContextProvider","endpoint","useMemo","wallets","getPhantomWallet","getSlopeWallet","getSolflareWallet","ThemeProvider","ConnectionProvider","WalletProvider","autoConnect","Provider","WhitelistContextProvider","getMintAddressesByOwner","owner","getParsedTokenAccountsByOwner","PublicKey","programId","TOKEN_PROGRAM_ID","pubkey","account","toBase58","info","tokenAmount","uiAmount","decimals","token","mint","getWhitelist","address","db","getFirestore","docRef","doc","getDoc","docSnap","whitelist","setWhitelist","isWhitelist","exists","setDoc","updateDoc","WhitelistContext","isWhitelisted","isChecking","setIsWhitelisted","setIsChecking","useContext","wallet","useAnchorWallet","publicKey","mintAddressesByOwner","MintAddresses","mintAddress","console","log","useWhitelistContext","ConnectWalletButton","setOpen","useWalletDialog","solana","disconnect","getWindowDimensions","innerWidth","innerHeight","HeaderDesktop","windowDimensions","setWindowDimensions","handleResize","useWindowDimensions","left","right","HamburgerIcon","HamburgerButton","Button","MenuMobile","slideOutClassName","setSlideOutClassName","backgroundOverlayFadeIn","backgroundOverlayClassName","setBackgroundOverlayClassName","onHideWithSlide","backgroundOverlayFadeOut","slideOut","setTimeout","containerOuter","textButtons","firstRow","HeaderMobile","isMenuShown","setIsMenuShown","containerResponsive","Header","mobileContainer","desktopContainer","ExplodedAndFinal","isExplodedFirst","exploded","finalElem","final","borderColor","longArrowDesktop","longArrowMobile","LandingHeaderAndHero","GradientBg","headerText","squiggly","ctaButton","explodedAndFinal","Link","LandingInfo","Pink","range","stopOrStart","stop","keys","num","ELVES","MarqueeSection","gradient","speed","LandingMarquee","PurplePastel","useLogPageView","PageView","LandingPage","DiscordIcon24","FooterShort","ContainerOuter","showFooter","HowItWorksCard","backButton","backOnClick","continueButton","continueOnClick","Card1","HowItWorksPage1","navigate","useNavigate","HowItWorksPage","DESCRIPTIONS","DescriptionItem","item","ExplodedWithDescription","descriptions","Card2","HowItWorksPage2","Card3","folderStructureImageDesktop","folderStructureImageMobile","folderStructureDescription","HowItWorksPage3","Blockchain","DS_STORE","LocalStorageKey","getLocalStorage","projectId","AllProjectIds","ProjectId","get","prefixKeyWithProjectId","prefixedKey","setLocalStorage","val","set","setStateLocalStorageWrapper","setState","localStorageKey","addLocalStorageProjectId","update","currProjectIds","setLocalStorageProjectId","getManyLocalStorage","prefixedKeys","getMany","printLocalStorageInfo","Files","FileRelativePaths","GenerateMetadata","NumImages","MetaDescription","MetaName","ProjectName","TraitNamesOrdered","TraitWeights","allProjectIds","blockchain","fileRelativePaths","generateMetadata","numImages","metaDescription","metaName","projectName","traitNamesOrdered","traitWeights","setManyLocalStorage","values","setMany","GenerateStep","COLOR_MAP","skCircleNavy","skCirclePurple","skCircleWhite","LoadingSpinner","colorClassName","skCircle","skCircle1","skChild","skCircle2","skCircle3","skCircle4","skCircle5","skCircle6","skCircle7","skCircle8","skCircle9","skCircle10","skCircle11","skCircle12","getGenerateStepIndex","step","Object","indexOf","getGenerateStepHref","generateStep","BasicInfo","Metadata","LayerOrdering","TraitAllocation","Generation","Circle","isFilled","circle","Item","GenerateSteps","currentStep","useGenerateStep","items","line","NoProject","noProject","GenerateStepsContainer","useGenerateConfigContext","content","loading","LayersIcon","SearchIcon","isPixelArt","dimensions","ImageModal","fileDimensions","PixelArtImage","MetadataModal","metadata","pre","JSON","stringify","isTraitWeightsValid","weights","numTraits","size","sum","numberWithCommas","x","replace","DATA_URI_GIF_PREFIX","isDataUriGif","JoinDiscordModal","isLoading","secondaryButton","ElementMobileNotSupported","BATCH_SIZE","InvalidConfig","NotWhitelisted","isNumImagesAndGifAllowed","GridItem","imageModalShown","setIsImageModelShown","metadataModalShown","setIsMetadataModelShown","imageContainer","ValidConfig","generateImages","generatedImagesAndMetadata","isDoneGenerating","seenLayers","setIsDoneGenerating","run","shownLimit","setShownLimit","isDownloading","setIsDownloading","isModalShown","setIsModalShown","onDownload","blockchainInc","Ethereum","zip","JSZip","imagesFolder","folder","metadataFolder","firstIndex","inc","numLeft","floor","entries","entry","format","dataUri","base64","generateAsync","generated","saveAs","status","progress","note","downloadButton","grid","loadMoreButton","curr","GenerationPage","filesMap","filesMapDependent","isInvalid","formatTraitType","traitType","generateMetadataObject","traits","fileType","solanaMetadata","attributes","edition","trait","trait_type","traitName","traitValue","forEth","Solana","collection","collectionName","family","collectionFamily","external_url","externalUrl","properties","category","creators","royalties","seller_fee_basis_points","sellerFeeBasisPoints","symbol","forSolana","randomNumber","max","round","random","arrayRemove","array","start","splice","pickRandomIndex","existsCombination","pickedTraitValues","seen","every","setSeenLayers","newImageCallback","noMoreMatches","allGenerated","traitWeightsExpanded","Map","expanded","reversed","reverse","pickedTraits","traitValues","traitValueIndex","find","filesCopy","dependentTraits","sort","b","layer","dependentTrait","dependentEntry","matchingIndex","findIndex","matchingFile","pickedTrait","currArr","EXAMPLE_PROJECT_ID","getImageDimensions","resolved","REGEX","isDependentFolder","folderName","match","Number","filesToFilesMap","relativePaths","relPath","webkitRelativePath","relPathFallback","path","dirname","has","localeCompare","filesToFilesMapDependent","isDependent","getExampleProjectFiles","File","dataUriToBuffer","sumArray","BASIS_POINTS_DEFAULT","ROYALTIES_DEFAULT","share","royaltiesReducer","state","action","MetaRoyalties","row","traitWeightsReducer","newMap","mapForTrait","weight","withExt","startsWith","addTraitValueExtension","newMapForTrait","numTotal","leftover","GenerateConfigContext","metaCollectionFamily","metaCollectionName","metaExternalUrl","metaRoyalties","metaSellerFeeBasisPoints","metaSymbol","createNewProject","switchProject","updateProjectFiles","dispatchRoyalties","dispatchTraitWeights","setBlockchain","setGenerateMetadata","setMetaCollectionFamily","setMetaCollectionName","setMetaDescription","setMetaExternalUrl","setMetaName","setMetaSellerFeeBasisPoints","setMetaSymbol","setNumImages","setProjectName","setTraitNamesOrdered","GenerateConfigContextProvider","setFileDimensions","setFiles","setFilesMap","setFilesMapDependent","setFolderName","setGeneratedImagesAndMetadata","useReducer","setProjectId","setFilesAndFilesMap","filesInner","filesMapInner","exampleDataUri","filesMapDependentInner","reloadProject","MetaCollectionFamily","MetaCollectionName","MetaExternalUrl","MetaSellerFeeBasisPoints","MetaSymbol","exampleProjectFiles","exampleFileList","exampleFileRelativePaths","fileList","newProjectId","nanoid","generateImagesExt","newImage","newMetadata","FolderGrid","folderImage","Grid","projectIds","setProjectIds","projectNames","setProjectNames","ids","nameKeys","names","projectIdsAndNames","useProjectIdsAndNames","folderGrid","idAndName","ProjectGrid","GateModal","ID","ChooseFolder","chooseFolder","chooseFolderImage","chooseFolderDescription","chooseFolderInput","onChange","directory","multiple","webkitdirectory","chooseFolderButton","GeneratePage","projectGrid","GenericInput","descriptionFontClass","labelFontClass","labelTextTransform","hint","hintLengthIndicatorFontClass","subLabel","subLabelFontClass","labels","TextInput","buttonInner","hasError","maxLength","maxLengthIndicator","permaPlaceholder","placeholder","inputContainer","inputStyles","textInput","textInputError","isNumber","isNaN","numberRemoveCommas","replaceAll","InputWithQuestionAndLabel","question","input","BigToggleButton","onToggle","numToggles","toggleButtons","toggleButton","toggle","gridTemplateColumns","toggleHighlight","NextButton","getFileExtension","toLowerCase","BlockchainInput","bigToggleBlockchain","FolderInput","folderInput","changeFolderInput","folderInputText","NumImagesInput","isTouched","setIsTouched","numImagesInput","valCommasRemoved","ProjectNameInput","projectNameInput","BasicInfoPage","MoveHandleIcon","NextAndBackButton","BackButton","OrderingInput","onDragEnd","destination","list","startIndex","endIndex","removed","reorder","source","droppableId","provided","droppableProps","innerRef","draggableId","draggableProps","dragHandleProps","itemRight","LayerOrderingPage","TextArea","rows","textAreaContainerOuter","textAreaContainer","textArea","MetaDescriptionInput","metaDescriptionInput","MetaNameInput","clicked","metaNameInput","MetaCollectionFamilyInput","MetaCollectionNameInput","MetaRoyaltiesRow","royaltiesRow","walletAddress","walletPercent","MetaRoyaltiesInput","royaltiesLabels","royaltiesLabelsLeft","_royalties","MetaSellerFeeBasisPointsInput","SolanaMetaInputs","MetadataPage","setClicked","solanaError","InputWithLeftLabel","isCsvLine","part","trim","isTsvLine","isContentValid","isLineValid","PasteFromCsvModal","onSubmit","setContent","separator","parseContent","formatPercentage","formatted","toFixed","TraitInput","fileName","percent","AllocateSingleTrait","traitMap","totalAllocated","numLeftToAllocate","isCsvModalShown","setIsCsvModalShown","lines","Green","inputs","TraitAllocationPage","SortOrder","getCompareByProperty","order","Asc","firstEl","secondEl","getFileFolder","replaceNameInMetadata","readAsText","text","parse","parseFiles","filesArr","images","outerFolderName","AddFolder","onAddFolder","errorMessage","setErrorMessage","addFolder","addFolderImage","addFolderDescription","addFolderInput","err","message","addFolderButton","FolderItem","folderItem","ShufflePage","folders","setFolders","isMoreInfoShown","setIsMoreInfoShown","startingIndex","setStartingIndex","moreInfoButton","shuffleButton","allImages","allMetadata","randomIndex","metadataStr","Routes","element","LandingBanner","margin","desktopCopy","mobileCopy","initializeApp","apiKey","authDomain","storageBucket","messagingSenderId","appId","App","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","getElementById"],"mappings":"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ASC,aAAIH,EAAI,QAASD,GALnB,SAMSK,aAAOF,GANhB,iBAQAO,SARA,gCASLC,aAAOR,EAAQ,CACnBH,YAVS,wBAcPY,aAAUT,EAAQ,CACtBI,UAAWE,IAfA,6C,sBCRA,QAEb,+CACA,+CACA,8CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CAGA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,8CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,8CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+CACA,+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","file":"static/js/main.0d208d4d.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"textArea\":\"InputStyles_textArea__2y02X\",\"textAreaContainer\":\"InputStyles_textAreaContainer__2hPGa\",\"textAreaError\":\"InputStyles_textAreaError__Oy1_H\",\"textInput\":\"InputStyles_textInput__1JjTC\",\"textInputError\":\"InputStyles_textInputError__3HQmM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"buttons\":\"Footer_buttons__1_tMH\",\"containerInner\":\"Footer_containerInner__2gnEv\",\"icons\":\"Footer_icons__3ifAe\",\"logo\":\"Footer_logo__1OdMn\",\"mycoverse\":\"Footer_mycoverse__2MiMY\",\"mycoverseLink\":\"Footer_mycoverseLink__CwHeh\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"closeButton\":\"GenericModal_closeButton__1WTp3\",\"container\":\"GenericModal_container__1T3WC\",\"footer\":\"GenericModal_footer__2JTav\",\"modal\":\"GenericModal_modal__PEQgh\",\"outsideClick\":\"GenericModal_outsideClick__3oNn6\",\"title\":\"GenericModal_title__1eIxK\",\"titleAndClose\":\"GenericModal_titleAndClose__kSgpT\",\"fadein\":\"GenericModal_fadein__s6V27\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerInner\":\"LandingHeaderAndHero_containerInner__2Xruh\",\"ctaButton\":\"LandingHeaderAndHero_ctaButton__K4Ebe\",\"description\":\"LandingHeaderAndHero_description__1szXm\",\"explodedAndFinal\":\"LandingHeaderAndHero_explodedAndFinal__U-hvB\",\"headerText\":\"LandingHeaderAndHero_headerText__3eP5E\",\"squiggly\":\"LandingHeaderAndHero_squiggly__1TGY5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"HowItWorksCard_button__1M9UV\",\"buttons\":\"HowItWorksCard_buttons__2pyP-\",\"children\":\"HowItWorksCard_children__3Kfb3\",\"container\":\"HowItWorksCard_container__D1RWH\",\"description\":\"HowItWorksCard_description__3qmpN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"AllocateSingleTrait_button__3945Y\",\"buttons\":\"AllocateSingleTrait_buttons__150T1\",\"input\":\"AllocateSingleTrait_input__2dNrf\",\"inputs\":\"AllocateSingleTrait_inputs__2PBsa\",\"percent\":\"AllocateSingleTrait_percent__rV4o4\"};","export default async function fileToDataUri(file: File): Promise {\n return `data:image/png;base64,${Buffer.from(\n await file.arrayBuffer()\n ).toString(\"base64\")}`;\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"ExplodedAndFinal_container__2LXkG\",\"exploded\":\"ExplodedAndFinal_exploded__PlX-B\",\"final\":\"ExplodedAndFinal_final__3r1h3\",\"longArrowDesktop\":\"ExplodedAndFinal_longArrowDesktop__LfDlz\",\"longArrowMobile\":\"ExplodedAndFinal_longArrowMobile__3HloU\",\"desktopContainer\":\"ExplodedAndFinal_desktopContainer__1YqvS\",\"mobileContainer\":\"ExplodedAndFinal_mobileContainer__1fchk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"buttons\":\"FooterShort_buttons__3JRQn\",\"containerInner\":\"FooterShort_containerInner__3POxt\",\"icons\":\"FooterShort_icons__1b55H\",\"logo\":\"FooterShort_logo__1iG7r\",\"mycoverseLink\":\"FooterShort_mycoverseLink__1sgPb\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"description\":\"GenericInput_description__1PYDB\",\"label\":\"GenericInput_label__2eqiI\",\"labels\":\"GenericInput_labels__1MNzI\",\"hint\":\"GenericInput_hint__2JK82\",\"subLabel\":\"GenericInput_subLabel__Ef2IY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"buttonInner\":\"TextInput_buttonInner__2w9SH\",\"container\":\"TextInput_container__3PX0O\",\"inputContainer\":\"TextInput_inputContainer__3SjUv\",\"permaPlaceholder\":\"TextInput_permaPlaceholder__3PA2I\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header\":\"HeaderDesktop_header__fqoMV\",\"right\":\"HeaderDesktop_right__2gqM0\",\"logo\":\"HeaderDesktop_logo__1CGI7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerInner\":\"HeaderMobile_containerInner__3hxSN\",\"containerResponsive\":\"HeaderMobile_containerResponsive__2dMtj\",\"containerOuter\":\"HeaderMobile_containerOuter__Ajga3\",\"header\":\"HeaderMobile_header__3zcId\",\"logo\":\"HeaderMobile_logo__3mF-K\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"ExplodedWithDescription_container__1xC-R\",\"descriptions\":\"ExplodedWithDescription_descriptions__1xJ8q\",\"exploded\":\"ExplodedWithDescription_exploded__bZAyz\",\"item\":\"ExplodedWithDescription_item__1C3zL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerInner\":\"GenerateStepsContainer_containerInner__1yABS\",\"content\":\"GenerateStepsContainer_content__3meYA\",\"loading\":\"GenerateStepsContainer_loading__xQKLO\",\"noProject\":\"GenerateStepsContainer_noProject__kr9HJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"circle\":\"GenerateSteps_circle__3aNYN\",\"container\":\"GenerateSteps_container__1586M\",\"item\":\"GenerateSteps_item__3Y81K\",\"line\":\"GenerateSteps_line__2IENW\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"body\":\"GateModal_body__O_oTu\",\"button\":\"GateModal_button__2ivpd\",\"description\":\"GateModal_description__1M8IO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"InputWithQuestionAndLabel_container__2TzI_\",\"input\":\"InputWithQuestionAndLabel_input__3FM1b\",\"label\":\"InputWithQuestionAndLabel_label__1JgOY\",\"question\":\"InputWithQuestionAndLabel_question__3Guyo\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"body\":\"PasteFromCsvModal_body__3lkNB\",\"button\":\"PasteFromCsvModal_button__xIiMO\",\"description\":\"PasteFromCsvModal_description__14SfP\",\"textArea\":\"PasteFromCsvModal_textArea__1jVfy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerInner\":\"LandingBanner_containerInner__2tbOt\",\"fade-in\":\"LandingBanner_fade-in__39paF\",\"containerOuter\":\"LandingBanner_containerOuter__lz70W\",\"desktopCopy\":\"LandingBanner_desktopCopy__P1n03\",\"mobileCopy\":\"LandingBanner_mobileCopy__10bG8\",\"underline\":\"LandingBanner_underline__-SuXp\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerInner\":\"LandingMarquee_containerInner__289jC\",\"containerOuter\":\"LandingMarquee_containerOuter__3LRmP\",\"image\":\"LandingMarquee_image__3toH0\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"body\":\"JoinDiscordModal_body__1BxWQ\",\"ctaButton\":\"JoinDiscordModal_ctaButton__2mTkq\",\"secondaryButton\":\"JoinDiscordModal_secondaryButton__DIfbt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"folderGrid\":\"ProjectGrid_folderGrid__3ayPh\",\"folderImage\":\"ProjectGrid_folderImage__2GoT4\",\"item\":\"ProjectGrid_item__2spXK\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"toggle\":\"BigToggleButton_toggle__2r0uw\",\"toggleButton\":\"BigToggleButton_toggleButton__1Ahtj\",\"toggleHighlight\":\"BigToggleButton_toggleHighlight__3khnv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"item\":\"LayerOrderingPage_item__1B-HW\",\"itemRight\":\"LayerOrderingPage_itemRight__EwD8E\",\"list\":\"LayerOrderingPage_list__3PaJm\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"desktopContainer\":\"Header_desktopContainer__3pkyB\",\"mobileContainer\":\"Header_mobileContainer__3-3O4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerInner\":\"LandingInfo_containerInner__3YDsC\",\"description\":\"LandingInfo_description__35ZXd\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"image\":\"ImageModal_image__27Q8h\",\"modal\":\"ImageModal_modal__3r_DC\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"modal\":\"MetadataModal_modal__1uZlO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"desktopContainer\":\"ElementMobileNotSupported_desktopContainer__1ueoV\",\"mobileContainer\":\"ElementMobileNotSupported_mobileContainer__1DxMR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"input\":\"InputWithLeftLabel_input__1FQbS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"ResponsiveContainer_container__HiT5C\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"backgroundOverlay\":\"BackgroundOverlay_backgroundOverlay__899Bv\",\"fadein\":\"BackgroundOverlay_fadein__gBho0\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header\":\"HeaderText_header__16_kn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"skCircle\":\"LoadingSpinner_skCircle__2KCJk\",\"skChild\":\"LoadingSpinner_skChild__3QCms\",\"skCircleBounceDelay\":\"LoadingSpinner_skCircleBounceDelay__3YqyW\",\"skCircle2\":\"LoadingSpinner_skCircle2__1OiE_\",\"skCircle3\":\"LoadingSpinner_skCircle3__3fbfD\",\"skCircle4\":\"LoadingSpinner_skCircle4__1zhsw\",\"skCircle5\":\"LoadingSpinner_skCircle5__1W5m_\",\"skCircle6\":\"LoadingSpinner_skCircle6__1TKRY\",\"skCircle7\":\"LoadingSpinner_skCircle7__2Yc2b\",\"skCircle8\":\"LoadingSpinner_skCircle8__38CQI\",\"skCircle9\":\"LoadingSpinner_skCircle9__35qMH\",\"skCircle10\":\"LoadingSpinner_skCircle10__Kv3VZ\",\"skCircle11\":\"LoadingSpinner_skCircle11__2zTs-\",\"skCircle12\":\"LoadingSpinner_skCircle12__3T7F5\",\"skCircleNavy\":\"LoadingSpinner_skCircleNavy__13BQW\",\"skCirclePurple\":\"LoadingSpinner_skCirclePurple__PiIox\",\"skCircleWhite\":\"LoadingSpinner_skCircleWhite__396Lh\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerOuter\":\"ContainerOuter_containerOuter__KGgBn\"};","import mergeImages from \"merge-images\";\nimport fileToDataUri from \"utils/fileToDataUri\";\nimport filterNulls from \"utils/filterNulls\";\n// @ts-ignore\nimport * as gifFrame from \"gif-frames\";\nimport GIF from \"gif.js\";\nimport invariant from \"tiny-invariant\";\nimport { Maybe } from \"types/UtilityTypes\";\n\ntype FrameInfo = {\n data_length: number;\n data_offset: number;\n delay: number;\n dispotal: number;\n has_local_palette: number;\n height: number;\n interlaced: number;\n palette_offset: number;\n transparent_index: number;\n width: number;\n x: number;\n y: number;\n};\n\ntype Frame = {\n frameIndex: number;\n frameInfo: FrameInfo;\n uri: string;\n};\n\ntype ParsedFile = {\n type: string;\n uri: string;\n frames?: Frame[];\n};\n\nfunction loadImage(url: string): Promise {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = (error) => reject(error);\n image.src = url;\n });\n}\n\nasync function blobToBase64(blob: Blob): Promise {\n return new Promise((resolve, _) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result as string);\n reader.readAsDataURL(blob);\n });\n}\n\nasync function stream(pipe: any): Promise {\n return new Promise((resolve, _reject) => {\n const bufs: any = [];\n pipe.on(\"data\", (d: any) => {\n bufs.push(d);\n });\n pipe.on(\"end\", () => {\n const buf = Buffer.concat(bufs);\n resolve(buf);\n });\n });\n}\n\nasync function parseGif(gifFiles: string): Promise {\n const frames = await gifFrame({\n url: gifFiles,\n frames: \"all\",\n outputType: \"png\",\n });\n const parsed = await Promise.all(\n frames.map(\n async (frame: any): Promise => ({\n frameIndex: frame.frameIndex,\n frameInfo: frame.frameInfo,\n uri: await blobToBase64(\n new Blob([await stream(frame.getImage())], { type: \"image/png\" })\n ),\n })\n )\n );\n\n return parsed as Frame[];\n}\n\nasync function mergeFrames(files: ParsedFile[]) {\n const gifs = files.filter((file: ParsedFile) => file.type === \"gif\");\n const lengths = gifs.map((gif: ParsedFile) => gif.frames!.length);\n const framesLength = Math.min(...lengths);\n // Still refers to the delays of the first gif found at the moment.\n const gif: Frame[] | undefined = gifs[0].frames;\n\n const frames: Array> = Array.from(Array(framesLength)).map(\n (_, i) =>\n files.map((file: any) =>\n file.type === \"gif\" ? file.frames[i].uri : file.uri\n )\n );\n\n const merged = await Promise.all(\n frames.map(async (frame, index) => ({\n ...gif![index],\n uri: await mergeImages(frame),\n image: await loadImage(await mergeImages(frame)),\n }))\n );\n return merged;\n}\n\nfunction getImageColors(image: HTMLImageElement): Array {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n invariant(context != null);\n context.drawImage(image, 0, 0);\n\n const colors: Array = [];\n for (let i = 0; i < image.width; i++) {\n for (let j = 0; j < image.width; j++) {\n colors.push(\n [...context.getImageData(i, j, 1, 1).data].slice(0, 3).join(\".\")\n );\n }\n }\n\n return [...new Set(colors)];\n}\n\nfunction mergeGif(\n frames: Array<{ image: HTMLImageElement; frameInfo: { delay: number } }>\n): Promise {\n const allColors: Maybe> =\n frames[0].image.width < 256\n ? [\n ...new Set(\n frames.reduce(\n (acc: Array, currVal) => [\n ...acc,\n ...getImageColors(currVal.image),\n ],\n []\n )\n ),\n ]\n : null;\n const allColorsUnique = allColors?.map((color) => color.split(\".\")).flat();\n return new Promise((resolve, _reject) => {\n const gif = new GIF({\n // GIFs can have a max of 256 colors.\n //\n // If there are at most 256 unique colors\n // used by the GIF, then explicitly pass in these colors.\n //\n // OTHEREWISE, NeuQuant will mess things up... it's stupid.\n // @ts-ignore undocumented feature\n globalPalette:\n allColorsUnique != null && allColorsUnique.length <= 256\n ? allColorsUnique\n : undefined,\n // background: \"0x000\",\n // transparent: \"0x000\",\n workers: 2,\n workerScript: process.env.REACT_APP_GIF_URL,\n quality: 1,\n });\n\n frames.forEach(async (frame) => {\n gif.addFrame(frame.image, {\n // gif-frames has delays in 1/100ths of a second.\n // But gif.js wants delays in ms.\n // So need to multiply by 10.\n delay: frame.frameInfo.delay * 10,\n });\n });\n\n gif.on(\"finished\", (blob: Blob) => {\n // See https://github.com/jnordberg/gif.js/issues/96\n gif.abort();\n // @ts-ignore\n gif.freeWorkers.forEach((w) => w.terminate());\n\n resolve(blob);\n });\n gif.render();\n });\n}\n\n// Returns a data URI.\nexport default async function generateSingleImage(\n files: Array\n): Promise {\n if (files.some((file) => file?.name.includes(\".gif\"))) {\n const parsedFiles = await Promise.all(\n files.map(async (file) => {\n if (file?.name.includes(\".gif\")) {\n return {\n type: \"gif\",\n frames: await parseGif(await fileToDataUri(file)),\n };\n }\n return { type: \"image\", uri: await fileToDataUri(file as File) };\n })\n );\n const mergedFrames = await mergeFrames(parsedFiles as ParsedFile[]);\n return blobToBase64(await mergeGif(mergedFrames));\n }\n\n const uris = await Promise.all(\n filterNulls(files).map((file) => fileToDataUri(file))\n );\n return mergeImages(uris);\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"grid\":\"FolderGrid_grid__PCNT5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"NextAndBackButton_container__15pij\"};","import { MaybeUndef } from \"types/UtilityTypes\";\n\n/**\n * Mainly meant to be passed to Array.filter, because TypeScript isn't\n * smart enough to figure things out when you just do something like\n * filter((val) => val != null).\n *\n * Gotten from https://stackoverflow.com/questions/43118692/typescript-filter-out-nulls-from-an-array.\n */\nexport default function isNotNull(\n value: MaybeUndef\n): value is TValue {\n return value != null;\n}\n","import { MaybeUndef } from \"types/UtilityTypes\";\nimport isNotNull from \"utils/isNotNull\";\n\nexport default function filterNulls(arr: Array>): Array {\n return arr.filter(isNotNull);\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"GenerationPage_button__6Yr-k\",\"buttons\":\"GenerationPage_buttons__25EAQ\",\"imageContainer\":\"GenerationPage_imageContainer__wPXBT\",\"container\":\"GenerationPage_container__2jSWm\",\"description\":\"GenerationPage_description__2xtsl\",\"downloadButton\":\"GenerationPage_downloadButton__3yzhy\",\"grid\":\"GenerationPage_grid__Sofkc\",\"image\":\"GenerationPage_image__PF147\",\"loadMoreButton\":\"GenerationPage_loadMoreButton__FqgzA\",\"note\":\"GenerationPage_note__1Wjl7\",\"progress\":\"GenerationPage_progress__371tl\",\"title\":\"GenerationPage_title__2bf0t\"};","enum BackgroundColorClass {\n BackgroundOverlay = \"backgroundColorBackgroundOverlay\",\n Dimmer = \"backgroundColorDimmer\",\n Error = \"backgroundColorError\",\n Green = \"backgroundColorGreen\",\n Ghost = \"backgroundColorGhost\",\n Navy = \"backgroundColorNavy\",\n NavyHover = \"backgroundColorNavyHover\",\n Pink = \"backgroundColorPink\",\n Purple = \"backgroundColorPurple\",\n PurpleHover = \"backgroundColorPurpleHover\",\n PurplePastel = \"backgroundColorPurplePastel\",\n TransparentPartial = \"backgroundColorTransparentPartial\",\n White = \"backgroundColorWhite\",\n}\n\nexport default BackgroundColorClass;\n","import { MaybeUndef } from \"types/UtilityTypes\";\n\n/**\n * Joins the passed-in CSS classes with a space.\n */\nexport default function joinClasses(\n ...cssClasses: Array>\n): string {\n return cssClasses.filter((className) => className != null).join(\" \");\n}\n","import ElementId from \"types/enums/ElementId\";\nimport containerStyles from \"css/ResponsiveContainer.module.css\";\nimport joinClasses from \"utils/joinClasses\";\n\ntype Props = {\n children: any;\n className?: string;\n height?: string;\n id?: ElementId;\n};\n\nexport default function ResponsiveContainer({\n children,\n className,\n height,\n id,\n}: Props): JSX.Element {\n return (\n \n {children}\n \n );\n}\n","enum AmplitudeEvent {\n ButtonClick = \"button_click\",\n PageView = \"page_view\",\n}\n\nexport default AmplitudeEvent;\n","// Global CSS classes\nenum GlobalClass {\n ButtonPlain = \"buttonPlain\",\n GradientBg = \"gradientBg\",\n HideText = \"hideText\",\n PixelArtImage = \"pixelArtImage\",\n}\n\nexport default GlobalClass;\n","enum TextButtonTheme {\n Navy = \"Navy\",\n Purple = \"Purple\",\n White = \"White\",\n}\n\nexport default TextButtonTheme;\n","import amplitude, { AmplitudeClient } from \"amplitude-js\";\nimport { Maybe } from \"types/UtilityTypes\";\nimport isProd from \"utils/isProd\";\n\nlet amplitudeInstance: Maybe = null;\n\nexport default function getAmplitude(): AmplitudeClient {\n if (amplitudeInstance != null) {\n return amplitudeInstance;\n }\n\n amplitudeInstance = amplitude.getInstance();\n amplitudeInstance!.init(\"fa9c6ab39fda985637f54fdf86e80e34\");\n if (!isProd()) {\n amplitudeInstance!.setDeviceId(\"DEV\");\n }\n return amplitudeInstance!;\n}\n","import AmplitudeEvent from \"types/enums/AmplitudeEvent\";\nimport { Callback } from \"amplitude-js\";\nimport getAmplitude from \"utils/amplitude/getAmplitude\";\n\nexport default function useLogEvent(): (\n event: AmplitudeEvent,\n data?: { [key: string]: any },\n callback?: Callback\n) => void {\n return (event, data, callback) => {\n const amplitude = getAmplitude();\n amplitude.logEvent(\n event,\n {\n ...data,\n origin: window.self.origin,\n pathname: window.location.pathname,\n referrer: document.referrer,\n },\n callback\n );\n };\n}\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport AmplitudeEvent from \"types/enums/AmplitudeEvent\";\nimport ButtonName from \"types/enums/ButtonName\";\nimport FontClass from \"types/enums/FontClass\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport { Link } from \"react-router-dom\";\nimport { MouseEventHandler } from \"react\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\nimport joinClasses from \"utils/joinClasses\";\nimport styles from \"css/buttons/TextButton.module.css\";\nimport useLogEvent from \"hooks/useLogEvent\";\n\nconst THEME_TO_CLASS_NAME = {\n [TextButtonTheme.Navy]: styles.buttonNavy,\n [TextButtonTheme.Purple]: styles.buttonPurple,\n [TextButtonTheme.White]: styles.buttonWhite,\n};\n\nconst THEME_TO_ACTIVE_CLASS_NAME = {\n [TextButtonTheme.Navy]: styles.buttonNavyActive,\n [TextButtonTheme.Purple]: styles.buttonPurpleActive,\n [TextButtonTheme.White]: styles.buttonWhiteActive,\n};\n\ntype Props = {\n buttonName?: ButtonName;\n buttonTheme?: keyof typeof THEME_TO_CLASS_NAME;\n children: string | Array | JSX.Element;\n className?: string;\n display?: \"block\" | \"flex\" | \"inline\";\n fontClass?: FontClass;\n href?: string;\n htmlFor?: string;\n icon?: JSX.Element;\n isActive?: boolean;\n logProperties?: { [key: string]: any };\n onClick?: MouseEventHandler;\n textDecoration?: \"none\" | \"underline\";\n textTransform?: \"none\" | \"uppercase\";\n type?: \"button\" | \"link_external\" | \"link_internal\" | \"label\" | \"submit\";\n};\n\nexport default function TextButton({\n buttonName,\n buttonTheme = TextButtonTheme.White,\n children,\n className,\n display = \"flex\",\n fontClass,\n href,\n htmlFor,\n icon,\n isActive = false,\n logProperties,\n onClick,\n textDecoration,\n textTransform,\n type = \"button\",\n}: Props): JSX.Element {\n const logEvent = useLogEvent();\n const classNameJoined = joinClasses(\n styles.button,\n className,\n THEME_TO_CLASS_NAME[buttonTheme],\n isActive ? THEME_TO_ACTIVE_CLASS_NAME[buttonTheme] : null,\n fontClass\n );\n const style = {\n display,\n ...(textTransform == null ? {} : { textTransform }),\n ...(textDecoration == null ? {} : { textDecoration }),\n };\n\n const childrenWithIcon = (\n <>\n {icon != null && (\n \n {icon}\n \n )}\n {children}\n \n );\n\n const onClickWithLog: MouseEventHandler = (e) => {\n if (buttonName != null) {\n logEvent(AmplitudeEvent.ButtonClick, { buttonName, ...logProperties });\n }\n if (onClick != null) {\n onClick(e);\n }\n };\n\n if (type === \"link_internal\") {\n return (\n \n
\n {childrenWithIcon}\n
\n \n );\n }\n\n if (type === \"link_external\") {\n return (\n \n {childrenWithIcon}\n \n );\n }\n\n if (type === \"label\") {\n return (\n \n {childrenWithIcon}\n \n );\n }\n\n return (\n \n {childrenWithIcon}\n \n );\n}\n","enum FontClass {\n Body1 = \"body1Font\",\n Body1Medium = \"body1MediumFont\",\n Body1SemiBold = \"body1SemiBoldFont\",\n Body1Bold = \"body1BoldFont\",\n Body2 = \"body2Font\",\n Body2Medium = \"body2MediumFont\",\n Body2SemiBold = \"body2SemiBoldFont\",\n Body2Bold = \"body2BoldFont\",\n ButtonText = \"buttonTextFont\",\n Header1 = \"header1Font\",\n Header3 = \"header3Font\",\n QuestionText = \"questionTextFont\",\n}\n\nexport default FontClass;\n","enum ElementId {\n BackgroundOverlay = \"BackgroundOverlay\",\n}\n\nexport default ElementId;\n","import ElementId from \"types/enums/ElementId\";\nimport joinClasses from \"utils/joinClasses\";\nimport styles from \"css/loading/BackgroundOverlay.module.css\";\n\ntype Props = {\n children?: JSX.Element | Array;\n className?: string;\n};\n\nexport default function BackgroundOverlay({\n children,\n className,\n}: Props): JSX.Element {\n return (\n \n {children}\n \n );\n}\n","import ColorValue from \"types/enums/ColorValue\";\n\ntype Props = {\n colorValue: ColorValue;\n};\n\nexport default function CrossIcon({ colorValue }: Props): JSX.Element {\n return (\n \n \n \n \n );\n}\n","import { ButtonHTMLAttributes, DetailedHTMLProps, forwardRef } from \"react\";\n\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport deleteProperty from \"utils/deleteProperty\";\nimport joinClasses from \"utils/joinClasses\";\n\ntype Props = DetailedHTMLProps<\n ButtonHTMLAttributes,\n HTMLButtonElement\n> & { hideText?: boolean; transparent?: boolean };\n\nconst PlainButton = forwardRef(\n (props: Props, ref) => (\n // eslint-disable-next-line react/button-has-type\n \n {props.children}\n \n )\n);\n\nexport default PlainButton;\n","enum ColorClass {\n BackgroundOverlay = \"colorBackgroundOverlay\",\n Dimmer = \"colorDimmer\",\n Error = \"colorError\",\n Green = \"colorGreen\",\n Ghost = \"colorGhost\",\n Navy = \"colorNavy\",\n NavyHover = \"colorNavyHover\",\n Pink = \"colorPink\",\n Purple = \"colorPurple\",\n PurpleHover = \"colorPurpleHover\",\n PurplePastel = \"colorPurplePastel\",\n TransparentPartial = \"colorTransparentPartial\",\n White = \"colorWhite\",\n}\n\nexport default ColorClass;\n","import produce from \"immer\";\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport default function deleteProperty(\n obj: T,\n key: K\n): Omit {\n return produce(obj, (draft) => {\n // @ts-ignore\n // eslint-disable-next-line no-param-reassign\n delete draft[key];\n });\n}\n","// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport default function emptyFunction(): void {}\n","import ColorValue from \"types/enums/ColorValue\";\nimport CrossIcon from \"components/icons/CrossIcon\";\nimport PlainButton from \"components/buttons/PlainButton\";\nimport emptyFunction from \"utils/emptyFunction\";\n\ntype Props = {\n className?: string;\n colorValue: ColorValue;\n isShown?: boolean;\n onClick?: () => void;\n};\n\nexport default function CloseButton({\n className,\n colorValue,\n isShown = true,\n onClick = emptyFunction,\n}: Props): JSX.Element {\n return (\n \n \n \n );\n}\n","enum ColorValue {\n BackgroundOverlay = \"rgba(0, 0, 0, 0.3)\",\n Dimmer = \"rgba(0, 0, 0, 0.36)\",\n Error = \"#e92525\",\n Green = \"#0d9350\",\n Ghost = \"#c6c6c6\",\n Navy = \"#172A70\",\n NavyHover = \"#080561\",\n Pink = \"#FFCBCB\",\n Purple = \"#506CD0\",\n PurpleHover = \"#4460c5\",\n PurplePastel = \"#A1B0EA\",\n TransparentPartial = \"rgba(255, 255, 255, 0.8)\",\n White = \"#FFFFF3\",\n}\n\nexport default ColorValue;\n","import { RefObject, useEffect } from \"react\";\n\nimport ElementId from \"types/enums/ElementId\";\n\nconst ESCAPE = \"Escape\";\nconst KEYUP = \"keyup\";\nconst MOUSEUP = \"mouseup\";\n\n/**\n * A custom hook that, when the user clicks outside the element (the modal)\n * contained by the ref, executes a hideModal function.\n *\n * Also executes hideModal if \"escape\" is pressed.\n */\nexport default function useOutsideClickHideModal(\n ref: RefObject,\n excludeRefs: Array>,\n hideModal: () => void\n) {\n useEffect(() => {\n // Hide modal if a click occurs outside the referenced element's child.\n const handleClickOutside = (event: MouseEvent) => {\n const inAnyExcludeRef = excludeRefs.some((excludeRef) =>\n !excludeRef.current\n ? false\n : excludeRef.current.contains(event.target as Node)\n );\n if (inAnyExcludeRef) {\n return;\n }\n\n if (\n (ref.current && !ref.current.contains(event.target as Node)) ||\n (event.target instanceof HTMLElement &&\n event.target.id === ElementId.BackgroundOverlay)\n ) {\n hideModal();\n }\n };\n\n // Hide modal if the \"escape\" key is pressed.\n function handleKeyUp(event: KeyboardEvent) {\n if (event.key === ESCAPE) {\n hideModal();\n }\n }\n\n // Bind the click event listener\n document.addEventListener(MOUSEUP, handleClickOutside);\n\n // Bind the keyboard event listener\n document.addEventListener(KEYUP, handleKeyUp);\n\n // Cleanup\n return () => {\n // Unbind the event listeners on clean up\n document.removeEventListener(MOUSEUP, handleClickOutside);\n document.removeEventListener(KEYUP, handleKeyUp);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [excludeRefs, ref]);\n}\n","import { RefObject, useRef } from \"react\";\n\nimport useOutsideClickHideModal from \"hooks/useOutsideClickHideModal\";\n\nconst EMPTY_ARRAY: Array> = [];\n\n/**\n * Component that hides a modal (should be itself) if you click outside of it.\n *\n * Also hides it if \"escape\" is pressed.\n */\nexport default function OutsideClickHideModal(props: {\n children: any;\n className?: string;\n excludeRefs?: Array>;\n hideModal: () => void;\n}) {\n const wrapperRef = useRef(null);\n useOutsideClickHideModal(\n wrapperRef,\n props.excludeRefs ?? EMPTY_ARRAY,\n props.hideModal\n );\n\n return (\n // position: static causes a bug when the viewer dropdown is expanded. Basically\n // this div acts like a flex item and moves the other flex items around.\n \n {props.children}\n \n );\n}\n","import ColorClass from \"types/enums/ColorClass\";\nimport FontClass from \"types/enums/FontClass\";\nimport joinClasses from \"utils/joinClasses\";\nimport styles from \"css/text/HeaderText.module.css\";\n\nexport type Props = {\n children:\n | string\n | JSX.Element\n | Array\n | number;\n className?: string;\n colorClass?: ColorClass;\n fontClass: FontClass;\n textAlign?: \"center\" | \"left\" | \"right\";\n textTransform?: \"none\" | \"uppercase\";\n};\n\nexport default function HeaderText({\n children,\n className,\n colorClass,\n fontClass,\n textAlign,\n textTransform,\n}: Props): JSX.Element {\n const classNameJoined = joinClasses(\n fontClass,\n styles.header,\n className,\n colorClass\n );\n\n const style = {\n ...(textAlign != null ? { textAlign } : {}),\n ...(textTransform != null ? { textTransform } : {}),\n };\n\n switch (fontClass) {\n case FontClass.Header1:\n return (\n

\n {children}\n

\n );\n case FontClass.Header3:\n return (\n

\n {children}\n

\n );\n default:\n throw new Error(`Unexpected fontClass of ${fontClass}`);\n }\n}\n","import FontClass from \"types/enums/FontClass\";\nimport HeaderText from \"components/text/HeaderText\";\nimport type { Props } from \"components/text/HeaderText\";\n\nexport default function Header1(props: Omit) {\n return ;\n}\n","import { Maybe, MaybeUndef } from \"types/UtilityTypes\";\n\nimport BackgroundOverlay from \"components/loading/BackgroundOverlay\";\nimport CloseButton from \"components/buttons/CloseButton\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport OutsideClickHideModal from \"components/modal/OutsideClickHideModal\";\nimport ReactDOM from \"react-dom\";\nimport joinClasses from \"utils/joinClasses\";\nimport styles from \"css/modal/GenericModal.module.css\";\nimport { useEffect } from \"react\";\nimport Header1 from \"components/text/Header1\";\n\ntype Props = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any;\n className?: string;\n footer?: MaybeUndef;\n hideCloseButton?: boolean;\n hideWithVisibility?: boolean;\n isShown: boolean;\n onHide: () => void;\n title?: string | JSX.Element;\n};\n\nexport default function GenericModal({\n children,\n className,\n hideCloseButton = false,\n hideWithVisibility = false,\n footer,\n isShown,\n onHide,\n title,\n}: Props): Maybe {\n // Disable outer scroll when modal is visible.\n // See https://stackoverflow.com/questions/9538868/prevent-body-from-scrolling-when-a-modal-is-opened/69005672#69005672.\n useEffect(() => {\n if (isShown) {\n const width = document.body.clientWidth;\n document.body.style.overflowY = \"hidden\";\n document.body.style.width = `${width}px`;\n } else {\n document.body.style.overflowY = \"scroll\";\n document.body.style.width = `auto`;\n }\n\n return () => {\n document.body.style.overflowY = \"scroll\";\n document.body.style.width = `auto`;\n };\n }, [isShown]);\n\n if (!isShown && !hideWithVisibility) {\n return null;\n }\n\n return (\n <>\n {isShown && }\n {ReactDOM.createPortal(\n \n \n
\n \n {title != null && (\n
\n {typeof title === \"string\" ? (\n \n {title}\n \n ) : (\n title\n )}\n
\n )}\n {children}\n {footer != null &&
{footer}
}\n
\n \n ,\n document.body\n )}\n \n );\n}\n","import ColorClass from \"types/enums/ColorClass\";\nimport FontClass from \"types/enums/FontClass\";\nimport joinClasses from \"utils/joinClasses\";\n\nexport type Props = {\n children:\n | number\n | string\n | JSX.Element\n | Array;\n className?: string;\n colorClass?: ColorClass;\n display?: string;\n fontClass: FontClass;\n textAlign?: \"center\" | \"left\" | \"right\";\n textTransform?: \"none\" | \"uppercase\";\n};\n\nexport default function BodyText({\n children,\n className,\n colorClass,\n display,\n fontClass,\n textAlign,\n textTransform,\n}: Props): JSX.Element {\n const classNameJoined = joinClasses(fontClass, className, colorClass);\n\n const style = {\n ...(textAlign != null ? { textAlign } : {}),\n ...(textTransform != null ? { textTransform } : {}),\n ...(display != null ? { display } : {}),\n };\n\n switch (fontClass) {\n case FontClass.Body1:\n case FontClass.Body1Bold:\n case FontClass.Body1Medium:\n case FontClass.Body1SemiBold:\n case FontClass.Body2:\n case FontClass.Body2Bold:\n case FontClass.Body2Medium:\n case FontClass.Body2SemiBold:\n case FontClass.ButtonText:\n case FontClass.QuestionText:\n return (\n
\n {children}\n
\n );\n default:\n throw new Error(`Unexpected fontClass of ${fontClass}`);\n }\n}\n","import BodyText from \"components/text/BodyText\";\nimport FontClass from \"types/enums/FontClass\";\nimport type { Props } from \"components/text/BodyText\";\n\nexport default function Body1(props: Omit) {\n return ;\n}\n","import ColorValue from \"types/enums/ColorValue\";\n\ntype Props = {\n colorValue: ColorValue;\n};\n\nexport default function TwitterIcon24({ colorValue }: Props): JSX.Element {\n return (\n \n \n \n );\n}\n","import BodyText from \"components/text/BodyText\";\nimport FontClass from \"types/enums/FontClass\";\nimport type { Props } from \"components/text/BodyText\";\n\nexport default function Body2(props: Omit) {\n return ;\n}\n","import { DetailedHTMLProps, ImgHTMLAttributes } from \"react\";\n\ntype Props = DetailedHTMLProps<\n ImgHTMLAttributes,\n HTMLImageElement\n>;\n\n/**\n * Wrapper of the built-in img element that uses webp resources.\n */\nexport default function ImageWebp(props: Props): JSX.Element {\n const splits = props.src!.split(\"/\");\n const dir = splits.slice(0, splits.length - 1).join(\"/\");\n const name = splits[splits.length - 1].split(\".\")[0];\n // // We expect the webp file to be in the same folder and have the same name as the png/jpeg.\n const srcWebp = `${dir}/${name}.webp`;\n\n return (\n \n {!props.src!.includes(\".svg\") && (\n \n )}\n \n \n \n );\n}\n","/* eslint-disable jsx-a11y/mouse-events-have-key-events */\nimport GenericModal from \"components/modal/GenericModal\";\nimport styles from \"css/modal/ContactUsModal.module.css\";\nimport Body1 from \"components/text/Body1\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport { useState } from \"react\";\nimport TextButton from \"components/buttons/TextButton\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\nimport FontClass from \"types/enums/FontClass\";\nimport TwitterIcon24 from \"components/icons/TwitterIcon24\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport Body2 from \"components/text/Body2\";\nimport ImageWebp from \"components/images/ImageWebp\";\n\nfunction TeamMemberProfile({\n description,\n srcNft,\n srcReal,\n twitterHandle,\n twitterHref,\n}: {\n description: string;\n srcNft: any;\n srcReal: any;\n twitterHandle: string;\n twitterHref: string;\n}): JSX.Element {\n const [isReal, setIsReal] = useState(false);\n\n return (\n
\n setIsReal(false)}\n onMouseOver={() => setIsReal(true)}\n src={srcNft}\n style={{ display: !isReal ? \"block\" : \"none\" }}\n />\n setIsReal(false)}\n onMouseOver={() => setIsReal(true)}\n src={srcReal}\n style={{ display: isReal ? \"block\" : \"none\" }}\n />\n }\n type=\"link_external\"\n >\n {twitterHandle}\n \n \n {description}\n \n
\n );\n}\n\ntype Props = {\n isShown: boolean;\n onHide: () => void;\n};\n\nexport default function ContactUsModal({\n isShown,\n onHide,\n}: Props): JSX.Element {\n return (\n \n
\n \n If you're having issues using Nifty Generator or have suggestions\n for us, please let us know! You can just ping us on{\" \"}\n \n Discord\n \n , and we'll respond as soon as we can 😊\n \n
\n \n \n
\n
\n
\n );\n}\n","import ColorValue from \"types/enums/ColorValue\";\n\ntype Props = {\n colorValue: ColorValue;\n};\n\nexport default function TwitterIcon({ colorValue }: Props): JSX.Element {\n return (\n \n \n \n );\n}\n","import ColorValue from \"types/enums/ColorValue\";\n\ntype Props = {\n colorValue: ColorValue;\n};\n\nexport default function DiscordIcon({ colorValue }: Props): JSX.Element {\n return (\n \n \n \n );\n}\n","import BackgroundColorClass from \"types/enums/BackgroundColorClass\";\nimport styles from \"css/footer/Footer.module.css\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport TextButton from \"components/buttons/TextButton\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\nimport FontClass from \"types/enums/FontClass\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport ContactUsModal from \"components/modal/ContactUsModal\";\nimport { useState } from \"react\";\nimport TwitterIcon from \"components/icons/TwitterIcon\";\nimport DiscordIcon from \"components/icons/DiscordIcon\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport Body1 from \"components/text/Body1\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport ImageWebp from \"components/images/ImageWebp\";\n\nfunction Buttons({\n onClickContactUs,\n}: {\n onClickContactUs: () => void;\n}): JSX.Element {\n return (\n
\n \n Generate\n \n \n Shuffle\n \n \n Contact us\n \n \n How it works\n \n
\n );\n}\n\nexport default function Footer(): JSX.Element {\n const [isShown, setIsShown] = useState(false);\n\n return (\n <>\n setIsShown(false)} />\n
\n \n
\n \n \n \n setIsShown(true)} />\n
\n \n \n \n \n \n \n
\n \n a{\" \"}\n \n Mycoverse\n {\" \"}\n project\n \n
\n
\n
\n \n );\n}\n","enum ButtonTheme {\n Purple = \"purple\",\n}\n\nexport default ButtonTheme;\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport { MouseEventHandler, forwardRef } from \"react\";\n\nimport AmplitudeEvent from \"types/enums/AmplitudeEvent\";\nimport ButtonName from \"types/enums/ButtonName\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport FontClass from \"types/enums/FontClass\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport { Link } from \"react-router-dom\";\nimport joinClasses from \"utils/joinClasses\";\nimport styles from \"css/buttons/ButtonWithText.module.css\";\nimport useLogEvent from \"hooks/useLogEvent\";\n\ntype Props = {\n buttonName?: ButtonName;\n buttonTheme: ButtonTheme;\n children: string | JSX.Element | Array;\n className?: string;\n disabled?: boolean;\n fontClass?: FontClass;\n height?: number;\n href?: string;\n htmlFor?: string;\n icon?: JSX.Element;\n iconPosition?: \"left\" | \"right\";\n logProperties?: { [key: string]: any };\n onClick?: MouseEventHandler;\n style?: { [key: string]: string | number };\n textTransform?: \"none\" | \"uppercase\";\n type?: \"button\" | \"link_external\" | \"link_internal\" | \"label\" | \"submit\";\n width?: \"auto\" | \"100%\";\n};\n\nfunction getClassNameForButtonTheme(\n buttonTheme: ButtonTheme,\n isLink: boolean,\n disabled: boolean\n): string {\n switch (buttonTheme) {\n case ButtonTheme.Purple:\n return joinClasses(\n isLink ? styles.purpleThemeLink : styles.purpleTheme,\n disabled ? styles.disabled : null\n );\n default:\n break;\n }\n\n throw new Error(`unsupported buttonTheme ${buttonTheme}`);\n}\n\n// forwardRef required to make this work with NextJS Link, see\n// https://nextjs.org/docs/api-reference/next/link#if-the-child-is-a-function-component.\nconst ButtonWithText = forwardRef(\n (\n {\n buttonName,\n buttonTheme,\n children,\n className,\n disabled = false,\n fontClass = FontClass.ButtonText,\n height,\n href,\n htmlFor,\n icon,\n iconPosition = \"right\",\n logProperties,\n onClick,\n style = {},\n textTransform,\n type = \"button\",\n width = \"auto\",\n }: Props,\n ref\n ) => {\n const logEvent = useLogEvent();\n const styleToUse = {\n ...style,\n height,\n ...(textTransform == null ? {} : { textTransform }),\n };\n const classNameJoined = joinClasses(\n getClassNameForButtonTheme(\n buttonTheme,\n type === \"link_internal\" || type === \"link_external\",\n disabled\n ),\n styles.button,\n width === \"auto\" ? styles.buttonAutoWidth : styles.button100Width,\n fontClass,\n className\n );\n\n const childrenWithIcon = (\n <>\n {icon && iconPosition === \"left\" && (\n \n {icon}\n \n )}\n {children}\n {icon && iconPosition === \"right\" && (\n \n {icon}\n \n )}\n \n );\n const onClickWithLog: MouseEventHandler = (e) => {\n if (buttonName != null) {\n logEvent(AmplitudeEvent.ButtonClick, { buttonName, ...logProperties });\n }\n if (onClick != null) {\n onClick(e);\n }\n };\n\n if (type === \"link_internal\") {\n return (\n \n \n {childrenWithIcon}\n \n \n );\n }\n\n if (type === \"link_external\") {\n return (\n \n {childrenWithIcon}\n \n );\n }\n\n if (type === \"label\") {\n return (\n \n {childrenWithIcon}\n \n );\n }\n\n return (\n \n {childrenWithIcon}\n \n );\n }\n);\n\nexport default ButtonWithText;\n","import { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\nexport default function getRpcHostFromNetwork(\n network: WalletAdapterNetwork\n): string {\n switch (network) {\n case WalletAdapterNetwork.Devnet:\n return \"https://dry-proud-tree.solana-devnet.quiknode.pro/371933be8a802820f2bf9943f509145b797d14e6/\";\n case WalletAdapterNetwork.Mainnet:\n return \"https://patient-proud-dew.solana-mainnet.quiknode.pro/0c5b5dfc389f144e912274604daa0a401b2bf367/\";\n case WalletAdapterNetwork.Testnet:\n return \"https://api.testnet.solana.com\";\n default:\n throw new Error(\"should not reach\");\n }\n}\n","export const NETWORK = \"mainnet-beta\";\nexport const CANDY_MACHINE_ID = \"CtJEctGUsbn8jZumsKQaJ8XDSDusd8XE2BCeeC4XYy4h\";\n","import { Context, createContext, useMemo, useState } from \"react\";\n\nimport * as anchor from \"@project-serum/anchor\";\n\nimport {\n ConnectionProvider,\n WalletProvider,\n} from \"@solana/wallet-adapter-react\";\nimport { ThemeProvider, createTheme } from \"@material-ui/core\";\nimport {\n getPhantomWallet,\n getSlopeWallet,\n getSolflareWallet,\n} from \"@solana/wallet-adapter-wallets\";\n\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { WalletDialogProvider } from \"@solana/wallet-adapter-material-ui\";\nimport emptyFunction from \"utils/emptyFunction\";\nimport getRpcHostFromNetwork from \"utils/solana/misc/getRpcHostFromNetwork\";\nimport { NETWORK } from \"constants/SolanaContext\";\nimport { WhitelistContextProvider } from \"context/WhitelistContext\";\n\nconst defaultNetwork = NETWORK as WalletAdapterNetwork;\nconst defaultRpcHost = getRpcHostFromNetwork(defaultNetwork);\nconst defaultConnection = new anchor.web3.Connection(defaultRpcHost);\nconst txTimeout = 30000; // milliseconds (confirm this works for your project).\n\nconst theme = createTheme({\n palette: {\n type: \"dark\",\n },\n overrides: {\n MuiButtonBase: {\n root: {\n justifyContent: \"flex-start\",\n },\n },\n MuiButton: {\n containedPrimary: {\n color: \"none\",\n background: \"none\",\n backgroundColor: \"none\",\n \"&:hover\": {\n backgroundColor: \"none\",\n },\n },\n contained: {\n boxShadow: \"none\",\n \"&:hover\": {\n boxShadow: \"none\",\n backgroundColor: \"none\",\n },\n },\n root: {\n textTransform: undefined,\n padding: \"0px\",\n \"&:hover\": {\n backgroundColor: \"none\",\n },\n disableRipple: true,\n },\n startIcon: {\n marginRight: 8,\n },\n endIcon: {\n marginLeft: 8,\n },\n },\n },\n});\n\nexport type SolanaContextData = {\n connection: anchor.web3.Connection;\n network: WalletAdapterNetwork;\n txTimeout: number;\n\n setNetwork: (val: WalletAdapterNetwork) => void;\n};\n\nexport const SolanaContext: Context =\n createContext({\n connection: defaultConnection,\n network: defaultNetwork,\n txTimeout,\n\n setNetwork: emptyFunction,\n });\n\ntype ProviderProps = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any;\n};\n\nexport function SolanaContextProvider(props: ProviderProps): JSX.Element {\n const [network, setNetwork] = useState(defaultNetwork);\n const endpoint = useMemo(() => getRpcHostFromNetwork(network), [network]);\n const connection = useMemo(\n () => new anchor.web3.Connection(getRpcHostFromNetwork(network)),\n [network]\n );\n\n const wallets = useMemo(\n () => [\n getPhantomWallet(),\n getSlopeWallet(),\n getSolflareWallet(),\n // If we add this, the \"change network\" feature + useAnchorWallet causes a bunch of re-renders\n // getSolletWallet({ network }),\n // getSolletExtensionWallet({ network }),\n ],\n []\n );\n\n return (\n \n \n \n \n \n \n {props.children}\n \n \n \n \n \n \n );\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\n\ntype StringPublicKey = string;\ntype AnyPublicKey = StringPublicKey | PublicKey;\n\nexport default async function getMintAddressesByOwner(\n connection: Connection,\n owner: AnyPublicKey\n) {\n return (\n await connection.getParsedTokenAccountsByOwner(new PublicKey(owner), {\n programId: TOKEN_PROGRAM_ID,\n })\n ).value\n .map(({ pubkey, account }) => ({\n data: account.data,\n pubkey: pubkey.toBase58(),\n }))\n .filter(\n ({ data }) =>\n data.parsed.info.tokenAmount.uiAmount > 0 &&\n data.parsed.info.tokenAmount.decimals === 0\n )\n .map((token) => token.data.parsed.info.mint);\n}\n","import { doc, getDoc, getFirestore } from \"firebase/firestore\";\n\nexport default async function getWhitelist(address: string): Promise {\n const db = getFirestore();\n const docRef = doc(db, \"users\", address);\n const docSnap = await getDoc(docRef);\n return docSnap.data()?.whitelist;\n}\n","import {\n doc,\n updateDoc,\n getFirestore,\n setDoc,\n getDoc,\n} from \"firebase/firestore\";\n\nexport default async function setWhitelist(\n address: string,\n isWhitelist: boolean\n): Promise {\n const db = getFirestore();\n const docRef = doc(db, \"users\", address);\n const docSnap = await getDoc(docRef);\n\n if (!docSnap.exists()) {\n await setDoc(docRef, {\n address,\n });\n }\n\n await updateDoc(docRef, {\n whitelist: isWhitelist,\n });\n}\n","export default [\n // Wave 1 Mint Addresses\n \"9Kn4kJvRB4oy1JZBeYiinfja9ewbjdSG4jkTKC6FtyL1\",\n \"4VyMWBWU4UsVyvVJ5sqPTUZ33uwaBNzwoxgPYePtLAt7\",\n \"TEXhuRfjbJEhCvLqHrug4vUx6ys6iRC1bJm7ZYA37ZN\",\n \"CrLYeBErACAN3tKWHpERH989yAZJe1L9c5VCWW76ZebB\",\n \"m3gsK2vqkBunh6nFr3xuZcJ69HhnNyem4wEGqaPVNPm\",\n \"FLyCFfL6Ts1L39D5vxsny1YW8tkutL8AHv9tsmNdX7H9\",\n \"AYfKoUn4YTGCPdUru7diQ528Ze86Z2HYh67ESSt9KmgV\",\n \"GFK6AoqDs275fRznJuDPuriTTkF9vL4LagVqi7PZscdp\",\n \"64y7SMbbz6qPbDRnVJynagC4QJo8Z4Rp2JasrevDVQoR\",\n \"EbdACWX6tx5AtD74KnqkFpHDSmgA63JeN4t9YNL1AePQ\",\n \"6Myw8BiGjTu4S8mraKZchPae849mBmjv9NwjpM95Yv2M\",\n \"77GihBr87okSpncdzQzDJBVaU85F1vLHX8DRMhn9iYdM\",\n \"9bUc5hrHbWZQe1zveZsEcSobGpXEKvRjQ8jatrvBD1ph\",\n \"8KQpB3N3NjWE6oQezA436tBL1wUmfXb1odaLJDLz23xh\",\n \"B2tVRpFM4ECnuPweuQSghe1aK6RL9QuG5Q78oh3397KJ\",\n \"FSq3KESMa7ruHEiwdzupx6nGpXF7iVAzAat68Z65FtCS\",\n \"3nSCWFtMkmLY6iFCUnn6zXVjvFvF3otis1ZNqGY5PyqN\",\n \"HfzDQjUny9hKwF4PrSiEZjrGgKWwRV4Dek2gmLKsxc5N\",\n \"2DeVW5tuF5NZMqt24BzCZCbQnxTQwftCRVtA238USXAZ\",\n \"GsMvCC2HCmbEHJACCuCVrmZLHL2TsveJZUtv83UYZTva\",\n \"5pk2ijd19M2upn1XUq7xBn6Jab3dAeHBTqwzqwW4D7ry\",\n \"6GWbpJGVBGrJuRneVJawNFy8ihjvJjgAR27oTRzcCGzy\",\n \"8zY6xdPMKjnCZyBMMzXeqESiLNQ6gqTGtBZBuqTkDXrD\",\n \"Cy8wT6TWytxnW9z4sFHxdDLCfCvruekVcVqndFLDorcY\",\n \"EDpeY8qNTiArdVCnrPzcQ2Kzb7q8i1QfNST72b9Lgj2J\",\n \"GjcdwKbEeuZfpTqbBnzD6KRHbvJT4e2vEwDnXDDxnoQa\",\n \"KL5PYXhWEF3pQxzssQU3pmPfLj6sRY41LVYxugMgit5\",\n \"3V75vkvwzLgF4oA3KkFCHP16uKif1kPVENC7Vf7DcwBW\",\n \"AhsPt3KiTBY4wUbGQavJTqZUS5FaanomsXwzWNpeiez7\",\n \"Gmdo8PLLDNVfZWBK7EgC2BFNpYJCUVKv4uvC5zb2JY1Z\",\n \"H16yz61iS94UkJHTmEMvNpEuLWHWZa4iKPhj8cBEnLo1\",\n \"GvDEQb35JsUn451pN3b2iByRvdfitybKEshtV48TxtK7\",\n \"5QMfmZXgRvRCbQoGD8oUybJpJKyLZP4TPbadczZQA9en\",\n \"B6J8VLtxtkGnwsQL8tg9bt3ALb6Y2J9YxvXaX9Fa36gD\",\n \"A1NFkJFN9iPUNz42HJWu21LoQbfoDM9cz7NkKcmR1ctZ\",\n \"DCorZk6xULVzqpsorxnMiGwJte1RA95JfV5xN1mTPuNb\",\n \"Fx56CextgoaZsGn9UHr62CkMH2johdzH4SmPidTF9acQ\",\n \"AcZqJWCmtjbtnzcCnkKQxWdKvZn335VoupTS9864oeA9\",\n \"3JnCR8j6yRXczyXxxca7RzqNynZHHvRdtkg3hzMd2GaD\",\n \"HxeCsb8yYEBvGU8Uk6g15WRn99c9nDz3qfR8pCvyyHAt\",\n \"CVVCkBJh4iuJbE5EfjbeEZEcENMSLp6hhsZ3cmnw4yyC\",\n \"FZ4oo74Zs8dWDxhB8DYuNtM17HtHP3hHwhXY6t71JcRC\",\n \"395qwHiWxuK772H75QJdFy6RYbdtBgad4a1CGFe47XxL\",\n \"FNCqBLEXWcAcMrEEzbBrZ25qMJsgRTCPbFRuHrr1fKRp\",\n \"2pVXHsCZfCqV3cnYDWAyyBo72QHTqpTq9fSTUFG93MSe\",\n \"Ed3P68mQjDbnFFgE37dR3gHk6mM4jtrW1axQtuzzM4r4\",\n \"4awBM8ead5Pd7BmY4MbFjhu8Tbivk84qhbosJCkRdjN6\",\n \"EwZbmtLACa3uDNon63jZa9bzL8q37agVueUft81q6D7w\",\n \"8D54PTh5X9F8fzRh3EAbtFUPpGEzx5VtKATbQkQVtY1Q\",\n \"8TNpKNM2yXiLPuTYH3rAnYwXzbPkkJJFSstPLRosmffi\",\n \"FUqpiKAr7JsKgVaACTHTzzfqWH2riShQiNBCn6VsGvaa\",\n \"EyEUyCaDSZ51KRFjGgt9RG3f2k2tYLrp5CsM5ZMks2Cn\",\n \"DNATWxzuKCdguPkBYPs4B7URTic6HsFwLJymmNNjgK9A\",\n \"D7iNoaeNwfZRwFFE8ZEQJ4XM7BfurgCtfgHUKRgzct8D\",\n \"5oPtYZzJ1ZvVvouDgp4EifVqQwitAaQTLZWPfWdiDjtk\",\n \"DrM7z63Si4HMtAzskSBgZRXJfNja6z67LspVHHpmNDEc\",\n \"FvkH6XsNEy8DdPFhzCoE8vhNyvntintHqVWiKax95FeU\",\n \"7eVyBiN6sSu2YT9SkqsE3ruQxASysmuLXa9fjP46J5Hb\",\n \"3xf51899n2AdcfBX4xFmjQk6VW4YyyREM3b41FkoCXJp\",\n \"BUmt1iDvdrxQebGJTBNwa4tHn16zHz2N8dpZMGz9PBb9\",\n \"yHw7pAYMavrucDBMCjWKFkALyhUWwHbLoKAemZZhrmT\",\n \"9T1d1eAhFZDkc2tudHnR3syC2zSQGqL37vQdP4intXFt\",\n \"C2AxLmtsUEFGv3kFhd3H1H7E6vgZb3Cu8zkR5qxRP9zQ\",\n \"1NDoATJYDUuqr23XKdxdJcRMjX9fFwoP3nbu8hGMnex\",\n \"AqTGgN3puNURMYapqAEQ9Z89UH52kYLwhY5PwnJjD2ej\",\n \"FDcchSzKjuXqwCyWDZzznctMG6xmhhaKbeMBzAosHFNF\",\n \"3BTLKenq5yEYtm8izdEquCwf9x9Vs523bhrsog94LeQY\",\n \"7LvQ7QyEpVdwVu4HsWhCkdfPYCnyBzdbXBma1QY2yVpp\",\n \"4VA1UNCR4phV9eSCW41g1zX5to7oEbF9Dci8Vn3Unqis\",\n \"HV4FDe3VbHqWJmPPg2bHCRCa9ZEuepxF56MyUhtLiKUY\",\n \"32EWQsrCGTe71q6U2sJLRYxoyYfBkhgXMbxVXdXon39F\",\n \"DCWJC7mo5Bh2zsSZJxHjmVpNtTSmgJMe7Q5RxSjgEQjv\",\n \"L6ajVzQ2pq7XqRJ5A1Q1FzqZJjvJfmHarVQux25AaMY\",\n \"4WYrUz3qC8sn4GktZ9dwZ7RC5n6a9Xeo8mTcQwof1GJ1\",\n \"GnFifpHuA3JUtZPLP3DvhF2ANbScHNfAxUZpKvgWLNJ4\",\n \"8WeG9ibf5hhJvKcTrHRwzEjDSLeQeBvvFRET3EUmUiHb\",\n \"8vh7fvVjxDb6CE82obwuaXKmgWgA6gQsZSgtDPMkPdn2\",\n \"A86aHkh73cW3CKUMQX74Ro5PJPcoJC9aFwUxjE5JGtLq\",\n \"2twuLQr1WTP88dYMhPsBSbbKDGwuuSL5mkYid1giKPZn\",\n \"2uHSTcoz5J4YnfLWeeKJJHbjtTyYHyFLKwMCtTTNfhPk\",\n \"AHdzrEUVjRTgheeng9HLFLXcoX6J4epnu4BL6Sieo8Vd\",\n \"7e1qkr56j7vm19s7D1qff8Fbve5eXuLhjQ1uu7B5LCk\",\n \"7VuWAJTwsbPhmMoXdRy1iwmSTMFDsfvGtYJ4Xcj3oo58\",\n \"ETdeLVufso1SyuTYDzaKGapBETn8iUnk6NbeJFgF4rrg\",\n \"7Y99AMTtEym1KSxZiohwVapStgayAfBoTChmaTaKJ8ut\",\n \"4pckVBgj3zUuiXFZ87FEkHix1zpTPZA6TPCqU4WT2Ts7\",\n \"AG7G7d9GfAnN6N5kr7bfQaJ5maK7pKpLA6WNhBVAojki\",\n \"GHJQ5dE4Kbyxk7sLQDGF52jokDxgVVVGDHJHqo3QWam3\",\n \"7xEK7UFeVx8DnTNTomuePeprVZqJNY6r1y3T6kUGwZFw\",\n \"BfFewm3RBhtxiZ4tvQ2XsFcQzAakaKGEekn8TcEv8vsW\",\n \"9dve79rjup9pQ1S3qLLai6AqcrU6DjG3M9E39R1uJVxY\",\n \"DaUVzPZFm2baXwZr8455ZALGkUegc9bbRgA668C1uYux\",\n \"GCDVfVUzaFYR1YcES93ZMndUFouC5CLjqw1uNNVFe4w1\",\n \"ARGn8NHpwNfkX4EkLpkQzaJgVksGRXLpeTdNsrC2ELjf\",\n \"DXS7a1DaUpgmjxzTUyXLLcUhkiQsRf8266UzKUzi9kyw\",\n \"9bGiBn8jpfPGbYjXorm6ievjzoHy79ViZbRiUdxoLEHo\",\n \"FgzZB45h1Vd1Vrg5tu8id5MrfcG8dwqD2YKPHUTwaBCu\",\n \"7otrXL1teZw49Lws7Py9ihz9ozGtchpSMmRNJMwZ78PL\",\n \"ADhFFfb6iPfzqbPLVKAU19rPaVz57cUa8Q7aBKamfiX1\",\n \"NkKZE6t2haG8UbD2pYk7dgB6QxzXSdkD9ZMuARS8kUL\",\n \"GYYh1vMwL8sAiXdfBE4haSdLkEdfiqf9S4eL48faHpQD\",\n \"12cvLiPgWoj7f9Lxikg33WDVnHoTfFHWQjsR22omEuon\",\n \"D5dk31278C1UBkBvx3cMaKMuaYB6XTA3kiZDBBkELPsT\",\n \"9nwdvJEWp2GtykCjoqCFr2FMP5J5bYkRhZTQehUrAscC\",\n \"5rXnV1E22eFBWbQFsyKiDauUJ5qssN1VkSe1S2Zf6jtt\",\n \"GxzhsFXUfr2tMcj24Mh17y4nxYoFh2Le711Kyga8NcjA\",\n \"35kA1hVwPopjSd9j9mmJbHENF62mufihoN5oLzxAVxCs\",\n \"7KseKRYjgF7n8DsHuVBpkZpLQeYkLWLPzErzBUMG9mNi\",\n \"6eVTz55cUWxmdvneqLJa7hbf1WR9dQbuz8CFnESvZxNx\",\n \"CEWXrLyHdiuqhw2jGiB29vtGiUCRoF2XfhWtwc8sP9tZ\",\n \"3x5SJGHAUFeP339XgC7AqbksPwD9FMExRAW8riVZZ1wp\",\n \"Ck8GJdp3E1WadQRn83fPVkHj9wAHqefG7v2sYjwy9W5s\",\n \"9dcafdGKVpUjwrQnRQCxsqy2bVKVWhenFuxSJTRiaKdu\",\n \"BQkhASc9s23aSM31An3xkthJWSUCj678fAY5qJVU5S6W\",\n \"6p9pWGihwTjUWT2Lr9hWnZRtkKeBbae6SsW4f2EzPvvi\",\n \"4vgFpT25ULRkp8NVageh86R7qb6HnfUGBLCNtgDpsHuM\",\n \"5TQsEooHPDiQfuW6q4SPy2GB71nbxaVC9Ef4ZG5k8Yxi\",\n \"3vZ2U9WdQHccR94zi5DgxNjdfChornZ1mcLfabEBV3No\",\n \"DWfmxidn8Cg75VcenJ5wpDRNeAbdAJ7Vzz8VQvjPApfk\",\n \"FCCUdaLXWXoGF5pj1Xo42TFKJeLEqyMRRdxb1z7RNNFe\",\n \"GVnyfTYA9dAv5LndG2bAz5SCNzgCggWj9iRvNgR6tpuZ\",\n \"H7wKfSTPnCLkwozcJGk2zFKuyrHtTZNuX23bnVsktWHt\",\n \"DWMt9Ah2AyDXpk9ELTtjTa3bubWCZWKDZHRJYkudYMs6\",\n \"Aieevhr4qezvuDjtdsfdSqptqVKMUYzCEYV3o6DLYyKm\",\n \"ECRtHvmTSoQ8N7TQa2Nhdi8Yuh8GCBMRurGc8NZ3yUcc\",\n \"68rCNzJZGy6Lk3D8n8V1vFfryPfYEDUnVSu2ctcfQLyV\",\n \"6GXW9jJy9nKjSbDUSkbATfKJ3VodMgi6s2StvEMtfKcx\",\n \"BJmTgnr4pzySuFRrVMSa8iJ9D1aHSzcEC4avr1DHBEyv\",\n \"6qqrFY4AiLyiwXash5epcSP7PLXN84fSBaZ1TTbNbNQr\",\n \"HLFrtpuo6ayuCfPGSxbTAzVpyy1QTmVpg1VP1hdA5Qp7\",\n \"78AZe2223PknLYT9mn2VCJPAsdvuB6LzFAhgQeVoxddW\",\n \"6dgEiKsyAAuBiU2moUkKT882NAty6W83jEEWjqiKkm5w\",\n \"9tBrAjCpAqyBsYqvmN1a3bwb5q8LQM15ckYdFJ8NAkQ7\",\n \"62GPnbPQeB9UKqV1WbAYHFvcdX16khdCz3vbuEMX9LZJ\",\n \"6a6GScFDL9rm7SHjo37aubWTkpKDnii5eQWAMu5rk1RX\",\n \"EsSMzE8QkU9LXC7XWobhs6wRodUhTd9rt39T3r7eiAqm\",\n \"5v5R4HtepeM3K3yfNGFFfqvXG2PThcZeYhc99Tsb2ym6\",\n \"HEPDebYGmiUHk7483cKEDEkvcRe1yE2TXkBLtybAeTfj\",\n \"5Bs2Tu9vH7gsA6xj81JaGvNChLCGLu61nv6Z1Eemu6H1\",\n \"5zCHhSuxjp7ZHRyDnyiZidQcfyWFKhs63Z9geeAP1C8y\",\n \"2aeVvaEPN8cnyvbo2699xPUN9FeFjwvM5xYRytEUviqc\",\n \"9JqnMB5mt2xDHz6aHw2XYV16CRVSADKdHnKb48xFyc8c\",\n \"GaW1ut3JX5zk6pVFmhssFsAc8iVj8gYxnG1BW2YzfCeD\",\n \"A3XSDxHXebb9NSUZfVsKj2dxtevvKs2uCz8We9SW7uyB\",\n \"2WMZKriSQThviizsEdukBsFcCG3Wp88oAmZu8541DSq4\",\n \"G7QmpLJqD8nd5nZnToCJUwXhtKjVbfK6x37ZgHQVEcwU\",\n \"FK1QcL78KRHfR1RbwHJBn44CgscdKxYaVQ19aTohoCjZ\",\n \"Hzj4J9Y1HG9ZKKLGWRR3Zzq1Ww2co3CncqWwuUnCGpAj\",\n \"5XZtvRgeFMuhvjPez3vJfXdsdh9HX33MTx6JkJdS6GhR\",\n \"7afALsFoNvLw3FAnxNiXnwHMSjnTQcGZuvxcqfP9Punh\",\n \"CivdodGfUMYbmBozWxfhKLBUWMRhEZZH3fhKZiCVZ7Gm\",\n \"E6fhDaNDkpFze1BDe5S8Js7ZtjrBPMsaXoWf9ZEg9suG\",\n \"DbNNXLRa3vN7y9cXg2dJxEQAmPymF8PfTAGAob472PTm\",\n \"ArFZ2U1CAvK88MPr8RW4Ri5a92Gqv3dcXAm8RZhzvTDq\",\n \"4e1yurZARScEiCu61eEVYj9jmrkQUavgtbtFh57siQWK\",\n \"AZozDjtrKiGT2YgTs6VUxfmABcKt5rLsxRozPBaegCYF\",\n \"B8btF11gBCsjUT8oxnufA22Q1YwcJZcimE6EfV2MHTca\",\n \"GjSg8KFDVJtrmpRWaMXUVw8UZvdaZ3vw4xidNx7JyhMx\",\n \"GAog2XLTA1XpGcnjGQoGg5sDYNU1TN4wRdc4j9pQ7eHo\",\n \"H1Tz7SDsd95qjHaqhVyBCNALiLUx9HopXhrAXPxDuMxh\",\n \"Ekwi8hf2BbWSMCbAJ3sHCXjbcKgJJbFufx2F7WPEgyoU\",\n \"BzPMVYhWoUHnFYTovYHfwHNPAqxSfg1oFNuza2Afm3YU\",\n \"CUMUiRCxALqTd8fG6Xo1ruhfBppwfWYRC5jui4syniVE\",\n \"7g887KTZtguiRLEvfbxKLZcX8iTxVjHJh8FJ37h4gQ1Y\",\n \"DhmpYN98e44kvCg6KxpJVDg77HeLjcErYrUDoF3LoJB6\",\n \"2ogETxPVDcaRoBhJmkyQQ2QRcVhu7Mi4fyHHARLhKq26\",\n \"AnvTP6jwohGWmecMWAtXq36gQ4Wjtqwc8ShDakeNSH87\",\n \"6293cRXjbqHzmGUZFShaPkbMRg6qE8E9V1mrZq4K4Sox\",\n \"C4wpTFX8aABdSb6CJPJ6v3i4HcUog6bGPoSowWquk5Ar\",\n \"GCg9LCzvgiXcwXmisj399mVvqpV97nV3au128AuWuoWV\",\n \"5edH3uyWTDG6UNaFEUJrHm6cGcHN1FFQSvi1p6sVEDdJ\",\n \"DBZgn3AKJBC1C2vZpca2MwB1mPvVHaqZfEtkwWYVR3W7\",\n \"9DUh9PuErc9rrQRkPbTwmLYnTX2nup7t5zPcq85GKB7M\",\n \"GBRcqZw7e7E2S5zSBb7PRDi7bxeGznQeiqsyS8Wk7iLo\",\n \"8P2wEzBVUWWbMjejwtkqH2Py4vFs6pG89GUVf6VHkRkk\",\n \"59sKPPXDYK4n2tz6QjCvc9SxdMirnL4hbkEt7Rb129as\",\n \"9zNCDNgKFwZDqhtxYnJYw8EjyoVK7jbQesj1Rw1i7jsB\",\n \"57cEDFNFEqUzHRsHUdzQKst2WSRMwZtW1AwfANtP2DXa\",\n \"82pWGXwZQiB2QTuLsUkEKDx3SRRnWegtgKAtRPh8HWuM\",\n \"GZoUvGbvAcMRdTsWq9ZA5pyncAverbPmuYXPJWTT3f2G\",\n \"GJgpjSd43RGDFXafof5YzGJC6RbAWB2wFXRgKxDk1nyX\",\n \"FTZhspZTKYEC8gqjtWdKugoBMg3nFMZZBieYW7Vowu67\",\n \"6W59o78Z6HQYWTQwSRGJ2qDmYLPsNm9rN2obVw3sqRsX\",\n \"9MsBNxrT6bXTwSrCFnCEXmpo5LjRVsxjoyA7j92b7he1\",\n \"G5EVUkFzspVbqCNgTdQ8uHxNp2kN5wzN74RJ4ujKjXdg\",\n \"EaKBhNhLRRT5vw7BiARSBv2cwWJofczK7ZrDWwdWDCgQ\",\n \"4x9o9SqakFDeNFuJ6BJhUGQ3oSZBQ7Zx8EPiq4vLUPLb\",\n \"G96hPhHyiTZCJ7eWciUWykLRVh914oh66QxvCZ29upZU\",\n \"ECpairs42oGEx9DcPQMBWBph4QMDZr4DLmzjg2X4JCpG\",\n \"DUpNYx1FyRk5AemLpgwsvPAwRZdELMo1Ptpa2JnVLH4a\",\n \"oGB7K6NgLH1Be2R5AqS9bVS6DJv1WzvC42VVYFmF7F3\",\n \"3VugkPuZCKpvQ7zhsdxbC6cVNSVFgGDYU9BSjtw5gunZ\",\n \"HV1DbSg6ip7mfx52YhtoWDump65ZFNs6KqXJDkBijfub\",\n \"BVSCzQkGKoQgfkFpy4ndceNqR5kyaoa8uCvaFsMC2Mxu\",\n \"HM7tVTa99YZg1Dwf9K5QyfgRwTGyQ4TiT1qWG3USeX3q\",\n \"Fft2CKJshHvhJG9Ug1V4J77NX3dEC3edMpr3wsUQtbLM\",\n \"HCcpGVb7XoZgfxSoExvqXYMDAWs4dAPSG9aQbxeBPzQQ\",\n \"GpuFyQGjJDDMUnmorR4jxueD74WLtqE6dYGyDmjswiDv\",\n \"HdqL1V8p9cXcxmWuq3k3ov2n2okeiDnomCyTubejVWwM\",\n \"En44ttaG54LUeGB4uPCsv8ojQL3R8BckDSj23ASh5Nch\",\n \"GE1F2upXMnEwBkdXawQE5aQLX5MLQZizbHDxucgFhV59\",\n \"4Tu3ePxmzSDsrk6wsHAmGo5LxB2NnFfvmJX1KwuVnFE5\",\n \"EPXhRcLGR2p86BzYNtoTi9eZZd44RdtsvxcwBLwm4EZ1\",\n \"CEay1BipSCDhr3VtNsEeSAPwzcZKJt9a6bMabQiMVeL2\",\n \"AUFBXnj3jk8wfMvbFPVWUcpe8G8mqRtR8dkTDHH1T8Us\",\n \"CpN3oV3SaN78atzBvGUrBDpqkR57m1GgYVbKHu2RfJia\",\n \"5AtCpu2a9bCioeNYM5JFad5ZLC8fRbpZQdC6oCcrjYxV\",\n \"6FLowus9hvTZoVxjNHHA42dinGNAwBDSxfSLhwo5UHyT\",\n \"Tmc645EMnaTKBeyckZK4aLnC9YoeiRf8QGVRLyPRj9M\",\n \"2P6QHtxXNHC7vwj5DuGLQsKLg95LicsEn13b95V6ksqc\",\n \"HyorHzaeVcSMZd3GCaMP97rNY3xpkngcYUbFh7C1VxG3\",\n \"GfjHHnTHw8vogCffRqEwMNM5ZdFYmvKu1NK8Fni2b6M9\",\n \"HYzFqaVtGvpKCaNmSDFfnZzTdmrXbQZpshpGpTkPCQfx\",\n \"2FMr5cNUiGzahDxHmyc2xCFS5RBmywFS1ud17zNja4Ki\",\n \"kkoKJLvkBu5QKHizcgLrYmRcYduNrKSEMYNxc4xRRN8\",\n \"8GmRnJF3uHFpAYrVAKGbU8cLfXUkH7oFGfy6TrdrE8j1\",\n \"3E9G7PDdg2FwNcpESxS1Lw6cn3rxDSykvpVbGnMAjQC2\",\n \"5NMpf9vyY1MG1SA6s9yVRHkduzSxtAtyqhgJd1svyLCH\",\n \"DBmmMh8CLaTCwPk1rFxmFvkXczpHeAvWpKEZuqi5NUrZ\",\n \"HvW4JarmacVvDmCQ7w9AHt9uH7anCfCx2PAX9RtzffXy\",\n \"APxfoGuH3EdgEcNm4m47vpGreSuBYhm7AAyt5vHbSpDn\",\n \"5s99LrvcmNZegyLfGRK1AWps948MjJsLDNcvrHhhsiXs\",\n \"HYu5Sd3p6h13jKwdLp43xJrv9zAefEXyjzx712xZn1yc\",\n \"JBf7YkQUmc4SyLwDu5prczHuEi6mBHQPo6AAKAqg14iD\",\n \"92xsWZip17V8n8uRFQZbJ4W1UVtmDfiyMRu85irMaW4g\",\n \"93CKp5po7P55PfCuPNyUP2wd64xRy4XQycFU87spWLzC\",\n \"Ge6GAkH9pAqKPptg1DfEXvghK1mNGWu72MkA8wSZSg9w\",\n \"Eze1qfsx4BadR4K1AhpC2UquBnfxqhFjw7dBDebWReTK\",\n \"9qMDskVejcNsCZfmGiPt6vhyPN2iQ6LVfet3LhtCD6T3\",\n \"G1RQSsaDAVw8mCurJ4dR2aKTweU9LsDAsJzBQbU3RfCY\",\n \"7voCFokRADVGwF5NR9LJA4L3YkXdbXvBakx8CchRVZFG\",\n \"7wV2wDemerBtT1Hvy6i2mgDK8iCKWRsLrMmXjUmk1pWT\",\n \"6JKXWFnxVXiWQ626rbVRTnyh5N3bxKZXi9DYJcgTr6ix\",\n \"3qrYXBYHNyeEky8Hn3zUM94nT6pFRsLPgHPZ9BFdKevh\",\n \"8ne6o1MZRrw5tpZbt3mgrw78aBkfu5LDGENogahRtTVF\",\n \"8wbUQ2BnVhwsLBpA6rJ7xebJYBJwJ4MQQ9TvwCpFHydR\",\n \"CcLbEe7CM7HvM6xdyUXt13bFDS8JLCNkPwLHh8Rmzmqh\",\n \"4nuzEZnEfmbq9JFonpnFoQSrUoeNZstrxE4tiMtA8PtH\",\n \"DmmjkvSucwRqe1JCVedykjW8w7wbWjs8YQLdnw3eFbMp\",\n \"4sgyB35RiSxTaZ5re18KdzGLbbDswYWfSuRhLpkLe5Aw\",\n \"BgYYY81vz3NT2cPq5DTANyftvZL5p9i3PEU1hV5kMDzz\",\n \"AEt48CoKqKvctk7LXpCysL6w4auwnoqXK5gLC6oEzk3T\",\n \"4MYamnNrQRXb99k1SdMHBbzJda8kE77uzovDSE5QueE4\",\n \"msqLH3a3vsvG9hAUiQ8W1SEGVYDZ3AWSMjhW2Vw9Q8h\",\n \"G8UsdU1UXD533k6bHshmT6hHPp5mcyuiKVvCSbmgyoZE\",\n \"4x4uwJncE4SWdZuGjTuhPLKaLLtfjeZDdN9xVp5V8ZAt\",\n \"9vLseyU1RoKYwcyubNdm1qHzmSjETLgL8MxH25W3dSkx\",\n \"Hh9oHkZPu3ZcBU7HTYL46E3B3BCoU1NyZpJX3pHEFHby\",\n \"CbU5PFYJaxLrvbcNYQnPa5yqq96wzr4nYt5pfxjD3AU8\",\n \"6xtn6nhPxSBHj1LLD3VReFCDRjSuUfQ8EkQdp3RGHSFR\",\n \"bfj2fDGAaigsSnXRCd2R3eAGx9CYpVEKMfCTq38cSue\",\n \"6sDe3cbHpnwjyij49ytTF6FZWr8cVEriTu2QKpmMj5ea\",\n \"EbaLSA3u9BDMHGBZsXZb8YsC3uUvs3VdsSFgCm9iRSX7\",\n \"AzpJD2HNBDmrw3BWsfAt3jbPCdBAkhmk2j9vwWJP3YeE\",\n \"DfuewA4xc6zVVNHJVFxZRjEAJ7LZrKrou64HdXDm89Tw\",\n \"41cJ3dzn3dyLu8hB8pjokb5cLZvtTBTzu7tUg1N7LUTB\",\n \"HEEgCjrowtQFNxbRLkTBv89eRSy1FN7L4rStMYGkZtrZ\",\n \"Fjr9Ltizs4AfzKV481iqmAfrSg9ipaNJZKZnH5DQnutB\",\n \"5gManZzmG6cPM2zRLEFzzUfjFteNL5kznkvDtZd4weBD\",\n \"HTUPkJAVv2sPFDo9ZJWxDybeLbgGnY8jSyktGjum14qP\",\n \"4WwepMihoB7YzqN24dwMwMM6pUUFHFGSr3DDoMccRzsp\",\n \"4MpUFcrWnu6tXe2hveG7J6aLFuuVnH9gA8zdBEUyRfX4\",\n \"9pErRHcMNwCJushMUcf9BKXafiZfcmWoScYJHUh9hHT\",\n \"Ax5YuxpCHS1CQEpG9eXqcTjTtis1TWXN4v2DcHm4yS1Q\",\n \"7Qy7gdV3upYKKiZvY83z26t4V2BvHbMCwdQjKRCxZX8K\",\n \"EV5iDjJRd4dpnVc4PqoS3wuLoDhxKKMY76gRT55xacTN\",\n \"2z8PpmRtWu2BE4gdD58JVaoCf6oDhzyBJbegpmGCmYFS\",\n \"BTYXD36w59a233PXvuwRv51QXX5wp2SiyxLwKJBxpKtC\",\n \"8j9Jx5FMzMJmw6jybzMg7nupuFWPSJXqBVvvQjGyfiVu\",\n \"3CnpRmZc2LUrfjoWbQiciEWmdMUEw742c6dp2RfPxhLN\",\n \"CSnhdnLn3VQs5KCyL9UnBHJKwQqvS9bkVaW8npPGZJnt\",\n \"2swA1oSeeGDAvBCS9mS6XWUoRM2Vkhg2YofyVGMxjgkN\",\n \"EXQCsfe6siRJwhWpuVp3yFTvzbaXK5a6qLT8pvrp5cn8\",\n \"58FyttUBCEgWx35HiJF6U7dLy8LXxRjcZaTctxS6GJbd\",\n \"G9Ud6GUtNWQjm4rag8jHaLugZevP2A2Jr12VCtJarjhC\",\n \"3pfXLMUHGVQzV5czvvU4hpN1eRMSVxX5tXTz7sNUNoQE\",\n \"ZW9Wr51xnEbTDxaa2vyopiKBz9SVGCapSAUntwyRKWb\",\n \"5kuSQryj9jHvX4iEggQW1k5J5qEFA2g5YZwX94WfyRV2\",\n \"7XZzpCj1tg9PLGgdH7m3EVPPXCXwkTnzhpnxzTWm5haJ\",\n \"7Zmuu5K9nyZU3fZGJA1qZ1yTXV5dSAjNkS5wMBrBWMo5\",\n \"HrgwMvne6cKVqsAw9qcp2dPycL744oA8PzNYPaGVQ4rj\",\n \"6vWXFQB3rGHN2BJftRkMqFt8ZYwjkGjkBzPet7W3spBT\",\n \"6xxPjF29xUJPVBr3TVxYpnQ4nap42Dda4dxhi8RTy1aB\",\n \"5aKKAWYdtkfjMePsjdTfeWWGKAxfSTsbgLbZwjSFQnht\",\n \"JFzia1jYfxQoNbmEMgP3YoSz532XSvhqNsV4uJq8ZvG\",\n \"E7d1JR34tdjBsvvuEam7g3ibjHrpFSFiLEASu4XMwsnt\",\n \"pRpcNDMa69d4BgqWr28ShDLrw5QZMJUaeXS1pSuRwWZ\",\n \"Df4vtzBs1ugDKLoQuWTexn2nNf8fzeuPtvs84csfH88r\",\n \"354HDGRYJHFGBmVYfhiPPKM1YnpmakLyZ8YnCwXQonUp\",\n \"A8Uso8JQLxuPE6DyqefrLEpm8nLJYxVE7nQNmMfPPCYr\",\n \"F6UKFjDebqmpTbHa7NHGyuuSPet2UAmT5JMppZd9US4w\",\n \"9iUaQRHY2ZC2fM8Y9xigbEZBWtLkfyokpsMnn4iqcmNT\",\n \"DGPANGWztp1oRSWgnbpZF487QwAJk6Ef3cGqbx76fyDf\",\n \"BWDZJXLodDgEFTXo7xH61nbZFqSouPh2ShWLAt1hP2fD\",\n \"4APmsHtR8FRomRBJZXXTTmBDgh5JP5Jjy7e8YspKbdYd\",\n \"Ch1PpDuAQmUzNfdBr7trB9C3brymXs5GZD81SgWq1wob\",\n \"FDnCXpNfkxTZciihgD5JXh1T1K2PS59DtZ8onKomQH1T\",\n \"Ho65NdzXLa3xTuHjQhXTRdgBVMVLU6M6w9rxsmznMfwD\",\n \"DkGgnx5oKt9Gy5yWR1uJsYPBttGVuaHYNzHbF3iXMw5H\",\n \"8kMj1vKsnSwWa1eU6qkkAnVQB4hCrKcMEcKh6ZgYe3sS\",\n \"BqLRJf8Eq24UAS93Bmuyfzb4iV5DKccMb3d5mP9UM93\",\n \"GBxKpEJF97YnMcLHEM3YnSy12PAJ3UjuyAUvifbbzLVo\",\n \"69qgLfAJgpYevhxn2UYNduMz4nig3jwuWawfXLoSfXnY\",\n \"Fibvz3ZMrPmbjt2rWcfwxDAwoHWwATwLMYEoYC2i3P8X\",\n \"x1CJuSbwVmviZVwKDBtgUFTiRvxdj6XMvxdfS2V3we9\",\n \"6Hxox6rotnui3GD62uoQbh7aQDhVeFxspdcfhkJ5jWZU\",\n \"FEK8H79txdYTMF6X8UNMMooBXh73Q7wKiTZAwmJrBevX\",\n \"EkgEa94AbWQtc6KsTbBLtyXGLcctxEE1tVvdkhTZGwZ1\",\n \"7WoeQxzrVztvhaUDA8Zw8Wpmdkht5UCof1o5mdMGSSsX\",\n \"DQs9rnT7MhekBrwHjgAwnsiXjfh12HyVAQERCbhPNcvP\",\n\n // Wave 2 Mint Addresses\n \"G5c4xXkzVLKCgpdMSNR2KLeyyL32v5JhKtVFintcpd6x\",\n \"Gbv8j2UAJdf22jQD8hX2NrFpiBAgoRvngF8JixEssCX4\",\n \"Czf7ZRzpfv1XaZVXmtt9titUNft3b6V2gKz3Gu9ECYD\",\n \"B5bYzQmzgraCEGEcq8AW1xMj3XRxGeAJUNZGXNLUeQUr\",\n \"8QZwT7ApoRGv4RmQojxnyHv975ftiyDY3NgrJQTE76CU\",\n \"DBQUckf6CA495q1UULspJxHMP9YvExbSWvB2vjim75cf\",\n \"Dv41QjkmD3wjDQDbCQJuov16bxBywHHguv76bX4zGaqX\",\n \"DD9LwGfVLaYQM7vubzjm4uuNdUkhPMaUR7qvsekpcf2H\",\n \"FTCoRHsogiEzZzstJHPssAwSVdCJXsodkmoNXMjqPDun\",\n \"BtAMtzHg9MNmUxobhtKKeTyAWpY3djo2dahXQ83RGcok\",\n \"AfHUHnHGmJsyqypgLbcHNyPLY2Z1S3vHuSCxFeVBw1ph\",\n \"C4jkmqsuCUdDFFH67Z6c2GADG4BYNyaiKHdaVhV5oxhb\",\n \"C3YdPX81SuHohGwrhjiNzcBh7vyrjoHsrAF9HirR3cqx\",\n \"fHfF6AAvThfLdcZqXV65BmVo5NuXk656BR5XGhPLhaA\",\n \"GeBfjwGCb2zARF4afiSVhodpBMmaXy4BzkFsfGEA5xCh\",\n \"3ABgkSwFcm681UEqtgfEii6VgWPN5DtbaKfeW4Rcbixv\",\n \"ABiRVSBA35bYUmcBiyhhqXSQvhS5KwRHzM6EMHPt1toT\",\n \"4RHtQL8h1ATmbfKFbGAvagbsXbfZMXdN7UnhQ8zGUWJF\",\n \"EamWDSre6mLKBSqXTogqbHR2ALkrro1iwWeTVYndSxf6\",\n \"4FtmrNq3wF3tXkBNehtzohMmWF22aYkrrahdAF7rBx9m\",\n \"5MxBJW5mRJJ2rwPAtZzkKYcdCjWKwynETsG3z7KdhzKw\",\n \"5Si3jGrVWmM26GZUAnS6GPWVSaVAsu5QXfy6oPnkrQBE\",\n \"533MPuzKB3Yd32VXvdJLD5yRT22uj4pyjMjTxu2utZCd\",\n \"2KnAyEjXRhZ17SMsZRBDqA7h1WPm98o6xhoXXueoo3fT\",\n \"5uC8BQECWoRs5svSvoyB81pp3as2T1ebGTXw46KcsUgD\",\n \"C52nRiAJcppJ7ui3mVgZcmdsNAwd5P9m83s4TzMuAELz\",\n \"Gr624dXFA9phKCu8z5quhf51QBcGyLcDFFcLHi3XHhg7\",\n \"3SjXbx4fSDueYjedD1yz3ozcSoa36prt2Ghp8YzkNneY\",\n \"8ZjauZ97cixS24rYJnFAHgCXTEFTfQz7DpTgUzAEzxVz\",\n \"GHmPVCq8qp859vSYufRkJQBQS8kCjdJ4np7qjwnwoDGj\",\n \"7uKtJCau2xXHgnjANcLmegmSFPSgAbHDXkkHCqvmdGGE\",\n \"9xmfky6Qt11gEYRtVDBExPMmCvFWjro8rbKU6EGgTAge\",\n \"D7JJpU8sJ42r5GiK846qee6xcnA5UCoZpy681idATjot\",\n \"7iybWknEawzonN533M84giYNXwgeCof5w2JMR2L4LXTB\",\n \"FEBA5XmNprCk8JDXiEcZ6QL3UHHqKTvcyPW9BiuCzr6L\",\n \"99mfte8dX6GBnnqA5teSHFXa46AeGWJfaLm8onSWSaV7\",\n \"9moTqtUe7qns3tkX7sYwmAhdzsUpdsDFJ7DAdrNay2cx\",\n \"5MmkXaSP3stZwDRnSkCXFYCcNnvcZiaEmSpMGTCXmDvn\",\n \"9nDeL99zWm9oGJojGy6EJs3ZKAwnEZvjPZgtc6tb6ffp\",\n \"cGstDid9zT7tz8UABbfcneip3QAGpBpKVqAqKsUuPjZ\",\n \"8BwWnrkET6uGfiRcDYmVGYBxmW8eeoBWZPb8Gp4U2oyV\",\n \"EZv8QZUddVpKga9uRBoCm7GX9FCe7pqeACqNJVbJWtQJ\",\n \"3MkAGtbfucecQDWr13W4X3hoRZyqniZssUA8B17k959b\",\n \"4fphs4WbD9myh49C152vNNiApXwkQiBvuk8JScq2xriK\",\n \"BKtM7dbyoEi6Ajc5HauQLpsLvm23DuUQNzHHvWvzf51g\",\n \"AKFEyCfy7eXNeabc7qzggd5R219kMbQbXkJ8y5SsEBtX\",\n \"6hRjs8h4eZrvuvEL9wvjJ2dFZZQzvAkVWvEkKt4S6pED\",\n \"7PsdCaYPErW3SBhHqoV7nJoUG5Qwrppq38Kn6rCqjtiD\",\n \"Dyp22v5LBcnxYzLBikxiFK2X4xrtuBuFmzgLLWZBxbfn\",\n \"4QSuXmAGUjwi9MGX6z2sa79RvuZkuYH5h3ngwbs3ugT4\",\n \"8e36GcDSoRgohM3Fzpi5J5Jd81oUMs1FxC5qtzxuBC88\",\n \"D6BZqAhWisG7fGwXMzY18iRfxBeAysKQZ1LpeBmpAKh9\",\n \"EF2oXLDCx47aai6TWPuiegoksXGmEpg9YbaNpiy1p5Sv\",\n \"CfR1R4q7J3tTYoaw998T1rqzN7G3fqxZBBFDmWhrR77X\",\n \"BBXSqbuSxYX2MVjFLWaTq8fnXRhbcayD78N8WQjmuY2T\",\n \"36Suiipb9vRfNs5jhaeFuxMAtfXLuTthqoid2bW6Pzgz\",\n \"5Q4W2Lxsrz88nGrwtLwcPcNxtZ2RGJ5UAa4usm6WUrY2\",\n \"HgbDurW5sJQGGgzGj9W9ytyPaMjzW6fjLuSKX1KQVy2Z\",\n \"Afe4uWPKo5GtcKReKJGawjwv17PWgbrTeXB5rcZwZS3o\",\n \"5SjfDbezm3Vf199vXr2qmvt51M9uTjtNYuYBPuH1kmyf\",\n \"3mKMKW3x9hNGyWcfFfGANfmwo6RkKDLHvh6s7BvnBosn\",\n \"jxNM4s16YbcjGLgAsmEEBQaC1LLrixjGdDqsNftpDGo\",\n \"Bm33VTyxwsSVTf1thbbCVrgdAtFARVQUfN2kkmEdVxAZ\",\n \"CBSJU6tF2Ywm5tKqJqXeq5ZKHujiv1uwaLytxQfFTZSy\",\n \"7QbCWq9RoJK3i8BUKtDTPe8dK9AJLkLaDeRFiPQb88aC\",\n \"9h2N2rNjMFZ77xuYgT8VpXvnexHz6FVXcdF6SVoei8rP\",\n \"7AHa2CNkbF13tPtqdqbFHAhvgsgKHijGveVDmJZL9dr6\",\n \"2cwQ5Wztnu4rH8sAhq6PhdDhVz8PufcvshvRCmC2JB7X\",\n \"FVDu8za9vBBo9jHdwViHTukMzCyHndEJ3FJLv2SEimgM\",\n \"ivAFQeqW275mLkjnNM6yC7CLobvuh7ioYgCsfTbDpXp\",\n \"GBKJJuJsu9tnaAeNNeC6bM7YXb7UQN3MAB4dtji2kFmt\",\n \"Aoc1kECh3CX81bLRJmkTZpTZNL56XcPDTrfdqux6ppK1\",\n \"E4sRhYMKqnx72uL944misKDatYP3KfD94mzyyEA1ate4\",\n \"EG2XEreEFo4r7YfmjexLv2SdeWgPSXbv4U4P4sXLEh6c\",\n \"9KzeeReswVsd9beUSR6RP84pRLEkQ8SQZZ4ZpQtFWnKP\",\n \"FMarPjbm32WeGWgEZZYvwVojQMPDkwyKUbXaCrXGhFRx\",\n \"EZQRdWgcKHnxJ9qFtn8EL7EbefE8MfVRh8Xe23iDGVHU\",\n \"21S4cDT8GH2CqNDiMyvX9Zxj7PDK3nWWtpxD4L2qBHzC\",\n \"3rs2tAEkn5LkVwXQtVkAnTmgscxWntAT3Cr6FkQaG2sf\",\n \"6UHRQ2Ndk5MVzKmDGdWTf4JAeVfZyYnroYTj2mkDfsSn\",\n \"D2U9owRUN1GrEkzC9zjfrttzfjkrv3QvMzzb4dKMpCSU\",\n \"6z3VhZ92qoGdMTLwaCTvy2c3GJGqozZPiC983xHTh1RN\",\n \"25os3GibgLnrG3F1QDatHGLZUpVaMgGyY9k3F3KEGtbf\",\n \"4fRdaMtXaWtdcdyY9af8AnFSHoRXZRsu91NPsnjcmnMX\",\n \"2YHdWswx27UzJQrgUypmzU57uTcx6yZtdruW4Eiy6cBV\",\n \"C7cJerUW993EYdm83HTMCSRnTr2TFRCTxrCX6zQHQYBW\",\n \"2Ranj45K3hS5XtdCW52mJ6mTUB8GHH3eFypY8sCqsMNh\",\n \"4Eb8oMB2nRAawMjx8E6jimnx2wjRttHTCPaBde9C82HB\",\n \"BDCVHy7s8csnt52aXGTyUoZyRfb7aY5dMBzCtFEjGw98\",\n \"4YJWR5k37MymJWxTPY5JR9sh1ZJpQWtqRxUqYFhMS5kU\",\n \"GcAsN594X7HyUHtFHJqjZr5TLwaKbycBhkZ71Txnh9SY\",\n \"9aNDvzqbuVA5K2aDk1mNApf7MuRsQrAum8KX8pW8BF5C\",\n \"5eAe4SCyKyPYjXb51i44zxASxfPK9YbAzZz7DxWoRSHi\",\n \"2cyBhcezJCfWpJnXAyC3kfTmYWtvTyGWwfLpxtnspte4\",\n \"3KKJ8BgqrB3VFPML5yvvSCkFEsaiUNjVvFb7F5ELAbpL\",\n \"8teoZCaXPtsWzt2x6NtGmuXd9cEbU1uLGQQNFKbwmCCh\",\n \"EGDbjiCAoaemYrp7tjxK82UdtSYhx19vpFTxHQ7gvyQ6\",\n \"2RoC7ynmSURhBDVJjryL5nJgNiM2JCPJ3uZoPZ433Ly3\",\n \"AA6dKXwtev6MksNo74jd2Wr3Skge8YxQTn2VjdW97tVg\",\n \"4Ksste3VMG6ZSq8ijB8QVYxUnRQFXjvrZNi7UgdjykgB\",\n \"5V5RyMCSDdvpGxbukP7whghWR5CsScFDrLQzUHDi2bW5\",\n \"DbUfdT2PJ5T6Y1QwgTaqEiSQniFQyyvJNMxXPuFNMkXA\",\n \"6fHCV7KCBXSgQiFAX1sfDPPmCCtQMJTDgQcSYNqmkYNW\",\n \"GwELYeVN6fF1jTkBEvLGTfvQtTB1RtFtPsAYWddA4RVU\",\n \"8CBcc8Ez6CWVTaH8ozhpqQPb7b1W2rVdM2Tcgj1GhMYu\",\n \"Cy44hB9HSN48RkBcGMuGKxKqDVKUkgBhdxwhDybymyUS\",\n \"4bGuJm3WVPBEqyb8G8Y48xW5x1yCfVg7zx9T9R25RpZ1\",\n \"J4mhv3pYTnToVSZ18nHWoBui7AACrwHq93ot4ZfKZpVx\",\n \"7ojVymauG295ev89y1447bohk5tEd9wytvZxZnsZ9rND\",\n \"DJWcpeXFqsPgR1HPnw2eQcBYsbXFhcavZRwkk9eZZxkq\",\n \"81WUz4f4UsHCjWAnm9VxLjsArvfr5iWL45JeqKDd9Dgn\",\n \"B7xswyQHkh2anXmBkkBtkKqXWUbGVAdkMe8HB3zU1YMd\",\n \"DBrRFU3b7Rsw4w5Nb4DccUPTUjW2wCY5nzBoUCHkJrHs\",\n \"AZ9HY4CQg3zVKBVFCvuvd9xEPhu1Atm872Gs4gEAagYR\",\n \"4C4eRMyeaxe5vXdXJesMzhYeSMSMXV7qZVnqJK2RSNC6\",\n \"DiNoHXH1TUFN9PFTq6wLeFeXsPuzGvuXovdzCpwZuo5j\",\n \"CuHtbdA1aC3vhLNRGqsLfw61y4gZnHNo9rqKMcMbitfJ\",\n \"8ne3qr8yLPU2PKeifwhn9K28HVKH1f3uGEGGxsHU3BaZ\",\n \"CeJq1MEiwWdwPXap7ZNXgaZ95Yn3WX6pR67WvG8GfpAD\",\n \"6GQ4p3PsQgEUjnKTCyA8cfL7wtVub1yCnADBnXJV3vEt\",\n \"6kUX5SWu5TaZuqZw5pdxZaebygD7r7uLbFTVrvHHWWUo\",\n \"6it8LmibQ65uRhmLE5xQnhCe9oCgPnqEMWfodKxirqHm\",\n \"HV22AeefhhPynRNmUATauFPCdcLeD3E9H6xpFEWiapMZ\",\n \"7nbhoATt6dTveQzEW65KYPZSuY1WW78fKm9jvGhr3gpr\",\n \"CowMs8wwFufEYFrFeUwxCxcMwR7NMaBtD3anicyRmF4d\",\n \"HUGz8DYTVyKuH9MxtrWbBeGbzzVcLGeE4FKx4C9knKNQ\",\n \"EvWj3pY5PwvZbqsFs3hcJJWpyZ1uwEs9kbgBpbu64pFp\",\n \"5neTmDeTU9hUP74686gZ5yDNw5p4SEpEgHhW7TJwbF42\",\n \"FryDhis3tSQL6UcXQS7dPzEUTLj1ej1gMNrLov1Yt5F\",\n \"2tzpPBQ1btRVPmkPKRQKxTfEEpsfsLV1M44rCo3KubCP\",\n \"DgdcfExAynfq2mn2M3bDP1btoPiM5CEwKj8L8QmyLwWV\",\n \"EGfMBrmywkNT9Qj8WwSZzxXi38TR8ixCm4taUpWWvizn\",\n \"8wnrggSAtYZij2NM7koxYreKGjwf4Qm2A7L1oDgSbKcF\",\n \"Ff6uBCN4o8ahVUSC6SsNd68FqYq5r58V1pQD6oayN11V\",\n \"Fp22UFcbLEocZiJ7K5yyyesFhuBqmVnB3vZZas8upyfn\",\n \"FuACN7KHwPoGxPbgifKijGEptiSAJQv1LiAXYqFbHb4o\",\n \"DuUJrvLyT4VeW3Goo8wryqcjPSYz28YGBpBjPaJLTxh\",\n \"EZk5UurUnt18jsNo3LizCFHVfEHdBP7EySgjZaPGX5kL\",\n \"GJPpV1oUa3fcXqCbWrhEarsWiiPTRLvsVQCwKxVbwo23\",\n \"J2W5U5UwVFtYKcoVMDFSvqyAwcboKpndpey6oAi8KuPh\",\n \"5EJE5bULYynjRNqp1YZaggEAkqbBLg8oV7aYgDtP6yX3\",\n \"Av9aYPmH1HWUGZGzecuGLvb4LiS41zFgPBFZAUx6iJr3\",\n \"Hy92tGUHPwChtx5jpUDnhT7UHrBd2z4LqCwyAuGwM4aE\",\n \"3bP9ZLBScuskGfnKbeYvYyJZAYU8pwiWz1DCGSAEDrPZ\",\n \"2Q7BCdkP4Vekr4iTZAhkQdwELN7AinFhxh24FUeo3YS9\",\n \"9pnZg7ppxWuwUFQnuKemxzBQqb5CWrcoi3HhFUnG8o53\",\n \"F4Na4wHe9Rj4SRTNebk8KvpoRuKzKofeMjLFNZxMWdzT\",\n \"GNVoHriF7CV9Xq5cSrNH8uBm1rqQRmZKU4PJZsTLM2Qf\",\n \"3EgjULZ17pNAUPkFxKsan3MmAKyriSyEduWsxM1NgM8x\",\n \"8fUJntn7UpeoFiT2e4WJUEHSt3trHM85wATiL7Ynw3Kg\",\n \"2fQ4zZC3EuAGaqQ3jxADFwCvE2cu8qJ1zgU9knY7SUrT\",\n \"Dz836BemQyHSaVCjHjBYkpJVa7MAXAJ4rPUcHYW38nTG\",\n \"DvPJsjvbMfonS29Jdr6kmkyxj5p7AVVLQ9H3YBHbMfu\",\n \"3N8vJZoHuSdN7SrjWCS8ARJcbzuWvCuxX9Yp5zPyp7fR\",\n \"86aG8zDRmf8J2p6MqLYrWqcxvAGsL1Ua6jeM4J73DDfn\",\n \"Hj1zvyzy8MkFDW33myVgjySdzDgg2nM3P8q65GrAoDU2\",\n \"CCT1zPNLuyvqe6zkapstGy94SCaWBrpGPjBwzqhqeyLf\",\n \"HjqQWEEnGRLL4ds47sJnZ2vCnC3eCqMnmFv2unPjJx5m\",\n \"Df8FmQTQsUytrFAxPJCNJ8JqYiUokykfzNEhwRBMRtf5\",\n \"Gar6VVBiGpkEa88BibZKLBDxXKu9eas3KfeDATz6pNT1\",\n \"5xGaDDDfF2qRJ8X1HQSv1GAtvLCrtFGAAdfUZChAxqhP\",\n \"3aM2dFo5puVPE2YHfRYPEhDs6nv9Buc6aKevbkW9jefp\",\n \"6NkL2j1QPGJQfbXqGC5kaAiGgW3REzqY65f6wz85mW9D\",\n \"3WGhnsjNCk1zUPaJbn9hjjXNARmJ3ZWxJ5gZGSJJ54d1\",\n \"FtwAWhaevUVvkZtAa3XyFfkLnEghcrUTqpVxtxVeCMt2\",\n \"FPzH7Zvdes2APJJAWt1FkwUwX1niSmZW6ecwZj5ozkhg\",\n \"6d8Xf7JndJqUxczPWJYVKN55MMb2WfwwQrdFg38qKKSH\",\n \"7N4ERdWcTEfjgSTpNJnoSy7t5WqjwdH5QpfWxHmbCSVZ\",\n \"FhKvQKUhN7tUcoefjCns9FBLDFDq4ugeP1WiEPMzu7CT\",\n \"5gn3dXeLy4U1qC5Cxv8XSScNqd86SUqtfA9j14s2v1co\",\n \"3k97bYgeGyjNvwCtFqmQTxUmgiKZPnVwDm5V7raUyPse\",\n \"27nTiDTnpqxbgyJjsQhP6X1njZLgdC7vuvoMuf2y3nFn\",\n \"6uTedaHXbL5tuAjxivrCyDSKTQ1EsfGeVTGf4CSVryiw\",\n \"CgoMKsro4yWYbMTK6MKuVCtjmiRrBHMargirL6uab8FH\",\n \"89CHHdFLFdGvmVSAQx7Rt147v4nskytU1TNLFksPDXCU\",\n \"DzdnCrHWqyyH7zC53F41jA1uwDC8gwEUALgxotpytaMY\",\n \"8Kn1366FZJ4B11dd7VsVQGuuDBcDDm5hruCCvEuAV5jk\",\n \"HKPf9gqnUNJjUyvoPcU8ABinDzEkDvjN56uGHDcgy94G\",\n \"7dFDcDnJ99yMKD3n17PyDTJ9nCNGfo4TgdtufBXFj2Fa\",\n \"EVJhiRVDZmiyT5kap35gFWJWH857GJ3Q42BAT2d9umoc\",\n \"3iuoaGaesSxd6L6tanc6Zf2pThwGASmXAmnH5dgyDHoB\",\n \"GhSCA5idc5cayWxApcGfTXju99xpRAth2iqSY9QM3Tdg\",\n \"7vQK95xGzAaoRwqnEPaT8FkEikzQ39zi2SDsXzezuwsq\",\n \"D3ZoSJCjsoxGP51e7Daed9sVrWN3Dpsk4nPUdbGnVNS8\",\n \"DyQuCqQcN8EHAFHVqMNup3uCebBv5jK7hYhp7nXNRpuN\",\n \"E949i4iKNeP3MzS2XQrX4EqQdRHPJmr1AEyA5oY8DFY3\",\n \"EuDC9gVQSHFmn6cvs9Gp6pY5MeBtW6N3qvgqSofbhHYs\",\n \"EHo7H5TbHM25YZPNgDCAiWjABQxxzpdZasee77Nxva1Y\",\n \"AaXdHT21tuj5JhSdWgrTjJxXHch5CkeMxiw8Q59i5gpi\",\n \"GFPekDbEethEwxeXvEbsi82UcufNkj2JcDGqyaB2iWPy\",\n \"EnZR8Gfo9xsVDDbiouzPReMF1m8gQG5yEz6cFZDaNJmL\",\n \"AcbaqWEnfg6sy834tdj6AQqmnJvb7pd5Q8YjPDd4bfaG\",\n \"GX3Xz4MfgaXFNvKXQQbide4Ja2S8aWdqNWYGrjcCRf84\",\n \"HtD3HAQtJUCMHPZ5KqNBjoi2f8Zs54J2tm6guGcdXKDL\",\n \"D8ZCXLpvZM32yqzrAjCRSot9yVrvYiv8pUJX2Tmgf28C\",\n \"Gc7xQFgYyaufg7JsHcCBiChnysaohMwUnZRQ4McBC2Xp\",\n \"D1DKvXvbfL4hjvvNiexYmj8WdgXyBUZ1HSCndCn5Y6f7\",\n \"2Xxej1Hd5CjXM9TPPPAeQW49hqMXYBtzZgv2UQvzhCpy\",\n \"2ehjgyEs8SttPhdPzZjst2CsGYYeM4vETC4y13fxcsta\",\n \"Gud86mhwhBNSW8asAxABoWc5kDaztWARTuMjgkTWi4bb\",\n \"F2Rdq9KTtwP2MKHbDKToHgD6jhLkQUhCwcD9uhJDQYR\",\n \"DD3ujSfPVimn1Fv6b5VRvL4iEwJX92y9XhEF9ufKaVLC\",\n \"EiXzPmwuG4H5Naacr8gXVTFdHw2NPSQZkBuzK9oVzSVg\",\n \"DdeFvjLmCRSPahYjqv35Rx9z2amG4GSzwq3abL7rHZG1\",\n \"GtMZYkEMCDRzDRtj8DQUMMfV2LMyEMdNxWxPqw9Hf9KL\",\n \"GkUPiSUx1ehRhBDrujAukHU6gKhJqFW8v9wWCRNiwTmi\",\n \"Hv42AtVjTMeCGbaDwF8itpGuyBU16zWKtjJNTg9Cq1nh\",\n \"4U7YaYVreE5Zm6yJXmSyhWPS9iLgssQu69vRaMn1aMnQ\",\n \"9z7H7tdtBhV2r6He9ES5sUejbbStB7SMnBXuvR5reLBH\",\n \"CyitEkrbvwEQZxajshqYrf5eWZfGeoospTdfnRUoBKGf\",\n \"CALnXmMSTLARH1Dm9xuNZeKAww9CuB3fTYcoXuUtV9Py\",\n \"615EmPZpe13qpMipGdtdJyXshB9GuZjFXYiu3vhgnkXU\",\n \"3tqn2GHGDB43piqJfSiNtSHiCz8odCBE8mjVvMqvKBj1\",\n \"9epdEug67Dx49xfhtGFJm4hiEPNwV6HDhPivJURRNXH2\",\n \"8cghbntNJkiXCfBipfUBospXFGGnnYyyEooLgFhHeeZ6\",\n \"C4ucKs5Sqgy2UhU5UUuunuEFyBMtXCc9r6fqxCHZq44f\",\n \"ApNznAVSu68jCsavzzGAu8bfaJfDC5fLGS1PmpiM4iYT\",\n \"E92Cr32ikbx8qNHNVJPzAyLF61XpnCbSsWQ6C8Sw9iPN\",\n \"C1cFKMJYR7tUsba4WQdKXVA8XXXNJX3bfuTJ32cbf6Qn\",\n \"5PX2ErApiGV1F7qwWSgcpmz3ffpFQZDV5FXbcYtqqkuS\",\n \"DZFxVHVfHuN7BFvfcPaoyympoX8tn6SHmKZJg6ydXgfc\",\n \"GbJbtJzNyypdnspdrA5z3JoPoQyvH8TCZNhB6ksZB7Dq\",\n \"3srKjwn1Sm8jwNxjB4yuHDzgFKNQ21AGkwkSsUYYefe5\",\n \"GRNGZyw1ygYjz5mc25g4ycxDWBp4LayMdLb63dHUYoU3\",\n \"BxCWArFW9TasfQFeNuc8dG8heCxevGuPTgWwefGMg32Z\",\n \"Gq7yPbovxx7LPdRw9yuHeUJ7bFcBJjNRP9m7De8CofAP\",\n \"C8k55SEKbJYABwoieM4HcN3wS2nUPZ8ZR7UNqC4gk3ST\",\n \"BU8Dkigu7AutuhfvAvhoRXTYGiikriafWPXna93u6ybW\",\n \"hwvLs868seCEBtu8vtavFmAcUXN92a9SjiGFavaqyzr\",\n \"3GABWBZm3LYdSVc5Hw499hwuqNCqRjrN195SkMueM93z\",\n \"3B3Q5JWe1C6x2L9uj1xU2krHdSiDrZkECJKJLSfBrbSj\",\n \"9eEYCVRYsevZ7RKtr3SrJ7VRiakvp9kWwAcYr5F7o1ef\",\n \"GzCP9b7ioVwJcZS6ACeJiARPnoUo5tp8FovTjb2fV9m8\",\n \"9fL4zcf4wsvKaWLiqfaJ3USGU96wokfPgE6zpmzepsWM\",\n \"4wPJq5pkGpEGWN6BZtWVtyjM1qMPZZ8mnC4gPPR5DY9R\",\n \"CLWLhct74y9h86QiEGNyzju6WWZezf6pu5SokyAFgu6P\",\n \"2zsGffnBCx99AdT2KRgjTLQ65yaecaPCgJ3Gyiognk69\",\n \"2aMAd6eKqcPoJ4DnkcAKxMYz18AYcHv3atcR2bCuTWGz\",\n \"6ki4QW2Ps5GabqfambMvhFNjRthKfr7eDWQnnJ8RDAjN\",\n \"8ipQ6LgFCnMfUi4FMySuKmUkVU75tZYYpjH9Wdw9DeUD\",\n \"12CjPUjxAYZGfRdrG9ERg9niSdguwguYya4WPSaRJKLA\",\n \"3g9tUSGxE3GLSAX7RTjaLhDpZtUVHdVExjGSA6y3ud7J\",\n \"HZPxiUrsEGcCg8JD1XkYMeA3PBP5NTY7Z3wm8Hojhgth\",\n \"QuebZu6Z3s5sQGdBHdntdoKqYG3TpcJChctNwuWHn1B\",\n \"7hyqsmpqAJmtRUnXw3nmZgut2iE21nFPo8cUkdyqpiGK\",\n \"HhWivu4AUmuzowcRBDX2uX6Vjd2J1PQkqa35cAgbBmhg\",\n \"BxcAQdfJCkTKEBbS6Tuhj2w9t8DKGr6HdZpYCtXZQ7kc\",\n \"GY6u3x4Eid7jZGeegAr2yLSRt7Jmq5FH8HLM5aBfAbDd\",\n \"6WccxS7ha3XRmwiNSbhjKxxDT5e4XArvSdhuDYhnj64o\",\n \"G95TsVFabDE2MeEjVivEsQS3kqzPoJSkmD4jczLdZQyE\",\n \"FpwAZanXoaSJMQJfVgdZ9ZgseuFQLcDPq1PRj4fiRL7g\",\n \"FG19DQ4faunxkPWyke3xZczvufjJrY1UQALpBHPQtBxn\",\n \"6T2bPDgX5GZxprSgpwf3ANf6KzqifZB8aNSPFNcBJZUp\",\n \"EdxvPhJxuZFujUP7nPxRzHoZQq8fMbLnnkjEjvgXbAen\",\n \"E5qxffJCAxrV4kxyGPPELgsg4GoVYoUHvG3VyMMzmzSY\",\n \"CSkNNqGnMhow4RK4uXPGn9QCLV4FZzzNUUWB1gGK3CnS\",\n \"81ioahop8nf8oaw4cjYoHafT2ffUDztb1WFTbFe8FnSe\",\n \"GSWLTXqSYsduEj86kjHzrkPPgCGU55zHbnBEXbRKuBhE\",\n \"9LgzLymT8iJyQc9uJta96yTD6tpK1G9JcP9V8ZMrku6f\",\n \"BrCMUCK3AeCMHEBPVVdjXnhLMjKtDgYD7xqQCLqJUoGd\",\n \"ZWWf8Ntnys2UAoga7FqU1AUjsnguvpXKb61YEViE6kE\",\n \"9MhBCSz7pBSDU5oCivUPY2cFDUvVkmbA1crrBa5TqZrm\",\n \"5HoJQ6CzmXUbFqjDV3AyyfCBZJM6gXALEpcz6YucsU8k\",\n \"8ziGL7jJjjcwExsUxhWKmBKAZzPzW9rRbYi855fYt6rY\",\n \"hbAZohM78W92hMNTVDR3iaoxfLcgz8m77nN2QDbkyXr\",\n \"89mzYZUYv2FmbYSQmVvYBchFhwCsPr8Xw87PiLXetaRt\",\n \"5v7wqAfTqqUWihPuni4f1cxCUvW9naQWhrpHBFsjpDeE\",\n \"9PDjYFPHpyUxu6UqX87ynSDFKF4b4LPUhAaGTszjmKDW\",\n \"BFND3DFpDcnv44pbYRvVSMF5x551AsFdX95ymHCxDohE\",\n \"2U18m2bAjp8voXy1hdKvN1kxVSbQTPLe6WrW2YXkVgNG\",\n \"DZtHA6SXX2ivEaj9eLLgRxAodEFDJKFJXaVFhXy2RN6y\",\n \"E2LFCAY5bkTTUcrH3e3FFYUeW4KpumECEdbNvJV18Yi1\",\n \"Ed8JWYV58bGYWNDBsguw5QQfeXJHY7yjp5Dm64kt7SpU\",\n \"7Xurij3GTvFrdEmodLC5NHv6X4by3bWpVrVRqCpRBLzn\",\n \"GFcYeKw8sV198rj3yvMJy9nuQRCQUzYHJPQvaJ21ocwC\",\n \"G84R1JND8HXLAsYH58qAjGbzCtJR3vvnjDoe4VV3jtwU\",\n \"CrDfQQHNQrCsrJvLFi5VDo288s4vGP9PRwWgt5sSk2oE\",\n \"CaWcWe7uSiMCCNFguwAgvefBLLzDSxKNLejHTQMJNDX6\",\n \"5T9G6bMMk55unFXB9NnxxfuuiMkT6bcU5szyf3xhJWSb\",\n \"33TdgRYQboMG7QUqbLJ8h4oqSQwgBSj9FdC6jk28GzHN\",\n \"9D6gryhheSrwshCQAfVvzGZLDdmDQHG7hGWWpJjezAbK\",\n \"3wXDQ54B2EM3buGqnmzqvh41evpHm6pQit6sMEp3ckZV\",\n \"HnGVKGtcDGQ5HMEpHMEV4woKTKviWeM2f9RwSoKhtDpK\",\n \"4wYPiwgzwFD4UGE597dG5xZFLuVXhJvQ54Ev2zgToh9G\",\n \"3boFndN7KDdooion7tJYYomX2eFtNsjsELnmL46owAfM\",\n \"B5sBYheUPn9BTpAYDwRCm4bWykVB5HGVEbswTCKgFvtN\",\n \"HUK3Kg1dsgAmhUqQxFnF7zVcFai5cUBiaT6kGSQMUwGx\",\n \"FxFGPjgnWya255CKtnE7dNPSTQEwrbqwW5qEz98nLLyo\",\n \"FXdeHJefybW89HqMVV4KQXB8wAN8pzAtigLiiyJmXcFN\",\n \"HkVnF171a342fXF7sayCkpQKheYkwPf4WFxCYdeqi4c6\",\n \"DoeKZ78i9WPQq3Zyowgi9UEU3dM89oLQvv5mKKH4Hpr\",\n \"DzhG47ThpUzBU4AcAHR2M16S5EsowJBNPswke1zXJsV\",\n \"vXsj9D8SGwEwHJCaNq5uhUp6qsvmWthpL4ey4Vs2nwd\",\n \"BYfjSYoAZwLsrZ33wdMvLCyEp9smPn3iiQHhKp8gUi99\",\n \"DfynUc4ofqh7AbaeV6EPZxPGKrga6HY7TL9ZHCiW7uMZ\",\n \"4ZeUsjDjoWe8CA1qAdYZ46L9Z8S29Nx4uT5c9vGE2MvZ\",\n \"AgG2E1mLm5wazmeqF2sgze8YFeSsRBeirGpyzzpfbysL\",\n \"9WtPxwPuTVjoh6brkQLsFY2HhDsKgBsFwd51pgPXZiGu\",\n \"8BRa9tMXFqZKkmDp7ZWKVYJ41qtA4e2joDqT7JEhwGUn\",\n \"GQhVgmcsHiMA4iaQyvRXbhrLNwJqvKr7UB3Ca8jpmpzZ\",\n \"9Aii5YMSgNXpZZXuJKgUYYmPfxqvjkmUp1kPYoNSo6Qb\",\n \"9RrxRkZ4ZQ4GtBCsP3vjGkTmC7Ys2CoaGEWisHJr5i2m\",\n \"4kyLrgma3SP7DwpktPe9ovJYjbtBX5zeDcrm1FjMGGym\",\n \"4AJ7fKkknsLAZaedjtqhWFsRZKuMte6D2G2fUJoBmrqN\",\n \"DutYFXRk96kaVBfZdMwB4iuX6gfPT1myYc1YeVYiWucc\",\n \"5ttko1YNrZG2NiEaURMg3kLPRprZ1hLNtxFi8gY1MKKx\",\n \"ERRTtFaZT71D7kdXzYNocKJaEPj2X6bi2jA4yyNPsGe2\",\n \"4LV716avmubguMGYyhGPox5pHq5dYDRkAAFnfENjpFkH\",\n \"AUTdry7Edtm5W2g2SWfVQk5suaFYfE8HsQgmwRd4kodS\",\n \"3SoJyqi4sPg6n1KErjkWvm4hRNSNeTJg4FkUGxKpn2Hq\",\n \"GVBaDgvBHCGvepGYGRT5CLMcjryu1wKRijNNNpZSqhLB\",\n \"Gvtr1nfv5YShZwXjfybhf7Aa6DxGuU1koPu868K1yw38\",\n \"Cu1xqe9er5gNsWeTtaKwXy1bP93EUtDpipCpQJE4V8to\",\n \"7Prjwm6SXfWb8rWTqsTBYuAJ1ZhFLHEUda5Happj1Ac7\",\n \"9i7zZpKTVW8MqoPE4AQYVEs3w75yafPe77iedY68vuVX\",\n \"3dZfcnFG6MokiMxDdSiUP9mirqWhSfWs66RWSagFwkpD\",\n \"2nU4JsE4FajM7oTNLTob88QoVDs3AXbkzRzUReyXTYw2\",\n \"71nYY2RnWhkUsxxaeVR8C5Jguw67dyVnPLhq5QPaArUx\",\n \"7pNq3Qx8BkxvKWQAosxWep3QHztDVZz1m77syT2hq86S\",\n \"9Jt236WXmre6518xNBjEWJVjvWeXFfJvPrkjf2awKzjn\",\n \"3qsXXtkXsnYHzRfG6kfsCkzksuDW1s2bkwk1yQZoJxqE\",\n \"HS76qYbxJtcShvTyUdv8nhjkt7TwKzos9VxXXziLQAsS\",\n \"C6PZKggnTnt8FLUrNPAE6jPJR4n1ZRxH5U9DhJH97eon\",\n \"3spq2EhkX1dsBVN4Sn5fqLvhcSPZDpjWviedPG82tboM\",\n \"CmyModyafyuPEz6kj7z8WcG6jFRFoPjLE4TGzuXrJhvR\",\n \"Eg29L3Yv6xFwGCi2CHdDEv5u2LmZ4h4WJFK91ZpzMeYf\",\n \"DxDm1PcJwK2ddsRuea1EhThcFw9XddVFR3D2R8qQTjhu\",\n \"Ezn85S352QPyb4yntGW1feuuySL3iiWSvK1NWoyqzcr4\",\n \"26ZEFkD92ZLnnsr5JFXJTXRQnx8CH1NrvLAi1jCH6NEJ\",\n \"5KL9xbf56GtZyqd39gPXcAQ41krmZgJ9521pkPq8yr5S\",\n \"CB7CZGPMXg3qMX9x57rydpKp9SCQtD2m1Vd2kJt9ZmDq\",\n \"36xVh6uxRXbYCAY8DvibB2JMnjof4m3ePBUF5DrEDF8f\",\n \"2NtSA2SYaxWqxd4UKmWGvCCPzyqCyv5XpTpECF53vpsM\",\n \"4gJhmeX4dfDEJ2H49UjKeLSmCWtC9igM757CacRpDGRe\",\n \"F2aCTTWjWFE5mZEr2u1oNcQsfuwRhGVYBRiwdmi8hjTP\",\n \"BRGeuYULRJEJa4JCK82DjVNbBA2uphsAMXwTr98xT4Uf\",\n \"DLx15Ud2gC3jSuvxTtJ8MHDhL8PGtByxtmpRMMXRZGds\",\n \"DGg5LjdMAPeVS7n8gFDGxYPrqUiNBwghNxdrtuX2dTpG\",\n \"8SgDjdrVoDWJKHYSqVeTdBw9JSjBWMr5gXpAPeTPCv34\",\n \"8oQA3h3diT6sAZXusR5FxQ6NpZCxPijL67cHHFXojTiC\",\n \"FHGCZfvi3p1vwCC89YqF3a1YxfRp5Vh9SG4b74fBZxsL\",\n \"B2eLVk2NYrcNG7oZERSTWM3AbtAE6hoMERxBKYqCJqqm\",\n \"2VKopJuXEUzXMD1xWhqCjso16YyDZqf8vaaVgJdc44xh\",\n \"H5vSsuTUP3gxCMPznDC782SxqFpWpcRLSfUR5dUBmzj2\",\n \"BDpjw4aMz4T5MVuG1esXskHXQve6dFF3YA5o7FivpNBz\",\n \"6dLRJK1cCHFGVa3y1z2kE5wysXBMLQduJujTipT1fqDF\",\n \"D9ox1huGzMeKmxehwELygiXBuMHQ8G3B9VdqvyTUxRpq\",\n \"GwEcTWKQxXLyQ7gdezo2a82FdAonFhiYj1Y6y4CFxMy\",\n \"7wHzJQ6kskqe1ApadZUvaEbgxTisszasDACHf5qGMe57\",\n \"6gTU8CsxPr6HPGseRjzxL26muq6VHSNzjCq41f8ZLW15\",\n \"B5LsUWB1eXUXGE4Y1JrWrZFMEvVTaS861p6gCns1g9XU\",\n \"AbrPMQ77FaRMZFoshWZmvYjT7M3rDNXFTmA7A35MuVLT\",\n \"HXud3hojoydGPBfWGNVgYN4ZhspTEYXLkqXPhK17GWeh\",\n \"DaEq7wuZJYf4bBLmJketeVh9GGTjTAciFvGRC8zw38T8\",\n \"6bJYEgCouu9eHxLXhW9Nyu2CjX1awLNBrmKWbVbZZJc\",\n \"BWTYWUfwugdXZufCt3QXJeU8iB7DMSg4sgjKs6PndkBE\",\n \"YiuceV7z1ttQr4sgAVLydoWfDejQCZujdtUkPYADPu7\",\n \"8pxneASqvw53R52LD8RqraE5SKPR5fZ46AauSk1Wj4Aj\",\n \"8ZeoXvKcqfo6PfbQ5cRXjiofioYvVcwMrdYErgKntxCY\",\n \"4W6vdT6WeZypMUUuJpY96BKuJYzPpUJTgvDyhxY5Xrh4\",\n \"5ZXWgpaoNAWf6MfrEVcrXmpdnWV91eGn1pHghiPWw9od\",\n \"63aKed6PDfGNqPM8LoMJmvj1FHg4nXK1UUU7J32zW1Em\",\n \"CUkoj59mfAY2KvoD3R8szR5exjRFv7MEWSo9ndK2UxTD\",\n \"6p6F1Pf2RQYpUS9KwQFEk2otx3SZWmSsJhyMjg6idFCi\",\n \"Ax8QQ8HMEKTc29amS5RBrTMazWgcsXc855rHw3uQSL6q\",\n \"5V2Xt8YA1wRHG8BvHMhdBX5GpnCdo399XRwgwSAniYiR\",\n \"kx8T8fn4bE2RAbgiP9jRN7pJbMeTKeS5x7KuuBAa9iJ\",\n \"B9PmNv2BRebiN9rhVSrLEQJoCh7Sq248gS3oFfy3GLQL\",\n \"D8HyyVb1gpXc9eAHwsvmWAjVjMmk5h1xpaqg77rNiGAb\",\n \"CQT5UNtka37nEBAtxqqn5jjzqmToPHkj3P9QURm2NDBm\",\n \"8qVZ9UMB8WEnECgTB2XQuUHZnCBydm6xojwW3vEzLMs9\",\n \"HqtaowkVsBM7rGBYBbAjTRX7ksKsnDpGKKsaGaGcnvxx\",\n \"9KB6fUwhtA2VLVd4dxGzkegodzgHC3ridxhzeUtqg4S8\",\n \"9DwUhNQ1WLEnWGtsB9npVS6ttPpABLMiV2hNJ5jzFZZC\",\n \"8Yv3dUGRMhEfyaidoemJokLwWq2hch2UfYkxBZ4fdRde\",\n \"2rcTk452TRFBqVgFddUf9v9mRtd1CTdgNeJ7SMFk8ab3\",\n \"7xVzDHNZJZZ58pGZfCsQdN7XQXFXcJK8aakXyXNEifgE\",\n \"9a3nXpc2w8pgjudCC2aqcFJBbqtSzQm7vW8W2r9Uy1nF\",\n \"7STXmJgzzt1aeTWDGCwR356ufuKVtovjDQCT42dmj2p7\",\n \"5FzYzfckzRrqrQJkTDWuDqtG8EkYCsQh5Av5anqY4nuV\",\n \"CAGiPQ341o8NCF9xDAdeyC8brDjumuA3DeMrsCGbCVmA\",\n \"Fq3NqfwQeMGSJ9yqYxFmPPQehGBjRQVneLYjshPk2r18\",\n \"21tyreMCKuJs4aLSrYDfd3LfTmnewxFKEi5pdRZ6etAB\",\n \"G7HRVCSK6vkw7KanTunC3zmSud4vmcmNGadfGP7FwxVb\",\n \"Ayxtiz8JaobGJ4z72ZDHsEphivYtJ2evnMFe5EV3ZDWV\",\n \"ECSJWKbrQCTzpGwVm7taurn5iKAAaUJhuAUumYEJbugj\",\n \"BSgrh3DJJvwvJsFo58UieRAYGqpmYRFnxTHi9d8A7SB\",\n \"CnRwLQY2WsjL2fnkkRaqUuNqMrFpvsW8i1zmhTBX9vTi\",\n \"7WpJYHwe8DnruQ76xkSw4UqX1EP3kMNybt5yvbM1KGxz\",\n \"9hACcNYkKLmMkAZ1bbSm3LFcWoew8gJtGw6aGyczANos\",\n \"Hz9ExNWd5mppVvHRUxP29xjyXHTWcGg26ENmt7yKirmC\",\n \"5DGLkQBx7C6gPN2xsHhWAivhVzE7wvTFV5sgwHU5jMCg\",\n \"7aMe8tsXUgw9uvhqJwmdLFCh7ci73dnbDwoPpXnY2AP5\",\n \"CUo8ZohDgiksgbD3BVbuhLbUYRtF2jjNZ59dQL6aUg5y\",\n \"7TwCDfR9bxoyAB1Tud5gyry3eBSUfs62mRstSgaxqWW1\",\n \"21ZLSdwGmmSs12sDeN2nJPkAmyTpNbqHan273Fo3J44B\",\n \"9eWvReZgxWSAKEA1U1P2EYs9FXLX4PFoyuRga1KNeGyP\",\n \"B96PjbcGmM87SEKJVfKdackrvPwZkbgS8H3NWfqsbkVZ\",\n \"J2GoCH9Vh4BeFRDPgduNxLq6JEKWvKmKkPoQDaQ822mq\",\n \"CvA5Ny9pdKCB47PMazjA834AAwohnf5XKDEZA2KiaQBb\",\n \"763EcoEZD3MrAHu64AXRyxoERxB78CyLHbdV4DeWLEAV\",\n \"7amFuvatSCMBT9qmxaQ2LA6fAHZEUsJqUc2bPsczupV8\",\n \"9kcRMdh6LkbDkFGfuSqrf2a9TqMrr15SRk4EjuGrkxqh\",\n \"ASWtDRpjVBTHX3Hidh2G9K8UJE664LtBeq1GhgQaMHt3\",\n \"2P3dMxrgoFgHuJwxgSrgBRP5mK9P3AsfgbyQAUrq8ctG\",\n \"ECLmtiFB4vYAsfyMEgdm77idhxgR6AUc6JQsDyZUm8d6\",\n \"9J8d16heLCkwQPLA14A2hy34EdXfahfpdupJh53xCpT4\",\n \"7Ls7b65h2mHiGn3xF5SuhUW6dNvyKFGkcpPoNKkZZK9v\",\n \"H5MuMojZQwkYiR7M52oEgphRYiWDznn4ybLm4bSrLpCa\",\n \"A2oQcxjSmSsYKjc6yPti1SKRCDEnjep5Fdukgrp9bopc\",\n \"2bTJgf5SN6BFqXtdqip1jQHSXvRsLehrzLUMse93Xitr\",\n \"3yCXD2tmrKEGCRfWw2snqRHDt9GXaxE65LwHfaTHXFcC\",\n \"75rGNnqzfad5LoKY1s7iBs4oYReuALX4w6Y8skizaFDr\",\n \"7hPPPUmiAdrZTZdJgGxxy57zbgkqw2yLrKEf9fr1qTB9\",\n \"2sok3jenZ5NiDyStnxxboQoPWs6ioQjMwNHD8b1Dhquq\",\n \"4CdJuMr7wu8q4NLrodu1woFMeUW3r4tTQcmaE2iseqn2\",\n \"4ZVdCSg182miAFhU7UuuyqxL12stc3wdffVEEqD6oK5w\",\n \"7zJ9fGJaW3e9GNQ3vQe2uhDddFtA9NZx6KjXYMNZrws1\",\n \"5WsLLqCR5upnDPS4m7ao84r68kPCZ6E1GtphewvQb4KY\",\n \"GNDKx9UXBDyActxaqdCqGzZ6yjiQuNPeqrPq8QHv9t3N\",\n \"HPqgYh9rcDht6DW5ZFqqs26BuCTS7rsc8zgDr7Mh5XXr\",\n \"4BXTZ7meRqrXFX5QggvpFeXRBJLNyqTaSuefb4Nvdw4V\",\n \"EHZsQ28pz72mSTNqTdQ87guctFTy7928snPisf4iE1zE\",\n \"2dQG4YYunFrbJjzW6UTcUmePs8UDy5jz43H6uSCZSAcS\",\n \"H2jJfyKUzm1BEoe4tSowarrv2F1Ve4oodjDewKsnL9Km\",\n \"7kyjFqmEPcLTepZKadrJKZDCvFo24zf7GdbUzwBEPzjX\",\n \"2JVJDep9R4RcStwkzckRykageR7joNC4eSo292RmsWy2\",\n \"EBnUCrvb6jLxCGLY3DsksajGPFFEAAE34rphS3MHPoVW\",\n \"CkzyQm9PRSZtvczSnU2mHnssvfYTzHBNRu23kayz5FSY\",\n \"264mxsvZuGaDCZFyQzApWhYMHVwtn83JY3YMgpD93Ejt\",\n \"6zdw9Ss6Fh2mYCCRBj7SFiq3i1q5qKtdxGjybKcuUA37\",\n \"9fpvEC1eg8nrt8aSfqTRM6c3EmAxGVmMNzSWxh2aFDiK\",\n \"Fntev8W9CzUwcXXPA4Sh6WKySPUEAPuqatar7cEgQNj\",\n \"BMfizH8STfbUuM2YFQKcNk7DfJJuarY6jfSfEPBtmPdB\",\n \"HzraXWjDoEQebBaTvTPpsmcF5zQ9r9P4vMWG7hJZrXGE\",\n \"EhxuqeoxHWtFeFAhrKzWNLXcqfeC7otdad2L8wFb9NEg\",\n \"57oV7MpPpy2a3QfJPqh55mdhDzk1icRqZv2o5o78MSNU\",\n \"HHvBFBh92WvZBeXmxguPUBbA2ZT6DiaeBf7fvicVFyUL\",\n \"2W67UMjH4diaZTSxbHSmYLZ2B7vT1iC5jMNBkrUJZZGs\",\n \"64YcmQdnKtQiy35tDJcQhgE82rDAsVafYnXVNUvJce5G\",\n \"FX1CF2TvsCT9MiWqzztUBBcaUfDPzzSi2tzDp1hMSRz7\",\n \"8xi2rhVD9w7t9i6S72c6URWNaiT3u3JHGpGd9YHZrrtH\",\n \"DAsrx2QFnRPwnHjSrV2yiudfNm1naN1447xndpRXXbRP\",\n \"4DQ6CocK4qE9oz6Lvaru8EQPUC1DiKmeFUX8PRAdDgQb\",\n \"B9eefC1sjuvUsMEw3vgKASsVMr4G5FHwZZKsTYn9R2cw\",\n \"71NWejmFNsSfPDCr2JqoL2XSvtdg3ZxXgGGtGZBzNaNG\",\n \"FFqaMob4RwTbEoUAXZtTfy3EN9rv2CLbTQb4y3V7NJu\",\n \"2DyDYgQ7JH9fkDrBLVrNEWJ1Wo19L67F6GPixzW6d1Lg\",\n \"8ZVM8wdAJ8XK9x2w2oUyg2xN1F7mF7VVRnzyTcQVTuCx\",\n \"6VUyf1SZNwK4bMUACBq6aFB5eLqba418sGoSDD3zMEcW\",\n \"FMdbBE1nRfJm7N54gmFYcaFzSukQqRPLwixz8Gv6iwFQ\",\n \"48TsLf1XVZ4mxv5UaS7JLmM3JpHqidr1HXyczTbwJur3\",\n \"9xfZgH64ZCLubRv4KQjnkcqKzw2YNm3enx8Fk9XMqYm4\",\n \"Fm5WVcFkGWEg6Ck4XMonXaZfC52NHUadJiNabUD4bSQP\",\n \"7N85JGPVLdCMVeU3P2BtzFAFKDzQG9GbYUsxAuRHNW6T\",\n \"CTXWh6xidnCFdiGwpBgSWg7XNh9eV9BpC6XF2iU9w6JB\",\n \"5uBD3Yqf2VDzggXPMS6zJtneNbKpb7CSqXhBrPNGaqbU\",\n \"AWpAAWLMhtBG1B9jmpRApFji3nxqazy2LAcsvv6tAPQm\",\n \"9f9dvge5aGCADYmw5dMYVEVBtFWihcLi8249iqnbrzsV\",\n \"GxTa3W8TZjvSqgkiBxRnK7VmLbxSXCKViYWENqJjLLZA\",\n \"2PgZshMqsUi8hh7aoSLKg9ZDmXU9G8sqZcutGw8mCueX\",\n \"FJ7NwS7uWiKmp1kQnWhkWFh33oRfVuyWv4e1nXKXXogP\",\n \"4WMLoDonu6PP2RaoGymYmpYwSh2mn3ZkahP9q9w89zbt\",\n \"9XFSh98DuChsenSrCw8hF8vFcjYTwE7nz8fCpE8s3S9H\",\n \"9irMkXDfQGUbUnqSza1vuWcDiXyRW5MVB8PMM68bAMtz\",\n \"3bMGYAx8bWWYDg9FE7QrFhnGreWDJUQeGqpqfBL7xzut\",\n \"JDJC25bNVLkaMr1h3BFTQTiVSLReKNLaWjHdZzMe7rxj\",\n \"H9XmRqg3G32f2e4UiXU4Wyk2q8LiH3ivAhx6UQWuYZbE\",\n \"6nC46aTK2dTV6EBoEm1XBnjc6sF9DEPedxqcyxR5gfsi\",\n \"4m2JovbNmJ4wHqDWfnyhfYidjD9u3JnanEyhULQqAavi\",\n \"5zxcoaDsGx54aYSLR3amF291RkkvcazB5pih6qGuZHUM\",\n \"Exawto5kphFygb4cb2d648amnJAqGTyMzAAxzX21mA88\",\n \"GEtx8bhLuyyYSnfDbtEk8eP5KeijJNUeEZmJf7BEpuwz\",\n \"DeaEnMro8zSnQq4RFhtrmnzaN33VJkQRDGW5xHt89pLi\",\n \"Gn5USJbkfeUqwYyuu5smRXsmHg5k6jJYot9cYpAhhXoy\",\n \"9uHTQDf7MAZPbHLnca5TEzbXNE13tSsuo6eQuhDKSxX5\",\n \"5FQeQV4ZdsXWFz54WqsazqCbzmFWezg2poqVApsMMpiS\",\n \"BDzs3VUw4KXF9b3FucYzfQNmk25qqBPMmN8njk2TZrXY\",\n \"E4SBj3P4ibhRS9PoQcyuitUgswRcqvEhriKQ6aWHVEuh\",\n \"LnuMU5zPifHoUyENPeKwNTRsj3soLBFirsgovkTHXji\",\n \"J58nnXThkgJ1TkXthQ57FVRnS3NxrUqq6G5AjuaEZ96h\",\n \"H71HuEZF5gDXZ2oiVvcorheTcFZhrBSrGGzjEdmWmVfd\",\n \"Ch2stt2nLuGuBgrrXxbJi6RiyV7QzsfZHnzEwn7NFwV3\",\n \"GNrUARmKVvDbrXw3w5mGaA3H5egPGGmDttxhZiD8xZz7\",\n \"BnNv4DeTdnSR6J6W4bU3bowBeVcVdDFCEqUqqTVW7Eqt\",\n \"AktbjEpM2K8oqP7HPyUZA4bPDvsyH238F4FkYhMTL7m5\",\n \"4RjE1yYoFT8SQKV4BSXvrKcxA8Hz4JjEDMCTa8hsUPxP\",\n \"FNDmYN7YAYxr1bf3okTTCdjUGsCz4nuzFFZNfwJEnPnc\",\n \"9J2uDGdTjWs9UJY1wbcniUtCfPGrzbgA7J2BbKV5cb3a\",\n \"C93XZzAmVyDF1qpMe7ftpwBLYgJE7B9vrFnpGT9uWWe8\",\n \"9feASFfXSsS66tTb5mDVqeirMpSBUmDnrHXgr8owybPy\",\n \"mBFUjergR3mDy1hATXAKPNrfuuGwG6Hid4gRGti2r6H\",\n \"DfBAw5J7qRd5XNgDQVK7jVCGGj5T2fjnoacwvape3KAc\",\n \"BcruA1t932CzqNkFwVsZH8SZWirutp5KVq3cokGP3x1C\",\n \"9kL3KvwWQCWCw1cbWuNjPV1eYk1pLvMZ2ucZCysiBscw\",\n \"6t36uBRCjsFcwbgpxBNVZo5zv4tKUF3tvu5AzArRTvN\",\n \"869p9rkgcGSYqBtdd8K5Bh6Ui1My2k4YwhR5xvzThk6z\",\n \"4cGiK2whJDSuQ5RLyoL9zMQ5Q4gL4rwSYAezQZH86Q5v\",\n \"FxJRPyUbA1uxjefqc9JCFchLcfUbyQjEACxhhEVMUrkw\",\n \"8rnwwZWXjun6ycBLaJLr38C9Y3m6SZRgStXUWgZmUfau\",\n \"8uTSkQzVMLk12MXBKG4Xj6gVH8SByx2U4LNyUnBnHP63\",\n \"ANZuxSox5BcdmwfHdr1BARaduXda15E8W1gLA9Cps8yB\",\n \"HjuvQaN6xM5vBcNRpSXC88BLUta3b2ZKEtnPoQ6K676M\",\n \"E4svmB6Ze5fmKkiDbiHXN31ZQfdKWDPeAFxbEEVT3So4\",\n \"GfDCEUaWwLX2WuQMCvQNM5R1qNeh1nKs2MF5PfyTtNCm\",\n \"3Uxn7Zswa328UMyyKrPS7dRvMob248y9wHKkoDC5W8aX\",\n \"rivSh43JBiS9bJLqbh4PYbojrWyGkXa6TVpcZyGtY3E\",\n \"2HLDJ92tPeXHM6zeKhjuSosioaDVKdZ7snePma4mYW5d\",\n \"7oMfR6xnJBxGqqipnpaQZXpUGKeUuCm3edN33iXfUwAr\",\n \"7a1gVsLobbV4FYG1FHZb8aDvnoCCbyv5bAwAGKLYBmr5\",\n \"3xwW7WGs68ypFBmbkU6BFrCXw4mGe8VyMvHkSLkjd4dY\",\n \"7uCvqHTTxchjCeFuYUQv3RbqkSkNAXmXD7L85A69EwDR\",\n \"5UiAESf5CMub5cg93p59rKNkrfg58cfweoxFdDLEGTRB\",\n \"4HSxjeRN228cWBG1mKHuBLVfh65TNMREMcvv4UK7ckmg\",\n \"GdjEjC4dXzW2M2j1Wad6ZLWUXoM8A6ApqNjBJ7nqjzTV\",\n \"47YGpZPuFcNPLiqS3NM8KWLpjr9B6hy8EeM9n7wq5Juq\",\n \"4JexmqrjmSAKrAQK8mZEus2kWRSBDSnHPM5JPtGKJnZB\",\n \"FDJnRUaJcKHhTrmxX9AKLGLkSDDLcMdFvkuoWTi7Lufh\",\n \"Ecu1JGxkZWpZnLYtBFHHmC1GmFzY8i9UBfLvPX3MxUMr\",\n \"7Rn4nfkddKKVkv3yXVQgmxz6Ccsggnzp41yvviyEuGb9\",\n \"6M1xFxV3JDjH9gdQCbLbBVct7Q73a1QPZvk5M3jtjS9\",\n \"8akzntixoroAzfXFyrQ1RggDHspS8Qb4GYugKRpuzNA7\",\n \"GXcGRam3mNBBCcchEs7dUNPVwQEHLbMdGen9xk5hHsdb\",\n \"D3iqXxYKJSpp1c6T93bAtCpVhzCRAfqeUPpAzLWuSj7p\",\n \"9CqSXrFEFxCjS7zJVu3NPVq7buJ7y4ET76on7tBb1Jv9\",\n \"Hrz1TUbu3pM5qDKqt1M6dvjde9f9RXwxsXwiZJ8Ay2xb\",\n \"3jCr1whHipjq4fttKDdMEUbEUBy5v51MNqxiWNHrvKxh\",\n \"FFunDAnmmNeLHyzkz5thgJJps8eTY2sU6H5ho9YkmUbU\",\n \"CgX5vVZvsApPcv3CKrpboe5Eqtp7LCQfUmLedrpMBmNS\",\n \"DiCdBPmiX3pbinf9bXPBVa5RvkKyaXZg8o5SZujWc8yR\",\n \"8LRim1NJP25xJk7xnM7VSTBXRGDMQjrYwinhGYBMXVE7\",\n \"FpmqFYozbALKP4ata1s1Hkxb8h7FLUNWABCEtey8FbYa\",\n \"646Wr7msnhaUyKbLpJyKgnaCR3KCZ2HtSZzB5h6XxiYh\",\n \"D2GYrJ9cWCMsXJxnRGfKxYSfNxjNCHfPMdL8L1Ho5fm9\",\n \"GQmU25Pyota7Ptsf7ZR7LGsGZ8CvcWAn9bL2892GoDhD\",\n \"J44pbb5X6TbGKqjjT7NM2dsQkwyCH8QtHrXAFzwsfD3D\",\n \"AhenJov71sxo3A8JVdHj1oJMwZcDwBvxj1vv5sSN3G5P\",\n \"BWV5uagKSGMSZ95vn31GDYGc9b53HXQPsSUgoayztx9D\",\n \"8zfHf7fjPp4NgEmo8vjxGmF1xW991Q3ChxaYaxMKbEDJ\",\n \"F3Ba8ioRfwjumotWJbUoks1xCJkGfhQXcVSmiiLZepEc\",\n \"2M3SF1CguvG1jgR8L3vVYcWbUAk4VAN3v4wYW3gB2gkV\",\n \"DFz8ZtpGAeAwcJpZi913MAxVVqtUF9MwonEyL1vU5uop\",\n \"6Cb8DaSxGAwCjoSjqC1Z8xokgymmaddvM4TZkSAHb5tN\",\n \"ExUXoic8vpKb53LD29bibwgv8STjHAux7BVmvu2xF37X\",\n \"6VYJ59Jt5PYvDpB3ZW5iBN3oYyAPrkawJVUBFrNMv3kT\",\n \"8VZtLxhuGuvSBkFa34RW9E9jYDQvMxPcHwqLVEEBNVNU\",\n \"9NYfBtqndVJjoqwc8iHaf6uGQ7M7ctdXLqiHu7XejgjX\",\n \"52QdZaQX4kaqeHzXPZB6qwVkcRt5g7yExXaNj2WSrJQj\",\n \"HMbbgYQWHG3SKb21ybHZYwcngEwbxwYQdmmiYBRCWmWv\",\n \"GHZpYApGHGsnDdZg1Ft2iJbA35hPXAqgkP3asHPKzZnF\",\n \"9Wd7TF5b9CzB3BDkiBJssNggfMtwyWUkDgHMH3QjrZtb\",\n \"G6LTkvhWb73FvKTLRRb61yWsSV17ETNKEVp7uqTrthuj\",\n \"GwDWQoRsMgksWQ9c1XjmJdmMENXi5rNLdNXZYTZiEzN2\",\n \"2ELgtSrt56StNrrweRzcNGAQ9aevqfRcGKSfspcBv7iU\",\n \"AiKb16D2BdN6n4aPwpQhCDi5dMvtFKDJc4dta4gWwc9K\",\n \"EyCdzUTfe275J2fRLRcRZg13iv6wbSsiCJ1GWx387NRz\",\n \"8Q7LPkcSW815yTHUAwkRsmENy1T24EaTVyVtGGeGaHFa\",\n \"7UzYYCgP9PcS2uY69nbmwGLqJkpAoft1tjVUicBuDJXB\",\n \"5LCLGkK3WxNEwtSiifi5DRmNmRQLSiD4WyaiHjG12zbu\",\n \"8cpa7u6uRmFdcxCNaSFTinMntAnekrJePBptUQwxW9ef\",\n \"HBDkkidVA7HC5nL2QqbwqdP4zB5S36ZDBjD15hiYK4Bq\",\n \"3wfrPPTvUE7FJ6SsFRaE6D3YToB9kY5cHMHg2g1f9w9h\",\n \"Gyu39gBag9XXQzcoH9EWVW6qcNgitgVq8ioVuBU7upzS\",\n \"55Q1dSewJJxBEkfaWYRAS45EEBFktu6pC2WWRqetgKL2\",\n \"E4SkNveodoBSWPQBJRRzAYUqpGfkD5zh9QhsDkKdZPvd\",\n \"7daPCW5x84ZWePJk9nc8Ee69XxHbfc32vVD84mQ2jYgX\",\n \"GPuAkEF1csEd3VVk3t4cYBpZjNsvcHr925yA524YDjNT\",\n \"CFxZVPr8e7ThrdhQvgQNgLB8NeUmahfGvrN9egmiT8DZ\",\n \"8vKBiYnRXMQH36PyGCEcfmCsnSaJ5g5kV8ao9XnFbxK4\",\n \"HMu8wZVDb68hGoRDYq7j1roeBuFr1R1EzmVeNWrcCo7z\",\n \"GmzjU741wqCmyRr5rYPDEPvAc6691nNW6pUKJ47iA1i2\",\n \"2JvG2B7Y2pwFBCR5cVvMpxCXf1ZHr1sMrPyuZc9qmMXE\",\n \"6ScA1YEDj7GnzG3V8E7HhPpHEYXeBrGcCkrW8y1jJBVq\",\n \"FUE75CymeHgh5HRa1CLPSwfLwEfzkXBuqqog6MyWk9Uw\",\n \"2SzNbPJTQDybFsf9Yv1hqtuQMPMyLJ74oTNm6trSag1C\",\n \"7bwtwrmQRkFC5N51U4YLDPLxYEhJZipfMhoTKcqUGR9u\",\n \"AA1tcaN3cHXu7sLhFvKGS2uKeBLsu5RJqA4a1fJCAqsV\",\n \"H6u88oGqrgyypLWcr2w7yV7eMriibLdmnYp5K2UYieEd\",\n \"6EXLEdqxTE1CMwDMTQTTbpFSVLeEo3N9yovMTaLoMwY4\",\n \"FYnHpoq3N5N6gzQ6Yqgh8nedtjdBnRzKTHtspbb6Kipv\",\n \"E4yY3Wd6pBNVM4KoZUesjFWVMJiKSeGoKadhASZhQhvn\",\n \"xbHLsEepWfnst6TStgxV9qwVYyuXCihVmHVrsxvHZvJ\",\n \"6HXnXM4TaMLq4v6xnRnoCskVQjJ9qVERHjAzxj4cXq9G\",\n \"CpUc9RGApyzL4PnHiSZRtTx6tC4xCMnG2monqzRfxtC2\",\n \"91X7yRZaronewpkxgk4gqDQ9EWfvXKgTeE2EiVBEPv9f\",\n \"FCNsGNH8WMZdZ4rL7HMZN7KUhoahJtR2uMzk53XzKCY9\",\n \"AEhwdv4y1vsmaY1kPaeUPJZS4waDLWWKwv86Ui3CQhjn\",\n \"HbRc7jv8xcUSexJLbwEs9ryyGSMAUonEximwgEH4vj9S\",\n \"AJhKco47MzAEvtWV2AgTwEtudGteijfZudEZWTZ64RM2\",\n \"2pZz3EBMGNtobNeYHDkfazh1Q7ME6C1mvWobsgQwb61r\",\n \"8BBYzjn6P7etYYWfzZZenZiLPEqkyb96pnMzBZZycGL9\",\n \"28Fg76pHUi3uKovTWd3jUW6ngeWP7b8nKdVJW7K7NXkH\",\n \"HBocsLV7VpQTWRyFQtXBn2rrFaTvZu8Z5gWe4ZphtsXU\",\n \"TPYsQoKHTXqUKrZ6v1nuopPqFDxi1Tww5y674n1UBPg\",\n \"6gojZpn2LfxXfz9HZtHTCXqY2r7M2Nsi8Yz1LvjGpN9S\",\n \"8MACyw7FtnE14kLtEygzeS2oDRJu51VLwPS7bto1igg7\",\n \"7Kobs2XTjLXGvcnmPahH5hoDgEcsgTfJxiP4jUWR6WZC\",\n \"3BLzDZEMYG6Eecr494G89z1Z2JfpWrvnAWwF3LWE7RuA\",\n \"h6dMXnnuTR9BuAuiapoSRywY56EVbS7viVub4EqYS1t\",\n \"25tqoxtEgBtyqq8b5L1Wva4onxPFRmifHEqvbG45Zzda\",\n \"G61mX8cJFXB3d1g62j4MS9kz9BaXRaEA4juTBZfZBcsB\",\n \"8pJCJeY7Qj5tsiq9ze9seR3c3PKsjfggzNFoAMy9eJ8K\",\n \"FzUY6QuUh5q1qLWFaVySacS2xY1HLJQK6AHJGrLyF74a\",\n \"3ckhmpHkZh1aBh1svoGvYgYGnqwj8sR8a67wXHpC5j3y\",\n \"EK4Titr9xakua2Vr5c8znanSLEgpGnHCU9t6LF7uVNqF\",\n \"46LGNdRx2rWZcNwokyBrBv7gYSy2h8LQkW68QkEqyx5S\",\n \"EjfwUEfutuKDBGJVHo7QiC6RPVSqDRBxB4cSdmF4cjhK\",\n \"HcedK4MG6ZAB6zUu4XWGFSBXFAcJ91npBjiQXqbejbFZ\",\n \"5vCo8tFnZy1Cf5A6YnjNRyZjG5pgK9rev2x9Ah4dddsS\",\n \"8t9qLEuApQASWP2UsXLQHnCTe4XYXGqpRCFVoGWe3NaZ\",\n \"9J1Q2dEi6VyauEX6HeirPiTzs3VTwY9dxg84HF6Heb1z\",\n \"BpYaLGJHJHDqKha9dk2vwEgNEisxP4D3cf9xHRFRPgoC\",\n \"BZay38aQpjiS4mnduoX3AopJsLXUX5HtWLJDCn6z74e6\",\n \"7mLsoA6B88DzYs1HBuMNudmbQqTuW7ND7zRPTM2jQhCt\",\n \"5rkub8dyB8VTDZTwovz9nD64HnchK9CCGy4yKup2U2WR\",\n \"4L42TWXqnLTjzaARR9qp6H5vbzqXsGMYsgkHbNhQGc7e\",\n \"4WY7wsRKQPgomf4z34h7xDmcaT8F2ganH8Xf4hd8MGdz\",\n \"DyJqkKqAfXM3mis2PB8wfPYNpztLXXbbZP6JChquDT41\",\n \"6xXhPDiZF12PgY92zM47v3iDwGDLBAqbbzRHzufKEvVj\",\n \"HVgqbickLBLhJc5vkyH5VxvPL1NX7jo3KpSrMpM6uKrF\",\n \"2A9pf1BQ9rCn61jEoPwjt2cEUt1fJHAYfp3ghSPe5gAV\",\n \"7eBa7nvrpP9DDgriX1wU3CdWQG2D3inEvSN3KTzatGPJ\",\n \"G5mzSgv3FpjY4prTwrY5zregudyTP1yAjh7pgQQu3P6t\",\n \"DHhzQ4XaQkpXHBVSM1qmNh8T7pWjZ6vHeZWjSzLBqbwU\",\n \"DERw3jQdudf5ERmjfHGeFNpeoeXXnrBy7Rzofh1AQ7oX\",\n \"G1a8AMjZxe8dgEWHtACYUAE57yCPMpicqSuhisKg3JdW\",\n \"3kPMghNwPKHjHBiQryEA6PQtgCvF8wvCBUxffgZ85WRU\",\n \"28pc96THM9gBmqTTebTfYJQYZYABNpSg9hvQiJXLAJqK\",\n \"E65m6nHeLRJCrNotrbxchJ2QWyFKk1VufpAzCaJURiCx\",\n \"3TTFr8TMtwFgtqdPnK1AEjFGtLnA78BWQmgNaVkZm6fB\",\n \"66gioZQQ33jfMdURUZL7TGqEF5r9Dg1R2Ts1d7rGFmpf\",\n \"AeC8UmtYZFahrChpvxkw47eurBkriBn2H8VM8J25ftWv\",\n \"4sDCpMvqSUmLX9aTot6oxsiqCx9Awg67N1MnngmMxkeU\",\n \"2XAZPw1NBR4NmgohfUPfFSvogfk5Xxhzof5AXMc3SD58\",\n \"43vtnTYqtqUf2pJJZjM1x5kqRFVgbrHPYg2mcmC2Wu2P\",\n \"G7YsaPtJSkjoE2H99bg7cGwPs8FBbaYzXDWvB5GSGYA5\",\n \"BqBuXegd652pnoKkWs6TiuEhQFqqmjk1ZbXK8xeq8a9j\",\n \"HHj19rm6krfPDcSuhEPQ8AU2WgojSUHyawqhWMEdngDL\",\n \"6xSqpiCfZNWTwqGvv9g3HDVxzwn3dZwkXrx6kWi3cfpf\",\n \"E6xfp4k1MYf3oCtHmZ3LNiKRxyAp2KcFkAH4PSiZLYr6\",\n \"DGPvgr2VXoFfKdVZTtXoEWmCok7qgZ6x3MxFaQGDvRhx\",\n \"95N8iJJDaWovPo8CfJnWGXzLA8AaBLfkWMPJW2B1dd9y\",\n \"AgALkqDLwYnr8ayWcuCbCECCjAnQ4YrnLgTfmvpz8yTE\",\n \"8jA5HuSV7Vt1sASNbpQcHt3XTZzBMEQGYyABgQXRhwoS\",\n \"ADao4V5EfyFFifVefnhUSQNHCgsQ4ECJsnnwfSVwL7uY\",\n \"2FdwgA2A6ejfffHfXv1bw1Z2A18W6h3Rtmr6zWJ486re\",\n \"9p5waT7MmYxFsX5VyYfJWaE13ZVtUuTKmpR1Ab9ui1cp\",\n \"2knTCogpPQN7BCVcsSuHJ3byR3VpGMEtt2Xe51Exspzx\",\n \"GKiJSyJjCfcyUEPsjSXW7hx3VQMsuMuSQ1vhchaQA8e4\",\n \"5repsTMHGRgf5txzz5vmhLSx9SRoKEHcrqJ2egnZwaaG\",\n \"C9LJ1wVv9cweUoP2pye7biHsfUHKfkEb2DmLF93J5HHe\",\n \"GhwyLGgZKr3VtgfNz97WxRdmH5Xb2SPPc4PYZi7rNpdD\",\n \"9BcaoGM343XvJqkUAi1iAv4A6X4i8TU98tYK6YszEB6s\",\n \"334TEm3GTM1VVxfP6XR1R33rhEzXAEUVyL4QLizyidYM\",\n \"4X6Y3DajXhNdW9oAQZQSBcjSP3DBkbndvPyfmXhESfNa\",\n \"GshE9yXc1ZmMyZuWPKX8YLJQzp5V9ijHuvkq1YmYvPKJ\",\n \"C53HQgaAgpACdjqZqSrKXvzk4yrrY1QR6bz5xkCrXpwR\",\n \"9xGWRCrn6jsjq3doVsC7NXGyPaDCiWXJyxy772ZuQy3F\",\n \"GSN7sPof2frBswW2SiU2WeE5HyRzBHFqV3UYYKQKs3dw\",\n \"BcmWM9isdUx2eAuwEjdgnvvktA7JwCEKyHQhSKQdiuLY\",\n \"4iQK2E4E6rsq56yciazqY8eaoSWJtNyLNMoogkQAM7PA\",\n \"HKEr2SGTcNSuXaLue5SzUu4ahrRY43rT7skN4uXLAdrW\",\n \"AAUKWtZTUfwCcRtJcy1meQAuuVTHTFT1yWaTWjy9EQ4j\",\n \"2eCNmthjaDFGTQMkrKn55XZzdpWK25WuW7M2CgvKHMdA\",\n \"Hjn1w3zxzXegSrASXZzDJwSCH4wo2UKxckKpzcCATMXb\",\n \"9mfmW88u1pELrdHHjfhxfwtSs9gRAUVQXZeaSv6eoHJ4\",\n \"GiYj7WEEX3nxpBkUGfGzvpMVd5W21LjtrrCPceAZhkpp\",\n \"9rVMfSkXMoMgdMrbdZ9watrUPcvjGyTxBRBpQ7oZKpZ8\",\n \"AUvQnzpAz4fJ9kC9MtPh12NMK2EBMbSLZGMjmfwVXX2\",\n \"7jV7fiiAKpzV9hWZcjWEHmT5Tsr3mHT6op7MhiqLKT1P\",\n \"GB4TjsqagrKCpqxK75MX5P9dRLSmPJxMaVuGAKiEf5PR\",\n \"3wQZBVDp1UgUP3momfXbcgjwud7ToPPDgAWk1g3FHpuz\",\n \"8W8b8HsSwvwkZB9TQNJp4p6HJvFFrHAbW66mgHQGXM8x\",\n \"2GV8G6VbedfD9kAy5ZPyJuKbJHFavFugZssvUR1ht47h\",\n \"Hoidcoi8HhR4reqpnrpLm52ahLCcSbWtoRTx43pAEvBp\",\n \"sekeSrR3WrBxMNm5R2keBaon6ZaCg2aWbbViky3HaSd\",\n \"2bBX6X9Gburgkv5kuN7tpBJhuR9Q8BCHHPNQXtBU1LeA\",\n \"G4njTN5F9TdL5DrCsLZjdSMkBjhcvctD86FQEzBShjs7\",\n \"DycFJtyUcsJK8jivw734uJLAZm5naNpUdJZf9AWnRTTq\",\n \"5G5Q8dJpBGwFwVyXmDcYKC4ceUNs2VqJLd3yFayXymvd\",\n \"GLPw9cTczPGtWb5F45av5b1KoGMKrepzxhv8sNTUAHV3\",\n \"AwAE4LsEgusFvtBg56YmcBiPu9hnDLtT6NixPPijk7pY\",\n \"14nvNBXkq9Q1TAjpuABrmiG1GaRgjxHbxnsVctJJSDH9\",\n \"48bFGPtoP181BdWkQyPz361jvCknMcBf5Y8WC1SDWAcH\",\n \"9RCXArn3gXB45X8ZesCdQp2QRyNWiTnGU7srbefQU4c7\",\n \"812sh16xBjfRq8t8m9vhBEYNj41stKQwaFmiPaJtwzt5\",\n \"5Hep1khjH2LKtfB8orGpq42EeKFw64AbzzaWepY7seu3\",\n \"CDKeAw1vDHf9ZxNYNcAz8LVZ5vFLvnfUmp5i5T9Z7W9N\",\n \"21SLkqydvKCdBtF2Yipm4X2jf8QH4Sw18Gc2QQi22Qqn\",\n];\n","import { Context, createContext, useEffect, useState } from \"react\";\nimport useSolanaContext from \"hooks/useSolanaContext\";\nimport { useAnchorWallet } from \"@solana/wallet-adapter-react\";\nimport getMintAddressesByOwner from \"utils/solana/misc/getMintAddressesByOwner\";\nimport getWhitelist from \"utils/firebase/getWhitelist\";\nimport setWhitelist from \"utils/firebase/setWhitelist\";\n\nimport MintAddresses from \"utils/solana/misc/MintAddresses\";\n\nexport type WhitelistContextData = {\n isWhitelisted: boolean;\n isChecking: boolean;\n};\n\nexport const WhitelistContext: Context =\n createContext({\n isWhitelisted: false,\n isChecking: false,\n });\n\ntype ProviderProps = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any;\n};\n\nexport function WhitelistContextProvider(props: ProviderProps): JSX.Element {\n const [isWhitelisted, setIsWhitelisted] = useState(false);\n const [isChecking, setIsChecking] = useState(false);\n const { connection } = useSolanaContext();\n\n const wallet = useAnchorWallet();\n\n useEffect(() => {\n (async () => {\n if (wallet != null) {\n setIsChecking(true);\n\n const whitelist = await getWhitelist(wallet.publicKey.toString());\n if (whitelist) {\n setIsChecking(false);\n setIsWhitelisted(true);\n }\n const mintAddressesByOwner = await getMintAddressesByOwner(\n connection,\n wallet.publicKey\n );\n const isWhitelist = MintAddresses.some((mintAddress) =>\n mintAddressesByOwner.some((address) => address === mintAddress)\n );\n\n if (isWhitelist) {\n setIsChecking(false);\n setIsWhitelisted(true);\n if (!whitelist) {\n await setWhitelist(wallet.publicKey.toString(), true);\n }\n console.log(\"Whitelisted!\");\n } else {\n if (whitelist) {\n await setWhitelist(wallet.publicKey.toString(), false);\n }\n setIsChecking(false);\n setIsWhitelisted(false);\n }\n } else {\n setIsWhitelisted(false);\n }\n })();\n }, [wallet?.publicKey, connection]);\n\n return (\n \n {props.children}\n \n );\n}\n","import { useContext } from \"react\";\nimport { SolanaContext } from \"context/SolanaContext\";\n\nexport default function useSolanaContext() {\n return useContext(SolanaContext);\n}\n","import { useContext } from \"react\";\nimport { WhitelistContext } from \"context/WhitelistContext\";\n\nexport default function useWhitelistContext() {\n return useContext(WhitelistContext);\n}\n","import { useWalletDialog } from \"@solana/wallet-adapter-material-ui\";\nimport { useAnchorWallet } from \"@solana/wallet-adapter-react\";\nimport ButtonWithText from \"components/buttons/ButtonWithText\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport FontClass from \"types/enums/FontClass\";\nimport useWhitelistContext from \"hooks/useWhitelistContext\";\n\nexport default function ConnectWalletButton(): JSX.Element {\n const wallet = useAnchorWallet();\n const { setOpen } = useWalletDialog();\n const { isChecking } = useWhitelistContext();\n\n if (wallet != null) {\n return (\n window.solana.disconnect()}\n >\n {isChecking ? `Loading...` : `Disconnect`}\n \n );\n }\n\n return (\n setOpen(true)}\n >\n Connect wallet\n \n );\n}\n","import { useEffect, useState } from \"react\";\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window;\n return {\n width,\n height,\n };\n}\n\n// From https://stackoverflow.com/questions/36862334/get-viewport-window-height-in-reactjs\nexport default function useWindowDimensions(): {\n height: number;\n width: number;\n} {\n const [windowDimensions, setWindowDimensions] = useState(\n getWindowDimensions()\n );\n\n useEffect(() => {\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return windowDimensions;\n}\n","import styles from \"css/header/HeaderDesktop.module.css\";\nimport TextButton from \"components/buttons/TextButton\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport Header1 from \"components/text/Header1\";\nimport FontClass from \"types/enums/FontClass\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport ImageWebp from \"components/images/ImageWebp\";\nimport ConnectWalletButton from \"components/buttons/ConnectWalletButton\";\nimport useWindowDimensions from \"hooks/useWindowDimensions\";\n\nexport default function HeaderDesktop(): JSX.Element {\n const { width } = useWindowDimensions();\n\n return (\n \n \n
\n \n \n \n
\n
\n \n Generate\n \n {width > 1280 && (\n \n Shuffle\n \n )}\n \n How it works\n \n \n
\n
\n
\n );\n}\n","import ColorValue from \"types/enums/ColorValue\";\n\ntype Props = {\n colorValue: ColorValue;\n};\n\nexport default function HamburgerIcon({ colorValue }: Props): JSX.Element {\n return (\n \n \n \n \n \n );\n}\n","import ColorValue from \"types/enums/ColorValue\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport HamburgerIcon from \"components/icons/HamburgerIcon\";\nimport PlainButton from \"components/buttons/PlainButton\";\n\ntype Props = {\n colorValue: ColorValue;\n isShown?: boolean;\n onClick?: () => void;\n};\n\nexport default function HamburgerButton({\n colorValue,\n isShown = true,\n onClick,\n}: Props): JSX.Element {\n return (\n \n
\n \n
\n \n );\n}\n","import BackgroundOverlay from \"components/loading/BackgroundOverlay\";\nimport CloseButton from \"components/buttons/CloseButton\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport FontClass from \"types/enums/FontClass\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport TextButton from \"components/buttons/TextButton\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\nimport joinClasses from \"utils/joinClasses\";\nimport styles from \"css/header/MenuMobile.module.css\";\nimport { useState } from \"react\";\nimport OutsideClickHideModal from \"components/modal/OutsideClickHideModal\";\n\nfunction Button({\n children,\n href,\n}: {\n children: string;\n href: string;\n}): JSX.Element {\n return (\n \n {children}\n \n );\n}\n\ntype Props = {\n onHide: () => void;\n};\n\nexport default function MenuMobile({ onHide }: Props): JSX.Element {\n const [slideOutClassName, setSlideOutClassName] = useState(\"\");\n const [backgroundOverlayClassName, setBackgroundOverlayClassName] =\n useState(styles.backgroundOverlayFadeIn);\n\n const onHideWithSlide = () => {\n setBackgroundOverlayClassName(styles.backgroundOverlayFadeOut);\n setSlideOutClassName(styles.slideOut);\n setTimeout(onHide, 600);\n };\n\n return (\n \n
\n \n \n
\n
\n \n \n \n
\n \n
\n \n
\n
\n );\n}\n","import ColorValue from \"types/enums/ColorValue\";\nimport HamburgerButton from \"components/buttons/HamburgerButton\";\nimport MenuMobile from \"components/header/MenuMobile\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport styles from \"css/header/HeaderMobile.module.css\";\nimport { useState } from \"react\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport ImageWebp from \"components/images/ImageWebp\";\n\nexport default function HeaderMobile(): JSX.Element {\n const [isMenuShown, setIsMenuShown] = useState(false);\n\n return (\n <>\n {isMenuShown && setIsMenuShown(false)} />}\n
\n \n
\n \n \n \n \n setIsMenuShown(true)}\n />\n
\n
\n
\n \n );\n}\n","import styles from \"css/header/Header.module.css\";\nimport HeaderDesktop from \"components/header/HeaderDesktop\";\nimport HeaderMobile from \"components/header/HeaderMobile\";\n\nexport default function Header(): JSX.Element {\n return (\n <>\n
\n \n
\n
\n \n
\n \n );\n}\n","import styles from \"css/common/ExplodedAndFinal.module.css\";\nimport joinClasses from \"utils/joinClasses\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport ImageWebp from \"components/images/ImageWebp\";\n\ntype Props = {\n className?: string;\n isExplodedFirst?: boolean;\n theme?: ColorValue.White | ColorValue.PurplePastel;\n};\n\nexport default function ExplodedAndFinal({\n className,\n isExplodedFirst,\n theme = ColorValue.White,\n}: Props): JSX.Element {\n const exploded = (\n \n );\n\n const finalElem = (\n \n );\n\n return (\n
\n {isExplodedFirst ? exploded : finalElem}\n \n \n {isExplodedFirst ? finalElem : exploded}\n
\n );\n}\n","import Header from \"components/header/Header\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport styles from \"css/pages/landing/LandingHeaderAndHero.module.css\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport ButtonWithText from \"components/buttons/ButtonWithText\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport Body1 from \"components/text/Body1\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport ExplodedAndFinal from \"components/common/ExplodedAndFinal\";\nimport ImageWebp from \"components/images/ImageWebp\";\n\nexport default function LandingHeaderAndHero(): JSX.Element {\n return (\n
\n
\n \n
\n

\n generate your NFT collection with no code\n

\n \n \n Get started\n \n \n Nifty Generator lets you randomly generate NFT images with different\n traits, complete with metadata—no coding needed. Just connect your\n image layers to our tool, and we’ll handle the generation!\n \n \n
\n
\n
\n );\n}\n","import styles from \"css/pages/landing/LandingInfo.module.css\";\nimport TextButton from \"components/buttons/TextButton\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport Body1 from \"components/text/Body1\";\nimport Header1 from \"components/text/Header1\";\nimport BackgroundColorClass from \"types/enums/BackgroundColorClass\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport FontClass from \"types/enums/FontClass\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\n\nfunction Link({\n children,\n href,\n}: {\n children: any;\n href: string;\n}): JSX.Element {\n return (\n \n {children}\n \n );\n}\n\nexport default function LandingInfo(): JSX.Element {\n return (\n
\n \n
\n \n From our NFT project, to yours\n \n \n Hi, Kat &{\" \"}\n Matt here! We’re\n builders and creatives, and we made Nifty Generator to help more\n artists start making generative NFTs without having to touch code.\n
\n
\n We’re launching our own NFT project called the{\" \"}\n Mycoverse—our mission is\n to onboard the next 1 million artists into the metaverse. The first\n step is turning our code from the Mycoverse into this free tool for\n creators! And we’re going to keep expanding on Nifty Generator and\n making more awesome tools—because ultimately, our goal is to make it\n easy for more creators to bring their talents into the metaverse.\n
\n
\n You can see some other web3 projects we’ve built for artists and\n creators here:{\" \"}\n Nifty Pixels,{\" \"}\n Nifty Airdrop.\n \n
\n
\n
\n );\n}\n","/* eslint-disable no-redeclare */\n\nexport function range(stop: number, _unused?: undefined): Array;\nexport function range(start: number, stop: number): Array;\nexport function range(stopOrStart: number, stop?: number): Array {\n if (stop == null) {\n // stopOrStart is stop\n return [...Array(stopOrStart).keys()];\n }\n\n // stopOrStart is start\n if (stop <= stopOrStart) {\n return [];\n }\n\n return [...Array(stop - stopOrStart).keys()].map((num) => num + stopOrStart);\n}\n","import Marquee from \"react-fast-marquee\";\nimport styles from \"css/pages/landing/LandingMarquee.module.css\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport Body2 from \"components/text/Body2\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport BackgroundColorClass from \"types/enums/BackgroundColorClass\";\nimport { range } from \"utils/range\";\nimport ImageWebp from \"components/images/ImageWebp\";\n\nconst ELVES = range(10).map((num) => `images/elves/${num + 1}.png`);\n\nfunction MarqueeSection(): JSX.Element {\n return (\n \n {/* Repeat for large screens (to avoid empty space) */}\n {[...ELVES, ...ELVES].map((value, index) => (\n \n ))}\n \n );\n}\n\nexport default function LandingMarquee(): JSX.Element {\n return (\n
\n \n
\n \n
\n \n NFT images created with Nifty Generator for:\n \n \n \n \n
\n
\n
\n
\n );\n}\n","import AmplitudeEvent from \"types/enums/AmplitudeEvent\";\nimport getAmplitude from \"utils/amplitude/getAmplitude\";\nimport { useEffect } from \"react\";\n\nexport default function useLogPageView(props?: { [key: string]: string }) {\n useEffect(() => {\n const amplitude = getAmplitude();\n amplitude.logEvent(AmplitudeEvent.PageView, {\n origin: window.self.origin,\n pathname: window.location.pathname,\n ...props,\n });\n }, [props]);\n}\n","import Footer from \"components/footer/Footer\";\nimport LandingHeaderAndHero from \"components/pages/landing/LandingHeaderAndHero\";\nimport LandingInfo from \"components/pages/landing/LandingInfo\";\nimport LandingMarquee from \"components/pages/landing/LandingMarquee\";\nimport useLogPageView from \"hooks/useLogPageView\";\n\nexport default function LandingPage(): JSX.Element {\n useLogPageView();\n return (\n
\n \n \n \n
\n
\n );\n}\n","import ColorValue from \"types/enums/ColorValue\";\n\ntype Props = {\n colorValue: ColorValue;\n};\n\nexport default function DiscordIcon24({ colorValue }: Props): JSX.Element {\n return (\n \n \n \n );\n}\n","import BackgroundColorClass from \"types/enums/BackgroundColorClass\";\nimport styles from \"css/footer/FooterShort.module.css\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport TextButton from \"components/buttons/TextButton\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\nimport FontClass from \"types/enums/FontClass\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport ContactUsModal from \"components/modal/ContactUsModal\";\nimport { useState } from \"react\";\nimport TwitterIcon24 from \"components/icons/TwitterIcon24\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport DiscordIcon24 from \"components/icons/DiscordIcon24\";\nimport Body2 from \"components/text/Body2\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport ImageWebp from \"components/images/ImageWebp\";\n\nfunction Buttons({\n onClickContactUs,\n}: {\n onClickContactUs: () => void;\n}): JSX.Element {\n return (\n
\n \n Generate\n \n \n Shuffle\n \n \n Contact us\n \n \n How it works\n \n
\n );\n}\n\nexport default function FooterShort(): JSX.Element {\n const [isShown, setIsShown] = useState(false);\n\n return (\n <>\n setIsShown(false)} />\n
\n \n
\n \n \n \n setIsShown(true)} />\n
\n \n \n \n \n \n \n
\n \n a{\" \"}\n \n Mycoverse\n {\" \"}\n project\n \n
\n
\n
\n \n );\n}\n","import GlobalClass from \"types/enums/GlobalClass\";\nimport joinClasses from \"utils/joinClasses\";\nimport styles from \"css/common/ContainerOuter.module.css\";\nimport Header from \"components/header/Header\";\nimport FooterShort from \"components/footer/FooterShort\";\n\ntype Props = {\n children: any;\n showFooter?: boolean;\n};\n\nexport default function ContainerOuter({\n children,\n showFooter = true,\n}: Props): JSX.Element {\n return (\n
\n
\n
\n {children}\n
\n {showFooter && }\n
\n );\n}\n","import styles from \"css/pages/how-it-works/HowItWorksCard.module.css\";\nimport ButtonWithText from \"components/buttons/ButtonWithText\";\nimport Body1 from \"components/text/Body1\";\nimport Header1 from \"components/text/Header1\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport ColorClass from \"types/enums/ColorClass\";\n\ntype Props = {\n backButton?: string;\n backOnClick?: () => void;\n continueButton?: string;\n continueOnClick?: () => void;\n children: any;\n description: string | JSX.Element;\n title: string;\n};\n\nexport default function HowItWorksCard({\n backButton,\n backOnClick,\n continueButton,\n continueOnClick,\n children,\n description,\n title,\n}: Props): JSX.Element {\n return (\n
\n \n {title}\n \n \n {description}\n \n
{children}
\n
\n {backButton != null && (\n \n {backButton}\n \n )}\n {continueButton != null && (\n \n {continueButton}\n \n )}\n
\n
\n );\n}\n","import styles from \"css/pages/how-it-works/HowItWorksPage.module.css\";\nimport { useNavigate } from \"react-router-dom\";\nimport ContainerOuter from \"components/common/ContainerOuter\";\nimport ExplodedAndFinal from \"components/common/ExplodedAndFinal\";\nimport HowItWorksCard from \"components/pages/how-it-works/HowItWorksCard\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport usePrefetch from \"hooks/usePrefetch\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport useLogPageView from \"hooks/useLogPageView\";\n\nfunction Card1({\n continueOnClick,\n}: {\n continueOnClick: () => void;\n}): JSX.Element {\n return (\n \n When you’re making a generative NFT collection, each final image will\n be made out of different traits that can be mixed and matched.\n

\n For instance, this image of an elf is actually made up of 5 image\n layers stacked on top of each other: the cat, the body, the\n expression, the outfit, and the hair.\n \n }\n title=\"Preparing Art Files for Nifty Generator\"\n >\n \n \n );\n}\n\nexport default function HowItWorksPage1(): JSX.Element {\n useLogPageView();\n const navigate = useNavigate();\n usePrefetch(\"/how-it-works/2\");\n\n return (\n \n \n
\n navigate(\"/how-it-works/2\")} />\n
\n
\n
\n );\n}\n","import HowItWorksPage1 from \"components/pages/how-it-works/HowItWorksPage1\";\nimport useLogPageView from \"hooks/useLogPageView\";\n\nexport default function HowItWorksPage(): JSX.Element {\n useLogPageView();\n return ;\n}\n","import FontClass from \"types/enums/FontClass\";\nimport HeaderText from \"components/text/HeaderText\";\nimport type { Props } from \"components/text/HeaderText\";\n\nexport default function Header3(props: Omit) {\n return ;\n}\n","import styles from \"css/pages/how-it-works/ExplodedWithDescription.module.css\";\nimport joinClasses from \"utils/joinClasses\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport Header3 from \"components/text/Header3\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport Body1 from \"components/text/Body1\";\nimport ImageWebp from \"components/images/ImageWebp\";\n\nconst DESCRIPTIONS = [\n {\n description:\n \"Short Purple Hair, Long Purple Hair, Short Green Hair, Long Green Hair\",\n title: \"Hair Layer\",\n },\n {\n description: \"Fanny Pack Shirt, Basic Shirt, Fancy Shirt\",\n title: \"Outfit Layer\",\n },\n {\n description: \"Shy, Happy, Sad\",\n title: \"Expression Layer\",\n },\n {\n description: \"Brown, Green, Purple\",\n title: \"Body Layer\",\n },\n {\n description: \"Cat, Dog\",\n title: \"Pet Layer\",\n },\n];\n\nfunction DescriptionItem({\n description,\n title,\n}: {\n description: string;\n title: string;\n}): JSX.Element {\n return (\n
\n \n {title}\n \n {description}\n
\n );\n}\n\ntype Props = {\n className?: string;\n theme?: ColorValue.White | ColorValue.PurplePastel;\n};\n\nexport default function ExplodedWithDescription({\n className,\n theme = ColorValue.White,\n}: Props): JSX.Element {\n const exploded = (\n \n );\n\n const descriptions = (\n
\n {DESCRIPTIONS.map(({ description, title }) => (\n \n ))}\n
\n );\n\n return (\n
\n {exploded}\n {descriptions}\n
\n );\n}\n","import styles from \"css/pages/how-it-works/HowItWorksPage.module.css\";\nimport { useNavigate } from \"react-router-dom\";\nimport ContainerOuter from \"components/common/ContainerOuter\";\nimport ExplodedWithDescription from \"components/pages/how-it-works/ExplodedWithDescription\";\nimport HowItWorksCard from \"components/pages/how-it-works/HowItWorksCard\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport usePrefetch from \"hooks/usePrefetch\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport useLogPageView from \"hooks/useLogPageView\";\n\nfunction Card2({\n backOnClick,\n continueOnClick,\n}: {\n backOnClick: () => void;\n continueOnClick: () => void;\n}): JSX.Element {\n return (\n \n Each layer in the image represents a trait (Hair, Outfit, etc), and\n each trait will have many variants (Short Purple Hair, Long Purple\n Hair, etc).\n
\n
\n Draw each variant on a transparent .PNG file so all the layers will be\n visible. Each image should be the same size.\n
\n
\n GIF files are also supported! If you use GIFs, make sure each GIF has\n the same number of frames.\n \n }\n title=\"Image Layering\"\n >\n \n \n );\n}\n\nexport default function HowItWorksPage2(): JSX.Element {\n useLogPageView();\n const navigate = useNavigate();\n usePrefetch(\"/how-it-works/1\");\n usePrefetch(\"/how-it-works/3\");\n\n return (\n \n \n
\n navigate(\"/how-it-works/1\")}\n continueOnClick={() => navigate(\"/how-it-works/3\")}\n />\n
\n
\n
\n );\n}\n","import styles from \"css/pages/how-it-works/HowItWorksPage.module.css\";\nimport { useNavigate } from \"react-router-dom\";\nimport ContainerOuter from \"components/common/ContainerOuter\";\nimport HowItWorksCard from \"components/pages/how-it-works/HowItWorksCard\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport Body2 from \"components/text/Body2\";\nimport usePrefetch from \"hooks/usePrefetch\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport ImageWebp from \"components/images/ImageWebp\";\nimport useLogPageView from \"hooks/useLogPageView\";\n\nfunction Card3({\n backOnClick,\n continueOnClick,\n}: {\n backOnClick: () => void;\n continueOnClick: () => void;\n}): JSX.Element {\n return (\n \n \n \n \n Each of these sub-folders should contain all the variants of each trait\n (for example, the Pet folder would have the .PNG files for the Cat and\n the Dog variants).\n \n \n );\n}\n\nexport default function HowItWorksPage3(): JSX.Element {\n useLogPageView();\n const navigate = useNavigate();\n usePrefetch(\"/generate\");\n usePrefetch(\"/how-it-works/2\");\n\n return (\n \n \n
\n navigate(\"/how-it-works/2\")}\n continueOnClick={() => navigate(\"/generate\")}\n />\n
\n
\n
\n );\n}\n","enum Blockchain {\n Ethereum = \"Ethereum\",\n Solana = \"Solana\",\n}\n\nexport default Blockchain;\n","const DS_STORE = \".DS_Store\";\nexport default DS_STORE;\n","enum LocalStorageKey {\n AllProjectIds = \"all_project_ids\",\n Blockchain = \"blockchain\",\n Files = \"files\",\n FileRelativePaths = \"file_relative_paths\",\n GenerateMetadata = \"generate_metadata\",\n MetaCollectionFamily = \"meta_collection_family\",\n MetaCollectionName = \"meta_collection_name\",\n MetaDescription = \"meta_description\",\n MetaExternalUrl = \"meta_external_url\",\n MetaName = \"meta_name\",\n MetaRoyalties = \"meta_royalties\",\n MetaSellerFeeBasisPoints = \"meta_seller_fee_basis_points\",\n MetaSymbol = \"meta_symbol\",\n NumImages = \"num_images\",\n ProjectId = \"project_id\",\n ProjectName = \"project_name\",\n TraitNamesOrdered = \"trait_names_ordered\",\n TraitWeights = \"trait_weights\",\n}\n\nexport default LocalStorageKey;\n","import { get } from \"idb-keyval\";\nimport LocalStorageKey from \"types/enums/LocalStorageKey\";\nimport prefixKeyWithProjectId from \"utils/local-storage/prefixKeyWithProjectId\";\n\nexport default async function getLocalStorage(\n key: LocalStorageKey,\n projectId?: string\n): Promise {\n if (\n [LocalStorageKey.AllProjectIds, LocalStorageKey.ProjectId].includes(key)\n ) {\n return get(key);\n }\n\n const prefixedKey = await prefixKeyWithProjectId(key, projectId);\n return get(prefixedKey);\n}\n","import LocalStorageKey from \"types/enums/LocalStorageKey\";\nimport getLocalStorage from \"utils/local-storage/getLocalStorage\";\nimport invariant from \"tiny-invariant\";\n\nexport default async function prefixKeyWithProjectId(\n key: string,\n projectId?: string\n): Promise {\n // eslint-disable-next-line no-param-reassign\n projectId =\n projectId == null\n ? await getLocalStorage(LocalStorageKey.ProjectId)\n : projectId;\n invariant(projectId != null, \"Must be true\");\n return `${projectId}-${key}`;\n}\n","import { set } from \"idb-keyval\";\nimport LocalStorageKey from \"types/enums/LocalStorageKey\";\nimport prefixKeyWithProjectId from \"utils/local-storage/prefixKeyWithProjectId\";\n\nexport default async function setLocalStorage(\n key: LocalStorageKey,\n val: any\n): Promise {\n const prefixedKey = await prefixKeyWithProjectId(key);\n await set(prefixedKey, val);\n}\n","import LocalStorageKey from \"types/enums/LocalStorageKey\";\nimport setLocalStorage from \"utils/local-storage/setLocalStorage\";\n\nexport default function setStateLocalStorageWrapper(\n setState: (val: T) => void,\n localStorageKey: LocalStorageKey\n): (val: T) => void {\n return (val: T) => {\n setLocalStorage(localStorageKey, val);\n setState(val);\n };\n}\n","import { update } from \"idb-keyval\";\nimport LocalStorageKey from \"types/enums/LocalStorageKey\";\n\nexport default async function addLocalStorageProjectId(\n projectId: string\n): Promise {\n await update(LocalStorageKey.AllProjectIds, (currProjectIds) => [\n ...(currProjectIds ?? []),\n projectId,\n ]);\n}\n","import { set } from \"idb-keyval\";\nimport LocalStorageKey from \"types/enums/LocalStorageKey\";\n\nexport default async function setLocalStorageProjectId(\n val: string\n): Promise {\n await set(LocalStorageKey.ProjectId, val);\n}\n","import { getMany } from \"idb-keyval\";\nimport LocalStorageKey from \"types/enums/LocalStorageKey\";\nimport getLocalStorage from \"utils/local-storage/getLocalStorage\";\nimport prefixKeyWithProjectId from \"utils/local-storage/prefixKeyWithProjectId\";\n\nexport default async function getManyLocalStorage(\n keys: Array\n): Promise> {\n const projectId = await getLocalStorage(LocalStorageKey.ProjectId);\n if (projectId == null) {\n return keys.map((_) => null);\n }\n\n const prefixedKeys = await Promise.all(\n keys.map((key) => {\n if (\n [LocalStorageKey.AllProjectIds, LocalStorageKey.ProjectId].includes(key)\n ) {\n return key;\n }\n return prefixKeyWithProjectId(key, projectId);\n })\n );\n\n return getMany(prefixedKeys);\n}\n","import LocalStorageKey from \"types/enums/LocalStorageKey\";\nimport getManyLocalStorage from \"utils/local-storage/getManyLocalStorage\";\nimport logIfNotProd from \"utils/logIfNotProd\";\n\n/**\n * For debugging.\n */\nexport default async function printLocalStorageInfo(): Promise {\n const [\n allProjectIds,\n projectId,\n blockchain,\n files,\n fileRelativePaths,\n generateMetadata,\n numImages,\n metaDescription,\n metaName,\n projectName,\n traitNamesOrdered,\n traitWeights,\n ] = await getManyLocalStorage([\n LocalStorageKey.AllProjectIds,\n LocalStorageKey.ProjectId,\n LocalStorageKey.Blockchain,\n LocalStorageKey.Files,\n LocalStorageKey.FileRelativePaths,\n LocalStorageKey.GenerateMetadata,\n LocalStorageKey.NumImages,\n LocalStorageKey.MetaDescription,\n LocalStorageKey.MetaName,\n LocalStorageKey.ProjectName,\n LocalStorageKey.TraitNamesOrdered,\n LocalStorageKey.TraitWeights,\n ]);\n\n logIfNotProd(\"=============================================\");\n logIfNotProd(`PROJECT ID: ${projectId}`);\n logIfNotProd(`allProjectIds: ${allProjectIds}`);\n logIfNotProd(`blockchain: ${blockchain}`);\n logIfNotProd(`files: ${files}`);\n logIfNotProd(`fileRelativePaths: ${fileRelativePaths}`);\n logIfNotProd(`generateMetadata: ${generateMetadata}`);\n logIfNotProd(`numImages: ${numImages}`);\n logIfNotProd(`metaDescription: ${metaDescription}`);\n logIfNotProd(`metaName: ${metaName}`);\n logIfNotProd(`projectName: ${projectName}`);\n logIfNotProd(`traitNamesOrdered: ${traitNamesOrdered}`);\n logIfNotProd(`traitWeights: ${traitWeights}`);\n logIfNotProd(\"=============================================\");\n}\n","import { setMany } from \"idb-keyval\";\nimport LocalStorageKey from \"types/enums/LocalStorageKey\";\nimport getLocalStorage from \"utils/local-storage/getLocalStorage\";\nimport prefixKeyWithProjectId from \"utils/local-storage/prefixKeyWithProjectId\";\n\nexport default async function setManyLocalStorage(\n keys: Array,\n values: Array,\n projectId?: string\n): Promise {\n // eslint-disable-next-line no-param-reassign\n projectId =\n projectId == null\n ? await getLocalStorage(LocalStorageKey.ProjectId)\n : projectId;\n const prefixedKeys = await Promise.all(\n keys.map((key) => {\n if (\n [LocalStorageKey.AllProjectIds, LocalStorageKey.ProjectId].includes(key)\n ) {\n return key;\n }\n return prefixKeyWithProjectId(key, projectId);\n })\n );\n\n await setMany(prefixedKeys.map((key, index) => [key, values[index]]));\n}\n","/**\n * These should be ordered in the order they appear in the UI.\n */\nenum GenerateStep {\n BasicInfo = \"Basic Info\",\n Metadata = \"Metadata\",\n LayerOrdering = \"Layer Ordering\",\n TraitAllocation = \"Trait Allocation\",\n Generation = \"Generation\",\n}\n\nexport default GenerateStep;\n","import ColorValue from \"types/enums/ColorValue\";\nimport joinClasses from \"utils/joinClasses\";\nimport styles from \"css/loading/LoadingSpinner.module.css\";\n\nconst COLOR_MAP = {\n [ColorValue.Navy]: styles.skCircleNavy,\n [ColorValue.Purple]: styles.skCirclePurple,\n [ColorValue.White]: styles.skCircleWhite,\n};\n\ntype Props = {\n className?: string;\n colorValue?: keyof typeof COLOR_MAP;\n height?: number;\n width?: number;\n};\n\nexport default function LoadingSpinner({\n className,\n colorValue = ColorValue.Navy,\n height = 40,\n width = 40,\n}: Props): JSX.Element {\n const colorClassName = COLOR_MAP[colorValue];\n\n return (\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n );\n}\n","import GenerateStep from \"types/enums/GenerateStep\";\n\nexport default function getGenerateStepIndex(step: GenerateStep): number {\n return Object.values(GenerateStep).indexOf(step);\n}\n","import GenerateStep from \"types/enums/GenerateStep\";\n\nexport default function getGenerateStepHref(\n generateStep: GenerateStep\n): string {\n switch (generateStep) {\n case GenerateStep.BasicInfo:\n return \"/generate/basic-info\";\n case GenerateStep.Metadata:\n return \"/generate/metadata\";\n case GenerateStep.LayerOrdering:\n return \"/generate/layer-ordering\";\n case GenerateStep.TraitAllocation:\n return \"/generate/trait-allocation\";\n case GenerateStep.Generation:\n return \"/generate/generation\";\n default:\n throw new Error(\"should not reach\");\n }\n}\n","import useGenerateStep from \"hooks/useGenerateStep\";\nimport { Link } from \"react-router-dom\";\nimport styles from \"css/pages/generate/GenerateSteps.module.css\";\nimport joinClasses from \"utils/joinClasses\";\nimport BackgroundColorClass from \"types/enums/BackgroundColorClass\";\nimport Body2 from \"components/text/Body2\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport GenerateStep from \"types/enums/GenerateStep\";\nimport getGenerateStepIndex from \"utils/getGenerateStepIndex\";\nimport getGenerateStepHref from \"utils/getGenerateStepHref\";\n\nfunction Circle({ isFilled }: { isFilled: boolean }): JSX.Element {\n return (\n \n );\n}\n\nfunction Item({\n href,\n isFilled,\n name,\n}: {\n href: string;\n isFilled: boolean;\n name: string;\n}): JSX.Element {\n return (\n \n
\n \n {name}\n \n \n
\n \n );\n}\n\nexport default function GenerateSteps(): JSX.Element {\n const currentStep = useGenerateStep();\n\n const items = Object.values(GenerateStep).map((step) => (\n = getGenerateStepIndex(step)}\n key={step}\n name={step}\n />\n ));\n\n return (\n
\n {items}\n
\n
\n );\n}\n","import GenerateStep from \"types/enums/GenerateStep\";\n\nexport default function useGenerateStep(): GenerateStep {\n switch (window.location.pathname) {\n case \"/generate/basic-info\":\n return GenerateStep.BasicInfo;\n case \"/generate/metadata\":\n return GenerateStep.Metadata;\n case \"/generate/layer-ordering\":\n return GenerateStep.LayerOrdering;\n case \"/generate/trait-allocation\":\n return GenerateStep.TraitAllocation;\n case \"/generate/generation\":\n return GenerateStep.Generation;\n default:\n return GenerateStep.BasicInfo;\n }\n}\n","import styles from \"css/common/GenerateStepsContainer.module.css\";\nimport TextButton from \"components/buttons/TextButton\";\nimport LoadingSpinner from \"components/loading/LoadingSpinner\";\nimport GenerateSteps from \"components/pages/generate/GenerateSteps\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport Body1 from \"components/text/Body1\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport FontClass from \"types/enums/FontClass\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\n\nfunction NoProject(): JSX.Element {\n return (\n \n Please{\" \"}\n \n create a project\n \n .\n \n );\n}\n\ntype Props = {\n children: any;\n};\n\nexport default function GenerateStepsContainer({\n children,\n}: Props): JSX.Element {\n const { projectId } = useGenerateConfigContext();\n\n const noProject = ;\n const content = (\n <>\n \n
{children}
\n \n );\n const loading = (\n <>\n \n \n \n );\n\n return (\n \n
\n {projectId === undefined\n ? loading\n : projectId == null\n ? noProject\n : content}\n
\n
\n );\n}\n","import ColorValue from \"types/enums/ColorValue\";\n\ntype Props = {\n colorValue: ColorValue;\n};\n\nexport default function LayersIcon({ colorValue }: Props): JSX.Element {\n return (\n \n \n \n \n \n );\n}\n","import ColorValue from \"types/enums/ColorValue\";\n\ntype Props = {\n colorValue: ColorValue;\n};\n\nexport default function SearchIcon({ colorValue }: Props): JSX.Element {\n return (\n \n \n \n \n );\n}\n","import PIXEL_ART_MAX_SIZE from \"constants/PixelArtMaxSize\";\nimport Dimensions from \"types/Dimensions\";\n\nexport default function isPixelArt(dimensions: Dimensions): boolean {\n return (\n dimensions.width <= PIXEL_ART_MAX_SIZE &&\n dimensions.height <= PIXEL_ART_MAX_SIZE\n );\n}\n","const PIXEL_ART_MAX_SIZE = 100;\nexport default PIXEL_ART_MAX_SIZE;\n","import GenericModal from \"components/modal/GenericModal\";\nimport styles from \"css/modal/ImageModal.module.css\";\nimport joinClasses from \"utils/joinClasses\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\nimport isPixelArt from \"utils/isPixelArt\";\n\ntype Props = {\n isShown: boolean;\n onHide: () => void;\n src: string;\n};\n\nexport default function ImageModal({\n isShown,\n onHide,\n src,\n}: Props): JSX.Element {\n const { fileDimensions } = useGenerateConfigContext();\n\n return (\n \n \n \n );\n}\n","import GenericModal from \"components/modal/GenericModal\";\nimport styles from \"css/modal/MetadataModal.module.css\";\nimport Metadata from \"types/Metadata\";\n\ntype Props = {\n isShown: boolean;\n metadata: Metadata;\n onHide: () => void;\n};\n\nexport default function MetadataModal({\n isShown,\n metadata,\n onHide,\n}: Props): JSX.Element {\n return (\n \n
{JSON.stringify(metadata, null, 2)}
\n
\n );\n}\n","import BodyText from \"components/text/BodyText\";\nimport FontClass from \"types/enums/FontClass\";\nimport type { Props } from \"components/text/BodyText\";\n\nexport default function QuestionText(props: Omit) {\n return ;\n}\n","import { TraitWeights } from \"context/GenerateConfigContext\";\nimport logIfNotProd from \"utils/logIfNotProd\";\n\nexport default function isTraitWeightsValid(\n weights: TraitWeights,\n numImages: number,\n numTraits: number\n): boolean {\n if (weights.size !== numTraits) {\n logIfNotProd(\"trait weights invalid 1\", weights, numImages, numTraits);\n return false;\n }\n\n for (const traitWeights of [...weights.values()]) {\n const sum = [...traitWeights.values()].reduce(\n (acc, currVal) => acc + currVal,\n 0\n );\n\n if (sum !== numImages) {\n logIfNotProd(\n \"trait weights invalid 2\",\n weights,\n numImages,\n numTraits,\n sum\n );\n return false;\n }\n }\n\n return true;\n}\n","export default function numberWithCommas(x: number) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n","const DATA_URI_GIF_PREFIX = \"data:image/gif;base64,\";\n\nexport default DATA_URI_GIF_PREFIX;\n","import DATA_URI_GIF_PREFIX from \"constants/DataUriGifPrefix\";\n\nexport default function isDataUriGif(uri: string): boolean {\n return uri.includes(DATA_URI_GIF_PREFIX);\n}\n","import GenericModal from \"components/modal/GenericModal\";\nimport styles from \"css/modal/JoinDiscordModal.module.css\";\nimport Body1 from \"components/text/Body1\";\nimport ButtonWithText from \"components/buttons/ButtonWithText\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport TextButton from \"components/buttons/TextButton\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\nimport FontClass from \"types/enums/FontClass\";\nimport DiscordIcon24 from \"components/icons/DiscordIcon24\";\nimport ColorValue from \"types/enums/ColorValue\";\n\nimport LoadingSpinner from \"components/loading/LoadingSpinner\";\n\ntype Props = {\n isLoading: boolean;\n isShown: boolean;\n onClick: () => void;\n onHide: () => void;\n};\n\nexport default function JoinDiscordModal({\n isLoading,\n isShown,\n onClick,\n onHide,\n}: Props): JSX.Element {\n return (\n \n
\n \n If you're trying out Nifty Generator, we'd love to have you\n join our Discord! It'll give you a direct line of communication\n with us so that you can share your feedback, request new features, or\n report issues.\n \n \n {isLoading ? (\n \n ) : (\n \"Download files\"\n )}\n \n }\n type=\"link_external\"\n >\n Join Discord\n \n
\n
\n );\n}\n","import styles from \"css/hoc/ElementMobileNotSupported.module.css\";\nimport ContainerOuter from \"components/common/ContainerOuter\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport Body1 from \"components/text/Body1\";\nimport ColorClass from \"types/enums/ColorClass\";\n\ntype Props = {\n children: any;\n};\n\nexport default function ElementMobileNotSupported({\n children,\n}: Props): JSX.Element {\n return (\n <>\n
\n \n \n \n NFT generation is not supported on mobile 😢 Please try on a\n desktop computer.\n \n \n \n
\n
{children}
\n \n );\n}\n","import styles from \"css/pages/generate/generation/GenerationPage.module.css\";\nimport JSZip from \"jszip\";\nimport { useEffect, useState } from \"react\";\nimport ButtonWithText from \"components/buttons/ButtonWithText\";\nimport PlainButton from \"components/buttons/PlainButton\";\nimport ContainerOuter from \"components/common/ContainerOuter\";\nimport GenerateStepsContainer from \"components/common/GenerateStepsContainer\";\nimport LayersIcon from \"components/icons/LayersIcon\";\nimport SearchIcon from \"components/icons/SearchIcon\";\nimport ImageModal from \"components/modal/ImageModal\";\nimport MetadataModal from \"components/modal/MetadataModal\";\nimport QuestionText from \"components/text/QuestionText\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport FontClass from \"types/enums/FontClass\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport Metadata from \"types/Metadata\";\nimport isTraitWeightsValid from \"utils/isTraitWeightsValid\";\nimport joinClasses from \"utils/joinClasses\";\nimport numberWithCommas from \"utils/numberWithCommas\";\nimport { saveAs } from \"file-saver\";\nimport getDataFromDataUri from \"utils/getDataFromDataUri\";\nimport isPixelArt from \"utils/isPixelArt\";\nimport Body2 from \"components/text/Body2\";\nimport isDataUriGif from \"utils/isDataUriGif\";\nimport JoinDiscordModal from \"components/modal/JoinDiscordModal\";\nimport ElementMobileNotSupported from \"components/hoc/ElementMobileNotSupported\";\nimport useLogPageView from \"hooks/useLogPageView\";\nimport logIfNotProd from \"utils/logIfNotProd\";\nimport useWhitelistContext from \"hooks/useWhitelistContext\";\nimport Blockchain from \"types/enums/Blockchain\";\n\nexport const DL_BATCH_SIZE = 500;\nexport const BATCH_SIZE = 1000;\nconst PAGE_SIZE = 100;\n\nfunction InvalidConfig(): JSX.Element {\n return (\n \n Please fill out all required info before trying to generate images.\n \n );\n}\n\nfunction NotWhitelisted(): JSX.Element {\n return (\n \n You must own a Mycoverse NFT to use premium features (generate >1000\n images, GIF support, shuffle tool). If you own one, connect your wallet!\n \n );\n}\n\nfunction isNumImagesAndGifAllowed(\n isWhitelisted: boolean,\n numImages: number,\n files?: File[]\n) {\n return (\n !isWhitelisted &&\n (numImages > 1000 || files?.some((file) => file.type === \"image/gif\"))\n );\n}\n\nfunction GridItem({\n metadata,\n src,\n}: {\n metadata: Metadata;\n src: string;\n}): JSX.Element {\n const [imageModalShown, setIsImageModelShown] = useState(false);\n const [metadataModalShown, setIsMetadataModelShown] = useState(false);\n const { fileDimensions } = useGenerateConfigContext();\n\n return (\n <>\n setIsImageModelShown(false)}\n src={src}\n />\n setIsMetadataModelShown(false)}\n />\n
\n \n
\n setIsImageModelShown(true)}\n >\n \n Expand\n \n setIsMetadataModelShown(true)}\n >\n \n Metadata\n \n
\n
\n \n );\n}\n\nfunction ValidConfig(): JSX.Element {\n const {\n blockchain,\n files,\n generateImages,\n generatedImagesAndMetadata,\n isDoneGenerating,\n numImages,\n seenLayers,\n setIsDoneGenerating,\n } = useGenerateConfigContext();\n const { isWhitelisted } = useWhitelistContext();\n useEffect(() => {\n async function run() {\n setIsDoneGenerating(false);\n // Pass in empty array to reset after client-side nav.\n await generateImages([]);\n }\n\n if (\n !isNumImagesAndGifAllowed(isWhitelisted, numImages, files as File[]) ||\n isWhitelisted\n ) {\n run();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [numImages]);\n const [shownLimit, setShownLimit] = useState(PAGE_SIZE);\n const [isDownloading, setIsDownloading] = useState(false);\n const [isModalShown, setIsModalShown] = useState(false);\n\n const onDownload = async () => {\n setIsDownloading(true);\n\n const blockchainInc = blockchain === Blockchain.Ethereum ? 1 : 0;\n let zip = new JSZip();\n let imagesFolder = zip.folder(\"images\");\n let metadataFolder = zip.folder(\"metadata\");\n let firstIndex = 0;\n let inc = 0;\n\n if (seenLayers.length === numImages) {\n if (numImages > BATCH_SIZE) {\n // Two scenarios: one where numImages % BATCH_SIZE is zero and one where it is nonzero.\n //\n // First scenario example: if BATCH_SIZE is 10 and we have seen all 45 images so far, inc is 40.\n //\n // Second scenario example: if BATCH_SIZE is 10 and we have seen all 50 images so far, inc is also 40.\n const numLeft =\n numImages - Math.floor(numImages / BATCH_SIZE) * BATCH_SIZE;\n inc = numLeft > 0 ? numImages - numLeft : numImages - BATCH_SIZE;\n } else {\n inc = 0;\n }\n } else if (seenLayers.length >= BATCH_SIZE) {\n // E.g. if BATCH_SIZE is 10 and we have seen 40 images so far, inc is 30.\n inc = seenLayers.length - BATCH_SIZE;\n }\n\n for (const [index, entry] of generatedImagesAndMetadata.entries()) {\n const format = isDataUriGif(entry.dataUri) ? \"gif\" : \"png\";\n imagesFolder!.file(\n `${index + inc + blockchainInc}.${format}`,\n getDataFromDataUri(entry.dataUri),\n {\n base64: true,\n }\n );\n metadataFolder!.file(\n `${index + inc + blockchainInc}.json`,\n JSON.stringify(entry.metadata, null, 2)\n );\n\n if (index !== 0 && index % DL_BATCH_SIZE === 0) {\n // eslint-disable-next-line no-await-in-loop\n const generated = await zip.generateAsync({ type: \"blob\" });\n saveAs(\n generated,\n `nfts${firstIndex + inc + blockchainInc}-${\n index + inc + blockchainInc\n }.zip`\n );\n firstIndex = index + 1;\n\n zip = new JSZip();\n imagesFolder = zip.folder(\"images\");\n metadataFolder = zip.folder(\"metadata\");\n }\n }\n\n if (firstIndex !== generatedImagesAndMetadata.length) {\n const generated = await zip.generateAsync({ type: \"blob\" });\n saveAs(\n generated,\n `nfts${firstIndex + inc + blockchainInc}-${\n generatedImagesAndMetadata.length - 1 + inc + blockchainInc\n }.zip`\n );\n setIsDownloading(false);\n }\n };\n\n let status = \"\";\n if (isDoneGenerating) {\n if (seenLayers.length < numImages) {\n status = `Done! Since duplicates were removed, less than ${numImages} images were generated`;\n } else {\n status = \"Done!\";\n }\n } else {\n status = \"Generating images...\";\n }\n\n return (\n <>\n setIsModalShown(false)}\n />\n
\n \n {status}\n \n \n {numberWithCommas(seenLayers.length)} / {numberWithCommas(numImages)}\n \n \n Note: duplicates are removed automatically.\n
\n Note: please refresh to re-generate.\n \n {\n setIsModalShown(true);\n }}\n >\n Download images & metadata\n \n {\n await generateImages(seenLayers);\n }}\n >\n Generate next batch\n \n
\n {generatedImagesAndMetadata\n .slice(0, shownLimit)\n .map(({ dataUri, metadata }, index) => (\n \n ))}\n
\n {generatedImagesAndMetadata.length >= shownLimit && (\n setShownLimit((curr) => curr + PAGE_SIZE)}\n >\n View More\n \n )}\n
\n \n );\n}\n\nexport default function GenerationPage(): JSX.Element {\n useLogPageView();\n const {\n files,\n filesMap,\n filesMapDependent,\n numImages,\n traitNamesOrdered,\n traitWeights,\n } = useGenerateConfigContext();\n const { isWhitelisted } = useWhitelistContext();\n let body = ;\n\n const isInvalid =\n filesMap == null ||\n filesMapDependent == null ||\n traitNamesOrdered == null ||\n !isTraitWeightsValid(traitWeights, numImages, traitNamesOrdered.length);\n\n if (isNumImagesAndGifAllowed(isWhitelisted, numImages, files as File[])) {\n body = ;\n }\n\n if (isInvalid) {\n logIfNotProd(\n \"invalid\",\n filesMap,\n filesMapDependent,\n traitNamesOrdered,\n traitNamesOrdered != null\n ? isTraitWeightsValid(traitWeights, numImages, traitNamesOrdered.length)\n : \"traitNamesOrdered is null\"\n );\n body = ;\n }\n\n return (\n \n \n {body}\n \n \n );\n}\n","import DATA_URI_GIF_PREFIX from \"constants/DataUriGifPrefix\";\nimport DATA_URI_PNG_PREFIX from \"constants/DataUriPngPrefix\";\nimport isDataUriGif from \"utils/isDataUriGif\";\n\nexport default function getDataFromDataUri(dataUri: string): string {\n if (isDataUriGif(dataUri)) {\n return dataUri.replace(DATA_URI_GIF_PREFIX, \"\");\n }\n return dataUri.replace(DATA_URI_PNG_PREFIX, \"\");\n}\n","const DATA_URI_PNG_PREFIX = \"data:image/png;base64,\";\n\nexport default DATA_URI_PNG_PREFIX;\n","import Blockchain from \"types/enums/Blockchain\";\nimport SolanaMetadata from \"types/SolanaMetadata\";\nimport invariant from \"tiny-invariant\";\n\n/**\n * It's convenient to name folders like 0-Background, 1-Expression, etc. so that they're\n * automatically put in the right order.\n *\n * But, we don't want the \"#-\" to be part of the trait type in the metadata. So this gets\n * rid of that.\n */\nfunction formatTraitType(traitType: string): string {\n return traitType.replace(/^\\d-/, \"\");\n}\n\n// Should adhere to https://docs.opensea.io/docs/metadata-standards\nfunction forEth(\n id: number,\n description: string,\n name: string,\n traits: Array<{ traitName: string; traitValue: string }>\n) {\n const metadata = {\n attributes: [] as Array<{ trait_type: string; value: string }>,\n description,\n edition: id + 1,\n // 1-indexed\n name: `${name} #${id + 1}`,\n };\n\n traits.forEach((trait) => {\n metadata.attributes.push({\n trait_type: formatTraitType(trait.traitName),\n value: trait.traitValue.replace(/.png|.gif/g, \"\"),\n });\n });\n\n return metadata;\n}\n\n// Should adhere to https://docs.metaplex.com/nft-standardv\n// TODO: should make this more customizable, a lot of it is hardcoded\nfunction forSolana(\n id: number,\n description: string,\n name: string,\n traits: Array<{ traitName: string; traitValue: string }>,\n fileType: \"png\" | \"gif\",\n solanaMetadata: SolanaMetadata\n) {\n const metadata = {\n attributes: [] as Array<{ trait_type: string; value: string }>,\n collection: {\n name: solanaMetadata.collectionName,\n family: solanaMetadata.collectionFamily,\n },\n description,\n external_url:\n solanaMetadata.externalUrl == null\n ? undefined\n : `${solanaMetadata.externalUrl}`,\n name: `${name} #${id}`,\n // Candy Machine will replace this URI when uploading assets.\n // Image field is required so NFT shows properly on Phantom as per metaplex standard.\n image: `${id}.${fileType}`,\n properties: {\n category: \"image\",\n creators: solanaMetadata.royalties,\n files: [\n {\n // Candy Machine will replace this URI when uploading assets.\n uri: `${id}.${fileType}`,\n type: `image/${fileType}`,\n },\n ],\n },\n seller_fee_basis_points: solanaMetadata.sellerFeeBasisPoints,\n symbol: solanaMetadata.symbol,\n };\n\n traits.forEach((trait) => {\n metadata.attributes.push({\n trait_type: formatTraitType(trait.traitName),\n value: trait.traitValue.replace(/.png|.gif/g, \"\"),\n });\n });\n\n return metadata;\n}\n\nexport default function generateMetadataObject(\n id: number,\n blockchain: Blockchain,\n description: string,\n name: string,\n traits: Array<{ traitName: string; traitValue: string }>,\n fileType: \"png\" | \"gif\",\n solanaMetadata?: SolanaMetadata\n) {\n if (blockchain === Blockchain.Ethereum) {\n return forEth(id, description, name, traits);\n }\n if (blockchain === Blockchain.Solana) {\n invariant(solanaMetadata != null);\n return forSolana(id, description, name, traits, fileType, solanaMetadata);\n }\n throw new Error(`Invalid blockchain: ${blockchain}`);\n}\n","export default function randomNumber(min: number, max: number) {\n return Math.round(Math.random() * (max - min) + min);\n}\n","import { BATCH_SIZE } from \"components/pages/generate/generation/GenerationPage\";\nimport { FilesMapDependent, TraitWeights } from \"context/GenerateConfigContext\";\nimport Blockchain from \"types/enums/Blockchain\";\nimport Metadata from \"types/Metadata\";\nimport SolanaMetadata from \"types/SolanaMetadata\";\nimport generateMetadataObject from \"utils/generateMetadataObject\";\nimport generateSingleImage from \"utils/generateSingleImage\";\nimport isDataUriGif from \"utils/isDataUriGif\";\nimport randomNumber from \"utils/randomNumber\";\n\nfunction arrayRemove(array: Array, start: number): Array {\n array.splice(start, 1);\n return array;\n}\n\nfunction pickRandomIndex(array: Array): number {\n return randomNumber(0, array.length - 1);\n}\n\nfunction existsCombination(\n pickedTraitValues: Array,\n seen: Array>\n): boolean {\n const exists = false;\n for (const [_index, array] of seen.entries()) {\n const isEqual =\n array.length === pickedTraitValues.length &&\n array.every((value, index) => value === pickedTraitValues[index]);\n if (isEqual) {\n return true;\n }\n }\n return exists;\n}\n\nexport default async function generateImages(\n numImages: number,\n filesMap: Map>,\n filesMapDependent: FilesMapDependent,\n traitWeights: TraitWeights,\n traitNamesOrdered: Array,\n blockchain: Blockchain,\n description: string,\n name: string,\n seenLayers: Array>,\n setSeenLayers: (val: Array>) => void,\n newImageCallback: (dataUri: string, metadata: Metadata) => void,\n solanaMetadata?: SolanaMetadata\n): Promise> {\n // This function gets rid of duplicates\n let noMoreMatches = 0;\n const allGenerated: Array = [];\n\n // Map from trait names => [value1, value1, value2, value3, ...]\n const traitWeightsExpanded: Map> = new Map();\n for (const traitName of traitWeights.keys()) {\n const expanded = [];\n for (const traitValue of traitWeights.get(traitName)!.keys()) {\n for (let i = 0; i < traitWeights.get(traitName)!.get(traitValue)!; i++) {\n expanded.push(traitValue);\n }\n }\n traitWeightsExpanded.set(traitName, expanded);\n }\n\n const reversed = [...traitNamesOrdered].reverse();\n\n while (\n noMoreMatches < 20000 &&\n seenLayers.length < numImages &&\n allGenerated.length < BATCH_SIZE\n ) {\n const pickedTraits: Array<{\n traitName: string;\n traitValue: string;\n traitValueIndex: number;\n }> = [];\n\n // For independent files\n for (const traitName of reversed) {\n const traitValues = traitWeightsExpanded.get(traitName)!;\n const traitValueIndex = pickRandomIndex(traitValues);\n const traitValue = traitValues[traitValueIndex];\n pickedTraits.push({ traitName, traitValue, traitValueIndex });\n }\n\n const pickedTraitValues = pickedTraits.map(({ traitValue }) => traitValue);\n\n if (existsCombination(pickedTraitValues, seenLayers)) {\n noMoreMatches++;\n continue;\n }\n\n noMoreMatches = 0;\n setSeenLayers([...seenLayers, pickedTraitValues]);\n seenLayers.push(pickedTraitValues);\n const files: Array = pickedTraits.map(\n ({ traitName, traitValue }) =>\n // Assumes trait values are file names\n filesMap.get(traitName)!.find((file) => file.name === traitValue)!\n );\n const filesCopy = [...files];\n\n // Dependent files\n // Important to sort so that layering order is correct.\n const dependentTraits = [...filesMapDependent.keys()].sort(\n (a, b) =>\n filesMapDependent.get(a)!.layer - filesMapDependent.get(b)!.layer\n );\n for (const dependentTrait of dependentTraits) {\n const dependentEntry = filesMapDependent.get(dependentTrait)!;\n\n const matchingIndex = pickedTraits.findIndex(\n ({ traitName }) => traitName === dependentTrait\n );\n const matchingFile = dependentEntry.files.find(\n (file) => file.name === filesCopy[matchingIndex]!.name\n );\n\n files.splice(dependentEntry.layer, 0, matchingFile ?? null);\n }\n\n // Generate image\n // eslint-disable-next-line no-await-in-loop\n const generated = await generateSingleImage(files);\n const metadata = generateMetadataObject(\n seenLayers.length - 1,\n blockchain,\n description,\n name,\n pickedTraits,\n isDataUriGif(generated) ? \"gif\" : \"png\",\n solanaMetadata\n );\n allGenerated.push(generated);\n newImageCallback(generated, metadata);\n\n // Remove used traits\n for (const pickedTrait of pickedTraits) {\n const currArr = traitWeightsExpanded.get(pickedTrait.traitName)!;\n arrayRemove(currArr, pickedTrait.traitValueIndex);\n traitWeightsExpanded.set(pickedTrait.traitName, currArr);\n }\n }\n\n return allGenerated;\n}\n","// TODO: update this\nconst EXAMPLE_PROJECT_ID = \"Example Project Test 2\";\nexport default EXAMPLE_PROJECT_ID;\n","export default async function getImageDimensions(\n dataUri: string\n): Promise<{ height: number; width: number }> {\n return new Promise((resolved) => {\n const i = new Image();\n i.onload = function () {\n resolved({ width: i.width, height: i.height });\n };\n i.src = dataUri;\n });\n}\n","const REGEX = /\\[(\\d+)\\]-/;\n\nexport default function isDependentFolder(folderName: string): {\n result: boolean;\n layer?: number;\n traitName?: string;\n} {\n const match = folderName.match(REGEX);\n\n if (match == null) {\n return { result: false };\n }\n\n const traitName = folderName.replace(match[0], \"\");\n\n return { result: true, layer: Number(match[1]), traitName };\n}\n","import DS_STORE from \"constants/DsStore\";\nimport path from \"path\";\nimport invariant from \"tiny-invariant\";\nimport isDependentFolder from \"utils/isDependentFolder\";\n\nexport default function filesToFilesMap(\n files: Array,\n relativePaths?: Array\n): Map> {\n const filesMap: Map> = new Map();\n\n for (const [index, file] of files.entries()) {\n if (file.name === DS_STORE) {\n continue;\n }\n\n // @ts-ignore\n const relPath = file.webkitRelativePath;\n const relPathFallback = relativePaths == null ? null : relativePaths[index];\n const key = path\n .dirname(relPathFallback != null ? relPathFallback : relPath)\n .split(\"/\")[1];\n invariant(key != null, `Invalid directory structure, key = ${key}`);\n\n const isDependent = isDependentFolder(key);\n if (isDependent.result) {\n continue;\n }\n\n if (filesMap.has(key)) {\n filesMap.set(\n key,\n [...filesMap.get(key)!, file].sort((a, b) =>\n a.name.localeCompare(b.name)\n )\n );\n } else {\n filesMap.set(key, [file]);\n }\n }\n\n return filesMap;\n}\n","import DS_STORE from \"constants/DsStore\";\nimport path from \"path\";\nimport invariant from \"tiny-invariant\";\nimport isDependentFolder from \"utils/isDependentFolder\";\nimport { FilesMapDependent } from \"context/GenerateConfigContext\";\n\nexport default function filesToFilesMapDependent(\n files: Array,\n relativePaths?: Array\n): FilesMapDependent {\n const filesMap: FilesMapDependent = new Map();\n\n for (const [index, file] of files.entries()) {\n if (file.name === DS_STORE) {\n continue;\n }\n\n // @ts-ignore\n const relPath = file.webkitRelativePath;\n const relPathFallback = relativePaths == null ? null : relativePaths[index];\n const key = path\n .dirname(relPathFallback != null ? relPathFallback : relPath)\n .split(\"/\")[1];\n invariant(key != null, `Invalid directory structure, key = ${key}`);\n\n const isDependent = isDependentFolder(key);\n if (!isDependent.result) {\n continue;\n }\n\n const { layer, traitName } = isDependent;\n\n invariant(layer != null, \"Layer cannot be null\");\n invariant(traitName != null, \"Trait name cannot be null\");\n\n if (filesMap.has(traitName)) {\n filesMap.set(traitName, {\n files: [...filesMap.get(traitName)!.files, file],\n layer,\n });\n } else {\n filesMap.set(traitName, { files: [file], layer });\n }\n }\n\n return filesMap;\n}\n","import dataUriToBuffer from \"data-uri-to-buffer\";\n\nexport default function getExampleProjectFiles() {\n return [\n // BACKGROUNDS\n {\n file: new File(\n [\n dataUriToBuffer(\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAG9JREFUWIVj3Pvp/3+GAQRMA2n5qANGHTDqgFEHjDpg1AGjDhh1wOBwwLePA2f5t4+DIQRgLqE3gNk5OEKAgYG+oYBsFxMuCXpYjuEAWjsCm9lY0wAtHIHLTBZCGrj4aWMxQQcQawClYPBkwxHrAAC+4CCThpiIIQAAAABJRU5ErkJggg==)\"\n ),\n ],\n \"Blue Background\"\n ),\n relPath: \"images/Background/Blue Background.png\",\n },\n {\n file: new File(\n [\n dataUriToBuffer(\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAHJJREFUWIVjvPT/wX+GAQRMA2n5qANGHTDqgFEHjDpg1AGjDhh1wOBwwI0fvwbM8hs/fg2CEIC5hN4AZufgCAEGBvqGArJdTLgk6GE5hgNo7QhsZmNNA7RwBC4zWQhp0OBgo4nFBB1ArAGUgsGTDUesAwB1dS4Awm9kRAAAAABJRU5ErkJggg==\"\n ),\n ],\n \"Green Background\"\n ),\n relPath: \"images/Background/Green Background.png\",\n },\n {\n file: new File(\n [\n dataUriToBuffer(\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAHBJREFUWIXt0zEKACEMBMBVrrC7/3/J39jZaWMhnKJwxATctGJ2WNSVGAsUx2uGE0AAAQQQQAABBBgBpKyXnrKFBgCotNAyjTQAnG2hy/KzgxPhX4A0YrB7/AYkEJOdz/LCG0SC14DNBX/H0De8FVABXgwglGMtZZUAAAAASUVORK5CYII=\"\n ),\n ],\n \"Pink Background\"\n ),\n relPath: \"images/Background/Pink Background.png\",\n },\n\n // Faces\n {\n file: new File(\n [\n dataUriToBuffer(\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAQhJREFUWIVjYBgFo2AUjHTASIwiFRWV/zD2nTt38OohRS1RDlBRUfnfeKgEzq+368FpMClqiXIAzMAHnxFiCrzYDSZFLTJgwecAZDDfu4eBgYGBIXFrCUPjoRKGerue/8jyMMuR1REDcLoMm4/IAYRCgYky4ykHeBMTzPdZByHunGb/D64GFtQwgBzk6OrxhQLRaQAdEBvHhABOByDHPbLPiQHo6vGlowFPA6MOwOmA8+9/UM0SfGYNeAjgLQkNluQwGApyUGTB+fc/GC7ETBliJSEMwEKBgYGB5JCAxTs+3xN0AMwRDAwMDDCHEAsuxExhYGAg3CghqkWE7BBiATGtoVEwCgYFAADLHH3v/EpT2wAAAABJRU5ErkJggg==\"\n ),\n ],\n \"Sleepy\"\n ),\n relPath: \"images/Face/Sleepy.png\",\n },\n {\n file: new File(\n [\n dataUriToBuffer(\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAARhJREFUWIXtlr0NwjAQhR+IgoaCDSg8QFggDMAKNLQoZfoofcqINg0rMAAsAAOkYIMUNKkIBTqwjH/OAgQS/ionudy9dzk5BgKBwL/T4wQJITpa13VtfccnliVACNHl+/R+ncWFMbFPLEsAJTydH/cmI31in1iZgU2ATDUvAADLbYp8nyKLi05+TsXlOA5GZaqjal6wkqpxri70WTLx7Iicqmuuc8I6TOR+tbvpXM8uWhFqUTXe1gX2DOjwdavDKECeZtW5CzVezqXCnoFPEQQYBRya9m1FbLm+3gHrThhtEkzHw5cKHJoWx0X5+k74KZx/w2iTAIB3J+i729w7BZAIACAhXI6LEoD7UMI6EclCuHBOQ4HAT3AFu9mJ726/uAYAAAAASUVORK5CYII=\"\n ),\n ],\n \"Smile\"\n ),\n relPath: \"images/Face/Smile.png\",\n },\n {\n file: new File(\n [\n dataUriToBuffer(\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAS9JREFUWIXtljFuwkAQRV8QRZoUuQHFHiApaMkBuAINLaK0aBGt5RLRpskVOEBoKeAALrgBBQ1VnGpggd31rJIIS9lXre3vmT8zK3shkUj8dx40ImNMJeuyLIPvxGhVBowx1WyVna6nvcIbOEarMiABd4fzvc6TO3CM1qYdMmDz3i8AGC4zZquMaa+o7OeS3NZp8BpwVSTsDrcJfDox6+uCugOuilzVaisXgptJqhp9tgBYvH1dJF9PJgB08/wi8bU+tBdaUXb/AO8I7JnalQvDZUa3n5/WNtd61/6oNaAhdt4u7j6C5hrY7I+/liQU6+4d8H6jjTHVy8eY1+fHHyXY7I9sB3Pv/6C5HYBzF4DoTsjcQ9XXGhATAGJEy3YwB+oPJaoTkW1Ei+Y0lEg0gm8KDZSydI6BIQAAAABJRU5ErkJggg==\"\n ),\n ],\n \"Surprised\"\n ),\n relPath: \"images/Face/Surprised.png\",\n },\n\n // Outfit\n {\n file: new File(\n [\n dataUriToBuffer(\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAKtJREFUWIXt0DEOgkAQBdAvWHsA6jHhNHsTQreeARtCLGk8gw1XWSI1B7AGx0KXRGIxlCb/Vbuzk/mTBYiIiIiIiOifiIhObadT26mIaN1fte6vuq5vmbnbEn5vmuU+jwnyqgAAhNMFafZc3o5liWEYTLMT86qfwVFeFQjOIzi/LLLusTBtKSIanH8H384AgOA80uwBAJjHw1c99ll+YW/dNIbFgHiP5191ixeqSkTlBtP15AAAAABJRU5ErkJggg==\"\n ),\n ],\n \"Collared Shirt\"\n ),\n relPath: \"images/Outfit/Collared Shirt.png\",\n },\n {\n file: new File(\n [\n dataUriToBuffer(\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAKxJREFUWIXt0DEKwjAUxvG/4uDY2TkBETK4eYMWnD2FVxAJ4hU8RWeh3sDNoRCEdHbO6Fa3UjvI6+TyfluSj5cvAaWUUkoppZRSfzYZEzbGtHWRAeCqxP56AOCyPdPfb5pGPFccNMa00a+69fv+wlUJgLrImG8W3Zn1QVxiJi0w5KrE87QGYHl8EHsFxhC1HL7e+kAs86+M3d0YZiS/MBVX/XE5QCxzrA9jx/EBFygznC7M2g8AAAAASUVORK5CYII=\"\n ),\n ],\n \"Cape Shirt\"\n ),\n relPath: \"images/Outfit/Cape Shirt.png\",\n },\n {\n file: new File(\n [\n dataUriToBuffer(\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAJdJREFUWIVjYBgFo2AUjIJRMApGwSgYBaNgFIyCUTDAgJEUxSoqKv8tMk4zMDAwMJyYYcqQvbWGgYGBgWGqdwsDsvidO3dIMpdoy0/d/g/Hi9d9/6+iovJfRUXl/+J131HkVFRU/hNrLgspjthw6SsKH+br6///MlxHkyMWEBVUKioq/5dtv02SwVGeqkRFBdEhgO57agEAT21B4c/1CnwAAAAASUVORK5CYII=\"\n ),\n ],\n \"Striped Shirt\"\n ),\n relPath: \"images/Outfit/Striped Shirt.png\",\n },\n ];\n}\n","export default function sumArray(arr: Array): number {\n return arr.reduce((acc, currVal) => acc + currVal, 0);\n}\n","/* eslint-disable react/jsx-no-constructed-context-values */\n/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @typescript-eslint/no-shadow */\nimport { Context, createContext, useEffect, useReducer, useState } from \"react\";\nimport DS_STORE from \"constants/DsStore\";\nimport Blockchain from \"types/enums/Blockchain\";\nimport { Maybe, MaybeUndef } from \"types/UtilityTypes\";\nimport emptyFunction from \"utils/emptyFunction\";\nimport LocalStorageKey from \"types/enums/LocalStorageKey\";\nimport setStateLocalStorageWrapper from \"utils/local-storage/setStateLocalStorageWrapper\";\nimport setLocalStorage from \"utils/local-storage/setLocalStorage\";\nimport { nanoid } from \"nanoid\";\nimport addLocalStorageProjectId from \"utils/local-storage/addLocalStorageProjectId\";\nimport setLocalStorageProjectId from \"utils/local-storage/setLocalStorageProjectId\";\nimport printLocalStorageInfo from \"utils/local-storage/printLocalStorageInfo\";\nimport getManyLocalStorage from \"utils/local-storage/getManyLocalStorage\";\nimport setManyLocalStorage from \"utils/local-storage/setManyLocalStorage\";\nimport generateImagesExt from \"utils/generateImages\";\nimport Metadata from \"types/Metadata\";\nimport getLocalStorage from \"utils/local-storage/getLocalStorage\";\nimport EXAMPLE_PROJECT_ID from \"constants/ExampleProjectId\";\nimport Dimensions from \"types/Dimensions\";\nimport fileToDataUri from \"utils/fileToDataUri\";\nimport getImageDimensions from \"utils/getImageDimensions\";\nimport filesToFilesMap from \"utils/filesToFilesMap\";\nimport filesToFilesMapDependent from \"utils/filesToFilesMapDependent\";\nimport getExampleProjectFiles from \"utils/getExampleProjectFiles\";\nimport { range } from \"utils/range\";\nimport sumArray from \"utils/sumArray\";\nimport addTraitValueExtension from \"utils/addTraitValueExtension\";\nimport CreatorRoyalties from \"types/CreatorRoyalties\";\nimport { BATCH_SIZE } from \"components/pages/generate/generation/GenerationPage\";\n\n// 5%\nconst BASIS_POINTS_DEFAULT = 500;\nconst ROYALTIES_DEFAULT = [{ address: \"\", share: 0 }];\n\nexport type FilesMapDependent = Map<\n string,\n { files: Array; layer: number }\n>;\nexport type TraitWeights = Map>;\n\ntype RoyaltiesDispatchAction =\n | { type: \"add_row\" }\n | { type: \"remove_row\"; index: number }\n | { type: \"set_directly\"; value: Array }\n | { type: \"update_address\"; address: string; index: number }\n | { type: \"update_share\"; share: number; index: number };\n\nfunction royaltiesReducer(\n state: Array,\n action: RoyaltiesDispatchAction\n): Array {\n if (action.type === \"add_row\") {\n const result = [...state, { address: \"\", share: 0 }];\n setLocalStorage(LocalStorageKey.MetaRoyalties, result);\n return result;\n }\n\n if (action.type === \"remove_row\") {\n const result = state.filter((_, index) => index !== action.index);\n setLocalStorage(LocalStorageKey.MetaRoyalties, result);\n return result;\n }\n\n if (action.type === \"set_directly\") {\n setLocalStorage(LocalStorageKey.MetaRoyalties, action.value);\n return action.value;\n }\n\n if (action.type === \"update_address\") {\n const result = state.map((row, index) =>\n index === action.index\n ? { address: action.address, share: row.share }\n : row\n );\n setLocalStorage(LocalStorageKey.MetaRoyalties, result);\n return result;\n }\n\n if (action.type === \"update_share\") {\n const result = state.map((row, index) =>\n index === action.index\n ? { address: row.address, share: action.share }\n : row\n );\n setLocalStorage(LocalStorageKey.MetaRoyalties, result);\n return result;\n }\n\n throw new Error(\"should not reach\");\n}\n\ntype TraitWeightsDispatchAction =\n | {\n type: \"update_for_value\";\n traitName: string;\n traitValue: string;\n weight: number;\n }\n | {\n type: \"update_for_values\";\n traitName: string;\n values: Array<{ traitValue: string; weight: number }>;\n }\n | {\n type: \"set_directly\";\n weights: TraitWeights;\n }\n | {\n type: \"allocate_evenly\";\n numTotal: number;\n traitName: string;\n traitValues: Array;\n };\n\nfunction traitWeightsReducer(\n state: TraitWeights,\n action: TraitWeightsDispatchAction\n): TraitWeights {\n if (action.type === \"update_for_value\") {\n const newMap = new Map(state);\n const mapForTrait = newMap.get(action.traitName) ?? new Map();\n mapForTrait.set(action.traitValue, action.weight);\n newMap.set(action.traitName, mapForTrait);\n\n setLocalStorage(LocalStorageKey.TraitWeights, newMap);\n\n return newMap;\n }\n\n if (action.type === \"update_for_values\") {\n const newMap = new Map(state);\n const mapForTrait = newMap.get(action.traitName) ?? new Map();\n action.values.forEach((value) => {\n const withExt = addTraitValueExtension(\n state,\n action.traitName,\n value.traitValue\n );\n if (withExt != null) {\n mapForTrait.set(withExt, value.weight);\n }\n });\n newMap.set(action.traitName, mapForTrait);\n\n setLocalStorage(LocalStorageKey.TraitWeights, newMap);\n\n return newMap;\n }\n\n if (action.type === \"set_directly\") {\n setLocalStorage(LocalStorageKey.TraitWeights, action.weights);\n return action.weights;\n }\n\n if (action.type === \"allocate_evenly\") {\n const newMap = new Map(state);\n const newMapForTrait = new Map();\n\n const weights = range(action.traitValues.length).fill(\n Math.floor(action.numTotal / action.traitValues.length)\n );\n const leftover = action.numTotal - sumArray(weights);\n // Now, evenly distribute leftover\n for (let i = 0; i < leftover; i++) {\n weights[i % action.traitValues.length] += 1;\n }\n\n for (const [i, traitValue] of action.traitValues.entries()) {\n newMapForTrait.set(traitValue, weights[i]);\n }\n\n newMap.set(action.traitName, newMapForTrait);\n\n setLocalStorage(LocalStorageKey.TraitWeights, newMap);\n return newMap;\n }\n\n throw new Error(\"should not reach\");\n}\n\nexport type GenerateConfigContextData = {\n blockchain: Blockchain;\n fileDimensions: Dimensions;\n files: Maybe>;\n filesMap: Maybe>>;\n filesMapDependent: Maybe;\n folderName: Maybe;\n generatedImagesAndMetadata: Array<{\n dataUri: string;\n metadata: Metadata;\n }>;\n generateMetadata: boolean;\n isDoneGenerating: boolean;\n metaCollectionFamily: Maybe;\n metaCollectionName: Maybe;\n metaDescription: Maybe;\n metaExternalUrl: Maybe;\n metaName: Maybe;\n metaRoyalties: Array;\n metaSellerFeeBasisPoints: number;\n metaSymbol: Maybe;\n numImages: number;\n projectId: MaybeUndef;\n // To identify between different saved projects\n projectName: Maybe;\n seenLayers: Array>;\n traitNamesOrdered: Maybe>;\n traitWeights: TraitWeights;\n\n createNewProject: (val: FileList) => Promise;\n generateImages: (seenLayers: Array>) => Promise>;\n switchProject: (projectId: string) => Promise;\n updateProjectFiles: (val: FileList) => Promise;\n\n dispatchRoyalties: (action: RoyaltiesDispatchAction) => void;\n dispatchTraitWeights: (action: TraitWeightsDispatchAction) => void;\n\n setBlockchain: (val: Blockchain) => void;\n setGenerateMetadata: (val: boolean) => void;\n setIsDoneGenerating: (val: boolean) => void;\n setMetaCollectionFamily: (val: string) => void;\n setMetaCollectionName: (val: string) => void;\n setMetaDescription: (val: string) => void;\n setMetaExternalUrl: (val: string) => void;\n setMetaName: (val: string) => void;\n setMetaSellerFeeBasisPoints: (val: number) => void;\n setMetaSymbol: (val: string) => void;\n setNumImages: (val: number) => void;\n setProjectName: (val: string) => void;\n setSeenLayers: (val: Array>) => void;\n setTraitNamesOrdered: (val: Array) => void;\n};\n\nexport const GenerateConfigContext: Context =\n createContext({\n blockchain: Blockchain.Solana,\n fileDimensions: { height: 0, width: 0 },\n files: null,\n filesMap: null,\n filesMapDependent: null,\n folderName: null,\n generatedImagesAndMetadata: [],\n generateMetadata: true,\n isDoneGenerating: false,\n metaCollectionFamily: null,\n metaCollectionName: null,\n metaDescription: null,\n metaExternalUrl: null,\n metaName: null,\n metaRoyalties: [],\n metaSellerFeeBasisPoints: BASIS_POINTS_DEFAULT,\n metaSymbol: null,\n numImages: 10000,\n projectId: undefined,\n projectName: null,\n seenLayers: [],\n traitNamesOrdered: null,\n traitWeights: new Map(),\n\n createNewProject: async () => {},\n generateImages: async () => [],\n switchProject: async () => {},\n updateProjectFiles: async () => {},\n\n dispatchRoyalties: emptyFunction,\n dispatchTraitWeights: emptyFunction,\n\n setBlockchain: emptyFunction,\n setGenerateMetadata: emptyFunction,\n setIsDoneGenerating: emptyFunction,\n setMetaCollectionFamily: emptyFunction,\n setMetaCollectionName: emptyFunction,\n setMetaDescription: emptyFunction,\n setMetaExternalUrl: emptyFunction,\n setMetaName: emptyFunction,\n setMetaSellerFeeBasisPoints: emptyFunction,\n setMetaSymbol: emptyFunction,\n setNumImages: emptyFunction,\n setProjectName: emptyFunction,\n setSeenLayers: emptyFunction,\n setTraitNamesOrdered: emptyFunction,\n });\n\ntype ProviderProps = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any;\n};\n\nexport function GenerateConfigContextProvider(\n props: ProviderProps\n): JSX.Element {\n const [blockchain, setBlockchain] = useState(Blockchain.Solana);\n const [fileDimensions, setFileDimensions] = useState({\n height: 0,\n width: 0,\n });\n const [files, setFiles] = useState>>(null);\n const [filesMap, setFilesMap] =\n useState>>>(null);\n const [filesMapDependent, setFilesMapDependent] =\n useState>(null);\n const [folderName, setFolderName] = useState>(null);\n const [generatedImagesAndMetadata, setGeneratedImagesAndMetadata] = useState<\n Array<{\n dataUri: string;\n metadata: Metadata;\n }>\n >([]);\n const [generateMetadata, setGenerateMetadata] = useState(true);\n const [isDoneGenerating, setIsDoneGenerating] = useState(false);\n const [metaCollectionFamily, setMetaCollectionFamily] =\n useState>(null);\n const [metaCollectionName, setMetaCollectionName] =\n useState>(null);\n const [metaDescription, setMetaDescription] = useState>(null);\n const [metaExternalUrl, setMetaExternalUrl] = useState>(null);\n const [metaName, setMetaName] = useState>(null);\n const [metaRoyalties, dispatchRoyalties] = useReducer<\n typeof royaltiesReducer\n >(royaltiesReducer, ROYALTIES_DEFAULT);\n const [metaSellerFeeBasisPoints, setMetaSellerFeeBasisPoints] =\n useState(BASIS_POINTS_DEFAULT);\n const [metaSymbol, setMetaSymbol] = useState>(null);\n const [numImages, setNumImages] = useState(10000);\n const [projectId, setProjectId] = useState>(undefined);\n const [projectName, setProjectName] = useState>(null);\n const [seenLayers, setSeenLayers] = useState>>([]);\n const [traitNamesOrdered, setTraitNamesOrdered] =\n useState>>(null);\n const [traitWeights, dispatchTraitWeights] = useReducer<\n typeof traitWeightsReducer\n >(traitWeightsReducer, new Map());\n\n async function setFilesAndFilesMap(\n val: Maybe>,\n relativePaths?: Array\n ) {\n if (val == null) {\n setFiles(null);\n setFilesMap(null);\n setTraitNamesOrdered(null);\n return { files: null, filesMap: null };\n }\n\n const filesInner = [...val].filter((file) => file.name !== DS_STORE);\n setFiles(filesInner);\n const filesMapInner = filesToFilesMap(filesInner, relativePaths);\n setFilesMap(filesMapInner);\n\n if (filesInner.length > 0) {\n const exampleDataUri = await fileToDataUri(filesInner[0]);\n const dimensions = await getImageDimensions(exampleDataUri);\n setFileDimensions(dimensions);\n }\n\n const filesMapDependentInner = filesToFilesMapDependent(\n filesInner,\n relativePaths\n );\n setFilesMapDependent(filesMapDependentInner);\n\n if (filesInner.length > 0) {\n // @ts-ignore\n if (filesInner[0].webkitRelativePath.length > 0) {\n // @ts-ignore\n setFolderName(filesInner[0].webkitRelativePath.split(\"/\")[0]);\n } else if (relativePaths != null) {\n setFolderName(relativePaths[0].split(\"/\")[0]);\n }\n }\n\n return {\n files: filesInner,\n filesMap: filesMapInner,\n filesMapDependent: filesMapDependentInner,\n };\n }\n\n async function reloadProject() {\n console.log(\"Reloading...\");\n const [\n blockchain,\n files,\n fileRelativePaths,\n generateMetadata,\n metaCollectionFamily,\n metaCollectionName,\n metaDescription,\n metaExternalUrl,\n metaName,\n metaRoyalties,\n metaSellerFeeBasisPoints,\n metaSymbol,\n numImages,\n projectId,\n projectName,\n traitNamesOrdered,\n traitWeights,\n ] = await getManyLocalStorage([\n LocalStorageKey.Blockchain,\n LocalStorageKey.Files,\n LocalStorageKey.FileRelativePaths,\n LocalStorageKey.GenerateMetadata,\n LocalStorageKey.MetaCollectionFamily,\n LocalStorageKey.MetaCollectionName,\n LocalStorageKey.MetaDescription,\n LocalStorageKey.MetaExternalUrl,\n LocalStorageKey.MetaName,\n LocalStorageKey.MetaRoyalties,\n LocalStorageKey.MetaSellerFeeBasisPoints,\n LocalStorageKey.MetaSymbol,\n LocalStorageKey.NumImages,\n LocalStorageKey.ProjectId,\n LocalStorageKey.ProjectName,\n LocalStorageKey.TraitNamesOrdered,\n LocalStorageKey.TraitWeights,\n ]);\n\n setBlockchain(blockchain ?? Blockchain.Solana);\n setGenerateMetadata(generateMetadata ?? true);\n setMetaCollectionFamily(metaCollectionFamily);\n setMetaCollectionName(metaCollectionName);\n setMetaDescription(metaDescription);\n setMetaExternalUrl(metaExternalUrl);\n setMetaName(metaName);\n setMetaSellerFeeBasisPoints(\n metaSellerFeeBasisPoints ?? BASIS_POINTS_DEFAULT\n );\n setMetaSymbol(metaSymbol);\n setNumImages(numImages ?? 10000);\n setProjectId(projectId ?? null);\n setProjectName(projectName);\n setTraitNamesOrdered(traitNamesOrdered);\n\n if (projectId != null) {\n dispatchRoyalties({\n type: \"set_directly\",\n value:\n metaRoyalties != null && metaRoyalties.length > 0\n ? metaRoyalties\n : ROYALTIES_DEFAULT,\n });\n dispatchTraitWeights({\n type: \"set_directly\",\n weights: traitWeights ?? new Map(),\n });\n }\n\n const { filesMap } = await setFilesAndFilesMap(files, fileRelativePaths);\n\n if (traitNamesOrdered == null && filesMap != null) {\n setTraitNamesOrdered([...filesMap.keys()]);\n }\n\n setGeneratedImagesAndMetadata([]);\n }\n\n useEffect(() => {\n async function run() {\n await reloadProject();\n await printLocalStorageInfo();\n }\n\n run();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Create example project, if necessary\n useEffect(() => {\n async function run() {\n const allProjectIds = await getLocalStorage(\n LocalStorageKey.AllProjectIds\n );\n\n if (allProjectIds != null && allProjectIds.includes(EXAMPLE_PROJECT_ID)) {\n return;\n }\n\n await addLocalStorageProjectId(EXAMPLE_PROJECT_ID);\n\n const exampleProjectFiles = getExampleProjectFiles();\n const exampleFileList = exampleProjectFiles.map(({ file }) => file);\n const exampleFileRelativePaths = exampleProjectFiles.map(\n ({ relPath }) => relPath\n );\n const { files, filesMap } = await setFilesAndFilesMap(\n exampleFileList,\n exampleFileRelativePaths\n );\n\n if (files != null && filesMap != null) {\n await setManyLocalStorage(\n [\n LocalStorageKey.Files,\n LocalStorageKey.FileRelativePaths,\n LocalStorageKey.ProjectName,\n LocalStorageKey.NumImages,\n LocalStorageKey.TraitWeights,\n ],\n // @ts-ignore\n [files, exampleFileRelativePaths, \"Example Project\", 27, new Map()],\n EXAMPLE_PROJECT_ID\n );\n }\n }\n\n run();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n {\n const newProjectId = nanoid(10);\n await Promise.all([\n setLocalStorageProjectId(newProjectId),\n addLocalStorageProjectId(newProjectId),\n ]);\n\n const { files, filesMap } = await setFilesAndFilesMap(fileList);\n if (files != null && filesMap != null) {\n await setManyLocalStorage(\n [LocalStorageKey.Files, LocalStorageKey.FileRelativePaths],\n // @ts-ignore\n [files, files.map((file) => file.webkitRelativePath)]\n );\n }\n\n await reloadProject();\n await printLocalStorageInfo();\n },\n generateImages: async (seenLayers: Array>) => {\n setGeneratedImagesAndMetadata([]);\n const generated = await generateImagesExt(\n numImages,\n filesMap!,\n filesMapDependent ?? new Map(),\n traitWeights,\n traitNamesOrdered!,\n blockchain,\n metaDescription ?? \"\",\n metaName ?? \"\",\n [...seenLayers],\n setSeenLayers,\n (newImage, newMetadata) => {\n setGeneratedImagesAndMetadata((curr) => [\n ...curr,\n { dataUri: newImage, metadata: newMetadata },\n ]);\n },\n {\n collectionFamily: metaCollectionFamily ?? \"\",\n collectionName: metaCollectionName ?? \"\",\n externalUrl: metaExternalUrl,\n royalties: metaRoyalties,\n sellerFeeBasisPoints: metaSellerFeeBasisPoints,\n symbol: metaSymbol ?? \"\",\n }\n );\n if (generated.length < BATCH_SIZE) {\n setIsDoneGenerating(true);\n }\n return generated;\n },\n switchProject: async (projectId) => {\n await setLocalStorageProjectId(projectId);\n await reloadProject();\n },\n updateProjectFiles: async (fileList) => {\n const { files, filesMap } = await setFilesAndFilesMap(fileList);\n\n if (files != null && filesMap != null) {\n await setManyLocalStorage(\n [LocalStorageKey.Files, LocalStorageKey.FileRelativePaths],\n // @ts-ignore\n [files, files.map((file) => file.webkitRelativePath)]\n );\n\n setStateLocalStorageWrapper(\n setTraitNamesOrdered,\n LocalStorageKey.TraitNamesOrdered\n )([...filesMap.keys()]);\n\n setLocalStorage(LocalStorageKey.TraitWeights, new Map());\n }\n\n await reloadProject();\n await printLocalStorageInfo();\n },\n\n dispatchRoyalties,\n dispatchTraitWeights,\n\n setBlockchain: setStateLocalStorageWrapper(\n setBlockchain,\n LocalStorageKey.Blockchain\n ),\n setGenerateMetadata: setStateLocalStorageWrapper(\n setGenerateMetadata,\n LocalStorageKey.GenerateMetadata\n ),\n setIsDoneGenerating,\n setMetaCollectionFamily: setStateLocalStorageWrapper(\n setMetaCollectionFamily,\n LocalStorageKey.MetaCollectionFamily\n ),\n setMetaCollectionName: setStateLocalStorageWrapper(\n setMetaCollectionName,\n LocalStorageKey.MetaCollectionName\n ),\n setMetaDescription: setStateLocalStorageWrapper(\n setMetaDescription,\n LocalStorageKey.MetaDescription\n ),\n setMetaExternalUrl: setStateLocalStorageWrapper(\n setMetaExternalUrl,\n LocalStorageKey.MetaExternalUrl\n ),\n setMetaName: setStateLocalStorageWrapper(\n setMetaName,\n LocalStorageKey.MetaName\n ),\n setMetaSellerFeeBasisPoints: setStateLocalStorageWrapper(\n setMetaSellerFeeBasisPoints,\n LocalStorageKey.MetaSellerFeeBasisPoints\n ),\n setMetaSymbol: setStateLocalStorageWrapper(\n setMetaSymbol,\n LocalStorageKey.MetaSymbol\n ),\n setNumImages: setStateLocalStorageWrapper(\n setNumImages,\n LocalStorageKey.NumImages\n ),\n setProjectName: setStateLocalStorageWrapper(\n setProjectName,\n LocalStorageKey.ProjectName\n ),\n setSeenLayers,\n setTraitNamesOrdered: setStateLocalStorageWrapper(\n setTraitNamesOrdered,\n LocalStorageKey.TraitNamesOrdered\n ),\n }}\n >\n {props.children}\n \n );\n}\n","import { TraitWeights } from \"context/GenerateConfigContext\";\nimport { Maybe } from \"types/UtilityTypes\";\n\n/**\n * Takes in a trait value like \"Blue Hair\" and returns \"Blue Hair.png\" if that file exists.\n */\nexport default function addTraitValueExtension(\n traitWeights: TraitWeights,\n traitName: string,\n traitValue: string\n): Maybe {\n const map = traitWeights.get(traitName);\n if (map == null) {\n return null;\n }\n\n const values = [...map.keys()];\n return values.find((value) => value.startsWith(`${traitValue}.`)) ?? null;\n}\n","import {\n GenerateConfigContext,\n GenerateConfigContextData,\n} from \"context/GenerateConfigContext\";\n\nimport { useContext } from \"react\";\n\nexport default function useGenerateConfigContext(): GenerateConfigContextData {\n return useContext(GenerateConfigContext);\n}\n","import styles from \"css/common/FolderGrid.module.css\";\nimport joinClasses from \"utils/joinClasses\";\n\nexport default function FolderGrid({\n children,\n className,\n}: {\n children: any;\n className?: string;\n}): JSX.Element {\n return
{children}
;\n}\n","import BodyText from \"components/text/BodyText\";\nimport FontClass from \"types/enums/FontClass\";\nimport type { Props } from \"components/text/BodyText\";\n\nexport default function ButtonText(props: Omit) {\n return ;\n}\n","import styles from \"css/pages/generate/ProjectGrid.module.css\";\nimport PlainButton from \"components/buttons/PlainButton\";\nimport FolderGrid from \"components/common/FolderGrid\";\nimport Body1 from \"components/text/Body1\";\nimport ButtonText from \"components/text/ButtonText\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\nimport useProjectIdsAndNames from \"hooks/useProjectIdsAndNames\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport { useNavigate } from \"react-router-dom\";\nimport ImageWebp from \"components/images/ImageWebp\";\n\nfunction Item({\n projectId,\n projectName,\n}: {\n projectId: string;\n projectName: string;\n}): JSX.Element {\n const navigate = useNavigate();\n const { switchProject } = useGenerateConfigContext();\n\n return (\n {\n await switchProject(projectId);\n navigate(\"/generate/basic-info\");\n }}\n >\n \n \n {projectName}\n \n \n );\n}\n\nfunction Grid(): JSX.Element {\n const { projectIdsAndNames } = useProjectIdsAndNames();\n\n return (\n \n {projectIdsAndNames.map((idAndName: any) => (\n \n ))}\n \n );\n}\n\ntype Props = {\n className?: string;\n};\n\nexport default function ProjectGrid({ className }: Props): JSX.Element {\n return (\n
\n \n or, hop into a previous project:\n \n \n
\n );\n}\n","import { useEffect, useState } from \"react\";\nimport LocalStorageKey from \"types/enums/LocalStorageKey\";\nimport getLocalStorage from \"utils/local-storage/getLocalStorage\";\nimport { getMany } from \"idb-keyval\";\nimport prefixKeyWithProjectId from \"utils/local-storage/prefixKeyWithProjectId\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\n\nexport default function useProjectIdsAndNames(): any {\n const { files } = useGenerateConfigContext();\n const [projectIds, setProjectIds] = useState>([]);\n const [projectNames, setProjectNames] = useState>([]);\n\n useEffect(() => {\n async function run() {\n const ids = await getLocalStorage(LocalStorageKey.AllProjectIds);\n if (ids == null) {\n return;\n }\n const nameKeys: Array = await Promise.all(\n ids.map((id: string) =>\n prefixKeyWithProjectId(LocalStorageKey.ProjectName, id)\n )\n );\n const names = await getMany(nameKeys);\n setProjectIds(ids);\n setProjectNames(names);\n }\n\n run();\n // Simple way to make sure creating the example project for this first time\n // updates these values\n }, [files?.length]);\n\n return {\n projectIdsAndNames: projectIds.map((projectId, index) => ({\n id: projectId,\n name: projectNames[index] ?? `Project ${projectId}`,\n })),\n };\n}\n","import ConnectWalletButton from \"components/buttons/ConnectWalletButton\";\nimport TextButton from \"components/buttons/TextButton\";\nimport GenericModal from \"components/modal/GenericModal\";\nimport Body1 from \"components/text/Body1\";\nimport styles from \"css/modal/GateModal.module.css\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport FontClass from \"types/enums/FontClass\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\nimport { useAnchorWallet } from \"@solana/wallet-adapter-react\";\nimport useWhitelistContext from \"hooks/useWhitelistContext\";\n\ntype Props = {\n isShown: boolean;\n onHide: () => void;\n};\n\nexport default function GateModal({ isShown, onHide }: Props): JSX.Element {\n const wallet = useAnchorWallet();\n const { isWhitelisted, isChecking } = useWhitelistContext();\n\n let body = (\n <>\n \n You must own a{\" \"}\n \n Mycoverse NFT\n {\" \"}\n to use premium features (generate >1000 images, GIF support, shuffle\n tool). If you own one, connect your wallet!\n \n
\n \n
\n \n );\n let title = \"Connect your wallet\";\n\n if (wallet != null) {\n if (isChecking) {\n title = \"Please wait...\";\n body = (\n \n Please wait a moment as we check your NFT ownership.\n \n );\n } else if (isWhitelisted) {\n title = \"Thanks!\";\n body = (\n \n Thanks for supporting the Mycoverse!\n \n );\n } else {\n title = \"Sorry 🥲\";\n body = (\n \n You don't own a Mycoverse NFT, so premium features (generate\n >1000 images, GIF support, shuffle tool) are not available.\n \n );\n }\n }\n\n return (\n \n
{body}
\n
\n );\n}\n","import ResponsiveContainer from \"components/ResponsiveContainer\";\nimport styles from \"css/pages/generate/GeneratePage.module.css\";\nimport Body1 from \"components/text/Body1\";\nimport ButtonWithText from \"components/buttons/ButtonWithText\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport ContainerOuter from \"components/common/ContainerOuter\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\nimport ProjectGrid from \"components/pages/generate/ProjectGrid\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport { useNavigate } from \"react-router-dom\";\nimport ElementMobileNotSupported from \"components/hoc/ElementMobileNotSupported\";\nimport ImageWebp from \"components/images/ImageWebp\";\nimport GateModal from \"components/modal/GateModal\";\nimport { useState } from \"react\";\nimport useLogPageView from \"hooks/useLogPageView\";\nimport useWhitelistContext from \"hooks/useWhitelistContext\";\n\nconst ID = \"input_id\";\n\nfunction ChooseFolder(): JSX.Element {\n const { createNewProject } = useGenerateConfigContext();\n const { isWhitelisted } = useWhitelistContext();\n const navigate = useNavigate();\n const [isModalShown, setIsModalShown] = useState(false);\n\n return (\n <>\n setIsModalShown(false)} />\n
\n \n \n Start a new project by connecting your main folder.\n
\n
\n Images (.png files) and gifs (.gif files) are supported.\n \n {\n if (e.target.files == null) {\n return;\n }\n\n if (\n [...e.target.files].find((file) => file.type.includes(\"gif\")) !=\n null &&\n !isWhitelisted\n ) {\n setIsModalShown(true);\n // Allow upload again\n e.target.value = \"\";\n return;\n }\n\n await createNewProject(e.target.files);\n navigate(\"/generate/basic-info\");\n }}\n type=\"file\"\n // Directory stuff\n // @ts-ignore\n directory=\"\"\n multiple\n webkitdirectory=\"\"\n />\n \n Choose Folder\n \n
\n \n );\n}\n\nexport default function GeneratePage(): JSX.Element {\n useLogPageView();\n return (\n \n \n \n
\n \n \n
\n
\n
\n
\n );\n}\n","import BodyText from \"components/text/BodyText\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport FontClass from \"types/enums/FontClass\";\nimport HeaderText from \"components/text/HeaderText\";\nimport styles from \"css/input/GenericInput.module.css\";\n\ntype Props = {\n // input element\n children: JSX.Element | Array;\n description?: string;\n descriptionFontClass?: FontClass;\n hint?: string;\n hintLengthIndicatorFontClass?: FontClass;\n label?: string | JSX.Element;\n labelFontClass?: FontClass;\n labelTextTransform?: \"none\" | \"uppercase\";\n subLabel?: string;\n subLabelFontClass?: FontClass;\n};\n\nexport default function GenericInput({\n children,\n description,\n descriptionFontClass = FontClass.Body1,\n label,\n labelFontClass = FontClass.Body1,\n labelTextTransform = \"none\",\n hint,\n hintLengthIndicatorFontClass = FontClass.Body2,\n subLabel,\n subLabelFontClass = FontClass.Body2,\n}: Props): JSX.Element {\n return (\n
\n {(label != null || subLabel != null) && (\n
\n {label != null && (\n \n {label}\n \n )}\n {subLabel != null && (\n \n {subLabel}\n \n )}\n
\n )}\n {description != null && (\n \n {description}\n \n )}\n {children}\n {hint != null && (\n \n {hint}\n \n )}\n
\n );\n}\n","import BodyText from \"components/text/BodyText\";\nimport FontClass from \"types/enums/FontClass\";\nimport GenericInput from \"components/input/GenericInput\";\nimport GlobalClass from \"types/enums/GlobalClass\";\nimport inputStyles from \"css/input/InputStyles.module.css\";\nimport joinClasses from \"utils/joinClasses\";\nimport styles from \"css/input/TextInput.module.css\";\n\ntype Props = {\n button?: JSX.Element;\n buttonInner?: JSX.Element;\n className?: string;\n hasError?: boolean;\n label?: string;\n labelFontClass?: FontClass;\n labelTextTransform?: \"none\" | \"uppercase\";\n maxLength?: number;\n maxLengthIndicator?: boolean;\n onChange: (val: string) => void;\n permaPlaceholder?: string | JSX.Element;\n placeholder?: string;\n subLabel?: string;\n value: string;\n};\n\nexport default function TextInput({\n button,\n buttonInner,\n className,\n hasError = false,\n label,\n labelFontClass = FontClass.Body2,\n labelTextTransform = \"none\",\n maxLength,\n maxLengthIndicator = true,\n onChange,\n permaPlaceholder,\n placeholder,\n subLabel,\n value,\n}: Props): JSX.Element {\n const hint =\n maxLength != null && maxLengthIndicator\n ? `${maxLength - (value?.length ?? 0)} characters left`\n : undefined;\n\n return (\n \n
\n {permaPlaceholder && typeof permaPlaceholder === \"string\" && (\n \n {permaPlaceholder}\n \n )}\n {permaPlaceholder && typeof permaPlaceholder !== \"string\" && (\n
{permaPlaceholder}
\n )}\n {buttonInner && (\n \n {buttonInner}\n
\n )}\n
\n {\n const val = e.target.value;\n if (maxLength != null && val.length > maxLength) {\n return;\n }\n\n onChange(val);\n }}\n placeholder={placeholder}\n type=\"text\"\n value={value}\n />\n {button}\n
\n
\n \n );\n}\n","export default function isNumber(val: string): boolean {\n return !Number.isNaN(Number(val));\n}\n","export default function numberRemoveCommas(val: string): string {\n return val.replaceAll(\",\", \"\");\n}\n","import styles from \"css/input/InputWithQuestionAndLabel.module.css\";\nimport Body1 from \"components/text/Body1\";\nimport QuestionText from \"components/text/QuestionText\";\nimport ColorClass from \"types/enums/ColorClass\";\n\ntype Props = {\n children: any;\n label?: string | JSX.Element;\n question?: string | JSX.Element;\n};\n\nexport default function InputWithQuestionAndLabel({\n children,\n label,\n question,\n}: Props): JSX.Element {\n return (\n
\n {question != null && (\n \n {question}\n \n )}\n {label != null && (\n \n {label}\n \n )}\n
{children}
\n
\n );\n}\n","import ColorClass from \"types/enums/ColorClass\";\nimport PlainButton from \"components/buttons/PlainButton\";\nimport { range } from \"utils/range\";\nimport styles from \"css/buttons/BigToggleButton.module.css\";\nimport ButtonText from \"components/text/ButtonText\";\n\ntype Props = {\n labels: Array;\n onToggle: (val: number) => void;\n position: number;\n};\n\nexport default function BigToggleButton({\n labels,\n onToggle,\n position,\n}: Props): JSX.Element {\n const numToggles = labels.length;\n const toggleButtons = range(numToggles).map((val) => (\n onToggle(val)}\n >\n \n {labels[val]}\n \n \n ));\n\n return (\n \n \n {toggleButtons}\n
\n );\n}\n","import ButtonWithText from \"components/buttons/ButtonWithText\";\nimport usePrefetch from \"hooks/usePrefetch\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport { useNavigate } from \"react-router-dom\";\n\ntype Props = {\n className?: string;\n disabled?: boolean;\n href: string;\n onClick?: () => boolean;\n};\n\nexport default function NextButton({\n className,\n disabled = false,\n href,\n onClick,\n}: Props): JSX.Element {\n usePrefetch(href);\n const navigate = useNavigate();\n\n if (onClick != null) {\n return (\n {\n const shouldNav = onClick();\n if (shouldNav) {\n navigate(href);\n }\n }}\n width=\"auto\"\n >\n Next\n \n );\n }\n\n return (\n \n Next\n \n );\n}\n","export default function getFileExtension(file: File): string {\n const type = file.type.toLowerCase();\n if (type.includes(\"gif\")) {\n return \"gif\";\n }\n\n // Default\n return \"png\";\n}\n","import styles from \"css/pages/generate/basic-info/BasicInfoPage.module.css\";\nimport ContainerOuter from \"components/common/ContainerOuter\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\nimport TextInput from \"components/input/TextInput\";\nimport isNumber from \"utils/isNumber\";\nimport numberWithCommas from \"utils/numberWithCommas\";\nimport numberRemoveCommas from \"utils/numberRemoveCommas\";\nimport InputWithQuestionAndLabel from \"components/input/InputWithQuestionAndLabel\";\nimport GenerateStepsContainer from \"components/common/GenerateStepsContainer\";\nimport BigToggleButton from \"components/buttons/BigToggleButton\";\nimport Blockchain from \"types/enums/Blockchain\";\nimport NextButton from \"components/buttons/NextButton\";\nimport ButtonText from \"components/text/ButtonText\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport TextButton from \"components/buttons/TextButton\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\nimport FontClass from \"types/enums/FontClass\";\nimport JSZip from \"jszip\";\nimport invariant from \"tiny-invariant\";\nimport { saveAs } from \"file-saver\";\nimport getFileExtension from \"utils/getFileExtension\";\nimport { useState } from \"react\";\nimport LoadingSpinner from \"components/loading/LoadingSpinner\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport ElementMobileNotSupported from \"components/hoc/ElementMobileNotSupported\";\nimport ImageWebp from \"components/images/ImageWebp\";\nimport GateModal from \"components/modal/GateModal\";\nimport Body1 from \"components/text/Body1\";\nimport useLogPageView from \"hooks/useLogPageView\";\nimport useWhitelistContext from \"hooks/useWhitelistContext\";\n\nconst ID = \"input_id\";\n\nfunction BlockchainInput(): JSX.Element {\n const { blockchain, setBlockchain } = useGenerateConfigContext();\n\n return (\n \n
\n {\n if (val === 0) {\n setBlockchain(Blockchain.Solana);\n } else {\n setBlockchain(Blockchain.Ethereum);\n }\n }}\n position={blockchain === Blockchain.Solana ? 0 : 1}\n />\n
\n \n );\n}\n\nfunction FolderInput(): JSX.Element {\n const { filesMap, folderName, updateProjectFiles } =\n useGenerateConfigContext();\n const [isDownloading, setIsDownloading] = useState(false);\n const [isModalShown, setIsModalShown] = useState(false);\n const { isWhitelisted } = useWhitelistContext();\n\n return (\n <>\n setIsModalShown(false)} />\n \n If you change the art layer files, you will have to re-upload\n (“Change Folder”) your main folder for the changes to\n take place.\n \n }\n question=\"Which folder should be used for this project?\"\n >\n
\n {\n if (e.target.files == null) {\n return;\n }\n\n if (\n [...e.target.files].find((file) => file.type.includes(\"gif\")) !=\n null &&\n !isWhitelisted\n ) {\n setIsModalShown(true);\n // Allow upload again\n e.target.value = \"\";\n return;\n }\n\n await updateProjectFiles(e.target.files);\n }}\n type=\"file\"\n // Directory stuff\n // @ts-ignore\n directory=\"\"\n multiple\n webkitdirectory=\"\"\n />\n \n
\n {folderName != null && (\n \n {folderName}\n \n )}\n \n Change Folder\n \n {\n if (isDownloading) {\n return;\n }\n\n setIsDownloading(true);\n\n invariant(filesMap != null);\n const zip = new JSZip();\n\n filesMap.forEach((value, key) => {\n const folder = zip.folder(key);\n value.forEach((file) => {\n folder!.file(\n `${file.name}.${getFileExtension(file)}`,\n file\n );\n });\n });\n\n const generated = await zip.generateAsync({ type: \"blob\" });\n saveAs(generated, \"files.zip\");\n\n setIsDownloading(false);\n }}\n >\n {isDownloading ? (\n \n ) : (\n \"Download Files\"\n )}\n \n
\n
\n \n \n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction GenerateMetadataInput(): JSX.Element {\n const { generateMetadata, setGenerateMetadata } = useGenerateConfigContext();\n\n return (\n \n
\n {\n if (val === 0) {\n setGenerateMetadata(true);\n } else {\n setGenerateMetadata(false);\n }\n }}\n position={generateMetadata ? 0 : 1}\n />\n
\n \n );\n}\n\nfunction NumImagesInput(): JSX.Element {\n const { numImages, setNumImages } = useGenerateConfigContext();\n const [isModalShown, setIsModalShown] = useState(true);\n const [isTouched, setIsTouched] = useState(false);\n const { isWhitelisted } = useWhitelistContext();\n\n return (\n <>\n 1000 && !isWhitelisted\n }\n onHide={() => setIsModalShown(false)}\n />\n \n 1000}\n onChange={(val) => {\n const valCommasRemoved = numberRemoveCommas(val);\n if (!isNumber(valCommasRemoved)) {\n return;\n }\n setIsTouched(true);\n setNumImages(Number(valCommasRemoved));\n }}\n value={numberWithCommas(numImages)}\n />\n \n \n );\n}\n\nfunction ProjectNameInput(): JSX.Element {\n const { projectName, setProjectName } = useGenerateConfigContext();\n\n return (\n \n \n \n );\n}\n\nexport default function BasicInfoPage(): JSX.Element {\n useLogPageView();\n const { isWhitelisted } = useWhitelistContext();\n const { numImages } = useGenerateConfigContext();\n const hasError = !isWhitelisted && numImages > 1000;\n\n return (\n \n \n \n \n \n \n {/* */}\n \n \n {hasError && (\n \n Please make sure all inputs are valid before continuing.\n \n )}\n \n \n \n );\n}\n","import ColorValue from \"types/enums/ColorValue\";\n\ntype Props = {\n colorValue: ColorValue;\n};\n\nexport default function MoveHandleIcon({ colorValue }: Props): JSX.Element {\n return (\n \n \n \n \n \n \n \n \n );\n}\n","import styles from \"css/buttons/NextAndBackButton.module.css\";\n\ntype Props = {\n children: any;\n};\n\nexport default function NextAndBackButton({ children }: Props): JSX.Element {\n return
{children}
;\n}\n","import ButtonWithText from \"components/buttons/ButtonWithText\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\n\ntype Props = {\n className?: string;\n disabled?: boolean;\n href: string;\n};\n\nexport default function BackButton({\n className,\n disabled = false,\n href,\n}: Props): JSX.Element {\n return (\n \n Back\n \n );\n}\n","/* eslint-disable react/jsx-no-bind */\n/* eslint-disable @typescript-eslint/no-shadow */\nimport ContainerOuter from \"components/common/ContainerOuter\";\nimport GenerateStepsContainer from \"components/common/GenerateStepsContainer\";\nimport styles from \"css/pages/generate/layer-ordering/LayerOrderingPage.module.css\";\nimport InputWithQuestionAndLabel from \"components/input/InputWithQuestionAndLabel\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\nimport {\n DragDropContext,\n DropResult,\n Droppable,\n Draggable,\n} from \"react-beautiful-dnd\";\nimport invariant from \"tiny-invariant\";\nimport { Maybe } from \"types/UtilityTypes\";\nimport ButtonText from \"components/text/ButtonText\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport MoveHandleIcon from \"components/icons/MoveHandleIcon\";\nimport NextButton from \"components/buttons/NextButton\";\nimport NextAndBackButton from \"components/buttons/NextAndBackButton\";\nimport BackButton from \"components/buttons/BackButton\";\nimport ElementMobileNotSupported from \"components/hoc/ElementMobileNotSupported\";\nimport useLogPageView from \"hooks/useLogPageView\";\n\nfunction reorder(\n list: Array,\n startIndex: number,\n endIndex: number\n): Array {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n result.splice(endIndex, 0, removed);\n\n return result;\n}\n\nfunction OrderingInput(): Maybe {\n const { filesMap, traitNamesOrdered, setTraitNamesOrdered } =\n useGenerateConfigContext();\n\n function onDragEnd(result: DropResult) {\n invariant(traitNamesOrdered != null, \"Must be true\");\n\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n\n const items = reorder(\n traitNamesOrdered,\n result.source.index,\n result.destination.index\n );\n\n setTraitNamesOrdered(items);\n }\n\n if (traitNamesOrdered == null || filesMap == null) {\n return null;\n }\n\n return (\n \n \n \n {(provided) => (\n \n {traitNamesOrdered.map((name, index) => (\n \n {(provided) => (\n \n \n
\n \n {name}\n \n \n {filesMap.get(name)!.length}\n \n
\n
\n )}\n \n ))}\n {provided.placeholder}\n
\n )}\n \n \n \n );\n}\n\nexport default function LayerOrderingPage(): JSX.Element {\n useLogPageView();\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import FontClass from \"types/enums/FontClass\";\nimport GenericInput from \"components/input/GenericInput\";\nimport inputStyles from \"css/input/InputStyles.module.css\";\nimport joinClasses from \"utils/joinClasses\";\n\ntype Props = {\n button?: JSX.Element;\n className?: string;\n label?: string;\n labelFontClass?: FontClass;\n labelTextTransform?: \"none\" | \"uppercase\";\n maxLength?: number;\n maxLengthIndicator?: boolean;\n rows?: number;\n onChange: (val: string) => void;\n placeholder?: string;\n value: string;\n};\n\nexport default function TextArea({\n button,\n className,\n label,\n labelFontClass,\n labelTextTransform = \"none\",\n maxLength,\n maxLengthIndicator = true,\n onChange,\n placeholder,\n rows = 2,\n value,\n}: Props): JSX.Element {\n const hint =\n maxLength != null && maxLengthIndicator\n ? `${maxLength - (value?.length ?? 0)} characters left`\n : undefined;\n\n return (\n \n
\n {/* Need this extra div to apply border radius to scrollbar */}\n
\n {\n const val = e.target.value;\n if (maxLength != null && val.length > maxLength) {\n return;\n }\n\n onChange(val);\n }}\n placeholder={placeholder}\n rows={rows}\n value={value}\n />\n
\n {button}\n
\n \n );\n}\n","import ContainerOuter from \"components/common/ContainerOuter\";\nimport GenerateStepsContainer from \"components/common/GenerateStepsContainer\";\nimport styles from \"css/pages/generate/metadata/MetadataPage.module.css\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\nimport InputWithQuestionAndLabel from \"components/input/InputWithQuestionAndLabel\";\nimport TextInput from \"components/input/TextInput\";\nimport TextArea from \"components/input/TextArea\";\nimport NextButton from \"components/buttons/NextButton\";\nimport Blockchain from \"types/enums/Blockchain\";\nimport { Maybe } from \"types/UtilityTypes\";\nimport isNumber from \"utils/isNumber\";\nimport TextButton from \"components/buttons/TextButton\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\nimport FontClass from \"types/enums/FontClass\";\nimport CloseButton from \"components/buttons/CloseButton\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport Body2 from \"components/text/Body2\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport sumArray from \"utils/sumArray\";\nimport NextAndBackButton from \"components/buttons/NextAndBackButton\";\nimport BackButton from \"components/buttons/BackButton\";\nimport { useState } from \"react\";\nimport Body1 from \"components/text/Body1\";\nimport ElementMobileNotSupported from \"components/hoc/ElementMobileNotSupported\";\nimport useLogPageView from \"hooks/useLogPageView\";\n\ntype ClickedProps = { clicked: boolean };\n\nfunction MetaDescriptionInput(): JSX.Element {\n const { metaDescription, setMetaDescription } = useGenerateConfigContext();\n\n return (\n \n \n \n );\n}\n\nfunction MetaNameInput({ clicked }: ClickedProps): JSX.Element {\n const { metaName, setMetaName } = useGenerateConfigContext();\n\n return (\n \n \n \n );\n}\n\n///\n/// Solana stuff\n///\n\nfunction MetaCollectionFamilyInput({ clicked }: ClickedProps): JSX.Element {\n const { metaCollectionFamily, setMetaCollectionFamily } =\n useGenerateConfigContext();\n\n return (\n \n See{\" \"}\n \n here\n {\" \"}\n for an example.\n \n }\n question=\"What is the family of this collection?\"\n >\n \n \n );\n}\n\nfunction MetaCollectionNameInput({ clicked }: ClickedProps): JSX.Element {\n const { metaCollectionName, setMetaCollectionName } =\n useGenerateConfigContext();\n\n return (\n \n \n \n );\n}\n\nfunction MetaExternalUrl(): JSX.Element {\n const { metaExternalUrl, setMetaExternalUrl } = useGenerateConfigContext();\n\n return (\n \n \n \n );\n}\n\nfunction MetaRoyaltiesRow({\n clicked,\n index,\n}: {\n clicked: boolean;\n index: number;\n}): JSX.Element {\n const { metaRoyalties, dispatchRoyalties } = useGenerateConfigContext();\n const sum = sumArray(metaRoyalties.map(({ share }) => share));\n\n return (\n
\n \n dispatchRoyalties({ type: \"update_address\", address: val, index })\n }\n value={metaRoyalties[index].address}\n />\n 100 || (clicked && sum !== 100)}\n onChange={(val) => {\n if (isNumber(val) && Number(val) > 0 && Number(val) <= 100) {\n dispatchRoyalties({\n type: \"update_share\",\n share: Number(val),\n index,\n });\n } else if (val.length === 0) {\n dispatchRoyalties({\n type: \"update_share\",\n share: 0,\n index,\n });\n }\n }}\n value={metaRoyalties[index].share.toString()}\n />\n 0}\n onClick={() => dispatchRoyalties({ type: \"remove_row\", index })}\n />\n
\n );\n}\n\nfunction MetaRoyaltiesInput({ clicked }: ClickedProps): JSX.Element {\n const { metaRoyalties, dispatchRoyalties } = useGenerateConfigContext();\n\n return (\n \n
\n \n Wallet Address\n \n Percentage\n
\n
\n {metaRoyalties.map((_royalties, index) => (\n \n ))}\n dispatchRoyalties({ type: \"add_row\" })}\n >\n + Add another wallet address\n \n
\n \n );\n}\n\nfunction MetaSellerFeeBasisPointsInput(): JSX.Element {\n const { metaSellerFeeBasisPoints, setMetaSellerFeeBasisPoints } =\n useGenerateConfigContext();\n\n return (\n \n {\n if (!isNumber(val)) {\n return;\n }\n setMetaSellerFeeBasisPoints(Number(val));\n }}\n value={metaSellerFeeBasisPoints.toString()}\n />\n \n );\n}\n\nfunction MetaSymbol(): JSX.Element {\n const { metaSymbol, setMetaSymbol } = useGenerateConfigContext();\n\n return (\n \n \n \n );\n}\n\nfunction SolanaMetaInputs({ clicked }: ClickedProps): Maybe {\n const { blockchain } = useGenerateConfigContext();\n\n if (blockchain !== Blockchain.Solana) {\n return null;\n }\n return (\n <>\n \n \n \n \n \n \n \n );\n}\n\nexport default function MetadataPage(): JSX.Element {\n useLogPageView();\n const [clicked, setClicked] = useState(false);\n const {\n blockchain,\n metaCollectionFamily,\n metaCollectionName,\n metaName,\n metaRoyalties,\n } = useGenerateConfigContext();\n const sum = sumArray(metaRoyalties.map(({ share }) => share));\n\n const solanaError =\n blockchain === Blockchain.Solana &&\n (sum !== 100 ||\n metaRoyalties.find(({ address }) => address.length === 0) != null ||\n metaCollectionFamily == null ||\n metaCollectionFamily.length === 0 ||\n metaCollectionName == null ||\n metaCollectionName.length === 0);\n const hasError = metaName == null || metaName.length === 0 || solanaError;\n\n return (\n \n \n \n \n \n \n \n \n {\n setClicked(true);\n return !hasError;\n }}\n />\n \n {hasError && clicked && (\n \n Please make sure all inputs are valid before continuing.\n \n )}\n \n \n \n );\n}\n","import styles from \"css/input/InputWithLeftLabel.module.css\";\nimport ButtonText from \"components/text/ButtonText\";\nimport ColorClass from \"types/enums/ColorClass\";\n\ntype Props = {\n children: any;\n label: string;\n};\n\nexport default function InputWithLeftLabel({\n children,\n label,\n}: Props): JSX.Element {\n return (\n <>\n \n {label}\n \n
{children}
\n \n );\n}\n","import GenericModal from \"components/modal/GenericModal\";\nimport styles from \"css/modal/PasteFromCsvModal.module.css\";\nimport Body1 from \"components/text/Body1\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport TextArea from \"components/input/TextArea\";\nimport { useState } from \"react\";\nimport ButtonWithText from \"components/buttons/ButtonWithText\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport isNumber from \"utils/isNumber\";\n\ntype CsvLine = [string, number];\n\nconst PLACEHOLDER = `e.g.\n\nBlue Hair, 10\nGreen Hair, 20\nRed Hair, 5\n`;\n\nfunction isCsvLine(line: string): boolean {\n const splits = line.split(\",\").map((part) => part.trim());\n return splits.length === 2 && isNumber(splits[1]);\n}\n\nfunction isTsvLine(line: string): boolean {\n const splits = line.split(\"\\t\").map((part) => part.trim());\n return splits.length === 2 && isNumber(splits[1]);\n}\n\nfunction isLineValid(line: string): boolean {\n return isCsvLine(line) || isTsvLine(line);\n}\n\nfunction isContentValid(content: string): boolean {\n const lines = content.split(\"\\n\");\n return lines.every((line) => isLineValid(line));\n}\n\nfunction parseContent(content: string): Array {\n const lines = content.split(\"\\n\");\n const linesParsed = lines.map((line) => {\n const separator = isCsvLine(line) ? \",\" : isTsvLine(line) ? \"\\t\" : null;\n if (separator == null) {\n throw new Error(\"should not reach\");\n }\n const splits: Array = line\n .split(separator)\n .map((part) => part.trim());\n splits[1] = Number(splits[1]);\n return splits as CsvLine;\n });\n\n return linesParsed;\n}\n\ntype Props = {\n isShown: boolean;\n onHide: () => void;\n onSubmit: (val: Array) => void;\n};\n\nexport default function PasteFromCsvModal({\n isShown,\n onHide,\n onSubmit,\n}: Props): JSX.Element {\n const [content, setContent] = useState(\"\");\n\n return (\n \n
\n \n Paste in comma-separated or tab-separated values (pasting from a\n spreadsheet should work).\n \n
\n setContent(val)}\n placeholder={PLACEHOLDER}\n rows={20}\n value={content}\n />\n
\n {\n onSubmit(parseContent(content));\n onHide();\n }}\n >\n Use Values\n \n
\n \n );\n}\n","export default function formatPercentage(num: number): string {\n const formatted = num.toFixed(2);\n const split = formatted.split(\".\");\n if (split[1] === \"00\") {\n return split[0];\n }\n if (split[1][1] === \"0\") {\n return formatted.slice(0, -1);\n }\n return formatted;\n}\n","import styles from \"css/pages/generate/trait-allocation/AllocateSingleTrait.module.css\";\nimport { useState } from \"react\";\nimport ButtonWithText from \"components/buttons/ButtonWithText\";\nimport InputWithLeftLabel from \"components/input/InputWithLeftLabel\";\nimport InputWithQuestionAndLabel from \"components/input/InputWithQuestionAndLabel\";\nimport TextInput from \"components/input/TextInput\";\nimport PasteFromCsvModal from \"components/modal/PasteFromCsvModal\";\nimport Body1 from \"components/text/Body1\";\nimport Body2 from \"components/text/Body2\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport FontClass from \"types/enums/FontClass\";\nimport { Maybe } from \"types/UtilityTypes\";\nimport formatPercentage from \"utils/formatPercentage\";\nimport isNumber from \"utils/isNumber\";\nimport numberRemoveCommas from \"utils/numberRemoveCommas\";\nimport numberWithCommas from \"utils/numberWithCommas\";\nimport removeExt from \"utils/removeExt\";\nimport sumArray from \"utils/sumArray\";\n\nfunction TraitInput({\n traitName,\n traitValue,\n}: {\n traitName: string;\n traitValue: string;\n}): JSX.Element {\n const { dispatchTraitWeights, numImages, traitWeights } =\n useGenerateConfigContext();\n const weight = traitWeights.get(traitName)?.get(traitValue) ?? 0;\n\n return (\n <>\n \n {\n const valCommasRemoved = numberRemoveCommas(val);\n if (!isNumber(valCommasRemoved)) {\n return;\n }\n dispatchTraitWeights({\n type: \"update_for_value\",\n traitName,\n traitValue,\n weight: Number(valCommasRemoved),\n });\n }}\n value={numberWithCommas(weight)}\n />\n \n \n {formatPercentage((weight * 100) / numImages)}%\n \n \n );\n}\n\ntype Props = {\n traitName: string;\n};\n\nexport default function AllocateSingleTrait({\n traitName,\n}: Props): Maybe {\n const { dispatchTraitWeights, filesMap, numImages, traitWeights } =\n useGenerateConfigContext();\n const traitMap = traitWeights.get(traitName);\n const totalAllocated =\n traitMap == null ? 0 : sumArray([...traitMap.values()]);\n const numLeftToAllocate = numImages - totalAllocated;\n const [isCsvModalShown, setIsCsvModalShown] = useState(false);\n\n if (filesMap == null) {\n return null;\n }\n\n return (\n <>\n setIsCsvModalShown(false)}\n onSubmit={(lines) => {\n dispatchTraitWeights({\n type: \"update_for_values\",\n traitName,\n values: lines.map((line) => ({\n traitValue: line[0],\n weight: line[1],\n })),\n });\n }}\n />\n \n For the trait “{traitName},” how many of each variant\n should be used?\n \n }\n >\n \n Number left to allocate: {numberWithCommas(numLeftToAllocate)}\n \n
\n \n dispatchTraitWeights({\n type: \"allocate_evenly\",\n numTotal: numImages,\n traitName,\n traitValues: [\n ...filesMap.get(traitName)!.map((file) => file.name),\n ],\n })\n }\n >\n Allocate Evenly\n \n setIsCsvModalShown(true)}\n >\n Paste from CSV or TSV\n \n
\n
\n {filesMap.get(traitName)!.map((file) => (\n \n ))}\n
\n \n \n );\n}\n","export default function removeExt(fileName: string): string {\n return fileName.split(\".\")[0];\n}\n","import ContainerOuter from \"components/common/ContainerOuter\";\nimport GenerateStepsContainer from \"components/common/GenerateStepsContainer\";\nimport useGenerateConfigContext from \"hooks/useGenerateConfigContext\";\nimport { Maybe } from \"types/UtilityTypes\";\nimport AllocateSingleTrait from \"components/pages/generate/trait-allocation/AllocateSingleTrait\";\nimport NextAndBackButton from \"components/buttons/NextAndBackButton\";\nimport NextButton from \"components/buttons/NextButton\";\nimport BackButton from \"components/buttons/BackButton\";\nimport ElementMobileNotSupported from \"components/hoc/ElementMobileNotSupported\";\nimport useLogPageView from \"hooks/useLogPageView\";\n\nexport default function TraitAllocationPage(): Maybe {\n useLogPageView();\n const { traitNamesOrdered } = useGenerateConfigContext();\n\n if (traitNamesOrdered == null) {\n return null;\n }\n\n return (\n \n \n \n {traitNamesOrdered?.map((traitName) => (\n \n ))}\n \n \n \n \n \n \n \n );\n}\n","enum SortOrder {\n Asc = \"Asc\",\n Desc = \"Desc\",\n}\n\nexport default SortOrder;\n","import SortOrder from \"types/enums/SortOrder\";\n\nexport default function getCompareByProperty<\n T extends { [key: string]: any },\n K extends keyof T\n>(\n key: K,\n order: SortOrder = SortOrder.Asc\n): (firstEl: T, secondEl: T) => number {\n return (firstEl: T, secondEl: T) => {\n if (firstEl[key] == null) {\n return 1;\n }\n if (secondEl[key] == null) {\n return -1;\n }\n\n if (firstEl[key] < secondEl[key]) {\n return order === SortOrder.Asc ? -1 : 1;\n }\n if (firstEl[key] > secondEl[key]) {\n return order === SortOrder.Asc ? 1 : -1;\n }\n return 0;\n };\n}\n","import ContainerOuter from \"components/common/ContainerOuter\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport styles from \"css/pages/shuffle/ShufflePage.module.css\";\nimport Header1 from \"components/text/Header1\";\nimport Body1 from \"components/text/Body1\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport ButtonWithText from \"components/buttons/ButtonWithText\";\nimport ButtonTheme from \"types/enums/ButtonTheme\";\nimport DS_STORE from \"constants/DsStore\";\nimport { Maybe } from \"types/UtilityTypes\";\nimport { useState } from \"react\";\nimport FolderGrid from \"components/common/FolderGrid\";\nimport LoadingSpinner from \"components/loading/LoadingSpinner\";\nimport ColorValue from \"types/enums/ColorValue\";\nimport JSZip from \"jszip\";\nimport randomNumber from \"utils/randomNumber\";\nimport invariant from \"tiny-invariant\";\nimport getFileExtension from \"utils/getFileExtension\";\nimport { saveAs } from \"file-saver\";\nimport TextButton from \"components/buttons/TextButton\";\nimport TextButtonTheme from \"types/enums/TextButtonTheme\";\nimport FontClass from \"types/enums/FontClass\";\nimport ElementMobileNotSupported from \"components/hoc/ElementMobileNotSupported\";\nimport ImageWebp from \"components/images/ImageWebp\";\nimport GateModal from \"components/modal/GateModal\";\nimport useLogPageView from \"hooks/useLogPageView\";\nimport useWhitelistContext from \"hooks/useWhitelistContext\";\nimport getCompareByProperty from \"utils/getCompareByProperty\";\nimport TextInput from \"components/input/TextInput\";\nimport emptyFunction from \"utils/emptyFunction\";\n\nconst ID = \"input_id\";\n\nfunction getFileFolder(relPath: string, index: number): Maybe {\n const splits = relPath.split(\"/\");\n if (splits.length !== 3) {\n return null;\n }\n return splits[index];\n}\n\n/**\n * Updates the \"name\" attribute of a metadata file.\n *\n * The name attribute follows the pattern: \"NAME #1\", \"NAME #2\", etc.\n *\n * But since we are shuffling the order of metadata files, the number part\n * of the name must be updated.\n */\nasync function replaceNameInMetadata(file: File, num: number): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsText(file, \"UTF-8\");\n reader.onload = (e) => {\n const text = JSON.parse(e.target!.result as string);\n if (text.name != null) {\n text.name = text.name.replace(/#\\d+/, `#${num}`);\n }\n if (text.image != null) {\n text.image = text.image.replace(/\\d+/, `${num}`);\n }\n if (text.edition != null) {\n text.edition = Number(text.edition.toString().replace(/\\d+/, `${num}`));\n }\n if (text.properties?.files != null) {\n text.properties.files = text.properties.files.map(\n (item: { uri: string; type: string }) =>\n item.type.includes(\"image\")\n ? { ...item, uri: item.uri.replace(/\\d+/, `${num}`) }\n : item\n );\n }\n resolve(JSON.stringify(text, null, 2));\n };\n reader.onerror = (e) => {\n reject(e);\n };\n });\n}\n\ntype Files = Array;\ntype Folder = {\n folderName: string;\n images: Files;\n metadata: Files;\n};\n\nfunction parseFiles(files: FileList): Folder {\n const filesArr = [...files].filter((file) => file.name !== DS_STORE);\n const folder: Folder = {\n folderName: \"\",\n images: [],\n metadata: [],\n };\n\n filesArr.forEach((file) => {\n // @ts-ignore\n const folderName = getFileFolder(file.webkitRelativePath, 1);\n // @ts-ignore\n const outerFolderName = getFileFolder(file.webkitRelativePath, 0);\n if (folderName == null || ![\"images\", \"metadata\"].includes(folderName)) {\n throw new Error(\n \"Invalid directory structure. Uploaded folder must only contain two folders named ‘images' and ‘metadata'.\"\n );\n }\n\n folder[folderName as \"images\" | \"metadata\"].push(file);\n folder.folderName = outerFolderName!;\n });\n\n if (folder.images.length !== folder.metadata.length) {\n throw new Error(\n \"The images and metadata folders must contain the same number of files.\"\n );\n }\n\n return folder;\n}\n\n// TODO: should consolidate this with similar code in GeneratePage\nfunction AddFolder({\n onAddFolder,\n}: {\n onAddFolder: (val: Folder) => void;\n}): JSX.Element {\n const [errorMessage, setErrorMessage] = useState>(null);\n const [isModalShown, setIsModalShown] = useState(false);\n const { isWhitelisted } = useWhitelistContext();\n\n return (\n <>\n setIsModalShown(false)} />\n
\n \n \n Select which folders you want to shuffle. Please upload the folders\n that you downloaded from Nifty Generator (not your original art\n layers)!\n \n {\n setErrorMessage(null);\n if (e.target.files == null) {\n return;\n }\n\n if (!isWhitelisted) {\n setIsModalShown(true);\n e.target.value = \"\";\n return;\n }\n\n try {\n const folder = parseFiles(e.target.files);\n onAddFolder(folder);\n } catch (err: any) {\n setErrorMessage(err.message);\n }\n }}\n type=\"file\"\n // Directory stuff\n // @ts-ignore\n directory=\"\"\n multiple\n webkitdirectory=\"\"\n />\n \n Add Folder\n \n {errorMessage != null && (\n \n {errorMessage}\n \n )}\n
\n \n );\n}\n\nfunction FolderItem({ folder }: { folder: Folder }): JSX.Element {\n return (\n
\n \n {folder.folderName}\n
\n );\n}\n\nexport default function ShufflePage(): JSX.Element {\n useLogPageView();\n const [folders, setFolders] = useState>([]);\n const [isDownloading, setIsDownloading] = useState(false);\n const [isMoreInfoShown, setIsMoreInfoShown] = useState(false);\n const [startingIndex, setStartingIndex] = useState(\"\");\n\n return (\n \n \n \n
\n The Shuffle Tool\n {/* TODO: tweak copy */}\n \n If your collection is made up of multiple Nifty Generator\n projects, you should shuffle the outputs.\n
\n
\n For example, if you’re making a collection of cat and dog NFTs,\n you may have used Nifty Generator to create a folder of cat images\n and a folder of dog images. Now you can use this Shuffle tool to\n mix them all up, and it will automatically rename the files and\n update the metadata.\n {isMoreInfoShown && (\n <>\n
\n
\n Why is this necessary? Well, let's say you generated\n images using two projects—cats and dogs—and you want to upload\n all of the images to Candy Machine. You don't want to\n upload all the cats first, and all the dogs next, because then\n everyone who mints at the beginning will get a cat! So, in\n order to randomize the order of all the NFTs, you can use this\n tool.\n \n )}\n \n setIsMoreInfoShown((curr) => !curr)}\n >\n {isMoreInfoShown ? \"Hide additional info\" : \"See more info\"}\n \n setFolders((curr) => [...curr, val])}\n />\n \n {folders.map((folder, index) => (\n // eslint-disable-next-line react/no-array-index-key\n \n ))}\n \n {folders.length > 0 && (\n \n )}\n {folders.length > 0 && (\n {\n // OVERVIEW\n //\n // Do this in a loop, until there are no more files left:\n // - Remove random image and metadata files\n // - Rename image file\n // - Rename metadata file\n // - Modify metadata file's image name\n // - Add modified files to new folders\n //\n // Then, download resulting folder\n\n setIsDownloading(true);\n\n const allImages = folders.reduce(\n (acc: Files, currVal: Folder) => [\n ...acc,\n ...currVal.images.sort(getCompareByProperty(\"name\")),\n ],\n []\n );\n const allMetadata = folders.reduce(\n (acc: Files, currVal: Folder) => [\n ...acc,\n ...currVal.metadata.sort(getCompareByProperty(\"name\")),\n ],\n []\n );\n\n invariant(\n allImages.length === allMetadata.length,\n \"Must be same number of image files as metadata files\"\n );\n\n const zip = new JSZip();\n const imagesFolder = zip.folder(\"images\");\n const metadataFolder = zip.folder(\"metadata\");\n invariant(imagesFolder != null && metadataFolder != null);\n let index =\n startingIndex.length === 0 ? 0 : Number(startingIndex);\n\n while (allImages.length > 0) {\n const randomIndex = randomNumber(0, allImages.length - 1);\n\n const [image] = allImages.splice(randomIndex, 1);\n const [metadata] = allMetadata.splice(randomIndex, 1);\n // eslint-disable-next-line no-await-in-loop\n const metadataStr = await replaceNameInMetadata(\n metadata,\n index\n );\n\n imagesFolder.file(\n `${index}.${getFileExtension(image)}`,\n image\n );\n metadataFolder.file(`${index}.json`, metadataStr);\n\n index++;\n }\n\n const generated = await zip.generateAsync({ type: \"blob\" });\n saveAs(generated, \"shuffled.zip\");\n\n setIsDownloading(false);\n }}\n >\n {isDownloading ? (\n \n ) : (\n \"Shuffle\"\n )}\n \n )}\n
\n
\n
\n
\n );\n}\n","import { Route, Routes as RoutesImport } from \"react-router-dom\";\nimport LandingPage from \"components/pages/landing/LandingPage\";\nimport HowItWorksPage from \"components/pages/how-it-works/HowItWorksPage\";\nimport HowItWorksPage1 from \"components/pages/how-it-works/HowItWorksPage1\";\nimport HowItWorksPage2 from \"components/pages/how-it-works/HowItWorksPage2\";\nimport HowItWorksPage3 from \"components/pages/how-it-works/HowItWorksPage3\";\nimport GeneratePage from \"components/pages/generate/GeneratePage\";\nimport BasicInfoPage from \"components/pages/generate/basic-info/BasicInfoPage\";\nimport GenerationPage from \"components/pages/generate/generation/GenerationPage\";\nimport LayerOrderingPage from \"components/pages/generate/layer-ordering/LayerOrderingPage\";\nimport MetadataPage from \"components/pages/generate/metadata/MetadataPage\";\nimport TraitAllocationPage from \"components/pages/generate/trait-allocation/TraitAllocationPage\";\nimport ShufflePage from \"components/pages/shuffle/ShufflePage\";\n\n// TODO: figure out how to set page titles\nexport default function Routes(): JSX.Element {\n return (\n \n } />\n\n } />\n } />\n } />\n } />\n } />\n }\n />\n\n } />\n } />\n } />\n } />\n\n } />\n \n );\n}\n","import BodyText from \"components/text/BodyText\";\nimport FontClass from \"types/enums/FontClass\";\nimport type { Props } from \"components/text/BodyText\";\n\nexport default function Body1Bold(props: Omit) {\n return ;\n}\n","import Body1Bold from \"components/text/Body1Bold\";\nimport ColorClass from \"types/enums/ColorClass\";\nimport ResponsiveContainer from \"components/ResponsiveContainer\";\nimport styles from \"css/pages/landing/LandingBanner.module.css\";\nimport DiscordIcon24 from \"components/icons/DiscordIcon24\";\nimport ColorValue from \"types/enums/ColorValue\";\n\nexport default function LandingBanner(): JSX.Element {\n return (\n // For some reason, margin 0 is needed for mobile browsers (otherwise there's a tiny top and bottom margin)\n \n
\n \n
\n \n Have feedback, or need help? Join our Discord!\n \n \n Have feedback? Join our Discord!\n \n \n
\n
\n
\n \n );\n}\n","import { initializeApp } from \"firebase/app\";\n\nconst firebaseConfig = {\n apiKey: \"AIzaSyBIbfbcEWDG6_7ZYbKeEriBEBSjJhsX-x0\",\n authDomain: \"nifty-generator.firebaseapp.com\",\n projectId: \"nifty-generator\",\n storageBucket: \"nifty-generator.appspot.com\",\n messagingSenderId: \"884294478555\",\n appId: \"1:884294478555:web:7ee65566fd1b6edd1efafe\",\n};\n\n// Initialize Firebase\nconst firebaseApp = initializeApp(firebaseConfig);\nexport default firebaseApp;\n","import \"css/global/Global.css\";\n\n// Colors\nimport \"css/global/colors/ColorVariables.css\";\nimport \"css/global/colors/BackgroundColorClasses.css\";\nimport \"css/global/colors/ColorClasses.css\";\n\n// Fonts\nimport \"css/global/fonts/FontClasses.css\";\nimport \"css/global/fonts/FontVariables.css\";\nimport \"css/global/fonts/Praline.css\";\n\nimport Routes from \"routes/Routes\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport LandingBanner from \"components/pages/landing/LandingBanner\";\nimport { GenerateConfigContextProvider } from \"context/GenerateConfigContext\";\nimport { SolanaContextProvider } from \"context/SolanaContext\";\nimport \"utils/firebase/firebaseApp\";\n\nfunction App() {\n return (\n \n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","import { ReportHandler } from \"web-vitals\";\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import(\"web-vitals\").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import { StrictMode } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"error\":\"MetadataPage_error__2DA8a\",\"metaDescriptionInput\":\"MetadataPage_metaDescriptionInput__1CzDj\",\"metaNameInput\":\"MetadataPage_metaNameInput__2T886\",\"royalties\":\"MetadataPage_royalties__82hFd\",\"royaltiesLabels\":\"MetadataPage_royaltiesLabels__M6vEG\",\"royaltiesLabelsLeft\":\"MetadataPage_royaltiesLabelsLeft__20_mY\",\"royaltiesRow\":\"MetadataPage_royaltiesRow__257-L\",\"walletAddress\":\"MetadataPage_walletAddress__2s_gx\",\"walletPercent\":\"MetadataPage_walletPercent__2Hu0Z\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"addFolder\":\"ShufflePage_addFolder__3geId\",\"addFolderButton\":\"ShufflePage_addFolderButton__2WW4v\",\"addFolderDescription\":\"ShufflePage_addFolderDescription__2_rOn\",\"addFolderImage\":\"ShufflePage_addFolderImage__Ov3bo\",\"addFolderInput\":\"ShufflePage_addFolderInput__2Cwrv\",\"containerInner\":\"ShufflePage_containerInner__StquA\",\"description\":\"ShufflePage_description__2KxhM\",\"errorMessage\":\"ShufflePage_errorMessage__VVk3y\",\"folderGrid\":\"ShufflePage_folderGrid__1oa8x\",\"folderImage\":\"ShufflePage_folderImage__2c1NT\",\"folderItem\":\"ShufflePage_folderItem__2GkCf\",\"moreInfoButton\":\"ShufflePage_moreInfoButton__2_HqD\",\"shuffleButton\":\"ShufflePage_shuffleButton__2Js26\",\"textInput\":\"ShufflePage_textInput__fJGq8\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"ButtonWithText_button__3L26v\",\"disabled\":\"ButtonWithText_disabled__1AZjM\",\"buttonAutoWidth\":\"ButtonWithText_buttonAutoWidth__28ZVw\",\"icon\":\"ButtonWithText_icon__2Q4Dc\",\"iconLeft\":\"ButtonWithText_iconLeft__3mpZI\",\"iconRight\":\"ButtonWithText_iconRight__gLdKz\",\"label\":\"ButtonWithText_label__2iIsp\",\"linkContent\":\"ButtonWithText_linkContent__1y2x1\",\"purpleTheme\":\"ButtonWithText_purpleTheme__3OjtW\",\"purpleThemeLink\":\"ButtonWithText_purpleThemeLink__1wv16\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"TextButton_button__gd9io\",\"iconContainer\":\"TextButton_iconContainer__32HZ_\",\"buttonNavy\":\"TextButton_buttonNavy__1rAMo\",\"buttonNavyActive\":\"TextButton_buttonNavyActive__1hBUe\",\"buttonPurple\":\"TextButton_buttonPurple__4ehfy\",\"buttonPurpleActive\":\"TextButton_buttonPurpleActive__cpmKM\",\"buttonWhite\":\"TextButton_buttonWhite__wY9Zj\",\"buttonWhiteActive\":\"TextButton_buttonWhiteActive__1VTl6\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerOuter\":\"MenuMobile_containerOuter__ETY6v\",\"backgroundOverlayFadeIn\":\"MenuMobile_backgroundOverlayFadeIn__1EEQH\",\"background-overlay-fade-in\":\"MenuMobile_background-overlay-fade-in__wSdbI\",\"backgroundOverlayFadeOut\":\"MenuMobile_backgroundOverlayFadeOut__16pu2\",\"background-overlay-fade-out\":\"MenuMobile_background-overlay-fade-out__2vCon\",\"closeButton\":\"MenuMobile_closeButton__9-NhI\",\"container\":\"MenuMobile_container__ajh_K\",\"slide-in\":\"MenuMobile_slide-in__3brV-\",\"firstRow\":\"MenuMobile_firstRow__C77yq\",\"icons\":\"MenuMobile_icons__1NJk3\",\"slideOut\":\"MenuMobile_slideOut__19gJ5\",\"slide-out\":\"MenuMobile_slide-out__1X8gN\",\"textButtons\":\"MenuMobile_textButtons__soPNK\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"bigToggleBlockchain\":\"BasicInfoPage_bigToggleBlockchain__1j-ih\",\"bigToggleMetadata\":\"BasicInfoPage_bigToggleMetadata__1P5by\",\"changeFolderInput\":\"BasicInfoPage_changeFolderInput__2jCDS\",\"error\":\"BasicInfoPage_error__3yOuU\",\"folderImage\":\"BasicInfoPage_folderImage__SznfA\",\"folderInput\":\"BasicInfoPage_folderInput__1AVay\",\"folderInputText\":\"BasicInfoPage_folderInputText__1xfs1\",\"numImagesInput\":\"BasicInfoPage_numImagesInput__FT6RJ\",\"projectNameInput\":\"BasicInfoPage_projectNameInput__2xowB\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerInner\":\"HowItWorksPage_containerInner__2WhlJ\",\"folderStructureDescription\":\"HowItWorksPage_folderStructureDescription__beOlK\",\"folderStructureImageDesktop\":\"HowItWorksPage_folderStructureImageDesktop__2uJJf\",\"folderStructureImageMobile\":\"HowItWorksPage_folderStructureImageMobile__2ZVtu\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"body\":\"ContactUsModal_body__1bJhy\",\"description\":\"ContactUsModal_description__1Bukb\",\"teamMemberProfile\":\"ContactUsModal_teamMemberProfile__1GoBv\",\"teamMemberProfileDescription\":\"ContactUsModal_teamMemberProfileDescription__1xTea\",\"teamMemberProfileImage\":\"ContactUsModal_teamMemberProfileImage__bJVkF\",\"teamMemberProfileTwitter\":\"ContactUsModal_teamMemberProfileTwitter__1brLq\",\"teamMemberProfiles\":\"ContactUsModal_teamMemberProfiles__3DIkC\",\"imageContainer\":\"ContactUsModal_imageContainer__3KEUv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"chooseFolder\":\"GeneratePage_chooseFolder__15BPF\",\"chooseFolderButton\":\"GeneratePage_chooseFolderButton__3bBn3\",\"chooseFolderDescription\":\"GeneratePage_chooseFolderDescription__2AVTy\",\"chooseFolderImage\":\"GeneratePage_chooseFolderImage__s32EP\",\"chooseFolderInput\":\"GeneratePage_chooseFolderInput__3Dm_i\",\"containerInner\":\"GeneratePage_containerInner__3eNjx\",\"projectGrid\":\"GeneratePage_projectGrid__5xDn-\"};"],"sourceRoot":""}