@attestify/cli 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -0
- package/dist/index.js +1184 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/config.ts","../src/output.ts"],"sourcesContent":["/**\n * Attestify CLI\n * Command-line tool for the Hedera attestation protocol\n */\nimport { Command } from 'commander';\nimport { readFileSync } from 'fs';\nimport { loadConfig } from './config';\nimport { formatOutput, formatError } from './output';\n\nasync function createService(): Promise<import('@attestify/sdk').HederaAttestService> {\n const config = loadConfig();\n const { HederaAttestService } = await import('@attestify/sdk');\n return new HederaAttestService(config);\n}\n\nfunction readJsonFile(filePath: string): unknown {\n return JSON.parse(readFileSync(filePath, 'utf-8'));\n}\n\nconst program = new Command();\nprogram\n .name('attestify')\n .description('Attestify CLI — interact with the Hedera attestation protocol')\n .version('0.1.0')\n .option('--json', 'Output results as JSON');\n\n// ─── Schema Commands ──────────────────────────────────────────────────────────\n\nconst schema = program.command('schema').description('Manage attestation schemas');\n\nschema.command('create')\n .description('Register a new schema')\n .option('--definition <definition>', 'Schema definition string')\n .option('--revocable', 'Whether attestations can be revoked', false)\n .option('--resolver <resolver>', 'Resolver contract address')\n .option('--file <file>', 'Path to JSON file with schema parameters')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n let definition: string;\n let revocable: boolean;\n let resolver: string | undefined;\n if (opts.file) {\n const d = readJsonFile(opts.file) as Record<string, unknown>;\n definition = d.definition as string;\n revocable = (d.revocable as boolean) ?? false;\n resolver = d.resolver as string | undefined;\n } else {\n if (!opts.definition) throw new Error('Either --definition or --file is required');\n definition = opts.definition;\n revocable = opts.revocable;\n resolver = opts.resolver;\n }\n const service = await createService();\n const result = await service.registerSchema({ definition, revocable, resolver });\n if (result.success) {\n console.log(formatOutput({ schemaUid: result.data!.schemaUid }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nschema.command('fetch')\n .description('Get schema by UID')\n .requiredOption('--uid <uid>', 'Schema UID to fetch')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.getSchema(opts.uid);\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nschema.command('list')\n .description('List schemas (optionally filter by authority address)')\n .option('--authority <address>', 'Filter by authority address')\n .option('--limit <limit>', 'Max results', '25')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.listSchemas({\n authority: opts.authority,\n limit: parseInt(opts.limit, 10) || 25,\n });\n if (result.success) {\n const schemas = result.data!;\n if (jsonFlag) {\n console.log(JSON.stringify({ success: true, count: schemas.length, data: schemas }, null, 2));\n } else {\n console.log(`Found ${schemas.length} schema(s)\\n`);\n for (const s of schemas) {\n console.log(` UID: ${s.uid}`);\n console.log(` Definition: ${s.definition}`);\n console.log(` Authority: ${s.authorityAddress}`);\n console.log(` Revocable: ${s.revocable}`);\n console.log(` HCS Topic: ${s.hcsTopicId || 'N/A'}`);\n console.log(` Created: ${s.createdAt}`);\n console.log('');\n }\n }\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Attestation Commands ─────────────────────────────────────────────────────\n\nconst attestation = program.command('attestation').description('Manage attestations');\n\nattestation.command('create')\n .description('Create a new attestation')\n .requiredOption('--schema-uid <uid>', 'Schema UID to attest against')\n .requiredOption('--subject <address>', 'Subject address')\n .requiredOption('--data <data>', 'ABI-encoded attestation data (hex)')\n .option('--expiration <timestamp>', 'Expiration timestamp (0 = no expiration)')\n .option('--file <file>', 'Path to JSON file with attestation parameters')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n let schemaUid: string;\n let subject: string;\n let data: string;\n let expirationTime: number | undefined;\n if (opts.file) {\n const d = readJsonFile(opts.file) as Record<string, unknown>;\n schemaUid = d.schemaUid as string;\n subject = d.subject as string;\n data = d.data as string;\n expirationTime = d.expirationTime as number | undefined;\n } else {\n schemaUid = opts.schemaUid;\n subject = opts.subject;\n data = opts.data;\n expirationTime = opts.expiration ? parseInt(opts.expiration, 10) : undefined;\n }\n const service = await createService();\n const result = await service.createAttestation({ schemaUid, subject, data, expirationTime });\n if (result.success) {\n console.log(formatOutput({ attestationUid: result.data!.attestationUid }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nattestation.command('fetch')\n .description('Get attestation by UID')\n .requiredOption('--uid <uid>', 'Attestation UID to fetch')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.getAttestation(opts.uid);\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nattestation.command('list')\n .description('List attestations (filter by attester, subject, or schema)')\n .option('--attester <address>', 'Filter by attester address')\n .option('--subject <address>', 'Filter by subject address')\n .option('--schema-uid <uid>', 'Filter by schema UID')\n .option('--limit <limit>', 'Max results', '25')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.listAttestations({\n attester: opts.attester,\n subject: opts.subject,\n schemaUid: opts.schemaUid,\n limit: parseInt(opts.limit, 10) || 25,\n });\n if (result.success) {\n const attestations = result.data!;\n if (jsonFlag) {\n console.log(JSON.stringify({ success: true, count: attestations.length, data: attestations }, null, 2));\n } else {\n console.log(`Found ${attestations.length} attestation(s)\\n`);\n for (const a of attestations) {\n const status = a.revoked ? 'Revoked' : (a.expirationTime && new Date(a.expirationTime) < new Date() ? 'Expired' : 'Active');\n console.log(` UID: ${a.uid}`);\n console.log(` Schema: ${a.schemaUid}`);\n console.log(` Attester: ${a.attesterAddress}`);\n console.log(` Subject: ${a.subjectAddress}`);\n console.log(` Status: ${status}`);\n console.log(` Created: ${a.createdAt}`);\n console.log('');\n }\n }\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nattestation.command('revoke')\n .description('Revoke an attestation')\n .requiredOption('--uid <uid>', 'Attestation UID to revoke')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.revokeAttestation(opts.uid);\n if (result.success) {\n console.log(formatOutput({ revoked: true, uid: opts.uid }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Authority Commands ───────────────────────────────────────────────────────\n\nconst authority = program.command('authority').description('Manage authorities');\n\nauthority.command('register')\n .description('Register as an authority')\n .requiredOption('--metadata <metadata>', 'Authority metadata string')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.registerAuthority(opts.metadata);\n if (result.success) {\n console.log(formatOutput({ registered: true }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nauthority.command('fetch')\n .description('Get authority info by address')\n .requiredOption('--address <address>', 'Authority address to fetch')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.getAuthority(opts.address);\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nauthority.command('verify')\n .description('Verify or unverify an authority (admin only — contract owner)')\n .requiredOption('--address <address>', 'Authority address to verify/unverify')\n .option('--revoke', 'Unverify the authority instead of verifying', false)\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const verified = !opts.revoke;\n const result = await service.setAuthorityVerification(opts.address, verified);\n if (result.success) {\n console.log(formatOutput({ address: opts.address, verified }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Profile Command ─────────────────────────────────────────────────────────\n\nprogram.command('profile')\n .description('View full profile for an address (authority, schemas, attestations)')\n .requiredOption('--address <address>', 'Wallet address to look up')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.getProfile(opts.address);\n if (result.success) {\n const p = result.data!;\n if (jsonFlag) {\n console.log(JSON.stringify({ success: true, data: p }, null, 2));\n } else {\n console.log(`Profile: ${p.address}\\n`);\n\n // Authority\n if (p.authority) {\n console.log('── Authority ──');\n console.log(` Status: ${p.authority.isVerified ? 'Verified ✓' : 'Unverified'}`);\n console.log(` Metadata: ${p.authority.metadata || '—'}`);\n console.log(` Since: ${p.authority.createdAt}`);\n console.log('');\n } else {\n console.log('── Authority ──');\n console.log(' Not registered as an authority\\n');\n }\n\n // Schemas\n console.log(`── Schemas (${p.schemas.length}) ──`);\n if (p.schemas.length === 0) {\n console.log(' No schemas created\\n');\n } else {\n for (const s of p.schemas) {\n console.log(` ${s.uid}`);\n console.log(` ${s.definition}`);\n console.log(` Revocable: ${s.revocable} | HCS: ${s.hcsTopicId || 'N/A'} | ${s.createdAt}`);\n }\n console.log('');\n }\n\n // Attestations issued\n console.log(`── Attestations Issued (${p.attestationsIssued.length}) ──`);\n if (p.attestationsIssued.length === 0) {\n console.log(' No attestations issued\\n');\n } else {\n for (const a of p.attestationsIssued) {\n console.log(` ${a.uid}`);\n console.log(` Subject: ${a.subjectAddress} | ${a.revoked ? 'Revoked' : 'Active'} | ${a.createdAt}`);\n }\n console.log('');\n }\n\n // Attestations received\n console.log(`── Attestations Received (${p.attestationsReceived.length}) ──`);\n if (p.attestationsReceived.length === 0) {\n console.log(' No attestations about this address\\n');\n } else {\n for (const a of p.attestationsReceived) {\n console.log(` ${a.uid}`);\n console.log(` Attester: ${a.attesterAddress} | ${a.revoked ? 'Revoked' : 'Active'} | ${a.createdAt}`);\n }\n console.log('');\n }\n }\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── HCS Audit Log Commands ─────────────────────────────────────────────────\n\nconst hcs = program.command('hcs').description('HCS audit log operations');\n\nhcs.command('topics')\n .description('List configured HCS topic IDs')\n .action(async () => {\n const jsonFlag = program.opts().json;\n try {\n const config = loadConfig();\n const topics: Record<string, string> = {};\n if (config.hcsTopicIds?.schemas) topics.schemas = config.hcsTopicIds.schemas;\n if (config.hcsTopicIds?.attestations) topics.attestations = config.hcsTopicIds.attestations;\n if (config.hcsTopicIds?.authorities) topics.authorities = config.hcsTopicIds.authorities;\n if (config.hcsTopicId && Object.keys(topics).length === 0) topics.default = config.hcsTopicId;\n\n if (Object.keys(topics).length === 0) {\n console.log(formatError('CONFIGURATION_ERROR', 'No HCS topics configured. Set HCS_TOPIC_SCHEMAS, HCS_TOPIC_ATTESTATIONS, HCS_TOPIC_AUTHORITIES env vars.', jsonFlag));\n return;\n }\n\n const data: Record<string, unknown> = {};\n for (const [name, id] of Object.entries(topics)) {\n data[name] = { topicId: id, hashscanUrl: `https://hashscan.io/testnet/topic/${id}` };\n }\n console.log(formatOutput(data, jsonFlag));\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nhcs.command('messages')\n .description('Fetch HCS audit messages from a topic')\n .requiredOption('--topic <topicId>', 'HCS topic ID (e.g. 0.0.12345)')\n .option('--limit <limit>', 'Number of messages to fetch', '25')\n .option('--order <order>', 'Sort order: asc or desc', 'desc')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const limit = Math.min(parseInt(opts.limit, 10) || 25, 100);\n const order = opts.order === 'asc' ? 'asc' : 'desc';\n const mirrorUrl = 'https://testnet.mirrornode.hedera.com';\n const url = `${mirrorUrl}/api/v1/topics/${opts.topic}/messages?limit=${limit}&order=${order}`;\n\n const response = await fetch(url);\n if (!response.ok) {\n console.error(formatError('NETWORK_ERROR', `Mirror node returned ${response.status}`, jsonFlag));\n process.exitCode = 1;\n return;\n }\n\n const raw = await response.json() as { messages?: Array<{ consensus_timestamp: string; sequence_number: number; message: string; payer_account_id: string }> };\n const messages = (raw.messages || []).map((msg) => {\n let decoded: unknown = null;\n try {\n const buf = Buffer.from(msg.message, 'base64');\n decoded = JSON.parse(buf.toString('utf-8'));\n } catch {\n decoded = msg.message;\n }\n return {\n sequenceNumber: msg.sequence_number,\n consensusTimestamp: msg.consensus_timestamp,\n payer: msg.payer_account_id,\n content: decoded,\n };\n });\n\n const data: Record<string, unknown> = {\n topicId: opts.topic,\n hashscanUrl: `https://hashscan.io/testnet/topic/${opts.topic}`,\n messageCount: messages.length,\n messages,\n };\n\n console.log(formatOutput(data, jsonFlag));\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Whitelist Resolver Commands ─────────────────────────────────────────────\n\nconst whitelist = program.command('whitelist').description('WhitelistResolver operations');\n\nwhitelist.command('add')\n .description('Add an address to the whitelist (admin only)')\n .requiredOption('--account <address>', 'Address to whitelist')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.whitelistAdd(opts.account);\n if (result.success) {\n console.log(formatOutput({ added: true, account: opts.account }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nwhitelist.command('remove')\n .description('Remove an address from the whitelist (admin only)')\n .requiredOption('--account <address>', 'Address to remove')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.whitelistRemove(opts.account);\n if (result.success) {\n console.log(formatOutput({ removed: true, account: opts.account }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nwhitelist.command('check')\n .description('Check if an address is whitelisted')\n .requiredOption('--account <address>', 'Address to check')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.whitelistCheck(opts.account);\n if (result.success) {\n console.log(formatOutput({ account: opts.account, whitelisted: result.data!.whitelisted }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nwhitelist.command('owner')\n .description('Get the whitelist resolver owner address')\n .action(async () => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.whitelistOwner();\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Fee Resolver Commands ──────────────────────────────────────────────────\n\nconst fee = program.command('fee').description('FeeResolver operations');\n\nfee.command('deposit')\n .description('Deposit HBAR into the fee resolver')\n .requiredOption('--amount <hbar>', 'Amount of HBAR to deposit')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.feeDeposit(opts.amount);\n if (result.success) {\n console.log(formatOutput({ deposited: true, amount: opts.amount }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nfee.command('set-fee')\n .description('Set the attestation fee amount (admin only)')\n .requiredOption('--amount <wei>', 'Fee amount in wei (tinybar)')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.feeSetFee(opts.amount);\n if (result.success) {\n console.log(formatOutput({ feeSet: true, amount: opts.amount }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nfee.command('withdraw')\n .description('Withdraw collected fees (admin only)')\n .action(async () => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.feeWithdraw();\n if (result.success) {\n console.log(formatOutput({ withdrawn: true }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nfee.command('get-fee')\n .description('Get the current attestation fee')\n .action(async () => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.feeGetFee();\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nfee.command('balance')\n .description('Check deposited balance for an address')\n .requiredOption('--account <address>', 'Address to check')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.feeGetBalance(opts.account);\n if (result.success) {\n console.log(formatOutput({ account: opts.account, ...result.data! }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nfee.command('owner')\n .description('Get the fee resolver owner address')\n .action(async () => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.feeOwner();\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Token Gated Resolver Commands ──────────────────────────────────────────\n\nconst tokenGated = program.command('token-gated').description('TokenGatedResolver operations');\n\ntokenGated.command('set-config')\n .description('Set token address and minimum balance (admin only)')\n .requiredOption('--token <address>', 'HTS token address')\n .requiredOption('--min-balance <amount>', 'Minimum token balance required')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.tokenGatedSetConfig(opts.token, opts.minBalance);\n if (result.success) {\n console.log(formatOutput({ configured: true, token: opts.token, minBalance: opts.minBalance }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ntokenGated.command('get-config')\n .description('Get current token gate configuration')\n .action(async () => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.tokenGatedGetConfig();\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ntokenGated.command('owner')\n .description('Get the token gated resolver owner address')\n .action(async () => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.tokenGatedOwner();\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── NFT Minting Command ───────────────────────────────────────────────────\n\nprogram.command('nft-mint')\n .description('Mint an HTS NFT credential for an attestation')\n .requiredOption('--subject <address>', 'Subject address to receive the NFT')\n .requiredOption('--attestation-uid <uid>', 'Attestation UID to embed in metadata')\n .requiredOption('--token-id <tokenId>', 'HTS token ID for the NFT collection')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.mintNFT({\n subject: opts.subject,\n attestationUid: opts.attestationUid,\n tokenId: opts.tokenId,\n });\n if (result.success) {\n console.log(formatOutput({ minted: true, serialNumber: result.data!.serialNumber }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Delegation Commands ────────────────────────────────────────────────────\n\nconst delegate = program.command('delegate').description('Delegation operations');\n\ndelegate.command('add')\n .description('Add a delegate who can attest/revoke on your behalf')\n .requiredOption('--address <address>', 'Delegate address to authorize')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.addDelegate(opts.address);\n if (result.success) {\n console.log(formatOutput({ added: true, delegate: opts.address }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ndelegate.command('remove')\n .description('Remove a delegate')\n .requiredOption('--address <address>', 'Delegate address to remove')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.removeDelegate(opts.address);\n if (result.success) {\n console.log(formatOutput({ removed: true, delegate: opts.address }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ndelegate.command('check')\n .description('Check if an address is a delegate of an authority')\n .requiredOption('--authority <address>', 'Authority address')\n .requiredOption('--delegate <address>', 'Delegate address to check')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.isDelegate(opts.authority, opts.delegate);\n if (result.success) {\n console.log(formatOutput({ authority: opts.authority, delegate: opts.delegate, isDelegate: result.data!.isDelegate }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ndelegate.command('list')\n .description('List all delegates for an authority')\n .requiredOption('--authority <address>', 'Authority address')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.getDelegates(opts.authority);\n if (result.success) {\n if (jsonFlag) {\n console.log(JSON.stringify({ success: true, data: result.data!.delegates }, null, 2));\n } else {\n const delegates = result.data!.delegates;\n console.log(`Delegates for ${opts.authority}: ${delegates.length}\\n`);\n for (const d of delegates) {\n console.log(` ${d}`);\n }\n }\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ndelegate.command('attest')\n .description('Create an attestation on behalf of an authority (delegated)')\n .requiredOption('--authority <address>', 'Authority address you are delegating for')\n .requiredOption('--schema-uid <uid>', 'Schema UID')\n .requiredOption('--subject <address>', 'Subject address')\n .requiredOption('--data <data>', 'ABI-encoded attestation data (hex)')\n .option('--expiration <timestamp>', 'Expiration timestamp')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.attestOnBehalf({\n authority: opts.authority,\n schemaUid: opts.schemaUid,\n subject: opts.subject,\n data: opts.data,\n expirationTime: opts.expiration ? parseInt(opts.expiration, 10) : undefined,\n });\n if (result.success) {\n console.log(formatOutput({ attestationUid: result.data!.attestationUid }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ndelegate.command('revoke')\n .description('Revoke an attestation on behalf of the original attester (delegated)')\n .requiredOption('--uid <uid>', 'Attestation UID to revoke')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.revokeOnBehalf(opts.uid);\n if (result.success) {\n console.log(formatOutput({ revoked: true, uid: opts.uid }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Token Reward Resolver Commands ─────────────────────────────────────────\n\nconst tokenReward = program.command('token-reward').description('TokenRewardResolver operations');\n\ntokenReward.command('set-config')\n .description('Set reward token and amount (admin only)')\n .requiredOption('--resolver <address>', 'TokenRewardResolver contract address')\n .requiredOption('--token <address>', 'HTS reward token address')\n .requiredOption('--amount <amount>', 'Reward amount per attestation')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.tokenRewardSetConfig(opts.resolver, opts.token, opts.amount);\n if (result.success) {\n console.log(formatOutput({ configured: true, token: opts.token, amount: opts.amount }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ntokenReward.command('get-config')\n .description('Get current reward configuration')\n .requiredOption('--resolver <address>', 'TokenRewardResolver contract address')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.tokenRewardGetConfig(opts.resolver);\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ntokenReward.command('distributed')\n .description('Check total rewards distributed to a subject')\n .requiredOption('--resolver <address>', 'TokenRewardResolver contract address')\n .requiredOption('--subject <address>', 'Subject address to check')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.tokenRewardGetDistributed(opts.resolver, opts.subject);\n if (result.success) {\n console.log(formatOutput({ subject: opts.subject, ...result.data! }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ntokenReward.command('owner')\n .description('Get the token reward resolver owner')\n .requiredOption('--resolver <address>', 'TokenRewardResolver contract address')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.tokenRewardOwner(opts.resolver);\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Cross-Contract Resolver Commands ───────────────────────────────────────\n\nconst crossContract = program.command('cross-contract').description('CrossContractResolver operations');\n\ncrossContract.command('set-pipeline')\n .description('Set the resolver pipeline (admin only)')\n .requiredOption('--resolver <address>', 'CrossContractResolver contract address')\n .requiredOption('--resolvers <addresses>', 'Comma-separated list of resolver addresses')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const resolvers = opts.resolvers.split(',').map((a: string) => a.trim());\n const service = await createService();\n const result = await service.crossContractSetPipeline(opts.resolver, resolvers);\n if (result.success) {\n console.log(formatOutput({ configured: true, pipeline: resolvers }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ncrossContract.command('get-pipeline')\n .description('Get the current resolver pipeline')\n .requiredOption('--resolver <address>', 'CrossContractResolver contract address')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.crossContractGetPipeline(opts.resolver);\n if (result.success) {\n if (jsonFlag) {\n console.log(JSON.stringify({ success: true, data: result.data!.pipeline }, null, 2));\n } else {\n const pipeline = result.data!.pipeline;\n console.log(`Pipeline (${pipeline.length} resolvers):\\n`);\n pipeline.forEach((addr: string, i: number) => {\n console.log(` ${i + 1}. ${addr}`);\n });\n }\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\ncrossContract.command('owner')\n .description('Get the cross-contract resolver owner')\n .requiredOption('--resolver <address>', 'CrossContractResolver contract address')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.crossContractOwner(opts.resolver);\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Schedule Commands ────────────────────────────────────────────────────────\n\nconst schedule = program.command('schedule').description('Hedera Scheduled Transactions');\n\nschedule.command('revoke')\n .description('Schedule an automatic revocation at a future time')\n .requiredOption('--uid <uid>', 'Attestation UID to revoke')\n .requiredOption('--execute-at <timestamp>', 'Unix timestamp (seconds) when revocation should execute')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.scheduleRevocation({\n attestationUid: opts.uid,\n executeAt: parseInt(opts.executeAt, 10),\n });\n if (result.success) {\n console.log(formatOutput({\n scheduled: true,\n scheduleId: result.data!.scheduleId,\n transactionId: result.data!.transactionId,\n executeAt: new Date(parseInt(opts.executeAt, 10) * 1000).toISOString(),\n }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nschedule.command('status')\n .description('Check the status of a scheduled revocation')\n .requiredOption('--schedule-id <id>', 'Hedera Schedule ID (e.g. 0.0.12345)')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.getScheduledRevocation(opts.scheduleId);\n if (result.success) {\n console.log(formatOutput({\n scheduleId: result.data!.scheduleId,\n executed: result.data!.executed,\n deleted: result.data!.deleted,\n expirationTime: result.data!.expirationTime,\n }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Multi-Sig Authority Commands (Feature 5) ──────────────────────────────\n\nconst multisig = program.command('multisig').description('Multi-sig authority operations');\n\nmultisig.command('create')\n .description('Create a multi-sig authority account with threshold keys')\n .requiredOption('--keys <keys>', 'Comma-separated ECDSA public keys (hex or DER)')\n .requiredOption('--threshold <threshold>', 'Number of required signatures')\n .option('--initial-balance <hbar>', 'Initial HBAR balance', '10')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const publicKeys = opts.keys.split(',').map((k: string) => k.trim());\n const threshold = parseInt(opts.threshold, 10);\n const service = await createService();\n const result = await service.createMultiSigAuthority({\n publicKeys,\n threshold,\n initialBalance: opts.initialBalance,\n });\n if (result.success) {\n console.log(formatOutput({\n created: true,\n accountId: result.data!.accountId,\n threshold: result.data!.threshold,\n totalKeys: result.data!.totalKeys,\n }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nmultisig.command('info')\n .description('Get key structure info for a Hedera account')\n .requiredOption('--account <accountId>', 'Hedera account ID (e.g. 0.0.12345)')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.getAccountKeyInfo(opts.account);\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── Staking Commands (Feature 6) ──────────────────────────────────────────\n\nconst staking = program.command('staking').description('HTS token staking for authorities');\n\nstaking.command('stake')\n .description('Stake HTS tokens as an authority')\n .requiredOption('--token <address>', 'HTS token address')\n .requiredOption('--amount <amount>', 'Amount to stake')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.stakeTokens(opts.token, opts.amount);\n if (result.success) {\n console.log(formatOutput({ staked: true, token: opts.token, amount: opts.amount }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nstaking.command('unstake')\n .description('Unstake HTS tokens')\n .requiredOption('--token <address>', 'HTS token address')\n .requiredOption('--amount <amount>', 'Amount to unstake')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.unstakeTokens(opts.token, opts.amount);\n if (result.success) {\n console.log(formatOutput({ unstaked: true, token: opts.token, amount: opts.amount }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nstaking.command('balance')\n .description('Check staked token balance for an authority')\n .requiredOption('--token <address>', 'HTS token address')\n .requiredOption('--authority <address>', 'Authority address or account ID')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.getStake(opts.token, opts.authority);\n if (result.success) {\n console.log(formatOutput({ authority: opts.authority, ...result.data! }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── File Service Commands (Feature 7) ─────────────────────────────────────\n\nconst fileService = program.command('file-schema').description('Hedera File Service schema storage');\n\nfileService.command('upload')\n .description('Upload a schema definition to Hedera File Service')\n .requiredOption('--definition <definition>', 'Schema definition string')\n .option('--memo <memo>', 'File memo')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.uploadSchemaFile(opts.definition, opts.memo);\n if (result.success) {\n console.log(formatOutput({\n uploaded: true,\n fileId: result.data!.fileId,\n definition: result.data!.definition,\n }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nfileService.command('read')\n .description('Read a schema definition from Hedera File Service')\n .requiredOption('--file-id <fileId>', 'Hedera File ID (e.g. 0.0.12345)')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.readSchemaFile(opts.fileId);\n if (result.success) {\n console.log(formatOutput(result.data! as unknown as Record<string, unknown>, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nfileService.command('register')\n .description('Register a schema from a Hedera File ID (reads definition from File Service)')\n .requiredOption('--file-id <fileId>', 'Hedera File ID containing the schema definition')\n .option('--revocable', 'Whether attestations can be revoked', false)\n .option('--resolver <resolver>', 'Resolver contract address')\n .action(async (opts) => {\n const jsonFlag = program.opts().json;\n try {\n const service = await createService();\n const result = await service.registerSchemaFromFile({\n fileId: opts.fileId,\n revocable: opts.revocable,\n resolver: opts.resolver,\n });\n if (result.success) {\n console.log(formatOutput({ schemaUid: result.data!.schemaUid, fileId: opts.fileId }, jsonFlag));\n } else {\n console.error(formatError(result.error!.type, result.error!.message, jsonFlag));\n process.exitCode = 1;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\n// ─── AI Chat Command ────────────────────────────────────────────────────────\n\nconst ai = program.command('ai')\n .description('Chat with the Attestify AI Agent — natural language interface to the protocol')\n .argument('[message]', 'Message to send (omit for interactive mode)')\n .option('--model <model>', 'OpenAI model name', 'gpt-4o-mini')\n .action(async (message: string | undefined, opts: { model: string }) => {\n const jsonFlag = program.opts().json;\n try {\n const openAIApiKey = process.env.OPENAI_API_KEY;\n if (!openAIApiKey) {\n console.error(formatError('CONFIGURATION_ERROR', 'Missing OPENAI_API_KEY environment variable.', jsonFlag));\n process.exitCode = 1;\n return;\n }\n\n const config = loadConfig();\n const { createAttestifyAgent } = await import('@attestify/sdk/ai');\n const { processMessage } = await createAttestifyAgent({\n accountId: config.operatorAccountId,\n privateKey: config.operatorPrivateKey,\n indexerUrl: config.indexerUrl,\n openAIApiKey,\n modelName: opts.model,\n });\n\n console.log('[Attestify AI] Agent initialized with 17 tools\\n');\n\n if (message) {\n // One-shot mode\n const response = await processMessage(message);\n if (jsonFlag) {\n console.log(JSON.stringify({ success: true, response }, null, 2));\n } else {\n console.log(response);\n }\n } else {\n // Interactive REPL mode\n const readline = await import('readline');\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n\n console.log('Interactive mode — type your message and press Enter. Type \"exit\" to quit.\\n');\n\n const ask = () => {\n rl.question('You: ', async (input: string) => {\n const trimmed = input.trim();\n if (!trimmed || trimmed.toLowerCase() === 'exit') {\n console.log('\\nGoodbye!');\n rl.close();\n return;\n }\n try {\n const response = await processMessage(trimmed);\n console.log(`\\nAgent: ${response}\\n`);\n } catch (err: any) {\n console.error(`\\nError: ${err.message}\\n`);\n }\n ask();\n });\n };\n ask();\n // Keep process alive for REPL\n return;\n }\n } catch (err: any) {\n console.error(formatError('UNKNOWN_ERROR', err.message, jsonFlag));\n process.exitCode = 1;\n }\n });\n\nprogram.parse();","/**\n * CLI Configuration — loads credentials from env vars or config file\n */\n\nimport { config as loadDotenv } from 'dotenv';\nimport { DEFAULT_CONFIG, TESTNET_RESOLVER_ADDRESSES } from '@attestify/sdk';\nimport type { HederaAttestServiceConfig } from '@attestify/sdk';\n\n// Load .env file if present\nloadDotenv();\n\n/**\n * Loads CLI configuration from environment variables.\n * Requires HEDERA_ACCOUNT_ID and HEDERA_PRIVATE_KEY.\n * Defaults to Hedera testnet with standard contract addresses and RPC URL.\n */\nexport function loadConfig(): HederaAttestServiceConfig {\n const accountId = process.env.HEDERA_ACCOUNT_ID;\n const privateKey = process.env.HEDERA_PRIVATE_KEY;\n\n if (!accountId) {\n throw new Error(\n 'Missing HEDERA_ACCOUNT_ID environment variable. ' +\n 'Set it in your environment or in a .env file.',\n );\n }\n\n if (!privateKey) {\n throw new Error(\n 'Missing HEDERA_PRIVATE_KEY environment variable. ' +\n 'Set it in your environment or in a .env file.',\n );\n }\n\n // Build HCS topic config from env vars\n const hcsTopicSchemas = process.env.HCS_TOPIC_SCHEMAS;\n const hcsTopicAttestations = process.env.HCS_TOPIC_ATTESTATIONS;\n const hcsTopicAuthorities = process.env.HCS_TOPIC_AUTHORITIES;\n const hcsTopicId = process.env.HCS_TOPIC_ID; // legacy single topic\n\n const hcsTopicIds = (hcsTopicSchemas || hcsTopicAttestations || hcsTopicAuthorities)\n ? {\n schemas: hcsTopicSchemas,\n attestations: hcsTopicAttestations,\n authorities: hcsTopicAuthorities,\n }\n : undefined;\n\n return {\n ...DEFAULT_CONFIG,\n operatorAccountId: accountId,\n operatorPrivateKey: privateKey,\n indexerUrl: process.env.INDEXER_URL || undefined,\n resolverAddresses: TESTNET_RESOLVER_ADDRESSES,\n ...(hcsTopicIds ? { hcsTopicIds } : {}),\n ...(hcsTopicId && !hcsTopicIds ? { hcsTopicId } : {}),\n };\n}\n","/**\n * CLI Output Formatting — handles --json flag and human-readable output\n */\n\n/**\n * Formats a successful result for CLI output.\n * With --json flag: outputs valid parseable JSON.\n * Without: outputs human-readable key-value pairs.\n */\nexport function formatOutput(data: Record<string, unknown>, json?: boolean): string {\n if (json) {\n return JSON.stringify({ success: true, data }, null, 2);\n }\n\n const lines: string[] = [];\n for (const [key, value] of Object.entries(data)) {\n if (typeof value === 'object' && value !== null) {\n lines.push(`${key}: ${JSON.stringify(value)}`);\n } else {\n lines.push(`${key}: ${value}`);\n }\n }\n return lines.join('\\n');\n}\n\n/**\n * Formats an error for CLI output.\n * With --json flag: outputs valid parseable JSON with error type and message.\n * Without: outputs human-readable error with type and description.\n */\nexport function formatError(type: string, message: string, json?: boolean): string {\n if (json) {\n return JSON.stringify({ success: false, error: { type, message } }, null, 2);\n }\n\n return `Error [${type}]: ${message}`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,uBAAwB;AACxB,gBAA6B;;;ACD7B,oBAAqC;AACrC,iBAA2D;AAAA,IAI3D,cAAAA,QAAW;AAOJ,SAAS,aAAwC;AACtD,QAAM,YAAY,QAAQ,IAAI;AAC9B,QAAM,aAAa,QAAQ,IAAI;AAE/B,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IAEF;AAAA,EACF;AAEA,MAAI,CAAC,YAAY;AACf,UAAM,IAAI;AAAA,MACR;AAAA,IAEF;AAAA,EACF;AAGA,QAAM,kBAAkB,QAAQ,IAAI;AACpC,QAAM,uBAAuB,QAAQ,IAAI;AACzC,QAAM,sBAAsB,QAAQ,IAAI;AACxC,QAAM,aAAa,QAAQ,IAAI;AAE/B,QAAM,cAAe,mBAAmB,wBAAwB,sBAC5D;AAAA,IACE,SAAS;AAAA,IACT,cAAc;AAAA,IACd,aAAa;AAAA,EACf,IACA;AAEJ,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,YAAY,QAAQ,IAAI,eAAe;AAAA,IACvC,mBAAmB;AAAA,IACnB,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,IACrC,GAAI,cAAc,CAAC,cAAc,EAAE,WAAW,IAAI,CAAC;AAAA,EACrD;AACF;;;AChDO,SAAS,aAAa,MAA+B,MAAwB;AAClF,MAAI,MAAM;AACR,WAAO,KAAK,UAAU,EAAE,SAAS,MAAM,KAAK,GAAG,MAAM,CAAC;AAAA,EACxD;AAEA,QAAM,QAAkB,CAAC;AACzB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC/C,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,YAAM,KAAK,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,IAC/C,OAAO;AACL,YAAM,KAAK,GAAG,GAAG,KAAK,KAAK,EAAE;AAAA,IAC/B;AAAA,EACF;AACA,SAAO,MAAM,KAAK,IAAI;AACxB;AAOO,SAAS,YAAY,MAAc,SAAiB,MAAwB;AACjF,MAAI,MAAM;AACR,WAAO,KAAK,UAAU,EAAE,SAAS,OAAO,OAAO,EAAE,MAAM,QAAQ,EAAE,GAAG,MAAM,CAAC;AAAA,EAC7E;AAEA,SAAO,UAAU,IAAI,MAAM,OAAO;AACpC;;;AF3BA,eAAe,gBAAuE;AACpF,QAAM,SAAS,WAAW;AAC1B,QAAM,EAAE,oBAAoB,IAAI,MAAM,OAAO,gBAAgB;AAC7D,SAAO,IAAI,oBAAoB,MAAM;AACvC;AAEA,SAAS,aAAa,UAA2B;AAC/C,SAAO,KAAK,UAAM,wBAAa,UAAU,OAAO,CAAC;AACnD;AAEA,IAAM,UAAU,IAAI,yBAAQ;AAC5B,QACG,KAAK,WAAW,EAChB,YAAY,oEAA+D,EAC3E,QAAQ,OAAO,EACf,OAAO,UAAU,wBAAwB;AAI5C,IAAM,SAAS,QAAQ,QAAQ,QAAQ,EAAE,YAAY,4BAA4B;AAEjF,OAAO,QAAQ,QAAQ,EACpB,YAAY,uBAAuB,EACnC,OAAO,6BAA6B,0BAA0B,EAC9D,OAAO,eAAe,uCAAuC,KAAK,EAClE,OAAO,yBAAyB,2BAA2B,EAC3D,OAAO,iBAAiB,0CAA0C,EAClE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,KAAK,MAAM;AACb,YAAM,IAAI,aAAa,KAAK,IAAI;AAChC,mBAAa,EAAE;AACf,kBAAa,EAAE,aAAyB;AACxC,iBAAW,EAAE;AAAA,IACf,OAAO;AACL,UAAI,CAAC,KAAK,WAAY,OAAM,IAAI,MAAM,2CAA2C;AACjF,mBAAa,KAAK;AAClB,kBAAY,KAAK;AACjB,iBAAW,KAAK;AAAA,IAClB;AACA,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,eAAe,EAAE,YAAY,WAAW,SAAS,CAAC;AAC/E,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,WAAW,OAAO,KAAM,UAAU,GAAG,QAAQ,CAAC;AAAA,IAC3E,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,OAAO,QAAQ,OAAO,EACnB,YAAY,mBAAmB,EAC/B,eAAe,eAAe,qBAAqB,EACnD,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,UAAU,KAAK,GAAG;AAC/C,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,OAAO,QAAQ,MAAM,EAClB,YAAY,uDAAuD,EACnE,OAAO,yBAAyB,6BAA6B,EAC7D,OAAO,mBAAmB,eAAe,IAAI,EAC7C,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,YAAY;AAAA,MACvC,WAAW,KAAK;AAAA,MAChB,OAAO,SAAS,KAAK,OAAO,EAAE,KAAK;AAAA,IACrC,CAAC;AACD,QAAI,OAAO,SAAS;AAClB,YAAM,UAAU,OAAO;AACvB,UAAI,UAAU;AACZ,gBAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,MAAM,OAAO,QAAQ,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC;AAAA,MAC9F,OAAO;AACL,gBAAQ,IAAI,SAAS,QAAQ,MAAM;AAAA,CAAc;AACjD,mBAAW,KAAK,SAAS;AACvB,kBAAQ,IAAI,iBAAiB,EAAE,GAAG,EAAE;AACpC,kBAAQ,IAAI,iBAAiB,EAAE,UAAU,EAAE;AAC3C,kBAAQ,IAAI,iBAAiB,EAAE,gBAAgB,EAAE;AACjD,kBAAQ,IAAI,iBAAiB,EAAE,SAAS,EAAE;AAC1C,kBAAQ,IAAI,iBAAiB,EAAE,cAAc,KAAK,EAAE;AACpD,kBAAQ,IAAI,iBAAiB,EAAE,SAAS,EAAE;AAC1C,kBAAQ,IAAI,EAAE;AAAA,QAChB;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,cAAc,QAAQ,QAAQ,aAAa,EAAE,YAAY,qBAAqB;AAEpF,YAAY,QAAQ,QAAQ,EACzB,YAAY,0BAA0B,EACtC,eAAe,sBAAsB,8BAA8B,EACnE,eAAe,uBAAuB,iBAAiB,EACvD,eAAe,iBAAiB,oCAAoC,EACpE,OAAO,4BAA4B,0CAA0C,EAC7E,OAAO,iBAAiB,+CAA+C,EACvE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,KAAK,MAAM;AACb,YAAM,IAAI,aAAa,KAAK,IAAI;AAChC,kBAAY,EAAE;AACd,gBAAU,EAAE;AACZ,aAAO,EAAE;AACT,uBAAiB,EAAE;AAAA,IACrB,OAAO;AACL,kBAAY,KAAK;AACjB,gBAAU,KAAK;AACf,aAAO,KAAK;AACZ,uBAAiB,KAAK,aAAa,SAAS,KAAK,YAAY,EAAE,IAAI;AAAA,IACrE;AACA,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,kBAAkB,EAAE,WAAW,SAAS,MAAM,eAAe,CAAC;AAC3F,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,gBAAgB,OAAO,KAAM,eAAe,GAAG,QAAQ,CAAC;AAAA,IACrF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,YAAY,QAAQ,OAAO,EACxB,YAAY,wBAAwB,EACpC,eAAe,eAAe,0BAA0B,EACxD,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,eAAe,KAAK,GAAG;AACpD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,YAAY,QAAQ,MAAM,EACvB,YAAY,4DAA4D,EACxE,OAAO,wBAAwB,4BAA4B,EAC3D,OAAO,uBAAuB,2BAA2B,EACzD,OAAO,sBAAsB,sBAAsB,EACnD,OAAO,mBAAmB,eAAe,IAAI,EAC7C,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,iBAAiB;AAAA,MAC5C,UAAU,KAAK;AAAA,MACf,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,MAChB,OAAO,SAAS,KAAK,OAAO,EAAE,KAAK;AAAA,IACrC,CAAC;AACD,QAAI,OAAO,SAAS;AAClB,YAAM,eAAe,OAAO;AAC5B,UAAI,UAAU;AACZ,gBAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,MAAM,OAAO,aAAa,QAAQ,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC;AAAA,MACxG,OAAO;AACL,gBAAQ,IAAI,SAAS,aAAa,MAAM;AAAA,CAAmB;AAC3D,mBAAW,KAAK,cAAc;AAC5B,gBAAM,SAAS,EAAE,UAAU,YAAa,EAAE,kBAAkB,IAAI,KAAK,EAAE,cAAc,IAAI,oBAAI,KAAK,IAAI,YAAY;AAClH,kBAAQ,IAAI,eAAe,EAAE,GAAG,EAAE;AAClC,kBAAQ,IAAI,eAAe,EAAE,SAAS,EAAE;AACxC,kBAAQ,IAAI,eAAe,EAAE,eAAe,EAAE;AAC9C,kBAAQ,IAAI,eAAe,EAAE,cAAc,EAAE;AAC7C,kBAAQ,IAAI,eAAe,MAAM,EAAE;AACnC,kBAAQ,IAAI,eAAe,EAAE,SAAS,EAAE;AACxC,kBAAQ,IAAI,EAAE;AAAA,QAChB;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,YAAY,QAAQ,QAAQ,EACzB,YAAY,uBAAuB,EACnC,eAAe,eAAe,2BAA2B,EACzD,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,kBAAkB,KAAK,GAAG;AACvD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,SAAS,MAAM,KAAK,KAAK,IAAI,GAAG,QAAQ,CAAC;AAAA,IACtE,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,YAAY,QAAQ,QAAQ,WAAW,EAAE,YAAY,oBAAoB;AAE/E,UAAU,QAAQ,UAAU,EACzB,YAAY,0BAA0B,EACtC,eAAe,yBAAyB,2BAA2B,EACnE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,kBAAkB,KAAK,QAAQ;AAC5D,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,YAAY,KAAK,GAAG,QAAQ,CAAC;AAAA,IAC1D,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,UAAU,QAAQ,OAAO,EACtB,YAAY,+BAA+B,EAC3C,eAAe,uBAAuB,4BAA4B,EAClE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,aAAa,KAAK,OAAO;AACtD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,UAAU,QAAQ,QAAQ,EACvB,YAAY,oEAA+D,EAC3E,eAAe,uBAAuB,sCAAsC,EAC5E,OAAO,YAAY,+CAA+C,KAAK,EACvE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,WAAW,CAAC,KAAK;AACvB,UAAM,SAAS,MAAM,QAAQ,yBAAyB,KAAK,SAAS,QAAQ;AAC5E,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,SAAS,KAAK,SAAS,SAAS,GAAG,QAAQ,CAAC;AAAA,IACzE,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,QAAQ,QAAQ,SAAS,EACtB,YAAY,qEAAqE,EACjF,eAAe,uBAAuB,2BAA2B,EACjE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,WAAW,KAAK,OAAO;AACpD,QAAI,OAAO,SAAS;AAClB,YAAM,IAAI,OAAO;AACjB,UAAI,UAAU;AACZ,gBAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;AAAA,MACjE,OAAO;AACL,gBAAQ,IAAI,YAAY,EAAE,OAAO;AAAA,CAAI;AAGrC,YAAI,EAAE,WAAW;AACf,kBAAQ,IAAI,qCAAiB;AAC7B,kBAAQ,IAAI,eAAe,EAAE,UAAU,aAAa,oBAAe,YAAY,EAAE;AACjF,kBAAQ,IAAI,eAAe,EAAE,UAAU,YAAY,QAAG,EAAE;AACxD,kBAAQ,IAAI,eAAe,EAAE,UAAU,SAAS,EAAE;AAClD,kBAAQ,IAAI,EAAE;AAAA,QAChB,OAAO;AACL,kBAAQ,IAAI,qCAAiB;AAC7B,kBAAQ,IAAI,oCAAoC;AAAA,QAClD;AAGA,gBAAQ,IAAI,yBAAe,EAAE,QAAQ,MAAM,gBAAM;AACjD,YAAI,EAAE,QAAQ,WAAW,GAAG;AAC1B,kBAAQ,IAAI,wBAAwB;AAAA,QACtC,OAAO;AACL,qBAAW,KAAK,EAAE,SAAS;AACzB,oBAAQ,IAAI,KAAK,EAAE,GAAG,EAAE;AACxB,oBAAQ,IAAI,OAAO,EAAE,UAAU,EAAE;AACjC,oBAAQ,IAAI,kBAAkB,EAAE,SAAS,WAAW,EAAE,cAAc,KAAK,MAAM,EAAE,SAAS,EAAE;AAAA,UAC9F;AACA,kBAAQ,IAAI,EAAE;AAAA,QAChB;AAGA,gBAAQ,IAAI,qCAA2B,EAAE,mBAAmB,MAAM,gBAAM;AACxE,YAAI,EAAE,mBAAmB,WAAW,GAAG;AACrC,kBAAQ,IAAI,4BAA4B;AAAA,QAC1C,OAAO;AACL,qBAAW,KAAK,EAAE,oBAAoB;AACpC,oBAAQ,IAAI,KAAK,EAAE,GAAG,EAAE;AACxB,oBAAQ,IAAI,gBAAgB,EAAE,cAAc,MAAM,EAAE,UAAU,YAAY,QAAQ,MAAM,EAAE,SAAS,EAAE;AAAA,UACvG;AACA,kBAAQ,IAAI,EAAE;AAAA,QAChB;AAGA,gBAAQ,IAAI,uCAA6B,EAAE,qBAAqB,MAAM,gBAAM;AAC5E,YAAI,EAAE,qBAAqB,WAAW,GAAG;AACvC,kBAAQ,IAAI,wCAAwC;AAAA,QACtD,OAAO;AACL,qBAAW,KAAK,EAAE,sBAAsB;AACtC,oBAAQ,IAAI,KAAK,EAAE,GAAG,EAAE;AACxB,oBAAQ,IAAI,iBAAiB,EAAE,eAAe,MAAM,EAAE,UAAU,YAAY,QAAQ,MAAM,EAAE,SAAS,EAAE;AAAA,UACzG;AACA,kBAAQ,IAAI,EAAE;AAAA,QAChB;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,MAAM,QAAQ,QAAQ,KAAK,EAAE,YAAY,0BAA0B;AAEzE,IAAI,QAAQ,QAAQ,EACjB,YAAY,+BAA+B,EAC3C,OAAO,YAAY;AAClB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,SAAS,WAAW;AAC1B,UAAM,SAAiC,CAAC;AACxC,QAAI,OAAO,aAAa,QAAS,QAAO,UAAU,OAAO,YAAY;AACrE,QAAI,OAAO,aAAa,aAAc,QAAO,eAAe,OAAO,YAAY;AAC/E,QAAI,OAAO,aAAa,YAAa,QAAO,cAAc,OAAO,YAAY;AAC7E,QAAI,OAAO,cAAc,OAAO,KAAK,MAAM,EAAE,WAAW,EAAG,QAAO,UAAU,OAAO;AAEnF,QAAI,OAAO,KAAK,MAAM,EAAE,WAAW,GAAG;AACpC,cAAQ,IAAI,YAAY,uBAAuB,4GAA4G,QAAQ,CAAC;AACpK;AAAA,IACF;AAEA,UAAM,OAAgC,CAAC;AACvC,eAAW,CAAC,MAAM,EAAE,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC/C,WAAK,IAAI,IAAI,EAAE,SAAS,IAAI,aAAa,qCAAqC,EAAE,GAAG;AAAA,IACrF;AACA,YAAQ,IAAI,aAAa,MAAM,QAAQ,CAAC;AAAA,EAC1C,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,IAAI,QAAQ,UAAU,EACnB,YAAY,uCAAuC,EACnD,eAAe,qBAAqB,+BAA+B,EACnE,OAAO,mBAAmB,+BAA+B,IAAI,EAC7D,OAAO,mBAAmB,2BAA2B,MAAM,EAC3D,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,QAAQ,KAAK,IAAI,SAAS,KAAK,OAAO,EAAE,KAAK,IAAI,GAAG;AAC1D,UAAM,QAAQ,KAAK,UAAU,QAAQ,QAAQ;AAC7C,UAAM,YAAY;AAClB,UAAM,MAAM,GAAG,SAAS,kBAAkB,KAAK,KAAK,mBAAmB,KAAK,UAAU,KAAK;AAE3F,UAAM,WAAW,MAAM,MAAM,GAAG;AAChC,QAAI,CAAC,SAAS,IAAI;AAChB,cAAQ,MAAM,YAAY,iBAAiB,wBAAwB,SAAS,MAAM,IAAI,QAAQ,CAAC;AAC/F,cAAQ,WAAW;AACnB;AAAA,IACF;AAEA,UAAM,MAAM,MAAM,SAAS,KAAK;AAChC,UAAM,YAAY,IAAI,YAAY,CAAC,GAAG,IAAI,CAAC,QAAQ;AACjD,UAAI,UAAmB;AACvB,UAAI;AACF,cAAM,MAAM,OAAO,KAAK,IAAI,SAAS,QAAQ;AAC7C,kBAAU,KAAK,MAAM,IAAI,SAAS,OAAO,CAAC;AAAA,MAC5C,QAAQ;AACN,kBAAU,IAAI;AAAA,MAChB;AACA,aAAO;AAAA,QACL,gBAAgB,IAAI;AAAA,QACpB,oBAAoB,IAAI;AAAA,QACxB,OAAO,IAAI;AAAA,QACX,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AAED,UAAM,OAAgC;AAAA,MACpC,SAAS,KAAK;AAAA,MACd,aAAa,qCAAqC,KAAK,KAAK;AAAA,MAC5D,cAAc,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,YAAQ,IAAI,aAAa,MAAM,QAAQ,CAAC;AAAA,EAC1C,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,YAAY,QAAQ,QAAQ,WAAW,EAAE,YAAY,8BAA8B;AAEzF,UAAU,QAAQ,KAAK,EACpB,YAAY,8CAA8C,EAC1D,eAAe,uBAAuB,sBAAsB,EAC5D,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,aAAa,KAAK,OAAO;AACtD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,OAAO,MAAM,SAAS,KAAK,QAAQ,GAAG,QAAQ,CAAC;AAAA,IAC5E,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,UAAU,QAAQ,QAAQ,EACvB,YAAY,mDAAmD,EAC/D,eAAe,uBAAuB,mBAAmB,EACzD,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,gBAAgB,KAAK,OAAO;AACzD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,SAAS,MAAM,SAAS,KAAK,QAAQ,GAAG,QAAQ,CAAC;AAAA,IAC9E,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,UAAU,QAAQ,OAAO,EACtB,YAAY,oCAAoC,EAChD,eAAe,uBAAuB,kBAAkB,EACxD,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,eAAe,KAAK,OAAO;AACxD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,SAAS,KAAK,SAAS,aAAa,OAAO,KAAM,YAAY,GAAG,QAAQ,CAAC;AAAA,IACtG,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,UAAU,QAAQ,OAAO,EACtB,YAAY,0CAA0C,EACtD,OAAO,YAAY;AAClB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,eAAe;AAC5C,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,MAAM,QAAQ,QAAQ,KAAK,EAAE,YAAY,wBAAwB;AAEvE,IAAI,QAAQ,SAAS,EAClB,YAAY,oCAAoC,EAChD,eAAe,mBAAmB,2BAA2B,EAC7D,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,WAAW,KAAK,MAAM;AACnD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,WAAW,MAAM,QAAQ,KAAK,OAAO,GAAG,QAAQ,CAAC;AAAA,IAC9E,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,IAAI,QAAQ,SAAS,EAClB,YAAY,6CAA6C,EACzD,eAAe,kBAAkB,6BAA6B,EAC9D,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,UAAU,KAAK,MAAM;AAClD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,QAAQ,MAAM,QAAQ,KAAK,OAAO,GAAG,QAAQ,CAAC;AAAA,IAC3E,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,IAAI,QAAQ,UAAU,EACnB,YAAY,sCAAsC,EAClD,OAAO,YAAY;AAClB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,YAAY;AACzC,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,WAAW,KAAK,GAAG,QAAQ,CAAC;AAAA,IACzD,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,IAAI,QAAQ,SAAS,EAClB,YAAY,iCAAiC,EAC7C,OAAO,YAAY;AAClB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,UAAU;AACvC,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,IAAI,QAAQ,SAAS,EAClB,YAAY,wCAAwC,EACpD,eAAe,uBAAuB,kBAAkB,EACxD,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,cAAc,KAAK,OAAO;AACvD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,SAAS,KAAK,SAAS,GAAG,OAAO,KAAM,GAAG,QAAQ,CAAC;AAAA,IAChF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,IAAI,QAAQ,OAAO,EAChB,YAAY,oCAAoC,EAChD,OAAO,YAAY;AAClB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,SAAS;AACtC,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,aAAa,QAAQ,QAAQ,aAAa,EAAE,YAAY,+BAA+B;AAE7F,WAAW,QAAQ,YAAY,EAC5B,YAAY,oDAAoD,EAChE,eAAe,qBAAqB,mBAAmB,EACvD,eAAe,0BAA0B,gCAAgC,EACzE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,oBAAoB,KAAK,OAAO,KAAK,UAAU;AAC5E,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,YAAY,MAAM,OAAO,KAAK,OAAO,YAAY,KAAK,WAAW,GAAG,QAAQ,CAAC;AAAA,IAC1G,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,WAAW,QAAQ,YAAY,EAC5B,YAAY,sCAAsC,EAClD,OAAO,YAAY;AAClB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,oBAAoB;AACjD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,WAAW,QAAQ,OAAO,EACvB,YAAY,4CAA4C,EACxD,OAAO,YAAY;AAClB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,gBAAgB;AAC7C,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,QAAQ,QAAQ,UAAU,EACvB,YAAY,+CAA+C,EAC3D,eAAe,uBAAuB,oCAAoC,EAC1E,eAAe,2BAA2B,sCAAsC,EAChF,eAAe,wBAAwB,qCAAqC,EAC5E,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,QAAQ;AAAA,MACnC,SAAS,KAAK;AAAA,MACd,gBAAgB,KAAK;AAAA,MACrB,SAAS,KAAK;AAAA,IAChB,CAAC;AACD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,QAAQ,MAAM,cAAc,OAAO,KAAM,aAAa,GAAG,QAAQ,CAAC;AAAA,IAC/F,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,WAAW,QAAQ,QAAQ,UAAU,EAAE,YAAY,uBAAuB;AAEhF,SAAS,QAAQ,KAAK,EACnB,YAAY,qDAAqD,EACjE,eAAe,uBAAuB,+BAA+B,EACrE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,YAAY,KAAK,OAAO;AACrD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,OAAO,MAAM,UAAU,KAAK,QAAQ,GAAG,QAAQ,CAAC;AAAA,IAC7E,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,SAAS,QAAQ,QAAQ,EACtB,YAAY,mBAAmB,EAC/B,eAAe,uBAAuB,4BAA4B,EAClE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,eAAe,KAAK,OAAO;AACxD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,SAAS,MAAM,UAAU,KAAK,QAAQ,GAAG,QAAQ,CAAC;AAAA,IAC/E,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,SAAS,QAAQ,OAAO,EACrB,YAAY,mDAAmD,EAC/D,eAAe,yBAAyB,mBAAmB,EAC3D,eAAe,wBAAwB,2BAA2B,EAClE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,WAAW,KAAK,WAAW,KAAK,QAAQ;AACrE,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,WAAW,KAAK,WAAW,UAAU,KAAK,UAAU,YAAY,OAAO,KAAM,WAAW,GAAG,QAAQ,CAAC;AAAA,IACjI,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,SAAS,QAAQ,MAAM,EACpB,YAAY,qCAAqC,EACjD,eAAe,yBAAyB,mBAAmB,EAC3D,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,aAAa,KAAK,SAAS;AACxD,QAAI,OAAO,SAAS;AAClB,UAAI,UAAU;AACZ,gBAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,MAAM,MAAM,OAAO,KAAM,UAAU,GAAG,MAAM,CAAC,CAAC;AAAA,MACtF,OAAO;AACL,cAAM,YAAY,OAAO,KAAM;AAC/B,gBAAQ,IAAI,iBAAiB,KAAK,SAAS,KAAK,UAAU,MAAM;AAAA,CAAI;AACpE,mBAAW,KAAK,WAAW;AACzB,kBAAQ,IAAI,KAAK,CAAC,EAAE;AAAA,QACtB;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,SAAS,QAAQ,QAAQ,EACtB,YAAY,6DAA6D,EACzE,eAAe,yBAAyB,0CAA0C,EAClF,eAAe,sBAAsB,YAAY,EACjD,eAAe,uBAAuB,iBAAiB,EACvD,eAAe,iBAAiB,oCAAoC,EACpE,OAAO,4BAA4B,sBAAsB,EACzD,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,eAAe;AAAA,MAC1C,WAAW,KAAK;AAAA,MAChB,WAAW,KAAK;AAAA,MAChB,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,MACX,gBAAgB,KAAK,aAAa,SAAS,KAAK,YAAY,EAAE,IAAI;AAAA,IACpE,CAAC;AACD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,gBAAgB,OAAO,KAAM,eAAe,GAAG,QAAQ,CAAC;AAAA,IACrF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,SAAS,QAAQ,QAAQ,EACtB,YAAY,sEAAsE,EAClF,eAAe,eAAe,2BAA2B,EACzD,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,eAAe,KAAK,GAAG;AACpD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,SAAS,MAAM,KAAK,KAAK,IAAI,GAAG,QAAQ,CAAC;AAAA,IACtE,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,cAAc,QAAQ,QAAQ,cAAc,EAAE,YAAY,gCAAgC;AAEhG,YAAY,QAAQ,YAAY,EAC7B,YAAY,0CAA0C,EACtD,eAAe,wBAAwB,sCAAsC,EAC7E,eAAe,qBAAqB,0BAA0B,EAC9D,eAAe,qBAAqB,+BAA+B,EACnE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,qBAAqB,KAAK,UAAU,KAAK,OAAO,KAAK,MAAM;AACxF,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,YAAY,MAAM,OAAO,KAAK,OAAO,QAAQ,KAAK,OAAO,GAAG,QAAQ,CAAC;AAAA,IAClG,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,YAAY,QAAQ,YAAY,EAC7B,YAAY,kCAAkC,EAC9C,eAAe,wBAAwB,sCAAsC,EAC7E,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,qBAAqB,KAAK,QAAQ;AAC/D,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,YAAY,QAAQ,aAAa,EAC9B,YAAY,8CAA8C,EAC1D,eAAe,wBAAwB,sCAAsC,EAC7E,eAAe,uBAAuB,0BAA0B,EAChE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,0BAA0B,KAAK,UAAU,KAAK,OAAO;AAClF,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,SAAS,KAAK,SAAS,GAAG,OAAO,KAAM,GAAG,QAAQ,CAAC;AAAA,IAChF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,YAAY,QAAQ,OAAO,EACxB,YAAY,qCAAqC,EACjD,eAAe,wBAAwB,sCAAsC,EAC7E,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,iBAAiB,KAAK,QAAQ;AAC3D,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,gBAAgB,QAAQ,QAAQ,gBAAgB,EAAE,YAAY,kCAAkC;AAEtG,cAAc,QAAQ,cAAc,EACjC,YAAY,wCAAwC,EACpD,eAAe,wBAAwB,wCAAwC,EAC/E,eAAe,2BAA2B,4CAA4C,EACtF,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,YAAY,KAAK,UAAU,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AACvE,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,yBAAyB,KAAK,UAAU,SAAS;AAC9E,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,YAAY,MAAM,UAAU,UAAU,GAAG,QAAQ,CAAC;AAAA,IAC/E,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,cAAc,QAAQ,cAAc,EACjC,YAAY,mCAAmC,EAC/C,eAAe,wBAAwB,wCAAwC,EAC/E,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,yBAAyB,KAAK,QAAQ;AACnE,QAAI,OAAO,SAAS;AAClB,UAAI,UAAU;AACZ,gBAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,MAAM,MAAM,OAAO,KAAM,SAAS,GAAG,MAAM,CAAC,CAAC;AAAA,MACrF,OAAO;AACL,cAAM,WAAW,OAAO,KAAM;AAC9B,gBAAQ,IAAI,aAAa,SAAS,MAAM;AAAA,CAAgB;AACxD,iBAAS,QAAQ,CAAC,MAAc,MAAc;AAC5C,kBAAQ,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,EAAE;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,cAAc,QAAQ,OAAO,EAC1B,YAAY,uCAAuC,EACnD,eAAe,wBAAwB,wCAAwC,EAC/E,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,mBAAmB,KAAK,QAAQ;AAC7D,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,WAAW,QAAQ,QAAQ,UAAU,EAAE,YAAY,+BAA+B;AAExF,SAAS,QAAQ,QAAQ,EACtB,YAAY,mDAAmD,EAC/D,eAAe,eAAe,2BAA2B,EACzD,eAAe,4BAA4B,yDAAyD,EACpG,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,mBAAmB;AAAA,MAC9C,gBAAgB,KAAK;AAAA,MACrB,WAAW,SAAS,KAAK,WAAW,EAAE;AAAA,IACxC,CAAC;AACD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa;AAAA,QACvB,WAAW;AAAA,QACX,YAAY,OAAO,KAAM;AAAA,QACzB,eAAe,OAAO,KAAM;AAAA,QAC5B,WAAW,IAAI,KAAK,SAAS,KAAK,WAAW,EAAE,IAAI,GAAI,EAAE,YAAY;AAAA,MACvE,GAAG,QAAQ,CAAC;AAAA,IACd,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,SAAS,QAAQ,QAAQ,EACtB,YAAY,4CAA4C,EACxD,eAAe,sBAAsB,qCAAqC,EAC1E,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,uBAAuB,KAAK,UAAU;AACnE,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa;AAAA,QACvB,YAAY,OAAO,KAAM;AAAA,QACzB,UAAU,OAAO,KAAM;AAAA,QACvB,SAAS,OAAO,KAAM;AAAA,QACtB,gBAAgB,OAAO,KAAM;AAAA,MAC/B,GAAG,QAAQ,CAAC;AAAA,IACd,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,WAAW,QAAQ,QAAQ,UAAU,EAAE,YAAY,gCAAgC;AAEzF,SAAS,QAAQ,QAAQ,EACtB,YAAY,0DAA0D,EACtE,eAAe,iBAAiB,gDAAgD,EAChF,eAAe,2BAA2B,+BAA+B,EACzE,OAAO,4BAA4B,wBAAwB,IAAI,EAC/D,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,aAAa,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AACnE,UAAM,YAAY,SAAS,KAAK,WAAW,EAAE;AAC7C,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,wBAAwB;AAAA,MACnD;AAAA,MACA;AAAA,MACA,gBAAgB,KAAK;AAAA,IACvB,CAAC;AACD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa;AAAA,QACvB,SAAS;AAAA,QACT,WAAW,OAAO,KAAM;AAAA,QACxB,WAAW,OAAO,KAAM;AAAA,QACxB,WAAW,OAAO,KAAM;AAAA,MAC1B,GAAG,QAAQ,CAAC;AAAA,IACd,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,SAAS,QAAQ,MAAM,EACpB,YAAY,6CAA6C,EACzD,eAAe,yBAAyB,oCAAoC,EAC5E,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,kBAAkB,KAAK,OAAO;AAC3D,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,UAAU,QAAQ,QAAQ,SAAS,EAAE,YAAY,mCAAmC;AAE1F,QAAQ,QAAQ,OAAO,EACpB,YAAY,kCAAkC,EAC9C,eAAe,qBAAqB,mBAAmB,EACvD,eAAe,qBAAqB,iBAAiB,EACrD,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,YAAY,KAAK,OAAO,KAAK,MAAM;AAChE,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,QAAQ,MAAM,OAAO,KAAK,OAAO,QAAQ,KAAK,OAAO,GAAG,QAAQ,CAAC;AAAA,IAC9F,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,QAAQ,QAAQ,SAAS,EACtB,YAAY,oBAAoB,EAChC,eAAe,qBAAqB,mBAAmB,EACvD,eAAe,qBAAqB,mBAAmB,EACvD,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,cAAc,KAAK,OAAO,KAAK,MAAM;AAClE,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,UAAU,MAAM,OAAO,KAAK,OAAO,QAAQ,KAAK,OAAO,GAAG,QAAQ,CAAC;AAAA,IAChG,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,QAAQ,QAAQ,SAAS,EACtB,YAAY,6CAA6C,EACzD,eAAe,qBAAqB,mBAAmB,EACvD,eAAe,yBAAyB,iCAAiC,EACzE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,SAAS,KAAK,OAAO,KAAK,SAAS;AAChE,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,WAAW,KAAK,WAAW,GAAG,OAAO,KAAM,GAAG,QAAQ,CAAC;AAAA,IACpF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,cAAc,QAAQ,QAAQ,aAAa,EAAE,YAAY,oCAAoC;AAEnG,YAAY,QAAQ,QAAQ,EACzB,YAAY,mDAAmD,EAC/D,eAAe,6BAA6B,0BAA0B,EACtE,OAAO,iBAAiB,WAAW,EACnC,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,iBAAiB,KAAK,YAAY,KAAK,IAAI;AACxE,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa;AAAA,QACvB,UAAU;AAAA,QACV,QAAQ,OAAO,KAAM;AAAA,QACrB,YAAY,OAAO,KAAM;AAAA,MAC3B,GAAG,QAAQ,CAAC;AAAA,IACd,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,YAAY,QAAQ,MAAM,EACvB,YAAY,mDAAmD,EAC/D,eAAe,sBAAsB,iCAAiC,EACtE,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,eAAe,KAAK,MAAM;AACvD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,OAAO,MAA6C,QAAQ,CAAC;AAAA,IACxF,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,YAAY,QAAQ,UAAU,EAC3B,YAAY,8EAA8E,EAC1F,eAAe,sBAAsB,iDAAiD,EACtF,OAAO,eAAe,uCAAuC,KAAK,EAClE,OAAO,yBAAyB,2BAA2B,EAC3D,OAAO,OAAO,SAAS;AACtB,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,UAAU,MAAM,cAAc;AACpC,UAAM,SAAS,MAAM,QAAQ,uBAAuB;AAAA,MAClD,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,UAAU,KAAK;AAAA,IACjB,CAAC;AACD,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,aAAa,EAAE,WAAW,OAAO,KAAM,WAAW,QAAQ,KAAK,OAAO,GAAG,QAAQ,CAAC;AAAA,IAChG,OAAO;AACL,cAAQ,MAAM,YAAY,OAAO,MAAO,MAAM,OAAO,MAAO,SAAS,QAAQ,CAAC;AAC9E,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAIH,IAAM,KAAK,QAAQ,QAAQ,IAAI,EAC5B,YAAY,oFAA+E,EAC3F,SAAS,aAAa,6CAA6C,EACnE,OAAO,mBAAmB,qBAAqB,aAAa,EAC5D,OAAO,OAAO,SAA6B,SAA4B;AACtE,QAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,MAAI;AACF,UAAM,eAAe,QAAQ,IAAI;AACjC,QAAI,CAAC,cAAc;AACjB,cAAQ,MAAM,YAAY,uBAAuB,gDAAgD,QAAQ,CAAC;AAC1G,cAAQ,WAAW;AACnB;AAAA,IACF;AAEA,UAAM,SAAS,WAAW;AAC1B,UAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,mBAAmB;AACjE,UAAM,EAAE,eAAe,IAAI,MAAM,qBAAqB;AAAA,MACpD,WAAW,OAAO;AAAA,MAClB,YAAY,OAAO;AAAA,MACnB,YAAY,OAAO;AAAA,MACnB;AAAA,MACA,WAAW,KAAK;AAAA,IAClB,CAAC;AAED,YAAQ,IAAI,kDAAkD;AAE9D,QAAI,SAAS;AAEX,YAAM,WAAW,MAAM,eAAe,OAAO;AAC7C,UAAI,UAAU;AACZ,gBAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC;AAAA,MAClE,OAAO;AACL,gBAAQ,IAAI,QAAQ;AAAA,MACtB;AAAA,IACF,OAAO;AAEL,YAAM,WAAW,MAAM,OAAO,UAAU;AACxC,YAAM,KAAK,SAAS,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAEpF,cAAQ,IAAI,mFAA8E;AAE1F,YAAM,MAAM,MAAM;AAChB,WAAG,SAAS,SAAS,OAAO,UAAkB;AAC5C,gBAAM,UAAU,MAAM,KAAK;AAC3B,cAAI,CAAC,WAAW,QAAQ,YAAY,MAAM,QAAQ;AAChD,oBAAQ,IAAI,YAAY;AACxB,eAAG,MAAM;AACT;AAAA,UACF;AACA,cAAI;AACF,kBAAM,WAAW,MAAM,eAAe,OAAO;AAC7C,oBAAQ,IAAI;AAAA,SAAY,QAAQ;AAAA,CAAI;AAAA,UACtC,SAAS,KAAU;AACjB,oBAAQ,MAAM;AAAA,SAAY,IAAI,OAAO;AAAA,CAAI;AAAA,UAC3C;AACA,cAAI;AAAA,QACN,CAAC;AAAA,MACH;AACA,UAAI;AAEJ;AAAA,IACF;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,YAAY,iBAAiB,IAAI,SAAS,QAAQ,CAAC;AACjE,YAAQ,WAAW;AAAA,EACrB;AACF,CAAC;AAEH,QAAQ,MAAM;","names":["loadDotenv"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@attestify/cli",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Attestify CLI — command-line tool for the Hedera attestation protocol",
|
|
5
|
+
"bin": {
|
|
6
|
+
"attestify": "./dist/index.js"
|
|
7
|
+
},
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsup",
|
|
15
|
+
"clean": "rimraf dist",
|
|
16
|
+
"dev": "tsup --watch",
|
|
17
|
+
"lint:ts": "tsc --noEmit --pretty",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@attestify/sdk": "^0.1.0",
|
|
23
|
+
"commander": "^12.1.0",
|
|
24
|
+
"dotenv": "^16.4.5",
|
|
25
|
+
"@langchain/core": "^0.3.0",
|
|
26
|
+
"@langchain/openai": "^0.4.0",
|
|
27
|
+
"langchain": "^0.3.0",
|
|
28
|
+
"zod": "^3.23.0"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^22.10.0",
|
|
32
|
+
"rimraf": "^6.0.1",
|
|
33
|
+
"tsup": "^8.5.0",
|
|
34
|
+
"typescript": "^5.6.2",
|
|
35
|
+
"vitest": "^3.2.4",
|
|
36
|
+
"fast-check": "^3.23.2"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"attestify",
|
|
40
|
+
"hedera",
|
|
41
|
+
"cli"
|
|
42
|
+
],
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"publishConfig": {
|
|
45
|
+
"access": "public"
|
|
46
|
+
}
|
|
47
|
+
}
|