feat: sync and update with all changes from fork (#720)
* feat: sync and update with all changes from fork * refactor: extract clipboard copy logic into custom hook * fix: correct spelling of DEFAULT_REFRESH_FREQUENCY_MS in Stamps and WalletBalance providers * refactor(ui-tests): replace fixed sleeps with condition-based waits * fix: handle null values for size and granteeCount in infoGroups * fix(lint): add newline at end of file in useClipboardCopy hook * fix(ui-tests): page.goto URL * refactor: update import paths for useClipboardCopy --------- Co-authored-by: Ferenc Sárai <sarai.ferenc@gmail.com>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
const axios = require('axios')
|
||||
const { Assert, Click, Wait } = require('./library')
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
* @returns {Promise<string>} Swarm hash
|
||||
*/
|
||||
async function selectStampAndUpload(page) {
|
||||
await Click.elementWithText(page, 'button', 'Add Postage Stamp')
|
||||
// select the first available stamp
|
||||
await page.click('[role="combobox"]') // Click the select trigger
|
||||
await page.click('[role="option"]') // Click first option in the dropdown
|
||||
await Wait.forEnabledStateXPath(page, 'button', 'Proceed With Selected Stamp')
|
||||
await Click.elementWithText(page, 'button', 'Proceed With Selected Stamp')
|
||||
await Wait.forElementXPath(page, "//button[contains(., 'Upload To Your Node')]")
|
||||
await Click.elementWithText(page, 'button', 'Upload To Your Node')
|
||||
await Wait.forElementXPath(page, "//button[contains(., 'Download')]")
|
||||
// check if the upload was successful
|
||||
await Assert.elementWithTextExists(page, 'button', 'Download')
|
||||
await Assert.elementWithTextExists(page, 'button', 'Update Feed')
|
||||
|
||||
// get the swarm hash
|
||||
return page.url().split('/').pop()
|
||||
}
|
||||
|
||||
async function assertUploadedContentAtPath(swarmHash, path, contentType) {
|
||||
const response = await axios.get(`http://localhost:1633/bzz/${swarmHash}/${encodeURI(path)}`)
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Expected 200 OK, got ${response.status}`)
|
||||
}
|
||||
|
||||
if (response.headers['content-type'] !== contentType) {
|
||||
throw new Error(`Expected content-type ${contentType}, got ${response.headers['content-type']}`)
|
||||
}
|
||||
|
||||
const { data } = response
|
||||
|
||||
if (data.length === 0) {
|
||||
throw new Error(`Expected non-empty data, got ${data}`)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { selectStampAndUpload, assertUploadedContentAtPath }
|
||||
@@ -0,0 +1,73 @@
|
||||
const handler = require('serve-handler')
|
||||
const http = require('http')
|
||||
const puppeteer = require('puppeteer')
|
||||
const { testFolderUpload } = require('./test-case/FolderUpload')
|
||||
const { testImageFileUpload } = require('./test-case/ImageFileUpload')
|
||||
const { testTextFileUpload } = require('./test-case/TextFileUpload')
|
||||
const { testWebsiteUpload } = require('./test-case/WebsiteUpload')
|
||||
const { testReactWebsiteUpload } = require('./test-case/ReactWebsiteUpload')
|
||||
const { testUnicodeFileUpload } = require('./test-case/UnicodeFileUpload')
|
||||
const { testUnicodeWebsiteUpload } = require('./test-case/UnicodeWebsiteUpload')
|
||||
|
||||
const VIEWPORT = { width: 1366, height: 768 }
|
||||
|
||||
const testCases = [
|
||||
testUnicodeFileUpload,
|
||||
testUnicodeWebsiteUpload,
|
||||
testTextFileUpload,
|
||||
testImageFileUpload,
|
||||
testFolderUpload,
|
||||
testWebsiteUpload,
|
||||
testReactWebsiteUpload,
|
||||
]
|
||||
|
||||
async function main() {
|
||||
const server = prepareServer()
|
||||
const { browser, page } = await preparePage()
|
||||
const beforeAll = Date.now()
|
||||
for (const testCase of testCases) {
|
||||
const before = Date.now()
|
||||
console.log('\x1b[34m…\x1b[0m', 'Running', testCase.name)
|
||||
await testCase(page)
|
||||
const delta = Date.now() - before
|
||||
console.log('\x1b[32m✔\x1b[0m', testCase.name, 'passed in', delta, 'ms')
|
||||
}
|
||||
const delta = Date.now() - beforeAll
|
||||
console.log('\x1b[32m✔✔✔\x1b[0m', 'All', testCases.length, 'tests passed in', delta, 'ms')
|
||||
await page.close()
|
||||
await browser.close()
|
||||
server.close()
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Promise<{ browser: puppeteer.Browser, page: puppeteer.Page }>}
|
||||
*/
|
||||
async function preparePage() {
|
||||
// TODO: run in CI, headless mode
|
||||
const browser = await puppeteer.launch({
|
||||
defaultViewport: null,
|
||||
headless: false,
|
||||
args: [`--window-size=${VIEWPORT.width},${VIEWPORT.height}`],
|
||||
})
|
||||
const page = await browser.newPage()
|
||||
await page.goto(`http://localhost:${process.env.PORT ?? 8080}`, { waitUntil: 'networkidle0' })
|
||||
|
||||
return { browser, page }
|
||||
}
|
||||
|
||||
function prepareServer() {
|
||||
const serverConfig = {
|
||||
public: 'build',
|
||||
trailingSlash: false,
|
||||
rewrites: [{ source: '**', destination: '/index.html' }],
|
||||
}
|
||||
|
||||
const server = http.createServer((request, response) => {
|
||||
return handler(request, response, serverConfig)
|
||||
})
|
||||
server.listen(8080)
|
||||
|
||||
return server
|
||||
}
|
||||
|
||||
main()
|
||||
@@ -0,0 +1,157 @@
|
||||
const SLEEP_MS = 500
|
||||
const SLEEP_ITERATIONS = 20
|
||||
|
||||
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
* @param {string} selector XPath selector
|
||||
*/
|
||||
async function waitForElementXPath(page, selector) {
|
||||
for (let i = 0; i < SLEEP_ITERATIONS; i++) {
|
||||
const element = await page.evaluateHandle(selector => {
|
||||
const result = document.evaluate(selector, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
|
||||
|
||||
return result.singleNodeValue
|
||||
}, selector)
|
||||
|
||||
const isNull = await page.evaluate(el => el === null, element)
|
||||
|
||||
if (!isNull) {
|
||||
return element
|
||||
}
|
||||
|
||||
await sleep(SLEEP_MS)
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
* @param {string} selector CSS selector
|
||||
*/
|
||||
async function waitForElementCss(page, selector) {
|
||||
for (let i = 0; i < SLEEP_ITERATIONS; i++) {
|
||||
const element = await page.$(selector)
|
||||
|
||||
if (element) {
|
||||
return element
|
||||
}
|
||||
await sleep(SLEEP_MS)
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
* @param {string} elementType HTML tag name, e.g. `a`, `button`, `div`,
|
||||
* @param {string} text e.g. `"Submit"`
|
||||
*/
|
||||
function waitForEnabledStateXPath(page, elementType, text) {
|
||||
return waitForElementXPath(page, `//${elementType}[contains(., '${text}')][not(@disabled)]`)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
* @param {string} elementType HTML tag name, e.g. `a`, `button`, `div`,
|
||||
* @param {string} text e.g. `"Submit"`
|
||||
*/
|
||||
async function clickElementWithText(page, elementType, text) {
|
||||
const element = await waitForElementXPath(page, `//${elementType}[contains(., '${text}')]`)
|
||||
|
||||
if (!element) {
|
||||
throw Error(`clickElementWithText: Could not find <${elementType}> containing "${text}"`)
|
||||
}
|
||||
|
||||
if (element) {
|
||||
await element.click()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
* @param {string} elementType HTML tag name, e.g. `a`, `button`, `div`,
|
||||
* @param {string} text e.g. `"Submit"`
|
||||
* @param {string} filePath e.g. `"test-data/text.txt"`
|
||||
*/
|
||||
async function clickElementWithTextAndUpload(page, elementType, text, filePath) {
|
||||
const [fileChooser] = await Promise.all([page.waitForFileChooser(), clickElementWithText(page, elementType, text)])
|
||||
await fileChooser.accept([filePath])
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
* @param {string} elementType HTML tag name, e.g. `a`, `button`, `div`,
|
||||
* @param {string} cssClass CSS class with the dot, e.g. '.MuiSelect-select'
|
||||
*/
|
||||
async function clickElementWithClass(page, elementType, cssClass) {
|
||||
const element = await waitForElementCss(page, `${elementType}${cssClass}`)
|
||||
|
||||
if (!element) {
|
||||
throw Error(`clickElementWithClass: Could not find <${elementType}> with class ${cssClass}`)
|
||||
}
|
||||
|
||||
if (element) {
|
||||
await element.click()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
* @param {string} elementType HTML tag name, e.g. `a`, `button`, `div`,
|
||||
* @param {string} text e.g. `"Submit"`
|
||||
*/
|
||||
async function assertElementWithTextExists(page, elementType, text) {
|
||||
const element = await waitForElementXPath(page, `//${elementType}[contains(., '${text}')]`)
|
||||
|
||||
if (!element) {
|
||||
throw Error(`assertElementWithTextExists: Could not find <${elementType}> containing "${text}"`)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
* @param {string} elementType HTML tag name, e.g. `a`, `button`, `div`,
|
||||
* @param {string} attribute HTML attribute, e.g. `alt` or `id`
|
||||
* @param {string} value Expected value of the attribute
|
||||
* @param {string} property Property to return from the queried HTML element
|
||||
* @returns {Promise<string>}
|
||||
*/
|
||||
async function queryElementPropertyByAttribute(page, elementType, attribute, value, property) {
|
||||
const element = await waitForElementXPath(page, `//${elementType}[contains(@${attribute}, "${value}")]`)
|
||||
|
||||
return page.evaluate((element, property) => element[property], element, property)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
* @param {string} alt `<img>` `alt` to look for
|
||||
*/
|
||||
function queryImgSrcByAlt(page, alt) {
|
||||
return queryElementPropertyByAttribute(page, 'img', 'alt', alt, 'src')
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
sleep,
|
||||
Assert: {
|
||||
elementWithTextExists: assertElementWithTextExists,
|
||||
},
|
||||
Click: {
|
||||
elementWithText: clickElementWithText,
|
||||
elementWithClass: clickElementWithClass,
|
||||
elementWithTextAndUpload: clickElementWithTextAndUpload,
|
||||
},
|
||||
Query: {
|
||||
elementPropertyByAttribute: queryElementPropertyByAttribute,
|
||||
imgSrcByAlt: queryImgSrcByAlt,
|
||||
},
|
||||
Wait: {
|
||||
forElementCss: waitForElementCss,
|
||||
forElementXPath: waitForElementXPath,
|
||||
forEnabledStateXPath: waitForEnabledStateXPath,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
const path = require('path')
|
||||
const { selectStampAndUpload } = require('../helpers')
|
||||
const { Assert, Click } = require('../library')
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function testFolderUpload(page) {
|
||||
await Click.elementWithText(page, 'a', 'Files')
|
||||
await Click.elementWithTextAndUpload(
|
||||
page,
|
||||
'button',
|
||||
'Add Folder',
|
||||
path.resolve(__dirname, '../test-data/test-folder'),
|
||||
)
|
||||
await assertUploadPreview(page)
|
||||
await selectStampAndUpload(page)
|
||||
await assertDownloadPreview(page)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function assertDownloadPreview(page) {
|
||||
await assertUploadPreview(page)
|
||||
await Assert.elementWithTextExists(page, 'p', 'Swarm Hash: f3cace09[…]6a30aff5')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Folder Name: test-folder')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Kind: Folder')
|
||||
await Assert.elementWithTextExists(page, 'h6', '4 items')
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function assertUploadPreview(page) {
|
||||
await Assert.elementWithTextExists(page, 'p', 'Folder Name: test-folder')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Kind: Folder')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Size: 6.56 KB')
|
||||
}
|
||||
|
||||
module.exports = { testFolderUpload }
|
||||
@@ -0,0 +1,38 @@
|
||||
const path = require('path')
|
||||
const { Assert, Click } = require('../library')
|
||||
const { selectStampAndUpload } = require('../helpers')
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function testImageFileUpload(page) {
|
||||
await Click.elementWithText(page, 'a', 'Files')
|
||||
await Click.elementWithTextAndUpload(
|
||||
page,
|
||||
'button',
|
||||
'Add File',
|
||||
path.resolve(__dirname, '../test-data/1337x1337.jpg'),
|
||||
)
|
||||
await assertUploadPreview(page)
|
||||
await selectStampAndUpload(page)
|
||||
await assertDownloadPreview(page)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function assertUploadPreview(page) {
|
||||
await Assert.elementWithTextExists(page, 'p', 'Filename: 1337x1337.jpg')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Kind: image/jpeg')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Size: 116.88 KB')
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function assertDownloadPreview(page) {
|
||||
await assertUploadPreview(page)
|
||||
await Assert.elementWithTextExists(page, 'p', 'Swarm Hash: 91a70e81[…]758fbbde')
|
||||
}
|
||||
|
||||
module.exports = { testImageFileUpload }
|
||||
@@ -0,0 +1,30 @@
|
||||
const path = require('path')
|
||||
const { selectStampAndUpload, assertUploadedContentAtPath } = require('../helpers')
|
||||
const { Click } = require('../library')
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function testReactWebsiteUpload(page) {
|
||||
await Click.elementWithText(page, 'a', 'Files')
|
||||
await Click.elementWithTextAndUpload(
|
||||
page,
|
||||
'button',
|
||||
'Add Website',
|
||||
path.resolve(__dirname, '../test-data/test-react-website'),
|
||||
)
|
||||
const swarmHash = await selectStampAndUpload(page)
|
||||
await assertUploadedContentAtPath(swarmHash, 'index.html', 'text/html; charset=utf-8')
|
||||
await assertUploadedContentAtPath(swarmHash, 'asset-manifest.json', 'application/json')
|
||||
await assertUploadedContentAtPath(swarmHash, 'static/css/main.073c9b0a.css', 'text/css; charset=utf-8')
|
||||
await assertUploadedContentAtPath(swarmHash, 'static/css/main.073c9b0a.css.map', '')
|
||||
await assertUploadedContentAtPath(swarmHash, 'static/js/787.28cb0dcd.chunk.js', 'text/javascript; charset=utf-8')
|
||||
await assertUploadedContentAtPath(swarmHash, 'static/js/787.28cb0dcd.chunk.js.map', '')
|
||||
await assertUploadedContentAtPath(
|
||||
swarmHash,
|
||||
'static/media/logo.6ce24c58023cc2f8fd88fe9d219db6c6.svg',
|
||||
'image/svg+xml',
|
||||
)
|
||||
}
|
||||
|
||||
module.exports = { testReactWebsiteUpload }
|
||||
@@ -0,0 +1,33 @@
|
||||
const path = require('path')
|
||||
const { selectStampAndUpload } = require('../helpers')
|
||||
const { Assert, Click } = require('../library')
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function testTextFileUpload(page) {
|
||||
await Click.elementWithText(page, 'a', 'Files')
|
||||
await Click.elementWithTextAndUpload(page, 'button', 'Add File', path.resolve(__dirname, '../test-data/text.txt'))
|
||||
await assertUploadPreview(page)
|
||||
await selectStampAndUpload(page)
|
||||
await assertDownloadPreview(page)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function assertUploadPreview(page) {
|
||||
await Assert.elementWithTextExists(page, 'p', 'Filename: text.txt')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Kind: text/plain')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Size: 1.64 KB')
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function assertDownloadPreview(page) {
|
||||
assertUploadPreview(page)
|
||||
await Assert.elementWithTextExists(page, 'p', 'Swarm Hash: c6e8a03e[…]327a88c4')
|
||||
}
|
||||
|
||||
module.exports = { testTextFileUpload }
|
||||
@@ -0,0 +1,38 @@
|
||||
const path = require('path')
|
||||
const { selectStampAndUpload } = require('../helpers')
|
||||
const { Assert, Click } = require('../library')
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function testUnicodeFileUpload(page) {
|
||||
await Click.elementWithText(page, 'a', 'Files')
|
||||
await Click.elementWithTextAndUpload(
|
||||
page,
|
||||
'button',
|
||||
'Add File',
|
||||
path.resolve(__dirname, '../test-data/—𝖆𝖆🙇\\𝖈𝖈.txt'),
|
||||
)
|
||||
await assertUploadPreview(page)
|
||||
await selectStampAndUpload(page)
|
||||
await assertDownloadPreview(page)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function assertUploadPreview(page) {
|
||||
await Assert.elementWithTextExists(page, 'p', 'Filename: —𝖆𝖆🙇\\𝖈𝖈.txt')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Kind: text/plain')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Size: 5.51 KB')
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function assertDownloadPreview(page) {
|
||||
assertUploadPreview(page)
|
||||
await Assert.elementWithTextExists(page, 'p', 'Swarm Hash: 2a3f5bfc[…]77e2a4c1')
|
||||
}
|
||||
|
||||
module.exports = { testUnicodeFileUpload }
|
||||
@@ -0,0 +1,21 @@
|
||||
const path = require('path')
|
||||
const { selectStampAndUpload, assertUploadedContentAtPath } = require('../helpers')
|
||||
const { Click } = require('../library')
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function testUnicodeWebsiteUpload(page) {
|
||||
await Click.elementWithText(page, 'a', 'Files')
|
||||
await Click.elementWithTextAndUpload(
|
||||
page,
|
||||
'button',
|
||||
'Add Website',
|
||||
path.resolve(__dirname, '../test-data/test-unicode-website—𝖆𝖆🙇\\𝖈𝖈'),
|
||||
)
|
||||
const swarmHash = await selectStampAndUpload(page)
|
||||
await assertUploadedContentAtPath(swarmHash, 'index.html', 'text/html; charset=utf-8')
|
||||
await assertUploadedContentAtPath(swarmHash, '—𝖆𝖆🙇/𝖈𝖈.txt', 'text/plain; charset=utf-8')
|
||||
}
|
||||
|
||||
module.exports = { testUnicodeWebsiteUpload }
|
||||
@@ -0,0 +1,41 @@
|
||||
const path = require('path')
|
||||
const { selectStampAndUpload } = require('../helpers')
|
||||
const { Assert, Click } = require('../library')
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function testWebsiteUpload(page) {
|
||||
await Click.elementWithText(page, 'a', 'Files')
|
||||
await Click.elementWithTextAndUpload(
|
||||
page,
|
||||
'button',
|
||||
'Add Website',
|
||||
path.resolve(__dirname, '../test-data/test-website'),
|
||||
)
|
||||
await assertUploadPreview(page)
|
||||
await selectStampAndUpload(page)
|
||||
await assertDownloadPreview(page)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function assertUploadPreview(page) {
|
||||
await Assert.elementWithTextExists(page, 'p', 'Folder Name: test-website')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Kind: Website')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Size: 390.10 KB')
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {puppeteer.Page} page Puppeteer Page object returned by `browser.newPage()`
|
||||
*/
|
||||
async function assertDownloadPreview(page) {
|
||||
await assertUploadPreview(page)
|
||||
await Assert.elementWithTextExists(page, 'p', 'Swarm Hash: d7fc1259[…]ac11e6f7')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Folder Name: test-website')
|
||||
await Assert.elementWithTextExists(page, 'p', 'Kind: Website')
|
||||
await Assert.elementWithTextExists(page, 'h6', '3 items')
|
||||
}
|
||||
|
||||
module.exports = { testWebsiteUpload }
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 114 KiB |
@@ -0,0 +1,40 @@
|
||||
6857a7050f3b698675d85a6d019305b6090f95f0
|
||||
fcf895e4df26acdce571c2333bbd0730ef29f891
|
||||
68dc5591812e60b17dde51615ed0881ea5fcfd9f
|
||||
7adb999f68d64fe05b5274eee058521aa23b2aef
|
||||
becc4e5197099bdf152f1bf3bf9d1bb50e007a0c
|
||||
3c5ba0f875ff345ee48a269d7b53eeda12fd5601
|
||||
4dc6123048234084c599959142cf415172450715
|
||||
864c785d0ddf4e24924de4ac165bd4e74c7e36b3
|
||||
85df5c1f7994dfdc171db8ee17f6144ca18c0009
|
||||
9bbc1aa874ec49a9ac933faf4b05ab33b132bfbc
|
||||
0269aa60a6c456b9206e3b04c174603f869d2f14
|
||||
60f7b18bfa0f07c210e91d385d92e19140aeb51d
|
||||
21daec4b7ad73922169d8efddd0e0174fb90d013
|
||||
ed3d75ae2c0d5295841b5f96d278222cb4abc0f2
|
||||
10b8898cfaf7208884ea7c042cc456fc92c9b819
|
||||
38f2cdd53aa2d46423c7d9ee3f55ecdb3d69044d
|
||||
b3f3265c9d97e80260bb4a9c9b17c4a5bcf643a9
|
||||
545bc39d80151cb23d0c98ce618f0a4adc120ac5
|
||||
b4de4b6a2437e99534384cf6810feb500ee478f6
|
||||
a0d37a09c84ca3b58a493dd27ba36f43e8ee4fad
|
||||
2bd0ec3f8a3852fb960160dad51e5b4078426944
|
||||
57c8e004de3cff1974ff285677a3a386bd38a317
|
||||
bb6f33f3f12cfdc68ff2bb9f91406d40cee3c807
|
||||
a0e2045d7b3f5a84c2fc0262b37cba5b93d66bd0
|
||||
6456741eac9cdae9ced1cc2ce7d4972a3329bd39
|
||||
d8a7a7875ce0b15d1e1a50e705c3118280363ec0
|
||||
64c723249a47c0ff663000a762d95fb58f13fdea
|
||||
0327e8529be0d96f86c841cc7839e15dca15d2bd
|
||||
edcb3f24ba8c74359660bf2c488df0ed414072d6
|
||||
d654a02bf4271e9633548a6777c1788a98eded87
|
||||
bc6fa2c3c155a940262386571081420402b1b923
|
||||
338d8167dd48f810aa9573bb53d2bf632331f989
|
||||
81176b5e809c1b29aaf717cd3b43ee871c8f21c1
|
||||
6853345f0d4fd39365c4d9de58d258779e89eb7c
|
||||
b68aa42ba7a343eedd595ee197c6381457162b63
|
||||
ecebaf8124aa6caff3542c25d80ed7cf5f64584f
|
||||
501804d75a17f77799e09834101626c1c681237a
|
||||
ebba852da0af9fab804a79c592c2bdfed286c26b
|
||||
5ddabc3dcc3ab672e7b0a01f4afad5239109eba0
|
||||
6e89b48babada48b6e6e3dafb6c280b6089ba841
|
||||
@@ -0,0 +1,40 @@
|
||||
89d0aa0693f8fa7fd56ea9821a20576b8dc0b70c
|
||||
233f235852c31d31d25c41a95d276457d75c5d2c
|
||||
4a6dbff20f95a99676b0423c945e532c1d27ce10
|
||||
e83f5f472255e5e47a94bec9ddc5a0b10787230f
|
||||
eb8f5d96cc60019a328a6fd70230d68e41ec5f8f
|
||||
95d3b8187e99d5eb9fb4110602ed0986cdcf7e9c
|
||||
2f57c850d44481baf3c91aac9a6aa17a6f870368
|
||||
4af29bd9177509376e20e79f3a4ff41475e89ce1
|
||||
b0424b5cc80fa80d7eb59faca0538bea7d4028ac
|
||||
242bc01b9b54a13e0f60259deb66a4ccf428a679
|
||||
34e3ca767691317ae7d021967f0576bd4eb0baa2
|
||||
0bf5c07d4e807ca46c5fb4334381bc77163c1f9d
|
||||
df4d25cb88c7177b2afddc1c652753a2b78ff7b9
|
||||
b82c0ba16886648e7f21d0b9b24b33080574671f
|
||||
92456c3bbffd461845f6600cf4357df7968b88e0
|
||||
ddbf58f422d7c3dfb0a5fb4ded9cd9d9e99da4be
|
||||
41c531777fd80868dffcff554de1d77b44dfab7e
|
||||
02540a73ce034777a18fe9ed9c76855f6fdbfb63
|
||||
0e6707e80215d5871203a1ca3048915eebec653b
|
||||
a00398936467504d5b3ea8bb59ab0d1259ca83bd
|
||||
1fb82cbec72739f7e366c9c4ca4ba75a3ffb20fe
|
||||
2335340c6ceeb6b7e5f91d659ba5aa1c0b47892d
|
||||
287b993cd5480a2267f7dbbb11f69777f6742b1e
|
||||
9462fa394fac136bed96b6274f999afd0256ce82
|
||||
33b3404926bb97848ea4f7a5d6f772251da7a608
|
||||
bfa50de6375939c17ed4ec29c8e812c4e9be60ce
|
||||
b2a9542b7bb6674f4aab36c30b16ff54c222bef1
|
||||
40746c1c87e7ea175df5f1680a0eceda0239868b
|
||||
73d56b02bfe537480cbfe59fde9ec859ed7fcd56
|
||||
33f8ceb9133e50a67d8fbab76c7f986ee8593ee7
|
||||
a520751396cfeadc99ea708e270080ad6170d5ea
|
||||
3ac084cb847b17b753142900a99fcd1f441084ab
|
||||
1a16765601210a635baad6aadaf6c9f1f2304d92
|
||||
0e7ac2503779b3969e1a153ac06a9271b5af9a4d
|
||||
c053d311c71f4461e2d56a7cf799b4841977b623
|
||||
b63bef742d705306e32e726738257b83bcd92ddb
|
||||
854e6e1731ccfc22327a6c5bd7ce78e394ef0325
|
||||
15f7b431a7d48391a71b79ca0e1b567eb7ff5f5c
|
||||
585e99c7cedfac1190ae449e5546a7da2fe0ff49
|
||||
0aae3e5db6057a2796c59bdefcd6ae44b880e5ce
|
||||
@@ -0,0 +1,40 @@
|
||||
fafe57711ee6f0fe89ea64ab7e5b6f9a34eebc1a
|
||||
3f3a2a728f45e00a17ee7255b1f4fc4d9adc83c0
|
||||
815051cf4ac9235a0df2806bf2eabc668fa29a01
|
||||
cdac5f6018279816ee7287794239de83dc6312af
|
||||
401666cac4f1e34132176ba6565eb84899aa168f
|
||||
5f2812e35ca870b9e85b5ac60b47e0d80aa2d905
|
||||
ada7f51c064702ac4c1f33d1ced6dd882f2f4971
|
||||
e5b8944c6ee08170205a47049626d995bc850151
|
||||
cae308ccfc3ddc3c08f1da7bd6348c954c7c7cbe
|
||||
73be5df1891a0e6e374936f7f1fd93104033fecb
|
||||
60a8b7cb61e058722956e39d28f8b1efe5a0e309
|
||||
b2b6d5e138d41738ff9057b74aec1965fc030b30
|
||||
29ba55c0334e2fb60599ce99ed35b8adc65c92d6
|
||||
1ade4db1e922d6609216902a65fc72535f5570d5
|
||||
00749b46dc4d83d3c835ea51c387c2ba9f009ec4
|
||||
f5623179b8dd80eeb5dba80e70b304dc2debb585
|
||||
8ab93bde7091a75a66be77c20ee929dd37ea41f1
|
||||
e8d7ee0b5bb27154a855d95e1af3e4709e1a58f9
|
||||
5642d952fa67e0e89f1bc874c0e6593417289e78
|
||||
e3b584b47a28b8b664c78f536e76ae9b1d3079bf
|
||||
7d7c97d348eae903189c7c0efad090064d3b771e
|
||||
ae1502dd53c908bb3658e41f4d4da3dbb11cb772
|
||||
f4ef4a02759cb82cf90defab3ac948a65e874ee9
|
||||
8c797b38d4594ac2c03d069e853a586d02c6b368
|
||||
56f8a1fafd0c073440f71d8eeba3268689d78b98
|
||||
dc1a0e8caf5934babf92802f3a753933400b37d9
|
||||
da065c57205f39a943e3d0b10001fbf730feb552
|
||||
2926b2389769c14d77fc1b0f0ff1faec0a26323f
|
||||
7d439a063b726875e81683494affd5517f666649
|
||||
4ba360418d2d1d5f003b932747a258494c4301e8
|
||||
5d46dbc2f72781502eed0722c609ddd3ad2dcfa2
|
||||
7b7d15425d0b7de25e2f27ee5e402e0c22c22038
|
||||
e97a4765286e7c83d309676983c78da95754ff83
|
||||
8ed57bead42d0d22ebe0fcb322a0aa94ace3bb66
|
||||
352c383d10f97d17d4ea6d6ff55be5ec14e5a010
|
||||
b5025ec9e14721a9034b6f9f24932734b4fb822a
|
||||
a0d946a3a729d91ee0740b9d937ac7686cf7a553
|
||||
ef44430604978c460c7e33e56c723e9d2976aff6
|
||||
507dfe5656d5a3a139b7c0feb16b323557cb0a17
|
||||
6dfa530095471d8af68dda90a25829c3fb01857d
|
||||
@@ -0,0 +1,40 @@
|
||||
0c5aee4c907c91a32cb63f34de20b584e57bc63b
|
||||
1e58a64ee85233d042508363b83940c68fac51c2
|
||||
caf8ff6f60dc0892415450cbc574799da9abbedc
|
||||
74686af7ec63bb15dc6fb0af6134a2744ea8787e
|
||||
6400780e4f6e4b33628bede4045249dfc9c69540
|
||||
5acb7f4c35c88d65557a397a9adde4ecdc18ae14
|
||||
f320cf7bff3fc91b237be60e3426a627afc89aa4
|
||||
2076ca826e4e1c794954b20df36d3aef5a8e460a
|
||||
bfe5bd2506752fe2e2bb9bbd4ba6ba32b602c7d9
|
||||
007b6defb01b0de6e833dacd209752117c17f674
|
||||
298e5755c41c583d7693a78a89a7473df8739b06
|
||||
166fdcad59469adf63120b0dce19ce6c5f4761eb
|
||||
5ba1049456f61cbd1438641495f704b502aefa2e
|
||||
12b37c1ad7fc52442a40dc37ab15320db2367538
|
||||
7ac458cfe550a48a0a2915012a109175125be704
|
||||
a5b423222aefbfdd109edcbf24aaf1645fdca253
|
||||
d19b935739188a8fd26ed8b5a10bbda9886ec6c0
|
||||
f8bedd5e9fd7e12edb08ff9276cfd4c0ea9a6352
|
||||
ae5a66da162be82eb892341cd647c2e5fcc6ae72
|
||||
5db642841bb38be39c83fc35b0131a7cd0f38a0e
|
||||
9cc4e3bec3365e21ce94d794a0892d695dc2a1c3
|
||||
32ccd4cda5736a6834b5f6940e3493fa85f0a1f9
|
||||
520c3eb1cd25302266b352bfd01004aab89aadd3
|
||||
28bb5f995b7d834d74e499405bee30d65c0b9c5d
|
||||
1de4ceb425708e62a65ab658e1c94baa30a6fc8b
|
||||
904d403ec242b5d95c7fff31c0b581db1b434b19
|
||||
b0b684d18d8145bb5284978430b9143b1c09d33f
|
||||
d88afdcb176af85c165a9135b199cb78bfa3c04c
|
||||
bfe09cab5fdd069c95cb5133414e4f029f3e5803
|
||||
d89230f068a21d067cfc4087d1306a53896a9788
|
||||
d6e72f6fe922c04e32cf236d642177d031b57f23
|
||||
1049c6078ad9896ac914bab2425a05f865da4164
|
||||
f5d9a7ec1dff1cd241c8303f84024900ee5ea7ce
|
||||
c6c883d338bfac9709763c69f8f2e5b61c24bc0d
|
||||
242574cb1c99e6731e4a792855920ffe63cd5c1c
|
||||
41167719d37928de14c78b243ca371cfa893b07c
|
||||
738f590d0b3cb71e3a03369068c6192fe1e16167
|
||||
1268b7be1e0d6239a896be8adaa08b512bb65c67
|
||||
136eb76f4a68a67940d6deed22e37098baab216a
|
||||
fb5a4fc20e23aab9024bb621af1417bd9dbc29af
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"files": {
|
||||
"main.css": "/static/css/main.073c9b0a.css",
|
||||
"main.js": "/static/js/main.0215976b.js",
|
||||
"static/js/787.28cb0dcd.chunk.js": "/static/js/787.28cb0dcd.chunk.js",
|
||||
"static/media/logo.svg": "/static/media/logo.6ce24c58023cc2f8fd88fe9d219db6c6.svg",
|
||||
"index.html": "/index.html",
|
||||
"main.073c9b0a.css.map": "/static/css/main.073c9b0a.css.map",
|
||||
"main.0215976b.js.map": "/static/js/main.0215976b.js.map",
|
||||
"787.28cb0dcd.chunk.js.map": "/static/js/787.28cb0dcd.chunk.js.map"
|
||||
},
|
||||
"entrypoints": [
|
||||
"static/css/main.073c9b0a.css",
|
||||
"static/js/main.0215976b.js"
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.0215976b.js"></script><link href="/static/css/main.073c9b0a.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "logo192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "logo512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
||||
@@ -0,0 +1,2 @@
|
||||
body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{-webkit-animation:App-logo-spin 20s linear infinite;animation:App-logo-spin 20s linear infinite}}.App-header{align-items:center;background-color:#282c34;color:#fff;display:flex;flex-direction:column;font-size:calc(10px + 2vmin);justify-content:center;min-height:100vh}.App-link{color:#61dafb}@-webkit-keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}
|
||||
/*# sourceMappingURL=main.073c9b0a.css.map*/
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"static/css/main.073c9b0a.css","mappings":"AAAA,KAKE,kCAAmC,CACnC,iCAAkC,CAJlC,mIAEY,CAHZ,QAMF,CAEA,KACE,uEAEF,CCZA,KACE,iBACF,CAEA,UACE,aAAc,CACd,mBACF,CAEA,8CACE,UACE,mDAA4C,CAA5C,2CACF,CACF,CAEA,YAKE,kBAAmB,CAJnB,wBAAyB,CAOzB,UAAY,CALZ,YAAa,CACb,qBAAsB,CAGtB,4BAA6B,CAD7B,sBAAuB,CAJvB,gBAOF,CAEA,UACE,aACF,CAEA,iCACE,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF,CAPA,yBACE,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF","sources":["index.css","App.css"],"sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n",".App {\n text-align: center;\n}\n\n.App-logo {\n height: 40vmin;\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .App-logo {\n animation: App-logo-spin infinite 20s linear;\n }\n}\n\n.App-header {\n background-color: #282c34;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n}\n\n.App-link {\n color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n"],"names":[],"sourceRoot":""}
|
||||
@@ -0,0 +1,2 @@
|
||||
"use strict";(self.webpackChunkmy_app=self.webpackChunkmy_app||[]).push([[787],{787:function(e,t,n){n.r(t),n.d(t,{getCLS:function(){return y},getFCP:function(){return g},getFID:function(){return C},getLCP:function(){return P},getTTFB:function(){return D}});var i,r,a,o,u=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},m=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=-1,p=function(){return"hidden"===document.visibilityState?0:1/0},d=function(){f((function(e){var t=e.timeStamp;v=t}),!0)},l=function(){return v<0&&(v=p(),d(),s((function(){setTimeout((function(){v=p(),d()}),0)}))),{get firstHiddenTime(){return v}}},g=function(e,t){var n,i=l(),r=u("FCP"),a=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=e.startTime,r.entries.push(e),n(!0)))},o=window.performance&&performance.getEntriesByName&&performance.getEntriesByName("first-contentful-paint")[0],f=o?null:c("paint",a);(o||f)&&(n=m(e,r,t),o&&a(o),s((function(i){r=u("FCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,n(!0)}))}))})))},h=!1,T=-1,y=function(e,t){h||(g((function(e){T=e.value})),h=!0);var n,i=function(t){T>-1&&e(t)},r=u("CLS",0),a=0,o=[],v=function(e){if(!e.hadRecentInput){var t=o[0],i=o[o.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(a+=e.value,o.push(e)):(a=e.value,o=[e]),a>r.value&&(r.value=a,r.entries=o,n())}},p=c("layout-shift",v);p&&(n=m(i,r,t),f((function(){p.takeRecords().map(v),n(!0)})),s((function(){a=0,T=-1,r=u("CLS",0),n=m(i,r,t)})))},E={passive:!0,capture:!0},w=new Date,L=function(e,t){i||(i=t,r=e,a=new Date,F(removeEventListener),S())},S=function(){if(r>=0&&r<a-w){var e={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+r};o.forEach((function(t){t(e)})),o=[]}},b=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){L(e,t),r()},i=function(){r()},r=function(){removeEventListener("pointerup",n,E),removeEventListener("pointercancel",i,E)};addEventListener("pointerup",n,E),addEventListener("pointercancel",i,E)}(t,e):L(t,e)}},F=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,b,E)}))},C=function(e,t){var n,a=l(),v=u("FID"),p=function(e){e.startTime<a.firstHiddenTime&&(v.value=e.processingStart-e.startTime,v.entries.push(e),n(!0))},d=c("first-input",p);n=m(e,v,t),d&&f((function(){d.takeRecords().map(p),d.disconnect()}),!0),d&&s((function(){var a;v=u("FID"),n=m(e,v,t),o=[],r=-1,i=null,F(addEventListener),a=p,o.push(a),S()}))},k={},P=function(e,t){var n,i=l(),r=u("LCP"),a=function(e){var t=e.startTime;t<i.firstHiddenTime&&(r.value=t,r.entries.push(e),n())},o=c("largest-contentful-paint",a);if(o){n=m(e,r,t);var v=function(){k[r.id]||(o.takeRecords().map(a),o.disconnect(),k[r.id]=!0,n(!0))};["keydown","click"].forEach((function(e){addEventListener(e,v,{once:!0,capture:!0})})),f(v,!0),s((function(i){r=u("LCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,k[r.id]=!0,n(!0)}))}))}))}},D=function(e){var t,n=u("TTFB");t=function(){try{var t=performance.getEntriesByType("navigation")[0]||function(){var e=performance.timing,t={entryType:"navigation",startTime:0};for(var n in e)"navigationStart"!==n&&"toJSON"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0||n.value>performance.now())return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("load",(function(){return setTimeout(t,0)}))}}}]);
|
||||
//# sourceMappingURL=787.28cb0dcd.chunk.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* @license React
|
||||
* react-dom.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @license React
|
||||
* react-jsx-runtime.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @license React
|
||||
* react.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @license React
|
||||
* scheduler.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
</head>
|
||||
<body></body>
|
||||
</html>
|
||||
@@ -0,0 +1,40 @@
|
||||
🙅𝖆👾\都都𝖇🙅𝖆𝖈\𝖇—🙇\𝖆💁🙇東都東🙇\💁👾𝖆𝖆𝖆𝖇—東東京🙇𝖆𝖈💁🙇🙅🙅
|
||||
都𝖆🙅\👾𝖈𝖈東🙇\都東𝖇𝖆東都\👾👾東東都👾👾\💁\𝖇𝖈𝖆🙇東都都\都👾💁🙇𝖈
|
||||
👾\🙅東東京東都🙅—𝖇京京🙇💁—👾𝖇𝖇𝖇都👾東𝖆京👾京👾🙇都\𝖆—東東—京👾京東
|
||||
—🙅都—𝖈𝖇—\\𝖆都💁💁🙇𝖈𝖈🙅—都\🙇𝖇💁𝖈𝖇\🙇𝖆💁👾京𝖆都都🙅—𝖈𝖇都𝖇
|
||||
𝖇都\𝖈都👾💁𝖈🙇京👾京—𝖆𝖆🙅京𝖈\𝖇—京🙅💁𝖈—都\京都東東𝖆𝖇𝖇🙅\👾京🙅
|
||||
東🙅\都𝖆—👾💁𝖈都🙅東—𝖆🙇𝖆🙇𝖈🙅京東𝖇𝖇🙅都𝖈東👾東🙇🙇🙇👾𝖆🙇👾—東—東
|
||||
𝖆京都東🙅都𝖈🙇都\東🙅🙅👾𝖇𝖇👾𝖇👾👾👾京\—𝖇—🙅\𝖆𝖆京𝖆💁🙅京東𝖆🙇—💁
|
||||
都東東🙇都👾𝖈𝖈𝖆𝖈👾東都💁京—𝖈都東🙇𝖈—🙇𝖈都\\東京🙅𝖇—𝖈🙇東𝖆𝖈東京👾
|
||||
—𝖇—💁👾都👾𝖇—𝖈東京𝖇\都𝖆\\👾都🙅𝖈—𝖈京𝖈都👾👾💁𝖇都🙅💁東京👾都東東
|
||||
👾—東🙇東🙇東𝖇💁💁東京—\京𝖇東——𝖆京京🙅💁🙇💁東🙅𝖆𝖈東🙅東𝖇💁👾東\\𝖆
|
||||
都🙅💁—🙅𝖈🙇𝖈👾𝖆🙇👾𝖆\東𝖆🙇𝖆𝖆🙇都🙇都京𝖈🙅—都👾👾𝖇💁🙇🙅\\🙅𝖇🙅👾
|
||||
—\京東𝖇東京𝖈𝖆\京東👾🙅𝖆💁東𝖇都𝖈—東都🙇🙇—𝖈💁👾\💁—🙅💁\𝖇京𝖈🙅💁
|
||||
\🙇𝖇💁都🙇京\🙇𝖈🙅都—𝖆🙇𝖇𝖈𝖇𝖇🙅🙅𝖇👾\東—🙅🙇💁京𝖇東東\𝖇💁𝖈都𝖆👾
|
||||
東🙇\👾𝖇👾💁都𝖆\🙇👾𝖈👾👾東𝖆京👾東都💁🙇💁———京都京東京💁👾𝖈京💁🙇🙅𝖈
|
||||
𝖈\𝖆👾東👾𝖇—京東京👾京💁東京🙅都京👾🙅𝖈京—東🙇東🙅都𝖇𝖇京都𝖇—\𝖇都🙅𝖆
|
||||
𝖈👾—都東👾\—🙅𝖈\—👾🙅𝖆👾—🙇👾東都🙅—💁——京𝖇—𝖆🙇🙅👾💁𝖆都🙇🙅\𝖆
|
||||
𝖇—東\𝖇𝖈𝖇𝖆都👾🙇京都🙇🙇\🙅—\🙇👾𝖇東—👾🙅𝖈🙇—東💁𝖈𝖈都都東🙅\🙇\
|
||||
🙅都京京👾—👾🙅𝖈👾𝖈都東💁🙅東🙅👾🙇𝖇𝖇東𝖈𝖇𝖇👾—京𝖈東𝖈🙅京𝖇\🙅𝖇🙇—\
|
||||
京💁—\\💁💁京—🙇👾💁𝖆👾🙇𝖇𝖈🙇京𝖆🙇𝖈🙇𝖇🙅𝖇𝖈𝖈都𝖈🙇𝖆𝖈—𝖈都𝖇京都💁
|
||||
🙇\𝖈—𝖆東京都🙇\\—京𝖇𝖈𝖈🙇👾東🙅🙅—𝖆—京𝖈東\都𝖆🙅𝖆—𝖇🙇都—🙅東👾
|
||||
\𝖈🙅🙇東\👾京—東👾𝖈𝖈💁𝖈💁𝖈𝖆—\\都東𝖆💁東𝖆𝖆都都𝖈🙇𝖇𝖆東都🙅—都𝖆
|
||||
\🙇🙅𝖇🙅🙅𝖇👾—都\𝖇👾🙅京🙅𝖇💁𝖇都🙇\🙇🙅京都𝖈\—𝖆𝖇💁🙅🙅𝖈🙅都🙇\東
|
||||
𝖆𝖈𝖈𝖆\𝖇都𝖆都\𝖈京𝖆𝖈𝖇𝖇𝖇💁👾🙅👾都👾\𝖈𝖇𝖈\\東👾都𝖈𝖇🙇👾京💁京🙅
|
||||
𝖈東都🙅🙇——\👾𝖈𝖈東\—💁𝖇𝖈🙇👾—都🙅𝖈—𝖆💁🙅💁東👾𝖇𝖇𝖈都𝖆東𝖈𝖈京🙅
|
||||
京🙇💁👾🙅👾𝖆𝖆𝖆都\\🙇🙇𝖈都👾都👾東𝖈🙇💁—🙇👾——𝖈𝖇🙅京—👾都💁🙇🙇𝖈\
|
||||
𝖇都👾💁東京💁💁🙇🙇京🙅都👾👾👾𝖇𝖆𝖈—𝖆𝖆\𝖈💁—🙇🙅都𝖆𝖇𝖆—🙇𝖇𝖇東🙅\\
|
||||
\東𝖈🙇𝖈𝖆𝖆𝖇💁👾—東𝖆—\𝖈\\\東\🙇🙇🙅𝖈都—𝖆👾—𝖇—🙇\𝖇都京𝖈東🙇
|
||||
🙇京\——𝖆💁🙅—東💁𝖇𝖆𝖆𝖆𝖈🙇東🙇💁京💁𝖇𝖇—都都𝖇💁🙅\🙅𝖆東👾京京𝖆東\
|
||||
👾東𝖆𝖇東—東都💁都𝖆\東𝖆京👾都🙅\𝖈𝖇—都👾都𝖇\東💁🙇💁—🙅都𝖆𝖆𝖆東\—
|
||||
京🙇京京京東—💁\💁🙇𝖇京💁💁都都👾\京𝖈🙅京京京👾🙅👾👾京——👾京𝖈𝖇🙅𝖆𝖆👾
|
||||
𝖈\東𝖆\🙇𝖇𝖆💁𝖈𝖈\🙇𝖈👾京𝖈𝖈𝖆🙅🙇🙅都🙅京𝖇東👾🙇🙇🙇💁🙇京京🙇—👾都👾
|
||||
𝖆京𝖈都京👾—💁𝖆東𝖆\𝖆💁京👾\都💁都💁🙅東🙇𝖈京京🙇都🙅𝖆𝖈———💁👾🙅🙅𝖇
|
||||
🙇💁𝖆𝖇𝖈𝖇👾都都京—𝖆💁🙇—\京都𝖆𝖇🙇\東東\🙇👾—𝖈𝖈🙅京東𝖆𝖇💁💁𝖇🙅𝖆
|
||||
👾💁𝖆—👾🙅🙅𝖇\𝖈—🙅\🙇𝖈🙅𝖇東🙇👾👾𝖈👾𝖈\京東\\京𝖈🙅🙅🙇𝖇京𝖈𝖈\都
|
||||
東𝖇💁\🙅—🙇東𝖆\💁💁𝖆𝖈💁—東京\\🙅\𝖈👾👾京京\👾\東𝖇𝖇𝖇👾—𝖇𝖆𝖈東
|
||||
🙅東𝖈\👾𝖈💁𝖈𝖆——都\都—\🙇𝖇𝖈👾𝖇京京💁都𝖈🙇👾𝖈京𝖈🙅—都💁\🙇都👾京
|
||||
🙇🙇𝖇𝖆💁🙇🙅👾都👾\👾𝖈💁💁💁—👾——𝖆\💁💁都京東𝖇京𝖆—🙇京\👾𝖇𝖈𝖆💁京
|
||||
—🙅都東京—東🙅—𝖈\京🙇𝖇🙇𝖈💁𝖆𝖇👾𝖇🙇𝖇𝖇👾🙇𝖈🙇💁都👾💁東🙇東𝖆都𝖆京𝖇
|
||||
𝖆東🙇東—𝖈𝖆—京都💁𝖈💁𝖆🙇東🙅京都都👾👾🙇\都🙅\𝖆\🙇—𝖆🙇—🙇京京𝖈京都
|
||||
東𝖆東🙇🙇𝖇🙇💁🙅👾𝖇💁東💁🙇🙅💁𝖈💁𝖆𝖈京💁🙇𝖆東都🙇都🙅𝖆—🙇𝖇🙇東京💁\🙅
|
||||
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello Swarm</h1>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,129 @@
|
||||
/* http://meyerweb.com/eric/tools/css/reset/
|
||||
v2.0 | 20110126
|
||||
License: none (public domain)
|
||||
*/
|
||||
|
||||
html,
|
||||
body,
|
||||
div,
|
||||
span,
|
||||
applet,
|
||||
object,
|
||||
iframe,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
p,
|
||||
blockquote,
|
||||
pre,
|
||||
a,
|
||||
abbr,
|
||||
acronym,
|
||||
address,
|
||||
big,
|
||||
cite,
|
||||
code,
|
||||
del,
|
||||
dfn,
|
||||
em,
|
||||
img,
|
||||
ins,
|
||||
kbd,
|
||||
q,
|
||||
s,
|
||||
samp,
|
||||
small,
|
||||
strike,
|
||||
strong,
|
||||
sub,
|
||||
sup,
|
||||
tt,
|
||||
var,
|
||||
b,
|
||||
u,
|
||||
i,
|
||||
center,
|
||||
dl,
|
||||
dt,
|
||||
dd,
|
||||
ol,
|
||||
ul,
|
||||
li,
|
||||
fieldset,
|
||||
form,
|
||||
label,
|
||||
legend,
|
||||
table,
|
||||
caption,
|
||||
tbody,
|
||||
tfoot,
|
||||
thead,
|
||||
tr,
|
||||
th,
|
||||
td,
|
||||
article,
|
||||
aside,
|
||||
canvas,
|
||||
details,
|
||||
embed,
|
||||
figure,
|
||||
figcaption,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
output,
|
||||
ruby,
|
||||
section,
|
||||
summary,
|
||||
time,
|
||||
mark,
|
||||
audio,
|
||||
video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
section {
|
||||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
ol,
|
||||
ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote,
|
||||
q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before,
|
||||
blockquote:after,
|
||||
q:before,
|
||||
q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 380 KiB |
@@ -0,0 +1,40 @@
|
||||
336e98b027786ddbc75a7547a656257c11be32b2
|
||||
ce319a535a6ddb677b6c7fae34712f83c83b93bc
|
||||
e4333ee6a9debbfdd9f7c356823e4fd1b57b1483
|
||||
c621227028f71042c3a06c2ef643964e5406053b
|
||||
ba9f12ce05fa560db7e11c71193dc32c91028105
|
||||
14238b8036ffb9784b302febdc620a21d7106a5c
|
||||
0353c02dd103750ef8f4abf40f44d0d39ea671a3
|
||||
22c1c57af8e0acebd934a3f589c0c50c10c3ff62
|
||||
c8767d4a3ed86809eccb3a8a22b6e1c852f3304d
|
||||
a96eb113125d74c3eed07c613e3963ed3176e9fc
|
||||
3a065ad47daf1787d3180ec57da5d4505eacb7e6
|
||||
eab477e8bbd6b00021be7fd130a711da404ea618
|
||||
580ed3679dc4b54ba276780d511aa28c78468b22
|
||||
c08d260a8517784ddc0f307c72c32002d43a2d77
|
||||
1d4b02795cbdfa272708569e9555bb36235f4ed4
|
||||
27ce7eccea98ccd5155e84365fe76c135754bac4
|
||||
23f761cf8c7498ea0132af6d60d0398e5a51262f
|
||||
79f6f7f1764807619743fa040b3daffe5ff35d2c
|
||||
604b8fbb44ed9f6bd3c1c10ea6af0292c324bc5e
|
||||
7bbdfc627fcf0de8dca782e3a9b19f58cbe0dbd2
|
||||
c2eba4de403cdab30ab9e8ea37cb658b1b718ad1
|
||||
44a5ecb1be4c2f15db635e2b7402ecc7241195f9
|
||||
faaddaaf72566599562259927e8e4d12f4d9b678
|
||||
653b01bd828cfc9ff53f6bad9170dc68ac42e27c
|
||||
d8af098efa267ac46eccaeb6a4f4880fedba86a2
|
||||
c3247313d96c56270ad97a0a46c5794dd0ac24f1
|
||||
33156f08843da9654b64dc96178ff10b01c32463
|
||||
0954bf8ba75246150bf365b02db71bc37d5f22db
|
||||
a35900cf088b2fd24776cc70bc45279c807fc342
|
||||
873e711026f74bf3eb77fa2c1910793315d9ff46
|
||||
afc4b4cbd2553d8bf38ee811f1ff9b56185a6ea5
|
||||
50a33df8d719d6cf3889d38f97e951a78374d509
|
||||
5b3512cb132d939d06252cffe1546fc33dccd137
|
||||
9a072613d3169e88612e22cd333cb00ee4591d89
|
||||
f193d645f223ae6862f9a0a4fa8b40ffe9bcdbde
|
||||
e7a7f7f9c12fb4f6bdf6a7ed232ca75653b4fe88
|
||||
5cacba67f68e338e6674b4e6e684c3d5c8f3328d
|
||||
0a11ddb543d050555ae41a1c778f392e8c7a49ea
|
||||
1914cd178a06057847984b534b5d615f087b7178
|
||||
8a5444ac835ca19972df95bcf5d2aaa6eabf49ff
|
||||
@@ -0,0 +1,40 @@
|
||||
🙅𝖆👾\都都𝖇🙅𝖆𝖈\𝖇—🙇\𝖆💁🙇東都東🙇\💁👾𝖆𝖆𝖆𝖇—東東京🙇𝖆𝖈💁🙇🙅🙅
|
||||
都𝖆🙅\👾𝖈𝖈東🙇\都東𝖇𝖆東都\👾👾東東都👾👾\💁\𝖇𝖈𝖆🙇東都都\都👾💁🙇𝖈
|
||||
👾\🙅東東京東都🙅—𝖇京京🙇💁—👾𝖇𝖇𝖇都👾東𝖆京👾京👾🙇都\𝖆—東東—京👾京東
|
||||
—🙅都—𝖈𝖇—\\𝖆都💁💁🙇𝖈𝖈🙅—都\🙇𝖇💁𝖈𝖇\🙇𝖆💁👾京𝖆都都🙅—𝖈𝖇都𝖇
|
||||
𝖇都\𝖈都👾💁𝖈🙇京👾京—𝖆𝖆🙅京𝖈\𝖇—京🙅💁𝖈—都\京都東東𝖆𝖇𝖇🙅\👾京🙅
|
||||
東🙅\都𝖆—👾💁𝖈都🙅東—𝖆🙇𝖆🙇𝖈🙅京東𝖇𝖇🙅都𝖈東👾東🙇🙇🙇👾𝖆🙇👾—東—東
|
||||
𝖆京都東🙅都𝖈🙇都\東🙅🙅👾𝖇𝖇👾𝖇👾👾👾京\—𝖇—🙅\𝖆𝖆京𝖆💁🙅京東𝖆🙇—💁
|
||||
都東東🙇都👾𝖈𝖈𝖆𝖈👾東都💁京—𝖈都東🙇𝖈—🙇𝖈都\\東京🙅𝖇—𝖈🙇東𝖆𝖈東京👾
|
||||
—𝖇—💁👾都👾𝖇—𝖈東京𝖇\都𝖆\\👾都🙅𝖈—𝖈京𝖈都👾👾💁𝖇都🙅💁東京👾都東東
|
||||
👾—東🙇東🙇東𝖇💁💁東京—\京𝖇東——𝖆京京🙅💁🙇💁東🙅𝖆𝖈東🙅東𝖇💁👾東\\𝖆
|
||||
都🙅💁—🙅𝖈🙇𝖈👾𝖆🙇👾𝖆\東𝖆🙇𝖆𝖆🙇都🙇都京𝖈🙅—都👾👾𝖇💁🙇🙅\\🙅𝖇🙅👾
|
||||
—\京東𝖇東京𝖈𝖆\京東👾🙅𝖆💁東𝖇都𝖈—東都🙇🙇—𝖈💁👾\💁—🙅💁\𝖇京𝖈🙅💁
|
||||
\🙇𝖇💁都🙇京\🙇𝖈🙅都—𝖆🙇𝖇𝖈𝖇𝖇🙅🙅𝖇👾\東—🙅🙇💁京𝖇東東\𝖇💁𝖈都𝖆👾
|
||||
東🙇\👾𝖇👾💁都𝖆\🙇👾𝖈👾👾東𝖆京👾東都💁🙇💁———京都京東京💁👾𝖈京💁🙇🙅𝖈
|
||||
𝖈\𝖆👾東👾𝖇—京東京👾京💁東京🙅都京👾🙅𝖈京—東🙇東🙅都𝖇𝖇京都𝖇—\𝖇都🙅𝖆
|
||||
𝖈👾—都東👾\—🙅𝖈\—👾🙅𝖆👾—🙇👾東都🙅—💁——京𝖇—𝖆🙇🙅👾💁𝖆都🙇🙅\𝖆
|
||||
𝖇—東\𝖇𝖈𝖇𝖆都👾🙇京都🙇🙇\🙅—\🙇👾𝖇東—👾🙅𝖈🙇—東💁𝖈𝖈都都東🙅\🙇\
|
||||
🙅都京京👾—👾🙅𝖈👾𝖈都東💁🙅東🙅👾🙇𝖇𝖇東𝖈𝖇𝖇👾—京𝖈東𝖈🙅京𝖇\🙅𝖇🙇—\
|
||||
京💁—\\💁💁京—🙇👾💁𝖆👾🙇𝖇𝖈🙇京𝖆🙇𝖈🙇𝖇🙅𝖇𝖈𝖈都𝖈🙇𝖆𝖈—𝖈都𝖇京都💁
|
||||
🙇\𝖈—𝖆東京都🙇\\—京𝖇𝖈𝖈🙇👾東🙅🙅—𝖆—京𝖈東\都𝖆🙅𝖆—𝖇🙇都—🙅東👾
|
||||
\𝖈🙅🙇東\👾京—東👾𝖈𝖈💁𝖈💁𝖈𝖆—\\都東𝖆💁東𝖆𝖆都都𝖈🙇𝖇𝖆東都🙅—都𝖆
|
||||
\🙇🙅𝖇🙅🙅𝖇👾—都\𝖇👾🙅京🙅𝖇💁𝖇都🙇\🙇🙅京都𝖈\—𝖆𝖇💁🙅🙅𝖈🙅都🙇\東
|
||||
𝖆𝖈𝖈𝖆\𝖇都𝖆都\𝖈京𝖆𝖈𝖇𝖇𝖇💁👾🙅👾都👾\𝖈𝖇𝖈\\東👾都𝖈𝖇🙇👾京💁京🙅
|
||||
𝖈東都🙅🙇——\👾𝖈𝖈東\—💁𝖇𝖈🙇👾—都🙅𝖈—𝖆💁🙅💁東👾𝖇𝖇𝖈都𝖆東𝖈𝖈京🙅
|
||||
京🙇💁👾🙅👾𝖆𝖆𝖆都\\🙇🙇𝖈都👾都👾東𝖈🙇💁—🙇👾——𝖈𝖇🙅京—👾都💁🙇🙇𝖈\
|
||||
𝖇都👾💁東京💁💁🙇🙇京🙅都👾👾👾𝖇𝖆𝖈—𝖆𝖆\𝖈💁—🙇🙅都𝖆𝖇𝖆—🙇𝖇𝖇東🙅\\
|
||||
\東𝖈🙇𝖈𝖆𝖆𝖇💁👾—東𝖆—\𝖈\\\東\🙇🙇🙅𝖈都—𝖆👾—𝖇—🙇\𝖇都京𝖈東🙇
|
||||
🙇京\——𝖆💁🙅—東💁𝖇𝖆𝖆𝖆𝖈🙇東🙇💁京💁𝖇𝖇—都都𝖇💁🙅\🙅𝖆東👾京京𝖆東\
|
||||
👾東𝖆𝖇東—東都💁都𝖆\東𝖆京👾都🙅\𝖈𝖇—都👾都𝖇\東💁🙇💁—🙅都𝖆𝖆𝖆東\—
|
||||
京🙇京京京東—💁\💁🙇𝖇京💁💁都都👾\京𝖈🙅京京京👾🙅👾👾京——👾京𝖈𝖇🙅𝖆𝖆👾
|
||||
𝖈\東𝖆\🙇𝖇𝖆💁𝖈𝖈\🙇𝖈👾京𝖈𝖈𝖆🙅🙇🙅都🙅京𝖇東👾🙇🙇🙇💁🙇京京🙇—👾都👾
|
||||
𝖆京𝖈都京👾—💁𝖆東𝖆\𝖆💁京👾\都💁都💁🙅東🙇𝖈京京🙇都🙅𝖆𝖈———💁👾🙅🙅𝖇
|
||||
🙇💁𝖆𝖇𝖈𝖇👾都都京—𝖆💁🙇—\京都𝖆𝖇🙇\東東\🙇👾—𝖈𝖈🙅京東𝖆𝖇💁💁𝖇🙅𝖆
|
||||
👾💁𝖆—👾🙅🙅𝖇\𝖈—🙅\🙇𝖈🙅𝖇東🙇👾👾𝖈👾𝖈\京東\\京𝖈🙅🙅🙇𝖇京𝖈𝖈\都
|
||||
東𝖇💁\🙅—🙇東𝖆\💁💁𝖆𝖈💁—東京\\🙅\𝖈👾👾京京\👾\東𝖇𝖇𝖇👾—𝖇𝖆𝖈東
|
||||
🙅東𝖈\👾𝖈💁𝖈𝖆——都\都—\🙇𝖇𝖈👾𝖇京京💁都𝖈🙇👾𝖈京𝖈🙅—都💁\🙇都👾京
|
||||
🙇🙇𝖇𝖆💁🙇🙅👾都👾\👾𝖈💁💁💁—👾——𝖆\💁💁都京東𝖇京𝖆—🙇京\👾𝖇𝖈𝖆💁京
|
||||
—🙅都東京—東🙅—𝖈\京🙇𝖇🙇𝖈💁𝖆𝖇👾𝖇🙇𝖇𝖇👾🙇𝖈🙇💁都👾💁東🙇東𝖆都𝖆京𝖇
|
||||
𝖆東🙇東—𝖈𝖆—京都💁𝖈💁𝖆🙇東🙅京都都👾👾🙇\都🙅\𝖆\🙇—𝖆🙇—🙇京京𝖈京都
|
||||
東𝖆東🙇🙇𝖇🙇💁🙅👾𝖇💁東💁🙇🙅💁𝖈💁𝖆𝖈京💁🙇𝖆東都🙇都🙅𝖆—🙇𝖇🙇東京💁\🙅
|
||||
Reference in New Issue
Block a user