Compare commits
16
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
423ee18e6a | ||
|
|
3bb26d0c9b | ||
|
|
43c83d0de6 | ||
|
|
6bb407cb0f | ||
|
|
d7b29ba809 | ||
|
|
ca81d8ad41 | ||
|
|
a7e59d7b73 | ||
|
|
8f6b28cef5 | ||
|
|
c1815f272b | ||
|
|
76871a8041 | ||
|
|
d2033c8035 | ||
|
|
48daf1c5c8 | ||
|
|
a3365e4beb | ||
|
|
45d813cdad | ||
|
|
911416aa2f | ||
|
|
2d836af9ed |
No files matched your search
+5
-4
@@ -5,7 +5,8 @@ GITHUB_ID=""
|
||||
NEXT_PUBLIC_COMPILE_API_ENDPOINT="http://localhost:9000/api/build"
|
||||
NEXT_PUBLIC_COMPILE_API_BASE_URL="http://localhost:9000"
|
||||
NEXT_PUBLIC_LANGUAGE_SERVER_API_ENDPOINT="ws://localhost:9000/language-server/c"
|
||||
NEXT_PUBLIC_TESTNET_URL="hooks-testnet-v2.xrpl-labs.com"
|
||||
NEXT_PUBLIC_DEBUG_STREAM_URL="hooks-testnet-v2-debugstream.xrpl-labs.com"
|
||||
NEXT_PUBLIC_EXPLORER_URL="hooks-testnet-v2-explorer.xrpl-labs.com"
|
||||
NEXT_PUBLIC_SITE_URL=http://localhost:3000
|
||||
NEXT_PUBLIC_TESTNET_URL="hooks-testnet-v3.xrpl-labs.com"
|
||||
NEXT_PUBLIC_DEBUG_STREAM_URL="hooks-testnet-v3-debugstream.xrpl-labs.com"
|
||||
NEXT_PUBLIC_EXPLORER_URL="hooks-testnet-v3-explorer.xrpl-labs.com"
|
||||
NEXT_PUBLIC_NETWORK_ID="21338"
|
||||
NEXT_PUBLIC_SITE_URL="http://localhost:3000"
|
||||
@@ -33,3 +33,7 @@ yarn-error.log*
|
||||
# vercel
|
||||
.vercel
|
||||
.vscode
|
||||
|
||||
# yarn
|
||||
.yarnrc.yml
|
||||
.yarn/
|
||||
@@ -33,6 +33,7 @@ import { addFunds } from '../state/actions/addFaucetAccount'
|
||||
import { deleteHook } from '../state/actions/deployHook'
|
||||
import { capitalize } from '../utils/helpers'
|
||||
import { deleteAccount } from '../state/actions/deleteAccount'
|
||||
import { xrplSend } from '../state/actions/xrpl-client'
|
||||
|
||||
export const AccountDialog = ({
|
||||
activeAccountAddress,
|
||||
@@ -301,7 +302,7 @@ const Accounts: FC<AccountProps> = props => {
|
||||
const fetchAccInfo = async () => {
|
||||
if (snap.clientStatus === 'online') {
|
||||
const requests = snap.accounts.map(acc =>
|
||||
snap.client?.send({
|
||||
xrplSend({
|
||||
id: `hooks-builder-req-info-${acc.address}`,
|
||||
command: 'account_info',
|
||||
account: acc.address
|
||||
@@ -329,7 +330,7 @@ const Accounts: FC<AccountProps> = props => {
|
||||
}
|
||||
})
|
||||
const objectRequests = snap.accounts.map(acc => {
|
||||
return snap.client?.send({
|
||||
return xrplSend({
|
||||
id: `hooks-builder-req-objects-${acc.address}`,
|
||||
command: 'account_objects',
|
||||
account: acc.address
|
||||
|
||||
@@ -15,7 +15,7 @@ const contentShow = keyframes({
|
||||
'100%': { opacity: 1 }
|
||||
})
|
||||
const StyledOverlay = styled(DialogPrimitive.Overlay, {
|
||||
zIndex: 10000,
|
||||
zIndex: 3000,
|
||||
backgroundColor: blackA.blackA9,
|
||||
position: 'fixed',
|
||||
inset: 0,
|
||||
|
||||
@@ -21,7 +21,7 @@ import { saveFile } from '../../state/actions/saveFile'
|
||||
import { getErrors, getTags } from '../../utils/comment-parser'
|
||||
import toast from 'react-hot-toast'
|
||||
|
||||
const generateHtmlTemplate = (code: string, data?: Record<string, any>) => {
|
||||
const generateHtmlTemplate = async (code: string, data?: Record<string, any>) => {
|
||||
let processString: string | undefined
|
||||
const process = { env: { NODE_ENV: 'production' } } as any
|
||||
if (data) {
|
||||
@@ -29,8 +29,10 @@ const generateHtmlTemplate = (code: string, data?: Record<string, any>) => {
|
||||
process.env[key] = data[key]
|
||||
})
|
||||
}
|
||||
|
||||
processString = JSON.stringify(process)
|
||||
|
||||
const libs = (await import("xrpl-accountlib/dist/browser.hook-bundle.js")).default;
|
||||
return `
|
||||
<html>
|
||||
<head>
|
||||
@@ -72,7 +74,9 @@ const generateHtmlTemplate = (code: string, data?: Record<string, any>) => {
|
||||
|
||||
window.addEventListener('error', windowErrorHandler);
|
||||
</script>
|
||||
|
||||
<script>
|
||||
${libs}
|
||||
</script>
|
||||
<script type="module">
|
||||
${code}
|
||||
</script>
|
||||
@@ -100,6 +104,7 @@ const RunScript: React.FC<{ file: IFile }> = ({ file: { content, name } }) => {
|
||||
const [fields, setFields] = useState<Fields>({})
|
||||
const [iFrameCode, setIframeCode] = useState('')
|
||||
const [isDialogOpen, setIsDialogOpen] = useState(false)
|
||||
const [isLoading, setIsLoading] = useState(false)
|
||||
|
||||
const getFields = useCallback(() => {
|
||||
const inputTags = ['input', 'param', 'arg', 'argument']
|
||||
@@ -127,16 +132,31 @@ const RunScript: React.FC<{ file: IFile }> = ({ file: { content, name } }) => {
|
||||
return fields
|
||||
}, [content])
|
||||
|
||||
const runScript = useCallback(() => {
|
||||
const runScript = useCallback(async () => {
|
||||
setIsLoading(true);
|
||||
try {
|
||||
// Show loading toast only after 1 second, otherwise skip it.
|
||||
let loaded = false
|
||||
let toastId: string | undefined;
|
||||
setTimeout(() => {
|
||||
if (!loaded) {
|
||||
toastId = toast.loading('Loading packages, may take a few seconds...', {
|
||||
position: 'bottom-center',
|
||||
})
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
let data: any = {}
|
||||
Object.keys(fields).forEach(key => {
|
||||
data[key] = fields[key].value
|
||||
})
|
||||
const template = generateHtmlTemplate(content, data)
|
||||
|
||||
const template = await generateHtmlTemplate(content, data)
|
||||
setIframeCode(template)
|
||||
|
||||
loaded = true
|
||||
if (toastId) {
|
||||
toast.dismiss(toastId)
|
||||
}
|
||||
state.scriptLogs = [{ type: 'success', message: 'Started running...' }]
|
||||
} catch (err) {
|
||||
state.scriptLogs = [
|
||||
@@ -145,6 +165,7 @@ const RunScript: React.FC<{ file: IFile }> = ({ file: { content, name } }) => {
|
||||
{ type: 'error', message: err?.message || 'Could not parse template' }
|
||||
]
|
||||
}
|
||||
setIsLoading(false);
|
||||
}, [content, fields, snap.scriptLogs])
|
||||
|
||||
useEffect(() => {
|
||||
@@ -174,11 +195,11 @@ const RunScript: React.FC<{ file: IFile }> = ({ file: { content, name } }) => {
|
||||
|
||||
const isDisabled = Object.values(fields).some(field => field.required && !field.value)
|
||||
|
||||
const handleRun = useCallback(() => {
|
||||
const handleRun = useCallback(async () => {
|
||||
if (isDisabled) return toast.error('Please fill in all the required fields.')
|
||||
|
||||
state.scriptLogs = []
|
||||
runScript()
|
||||
await runScript();
|
||||
setIsDialogOpen(false)
|
||||
}, [isDisabled, runScript])
|
||||
|
||||
@@ -279,7 +300,7 @@ const RunScript: React.FC<{ file: IFile }> = ({ file: { content, name } }) => {
|
||||
<DialogClose asChild>
|
||||
<Button outline>Cancel</Button>
|
||||
</DialogClose>
|
||||
<Button variant="primary" isDisabled={isDisabled} onClick={handleRun}>
|
||||
<Button variant="primary" isDisabled={isDisabled || isLoading} isLoading={isLoading} onClick={handleRun}>
|
||||
Run script
|
||||
</Button>
|
||||
</Flex>
|
||||
|
||||
@@ -245,5 +245,14 @@
|
||||
}
|
||||
},
|
||||
"Sequence": 12
|
||||
},
|
||||
{
|
||||
"TransactionType": "Invoke",
|
||||
"Fee": "12"
|
||||
},
|
||||
{
|
||||
"TransactionType": "UriToken",
|
||||
"Fee": "12",
|
||||
"URI": "697066733A2F2F516D614374444B5A4656767666756676626479346573745A626851483744586831364354707631686F776D424779"
|
||||
}
|
||||
]
|
||||
+1
-1
@@ -12,7 +12,7 @@ module.exports = {
|
||||
config.resolve.fallback.fs = false
|
||||
}
|
||||
config.module.rules.push({
|
||||
test: /\.md$/,
|
||||
test: [/\.md$/, /hook-bundle\.js$/],
|
||||
use: 'raw-loader'
|
||||
})
|
||||
return config
|
||||
|
||||
+6
-4
@@ -8,7 +8,8 @@
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
"format": "prettier --write .",
|
||||
"postinstall": "patch-package"
|
||||
"postinstall": "patch-package && yarn run postinstall-postinstall",
|
||||
"postinstall-postinstall": "./node_modules/.bin/browserify -r ripple-binary-codec -r ripple-keypairs -r ripple-address-codec -r ripple-secret-codec -r ./node_modules/xrpl-accountlib/dist/index.js:xrpl-accountlib -o node_modules/xrpl-accountlib/dist/browser.hook-bundle.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@codingame/monaco-jsonrpc": "^0.3.1",
|
||||
@@ -64,9 +65,9 @@
|
||||
"valtio": "^1.2.5",
|
||||
"vscode-languageserver": "^7.0.0",
|
||||
"vscode-uri": "^3.0.2",
|
||||
"wabt": "1.0.16",
|
||||
"xrpl-accountlib": "^1.5.2",
|
||||
"xrpl-client": "^1.9.4"
|
||||
"wabt": "^1.0.30",
|
||||
"xrpl-accountlib": "^1.6.1",
|
||||
"xrpl-client": "^2.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/dinero.js": "^1.9.0",
|
||||
@@ -75,6 +76,7 @@
|
||||
"@types/lodash.xor": "^4.5.6",
|
||||
"@types/pako": "^1.0.2",
|
||||
"@types/react": "17.0.31",
|
||||
"browserify": "^17.0.0",
|
||||
"eslint": "7.32.0",
|
||||
"eslint-config-next": "11.1.2",
|
||||
"raw-loader": "^4.0.2",
|
||||
|
||||
@@ -150,6 +150,7 @@ const Home: NextPage = () => {
|
||||
|
||||
const activeFile = snap.files[snap.active] as IFile | undefined
|
||||
const activeFileExt = getFileExtention(activeFile?.name)
|
||||
const canCompile = activeFileExt === 'c' || activeFileExt === 'wat'
|
||||
return (
|
||||
<Split
|
||||
direction="vertical"
|
||||
@@ -162,7 +163,7 @@ const Home: NextPage = () => {
|
||||
>
|
||||
<main style={{ display: 'flex', flex: 1, position: 'relative' }}>
|
||||
<HooksEditor />
|
||||
{activeFileExt === 'c' && (
|
||||
{canCompile && (
|
||||
<Hotkeys
|
||||
keyName="command+b,ctrl+b"
|
||||
onKeyDown={() => !snap.compiling && snap.files.length && compileCode(snap.active)}
|
||||
|
||||
+2942
-1465
File diff suppressed because it is too large.
Load diff
Vendored
+5
@@ -2,3 +2,8 @@ declare module '*.md' {
|
||||
const content: string
|
||||
export default content
|
||||
}
|
||||
|
||||
declare module '*.hook-bundle.js' {
|
||||
const content: string
|
||||
export default content
|
||||
}
|
||||
@@ -15,6 +15,11 @@ import { ref } from 'valtio'
|
||||
export const compileCode = async (activeId: number) => {
|
||||
// Save the file to global state
|
||||
saveFile(false, activeId)
|
||||
const file = state.files[activeId]
|
||||
if (file.name.endsWith('.wat')) {
|
||||
return compileWat(activeId)
|
||||
}
|
||||
|
||||
if (!process.env.NEXT_PUBLIC_COMPILE_API_ENDPOINT) {
|
||||
throw Error('Missing env!')
|
||||
}
|
||||
@@ -26,7 +31,6 @@ export const compileCode = async (activeId: number) => {
|
||||
// Set loading state to true
|
||||
state.compiling = true
|
||||
state.logs = []
|
||||
const file = state.files[activeId]
|
||||
try {
|
||||
file.containsErrors = false
|
||||
let res: Response
|
||||
@@ -72,7 +76,7 @@ export const compileCode = async (activeId: number) => {
|
||||
|
||||
// Import wabt from and create human readable version of wasm file and
|
||||
// put it into state
|
||||
const ww = (await import('wabt')).default()
|
||||
const ww = await (await import('wabt')).default()
|
||||
const myModule = ww.readWasm(new Uint8Array(bufferData), {
|
||||
readDebugNames: true
|
||||
})
|
||||
@@ -122,3 +126,46 @@ export const compileCode = async (activeId: number) => {
|
||||
file.containsErrors = true
|
||||
}
|
||||
}
|
||||
|
||||
export const compileWat = async (activeId: number) => {
|
||||
if (state.compiling) return;
|
||||
const file = state.files[activeId]
|
||||
state.compiling = true
|
||||
state.logs = []
|
||||
try {
|
||||
const wabt = await (await import('wabt')).default()
|
||||
const module = wabt.parseWat(file.name, file.content);
|
||||
module.resolveNames();
|
||||
module.validate();
|
||||
const { buffer } = module.toBinary({
|
||||
log: false,
|
||||
write_debug_names: true,
|
||||
});
|
||||
|
||||
file.compiledContent = ref(buffer)
|
||||
file.lastCompiled = new Date()
|
||||
file.compiledValueSnapshot = file.content
|
||||
file.compiledWatContent = file.content
|
||||
|
||||
toast.success('Compiled successfully!', { position: 'bottom-center' })
|
||||
state.logs.push({
|
||||
type: 'success',
|
||||
message: `File ${state.files?.[activeId]?.name} compiled successfully. Ready to deploy.`,
|
||||
link: Router.asPath.replace('develop', 'deploy'),
|
||||
linkText: 'Go to deploy'
|
||||
})
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
let message = "Error compiling WAT file!"
|
||||
if (err instanceof Error) {
|
||||
message = err.message
|
||||
}
|
||||
state.logs.push({
|
||||
type: 'error',
|
||||
message
|
||||
})
|
||||
toast.error(`Error occurred while compiling!`, { position: 'bottom-center' })
|
||||
file.containsErrors = true
|
||||
}
|
||||
state.compiling = false
|
||||
}
|
||||
+153
-167
@@ -8,6 +8,7 @@ import { ref } from 'valtio'
|
||||
import estimateFee from '../../utils/estimateFee'
|
||||
import { SetHookData } from '../../utils/setHook'
|
||||
import ResultLink from '../../components/ResultLink'
|
||||
import { xrplSend } from './xrpl-client'
|
||||
|
||||
export const sha256 = async (string: string) => {
|
||||
const utf8 = new TextEncoder().encode(string)
|
||||
@@ -64,9 +65,6 @@ export const prepareDeployHookTx = async (
|
||||
if (!activeFile?.compiledContent) {
|
||||
return
|
||||
}
|
||||
if (!state.client) {
|
||||
return
|
||||
}
|
||||
const HookNamespace = (await sha256(data.HookNamespace)).toUpperCase()
|
||||
const hookOnValues: (keyof TTS)[] = data.Invoke.map(tt => tt.value)
|
||||
const { HookParameters } = data
|
||||
@@ -87,196 +85,184 @@ export const prepareDeployHookTx = async (
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
if (typeof window !== 'undefined') {
|
||||
const tx = {
|
||||
Account: account.address,
|
||||
TransactionType: 'SetHook',
|
||||
Sequence: account.sequence,
|
||||
Fee: data.Fee,
|
||||
Hooks: [
|
||||
{
|
||||
Hook: {
|
||||
CreateCode: arrayBufferToHex(activeFile?.compiledContent).toUpperCase(),
|
||||
HookOn: calculateHookOn(hookOnValues),
|
||||
HookNamespace,
|
||||
HookApiVersion: 0,
|
||||
Flags: 1,
|
||||
// ...(filteredHookGrants.length > 0 && { HookGrants: filteredHookGrants }),
|
||||
...(filteredHookParameters.length > 0 && {
|
||||
HookParameters: filteredHookParameters
|
||||
})
|
||||
}
|
||||
if (typeof window === 'undefined') return
|
||||
const tx = {
|
||||
Account: account.address,
|
||||
TransactionType: 'SetHook',
|
||||
Sequence: account.sequence,
|
||||
Fee: data.Fee,
|
||||
NetworkID: process.env.NEXT_PUBLIC_NETWORK_ID,
|
||||
Hooks: [
|
||||
{
|
||||
Hook: {
|
||||
CreateCode: arrayBufferToHex(activeFile?.compiledContent).toUpperCase(),
|
||||
HookOn: calculateHookOn(hookOnValues),
|
||||
HookNamespace,
|
||||
HookApiVersion: 0,
|
||||
Flags: 1,
|
||||
// ...(filteredHookGrants.length > 0 && { HookGrants: filteredHookGrants }),
|
||||
...(filteredHookParameters.length > 0 && {
|
||||
HookParameters: filteredHookParameters
|
||||
})
|
||||
}
|
||||
]
|
||||
}
|
||||
return tx
|
||||
}
|
||||
]
|
||||
}
|
||||
return tx
|
||||
}
|
||||
|
||||
/* deployHook function turns the wasm binary into
|
||||
* hex string, signs the transaction and deploys it to
|
||||
* Hooks testnet.
|
||||
/*
|
||||
* Turns the wasm binary into hex string, signs the transaction and deploys it to Hooks testnet.
|
||||
*/
|
||||
export const deployHook = async (account: IAccount & { name?: string }, data: SetHookData) => {
|
||||
if (typeof window !== 'undefined') {
|
||||
const activeFile = state.files[state.active]?.compiledContent
|
||||
? state.files[state.active]
|
||||
: state.files.filter(file => file.compiledContent)[0]
|
||||
state.deployValues[activeFile.name] = data
|
||||
const tx = await prepareDeployHookTx(account, data)
|
||||
if (!tx) {
|
||||
return
|
||||
}
|
||||
if (!state.client) {
|
||||
return
|
||||
}
|
||||
const keypair = derive.familySeed(account.secret)
|
||||
const activeFile = state.files[state.active]?.compiledContent
|
||||
? state.files[state.active]
|
||||
: state.files.filter(file => file.compiledContent)[0]
|
||||
state.deployValues[activeFile.name] = data
|
||||
|
||||
const { signedTransaction } = sign(tx, keypair)
|
||||
const currentAccount = state.accounts.find(acc => acc.address === account.address)
|
||||
if (currentAccount) {
|
||||
currentAccount.isLoading = true
|
||||
}
|
||||
let submitRes
|
||||
const tx = await prepareDeployHookTx(account, data)
|
||||
if (!tx) {
|
||||
return
|
||||
}
|
||||
const keypair = derive.familySeed(account.secret)
|
||||
const { signedTransaction } = sign(tx, keypair)
|
||||
|
||||
try {
|
||||
submitRes = await state.client?.send({
|
||||
command: 'submit',
|
||||
tx_blob: signedTransaction
|
||||
const currentAccount = state.accounts.find(acc => acc.address === account.address)
|
||||
if (currentAccount) {
|
||||
currentAccount.isLoading = true
|
||||
}
|
||||
|
||||
let submitRes
|
||||
try {
|
||||
submitRes = await xrplSend({
|
||||
command: 'submit',
|
||||
tx_blob: signedTransaction
|
||||
})
|
||||
|
||||
const txHash = submitRes.tx_json?.hash
|
||||
const resultMsg = ref(
|
||||
<>
|
||||
[<ResultLink result={submitRes.engine_result} />] {submitRes.engine_result_message}{' '}
|
||||
{txHash && (
|
||||
<>
|
||||
Transaction hash:{' '}
|
||||
<Link
|
||||
as="a"
|
||||
href={`https://${process.env.NEXT_PUBLIC_EXPLORER_URL}/${txHash}`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{txHash}
|
||||
</Link>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
if (submitRes.engine_result === 'tesSUCCESS') {
|
||||
state.deployLogs.push({
|
||||
type: 'success',
|
||||
message: 'Hook deployed successfully ✅'
|
||||
})
|
||||
|
||||
const txHash = submitRes.tx_json?.hash
|
||||
const resultMsg = ref(
|
||||
<>
|
||||
[<ResultLink result={submitRes.engine_result} />] {submitRes.engine_result_message}{' '}
|
||||
{txHash && (
|
||||
<>
|
||||
Transaction hash:{' '}
|
||||
<Link
|
||||
as="a"
|
||||
href={`https://${process.env.NEXT_PUBLIC_EXPLORER_URL}/${txHash}`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{txHash}
|
||||
</Link>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
if (submitRes.engine_result === 'tesSUCCESS') {
|
||||
state.deployLogs.push({
|
||||
type: 'success',
|
||||
message: 'Hook deployed successfully ✅'
|
||||
})
|
||||
state.deployLogs.push({
|
||||
type: 'success',
|
||||
message: resultMsg
|
||||
})
|
||||
} else if (submitRes.engine_result) {
|
||||
state.deployLogs.push({
|
||||
type: 'error',
|
||||
message: resultMsg
|
||||
})
|
||||
} else {
|
||||
state.deployLogs.push({
|
||||
type: 'error',
|
||||
message: `[${submitRes.error}] ${submitRes.error_exception}`
|
||||
})
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
state.deployLogs.push({
|
||||
type: 'success',
|
||||
message: resultMsg
|
||||
})
|
||||
} else if (submitRes.engine_result) {
|
||||
state.deployLogs.push({
|
||||
type: 'error',
|
||||
message: 'Error occurred while deploying'
|
||||
message: resultMsg
|
||||
})
|
||||
} else {
|
||||
state.deployLogs.push({
|
||||
type: 'error',
|
||||
message: `[${submitRes.error}] ${submitRes.error_exception}`
|
||||
})
|
||||
}
|
||||
if (currentAccount) {
|
||||
currentAccount.isLoading = false
|
||||
}
|
||||
return submitRes
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
state.deployLogs.push({
|
||||
type: 'error',
|
||||
message: 'Error occurred while deploying'
|
||||
})
|
||||
}
|
||||
if (currentAccount) {
|
||||
currentAccount.isLoading = false
|
||||
}
|
||||
return submitRes
|
||||
}
|
||||
|
||||
export const deleteHook = async (account: IAccount & { name?: string }) => {
|
||||
if (!state.client) {
|
||||
return
|
||||
}
|
||||
const currentAccount = state.accounts.find(acc => acc.address === account.address)
|
||||
if (currentAccount?.isLoading || !currentAccount?.hooks.length) {
|
||||
return
|
||||
}
|
||||
if (typeof window !== 'undefined') {
|
||||
const tx = {
|
||||
Account: account.address,
|
||||
TransactionType: 'SetHook',
|
||||
Sequence: account.sequence,
|
||||
Fee: '100000',
|
||||
Hooks: [
|
||||
{
|
||||
Hook: {
|
||||
CreateCode: '',
|
||||
Flags: 1
|
||||
}
|
||||
const tx = {
|
||||
Account: account.address,
|
||||
TransactionType: 'SetHook',
|
||||
Sequence: account.sequence,
|
||||
Fee: '100000',
|
||||
NetworkID: process.env.NEXT_PUBLIC_NETWORK_ID,
|
||||
Hooks: [
|
||||
{
|
||||
Hook: {
|
||||
CreateCode: '',
|
||||
Flags: 1
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
const keypair = derive.familySeed(account.secret)
|
||||
try {
|
||||
// Update tx Fee value with network estimation
|
||||
const res = await estimateFee(tx, account)
|
||||
tx['Fee'] = res?.base_fee ? res?.base_fee : '1000'
|
||||
} catch (err) {
|
||||
// use default value what you defined earlier
|
||||
console.log(err)
|
||||
}
|
||||
const { signedTransaction } = sign(tx, keypair)
|
||||
|
||||
if (currentAccount) {
|
||||
currentAccount.isLoading = true
|
||||
}
|
||||
let submitRes
|
||||
const toastId = toast.loading('Deleting hook...')
|
||||
try {
|
||||
submitRes = await state.client.send({
|
||||
command: 'submit',
|
||||
tx_blob: signedTransaction
|
||||
})
|
||||
|
||||
if (submitRes.engine_result === 'tesSUCCESS') {
|
||||
toast.success('Hook deleted successfully ✅', { id: toastId })
|
||||
state.deployLogs.push({
|
||||
type: 'success',
|
||||
message: 'Hook deleted successfully ✅'
|
||||
})
|
||||
state.deployLogs.push({
|
||||
type: 'success',
|
||||
message: `[${submitRes.engine_result}] ${submitRes.engine_result_message} Validated ledger index: ${submitRes.validated_ledger_index}`
|
||||
})
|
||||
currentAccount.hooks = []
|
||||
} else {
|
||||
toast.error(`${submitRes.engine_result_message || submitRes.error_exception}`, {
|
||||
id: toastId
|
||||
})
|
||||
state.deployLogs.push({
|
||||
type: 'error',
|
||||
message: `[${submitRes.engine_result || submitRes.error}] ${
|
||||
submitRes.engine_result_message || submitRes.error_exception
|
||||
}`
|
||||
})
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
toast.error('Error occurred while deleting hook', { id: toastId })
|
||||
]
|
||||
}
|
||||
const keypair = derive.familySeed(account.secret)
|
||||
try {
|
||||
// Update tx Fee value with network estimation
|
||||
const res = await estimateFee(tx, account)
|
||||
tx['Fee'] = res?.base_fee || '1000'
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
}
|
||||
const { signedTransaction } = sign(tx, keypair)
|
||||
if (currentAccount) {
|
||||
currentAccount.isLoading = true
|
||||
}
|
||||
let submitRes
|
||||
const toastId = toast.loading('Deleting hook...')
|
||||
try {
|
||||
submitRes = await xrplSend({
|
||||
command: 'submit',
|
||||
tx_blob: signedTransaction
|
||||
})
|
||||
|
||||
if (submitRes.engine_result === 'tesSUCCESS') {
|
||||
toast.success('Hook deleted successfully ✅', { id: toastId })
|
||||
state.deployLogs.push({
|
||||
type: 'success',
|
||||
message: 'Hook deleted successfully ✅'
|
||||
})
|
||||
state.deployLogs.push({
|
||||
type: 'success',
|
||||
message: `[${submitRes.engine_result}] ${submitRes.engine_result_message} Validated ledger index: ${submitRes.validated_ledger_index}`
|
||||
})
|
||||
currentAccount.hooks = []
|
||||
} else {
|
||||
toast.error(`${submitRes.engine_result_message || submitRes.error_exception}`, {
|
||||
id: toastId
|
||||
})
|
||||
state.deployLogs.push({
|
||||
type: 'error',
|
||||
message: 'Error occurred while deleting hook'
|
||||
message: `[${submitRes.engine_result || submitRes.error}] ${
|
||||
submitRes.engine_result_message || submitRes.error_exception
|
||||
}`
|
||||
})
|
||||
}
|
||||
if (currentAccount) {
|
||||
currentAccount.isLoading = false
|
||||
}
|
||||
return submitRes
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
toast.error('Error occurred while deleting hook', { id: toastId })
|
||||
state.deployLogs.push({
|
||||
type: 'error',
|
||||
message: 'Error occurred while deleting hook'
|
||||
})
|
||||
}
|
||||
if (currentAccount) {
|
||||
currentAccount.isLoading = false
|
||||
}
|
||||
return submitRes
|
||||
}
|
||||
@@ -61,6 +61,7 @@ export const fetchFiles = async (gistId: string) => {
|
||||
// default priority is undefined == 0
|
||||
const extPriority: Record<string, number> = {
|
||||
c: 3,
|
||||
wat: 3,
|
||||
md: 2,
|
||||
h: -1
|
||||
}
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
import { derive, sign } from 'xrpl-accountlib'
|
||||
|
||||
import state from '..'
|
||||
import type { IAccount } from '..'
|
||||
|
||||
interface TransactionOptions {
|
||||
TransactionType: string
|
||||
Account?: string
|
||||
Fee?: string
|
||||
Destination?: string
|
||||
[index: string]: any
|
||||
}
|
||||
interface OtherOptions {
|
||||
logPrefix?: string
|
||||
}
|
||||
|
||||
export const sendTransaction = async (
|
||||
account: IAccount,
|
||||
txOptions: TransactionOptions,
|
||||
options?: OtherOptions
|
||||
) => {
|
||||
if (!state.client) throw Error('XRPL client not initalized')
|
||||
|
||||
const { Fee = '1000', ...opts } = txOptions
|
||||
const tx: TransactionOptions = {
|
||||
Account: account.address,
|
||||
Sequence: account.sequence,
|
||||
Fee, // TODO auto-fillable default
|
||||
...opts
|
||||
}
|
||||
const { logPrefix = '' } = options || {}
|
||||
try {
|
||||
const signedAccount = derive.familySeed(account.secret)
|
||||
const { signedTransaction } = sign(tx, signedAccount)
|
||||
const response = await state.client.send({
|
||||
command: 'submit',
|
||||
tx_blob: signedTransaction
|
||||
})
|
||||
if (response.engine_result === 'tesSUCCESS') {
|
||||
state.transactionLogs.push({
|
||||
type: 'success',
|
||||
message: `${logPrefix}[${response.engine_result}] ${response.engine_result_message}`
|
||||
})
|
||||
} else {
|
||||
state.transactionLogs.push({
|
||||
type: 'error',
|
||||
message: `${logPrefix}[${response.error || response.engine_result}] ${
|
||||
response.error_exception || response.engine_result_message
|
||||
}`
|
||||
})
|
||||
}
|
||||
const currAcc = state.accounts.find(acc => acc.address === account.address)
|
||||
if (currAcc && response.account_sequence_next) {
|
||||
currAcc.sequence = response.account_sequence_next
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
state.transactionLogs.push({
|
||||
type: 'error',
|
||||
message:
|
||||
err instanceof Error
|
||||
? `${logPrefix}Error: ${err.message}`
|
||||
: `${logPrefix}Something went wrong, try again later`
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import state from '..'
|
||||
import type { IAccount } from '..'
|
||||
import ResultLink from '../../components/ResultLink'
|
||||
import { ref } from 'valtio'
|
||||
import { xrplSend } from './xrpl-client'
|
||||
|
||||
interface TransactionOptions {
|
||||
TransactionType: string
|
||||
@@ -21,20 +22,19 @@ export const sendTransaction = async (
|
||||
txOptions: TransactionOptions,
|
||||
options?: OtherOptions
|
||||
) => {
|
||||
if (!state.client) throw Error('XRPL client not initalized')
|
||||
|
||||
const { Fee = '1000', ...opts } = txOptions
|
||||
const tx: TransactionOptions = {
|
||||
Account: account.address,
|
||||
Sequence: account.sequence,
|
||||
Fee, // TODO auto-fillable default
|
||||
Fee,
|
||||
NetworkID: process.env.NEXT_PUBLIC_NETWORK_ID,
|
||||
...opts
|
||||
}
|
||||
const { logPrefix = '' } = options || {}
|
||||
try {
|
||||
const signedAccount = derive.familySeed(account.secret)
|
||||
const { signedTransaction } = sign(tx, signedAccount)
|
||||
const response = await state.client.send({
|
||||
const response = await xrplSend({
|
||||
command: 'submit',
|
||||
tx_blob: signedTransaction
|
||||
})
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
import { XrplClient } from 'xrpl-client';
|
||||
import state from '..';
|
||||
|
||||
export const xrplSend = async(...params: Parameters<XrplClient['send']>) => {
|
||||
const client = await state.client.ready()
|
||||
return client.send(...params);
|
||||
}
|
||||
+3
-3
@@ -78,7 +78,7 @@ export interface IState {
|
||||
splits: {
|
||||
[id: string]: SplitSize
|
||||
}
|
||||
client: XrplClient | null
|
||||
client: XrplClient
|
||||
clientStatus: 'offline' | 'online'
|
||||
mainModalOpen: boolean
|
||||
mainModalShowed: boolean
|
||||
@@ -113,7 +113,7 @@ let initialState: IState = {
|
||||
tabSize: 2
|
||||
},
|
||||
splits: {},
|
||||
client: null,
|
||||
client: undefined!, // set below only.
|
||||
clientStatus: 'offline' as 'offline',
|
||||
mainModalOpen: false,
|
||||
mainModalShowed: false,
|
||||
@@ -153,9 +153,9 @@ const state = proxy<IState>({
|
||||
})
|
||||
// Initialize socket connection
|
||||
const client = new XrplClient(`wss://${process.env.NEXT_PUBLIC_TESTNET_URL}`)
|
||||
state.client = ref(client);
|
||||
|
||||
client.on('online', () => {
|
||||
state.client = ref(client)
|
||||
state.clientStatus = 'online'
|
||||
})
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import toast from 'react-hot-toast'
|
||||
import { derive, sign } from 'xrpl-accountlib'
|
||||
import state, { IAccount } from '../state'
|
||||
import { IAccount } from '../state'
|
||||
import { xrplSend } from '../state/actions/xrpl-client'
|
||||
|
||||
const estimateFee = async (
|
||||
tx: Record<string, unknown>,
|
||||
@@ -22,7 +23,7 @@ const estimateFee = async (
|
||||
const keypair = derive.familySeed(account.secret)
|
||||
const { signedTransaction } = sign(copyTx, keypair)
|
||||
|
||||
const res = await state.client?.send({ command: 'fee', tx_blob: signedTransaction })
|
||||
const res = await xrplSend({ command: 'fee', tx_blob: signedTransaction })
|
||||
if (res && res.drops) {
|
||||
return res.drops
|
||||
}
|
||||
|
||||
@@ -23,23 +23,22 @@ export const tts = {
|
||||
ttNFTOKEN_BURN: 26,
|
||||
ttNFTOKEN_CREATE_OFFER: 27,
|
||||
ttNFTOKEN_CANCEL_OFFER: 28,
|
||||
ttNFTOKEN_ACCEPT_OFFER: 29
|
||||
ttNFTOKEN_ACCEPT_OFFER: 29,
|
||||
ttINVOKE: 99,
|
||||
}
|
||||
|
||||
export type TTS = typeof tts
|
||||
|
||||
const calculateHookOn = (arr: (keyof TTS)[]) => {
|
||||
let start = '0x000000003e3ff5bf'
|
||||
let s = '0x3e3ff5bf'
|
||||
arr.forEach(n => {
|
||||
let v = BigInt(start)
|
||||
v ^= BigInt(1) << BigInt(tts[n as keyof TTS])
|
||||
let s = v.toString(16)
|
||||
let l = s.length
|
||||
if (l < 16) s = '0'.repeat(16 - l) + s
|
||||
s = '0x' + s
|
||||
start = s
|
||||
let v = BigInt(s)
|
||||
v ^= BigInt(1) << BigInt(tts[n])
|
||||
s = "0x" + v.toString(16)
|
||||
})
|
||||
return start.substring(2)
|
||||
s = s.replace('0x', '')
|
||||
s = s.padStart(64, '0')
|
||||
return s
|
||||
}
|
||||
|
||||
export default calculateHookOn
|
||||
@@ -1,59 +0,0 @@
|
||||
|
||||
var WabtModule = (function() {
|
||||
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
|
||||
if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;
|
||||
return (
|
||||
function(WabtModule) {
|
||||
WabtModule = WabtModule || {};
|
||||
|
||||
var Module=typeof WabtModule!=="undefined"?WabtModule:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}readBinary=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];var WebAssembly={Memory:function(opts){this.buffer=new ArrayBuffer(opts["initial"]*65536)},Module:function(binary){},Instance:function(module,info){this.exports=(
|
||||
// EMSCRIPTEN_START_ASM
|
||||
function instantiate(oz){function cz(pz){pz.grow=(function(qz){var a=this.length;this.length=this.length+qz;return a});pz.set=(function(d,rz){this[d]=rz});pz.get=(function(d){return this[d]});return pz}var b;var c=new Uint8Array(123);for(var d=25;d>=0;--d){c[48+d]=52+d;c[65+d]=d;c[97+d]=26+d}c[43]=62;c[47]=63;function dz(sz,tz,uz){var e,f,d=0,g=tz,h=uz.length,i=tz+(h*3>>2)-(uz[h-2]=="=")-(uz[h-1]=="=");for(;d<h;d+=4){e=c[uz.charCodeAt(d+1)];f=c[uz.charCodeAt(d+2)];sz[g++]=c[uz.charCodeAt(d)]<<2|e>>4;if(g<i)sz[g++]=e<<4|f>>2;if(g<i)sz[g++]=f<<6|c[uz.charCodeAt(d+3)]}}function ez(vz){dz(b,1024,"PGJpbmFyeT4AAAAAAAAAAJgFAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAATjR3YWJ0MTJfR0xPQkFMX19OXzExMU5hbWVBcHBsaWVyRQBONHdhYnQxMUV4cHJWaXNpdG9yMTFEZWxlZ2F0ZU5vcEUATjR3YWJ0MTFFeHByVmlzaXRvcjhEZWxlZ2F0ZUUAABT+AABlBQAAPP4AAEMFAACEBQAAPP4AACAFAACMBQAAQ3VzdG9tAFR5cGUASW1wb3J0AEZ1bmN0aW9uAFRhYmxlAE1lbW9yeQBFdmVudABHbG9iYWwARXhwb3J0AFN0YXJ0AEVsZW0ARGF0YUNvdW50AENvZGUARGF0YQBtb2R1bGUAZnVuY3Rpb24AbG9jYWwAbGFiZWwAdHlwZQB0YWJsZQBtZW1vcnkAZ2xvYmFsAGVsZW1zZWcAZGF0YXNlZwAAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAHAAAACAAAAAkAAAAKAAAADAAAAA0AAAALAAAABgAAAKQFAACrBQAAsAUAALcFAADABQAAxgUAANMFAADaBQAA4QUAAOcFAAD2BQAA+wUAAOwFAADNBQAAbWFnaWMAYmFkIG1hZ2ljIHZhbHVlAHZlcnNpb24AYmFkIHdhc20gZmlsZSB2ZXJzaW9uOiAlI3ggKGV4cGVjdGVkICUjeCkAQmVnaW5Nb2R1bGUgY2FsbGJhY2sgZmFpbGVkAGZ1bmN0aW9uIHNpZ25hdHVyZSBjb3VudCAhPSBmdW5jdGlvbiBib2R5IGNvdW50AEVuZE1vZHVsZSBjYWxsYmFjayBmYWlsZWQAdWludDMyX3QAdW5hYmxlIHRvIHJlYWQgJXM6ICVzACUwN3p4OiAlczogJXMKAHdhcm5pbmcAZXJyb3IAc2VjdGlvbiBjb2RlAHNlY3Rpb24gc2l6ZQBpbnZhbGlkIHNlY3Rpb24gY29kZTogJXUAbXVsdGlwbGUgJXMgc2VjdGlvbnMAaW52YWxpZCBzZWN0aW9uIHNpemU6IGV4dGVuZHMgcGFzdCBlbmQAc2VjdGlvbiAlcyBvdXQgb2Ygb3JkZXIAJXMgc2VjdGlvbiBjYW4gbm90IG9jY3VyIGFmdGVyIE5hbWUgc2VjdGlvbgBCZWdpblNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAHVuZmluaXNoZWQgc2VjdGlvbiAoZXhwZWN0ZWQgZW5kOiAweCV6eCkAdWludDhfdAB1bmFibGUgdG8gcmVhZCB1MzIgbGViMTI4OiAlcwBzZWN0aW9uIG5hbWUAQmVnaW5DdXN0b21TZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABuYW1lAGR5bGluawByZWxvYwBsaW5raW5nAEVuZEN1c3RvbVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAHN0cmluZyBsZW5ndGgAdW5hYmxlIHRvIHJlYWQgc3RyaW5nOiAlcwBpbnZhbGlkIHV0Zi04IGVuY29kaW5nOiAlcwBCZWdpbk5hbWVzU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAbmFtZSB0eXBlAGR1cGxpY2F0ZSBzdWItc2VjdGlvbgBvdXQtb2Ytb3JkZXIgc3ViLXNlY3Rpb24Ac3Vic2VjdGlvbiBzaXplAGludmFsaWQgc3ViLXNlY3Rpb24gc2l6ZTogZXh0ZW5kcyBwYXN0IGVuZABPbk5hbWVTdWJzZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABPbk1vZHVsZU5hbWVTdWJzZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABtb2R1bGUgbmFtZQBPbk1vZHVsZU5hbWUgY2FsbGJhY2sgZmFpbGVkAE9uRnVuY3Rpb25OYW1lU3Vic2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAbmFtZSBjb3VudABPbkZ1bmN0aW9uTmFtZXNDb3VudCBjYWxsYmFjayBmYWlsZWQAZnVuY3Rpb24gaW5kZXgAZHVwbGljYXRlIGZ1bmN0aW9uIG5hbWU6ICV1AGZ1bmN0aW9uIGluZGV4IG91dCBvZiBvcmRlcjogJXUAaW52YWxpZCBmdW5jdGlvbiBpbmRleDogJXUAZnVuY3Rpb24gbmFtZQBPbkZ1bmN0aW9uTmFtZSBjYWxsYmFjayBmYWlsZWQAT25Mb2NhbE5hbWVTdWJzZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABmdW5jdGlvbiBjb3VudABPbkxvY2FsTmFtZUZ1bmN0aW9uQ291bnQgY2FsbGJhY2sgZmFpbGVkAGxvY2FscyBmdW5jdGlvbiBpbmRleCBvdXQgb2Ygb3JkZXI6ICV1AGxvY2FsIGNvdW50AE9uTG9jYWxOYW1lTG9jYWxDb3VudCBjYWxsYmFjayBmYWlsZWQAbmFtZWQgaW5kZXgAZHVwbGljYXRlIGxvY2FsIGluZGV4OiAldQBsb2NhbCBpbmRleCBvdXQgb2Ygb3JkZXI6ICV1AE9uTG9jYWxOYW1lIGNhbGxiYWNrIGZhaWxlZABPbk5hbWVDb3VudCBjYWxsYmFjayBmYWlsZWQAaW5kZXgAT25OYW1lRW50cnkgY2FsbGJhY2sgZmFpbGVkAHVuZmluaXNoZWQgc3ViLXNlY3Rpb24gKGV4cGVjdGVkIGVuZDogMHglengpAEVuZE5hbWVzU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAaW52YWxpZCAlcyAldSwgb25seSAlemQgYnl0ZXMgbGVmdCBpbiBzZWN0aW9uAEJlZ2luRHlsaW5rU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAbWVtX3NpemUAbWVtX2FsaWduAHRhYmxlX3NpemUAdGFibGVfYWxpZ24AT25EeWxpbmtJbmZvIGNhbGxiYWNrIGZhaWxlZABuZWVkZWRfZHlubGlicwBPbkR5bGlua05lZWRlZENvdW50IGNhbGxiYWNrIGZhaWxlZABkeWxpYiBzb19uYW1lAE9uRHlsaW5rTmVlZGVkIGNhbGxiYWNrIGZhaWxlZABFbmREeWxpbmtTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABCZWdpblJlbG9jU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAc2VjdGlvbiBpbmRleAByZWxvY2F0aW9uIGNvdW50AE9uUmVsb2NDb3VudCBjYWxsYmFjayBmYWlsZWQAcmVsb2NhdGlvbiB0eXBlAG9mZnNldABhZGRlbmQAdW5rbm93biByZWxvYyB0eXBlOiAlcwBPblJlbG9jIGNhbGxiYWNrIGZhaWxlZABFbmRSZWxvY1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAHVuYWJsZSB0byByZWFkIGkzMiBsZWIxMjg6ICVzADxlcnJvcl9yZWxvY190eXBlPgBCZWdpbkxpbmtpbmdTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABpbnZhbGlkIGxpbmtpbmcgbWV0YWRhdGEgdmVyc2lvbjogJXUAdHlwZQBzeW0gY291bnQAT25TeW1ib2xDb3VudCBjYWxsYmFjayBmYWlsZWQAc3ltIHR5cGUAc3ltIGZsYWdzAE9uU3ltYm9sIGNhbGxiYWNrIGZhaWxlZABzeW1ib2wgbmFtZQBPbkZ1bmN0aW9uU3ltYm9sIGNhbGxiYWNrIGZhaWxlZABPbkdsb2JhbFN5bWJvbCBjYWxsYmFjayBmYWlsZWQAT25FdmVudFN5bWJvbCBjYWxsYmFjayBmYWlsZWQAT25UYWJsZVN5bWJvbCBjYWxsYmFjayBmYWlsZWQAc2VnbWVudABzaXplAE9uRGF0YVN5bWJvbCBjYWxsYmFjayBmYWlsZWQAT25TZWN0aW9uU3ltYm9sIGNhbGxiYWNrIGZhaWxlZABpbmZvIGNvdW50AE9uU2VnbWVudEluZm9Db3VudCBjYWxsYmFjayBmYWlsZWQAc2VnbWVudCBuYW1lAHNlZ21lbnQgYWxpZ25tZW50AHNlZ21lbnQgZmxLine truncated
|
||||
// EMSCRIPTEN_START_FUNCS
|
||||
function Ji(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0,u=0;a:{if(p[382748]&1){break a}c=S-16|0;S=c;d=yv(fh(c));S=c+16|0;if(!d){break a}r[95685]=55;r[95686]=456;r[95684]=56183;r[95682]=55;r[95683]=457;r[95681]=56163;r[95678]=48929;r[95675]=48929;r[95672]=48929;r[95669]=48929;r[95666]=48929;r[95663]=48929;r[95660]=48929;r[95657]=48929;r[95654]=48929;r[95651]=48929;r[95648]=48929;r[95645]=48929;r[95642]=48929;r[95639]=48929;r[95636]=48929;r[95633]=48929;r[95630]=48929;r[95627]=48929;r[95624]=48929;r[95621]=48929;r[95618]=48929;r[95615]=48929;r[95612]=48929;r[95609]=48929;r[95606]=48929;r[95603]=48929;r[95600]=48929;r[95597]=48929;r[95594]=48929;r[95591]=48929;r[95588]=48929;r[95585]=48929;r[95582]=48929;r[95579]=48929;r[95576]=48929;r[95573]=48929;r[95570]=48929;r[95567]=48929;r[95564]=48929;r[95561]=48929;r[95558]=48929;r[95555]=48929;r[95552]=48929;r[95549]=48929;r[95546]=48929;r[95543]=48929;r[95540]=48929;r[95537]=48929;r[95534]=48929;r[95531]=48929;r[95528]=48929;r[95525]=48929;r[95522]=48929;r[95519]=48929;r[95516]=48929;r[95513]=48929;r[95510]=48929;r[95507]=48929;r[95504]=48929;r[95501]=48929;r[95498]=48929;r[95495]=48929;r[95492]=48929;r[95489]=48929;r[95486]=48929;r[95483]=48929;r[95480]=48929;r[95477]=48929;r[95474]=48929;r[95471]=48929;r[95468]=48929;r[95465]=48929;r[95462]=48929;r[95459]=48929;r[95456]=48929;r[95453]=48929;r[95450]=48929;r[95447]=48929;r[95444]=48929;r[95441]=48929;r[95438]=48929;r[95435]=48929;r[95432]=48929;r[95429]=48929;r[95426]=48929;r[95423]=48929;r[95420]=48929;r[95417]=48929;r[95414]=48929;r[95411]=48929;r[95408]=48929;r[95405]=48929;r[95402]=48929;r[95399]=48929;r[95396]=48929;r[95393]=48929;r[95390]=48929;r[95387]=48929;r[95384]=48929;r[95381]=48929;r[95378]=48929;r[95375]=48929;r[95372]=48929;r[95369]=48929;r[95366]=48929;r[95363]=48929;r[95360]=48929;r[95357]=48929;r[95354]=48929;r[95351]=48929;r[95348]=48929;r[95345]=48929;r[95342]=48929;r[95339]=48929;r[95336]=48929;r[95333]=48929;r[95330]=48929;r[95327]=48929;r[95324]=48929;r[95321]=48929;r[95318]=48929;r[95315]=48929;r[95312]=48929;r[95309]=48929;r[95306]=48929;r[95303]=48929;r[95300]=48929;r[95297]=48929;r[95294]=48929;r[95291]=48929;r[95288]=48929;r[95285]=48929;r[95282]=48929;r[95279]=48929;r[95276]=48929;r[95273]=48929;r[95270]=48929;r[95267]=48929;r[95264]=48929;r[95261]=48929;r[95258]=48929;r[95255]=48929;r[95252]=48929;r[95249]=48929;r[95246]=48929;r[95243]=48929;r[95240]=48929;r[95237]=48929;r[95234]=48929;r[95231]=48929;r[95228]=48929;r[95225]=48929;r[95222]=48929;r[95219]=48929;r[95216]=48929;r[95213]=48929;r[95210]=48929;r[95207]=48929;r[95204]=48929;r[95201]=48929;r[95198]=48929;r[95195]=48929;r[95192]=48929;r[95189]=48929;r[95186]=48929;r[95183]=48929;r[95180]=48929;r[95177]=48929;r[95174]=48929;r[95171]=48929;r[95168]=48929;r[95165]=48929;r[95162]=48929;r[95159]=48929;r[95156]=48929;r[95153]=48929;r[95151]=113;r[95152]=327;r[95150]=56138;r[95147]=48929;r[95145]=113;r[95146]=325;r[95144]=56113;r[95141]=48929;r[95138]=48929;r[95135]=48929;r[95132]=48929;r[95129]=48929;r[95126]=48929;r[95123]=48929;r[95120]=48929;r[95117]=48929;r[95114]=48929;r[95111]=48929;r[95108]=48929;r[95105]=48929;r[95102]=48929;r[95099]=48929;r[95096]=48929;r[95093]=48929;r[95090]=48929;r[95087]=48929;r[95084]=48929;r[95081]=48929;r[95078]=48929;r[95075]=48929;r[95072]=48929;r[95069]=48929;r[95066]=48929;r[95063]=48929;r[95060]=48929;r[95057]=48929;r[95054]=48929;r[95051]=48929;r[95048]=48929;r[95045]=48929;r[95042]=48929;r[95039]=48929;r[95036]=48929;r[95033]=48929;r[95030]=48929;r[95027]=48929;r[95024]=48929;r[95021]=48929;r[95018]=48929;r[95015]=48929;r[95012]=48929;r[95009]=48929;r[95006]=48929;r[95003]=48929;r[95e3]=48929;r[94997]=48929;r[94994]=48929;r[94991]=48929;r[94988]=48929;r[94985]=48929;r[94982]=48929;r[94979]=48929;r[94976]=48929;r[94973]=48929;r[94970]=48929;r[94967]=48929;r[94964]=48929;r[94961]=48929;r[94958]=48929;r[94955]=48929;r[94952]=48929;r[94949]=48929;r[94946]=48929;r[94943]=48929;r[94940]=48929;r[94937]=48929;r[94934]=48929;r[94931]=48929;r[94928]=48929;r[94925]=48929;r[94922]=48929;r[94919]=48929;r[94916]=48929;r[94913]=48929;r[94910]=48929;r[94907]=48929;r[94904]=48929;r[94901]=48929;r[94898]=48929;r[94895]=48929;r[94892]=48929;r[94889]=48929;r[94886]=48929;r[94883]=48929;r[94880]=48929;r[94877]=48929;r[94874]=48929;r[94871]=48929;r[94868]=48929;r[94865]=48929;r[94862]=48929;r[94859]=48929;r[94856]=48929;r[94853]=48929;r[94850]=48929;r[94847]=48929;r[94844]=48929;r[94841]=48929;r[94838]=48929;r[94835]=48929;r[94832]=48929;r[94829]=48929;r[94826]=48929;r[94823]=48929;r[94820]=48929;r[94817]=48929;r[94814]=48929;r[94811]=48929;r[94808]=48929;r[94805]=48929;r[94802]=48929;r[94799]=48929;r[94796]=48929;r[94793]=48929;r[94790]=48929;r[94787]=48929;r[94784]=48929;r[94781]=48929;r[94778]=48929;r[94775]=48929;r[94772]=48929;r[94769]=48929;r[94766]=48929;r[94763]=48929;r[94760]=48929;r[94757]=48929;r[94754]=48929;r[94751]=48929;r[94748]=48929;r[94745]=48929;r[94742]=48929;r[94739]=48929;rLine truncated
|
||||
|
||||
|
||||
|
||||
function Wc(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;g=S-80|0;S=g;k=r[a+40>>2];i=r[a+36>>2];f=k-i|0;a:{if(!f){r[g+48>>2]=0;r[g+52>>2]=-1;xa(a,43776,g+48|0);i=r[a+36>>2];k=r[a+40>>2];h=1;break a}h=r[a+24>>2];j=r[a+28>>2]-h>>2;f=x(((f|0)/36|0)-1|0,36)+i|0;if(j>>>0<=u[f+28>>2]){j=0;h=!s[f+32|0];break a}f=r[(h+(j<<2)|0)-4>>2];j=(f|0)!=(d|0)&((d|0)!=0&(f|0)!=0);h=0}f=k-i|0;b:{if(!f){r[g+32>>2]=0;r[g+36>>2]=-1;xa(a,43776,g+32|0);i=r[a+36>>2];k=r[a+40>>2];m=1;f=0;break b}l=r[a+24>>2];n=r[a+28>>2]-l>>2;f=x(((f|0)/36|0)-1|0,36)+i|0;if(n>>>0<=r[f+28>>2]+1>>>0){m=!s[f+32|0];f=0;break b}f=r[(l+(n<<2)|0)-8>>2];f=(f|0)!=(c|0)&((c|0)!=0&(f|0)!=0)}l=k-i|0;c:{d:{if(!l){r[g+16>>2]=0;r[g+20>>2]=-1;xa(a,43776,g+16|0);break d}m=h|j|(f|m);h=r[a+24>>2];j=r[a+28>>2]-h>>2;f=x(((l|0)/36|0)-1|0,36)+i|0;e:{if(j>>>0<=r[f+28>>2]+2>>>0){j=0;h=!s[f+32|0];break e}f=r[(h+(j<<2)|0)-12>>2];j=(f|0)!=(b|0)&((b|0)!=0&(f|0)!=0);h=0}f=0;if((m|(h|j))!=1){break c}}f=aa(12);r[g+64>>2]=f;h=f+12|0;r[g+72>>2]=h;r[f+8>>2]=d;r[f+4>>2]=c;r[f>>2]=b;r[g+68>>2]=h;Pb(a,1,e,g- -64|0);Z(f);i=r[a+36>>2];k=r[a+40>>2];f=1}b=k-i|0;f:{if(!b){r[g>>2]=0;r[g+4>>2]=-1;xa(a,43776,g);a=1;break f}e=r[a+28>>2];h=r[a+24>>2];c=e-h>>2;d=((b|0)/36|0)-1|0;b=r[(x(d,36)+i|0)+28>>2];if(c>>>0<b+3>>>0){g:{if(b>>>0>c>>>0){Ua(a+24|0,b-c|0);break g}if(b>>>0>=c>>>0){break g}r[a+28>>2]=h+(b<<2)}a=!s[(x(d,36)+i|0)+32|0];break f}r[a+28>>2]=e-12;a=0}S=g+80|0;return a|f}function Jx(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;e=S-80|0;S=e;b=aa(152);g=b;r[g+4>>2]=0;r[g+8>>2]=0;r[g>>2]=15076;r[g+28>>2]=0;r[g+20>>2]=0;r[g+24>>2]=0;r[g+12>>2]=0;r[g+16>>2]=0;r[e+48>>2]=0;r[e+52>>2]=0;pa(g+32|0,e+48|0);p[g+44|0]=0;r[e+72>>2]=0;h=e- -64|0;g=h;r[g>>2]=0;r[g+4>>2]=0;r[e+56>>2]=0;r[e+60>>2]=0;i=ia(b+48|0,-1,e+56|0);g=b;r[g+124>>2]=0;r[g+128>>2]=0;r[g+116>>2]=0;r[g+120>>2]=0;r[g+108>>2]=0;r[g+112>>2]=0;r[g+100>>2]=0;r[g+104>>2]=0;r[g+92>>2]=0;r[g+96>>2]=0;r[g+84>>2]=0;r[g+88>>2]=0;r[g+148>>2]=0;r[g+140>>2]=0;r[g+144>>2]=0;r[g+132>>2]=0;r[g+136>>2]=1065353216;pa(e+56|0,c);if(p[g+15|0]<=-1){Z(r[b+4>>2])}c=r[e+60>>2];r[b+4>>2]=r[e+56>>2];r[b+8>>2]=c;r[b+12>>2]=r[h>>2];pa(e+56|0,d);if(p[b+27|0]<=-1){Z(r[b+16>>2])}c=r[e+60>>2];r[b+16>>2]=r[e+56>>2];r[b+20>>2]=c;r[b+24>>2]=r[e- -64>>2];r[e+68>>2]=0;r[e+72>>2]=0;c=r[a+36>>2];j=e,k=fa(c),r[j+60>>2]=k;r[e+56>>2]=c;r[e+64>>2]=r[r[a+4>>2]+8>>2];d=ia(e+8|0,f,e+56|0);p[b+44|0]=1;Ba(i,d);c=lb(r[a+12>>2],d);a:{if(!c){break a}f=b+84|0;if((f|0)==(c+40|0)){break a}Ia(f,r[c+40>>2],r[c+44>>2]);Ia(b+96|0,r[c+52>>2],r[c+56>>2])}ba(d);c=r[a+12>>2];d=r[a+36>>2];f=fa(d);g=r[r[a+4>>2]+8>>2];a=aa(40);r[a+32>>2]=2;r[a+24>>2]=0;r[a+28>>2]=0;r[a+20>>2]=g;r[a+16>>2]=f;r[a+12>>2]=d;r[a+4>>2]=0;r[a+8>>2]=0;r[a+36>>2]=b;r[a>>2]=15220;r[e>>2]=a;zb(c,e);a=r[e>>2];r[e>>2]=0;if(a){U[r[r[a>>2]+4>>2]](a)}S=e+80|0;return 0}function Lf(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=S-96|0;S=c;a:{b:{g=r[b+24>>2];f=r[b+36>>2];if(g>>>0<=f>>>0){break b}d=f+1|0;r[b+36>>2]=d;if(s[f|0]!=105|d>>>0>=g>>>0){break b}d=f+2|0;r[b+36>>2]=d;if(s[f+1|0]!=110|d>>>0>=g>>>0){break b}d=f+3|0;r[b+36>>2]=d;if(s[f+2|0]!=102){break b}c:{d:{if(d>>>0<g>>>0){f=0;while(1){if(p[s[d|0]+48673|0]&1){d=d+1|0;r[b+36>>2]=d;f=f+1|0;if((d|0)!=(g|0)){continue}break c}break}if(f){break d}}i=r[b+8>>2];f=s[b+15|0];j=r[b+4>>2];e=r[b+28>>2];g=r[b+32>>2];r[c+80>>2]=r[b+16>>2];h=g-e|0;r[c+84>>2]=(h|0)<1?1:h+1|0;e=d-e|0;e=(e|0)<1?1:e+1|0;r[c+88>>2]=e;r[c+16>>2]=e;e=r[c+84>>2];r[c+8>>2]=r[c+80>>2];r[c+12>>2]=e;e=f;f=f<<24>>24<0;r[c+76>>2]=f?i:e;r[c+72>>2]=f?j:b+4|0;r[c- -64>>2]=d-g;r[c+60>>2]=g;r[c+56>>2]=3;b=r[c+76>>2];r[c>>2]=r[c+72>>2];r[c+4>>2]=b;ec(a,c,49,c+56|0);break a}if(d>>>0>=g>>>0){g=d;break c}while(1){if(!(p[s[d|0]+48673|0]&1)){g=d;break c}d=d+1|0;r[b+36>>2]=d;if((d|0)!=(g|0)){continue}break}}i=r[b+8>>2];f=s[b+15|0];j=r[b+4>>2];e=r[b+28>>2];d=r[b+32>>2];r[c+80>>2]=r[b+16>>2];h=d-e|0;r[c+84>>2]=(h|0)<1?1:h+1|0;e=g-e|0;e=(e|0)<1?1:e+1|0;r[c+88>>2]=e;r[c+48>>2]=e;e=r[c+84>>2];r[c+40>>2]=r[c+80>>2];r[c+44>>2]=e;r[c+56>>2]=d;r[c+60>>2]=g-d;d=f<<24>>24<0;r[c+76>>2]=d?i:f;r[c+72>>2]=d?j:b+4|0;b=r[c+60>>2];r[c+24>>2]=r[c+56>>2];r[c+28>>2]=b;b=r[c+76>>2];r[c+32>>2]=r[c+72>>2];r[c+36>>2]=b;cb(a,c+32|0,118,c+24|0);break a}r[b+36>>2]=f;Sc(a,b)}S=c+96|0}function Na(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=S-128|0;S=d;e=x(r[a+92>>2]&1,36)+a|0;r[d+120>>2]=r[e+48>>2];f=r[e+44>>2];r[d+112>>2]=r[e+40>>2];r[d+116>>2]=f;f=r[e+36>>2];r[d+104>>2]=r[e+32>>2];r[d+108>>2]=f;f=r[e+28>>2];r[d+96>>2]=r[e+24>>2];r[d+100>>2]=f;f=r[e+20>>2];r[d+88>>2]=r[e+16>>2];r[d+92>>2]=f;r[e+16>>2]=0;r[e+20>>2]=0;r[e+24>>2]=0;r[e+28>>2]=0;r[e+32>>2]=0;r[e+36>>2]=0;r[a+88>>2]=r[a+88>>2]-1;r[a+92>>2]=(r[a+92>>2]^-1)&1;r[d+80>>2]=0;r[d+72>>2]=0;r[d+76>>2]=0;a:{if(r[b>>2]==r[b+4>>2]){break a}bf(d+72|0,58214);b:{if(r[b+4>>2]==r[b>>2]){break b}e=r[b>>2];g=s[e+11|0];f=g<<24>>24<0;Ja(d+72|0,f?r[e>>2]:e,f?r[e+4>>2]:g);e=1;f=(r[b+4>>2]-r[b>>2]|0)/12|0;if(f>>>0<=1){break b}while(1){Aa(d+72|0,(f-1|0)==(e|0)?58226:58231);f=r[b>>2]+x(e,12)|0;h=s[f+11|0];g=h<<2Line truncated
|
||||
|
||||
|
||||
|
||||
function xy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=S-16|0;S=e;f=r[a+36>>2];g=fa(f);h=r[r[a+4>>2]+8>>2];i=aa(40);b=i;r[b+24>>2]=0;r[b+28>>2]=0;r[b+20>>2]=h;r[b+16>>2]=g;r[b+12>>2]=f;r[b+4>>2]=0;r[b+8>>2]=0;r[b+32>>2]=4;r[b+36>>2]=0;r[b>>2]=14672;f=aa(52);r[e+8>>2]=0;r[e+12>>2]=0;g=0;r[f+20>>2]=0;b=f;r[b+12>>2]=0;r[b+16>>2]=0;r[b+4>>2]=0;r[b+8>>2]=0;r[b>>2]=14964;pa(b+24|0,e+8|0);r[b+36>>2]=1;r[b+48>>2]=0;r[b+40>>2]=0;r[b+44>>2]=0;r[b>>2]=14980;if(c){ry(f+40|0,c);b=r[f+40>>2];while(1){h=b+x(g,20)|0;j=(g<<3)+d|0;r[h+12>>2]=r[j>>2];p[h+16|0]=s[j+4|0];g=g+1|0;if((g|0)!=(c|0)){continue}break}}b=r[i+36>>2];r[i+36>>2]=f;if(b){U[r[r[b>>2]+4>>2]](b)}a=r[a+12>>2];r[e>>2]=i;Fc(a,e);a=r[e>>2];r[e>>2]=0;if(a){U[r[r[a>>2]+4>>2]](a)}S=e+16|0;return 0}function hg(a,b,c){var d=0,e=0,f=0,g=0;d=S-80|0;S=d;r[d+72>>2]=0;r[d+76>>2]=0;e=d- -64|0;r[e>>2]=0;r[e+4>>2]=0;r[d+56>>2]=0;r[d+60>>2]=0;c=da(d+16|0,c);e=Uc(a,c,d+56|0);ba(c);if(r[d+68>>2]==r[d+72>>2]){c=(e|0)==1}else{c=(e|0)==1|(ra(a,b,45170,0)|0)==1}r[d+8>>2]=0;r[d>>2]=0;r[d+4>>2]=0;a:{g=r[d+56>>2];f=r[d+60>>2]-g|0;if(f){e=f>>2;if(e>>>0>=1073741824){break a}b=aa(f);r[d>>2]=b;r[d+4>>2]=b;r[d+8>>2]=b+(e<<2);e=d;if((f|0)>=1){b=ma(b,g,f)+f|0}r[e+4>>2]=b}b=r[a+192>>2];b:{if(b>>>0<u[a+196>>2]){r[b+8>>2]=0;r[b>>2]=0;r[b+4>>2]=0;r[b>>2]=r[d>>2];r[b+4>>2]=r[d+4>>2];r[b+8>>2]=r[d+8>>2];r[a+192>>2]=b+12;break b}Xk(a+188|0,d);a=r[d>>2];if(!a){break b}r[d+4>>2]=a;Z(a)}a=r[d+68>>2];if(a){r[d+72>>2]=a;Z(a)}a=r[d+56>>2];if(a){r[d+60>>2]=a;Z(a)}S=d+80|0;return c}na();H()}function Jq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=S-192|0;S=g;h=r[f>>2];i=r[f+4>>2];a:{if(s[f+16|0]){j=r[f+12>>2];r[g+56>>2]=r[f+8>>2];r[g+60>>2]=j;r[g+48>>2]=h;r[g+52>>2]=i;Ya(g+80|0,100,30794,g+48|0);break a}r[g+32>>2]=h;r[g+36>>2]=i;Ya(g+80|0,100,30819,g+32|0)}h=r[a+16>>2];b:{c:{if(h>>>0>=143){while(1){_(r[a+8>>2],65312,142,0,0);h=h-142|0;if(h>>>0>142){continue}break}h=r[a+16>>2];break c}if(!h){break b}}_(r[a+8>>2],65312,h,0,0)}h=r[a+8>>2];r[g+20>>2]=e;r[g+16>>2]=b;r[g+24>>2]=g+80;ca(h,24715,g+16|0);a=r[a+12>>2];h=r[c+4>>2];i=r[c>>2];r[g+72>>2]=i;r[g+76>>2]=h;c=r[d+4>>2];d=r[d>>2];r[g+64>>2]=d;r[g+68>>2]=c;j=r[r[a>>2]+80>>2];r[g+8>>2]=i;r[g+12>>2]=h;r[g>>2]=d;r[g+4>>2]=c;a=U[j|0](a,b,g+8|0,g,e,f)|0;S=g+192|0;return a|0}function Ov(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;b=S-80|0;S=b;g=r[a+36>>2];h=fa(g);i=r[r[a+4>>2]+8>>2];f=aa(88);r[f+32>>2]=3;r[f+24>>2]=0;r[f+28>>2]=0;r[f+20>>2]=i;r[f+16>>2]=h;r[f+12>>2]=g;r[f+4>>2]=0;r[f+8>>2]=0;r[f+36>>2]=0;r[f+40>>2]=0;r[f>>2]=16252;r[f+44>>2]=0;r[b+56>>2]=0;r[b+48>>2]=0;r[b+52>>2]=0;r[b+40>>2]=0;r[b+44>>2]=0;g=ia(f+52|0,-1,b+40|0);pa(b+40|0,e);if(p[f+47|0]<=-1){Z(r[f+36>>2])}e=r[b+44>>2];r[f+36>>2]=r[b+40>>2];r[f+40>>2]=e;r[f+44>>2]=r[b+48>>2];r[b+28>>2]=0;r[b+32>>2]=0;e=r[a+36>>2];j=b,k=fa(e),r[j+20>>2]=k;r[b+16>>2]=e;r[b+24>>2]=r[r[a+4>>2]+8>>2];d=ia(b+40|0,d,b+16|0);Ba(g,d);ba(d);r[f+48>>2]=c;a=r[a+12>>2];r[b+8>>2]=f;Ie(a,b+8|0);a=r[b+8>>2];r[b+8>>2]=0;if(a){U[r[r[a>>2]+4>>2]](a)}S=b+80|0;return 0}function qm(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;a:{b:{c=r[a>>2];l=r[a+4>>2];if((c|0)==(l|0)){break b}d=l;g=c;while(1){c:{if((c|0)==(d|0)){break c}j=r[g>>2];e=s[j+11|0];n=e<<24>>24<0;k=n?r[j+4>>2]:e;while(1){f=r[c>>2];h=s[f+11|0];m=h<<24>>24<0;d:{if(((m?r[f+4>>2]:h)|0)!=(k|0)){break d}i=n?r[j>>2]:j;e=r[f>>2];e:{if(!m){if(k){break e}d=c;break c}if(!k){d=c;break c}if(gb(m?e:f,i,k)){break d}d=c;break c}if(s[i|0]!=(e&255)){break d}while(1){h=h-1|0;if(h){e=s[i+1|0];i=i+1|0;f=f+1|0;if((e|0)==s[f|0]){continue}break d}break}d=c;break c}c=c+4|0;if((d|0)!=(c|0)){continue}break}}if((d|0)!=(g|0)){c=r[b+16>>2];if(!c){break a}U[r[r[c>>2]+24>>2]](c,r[d>>2],r[g>>2])}g=g+4|0;if((l|0)==(g|0)){break b}d=r[a+4>>2];c=r[a>>2];continue}}return}Ic();H()}function $p(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=S-48|0;S=b;c=Tg(b+24|0);r[b+16>>2]=0;r[b+8>>2]=0;r[b+12>>2]=0;Rg(b+32|0,a,1,0,c,b+8|0);if(p[b+19|0]<=-1){Z(r[b+8>>2])}e=aa(12);r[e>>2]=0;r[e+4>>2]=0;r[e+8>>2]=0;d=s[b+43|0];a=d<<24>>24;c=(a|0)<0;a:{d=c?r[b+36>>2]:d;if(d){g=c?r[b+32>>2]:b+32|0;j=d+g|0;a=0;while(1){i=s[g|0];b:{if(a>>>0<f>>>0){p[a|0]=i;r[e+4>>2]=a+1;break b}h=r[e>>2];a=a-h|0;d=a+1|0;if((d|0)<=-1){break a}f=f-h|0;c=f<<1;f=f>>>0<1073741823?c>>>0<d>>>0?d:c:2147483647;c=0;c:{if(!f){break c}c=aa(f)}d=c+a|0;p[d|0]=i;if((a|0)>=1){ma(c,h,a)}r[e+8>>2]=c+f;r[e+4>>2]=d+1;r[e>>2]=c;if(!h){break b}Z(h)}g=g+1|0;if((j|0)!=(g|0)){f=r[e+8>>2];a=r[e+4>>2];continue}break}a=s[b+43|0]}if(a<<24>>24<=-1){Z(r[b+32>>2])}S=b+48|0;return e|0}na();H()}function Mt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;b=S-80|0;S=b;e=r[a+36>>2];h=fa(e);g=r[r[a+4>>2]+8>>2];f=aa(116);r[f+32>>2]=6;r[f+24>>2]=0;r[f+28>>2]=0;r[f+20>>2]=g;r[f+16>>2]=h;r[f+12>>2]=e;r[f+4>>2]=0;r[f+8>>2]=0;r[f>>2]=22860;e=b;r[e+16>>2]=0;r[e+20>>2]=0;r[f+36>>2]=0;pa(f+40|0,e+16|0);r[e+56>>2]=0;r[e+48>>2]=0;r[e+52>>2]=0;r[e+40>>2]=0;r[e+44>>2]=0;h=ia(f+52|0,-1,e+40|0);r[f+108>>2]=Line truncated
|
||||
|
||||
|
||||
|
||||
function yh(a,b,c,d,e,f){var g=0;g=S-80|0;S=g;a:{if((f|0)>=16384){Ha(g+32|0,b,c,d,e,0,0,0,2147352576);d=r[g+40>>2];e=r[g+44>>2];b=r[g+32>>2];c=r[g+36>>2];if((f|0)<32767){f=f-16383|0;break a}Ha(g+16|0,b,c,d,e,0,0,0,2147352576);f=((f|0)<49149?f:49149)-32766|0;d=r[g+24>>2];e=r[g+28>>2];b=r[g+16>>2];c=r[g+20>>2];break a}if((f|0)>-16383){break a}Ha(g- -64|0,b,c,d,e,0,0,0,65536);d=r[g+72>>2];e=r[g+76>>2];b=r[g+64>>2];c=r[g+68>>2];if((f|0)>-32765){f=f+16382|0;break a}Ha(g+48|0,b,c,d,e,0,0,0,65536);f=((f|0)>-49146?f:-49146)+32764|0;d=r[g+56>>2];e=r[g+60>>2];b=r[g+48>>2];c=r[g+52>>2]}Ha(g,b,c,d,e,0,0,0,f+16383<<16);b=r[g+12>>2];r[a+8>>2]=r[g+8>>2];r[a+12>>2]=b;b=r[g+4>>2];r[a>>2]=r[g>>2];r[a+4>>2]=b;S=g+80|0}function Mq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=S+ -64|0;S=f;g=r[a+16>>2];a:{b:{if(g>>>0>=143){while(1){_(r[a+8>>2],65312,142,0,0);g=g-142|0;if(g>>>0>142){continue}break}g=r[a+16>>2];break b}if(!g){break a}}_(r[a+8>>2],65312,g,0,0)}h=r[a+8>>2];g=30781;g=(c|0)<=4?r[(c<<2)+65456>>2]:g;i=r[d>>2];j=r[d+4>>2];k=f,l=bz(r[e>>2],r[e+4>>2]),r[k+32>>2]=l;r[f+36>>2]=T;r[f+20>>2]=g;r[f+16>>2]=b;k=f,l=bz(i,j),r[k+24>>2]=l;r[f+28>>2]=T;ca(h,24521,f+16|0);a=r[a+12>>2];g=r[d+4>>2];h=r[d>>2];r[f+56>>2]=h;r[f+60>>2]=g;d=r[e+4>>2];e=r[e>>2];r[f+48>>2]=e;r[f+52>>2]=d;i=r[r[a>>2]+68>>2];r[f+8>>2]=h;r[f+12>>2]=g;r[f>>2]=e;r[f+4>>2]=d;a=U[i|0](a,b,c,f+8|0,f)|0;S=f- -64|0;return a|0}function Ah(a,b,c,d){a:{if(b>>>0>20){break a}b:{switch(b-9|0){case 0:b=r[c>>2];r[c>>2]=b+4;r[a>>2]=r[b>>2];return;case 1:b=r[c>>2];r[c>>2]=b+4;b=r[b>>2];r[a>>2]=b;r[a+4>>2]=b>>31;return;case 2:b=r[c>>2];r[c>>2]=b+4;r[a>>2]=r[b>>2];r[a+4>>2]=0;return;case 3:b=r[c>>2]+7&-8;r[c>>2]=b+8;c=r[b+4>>2];r[a>>2]=r[b>>2];r[a+4>>2]=c;return;case 4:b=r[c>>2];r[c>>2]=b+4;b=q[b>>1];r[a>>2]=b;r[a+4>>2]=b>>31;return;case 5:b=r[c>>2];r[c>>2]=b+4;r[a>>2]=t[b>>1];r[a+4>>2]=0;return;case 6:b=r[c>>2];r[c>>2]=b+4;b=p[b|0];r[a>>2]=b;r[a+4>>2]=b>>31;return;case 7:b=r[c>>2];r[c>>2]=b+4;r[a>>2]=s[b|0];r[a+4>>2]=0;return;case 8:b=r[c>>2]+7&-8;r[c>>2]=b+8;w[a>>3]=w[b>>3];return;case 9:break b;default:break a}}U[d|0](a,c)}}function yt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=S-48|0;S=c;if(r[b+4>>2]){d=r[b+4>>2];r[c+8>>2]=r[b>>2];r[c+12>>2]=d;q[c+32>>1]=36;p[c+43|0]=1;pa(c+16|0,c+8|0);b=s[c+27|0];d=b<<24>>24<0;b=Ja(c+32|0,d?r[c+16>>2]:c+16|0,d?r[c+20>>2]:b);e=r[b>>2];r[c>>2]=r[b+4>>2];d=s[b+7|0]|s[b+8|0]<<8|(s[b+9|0]<<16|s[b+10|0]<<24);p[c+3|0]=d;p[c+4|0]=d>>>8;p[c+5|0]=d>>>16;p[c+6|0]=d>>>24;r[b>>2]=0;r[b+4>>2]=0;d=s[b+11|0];r[b+8>>2]=0;if(p[c+27|0]<=-1){Z(r[c+16>>2])}if(p[c+43|0]<=-1){Z(r[c+32>>2])}a=r[a+12>>2];if(p[a+31|0]<=-1){Z(r[a+20>>2])}r[a+20>>2]=e;r[a+24>>2]=r[c>>2];b=s[c+3|0]|s[c+4|0]<<8|(s[c+5|0]<<16|s[c+6|0]<<24);p[a+27|0]=b;p[a+28|0]=b>>>8;p[a+29|0]=b>>>16;p[a+30|0]=b>>>24;p[a+31|0]=d}S=c+48|0;return 0}function Yf(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=S-48|0;S=d;r[d+44>>2]=0;e=r[a+4>>2];e=Za(e+r[a+12>>2]|0,e+r[a>>2]|0,d+44|0);a:{if(!e){r[d>>2]=5972;$(a,3815,d);e=1;break a}f=e+r[a+12>>2]|0;r[a+12>>2]=f;b:{c:{d:{e:{f:{g=r[d+44>>2];switch(g+24|0){case 20:case 21:case 22:case 23:break c;case 7:case 8:break d;case 19:break e;case 0:break f;default:break b}}if(!s[r[a+88>>2]]){break b}break c}if(s[r[a+88>>2]+4|0]){break c}break b}if(!s[r[a+88>>2]+9|0]){break b}}e=1;h=f+1|0;if(h>>>0>u[a>>2]){r[d+36>>2]=6009;r[d+32>>2]=2203;$(a,1903,d+32|0);break a}f=s[f+r[a+4>>2]|0];r[a+12>>2]=h;if(f>>>0>=2){$(a,6027,0);break a}r[b>>2]=g;e=0;p[c|0]=(f|0)!=0;break a}r[d+16>>2]=g;$(a,5984,d+16|0);e=1}S=d+48|0;return e}function Lu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;f=S-16|0;S=f;d=r[a+36>>2];e=fa(d);g=r[a+4>>2];h=r[g+8>>2];c=aa(96);r[c+4>>2]=0;r[c+8>>2]=0;r[c+80>>2]=0;r[c+64>>2]=b;r[c+56>>2]=-3;r[c+48>>2]=0;r[c+52>>2]=0;r[c+44>>2]=h;r[c+40>>2]=e;r[c+36>>2]=d;r[c>>2]=18720;r[c+20>>2]=0;r[c+24>>2]=0;r[c+12>>2]=0;r[c+16>>2]=0;r[c+28>>2]=0;r[c+32>>2]=16;b=fa(d);e=r[g+8>>2];r[c+24>>2]=0;r[c+28>>2]=0;r[c+20>>2]=e;r[c+16>>2]=b;r[c+12>>2]=d;d=r[a+20>>2];e=r[a+24>>2]-d|0;b=(e|0)/12|0;a:{if(e){a=r[(d+x(b,12)|0)-8>>2];b=r[a+4>>2];b:{if(b){r[c+8>>2]=b;b=b+4|0;break b}b=a}r[b>>2]=c;r[a+4>>2]=c;r[a+8>>2]=r[a+8>>2]+1;a=0;break a}r[f+4>>2]=b;r[f>>2]=0;sa(a,16484,f);U[r[r[c>>2]+4>>2]](c);a=1}S=f+16|0;return a|0}function Ga(a,b,c){var d=0,e=0,f=0,g=0;a:{if(!c){break a}d=a+c|0;p[d-1|0]=b;p[a|0]=b;if(c>>>0<3){break a}p[d-2|0]=b;p[a+1|0]=b;p[d-3|0]=b;p[a+2|0]=b;if(c>>>0<7){break a}p[d-4|0]=b;p[a+3|0]=b;if(c>>>0<9){break a}d=0-a&3;e=d+a|0;b=x(b&255,16843009);r[e>>2]=b;c=c-d&-4;d=c+e|0;r[d-4>>2]=b;if(c>>>0<9){break a}r[e+8>>2]=b;r[e+4>>2]=b;r[d-8>>2]=b;r[d-12>>2]=b;if(c>>>0<25){break a}r[e+24>>2]=b;r[e+20>>2]=b;r[e+16>>2]=b;r[e+12>>2]=b;r[d-16>>2]=b;r[d-20>>2]=b;r[d-24>>2]=b;r[d-28>>2]=b;g=e&4|24;c=c-g|0;if(c>>>0<32){break a}d=b;f=b;b=e+g|0;while(1){r[b+24>>2]=f;r[b+28>>2]=d;r[b+16>>2]=f;r[b+20>>2]=d;r[b+8>>2]=f;r[b+12>>2]=d;r[b>>2]=f;r[b+4>>2]=d;b=b+32|0;c=c-32|0;if(c>>>0>31){continue}break}}return a}function Fu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;f=S-16|0;S=f;d=r[a+36>>2];e=fLine truncated
|
||||
|
||||
|
||||
|
||||
function Ci(a){a=a|0;var b=0;r[a>>2]=13696;b=r[a+20>>2];if(b){r[a+24>>2]=b;Z(b)}return a|0}function us(a){a=a|0;r[a>>2]=16252;ba(a+52|0);if(p[a+47|0]<=-1){Z(r[a+36>>2])}return a|0}function Fx(a){a=a|0;r[a>>2]=61460;if(p[a+71|0]<=-1){Z(r[a+60>>2])}ba(a+24|0);return a|0}function by(a){a=a|0;r[a>>2]=60012;ba(a+20|0);if(p[a+19|0]<=-1){Z(r[a+8>>2])}return a|0}function Bv(a,b,c,d){if(!((b|0)==(c|0)|(d|0)>-1)){p[b|0]=45;d=0-d|0;b=b+1|0}gh(a,b,c,d)}function Wm(a,b,c){a=a|0;b=b|0;c=c|0;a=r[a+12>>2];return U[r[r[a>>2]+236>>2]](a,b,c)|0}function Um(a,b,c){a=a|0;b=b|0;c=c|0;a=r[a+12>>2];return U[r[r[a>>2]+240>>2]](a,b,c)|0}function Tm(a,b,c){a=a|0;b=b|0;c=c|0;a=r[a+12>>2];return U[r[r[a>>2]+244>>2]](a,b,c)|0}function Rm(a,b,c){a=a|0;b=b|0;c=c|0;a=r[a+12>>2];return U[r[r[a>>2]+252>>2]](a,b,c)|0}function fh(a){r[a+12>>2]=0;r[a+4>>2]=382748;r[a>>2]=382748;r[a+8>>2]=382749;return a}function Lt(a,b){a=a|0;b=b|0;r[a+32>>2]=r[r[r[a+12>>2]+148>>2]+(b<<2)>>2]+56;return 0}function Fb(a){a:{b:{if(s[a|0]){p[a+9|0]=1;break b}if(!s[a+9|0]){break a}}p[a+8|0]=1}}function Bt(a,b){a=a|0;b=b|0;r[a+32>>2]=r[r[r[a+12>>2]+172>>2]+(b<<2)>>2]+52;return 0}function $y(a){var b=0,c=0;while(1){c=b;if(a){a=a-1&a;b=b+1|0;continue}break}return c}function vi(a){a=a|0;var b=0;r[a>>2]=13696;b=r[a+20>>2];if(b){r[a+24>>2]=b;Z(b)}Z(a)}function ir(a){a=a|0;var b=0;r[a>>2]=21804;b=r[a+36>>2];if(b){r[a+40>>2]=b;Z(b)}Z(a)}function Zv(a,b){a=a|0;b=b|0;r[a+32>>2]=r[r[r[a+12>>2]+88>>2]+(b<<2)>>2]+20;return 0}function zk(a,b){r[a+96>>2]=b;a=a+24|0;r[a+48>>2]=0;return(jb(a,-1,43994)|0)==1}
|
||||
|
||||
|
||||
|
||||
function ts(a){a=a|0;r[a>>2]=16252;ba(a+52|0);if(p[a+47|0]<=-1){Z(r[a+36>>2])}Z(a)}function Nh(a){a=a|0;r[a>>2]=61460;if(p[a+71|0]<=-1){Z(r[a+60>>2])}ba(a+24|0);Z(a)}function bj(a,b){a=a|0;b=b|0;r[a+112>>2]=b+12;r[a+292>>2]=r[a+292>>2]==1;return 0}function ay(a){a=a|0;r[a>>2]=60012;ba(a+20|0);if(p[a+19|0]<=-1){Z(r[a+8>>2])}Z(a)}function Vj(a){a=a|0;var b=0;b=aa(8);r[b>>2]=46152;r[b+4>>2]=r[a+4>>2];return b|0}function _g(a){a=a|0;var b=0;if(a){b=r[a+4>>2];r[a+4>>2]=0;if(b){Z(Zb(b))}Z(a)}}function Xl(a){a=r[a>>2]-234|0;if(a>>>0>=14){K();H()}return r[(a<<2)+42468>>2]}function Tq(a,b){a=a|0;b=b|0;r[a+4>>2]=b;a=r[a+12>>2];U[r[r[a>>2]+12>>2]](a,b)}function ys(a){a=a|0;r[a>>2]=16012;if(p[a+51|0]<=-1){Z(r[a+40>>2])}return a|0}function tv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(mb(a,r[b+8>>2],0)){_e(b,c,d)}}function ih(a){var b=0;b=S-16|0;S=b;a=r[af(b+8|0,Hb(a))>>2];S=b+16|0;return a}function Zs(a){a=a|0;r[a>>2]=14964;if(p[a+35|0]<=-1){Z(r[a+24>>2])}return a|0}function As(a){a=a|0;r[a>>2]=15892;if(p[a+51|0]<=-1){Z(r[a+40>>2])}return a|0}function ie(a,b){var c=0;c=a;a=(b>>>0)/100|0;return he(he(c,a),b-x(a,100)|0)}function Zm(a,b){a=a|0;b=b|0;a=r[a+12>>2];return U[r[r[a>>2]+220>>2]](a,b)|0}function Xm(a,b){a=a|0;b=b|0;a=r[a+12>>2];return U[r[r[a>>2]+232>>2]](a,b)|0}function Vm(a,b){a=a|0;b=b|0;a=r[a+12>>2];return U[r[r[a>>2]+228>>2]](a,b)|0}function Sm(a,b){a=a|0;b=b|0;a=r[a+12>>2];return U[r[r[a>>2]+248>>2]](a,b)|0}function Sg(a,b,c,d){r[a+12>>2]=0;r[a+8>>2]=d;r[a+4>>2]=c;r[a>>2]=b;return a}function Pm(a,b){a=a|0;b=b|0;a=r[a+12>>2];return U[r[r[a>>2]+260>>2]](a,b)|0}function Om(a,b){a=a|0;b=b|0;a=r[a+12>>2];return U[r[r[a>>2]+264>>2]](a,b)|0}function wq(){var a=0;a=aa(12);r[a+8>>2]=0;r[a>>2]=0;r[a+4>>2]=0;return a|0}function gd(a,b,c){var d=0;d=S-16|0;S=d;r[d+12>>2]=c;Ch(a,b,c,0,0);S=d+16|0}function Ya(a,b,c,d){var e=0;e=S-16|0;S=e;r[e+12>>2]=d;Wa(a,b,c,d);S=e+16|0}function he(a,b){b=t[(b<<1)+64528>>1];p[a|0]=b;p[a+1|0]=b>>>8;return a+2|0}function az(a){var b=0;b=a&31;a=0-a&31;return(-1>>>b&-2)<<b|(-1<<a&-2)>>>a}function Uq(a,b){a=a|0;b=b|0;a=r[a+12>>2];return U[r[r[a>>2]+8>>2]](a,b)|0}function mo(a){a=a|0;var b=0;if(a){b=r[a>>2];if(b){r[a+4>>2]=b;Z(b)}Z(a)}}function Lv(a,b){var c=0,d=0;c=S-16|0;S=c;d=df(b,a);S=c+16|0;return d?b:a}function Jv(a,b){var c=0,d=0;c=S-16|0;S=c;d=df(a,b);S=c+16|0;return d?b:a}function zs(a){a=a|0;r[a>>2]=15892;if(p[a+51|0]<=-1){Z(r[a+40>>2])}Z(a)}function xs(a){a=a|0;r[a>>2]=16012;if(p[a+51|0]<=-1){Z(r[a+40>>2])}Z(a)}function ba(a){if(!(r[a+20>>2]!=1|p[a+35|0]>-1)){Z(r[a+24>>2])}return a}function Ys(a){a=a|0;r[a>>2]=14964;if(p[a+35|0]<=-1){Z(r[a+24>>2])}Z(a)}function Zc(a,b){if(!r[b+20>>2]){return r[b+24>>2]}return za(a+88|0,b)}function Ye(a,b,c){if(!(r[a+28>>2]==1|r[a+4>>2]!=(b|0))){r[a+28>>2]=c}}function mt(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return 0}function km(a,b){var c=0;c=r[a>>2]==1;return za(b+316|0,a+16|0)?c|2:c}function Sv(a,b,c){var d=0;d=S-16|0;S=d;a=Rv(a,b,c);S=d+16|0;return a}function js(a){a=a|0;r[a>>2]=17900;ba(a+72|0);ba(a+36|0);return a|0}function Hr(a){a=a|0;r[a>>2]=20204;ba(a+72|0);ba(a+36|0);return a|0}function Dr(a){a=a|0;r[a>>2]=20416;ba(a+72|0);ba(a+36|0);return a|0}function ag(a,b,c){r[a+96>>2]=b;return(Cl(a+24|0,r[c+24>>2])|0)==1}function Ym(a){a=a|0;a=r[a+12>>2];return U[r[r[a>>2]+224>>2]](a)|0}function Nm(a){a=a|0;a=r[a+12>>2];return U[r[r[a>>2]+352>>2]](a)|0}function Ke(a,b){a=a|0;b=b|0;return(mm(a,r[a+8>>2],b+36|0)|0)==1|0}function ki(a,b){a=a|0;b=b|0;return(r[b+4>>2]==57672?a+4|0:0)|0}function ei(a,b){a=a|0;b=b|0;return(r[b+4>>2]==58036?a+4|0:0)|0}function Xd(a){a=a|0;var b=0;b=r[a+4>>2];r[a+4>>2]=0;return b|0}function To(a){a=a|0;var b=0;b=r[a+8>>2];r[a+8>>2]=0;return b|0}function Sj(a,b){a=a|0;b=b|0;return(r[b+4>>2]==46348?a+4|0:0)|0}function Em(a,b){a=a|0;b=b|0;return(r[b+4>>2]==34104?a+4|0:0)|0}function Uj(a,b){a=a|0;b=b|0;r[b>>2]=46152;r[b+4>>2]=r[a+4>>2]}function xg(a){if(a>>>0>=14){K();H()}return r[(a<<2)+1608>>2]}function pf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function hs(a){a=a|0;r[a>>2]=17900;ba(a+72|0);ba(a+36|0);Z(a)}function Vc(a){if(a>>>0>=14){K();H()}return r[(a<<2)+1664>>2]}function Gr(a){a=a|0;r[a>>2]=20204;ba(a+72|0);ba(a+36|0);Z(a)}function Br(a){a=a|0;r[a>>2]=20416;ba(a+72|0);ba(a+36|0);Z(a)}function Dc(a,b){var c=0;c=r[b+16>>2];r[b+16>>2]=0;r[a>>2]=c}function qh(a,b){if(b>>>0<=9){return oh(a,b)}return he(a,b)}function we(a,b){if(b){we(a,r[b>>2]);we(a,r[b+4>>2]);Z(b)}}function rc(a){if(tc(a)){return r[a+4>>2]}return s[a+11|0]}function nc(a,b){if(b){nc(a,r[b>>2]);nc(a,r[b+4>>2]);Z(b)}}function lf(a,b){if(b){lf(a,r[b>>2]);lf(a,r[b+4>>2]);Z(b)}}function hh(a,b,c){var d=0;d=S-16|0;S=d;Av(a,b,c);S=d+16|0}function Se(a,b){if(b){Se(a,r[b>>2]);Se(a,r[b+4>>2]);Z(b)}}function tb(a,b){if(!(!a|!b)){return(a|0)!=(b|0)}return 0}function _f(a,b,c){r[a+96>>2]=b;return(Ce(a+24|0,c)|0)==1}function yr(a){a=a|0;r[a>>2]=20628;ba(a+36|0);return a|0}function wr(a){a=a|0;r[a>>2]=20740;ba(a+36|0);return a|0}function ur(a){a=a|0;r[a>>2]=208Line truncated
|
||||
|
||||
|
||||
|
||||
function Rj(a){a=a|0;return 46452}function Dm(a){a=a|0;return 34284}function Ce(a,b){La(a,b);return 0}function Ut(a){a=a|0;if(a){Z(a)}}function oc(a){a=a|0;return a|0}function jh(a,b){return Jv(a,b)}function wb(a,b){p[a|0]=s[b|0]}function bf(a,b){lh(a,b,fa(b))}function vn(a){a=a|0;Z(Ue(a))}function Xa(a){a=a|0;return 0}function ge(a,b){p[a+11|0]=b}function ee(a,b){r[a>>2]=b}function Ca(a){a=a|0;Z(a)}function $e(a,b){Cv(a,b)}function na(){Ic();H()}function Ic(){K();H()}function mc(a){a=a|0}function bi(){Wv()}function $n(){}
|
||||
// EMSCRIPTEN_END_FUNCS
|
||||
b=s;ez(yz);var U=cz([null,Ue,vn,oa,Wd,Vd,Wg,Wg,Bm,ym,Ne,Og,oa,oa,oa,oa,Kg,Kg,Wd,oa,Vd,oa,Ke,Ke,Ke,Wd,Vd,oa,Fg,oa,oa,Fg,oa,fm,_l,Sl,Yc,Yc,Yc,Yc,Yc,Ne,oa,oa,oa,oa,Ne,Og,oa,oa,oa,oa,Wd,oa,Vd,Kl,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,Ci,vi,ri,Pc,oa,Xa,Lb,Lb,Xa,oa,Ry,Ny,xy,jy,Xa,oa,cy,pf,Jx,Ax,sx,rx,qx,Xa,oa,jx,$w,Xa,oa,Qw,Fw,Xa,oa,tw,nw,Xa,oa,jw,cw,Zv,ff,oa,Xa,oa,Tv,Ov,Xa,oa,Nv,Xa,oa,oa,Kv,oa,Dv,oa,Xa,oa,oa,cd,cd,cd,oa,cd,oa,oa,oa,kv,gv,fv,ev,dv,bv,av,$u,_u,Zu,Yu,Xu,Wu,Tu,Su,Ru,Qu,Pu,Ou,Nu,Mu,Xa,Lu,Ku,Iu,Hu,Gu,Fu,Eu,Du,Cu,Bu,Au,zu,xu,wu,vu,uu,tu,su,ru,qu,pu,ou,mu,lu,ku,ju,iu,hu,gu,fu,eu,du,bu,au,$t,_t,Zt,Yt,Xt,Wt,Vt,St,Rt,Xa,Qt,Pt,Ot,oa,Nt,Mt,Lt,ff,Kt,Jt,Gt,Et,oa,Xa,oa,Dt,Ct,Bt,ff,At,oa,Xa,oa,oa,Xa,oa,Lb,yt,Lb,xt,wt,Lb,oa,vt,ut,Lb,oa,Lb,Xa,oa,cd,pf,Xa,oa,pf,oa,oa,Xa,oa,oa,Lb,st,qt,pt,Lb,ot,nt,oa,mt,oa,cd,oa,Lb,cd,Xa,oa,oa,lt,Xa,kt,jt,it,ht,ft,et,dt,ct,bt,at,$s,_s,Zs,Ys,Ws,Vs,Us,Ts,Ss,Rs,Ks,Qs,Ps,Os,Ms,Ls,Js,Is,Hs,Gs,Fs,Es,Ds,Bs,As,zs,ys,xs,ws,vs,us,ts,ss,qs,oc,Ca,Ca,Ca,Ca,Ca,Ca,Ca,Ca,ps,os,ns,ms,ls,ks,js,hs,gs,fs,es,ds,cs,bs,Ca,Ca,Ca,Ca,as,$r,_r,Xr,Wr,Vr,Ca,Ur,Tr,Sr,Rr,Qr,Pr,Or,Mr,Ca,Lr,Kr,Ca,Ca,Jr,Ir,Ca,Hr,Gr,Fr,Er,Dr,Br,Ar,zr,yr,xr,wr,vr,ur,tr,sr,qr,pr,or,Ca,Ca,Ca,Ca,Ca,nr,mr,lr,kr,jr,ir,Ca,hr,fr,er,dr,Ca,Ca,Ca,Ca,Ca,Ca,cr,br,ar,$q,Xq,Wq,oc,Ca,Uq,Tq,Sq,Cp,Rq,Qq,Bp,Ap,zp,Pq,Oq,Nq,yp,xp,wp,Mq,Lq,Kq,Jq,Iq,Gq,vp,up,tp,sp,rp,qp,pp,Fq,op,np,mp,Eq,lp,kp,jp,Dq,ip,hp,gp,fp,ep,dp,Cq,cp,bp,ap,$o,_o,Zo,Bq,Xo,Aq,Zm,Ym,Vm,Xm,Wm,Um,Tm,Sm,Rm,Qm,Pm,Om,Wo,So,Vo,Uo,Ro,Qo,Po,No,zq,yq,xq,Oo,vq,Mo,Lo,Ko,Jo,Ho,Go,Fo,Eo,Nm,uq,tq,sq,Do,Co,rq,qq,pq,Bo,Ao,zo,yo,oq,wo,vo,uo,to,so,ro,qo,po,oo,lo,no,ko,jo,io,ho,go,fo,eo,co,Zn,bo,_n,nq,Xn,Wn,mq,Un,Tn,Vn,Yo,Sn,kq,jq,Yn,Rn,Pn,iq,On,Nn,hq,Mn,Ln,Kn,Jn,In,Hn,Gn,Fn,En,Dn,gq,Cn,Bn,An,zn,yn,xn,fq,eq,dq,wn,cq,bq,un,tn,_p,Zp,sn,Yp,rn,qn,Pp,Op,pn,ln,Sp,kn,Rp,jn,hn,gn,Np,Mp,Lp,Kp,Jp,Ip,Hp,fn,Gp,en,Fp,dn,Ep,Dp,cn,bn,an,$m,_m,Xp,Wp,Vp,on,Up,Tp,nn,mn,oc,Ca,Im,Hm,mc,Ca,Gm,Em,Dm,wm,vm,um,oa,oa,oa,oa,oa,oa,oa,oa,oa,tm,oa,oa,oa,oa,sm,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,oa,Nl,Ml,mc,Ql,Pl,Ol,oc,Ca,Vj,Uj,mc,Ca,Tj,Sj,Rj,Oj,Nj,Tf,Mj,ze,Lj,Kj,Jj,Ij,Hj,Gj,Tf,Fj,Sf,Ej,Dj,Cj,Bj,Aj,zj,Rf,yj,xj,vj,uj,ze,tj,sj,rj,qj,pj,oj,nj,mj,kj,jj,ij,hj,gj,fj,ej,dj,cj,bj,aj,$i,_i,Zi,Yi,Sf,Xi,Wi,Vi,ze,Ui,Ti,Pf,Si,ye,Ri,ye,ye,Pf,Qi,Pi,Oi,Rf,yi,wi,ud,td,Hf,Hf,ui,ti,re,Gf,Ff,Ff,ud,td,qe,qe,qe,ud,td,Ef,Ef,si,qi,pi,Qc,Qc,Qc,Qc,Qc,re,re,Gf,ud,td,oi,oc,Ca,ni,mi,mc,Ca,li,ki,ji,Ca,ii,gi,mc,Ca,fi,ei,di,ty,ci,Qy,Ly,oc,Ca,le,Oh,le,le,Oh,le,by,ay,$x,_x,Zx,Yx,Xx,Wx,Vx,Tx,Sx,Rx,Qx,Px,Ox,Nx,Mx,Lx,Kx,Ix,Hx,Gx,Fx,Nh,Nh,Ex,Dx,of,Cx,Bx,of,zx,yx,of,Ca,jd,px,je,ox,nx,mx,lx,kx,ix,jd,hx,jd,gx,fx,ex,dx,cx,je,Sb,bx,ax,_w,Zw,je,Yw,Xw,Ww,Vw,Uw,Tw,Sw,Rw,Pw,Ow,Nw,Mw,Lw,Kw,Jw,Iw,Hw,Gw,Ew,Dw,Cw,Bw,Sb,jd,Aw,zw,yw,je,xw,ww,Sb,vw,Sb,Sb,Sb,Sb,Sb,jd,sw,rw,Sb,pw,gw,fw,ew,dw,ow,oc,Ca,mc,mc,vv,lv,ov,tv,Ca,mv,pv,sv,Ca,nv,qv,rv]);function mz(){return o.byteLength/65536|0}function nz(zz){zz=zz|0;var V=mz()|0;var W=V+zz|0;if(V<W&&W<65536){var X=new ArrayBuffer(x(W,65536));var Y=new Int8Array(X);Y.set(p);p=new Int8Array(X);q=new Int16Array(X);r=new Int32Array(X);s=new Uint8Array(X);t=new Uint16Array(X);u=new Uint32Array(X);v=new Float32Array(X);w=new Float64Array(X);o=X;n.buffer=o;b=s}return V}return{"j":U,"k":bi,"l":Wy,"m":Ut,"n":Zr,"o":aq,"p":ao,"q":Cm,"r":Tl,"s":Qk,"t":lj,"u":Vy,"v":Ux,"w":uw,"x":Iv,"y":cv,"z":Uu,"A":Ju,"B":yu,"C":nu,"D":cu,"E":Tt,"F":It,"G":zt,"H":rt,"I":gt,"J":Xs,"K":Ns,"L":Cs,"M":rs,"N":is,"O":Nr,"P":Cr,"Q":rr,"R":gr,"S":_q,"T":Hq,"U":wq,"V":lq,"W":$p,"X":Qp,"Y":$c,"Z":Xd,"_":_g,"$":$c,"aa":Xd,"ba":$c,"ca":Xd,"da":_g,"ea":$c,"fa":Xd,"ga":To,"ha":Io,"ia":$c,"ja":xo,"ka":mo,"la":$n,"ma":Z,"na":$d}}return lz(oz)}
|
||||
|
||||
|
||||
// EMSCRIPTEN_END_ASM
|
||||
|
||||
|
||||
|
||||
|
||||
)(asmLibraryArg)},instantiate:function(binary,info){return{then:function(ok){var module=new WebAssembly.Module(binary);ok({"instance":new WebAssembly.Instance(module)})}}},RuntimeError:Error};wasmBinary=[];if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":2147483648/65536})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAborLine truncated
|
||||
|
||||
|
||||
return WabtModule.ready
|
||||
}
|
||||
);
|
||||
})();
|
||||
if (typeof exports === 'object' && typeof module === 'object')
|
||||
module.exports = WabtModule;
|
||||
else if (typeof define === 'function' && define['amd'])
|
||||
define([], function() { return WabtModule; });
|
||||
else if (typeof exports === 'object')
|
||||
exports["WabtModule"] = WabtModule;
|
||||
@@ -22,6 +22,7 @@ import hooksFloatManipPure from './md/hooks-float-manip-pure.md'
|
||||
import hooksFloatOnePure from './md/hooks-float-one-pure.md'
|
||||
import hooksFloatPure from './md/hooks-float-pure.md'
|
||||
import hooksGuardCalled from './md/hooks-guard-called.md'
|
||||
import hooksGuardCallNonConst from './md/hooks-guard-call-non-const.md'
|
||||
import hooksGuardInFor from './md/hooks-guard-in-for.md'
|
||||
import hooksGuardInWhile from './md/hooks-guard-in-while.md'
|
||||
import hooksHashBufLen from './md/hooks-hash-buf-len.md'
|
||||
@@ -70,6 +71,7 @@ const docs: { [key: string]: string } = {
|
||||
'hooks-float-one-pure': hooksFloatOnePure,
|
||||
'hooks-float-pure': hooksFloatPure,
|
||||
'hooks-guard-called': hooksGuardCalled,
|
||||
'hooks-guard-call-non-const': hooksGuardCallNonConst,
|
||||
'hooks-guard-in-for': hooksGuardInFor,
|
||||
'hooks-guard-in-while': hooksGuardInWhile,
|
||||
'hooks-hash-buf-len': hooksHashBufLen,
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
# hooks-guard-call-non-const
|
||||
|
||||
Only compile-time constants can be used as an argument in loop GUARD call. This check warns if a non compile-time constant is used.
|
||||
It also checks whether a compile-time constant is used as a first argument of `_g()` call and whether it is a unique value. If not - it warns.
|
||||
|
||||
[Read more](https://xrpl-hooks.readme.io/v2.0/docs/loops-and-guarding)
|
||||
@@ -1,14 +1,35 @@
|
||||
# hooks-guard-in-for
|
||||
|
||||
A guard is a marker that must be placed in your code at the top of each loop. Consider the following for-loop in C:
|
||||
Consider the following for-loop in C:
|
||||
|
||||
```c
|
||||
#define GUARD(maxiter) _g(__LINE__, (maxiter)+1)
|
||||
|
||||
for (int i = 0; GUARD(3), i < 3; ++i)
|
||||
#define GUARD(maxiter) _g(__LINE__, (maxiter)+1)
|
||||
for (int i = 0; GUARD(3), i < 3; ++i)
|
||||
```
|
||||
|
||||
<BR/>
|
||||
This is the only way to satisfy the guard rule when using a for-loop in C.
|
||||
To satisfy the guard rule when using a for-loop in C guard should be
|
||||
placed either in the condition part of the loop, or as a first call in loop body, e.g.
|
||||
|
||||
```c
|
||||
for(int i = 0; i < 3; ++i) {
|
||||
GUARD(3);
|
||||
}
|
||||
```
|
||||
|
||||
In case of nested loops, the guard limit value should be
|
||||
multiplied by a number of iterations in each loop, e.g.
|
||||
|
||||
```c
|
||||
for(int i = 0; GUARD(3), i < 3; ++i) {
|
||||
for (int j = 0; GUARD(17), j < 5; ++j)
|
||||
}
|
||||
```
|
||||
|
||||
```
|
||||
(most descendant loop iterations + 1) * (each parent loops iterations) - 1
|
||||
```
|
||||
|
||||
This check will warn if the GUARD call is missing and also it will propose a GUARD value based on the for loop initial value,
|
||||
the increment and loop condition.
|
||||
|
||||
[Read more](https://xrpl-hooks.readme.io/v2.0/docs/loops-and-guarding)
|
||||
Reference in new issue
Block a user