{"version":3,"file":"static/js/464.d9f39deb.chunk.js","mappings":"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","sources":["ui/DropdownSelect.jsx","patch/DownloadInfoTooltip.jsx","patch/Upload.jsx","game/snes.js","game/rdc.js","game/big_text_table.js","game/rom.js","patch/Patch.jsx","spoiler/styled.js","spoiler/region_ordering.js","spoiler/Spoiler.jsx","ui/BootstrapIcon.jsx","ui/Markdown.jsx","ui/MessageCard.jsx","ui/PrefixInputGroup.jsx","util.js"],"sourcesContent":["import React, { useState } from 'react';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\n\nimport castArray from 'lodash/castArray';\n\n// through bootstrap \"$input-btn-border-width\" -> \"$border-width\"\nconst inputBorderWidth = '1px';\nconst gray600 = '#6c757d';\nconst caretWidth = '.3em';\n// through bootstrap \"$caret-width\" * .85\nconst caretSpacing = `${.3 * .85}em`;\n\n/* Even though binding styling to components is good for all the reasons\n   styled-components points out, we can't do that easily when integrating with\n   bootstrap since styled-components has a bad time with innerRef. Because of\n   this it is easier to adjust the style with global css.\n*/\nconst InputGroupDropdownStyling = createGlobalStyle`\n  .input-group {\n    > .dropdown {\n      flex: 1 1 0%;\n\n      > .form-control {\n        margin-bottom: 0;\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n      }\n\n      :not(:last-child) > .form-control {\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0;\n      }\n      :not(:first-child) > .form-control {\n        border-top-left-radius: 0;\n        border-bottom-left-radius: 0;\n      }\n\n      + .dropdown > .form-control,\n      + .form-control,\n      + .form-select,\n      + .form-file {\n        margin-left: -${inputBorderWidth};\n      }\n    }\n\n    > .form-control,\n    > .form-select,\n    > .form-file {\n      + .dropdown > .form-control {\n        margin-left: -${inputBorderWidth};\n      }\n    }\n  }\n`;\n\nconst Placeholder = styled.span`\n  color: ${gray600};\n  white-space: nowrap;\n`;\n\n/* The caret needs to be replicated since bootstrap applies it as an pseudo\n   after element to the dropdown button, while we need it after an arbitrary\n   option element.\n*/\nconst Caret = styled.div`\n  margin-left: ${caretSpacing};\n  border: ${caretWidth} solid;\n  border-right-color: transparent;\n  border-left-color: transparent;\n  border-${props => props.up ? 'top' : 'bottom'}: none;\n`;\n\nconst menuModifiers = {\n    adjustStyle: {\n        enabled: true, order: 875,\n        fn: (data) => ({\n            ...data, styles: {\n                ...data.styles,\n                marginTop: 0,\n                borderTop: 'none',\n                borderTopLeftRadius: 0,\n                borderTopRightRadius: 0,\n                width: '100%',\n                maxHeight: '25em',\n                overflow: 'hidden auto',\n            }\n        })\n    }\n};\n\nexport default function DropdownSelect(props) {\n    const [open, setOpen] = useState(false);\n\n    const { index, onIndexChange } = props;\n    const children = castArray(props.children);\n\n    const toggle = () => setOpen(!open);\n    const select = (i) => { onIndexChange && onIndexChange(i); };\n\n    return (\n        <>\n            <InputGroupDropdownStyling />\n            <Dropdown isOpen={open} toggle={toggle}>\n                <DropdownToggle\n                    tag=\"div\"\n                    className=\"form-control\"\n                    data-toggle=\"dropdown\"\n                    aria-expanded={open}>\n                    {!open && index != null ?\n                        children[index] :\n                        <Placeholder>{props.placeholder}</Placeholder>\n                    }\n                    <Caret up={open} />\n                </DropdownToggle>\n                <DropdownMenu modifiers={menuModifiers}>\n                    {children.map((option, i) =>\n                        <DropdownItem key={i}\n                            active={i === index}\n                            onClick={() => select(i)}>\n                            {option}\n                        </DropdownItem>\n                    )}\n                </DropdownMenu>\n            </Dropdown>\n        </>\n    );\n}\n","import React from 'react';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { UncontrolledTooltip } from 'reactstrap';\n\nimport Markdown from '../ui/Markdown';\nimport { InfoCircleFill } from '../ui/BootstrapIcon';\n\nconst smz3Tooltip = `\nFilename parts legend:\n\n* \\`SMZ3\\`: Super Metroid / Link to the Past Randomizer\n* \\`V\\`: Major.Minor version\n* \\`ZL+SL\\`: LttP and SM logic\n  * LttP: Normal, \\`n\\`\n  * SM: Normal, \\`n\\`, or Hard, \\`h\\`\n* \\`S\\`: Sword location\n  * Randomized if missing\n  * On Link's Uncle if \\`u\\`\n  * Early location if \\`e\\`\n* \\`M\\`: Morph location\n  * Randomized if missing\n  * Original location if \\`o\\`\n  * Early location if \\`e\\`\n* \\`K\\`: Key shuffle\n  * None if missing\n  * Keysanity if \\`k\\`\n* \\`G\\`: Goal\n  * Defeat Both if missing\n  * Fast Ganon if \\`f\\`\n  * All dungeons if \\`a\\`\n* \\`To\\`: Open Tower\n  * 7 Crystals if missing\n  * Random if \\`r\\`\n  * 0-6 Crystals if \\`[0-6]\\`\n* \\`Vu\\`: Ganon Vulnerable\n  * 7 Crystals if missing\n  * Random if \\`r\\`\n  * 0-6 Crystals if \\`[0-6]\\`\n* \\`Tr\\`: Open Tourian\n  * 4 Bosses if missing\n  * Random if \\`r\\`\n  * 0-3 Bosses if \\`[0-3]\\`\n* Seed number, or seed guid for race roms\n* Player name for Multiworld roms\n`;\n\nconst smTooltip = `\nFilename parts legend:\n\n* \\`SM\\`: Super Metroid Randomizer\n* \\`V\\`: Major.Minor version\n* \\`L\\`: Logic\n  * Casual if \\`c\\`\n  * Tournament if \\`t\\`\n* \\`I\\`: Item placement\n  * Major/Minor split if \\`s\\`\n  * Full randomization if \\`f\\`\n* Seed number, or seed guid for race roms\n* Player name for Multiworld roms\n`;\n\nconst InfoHover = styled(InfoCircleFill)`\n  width: 1em;\n  height: 1em;\n`;\n\nconst tooltipWidth = '350px';\n\nconst tooltipModifiers = {\n    adjustStyle: {\n        enabled: true, order: 875,\n        fn: (data) => ({ ...data, styles: { ...data.styles, maxWidth: tooltipWidth } })\n    }\n};\n\nconst TooltipStyling = createGlobalStyle`\n  .rom-info .tooltip-inner {\n    max-width: ${tooltipWidth}\n  }\n`;\n\nconst StyledMarkdown = styled(Markdown)`\n  text-align: left;\n  color: silver;\n\n  code {\n    font-size: 100%;\n    color: white;\n  }\n\n  ul {\n    list-style: none;\n    padding: 0;\n\n    ul {\n      padding-left: 2em;\n    }\n  }\n`;\n\nexport default function DownloadInfoTooltip({ gameId, ...props }) {\n    return (\n        <div {...props}>\n            <InfoHover id=\"download-tooltip\" className=\"text-primary\" />\n            <TooltipStyling/>\n            <UncontrolledTooltip className=\"rom-info\" modifiers={tooltipModifiers} placement=\"right\" target=\"download-tooltip\">\n                <StyledMarkdown text={{ smz3: smz3Tooltip, sm: smTooltip }[gameId]} />\n            </UncontrolledTooltip>\n        </div>\n    );\n}\n","import React, { useState, useRef, useContext } from 'react';\nimport { Form, Row, Col, Button } from 'reactstrap';\nimport { readAsArrayBuffer } from '../util';\nimport { h32 } from 'xxhashjs';\n\nimport { GameTraitsCtx } from '../game/traits';\n\nimport localForage from 'localforage';\n\nimport some from 'lodash/some';\nimport map from 'lodash/map';\nimport compact from 'lodash/compact';\nimport hasIn from 'lodash/hasIn';\n\n/* \"SMZ3\" as UTF8 in big-endian */\nconst HashSeed = 0x534D5A33;\nconst Z3Hash = 0x8AC8FD15;\nconst SMHash = 0xCADB4883;\n\nexport default function Upload(props) {\n    const [canUpload, setCanUpload] = useState(false);\n    const fileInputSM = useRef(null);\n    const fileInputZ3 = useRef(null);\n    const game = useContext(GameTraitsCtx);\n\n    async function onSubmitRom() {\n        const smFile = fileInputSM.current.files[0];\n        const z3File = fileInputZ3.current !== null ? fileInputZ3.current.files[0] : null;\n\n        let fileDataSM = null;\n        let fileDataZ3 = null;\n        const mismatch = {};\n\n        try {\n            fileDataSM = new Uint8Array(await readAsArrayBuffer(smFile));\n            if (fileDataSM.length % 0x1000 === 0x200) {\n                fileDataSM = fileDataSM.slice(0x200);\n            }\n            mismatch.SM = h32(fileDataSM.buffer, HashSeed).toNumber() !== SMHash;\n        } catch (error) {\n            console.log(\"Could not read uploaded SM file data:\", error);\n            return;\n        }\n\n        if (game.z3) {\n            try {\n                fileDataZ3 = new Uint8Array(await readAsArrayBuffer(z3File));\n                if (fileDataZ3.length % 0x1000 === 0x200) {\n                    fileDataZ3 = fileDataZ3.slice(0x200);\n                }\n                mismatch.ALTTP = h32(fileDataZ3.buffer, HashSeed).toNumber() !== Z3Hash;\n            } catch (error) {\n                console.log(\"Could not read uploaded ALTTP file data:\", error);\n                return;\n            }\n        }\n\n        if (some(mismatch)) {\n            const games = compact(map(mismatch, (truth, name) => truth ? name : null));\n            alert(`Incorrect ${games.join(', ')} rom file(s)`);\n            return;\n        }\n\n        try {\n            if (fileDataSM)\n                await localForage.setItem('baseRomSM', new Blob([fileDataSM]));\n            if (fileDataZ3)\n                await localForage.setItem('baseRomLTTP', new Blob([fileDataZ3]));\n        } catch (error) {\n            console.log(\"Could not store file to localforage:\", error);\n            return;\n        }\n\n        props.onUpload();\n    }\n\n    const onFileSelect = () => {\n        setCanUpload(\n            game.smz3 && hasIn(fileInputSM.current, 'files[0]') && hasIn(fileInputZ3.current, 'files[0]') ||\n            game.sm && hasIn(fileInputSM.current, 'files[0]')\n        );\n    };\n\n    return (\n        <Form onSubmit={(e) => { e.preventDefault(); onSubmitRom(); }}>\n            <h6>No ROM uploaded, please upload a valid ROM file.</h6>\n            <Row className=\"justify-content-between\">\n                {game.z3 && (\n                    <Col md=\"6\">ALTTP ROM: <input type=\"file\" ref={fileInputZ3} onChange={onFileSelect} /></Col>\n                )}\n                <Col md=\"6\">SM ROM: <input type=\"file\" ref={fileInputSM} onChange={onFileSelect} /></Col>\n            </Row>\n            <Row className=\"mt-3\">\n                <Col md=\"6\">\n                    <Button type=\"submit\" color=\"primary\" disabled={!canUpload}>Upload Files</Button>\n                </Col>\n            </Row>\n        </Form>\n    );\n}\n","export function snesToPc(mapping, addr) {\n    if (mapping === 'exhirom') {\n        const ex = addr < 0x800000 ? 0x400000 : 0;\n        const pc = addr & 0x3FFFFF;\n        return ex | pc;\n    }\n    if (mapping === 'lorom') {\n        return ((addr & 0x7F0000) >>> 1) | (addr & 0x7FFF);\n    }\n    throw new Error('No known addressing mode supplied');\n}\n","import { snesToPc } from './snes';\n\nimport isPlainObject from 'lodash/isPlainObject';\nimport isArray from 'lodash/isArray';\n\n/* [{ address mode: [snes addresses], .. } | [snes addresses], length, entries = 1, entry offset = 0] */\n\nconst linkManifest = [\n    [[0x108000], 0x7000], // sprite\n    [[0x1BD308], 4 * 30], // palette\n    [[0x1BEDF5], 4]       // gloves\n];\n\nconst samusLoaderOffsets = [0x0, 0x24, 0x4F, 0x73, 0x9E, 0xC2, 0xED, 0x111, 0x139];\nconst samusManifest = [\n    [{ exhirom: [0x440000], lorom: [0x9C8000] }, 0x8000], // DMA bank 1\n    [{ exhirom: [0x450000], lorom: [0x9D8000] }, 0x8000], // DMA bank 2\n    [{ exhirom: [0x460000], lorom: [0x9E8000] }, 0x8000], // DMA bank 3\n    [{ exhirom: [0x470000], lorom: [0x9F8000] }, 0x8000], // DMA bank 4\n    [{ exhirom: [0x480000], lorom: [0xF58000] }, 0x8000], // DMA bank 5\n    [{ exhirom: [0x490000], lorom: [0xF68000] }, 0x8000], // DMA bank 6\n    [{ exhirom: [0x4A0000], lorom: [0xF78000] }, 0x8000], // DMA bank 7\n    [{ exhirom: [0x4B0000], lorom: [0xF88000] }, 0x8000], // DMA bank 8\n    [{ exhirom: [0x540000], lorom: [0xF98000] }, 0x8000], // DMA bank 9\n    [{ exhirom: [0x550000], lorom: [0xFA8000] }, 0x8000], // DMA bank 10\n    [{ exhirom: [0x560000], lorom: [0xFB8000] }, 0x8000], // DMA bank 11\n    [{ exhirom: [0x570000], lorom: [0xFC8000] }, 0x8000], // DMA bank 12\n    [{ exhirom: [0x580000], lorom: [0xFD8000] }, 0x8000], // DMA bank 13\n    [{ exhirom: [0x590000], lorom: [0xFE8000] }, 0x7880], // DMA bank 14\n    [{ exhirom: [0x5A0000], lorom: [0xFF8000] }, 0x3F60], // Death DMA left\n    [{ exhirom: [0x5A4000], lorom: [0xFFC000] }, 0x3F60], // Death DMA right\n    [[0x9A9A00], 0x3C0],        // Gun port data\n    [[0xB6DA00], 0x600],        // File select sprites\n    [[0xB6D900], 0x20],         // File select missile\n    [[0xB6D980], 0x20],         // File select missile head\n    [[0x9B9402], 30],           // Power Standard\n    [[0x9B9522], 30],           // Varia Standard\n    [[0x9B9802], 30],           // Gravity Standard\n    [[0x8DDB6D], 30, 9, samusLoaderOffsets], // Power Loader\n    [[0x8DDCD3], 30, 9, samusLoaderOffsets], // Varia Loader\n    [[0x8DDE39], 30, 9, samusLoaderOffsets], // Gravity Loader\n    [[0x8DE468], 30, 16, 0x22], // Power Heat\n    [[0x8DE694], 30, 16, 0x22], // Varia Heat\n    [[0x8DE8C0], 30, 16, 0x22], // Gravity Heat\n    [[0x9B9822], 30, 8, 0x20],  // Power Charge\n    [[0x9B9922], 30, 8, 0x20],  // Varia Charge\n    [[0x9B9A22], 30, 8, 0x20],  // Gravity Charge\n    [[0x9B9B22], 30, 4, 0x20],  // Power Speed boost\n    [[0x9B9D22], 30, 4, 0x20],  // Varia Speed boost\n    [[0x9B9F22], 30, 4, 0x20],  // Gravity Speed boost\n    [[0x9B9BA2], 30, 4, 0x20],  // Power Speed squat\n    [[0x9B9DA2], 30, 4, 0x20],  // Varia Speed squat\n    [[0x9B9FA2], 30, 4, 0x20],  // Gravity Speed squat\n    [[0x9B9C22], 30, 4, 0x20],  // Power Shinespark\n    [[0x9B9E22], 30, 4, 0x20],  // Varia Shinespark\n    [[0x9BA022], 30, 4, 0x20],  // Gravity Shinespark\n    [[0x9B9CA2], 30, 4, 0x20],  // Power Screw attack\n    [[0x9B9EA2], 30, 4, 0x20],  // Varia Screw attack\n    [[0x9BA0A2], 30, 4, 0x20],  // Gravity Screw attack\n    [[0x9B96C2], 30, 6, 0x20],  // Crystal flash\n    [[0x9BA122], 30, 9, 0x20],  // Death\n    [[0x9BA242], 30, 10, 0x20], // Hyper beam\n    [[0x9BA3A2, 0x8CE56B], 30], // Sepia\n    [[0x9BA382], 30],           // Sepia hurt\n    [[0x9BA3C0, 0x9BA3C6], 6],  // Xray\n    [[0x82E52C], 2],            // Door Visor\n    [[0x8EE5E2], 30],           // File select\n    [[0x8CE68B], 30],           // Ship Intro\n    [[0x8DD6C2], 30, 16, 0x24], // Ship Outro\n    [[0xA2A5A0], 28],           // Ship Standard\n    [[0x8DCA54], 2, 14, 0x6]    // Ship Glow\n];\n\nconst blockEntries = {\n    1: ['link_sprite', linkManifest],\n    4: ['samus_sprite', samusManifest]\n};\n\nexport function parseRdc(rdc) {\n    const little = true;\n    const utf8 = new TextDecoder();\n    const version = 1;\n    if (utf8.decode(rdc.slice(0, 18)) !== 'RETRODATACONTAINER')\n        throw new Error(\"Could not find the RDC format header\");\n    if (rdc[18] !== version)\n        throw new Error(`RDC version ${rdc[18]} is not supported, expected version ${version}`);\n\n    let offset = 19;\n    const view = new DataView(rdc.buffer);\n    const blockList = [];\n    let blocks = view.getUint32(offset, little);\n    while (blocks > 0) {\n        blocks -= 1;\n        const blockType = view.getUint32(offset += 4, little);\n        const blockOffset = view.getUint32(offset += 4, little);\n        blockList.push([blockType, blockOffset]);\n    }\n\n    let field = new Uint8Array(rdc.buffer, offset += 4);\n    let end = field.findIndex(x => x === 0);\n    if (end < 0)\n        throw new Error(\"Missing null terminator for the Author data field\");\n    const author = utf8.decode(field.slice(0, end));\n\n    return [processBlocks(rdc, blockList), author];\n}\n\nfunction processBlocks(rdc, blockList) {\n    const list = {};\n    blockList.forEach(([type, offset]) => {\n        const entry = blockEntries[type];\n        if (entry) {\n            const [name, manifest] = entry;\n            const block = new Uint8Array(rdc.buffer, offset);\n            const content = parseBlock(block, manifest);\n            list[name] = (rom, mode) => applyBlock(rom, mode, content, manifest);\n        }\n    });\n    return list;\n}\n\nfunction parseBlock(block, manifest) {\n    let offset = 0;\n    const content = [];\n    for (const [, length, entries = 1] of manifest) {\n        content.push(block.slice(offset, offset + entries * length));\n        offset += entries * length;\n    }\n    return content;\n}\n\nfunction applyBlock(rom, mapping, content, manifest) {\n    let index = -1;\n    for (const [addrs, length, entries = 1, offset = 0] of manifest) {\n        const _addrs = isPlainObject(addrs) ? addrs[mapping] : addrs;\n        const entry = content[index += 1];\n        for (const addr of _addrs) {\n            for (let i = 0; i < entries; i += 1) {\n                const dest = snesToPc(mapping, addr + (isArray(offset) ? offset[i] : offset * i));\n                const src = length * i;\n                rom.set(entry.slice(src, src + length), dest);\n            }\n        }\n    }\n}\n","export const bigText = {\n    ' ': [0x7F, 0x7F],\n    'A': [0x20, 0x30],\n    'B': [0x21, 0x31],\n    'C': [0x22, 0x32],\n    'D': [0x23, 0x33],\n    'E': [0x24, 0x34],\n    'F': [0x25, 0x35],\n    'G': [0x26, 0x36],\n    'H': [0x27, 0x37],\n    'I': [0x28, 0x38],\n    'J': [0x29, 0x39],\n    'K': [0x2A, 0x3A],\n    'L': [0x2B, 0x3B],\n    'M': [0x2C, 0x3C],\n    'N': [0x2D, 0x3D],\n    'O': [0x2E, 0x3E],\n    'P': [0x2F, 0x3F],\n    'Q': [0x40, 0x50],\n    'R': [0x41, 0x51],\n    'S': [0x42, 0x52],\n    'T': [0x43, 0x53],\n    'U': [0x44, 0x54],\n    'V': [0x45, 0x55],\n    'W': [0x46, 0x56],\n    'X': [0x47, 0x57],\n    'Y': [0x48, 0x58],\n    'Z': [0x49, 0x59],\n    '0': [0x60, 0x70],\n    '1': [0x61, 0x71],\n    '2': [0x62, 0x72],\n    '3': [0x63, 0x73],\n    '4': [0x64, 0x74],\n    '5': [0x65, 0x75],\n    '6': [0x66, 0x76],\n    '7': [0x67, 0x77],\n    '8': [0x68, 0x78],\n    '9': [0x69, 0x79]\n};\n","import { readAsArrayBuffer } from '../util';\n\nimport { parseRdc } from '../game/rdc';\nimport { snesToPc } from '../game/snes';\nimport { bigText } from '../game/big_text_table';\n\nimport { inflate } from 'pako';\nimport localForage from 'localforage';\n\nimport each from 'lodash/each';\nimport range from 'lodash/range';\nimport defaultTo from 'lodash/defaultTo';\nimport isPlainObject from 'lodash/isPlainObject';\n\nconst legalCharacters = /[A-Z0-9]/;\nconst illegalCharacters = /[^A-Z0-9]/g;\nconst continousSpace = / +/g;\n\nexport async function prepareRom(worldPatch, settings, baseIps, game) {\n    let rom = null;\n    if (game.smz3) {\n        const smRom = await readAsArrayBuffer(await localForage.getItem(\"baseRomSM\"));\n        const lttpRom = await readAsArrayBuffer(await localForage.getItem(\"baseRomLTTP\"));\n        rom = mergeRoms(new Uint8Array(smRom), new Uint8Array(lttpRom));\n    } else {\n        const baseRom = await readAsArrayBuffer(await localForage.getItem(\"baseRomSM\"));\n        /* extend to 4 mb to account for the base patch with custom sprites */\n        rom = new Uint8Array(new ArrayBuffer(0x400000));\n        rom.set(new Uint8Array(baseRom));\n    }\n    const basePatch = maybeCompressed(new Uint8Array(await (await fetch(baseIps, { cache: 'no-store' })).arrayBuffer()));\n    worldPatch = Uint8Array.from(atob(worldPatch), c => c.charCodeAt(0));\n\n    const { mapping } = game;\n    applyIps(rom, basePatch);\n\n    if (game.z3) {\n        await applySprite(rom, mapping, 'link_sprite', settings.z3Sprite);\n    }\n    await applySprite(rom, mapping, 'samus_sprite', settings.smSprite);\n    if (settings.smSpinjumps) {\n        smSpinjumps(rom, mapping);\n    }\n\n    if (game.z3) {\n        z3HeartColor(rom, mapping, settings.z3HeartColor);\n        z3HeartBeep(rom, settings.z3HeartBeep);\n        z3QuickSwap(rom, settings.z3QuickSwap);\n    }\n    if (!settings.smEnergyBeep) {\n        smEnergyBeepOff(rom, mapping);\n    }\n\n    applySeed(rom, worldPatch);\n\n    return rom;\n}\n\nasync function applySprite(rom, mapping, block, sprite) {\n    if (sprite.path) {\n        const url = `${process.env.PUBLIC_URL}/sprites/${sprite.path}`;\n        const rdc = maybeCompressed(new Uint8Array(await (await fetch(url)).arrayBuffer()));\n        const [blocks, author] = parseRdc(rdc);\n        blocks[block] && blocks[block](rom, mapping);\n        applySpriteAuthor(rom, mapping, block, author);\n    }\n}\n\nfunction applySpriteAuthor(rom, mapping, block, author) {\n    author = author.toUpperCase();\n    /* Author field that is empty or has no accepted characters */\n    if (!author.match(legalCharacters))\n        return;\n\n    author = formatAuthor(author);\n    const width = 32;\n    const pad = (width - author.length) >> 1; /* shift => div + floor */\n\n    const addrs = {\n        link_sprite: [0xF47002, 0xFD1480],\n        samus_sprite: { exhirom: [0xF47004, 0xFD1600], lorom: [0xCEFF02, 0xCEC740] },\n    }[block];\n    const [enable, tilemap] = isPlainObject(addrs) ? addrs[mapping] : addrs;\n\n    rom[snesToPc(mapping, enable)] = 0x01;\n    each(author, (char, i) => {\n        const bytes = bigText[char];\n        rom[snesToPc(mapping, tilemap + 2 * (pad + i))] = bytes[0];\n        rom[snesToPc(mapping, tilemap + 2 * (pad + i + 32))] = bytes[1];\n    });\n}\n\nfunction formatAuthor(author) {\n    author = author.replace(illegalCharacters, ' ');\n    author = author.replace(continousSpace, ' ');\n    /* Keep at most 30 non-whitespace characters */\n    /* A limit of 30 guarantee a margin at the edges */\n    return author.trimStart().slice(0, 30).trimEnd();\n}\n\n/* Enables separate spinjump behavior */\nfunction smSpinjumps(rom, mapping) {\n    rom[snesToPc(mapping, 0x9B93FE)] = 0x01;\n}\n\nfunction z3HeartColor(rom, mapping, setting) {\n    const values = {\n        red:    [0x24, [0x18, 0x00]],\n        yellow: [0x28, [0xBC, 0x02]],\n        blue:   [0x2C, [0xC9, 0x69]],\n        green:  [0x3C, [0x04, 0x17]]\n    };\n    const [hud, fileSelect] = defaultTo(values[setting], values.red);\n\n    each(range(0, 20, 2), i => {\n        rom[snesToPc(mapping, 0xDFA1E + i)] = hud;\n    });\n\n    rom.set(fileSelect, snesToPc(mapping, 0x1BD6AA));\n}\n\nfunction z3HeartBeep(rom, setting) {\n    const values = {\n        off: 0x00,\n        double: 0x10,\n        normal: 0x20,\n        half: 0x40,\n        quarter: 0x80\n    };\n    /* Redirected to low bank $40 in combo */\n    rom[0x400033] = defaultTo(values[setting], values.half);\n}\n\nfunction z3QuickSwap(rom, setting) {\n    rom[0x40004B] = setting ? 0x01 : 0x00;\n}\n\nfunction smEnergyBeepOff(rom, mapping) {\n    each([\n        [0x90EA9B, 0x80],\n        [0x90F337, 0x80],\n        [0x91E6D5, 0x80]\n    ],\n        ([addr, value]) => rom[snesToPc(mapping, addr)] = value\n    );\n}\n\nfunction maybeCompressed(data) {\n    const big = false;\n    const isGzip = new DataView(data.buffer).getUint16(0, big) === 0x1f8b;\n    return isGzip ? inflate(data) : data;\n}\n\nfunction mergeRoms(smRom, z3Rom) {\n    const rom = new Uint8Array(0x600000);\n\n    let pos = 0;\n    for (let i = 0; i < 0x40; i++) {\n        let hiBank = smRom.slice((i * 0x8000), (i * 0x8000) + 0x8000);\n        let loBank = smRom.slice(((i + 0x40) * 0x8000), ((i + 0x40) * 0x8000) + 0x8000);\n\n        rom.set(loBank, pos);\n        rom.set(hiBank, pos + 0x8000);\n        pos += 0x10000;\n    }\n\n    pos = 0x400000;\n    for (let i = 0; i < 0x20; i++) {\n        let hiBank = z3Rom.slice((i * 0x8000), (i * 0x8000) + 0x8000);\n        rom.set(hiBank, pos + 0x8000);\n        pos += 0x10000;\n    }\n\n    return rom;\n}\n\nfunction applyIps(rom, patch) {\n    const big = false;\n    let offset = 5;\n    const footer = 3;\n    const view = new DataView(patch.buffer);\n    while (offset + footer < patch.length) {\n        const dest = (patch[offset] << 16) + view.getUint16(offset + 1, big);\n        const length = view.getUint16(offset + 3, big);\n        offset += 5;\n        if (length > 0) {\n            rom.set(patch.slice(offset, offset + length), dest);\n            offset += length;\n        } else {\n            const rleLength = view.getUint16(offset, big);\n            const rleByte = patch[offset + 2];\n            rom.set(Uint8Array.from(new Array(rleLength), () => rleByte), dest);\n            offset += 3;\n        }\n    }\n}\n\nfunction applySeed(rom, patch) {\n    const little = true;\n    let offset = 0;\n    const view = new DataView(patch.buffer);\n    while (offset < patch.length) {\n        let dest = view.getUint32(offset, little);\n        let length = view.getUint16(offset + 4, little);\n        offset += 6;\n        rom.set(patch.slice(offset, offset + length), dest);\n        offset += length;\n    }\n}\n","import React, { useState, useEffect, useContext } from 'react';\nimport styled from 'styled-components';\nimport { Form, Row, Col, Card, CardBody } from 'reactstrap';\nimport { Label, Button, Input, InputGroupAddon, InputGroupText } from 'reactstrap';\nimport BootstrapSwitchButton from 'bootstrap-switch-button-react';\n\nimport InputGroup from '../ui/PrefixInputGroup';\nimport DropdownSelect from '../ui/DropdownSelect';\n\nimport DownloadInfoTooltip from './DownloadInfoTooltip';\nimport Upload from './Upload';\n\nimport { GameTraitsCtx } from '../game/traits';\n\nimport { prepareRom } from '../game/rom';\n\nimport localForage from 'localforage';\nimport { saveAs } from 'file-saver';\nimport { encode } from 'slugid';\n\nimport compact from 'lodash/compact';\nimport join from 'lodash/join';\nimport set from 'lodash/set';\nimport attempt from 'lodash/attempt';\nimport defaultTo from 'lodash/defaultTo';\n\nimport semver from 'semver';\n\nimport inventory from '../resources/sprite/inventory';\n\n// FIXME: This needs to have a better implementation on how to handle older incompatible base ROMS,\n//        but since V11.3 will have breaking changes we'll have to do something for now to let old seeds work.\nimport baseIpsSMZ3v11_2 from '../resources/zsm.v11.2.ips.gz';\nimport baseIpsSMZ3 from '../resources/zsm.ips.gz';\nimport baseIpsSM from '../resources/sm.ips.gz';\n\nconst baseIps = (gameId, gameVersion) => {\n    return gameId === \"sm\"\n        ? baseIpsSM\n        : semver.gt(semver.coerce(gameVersion), '11.2.0') ? baseIpsSMZ3 : baseIpsSMZ3v11_2;\n};\n\nconst SpriteOption = styled.div`\n    display: flex;\n    white-space: nowrap;\n    > * { flex: none; }\n`;\n\n/* through bootstrap \"$input-btn-padding-x\" */\nconst inputPaddingX = '.75rem';\n\nconst Z3SpriteStyle = styled.option`\n    width: 16px;\n    height: 24px;\n    margin-right: ${inputPaddingX};\n    background-size: auto 24px;\n    background-image: url(${process.env.PUBLIC_URL}/sprites/z3.png?version=131);\n`;\n\nconst Z3Sprite = ({ index }) => {\n    return <Z3SpriteStyle style={{backgroundPosition: `-${(index * 16)}px 0`}} />\n}\n\nconst SMSpriteStyle = styled(Z3SpriteStyle)`\n    background-image: url(${process.env.PUBLIC_URL}/sprites/sm.png?version=131);\n`;\n\nconst SMSprite = ({ index }) => {\n    return <SMSpriteStyle style={{ backgroundPosition: `-${(index * 16)}px 0` }} />\n}\n\nconst JumpSprite = styled.span`\n    width: 17px;\n    height: 17px;\n    background-size: auto 17px;\n    background-image: url(${process.env.PUBLIC_URL}/sprites/jump_${props => props.which}.png);\n`;\n\nexport default function Patch(props) {\n    const [patchState, setPatchState] = useState('upload');\n    const [z3Sprite, setZ3Sprite] = useState({});\n    const [smSprite, setSMSprite] = useState({});\n    const [smSpinjumps, setSMSpinjumps] = useState(false);\n    const [z3QuickSwap, setZ3QuickSwap] = useState(false);\n    const [z3HeartColor, setZ3HeartColor] = useState('red');\n    const [z3HeartBeep, setZ3HeartBeep] = useState('half');\n    const [smEnergyBeep, setSMEnergyBeep] = useState(true);\n\n    const game = useContext(GameTraitsCtx);\n\n    const sprites = {\n        z3: [{ title: 'Link' }, ...inventory.z3],\n        sm: [{ title: 'Samus' }, ...inventory.sm]\n    };\n\n    const { seed, world } = props;\n    const worldSettings = JSON.parse(world.settings);\n\n    useEffect(() => {\n        attempt(async () => {\n            const fileDataSM = await localForage.getItem('baseRomSM');\n            const fileDataLTTP = await localForage.getItem('baseRomLTTP');\n            if ((!game.z3 || fileDataLTTP !== null) && fileDataSM !== null) {\n                setPatchState('download');\n            }\n        });\n    }, [patchState, game.z3]);\n\n    useEffect(() => {\n        let settings;\n        if ((settings = restore())) {\n            const { z3: z3Sprite, sm: smSprite, spinjumps } = settings.sprites || {};\n            const { z3_quick_swap, z3_heart_color, z3_heart_beep, sm_energy_beep } = settings;\n            setZ3Sprite(sprites.z3.find(x => x.title === z3Sprite) || {});\n            setSMSprite(sprites.sm.find(x => x.title === smSprite) || {});\n            setSMSpinjumps(defaultTo(spinjumps, false));\n            setZ3QuickSwap(defaultTo(z3_quick_swap, false));\n            setZ3HeartColor(defaultTo(z3_heart_color, 'red'));\n            setZ3HeartBeep(defaultTo(z3_heart_beep, 'half'));\n            setSMEnergyBeep(defaultTo(sm_energy_beep, true));\n        }\n    }, []); /* eslint-disable-line react-hooks/exhaustive-deps */\n\n    async function onDownloadRom() {\n        try {\n            if (world !== null) {\n                const settings = { worldSettings, z3Sprite, smSprite, smSpinjumps, z3QuickSwap, z3HeartColor, z3HeartBeep, smEnergyBeep };\n                const patchedData = await prepareRom(world.patch, settings, baseIps(game.id, seed.gameVersion), game);\n                saveAs(new Blob([patchedData], { type: \"application/octet-stream\" }), constructFileName());\n            }\n        } catch (error) {\n            console.log(error);\n        }\n    }\n\n    function constructFileName() {\n        const { gameId, gameVersion, guid, seedNumber, mode } = seed;\n        const settings = world.settings && JSON.parse(world.settings);\n\n        /* compact works as long as seedNumber is string, since 0 is a valid number */\n        const parts = compact([\n            gameId.toUpperCase(),\n            `V${gameVersion}`,\n            /* either no settings present, or construct the parts */\n            ...(!settings ? []\n                : gameId === 'smz3' ? smz3Parts(settings) :\n                    gameId === 'sm' ? smParts(settings) : []\n            ),\n            seedNumber || encode(guid),\n            mode === 'multiworld' ? world.player : null\n        ]);\n\n        function smz3Parts({ smlogic, swordlocation, morphlocation, keyshuffle, goal, opentower, ganonvulnerable, opentourian }) {\n            const crystalIds = {\n                'nocrystals': '0',\n                'onecrystal': '1',\n                'twocrystals': '2',\n                'threecrystals': '3',\n                'fourcrystals': '4',\n                'fivecrystals': '5',\n                'sixcrystals': '6',\n                'sevencrystals': '7',\n                'random': 'r',\n            };\n\n            const bossIds = {\n                'nobosses': '0',\n                'oneboss': '1',\n                'twobosses': '2',\n                'threebosses': '3',\n                'fourbosses': '4',\n                'random': 'r',\n            }\n\n            return [\n                `ZLn+SL${smlogic[0]}`,\n                swordlocation && swordlocation !== 'randomized' ? `S${swordlocation[0]}` : null,\n                morphlocation && morphlocation !== 'randomized' ? `M${morphlocation[0]}` : null,\n                keyshuffle && keyshuffle !== 'none' ? `K${keyshuffle[0]}` : null,\n                goal && goal !== 'defeatboth' ? `G${goal[0]}` : null,\n                opentower && opentower !== 'sevencrystals' ? `To${crystalIds[opentower]}` : null,\n                ganonvulnerable && ganonvulnerable !== 'sevencrystals' ? `Vu${crystalIds[ganonvulnerable]}` : null,\n                opentourian && opentourian !== 'fourbosses' ? `Tr${bossIds[opentourian]}` : null,\n            ];\n        }\n\n        function smParts({ logic, placement }) {\n            return [\n                `L${logic[0]}`,\n                `I${placement[0]}`\n            ];\n        }\n\n\n        return `${join(parts, '-')}.sfc`;\n    }\n\n    const onUploadRoms = () => setPatchState('download');\n\n    const onZ3SpriteChange = (i) => {\n        setZ3Sprite(sprites.z3[i]);\n        persist(set(restore() || {}, 'sprites.z3', sprites.z3[i].title));\n    };\n    const onSMSpriteChange = (i) => {\n        setSMSprite(sprites.sm[i]);\n        persist(set(restore() || {}, 'sprites.sm', sprites.sm[i].title));\n    };\n    const onSpinjumpToggle = () => {\n        setSMSpinjumps(!smSpinjumps);\n        persist(set(restore() || {}, 'sprites.spinjumps', !smSpinjumps));\n    };\n    const onZ3QuickSwapToggle = () => {\n        setZ3QuickSwap(!z3QuickSwap);\n        persist(set(restore() || {}, 'z3_quick_swap', !z3QuickSwap));\n    };\n    const onZ3HeartColorChange = (value) => {\n        setZ3HeartColor(value);\n        persist(set(restore() || {}, 'z3_heart_color', value));\n    };\n    const onZ3HeartBeepChange = (value) => {\n        setZ3HeartBeep(value);\n        persist(set(restore() || {}, 'z3_heart_beep', value));\n    };\n    const onSMEnergyBeepToggle = () => {\n        setSMEnergyBeep(!smEnergyBeep);\n        persist(set(restore() || {}, 'sm_energy_beep', !smEnergyBeep));\n    };\n\n    function restore() {\n        let value = localStorage.getItem('persist');\n        return value && JSON.parse(value);\n    }\n\n    function persist(values) {\n        localStorage.setItem('persist', JSON.stringify(values));\n    }\n\n    const component = patchState === 'upload' ? <Upload onUpload={onUploadRoms} /> : (\n        <Form onSubmit={(e) => e.preventDefault()}>\n            <Row className=\"mb-3\">\n                <Col md={game.smz3 ? 10 : 6}>\n                    <SpriteSettings game={game} sprites={sprites} settings={{ z3Sprite, smSprite, smSpinjumps }}\n                        onZ3SpriteChange={onZ3SpriteChange}\n                        onSMSpriteChange={onSMSpriteChange}\n                        onSpinjumpToggle={onSpinjumpToggle}\n                    />\n                </Col>\n            </Row>\n            {game.z3 && (\n                <Row className=\"mb-3\">\n                    <Col md=\"5\">\n                        <InputGroup prefix=\"Heart Beep\">\n                            <Input type=\"select\" value={z3HeartBeep} onChange={(e) => onZ3HeartBeepChange(e.target.value)}>\n                                <option value=\"off\">Off</option>\n                                <option value=\"quarter\">Quarter Speed</option>\n                                <option value=\"half\">Half Speed</option>\n                                <option value=\"normal\">Normal Speed</option>\n                                <option value=\"double\">Double Speed</option>\n                            </Input>\n                        </InputGroup>\n                    </Col>\n                    <Col md=\"4\">\n                        <InputGroup prefix=\"Heart Color\">\n                            <Input type=\"select\" value={z3HeartColor} onChange={(e) => onZ3HeartColorChange(e.target.value)}>\n                                <option value=\"red\">Red</option>\n                                <option value=\"green\">Green</option>\n                                <option value=\"blue\">Blue</option>\n                                <option value=\"yellow\">Yellow</option>\n                            </Input>\n                        </InputGroup>\n                    </Col>\n                </Row>\n            )}\n            <Row className=\"mb-3\">\n                {game.z3 && <Col md=\"5\">\n                    <InputGroup prefixClassName=\"mr-1\" prefix=\"Quick Swap\">\n                        <BootstrapSwitchButton width=\"80\" onlabel=\"On\" offlabel=\"Off\" checked={z3QuickSwap}\n                            onChange={onZ3QuickSwapToggle}\n                        />\n                    </InputGroup>\n                </Col>}\n                <Col md=\"4\">\n                    <InputGroup prefixClassName=\"mr-1\" prefix=\"Energy Beep\">\n                        <BootstrapSwitchButton width=\"80\" onlabel=\"On\" offlabel=\"Off\" checked={smEnergyBeep}\n                            onChange={onSMEnergyBeepToggle}\n                        />\n                    </InputGroup>\n                </Col>\n            </Row>\n            <Row>\n                <Col className=\"d-flex align-items-center\" md=\"6\">\n                    <Button color=\"primary\" onClick={onDownloadRom}>Download ROM</Button>\n                    <DownloadInfoTooltip className=\"ml-2\" gameId={game.id} />\n                </Col>\n            </Row>\n        </Form>\n    );\n\n    return (\n        <Card>\n            <CardBody>\n                {component}\n            </CardBody>\n        </Card>\n    );\n}\n\nfunction SpriteSettings(props) {\n    const { sprites, settings } = props;\n    const { z3Sprite, smSprite, smSpinjumps } = settings;\n    const game = useContext(GameTraitsCtx);\n\n    let value;\n    return (\n        <InputGroup className=\"flex-nowrap\" prefix=\"Play as\">\n            {game.z3 && (\n                <DropdownSelect placeholder=\"Select Z3 sprite\"\n                    index={(value = sprites.z3.findIndex(x => x.title === z3Sprite.title)) < 0 ? 0 : value}\n                    onIndexChange={props.onZ3SpriteChange}>\n                    {sprites.z3.map(({ title }, i) => <SpriteOption key={title}><Z3Sprite index={i} />{title}</SpriteOption>)}\n                </DropdownSelect>\n            )}\n            <DropdownSelect placeholder=\"Select SM sprite\"\n                index={(value = sprites.sm.findIndex(x => x.title === smSprite.title)) < 0 ? 0 : value}\n                onIndexChange={props.onSMSpriteChange}>\n                {sprites.sm.map(({ title }, i) => <SpriteOption key={title}><SMSprite index={i} />{title}</SpriteOption>)}\n            </DropdownSelect>\n            <InputGroupAddon addonType=\"append\">\n                <InputGroupText tag={Label} title=\"Enable separate space/screw jump animations\">\n                    <Input type=\"checkbox\" addon={true} checked={smSpinjumps} onChange={props.onSpinjumpToggle} />{' '}\n                    <JumpSprite which=\"space\" /> / <JumpSprite which=\"screw\" />\n                </InputGroupText>\n            </InputGroupAddon>\n        </InputGroup>\n    );\n}\n","import { NavLink } from 'reactstrap';\nimport styled from 'styled-components';\n\nimport { Search, JournalArrowDown } from '../ui/BootstrapIcon';\n\nexport const SmallNavLink = styled(NavLink)`\n  font-size: .87em;\n  font-weight: bold;\n  padding-top: 6px;\n  padding-bottom: 6px;\n  padding-right: 9px;\n  padding-left: 9px;\n`;\n\nexport const StyledTable = styled.table.attrs({\n    className: \"table table-sm table-borderless\"\n})`\n  > tbody > tr {\n    border-bottom: 1px solid #E0E0E0;\n    > td:first-child { width: 60% }\n  }\n`;\n\nexport const SearchIcon = styled(Search)`\n  width: 1em;\n  height: 1em;\n`;\n\nexport const DownloadIcon = styled(JournalArrowDown)`\n  width: 1em;\n  height: 1em;\n`;\n","import indexOf from 'lodash/indexOf';\n\nconst ordering = [\n    'Light World Death Mountain West',\n    'Light World Death Mountain East',\n    'Light World North West',\n    'Light World North East',\n    'Light World South',\n    'Hyrule Castle',\n    'Dark World Death Mountain West',\n    'Dark World Death Mountain East',\n    'Dark World North West',\n    'Dark World North East',\n    'Dark World South',\n    'Dark World Mire',\n\n    'Castle Tower',\n\n    'Eastern Palace',\n    'Desert Palace',\n    'Tower of Hera',\n    'Palace of Darkness',\n    'Swamp Palace',\n    'Skull Woods',\n    \"Thieves' Town\",\n    'Ice Palace',\n    'Misery Mire',\n    'Turtle Rock',\n    \"Ganon's Tower\",\n\n    'Crateria West',\n    'Crateria Central',\n    'Crateria East',\n    'Brinstar Blue',\n    'Brinstar Green',\n    'Brinstar Pink',\n    'Brinstar Red',\n    'Brinstar Kraid',\n    'Wrecked Ship',\n    'Maridia Outer',\n    'Maridia Inner',\n    'Norfair Upper West',\n    'Norfair Upper East',\n    'Norfair Upper Crocomire',\n    'Norfair Lower West',\n    'Norfair Lower East',\n];\n\nexport function regionOrdering(name) {\n    return indexOf(ordering, name);\n}\n","import React, { useEffect, useState } from 'react';\nimport { Row, Col, Card, CardHeader, CardBody, Nav, NavItem, Input, Button } from 'reactstrap';\nimport InputGroup from '../ui/PrefixInputGroup';\nimport { SmallNavLink, StyledTable } from './styled';\n\nimport { SearchIcon, DownloadIcon } from './styled';\n\nimport { regionOrdering } from './region_ordering';\n\nimport YAML from 'yaml';\nimport { saveAs } from 'file-saver';\nimport { encode } from 'slugid';\n\nimport { tryParseJson, sortGroupBy } from '../util';\nimport map from 'lodash/map';\nimport filter from 'lodash/filter';\nimport some from 'lodash/some';\nimport includes from 'lodash/includes';\nimport sortBy from 'lodash/sortBy';\nimport uniq from 'lodash/uniq';\nimport initial from 'lodash/initial';\nimport last from 'lodash/last';\nimport pick from 'lodash/pick';\nimport toPairs from 'lodash/toPairs';\nimport fromPairs from 'lodash/fromPairs';\nimport isEmpty from 'lodash/isEmpty';\nimport escapeRegExp from 'lodash/escapeRegExp';\n\nexport default function Spoiler({ seedGuid }) {\n    const [show, setShow] = useState(false);\n    const [spoiler, setSpoiler] = useState(null);\n    const [searchText, setSearchText] = useState('');\n    const [activeArea, setActiveArea] = useState('playthrough');\n    const [areas, setAreas] = useState([]);\n    const [content, setContent] = useState([]);\n\n    async function toggleSpoiler() {\n        if (!show && !spoiler) {\n            try {\n                const response = await fetch(`/api/spoiler/${seedGuid}`);\n                const data = await response.json();\n                data.seed.spoiler = filter(tryParseJson(data.seed.spoiler), sphere => !isEmpty(sphere));\n                data.locations = sortBy(data.locations, ({ locationRegion }) => regionOrdering(locationRegion));\n                setSpoiler(data);\n            } catch { }\n        }\n\n        setShow(show => !show);\n    }\n\n    function updateSearchText(value) {\n        setSearchText(value);\n        if (value && activeArea === 'playthrough') {\n            setActiveArea('all');\n        }\n    }\n\n    useEffect(() => {\n        if (spoiler) {\n            const { gameId, worlds, players, spoiler: playthrough } = spoiler.seed;\n            let { locations } = spoiler;\n\n            if (searchText) {\n                const pattern = new RegExp(escapeRegExp(searchText), 'i');\n                locations = filter(locations, l => pattern.test(l.locationName) || pattern.test(l.itemName));\n\n                if (!includes(['playthrough', 'prizes', 'all'], activeArea) && !some(locations, { locationArea: activeArea })) {\n                    /* Return early since this state change will reuse the effect */\n                    setActiveArea('all');\n                    return;\n                }\n            }\n\n            if (activeArea === 'playthrough') {\n                setContent(gameId === 'smz3' ? [\n                    ...sphere(contentFromObjects, initial(playthrough)),\n                    ...prizeReq(contentFromObjects, last(playthrough)),\n                ] : sphere(contentFromObjects, playthrough));\n            }\n            else if (activeArea === 'prizes') {\n                setContent(prizeReq(contentFromObjects, last(playthrough), ));\n            }\n            else {\n                const locationsInArea = filter(locations, activeArea !== 'all' ? { locationArea: activeArea } : {})\n                setContent(region(contentFromArrays, locationsInArea, worlds, players > 1));\n            }\n\n            setAreas(uniq(map(locations, 'locationArea')));\n        }\n    }, [spoiler, searchText, activeArea]);\n\n    async function downloadSpoiler() {\n        const { seed, locations } = spoiler;\n        const { gameId, worlds, players, spoiler: playthrough } = seed;\n        const { settings, worldState } = worlds[0];\n\n        const metaField = {\n            smz3: (settings, worldState) => ({\n                ...pick(settings, 'goal', 'smlogic', 'keyshuffle'),\n                ...pick(worldState, 'towerCrystals', 'ganonCrystals', 'tourianBossTokens'),\n                dropPrizes: pick((worldState || {}).dropPrizes, 'treePulls', 'crabContinous', 'crabFinal', 'stun'),\n            }),\n            sm: (settings) => pick(settings, 'goal', 'logic'),\n        };\n\n        const content = [\n            `${gameId.toUpperCase()} ${seed.gameVersion} ${seed.hash}`,\n            { Playthrough: sphere(logFromObjects, gameId === 'smz3' ? initial(playthrough) : playthrough) },\n            ...(gameId === 'smz3' ? prizeReq(logFromObjects, last(playthrough)) : []),\n            ...region(logFromArrays, locations, worlds, players > 1),\n            { Meta: {\n                guid: seed.guid,\n                ...metaField[gameId](tryParseJson(settings), tryParseJson(worldState)),\n            } },\n        ];\n\n        const text = YAML.stringify(content, { indentSeq: false });\n\n        const blob = new Blob([text], { type: 'text/plain;charset=utf-8' });\n        saveAs(blob, `${seed.gameName} v${seed.gameVersion} - ${encode(seed.guid)} - Spoiler.txt`);\n    }\n\n    function sphere(compose, spheres) {\n        return map(spheres, (sphere, i) => compose(`Sphere ${i + 1}`, sphere));\n    }\n\n    function prizeReq(compose, section) {\n        return [compose('Prizes and Requirements', section)];\n    }\n\n    function region(compose, locations, worlds, multiworld) {\n        return map(sortGroupBy(locations, 'locationRegion', regionOrdering), ([region, locations]) =>\n            compose(region, map(locations, ({ locationName, worldId, itemName, itemWorldId }) => [\n                multiworld ? `${locationName} - ${worlds[worldId].player}` : locationName,\n                multiworld ? `${itemName} - ${worlds[itemWorldId].player}` : itemName,\n            ]))\n        );\n    }\n\n    return (\n        <Card>\n            <CardHeader>\n                <Row className=\"align-items-center justify-content-between\">\n                    <Col>Spoiler log</Col>\n                    <Col><Button outline className=\"float-right\" color=\"secondary\" onClick={toggleSpoiler}>{show ? 'Hide' : 'Show'}</Button></Col>\n                </Row>\n            </CardHeader>\n            {show && <CardBody>\n                {spoiler ? <div>\n                    <Row>\n                        <Col md=\"9\">\n                            <InputGroup className=\"mb-3\" prefix={<SearchIcon />}>\n                                <Input key=\"searchInput\" placeholder=\"Find a location or item\" value={searchText}\n                                    onChange={e => updateSearchText(e.target.value)}\n                                />\n                            </InputGroup>\n                        </Col>\n                        <Col>\n                            <Button outline color=\"primary\" className=\"float-right\" onClick={downloadSpoiler}><DownloadIcon /> Download</Button>\n                        </Col>\n                    </Row>\n                    <div>\n                        <Nav pills className=\"mb-2\">\n                            <NavItem>\n                                <SmallNavLink href=\"#\" active={activeArea === 'playthrough'} onClick={() => setActiveArea('playthrough')}>Playthrough</SmallNavLink>\n                            </NavItem>\n                            {spoiler.seed.gameId === 'smz3' && <NavItem>\n                                <SmallNavLink href=\"#\" active={activeArea === 'prizes'} onClick={() => setActiveArea('prizes')}>Prizes</SmallNavLink>\n                            </NavItem>}\n                            <NavItem>\n                                <SmallNavLink href=\"#\" active={activeArea === 'all'} onClick={() => setActiveArea('all')}>All</SmallNavLink>\n                            </NavItem>\n                            {map(areas, area => (\n                                <NavItem key={area}>\n                                    <SmallNavLink href=\"#\" active={activeArea === area} onClick={() => setActiveArea(area)}>{area}</SmallNavLink>\n                                </NavItem>\n                            ))}\n                        </Nav>\n                        <Card>\n                            <CardBody>\n                                {map(content, ([title, entries]) => (\n                                    <div key={title}>\n                                        <h6>{title}</h6>\n                                        <StyledTable className=\"mb-4\">\n                                            <tbody>\n                                                {map(entries, ([key, value]) => (\n                                                    <tr key={key}>\n                                                        <td>{key}</td>\n                                                        <td>{value}</td>\n                                                    </tr>\n                                                ))}\n                                            </tbody>\n                                        </StyledTable>\n                                    </div>\n                                ))}\n                            </CardBody>\n                        </Card>\n                    </div>\n                </div>\n                : 'Loading...'}\n            </CardBody>}\n        </Card>\n    );\n}\n\nfunction contentFromArrays(title, arrays) {\n    return [title, arrays];\n}\n\nfunction contentFromObjects(title, objects) {\n    return [title, toPairs(objects)];\n}\n\nfunction logFromArrays(title, arrays) {\n    return { [title]: fromPairs(arrays) };\n}\n\nfunction logFromObjects(title, objects) {\n    return { [title]: objects };\n}\n","import React from 'react';\n\n/* https://icons.getbootstrap.com/icons/info-circle-fill/ */\nexport const InfoCircleFill = (props) => (\n    <svg {...props} viewBox=\"0 0 16 16\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z\"/>\n    </svg>\n);\n\n/* https://icons.getbootstrap.com/icons/plus-square-fill/ */\nexport const PlusSquareFill = (props) => (\n    <svg {...props} viewBox=\"0 0 16 16\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z\" />\n    </svg>\n);\n\n/* https://icons.getbootstrap.com/icons/dash-square-fill/ */\nexport const DashSquareFill = (props) => (\n    <svg {...props} viewBox=\"0 0 16 16\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm2.5 7.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1z\" />\n    </svg>\n);\n\n/* https://icons.getbootstrap.com/icons/search/ */\nexport const Search = (props) => (\n    <svg {...props} viewBox=\"0 0 16 16\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z\" />\n    </svg>\n);\n\n/* https://icons.getbootstrap.com/icons/journal-arrow-down/ */\nexport const JournalArrowDown = (props) => (\n    <svg {...props} viewBox=\"0 0 16 16\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path fillRule=\"evenodd\" d=\"M8 5a.5.5 0 0 1 .5.5v3.793l1.146-1.147a.5.5 0 0 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-2-2a.5.5 0 1 1 .708-.708L7.5 9.293V5.5A.5.5 0 0 1 8 5z\" />\n        <path d=\"M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z\" />\n        <path d=\"M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z\" />\n    </svg>\n);\n\n/* https://icons.getbootstrap.com/icons/check-square-fill/ */\nexport const CheckSquareFill = (props) => (\n    <svg {...props} viewBox=\"0 0 16 16\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm10.03 4.97a.75.75 0 0 1 .011 1.05l-3.992 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.75.75 0 0 1 1.08-.022z\" />\n    </svg>\n);\n\n/* https://icons.getbootstrap.com/icons/chat-left-dots/ */\nexport const ChatLeftDots = (props) => (\n    <svg {...props} viewBox=\"0 0 16 16\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M14 1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H4.414A2 2 0 0 0 3 11.586l-2 2V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12.793a.5.5 0 0 0 .854.353l2.853-2.853A1 1 0 0 1 4.414 12H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z\"/>\n        <path d=\"M5 6a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm4 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm4 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0z\"/>\n    </svg>\n);\n\n/* https://icons.getbootstrap.com/icons/arrow-clockwise/ */\nexport const ArrowClockwise = (props) => (\n    <svg {...props} viewBox=\"0 0 16 16\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z\" />\n        <path d=\"M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z\" />\n    </svg>\n);\n","import React, { useState, useEffect } from 'react';\nimport { createGlobalStyle } from 'styled-components';\nimport ReactMarkdown from 'react-markdown';\n\nimport classNames from 'classnames';\n\nimport attempt from 'lodash/attempt';\n\nconst GlobalMarkdownStyle = createGlobalStyle`\n  .markdown {\n    h1 { font-size: 2rem; }\n    h2 { font-size: 1.75rem; }\n    h3 { font-size: 1.5rem; }\n    h4 { font-size: 1.25rem }\n    h5 { font-size: 1rem; }\n    h6 { font-size: 1rem; font-style: italic; }\n    h1, h2, h3 { margin-top: 3rem; }\n    h4 { margin-top: 1.5rem; }\n    h5 { margin-top: 1rem; }\n\n    ul, ol {\n      p + ul, p + ol {\n        margin-bottom: 1rem;\n      }\n    }\n  }\n`;\n\nexport default function Markdown(props) {\n    const { className, text = '' } = props;\n    const [sourceText, setSourceText] = useState('');\n\n    useEffect(() => {\n        if (props.source) {\n            attempt(async () => {\n                try {\n                    const response = await fetch(props.source);\n                    setSourceText(await response.text());\n                } catch (error) {\n                    setSourceText(`Could not load text because: ${error}`);\n                }\n            });\n        }\n    }, [props.source]);\n\n    return (\n        <>\n            <GlobalMarkdownStyle/>\n            <ReactMarkdown\n                className={classNames('markdown', className)}\n                children={sourceText || text}\n            />\n        </>\n    );\n}\n","import React from 'react';\nimport { Card, CardHeader, CardBody } from 'reactstrap';\n\nimport classNames from 'classnames';\n\nexport default function MessageCard({ error, title, msg }) {\n    return (\n        <Card>\n            <CardHeader className={classNames({\n                    'bg-danger': error,\n                    'bg-primary': !error\n                }, 'text-white'\n            )}>\n                {title}\n            </CardHeader>\n            <CardBody>\n                {msg}\n            </CardBody>\n        </Card>\n    );\n}\n","import React from 'react';\nimport { InputGroup, InputGroupAddon, InputGroupText } from 'reactstrap';\n\nexport default function PrefixInputGroup(props) {\n    const { className, prefixClassName, prefix, children } = props;\n    return <InputGroup className={className}>\n        <InputGroupAddon className={prefixClassName} addonType=\"prepend\">\n            <InputGroupText>{prefix}</InputGroupText>\n        </InputGroupAddon>\n        {children}\n    </InputGroup>;\n}\n","import sortBy from 'lodash/sortBy';\nimport groupBy from 'lodash/groupBy';\nimport toPairs from 'lodash/toPairs';\nimport { iteratee } from 'lodash';\n\nexport async function readAsArrayBuffer(blob) {\n    const fileReader = new FileReader();\n    return new Promise((resolve, reject) => {\n        fileReader.onerror = () => {\n            fileReader.abort();\n            reject(new DOMException('Error parsing data'));\n        };\n\n        fileReader.onload = (e) => {\n            resolve(e.target.result);\n        };\n\n        fileReader.readAsArrayBuffer(blob);\n    });\n}\n\nexport function tryParseJson(text) {\n    try {\n        return JSON.parse(text);\n    } catch (syntaxerror) {\n        return null;\n    }\n}\n\nexport function sortGroupBy(collection, grouping, sorting) {\n    sorting = iteratee(sorting);\n    const groups = groupBy(collection, grouping);\n    return sortBy(toPairs(groups), ([key]) => sorting(key));\n}\n"],"names":["caretSpacing","concat","InputGroupDropdownStyling","createGlobalStyle","_templateObject","_taggedTemplateLiteral","Placeholder","styled","span","_templateObject2","Caret","div","_templateObject3","props","up","menuModifiers","adjustStyle","enabled","order","fn","data","_objectSpread","styles","marginTop","borderTop","borderTopLeftRadius","borderTopRightRadius","width","maxHeight","overflow","DropdownSelect","_useState","useState","_useState2","_slicedToArray","open","setOpen","index","onIndexChange","children","castArray","_jsxs","_Fragment","_jsx","Dropdown","isOpen","toggle","DropdownToggle","tag","className","placeholder","DropdownMenu","modifiers","map","option","i","DropdownItem","active","onClick","select","smz3Tooltip","smTooltip","InfoHover","InfoCircleFill","tooltipWidth","tooltipModifiers","maxWidth","TooltipStyling","StyledMarkdown","Markdown","DownloadInfoTooltip","_ref","gameId","_objectWithoutProperties","_excluded","id","UncontrolledTooltip","placement","target","text","smz3","sm","HashSeed","Z3Hash","SMHash","Upload","canUpload","setCanUpload","fileInputSM","useRef","fileInputZ3","game","useContext","GameTraitsCtx","_onSubmitRom","_asyncToGenerator","_regeneratorRuntime","mark","_callee","smFile","z3File","fileDataSM","fileDataZ3","mismatch","games","wrap","_context","prev","next","current","files","t0","Uint8Array","readAsArrayBuffer","t1","sent","length","slice","SM","h32","buffer","toNumber","t2","console","log","abrupt","z3","t3","t4","ALTTP","t5","some","compact","truth","name","alert","join","localForage","Blob","t6","onUpload","stop","apply","arguments","onFileSelect","hasIn","Form","onSubmit","e","preventDefault","onSubmitRom","Row","Col","md","type","ref","onChange","Button","color","disabled","snesToPc","mapping","addr","Error","samusLoaderOffsets","blockEntries","exhirom","lorom","parseRdc","rdc","little","utf8","TextDecoder","decode","offset","view","DataView","blockList","blocks","getUint32","blockType","blockOffset","push","field","end","findIndex","x","author","processBlocks","list","forEach","_ref2","entry","_entry","manifest","content","block","_step","_iterator","_createForOfIteratorHelper","s","n","done","_step$value","value","_step$value$","entries","err","f","parseBlock","rom","mode","_step2","_iterator2","_step3","_step2$value","addrs","_step2$value$","_step2$value$2","_addrs","isPlainObject","_iterator3","dest","isArray","src","set","applyBlock","bigText","legalCharacters","illegalCharacters","continousSpace","prepareRom","_x","_x2","_x3","_x4","_prepareRom","worldPatch","settings","baseIps","smRom","lttpRom","baseRom","basePatch","mergeRoms","ArrayBuffer","maybeCompressed","t7","fetch","cache","arrayBuffer","t8","t9","from","atob","c","charCodeAt","applyIps","applySprite","z3Sprite","smSprite","smSpinjumps","z3HeartColor","z3HeartBeep","z3QuickSwap","smEnergyBeep","smEnergyBeepOff","applySeed","_x5","_x6","_x7","_x8","_applySprite","_callee2","sprite","url","_parseRdc","_parseRdc2","_context2","path","process","applySpriteAuthor","toUpperCase","match","pad","replace","trimStart","trimEnd","formatAuthor","link_sprite","samus_sprite","enable","tilemap","each","char","bytes","setting","values","red","yellow","blue","green","_defaultTo","defaultTo","_defaultTo2","hud","fileSelect","range","off","double","normal","half","quarter","_ref3","_ref4","getUint16","inflate","z3Rom","pos","hiBank","loBank","patch","big","_loop","rleLength","rleByte","Array","gameVersion","baseIpsSM","semver","baseIpsSMZ3","baseIpsSMZ3v11_2","SpriteOption","Z3SpriteStyle","Z3Sprite","style","backgroundPosition","SMSpriteStyle","SMSprite","JumpSprite","_templateObject4","which","Patch","patchState","setPatchState","_useState3","_useState4","setZ3Sprite","_useState5","_useState6","setSMSprite","_useState7","_useState8","setSMSpinjumps","_useState9","_useState10","setZ3QuickSwap","_useState11","_useState12","setZ3HeartColor","_useState13","_useState14","setZ3HeartBeep","_useState15","_useState16","setSMEnergyBeep","sprites","title","_toConsumableArray","inventory","seed","world","worldSettings","JSON","parse","_onDownloadRom","patchedData","saveAs","constructFileName","guid","seedNumber","parts","_ref5","smlogic","swordlocation","morphlocation","keyshuffle","goal","opentower","ganonvulnerable","opentourian","crystalIds","smz3Parts","_ref6","logic","smParts","encode","player","useEffect","attempt","fileDataLTTP","restore","spinjumps","_settings","z3_quick_swap","z3_heart_color","z3_heart_beep","sm_energy_beep","find","localStorage","getItem","persist","setItem","stringify","component","SpriteSettings","onZ3SpriteChange","onSMSpriteChange","onSpinjumpToggle","InputGroup","prefix","Input","prefixClassName","BootstrapSwitchButton","onlabel","offlabel","checked","Card","CardBody","_ref7","_ref8","InputGroupAddon","addonType","InputGroupText","Label","addon","SmallNavLink","NavLink","StyledTable","table","attrs","SearchIcon","Search","DownloadIcon","JournalArrowDown","ordering","regionOrdering","indexOf","Spoiler","seedGuid","show","setShow","spoiler","setSpoiler","searchText","setSearchText","activeArea","setActiveArea","areas","setAreas","setContent","_toggleSpoiler","response","json","filter","tryParseJson","sphere","isEmpty","locations","sortBy","_ref9","locationRegion","_downloadSpoiler","worlds","players","playthrough","_worlds$","worldState","metaField","blob","pick","dropPrizes","hash","Playthrough","logFromObjects","initial","prizeReq","last","region","logFromArrays","Meta","YAML","indentSeq","gameName","compose","spheres","section","multiworld","sortGroupBy","locationName","worldId","itemName","itemWorldId","_spoiler$seed","pattern","RegExp","escapeRegExp","l","test","includes","locationArea","contentFromObjects","locationsInArea","contentFromArrays","uniq","CardHeader","outline","Nav","pills","NavItem","href","area","key","arrays","objects","toPairs","_defineProperty","fromPairs","viewBox","fill","xmlns","d","PlusSquareFill","DashSquareFill","fillRule","CheckSquareFill","ChatLeftDots","ArrowClockwise","GlobalMarkdownStyle","_props$text","sourceText","setSourceText","source","ReactMarkdown","classNames","MessageCard","error","msg","PrefixInputGroup","_readAsArrayBuffer","fileReader","FileReader","Promise","resolve","reject","onerror","abort","DOMException","onload","result","syntaxerror","collection","grouping","sorting","iteratee","groups","groupBy"],"sourceRoot":""}