@peac/cli 0.12.14 → 0.13.1
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 +1 -1
- package/dist/commands/discover.d.ts +7 -4
- package/dist/commands/discover.d.ts.map +1 -1
- package/dist/index.cjs +243 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +241 -4
- package/dist/index.mjs.map +1 -1
- package/dist/lib/conformance/validators.d.ts.map +1 -1
- package/dist/lib/conformance-runner.d.ts +2 -1
- package/dist/lib/conformance-runner.d.ts.map +1 -1
- package/dist/lib/policy-document-discovery.d.ts +68 -0
- package/dist/lib/policy-document-discovery.d.ts.map +1 -0
- package/package.json +8 -7
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/policy.ts","../src/lib/conformance/digest.ts","../src/lib/conformance/manifest.ts","../src/lib/conformance/profiles.ts","../src/lib/conformance/validators.ts","../src/lib/conformance-runner.ts","../src/lib/version.ts","../src/commands/conformance.ts","../src/lib/samples-loader.ts","../src/commands/samples.ts","../src/commands/reconcile.ts","../src/commands/doctor.ts","../src/index.ts"],"names":["fs","path","fs2","path2","path3","fs3","parseDiscovery","fs4","path4","result","join","existsSync","readFileSync","getGlobalOptions","outputError","fs5","path5","Command","samples","path7","fs7","output","fs8","formatReportText","path8","fs9","program","fs10","decode"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * PEAC Policy CLI Commands\n *\n * Commands for managing policy files:\n * - init: Create a new policy file\n * - validate: Validate policy syntax and schema\n * - explain: Debug rule matching\n * - generate: Compile policy to deployment artifacts\n * - list-profiles: List available policy profiles (v0.9.23+)\n * - show-profile: Show profile details (v0.9.23+)\n *\n * Automation flags (v0.9.23+):\n * - --json: Machine-readable JSON output\n * - --yes: Skip confirmation prompts (auto-confirm)\n * - --strict: Exit non-zero on warnings\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n loadPolicy,\n parsePolicy,\n validatePolicy,\n evaluate,\n explainMatches,\n createExamplePolicy,\n serializePolicyYaml,\n serializePolicyJson,\n compilePeacTxt,\n compileRobotsSnippet,\n compileAiprefTemplates,\n renderPolicyMarkdown,\n PolicyLoadError,\n PolicyValidationError,\n POLICY_VERSION,\n EvaluationContext,\n ControlPurpose,\n ControlLicensingMode,\n SubjectType,\n // Profile system (v0.9.23+)\n listProfiles,\n loadProfile,\n getProfileSummary,\n validateProfileParams,\n customizeProfile,\n ProfileError,\n type ProfileId,\n} from '@peac/policy-kit';\n\n/**\n * Global options for policy commands\n */\ninterface PolicyGlobalOptions {\n json?: boolean;\n yes?: boolean;\n strict?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): PolicyGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as PolicyGlobalOptions;\n}\n\n/**\n * Output result - handles JSON vs human-readable format\n */\nfunction output(\n data: Record<string, unknown>,\n opts: PolicyGlobalOptions,\n humanMessage?: string\n): void {\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2));\n } else if (humanMessage) {\n console.log(humanMessage);\n }\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: PolicyGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n }\n}\n\nconst policy = new Command('policy')\n .description('Policy file operations')\n .option('--json', 'Output in machine-readable JSON format')\n .option('--yes', 'Skip confirmation prompts (auto-confirm)')\n .option('--strict', 'Exit non-zero on warnings');\n\n/**\n * peac policy init\n *\n * Create a new peac-policy.yaml file in the current directory.\n */\npolicy\n .command('init')\n .description('Create a new PEAC policy file')\n .option('-f, --format <format>', 'Output format (yaml or json)', 'yaml')\n .option('-o, --output <file>', 'Output file path')\n .option('--force', 'Overwrite existing file')\n .option('--profile <id>', 'Use a pre-built profile as template')\n .action(\n (\n options: { format?: string; output?: string; force?: boolean; profile?: string },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const format = options.format?.toLowerCase() || 'yaml';\n const outputPath =\n options.output || (format === 'json' ? 'peac-policy.json' : 'peac-policy.yaml');\n\n // Check if file exists and --force/--yes not set\n if (fs.existsSync(outputPath) && !options.force && !globalOpts.yes) {\n outputError(\n `File already exists: ${outputPath}`,\n { path: outputPath, hint: 'Use --force or --yes to overwrite' },\n globalOpts\n );\n process.exit(1);\n }\n\n let content: string;\n let policyName: string;\n\n if (options.profile) {\n // Use profile as template\n try {\n const profile = loadProfile(options.profile as ProfileId);\n const policyDoc = profile.policy;\n content =\n format === 'json' ? serializePolicyJson(policyDoc) : serializePolicyYaml(policyDoc);\n policyName = profile.name;\n } catch (err) {\n if (err instanceof ProfileError) {\n outputError(err.message, { code: err.code, profile: options.profile }, globalOpts);\n process.exit(1);\n }\n throw err;\n }\n } else {\n const example = createExamplePolicy();\n content = format === 'json' ? serializePolicyJson(example) : serializePolicyYaml(example);\n policyName = 'Example Policy';\n }\n\n fs.writeFileSync(outputPath, content, 'utf-8');\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n file: outputPath,\n format,\n profile: options.profile || null,\n policyName,\n },\n globalOpts\n );\n } else {\n console.log(`Created policy file: ${outputPath}`);\n if (options.profile) {\n console.log(`Based on profile: ${options.profile}`);\n }\n console.log('');\n console.log('Next steps:');\n console.log(' 1. Edit the policy file to define your access rules');\n console.log(' 2. Validate with: peac policy validate ' + outputPath);\n console.log(' 3. Generate artifacts with: peac policy generate ' + outputPath);\n }\n\n process.exit(0);\n } catch (err) {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n );\n\n/**\n * peac policy validate <file>\n */\npolicy\n .command('validate')\n .description('Validate a PEAC policy file (YAML or JSON)')\n .argument('<file>', 'Path to policy file')\n .option('-v, --verbose', 'Show detailed validation output')\n .action((file: string, options: { verbose?: boolean }, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n const warnings: string[] = [];\n\n try {\n const policyDoc = loadPolicy(file);\n\n // Collect any warnings (e.g., deprecated features)\n // Currently no warnings defined, but this is the pattern for future use\n\n const result = {\n success: true,\n file,\n valid: true,\n warnings,\n policy: {\n version: policyDoc.version,\n name: policyDoc.name || null,\n defaultDecision: policyDoc.defaults.decision,\n ruleCount: policyDoc.rules.length,\n rules: options.verbose\n ? policyDoc.rules.map((r) => ({\n name: r.name,\n decision: r.decision,\n subject: r.subject || null,\n purpose: r.purpose || null,\n licensingMode: r.licensing_mode || null,\n }))\n : undefined,\n },\n };\n\n if (globalOpts.json) {\n output(result, globalOpts);\n } else {\n console.log(`Validating policy file: ${file}\\n`);\n console.log('Policy is valid!\\n');\n\n console.log('Policy Information:');\n console.log(` Version: ${policyDoc.version}`);\n if (policyDoc.name) {\n console.log(` Name: ${policyDoc.name}`);\n }\n console.log(` Default: ${policyDoc.defaults.decision}`);\n console.log(` Rules: ${policyDoc.rules.length}`);\n\n if (options.verbose && policyDoc.rules.length > 0) {\n console.log('\\nRules:');\n for (const rule of policyDoc.rules) {\n console.log(` - ${rule.name}: ${rule.decision}`);\n if (rule.subject) {\n const parts: string[] = [];\n if (rule.subject.type) {\n const types = Array.isArray(rule.subject.type)\n ? rule.subject.type.join('|')\n : rule.subject.type;\n parts.push(`type=${types}`);\n }\n if (rule.subject.labels) {\n parts.push(`labels=[${rule.subject.labels.join(',')}]`);\n }\n if (rule.subject.id) {\n parts.push(`id=${rule.subject.id}`);\n }\n if (parts.length > 0) {\n console.log(` subject: ${parts.join(', ')}`);\n }\n }\n if (rule.purpose) {\n const purposes = Array.isArray(rule.purpose) ? rule.purpose.join('|') : rule.purpose;\n console.log(` purpose: ${purposes}`);\n }\n if (rule.licensing_mode) {\n const modes = Array.isArray(rule.licensing_mode)\n ? rule.licensing_mode.join('|')\n : rule.licensing_mode;\n console.log(` licensing_mode: ${modes}`);\n }\n }\n }\n\n if (warnings.length > 0) {\n console.log('\\nWarnings:');\n for (const warning of warnings) {\n console.log(` - ${warning}`);\n }\n }\n }\n\n // Exit with non-zero if --strict and there are warnings\n if (globalOpts.strict && warnings.length > 0) {\n process.exit(1);\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyValidationError) {\n const issues = err.issues.map((i) => ({\n path: i.path.join('.'),\n message: i.message,\n }));\n\n if (globalOpts.json) {\n output(\n {\n success: false,\n file,\n valid: false,\n error: 'Validation failed',\n issues,\n },\n globalOpts\n );\n } else {\n console.error('Policy validation failed:\\n');\n for (const issue of err.issues) {\n console.error(` - ${issue.path.join('.')}: ${issue.message}`);\n }\n }\n process.exit(1);\n } else if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n });\n\n/**\n * peac policy generate <file>\n *\n * Generate deployment artifacts from a policy file:\n * - peac.txt (PEAC discovery file)\n * - robots.txt snippet\n * - AIPREF header templates\n * - ai-policy.md (human-readable summary)\n */\npolicy\n .command('generate')\n .description('Generate deployment artifacts from a policy file')\n .argument('<file>', 'Path to policy file')\n .option('-o, --out <dir>', 'Output directory (use \"-\" for stdout)', 'dist')\n .option('--well-known', 'Output peac.txt to .well-known/ subdirectory')\n .option('--dry-run', 'Show what would be generated without writing files')\n .option('--peac-version <version>', 'PEAC protocol version (default: 0.9)')\n .option('--site-url <url>', 'Site URL for peac.txt')\n .option('--contact <email>', 'Contact email for policy questions')\n .option('--attribution <mode>', 'Attribution requirement (required, optional, none)')\n .option('--receipts <mode>', 'Receipts requirement (required, optional, omit)')\n .option('--rate-limit <limit>', 'Rate limit string (e.g., \"100/hour\", \"unlimited\")')\n .option('--negotiate <url>', 'Negotiate endpoint URL')\n .option('--no-comments', 'Omit comments from generated files')\n .action(\n (\n file: string,\n options: {\n out: string;\n wellKnown?: boolean;\n dryRun?: boolean;\n peacVersion?: string;\n siteUrl?: string;\n contact?: string;\n attribution?: 'required' | 'optional' | 'none';\n receipts?: 'required' | 'optional' | 'omit';\n rateLimit?: string;\n negotiate?: string;\n comments?: boolean;\n },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n const isStdout = options.out === '-';\n\n try {\n if (!globalOpts.json && !isStdout) {\n console.log(`Loading policy: ${file}\\n`);\n }\n\n const policyDoc = loadPolicy(file);\n\n const compileOptions = {\n peacVersion: options.peacVersion,\n siteUrl: options.siteUrl,\n contact: options.contact,\n attribution: options.attribution,\n receipts: options.receipts,\n rateLimit: options.rateLimit,\n negotiateUrl: options.negotiate,\n includeComments: options.comments !== false,\n };\n\n // Generate content\n const peacTxt = compilePeacTxt(policyDoc, compileOptions);\n const robotsTxt = compileRobotsSnippet(policyDoc, compileOptions);\n const aiprefTemplates = compileAiprefTemplates(policyDoc, compileOptions);\n const markdown = renderPolicyMarkdown(policyDoc, compileOptions);\n\n // Stdout mode: output all content as JSON\n if (isStdout || globalOpts.json) {\n const result = {\n success: true,\n source: file,\n artifacts: {\n 'peac.txt': peacTxt,\n 'robots-ai-snippet.txt': robotsTxt,\n 'aipref-headers.json': aiprefTemplates,\n 'ai-policy.md': markdown,\n },\n };\n\n if (isStdout && !globalOpts.json) {\n // Plain stdout: just output peac.txt\n console.log(peacTxt);\n } else {\n output(result, { json: true });\n }\n\n process.exit(0);\n }\n\n // Determine output paths\n const outDir = options.out;\n let peacTxtPath: string;\n if (options.wellKnown) {\n peacTxtPath = path.join(outDir, '.well-known', 'peac.txt');\n } else {\n peacTxtPath = path.join(outDir, 'peac.txt');\n }\n const robotsPath = path.join(outDir, 'robots-ai-snippet.txt');\n const aiprefPath = path.join(outDir, 'aipref-headers.json');\n const mdPath = path.join(outDir, 'ai-policy.md');\n\n if (options.dryRun) {\n // Dry run: show what would be generated\n console.log('Dry run - files that would be generated:\\n');\n console.log(`--- ${peacTxtPath} ---`);\n console.log(peacTxt);\n console.log(`--- ${robotsPath} ---`);\n console.log(robotsTxt);\n console.log(`--- ${aiprefPath} ---`);\n console.log(JSON.stringify(aiprefTemplates, null, 2));\n console.log(`\\n--- ${mdPath} ---`);\n console.log(markdown);\n process.exit(0);\n }\n\n // Create output directories\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n if (options.wellKnown) {\n const wellKnownDir = path.join(outDir, '.well-known');\n if (!fs.existsSync(wellKnownDir)) {\n fs.mkdirSync(wellKnownDir, { recursive: true });\n }\n }\n\n // Write files\n fs.writeFileSync(peacTxtPath, peacTxt, 'utf-8');\n console.log(`Generated: ${peacTxtPath}`);\n\n fs.writeFileSync(robotsPath, robotsTxt, 'utf-8');\n console.log(`Generated: ${robotsPath}`);\n\n fs.writeFileSync(aiprefPath, JSON.stringify(aiprefTemplates, null, 2), 'utf-8');\n console.log(`Generated: ${aiprefPath}`);\n\n fs.writeFileSync(mdPath, markdown, 'utf-8');\n console.log(`Generated: ${mdPath}`);\n\n console.log('');\n console.log('Deployment instructions:');\n if (options.wellKnown) {\n console.log(` 1. Deploy ${peacTxtPath} to serve at /.well-known/peac.txt`);\n } else {\n console.log(` 1. Copy ${peacTxtPath} to /.well-known/peac.txt`);\n }\n console.log(` 2. Append ${robotsPath} to your robots.txt`);\n console.log(` 3. Add headers from ${aiprefPath} to your server config`);\n console.log(` 4. Publish ${mdPath} for human reference`);\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n }\n );\n\n/**\n * peac policy explain <file>\n *\n * Debug tool: explain which rule would apply for a given context.\n */\npolicy\n .command('explain')\n .description('Explain which rule would apply for a given context')\n .argument('<file>', 'Path to policy file')\n .option('-t, --type <type>', 'Subject type (human, org, agent)')\n .option('-l, --labels <labels>', 'Subject labels (comma-separated)')\n .option('-i, --id <id>', 'Subject ID')\n .option(\n '-p, --purpose <purpose>',\n 'Access purpose (crawl, index, train, inference, ai_input, ai_index, search)'\n )\n .option(\n '-m, --licensing-mode <mode>',\n 'Licensing mode (subscription, pay_per_crawl, pay_per_inference)'\n )\n .option('--all-matches', 'Show all matching rules, not just the first')\n .action(\n (\n file: string,\n options: {\n type?: string;\n labels?: string;\n id?: string;\n purpose?: string;\n licensingMode?: string;\n allMatches?: boolean;\n },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const policyDoc = loadPolicy(file);\n\n // Build evaluation context from options\n const context: EvaluationContext = {};\n\n if (options.type || options.labels || options.id) {\n context.subject = {};\n if (options.type) {\n context.subject.type = options.type as SubjectType;\n }\n if (options.labels) {\n context.subject.labels = options.labels.split(',').map((l) => l.trim());\n }\n if (options.id) {\n context.subject.id = options.id;\n }\n }\n\n if (options.purpose) {\n context.purpose = options.purpose as ControlPurpose;\n }\n\n if (options.licensingMode) {\n context.licensing_mode = options.licensingMode as ControlLicensingMode;\n }\n\n if (options.allMatches) {\n const matches = explainMatches(policyDoc, context);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n context,\n matches: matches.map((m) => {\n if (m === '[default]') {\n return {\n rule: '[default]',\n decision: policyDoc.defaults.decision,\n };\n }\n const rule = policyDoc.rules.find((r) => r.name === m);\n return rule\n ? { rule: rule.name, decision: rule.decision }\n : { rule: m, decision: null };\n }),\n },\n globalOpts\n );\n } else {\n console.log('Evaluation Context:');\n if (context.subject) {\n console.log(` Subject: ${JSON.stringify(context.subject)}`);\n } else {\n console.log(' Subject: (any)');\n }\n console.log(` Purpose: ${context.purpose || '(any)'}`);\n console.log(` Licensing Mode: ${context.licensing_mode || '(any)'}`);\n console.log();\n\n console.log(`Matching Rules (${matches.length}):`);\n for (const match of matches) {\n if (match === '[default]') {\n console.log(` - [default] -> ${policyDoc.defaults.decision}`);\n } else {\n const rule = policyDoc.rules.find((r) => r.name === match);\n if (rule) {\n console.log(` - ${rule.name} -> ${rule.decision}`);\n }\n }\n }\n }\n } else {\n const result = evaluate(policyDoc, context);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n context,\n result: {\n decision: result.decision,\n matchedRule: result.matched_rule || '[default]',\n reason: result.reason || null,\n },\n },\n globalOpts\n );\n } else {\n console.log('Evaluation Context:');\n if (context.subject) {\n console.log(` Subject: ${JSON.stringify(context.subject)}`);\n } else {\n console.log(' Subject: (any)');\n }\n console.log(` Purpose: ${context.purpose || '(any)'}`);\n console.log(` Licensing Mode: ${context.licensing_mode || '(any)'}`);\n console.log();\n\n console.log('Result:');\n console.log(` Decision: ${result.decision}`);\n if (result.matched_rule) {\n console.log(` Matched Rule: ${result.matched_rule}`);\n } else {\n console.log(' Matched Rule: (default)');\n }\n if (result.reason) {\n console.log(` Reason: ${result.reason}`);\n }\n }\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n }\n );\n\n/**\n * peac policy list-profiles\n *\n * List available pre-built policy profiles (v0.9.23+)\n */\npolicy\n .command('list-profiles')\n .description('List available pre-built policy profiles')\n .action((options: Record<string, never>, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const profileIds = listProfiles();\n const profiles = profileIds.map((id) => getProfileSummary(id));\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n profiles: profiles.map((p) => ({\n id: p.id,\n name: p.name,\n description: p.description,\n defaultDecision: p.defaultDecision,\n ruleCount: p.ruleCount,\n requiresReceipt: p.requiresReceipt,\n requiredParams: p.requiredParams,\n optionalParams: p.optionalParams,\n })),\n },\n globalOpts\n );\n } else {\n console.log('Available Policy Profiles:\\n');\n for (const profile of profiles) {\n console.log(` ${profile.id}`);\n console.log(` Name: ${profile.name}`);\n console.log(` Default: ${profile.defaultDecision}`);\n console.log(` Rules: ${profile.ruleCount}`);\n if (profile.requiresReceipt) {\n console.log(' Requires receipt: yes');\n }\n if (profile.requiredParams.length > 0) {\n console.log(` Required params: ${profile.requiredParams.join(', ')}`);\n }\n console.log();\n }\n\n console.log('Use \"peac policy show-profile <id>\" for full details');\n console.log('Use \"peac policy init --profile <id>\" to create a policy from a profile');\n }\n\n process.exit(0);\n } catch (err) {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n });\n\n/**\n * peac policy show-profile <id>\n *\n * Show details of a specific profile (v0.9.23+)\n */\npolicy\n .command('show-profile')\n .description('Show details of a specific policy profile')\n .argument('<id>', 'Profile ID')\n .action((id: string, options: Record<string, never>, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const profile = loadProfile(id as ProfileId);\n const summary = getProfileSummary(id as ProfileId);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n profile: {\n id: profile.id,\n name: profile.name,\n description: profile.description,\n policy: profile.policy,\n parameters: profile.parameters,\n defaults: profile.defaults,\n },\n },\n globalOpts\n );\n } else {\n console.log(`Profile: ${profile.name}`);\n console.log(`ID: ${profile.id}`);\n console.log();\n console.log('Description:');\n console.log(\n profile.description\n .split('\\n')\n .map((l) => ` ${l}`)\n .join('\\n')\n );\n console.log();\n\n console.log('Policy:');\n console.log(` Version: ${profile.policy.version}`);\n console.log(` Default decision: ${profile.policy.defaults.decision}`);\n console.log(` Rules: ${profile.policy.rules?.length || 0}`);\n\n if (profile.policy.rules && profile.policy.rules.length > 0) {\n console.log();\n console.log('Rules:');\n for (const rule of profile.policy.rules) {\n console.log(` - ${rule.name}: ${rule.decision}`);\n if (rule.purpose) {\n const purposes = Array.isArray(rule.purpose) ? rule.purpose.join(', ') : rule.purpose;\n console.log(` purpose: ${purposes}`);\n }\n if (rule.reason) {\n console.log(` reason: ${rule.reason}`);\n }\n }\n }\n\n if (Object.keys(profile.parameters || {}).length > 0) {\n console.log();\n console.log('Parameters:');\n for (const [key, param] of Object.entries(profile.parameters || {})) {\n const required = param.required ? ' (required)' : '';\n console.log(` ${key}${required}`);\n console.log(` ${param.description}`);\n if (param.default) {\n console.log(` Default: ${param.default}`);\n }\n if (param.example) {\n console.log(` Example: ${param.example}`);\n }\n }\n }\n\n if (profile.defaults) {\n console.log();\n console.log('Defaults:');\n if (profile.defaults.requirements?.receipt) {\n console.log(' Receipt required: yes');\n }\n if (profile.defaults.rate_limit) {\n console.log(\n ` Rate limit: ${profile.defaults.rate_limit.limit}/${profile.defaults.rate_limit.window_seconds}s`\n );\n }\n }\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof ProfileError) {\n outputError(err.message, { code: err.code, profile: id }, globalOpts);\n process.exit(1);\n }\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n });\n\nexport { policy };\n","/**\n * Conformance Digest Computation\n *\n * Handles SHA-256 hashing, JCS canonicalization, and vectors digest computation.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { createHash } from 'crypto';\nimport { canonicalize } from '@peac/crypto';\n\n/**\n * Compute SHA-256 digest of a string\n */\nexport function sha256(content: string): string {\n return createHash('sha256').update(content, 'utf8').digest('hex');\n}\n\n/**\n * Convert Zod path array to JSON Pointer (RFC 6901)\n *\n * @param path - Array of path segments from Zod (string for keys, number for array indices)\n * @returns JSON Pointer string (e.g., \"/evidence/attestations/0/scope\")\n */\nexport function zodPathToJsonPointer(path: (string | number)[]): string {\n if (path.length === 0) return '';\n\n return (\n '/' +\n path\n .map((segment) => {\n const str = String(segment);\n // RFC 6901 escaping: ~ -> ~0, / -> ~1\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n })\n .join('/')\n );\n}\n\n/**\n * Compute canonical input digest using JCS (RFC 8785)\n *\n * Uses JSON Canonicalization Scheme for deterministic serialization,\n * ensuring consistent digests across implementations regardless of\n * JSON key ordering from JSON.parse.\n *\n * @returns Object with alg and value (alg differs if fallback was used)\n */\nexport function computeCanonicalDigest(input: unknown): { alg: string; value: string } {\n try {\n const canonical = canonicalize(input);\n return { alg: 'sha-256+jcs', value: sha256(canonical) };\n } catch {\n // Fallback to JSON.stringify if canonicalize fails (e.g., for non-JSON values)\n // Use different alg to indicate fallback was used.\n // JSON.stringify(undefined) returns undefined, so coerce to 'null' for safety.\n const serialized = JSON.stringify(input) ?? 'null';\n return { alg: 'sha-256+json', value: sha256(serialized) };\n }\n}\n\n/**\n * File extensions to include in vectors digest\n *\n * This allowlist ensures we capture all conformance-relevant files:\n * - .json: Fixtures, manifests, JWKS\n * - .txt: Policy files (peac.txt)\n * - .jwks: JWKS key files\n * - .pem: PEM-encoded keys\n * - .zip: Bundle archives (if used)\n */\nconst VECTORS_FILE_EXTENSIONS = new Set(['.json', '.txt', '.jwks', '.pem', '.zip']);\n\n/**\n * Files to exclude from vectors digest\n */\nconst VECTORS_EXCLUDE_FILES = new Set(['.DS_Store', '.gitkeep', 'Thumbs.db']);\n\n/**\n * Recursively collect all conformance-relevant files in a directory\n */\nfunction collectFilesRecursive(\n dir: string,\n basePath: string = ''\n): Array<{ relativePath: string; content: string }> {\n const files: Array<{ relativePath: string; content: string }> = [];\n\n if (!fs.existsSync(dir)) return files;\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n // Skip excluded files\n if (VECTORS_EXCLUDE_FILES.has(entry.name)) continue;\n\n const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n // Recurse into subdirectories\n files.push(...collectFilesRecursive(fullPath, relativePath));\n } else {\n // Check if extension is in allowlist\n const ext = path.extname(entry.name).toLowerCase();\n if (VECTORS_FILE_EXTENSIONS.has(ext)) {\n files.push({\n relativePath,\n content: fs.readFileSync(fullPath, 'utf8'),\n });\n }\n }\n }\n\n return files;\n}\n\n/**\n * Compute comprehensive vectors digest by hashing all fixture files\n *\n * VECTORS DIGEST CONTRACT (NORMATIVE):\n * ====================================\n *\n * 1. FILE SELECTION:\n * - INCLUDES: manifest.json (if present) at root level\n * - INCLUDES: All files in category directories with extensions: .json, .txt, .jwks, .pem, .zip\n * - EXCLUDES: .DS_Store, .gitkeep, Thumbs.db\n *\n * 2. RECURSION:\n * - Hashes files in nested directories (e.g., bundle/vectors/*.json)\n *\n * 3. ORDERING:\n * - All files sorted lexicographically by normalized relative path\n * - Path separator is always forward slash (/)\n * - Comparison uses default string comparison (ASCII/Unicode code point order)\n *\n * 4. HASH INPUT FORMAT (per file):\n * - relativePath + NUL byte (\\x00) + sha256(fileBytes)\n * - relativePath uses forward slashes, no leading slash\n * - fileBytes are raw bytes, NO newline normalization\n *\n * 5. FINAL DIGEST:\n * - SHA-256 of all concatenated (path + NUL + hash) entries\n * - Reported as lowercase hex string\n *\n * This contract ensures:\n * - Digest changes when any fixture content changes\n * - Digest is reproducible across platforms\n * - Digest can be verified by other implementations\n */\nexport function computeVectorsDigest(fixturesDir: string, categories: string[]): string {\n const hash = createHash('sha256');\n const allFiles: Array<{ relativePath: string; content: string }> = [];\n\n // Include manifest.json if present (it's part of the conformance vectors)\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n if (fs.existsSync(manifestPath)) {\n allFiles.push({\n relativePath: 'manifest.json',\n content: fs.readFileSync(manifestPath, 'utf8'),\n });\n }\n\n // Sort categories for determinism\n const sortedCategories = [...categories].sort();\n\n for (const cat of sortedCategories) {\n const categoryPath = path.join(fixturesDir, cat);\n // Recursively collect all conformance-relevant files in the category\n const categoryFiles = collectFilesRecursive(categoryPath, cat);\n allFiles.push(...categoryFiles);\n }\n\n // Sort all files by relative path for deterministic ordering\n allFiles.sort((a, b) => a.relativePath.localeCompare(b.relativePath));\n\n for (const file of allFiles) {\n const fileHash = sha256(file.content);\n // Hash: relativePath + NUL + fileHash\n hash.update(file.relativePath);\n hash.update('\\0');\n hash.update(fileHash);\n }\n\n return hash.digest('hex');\n}\n","/**\n * Conformance Manifest Loading and Matching\n *\n * Handles loading manifest.json and retrieving fixture metadata.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { Manifest, ManifestEntry } from './types.js';\n\n/**\n * Load manifest.json from fixtures directory\n */\nexport function loadManifest(fixturesDir: string): Manifest {\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n if (!fs.existsSync(manifestPath)) {\n return {};\n }\n try {\n return JSON.parse(fs.readFileSync(manifestPath, 'utf8'));\n } catch {\n return {};\n }\n}\n\n/**\n * Get manifest entry for a fixture\n */\nexport function getManifestEntry(\n manifest: Manifest,\n category: string,\n filename: string\n): ManifestEntry | undefined {\n return manifest[category]?.[filename];\n}\n","/**\n * Conformance Profile Capabilities\n *\n * Maps categories to their profile details for capabilities reporting.\n */\n\nimport type { ProfileDetail, ProfileLevel, ConformanceLevel } from './types.js';\n\n/**\n * Profile capability registry\n *\n * Maps categories to their profile details including:\n * - profile: The profile name for the report\n * - level: 'semantic' for full validation, 'shape' for structural-only\n * - validator: The validator used (for transparency)\n * - notes: Any caveats about validation scope\n */\nexport const PROFILE_CAPABILITIES: Record<string, ProfileDetail> = {\n valid: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n invalid: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n edge: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n 'agent-identity': {\n profile: 'receipt.verify.agent-identity',\n level: 'semantic',\n validator: '@peac/schema:validateAgentIdentityAttestation',\n },\n attribution: {\n profile: 'receipt.verify.attribution',\n level: 'semantic',\n validator: '@peac/schema:validateAttributionAttestation',\n },\n bundle: {\n profile: 'bundle.shape',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no cryptographic integrity verification',\n },\n discovery: {\n profile: 'discovery.config',\n level: 'semantic',\n validator: '@peac/disc:parse',\n },\n dispute: {\n profile: 'receipt.verify.dispute',\n level: 'semantic',\n validator: '@peac/schema:validateDisputeAttestation',\n },\n interaction: {\n profile: 'receipt.verify.interaction',\n level: 'semantic',\n validator: '@peac/schema:validateInteractionOrdered',\n },\n issue: {\n profile: 'receipt.issue',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n obligations: {\n profile: 'receipt.verify.obligations',\n level: 'semantic',\n validator: '@peac/schema:validateObligationsExtension',\n },\n policy: {\n profile: 'policy.evaluate',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no policy evaluation logic',\n },\n purpose: {\n profile: 'receipt.verify.purpose',\n level: 'semantic',\n validator: '@peac/schema:isValidPurposeToken',\n },\n verifier: {\n profile: 'receipt.verify',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n workflow: {\n profile: 'workflow.validate',\n level: 'semantic',\n validator: '@peac/schema:validateWorkflowContextOrdered',\n },\n x402: {\n profile: 'transport.x402.shape',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no offer/receipt verification or term matching',\n },\n errors: {\n profile: 'errors.hints',\n level: 'semantic',\n validator: 'validateErrorHintsInput',\n notes: 'Validates next_action hint table shape and vocabulary',\n },\n 'content-usage': {\n profile: 'content-usage.parse',\n level: 'shape',\n validator: 'validateContentUsageInput',\n notes: 'Validates Content-Usage fixture input type; full parsing tested in dedicated suite',\n },\n};\n\n/**\n * Get profile capability for a category\n *\n * For unknown categories, honestly reports that the default validator uses\n * heuristic semantic receipt validation (ReceiptClaimsSchema) when input\n * looks like claims. This prevents capability misrepresentation.\n */\nexport function getCategoryCapability(category: string): ProfileDetail {\n return (\n PROFILE_CAPABILITIES[category] ?? {\n profile: `receipt.verify.${category}`,\n level: 'semantic' as ProfileLevel,\n validator: '@peac/schema:ReceiptClaimsSchema (heuristic)',\n notes: 'Unknown category - uses semantic receipt validation when input looks like claims',\n }\n );\n}\n\n/**\n * Get profile name based on category\n */\nexport function getCategoryProfile(category: string): string {\n return getCategoryCapability(category).profile;\n}\n\n/**\n * Determine if a fixture should run at a given level\n */\nexport function shouldRunAtLevel(\n fixtureVersion: string | undefined,\n level: ConformanceLevel\n): boolean {\n if (!fixtureVersion) return true; // Default to basic\n\n const [major, minor] = fixtureVersion.split('.').map(Number);\n const fixtureLevel: ConformanceLevel =\n major > 0 || minor >= 10 ? 'full' : minor >= 9 ? 'standard' : 'basic';\n\n const levelOrder: ConformanceLevel[] = ['basic', 'standard', 'full'];\n return levelOrder.indexOf(fixtureLevel) <= levelOrder.indexOf(level);\n}\n","/**\n * Conformance Category Validators\n *\n * Category-aware validation using the same validators as tests/conformance/*.spec.ts.\n */\n\nimport {\n ReceiptClaimsSchema,\n parseReceiptClaims,\n validateAgentIdentityAttestation,\n validateAttributionAttestation,\n validateDisputeAttestation,\n validateInteractionOrdered,\n validateWorkflowContextOrdered,\n validateObligationsExtension,\n isValidPurposeToken,\n isCanonicalPurpose,\n type InteractionValidationResult,\n type WorkflowValidationResult,\n} from '@peac/schema';\nimport { parse as parseDiscovery } from '@peac/disc';\nimport type { ValidationResult, ValidationResultWithPath, CategoryValidator } from './types.js';\nimport { zodPathToJsonPointer } from './digest.js';\n\n/**\n * Map Zod issue code to manifest keyword\n */\nfunction zodCodeToKeyword(code: string): string {\n const mapping: Record<string, string> = {\n invalid_type: 'type',\n invalid_literal: 'const',\n unrecognized_keys: 'additionalProperties',\n invalid_union: 'anyOf',\n invalid_enum_value: 'enum',\n invalid_string: 'format',\n too_small: 'minLength',\n too_big: 'maxLength',\n custom: 'custom',\n };\n return mapping[code] ?? code;\n}\n\n/**\n * Validate receipt claims using Zod schema\n */\nexport function validateReceiptPayload(payload: unknown): ValidationResultWithPath {\n const result = ReceiptClaimsSchema.safeParse(payload);\n\n if (result.success) {\n return { valid: true };\n }\n\n const firstIssue = result.error.issues[0];\n const zodPath = firstIssue?.path ?? [];\n const errorPath = zodPathToJsonPointer(zodPath as (string | number)[]);\n const errorKeyword = zodCodeToKeyword(firstIssue?.code ?? 'unknown');\n\n // Map paths to canonical error codes\n let errorCode = 'E_INVALID_FORMAT';\n const pathStr = zodPath.join('.');\n if (pathStr === 'iss' || pathStr.startsWith('iss.')) errorCode = 'E_INVALID_ISSUER';\n else if (pathStr === 'aud' || pathStr.startsWith('aud.')) errorCode = 'E_INVALID_AUDIENCE';\n else if (pathStr === 'iat') errorCode = 'E_INVALID_IAT';\n else if (pathStr === 'exp') errorCode = 'E_INVALID_EXP';\n else if (pathStr === 'rid') errorCode = 'E_INVALID_RID';\n else if (firstIssue?.code === 'invalid_type' && zodPath.length > 0) {\n // For required fields, Zod reports invalid_type when field is undefined\n errorCode = 'E_REQUIRED';\n }\n\n return {\n valid: false,\n error_code: errorCode,\n error_message: firstIssue?.message ?? 'Unknown validation error',\n error_path: errorPath,\n error_keyword: errorKeyword,\n };\n}\n\n/**\n * Validate receipt claims using unified parser (parse-level error codes).\n *\n * Separate from validateReceiptPayload which returns path-level codes.\n * Use this for the `parse` conformance category where fixtures assert\n * parse-level codes (E_PARSE_COMMERCE_INVALID, E_PARSE_ATTESTATION_INVALID).\n */\nexport function validateParseReceiptClaims(payload: unknown): ValidationResultWithPath {\n const pr = parseReceiptClaims(payload);\n if (pr.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: pr.error.code,\n error_message: pr.error.message,\n };\n}\n\n/**\n * Validate discovery document (peac.txt or peac-issuer.json)\n */\nfunction validateDiscoveryInput(input: unknown): ValidationResult {\n if (typeof input === 'string') {\n // Parse as peac.txt format\n const result = parseDiscovery(input);\n if (result.valid) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_DISCOVERY_PARSE_ERROR',\n error_message: result.errors?.join('; ') ?? 'Discovery parse error',\n };\n }\n\n // JSON format - validate structure\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n if (!obj.issuer || typeof obj.issuer !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_ISSUER',\n error_message: 'Discovery document missing required issuer field',\n };\n }\n if (!obj.jwks_uri || typeof obj.jwks_uri !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_JWKS_URI',\n error_message: 'Discovery document missing required jwks_uri field',\n };\n }\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_DISCOVERY',\n error_message: 'Discovery input must be string or object',\n };\n}\n\n/**\n * Validate agent identity attestation\n */\nfunction validateAgentIdentityInput(input: unknown): ValidationResult {\n const result = validateAgentIdentityAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_AGENT_IDENTITY',\n error_message: result.error,\n };\n}\n\n/**\n * Validate attribution attestation\n */\nfunction validateAttributionInput(input: unknown): ValidationResult {\n const result = validateAttributionAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_ATTRIBUTION',\n error_message: result.error,\n };\n}\n\n/**\n * Validate dispute attestation\n */\nfunction validateDisputeInput(input: unknown): ValidationResult {\n const result = validateDisputeAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_DISPUTE',\n error_message: result.error,\n };\n}\n\n/**\n * Validate interaction evidence\n */\nfunction validateInteractionInput(input: unknown): ValidationResult {\n const result: InteractionValidationResult = validateInteractionOrdered(input);\n if (result.valid) {\n return {\n valid: true,\n warnings: result.warnings.map((w) => w.message),\n };\n }\n // InteractionValidationResult has errors array when invalid\n const firstError = result.errors[0];\n return {\n valid: false,\n error_code: firstError?.code ?? 'E_INVALID_INTERACTION',\n error_message: firstError?.message ?? 'Interaction validation failed',\n };\n}\n\n/**\n * Validate workflow context\n */\nfunction validateWorkflowInput(input: unknown): ValidationResult {\n const result: WorkflowValidationResult = validateWorkflowContextOrdered(input);\n if (result.valid) {\n return { valid: true };\n }\n // WorkflowValidationResult has error_code and error when invalid\n return {\n valid: false,\n error_code: result.error_code,\n error_message: result.error,\n };\n}\n\n/**\n * Validate obligations extension\n */\nfunction validateObligationsInput(input: unknown): ValidationResult {\n const result = validateObligationsExtension(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_OBLIGATIONS',\n error_message: result.error,\n };\n}\n\n/**\n * Validate purpose tokens\n */\nfunction validatePurposeInput(input: unknown): ValidationResult {\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n\n // Check purpose_declared array\n if (obj.purpose_declared && Array.isArray(obj.purpose_declared)) {\n for (const p of obj.purpose_declared) {\n if (typeof p === 'string' && !isValidPurposeToken(p) && !isCanonicalPurpose(p)) {\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE_TOKEN',\n error_message: `Invalid purpose token: ${p}`,\n };\n }\n }\n }\n\n // Check purpose_enforced\n if (obj.purpose_enforced && typeof obj.purpose_enforced === 'string') {\n if (!isValidPurposeToken(obj.purpose_enforced) && !isCanonicalPurpose(obj.purpose_enforced)) {\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE_ENFORCED',\n error_message: `Invalid enforced purpose: ${obj.purpose_enforced}`,\n };\n }\n }\n\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE',\n error_message: 'Purpose input must be object with purpose_declared/purpose_enforced',\n };\n}\n\n/**\n * Validate bundle (basic structure check - full verification requires async)\n */\nfunction validateBundleInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_BUNDLE',\n error_message: 'Bundle must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n\n // Check required bundle fields\n if (!obj.version || typeof obj.version !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_VERSION',\n error_message: 'Bundle missing required version field',\n };\n }\n\n // Check for entries or receipts array\n if (!Array.isArray(obj.entries) && !Array.isArray(obj.receipts)) {\n return {\n valid: false,\n error_code: 'E_MISSING_ENTRIES',\n error_message: 'Bundle missing entries or receipts array',\n };\n }\n\n return { valid: true };\n}\n\n/**\n * Validate x402 offer/payment structures\n */\nfunction validateX402Input(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_X402',\n error_message: 'x402 input must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n\n // Check for x402 payment required structure\n if (obj.accepts && Array.isArray(obj.accepts)) {\n // Validate accepts array contains payment options\n for (const accept of obj.accepts) {\n if (typeof accept !== 'object' || accept === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_ACCEPTS',\n error_message: 'x402 accepts must contain payment option objects',\n };\n }\n }\n return { valid: true };\n }\n\n // Check for x402 payment evidence structure\n if (obj.rail && obj.reference) {\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_X402_STRUCTURE',\n error_message: 'x402 input missing required fields (accepts or rail+reference)',\n };\n}\n\n/**\n * Validate policy-related input\n */\nfunction validatePolicyInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_POLICY',\n error_message: 'Policy input must be an object',\n };\n }\n\n // Basic structure validation for policy\n return { valid: true };\n}\n\n/**\n * Validate issue-related input (receipt issuance)\n */\nfunction validateIssueInput(input: unknown): ValidationResult {\n // Issue fixtures are typically receipt structures for issuance testing\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n\n // If it has claims, validate them\n if (obj.claims) {\n return validateReceiptPayload(obj.claims);\n }\n\n // If it has payload, validate it\n if (obj.payload) {\n return validateReceiptPayload(obj.payload);\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Valid next_action values (closed vocabulary)\n */\nconst VALID_NEXT_ACTIONS = new Set([\n 'retry_after_delay',\n 'retry_with_different_key',\n 'retry_with_different_input',\n 'refresh_attestation',\n 'contact_issuer',\n 'abort',\n 'none',\n]);\n\n/**\n * Validate error hint table\n *\n * Validates the shape of the next-action-hints.json fixture:\n * - Must have a `hints` object\n * - Each hint must have `next_action` from the closed vocabulary and `retryable` boolean\n */\nfunction validateErrorHintsInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_ERROR_HINTS',\n error_message: 'Error hints input must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n if (!obj.hints || typeof obj.hints !== 'object') {\n return {\n valid: false,\n error_code: 'E_MISSING_HINTS',\n error_message: 'Error hints missing required hints object',\n };\n }\n\n const hints = obj.hints as Record<string, unknown>;\n for (const [code, hint] of Object.entries(hints)) {\n if (typeof hint !== 'object' || hint === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_HINT',\n error_message: `Hint for ${code} must be an object`,\n };\n }\n const h = hint as Record<string, unknown>;\n if (!VALID_NEXT_ACTIONS.has(h.next_action as string)) {\n return {\n valid: false,\n error_code: 'E_INVALID_NEXT_ACTION',\n error_message: `Hint for ${code} has invalid next_action: ${String(h.next_action)}`,\n };\n }\n if (typeof h.retryable !== 'boolean') {\n return {\n valid: false,\n error_code: 'E_INVALID_RETRYABLE',\n error_message: `Hint for ${code} has non-boolean retryable: ${String(h.retryable)}`,\n };\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Validate content-usage fixture input\n *\n * Content-usage fixtures are string inputs (HTTP header values).\n * Validates that the input is a string.\n */\nfunction validateContentUsageInput(input: unknown): ValidationResult {\n if (typeof input === 'string') {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_CONTENT_USAGE',\n error_message: 'Content-Usage input must be a string (HTTP header value)',\n };\n}\n\n/**\n * Category validator registry\n */\nexport const CATEGORY_VALIDATORS: Record<string, CategoryValidator> = {\n // Receipt claim validation\n valid: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n invalid: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n edge: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n\n // Parse-level validation (unified parser, parse-level error codes).\n // The claims/payload ambiguity guard lives in the runner (test-harness concern).\n parse: (input) => {\n const obj = input as Record<string, unknown>;\n return validateParseReceiptClaims(obj.claims ?? obj.payload ?? input);\n },\n\n // Category-specific validators\n 'agent-identity': validateAgentIdentityInput,\n attribution: validateAttributionInput,\n bundle: validateBundleInput,\n discovery: validateDiscoveryInput,\n dispute: validateDisputeInput,\n interaction: validateInteractionInput,\n issue: validateIssueInput,\n obligations: validateObligationsInput,\n policy: validatePolicyInput,\n purpose: validatePurposeInput,\n verifier: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n workflow: validateWorkflowInput,\n x402: validateX402Input,\n errors: validateErrorHintsInput,\n 'content-usage': validateContentUsageInput,\n};\n\n/**\n * Get validator for a category\n */\nexport function getValidator(category: string): CategoryValidator {\n return (\n CATEGORY_VALIDATORS[category] ??\n ((input) => {\n // Default: validate as receipt payload\n // Input may be the raw fixture (with payload/claims wrapper) or the payload directly\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n // Check for wrapped payload/claims first\n if (obj.payload || obj.claims) {\n return validateReceiptPayload(obj.payload ?? obj.claims);\n }\n // Otherwise, if it looks like receipt claims (has standard fields), validate directly\n if ('iss' in obj || 'aud' in obj || 'iat' in obj || 'rid' in obj) {\n return validateReceiptPayload(input);\n }\n }\n return { valid: true };\n })\n );\n}\n","/**\n * PEAC Conformance Runner Library\n *\n * Category-aware validation using the same validators as tests/conformance/*.spec.ts:\n * - Receipt validation via @peac/schema (ReceiptClaimsSchema)\n * - Discovery validation via @peac/disc (parse, validate)\n * - Bundle verification via @peac/audit (verifyBundleIntegrity)\n * - Attestation validation via @peac/schema validators\n * - Interaction/Workflow validation via ordered validators\n *\n * This is the CLI's thin wrapper around the conformance suite.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\n\n// Re-export types and utilities from modules\nexport type {\n ConformanceLevel,\n TestStatus,\n TestDiagnostics,\n TestResult,\n ProfileLevel,\n ProfileDetail,\n ConformanceReport,\n RunnerOptions,\n RunnerCallbacks,\n FixturePack,\n SingleFixture,\n} from './conformance/types.js';\n\nexport { zodPathToJsonPointer } from './conformance/digest.js';\n\n// Import from modules\nimport type {\n ConformanceReport,\n RunnerOptions,\n RunnerCallbacks,\n TestResult,\n TestStatus,\n FixturePack,\n SingleFixture,\n ProfileDetail,\n} from './conformance/types.js';\n\nimport { loadManifest, getManifestEntry } from './conformance/manifest.js';\nimport { sha256, computeCanonicalDigest, computeVectorsDigest } from './conformance/digest.js';\nimport {\n getCategoryCapability,\n getCategoryProfile,\n shouldRunAtLevel,\n} from './conformance/profiles.js';\nimport { getValidator } from './conformance/validators.js';\n\nfunction getGitSha(): string | undefined {\n try {\n return execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim();\n } catch {\n return undefined;\n }\n}\n\n/**\n * Run conformance tests and generate report\n * Pure function - no console output, uses callbacks for progress\n */\nexport function runConformance(\n options: RunnerOptions,\n callbacks?: RunnerCallbacks\n): ConformanceReport {\n const startTime = Date.now();\n const { fixturesDir, level, category, implementationName, implementationVersion } = options;\n\n // Load manifest for reason checking\n const manifest = loadManifest(fixturesDir);\n\n // Collect categories to test (SORTED for determinism)\n const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });\n let categories = entries\n .filter((e) => e.isDirectory() && !e.name.startsWith('.'))\n .map((e) => e.name)\n .sort(); // Deterministic ordering\n\n if (category) {\n if (!categories.includes(category)) {\n throw new Error(`Category not found: ${category}`);\n }\n categories = [category];\n }\n\n // Compute comprehensive vectors digest (includes manifest.json, recursive)\n const vectorsDigest = computeVectorsDigest(fixturesDir, categories);\n\n // Collect profiles\n const profiles = new Set<string>();\n\n // Run tests\n const results: TestResult[] = [];\n let passed = 0;\n let failed = 0;\n let skipped = 0;\n\n for (const cat of categories) {\n const categoryPath = path.join(fixturesDir, cat);\n const profile = getCategoryProfile(cat);\n profiles.add(profile);\n\n const validator = getValidator(cat);\n // SORTED for deterministic ordering across OS/filesystems\n const files = fs\n .readdirSync(categoryPath)\n .filter((f) => f.endsWith('.json'))\n .sort();\n\n for (const file of files) {\n const filePath = path.join(categoryPath, file);\n const content = fs.readFileSync(filePath, 'utf8');\n let fixture: unknown;\n\n const baseTestId = `${cat}.${file.replace('.json', '')}`;\n callbacks?.onTestStart?.(baseTestId);\n\n try {\n fixture = JSON.parse(content);\n } catch (err) {\n // Invalid JSON is a test failure\n failed++;\n const result: TestResult = {\n id: `${baseTestId}.parse`,\n category: profile,\n status: 'fail',\n observed: {\n valid: false,\n error_code: 'E_INVALID_JSON',\n error_message: (err as Error).message,\n },\n diagnostics: {\n error_code: 'E_INVALID_JSON',\n error_message: (err as Error).message,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n // Determine if this is a fixture pack or single fixture\n const fixtureObj = fixture as Record<string, unknown>;\n const isFixturePack = Array.isArray(fixtureObj.fixtures);\n\n if (isFixturePack) {\n // Process fixture pack\n const pack = fixture as FixturePack;\n\n if (!shouldRunAtLevel(pack.version, level)) {\n skipped++;\n const result: TestResult = {\n id: baseTestId,\n category: profile,\n status: 'skip',\n diagnostics: {\n skip_reason: `Fixture version ${pack.version} exceeds level ${level}`,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n for (let i = 0; i < pack.fixtures.length; i++) {\n const f = pack.fixtures[i];\n const fixtureName = f.name ?? `fixture_${i}`;\n const testId = `${baseTestId}.${fixtureName.replace(/\\s+/g, '_')}`;\n\n callbacks?.onTestStart?.(testId);\n\n // Skip fixtures without standard expected format (domain-specific fixture packs\n // like content-usage have their own test suites with expected_entries, not expected.valid)\n if (!f.expected || typeof f.expected.valid !== 'boolean') {\n skipped++;\n const result: TestResult = {\n id: testId,\n category: profile,\n status: 'skip',\n diagnostics: {\n skip_reason: 'Non-standard fixture format (domain-specific test suite)',\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n // Use JCS for canonical input digest (returns {alg, value})\n const inputDigest = computeCanonicalDigest(f.input);\n\n // Guard: fixture inputs must not have both \"claims\" and \"payload\".\n // Ambiguity is a test-harness concern -- precedence would silently\n // pick one and hide fixture authoring bugs.\n if (typeof f.input === 'object' && f.input !== null) {\n const inputObj = f.input as Record<string, unknown>;\n if (inputObj.claims !== undefined && inputObj.payload !== undefined) {\n failed++;\n const result: TestResult = {\n id: testId,\n category: profile,\n status: 'fail',\n diagnostics: {\n error_message: 'Fixture has both \"claims\" and \"payload\" -- ambiguous; use one',\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n }\n\n const observed = validator(f.input);\n\n // Check if result matches expectation\n const expectedValid = f.expected.valid;\n const actualValid = observed.valid;\n const expectedError = f.expected.error_code ?? f.expected.error;\n const actualError = observed.error_code;\n\n let status: TestStatus;\n if (expectedValid && actualValid) {\n status = 'pass';\n passed++;\n } else if (!expectedValid && !actualValid) {\n // Both invalid - check if error codes match (if specified)\n if (expectedError && actualError && expectedError !== actualError) {\n status = 'fail';\n failed++;\n } else {\n status = 'pass';\n passed++;\n }\n } else {\n status = 'fail';\n failed++;\n }\n\n const result: TestResult = {\n id: testId,\n category: profile,\n status,\n expected: {\n valid: expectedValid,\n error_code: expectedError,\n },\n observed: {\n valid: actualValid,\n error_code: actualError,\n error_message: observed.error_message,\n },\n diagnostics: {\n input_digest: inputDigest,\n warnings: observed.warnings,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n }\n } else {\n // Process single fixture\n const singleFixture = fixture as SingleFixture;\n const testId = baseTestId;\n\n // Get manifest entry for additional expectations\n const manifestEntry = getManifestEntry(manifest, cat, file);\n\n // Use JCS for payload if present, otherwise hash raw file content for single fixtures\n const inputToValidate = singleFixture.payload ?? fixture;\n const inputDigest = singleFixture.payload\n ? computeCanonicalDigest(inputToValidate)\n : { alg: 'sha-256', value: sha256(content) }; // Raw file hash for single fixtures without payload\n\n // Determine expected validity from (in order): fixture, manifest, category default\n const expectedValid =\n singleFixture.expected_valid ??\n manifestEntry?.expected_valid ??\n (cat === 'valid' || cat === 'edge');\n\n // Get expected error from fixture or manifest (never derived from keyword)\n const expectedError = singleFixture.expected_error ?? manifestEntry?.expected_error_code;\n\n // Get expected path and keyword from manifest (first-class assertions)\n const expectedPath = manifestEntry?.expected_path;\n const expectedKeyword = manifestEntry?.expected_keyword;\n\n const observed = validator(inputToValidate);\n\n let status: TestStatus;\n if (expectedValid && observed.valid) {\n status = 'pass';\n passed++;\n } else if (!expectedValid && !observed.valid) {\n // Both invalid - check if error codes match (if specified)\n let mismatch = false;\n if (expectedError && observed.error_code && expectedError !== observed.error_code) {\n mismatch = true;\n }\n // Check expected_path if specified (first-class assertion)\n if (expectedPath && observed.error_path && expectedPath !== observed.error_path) {\n mismatch = true;\n }\n // Check expected_keyword if specified (first-class assertion)\n if (\n expectedKeyword &&\n observed.error_keyword &&\n expectedKeyword !== observed.error_keyword\n ) {\n mismatch = true;\n }\n if (mismatch) {\n status = 'fail';\n failed++;\n } else {\n status = 'pass';\n passed++;\n }\n } else {\n status = 'fail';\n failed++;\n }\n\n const result: TestResult = {\n id: testId,\n category: profile,\n status,\n expected: {\n valid: expectedValid,\n error_code: expectedError,\n error_path: expectedPath,\n error_keyword: expectedKeyword,\n },\n observed: {\n valid: observed.valid,\n error_code: observed.error_code,\n error_path: observed.error_path,\n error_keyword: observed.error_keyword,\n error_message: observed.error_message,\n },\n diagnostics: {\n input_digest: inputDigest,\n warnings: observed.warnings,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n }\n }\n }\n\n // Build capabilities from tested categories\n const capabilities: ProfileDetail[] = [];\n for (const cat of categories) {\n const capability = getCategoryCapability(cat);\n // Deduplicate by profile name\n if (!capabilities.some((c) => c.profile === capability.profile)) {\n capabilities.push(capability);\n }\n }\n capabilities.sort((a, b) => a.profile.localeCompare(b.profile));\n\n const endTime = Date.now();\n\n // Build report\n const report: ConformanceReport = {\n report_version: 'peac-conformance-report/0.1',\n suite: {\n name: 'peac-core-conformance',\n version: '0.1.0',\n vectors_digest: {\n alg: 'sha-256',\n value: vectorsDigest,\n },\n profiles: Array.from(profiles).sort(),\n capabilities,\n },\n implementation: {\n name: implementationName ?? '@peac/cli',\n version: implementationVersion ?? '0.0.0',\n },\n summary: {\n passed,\n failed,\n skipped,\n total: passed + failed + skipped,\n status: failed === 0 ? 'pass' : 'fail',\n },\n results,\n meta: {\n generated_at: new Date().toISOString(),\n duration_ms: endTime - startTime,\n runner: {\n name: '@peac/cli',\n version: implementationVersion ?? '0.0.0',\n git_sha: getGitSha(),\n },\n },\n };\n\n return report;\n}\n\n/**\n * Format report as text\n */\nexport function formatReportText(report: ConformanceReport): string {\n const lines: string[] = [];\n\n lines.push('PEAC Conformance Test Results');\n lines.push('=============================');\n lines.push('');\n lines.push(`Status: ${report.summary.status.toUpperCase()}`);\n lines.push(`Profiles: ${report.suite.profiles.join(', ')}`);\n lines.push('');\n lines.push('Summary:');\n lines.push(` Passed: ${report.summary.passed}`);\n lines.push(` Failed: ${report.summary.failed}`);\n lines.push(` Skipped: ${report.summary.skipped}`);\n lines.push(` Total: ${report.summary.total}`);\n\n const failures = report.results.filter((r) => r.status === 'fail');\n if (failures.length > 0) {\n lines.push('');\n lines.push('Failures:');\n for (const f of failures) {\n lines.push(` - ${f.id}`);\n if (f.expected) {\n lines.push(\n ` Expected: valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`\n );\n }\n if (f.observed) {\n lines.push(\n ` Observed: valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`\n );\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format report as markdown\n */\nexport function formatReportMarkdown(report: ConformanceReport): string {\n const lines: string[] = [];\n\n lines.push('# PEAC Conformance Report');\n lines.push('');\n lines.push(`**Status:** ${report.summary.status.toUpperCase()}`);\n lines.push(`**Profiles:** ${report.suite.profiles.join(', ')}`);\n lines.push('');\n lines.push('## Summary');\n lines.push('');\n lines.push('| Metric | Count |');\n lines.push('|--------|-------|');\n lines.push(`| Passed | ${report.summary.passed} |`);\n lines.push(`| Failed | ${report.summary.failed} |`);\n lines.push(`| Skipped | ${report.summary.skipped} |`);\n lines.push(`| Total | ${report.summary.total} |`);\n\n const failures = report.results.filter((r) => r.status === 'fail');\n if (failures.length > 0) {\n lines.push('');\n lines.push('## Failures');\n lines.push('');\n for (const f of failures) {\n lines.push(`### ${f.id}`);\n lines.push('');\n if (f.expected) {\n lines.push(\n `- **Expected:** valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`\n );\n }\n if (f.observed) {\n lines.push(\n `- **Observed:** valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`\n );\n }\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n}\n","/**\n * CLI Version Utility\n *\n * Reads version from package.json at runtime to avoid hardcoding.\n */\n\nimport { join } from 'node:path';\nimport { readFileSync, existsSync } from 'node:fs';\n\n/**\n * Get CLI version from package.json\n *\n * Uses multiple strategies to find package.json:\n * 1. __dirname relative path (for CJS)\n * 2. Process.cwd() fallback\n */\nexport function getVersion(): string {\n // Strategy 1: Try relative path from this file (dist/lib/version.js -> package.json)\n try {\n const pkgPath = join(__dirname, '..', '..', 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.version) return pkg.version;\n }\n } catch {\n // Continue to next strategy\n }\n\n // Strategy 2: Try from CWD (running in monorepo)\n try {\n const pkgPath = join(process.cwd(), 'packages', 'cli', 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.version) return pkg.version;\n }\n } catch {\n // Continue to fallback\n }\n\n // Strategy 3: Fallback version (should rarely happen)\n return '0.0.0-unknown';\n}\n\n/**\n * Get runtime string (e.g., \"node-22.0.0\")\n */\nexport function getRuntime(): string {\n return `node-${process.version.slice(1)}`;\n}\n\n/**\n * Get git commit hash if available\n */\nexport function getCommit(): string | undefined {\n // Could be enhanced to read from .git or environment variable\n return process.env.GIT_COMMIT ?? process.env.GITHUB_SHA;\n}\n","/**\n * PEAC Conformance CLI Commands (v0.10.8+)\n *\n * Commands for running conformance tests:\n * - run: Run conformance tests against fixtures\n * - list: List available conformance test fixtures\n *\n * Uses real validators from @peac/schema and generates reports\n * conforming to peac-conformance-report/0.1.\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n runConformance,\n formatReportText,\n formatReportMarkdown,\n type ConformanceLevel,\n type RunnerCallbacks,\n type TestResult,\n} from '../lib/conformance-runner.js';\nimport { getVersion, getRuntime, getCommit } from '../lib/version.js';\n\n/**\n * Global options for conformance commands\n */\ninterface ConformanceGlobalOptions {\n json?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): ConformanceGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as ConformanceGlobalOptions;\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: ConformanceGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n if (details.code) {\n console.error(`Code: ${details.code}`);\n }\n if (details.hint) {\n console.error(`Hint: ${details.hint}`);\n }\n }\n}\n\n/**\n * Find fixtures directory (relative to CLI package or repo root)\n */\nfunction findFixturesDir(customPath?: string): string | null {\n // Use custom path if provided\n if (customPath) {\n if (fs.existsSync(customPath)) {\n return customPath;\n }\n return null;\n }\n\n // Try relative to CLI package (when installed)\n const cliPath = path.resolve(__dirname, '../../../../specs/conformance/fixtures');\n if (fs.existsSync(cliPath)) {\n return cliPath;\n }\n\n // Try relative to repo root (when running from source)\n const repoPath = path.resolve(process.cwd(), 'specs/conformance/fixtures');\n if (fs.existsSync(repoPath)) {\n return repoPath;\n }\n\n // Try one level up (when running from packages/cli)\n const upPath = path.resolve(process.cwd(), '../../specs/conformance/fixtures');\n if (fs.existsSync(upPath)) {\n return upPath;\n }\n\n return null;\n}\n\n/**\n * List available fixture categories\n */\nfunction listCategories(fixturesDir: string): string[] {\n const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory() && !e.name.startsWith('.')).map((e) => e.name);\n}\n\n/**\n * Count fixtures in a category\n */\nfunction countFixtures(categoryPath: string): number {\n if (!fs.existsSync(categoryPath)) return 0;\n const files = fs.readdirSync(categoryPath);\n return files.filter((f) => f.endsWith('.json')).length;\n}\n\nconst conformance = new Command('conformance')\n .description('PEAC conformance testing (v0.10.8+)')\n .option('--json', 'Output in JSON format');\n\n/**\n * peac conformance run [options]\n */\nconformance\n .command('run')\n .description('Run conformance tests')\n .option('-l, --level <level>', 'Conformance level: basic, standard, full', 'standard')\n .option('-c, --category <category>', 'Test specific category only')\n .option('-o, --output <format>', 'Output format: json, text, markdown', 'text')\n .option('-v, --verbose', 'Show detailed test output')\n .option('--fixtures <path>', 'Path to fixtures directory')\n .option('--implementation <name>', 'Implementation name for report', '@peac/cli')\n .action(async (options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n const startTime = Date.now();\n\n try {\n // Find fixtures directory\n const fixturesDir = findFixturesDir(options.fixtures);\n if (!fixturesDir) {\n outputError(\n 'Fixtures directory not found',\n {\n hint: options.fixtures\n ? `Specified path does not exist: ${options.fixtures}`\n : 'Run from repo root, specify --fixtures <path>, or ensure specs/conformance/fixtures is available',\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Validate level\n const validLevels: ConformanceLevel[] = ['basic', 'standard', 'full'];\n if (!validLevels.includes(options.level)) {\n outputError(\n 'Invalid conformance level',\n {\n level: options.level,\n valid: validLevels,\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Set up callbacks for verbose output\n const callbacks: RunnerCallbacks | undefined = options.verbose\n ? {\n onTestStart: (testId: string) => {\n console.log(`Running: ${testId}`);\n },\n onTestComplete: (result: TestResult) => {\n const status =\n result.status === 'pass' ? 'PASS' : result.status === 'fail' ? 'FAIL' : 'SKIP';\n console.log(` ${status}: ${result.id}`);\n },\n }\n : undefined;\n\n // Run conformance tests\n const report = runConformance(\n {\n fixturesDir,\n level: options.level as ConformanceLevel,\n category: options.category,\n implementationName: options.implementation,\n implementationVersion: getVersion(),\n },\n callbacks\n );\n\n // Add runtime metadata\n report.implementation.runtime = getRuntime();\n const commit = getCommit();\n if (commit) {\n report.implementation.commit = commit;\n }\n\n // Add meta section\n report.meta = {\n generated_at: new Date().toISOString(),\n runner: {\n name: 'peac-cli',\n version: getVersion(),\n },\n duration_ms: Date.now() - startTime,\n };\n\n // Output based on format\n if (options.output === 'json' || globalOpts.json) {\n console.log(JSON.stringify(report, null, 2));\n } else if (options.output === 'markdown') {\n console.log(formatReportMarkdown(report));\n } else {\n console.log(formatReportText(report));\n }\n\n process.exitCode = report.summary.failed === 0 ? 0 : 1;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac conformance list [--category <cat>]\n */\nconformance\n .command('list')\n .description('List available conformance test fixtures')\n .option('-c, --category <category>', 'List fixtures in specific category')\n .option('--fixtures <path>', 'Path to fixtures directory')\n .action((options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n // Find fixtures directory\n const fixturesDir = findFixturesDir(options.fixtures);\n if (!fixturesDir) {\n outputError(\n 'Fixtures directory not found',\n {\n hint: options.fixtures\n ? `Specified path does not exist: ${options.fixtures}`\n : 'Run from repo root, specify --fixtures <path>, or ensure specs/conformance/fixtures is available',\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Load manifest\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n const manifest = fs.existsSync(manifestPath)\n ? JSON.parse(fs.readFileSync(manifestPath, 'utf8'))\n : {};\n\n // List categories\n const categories = listCategories(fixturesDir);\n\n if (options.category) {\n // List fixtures in specific category\n if (!categories.includes(options.category)) {\n outputError(\n 'Category not found',\n {\n category: options.category,\n available: categories,\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n const categoryPath = path.join(fixturesDir, options.category);\n const files = fs.readdirSync(categoryPath).filter((f) => f.endsWith('.json'));\n const categoryManifest = manifest[options.category] as\n | Record<string, Record<string, unknown>>\n | undefined;\n\n if (globalOpts.json) {\n const fixtures = files.map((f) => ({\n file: f,\n description: (categoryManifest?.[f]?.description as string) || 'No description',\n }));\n console.log(JSON.stringify({ category: options.category, fixtures }, null, 2));\n } else {\n console.log(`Fixtures in ${options.category}:\\n`);\n for (const file of files) {\n const info = categoryManifest?.[file] || {};\n const desc = (info.description as string) || 'No description';\n console.log(` ${file}`);\n console.log(` ${desc}\\n`);\n }\n }\n } else {\n // List all categories\n if (globalOpts.json) {\n const categorySummary = categories.map((cat) => ({\n name: cat,\n fixture_count: countFixtures(path.join(fixturesDir, cat)),\n }));\n console.log(JSON.stringify({ categories: categorySummary }, null, 2));\n } else {\n console.log(`Available conformance test categories:\\n`);\n for (const cat of categories) {\n const count = countFixtures(path.join(fixturesDir, cat));\n console.log(` ${cat} (${count} fixtures)`);\n }\n console.log(`\\nUse 'peac conformance list -c <category>' to see fixtures in a category.`);\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\nexport { conformance };\n","/**\n * PEAC Samples Loader\n *\n * Loads sample definitions from specs/conformance/samples/ when available,\n * falling back to embedded defaults when running outside the repo.\n *\n * This ensures a single source of truth (specs folder is canonical).\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Sample category\n */\nexport type SampleCategory = 'valid' | 'invalid' | 'edge';\n\n/**\n * Sample definition\n */\nexport interface SampleDefinition {\n id: string;\n name: string;\n description: string;\n category: SampleCategory;\n claims: Record<string, unknown>;\n header?: Record<string, unknown>;\n expectedError?: string;\n}\n\n/**\n * Embedded fallback samples (used when specs folder not available)\n */\nconst EMBEDDED_SAMPLES: SampleDefinition[] = [\n {\n id: 'basic-receipt',\n name: 'Basic Receipt',\n description: 'Minimal valid PEAC receipt with only required fields',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Placeholder - will be set at generation time\n exp: 0, // Placeholder - will be set at generation time\n rid: 'sample-basic-001',\n },\n },\n {\n id: 'full-receipt',\n name: 'Full Receipt',\n description: 'PEAC receipt with all optional claims populated',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://api.example.com',\n sub: 'user:demo-user',\n iat: 0,\n exp: 0,\n rid: 'sample-full-001',\n purpose_declared: ['search', 'index'],\n purpose_enforced: 'search',\n purpose_reason: 'allowed',\n },\n },\n {\n id: 'interaction-evidence',\n name: 'Interaction Evidence',\n description: 'Receipt with InteractionEvidence extension for AI agent calls',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://agent.example.com',\n sub: 'agent:demo-agent-v1',\n iat: 0,\n exp: 0,\n rid: 'sample-ie-001',\n ext: {\n 'org.peacprotocol/interaction@0.1': {\n version: '0.1',\n interaction_id: 'int_sample_001',\n started_at: '2026-01-01T00:00:00.000Z',\n completed_at: '2026-01-01T00:00:01.000Z',\n outcome: { kind: 'success' },\n input: { hash: 'sha256:abc123...', byte_length: 1024 },\n output: { hash: 'sha256:def456...', byte_length: 2048 },\n },\n },\n },\n },\n {\n id: 'payment-evidence',\n name: 'Payment Evidence',\n description: 'Receipt with payment evidence (402 flow)',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://api.example.com',\n iat: 0,\n exp: 0,\n rid: 'sample-payment-001',\n amt: '100',\n cur: 'USD',\n payment: {\n rail: 'x402',\n reference: 'pay_sample_001',\n amount: '100',\n currency: 'USD',\n },\n },\n },\n {\n id: 'long-expiry',\n name: 'Long Expiry',\n description: 'Receipt with 24-hour expiration',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0,\n exp: 0, // Will be set to iat + 86400 at generation time\n rid: 'sample-long-expiry-001',\n },\n },\n {\n id: 'expired',\n name: 'Expired Receipt',\n description: 'Receipt that has already expired (for testing rejection)',\n category: 'invalid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Will be set to now - 7200 at generation time\n exp: 0, // Will be set to now - 3600 at generation time\n rid: 'sample-expired-001',\n },\n expectedError: 'E_EXPIRED_RECEIPT',\n },\n {\n id: 'future-iat',\n name: 'Future IAT',\n description: 'Receipt with iat in the future (should be rejected)',\n category: 'invalid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Will be set to now + 3600 at generation time\n exp: 0, // Will be set to now + 7200 at generation time\n rid: 'sample-future-iat-001',\n },\n expectedError: 'E_FUTURE_IAT',\n },\n {\n id: 'missing-iss',\n name: 'Missing Issuer',\n description: 'Receipt missing required iss claim (for testing validation)',\n category: 'invalid',\n claims: {\n aud: 'https://example.com',\n iat: 0,\n exp: 0,\n rid: 'sample-no-iss-001',\n },\n expectedError: 'E_MISSING_CLAIM',\n },\n];\n\n/**\n * Find samples directory\n */\nexport function findSamplesDir(customPath?: string): string | null {\n // Use custom path if provided\n if (customPath) {\n if (fs.existsSync(customPath)) {\n return customPath;\n }\n return null;\n }\n\n // Try relative to CLI package\n const cliPath = path.resolve(__dirname, '../../../../specs/conformance/samples');\n if (fs.existsSync(cliPath)) {\n return cliPath;\n }\n\n // Try relative to repo root\n const repoPath = path.resolve(process.cwd(), 'specs/conformance/samples');\n if (fs.existsSync(repoPath)) {\n return repoPath;\n }\n\n // Try one level up\n const upPath = path.resolve(process.cwd(), '../../specs/conformance/samples');\n if (fs.existsSync(upPath)) {\n return upPath;\n }\n\n return null;\n}\n\n/**\n * Load sample definition from a JSON file\n */\nfunction loadSampleFromFile(\n filePath: string,\n id: string,\n category: SampleCategory\n): SampleDefinition | null {\n try {\n const content = JSON.parse(fs.readFileSync(filePath, 'utf8'));\n\n // Handle both formats: fixture-style (header/payload) and claims-only\n const claims = content.payload ?? content.claims ?? content;\n const description = content.$comment ?? content.description ?? `Sample ${id}`;\n\n return {\n id,\n name: id\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' '),\n description,\n category,\n claims,\n header: content.header,\n expectedError: content.expected_error,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Load samples from specs directory\n */\nfunction loadSamplesFromDir(samplesDir: string): SampleDefinition[] {\n const samples: SampleDefinition[] = [];\n\n // Load from valid/ directory\n const validDir = path.join(samplesDir, 'valid');\n if (fs.existsSync(validDir)) {\n const files = fs.readdirSync(validDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(validDir, file), id, 'valid');\n if (sample) samples.push(sample);\n }\n }\n\n // Load from invalid/ directory\n const invalidDir = path.join(samplesDir, 'invalid');\n if (fs.existsSync(invalidDir)) {\n const files = fs.readdirSync(invalidDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(invalidDir, file), id, 'invalid');\n if (sample) samples.push(sample);\n }\n }\n\n // Load from edge/ directory if present\n const edgeDir = path.join(samplesDir, 'edge');\n if (fs.existsSync(edgeDir)) {\n const files = fs.readdirSync(edgeDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(edgeDir, file), id, 'edge');\n if (sample) samples.push(sample);\n }\n }\n\n return samples;\n}\n\n/**\n * Get sample definitions\n *\n * Loads from specs/conformance/samples/ when available (canonical source),\n * falls back to embedded samples when running outside the repo.\n */\nexport function getSamples(customSamplesPath?: string): SampleDefinition[] {\n const samplesDir = findSamplesDir(customSamplesPath);\n\n if (samplesDir) {\n const dirSamples = loadSamplesFromDir(samplesDir);\n if (dirSamples.length > 0) {\n return dirSamples;\n }\n }\n\n // Fall back to embedded samples\n return EMBEDDED_SAMPLES;\n}\n\n/**\n * Get a specific sample by ID\n */\nexport function getSampleById(id: string, customSamplesPath?: string): SampleDefinition | null {\n const samples = getSamples(customSamplesPath);\n return samples.find((s) => s.id === id) ?? null;\n}\n\n/**\n * List available sample IDs by category\n */\nexport function listSampleIds(category?: SampleCategory, customSamplesPath?: string): string[] {\n const samples = getSamples(customSamplesPath);\n const filtered = category ? samples.filter((s) => s.category === category) : samples;\n return filtered.map((s) => s.id);\n}\n","/**\n * PEAC Samples CLI Commands (v0.10.8+)\n *\n * Commands for working with sample receipts:\n * - list: List available sample receipts\n * - generate: Generate sample receipts for testing\n * - show: Show details of a specific sample\n *\n * Uses specs/conformance/samples/ as canonical source when available,\n * falls back to embedded samples when running outside the repo.\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { sign, generateKeypair, base64urlEncode } from '@peac/crypto';\nimport { getSamples, getSampleById, type SampleCategory } from '../lib/samples-loader.js';\nimport { getVersion } from '../lib/version.js';\n\n/**\n * Global options for samples commands\n */\ninterface SamplesGlobalOptions {\n json?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): SamplesGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as SamplesGlobalOptions;\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: SamplesGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n if (details.hint) {\n console.error(`Hint: ${details.hint}`);\n }\n }\n}\n\n/**\n * Apply time adjustments to claims based on sample type\n */\nfunction applyTimeAdjustments(\n claims: Record<string, unknown>,\n sampleId: string,\n now: number\n): Record<string, unknown> {\n const adjusted = { ...claims };\n\n // Standard expiry: 1 hour\n const standardExpiry = 3600;\n // Long expiry: 24 hours\n const longExpiry = 86400;\n\n switch (sampleId) {\n case 'expired':\n // Already expired: iat 2 hours ago, exp 1 hour ago\n adjusted.iat = now - 7200;\n adjusted.exp = now - 3600;\n break;\n case 'future-iat':\n // Future iat: 1 hour in future\n adjusted.iat = now + 3600;\n adjusted.exp = now + 7200;\n break;\n case 'long-expiry':\n adjusted.iat = now;\n adjusted.exp = now + longExpiry;\n break;\n default:\n // Standard: iat now, exp in 1 hour\n if (adjusted.iat === 0 || !adjusted.iat) {\n adjusted.iat = now;\n }\n if (adjusted.exp === 0 || !adjusted.exp) {\n adjusted.exp = now + standardExpiry;\n }\n }\n\n return adjusted;\n}\n\nconst samples = new Command('samples')\n .description('Work with PEAC sample receipts (v0.10.8+)')\n .option('--json', 'Output in JSON format');\n\n/**\n * peac samples list [--category <cat>]\n */\nsamples\n .command('list')\n .description('List available sample receipts')\n .option('-c, --category <category>', 'Filter by category: valid, invalid, edge')\n .option('--samples <path>', 'Path to samples directory')\n .action((options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const allSamples = getSamples(options.samples);\n let filteredSamples = allSamples;\n\n if (options.category) {\n filteredSamples = allSamples.filter((s) => s.category === options.category);\n if (filteredSamples.length === 0) {\n outputError('No samples in category', { category: options.category }, globalOpts);\n process.exitCode = 1;\n return;\n }\n }\n\n if (globalOpts.json) {\n const data = filteredSamples.map((s) => ({\n id: s.id,\n name: s.name,\n description: s.description,\n category: s.category,\n }));\n console.log(JSON.stringify({ samples: data }, null, 2));\n } else {\n console.log('Available PEAC Sample Receipts\\n');\n console.log('VALID SAMPLES:');\n for (const s of filteredSamples.filter((x) => x.category === 'valid')) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n\n const invalid = filteredSamples.filter((x) => x.category === 'invalid');\n if (invalid.length > 0) {\n console.log('\\nINVALID SAMPLES (for testing rejection):');\n for (const s of invalid) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n }\n\n const edge = filteredSamples.filter((x) => x.category === 'edge');\n if (edge.length > 0) {\n console.log('\\nEDGE CASE SAMPLES:');\n for (const s of edge) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n }\n\n console.log('\\nUse \"peac samples show <id>\" to see sample details.');\n console.log('Use \"peac samples generate -o <dir>\" to generate sample files.');\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac samples show <id>\n */\nsamples\n .command('show')\n .description('Show details of a specific sample')\n .argument('<id>', 'Sample ID')\n .option('--samples <path>', 'Path to samples directory')\n .action((id, options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const sample = getSampleById(id, options.samples);\n if (!sample) {\n const allSamples = getSamples(options.samples);\n const available = allSamples.map((s) => s.id);\n outputError('Sample not found', { id, available }, globalOpts);\n process.exitCode = 1;\n return;\n }\n\n if (globalOpts.json) {\n console.log(JSON.stringify(sample, null, 2));\n } else {\n console.log(`Sample: ${sample.name}\\n`);\n console.log(`ID: ${sample.id}`);\n console.log(`Category: ${sample.category}`);\n console.log(`Description: ${sample.description}\\n`);\n console.log('Claims:');\n console.log(JSON.stringify(sample.claims, null, 2));\n if (sample.expectedError) {\n console.log(`\\nExpected Error: ${sample.expectedError}`);\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac samples generate -o <dir> [--format <format>] [--now <timestamp>] [--kid <kid>] [--seed <seed>]\n */\nsamples\n .command('generate')\n .description('Generate sample receipt files')\n .requiredOption('-o, --output <dir>', 'Output directory')\n .option('-f, --format <format>', 'Output format: jws, json, bundle', 'jws')\n .option('--category <category>', 'Generate only specific category')\n .option('--samples <path>', 'Path to samples directory')\n .option('--now <timestamp>', 'Unix timestamp for iat/exp (for deterministic generation)')\n .option('--kid <kid>', 'Key ID to use')\n .action(async (options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const outputDir = options.output;\n\n // Create output directories\n const validDir = path.join(outputDir, 'valid');\n const invalidDir = path.join(outputDir, 'invalid');\n const edgeDir = path.join(outputDir, 'edge');\n const bundlesDir = path.join(outputDir, 'bundles');\n\n fs.mkdirSync(validDir, { recursive: true });\n fs.mkdirSync(invalidDir, { recursive: true });\n fs.mkdirSync(edgeDir, { recursive: true });\n fs.mkdirSync(bundlesDir, { recursive: true });\n\n // Determine timestamp\n const now = options.now ? parseInt(options.now, 10) : Math.floor(Date.now() / 1000);\n\n // Generate key pair\n // Note: --seed option is documented but full determinism requires proper seed-to-key derivation\n const keyPair = await generateKeypair();\n const publicKeyBytes = keyPair.publicKey;\n const privateKeyBytes = keyPair.privateKey;\n\n // Build KID\n const kid = options.kid || `sandbox-${new Date(now * 1000).toISOString().slice(0, 7)}`;\n\n // Build JWK for the key\n const publicJwk = {\n kty: 'OKP',\n crv: 'Ed25519',\n x: base64urlEncode(publicKeyBytes),\n kid,\n use: 'sig',\n alg: 'EdDSA',\n };\n\n const generatedFiles: string[] = [];\n\n // Get samples to generate\n let samplesToGenerate = getSamples(options.samples);\n if (options.category) {\n samplesToGenerate = samplesToGenerate.filter((s) => s.category === options.category);\n }\n\n for (const sample of samplesToGenerate) {\n const targetDir =\n sample.category === 'valid'\n ? validDir\n : sample.category === 'edge'\n ? edgeDir\n : invalidDir;\n const filename = `${sample.id}.${options.format === 'json' ? 'json' : 'jws'}`;\n const filepath = path.join(targetDir, filename);\n\n // Apply time adjustments\n const adjustedClaims = applyTimeAdjustments(sample.claims, sample.id, now);\n\n if (options.format === 'json') {\n // Write as decoded JSON\n const output = {\n $comment: sample.description,\n header: {\n alg: 'EdDSA',\n typ: 'interaction-record+jwt',\n kid,\n },\n payload: adjustedClaims,\n ...(sample.expectedError ? { expected_error: sample.expectedError } : {}),\n };\n fs.writeFileSync(filepath, JSON.stringify(output, null, 2));\n } else {\n // Create actual JWS using @peac/crypto sign function\n const jws = await sign(adjustedClaims, privateKeyBytes, kid);\n fs.writeFileSync(filepath, jws);\n }\n\n generatedFiles.push(filepath);\n }\n\n // Write JWKS file for verification\n const jwksPath = path.join(bundlesDir, 'sandbox-jwks.json');\n const jwks = {\n keys: [publicJwk],\n };\n fs.writeFileSync(jwksPath, JSON.stringify(jwks, null, 2));\n generatedFiles.push(jwksPath);\n\n // Write offline verification bundle\n const bundlePath = path.join(bundlesDir, 'offline-verification.json');\n const bundle = {\n $comment: 'Offline verification bundle with sample receipts and JWKS',\n description:\n 'Bundle for offline verification testing. Contains test JWKS and sample metadata.',\n generated_at: new Date(now * 1000).toISOString(),\n generator: {\n name: 'peac-cli',\n version: getVersion(),\n },\n jwks,\n samples: samplesToGenerate.map((s) => ({\n id: s.id,\n description: s.description,\n category: s.category,\n })),\n notes: [\n 'Sample timestamps are based on --now parameter or generation time.',\n 'Do NOT use sandbox samples in production.',\n ],\n };\n fs.writeFileSync(bundlePath, JSON.stringify(bundle, null, 2));\n generatedFiles.push(bundlePath);\n\n if (globalOpts.json) {\n console.log(\n JSON.stringify(\n {\n success: true,\n output_dir: outputDir,\n files_generated: generatedFiles.length,\n files: generatedFiles,\n timestamp: now,\n kid,\n },\n null,\n 2\n )\n );\n } else {\n console.log(`Sample receipts generated successfully!\\n`);\n console.log(`Output directory: ${outputDir}`);\n console.log(`Files generated: ${generatedFiles.length}`);\n console.log(`Timestamp: ${now} (${new Date(now * 1000).toISOString()})`);\n console.log(`Key ID: ${kid}\\n`);\n console.log('Generated files:');\n for (const f of generatedFiles) {\n console.log(` ${path.relative(outputDir, f)}`);\n }\n console.log(`\\nJWKS for verification: ${path.relative(outputDir, jwksPath)}`);\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\nexport { samples };\n","/**\n * PEAC Reconcile CLI Command (v0.11.3+)\n *\n * Merge two evidence bundles and detect conflicts.\n * Conflict key: composite (iss, jti) with 3-step fallback:\n * 1. (iss, jti) from JWT claims\n * 2. (iss, rid) for Wire 0.1\n * 3. (iss, receipt_ref) where receipt_ref = sha256(receipt_jws)\n *\n * NO auto-resolution: conflicts are surfaced for human decision.\n * Deterministic output: receipts and conflicts sorted by (iss, jti) lexicographically.\n *\n * Security: 16 MB bundle size limit, path traversal prevention.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport { readDisputeBundle, type DisputeBundleContents } from '@peac/audit';\nimport { computeReceiptRef } from '@peac/schema';\nimport { decode } from '@peac/crypto';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ninterface ReconcileReport {\n version: '1.0';\n generated_at: string;\n bundles: string[];\n total_receipts: number;\n merged_receipts: number;\n conflicts: ConflictEntry[];\n}\n\ninterface ConflictEntry {\n key: string;\n bundle_a_receipt_ref: string;\n bundle_b_receipt_ref: string;\n diff_fields: string[];\n}\n\ninterface ReceiptRecord {\n /** Composite key: \"iss|jti\" */\n key: string;\n /** JWS string */\n jws: string;\n /** SHA-256 receipt ref */\n receipt_ref: string;\n /** Source bundle label */\n source: string;\n}\n\ninterface ReconcileGlobalOptions {\n json?: boolean;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst MAX_BUNDLE_SIZE = 16 * 1024 * 1024; // 16 MB\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction getGlobalOptions(cmd: Command): ReconcileGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as ReconcileGlobalOptions;\n}\n\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: ReconcileGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n }\n}\n\n/**\n * Decode JWS payload using @peac/crypto canonical decoder.\n * Returns null if decoding fails.\n */\nfunction decodeJwsPayload(jws: string): Record<string, unknown> | null {\n try {\n const { payload } = decode<Record<string, unknown>>(jws);\n return payload;\n } catch {\n return null;\n }\n}\n\n/**\n * Extract composite conflict key from a JWS receipt.\n * 3-step fallback: (iss, jti) -> (iss, rid) -> (iss, receipt_ref)\n */\nfunction extractConflictKey(jws: string, receiptRef: string): string {\n const payload = decodeJwsPayload(jws);\n if (!payload) {\n return `unknown|${receiptRef}`;\n }\n\n const iss = typeof payload.iss === 'string' ? payload.iss : 'unknown';\n\n // Step 1: (iss, jti)\n if (typeof payload.jti === 'string' && payload.jti.length > 0) {\n return `${iss}|${payload.jti}`;\n }\n\n // Step 2: (iss, rid) for Wire 0.1\n if (typeof payload.rid === 'string' && payload.rid.length > 0) {\n return `${iss}|${payload.rid}`;\n }\n\n // Step 3: (iss, receipt_ref)\n return `${iss}|${receiptRef}`;\n}\n\n/**\n * Extract receipts from a bundle's contents into ReceiptRecords.\n * Uses canonical computeReceiptRef from @peac/schema (async, WebCrypto).\n */\nasync function extractReceipts(\n contents: DisputeBundleContents,\n sourceLabel: string\n): Promise<ReceiptRecord[]> {\n const records: ReceiptRecord[] = [];\n for (const [_id, jws] of contents.receipts) {\n const receiptRef = await computeReceiptRef(jws);\n const key = extractConflictKey(jws, receiptRef);\n records.push({ key, jws, receipt_ref: receiptRef, source: sourceLabel });\n }\n return records;\n}\n\n/**\n * Find field-level differences between two JWS receipts.\n */\nfunction findDiffFields(jwsA: string, jwsB: string): string[] {\n const payloadA = decodeJwsPayload(jwsA);\n const payloadB = decodeJwsPayload(jwsB);\n if (!payloadA || !payloadB) return ['payload_decode_failed'];\n\n const allKeys = new Set([...Object.keys(payloadA), ...Object.keys(payloadB)]);\n const diffs: string[] = [];\n for (const k of allKeys) {\n if (JSON.stringify(payloadA[k]) !== JSON.stringify(payloadB[k])) {\n diffs.push(k);\n }\n }\n return diffs.sort();\n}\n\n/**\n * Read and validate a bundle file.\n */\nasync function readBundle(\n bundlePath: string,\n label: string\n): Promise<{ ok: true; value: DisputeBundleContents } | { ok: false; error: string }> {\n if (!fs.existsSync(bundlePath)) {\n return { ok: false, error: `Bundle file not found: ${bundlePath}` };\n }\n\n const stat = fs.statSync(bundlePath);\n if (stat.size > MAX_BUNDLE_SIZE) {\n return { ok: false, error: `Bundle ${label} exceeds 16 MB size limit (${stat.size} bytes)` };\n }\n\n // Path traversal prevention: resolve to absolute and check it stays within expected directory\n const resolved = fs.realpathSync(bundlePath);\n if (resolved !== bundlePath && !resolved.startsWith(process.cwd())) {\n // Allow if the path is a valid absolute path\n if (!fs.existsSync(resolved)) {\n return { ok: false, error: `Path traversal detected for ${label}` };\n }\n }\n\n const zipBuffer = fs.readFileSync(bundlePath);\n const result = await readDisputeBundle(zipBuffer);\n if (!result.ok) {\n return { ok: false, error: `Failed to read ${label}: ${result.error.message}` };\n }\n return { ok: true, value: result.value };\n}\n\n/**\n * Format a ReconcileReport as human-readable text.\n */\nfunction formatReportText(report: ReconcileReport): string {\n const lines: string[] = [\n 'PEAC Reconciliation Report',\n '==========================',\n '',\n `Generated: ${report.generated_at}`,\n `Bundles: ${report.bundles.join(', ')}`,\n `Total receipts: ${report.total_receipts}`,\n `Merged receipts: ${report.merged_receipts}`,\n `Conflicts: ${report.conflicts.length}`,\n '',\n ];\n\n if (report.conflicts.length === 0) {\n lines.push('No conflicts detected. Bundles merge cleanly.');\n } else {\n lines.push('Conflicts:');\n lines.push('---------');\n for (const conflict of report.conflicts) {\n lines.push(` Key: ${conflict.key}`);\n lines.push(` Bundle A ref: ${conflict.bundle_a_receipt_ref}`);\n lines.push(` Bundle B ref: ${conflict.bundle_b_receipt_ref}`);\n lines.push(` Different fields: ${conflict.diff_fields.join(', ')}`);\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n}\n\n// =============================================================================\n// COMMAND\n// =============================================================================\n\nexport function reconcileCommand(): Command {\n const reconcile = new Command('reconcile').description(\n 'Merge evidence bundles and detect conflicts (v0.11.3+)'\n );\n\n reconcile\n .argument('<bundle1>', 'Path to first bundle ZIP file')\n .argument('<bundle2>', 'Path to second bundle ZIP file')\n .option('-f, --format <format>', 'Output format: json or text', 'text')\n .option('--fail-on-conflict', 'Exit code 1 when any conflict detected', false)\n .action(\n async (\n bundle1Path: string,\n bundle2Path: string,\n options: Record<string, unknown>,\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n const format = (options.format as string) || 'text';\n const failOnConflict = !!options.failOnConflict;\n\n try {\n // Read both bundles\n const [result1, result2] = await Promise.all([\n readBundle(bundle1Path, 'bundle1'),\n readBundle(bundle2Path, 'bundle2'),\n ]);\n\n if (!result1.ok) {\n outputError(result1.error, {}, globalOpts);\n process.exitCode = 1;\n return;\n }\n if (!result2.ok) {\n outputError(result2.error, {}, globalOpts);\n process.exitCode = 1;\n return;\n }\n\n // Extract receipts\n const [receipts1, receipts2] = await Promise.all([\n extractReceipts(result1.value, bundle1Path),\n extractReceipts(result2.value, bundle2Path),\n ]);\n\n // Build index: key -> ReceiptRecord[]\n const index = new Map<string, ReceiptRecord[]>();\n for (const r of [...receipts1, ...receipts2]) {\n const existing = index.get(r.key) ?? [];\n existing.push(r);\n index.set(r.key, existing);\n }\n\n // Detect conflicts and count merged receipts\n const conflicts: ConflictEntry[] = [];\n let mergedCount = 0;\n\n // Sort keys deterministically\n const sortedKeys = [...index.keys()].sort();\n\n for (const key of sortedKeys) {\n const records = index.get(key)!;\n\n // Find records from each bundle\n const fromA = records.filter((r) => r.source === bundle1Path);\n const fromB = records.filter((r) => r.source === bundle2Path);\n\n if (fromA.length > 0 && fromB.length > 0) {\n // Both bundles have this key: check for conflict\n const a = fromA[0];\n const b = fromB[0];\n if (a.receipt_ref !== b.receipt_ref) {\n // Same key, different content: CONFLICT\n conflicts.push({\n key,\n bundle_a_receipt_ref: a.receipt_ref,\n bundle_b_receipt_ref: b.receipt_ref,\n diff_fields: findDiffFields(a.jws, b.jws),\n });\n }\n // Same key, same content: merged (deduplicated)\n mergedCount++;\n } else {\n // Only in one bundle: merged directly\n mergedCount++;\n }\n }\n\n // Sort conflicts by key (already sorted since we iterate sorted keys)\n const report: ReconcileReport = {\n version: '1.0',\n generated_at: new Date().toISOString(),\n bundles: [bundle1Path, bundle2Path],\n total_receipts: receipts1.length + receipts2.length,\n merged_receipts: mergedCount,\n conflicts,\n };\n\n // Output\n if (format === 'json' || globalOpts.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n console.log(formatReportText(report));\n }\n\n // Exit code\n if (failOnConflict && conflicts.length > 0) {\n process.exitCode = 1;\n } else {\n process.exitCode = 0;\n }\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n }\n );\n\n return reconcile;\n}\n","/**\n * `peac doctor`: installability diagnostics.\n *\n * Runs a fixed set of offline-first checks that flag common PEAC\n * installation problems (Node version, required package resolution,\n * tracked config presence). Remote checks (JWKS reachability, reference\n * verifier reachability) are opt-in via the --online flag; by default\n * the command performs zero network calls.\n *\n * Each check reports green / yellow / red. Exit code is 0 when all\n * required checks are green or yellow; 1 when any required check is\n * red.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { createRequire } from 'module';\n\nconst requireFrom = createRequire(path.join(process.cwd(), 'package.json'));\n\ntype Status = 'green' | 'yellow' | 'red';\n\ninterface CheckResult {\n name: string;\n status: Status;\n detail: string;\n}\n\nfunction paint(status: Status, msg: string): string {\n const labels: Record<Status, string> = {\n green: 'PASS',\n yellow: 'WARN',\n red: 'FAIL',\n };\n return `[${labels[status]}] ${msg}`;\n}\n\nfunction parseMajor(nodeVersion: string): number {\n // process.version is e.g. \"v22.19.0\"\n const m = /^v(\\d+)\\./.exec(nodeVersion);\n return m ? parseInt(m[1]!, 10) : 0;\n}\n\nfunction checkNodeVersion(): CheckResult {\n const major = parseMajor(process.version);\n if (major >= 22) {\n return {\n name: 'Node version',\n status: 'green',\n detail: `${process.version} (>= 22 required)`,\n };\n }\n return {\n name: 'Node version',\n status: 'red',\n detail: `${process.version} is below the required Node >= 22`,\n };\n}\n\nfunction checkPackageResolution(): CheckResult {\n const required = ['@peac/protocol', '@peac/crypto', '@peac/schema', '@peac/kernel'];\n const missing: string[] = [];\n for (const pkg of required) {\n try {\n requireFrom.resolve(pkg);\n } catch {\n missing.push(pkg);\n }\n }\n if (missing.length === 0) {\n return {\n name: 'Package resolution',\n status: 'green',\n detail: `${required.length} required packages resolvable`,\n };\n }\n return {\n name: 'Package resolution',\n status: 'red',\n detail: `${missing.length} missing: ${missing.join(', ')}`,\n };\n}\n\nfunction checkKeyMaterial(cwd: string): CheckResult {\n const env = process.env.PEAC_ISSUER_KEY || '';\n if (env) {\n if (env.startsWith('env:') || env.startsWith('file:')) {\n return {\n name: 'Issuer key material',\n status: 'green',\n detail: `PEAC_ISSUER_KEY set via ${env.split(':')[0]}:... scheme`,\n };\n }\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: 'PEAC_ISSUER_KEY set but not using env: or file: scheme',\n };\n }\n // Also look for a conventional ed25519 JWK file at the project root.\n const candidatePaths = [\n path.join(cwd, 'issuer.jwk.json'),\n path.join(cwd, '.peac/issuer.jwk.json'),\n ];\n for (const p of candidatePaths) {\n if (fs.existsSync(p)) {\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: `found ${path.relative(cwd, p)}; prefer PEAC_ISSUER_KEY env var`,\n };\n }\n }\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: 'not found (issuance disabled; read-only tools still work)',\n };\n}\n\nfunction checkPeacTxt(cwd: string): CheckResult {\n const p = path.join(cwd, '.well-known/peac.txt');\n if (fs.existsSync(p)) {\n return {\n name: 'peac.txt presence',\n status: 'green',\n detail: `.well-known/peac.txt present at ${p}`,\n };\n }\n return {\n name: 'peac.txt presence',\n status: 'yellow',\n detail: 'no .well-known/peac.txt (discovery-layer check; optional for tool callers)',\n };\n}\n\nasync function checkOnlineJwks(issuerUrl: string, timeoutMs: number): Promise<CheckResult> {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n try {\n const cfgUrl = new URL('/.well-known/peac-issuer.json', issuerUrl).toString();\n const res = await fetch(cfgUrl, { signal: ctrl.signal });\n if (res.status !== 200) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `${cfgUrl} returned ${res.status}`,\n };\n }\n const cfg = (await res.json()) as { jwks_uri?: string };\n const jwksUri = cfg.jwks_uri;\n if (!jwksUri) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `${cfgUrl} missing jwks_uri`,\n };\n }\n const jwksRes = await fetch(jwksUri, { signal: ctrl.signal });\n if (jwksRes.status !== 200) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `jwks_uri ${jwksUri} returned ${jwksRes.status}`,\n };\n }\n const jwks = (await jwksRes.json()) as { keys?: unknown[] };\n const keyCount = Array.isArray(jwks.keys) ? jwks.keys.length : 0;\n if (keyCount === 0) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `jwks_uri ${jwksUri} returned empty keys array`,\n };\n }\n return {\n name: 'Issuer configuration',\n status: 'green',\n detail: `${cfgUrl} + jwks_uri resolvable with ${keyCount} key(s)`,\n };\n } catch (err: unknown) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `fetch failed: ${err instanceof Error ? err.message : String(err)}`,\n };\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function runDoctor(options: {\n online: boolean;\n issuer?: string;\n timeout: number;\n cwd: string;\n}): Promise<number> {\n const results: CheckResult[] = [];\n results.push(checkNodeVersion());\n results.push(checkPackageResolution());\n results.push(checkKeyMaterial(options.cwd));\n results.push(checkPeacTxt(options.cwd));\n\n if (options.online) {\n if (!options.issuer) {\n results.push({\n name: 'Issuer configuration',\n status: 'yellow',\n detail: '--online set but --issuer <url> not provided; skipping remote check',\n });\n } else {\n results.push(await checkOnlineJwks(options.issuer, options.timeout));\n }\n } else {\n results.push({\n name: 'Issuer configuration',\n status: 'yellow',\n detail: 'offline mode (default); pass --online --issuer <url> to enable remote check',\n });\n }\n\n console.log('\\npeac doctor');\n console.log('-----------');\n for (const r of results) {\n console.log(paint(r.status, `${r.name}: ${r.detail}`));\n }\n\n const hasRed = results.some((r) => r.status === 'red');\n console.log(hasRed ? '\\nFAIL: one or more checks are red.' : '\\nOK: no red checks.');\n return hasRed ? 1 : 0;\n}\n\nexport function doctor(program: Command): void {\n program\n .command('doctor')\n .description('Run PEAC installability diagnostics (offline by default)')\n .option('--online', 'enable remote checks (issuer configuration, JWKS)', false)\n .option('--issuer <url>', 'issuer URL for --online checks (https://...)')\n .option(\n '--timeout <ms>',\n 'timeout for remote checks in milliseconds',\n (v) => parseInt(v, 10),\n 5000\n )\n .action(async (opts: { online: boolean; issuer?: string; timeout: number }) => {\n const exitCode = await runDoctor({\n online: !!opts.online,\n issuer: opts.issuer,\n timeout: opts.timeout,\n cwd: process.cwd(),\n });\n process.exit(exitCode);\n });\n}\n","#!/usr/bin/env node\n/**\n * PEAC Protocol CLI\n * Command-line tools for receipt verification and conformance testing\n */\n\nimport { Command, CommanderError } from 'commander';\nimport { verifyReceipt } from '@peac/protocol';\nimport { parseIssuerConfig, fetchIssuerConfig } from '@peac/protocol';\nimport { decode } from '@peac/crypto';\nimport { PEACReceiptClaims } from '@peac/schema';\nimport * as fs from 'fs';\nimport { policy } from './commands/policy.js';\nimport { conformance } from './commands/conformance.js';\nimport { samples } from './commands/samples.js';\nimport { reconcileCommand } from './commands/reconcile.js';\nimport { doctor } from './commands/doctor.js';\nimport { getVersion } from './lib/version.js';\n\nconst program = new Command();\n\nprogram\n .name('peac')\n .description('PEAC protocol command-line tools')\n .version(getVersion())\n .exitOverride(); // Throws CommanderError instead of calling process.exit()\n\n/**\n * peac verify <jws>\n */\nprogram\n .command('verify')\n .description('Verify a PEAC receipt JWS')\n .argument('<jws>', 'JWS compact serialization or path to file containing JWS')\n .option('-v, --verbose', 'Show detailed output')\n .action(async (jwsInput: string, options: { verbose?: boolean }) => {\n try {\n // Check if input is a file path\n let jws = jwsInput;\n if (fs.existsSync(jwsInput)) {\n jws = fs.readFileSync(jwsInput, 'utf-8').trim();\n }\n\n console.log('Verifying PEAC receipt...\\n');\n\n // First, decode to show receipt info\n const { header, payload } = decode<PEACReceiptClaims>(jws);\n\n console.log('Receipt Information:');\n console.log(` Receipt ID: ${payload.rid}`);\n console.log(` Issuer: ${payload.iss}`);\n console.log(` Audience: ${payload.aud}`);\n console.log(` Amount: ${payload.amt} ${payload.cur}`);\n console.log(` Payment: ${payload.payment.rail} (${payload.payment.reference})`);\n console.log(` Issued: ${new Date(payload.iat * 1000).toISOString()}`);\n if (payload.exp) {\n console.log(` Expires: ${new Date(payload.exp * 1000).toISOString()}`);\n }\n console.log();\n\n // Verify signature\n console.log('Verifying signature...');\n const result = await verifyReceipt(jws);\n\n if (result.ok) {\n console.log('Signature valid!');\n if (result.perf) {\n console.log(` Verification time: ${result.perf.verify_ms.toFixed(2)}ms`);\n if (result.perf.jwks_fetch_ms) {\n console.log(` JWKS fetch time: ${result.perf.jwks_fetch_ms.toFixed(2)}ms`);\n }\n }\n process.exitCode = 0;\n } else {\n console.log(`Verification failed: ${result.reason}`);\n if (result.details) {\n console.log(` Details: ${result.details}`);\n }\n process.exitCode = 1;\n }\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n/**\n * peac validate-issuer <path|url>\n *\n * Validates a PEAC issuer configuration (/.well-known/peac-issuer.json)\n */\nprogram\n .command('validate-issuer')\n .description('Validate a PEAC issuer configuration')\n .argument('<input>', 'Path to peac-issuer.json file or issuer URL')\n .action(async (input: string) => {\n try {\n console.log('Validating issuer configuration...\\n');\n\n let config;\n if (input.startsWith('http://') || input.startsWith('https://')) {\n // Fetch from URL\n console.log(`Fetching from ${input}...`);\n config = await fetchIssuerConfig(input);\n } else {\n // Read from file\n const text = fs.readFileSync(input, 'utf-8');\n config = parseIssuerConfig(text);\n }\n\n console.log('Issuer configuration is valid!\\n');\n\n console.log('Issuer Configuration:');\n console.log(` Version: ${config.version}`);\n console.log(` Issuer: ${config.issuer}`);\n console.log(` JWKS URI: ${config.jwks_uri}`);\n\n if (config.verify_endpoint) {\n console.log(` Verify: ${config.verify_endpoint}`);\n }\n\n if (config.receipt_versions && config.receipt_versions.length > 0) {\n console.log(` Receipts: ${config.receipt_versions.join(', ')}`);\n }\n\n if (config.algorithms && config.algorithms.length > 0) {\n console.log(` Algorithms: ${config.algorithms.join(', ')}`);\n }\n\n if (config.payment_rails && config.payment_rails.length > 0) {\n console.log(` Rails: ${config.payment_rails.join(', ')}`);\n }\n\n if (config.security_contact) {\n console.log(` Security: ${config.security_contact}`);\n }\n\n process.exitCode = 0;\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n/**\n * peac decode <jws>\n */\nprogram\n .command('decode')\n .description('Decode a PEAC receipt JWS (without verification)')\n .argument('<jws>', 'JWS compact serialization or path to file containing JWS')\n .option('--json', 'Output as JSON')\n .action((jwsInput: string, options: { json?: boolean }) => {\n try {\n // Check if input is a file path\n let jws = jwsInput;\n if (fs.existsSync(jwsInput)) {\n jws = fs.readFileSync(jwsInput, 'utf-8').trim();\n }\n\n const { header, payload } = decode<PEACReceiptClaims>(jws);\n\n if (options.json) {\n console.log(JSON.stringify({ header, payload }, null, 2));\n } else {\n console.log('PEAC Receipt (Decoded, Not Verified)\\n');\n\n console.log('Header:');\n console.log(` typ: ${header.typ}`);\n console.log(` alg: ${header.alg}`);\n console.log(` kid: ${header.kid}`);\n console.log();\n\n console.log('Claims:');\n console.log(` iss: ${payload.iss}`);\n console.log(` aud: ${payload.aud}`);\n console.log(` iat: ${payload.iat} (${new Date(payload.iat * 1000).toISOString()})`);\n if (payload.exp) {\n console.log(` exp: ${payload.exp} (${new Date(payload.exp * 1000).toISOString()})`);\n }\n console.log(` rid: ${payload.rid}`);\n console.log(` amt: ${payload.amt}`);\n console.log(` cur: ${payload.cur}`);\n console.log();\n\n console.log('Payment:');\n console.log(` rail: ${payload.payment.rail}`);\n console.log(` reference: ${payload.payment.reference}`);\n console.log(` amount: ${payload.payment.amount}`);\n console.log(` currency: ${payload.payment.currency}`);\n\n if (payload.subject) {\n console.log();\n console.log('Subject:');\n console.log(` uri: ${payload.subject.uri}`);\n }\n\n if (payload.ext) {\n console.log();\n console.log('Extensions:');\n console.log(JSON.stringify(payload.ext, null, 2));\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n// Policy commands (v0.9.17+)\nprogram.addCommand(policy);\n\n// Conformance testing commands (v0.10.8+)\nprogram.addCommand(conformance);\n\n// Sample receipts commands (v0.10.8+)\nprogram.addCommand(samples);\n\n// Reconcile evidence bundles (v0.11.3+)\nprogram.addCommand(reconcileCommand());\n\n// Installability diagnostics (v0.12.11+)\ndoctor(program);\n\n// Parse and handle Commander errors (exitOverride causes CommanderError on --help, --version, etc.)\ntry {\n program.parse();\n} catch (err) {\n if (err instanceof CommanderError) {\n // CommanderError from --help, --version, or validation errors\n process.exitCode = err.exitCode;\n } else {\n throw err;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/policy.ts","../src/lib/conformance/digest.ts","../src/lib/conformance/manifest.ts","../src/lib/conformance/profiles.ts","../src/lib/policy-document-discovery.ts","../src/lib/conformance/validators.ts","../src/lib/conformance-runner.ts","../src/lib/version.ts","../src/commands/conformance.ts","../src/lib/samples-loader.ts","../src/commands/samples.ts","../src/commands/reconcile.ts","../src/commands/doctor.ts","../src/utils.ts","../src/commands/discover.ts","../src/index.ts"],"names":["fs","path","fs2","path2","path3","fs3","PolicyValidationError","PolicyLoadError","fs4","path4","result","join","existsSync","readFileSync","getGlobalOptions","outputError","fs5","path5","Command","samples","path7","fs7","output","fs8","formatReportText","path8","fs9","program","fs10","decode"],"mappings":";;;;;;;;;;;;;;;;;AA8DA,SAAS,iBAAiB,GAAA,EAAmC;AAC3D,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,OAAO,OAAO,IAAA,EAAK;AACrB;AAKA,SAAS,MAAA,CACP,IAAA,EACA,IAAA,EACA,YAAA,EACM;AACN,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC3C;AAGF;AAKA,SAAS,WAAA,CACP,KAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAAA,EACjC;AACF;AAEA,IAAM,SAAS,IAAI,OAAA,CAAQ,QAAQ,CAAA,CAChC,WAAA,CAAY,wBAAwB,CAAA,CACpC,MAAA,CAAO,QAAA,EAAU,wCAAwC,EACzD,MAAA,CAAO,OAAA,EAAS,0CAA0C,CAAA,CAC1D,MAAA,CAAO,YAAY,2BAA2B,CAAA;AAOjD,MAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,+BAA+B,CAAA,CAC3C,MAAA,CAAO,uBAAA,EAAyB,8BAAA,EAAgC,MAAM,CAAA,CACtE,OAAO,qBAAA,EAAuB,kBAAkB,EAChD,MAAA,CAAO,SAAA,EAAW,yBAAyB,CAAA,CAC3C,MAAA,CAAO,gBAAA,EAAkB,qCAAqC,CAAA,CAC9D,MAAA;AAAA,EACC,CACE,SACA,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,EAAQ,WAAA,EAAY,IAAK,MAAA;AAChD,MAAA,MAAM,UAAA,GACJ,OAAA,CAAQ,MAAA,KAAW,MAAA,KAAW,SAAS,kBAAA,GAAqB,kBAAA,CAAA;AAG9D,MAAA,IAAOA,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,IAAK,CAAC,QAAQ,KAAA,IAAS,CAAC,WAAW,GAAA,EAAK;AAClE,QAAA,WAAA;AAAA,UACE,wBAAwB,UAAU,CAAA,CAAA;AAAA,UAClC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,mCAAA,EAAoC;AAAA,UAC9D;AAAA,SACF;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI,UAAA;AAEJ,MAAA,IAAI,QAAQ,OAAA,EAAS;AAEnB,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,WAAA,CAAY,OAAA,CAAQ,OAAoB,CAAA;AACxD,UAAA,MAAM,YAAY,OAAA,CAAQ,MAAA;AAC1B,UAAA,OAAA,GACE,WAAW,MAAA,GAAS,mBAAA,CAAoB,SAAS,CAAA,GAAI,oBAAoB,SAAS,CAAA;AACpF,UAAA,UAAA,GAAa,OAAA,CAAQ,IAAA;AAAA,QACvB,SAAS,GAAA,EAAK;AACZ,UAAA,IAAI,eAAe,YAAA,EAAc;AAC/B,YAAA,WAAA,CAAY,GAAA,CAAI,OAAA,EAAS,EAAE,IAAA,EAAM,GAAA,CAAI,MAAM,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ,EAAG,UAAU,CAAA;AACjF,YAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,UAChB;AACA,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,UAAU,mBAAA,EAAoB;AACpC,QAAA,OAAA,GAAU,WAAW,MAAA,GAAS,mBAAA,CAAoB,OAAO,CAAA,GAAI,oBAAoB,OAAO,CAAA;AACxF,QAAA,UAAA,GAAa,gBAAA;AAAA,MACf;AAEA,MAAGA,GAAA,CAAA,aAAA,CAAc,UAAA,EAAY,OAAA,EAAS,OAAO,CAAA;AAE7C,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,MAAA;AAAA,UACE;AAAA,YACE,OAAA,EAAS,IAAA;AAAA,YACT,IAAA,EAAM,UAAA;AAAA,YACN,MAAA;AAAA,YACA,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,YAC5B;AAAA,WACF;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qBAAA,EAAwB,UAAU,CAAA,CAAE,CAAA;AAChD,QAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAAA,QACpD;AACA,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,QAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,QAAA,OAAA,CAAQ,IAAI,uDAAuD,CAAA;AACnE,QAAA,OAAA,CAAQ,GAAA,CAAI,8CAA8C,UAAU,CAAA;AACpE,QAAA,OAAA,CAAQ,GAAA,CAAI,wDAAwD,UAAU,CAAA;AAAA,MAChF;AAEA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAA;AAKF,MAAA,CACG,QAAQ,UAAU,CAAA,CAClB,YAAY,4CAA4C,CAAA,CACxD,SAAS,QAAA,EAAU,qBAAqB,CAAA,CACxC,MAAA,CAAO,iBAAiB,iCAAiC,CAAA,CACzD,OAAO,CAAC,IAAA,EAAc,SAAgC,GAAA,KAAiB;AACtE,EAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AACvC,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,WAAW,IAAI,CAAA;AAKjC,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,OAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA,KAAA,EAAO,IAAA;AAAA,MACP,QAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,SAAS,SAAA,CAAU,OAAA;AAAA,QACnB,IAAA,EAAM,UAAU,IAAA,IAAQ,IAAA;AAAA,QACxB,eAAA,EAAiB,UAAU,QAAA,CAAS,QAAA;AAAA,QACpC,SAAA,EAAW,UAAU,KAAA,CAAM,MAAA;AAAA,QAC3B,OAAO,OAAA,CAAQ,OAAA,GACX,UAAU,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UAC1B,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,UAAU,CAAA,CAAE,QAAA;AAAA,UACZ,OAAA,EAAS,EAAE,OAAA,IAAW,IAAA;AAAA,UACtB,OAAA,EAAS,EAAE,OAAA,IAAW,IAAA;AAAA,UACtB,aAAA,EAAe,EAAE,cAAA,IAAkB;AAAA,UACnC,CAAA,GACF,KAAA;AAAA;AACN,KACF;AAEA,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,MAAA,CAAO,QAAQ,UAAU,CAAA;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,2BAA2B,IAAI;AAAA,CAAI,CAAA;AAC/C,MAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAEhC,MAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,SAAA,CAAU,OAAO,CAAA,CAAE,CAAA;AAC/C,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,SAAA,CAAU,IAAI,CAAA,CAAE,CAAA;AAAA,MAC9C;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,CAAE,CAAA;AACzD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAEpD,MAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA,EAAG;AACjD,QAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,QAAA,KAAA,MAAW,IAAA,IAAQ,UAAU,KAAA,EAAO;AAClC,UAAA,OAAA,CAAQ,IAAI,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AACjD,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,MAAM,QAAkB,EAAC;AACzB,YAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,EAAM;AACrB,cAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,IAAI,CAAA,GACzC,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,GAC1B,KAAK,OAAA,CAAQ,IAAA;AACjB,cAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAE,CAAA;AAAA,YAC5B;AACA,YAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,cAAA,KAAA,CAAM,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA,CAAQ,OAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,YACxD;AACA,YAAA,IAAI,IAAA,CAAK,QAAQ,EAAA,EAAI;AACnB,cAAA,KAAA,CAAM,IAAA,CAAK,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,YACpC;AACA,YAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,cAAA,OAAA,CAAQ,IAAI,CAAA,gBAAA,EAAmB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,YACnD;AAAA,UACF;AACA,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA,CAAK,OAAA;AAC7E,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmB,QAAQ,CAAA,CAAE,CAAA;AAAA,UAC3C;AACA,UAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,YAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAA,GAC3C,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,GAC5B,IAAA,CAAK,cAAA;AACT,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,uBAAA,EAA0B,KAAK,CAAA,CAAE,CAAA;AAAA,UAC/C;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,QAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,QAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAE,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,CAAW,MAAA,IAAU,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC5C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,qBAAA,EAAuB;AACxC,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACpC,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,QACrB,SAAS,CAAA,CAAE;AAAA,OACb,CAAE,CAAA;AAEF,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,MAAA;AAAA,UACE;AAAA,YACE,OAAA,EAAS,KAAA;AAAA,YACT,IAAA;AAAA,YACA,KAAA,EAAO,KAAA;AAAA,YACP,KAAA,EAAO,mBAAA;AAAA,YACP;AAAA,WACF;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAM,6BAA6B,CAAA;AAC3C,QAAA,KAAA,MAAW,KAAA,IAAS,IAAI,MAAA,EAAQ;AAC9B,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,KAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,QAChE;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA,MAAA,IAAW,eAAe,eAAA,EAAiB;AACzC,MAAA,WAAA,CAAY,0BAA0B,GAAA,CAAI,OAAO,IAAI,EAAE,IAAA,IAAQ,UAAU,CAAA;AACzE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAWH,MAAA,CACG,OAAA,CAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,kDAAkD,EAC9D,QAAA,CAAS,QAAA,EAAU,qBAAqB,CAAA,CACxC,MAAA,CAAO,iBAAA,EAAmB,yCAAyC,MAAM,CAAA,CACzE,MAAA,CAAO,cAAA,EAAgB,8CAA8C,CAAA,CACrE,MAAA,CAAO,WAAA,EAAa,oDAAoD,CAAA,CACxE,MAAA,CAAO,0BAAA,EAA4B,sCAAsC,CAAA,CACzE,OAAO,kBAAA,EAAoB,uBAAuB,CAAA,CAClD,MAAA,CAAO,mBAAA,EAAqB,oCAAoC,EAChE,MAAA,CAAO,sBAAA,EAAwB,oDAAoD,CAAA,CACnF,MAAA,CAAO,mBAAA,EAAqB,iDAAiD,CAAA,CAC7E,MAAA,CAAO,sBAAA,EAAwB,mDAAmD,CAAA,CAClF,MAAA,CAAO,mBAAA,EAAqB,wBAAwB,CAAA,CACpD,MAAA,CAAO,eAAA,EAAiB,oCAAoC,CAAA,CAC5D,MAAA;AAAA,EACC,CACE,IAAA,EACA,OAAA,EAaA,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,QAAQ,GAAA,KAAQ,GAAA;AAEjC,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,UAAA,CAAW,IAAA,IAAQ,CAAC,QAAA,EAAU;AACjC,QAAA,OAAA,CAAQ,GAAA,CAAI,mBAAmB,IAAI;AAAA,CAAI,CAAA;AAAA,MACzC;AAEA,MAAA,MAAM,SAAA,GAAY,WAAW,IAAI,CAAA;AAEjC,MAAA,MAAM,cAAA,GAAiB;AAAA,QACrB,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,cAAc,OAAA,CAAQ,SAAA;AAAA,QACtB,eAAA,EAAiB,QAAQ,QAAA,KAAa;AAAA,OACxC;AAGA,MAAA,MAAM,OAAA,GAAU,cAAA,CAAe,SAAA,EAAW,cAAc,CAAA;AACxD,MAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,SAAA,EAAW,cAAc,CAAA;AAChE,MAAA,MAAM,eAAA,GAAkB,sBAAA,CAAuB,SAAA,EAAW,cAAc,CAAA;AACxE,MAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,SAAA,EAAW,cAAc,CAAA;AAG/D,MAAA,IAAI,QAAA,IAAY,WAAW,IAAA,EAAM;AAC/B,QAAA,MAAM,MAAA,GAAS;AAAA,UACb,OAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAQ,IAAA;AAAA,UACR,SAAA,EAAW;AAAA,YACT,UAAA,EAAY,OAAA;AAAA,YACZ,uBAAA,EAAyB,SAAA;AAAA,YACzB,qBAAA,EAAuB,eAAA;AAAA,YACvB,cAAA,EAAgB;AAAA;AAClB,SACF;AAEA,QAAA,IAAI,QAAA,IAAY,CAAC,UAAA,CAAW,IAAA,EAAM;AAEhC,UAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,QACrB,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,MAAA,EAAQ,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,QAC/B;AAEA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,MAAM,SAAS,OAAA,CAAQ,GAAA;AACvB,MAAA,IAAI,WAAA;AACJ,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,WAAA,GAAmBC,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,aAAA,EAAe,UAAU,CAAA;AAAA,MAC3D,CAAA,MAAO;AACL,QAAA,WAAA,GAAmBA,KAAA,CAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,MAC5C;AACA,MAAA,MAAM,UAAA,GAAkBA,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,uBAAuB,CAAA;AAC5D,MAAA,MAAM,UAAA,GAAkBA,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,qBAAqB,CAAA;AAC1D,MAAA,MAAM,MAAA,GAAcA,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,cAAc,CAAA;AAE/C,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAElB,QAAA,OAAA,CAAQ,IAAI,4CAA4C,CAAA;AACxD,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,WAAW,CAAA,IAAA,CAAM,CAAA;AACpC,QAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,UAAU,CAAA,IAAA,CAAM,CAAA;AACnC,QAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,UAAU,CAAA,IAAA,CAAM,CAAA;AACnC,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,eAAA,EAAiB,IAAA,EAAM,CAAC,CAAC,CAAA;AACpD,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,IAAA,EAAS,MAAM,CAAA,IAAA,CAAM,CAAA;AACjC,QAAA,OAAA,CAAQ,IAAI,QAAQ,CAAA;AACpB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,IAAI,CAAID,GAAA,CAAA,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,QAAGA,GAAA,CAAA,SAAA,CAAU,MAAA,EAAQ,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,MAC1C;AACA,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,MAAM,YAAA,GAAoBC,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,aAAa,CAAA;AACpD,QAAA,IAAI,CAAID,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAChC,UAAGA,GAAA,CAAA,SAAA,CAAU,YAAA,EAAc,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,QAChD;AAAA,MACF;AAGA,MAAGA,GAAA,CAAA,aAAA,CAAc,WAAA,EAAa,OAAA,EAAS,OAAO,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,WAAW,CAAA,CAAE,CAAA;AAEvC,MAAGA,GAAA,CAAA,aAAA,CAAc,UAAA,EAAY,SAAA,EAAW,OAAO,CAAA;AAC/C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,UAAU,CAAA,CAAE,CAAA;AAEtC,MAAGA,GAAA,CAAA,aAAA,CAAc,YAAY,IAAA,CAAK,SAAA,CAAU,iBAAiB,IAAA,EAAM,CAAC,GAAG,OAAO,CAAA;AAC9E,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,UAAU,CAAA,CAAE,CAAA;AAEtC,MAAGA,GAAA,CAAA,aAAA,CAAc,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAC1C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,MAAM,CAAA,CAAE,CAAA;AAElC,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,OAAA,CAAQ,IAAI,0BAA0B,CAAA;AACtC,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,WAAW,CAAA,kCAAA,CAAoC,CAAA;AAAA,MAC5E,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,WAAW,CAAA,yBAAA,CAA2B,CAAA;AAAA,MACjE;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,UAAU,CAAA,mBAAA,CAAqB,CAAA;AAC1D,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,sBAAA,EAAyB,UAAU,CAAA,sBAAA,CAAwB,CAAA;AACvE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAM,CAAA,oBAAA,CAAsB,CAAA;AAExD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,eAAe,eAAA,EAAiB;AAClC,QAAA,WAAA,CAAY,0BAA0B,GAAA,CAAI,OAAO,IAAI,EAAE,IAAA,IAAQ,UAAU,CAAA;AACzE,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAOF,MAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,WAAA,CAAY,oDAAoD,CAAA,CAChE,QAAA,CAAS,UAAU,qBAAqB,CAAA,CACxC,OAAO,mBAAA,EAAqB,kCAAkC,EAC9D,MAAA,CAAO,uBAAA,EAAyB,kCAAkC,CAAA,CAClE,MAAA,CAAO,eAAA,EAAiB,YAAY,CAAA,CACpC,MAAA;AAAA,EACC,yBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,6BAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,eAAA,EAAiB,6CAA6C,CAAA,CACrE,MAAA;AAAA,EACC,CACE,IAAA,EACA,OAAA,EAQA,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,WAAW,IAAI,CAAA;AAGjC,MAAA,MAAM,UAA6B,EAAC;AAEpC,MAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,MAAA,IAAU,QAAQ,EAAA,EAAI;AAChD,QAAA,OAAA,CAAQ,UAAU,EAAC;AACnB,QAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,OAAA,CAAQ,OAAA,CAAQ,OAAO,OAAA,CAAQ,IAAA;AAAA,QACjC;AACA,QAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,UAAA,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,QACxE;AACA,QAAA,IAAI,QAAQ,EAAA,EAAI;AACd,UAAA,OAAA,CAAQ,OAAA,CAAQ,KAAK,OAAA,CAAQ,EAAA;AAAA,QAC/B;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,UAAU,OAAA,CAAQ,OAAA;AAAA,MAC5B;AAEA,MAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,QAAA,OAAA,CAAQ,iBAAiB,OAAA,CAAQ,aAAA;AAAA,MACnC;AAEA,MAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,QAAA,MAAM,OAAA,GAAU,cAAA,CAAe,SAAA,EAAW,OAAO,CAAA;AAEjD,QAAA,IAAI,WAAW,IAAA,EAAM;AACnB,UAAA,MAAA;AAAA,YACE;AAAA,cACE,OAAA,EAAS,IAAA;AAAA,cACT,OAAA;AAAA,cACA,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAC1B,gBAAA,IAAI,MAAM,WAAA,EAAa;AACrB,kBAAA,OAAO;AAAA,oBACL,IAAA,EAAM,WAAA;AAAA,oBACN,QAAA,EAAU,UAAU,QAAA,CAAS;AAAA,mBAC/B;AAAA,gBACF;AACA,gBAAA,MAAM,IAAA,GAAO,UAAU,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAC,CAAA;AACrD,gBAAA,OAAO,IAAA,GACH,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,QAAA,EAAU,IAAA,CAAK,QAAA,EAAS,GAC3C,EAAE,IAAA,EAAM,CAAA,EAAG,UAAU,IAAA,EAAK;AAAA,cAChC,CAAC;AAAA,aACH;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,UAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,YAAA,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,UAC9D,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAI,mBAAmB,CAAA;AAAA,UACjC;AACA,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,OAAA,CAAQ,OAAA,IAAW,OAAO,CAAA,CAAE,CAAA;AACvD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,OAAA,CAAQ,cAAA,IAAkB,OAAO,CAAA,CAAE,CAAA;AACrE,UAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmB,OAAA,CAAQ,MAAM,CAAA,EAAA,CAAI,CAAA;AACjD,UAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,YAAA,IAAI,UAAU,WAAA,EAAa;AACzB,cAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,CAAE,CAAA;AAAA,YAChE,CAAA,MAAO;AACL,cAAA,MAAM,IAAA,GAAO,UAAU,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,KAAK,CAAA;AACzD,cAAA,IAAI,IAAA,EAAM;AACR,gBAAA,OAAA,CAAQ,IAAI,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,IAAA,EAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,cACrD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,EAAW,OAAO,CAAA;AAE1C,QAAA,IAAI,WAAW,IAAA,EAAM;AACnB,UAAA,MAAA;AAAA,YACE;AAAA,cACE,OAAA,EAAS,IAAA;AAAA,cACT,OAAA;AAAA,cACA,MAAA,EAAQ;AAAA,gBACN,UAAU,MAAA,CAAO,QAAA;AAAA,gBACjB,WAAA,EAAa,OAAO,YAAA,IAAgB,WAAA;AAAA,gBACpC,MAAA,EAAQ,OAAO,MAAA,IAAU;AAAA;AAC3B,aACF;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,UAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,YAAA,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,UAC9D,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAI,mBAAmB,CAAA;AAAA,UACjC;AACA,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,OAAA,CAAQ,OAAA,IAAW,OAAO,CAAA,CAAE,CAAA;AACvD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,OAAA,CAAQ,cAAA,IAAkB,OAAO,CAAA,CAAE,CAAA;AACrE,UAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,UAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAC7C,UAAA,IAAI,OAAO,YAAA,EAAc;AACvB,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoB,MAAA,CAAO,YAAY,CAAA,CAAE,CAAA;AAAA,UACvD,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAI,4BAA4B,CAAA;AAAA,UAC1C;AACA,UAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,UAC3C;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,eAAe,eAAA,EAAiB;AAClC,QAAA,WAAA,CAAY,0BAA0B,GAAA,CAAI,OAAO,IAAI,EAAE,IAAA,IAAQ,UAAU,CAAA;AACzE,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAOF,MAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,0CAA0C,CAAA,CACtD,MAAA,CAAO,CAAC,OAAA,EAAgC,GAAA,KAAiB;AACxD,EAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AACF,IAAA,MAAM,aAAa,YAAA,EAAa;AAChC,IAAA,MAAM,WAAW,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,KAAO,iBAAA,CAAkB,EAAE,CAAC,CAAA;AAE7D,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,MAAA;AAAA,QACE;AAAA,UACE,OAAA,EAAS,IAAA;AAAA,UACT,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,YAC7B,IAAI,CAAA,CAAE,EAAA;AAAA,YACN,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,aAAa,CAAA,CAAE,WAAA;AAAA,YACf,iBAAiB,CAAA,CAAE,eAAA;AAAA,YACnB,WAAW,CAAA,CAAE,SAAA;AAAA,YACb,iBAAiB,CAAA,CAAE,eAAA;AAAA,YACnB,gBAAgB,CAAA,CAAE,cAAA;AAAA,YAClB,gBAAgB,CAAA,CAAE;AAAA,WACpB,CAAE;AAAA,SACJ;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,8BAA8B,CAAA;AAC1C,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAC7B,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AACvC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,OAAA,CAAQ,eAAe,CAAA,CAAE,CAAA;AACrD,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,OAAA,CAAQ,SAAS,CAAA,CAAE,CAAA;AAC7C,QAAA,IAAI,QAAQ,eAAA,EAAiB;AAC3B,UAAA,OAAA,CAAQ,IAAI,2BAA2B,CAAA;AAAA,QACzC;AACA,QAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AACrC,UAAA,OAAA,CAAQ,IAAI,CAAA,qBAAA,EAAwB,OAAA,CAAQ,eAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,QACzE;AACA,QAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,MACd;AAEA,MAAA,OAAA,CAAQ,IAAI,sDAAsD,CAAA;AAClE,MAAA,OAAA,CAAQ,IAAI,yEAAyE,CAAA;AAAA,IACvF;AAEA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,SAAS,GAAA,EAAK;AACZ,IAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAC,CAAA;AAOH,MAAA,CACG,OAAA,CAAQ,cAAc,CAAA,CACtB,WAAA,CAAY,2CAA2C,CAAA,CACvD,QAAA,CAAS,MAAA,EAAQ,YAAY,CAAA,CAC7B,MAAA,CAAO,CAAC,EAAA,EAAY,SAAgC,GAAA,KAAiB;AACpE,EAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,YAAY,EAAe,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,kBAAkB,EAAe,CAAA;AAEjD,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,MAAA;AAAA,QACE;AAAA,UACE,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS;AAAA,YACP,IAAI,OAAA,CAAQ,EAAA;AAAA,YACZ,MAAM,OAAA,CAAQ,IAAA;AAAA,YACd,aAAa,OAAA,CAAQ,WAAA;AAAA,YACrB,QAAQ,OAAA,CAAQ,MAAA;AAAA,YAChB,YAAY,OAAA,CAAQ,UAAA;AAAA,YACpB,UAAU,OAAA,CAAQ;AAAA;AACpB,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AACtC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAC/B,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,IAAI,cAAc,CAAA;AAC1B,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,OAAA,CAAQ,WAAA,CACL,KAAA,CAAM,IAAI,CAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA,CACnB,KAAK,IAAI;AAAA,OACd;AACA,MAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAClD,MAAA,OAAA,CAAQ,IAAI,CAAA,oBAAA,EAAuB,OAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAAE,CAAA;AACrE,MAAA,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,OAAA,CAAQ,OAAO,KAAA,EAAO,MAAA,IAAU,CAAC,CAAA,CAAE,CAAA;AAE3D,MAAA,IAAI,QAAQ,MAAA,CAAO,KAAA,IAAS,QAAQ,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3D,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,IAAI,QAAQ,CAAA;AACpB,QAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO;AACvC,UAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAChD,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAK,OAAA;AAC9E,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,QAAQ,CAAA,CAAE,CAAA;AAAA,UAC1C;AACA,UAAA,IAAI,KAAK,MAAA,EAAQ;AACf,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,MAAA,CAAO,KAAK,OAAA,CAAQ,UAAA,IAAc,EAAE,CAAA,CAAE,SAAS,CAAA,EAAG;AACpD,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,QAAQ,OAAA,CAAQ,UAAA,IAAc,EAAE,CAAA,EAAG;AACnE,UAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,GAAW,aAAA,GAAgB,EAAA;AAClD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAE,CAAA;AACjC,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,KAAA,CAAM,WAAW,CAAA,CAAE,CAAA;AACtC,UAAA,IAAI,MAAM,OAAA,EAAS;AACjB,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,UAC7C;AACA,UAAA,IAAI,MAAM,OAAA,EAAS;AACjB,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,IAAI,WAAW,CAAA;AACvB,QAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAA,EAAc,OAAA,EAAS;AAC1C,UAAA,OAAA,CAAQ,IAAI,yBAAyB,CAAA;AAAA,QACvC;AACA,QAAA,IAAI,OAAA,CAAQ,SAAS,UAAA,EAAY;AAC/B,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,CAAA,cAAA,EAAiB,QAAQ,QAAA,CAAS,UAAA,CAAW,KAAK,CAAA,CAAA,EAAI,OAAA,CAAQ,QAAA,CAAS,UAAA,CAAW,cAAc,CAAA,CAAA;AAAA,WAClG;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,YAAA,EAAc;AAC/B,MAAA,WAAA,CAAY,GAAA,CAAI,SAAS,EAAE,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,EAAA,EAAG,EAAG,UAAU,CAAA;AACpE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAC,CAAA;ACzyBI,SAAS,OAAO,OAAA,EAAyB;AAC9C,EAAA,OAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,SAAS,MAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAClE;AAQO,SAAS,qBAAqBC,KAAAA,EAAmC;AACtE,EAAA,IAAIA,KAAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAE9B,EAAA,OACE,GAAA,GACAA,KAAAA,CACG,GAAA,CAAI,CAAC,OAAA,KAAY;AAChB,IAAA,MAAM,GAAA,GAAM,OAAO,OAAO,CAAA;AAE1B,IAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA,CAAE,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,EACpD,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAEf;AAWO,SAAS,uBAAuB,KAAA,EAAgD;AACrF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAa,KAAK,CAAA;AACpC,IAAA,OAAO,EAAE,GAAA,EAAK,aAAA,EAAe,KAAA,EAAO,MAAA,CAAO,SAAS,CAAA,EAAE;AAAA,EACxD,CAAA,CAAA,MAAQ;AAIN,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,IAAK,MAAA;AAC5C,IAAA,OAAO,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,MAAA,CAAO,UAAU,CAAA,EAAE;AAAA,EAC1D;AACF;AAYA,IAAM,uBAAA,uBAA8B,GAAA,CAAI,CAAC,SAAS,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAC,CAAA;AAKlF,IAAM,wCAAwB,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,UAAA,EAAY,WAAW,CAAC,CAAA;AAK5E,SAAS,qBAAA,CACP,GAAA,EACA,QAAA,GAAmB,EAAA,EAC+B;AAClD,EAAA,MAAM,QAA0D,EAAC;AAEjE,EAAA,IAAI,CAAIC,GAAA,CAAA,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,KAAA;AAEhC,EAAA,MAAM,UAAaA,GAAA,CAAA,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAE3D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAE3B,IAAA,IAAI,qBAAA,CAAsB,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AAE3C,IAAA,MAAM,YAAA,GAAe,WAAW,CAAA,EAAG,QAAQ,IAAI,KAAA,CAAM,IAAI,KAAK,KAAA,CAAM,IAAA;AACpE,IAAA,MAAM,QAAA,GAAgBC,KAAA,CAAA,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAI,CAAA;AAE1C,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AAEvB,MAAA,KAAA,CAAM,IAAA,CAAK,GAAG,qBAAA,CAAsB,QAAA,EAAU,YAAY,CAAC,CAAA;AAAA,IAC7D,CAAA,MAAO;AAEL,MAAA,MAAM,GAAA,GAAWA,KAAA,CAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,EAAE,WAAA,EAAY;AACjD,MAAA,IAAI,uBAAA,CAAwB,GAAA,CAAI,GAAG,CAAA,EAAG;AACpC,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,YAAA;AAAA,UACA,OAAA,EAAYD,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,MAAM;AAAA,SAC1C,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAmCO,SAAS,oBAAA,CAAqB,aAAqB,UAAA,EAA8B;AACtF,EAAA,MAAM,IAAA,GAAO,WAAW,QAAQ,CAAA;AAChC,EAAA,MAAM,WAA6D,EAAC;AAGpE,EAAA,MAAM,YAAA,GAAoBC,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,eAAe,CAAA;AAC3D,EAAA,IAAOD,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/B,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,YAAA,EAAc,eAAA;AAAA,MACd,OAAA,EAAYA,GAAA,CAAA,YAAA,CAAa,YAAA,EAAc,MAAM;AAAA,KAC9C,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,gBAAA,GAAmB,CAAC,GAAG,UAAU,EAAE,IAAA,EAAK;AAE9C,EAAA,KAAA,MAAW,OAAO,gBAAA,EAAkB;AAClC,IAAA,MAAM,YAAA,GAAoBC,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,GAAG,CAAA;AAE/C,IAAA,MAAM,aAAA,GAAgB,qBAAA,CAAsB,YAAA,EAAc,GAAG,CAAA;AAC7D,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,aAAa,CAAA;AAAA,EAChC;AAGA,EAAA,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,YAAA,CAAa,aAAA,CAAc,CAAA,CAAE,YAAY,CAAC,CAAA;AAEpE,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAEpC,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,YAAY,CAAA;AAC7B,IAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAChB,IAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,EACtB;AAEA,EAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAC1B;AC3KO,SAAS,aAAa,WAAA,EAA+B;AAC1D,EAAA,MAAM,YAAA,GAAoBC,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,eAAe,CAAA;AAC3D,EAAA,IAAI,CAAIC,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAChC,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,KAAA,CAASA,GAAA,CAAA,YAAA,CAAa,YAAA,EAAc,MAAM,CAAC,CAAA;AAAA,EACzD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAKO,SAAS,gBAAA,CACd,QAAA,EACA,QAAA,EACA,QAAA,EAC2B;AAC3B,EAAA,OAAO,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAQ,CAAA;AACtC;;;ACjBO,IAAM,oBAAA,GAAsD;AAAA,EACjE,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,uBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,uBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,uBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,OAAA,EAAS,+BAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,4BAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,SAAA,EAAW,kBAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACT;AAAA,EACA,SAAA,EAAW;AAAA,IACT,OAAA,EAAS,kBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,wBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,4BAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,eAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,4BAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,iBAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,SAAA,EAAW,kBAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,wBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,gBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,mBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,sBAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,SAAA,EAAW,kBAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACT;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW,yBAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACT;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS,qBAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,SAAA,EAAW,2BAAA;AAAA,IACX,KAAA,EAAO;AAAA;AAEX,CAAA;AASO,SAAS,sBAAsB,QAAA,EAAiC;AACrE,EAAA,OACE,oBAAA,CAAqB,QAAQ,CAAA,IAAK;AAAA,IAChC,OAAA,EAAS,kBAAkB,QAAQ,CAAA,CAAA;AAAA,IACnC,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW,8CAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACT;AAEJ;AAKO,SAAS,mBAAmB,QAAA,EAA0B;AAC3D,EAAA,OAAO,qBAAA,CAAsB,QAAQ,CAAA,CAAE,OAAA;AACzC;AAKO,SAAS,gBAAA,CACd,gBACA,KAAA,EACS;AACT,EAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAE5B,EAAA,MAAM,CAAC,OAAO,KAAK,CAAA,GAAI,eAAe,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AAC3D,EAAA,MAAM,YAAA,GACJ,QAAQ,CAAA,IAAK,KAAA,IAAS,KAAK,MAAA,GAAS,KAAA,IAAS,IAAI,UAAA,GAAa,OAAA;AAEhE,EAAA,MAAM,UAAA,GAAiC,CAAC,OAAA,EAAS,UAAA,EAAY,MAAM,CAAA;AACnE,EAAA,OAAO,WAAW,OAAA,CAAQ,YAAY,CAAA,IAAK,UAAA,CAAW,QAAQ,KAAK,CAAA;AACrE;ACrHO,IAAM,mBAAA,GAAsB,GAAA;AAC5B,IAAM,qBAAqB,MAAA,CAAO,QAAA;AAClC,IAAM,gBAAgB,MAAA,CAAO,YAAA;AACpC,IAAM,kBAAA,GAAqB,UAAA;AAE3B,IAAM,eAAA,GAAkB,oCAAA;AACxB,IAAM,2BAAA,GAA8B,6CAAA;AAEpC,IAAI,kBAAA,GAAqB,KAAA;AAEzB,SAAS,kBAAkB,KAAA,EAAqB;AAC9C,EAAA,IAAI,kBAAA,EAAoB;AACxB,EAAA,kBAAA,GAAqB,IAAA;AACrB,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,gBAAgB,UAAA,EAAY;AAC/E,IAAA,OAAA,CAAQ,WAAA;AAAA,MACN,wCAAwC,KAAK,CAAA,0KAAA,CAAA;AAAA,MAG7C,EAAE,IAAA,EAAM,gCAAA,EAAkC,IAAA,EAAM,oBAAA;AAAqB,KACvE;AAAA,EACF;AACF;AAcA,SAAS,qBAAA,CAAsB,MAAc,QAAA,EAA0B;AACrE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,EAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,GAAA,KAAQ;AAC3B,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,mCAAmC,CAAA;AACxD,IAAA,IAAI,CAAA,EAAG;AACL,MAAA,IAAI,UAAA,KAAe,IAAA,EAAM,UAAA,GAAa,CAAA,CAAE,CAAC,CAAA;AACzC,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,QAAQ,GAAA,GAAM,CAAC,CAAA,8BAAA,EAAiC,CAAA,CAAE,CAAC,CAAC,CAAA,kEAAA;AAAA,OAEtD;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,IAAI,UAAA,oBAA8B,UAAU,CAAA;AAC9C;AAEA,SAAS,WAAA,CAAY,KAAc,QAAA,EAAuC;AACxE,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,eAAeC,qBAAAA,EAAuB;AACxC,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,GAAG,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACnF,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,0BAAA,EAA6B,MAAM,CAAA,CAAE,CAAA;AAAA,EACnD,CAAA,MAAA,IAAW,eAAeC,eAAAA,EAAiB;AACzC,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,EACzB,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,IAAA,CAAK,2BAA2B,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3F;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,MAAA;AAAA,IACA,QAAA,EAAU,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,GAAW;AAAA,GAC7C;AACF;AAgBO,SAAS,0BAA0B,IAAA,EAAiC;AACzE,EAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,MAAA,KAAW,CAAA,EAAG;AAC5B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,MAAA,EAAQ,CAAC,+DAA+D;AAAA,KAC1E;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AAChD,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,oBAAoB,IAAI,CAAA;AACrC,IAAA,IAAI,cAAA,EAAgB,qBAAA,CAAsB,IAAA,EAAM,QAAQ,CAAA;AACxD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,IAAA;AAAA,MACA,QAAA,EAAU,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,GAAW,KAAA;AAAA,KAC7C;AAAA,EACF,SAAS,QAAA,EAAU;AACjB,IAAA,IAAI,CAAC,cAAA,EAAgB,OAAO,WAAA,CAAY,UAAU,QAAQ,CAAA;AAC1D,IAAA,qBAAA,CAAsB,MAAM,QAAQ,CAAA;AACpC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,2BAAA,EAA6B,EAAE,CAAA;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,oBAAoB,QAAQ,CAAA;AACzC,MAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,IACvC,SAAS,SAAA,EAAW;AAClB,MAAA,OAAO,WAAA,CAAY,WAAW,QAAQ,CAAA;AAAA,IACxC;AAAA,EACF;AACF;AA+BA,eAAsB,uBAAA,CACpB,MAAA,EACA,OAAA,GAAsC,EAAC,EACH;AACpC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAI,GAAA,CAAI,aAAA,EAAe,MAAM,CAAA;AAAA,EACxC,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,aAAA;AAAA,MACN,KAAA,EAAO,mBAAmB,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,KAC5E;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAiC;AAAA,IACrC,SAAA,EAAW,QAAQ,SAAA,IAAa,mBAAA;AAAA,IAChC,gBAAA,EAAkB,QAAQ,QAAA,IAAY,kBAAA;AAAA,IACtC,OAAA,EAAS,EAAE,YAAA,EAAc,OAAA,CAAQ,aAAa,kBAAA,EAAmB;AAAA,IACjE,cAAA,EAAgB,CAAC,KAAK;AAAA,GACxB;AAKA,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,gBAAgB,CAAA;AAEtD,EAAA,MAAM,MAAM,MAAM,YAAA,CAAa,MAAA,CAAO,QAAA,IAAY,YAAY,CAAA;AAC9D,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,OAAO,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,EAAA,EAAK,IAAI,KAAK,CAAA;AAAA,KAClC;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,EAAA,EAAI;AACpB,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,IAAA,EAAM,CAAA,KAAA,EAAQ,GAAA,CAAI,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,QACjC,KAAA,EAAO,QAAQ,GAAA,CAAI,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,SAAS,UAAU,CAAA;AAAA,OAChE;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,QAAA,CAAS,IAAA,EAAK;AACrC,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,IAAI,QAAA,EAAS;AAAA,EAClD,CAAA,SAAE;AACA,IAAA,MAAM,IAAI,KAAA,EAAM;AAAA,EAClB;AACF;;;AC1MA,SAAS,iBAAiB,IAAA,EAAsB;AAC9C,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,YAAA,EAAc,MAAA;AAAA,IACd,eAAA,EAAiB,OAAA;AAAA,IACjB,iBAAA,EAAmB,sBAAA;AAAA,IACnB,aAAA,EAAe,OAAA;AAAA,IACf,kBAAA,EAAoB,MAAA;AAAA,IACpB,cAAA,EAAgB,QAAA;AAAA,IAChB,SAAA,EAAW,WAAA;AAAA,IACX,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,IAAK,IAAA;AAC1B;AAKO,SAAS,uBAAuB,OAAA,EAA4C;AACjF,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,SAAA,CAAU,OAAO,CAAA;AAEpD,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AACxC,EAAA,MAAM,OAAA,GAAU,UAAA,EAAY,IAAA,IAAQ,EAAC;AACrC,EAAA,MAAM,SAAA,GAAY,qBAAqB,OAA8B,CAAA;AACrE,EAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,UAAA,EAAY,IAAA,IAAQ,SAAS,CAAA;AAGnE,EAAA,IAAI,SAAA,GAAY,kBAAA;AAChB,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAChC,EAAA,IAAI,YAAY,KAAA,IAAS,OAAA,CAAQ,UAAA,CAAW,MAAM,GAAG,SAAA,GAAY,kBAAA;AAAA,OAAA,IACxD,YAAY,KAAA,IAAS,OAAA,CAAQ,UAAA,CAAW,MAAM,GAAG,SAAA,GAAY,oBAAA;AAAA,OAAA,IAC7D,OAAA,KAAY,OAAO,SAAA,GAAY,eAAA;AAAA,OAAA,IAC/B,OAAA,KAAY,OAAO,SAAA,GAAY,eAAA;AAAA,OAAA,IAC/B,OAAA,KAAY,OAAO,SAAA,GAAY,eAAA;AAAA,OAAA,IAC/B,UAAA,EAAY,IAAA,KAAS,cAAA,IAAkB,OAAA,CAAQ,SAAS,CAAA,EAAG;AAElE,IAAA,SAAA,GAAY,YAAA;AAAA,EACd;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,aAAA,EAAe,YAAY,OAAA,IAAW,0BAAA;AAAA,IACtC,UAAA,EAAY,SAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AASO,SAAS,2BAA2B,OAAA,EAA4C;AACrF,EAAA,MAAM,EAAA,GAAK,mBAAmB,OAAO,CAAA;AACrC,EAAA,IAAI,GAAG,EAAA,EAAI;AACT,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,GAAG,KAAA,CAAM,IAAA;AAAA,IACrB,aAAA,EAAe,GAAG,KAAA,CAAM;AAAA,GAC1B;AACF;AAKA,SAAS,uBAAuB,KAAA,EAAkC;AAChE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAG7B,IAAA,MAAM,MAAA,GAAS,0BAA0B,KAAK,CAAA;AAC9C,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,IACvB;AACA,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,yBAAA;AAAA,MACZ,aAAA,EAAe,MAAA,CAAO,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,IAAK;AAAA,KAC9C;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,IAAI,CAAC,GAAA,CAAI,MAAA,IAAU,OAAO,GAAA,CAAI,WAAW,QAAA,EAAU;AACjD,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAA,EAAY,kBAAA;AAAA,QACZ,aAAA,EAAe;AAAA,OACjB;AAAA,IACF;AACA,IAAA,IAAI,CAAC,GAAA,CAAI,QAAA,IAAY,OAAO,GAAA,CAAI,aAAa,QAAA,EAAU;AACrD,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAA,EAAY,oBAAA;AAAA,QACZ,aAAA,EAAe;AAAA,OACjB;AAAA,IACF;AACA,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,qBAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AAKA,SAAS,2BAA2B,KAAA,EAAkC;AACpE,EAAA,MAAM,MAAA,GAAS,iCAAiC,KAAK,CAAA;AACrD,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,0BAAA;AAAA,IACZ,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,SAAS,yBAAyB,KAAA,EAAkC;AAClE,EAAA,MAAM,MAAA,GAAS,+BAA+B,KAAK,CAAA;AACnD,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,uBAAA;AAAA,IACZ,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,SAAS,qBAAqB,KAAA,EAAkC;AAC9D,EAAA,MAAM,MAAA,GAAS,2BAA2B,KAAK,CAAA;AAC/C,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,mBAAA;AAAA,IACZ,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,SAAS,yBAAyB,KAAA,EAAkC;AAClE,EAAA,MAAM,MAAA,GAAsC,2BAA2B,KAAK,CAAA;AAC5E,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,UAAU,MAAA,CAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,EAAE,OAAO;AAAA,KAChD;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA;AAClC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,YAAY,IAAA,IAAQ,uBAAA;AAAA,IAChC,aAAA,EAAe,YAAY,OAAA,IAAW;AAAA,GACxC;AACF;AAKA,SAAS,sBAAsB,KAAA,EAAkC;AAC/D,EAAA,MAAM,MAAA,GAAmC,+BAA+B,KAAK,CAAA;AAC7E,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,SAAS,yBAAyB,KAAA,EAAkC;AAClE,EAAA,MAAM,MAAA,GAAS,6BAA6B,KAAK,CAAA;AACjD,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,uBAAA;AAAA,IACZ,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,SAAS,qBAAqB,KAAA,EAAkC;AAC9D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAA;AAGZ,IAAA,IAAI,IAAI,gBAAA,IAAoB,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA,EAAG;AAC/D,MAAA,KAAA,MAAW,CAAA,IAAK,IAAI,gBAAA,EAAkB;AACpC,QAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAC,mBAAA,CAAoB,CAAC,CAAA,IAAK,CAAC,kBAAA,CAAmB,CAAC,CAAA,EAAG;AAC9E,UAAA,OAAO;AAAA,YACL,KAAA,EAAO,KAAA;AAAA,YACP,UAAA,EAAY,yBAAA;AAAA,YACZ,aAAA,EAAe,0BAA0B,CAAC,CAAA;AAAA,WAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,GAAA,CAAI,gBAAA,IAAoB,OAAO,GAAA,CAAI,qBAAqB,QAAA,EAAU;AACpE,MAAA,IAAI,CAAC,oBAAoB,GAAA,CAAI,gBAAgB,KAAK,CAAC,kBAAA,CAAmB,GAAA,CAAI,gBAAgB,CAAA,EAAG;AAC3F,QAAA,OAAO;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,UAAA,EAAY,4BAAA;AAAA,UACZ,aAAA,EAAe,CAAA,0BAAA,EAA6B,GAAA,CAAI,gBAAgB,CAAA;AAAA,SAClE;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,mBAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AAKA,SAAS,oBAAoB,KAAA,EAAkC;AAC7D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,kBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,KAAA;AAGZ,EAAA,IAAI,CAAC,GAAA,CAAI,OAAA,IAAW,OAAO,GAAA,CAAI,YAAY,QAAA,EAAU;AACnD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,mBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC/D,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,mBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAKA,SAAS,kBAAkB,KAAA,EAAkC;AAC3D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,gBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,KAAA;AAGZ,EAAA,IAAI,IAAI,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AAE7C,IAAA,KAAA,MAAW,MAAA,IAAU,IAAI,OAAA,EAAS;AAChC,MAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,IAAA,EAAM;AACjD,QAAA,OAAO;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,UAAA,EAAY,mBAAA;AAAA,UACZ,aAAA,EAAe;AAAA,SACjB;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAGA,EAAA,IAAI,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,SAAA,EAAW;AAC7B,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,0BAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AAKA,SAAS,oBAAoB,KAAA,EAAkC;AAC7D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,kBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAGA,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAKA,SAAS,mBAAmB,KAAA,EAAkC;AAE5D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAA;AAGZ,IAAA,IAAI,IAAI,MAAA,EAAQ;AACd,MAAA,OAAO,sBAAA,CAAuB,IAAI,MAAM,CAAA;AAAA,IAC1C;AAGA,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAO,sBAAA,CAAuB,IAAI,OAAO,CAAA;AAAA,IAC3C;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAKA,IAAM,kBAAA,uBAAyB,GAAA,CAAI;AAAA,EACjC,mBAAA;AAAA,EACA,0BAAA;AAAA,EACA,4BAAA;AAAA,EACA,qBAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AASD,SAAS,wBAAwB,KAAA,EAAkC;AACjE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,uBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,IAAI,CAAC,GAAA,CAAI,KAAA,IAAS,OAAO,GAAA,CAAI,UAAU,QAAA,EAAU;AAC/C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,iBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,MAAM,QAAQ,GAAA,CAAI,KAAA;AAClB,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAA,EAAY,gBAAA;AAAA,QACZ,aAAA,EAAe,YAAY,IAAI,CAAA,kBAAA;AAAA,OACjC;AAAA,IACF;AACA,IAAA,MAAM,CAAA,GAAI,IAAA;AACV,IAAA,IAAI,CAAC,kBAAA,CAAmB,GAAA,CAAI,CAAA,CAAE,WAAqB,CAAA,EAAG;AACpD,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAA,EAAY,uBAAA;AAAA,QACZ,eAAe,CAAA,SAAA,EAAY,IAAI,6BAA6B,MAAA,CAAO,CAAA,CAAE,WAAW,CAAC,CAAA;AAAA,OACnF;AAAA,IACF;AACA,IAAA,IAAI,OAAO,CAAA,CAAE,SAAA,KAAc,SAAA,EAAW;AACpC,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAA,EAAY,qBAAA;AAAA,QACZ,eAAe,CAAA,SAAA,EAAY,IAAI,+BAA+B,MAAA,CAAO,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA,OACnF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAQA,SAAS,0BAA0B,KAAA,EAAkC;AACnE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,yBAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AAKO,IAAM,mBAAA,GAAyD;AAAA;AAAA,EAEpE,KAAA,EAAO,CAAC,KAAA,KAAU;AAChB,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,EAClE,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,EAClE,CAAA;AAAA,EACA,IAAA,EAAM,CAAC,KAAA,KAAU;AACf,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,EAClE,CAAA;AAAA;AAAA;AAAA,EAIA,KAAA,EAAO,CAAC,KAAA,KAAU;AAChB,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,OAAO,0BAAA,CAA2B,GAAA,CAAI,MAAA,IAAU,GAAA,CAAI,WAAW,KAAK,CAAA;AAAA,EACtE,CAAA;AAAA;AAAA,EAGA,gBAAA,EAAkB,0BAAA;AAAA,EAClB,WAAA,EAAa,wBAAA;AAAA,EACb,MAAA,EAAQ,mBAAA;AAAA,EACR,SAAA,EAAW,sBAAA;AAAA,EACX,OAAA,EAAS,oBAAA;AAAA,EACT,WAAA,EAAa,wBAAA;AAAA,EACb,KAAA,EAAO,kBAAA;AAAA,EACP,WAAA,EAAa,wBAAA;AAAA,EACb,MAAA,EAAQ,mBAAA;AAAA,EACR,OAAA,EAAS,oBAAA;AAAA,EACT,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,EAClE,CAAA;AAAA,EACA,QAAA,EAAU,qBAAA;AAAA,EACV,IAAA,EAAM,iBAAA;AAAA,EACN,MAAA,EAAQ,uBAAA;AAAA,EACR,eAAA,EAAiB;AACnB,CAAA;AAKO,SAAS,aAAa,QAAA,EAAqC;AAChE,EAAA,OACE,mBAAA,CAAoB,QAAQ,CAAA,KAC3B,CAAC,KAAA,KAAU;AAGV,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,MAAA,MAAM,GAAA,GAAM,KAAA;AAEZ,MAAA,IAAI,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,MAAA,EAAQ;AAC7B,QAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,MAAM,CAAA;AAAA,MACzD;AAEA,MAAA,IAAI,SAAS,GAAA,IAAO,KAAA,IAAS,OAAO,KAAA,IAAS,GAAA,IAAO,SAAS,GAAA,EAAK;AAChE,QAAA,OAAO,uBAAuB,KAAK,CAAA;AAAA,MACrC;AAAA,IACF;AACA,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB,CAAA,CAAA;AAEJ;;;AC3eA,SAAS,SAAA,GAAgC;AACvC,EAAA,IAAI;AACF,IAAA,OAAO,SAAS,4BAAA,EAA8B,EAAE,UAAU,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAC5E,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAMO,SAAS,cAAA,CACd,SACA,SAAA,EACmB;AACnB,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,kBAAA,EAAoB,uBAAsB,GAAI,OAAA;AAGpF,EAAA,MAAM,QAAA,GAAW,aAAa,WAAW,CAAA;AAGzC,EAAA,MAAM,UAAaC,GAAA,CAAA,WAAA,CAAY,WAAA,EAAa,EAAE,aAAA,EAAe,MAAM,CAAA;AACnE,EAAA,IAAI,UAAA,GAAa,QACd,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,WAAA,MAAiB,CAAC,CAAA,CAAE,KAAK,UAAA,CAAW,GAAG,CAAC,CAAA,CACxD,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA,CACjB,IAAA,EAAK;AAER,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,CAAC,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,EAAG;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAE,CAAA;AAAA,IACnD;AACA,IAAA,UAAA,GAAa,CAAC,QAAQ,CAAA;AAAA,EACxB;AAGA,EAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,WAAA,EAAa,UAAU,CAAA;AAGlE,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AAGjC,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,YAAA,GAAoBC,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,GAAG,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,mBAAmB,GAAG,CAAA;AACtC,IAAA,QAAA,CAAS,IAAI,OAAO,CAAA;AAEpB,IAAA,MAAM,SAAA,GAAY,aAAa,GAAG,CAAA;AAElC,IAAA,MAAM,KAAA,GACHD,GAAA,CAAA,WAAA,CAAY,YAAY,CAAA,CACxB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA,CACjC,IAAA,EAAK;AAER,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,QAAA,GAAgBC,KAAA,CAAA,IAAA,CAAK,YAAA,EAAc,IAAI,CAAA;AAC7C,MAAA,MAAM,OAAA,GAAaD,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,MAAM,CAAA;AAChD,MAAA,IAAI,OAAA;AAEJ,MAAA,MAAM,UAAA,GAAa,GAAG,GAAG,CAAA,CAAA,EAAI,KAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAA,CAAA;AACtD,MAAA,SAAA,EAAW,cAAc,UAAU,CAAA;AAEnC,MAAA,IAAI;AACF,QAAA,OAAA,GAAU,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC9B,SAAS,GAAA,EAAK;AAEZ,QAAA,MAAA,EAAA;AACA,QAAA,MAAM,MAAA,GAAqB;AAAA,UACzB,EAAA,EAAI,GAAG,UAAU,CAAA,MAAA,CAAA;AAAA,UACjB,QAAA,EAAU,OAAA;AAAA,UACV,MAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAU;AAAA,YACR,KAAA,EAAO,KAAA;AAAA,YACP,UAAA,EAAY,gBAAA;AAAA,YACZ,eAAgB,GAAA,CAAc;AAAA,WAChC;AAAA,UACA,WAAA,EAAa;AAAA,YACX,UAAA,EAAY,gBAAA;AAAA,YACZ,eAAgB,GAAA,CAAc;AAAA;AAChC,SACF;AACA,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,QAAA,SAAA,EAAW,iBAAiB,MAAM,CAAA;AAClC,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,UAAA,GAAa,OAAA;AACnB,MAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA;AAEvD,MAAA,IAAI,aAAA,EAAe;AAEjB,QAAA,MAAM,IAAA,GAAO,OAAA;AAEb,QAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,CAAK,OAAA,EAAS,KAAK,CAAA,EAAG;AAC1C,UAAA,OAAA,EAAA;AACA,UAAA,MAAM,MAAA,GAAqB;AAAA,YACzB,EAAA,EAAI,UAAA;AAAA,YACJ,QAAA,EAAU,OAAA;AAAA,YACV,MAAA,EAAQ,MAAA;AAAA,YACR,WAAA,EAAa;AAAA,cACX,WAAA,EAAa,CAAA,gBAAA,EAAmB,IAAA,CAAK,OAAO,kBAAkB,KAAK,CAAA;AAAA;AACrE,WACF;AACA,UAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,UAAA,SAAA,EAAW,iBAAiB,MAAM,CAAA;AAClC,UAAA;AAAA,QACF;AAEA,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAC7C,UAAA,MAAM,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AACzB,UAAA,MAAM,WAAA,GAAc,CAAA,CAAE,IAAA,IAAQ,CAAA,QAAA,EAAW,CAAC,CAAA,CAAA;AAC1C,UAAA,MAAM,MAAA,GAAS,GAAG,UAAU,CAAA,CAAA,EAAI,YAAY,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAC,CAAA,CAAA;AAEhE,UAAA,SAAA,EAAW,cAAc,MAAM,CAAA;AAI/B,UAAA,IAAI,CAAC,CAAA,CAAE,QAAA,IAAY,OAAO,CAAA,CAAE,QAAA,CAAS,UAAU,SAAA,EAAW;AACxD,YAAA,OAAA,EAAA;AACA,YAAA,MAAME,OAAAA,GAAqB;AAAA,cACzB,EAAA,EAAI,MAAA;AAAA,cACJ,QAAA,EAAU,OAAA;AAAA,cACV,MAAA,EAAQ,MAAA;AAAA,cACR,WAAA,EAAa;AAAA,gBACX,WAAA,EAAa;AAAA;AACf,aACF;AACA,YAAA,OAAA,CAAQ,KAAKA,OAAM,CAAA;AACnB,YAAA,SAAA,EAAW,iBAAiBA,OAAM,CAAA;AAClC,YAAA;AAAA,UACF;AAGA,UAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,CAAA,CAAE,KAAK,CAAA;AAKlD,UAAA,IAAI,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,IAAY,CAAA,CAAE,UAAU,IAAA,EAAM;AACnD,YAAA,MAAM,WAAW,CAAA,CAAE,KAAA;AACnB,YAAA,IAAI,QAAA,CAAS,MAAA,KAAW,MAAA,IAAa,QAAA,CAAS,YAAY,MAAA,EAAW;AACnE,cAAA,MAAA,EAAA;AACA,cAAA,MAAMA,OAAAA,GAAqB;AAAA,gBACzB,EAAA,EAAI,MAAA;AAAA,gBACJ,QAAA,EAAU,OAAA;AAAA,gBACV,MAAA,EAAQ,MAAA;AAAA,gBACR,WAAA,EAAa;AAAA,kBACX,aAAA,EAAe;AAAA;AACjB,eACF;AACA,cAAA,OAAA,CAAQ,KAAKA,OAAM,CAAA;AACnB,cAAA,SAAA,EAAW,iBAAiBA,OAAM,CAAA;AAClC,cAAA;AAAA,YACF;AAAA,UACF;AAEA,UAAA,MAAM,QAAA,GAAW,SAAA,CAAU,CAAA,CAAE,KAAK,CAAA;AAGlC,UAAA,MAAM,aAAA,GAAgB,EAAE,QAAA,CAAS,KAAA;AACjC,UAAA,MAAM,cAAc,QAAA,CAAS,KAAA;AAC7B,UAAA,MAAM,aAAA,GAAgB,CAAA,CAAE,QAAA,CAAS,UAAA,IAAc,EAAE,QAAA,CAAS,KAAA;AAC1D,UAAA,MAAM,cAAc,QAAA,CAAS,UAAA;AAE7B,UAAA,IAAI,MAAA;AACJ,UAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,YAAA,MAAA,GAAS,MAAA;AACT,YAAA,MAAA,EAAA;AAAA,UACF,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,CAAC,WAAA,EAAa;AAEzC,YAAA,IAAI,aAAA,IAAiB,WAAA,IAAe,aAAA,KAAkB,WAAA,EAAa;AACjE,cAAA,MAAA,GAAS,MAAA;AACT,cAAA,MAAA,EAAA;AAAA,YACF,CAAA,MAAO;AACL,cAAA,MAAA,GAAS,MAAA;AACT,cAAA,MAAA,EAAA;AAAA,YACF;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAA,GAAS,MAAA;AACT,YAAA,MAAA,EAAA;AAAA,UACF;AAEA,UAAA,MAAM,MAAA,GAAqB;AAAA,YACzB,EAAA,EAAI,MAAA;AAAA,YACJ,QAAA,EAAU,OAAA;AAAA,YACV,MAAA;AAAA,YACA,QAAA,EAAU;AAAA,cACR,KAAA,EAAO,aAAA;AAAA,cACP,UAAA,EAAY;AAAA,aACd;AAAA,YACA,QAAA,EAAU;AAAA,cACR,KAAA,EAAO,WAAA;AAAA,cACP,UAAA,EAAY,WAAA;AAAA,cACZ,eAAe,QAAA,CAAS;AAAA,aAC1B;AAAA,YACA,WAAA,EAAa;AAAA,cACX,YAAA,EAAc,WAAA;AAAA,cACd,UAAU,QAAA,CAAS;AAAA;AACrB,WACF;AACA,UAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,UAAA,SAAA,EAAW,iBAAiB,MAAM,CAAA;AAAA,QACpC;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,aAAA,GAAgB,OAAA;AACtB,QAAA,MAAM,MAAA,GAAS,UAAA;AAGf,QAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,QAAA,EAAU,GAAA,EAAK,IAAI,CAAA;AAG1D,QAAA,MAAM,eAAA,GAAkB,cAAc,OAAA,IAAW,OAAA;AACjD,QAAA,MAAM,WAAA,GAAc,aAAA,CAAc,OAAA,GAC9B,sBAAA,CAAuB,eAAe,CAAA,GACtC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA,EAAE;AAG7C,QAAA,MAAM,gBACJ,aAAA,CAAc,cAAA,IACd,eAAe,cAAA,KACd,GAAA,KAAQ,WAAW,GAAA,KAAQ,MAAA,CAAA;AAG9B,QAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,cAAA,IAAkB,aAAA,EAAe,mBAAA;AAGrE,QAAA,MAAM,eAAe,aAAA,EAAe,aAAA;AACpC,QAAA,MAAM,kBAAkB,aAAA,EAAe,gBAAA;AAEvC,QAAA,MAAM,QAAA,GAAW,UAAU,eAAe,CAAA;AAE1C,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,aAAA,IAAiB,SAAS,KAAA,EAAO;AACnC,UAAA,MAAA,GAAS,MAAA;AACT,UAAA,MAAA,EAAA;AAAA,QACF,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,CAAC,SAAS,KAAA,EAAO;AAE5C,UAAA,IAAI,QAAA,GAAW,KAAA;AACf,UAAA,IAAI,aAAA,IAAiB,QAAA,CAAS,UAAA,IAAc,aAAA,KAAkB,SAAS,UAAA,EAAY;AACjF,YAAA,QAAA,GAAW,IAAA;AAAA,UACb;AAEA,UAAA,IAAI,YAAA,IAAgB,QAAA,CAAS,UAAA,IAAc,YAAA,KAAiB,SAAS,UAAA,EAAY;AAC/E,YAAA,QAAA,GAAW,IAAA;AAAA,UACb;AAEA,UAAA,IACE,eAAA,IACA,QAAA,CAAS,aAAA,IACT,eAAA,KAAoB,SAAS,aAAA,EAC7B;AACA,YAAA,QAAA,GAAW,IAAA;AAAA,UACb;AACA,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,MAAA,GAAS,MAAA;AACT,YAAA,MAAA,EAAA;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAA,GAAS,MAAA;AACT,YAAA,MAAA,EAAA;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,GAAS,MAAA;AACT,UAAA,MAAA,EAAA;AAAA,QACF;AAEA,QAAA,MAAM,MAAA,GAAqB;AAAA,UACzB,EAAA,EAAI,MAAA;AAAA,UACJ,QAAA,EAAU,OAAA;AAAA,UACV,MAAA;AAAA,UACA,QAAA,EAAU;AAAA,YACR,KAAA,EAAO,aAAA;AAAA,YACP,UAAA,EAAY,aAAA;AAAA,YACZ,UAAA,EAAY,YAAA;AAAA,YACZ,aAAA,EAAe;AAAA,WACjB;AAAA,UACA,QAAA,EAAU;AAAA,YACR,OAAO,QAAA,CAAS,KAAA;AAAA,YAChB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,eAAe,QAAA,CAAS,aAAA;AAAA,YACxB,eAAe,QAAA,CAAS;AAAA,WAC1B;AAAA,UACA,WAAA,EAAa;AAAA,YACX,YAAA,EAAc,WAAA;AAAA,YACd,UAAU,QAAA,CAAS;AAAA;AACrB,SACF;AACA,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,QAAA,SAAA,EAAW,iBAAiB,MAAM,CAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,eAAgC,EAAC;AACvC,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,UAAA,GAAa,sBAAsB,GAAG,CAAA;AAE5C,IAAA,IAAI,CAAC,aAAa,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,KAAY,UAAA,CAAW,OAAO,CAAA,EAAG;AAC/D,MAAA,YAAA,CAAa,KAAK,UAAU,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,OAAO,CAAC,CAAA;AAE9D,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AAGzB,EAAA,MAAM,MAAA,GAA4B;AAAA,IAChC,cAAA,EAAgB,6BAAA;AAAA,IAChB,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,uBAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,cAAA,EAAgB;AAAA,QACd,GAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAO;AAAA,OACT;AAAA,MACA,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,EAAE,IAAA,EAAK;AAAA,MACpC;AAAA,KACF;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,MAAM,kBAAA,IAAsB,WAAA;AAAA,MAC5B,SAAS,qBAAA,IAAyB;AAAA,KACpC;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA,EAAO,SAAS,MAAA,GAAS,OAAA;AAAA,MACzB,MAAA,EAAQ,MAAA,KAAW,CAAA,GAAI,MAAA,GAAS;AAAA,KAClC;AAAA,IACA,OAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,YAAA,EAAA,iBAAc,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MACrC,aAAa,OAAA,GAAU,SAAA;AAAA,MACvB,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,WAAA;AAAA,QACN,SAAS,qBAAA,IAAyB,OAAA;AAAA,QAClC,SAAS,SAAA;AAAU;AACrB;AACF,GACF;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,iBAAiB,MAAA,EAAmC;AAClE,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,CAAM,KAAK,+BAA+B,CAAA;AAC1C,EAAA,KAAA,CAAM,KAAK,+BAA+B,CAAA;AAC1C,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,MAAA,CAAO,QAAQ,MAAA,CAAO,WAAA,EAAa,CAAA,CAAE,CAAA;AAC3D,EAAA,KAAA,CAAM,IAAA,CAAK,aAAa,MAAA,CAAO,KAAA,CAAM,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC1D,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAChD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAChD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AACjD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AAE/C,EAAA,MAAM,QAAA,GAAW,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AACjE,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACxB,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,CAAA,oBAAA,EAAuB,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,UAAA,GAAa,CAAA,QAAA,EAAW,CAAA,CAAE,QAAA,CAAS,UAAU,KAAK,EAAE,CAAA;AAAA,SAC3G;AAAA,MACF;AACA,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,CAAA,oBAAA,EAAuB,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,UAAA,GAAa,CAAA,QAAA,EAAW,CAAA,CAAE,QAAA,CAAS,UAAU,KAAK,EAAE,CAAA;AAAA,SAC3G;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKO,SAAS,qBAAqB,MAAA,EAAmC;AACtE,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,CAAM,KAAK,2BAA2B,CAAA;AACtC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,CAAA,YAAA,EAAe,MAAA,CAAO,QAAQ,MAAA,CAAO,WAAA,EAAa,CAAA,CAAE,CAAA;AAC/D,EAAA,KAAA,CAAM,IAAA,CAAK,iBAAiB,MAAA,CAAO,KAAA,CAAM,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC9D,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AACvB,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAC/B,EAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAC/B,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAA,CAAI,CAAA;AAClD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAA,CAAI,CAAA;AAClD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAA,CAAI,CAAA;AACpD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAA,CAAI,CAAA;AAEhD,EAAA,MAAM,QAAA,GAAW,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AACjE,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AACxB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACxB,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,CAAA,sBAAA,EAAyB,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,UAAA,GAAa,CAAA,QAAA,EAAW,CAAA,CAAE,QAAA,CAAS,UAAU,KAAK,EAAE,CAAA;AAAA,SAC7G;AAAA,MACF;AACA,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,CAAA,sBAAA,EAAyB,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,UAAA,GAAa,CAAA,QAAA,EAAW,CAAA,CAAE,QAAA,CAAS,UAAU,KAAK,EAAE,CAAA;AAAA,SAC7G;AAAA,MACF;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AC5dO,SAAS,UAAA,GAAqB;AAEnC,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAUC,IAAAA,CAAK,SAAA,EAAW,IAAA,EAAM,MAAM,cAAc,CAAA;AAC1D,IAAA,IAAIC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAMC,YAAAA,CAAa,OAAA,EAAS,MAAM,CAAC,CAAA;AACpD,MAAA,IAAI,GAAA,CAAI,OAAA,EAAS,OAAO,GAAA,CAAI,OAAA;AAAA,IAC9B;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,UAAUF,IAAAA,CAAK,OAAA,CAAQ,KAAI,EAAG,UAAA,EAAY,OAAO,cAAc,CAAA;AACrE,IAAA,IAAIC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAMC,YAAAA,CAAa,OAAA,EAAS,MAAM,CAAC,CAAA;AACpD,MAAA,IAAI,GAAA,CAAI,OAAA,EAAS,OAAO,GAAA,CAAI,OAAA;AAAA,IAC9B;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,OAAO,eAAA;AACT;AAKO,SAAS,UAAA,GAAqB;AACnC,EAAA,OAAO,CAAA,KAAA,EAAQ,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACzC;AAKO,SAAS,SAAA,GAAgC;AAE9C,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,UAAA,IAAc,OAAA,CAAQ,GAAA,CAAI,UAAA;AAC/C;;;ACpBA,SAASC,kBAAiB,GAAA,EAAwC;AAChE,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,OAAO,OAAO,IAAA,EAAK;AACrB;AAKA,SAASC,YAAAA,CACP,KAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAC/B,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,MAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,MAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,IACvC;AAAA,EACF;AACF;AAKA,SAAS,gBAAgB,UAAA,EAAoC;AAE3D,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAA,GAAeC,KAAA,CAAA,OAAA,CAAQ,SAAA,EAAW,wCAAwC,CAAA;AAChF,EAAA,IAAOD,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,OAAA;AAAA,EACT;AAGA,EAAA,MAAM,QAAA,GAAgBC,KAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,4BAA4B,CAAA;AACzE,EAAA,IAAOD,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAcC,KAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,kCAAkC,CAAA;AAC7E,EAAA,IAAOD,GAAA,CAAA,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,eAAe,WAAA,EAA+B;AACrD,EAAA,MAAM,UAAaA,GAAA,CAAA,WAAA,CAAY,WAAA,EAAa,EAAE,aAAA,EAAe,MAAM,CAAA;AACnE,EAAA,OAAO,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,WAAA,MAAiB,CAAC,CAAA,CAAE,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC5F;AAKA,SAAS,cAAc,YAAA,EAA8B;AACnD,EAAA,IAAI,CAAIA,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG,OAAO,CAAA;AACzC,EAAA,MAAM,KAAA,GAAWA,gBAAY,YAAY,CAAA;AACzC,EAAA,OAAO,KAAA,CAAM,OAAO,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,OAAO,CAAC,CAAA,CAAE,MAAA;AAClD;AAEA,IAAM,WAAA,GAAc,IAAIE,OAAAA,CAAQ,aAAa,CAAA,CAC1C,YAAY,qCAAqC,CAAA,CACjD,MAAA,CAAO,QAAA,EAAU,uBAAuB,CAAA;AAK3C,WAAA,CACG,QAAQ,KAAK,CAAA,CACb,WAAA,CAAY,uBAAuB,EACnC,MAAA,CAAO,qBAAA,EAAuB,0CAAA,EAA4C,UAAU,EACpF,MAAA,CAAO,2BAAA,EAA6B,6BAA6B,CAAA,CACjE,OAAO,uBAAA,EAAyB,qCAAA,EAAuC,MAAM,CAAA,CAC7E,OAAO,eAAA,EAAiB,2BAA2B,CAAA,CACnD,MAAA,CAAO,qBAAqB,4BAA4B,CAAA,CACxD,MAAA,CAAO,yBAAA,EAA2B,kCAAkC,WAAW,CAAA,CAC/E,MAAA,CAAO,OAAO,SAAS,GAAA,KAAQ;AAC9B,EAAA,MAAM,UAAA,GAAaJ,kBAAiB,GAAG,CAAA;AACvC,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,EAAA,IAAI;AAEF,IAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,OAAA,CAAQ,QAAQ,CAAA;AACpD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAAC,YAAAA;AAAA,QACE,8BAAA;AAAA,QACA;AAAA,UACE,MAAM,OAAA,CAAQ,QAAA,GACV,CAAA,+BAAA,EAAkC,OAAA,CAAQ,QAAQ,CAAA,CAAA,GAClD;AAAA,SACN;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAkC,CAAC,OAAA,EAAS,UAAA,EAAY,MAAM,CAAA;AACpE,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxC,MAAAA,YAAAA;AAAA,QACE,2BAAA;AAAA,QACA;AAAA,UACE,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,KAAA,EAAO;AAAA,SACT;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAyC,QAAQ,OAAA,GACnD;AAAA,MACE,WAAA,EAAa,CAAC,MAAA,KAAmB;AAC/B,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,cAAA,EAAgB,CAAC,MAAA,KAAuB;AACtC,QAAA,MAAM,MAAA,GACJ,OAAO,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO,MAAA,KAAW,SAAS,MAAA,GAAS,MAAA;AAC1E,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,MAAM,CAAA,EAAA,EAAK,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AAAA,MACzC;AAAA,KACF,GACA,KAAA,CAAA;AAGJ,IAAA,MAAM,MAAA,GAAS,cAAA;AAAA,MACb;AAAA,QACE,WAAA;AAAA,QACA,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,oBAAoB,OAAA,CAAQ,cAAA;AAAA,QAC5B,uBAAuB,UAAA;AAAW,OACpC;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAA,CAAO,cAAA,CAAe,UAAU,UAAA,EAAW;AAC3C,IAAA,MAAM,SAAS,SAAA,EAAU;AACzB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,eAAe,MAAA,GAAS,MAAA;AAAA,IACjC;AAGA,IAAA,MAAA,CAAO,IAAA,GAAO;AAAA,MACZ,YAAA,EAAA,iBAAc,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MACrC,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,SAAS,UAAA;AAAW,OACtB;AAAA,MACA,WAAA,EAAa,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,KAC5B;AAGA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,UAAA,CAAW,IAAA,EAAM;AAChD,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC7C,CAAA,MAAA,IAAW,OAAA,CAAQ,MAAA,KAAW,UAAA,EAAY;AACxC,MAAA,OAAA,CAAQ,GAAA,CAAI,oBAAA,CAAqB,MAAM,CAAC,CAAA;AAAA,IAC1C,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAAA,IACtC;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,MAAA,KAAW,IAAI,CAAA,GAAI,CAAA;AAAA,EACvD,SAAS,GAAA,EAAK;AACZ,IAAAA,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAKH,WAAA,CACG,QAAQ,MAAM,CAAA,CACd,WAAA,CAAY,0CAA0C,EACtD,MAAA,CAAO,2BAAA,EAA6B,oCAAoC,CAAA,CACxE,OAAO,mBAAA,EAAqB,4BAA4B,EACxD,MAAA,CAAO,CAAC,SAAS,GAAA,KAAQ;AACxB,EAAA,MAAM,UAAA,GAAaD,kBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AAEF,IAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,OAAA,CAAQ,QAAQ,CAAA;AACpD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAAC,YAAAA;AAAA,QACE,8BAAA;AAAA,QACA;AAAA,UACE,MAAM,OAAA,CAAQ,QAAA,GACV,CAAA,+BAAA,EAAkC,OAAA,CAAQ,QAAQ,CAAA,CAAA,GAClD;AAAA,SACN;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAoBE,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,eAAe,CAAA;AAC3D,IAAA,MAAM,QAAA,GAAcD,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,GACvC,IAAA,CAAK,KAAA,CAASA,GAAA,CAAA,YAAA,CAAa,YAAA,EAAc,MAAM,CAAC,CAAA,GAChD,EAAC;AAGL,IAAA,MAAM,UAAA,GAAa,eAAe,WAAW,CAAA;AAE7C,IAAA,IAAI,QAAQ,QAAA,EAAU;AAEpB,MAAA,IAAI,CAAC,UAAA,CAAW,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC1C,QAAAD,YAAAA;AAAA,UACE,oBAAA;AAAA,UACA;AAAA,YACE,UAAU,OAAA,CAAQ,QAAA;AAAA,YAClB,SAAA,EAAW;AAAA,WACb;AAAA,UACA;AAAA,SACF;AACA,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,YAAA,GAAoBE,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,OAAA,CAAQ,QAAQ,CAAA;AAC5D,MAAA,MAAM,KAAA,GAAWD,GAAA,CAAA,WAAA,CAAY,YAAY,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AAC5E,MAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA;AAIlD,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACjC,IAAA,EAAM,CAAA;AAAA,UACN,WAAA,EAAc,gBAAA,GAAmB,CAAC,CAAA,EAAG,WAAA,IAA0B;AAAA,SACjE,CAAE,CAAA;AACF,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,QAAA,EAAS,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAC/E,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,OAAA,CAAQ,QAAQ,CAAA;AAAA,CAAK,CAAA;AAChD,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,UAAA,MAAM,IAAA,GAAO,gBAAA,GAAmB,IAAI,CAAA,IAAK,EAAC;AAC1C,UAAA,MAAM,IAAA,GAAQ,KAAK,WAAA,IAA0B,gBAAA;AAC7C,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AACvB,UAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,IAAI;AAAA,CAAI,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,UAC/C,IAAA,EAAM,GAAA;AAAA,UACN,aAAA,EAAe,aAAA,CAAmBC,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,GAAG,CAAC;AAAA,SAC1D,CAAE,CAAA;AACF,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,EAAE,YAAY,eAAA,EAAgB,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MACtE,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA;AAAA,CAA0C,CAAA;AACtD,QAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,UAAA,MAAM,KAAA,GAAQ,aAAA,CAAmBA,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,GAAG,CAAC,CAAA;AACvD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,QAC5C;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,wEAAA,CAA4E,CAAA;AAAA,MAC1F;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAAF,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AC/RH,IAAM,gBAAA,GAAuC;AAAA,EAC3C;AAAA,IACE,EAAA,EAAI,eAAA;AAAA,IACJ,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,sDAAA;AAAA,IACb,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK;AAAA;AACP,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,cAAA;AAAA,IACJ,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,iDAAA;AAAA,IACb,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,yBAAA;AAAA,MACL,GAAA,EAAK,gBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,iBAAA;AAAA,MACL,gBAAA,EAAkB,CAAC,QAAA,EAAU,OAAO,CAAA;AAAA,MACpC,gBAAA,EAAkB,QAAA;AAAA,MAClB,cAAA,EAAgB;AAAA;AAClB,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,sBAAA;AAAA,IACJ,IAAA,EAAM,sBAAA;AAAA,IACN,WAAA,EAAa,+DAAA;AAAA,IACb,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,2BAAA;AAAA,MACL,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,eAAA;AAAA,MACL,GAAA,EAAK;AAAA,QACH,kCAAA,EAAoC;AAAA,UAClC,OAAA,EAAS,KAAA;AAAA,UACT,cAAA,EAAgB,gBAAA;AAAA,UAChB,UAAA,EAAY,0BAAA;AAAA,UACZ,YAAA,EAAc,0BAAA;AAAA,UACd,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAU;AAAA,UAC3B,KAAA,EAAO,EAAE,IAAA,EAAM,kBAAA,EAAoB,aAAa,IAAA,EAAK;AAAA,UACrD,MAAA,EAAQ,EAAE,IAAA,EAAM,kBAAA,EAAoB,aAAa,IAAA;AAAK;AACxD;AACF;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,kBAAA;AAAA,IACJ,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,0CAAA;AAAA,IACb,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,yBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,oBAAA;AAAA,MACL,GAAA,EAAK,KAAA;AAAA,MACL,GAAA,EAAK,KAAA;AAAA,MACL,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW,gBAAA;AAAA,QACX,MAAA,EAAQ,KAAA;AAAA,QACR,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,aAAA;AAAA,IACJ,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,iCAAA;AAAA,IACb,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK;AAAA;AACP,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,iBAAA;AAAA,IACN,WAAA,EAAa,0DAAA;AAAA,IACb,QAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA,IACA,aAAA,EAAe;AAAA,GACjB;AAAA,EACA;AAAA,IACE,EAAA,EAAI,YAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,qDAAA;AAAA,IACb,QAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA,IACA,aAAA,EAAe;AAAA,GACjB;AAAA,EACA;AAAA,IACE,EAAA,EAAI,aAAA;AAAA,IACJ,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EAAa,6DAAA;AAAA,IACb,QAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA,IACA,aAAA,EAAe;AAAA;AAEnB,CAAA;AAKO,SAAS,eAAe,UAAA,EAAoC;AAEjE,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAO,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAA,GAAe,KAAA,CAAA,OAAA,CAAQ,SAAA,EAAW,uCAAuC,CAAA;AAC/E,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,OAAA;AAAA,EACT;AAGA,EAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,2BAA2B,CAAA;AACxE,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAc,KAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,iCAAiC,CAAA;AAC5E,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,kBAAA,CACP,QAAA,EACA,EAAA,EACA,QAAA,EACyB;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAS,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,MAAM,CAAC,CAAA;AAG5D,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,MAAA,IAAU,OAAA;AACpD,IAAA,MAAM,cAAc,OAAA,CAAQ,QAAA,IAAY,OAAA,CAAQ,WAAA,IAAe,UAAU,EAAE,CAAA,CAAA;AAE3E,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,IAAA,EAAM,GACH,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CACjD,KAAK,GAAG,CAAA;AAAA,MACX,WAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,eAAe,OAAA,CAAQ;AAAA,KACzB;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKA,SAAS,mBAAmB,UAAA,EAAwC;AAClE,EAAA,MAAMI,WAA8B,EAAC;AAGrC,EAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,OAAO,CAAA;AAC9C,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,IAAA,MAAM,KAAA,GAAW,GAAA,CAAA,WAAA,CAAY,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AACxE,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACnC,MAAA,MAAM,SAAS,kBAAA,CAAwB,KAAA,CAAA,IAAA,CAAK,UAAU,IAAI,CAAA,EAAG,IAAI,OAAO,CAAA;AACxE,MAAA,IAAI,MAAA,EAAQA,QAAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACjC;AAAA,EACF;AAGA,EAAA,MAAM,UAAA,GAAkB,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,SAAS,CAAA;AAClD,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,IAAA,MAAM,KAAA,GAAW,GAAA,CAAA,WAAA,CAAY,UAAU,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AAC1E,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACnC,MAAA,MAAM,SAAS,kBAAA,CAAwB,KAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA,EAAG,IAAI,SAAS,CAAA;AAC5E,MAAA,IAAI,MAAA,EAAQA,QAAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACjC;AAAA,EACF;AAGA,EAAA,MAAM,OAAA,GAAe,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,MAAM,CAAA;AAC5C,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,KAAA,GAAW,GAAA,CAAA,WAAA,CAAY,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AACvE,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACnC,MAAA,MAAM,SAAS,kBAAA,CAAwB,KAAA,CAAA,IAAA,CAAK,SAAS,IAAI,CAAA,EAAG,IAAI,MAAM,CAAA;AACtE,MAAA,IAAI,MAAA,EAAQA,QAAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACjC;AAAA,EACF;AAEA,EAAA,OAAOA,QAAAA;AACT;AAQO,SAAS,WAAW,iBAAA,EAAgD;AACzE,EAAA,MAAM,UAAA,GAAa,eAAe,iBAAiB,CAAA;AAEnD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,UAAA,GAAa,mBAAmB,UAAU,CAAA;AAChD,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,OAAO,gBAAA;AACT;AAKO,SAAS,aAAA,CAAc,IAAY,iBAAA,EAAqD;AAC7F,EAAA,MAAMA,QAAAA,GAAU,WAAW,iBAAiB,CAAA;AAC5C,EAAA,OAAOA,SAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA,IAAK,IAAA;AAC7C;;;AC5QA,SAASL,kBAAiB,GAAA,EAAoC;AAC5D,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,OAAO,OAAO,IAAA,EAAK;AACrB;AAKA,SAASC,YAAAA,CACP,KAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAC/B,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,MAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,IACvC;AAAA,EACF;AACF;AAKA,SAAS,oBAAA,CACP,MAAA,EACA,QAAA,EACA,GAAA,EACyB;AACzB,EAAA,MAAM,QAAA,GAAW,EAAE,GAAG,MAAA,EAAO;AAG7B,EAAA,MAAM,cAAA,GAAiB,IAAA;AAEvB,EAAA,MAAM,UAAA,GAAa,KAAA;AAEnB,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,SAAA;AAEH,MAAA,QAAA,CAAS,MAAM,GAAA,GAAM,IAAA;AACrB,MAAA,QAAA,CAAS,MAAM,GAAA,GAAM,IAAA;AACrB,MAAA;AAAA,IACF,KAAK,YAAA;AAEH,MAAA,QAAA,CAAS,MAAM,GAAA,GAAM,IAAA;AACrB,MAAA,QAAA,CAAS,MAAM,GAAA,GAAM,IAAA;AACrB,MAAA;AAAA,IACF,KAAK,aAAA;AACH,MAAA,QAAA,CAAS,GAAA,GAAM,GAAA;AACf,MAAA,QAAA,CAAS,MAAM,GAAA,GAAM,UAAA;AACrB,MAAA;AAAA,IACF;AAEE,MAAA,IAAI,QAAA,CAAS,GAAA,KAAQ,CAAA,IAAK,CAAC,SAAS,GAAA,EAAK;AACvC,QAAA,QAAA,CAAS,GAAA,GAAM,GAAA;AAAA,MACjB;AACA,MAAA,IAAI,QAAA,CAAS,GAAA,KAAQ,CAAA,IAAK,CAAC,SAAS,GAAA,EAAK;AACvC,QAAA,QAAA,CAAS,MAAM,GAAA,GAAM,cAAA;AAAA,MACvB;AAAA;AAGJ,EAAA,OAAO,QAAA;AACT;AAEA,IAAM,OAAA,GAAU,IAAIG,OAAAA,CAAQ,SAAS,CAAA,CAClC,YAAY,2CAA2C,CAAA,CACvD,MAAA,CAAO,QAAA,EAAU,uBAAuB,CAAA;AAK3C,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,WAAA,CAAY,gCAAgC,EAC5C,MAAA,CAAO,2BAAA,EAA6B,0CAA0C,CAAA,CAC9E,OAAO,kBAAA,EAAoB,2BAA2B,EACtD,MAAA,CAAO,CAAC,SAAS,GAAA,KAAQ;AACxB,EAAA,MAAM,UAAA,GAAaJ,kBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,OAAO,CAAA;AAC7C,IAAA,IAAI,eAAA,GAAkB,UAAA;AAEtB,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,eAAA,GAAkB,WAAW,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,QAAQ,QAAQ,CAAA;AAC1E,MAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,QAAAC,aAAY,wBAAA,EAA0B,EAAE,UAAU,OAAA,CAAQ,QAAA,IAAY,UAAU,CAAA;AAChF,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACvC,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,UAAU,CAAA,CAAE;AAAA,OACd,CAAE,CAAA;AACF,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,EAAE,SAAS,IAAA,EAAK,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAC9C,MAAA,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAC5B,MAAA,KAAA,MAAW,CAAA,IAAK,gBAAgB,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,OAAO,CAAA,EAAG;AACrE,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACvB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,CAAA,CAAE,WAAW;AAAA,CAAI,CAAA;AAAA,MACtC;AAEA,MAAA,MAAM,UAAU,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,SAAS,CAAA;AACtE,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,OAAA,CAAQ,IAAI,4CAA4C,CAAA;AACxD,QAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACvB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,CAAA,CAAE,WAAW;AAAA,CAAI,CAAA;AAAA,QACtC;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,MAAM,CAAA;AAChE,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,OAAA,CAAQ,IAAI,sBAAsB,CAAA;AAClC,QAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACvB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,CAAA,CAAE,WAAW;AAAA,CAAI,CAAA;AAAA,QACtC;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,IAAI,uDAAuD,CAAA;AACnE,MAAA,OAAA,CAAQ,IAAI,gEAAgE,CAAA;AAAA,IAC9E;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAAA,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAKH,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,mCAAmC,CAAA,CAC/C,SAAS,MAAA,EAAQ,WAAW,CAAA,CAC5B,MAAA,CAAO,oBAAoB,2BAA2B,CAAA,CACtD,OAAO,CAAC,EAAA,EAAI,SAAS,GAAA,KAAQ;AAC5B,EAAA,MAAM,UAAA,GAAaD,kBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,EAAA,EAAI,OAAA,CAAQ,OAAO,CAAA;AAChD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,OAAO,CAAA;AAC7C,MAAA,MAAM,YAAY,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAC5C,MAAAC,aAAY,kBAAA,EAAoB,EAAE,EAAA,EAAI,SAAA,IAAa,UAAU,CAAA;AAC7D,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC7C,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,IAAI;AAAA,CAAI,CAAA;AACtC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAC1C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAA,CAAO,WAAW;AAAA,CAAI,CAAA;AAClD,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,OAAO,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAClD,MAAA,IAAI,OAAO,aAAA,EAAe;AACxB,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,gBAAA,EAAqB,MAAA,CAAO,aAAa,CAAA,CAAE,CAAA;AAAA,MACzD;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAAA,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAKH,OAAA,CACG,OAAA,CAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,+BAA+B,CAAA,CAC3C,cAAA,CAAe,oBAAA,EAAsB,kBAAkB,EACvD,MAAA,CAAO,uBAAA,EAAyB,kCAAA,EAAoC,KAAK,EACzE,MAAA,CAAO,uBAAA,EAAyB,iCAAiC,CAAA,CACjE,MAAA,CAAO,kBAAA,EAAoB,2BAA2B,CAAA,CACtD,OAAO,mBAAA,EAAqB,2DAA2D,CAAA,CACvF,MAAA,CAAO,eAAe,eAAe,CAAA,CACrC,MAAA,CAAO,OAAO,SAAS,GAAA,KAAQ;AAC9B,EAAA,MAAM,UAAA,GAAaD,kBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AACF,IAAA,MAAM,YAAY,OAAA,CAAQ,MAAA;AAG1B,IAAA,MAAM,QAAA,GAAgBM,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA;AAC7C,IAAA,MAAM,UAAA,GAAkBA,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,SAAS,CAAA;AACjD,IAAA,MAAM,OAAA,GAAeA,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,MAAM,CAAA;AAC3C,IAAA,MAAM,UAAA,GAAkBA,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,SAAS,CAAA;AAEjD,IAAGC,GAAA,CAAA,SAAA,CAAU,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAC1C,IAAGA,GAAA,CAAA,SAAA,CAAU,UAAA,EAAY,EAAE,SAAA,EAAW,MAAM,CAAA;AAC5C,IAAGA,GAAA,CAAA,SAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC,IAAGA,GAAA,CAAA,SAAA,CAAU,UAAA,EAAY,EAAE,SAAA,EAAW,MAAM,CAAA;AAG5C,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAM,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAIlF,IAAA,MAAM,OAAA,GAAU,MAAM,eAAA,EAAgB;AACtC,IAAA,MAAM,iBAAiB,OAAA,CAAQ,SAAA;AAC/B,IAAA,MAAM,kBAAkB,OAAA,CAAQ,UAAA;AAGhC,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,CAAA,QAAA,EAAW,IAAI,IAAA,CAAK,GAAA,GAAM,GAAI,CAAA,CAAE,WAAA,EAAY,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAGpF,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,GAAA,EAAK,KAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,CAAA,EAAG,gBAAgB,cAAc,CAAA;AAAA,MACjC,GAAA;AAAA,MACA,GAAA,EAAK,KAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAEA,IAAA,MAAM,iBAA2B,EAAC;AAGlC,IAAA,IAAI,iBAAA,GAAoB,UAAA,CAAW,OAAA,CAAQ,OAAO,CAAA;AAClD,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,iBAAA,GAAoB,kBAAkB,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,QAAQ,QAAQ,CAAA;AAAA,IACrF;AAEA,IAAA,KAAA,MAAW,UAAU,iBAAA,EAAmB;AACtC,MAAA,MAAM,SAAA,GACJ,OAAO,QAAA,KAAa,OAAA,GAChB,WACA,MAAA,CAAO,QAAA,KAAa,SAClB,OAAA,GACA,UAAA;AACR,MAAA,MAAM,QAAA,GAAW,GAAG,MAAA,CAAO,EAAE,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,KAAK,CAAA,CAAA;AAC3E,MAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,QAAQ,CAAA;AAG9C,MAAA,MAAM,iBAAiB,oBAAA,CAAqB,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,IAAI,GAAG,CAAA;AAEzE,MAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAE7B,QAAA,MAAME,OAAAA,GAAS;AAAA,UACb,UAAU,MAAA,CAAO,WAAA;AAAA,UACjB,MAAA,EAAQ;AAAA,YACN,GAAA,EAAK,OAAA;AAAA,YACL,GAAA,EAAK,wBAAA;AAAA,YACL;AAAA,WACF;AAAA,UACA,OAAA,EAAS,cAAA;AAAA,UACT,GAAI,OAAO,aAAA,GAAgB,EAAE,gBAAgB,MAAA,CAAO,aAAA,KAAkB;AAAC,SACzE;AACA,QAAGD,kBAAc,QAAA,EAAU,IAAA,CAAK,UAAUC,OAAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAC5D,CAAA,MAAO;AAEL,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,cAAA,EAAgB,iBAAiB,GAAG,CAAA;AAC3D,QAAGD,GAAA,CAAA,aAAA,CAAc,UAAU,GAAG,CAAA;AAAA,MAChC;AAEA,MAAA,cAAA,CAAe,KAAK,QAAQ,CAAA;AAAA,IAC9B;AAGA,IAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,mBAAmB,CAAA;AAC1D,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,IAAA,EAAM,CAAC,SAAS;AAAA,KAClB;AACA,IAAGC,kBAAc,QAAA,EAAU,IAAA,CAAK,UAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AACxD,IAAA,cAAA,CAAe,KAAK,QAAQ,CAAA;AAG5B,IAAA,MAAM,UAAA,GAAkBD,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,2BAA2B,CAAA;AACpE,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,QAAA,EAAU,2DAAA;AAAA,MACV,WAAA,EACE,kFAAA;AAAA,MACF,cAAc,IAAI,IAAA,CAAK,GAAA,GAAM,GAAI,EAAE,WAAA,EAAY;AAAA,MAC/C,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,UAAA;AAAA,QACN,SAAS,UAAA;AAAW,OACtB;AAAA,MACA,IAAA;AAAA,MACA,OAAA,EAAS,iBAAA,CAAkB,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACrC,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,UAAU,CAAA,CAAE;AAAA,OACd,CAAE,CAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACL,oEAAA;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAGC,kBAAc,UAAA,EAAY,IAAA,CAAK,UAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC5D,IAAA,cAAA,CAAe,KAAK,UAAU,CAAA;AAE9B,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,IAAA,CAAK,SAAA;AAAA,UACH;AAAA,YACE,OAAA,EAAS,IAAA;AAAA,YACT,UAAA,EAAY,SAAA;AAAA,YACZ,iBAAiB,cAAA,CAAe,MAAA;AAAA,YAChC,KAAA,EAAO,cAAA;AAAA,YACP,SAAA,EAAW,GAAA;AAAA,YACX;AAAA,WACF;AAAA,UACA,IAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA;AAAA,CAA2C,CAAA;AACvD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAE,CAAA;AAC5C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoB,cAAA,CAAe,MAAM,CAAA,CAAE,CAAA;AACvD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,GAAG,CAAA,EAAA,EAAK,IAAI,IAAA,CAAK,GAAA,GAAM,GAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,CAAG,CAAA;AACvE,MAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,GAAG;AAAA,CAAI,CAAA;AAC9B,MAAA,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAC9B,MAAA,KAAA,MAAW,KAAK,cAAA,EAAgB;AAC9B,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAUD,KAAA,CAAA,QAAA,CAAS,SAAA,EAAW,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,MAChD;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,uBAAA,EAAiCA,KAAA,CAAA,QAAA,CAAS,SAAA,EAAW,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9E;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAAL,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;ACzTH,IAAM,eAAA,GAAkB,KAAK,IAAA,GAAO,IAAA;AAMpC,SAASD,kBAAiB,GAAA,EAAsC;AAC9D,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,OAAO,OAAO,IAAA,EAAK;AACrB;AAEA,SAASC,YAAAA,CACP,KAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAAA,EACjC;AACF;AAMA,SAAS,iBAAiB,GAAA,EAA6C;AACrE,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAA,CAAgC,GAAG,CAAA;AACvD,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAMA,SAAS,kBAAA,CAAmB,KAAa,UAAA,EAA4B;AACnE,EAAA,MAAM,OAAA,GAAU,iBAAiB,GAAG,CAAA;AACpC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,WAAW,UAAU,CAAA,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,MAAM,OAAO,OAAA,CAAQ,GAAA,KAAQ,QAAA,GAAW,QAAQ,GAAA,GAAM,SAAA;AAG5D,EAAA,IAAI,OAAO,OAAA,CAAQ,GAAA,KAAQ,YAAY,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7D,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAA;AAAA,EAC9B;AAGA,EAAA,IAAI,OAAO,OAAA,CAAQ,GAAA,KAAQ,YAAY,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7D,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAA;AAAA,EAC9B;AAGA,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAC7B;AAMA,eAAe,eAAA,CACb,UACA,WAAA,EAC0B;AAC1B,EAAA,MAAM,UAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,SAAS,QAAA,EAAU;AAC1C,IAAA,MAAM,UAAA,GAAa,MAAM,iBAAA,CAAkB,GAAG,CAAA;AAC9C,IAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,GAAA,EAAK,UAAU,CAAA;AAC9C,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,GAAA,EAAK,aAAa,UAAA,EAAY,MAAA,EAAQ,aAAa,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,OAAA;AACT;AAKA,SAAS,cAAA,CAAe,MAAc,IAAA,EAAwB;AAC5D,EAAA,MAAM,QAAA,GAAW,iBAAiB,IAAI,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,iBAAiB,IAAI,CAAA;AACtC,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,QAAA,EAAU,OAAO,CAAC,uBAAuB,CAAA;AAE3D,EAAA,MAAM,OAAA,mBAAU,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,EAAG,GAAG,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA;AAC5E,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,CAAC,CAAC,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG;AAC/D,MAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,IACd;AAAA,EACF;AACA,EAAA,OAAO,MAAM,IAAA,EAAK;AACpB;AAKA,eAAe,UAAA,CACb,YACA,KAAA,EACoF;AACpF,EAAA,IAAI,CAAIQ,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,CAAA,uBAAA,EAA0B,UAAU,CAAA,CAAA,EAAG;AAAA,EACpE;AAEA,EAAA,MAAM,IAAA,GAAUA,aAAS,UAAU,CAAA;AACnC,EAAA,IAAI,IAAA,CAAK,OAAO,eAAA,EAAiB;AAC/B,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,UAAU,KAAK,CAAA,2BAAA,EAA8B,IAAA,CAAK,IAAI,CAAA,OAAA,CAAA,EAAU;AAAA,EAC7F;AAGA,EAAA,MAAM,QAAA,GAAcA,iBAAa,UAAU,CAAA;AAC3C,EAAA,IAAI,QAAA,KAAa,cAAc,CAAC,QAAA,CAAS,WAAW,OAAA,CAAQ,GAAA,EAAK,CAAA,EAAG;AAElE,IAAA,IAAI,CAAIA,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5B,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,CAAA,4BAAA,EAA+B,KAAK,CAAA,CAAA,EAAG;AAAA,IACpE;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAeA,iBAAa,UAAU,CAAA;AAC5C,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,SAAS,CAAA;AAChD,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,CAAA,eAAA,EAAkB,KAAK,CAAA,EAAA,EAAK,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,CAAA,EAAG;AAAA,EAChF;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,OAAO,KAAA,EAAM;AACzC;AAKA,SAASC,kBAAiB,MAAA,EAAiC;AACzD,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,4BAAA;AAAA,IACA,4BAAA;AAAA,IACA,EAAA;AAAA,IACA,CAAA,WAAA,EAAc,OAAO,YAAY,CAAA,CAAA;AAAA,IACjC,CAAA,SAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,IACrC,CAAA,gBAAA,EAAmB,OAAO,cAAc,CAAA,CAAA;AAAA,IACxC,CAAA,iBAAA,EAAoB,OAAO,eAAe,CAAA,CAAA;AAAA,IAC1C,CAAA,WAAA,EAAc,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,CAAA;AAAA,IACrC;AAAA,GACF;AAEA,EAAA,IAAI,MAAA,CAAO,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AACjC,IAAA,KAAA,CAAM,KAAK,+CAA+C,CAAA;AAAA,EAC5D,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AACvB,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,IAAA,KAAA,MAAW,QAAA,IAAY,OAAO,SAAA,EAAW;AACvC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,QAAA,CAAS,GAAG,CAAA,CAAE,CAAA;AACnC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,QAAA,CAAS,oBAAoB,CAAA,CAAE,CAAA;AAC/D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,QAAA,CAAS,oBAAoB,CAAA,CAAE,CAAA;AAC/D,MAAA,KAAA,CAAM,KAAK,CAAA,sBAAA,EAAyB,QAAA,CAAS,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACrE,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAMO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,MAAM,SAAA,GAAY,IAAIN,OAAAA,CAAQ,WAAW,CAAA,CAAE,WAAA;AAAA,IACzC;AAAA,GACF;AAEA,EAAA,SAAA,CACG,SAAS,WAAA,EAAa,+BAA+B,CAAA,CACrD,QAAA,CAAS,aAAa,gCAAgC,CAAA,CACtD,MAAA,CAAO,uBAAA,EAAyB,+BAA+B,MAAM,CAAA,CACrE,OAAO,oBAAA,EAAsB,wCAAA,EAA0C,KAAK,CAAA,CAC5E,MAAA;AAAA,IACC,OACE,WAAA,EACA,WAAA,EACA,OAAA,EACA,GAAA,KACG;AACH,MAAA,MAAM,UAAA,GAAaJ,kBAAiB,GAAG,CAAA;AACvC,MAAA,MAAM,MAAA,GAAU,QAAQ,MAAA,IAAqB,MAAA;AAC7C,MAAA,MAAM,cAAA,GAAiB,CAAC,CAAC,OAAA,CAAQ,cAAA;AAEjC,MAAA,IAAI;AAEF,QAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,UAC3C,UAAA,CAAW,aAAa,SAAS,CAAA;AAAA,UACjC,UAAA,CAAW,aAAa,SAAS;AAAA,SAClC,CAAA;AAED,QAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,UAAAC,YAAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,IAAI,UAAU,CAAA;AACzC,UAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,UAAA;AAAA,QACF;AACA,QAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,UAAAA,YAAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,IAAI,UAAU,CAAA;AACzC,UAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,CAAC,SAAA,EAAW,SAAS,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,UAC/C,eAAA,CAAgB,OAAA,CAAQ,KAAA,EAAO,WAAW,CAAA;AAAA,UAC1C,eAAA,CAAgB,OAAA,CAAQ,KAAA,EAAO,WAAW;AAAA,SAC3C,CAAA;AAGD,QAAA,MAAM,KAAA,uBAAY,GAAA,EAA6B;AAC/C,QAAA,KAAA,MAAW,KAAK,CAAC,GAAG,SAAA,EAAW,GAAG,SAAS,CAAA,EAAG;AAC5C,UAAA,MAAM,WAAW,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,GAAG,KAAK,EAAC;AACtC,UAAA,QAAA,CAAS,KAAK,CAAC,CAAA;AACf,UAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,GAAA,EAAK,QAAQ,CAAA;AAAA,QAC3B;AAGA,QAAA,MAAM,YAA6B,EAAC;AACpC,QAAA,IAAI,WAAA,GAAc,CAAA;AAGlB,QAAA,MAAM,aAAa,CAAC,GAAG,MAAM,IAAA,EAAM,EAAE,IAAA,EAAK;AAE1C,QAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,UAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAG7B,UAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,WAAW,CAAA;AAC5D,UAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,WAAW,CAAA;AAE5D,UAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAExC,YAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,YAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,YAAA,IAAI,CAAA,CAAE,WAAA,KAAgB,CAAA,CAAE,WAAA,EAAa;AAEnC,cAAA,SAAA,CAAU,IAAA,CAAK;AAAA,gBACb,GAAA;AAAA,gBACA,sBAAsB,CAAA,CAAE,WAAA;AAAA,gBACxB,sBAAsB,CAAA,CAAE,WAAA;AAAA,gBACxB,WAAA,EAAa,cAAA,CAAe,CAAA,CAAE,GAAA,EAAK,EAAE,GAAG;AAAA,eACzC,CAAA;AAAA,YACH;AAEA,YAAA,WAAA,EAAA;AAAA,UACF,CAAA,MAAO;AAEL,YAAA,WAAA,EAAA;AAAA,UACF;AAAA,QACF;AAGA,QAAA,MAAM,MAAA,GAA0B;AAAA,UAC9B,OAAA,EAAS,KAAA;AAAA,UACT,YAAA,EAAA,iBAAc,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UACrC,OAAA,EAAS,CAAC,WAAA,EAAa,WAAW,CAAA;AAAA,UAClC,cAAA,EAAgB,SAAA,CAAU,MAAA,GAAS,SAAA,CAAU,MAAA;AAAA,UAC7C,eAAA,EAAiB,WAAA;AAAA,UACjB;AAAA,SACF;AAGA,QAAA,IAAI,MAAA,KAAW,MAAA,IAAU,UAAA,CAAW,IAAA,EAAM;AACxC,UAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,QAC7C,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,GAAA,CAAIS,iBAAAA,CAAiB,MAAM,CAAC,CAAA;AAAA,QACtC;AAGA,QAAA,IAAI,cAAA,IAAkB,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AAC1C,UAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,QACrB,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,QACrB;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAAT,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,MACrB;AAAA,IACF;AAAA,GACF;AAEF,EAAA,OAAO,SAAA;AACT;ACxUA,IAAM,cAAc,aAAA,CAAmBU,KAAA,CAAA,IAAA,CAAK,QAAQ,GAAA,EAAI,EAAG,cAAc,CAAC,CAAA;AAU1E,SAAS,KAAA,CAAM,QAAgB,GAAA,EAAqB;AAClD,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,GAAA,EAAK;AAAA,GACP;AACA,EAAA,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,MAAM,CAAC,KAAK,GAAG,CAAA,CAAA;AACnC;AAEA,SAAS,WAAW,WAAA,EAA6B;AAE/C,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,IAAA,CAAK,WAAW,CAAA;AACtC,EAAA,OAAO,IAAI,QAAA,CAAS,CAAA,CAAE,CAAC,CAAA,EAAI,EAAE,CAAA,GAAI,CAAA;AACnC;AAEA,SAAS,gBAAA,GAAgC;AACvC,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,OAAO,CAAA;AACxC,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,cAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,iBAAA;AAAA,KAC5B;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,MAAA,EAAQ,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,iCAAA;AAAA,GAC5B;AACF;AAEA,SAAS,sBAAA,GAAsC;AAC7C,EAAA,MAAM,QAAA,GAAW,CAAC,gBAAA,EAAkB,cAAA,EAAgB,gBAAgB,cAAc,CAAA;AAClF,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,QAAQ,GAAG,CAAA;AAAA,IACzB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,IAClB;AAAA,EACF;AACA,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,6BAAA;AAAA,KAC5B;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,oBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,MAAA,EAAQ,GAAG,OAAA,CAAQ,MAAM,aAAa,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,GAC1D;AACF;AAEA,SAAS,iBAAiB,GAAA,EAA0B;AAClD,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,eAAA,IAAmB,EAAA;AAC3C,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,IAAI,IAAI,UAAA,CAAW,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AACrD,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,qBAAA;AAAA,QACN,MAAA,EAAQ,OAAA;AAAA,QACR,QAAQ,CAAA,wBAAA,EAA2B,GAAA,CAAI,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,WAAA;AAAA,OACtD;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB;AAAA,IAChBA,KAAA,CAAA,IAAA,CAAK,KAAK,iBAAiB,CAAA;AAAA,IAC3BA,KAAA,CAAA,IAAA,CAAK,KAAK,uBAAuB;AAAA,GACxC;AACA,EAAA,KAAA,MAAW,KAAK,cAAA,EAAgB;AAC9B,IAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,CAAC,CAAA,EAAG;AACpB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,qBAAA;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ,CAAA,MAAA,EAAcD,KAAA,CAAA,QAAA,CAAS,GAAA,EAAK,CAAC,CAAC,CAAA,gCAAA;AAAA,OACxC;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,qBAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AACF;AAEA,SAAS,aAAa,GAAA,EAA0B;AAC9C,EAAA,MAAM,CAAA,GAASA,KAAA,CAAA,IAAA,CAAK,GAAA,EAAK,sBAAsB,CAAA;AAC/C,EAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,CAAC,CAAA,EAAG;AACpB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,mCAAmC,CAAC,CAAA;AAAA,KAC9C;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,mBAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AACF;AAEA,eAAe,eAAA,CAAgB,WAAmB,SAAA,EAAyC;AACzF,EAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,IAAA,CAAK,KAAA,IAAS,SAAS,CAAA;AACtD,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,IAAI,GAAA,CAAI,+BAAA,EAAiC,SAAS,EAAE,QAAA,EAAS;AAC5E,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,MAAA,EAAQ,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AACvD,IAAA,IAAI,GAAA,CAAI,WAAW,GAAA,EAAK;AACtB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,UAAA,EAAa,IAAI,MAAM,CAAA;AAAA,OAC1C;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,MAAM,UAAU,GAAA,CAAI,QAAA;AACpB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,GAAG,MAAM,CAAA,iBAAA;AAAA,OACnB;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,CAAM,OAAA,EAAS,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AAC5D,IAAA,IAAI,OAAA,CAAQ,WAAW,GAAA,EAAK;AAC1B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,CAAA,SAAA,EAAY,OAAO,CAAA,UAAA,EAAa,QAAQ,MAAM,CAAA;AAAA,OACxD;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,OAAA,CAAQ,IAAA,EAAK;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAK,KAAK,MAAA,GAAS,CAAA;AAC/D,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,YAAY,OAAO,CAAA,0BAAA;AAAA,OAC7B;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,4BAAA,EAA+B,QAAQ,CAAA,OAAA;AAAA,KAC1D;AAAA,EACF,SAAS,GAAA,EAAc;AACrB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA,EAAQ,iBAAiB,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,KAC3E;AAAA,EACF,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;AAEA,eAAsB,UAAU,OAAA,EAKZ;AAClB,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,OAAA,CAAQ,IAAA,CAAK,kBAAkB,CAAA;AAC/B,EAAA,OAAA,CAAQ,IAAA,CAAK,wBAAwB,CAAA;AACrC,EAAA,OAAA,CAAQ,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,GAAG,CAAC,CAAA;AAC1C,EAAA,OAAA,CAAQ,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAC,CAAA;AAEtC,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,KAAK,MAAM,eAAA,CAAgB,QAAQ,MAAA,EAAQ,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,IACrE;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAEA,EAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAC3B,EAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,CAAE,CAAC,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,KAAK,CAAA;AACrD,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,GAAS,qCAAA,GAAwC,sBAAsB,CAAA;AACnF,EAAA,OAAO,SAAS,CAAA,GAAI,CAAA;AACtB;AAEO,SAAS,OAAOC,QAAAA,EAAwB;AAC7C,EAAAA,QAAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,YAAY,0DAA0D,CAAA,CACtE,MAAA,CAAO,UAAA,EAAY,qDAAqD,KAAK,CAAA,CAC7E,MAAA,CAAO,gBAAA,EAAkB,8CAA8C,CAAA,CACvE,MAAA;AAAA,IACC,gBAAA;AAAA,IACA,2CAAA;AAAA,IACA,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA;AAAA,IACrB;AAAA,GACF,CACC,MAAA,CAAO,OAAO,IAAA,KAAgE;AAC7E,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU;AAAA,MAC/B,MAAA,EAAQ,CAAC,CAAC,IAAA,CAAK,MAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,GAAA,EAAK,QAAQ,GAAA;AAAI,KAClB,CAAA;AACD,IAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,EACvB,CAAC,CAAA;AACL;ACvPO,SAAS,YAAA,CAAa,MAAA,EAAuB,IAAA,GAAO,KAAA,EAAe;AACxE,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,EAC3C;AAGA,EAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,OAAO,MAAA,CAAO,SAAS,QAAA,EAAU;AAClD,IAAA,IAAI,MAAA,CAAO,KAAK,OAAA,EAAS;AAEvB,MAAA,OAAO,qBAAA,CAAsB,OAAO,IAAI,CAAA;AAAA,IAC1C,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ;AAE7B,MAAA,OAAO,gBAAA,CAAiB,OAAO,IAAI,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,CAAK,KAAA,KAAU,MAAA,EAAW;AAE1C,MAAA,OAAO,kBAAA,CAAmB,OAAO,IAAI,CAAA;AAAA,IACvC;AAAA,EACF;AAEA,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAA,EAAM,MAAM,CAAC,CAAA;AAC5C;AAEA,SAAS,sBAAsB,IAAA,EAAmB;AAChD,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,eAAA,EAAkB,KAAA,CAAM,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA;AAE3D,EAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,IAAA,MAAM,SACJ,MAAA,CAAO,MAAA,KAAW,OAAA,GACd,KAAA,CAAM,MAAM,SAAS,CAAA,GACrB,MAAA,CAAO,MAAA,KAAW,cAChB,KAAA,CAAM,MAAA,CAAO,aAAa,CAAA,GAC1B,KAAA,CAAM,IAAI,SAAS,CAAA;AAE3B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,MAAM,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AACpD,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,IACrC;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AACzB;AAEA,SAAS,iBAAiB,IAAA,EAAmB;AAC3C,EAAA,OAAO;AAAA,IACL,CAAA,WAAA,EAAc,KAAK,SAAS,CAAA,CAAA;AAAA,IAC5B,CAAA,QAAA,EAAW,KAAK,MAAM,CAAA,CAAA;AAAA,IACtB,CAAA,QAAA,EAAW,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAAA,IACnC,CAAA,YAAA,EAAe,KAAK,UAAU,CAAA,MAAA;AAAA,GAChC,CAAE,KAAK,KAAK,CAAA;AACd;AAEA,SAAS,mBAAmB,IAAA,EAAmB;AAC7C,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,MAAM,QAAQ,CAAC,KAAA,CAAM,KAAA,CAAM,+BAA+B,GAAG,EAAE,CAAA;AAE/D,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA;AAAA,IAC/C;AAEA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,EACzB,CAAA,MAAO;AACL,IAAA,OAAO,MAAM,GAAA,CAAI,CAAA,qBAAA,EAAwB,IAAA,CAAK,KAAA,IAAS,eAAe,CAAA,CAAE,CAAA;AAAA,EAC1E;AACF;AAQO,SAAS,YAAY,KAAA,EAA6B;AACvD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAA;AAAA,IACT,OAAO,KAAA,CAAM;AAAA,GACf;AACF;AAEO,SAAS,MAAA,GAAS;AACvB,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,KAAK,MAAM;AACT,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAU,SAAA,GAAY;AAAA,OACxB;AAAA,IACF;AAAA,GACF;AACF;;;AClFO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAa,QAAA,GAAuB,EAAC,EAA2B;AAC5E,IAAA,MAAM,QAAQ,MAAA,EAAO;AAErB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,GAAG,CAAA;AAC7B,MAAA,IAAI,CAAC,CAAC,OAAA,EAAS,QAAQ,EAAE,QAAA,CAAS,SAAA,CAAU,QAAQ,CAAA,EAAG;AACrD,QAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,MACzD;AAEA,MAAA,MAAM,OAAA,GAAU,MAAM,uBAAA,CAAwB,GAAG,CAAA;AACjD,MAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,MAAA,EAAQ,MAAM,GAAA;AAAI,SACpB;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,OAAA,CAAQ,IAAI,CAAA;AACrD,MAAA,MAAM,IAAA,GAAqB,EAAE,GAAG,MAAA,EAAO;AACvC,MAAA,IAAI,OAAA,CAAQ,QAAA,IAAY,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AACnD,QAAA,IAAA,CAAK,QAAA,GAAW,CAAC,GAAI,MAAA,CAAO,YAAY,EAAC,EAAI,GAAG,OAAA,CAAQ,QAAQ,CAAA;AAAA,MAClE;AACA,MAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC7C,QAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,UACX;AAAA,SAEF;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,IAAA;AAAA,QACA,MAAA,EAAQ,MAAM,GAAA;AAAI,OACpB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,GAAG,YAAY,KAAc,CAAA;AAAA,QAC7B,MAAA,EAAQ,MAAM,GAAA;AAAI,OACpB;AAAA,IACF;AAAA,EACF;AACF,CAAA;;;AC9CA,IAAM,OAAA,GAAU,IAAIT,OAAAA,EAAQ;AAE5B,OAAA,CACG,IAAA,CAAK,MAAM,CAAA,CACX,WAAA,CAAY,kCAAkC,EAC9C,OAAA,CAAQ,UAAA,EAAY,CAAA,CACpB,YAAA,EAAa;AAKhB,OAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,2BAA2B,EACvC,QAAA,CAAS,OAAA,EAAS,0DAA0D,CAAA,CAC5E,OAAO,eAAA,EAAiB,sBAAsB,EAC9C,MAAA,CAAO,OAAO,UAAkB,OAAA,KAAmC;AAClE,EAAA,IAAI;AAEF,IAAA,IAAI,GAAA,GAAM,QAAA;AACV,IAAA,IAAOU,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,GAAA,GAASA,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA,CAAE,IAAA,EAAK;AAAA,IAChD;AAEA,IAAA,OAAA,CAAQ,IAAI,6BAA6B,CAAA;AAGzC,IAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAIC,OAA0B,GAAG,CAAA;AAEzD,IAAA,OAAA,CAAQ,IAAI,sBAAsB,CAAA;AAClC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAC3C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAC3C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAC3C,IAAA,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,OAAA,CAAQ,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAC1D,IAAA,OAAA,CAAQ,GAAA,CAAI,kBAAkB,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAA,CAAG,CAAA;AACnF,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAAA;AAC1E,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAAA;AAAA,IAC5E;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAGZ,IAAA,OAAA,CAAQ,IAAI,wBAAwB,CAAA;AACpC,IAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,GAAG,CAAA;AAEtC,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAC9B,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,OAAA,CAAQ,GAAA,CAAI,yBAAyB,MAAA,CAAO,IAAA,CAAK,UAAU,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AACzE,QAAA,IAAI,MAAA,CAAO,KAAK,aAAA,EAAe;AAC7B,UAAA,OAAA,CAAQ,GAAA,CAAI,uBAAuB,MAAA,CAAO,IAAA,CAAK,cAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,QAC7E;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,IACrB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qBAAA,EAAwB,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AACnD,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,MAC7C;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,IACrB;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACxE,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAOH,OAAA,CACG,OAAA,CAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,sCAAsC,CAAA,CAClD,QAAA,CAAS,SAAA,EAAW,6CAA6C,CAAA,CACjE,MAAA,CAAO,OAAO,KAAA,KAAkB;AAC/B,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ,IAAI,sCAAsC,CAAA;AAElD,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,MAAM,UAAA,CAAW,SAAS,KAAK,KAAA,CAAM,UAAA,CAAW,UAAU,CAAA,EAAG;AAE/D,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,KAAK,CAAA,GAAA,CAAK,CAAA;AACvC,MAAA,MAAA,GAAS,MAAM,kBAAkB,KAAK,CAAA;AAAA,IACxC,CAAA,MAAO;AAEL,MAAA,MAAM,IAAA,GAAUD,GAAA,CAAA,YAAA,CAAa,KAAA,EAAO,OAAO,CAAA;AAC3C,MAAA,MAAA,GAAS,kBAAkB,IAAI,CAAA;AAAA,IACjC;AAEA,IAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAE9C,IAAA,OAAA,CAAQ,IAAI,uBAAuB,CAAA;AACnC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAC7C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAC5C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAE9C,IAAA,IAAI,OAAO,eAAA,EAAiB;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,eAAe,CAAA,CAAE,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI,MAAA,CAAO,gBAAA,IAAoB,MAAA,CAAO,gBAAA,CAAiB,SAAS,CAAA,EAAG;AACjE,MAAA,OAAA,CAAQ,IAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,iBAAiB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACnE;AAEA,IAAA,IAAI,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,EAAG;AACrD,MAAA,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,MAAA,CAAO,WAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9D;AAEA,IAAA,IAAI,MAAA,CAAO,aAAA,IAAiB,MAAA,CAAO,aAAA,CAAc,SAAS,CAAA,EAAG;AAC3D,MAAA,OAAA,CAAQ,IAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,cAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IAChE;AAEA,IAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,gBAAgB,CAAA,CAAE,CAAA;AAAA,IACxD;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACxE,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAKH,OAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,kDAAkD,EAC9D,QAAA,CAAS,OAAA,EAAS,0DAA0D,CAAA,CAC5E,OAAO,QAAA,EAAU,gBAAgB,EACjC,MAAA,CAAO,CAAC,UAAkB,OAAA,KAAgC;AACzD,EAAA,IAAI;AAEF,IAAA,IAAI,GAAA,GAAM,QAAA;AACV,IAAA,IAAOA,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,GAAA,GAASA,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA,CAAE,IAAA,EAAK;AAAA,IAChD;AAEA,IAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAIC,OAA0B,GAAG,CAAA;AAEzD,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,EAAE,QAAQ,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC1D,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,wCAAwC,CAAA;AAEpD,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,EAAA,EAAK,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,GAAM,GAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,CAAG,CAAA;AACpF,MAAA,IAAI,QAAQ,GAAA,EAAK;AACf,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,EAAA,EAAK,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,GAAM,GAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,CAAG,CAAA;AAAA,MACtF;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,MAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AACnD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAE,CAAA;AACxD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AACrD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,CAAE,CAAA;AAEvD,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAAA,MAC9C;AAEA,MAAA,IAAI,QAAQ,GAAA,EAAK;AACf,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,QAAQ,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACxE,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAGH,OAAA,CAAQ,WAAW,MAAM,CAAA;AAGzB,OAAA,CAAQ,WAAW,WAAW,CAAA;AAG9B,OAAA,CAAQ,WAAW,OAAO,CAAA;AAG1B,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AAGrC,MAAA,CAAO,OAAO,CAAA;AASd,OAAA,CACG,QAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,mEAAmE,EAC/E,QAAA,CAAS,OAAA,EAAS,8DAA8D,CAAA,CAChF,OAAO,YAAA,EAAc,uBAAuB,EAC5C,MAAA,CAAO,OAAO,KAAa,IAAA,KAA6B;AACvD,EAAA,MAAM,GAAA,GAAM,IAAI,eAAA,EAAgB;AAChC,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,CAAA;AACzD,EAAA,OAAA,CAAQ,GAAA,CAAI,YAAA,CAAa,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAC3C,EAAA,OAAA,CAAQ,QAAA,GAAW,MAAA,CAAO,OAAA,GAAU,CAAA,GAAI,CAAA;AAC1C,CAAC,CAAA;AAGH,IAAI;AACF,EAAA,OAAA,CAAQ,KAAA,EAAM;AAChB,CAAA,CAAA,OAAS,GAAA,EAAK;AACZ,EAAA,IAAI,eAAe,cAAA,EAAgB;AAEjC,IAAA,OAAA,CAAQ,WAAW,GAAA,CAAI,QAAA;AAAA,EACzB,CAAA,MAAO;AACL,IAAA,MAAM,GAAA;AAAA,EACR;AACF","file":"index.mjs","sourcesContent":["/**\n * PEAC Policy CLI Commands\n *\n * Commands for managing policy files:\n * - init: Create a new policy file\n * - validate: Validate policy syntax and schema\n * - explain: Debug rule matching\n * - generate: Compile policy to deployment artifacts\n * - list-profiles: List available policy profiles (v0.9.23+)\n * - show-profile: Show profile details (v0.9.23+)\n *\n * Automation flags (v0.9.23+):\n * - --json: Machine-readable JSON output\n * - --yes: Skip confirmation prompts (auto-confirm)\n * - --strict: Exit non-zero on warnings\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n loadPolicy,\n parsePolicy,\n validatePolicy,\n evaluate,\n explainMatches,\n createExamplePolicy,\n serializePolicyYaml,\n serializePolicyJson,\n compilePeacTxt,\n compileRobotsSnippet,\n compileAiprefTemplates,\n renderPolicyMarkdown,\n PolicyLoadError,\n PolicyValidationError,\n POLICY_VERSION,\n EvaluationContext,\n ControlPurpose,\n ControlLicensingMode,\n SubjectType,\n // Profile system (v0.9.23+)\n listProfiles,\n loadProfile,\n getProfileSummary,\n validateProfileParams,\n customizeProfile,\n ProfileError,\n type ProfileId,\n} from '@peac/policy-kit';\n\n/**\n * Global options for policy commands\n */\ninterface PolicyGlobalOptions {\n json?: boolean;\n yes?: boolean;\n strict?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): PolicyGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as PolicyGlobalOptions;\n}\n\n/**\n * Output result - handles JSON vs human-readable format\n */\nfunction output(\n data: Record<string, unknown>,\n opts: PolicyGlobalOptions,\n humanMessage?: string\n): void {\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2));\n } else if (humanMessage) {\n console.log(humanMessage);\n }\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: PolicyGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n }\n}\n\nconst policy = new Command('policy')\n .description('Policy file operations')\n .option('--json', 'Output in machine-readable JSON format')\n .option('--yes', 'Skip confirmation prompts (auto-confirm)')\n .option('--strict', 'Exit non-zero on warnings');\n\n/**\n * peac policy init\n *\n * Create a new peac-policy.yaml file in the current directory.\n */\npolicy\n .command('init')\n .description('Create a new PEAC policy file')\n .option('-f, --format <format>', 'Output format (yaml or json)', 'yaml')\n .option('-o, --output <file>', 'Output file path')\n .option('--force', 'Overwrite existing file')\n .option('--profile <id>', 'Use a pre-built profile as template')\n .action(\n (\n options: { format?: string; output?: string; force?: boolean; profile?: string },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const format = options.format?.toLowerCase() || 'yaml';\n const outputPath =\n options.output || (format === 'json' ? 'peac-policy.json' : 'peac-policy.yaml');\n\n // Check if file exists and --force/--yes not set\n if (fs.existsSync(outputPath) && !options.force && !globalOpts.yes) {\n outputError(\n `File already exists: ${outputPath}`,\n { path: outputPath, hint: 'Use --force or --yes to overwrite' },\n globalOpts\n );\n process.exit(1);\n }\n\n let content: string;\n let policyName: string;\n\n if (options.profile) {\n // Use profile as template\n try {\n const profile = loadProfile(options.profile as ProfileId);\n const policyDoc = profile.policy;\n content =\n format === 'json' ? serializePolicyJson(policyDoc) : serializePolicyYaml(policyDoc);\n policyName = profile.name;\n } catch (err) {\n if (err instanceof ProfileError) {\n outputError(err.message, { code: err.code, profile: options.profile }, globalOpts);\n process.exit(1);\n }\n throw err;\n }\n } else {\n const example = createExamplePolicy();\n content = format === 'json' ? serializePolicyJson(example) : serializePolicyYaml(example);\n policyName = 'Example Policy';\n }\n\n fs.writeFileSync(outputPath, content, 'utf-8');\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n file: outputPath,\n format,\n profile: options.profile || null,\n policyName,\n },\n globalOpts\n );\n } else {\n console.log(`Created policy file: ${outputPath}`);\n if (options.profile) {\n console.log(`Based on profile: ${options.profile}`);\n }\n console.log('');\n console.log('Next steps:');\n console.log(' 1. Edit the policy file to define your access rules');\n console.log(' 2. Validate with: peac policy validate ' + outputPath);\n console.log(' 3. Generate artifacts with: peac policy generate ' + outputPath);\n }\n\n process.exit(0);\n } catch (err) {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n );\n\n/**\n * peac policy validate <file>\n */\npolicy\n .command('validate')\n .description('Validate a PEAC policy file (YAML or JSON)')\n .argument('<file>', 'Path to policy file')\n .option('-v, --verbose', 'Show detailed validation output')\n .action((file: string, options: { verbose?: boolean }, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n const warnings: string[] = [];\n\n try {\n const policyDoc = loadPolicy(file);\n\n // Collect any warnings (e.g., deprecated features)\n // Currently no warnings defined, but this is the pattern for future use\n\n const result = {\n success: true,\n file,\n valid: true,\n warnings,\n policy: {\n version: policyDoc.version,\n name: policyDoc.name || null,\n defaultDecision: policyDoc.defaults.decision,\n ruleCount: policyDoc.rules.length,\n rules: options.verbose\n ? policyDoc.rules.map((r) => ({\n name: r.name,\n decision: r.decision,\n subject: r.subject || null,\n purpose: r.purpose || null,\n licensingMode: r.licensing_mode || null,\n }))\n : undefined,\n },\n };\n\n if (globalOpts.json) {\n output(result, globalOpts);\n } else {\n console.log(`Validating policy file: ${file}\\n`);\n console.log('Policy is valid!\\n');\n\n console.log('Policy Information:');\n console.log(` Version: ${policyDoc.version}`);\n if (policyDoc.name) {\n console.log(` Name: ${policyDoc.name}`);\n }\n console.log(` Default: ${policyDoc.defaults.decision}`);\n console.log(` Rules: ${policyDoc.rules.length}`);\n\n if (options.verbose && policyDoc.rules.length > 0) {\n console.log('\\nRules:');\n for (const rule of policyDoc.rules) {\n console.log(` - ${rule.name}: ${rule.decision}`);\n if (rule.subject) {\n const parts: string[] = [];\n if (rule.subject.type) {\n const types = Array.isArray(rule.subject.type)\n ? rule.subject.type.join('|')\n : rule.subject.type;\n parts.push(`type=${types}`);\n }\n if (rule.subject.labels) {\n parts.push(`labels=[${rule.subject.labels.join(',')}]`);\n }\n if (rule.subject.id) {\n parts.push(`id=${rule.subject.id}`);\n }\n if (parts.length > 0) {\n console.log(` subject: ${parts.join(', ')}`);\n }\n }\n if (rule.purpose) {\n const purposes = Array.isArray(rule.purpose) ? rule.purpose.join('|') : rule.purpose;\n console.log(` purpose: ${purposes}`);\n }\n if (rule.licensing_mode) {\n const modes = Array.isArray(rule.licensing_mode)\n ? rule.licensing_mode.join('|')\n : rule.licensing_mode;\n console.log(` licensing_mode: ${modes}`);\n }\n }\n }\n\n if (warnings.length > 0) {\n console.log('\\nWarnings:');\n for (const warning of warnings) {\n console.log(` - ${warning}`);\n }\n }\n }\n\n // Exit with non-zero if --strict and there are warnings\n if (globalOpts.strict && warnings.length > 0) {\n process.exit(1);\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyValidationError) {\n const issues = err.issues.map((i) => ({\n path: i.path.join('.'),\n message: i.message,\n }));\n\n if (globalOpts.json) {\n output(\n {\n success: false,\n file,\n valid: false,\n error: 'Validation failed',\n issues,\n },\n globalOpts\n );\n } else {\n console.error('Policy validation failed:\\n');\n for (const issue of err.issues) {\n console.error(` - ${issue.path.join('.')}: ${issue.message}`);\n }\n }\n process.exit(1);\n } else if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n });\n\n/**\n * peac policy generate <file>\n *\n * Generate deployment artifacts from a policy file:\n * - peac.txt (PEAC discovery file)\n * - robots.txt snippet\n * - AIPREF header templates\n * - ai-policy.md (human-readable summary)\n */\npolicy\n .command('generate')\n .description('Generate deployment artifacts from a policy file')\n .argument('<file>', 'Path to policy file')\n .option('-o, --out <dir>', 'Output directory (use \"-\" for stdout)', 'dist')\n .option('--well-known', 'Output peac.txt to .well-known/ subdirectory')\n .option('--dry-run', 'Show what would be generated without writing files')\n .option('--peac-version <version>', 'PEAC protocol version (default: 0.9)')\n .option('--site-url <url>', 'Site URL for peac.txt')\n .option('--contact <email>', 'Contact email for policy questions')\n .option('--attribution <mode>', 'Attribution requirement (required, optional, none)')\n .option('--receipts <mode>', 'Receipts requirement (required, optional, omit)')\n .option('--rate-limit <limit>', 'Rate limit string (e.g., \"100/hour\", \"unlimited\")')\n .option('--negotiate <url>', 'Negotiate endpoint URL')\n .option('--no-comments', 'Omit comments from generated files')\n .action(\n (\n file: string,\n options: {\n out: string;\n wellKnown?: boolean;\n dryRun?: boolean;\n peacVersion?: string;\n siteUrl?: string;\n contact?: string;\n attribution?: 'required' | 'optional' | 'none';\n receipts?: 'required' | 'optional' | 'omit';\n rateLimit?: string;\n negotiate?: string;\n comments?: boolean;\n },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n const isStdout = options.out === '-';\n\n try {\n if (!globalOpts.json && !isStdout) {\n console.log(`Loading policy: ${file}\\n`);\n }\n\n const policyDoc = loadPolicy(file);\n\n const compileOptions = {\n peacVersion: options.peacVersion,\n siteUrl: options.siteUrl,\n contact: options.contact,\n attribution: options.attribution,\n receipts: options.receipts,\n rateLimit: options.rateLimit,\n negotiateUrl: options.negotiate,\n includeComments: options.comments !== false,\n };\n\n // Generate content\n const peacTxt = compilePeacTxt(policyDoc, compileOptions);\n const robotsTxt = compileRobotsSnippet(policyDoc, compileOptions);\n const aiprefTemplates = compileAiprefTemplates(policyDoc, compileOptions);\n const markdown = renderPolicyMarkdown(policyDoc, compileOptions);\n\n // Stdout mode: output all content as JSON\n if (isStdout || globalOpts.json) {\n const result = {\n success: true,\n source: file,\n artifacts: {\n 'peac.txt': peacTxt,\n 'robots-ai-snippet.txt': robotsTxt,\n 'aipref-headers.json': aiprefTemplates,\n 'ai-policy.md': markdown,\n },\n };\n\n if (isStdout && !globalOpts.json) {\n // Plain stdout: just output peac.txt\n console.log(peacTxt);\n } else {\n output(result, { json: true });\n }\n\n process.exit(0);\n }\n\n // Determine output paths\n const outDir = options.out;\n let peacTxtPath: string;\n if (options.wellKnown) {\n peacTxtPath = path.join(outDir, '.well-known', 'peac.txt');\n } else {\n peacTxtPath = path.join(outDir, 'peac.txt');\n }\n const robotsPath = path.join(outDir, 'robots-ai-snippet.txt');\n const aiprefPath = path.join(outDir, 'aipref-headers.json');\n const mdPath = path.join(outDir, 'ai-policy.md');\n\n if (options.dryRun) {\n // Dry run: show what would be generated\n console.log('Dry run - files that would be generated:\\n');\n console.log(`--- ${peacTxtPath} ---`);\n console.log(peacTxt);\n console.log(`--- ${robotsPath} ---`);\n console.log(robotsTxt);\n console.log(`--- ${aiprefPath} ---`);\n console.log(JSON.stringify(aiprefTemplates, null, 2));\n console.log(`\\n--- ${mdPath} ---`);\n console.log(markdown);\n process.exit(0);\n }\n\n // Create output directories\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n if (options.wellKnown) {\n const wellKnownDir = path.join(outDir, '.well-known');\n if (!fs.existsSync(wellKnownDir)) {\n fs.mkdirSync(wellKnownDir, { recursive: true });\n }\n }\n\n // Write files\n fs.writeFileSync(peacTxtPath, peacTxt, 'utf-8');\n console.log(`Generated: ${peacTxtPath}`);\n\n fs.writeFileSync(robotsPath, robotsTxt, 'utf-8');\n console.log(`Generated: ${robotsPath}`);\n\n fs.writeFileSync(aiprefPath, JSON.stringify(aiprefTemplates, null, 2), 'utf-8');\n console.log(`Generated: ${aiprefPath}`);\n\n fs.writeFileSync(mdPath, markdown, 'utf-8');\n console.log(`Generated: ${mdPath}`);\n\n console.log('');\n console.log('Deployment instructions:');\n if (options.wellKnown) {\n console.log(` 1. Deploy ${peacTxtPath} to serve at /.well-known/peac.txt`);\n } else {\n console.log(` 1. Copy ${peacTxtPath} to /.well-known/peac.txt`);\n }\n console.log(` 2. Append ${robotsPath} to your robots.txt`);\n console.log(` 3. Add headers from ${aiprefPath} to your server config`);\n console.log(` 4. Publish ${mdPath} for human reference`);\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n }\n );\n\n/**\n * peac policy explain <file>\n *\n * Debug tool: explain which rule would apply for a given context.\n */\npolicy\n .command('explain')\n .description('Explain which rule would apply for a given context')\n .argument('<file>', 'Path to policy file')\n .option('-t, --type <type>', 'Subject type (human, org, agent)')\n .option('-l, --labels <labels>', 'Subject labels (comma-separated)')\n .option('-i, --id <id>', 'Subject ID')\n .option(\n '-p, --purpose <purpose>',\n 'Access purpose (crawl, index, train, inference, ai_input, ai_index, search)'\n )\n .option(\n '-m, --licensing-mode <mode>',\n 'Licensing mode (subscription, pay_per_crawl, pay_per_inference)'\n )\n .option('--all-matches', 'Show all matching rules, not just the first')\n .action(\n (\n file: string,\n options: {\n type?: string;\n labels?: string;\n id?: string;\n purpose?: string;\n licensingMode?: string;\n allMatches?: boolean;\n },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const policyDoc = loadPolicy(file);\n\n // Build evaluation context from options\n const context: EvaluationContext = {};\n\n if (options.type || options.labels || options.id) {\n context.subject = {};\n if (options.type) {\n context.subject.type = options.type as SubjectType;\n }\n if (options.labels) {\n context.subject.labels = options.labels.split(',').map((l) => l.trim());\n }\n if (options.id) {\n context.subject.id = options.id;\n }\n }\n\n if (options.purpose) {\n context.purpose = options.purpose as ControlPurpose;\n }\n\n if (options.licensingMode) {\n context.licensing_mode = options.licensingMode as ControlLicensingMode;\n }\n\n if (options.allMatches) {\n const matches = explainMatches(policyDoc, context);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n context,\n matches: matches.map((m) => {\n if (m === '[default]') {\n return {\n rule: '[default]',\n decision: policyDoc.defaults.decision,\n };\n }\n const rule = policyDoc.rules.find((r) => r.name === m);\n return rule\n ? { rule: rule.name, decision: rule.decision }\n : { rule: m, decision: null };\n }),\n },\n globalOpts\n );\n } else {\n console.log('Evaluation Context:');\n if (context.subject) {\n console.log(` Subject: ${JSON.stringify(context.subject)}`);\n } else {\n console.log(' Subject: (any)');\n }\n console.log(` Purpose: ${context.purpose || '(any)'}`);\n console.log(` Licensing Mode: ${context.licensing_mode || '(any)'}`);\n console.log();\n\n console.log(`Matching Rules (${matches.length}):`);\n for (const match of matches) {\n if (match === '[default]') {\n console.log(` - [default] -> ${policyDoc.defaults.decision}`);\n } else {\n const rule = policyDoc.rules.find((r) => r.name === match);\n if (rule) {\n console.log(` - ${rule.name} -> ${rule.decision}`);\n }\n }\n }\n }\n } else {\n const result = evaluate(policyDoc, context);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n context,\n result: {\n decision: result.decision,\n matchedRule: result.matched_rule || '[default]',\n reason: result.reason || null,\n },\n },\n globalOpts\n );\n } else {\n console.log('Evaluation Context:');\n if (context.subject) {\n console.log(` Subject: ${JSON.stringify(context.subject)}`);\n } else {\n console.log(' Subject: (any)');\n }\n console.log(` Purpose: ${context.purpose || '(any)'}`);\n console.log(` Licensing Mode: ${context.licensing_mode || '(any)'}`);\n console.log();\n\n console.log('Result:');\n console.log(` Decision: ${result.decision}`);\n if (result.matched_rule) {\n console.log(` Matched Rule: ${result.matched_rule}`);\n } else {\n console.log(' Matched Rule: (default)');\n }\n if (result.reason) {\n console.log(` Reason: ${result.reason}`);\n }\n }\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n }\n );\n\n/**\n * peac policy list-profiles\n *\n * List available pre-built policy profiles (v0.9.23+)\n */\npolicy\n .command('list-profiles')\n .description('List available pre-built policy profiles')\n .action((options: Record<string, never>, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const profileIds = listProfiles();\n const profiles = profileIds.map((id) => getProfileSummary(id));\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n profiles: profiles.map((p) => ({\n id: p.id,\n name: p.name,\n description: p.description,\n defaultDecision: p.defaultDecision,\n ruleCount: p.ruleCount,\n requiresReceipt: p.requiresReceipt,\n requiredParams: p.requiredParams,\n optionalParams: p.optionalParams,\n })),\n },\n globalOpts\n );\n } else {\n console.log('Available Policy Profiles:\\n');\n for (const profile of profiles) {\n console.log(` ${profile.id}`);\n console.log(` Name: ${profile.name}`);\n console.log(` Default: ${profile.defaultDecision}`);\n console.log(` Rules: ${profile.ruleCount}`);\n if (profile.requiresReceipt) {\n console.log(' Requires receipt: yes');\n }\n if (profile.requiredParams.length > 0) {\n console.log(` Required params: ${profile.requiredParams.join(', ')}`);\n }\n console.log();\n }\n\n console.log('Use \"peac policy show-profile <id>\" for full details');\n console.log('Use \"peac policy init --profile <id>\" to create a policy from a profile');\n }\n\n process.exit(0);\n } catch (err) {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n });\n\n/**\n * peac policy show-profile <id>\n *\n * Show details of a specific profile (v0.9.23+)\n */\npolicy\n .command('show-profile')\n .description('Show details of a specific policy profile')\n .argument('<id>', 'Profile ID')\n .action((id: string, options: Record<string, never>, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const profile = loadProfile(id as ProfileId);\n const summary = getProfileSummary(id as ProfileId);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n profile: {\n id: profile.id,\n name: profile.name,\n description: profile.description,\n policy: profile.policy,\n parameters: profile.parameters,\n defaults: profile.defaults,\n },\n },\n globalOpts\n );\n } else {\n console.log(`Profile: ${profile.name}`);\n console.log(`ID: ${profile.id}`);\n console.log();\n console.log('Description:');\n console.log(\n profile.description\n .split('\\n')\n .map((l) => ` ${l}`)\n .join('\\n')\n );\n console.log();\n\n console.log('Policy:');\n console.log(` Version: ${profile.policy.version}`);\n console.log(` Default decision: ${profile.policy.defaults.decision}`);\n console.log(` Rules: ${profile.policy.rules?.length || 0}`);\n\n if (profile.policy.rules && profile.policy.rules.length > 0) {\n console.log();\n console.log('Rules:');\n for (const rule of profile.policy.rules) {\n console.log(` - ${rule.name}: ${rule.decision}`);\n if (rule.purpose) {\n const purposes = Array.isArray(rule.purpose) ? rule.purpose.join(', ') : rule.purpose;\n console.log(` purpose: ${purposes}`);\n }\n if (rule.reason) {\n console.log(` reason: ${rule.reason}`);\n }\n }\n }\n\n if (Object.keys(profile.parameters || {}).length > 0) {\n console.log();\n console.log('Parameters:');\n for (const [key, param] of Object.entries(profile.parameters || {})) {\n const required = param.required ? ' (required)' : '';\n console.log(` ${key}${required}`);\n console.log(` ${param.description}`);\n if (param.default) {\n console.log(` Default: ${param.default}`);\n }\n if (param.example) {\n console.log(` Example: ${param.example}`);\n }\n }\n }\n\n if (profile.defaults) {\n console.log();\n console.log('Defaults:');\n if (profile.defaults.requirements?.receipt) {\n console.log(' Receipt required: yes');\n }\n if (profile.defaults.rate_limit) {\n console.log(\n ` Rate limit: ${profile.defaults.rate_limit.limit}/${profile.defaults.rate_limit.window_seconds}s`\n );\n }\n }\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof ProfileError) {\n outputError(err.message, { code: err.code, profile: id }, globalOpts);\n process.exit(1);\n }\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n });\n\nexport { policy };\n","/**\n * Conformance Digest Computation\n *\n * Handles SHA-256 hashing, JCS canonicalization, and vectors digest computation.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { createHash } from 'crypto';\nimport { canonicalize } from '@peac/crypto';\n\n/**\n * Compute SHA-256 digest of a string\n */\nexport function sha256(content: string): string {\n return createHash('sha256').update(content, 'utf8').digest('hex');\n}\n\n/**\n * Convert Zod path array to JSON Pointer (RFC 6901)\n *\n * @param path - Array of path segments from Zod (string for keys, number for array indices)\n * @returns JSON Pointer string (e.g., \"/evidence/attestations/0/scope\")\n */\nexport function zodPathToJsonPointer(path: (string | number)[]): string {\n if (path.length === 0) return '';\n\n return (\n '/' +\n path\n .map((segment) => {\n const str = String(segment);\n // RFC 6901 escaping: ~ -> ~0, / -> ~1\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n })\n .join('/')\n );\n}\n\n/**\n * Compute canonical input digest using JCS (RFC 8785)\n *\n * Uses JSON Canonicalization Scheme for deterministic serialization,\n * ensuring consistent digests across implementations regardless of\n * JSON key ordering from JSON.parse.\n *\n * @returns Object with alg and value (alg differs if fallback was used)\n */\nexport function computeCanonicalDigest(input: unknown): { alg: string; value: string } {\n try {\n const canonical = canonicalize(input);\n return { alg: 'sha-256+jcs', value: sha256(canonical) };\n } catch {\n // Fallback to JSON.stringify if canonicalize fails (e.g., for non-JSON values)\n // Use different alg to indicate fallback was used.\n // JSON.stringify(undefined) returns undefined, so coerce to 'null' for safety.\n const serialized = JSON.stringify(input) ?? 'null';\n return { alg: 'sha-256+json', value: sha256(serialized) };\n }\n}\n\n/**\n * File extensions to include in vectors digest\n *\n * This allowlist ensures we capture all conformance-relevant files:\n * - .json: Fixtures, manifests, JWKS\n * - .txt: Policy files (peac.txt)\n * - .jwks: JWKS key files\n * - .pem: PEM-encoded keys\n * - .zip: Bundle archives (if used)\n */\nconst VECTORS_FILE_EXTENSIONS = new Set(['.json', '.txt', '.jwks', '.pem', '.zip']);\n\n/**\n * Files to exclude from vectors digest\n */\nconst VECTORS_EXCLUDE_FILES = new Set(['.DS_Store', '.gitkeep', 'Thumbs.db']);\n\n/**\n * Recursively collect all conformance-relevant files in a directory\n */\nfunction collectFilesRecursive(\n dir: string,\n basePath: string = ''\n): Array<{ relativePath: string; content: string }> {\n const files: Array<{ relativePath: string; content: string }> = [];\n\n if (!fs.existsSync(dir)) return files;\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n // Skip excluded files\n if (VECTORS_EXCLUDE_FILES.has(entry.name)) continue;\n\n const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n // Recurse into subdirectories\n files.push(...collectFilesRecursive(fullPath, relativePath));\n } else {\n // Check if extension is in allowlist\n const ext = path.extname(entry.name).toLowerCase();\n if (VECTORS_FILE_EXTENSIONS.has(ext)) {\n files.push({\n relativePath,\n content: fs.readFileSync(fullPath, 'utf8'),\n });\n }\n }\n }\n\n return files;\n}\n\n/**\n * Compute comprehensive vectors digest by hashing all fixture files\n *\n * VECTORS DIGEST CONTRACT (NORMATIVE):\n * ====================================\n *\n * 1. FILE SELECTION:\n * - INCLUDES: manifest.json (if present) at root level\n * - INCLUDES: All files in category directories with extensions: .json, .txt, .jwks, .pem, .zip\n * - EXCLUDES: .DS_Store, .gitkeep, Thumbs.db\n *\n * 2. RECURSION:\n * - Hashes files in nested directories (e.g., bundle/vectors/*.json)\n *\n * 3. ORDERING:\n * - All files sorted lexicographically by normalized relative path\n * - Path separator is always forward slash (/)\n * - Comparison uses default string comparison (ASCII/Unicode code point order)\n *\n * 4. HASH INPUT FORMAT (per file):\n * - relativePath + NUL byte (\\x00) + sha256(fileBytes)\n * - relativePath uses forward slashes, no leading slash\n * - fileBytes are raw bytes, NO newline normalization\n *\n * 5. FINAL DIGEST:\n * - SHA-256 of all concatenated (path + NUL + hash) entries\n * - Reported as lowercase hex string\n *\n * This contract ensures:\n * - Digest changes when any fixture content changes\n * - Digest is reproducible across platforms\n * - Digest can be verified by other implementations\n */\nexport function computeVectorsDigest(fixturesDir: string, categories: string[]): string {\n const hash = createHash('sha256');\n const allFiles: Array<{ relativePath: string; content: string }> = [];\n\n // Include manifest.json if present (it's part of the conformance vectors)\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n if (fs.existsSync(manifestPath)) {\n allFiles.push({\n relativePath: 'manifest.json',\n content: fs.readFileSync(manifestPath, 'utf8'),\n });\n }\n\n // Sort categories for determinism\n const sortedCategories = [...categories].sort();\n\n for (const cat of sortedCategories) {\n const categoryPath = path.join(fixturesDir, cat);\n // Recursively collect all conformance-relevant files in the category\n const categoryFiles = collectFilesRecursive(categoryPath, cat);\n allFiles.push(...categoryFiles);\n }\n\n // Sort all files by relative path for deterministic ordering\n allFiles.sort((a, b) => a.relativePath.localeCompare(b.relativePath));\n\n for (const file of allFiles) {\n const fileHash = sha256(file.content);\n // Hash: relativePath + NUL + fileHash\n hash.update(file.relativePath);\n hash.update('\\0');\n hash.update(fileHash);\n }\n\n return hash.digest('hex');\n}\n","/**\n * Conformance Manifest Loading and Matching\n *\n * Handles loading manifest.json and retrieving fixture metadata.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { Manifest, ManifestEntry } from './types.js';\n\n/**\n * Load manifest.json from fixtures directory\n */\nexport function loadManifest(fixturesDir: string): Manifest {\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n if (!fs.existsSync(manifestPath)) {\n return {};\n }\n try {\n return JSON.parse(fs.readFileSync(manifestPath, 'utf8'));\n } catch {\n return {};\n }\n}\n\n/**\n * Get manifest entry for a fixture\n */\nexport function getManifestEntry(\n manifest: Manifest,\n category: string,\n filename: string\n): ManifestEntry | undefined {\n return manifest[category]?.[filename];\n}\n","/**\n * Conformance Profile Capabilities\n *\n * Maps categories to their profile details for capabilities reporting.\n */\n\nimport type { ProfileDetail, ProfileLevel, ConformanceLevel } from './types.js';\n\n/**\n * Profile capability registry\n *\n * Maps categories to their profile details including:\n * - profile: The profile name for the report\n * - level: 'semantic' for full validation, 'shape' for structural-only\n * - validator: The validator used (for transparency)\n * - notes: Any caveats about validation scope\n */\nexport const PROFILE_CAPABILITIES: Record<string, ProfileDetail> = {\n valid: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n invalid: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n edge: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n 'agent-identity': {\n profile: 'receipt.verify.agent-identity',\n level: 'semantic',\n validator: '@peac/schema:validateAgentIdentityAttestation',\n },\n attribution: {\n profile: 'receipt.verify.attribution',\n level: 'semantic',\n validator: '@peac/schema:validateAttributionAttestation',\n },\n bundle: {\n profile: 'bundle.shape',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no cryptographic integrity verification',\n },\n discovery: {\n profile: 'discovery.config',\n level: 'semantic',\n validator: '@peac/policy-kit:parsePolicyDocument (via cli compat helper)',\n },\n dispute: {\n profile: 'receipt.verify.dispute',\n level: 'semantic',\n validator: '@peac/schema:validateDisputeAttestation',\n },\n interaction: {\n profile: 'receipt.verify.interaction',\n level: 'semantic',\n validator: '@peac/schema:validateInteractionOrdered',\n },\n issue: {\n profile: 'receipt.issue',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n obligations: {\n profile: 'receipt.verify.obligations',\n level: 'semantic',\n validator: '@peac/schema:validateObligationsExtension',\n },\n policy: {\n profile: 'policy.evaluate',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no policy evaluation logic',\n },\n purpose: {\n profile: 'receipt.verify.purpose',\n level: 'semantic',\n validator: '@peac/schema:isValidPurposeToken',\n },\n verifier: {\n profile: 'receipt.verify',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n workflow: {\n profile: 'workflow.validate',\n level: 'semantic',\n validator: '@peac/schema:validateWorkflowContextOrdered',\n },\n x402: {\n profile: 'transport.x402.shape',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no offer/receipt verification or term matching',\n },\n errors: {\n profile: 'errors.hints',\n level: 'semantic',\n validator: 'validateErrorHintsInput',\n notes: 'Validates next_action hint table shape and vocabulary',\n },\n 'content-usage': {\n profile: 'content-usage.parse',\n level: 'shape',\n validator: 'validateContentUsageInput',\n notes: 'Validates Content-Usage fixture input type; full parsing tested in dedicated suite',\n },\n};\n\n/**\n * Get profile capability for a category\n *\n * For unknown categories, honestly reports that the default validator uses\n * heuristic semantic receipt validation (ReceiptClaimsSchema) when input\n * looks like claims. This prevents capability misrepresentation.\n */\nexport function getCategoryCapability(category: string): ProfileDetail {\n return (\n PROFILE_CAPABILITIES[category] ?? {\n profile: `receipt.verify.${category}`,\n level: 'semantic' as ProfileLevel,\n validator: '@peac/schema:ReceiptClaimsSchema (heuristic)',\n notes: 'Unknown category - uses semantic receipt validation when input looks like claims',\n }\n );\n}\n\n/**\n * Get profile name based on category\n */\nexport function getCategoryProfile(category: string): string {\n return getCategoryCapability(category).profile;\n}\n\n/**\n * Determine if a fixture should run at a given level\n */\nexport function shouldRunAtLevel(\n fixtureVersion: string | undefined,\n level: ConformanceLevel\n): boolean {\n if (!fixtureVersion) return true; // Default to basic\n\n const [major, minor] = fixtureVersion.split('.').map(Number);\n const fixtureLevel: ConformanceLevel =\n major > 0 || minor >= 10 ? 'full' : minor >= 9 ? 'standard' : 'basic';\n\n const levelOrder: ConformanceLevel[] = ['basic', 'standard', 'full'];\n return levelOrder.indexOf(fixtureLevel) <= levelOrder.indexOf(level);\n}\n","/**\n * CLI-internal helper. Preserves the v0.13.0 @peac/disc behavior contract\n * (tolerant two-pass parse + SSRF-aware remote fetch) using public\n * @peac/policy-kit and @peac/net-node primitives, plus PUBLIC @peac/kernel\n * constants where the fields exist.\n *\n * NOT exported from @peac/cli's public surface. Used by:\n * - packages/cli/src/commands/discover.ts\n * - packages/cli/src/lib/conformance/validators.ts (validateDiscoveryInput)\n *\n * External consumers needing the same compatibility behavior should copy\n * this pattern; a packaged public helper may land in a later release if\n * external demand surfaces.\n */\n\n// `@peac/net-node` is ESM-only (no \"require\" exports entry). The CLI bin\n// emits a CommonJS bundle that loads this helper transitively via the\n// conformance validator import chain, but only the conformance use case\n// (parsePolicyDocumentCompat) is reachable from the bin -- not the\n// fetch path. Importing `safeFetchRaw` at module load would force a CJS\n// require() of an ESM-only package and fail at startup. Instead, load\n// `@peac/net-node` lazily inside fetchPolicyDocumentText() via dynamic\n// import so the conformance path resolves without touching it.\nimport type { SafeFetchOptions } from '@peac/net-node';\nimport {\n parsePolicyDocument,\n PolicyLoadError,\n PolicyValidationError,\n type PolicyDocument,\n} from '@peac/policy-kit';\n// @peac/kernel.POLICY exposes manifestPath + maxBytes (and other discovery\n// surface defaults). @peac/kernel.DISCOVERY does NOT carry timeoutMs in\n// v0.13.x; the CLI keeps its own DISCOVER_TIMEOUT_MS pinned to the value\n// the retired @peac/disc used.\nimport { POLICY } from '@peac/kernel';\n\n// CLI-local constants. These mirror v0.13.0 @peac/disc behavior verbatim.\n// Pinned by tests in packages/cli/__tests__/discover-command.test.ts.\nexport const DISCOVER_TIMEOUT_MS = 5_000;\nexport const DISCOVER_MAX_BYTES = POLICY.maxBytes; // 262144 bytes (256 KiB)\nexport const PEAC_TXT_PATH = POLICY.manifestPath; // '/.well-known/peac.txt'\nconst DEFAULT_USER_AGENT = 'peac-cli';\n\nconst LEGACY_KEY_LINE = /^\\s*(verify|public_keys|jwks)\\s*:/m;\nconst LEGACY_KEY_FULL_LINE_GLOBAL = /^\\s*(verify|public_keys|jwks)\\s*:.*\\r?\\n?/gm;\n\nlet legacyWarningFired = false;\n\nfunction fireLegacyWarning(field: string): void {\n if (legacyWarningFired) return;\n legacyWarningFired = true;\n if (typeof process !== 'undefined' && typeof process.emitWarning === 'function') {\n process.emitWarning(\n `peac.txt legacy key-discovery field \"${field}\" is deprecated and ignored. ` +\n `peac.txt is a policy-document surface (docs/specs/PEAC-TXT.md). ` +\n `Key resolution uses iss -> /.well-known/peac-issuer.json -> jwks_uri -> JWKS.`,\n { code: 'PEAC_LEGACY_PEAC_TXT_KEY_FIELD', type: 'DeprecationWarning' }\n );\n }\n}\n\n/** @internal - tests only; resets the one-shot legacy-warning flag. */\nexport function __resetLegacyWarningForTests(): void {\n legacyWarningFired = false;\n}\n\nexport interface CompatParseResult {\n valid: boolean;\n data?: PolicyDocument;\n errors?: string[];\n warnings?: string[];\n}\n\nfunction collectLegacyWarnings(text: string, warnings: string[]): void {\n const lines = text.split(/\\r?\\n/);\n let firstField: string | null = null;\n lines.forEach((line, idx) => {\n const m = line.match(/^\\s*(verify|public_keys|jwks)\\s*:/);\n if (m) {\n if (firstField === null) firstField = m[1];\n warnings.push(\n `Line ${idx + 1}: legacy key-discovery field \"${m[1]}\" ignored ` +\n `(peac.txt is policy-only; use peac-issuer.json for keys)`\n );\n }\n });\n if (firstField) fireLegacyWarning(firstField);\n}\n\nfunction failureFrom(err: unknown, warnings: string[]): CompatParseResult {\n const errors: string[] = [];\n if (err instanceof PolicyValidationError) {\n const issues = err.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');\n errors.push(`Policy validation failed: ${issues}`);\n } else if (err instanceof PolicyLoadError) {\n errors.push(err.message);\n } else {\n errors.push(`Unexpected parse error: ${err instanceof Error ? err.message : String(err)}`);\n }\n return {\n valid: false,\n errors,\n warnings: warnings.length > 0 ? warnings : undefined,\n };\n}\n\n/**\n * Tolerant two-pass parser preserving v0.13.0 @peac/disc.parse semantics.\n *\n * Pass 1: hand the raw text to parsePolicyDocument unmodified. Legacy-looking\n * substrings inside YAML comments / block scalars / rule text remain intact.\n *\n * Pass 2 (only if Pass 1 throws AND legacy `verify:` / `public_keys:` /\n * `jwks:` lines are present at top level): strip those lines and retry.\n * Detected legacy lines surface as warnings + a once-per-process structured\n * DeprecationWarning with code PEAC_LEGACY_PEAC_TXT_KEY_FIELD.\n *\n * Returns a structured ParseResult; never throws on policy validation /\n * load failure (those become `errors`). Throws only on programming errors.\n */\nexport function parsePolicyDocumentCompat(text: string): CompatParseResult {\n if (text.trim().length === 0) {\n return {\n valid: false,\n errors: ['Empty policy document. Expected peac-policy/0.1 YAML or JSON.'],\n };\n }\n\n const hasLegacyLines = LEGACY_KEY_LINE.test(text);\n const warnings: string[] = [];\n\n try {\n const data = parsePolicyDocument(text);\n if (hasLegacyLines) collectLegacyWarnings(text, warnings);\n return {\n valid: true,\n data,\n warnings: warnings.length > 0 ? warnings : undefined,\n };\n } catch (firstErr) {\n if (!hasLegacyLines) return failureFrom(firstErr, warnings);\n collectLegacyWarnings(text, warnings);\n const stripped = text.replace(LEGACY_KEY_FULL_LINE_GLOBAL, '');\n try {\n const data = parsePolicyDocument(stripped);\n return { valid: true, data, warnings };\n } catch (secondErr) {\n return failureFrom(secondErr, warnings);\n }\n }\n}\n\nexport interface FetchPolicyDocumentSuccess {\n ok: true;\n text: string;\n warnings?: string[];\n}\n\nexport interface FetchPolicyDocumentFailure {\n ok: false;\n error: string;\n code?: string;\n}\n\nexport type FetchPolicyDocumentResult = FetchPolicyDocumentSuccess | FetchPolicyDocumentFailure;\n\nexport interface FetchPolicyDocumentOptions {\n /** Override the v0.13.0-equivalent 5_000 ms total timeout. */\n timeoutMs?: number;\n /** Override the v0.13.0-equivalent 256 KiB body cap. */\n maxBytes?: number;\n /** Override the User-Agent header. Defaults to `peac-cli`. */\n userAgent?: string;\n}\n\n/**\n * Fetch a peac.txt policy document via SSRF-aware HTTP with a body cap and\n * timeout. Returns the raw response text on success. Caller is responsible\n * for parsing via `parsePolicyDocumentCompat`. Always closes the underlying\n * raw response in a `finally` block (no socket leak).\n */\nexport async function fetchPolicyDocumentText(\n origin: string,\n options: FetchPolicyDocumentOptions = {}\n): Promise<FetchPolicyDocumentResult> {\n let target: URL;\n try {\n target = new URL(PEAC_TXT_PATH, origin);\n } catch (err) {\n return {\n ok: false,\n code: 'INVALID_URL',\n error: `Invalid origin: ${err instanceof Error ? err.message : String(err)}`,\n };\n }\n\n const fetchOptions: SafeFetchOptions = {\n timeoutMs: options.timeoutMs ?? DISCOVER_TIMEOUT_MS,\n maxResponseBytes: options.maxBytes ?? DISCOVER_MAX_BYTES,\n headers: { 'user-agent': options.userAgent ?? DEFAULT_USER_AGENT },\n allowedMethods: ['GET'],\n };\n\n // Lazy import: see the module-load comment above. Dynamic import works in\n // both CJS and ESM bundles; in CJS, Node can dynamically import the ESM-only\n // @peac/net-node at runtime even though `require()` cannot.\n const { safeFetchRaw } = await import('@peac/net-node');\n\n const raw = await safeFetchRaw(target.toString(), fetchOptions);\n if (!raw.ok) {\n return {\n ok: false,\n code: raw.code,\n error: `${raw.code}: ${raw.error}`,\n };\n }\n try {\n if (!raw.response.ok) {\n return {\n ok: false,\n code: `HTTP_${raw.response.status}`,\n error: `HTTP ${raw.response.status}: ${raw.response.statusText}`,\n };\n }\n const text = await raw.response.text();\n return { ok: true, text, warnings: raw.warnings };\n } finally {\n await raw.close();\n }\n}\n","/**\n * Conformance Category Validators\n *\n * Category-aware validation using the same validators as tests/conformance/*.spec.ts.\n */\n\nimport {\n ReceiptClaimsSchema,\n parseReceiptClaims,\n validateAgentIdentityAttestation,\n validateAttributionAttestation,\n validateDisputeAttestation,\n validateInteractionOrdered,\n validateWorkflowContextOrdered,\n validateObligationsExtension,\n isValidPurposeToken,\n isCanonicalPurpose,\n type InteractionValidationResult,\n type WorkflowValidationResult,\n} from '@peac/schema';\nimport { parsePolicyDocumentCompat } from '../policy-document-discovery.js';\nimport type { ValidationResult, ValidationResultWithPath, CategoryValidator } from './types.js';\nimport { zodPathToJsonPointer } from './digest.js';\n\n/**\n * Map Zod issue code to manifest keyword\n */\nfunction zodCodeToKeyword(code: string): string {\n const mapping: Record<string, string> = {\n invalid_type: 'type',\n invalid_literal: 'const',\n unrecognized_keys: 'additionalProperties',\n invalid_union: 'anyOf',\n invalid_enum_value: 'enum',\n invalid_string: 'format',\n too_small: 'minLength',\n too_big: 'maxLength',\n custom: 'custom',\n };\n return mapping[code] ?? code;\n}\n\n/**\n * Validate receipt claims using Zod schema\n */\nexport function validateReceiptPayload(payload: unknown): ValidationResultWithPath {\n const result = ReceiptClaimsSchema.safeParse(payload);\n\n if (result.success) {\n return { valid: true };\n }\n\n const firstIssue = result.error.issues[0];\n const zodPath = firstIssue?.path ?? [];\n const errorPath = zodPathToJsonPointer(zodPath as (string | number)[]);\n const errorKeyword = zodCodeToKeyword(firstIssue?.code ?? 'unknown');\n\n // Map paths to canonical error codes\n let errorCode = 'E_INVALID_FORMAT';\n const pathStr = zodPath.join('.');\n if (pathStr === 'iss' || pathStr.startsWith('iss.')) errorCode = 'E_INVALID_ISSUER';\n else if (pathStr === 'aud' || pathStr.startsWith('aud.')) errorCode = 'E_INVALID_AUDIENCE';\n else if (pathStr === 'iat') errorCode = 'E_INVALID_IAT';\n else if (pathStr === 'exp') errorCode = 'E_INVALID_EXP';\n else if (pathStr === 'rid') errorCode = 'E_INVALID_RID';\n else if (firstIssue?.code === 'invalid_type' && zodPath.length > 0) {\n // For required fields, Zod reports invalid_type when field is undefined\n errorCode = 'E_REQUIRED';\n }\n\n return {\n valid: false,\n error_code: errorCode,\n error_message: firstIssue?.message ?? 'Unknown validation error',\n error_path: errorPath,\n error_keyword: errorKeyword,\n };\n}\n\n/**\n * Validate receipt claims using unified parser (parse-level error codes).\n *\n * Separate from validateReceiptPayload which returns path-level codes.\n * Use this for the `parse` conformance category where fixtures assert\n * parse-level codes (E_PARSE_COMMERCE_INVALID, E_PARSE_ATTESTATION_INVALID).\n */\nexport function validateParseReceiptClaims(payload: unknown): ValidationResultWithPath {\n const pr = parseReceiptClaims(payload);\n if (pr.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: pr.error.code,\n error_message: pr.error.message,\n };\n}\n\n/**\n * Validate discovery document (peac.txt or peac-issuer.json)\n */\nfunction validateDiscoveryInput(input: unknown): ValidationResult {\n if (typeof input === 'string') {\n // Parse as peac.txt format via the CLI-internal compat helper that\n // preserves v0.13.0 @peac/disc.parse legacy-line tolerance.\n const result = parsePolicyDocumentCompat(input);\n if (result.valid) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_DISCOVERY_PARSE_ERROR',\n error_message: result.errors?.join('; ') ?? 'Discovery parse error',\n };\n }\n\n // JSON format - validate structure\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n if (!obj.issuer || typeof obj.issuer !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_ISSUER',\n error_message: 'Discovery document missing required issuer field',\n };\n }\n if (!obj.jwks_uri || typeof obj.jwks_uri !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_JWKS_URI',\n error_message: 'Discovery document missing required jwks_uri field',\n };\n }\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_DISCOVERY',\n error_message: 'Discovery input must be string or object',\n };\n}\n\n/**\n * Validate agent identity attestation\n */\nfunction validateAgentIdentityInput(input: unknown): ValidationResult {\n const result = validateAgentIdentityAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_AGENT_IDENTITY',\n error_message: result.error,\n };\n}\n\n/**\n * Validate attribution attestation\n */\nfunction validateAttributionInput(input: unknown): ValidationResult {\n const result = validateAttributionAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_ATTRIBUTION',\n error_message: result.error,\n };\n}\n\n/**\n * Validate dispute attestation\n */\nfunction validateDisputeInput(input: unknown): ValidationResult {\n const result = validateDisputeAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_DISPUTE',\n error_message: result.error,\n };\n}\n\n/**\n * Validate interaction evidence\n */\nfunction validateInteractionInput(input: unknown): ValidationResult {\n const result: InteractionValidationResult = validateInteractionOrdered(input);\n if (result.valid) {\n return {\n valid: true,\n warnings: result.warnings.map((w) => w.message),\n };\n }\n // InteractionValidationResult has errors array when invalid\n const firstError = result.errors[0];\n return {\n valid: false,\n error_code: firstError?.code ?? 'E_INVALID_INTERACTION',\n error_message: firstError?.message ?? 'Interaction validation failed',\n };\n}\n\n/**\n * Validate workflow context\n */\nfunction validateWorkflowInput(input: unknown): ValidationResult {\n const result: WorkflowValidationResult = validateWorkflowContextOrdered(input);\n if (result.valid) {\n return { valid: true };\n }\n // WorkflowValidationResult has error_code and error when invalid\n return {\n valid: false,\n error_code: result.error_code,\n error_message: result.error,\n };\n}\n\n/**\n * Validate obligations extension\n */\nfunction validateObligationsInput(input: unknown): ValidationResult {\n const result = validateObligationsExtension(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_OBLIGATIONS',\n error_message: result.error,\n };\n}\n\n/**\n * Validate purpose tokens\n */\nfunction validatePurposeInput(input: unknown): ValidationResult {\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n\n // Check purpose_declared array\n if (obj.purpose_declared && Array.isArray(obj.purpose_declared)) {\n for (const p of obj.purpose_declared) {\n if (typeof p === 'string' && !isValidPurposeToken(p) && !isCanonicalPurpose(p)) {\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE_TOKEN',\n error_message: `Invalid purpose token: ${p}`,\n };\n }\n }\n }\n\n // Check purpose_enforced\n if (obj.purpose_enforced && typeof obj.purpose_enforced === 'string') {\n if (!isValidPurposeToken(obj.purpose_enforced) && !isCanonicalPurpose(obj.purpose_enforced)) {\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE_ENFORCED',\n error_message: `Invalid enforced purpose: ${obj.purpose_enforced}`,\n };\n }\n }\n\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE',\n error_message: 'Purpose input must be object with purpose_declared/purpose_enforced',\n };\n}\n\n/**\n * Validate bundle (basic structure check - full verification requires async)\n */\nfunction validateBundleInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_BUNDLE',\n error_message: 'Bundle must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n\n // Check required bundle fields\n if (!obj.version || typeof obj.version !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_VERSION',\n error_message: 'Bundle missing required version field',\n };\n }\n\n // Check for entries or receipts array\n if (!Array.isArray(obj.entries) && !Array.isArray(obj.receipts)) {\n return {\n valid: false,\n error_code: 'E_MISSING_ENTRIES',\n error_message: 'Bundle missing entries or receipts array',\n };\n }\n\n return { valid: true };\n}\n\n/**\n * Validate x402 offer/payment structures\n */\nfunction validateX402Input(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_X402',\n error_message: 'x402 input must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n\n // Check for x402 payment required structure\n if (obj.accepts && Array.isArray(obj.accepts)) {\n // Validate accepts array contains payment options\n for (const accept of obj.accepts) {\n if (typeof accept !== 'object' || accept === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_ACCEPTS',\n error_message: 'x402 accepts must contain payment option objects',\n };\n }\n }\n return { valid: true };\n }\n\n // Check for x402 payment evidence structure\n if (obj.rail && obj.reference) {\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_X402_STRUCTURE',\n error_message: 'x402 input missing required fields (accepts or rail+reference)',\n };\n}\n\n/**\n * Validate policy-related input\n */\nfunction validatePolicyInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_POLICY',\n error_message: 'Policy input must be an object',\n };\n }\n\n // Basic structure validation for policy\n return { valid: true };\n}\n\n/**\n * Validate issue-related input (receipt issuance)\n */\nfunction validateIssueInput(input: unknown): ValidationResult {\n // Issue fixtures are typically receipt structures for issuance testing\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n\n // If it has claims, validate them\n if (obj.claims) {\n return validateReceiptPayload(obj.claims);\n }\n\n // If it has payload, validate it\n if (obj.payload) {\n return validateReceiptPayload(obj.payload);\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Valid next_action values (closed vocabulary)\n */\nconst VALID_NEXT_ACTIONS = new Set([\n 'retry_after_delay',\n 'retry_with_different_key',\n 'retry_with_different_input',\n 'refresh_attestation',\n 'contact_issuer',\n 'abort',\n 'none',\n]);\n\n/**\n * Validate error hint table\n *\n * Validates the shape of the next-action-hints.json fixture:\n * - Must have a `hints` object\n * - Each hint must have `next_action` from the closed vocabulary and `retryable` boolean\n */\nfunction validateErrorHintsInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_ERROR_HINTS',\n error_message: 'Error hints input must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n if (!obj.hints || typeof obj.hints !== 'object') {\n return {\n valid: false,\n error_code: 'E_MISSING_HINTS',\n error_message: 'Error hints missing required hints object',\n };\n }\n\n const hints = obj.hints as Record<string, unknown>;\n for (const [code, hint] of Object.entries(hints)) {\n if (typeof hint !== 'object' || hint === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_HINT',\n error_message: `Hint for ${code} must be an object`,\n };\n }\n const h = hint as Record<string, unknown>;\n if (!VALID_NEXT_ACTIONS.has(h.next_action as string)) {\n return {\n valid: false,\n error_code: 'E_INVALID_NEXT_ACTION',\n error_message: `Hint for ${code} has invalid next_action: ${String(h.next_action)}`,\n };\n }\n if (typeof h.retryable !== 'boolean') {\n return {\n valid: false,\n error_code: 'E_INVALID_RETRYABLE',\n error_message: `Hint for ${code} has non-boolean retryable: ${String(h.retryable)}`,\n };\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Validate content-usage fixture input\n *\n * Content-usage fixtures are string inputs (HTTP header values).\n * Validates that the input is a string.\n */\nfunction validateContentUsageInput(input: unknown): ValidationResult {\n if (typeof input === 'string') {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_CONTENT_USAGE',\n error_message: 'Content-Usage input must be a string (HTTP header value)',\n };\n}\n\n/**\n * Category validator registry\n */\nexport const CATEGORY_VALIDATORS: Record<string, CategoryValidator> = {\n // Receipt claim validation\n valid: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n invalid: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n edge: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n\n // Parse-level validation (unified parser, parse-level error codes).\n // The claims/payload ambiguity guard lives in the runner (test-harness concern).\n parse: (input) => {\n const obj = input as Record<string, unknown>;\n return validateParseReceiptClaims(obj.claims ?? obj.payload ?? input);\n },\n\n // Category-specific validators\n 'agent-identity': validateAgentIdentityInput,\n attribution: validateAttributionInput,\n bundle: validateBundleInput,\n discovery: validateDiscoveryInput,\n dispute: validateDisputeInput,\n interaction: validateInteractionInput,\n issue: validateIssueInput,\n obligations: validateObligationsInput,\n policy: validatePolicyInput,\n purpose: validatePurposeInput,\n verifier: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n workflow: validateWorkflowInput,\n x402: validateX402Input,\n errors: validateErrorHintsInput,\n 'content-usage': validateContentUsageInput,\n};\n\n/**\n * Get validator for a category\n */\nexport function getValidator(category: string): CategoryValidator {\n return (\n CATEGORY_VALIDATORS[category] ??\n ((input) => {\n // Default: validate as receipt payload\n // Input may be the raw fixture (with payload/claims wrapper) or the payload directly\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n // Check for wrapped payload/claims first\n if (obj.payload || obj.claims) {\n return validateReceiptPayload(obj.payload ?? obj.claims);\n }\n // Otherwise, if it looks like receipt claims (has standard fields), validate directly\n if ('iss' in obj || 'aud' in obj || 'iat' in obj || 'rid' in obj) {\n return validateReceiptPayload(input);\n }\n }\n return { valid: true };\n })\n );\n}\n","/**\n * PEAC Conformance Runner Library\n *\n * Category-aware validation using the same validators as tests/conformance/*.spec.ts:\n * - Receipt validation via @peac/schema (ReceiptClaimsSchema)\n * - Discovery validation via @peac/policy-kit (parsePolicyDocument), wrapped in a\n * CLI-internal compat helper that preserves v0.13.0 legacy-line tolerance\n * - Bundle verification via @peac/audit (verifyBundleIntegrity)\n * - Attestation validation via @peac/schema validators\n * - Interaction/Workflow validation via ordered validators\n *\n * This is the CLI's thin wrapper around the conformance suite.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\n\n// Re-export types and utilities from modules\nexport type {\n ConformanceLevel,\n TestStatus,\n TestDiagnostics,\n TestResult,\n ProfileLevel,\n ProfileDetail,\n ConformanceReport,\n RunnerOptions,\n RunnerCallbacks,\n FixturePack,\n SingleFixture,\n} from './conformance/types.js';\n\nexport { zodPathToJsonPointer } from './conformance/digest.js';\n\n// Import from modules\nimport type {\n ConformanceReport,\n RunnerOptions,\n RunnerCallbacks,\n TestResult,\n TestStatus,\n FixturePack,\n SingleFixture,\n ProfileDetail,\n} from './conformance/types.js';\n\nimport { loadManifest, getManifestEntry } from './conformance/manifest.js';\nimport { sha256, computeCanonicalDigest, computeVectorsDigest } from './conformance/digest.js';\nimport {\n getCategoryCapability,\n getCategoryProfile,\n shouldRunAtLevel,\n} from './conformance/profiles.js';\nimport { getValidator } from './conformance/validators.js';\n\nfunction getGitSha(): string | undefined {\n try {\n return execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim();\n } catch {\n return undefined;\n }\n}\n\n/**\n * Run conformance tests and generate report\n * Pure function - no console output, uses callbacks for progress\n */\nexport function runConformance(\n options: RunnerOptions,\n callbacks?: RunnerCallbacks\n): ConformanceReport {\n const startTime = Date.now();\n const { fixturesDir, level, category, implementationName, implementationVersion } = options;\n\n // Load manifest for reason checking\n const manifest = loadManifest(fixturesDir);\n\n // Collect categories to test (SORTED for determinism)\n const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });\n let categories = entries\n .filter((e) => e.isDirectory() && !e.name.startsWith('.'))\n .map((e) => e.name)\n .sort(); // Deterministic ordering\n\n if (category) {\n if (!categories.includes(category)) {\n throw new Error(`Category not found: ${category}`);\n }\n categories = [category];\n }\n\n // Compute comprehensive vectors digest (includes manifest.json, recursive)\n const vectorsDigest = computeVectorsDigest(fixturesDir, categories);\n\n // Collect profiles\n const profiles = new Set<string>();\n\n // Run tests\n const results: TestResult[] = [];\n let passed = 0;\n let failed = 0;\n let skipped = 0;\n\n for (const cat of categories) {\n const categoryPath = path.join(fixturesDir, cat);\n const profile = getCategoryProfile(cat);\n profiles.add(profile);\n\n const validator = getValidator(cat);\n // SORTED for deterministic ordering across OS/filesystems\n const files = fs\n .readdirSync(categoryPath)\n .filter((f) => f.endsWith('.json'))\n .sort();\n\n for (const file of files) {\n const filePath = path.join(categoryPath, file);\n const content = fs.readFileSync(filePath, 'utf8');\n let fixture: unknown;\n\n const baseTestId = `${cat}.${file.replace('.json', '')}`;\n callbacks?.onTestStart?.(baseTestId);\n\n try {\n fixture = JSON.parse(content);\n } catch (err) {\n // Invalid JSON is a test failure\n failed++;\n const result: TestResult = {\n id: `${baseTestId}.parse`,\n category: profile,\n status: 'fail',\n observed: {\n valid: false,\n error_code: 'E_INVALID_JSON',\n error_message: (err as Error).message,\n },\n diagnostics: {\n error_code: 'E_INVALID_JSON',\n error_message: (err as Error).message,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n // Determine if this is a fixture pack or single fixture\n const fixtureObj = fixture as Record<string, unknown>;\n const isFixturePack = Array.isArray(fixtureObj.fixtures);\n\n if (isFixturePack) {\n // Process fixture pack\n const pack = fixture as FixturePack;\n\n if (!shouldRunAtLevel(pack.version, level)) {\n skipped++;\n const result: TestResult = {\n id: baseTestId,\n category: profile,\n status: 'skip',\n diagnostics: {\n skip_reason: `Fixture version ${pack.version} exceeds level ${level}`,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n for (let i = 0; i < pack.fixtures.length; i++) {\n const f = pack.fixtures[i];\n const fixtureName = f.name ?? `fixture_${i}`;\n const testId = `${baseTestId}.${fixtureName.replace(/\\s+/g, '_')}`;\n\n callbacks?.onTestStart?.(testId);\n\n // Skip fixtures without standard expected format (domain-specific fixture packs\n // like content-usage have their own test suites with expected_entries, not expected.valid)\n if (!f.expected || typeof f.expected.valid !== 'boolean') {\n skipped++;\n const result: TestResult = {\n id: testId,\n category: profile,\n status: 'skip',\n diagnostics: {\n skip_reason: 'Non-standard fixture format (domain-specific test suite)',\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n // Use JCS for canonical input digest (returns {alg, value})\n const inputDigest = computeCanonicalDigest(f.input);\n\n // Guard: fixture inputs must not have both \"claims\" and \"payload\".\n // Ambiguity is a test-harness concern -- precedence would silently\n // pick one and hide fixture authoring bugs.\n if (typeof f.input === 'object' && f.input !== null) {\n const inputObj = f.input as Record<string, unknown>;\n if (inputObj.claims !== undefined && inputObj.payload !== undefined) {\n failed++;\n const result: TestResult = {\n id: testId,\n category: profile,\n status: 'fail',\n diagnostics: {\n error_message: 'Fixture has both \"claims\" and \"payload\" -- ambiguous; use one',\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n }\n\n const observed = validator(f.input);\n\n // Check if result matches expectation\n const expectedValid = f.expected.valid;\n const actualValid = observed.valid;\n const expectedError = f.expected.error_code ?? f.expected.error;\n const actualError = observed.error_code;\n\n let status: TestStatus;\n if (expectedValid && actualValid) {\n status = 'pass';\n passed++;\n } else if (!expectedValid && !actualValid) {\n // Both invalid - check if error codes match (if specified)\n if (expectedError && actualError && expectedError !== actualError) {\n status = 'fail';\n failed++;\n } else {\n status = 'pass';\n passed++;\n }\n } else {\n status = 'fail';\n failed++;\n }\n\n const result: TestResult = {\n id: testId,\n category: profile,\n status,\n expected: {\n valid: expectedValid,\n error_code: expectedError,\n },\n observed: {\n valid: actualValid,\n error_code: actualError,\n error_message: observed.error_message,\n },\n diagnostics: {\n input_digest: inputDigest,\n warnings: observed.warnings,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n }\n } else {\n // Process single fixture\n const singleFixture = fixture as SingleFixture;\n const testId = baseTestId;\n\n // Get manifest entry for additional expectations\n const manifestEntry = getManifestEntry(manifest, cat, file);\n\n // Use JCS for payload if present, otherwise hash raw file content for single fixtures\n const inputToValidate = singleFixture.payload ?? fixture;\n const inputDigest = singleFixture.payload\n ? computeCanonicalDigest(inputToValidate)\n : { alg: 'sha-256', value: sha256(content) }; // Raw file hash for single fixtures without payload\n\n // Determine expected validity from (in order): fixture, manifest, category default\n const expectedValid =\n singleFixture.expected_valid ??\n manifestEntry?.expected_valid ??\n (cat === 'valid' || cat === 'edge');\n\n // Get expected error from fixture or manifest (never derived from keyword)\n const expectedError = singleFixture.expected_error ?? manifestEntry?.expected_error_code;\n\n // Get expected path and keyword from manifest (first-class assertions)\n const expectedPath = manifestEntry?.expected_path;\n const expectedKeyword = manifestEntry?.expected_keyword;\n\n const observed = validator(inputToValidate);\n\n let status: TestStatus;\n if (expectedValid && observed.valid) {\n status = 'pass';\n passed++;\n } else if (!expectedValid && !observed.valid) {\n // Both invalid - check if error codes match (if specified)\n let mismatch = false;\n if (expectedError && observed.error_code && expectedError !== observed.error_code) {\n mismatch = true;\n }\n // Check expected_path if specified (first-class assertion)\n if (expectedPath && observed.error_path && expectedPath !== observed.error_path) {\n mismatch = true;\n }\n // Check expected_keyword if specified (first-class assertion)\n if (\n expectedKeyword &&\n observed.error_keyword &&\n expectedKeyword !== observed.error_keyword\n ) {\n mismatch = true;\n }\n if (mismatch) {\n status = 'fail';\n failed++;\n } else {\n status = 'pass';\n passed++;\n }\n } else {\n status = 'fail';\n failed++;\n }\n\n const result: TestResult = {\n id: testId,\n category: profile,\n status,\n expected: {\n valid: expectedValid,\n error_code: expectedError,\n error_path: expectedPath,\n error_keyword: expectedKeyword,\n },\n observed: {\n valid: observed.valid,\n error_code: observed.error_code,\n error_path: observed.error_path,\n error_keyword: observed.error_keyword,\n error_message: observed.error_message,\n },\n diagnostics: {\n input_digest: inputDigest,\n warnings: observed.warnings,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n }\n }\n }\n\n // Build capabilities from tested categories\n const capabilities: ProfileDetail[] = [];\n for (const cat of categories) {\n const capability = getCategoryCapability(cat);\n // Deduplicate by profile name\n if (!capabilities.some((c) => c.profile === capability.profile)) {\n capabilities.push(capability);\n }\n }\n capabilities.sort((a, b) => a.profile.localeCompare(b.profile));\n\n const endTime = Date.now();\n\n // Build report\n const report: ConformanceReport = {\n report_version: 'peac-conformance-report/0.1',\n suite: {\n name: 'peac-core-conformance',\n version: '0.1.0',\n vectors_digest: {\n alg: 'sha-256',\n value: vectorsDigest,\n },\n profiles: Array.from(profiles).sort(),\n capabilities,\n },\n implementation: {\n name: implementationName ?? '@peac/cli',\n version: implementationVersion ?? '0.0.0',\n },\n summary: {\n passed,\n failed,\n skipped,\n total: passed + failed + skipped,\n status: failed === 0 ? 'pass' : 'fail',\n },\n results,\n meta: {\n generated_at: new Date().toISOString(),\n duration_ms: endTime - startTime,\n runner: {\n name: '@peac/cli',\n version: implementationVersion ?? '0.0.0',\n git_sha: getGitSha(),\n },\n },\n };\n\n return report;\n}\n\n/**\n * Format report as text\n */\nexport function formatReportText(report: ConformanceReport): string {\n const lines: string[] = [];\n\n lines.push('PEAC Conformance Test Results');\n lines.push('=============================');\n lines.push('');\n lines.push(`Status: ${report.summary.status.toUpperCase()}`);\n lines.push(`Profiles: ${report.suite.profiles.join(', ')}`);\n lines.push('');\n lines.push('Summary:');\n lines.push(` Passed: ${report.summary.passed}`);\n lines.push(` Failed: ${report.summary.failed}`);\n lines.push(` Skipped: ${report.summary.skipped}`);\n lines.push(` Total: ${report.summary.total}`);\n\n const failures = report.results.filter((r) => r.status === 'fail');\n if (failures.length > 0) {\n lines.push('');\n lines.push('Failures:');\n for (const f of failures) {\n lines.push(` - ${f.id}`);\n if (f.expected) {\n lines.push(\n ` Expected: valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`\n );\n }\n if (f.observed) {\n lines.push(\n ` Observed: valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`\n );\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format report as markdown\n */\nexport function formatReportMarkdown(report: ConformanceReport): string {\n const lines: string[] = [];\n\n lines.push('# PEAC Conformance Report');\n lines.push('');\n lines.push(`**Status:** ${report.summary.status.toUpperCase()}`);\n lines.push(`**Profiles:** ${report.suite.profiles.join(', ')}`);\n lines.push('');\n lines.push('## Summary');\n lines.push('');\n lines.push('| Metric | Count |');\n lines.push('|--------|-------|');\n lines.push(`| Passed | ${report.summary.passed} |`);\n lines.push(`| Failed | ${report.summary.failed} |`);\n lines.push(`| Skipped | ${report.summary.skipped} |`);\n lines.push(`| Total | ${report.summary.total} |`);\n\n const failures = report.results.filter((r) => r.status === 'fail');\n if (failures.length > 0) {\n lines.push('');\n lines.push('## Failures');\n lines.push('');\n for (const f of failures) {\n lines.push(`### ${f.id}`);\n lines.push('');\n if (f.expected) {\n lines.push(\n `- **Expected:** valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`\n );\n }\n if (f.observed) {\n lines.push(\n `- **Observed:** valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`\n );\n }\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n}\n","/**\n * CLI Version Utility\n *\n * Reads version from package.json at runtime to avoid hardcoding.\n */\n\nimport { join } from 'node:path';\nimport { readFileSync, existsSync } from 'node:fs';\n\n/**\n * Get CLI version from package.json\n *\n * Uses multiple strategies to find package.json:\n * 1. __dirname relative path (for CJS)\n * 2. Process.cwd() fallback\n */\nexport function getVersion(): string {\n // Strategy 1: Try relative path from this file (dist/lib/version.js -> package.json)\n try {\n const pkgPath = join(__dirname, '..', '..', 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.version) return pkg.version;\n }\n } catch {\n // Continue to next strategy\n }\n\n // Strategy 2: Try from CWD (running in monorepo)\n try {\n const pkgPath = join(process.cwd(), 'packages', 'cli', 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.version) return pkg.version;\n }\n } catch {\n // Continue to fallback\n }\n\n // Strategy 3: Fallback version (should rarely happen)\n return '0.0.0-unknown';\n}\n\n/**\n * Get runtime string (e.g., \"node-22.0.0\")\n */\nexport function getRuntime(): string {\n return `node-${process.version.slice(1)}`;\n}\n\n/**\n * Get git commit hash if available\n */\nexport function getCommit(): string | undefined {\n // Could be enhanced to read from .git or environment variable\n return process.env.GIT_COMMIT ?? process.env.GITHUB_SHA;\n}\n","/**\n * PEAC Conformance CLI Commands (v0.10.8+)\n *\n * Commands for running conformance tests:\n * - run: Run conformance tests against fixtures\n * - list: List available conformance test fixtures\n *\n * Uses real validators from @peac/schema and generates reports\n * conforming to peac-conformance-report/0.1.\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n runConformance,\n formatReportText,\n formatReportMarkdown,\n type ConformanceLevel,\n type RunnerCallbacks,\n type TestResult,\n} from '../lib/conformance-runner.js';\nimport { getVersion, getRuntime, getCommit } from '../lib/version.js';\n\n/**\n * Global options for conformance commands\n */\ninterface ConformanceGlobalOptions {\n json?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): ConformanceGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as ConformanceGlobalOptions;\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: ConformanceGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n if (details.code) {\n console.error(`Code: ${details.code}`);\n }\n if (details.hint) {\n console.error(`Hint: ${details.hint}`);\n }\n }\n}\n\n/**\n * Find fixtures directory (relative to CLI package or repo root)\n */\nfunction findFixturesDir(customPath?: string): string | null {\n // Use custom path if provided\n if (customPath) {\n if (fs.existsSync(customPath)) {\n return customPath;\n }\n return null;\n }\n\n // Try relative to CLI package (when installed)\n const cliPath = path.resolve(__dirname, '../../../../specs/conformance/fixtures');\n if (fs.existsSync(cliPath)) {\n return cliPath;\n }\n\n // Try relative to repo root (when running from source)\n const repoPath = path.resolve(process.cwd(), 'specs/conformance/fixtures');\n if (fs.existsSync(repoPath)) {\n return repoPath;\n }\n\n // Try one level up (when running from packages/cli)\n const upPath = path.resolve(process.cwd(), '../../specs/conformance/fixtures');\n if (fs.existsSync(upPath)) {\n return upPath;\n }\n\n return null;\n}\n\n/**\n * List available fixture categories\n */\nfunction listCategories(fixturesDir: string): string[] {\n const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory() && !e.name.startsWith('.')).map((e) => e.name);\n}\n\n/**\n * Count fixtures in a category\n */\nfunction countFixtures(categoryPath: string): number {\n if (!fs.existsSync(categoryPath)) return 0;\n const files = fs.readdirSync(categoryPath);\n return files.filter((f) => f.endsWith('.json')).length;\n}\n\nconst conformance = new Command('conformance')\n .description('PEAC conformance testing (v0.10.8+)')\n .option('--json', 'Output in JSON format');\n\n/**\n * peac conformance run [options]\n */\nconformance\n .command('run')\n .description('Run conformance tests')\n .option('-l, --level <level>', 'Conformance level: basic, standard, full', 'standard')\n .option('-c, --category <category>', 'Test specific category only')\n .option('-o, --output <format>', 'Output format: json, text, markdown', 'text')\n .option('-v, --verbose', 'Show detailed test output')\n .option('--fixtures <path>', 'Path to fixtures directory')\n .option('--implementation <name>', 'Implementation name for report', '@peac/cli')\n .action(async (options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n const startTime = Date.now();\n\n try {\n // Find fixtures directory\n const fixturesDir = findFixturesDir(options.fixtures);\n if (!fixturesDir) {\n outputError(\n 'Fixtures directory not found',\n {\n hint: options.fixtures\n ? `Specified path does not exist: ${options.fixtures}`\n : 'Run from repo root, specify --fixtures <path>, or ensure specs/conformance/fixtures is available',\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Validate level\n const validLevels: ConformanceLevel[] = ['basic', 'standard', 'full'];\n if (!validLevels.includes(options.level)) {\n outputError(\n 'Invalid conformance level',\n {\n level: options.level,\n valid: validLevels,\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Set up callbacks for verbose output\n const callbacks: RunnerCallbacks | undefined = options.verbose\n ? {\n onTestStart: (testId: string) => {\n console.log(`Running: ${testId}`);\n },\n onTestComplete: (result: TestResult) => {\n const status =\n result.status === 'pass' ? 'PASS' : result.status === 'fail' ? 'FAIL' : 'SKIP';\n console.log(` ${status}: ${result.id}`);\n },\n }\n : undefined;\n\n // Run conformance tests\n const report = runConformance(\n {\n fixturesDir,\n level: options.level as ConformanceLevel,\n category: options.category,\n implementationName: options.implementation,\n implementationVersion: getVersion(),\n },\n callbacks\n );\n\n // Add runtime metadata\n report.implementation.runtime = getRuntime();\n const commit = getCommit();\n if (commit) {\n report.implementation.commit = commit;\n }\n\n // Add meta section\n report.meta = {\n generated_at: new Date().toISOString(),\n runner: {\n name: 'peac-cli',\n version: getVersion(),\n },\n duration_ms: Date.now() - startTime,\n };\n\n // Output based on format\n if (options.output === 'json' || globalOpts.json) {\n console.log(JSON.stringify(report, null, 2));\n } else if (options.output === 'markdown') {\n console.log(formatReportMarkdown(report));\n } else {\n console.log(formatReportText(report));\n }\n\n process.exitCode = report.summary.failed === 0 ? 0 : 1;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac conformance list [--category <cat>]\n */\nconformance\n .command('list')\n .description('List available conformance test fixtures')\n .option('-c, --category <category>', 'List fixtures in specific category')\n .option('--fixtures <path>', 'Path to fixtures directory')\n .action((options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n // Find fixtures directory\n const fixturesDir = findFixturesDir(options.fixtures);\n if (!fixturesDir) {\n outputError(\n 'Fixtures directory not found',\n {\n hint: options.fixtures\n ? `Specified path does not exist: ${options.fixtures}`\n : 'Run from repo root, specify --fixtures <path>, or ensure specs/conformance/fixtures is available',\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Load manifest\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n const manifest = fs.existsSync(manifestPath)\n ? JSON.parse(fs.readFileSync(manifestPath, 'utf8'))\n : {};\n\n // List categories\n const categories = listCategories(fixturesDir);\n\n if (options.category) {\n // List fixtures in specific category\n if (!categories.includes(options.category)) {\n outputError(\n 'Category not found',\n {\n category: options.category,\n available: categories,\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n const categoryPath = path.join(fixturesDir, options.category);\n const files = fs.readdirSync(categoryPath).filter((f) => f.endsWith('.json'));\n const categoryManifest = manifest[options.category] as\n | Record<string, Record<string, unknown>>\n | undefined;\n\n if (globalOpts.json) {\n const fixtures = files.map((f) => ({\n file: f,\n description: (categoryManifest?.[f]?.description as string) || 'No description',\n }));\n console.log(JSON.stringify({ category: options.category, fixtures }, null, 2));\n } else {\n console.log(`Fixtures in ${options.category}:\\n`);\n for (const file of files) {\n const info = categoryManifest?.[file] || {};\n const desc = (info.description as string) || 'No description';\n console.log(` ${file}`);\n console.log(` ${desc}\\n`);\n }\n }\n } else {\n // List all categories\n if (globalOpts.json) {\n const categorySummary = categories.map((cat) => ({\n name: cat,\n fixture_count: countFixtures(path.join(fixturesDir, cat)),\n }));\n console.log(JSON.stringify({ categories: categorySummary }, null, 2));\n } else {\n console.log(`Available conformance test categories:\\n`);\n for (const cat of categories) {\n const count = countFixtures(path.join(fixturesDir, cat));\n console.log(` ${cat} (${count} fixtures)`);\n }\n console.log(`\\nUse 'peac conformance list -c <category>' to see fixtures in a category.`);\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\nexport { conformance };\n","/**\n * PEAC Samples Loader\n *\n * Loads sample definitions from specs/conformance/samples/ when available,\n * falling back to embedded defaults when running outside the repo.\n *\n * This ensures a single source of truth (specs folder is canonical).\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Sample category\n */\nexport type SampleCategory = 'valid' | 'invalid' | 'edge';\n\n/**\n * Sample definition\n */\nexport interface SampleDefinition {\n id: string;\n name: string;\n description: string;\n category: SampleCategory;\n claims: Record<string, unknown>;\n header?: Record<string, unknown>;\n expectedError?: string;\n}\n\n/**\n * Embedded fallback samples (used when specs folder not available)\n */\nconst EMBEDDED_SAMPLES: SampleDefinition[] = [\n {\n id: 'basic-receipt',\n name: 'Basic Receipt',\n description: 'Minimal valid PEAC receipt with only required fields',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Placeholder - will be set at generation time\n exp: 0, // Placeholder - will be set at generation time\n rid: 'sample-basic-001',\n },\n },\n {\n id: 'full-receipt',\n name: 'Full Receipt',\n description: 'PEAC receipt with all optional claims populated',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://api.example.com',\n sub: 'user:demo-user',\n iat: 0,\n exp: 0,\n rid: 'sample-full-001',\n purpose_declared: ['search', 'index'],\n purpose_enforced: 'search',\n purpose_reason: 'allowed',\n },\n },\n {\n id: 'interaction-evidence',\n name: 'Interaction Evidence',\n description: 'Receipt with InteractionEvidence extension for AI agent calls',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://agent.example.com',\n sub: 'agent:demo-agent-v1',\n iat: 0,\n exp: 0,\n rid: 'sample-ie-001',\n ext: {\n 'org.peacprotocol/interaction@0.1': {\n version: '0.1',\n interaction_id: 'int_sample_001',\n started_at: '2026-01-01T00:00:00.000Z',\n completed_at: '2026-01-01T00:00:01.000Z',\n outcome: { kind: 'success' },\n input: { hash: 'sha256:abc123...', byte_length: 1024 },\n output: { hash: 'sha256:def456...', byte_length: 2048 },\n },\n },\n },\n },\n {\n id: 'payment-evidence',\n name: 'Payment Evidence',\n description: 'Receipt with payment evidence (402 flow)',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://api.example.com',\n iat: 0,\n exp: 0,\n rid: 'sample-payment-001',\n amt: '100',\n cur: 'USD',\n payment: {\n rail: 'x402',\n reference: 'pay_sample_001',\n amount: '100',\n currency: 'USD',\n },\n },\n },\n {\n id: 'long-expiry',\n name: 'Long Expiry',\n description: 'Receipt with 24-hour expiration',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0,\n exp: 0, // Will be set to iat + 86400 at generation time\n rid: 'sample-long-expiry-001',\n },\n },\n {\n id: 'expired',\n name: 'Expired Receipt',\n description: 'Receipt that has already expired (for testing rejection)',\n category: 'invalid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Will be set to now - 7200 at generation time\n exp: 0, // Will be set to now - 3600 at generation time\n rid: 'sample-expired-001',\n },\n expectedError: 'E_EXPIRED_RECEIPT',\n },\n {\n id: 'future-iat',\n name: 'Future IAT',\n description: 'Receipt with iat in the future (should be rejected)',\n category: 'invalid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Will be set to now + 3600 at generation time\n exp: 0, // Will be set to now + 7200 at generation time\n rid: 'sample-future-iat-001',\n },\n expectedError: 'E_FUTURE_IAT',\n },\n {\n id: 'missing-iss',\n name: 'Missing Issuer',\n description: 'Receipt missing required iss claim (for testing validation)',\n category: 'invalid',\n claims: {\n aud: 'https://example.com',\n iat: 0,\n exp: 0,\n rid: 'sample-no-iss-001',\n },\n expectedError: 'E_MISSING_CLAIM',\n },\n];\n\n/**\n * Find samples directory\n */\nexport function findSamplesDir(customPath?: string): string | null {\n // Use custom path if provided\n if (customPath) {\n if (fs.existsSync(customPath)) {\n return customPath;\n }\n return null;\n }\n\n // Try relative to CLI package\n const cliPath = path.resolve(__dirname, '../../../../specs/conformance/samples');\n if (fs.existsSync(cliPath)) {\n return cliPath;\n }\n\n // Try relative to repo root\n const repoPath = path.resolve(process.cwd(), 'specs/conformance/samples');\n if (fs.existsSync(repoPath)) {\n return repoPath;\n }\n\n // Try one level up\n const upPath = path.resolve(process.cwd(), '../../specs/conformance/samples');\n if (fs.existsSync(upPath)) {\n return upPath;\n }\n\n return null;\n}\n\n/**\n * Load sample definition from a JSON file\n */\nfunction loadSampleFromFile(\n filePath: string,\n id: string,\n category: SampleCategory\n): SampleDefinition | null {\n try {\n const content = JSON.parse(fs.readFileSync(filePath, 'utf8'));\n\n // Handle both formats: fixture-style (header/payload) and claims-only\n const claims = content.payload ?? content.claims ?? content;\n const description = content.$comment ?? content.description ?? `Sample ${id}`;\n\n return {\n id,\n name: id\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' '),\n description,\n category,\n claims,\n header: content.header,\n expectedError: content.expected_error,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Load samples from specs directory\n */\nfunction loadSamplesFromDir(samplesDir: string): SampleDefinition[] {\n const samples: SampleDefinition[] = [];\n\n // Load from valid/ directory\n const validDir = path.join(samplesDir, 'valid');\n if (fs.existsSync(validDir)) {\n const files = fs.readdirSync(validDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(validDir, file), id, 'valid');\n if (sample) samples.push(sample);\n }\n }\n\n // Load from invalid/ directory\n const invalidDir = path.join(samplesDir, 'invalid');\n if (fs.existsSync(invalidDir)) {\n const files = fs.readdirSync(invalidDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(invalidDir, file), id, 'invalid');\n if (sample) samples.push(sample);\n }\n }\n\n // Load from edge/ directory if present\n const edgeDir = path.join(samplesDir, 'edge');\n if (fs.existsSync(edgeDir)) {\n const files = fs.readdirSync(edgeDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(edgeDir, file), id, 'edge');\n if (sample) samples.push(sample);\n }\n }\n\n return samples;\n}\n\n/**\n * Get sample definitions\n *\n * Loads from specs/conformance/samples/ when available (canonical source),\n * falls back to embedded samples when running outside the repo.\n */\nexport function getSamples(customSamplesPath?: string): SampleDefinition[] {\n const samplesDir = findSamplesDir(customSamplesPath);\n\n if (samplesDir) {\n const dirSamples = loadSamplesFromDir(samplesDir);\n if (dirSamples.length > 0) {\n return dirSamples;\n }\n }\n\n // Fall back to embedded samples\n return EMBEDDED_SAMPLES;\n}\n\n/**\n * Get a specific sample by ID\n */\nexport function getSampleById(id: string, customSamplesPath?: string): SampleDefinition | null {\n const samples = getSamples(customSamplesPath);\n return samples.find((s) => s.id === id) ?? null;\n}\n\n/**\n * List available sample IDs by category\n */\nexport function listSampleIds(category?: SampleCategory, customSamplesPath?: string): string[] {\n const samples = getSamples(customSamplesPath);\n const filtered = category ? samples.filter((s) => s.category === category) : samples;\n return filtered.map((s) => s.id);\n}\n","/**\n * PEAC Samples CLI Commands (v0.10.8+)\n *\n * Commands for working with sample receipts:\n * - list: List available sample receipts\n * - generate: Generate sample receipts for testing\n * - show: Show details of a specific sample\n *\n * Uses specs/conformance/samples/ as canonical source when available,\n * falls back to embedded samples when running outside the repo.\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { sign, generateKeypair, base64urlEncode } from '@peac/crypto';\nimport { getSamples, getSampleById, type SampleCategory } from '../lib/samples-loader.js';\nimport { getVersion } from '../lib/version.js';\n\n/**\n * Global options for samples commands\n */\ninterface SamplesGlobalOptions {\n json?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): SamplesGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as SamplesGlobalOptions;\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: SamplesGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n if (details.hint) {\n console.error(`Hint: ${details.hint}`);\n }\n }\n}\n\n/**\n * Apply time adjustments to claims based on sample type\n */\nfunction applyTimeAdjustments(\n claims: Record<string, unknown>,\n sampleId: string,\n now: number\n): Record<string, unknown> {\n const adjusted = { ...claims };\n\n // Standard expiry: 1 hour\n const standardExpiry = 3600;\n // Long expiry: 24 hours\n const longExpiry = 86400;\n\n switch (sampleId) {\n case 'expired':\n // Already expired: iat 2 hours ago, exp 1 hour ago\n adjusted.iat = now - 7200;\n adjusted.exp = now - 3600;\n break;\n case 'future-iat':\n // Future iat: 1 hour in future\n adjusted.iat = now + 3600;\n adjusted.exp = now + 7200;\n break;\n case 'long-expiry':\n adjusted.iat = now;\n adjusted.exp = now + longExpiry;\n break;\n default:\n // Standard: iat now, exp in 1 hour\n if (adjusted.iat === 0 || !adjusted.iat) {\n adjusted.iat = now;\n }\n if (adjusted.exp === 0 || !adjusted.exp) {\n adjusted.exp = now + standardExpiry;\n }\n }\n\n return adjusted;\n}\n\nconst samples = new Command('samples')\n .description('Work with PEAC sample receipts (v0.10.8+)')\n .option('--json', 'Output in JSON format');\n\n/**\n * peac samples list [--category <cat>]\n */\nsamples\n .command('list')\n .description('List available sample receipts')\n .option('-c, --category <category>', 'Filter by category: valid, invalid, edge')\n .option('--samples <path>', 'Path to samples directory')\n .action((options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const allSamples = getSamples(options.samples);\n let filteredSamples = allSamples;\n\n if (options.category) {\n filteredSamples = allSamples.filter((s) => s.category === options.category);\n if (filteredSamples.length === 0) {\n outputError('No samples in category', { category: options.category }, globalOpts);\n process.exitCode = 1;\n return;\n }\n }\n\n if (globalOpts.json) {\n const data = filteredSamples.map((s) => ({\n id: s.id,\n name: s.name,\n description: s.description,\n category: s.category,\n }));\n console.log(JSON.stringify({ samples: data }, null, 2));\n } else {\n console.log('Available PEAC Sample Receipts\\n');\n console.log('VALID SAMPLES:');\n for (const s of filteredSamples.filter((x) => x.category === 'valid')) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n\n const invalid = filteredSamples.filter((x) => x.category === 'invalid');\n if (invalid.length > 0) {\n console.log('\\nINVALID SAMPLES (for testing rejection):');\n for (const s of invalid) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n }\n\n const edge = filteredSamples.filter((x) => x.category === 'edge');\n if (edge.length > 0) {\n console.log('\\nEDGE CASE SAMPLES:');\n for (const s of edge) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n }\n\n console.log('\\nUse \"peac samples show <id>\" to see sample details.');\n console.log('Use \"peac samples generate -o <dir>\" to generate sample files.');\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac samples show <id>\n */\nsamples\n .command('show')\n .description('Show details of a specific sample')\n .argument('<id>', 'Sample ID')\n .option('--samples <path>', 'Path to samples directory')\n .action((id, options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const sample = getSampleById(id, options.samples);\n if (!sample) {\n const allSamples = getSamples(options.samples);\n const available = allSamples.map((s) => s.id);\n outputError('Sample not found', { id, available }, globalOpts);\n process.exitCode = 1;\n return;\n }\n\n if (globalOpts.json) {\n console.log(JSON.stringify(sample, null, 2));\n } else {\n console.log(`Sample: ${sample.name}\\n`);\n console.log(`ID: ${sample.id}`);\n console.log(`Category: ${sample.category}`);\n console.log(`Description: ${sample.description}\\n`);\n console.log('Claims:');\n console.log(JSON.stringify(sample.claims, null, 2));\n if (sample.expectedError) {\n console.log(`\\nExpected Error: ${sample.expectedError}`);\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac samples generate -o <dir> [--format <format>] [--now <timestamp>] [--kid <kid>] [--seed <seed>]\n */\nsamples\n .command('generate')\n .description('Generate sample receipt files')\n .requiredOption('-o, --output <dir>', 'Output directory')\n .option('-f, --format <format>', 'Output format: jws, json, bundle', 'jws')\n .option('--category <category>', 'Generate only specific category')\n .option('--samples <path>', 'Path to samples directory')\n .option('--now <timestamp>', 'Unix timestamp for iat/exp (for deterministic generation)')\n .option('--kid <kid>', 'Key ID to use')\n .action(async (options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const outputDir = options.output;\n\n // Create output directories\n const validDir = path.join(outputDir, 'valid');\n const invalidDir = path.join(outputDir, 'invalid');\n const edgeDir = path.join(outputDir, 'edge');\n const bundlesDir = path.join(outputDir, 'bundles');\n\n fs.mkdirSync(validDir, { recursive: true });\n fs.mkdirSync(invalidDir, { recursive: true });\n fs.mkdirSync(edgeDir, { recursive: true });\n fs.mkdirSync(bundlesDir, { recursive: true });\n\n // Determine timestamp\n const now = options.now ? parseInt(options.now, 10) : Math.floor(Date.now() / 1000);\n\n // Generate key pair\n // Note: --seed option is documented but full determinism requires proper seed-to-key derivation\n const keyPair = await generateKeypair();\n const publicKeyBytes = keyPair.publicKey;\n const privateKeyBytes = keyPair.privateKey;\n\n // Build KID\n const kid = options.kid || `sandbox-${new Date(now * 1000).toISOString().slice(0, 7)}`;\n\n // Build JWK for the key\n const publicJwk = {\n kty: 'OKP',\n crv: 'Ed25519',\n x: base64urlEncode(publicKeyBytes),\n kid,\n use: 'sig',\n alg: 'EdDSA',\n };\n\n const generatedFiles: string[] = [];\n\n // Get samples to generate\n let samplesToGenerate = getSamples(options.samples);\n if (options.category) {\n samplesToGenerate = samplesToGenerate.filter((s) => s.category === options.category);\n }\n\n for (const sample of samplesToGenerate) {\n const targetDir =\n sample.category === 'valid'\n ? validDir\n : sample.category === 'edge'\n ? edgeDir\n : invalidDir;\n const filename = `${sample.id}.${options.format === 'json' ? 'json' : 'jws'}`;\n const filepath = path.join(targetDir, filename);\n\n // Apply time adjustments\n const adjustedClaims = applyTimeAdjustments(sample.claims, sample.id, now);\n\n if (options.format === 'json') {\n // Write as decoded JSON\n const output = {\n $comment: sample.description,\n header: {\n alg: 'EdDSA',\n typ: 'interaction-record+jwt',\n kid,\n },\n payload: adjustedClaims,\n ...(sample.expectedError ? { expected_error: sample.expectedError } : {}),\n };\n fs.writeFileSync(filepath, JSON.stringify(output, null, 2));\n } else {\n // Create actual JWS using @peac/crypto sign function\n const jws = await sign(adjustedClaims, privateKeyBytes, kid);\n fs.writeFileSync(filepath, jws);\n }\n\n generatedFiles.push(filepath);\n }\n\n // Write JWKS file for verification\n const jwksPath = path.join(bundlesDir, 'sandbox-jwks.json');\n const jwks = {\n keys: [publicJwk],\n };\n fs.writeFileSync(jwksPath, JSON.stringify(jwks, null, 2));\n generatedFiles.push(jwksPath);\n\n // Write offline verification bundle\n const bundlePath = path.join(bundlesDir, 'offline-verification.json');\n const bundle = {\n $comment: 'Offline verification bundle with sample receipts and JWKS',\n description:\n 'Bundle for offline verification testing. Contains test JWKS and sample metadata.',\n generated_at: new Date(now * 1000).toISOString(),\n generator: {\n name: 'peac-cli',\n version: getVersion(),\n },\n jwks,\n samples: samplesToGenerate.map((s) => ({\n id: s.id,\n description: s.description,\n category: s.category,\n })),\n notes: [\n 'Sample timestamps are based on --now parameter or generation time.',\n 'Do NOT use sandbox samples in production.',\n ],\n };\n fs.writeFileSync(bundlePath, JSON.stringify(bundle, null, 2));\n generatedFiles.push(bundlePath);\n\n if (globalOpts.json) {\n console.log(\n JSON.stringify(\n {\n success: true,\n output_dir: outputDir,\n files_generated: generatedFiles.length,\n files: generatedFiles,\n timestamp: now,\n kid,\n },\n null,\n 2\n )\n );\n } else {\n console.log(`Sample receipts generated successfully!\\n`);\n console.log(`Output directory: ${outputDir}`);\n console.log(`Files generated: ${generatedFiles.length}`);\n console.log(`Timestamp: ${now} (${new Date(now * 1000).toISOString()})`);\n console.log(`Key ID: ${kid}\\n`);\n console.log('Generated files:');\n for (const f of generatedFiles) {\n console.log(` ${path.relative(outputDir, f)}`);\n }\n console.log(`\\nJWKS for verification: ${path.relative(outputDir, jwksPath)}`);\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\nexport { samples };\n","/**\n * PEAC Reconcile CLI Command (v0.11.3+)\n *\n * Merge two evidence bundles and detect conflicts.\n * Conflict key: composite (iss, jti) with 3-step fallback:\n * 1. (iss, jti) from JWT claims\n * 2. (iss, rid) for Wire 0.1\n * 3. (iss, receipt_ref) where receipt_ref = sha256(receipt_jws)\n *\n * NO auto-resolution: conflicts are surfaced for human decision.\n * Deterministic output: receipts and conflicts sorted by (iss, jti) lexicographically.\n *\n * Security: 16 MB bundle size limit, path traversal prevention.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport { readDisputeBundle, type DisputeBundleContents } from '@peac/audit';\nimport { computeReceiptRef } from '@peac/schema';\nimport { decode } from '@peac/crypto';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ninterface ReconcileReport {\n version: '1.0';\n generated_at: string;\n bundles: string[];\n total_receipts: number;\n merged_receipts: number;\n conflicts: ConflictEntry[];\n}\n\ninterface ConflictEntry {\n key: string;\n bundle_a_receipt_ref: string;\n bundle_b_receipt_ref: string;\n diff_fields: string[];\n}\n\ninterface ReceiptRecord {\n /** Composite key: \"iss|jti\" */\n key: string;\n /** JWS string */\n jws: string;\n /** SHA-256 receipt ref */\n receipt_ref: string;\n /** Source bundle label */\n source: string;\n}\n\ninterface ReconcileGlobalOptions {\n json?: boolean;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst MAX_BUNDLE_SIZE = 16 * 1024 * 1024; // 16 MB\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction getGlobalOptions(cmd: Command): ReconcileGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as ReconcileGlobalOptions;\n}\n\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: ReconcileGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n }\n}\n\n/**\n * Decode JWS payload using @peac/crypto canonical decoder.\n * Returns null if decoding fails.\n */\nfunction decodeJwsPayload(jws: string): Record<string, unknown> | null {\n try {\n const { payload } = decode<Record<string, unknown>>(jws);\n return payload;\n } catch {\n return null;\n }\n}\n\n/**\n * Extract composite conflict key from a JWS receipt.\n * 3-step fallback: (iss, jti) -> (iss, rid) -> (iss, receipt_ref)\n */\nfunction extractConflictKey(jws: string, receiptRef: string): string {\n const payload = decodeJwsPayload(jws);\n if (!payload) {\n return `unknown|${receiptRef}`;\n }\n\n const iss = typeof payload.iss === 'string' ? payload.iss : 'unknown';\n\n // Step 1: (iss, jti)\n if (typeof payload.jti === 'string' && payload.jti.length > 0) {\n return `${iss}|${payload.jti}`;\n }\n\n // Step 2: (iss, rid) for Wire 0.1\n if (typeof payload.rid === 'string' && payload.rid.length > 0) {\n return `${iss}|${payload.rid}`;\n }\n\n // Step 3: (iss, receipt_ref)\n return `${iss}|${receiptRef}`;\n}\n\n/**\n * Extract receipts from a bundle's contents into ReceiptRecords.\n * Uses canonical computeReceiptRef from @peac/schema (async, WebCrypto).\n */\nasync function extractReceipts(\n contents: DisputeBundleContents,\n sourceLabel: string\n): Promise<ReceiptRecord[]> {\n const records: ReceiptRecord[] = [];\n for (const [_id, jws] of contents.receipts) {\n const receiptRef = await computeReceiptRef(jws);\n const key = extractConflictKey(jws, receiptRef);\n records.push({ key, jws, receipt_ref: receiptRef, source: sourceLabel });\n }\n return records;\n}\n\n/**\n * Find field-level differences between two JWS receipts.\n */\nfunction findDiffFields(jwsA: string, jwsB: string): string[] {\n const payloadA = decodeJwsPayload(jwsA);\n const payloadB = decodeJwsPayload(jwsB);\n if (!payloadA || !payloadB) return ['payload_decode_failed'];\n\n const allKeys = new Set([...Object.keys(payloadA), ...Object.keys(payloadB)]);\n const diffs: string[] = [];\n for (const k of allKeys) {\n if (JSON.stringify(payloadA[k]) !== JSON.stringify(payloadB[k])) {\n diffs.push(k);\n }\n }\n return diffs.sort();\n}\n\n/**\n * Read and validate a bundle file.\n */\nasync function readBundle(\n bundlePath: string,\n label: string\n): Promise<{ ok: true; value: DisputeBundleContents } | { ok: false; error: string }> {\n if (!fs.existsSync(bundlePath)) {\n return { ok: false, error: `Bundle file not found: ${bundlePath}` };\n }\n\n const stat = fs.statSync(bundlePath);\n if (stat.size > MAX_BUNDLE_SIZE) {\n return { ok: false, error: `Bundle ${label} exceeds 16 MB size limit (${stat.size} bytes)` };\n }\n\n // Path traversal prevention: resolve to absolute and check it stays within expected directory\n const resolved = fs.realpathSync(bundlePath);\n if (resolved !== bundlePath && !resolved.startsWith(process.cwd())) {\n // Allow if the path is a valid absolute path\n if (!fs.existsSync(resolved)) {\n return { ok: false, error: `Path traversal detected for ${label}` };\n }\n }\n\n const zipBuffer = fs.readFileSync(bundlePath);\n const result = await readDisputeBundle(zipBuffer);\n if (!result.ok) {\n return { ok: false, error: `Failed to read ${label}: ${result.error.message}` };\n }\n return { ok: true, value: result.value };\n}\n\n/**\n * Format a ReconcileReport as human-readable text.\n */\nfunction formatReportText(report: ReconcileReport): string {\n const lines: string[] = [\n 'PEAC Reconciliation Report',\n '==========================',\n '',\n `Generated: ${report.generated_at}`,\n `Bundles: ${report.bundles.join(', ')}`,\n `Total receipts: ${report.total_receipts}`,\n `Merged receipts: ${report.merged_receipts}`,\n `Conflicts: ${report.conflicts.length}`,\n '',\n ];\n\n if (report.conflicts.length === 0) {\n lines.push('No conflicts detected. Bundles merge cleanly.');\n } else {\n lines.push('Conflicts:');\n lines.push('---------');\n for (const conflict of report.conflicts) {\n lines.push(` Key: ${conflict.key}`);\n lines.push(` Bundle A ref: ${conflict.bundle_a_receipt_ref}`);\n lines.push(` Bundle B ref: ${conflict.bundle_b_receipt_ref}`);\n lines.push(` Different fields: ${conflict.diff_fields.join(', ')}`);\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n}\n\n// =============================================================================\n// COMMAND\n// =============================================================================\n\nexport function reconcileCommand(): Command {\n const reconcile = new Command('reconcile').description(\n 'Merge evidence bundles and detect conflicts (v0.11.3+)'\n );\n\n reconcile\n .argument('<bundle1>', 'Path to first bundle ZIP file')\n .argument('<bundle2>', 'Path to second bundle ZIP file')\n .option('-f, --format <format>', 'Output format: json or text', 'text')\n .option('--fail-on-conflict', 'Exit code 1 when any conflict detected', false)\n .action(\n async (\n bundle1Path: string,\n bundle2Path: string,\n options: Record<string, unknown>,\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n const format = (options.format as string) || 'text';\n const failOnConflict = !!options.failOnConflict;\n\n try {\n // Read both bundles\n const [result1, result2] = await Promise.all([\n readBundle(bundle1Path, 'bundle1'),\n readBundle(bundle2Path, 'bundle2'),\n ]);\n\n if (!result1.ok) {\n outputError(result1.error, {}, globalOpts);\n process.exitCode = 1;\n return;\n }\n if (!result2.ok) {\n outputError(result2.error, {}, globalOpts);\n process.exitCode = 1;\n return;\n }\n\n // Extract receipts\n const [receipts1, receipts2] = await Promise.all([\n extractReceipts(result1.value, bundle1Path),\n extractReceipts(result2.value, bundle2Path),\n ]);\n\n // Build index: key -> ReceiptRecord[]\n const index = new Map<string, ReceiptRecord[]>();\n for (const r of [...receipts1, ...receipts2]) {\n const existing = index.get(r.key) ?? [];\n existing.push(r);\n index.set(r.key, existing);\n }\n\n // Detect conflicts and count merged receipts\n const conflicts: ConflictEntry[] = [];\n let mergedCount = 0;\n\n // Sort keys deterministically\n const sortedKeys = [...index.keys()].sort();\n\n for (const key of sortedKeys) {\n const records = index.get(key)!;\n\n // Find records from each bundle\n const fromA = records.filter((r) => r.source === bundle1Path);\n const fromB = records.filter((r) => r.source === bundle2Path);\n\n if (fromA.length > 0 && fromB.length > 0) {\n // Both bundles have this key: check for conflict\n const a = fromA[0];\n const b = fromB[0];\n if (a.receipt_ref !== b.receipt_ref) {\n // Same key, different content: CONFLICT\n conflicts.push({\n key,\n bundle_a_receipt_ref: a.receipt_ref,\n bundle_b_receipt_ref: b.receipt_ref,\n diff_fields: findDiffFields(a.jws, b.jws),\n });\n }\n // Same key, same content: merged (deduplicated)\n mergedCount++;\n } else {\n // Only in one bundle: merged directly\n mergedCount++;\n }\n }\n\n // Sort conflicts by key (already sorted since we iterate sorted keys)\n const report: ReconcileReport = {\n version: '1.0',\n generated_at: new Date().toISOString(),\n bundles: [bundle1Path, bundle2Path],\n total_receipts: receipts1.length + receipts2.length,\n merged_receipts: mergedCount,\n conflicts,\n };\n\n // Output\n if (format === 'json' || globalOpts.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n console.log(formatReportText(report));\n }\n\n // Exit code\n if (failOnConflict && conflicts.length > 0) {\n process.exitCode = 1;\n } else {\n process.exitCode = 0;\n }\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n }\n );\n\n return reconcile;\n}\n","/**\n * `peac doctor`: installability diagnostics.\n *\n * Runs a fixed set of offline-first checks that flag common PEAC\n * installation problems (Node version, required package resolution,\n * tracked config presence). Remote checks (JWKS reachability, reference\n * verifier reachability) are opt-in via the --online flag; by default\n * the command performs zero network calls.\n *\n * Each check reports green / yellow / red. Exit code is 0 when all\n * required checks are green or yellow; 1 when any required check is\n * red.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { createRequire } from 'module';\n\nconst requireFrom = createRequire(path.join(process.cwd(), 'package.json'));\n\ntype Status = 'green' | 'yellow' | 'red';\n\ninterface CheckResult {\n name: string;\n status: Status;\n detail: string;\n}\n\nfunction paint(status: Status, msg: string): string {\n const labels: Record<Status, string> = {\n green: 'PASS',\n yellow: 'WARN',\n red: 'FAIL',\n };\n return `[${labels[status]}] ${msg}`;\n}\n\nfunction parseMajor(nodeVersion: string): number {\n // process.version is e.g. \"v22.19.0\"\n const m = /^v(\\d+)\\./.exec(nodeVersion);\n return m ? parseInt(m[1]!, 10) : 0;\n}\n\nfunction checkNodeVersion(): CheckResult {\n const major = parseMajor(process.version);\n if (major >= 22) {\n return {\n name: 'Node version',\n status: 'green',\n detail: `${process.version} (>= 22 required)`,\n };\n }\n return {\n name: 'Node version',\n status: 'red',\n detail: `${process.version} is below the required Node >= 22`,\n };\n}\n\nfunction checkPackageResolution(): CheckResult {\n const required = ['@peac/protocol', '@peac/crypto', '@peac/schema', '@peac/kernel'];\n const missing: string[] = [];\n for (const pkg of required) {\n try {\n requireFrom.resolve(pkg);\n } catch {\n missing.push(pkg);\n }\n }\n if (missing.length === 0) {\n return {\n name: 'Package resolution',\n status: 'green',\n detail: `${required.length} required packages resolvable`,\n };\n }\n return {\n name: 'Package resolution',\n status: 'red',\n detail: `${missing.length} missing: ${missing.join(', ')}`,\n };\n}\n\nfunction checkKeyMaterial(cwd: string): CheckResult {\n const env = process.env.PEAC_ISSUER_KEY || '';\n if (env) {\n if (env.startsWith('env:') || env.startsWith('file:')) {\n return {\n name: 'Issuer key material',\n status: 'green',\n detail: `PEAC_ISSUER_KEY set via ${env.split(':')[0]}:... scheme`,\n };\n }\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: 'PEAC_ISSUER_KEY set but not using env: or file: scheme',\n };\n }\n // Also look for a conventional ed25519 JWK file at the project root.\n const candidatePaths = [\n path.join(cwd, 'issuer.jwk.json'),\n path.join(cwd, '.peac/issuer.jwk.json'),\n ];\n for (const p of candidatePaths) {\n if (fs.existsSync(p)) {\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: `found ${path.relative(cwd, p)}; prefer PEAC_ISSUER_KEY env var`,\n };\n }\n }\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: 'not found (issuance disabled; read-only tools still work)',\n };\n}\n\nfunction checkPeacTxt(cwd: string): CheckResult {\n const p = path.join(cwd, '.well-known/peac.txt');\n if (fs.existsSync(p)) {\n return {\n name: 'peac.txt presence',\n status: 'green',\n detail: `.well-known/peac.txt present at ${p}`,\n };\n }\n return {\n name: 'peac.txt presence',\n status: 'yellow',\n detail: 'no .well-known/peac.txt (discovery-layer check; optional for tool callers)',\n };\n}\n\nasync function checkOnlineJwks(issuerUrl: string, timeoutMs: number): Promise<CheckResult> {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n try {\n const cfgUrl = new URL('/.well-known/peac-issuer.json', issuerUrl).toString();\n const res = await fetch(cfgUrl, { signal: ctrl.signal });\n if (res.status !== 200) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `${cfgUrl} returned ${res.status}`,\n };\n }\n const cfg = (await res.json()) as { jwks_uri?: string };\n const jwksUri = cfg.jwks_uri;\n if (!jwksUri) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `${cfgUrl} missing jwks_uri`,\n };\n }\n const jwksRes = await fetch(jwksUri, { signal: ctrl.signal });\n if (jwksRes.status !== 200) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `jwks_uri ${jwksUri} returned ${jwksRes.status}`,\n };\n }\n const jwks = (await jwksRes.json()) as { keys?: unknown[] };\n const keyCount = Array.isArray(jwks.keys) ? jwks.keys.length : 0;\n if (keyCount === 0) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `jwks_uri ${jwksUri} returned empty keys array`,\n };\n }\n return {\n name: 'Issuer configuration',\n status: 'green',\n detail: `${cfgUrl} + jwks_uri resolvable with ${keyCount} key(s)`,\n };\n } catch (err: unknown) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `fetch failed: ${err instanceof Error ? err.message : String(err)}`,\n };\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function runDoctor(options: {\n online: boolean;\n issuer?: string;\n timeout: number;\n cwd: string;\n}): Promise<number> {\n const results: CheckResult[] = [];\n results.push(checkNodeVersion());\n results.push(checkPackageResolution());\n results.push(checkKeyMaterial(options.cwd));\n results.push(checkPeacTxt(options.cwd));\n\n if (options.online) {\n if (!options.issuer) {\n results.push({\n name: 'Issuer configuration',\n status: 'yellow',\n detail: '--online set but --issuer <url> not provided; skipping remote check',\n });\n } else {\n results.push(await checkOnlineJwks(options.issuer, options.timeout));\n }\n } else {\n results.push({\n name: 'Issuer configuration',\n status: 'yellow',\n detail: 'offline mode (default); pass --online --issuer <url> to enable remote check',\n });\n }\n\n console.log('\\npeac doctor');\n console.log('-----------');\n for (const r of results) {\n console.log(paint(r.status, `${r.name}: ${r.detail}`));\n }\n\n const hasRed = results.some((r) => r.status === 'red');\n console.log(hasRed ? '\\nFAIL: one or more checks are red.' : '\\nOK: no red checks.');\n return hasRed ? 1 : 0;\n}\n\nexport function doctor(program: Command): void {\n program\n .command('doctor')\n .description('Run PEAC installability diagnostics (offline by default)')\n .option('--online', 'enable remote checks (issuer configuration, JWKS)', false)\n .option('--issuer <url>', 'issuer URL for --online checks (https://...)')\n .option(\n '--timeout <ms>',\n 'timeout for remote checks in milliseconds',\n (v) => parseInt(v, 10),\n 5000\n )\n .action(async (opts: { online: boolean; issuer?: string; timeout: number }) => {\n const exitCode = await runDoctor({\n online: !!opts.online,\n issuer: opts.issuer,\n timeout: opts.timeout,\n cwd: process.cwd(),\n });\n process.exit(exitCode);\n });\n}\n","/**\n * CLI utilities and formatting\n */\n\nimport chalk from 'chalk';\nimport type { CommandResult } from './types.js';\n\nexport function formatOutput(result: CommandResult, json = false): string {\n if (json) {\n return JSON.stringify(result, null, 2);\n }\n\n if (!result.success) {\n return chalk.red(`Error: ${result.error}`);\n }\n\n // Format based on data type\n if (result.data && typeof result.data === 'object') {\n if (result.data.sources) {\n // Discovery result\n return formatDiscoveryResult(result.data);\n } else if (result.data.digest) {\n // Hash result\n return formatHashResult(result.data);\n } else if (result.data.valid !== undefined) {\n // Verify result\n return formatVerifyResult(result.data);\n }\n }\n\n return JSON.stringify(result.data, null, 2);\n}\n\nfunction formatDiscoveryResult(data: any): string {\n const lines = [`Discovery for: ${chalk.blue(data.url)}`, ''];\n\n for (const source of data.sources) {\n const status =\n source.status === 'found'\n ? chalk.green('[found]')\n : source.status === 'not_found'\n ? chalk.yellow('[not found]')\n : chalk.red('[error]');\n\n lines.push(`${status} ${source.type}: ${source.url}`);\n if (source.etag) {\n lines.push(` ETag: ${source.etag}`);\n }\n }\n\n return lines.join('\\\\n');\n}\n\nfunction formatHashResult(data: any): string {\n return [\n `Algorithm: ${data.algorithm}`,\n `Format: ${data.format}`,\n `Digest: ${chalk.green(data.digest)}`,\n `Input size: ${data.input_size} bytes`,\n ].join('\\\\n');\n}\n\nfunction formatVerifyResult(data: any): string {\n if (data.valid) {\n const lines = [chalk.green('Receipt verified successfully'), ''];\n\n if (data.policy_hash) {\n lines.push(`Policy hash: ${data.policy_hash}`);\n }\n\n if (data.resource) {\n lines.push(`Resource: ${data.resource}`);\n }\n\n return lines.join('\\\\n');\n } else {\n return chalk.red(`Verification failed: ${data.error || 'Unknown error'}`);\n }\n}\n\nexport function createExitHandler() {\n return (code: number) => {\n process.exit(code);\n };\n}\n\nexport function handleError(error: Error): CommandResult {\n return {\n success: false,\n error: error.message,\n };\n}\n\nexport function timing() {\n const started = Date.now();\n return {\n started,\n end: () => {\n const completed = Date.now();\n return {\n started,\n completed,\n duration: completed - started,\n };\n },\n };\n}\n","/**\n * peac discover <url> command\n *\n * Performs SSRF-aware retrieval of /.well-known/peac.txt and parses it as a\n * peac-policy/0.1 policy document. Implementation lives in the CLI-internal\n * helper at ../lib/policy-document-discovery.ts (not a public surface).\n *\n * peac.txt is a policy-document surface per docs/specs/PEAC-TXT.md. For\n * cryptographic key discovery, callers should use\n * /.well-known/peac-issuer.json (see docs/specs/PEAC-ISSUER.md).\n */\n\nimport {\n fetchPolicyDocumentText,\n parsePolicyDocumentCompat,\n type CompatParseResult,\n} from '../lib/policy-document-discovery.js';\nimport type { CLIOptions, CommandResult } from '../types.js';\nimport { handleError, timing } from '../utils.js';\n\ninterface DiscoverData extends CompatParseResult {\n hints?: string[];\n}\n\nexport class DiscoverCommand {\n async execute(url: string, _options: CLIOptions = {}): Promise<CommandResult> {\n const timer = timing();\n\n try {\n const parsedUrl = new URL(url);\n if (!['http:', 'https:'].includes(parsedUrl.protocol)) {\n throw new Error('URL must use http: or https: protocol');\n }\n\n const fetched = await fetchPolicyDocumentText(url);\n if (!fetched.ok) {\n return {\n success: false,\n error: fetched.error,\n timing: timer.end(),\n };\n }\n\n const parsed = parsePolicyDocumentCompat(fetched.text);\n const data: DiscoverData = { ...parsed };\n if (fetched.warnings && fetched.warnings.length > 0) {\n data.warnings = [...(parsed.warnings ?? []), ...fetched.warnings];\n }\n if (data.warnings && data.warnings.length > 0) {\n data.hints = [\n 'peac.txt is a policy-document surface (docs/specs/PEAC-TXT.md). ' +\n 'For key discovery, use /.well-known/peac-issuer.json (docs/specs/PEAC-ISSUER.md).',\n ];\n }\n\n return {\n success: true,\n data,\n timing: timer.end(),\n };\n } catch (error) {\n return {\n ...handleError(error as Error),\n timing: timer.end(),\n };\n }\n }\n}\n","#!/usr/bin/env node\n/**\n * PEAC Protocol CLI\n * Command-line tools for receipt verification and conformance testing\n */\n\nimport { Command, CommanderError } from 'commander';\nimport { verifyReceipt } from '@peac/protocol';\nimport { parseIssuerConfig, fetchIssuerConfig } from '@peac/protocol';\nimport { decode } from '@peac/crypto';\nimport { PEACReceiptClaims } from '@peac/schema';\nimport * as fs from 'fs';\nimport { policy } from './commands/policy.js';\nimport { conformance } from './commands/conformance.js';\nimport { samples } from './commands/samples.js';\nimport { reconcileCommand } from './commands/reconcile.js';\nimport { doctor } from './commands/doctor.js';\nimport { DiscoverCommand } from './commands/discover.js';\nimport { formatOutput } from './utils.js';\nimport { getVersion } from './lib/version.js';\n\nconst program = new Command();\n\nprogram\n .name('peac')\n .description('PEAC protocol command-line tools')\n .version(getVersion())\n .exitOverride(); // Throws CommanderError instead of calling process.exit()\n\n/**\n * peac verify <jws>\n */\nprogram\n .command('verify')\n .description('Verify a PEAC receipt JWS')\n .argument('<jws>', 'JWS compact serialization or path to file containing JWS')\n .option('-v, --verbose', 'Show detailed output')\n .action(async (jwsInput: string, options: { verbose?: boolean }) => {\n try {\n // Check if input is a file path\n let jws = jwsInput;\n if (fs.existsSync(jwsInput)) {\n jws = fs.readFileSync(jwsInput, 'utf-8').trim();\n }\n\n console.log('Verifying PEAC receipt...\\n');\n\n // First, decode to show receipt info\n const { header, payload } = decode<PEACReceiptClaims>(jws);\n\n console.log('Receipt Information:');\n console.log(` Receipt ID: ${payload.rid}`);\n console.log(` Issuer: ${payload.iss}`);\n console.log(` Audience: ${payload.aud}`);\n console.log(` Amount: ${payload.amt} ${payload.cur}`);\n console.log(` Payment: ${payload.payment.rail} (${payload.payment.reference})`);\n console.log(` Issued: ${new Date(payload.iat * 1000).toISOString()}`);\n if (payload.exp) {\n console.log(` Expires: ${new Date(payload.exp * 1000).toISOString()}`);\n }\n console.log();\n\n // Verify signature\n console.log('Verifying signature...');\n const result = await verifyReceipt(jws);\n\n if (result.ok) {\n console.log('Signature valid!');\n if (result.perf) {\n console.log(` Verification time: ${result.perf.verify_ms.toFixed(2)}ms`);\n if (result.perf.jwks_fetch_ms) {\n console.log(` JWKS fetch time: ${result.perf.jwks_fetch_ms.toFixed(2)}ms`);\n }\n }\n process.exitCode = 0;\n } else {\n console.log(`Verification failed: ${result.reason}`);\n if (result.details) {\n console.log(` Details: ${result.details}`);\n }\n process.exitCode = 1;\n }\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n/**\n * peac validate-issuer <path|url>\n *\n * Validates a PEAC issuer configuration (/.well-known/peac-issuer.json)\n */\nprogram\n .command('validate-issuer')\n .description('Validate a PEAC issuer configuration')\n .argument('<input>', 'Path to peac-issuer.json file or issuer URL')\n .action(async (input: string) => {\n try {\n console.log('Validating issuer configuration...\\n');\n\n let config;\n if (input.startsWith('http://') || input.startsWith('https://')) {\n // Fetch from URL\n console.log(`Fetching from ${input}...`);\n config = await fetchIssuerConfig(input);\n } else {\n // Read from file\n const text = fs.readFileSync(input, 'utf-8');\n config = parseIssuerConfig(text);\n }\n\n console.log('Issuer configuration is valid!\\n');\n\n console.log('Issuer Configuration:');\n console.log(` Version: ${config.version}`);\n console.log(` Issuer: ${config.issuer}`);\n console.log(` JWKS URI: ${config.jwks_uri}`);\n\n if (config.verify_endpoint) {\n console.log(` Verify: ${config.verify_endpoint}`);\n }\n\n if (config.receipt_versions && config.receipt_versions.length > 0) {\n console.log(` Receipts: ${config.receipt_versions.join(', ')}`);\n }\n\n if (config.algorithms && config.algorithms.length > 0) {\n console.log(` Algorithms: ${config.algorithms.join(', ')}`);\n }\n\n if (config.payment_rails && config.payment_rails.length > 0) {\n console.log(` Rails: ${config.payment_rails.join(', ')}`);\n }\n\n if (config.security_contact) {\n console.log(` Security: ${config.security_contact}`);\n }\n\n process.exitCode = 0;\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n/**\n * peac decode <jws>\n */\nprogram\n .command('decode')\n .description('Decode a PEAC receipt JWS (without verification)')\n .argument('<jws>', 'JWS compact serialization or path to file containing JWS')\n .option('--json', 'Output as JSON')\n .action((jwsInput: string, options: { json?: boolean }) => {\n try {\n // Check if input is a file path\n let jws = jwsInput;\n if (fs.existsSync(jwsInput)) {\n jws = fs.readFileSync(jwsInput, 'utf-8').trim();\n }\n\n const { header, payload } = decode<PEACReceiptClaims>(jws);\n\n if (options.json) {\n console.log(JSON.stringify({ header, payload }, null, 2));\n } else {\n console.log('PEAC Receipt (Decoded, Not Verified)\\n');\n\n console.log('Header:');\n console.log(` typ: ${header.typ}`);\n console.log(` alg: ${header.alg}`);\n console.log(` kid: ${header.kid}`);\n console.log();\n\n console.log('Claims:');\n console.log(` iss: ${payload.iss}`);\n console.log(` aud: ${payload.aud}`);\n console.log(` iat: ${payload.iat} (${new Date(payload.iat * 1000).toISOString()})`);\n if (payload.exp) {\n console.log(` exp: ${payload.exp} (${new Date(payload.exp * 1000).toISOString()})`);\n }\n console.log(` rid: ${payload.rid}`);\n console.log(` amt: ${payload.amt}`);\n console.log(` cur: ${payload.cur}`);\n console.log();\n\n console.log('Payment:');\n console.log(` rail: ${payload.payment.rail}`);\n console.log(` reference: ${payload.payment.reference}`);\n console.log(` amount: ${payload.payment.amount}`);\n console.log(` currency: ${payload.payment.currency}`);\n\n if (payload.subject) {\n console.log();\n console.log('Subject:');\n console.log(` uri: ${payload.subject.uri}`);\n }\n\n if (payload.ext) {\n console.log();\n console.log('Extensions:');\n console.log(JSON.stringify(payload.ext, null, 2));\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n// Policy commands (v0.9.17+)\nprogram.addCommand(policy);\n\n// Conformance testing commands (v0.10.8+)\nprogram.addCommand(conformance);\n\n// Sample receipts commands (v0.10.8+)\nprogram.addCommand(samples);\n\n// Reconcile evidence bundles (v0.11.3+)\nprogram.addCommand(reconcileCommand());\n\n// Installability diagnostics (v0.12.11+)\ndoctor(program);\n\n/**\n * peac discover <url>\n *\n * Fetches /.well-known/peac.txt with SSRF-aware HTTP and parses it as a\n * peac-policy/0.1 document. Implementation lives in\n * packages/cli/src/lib/policy-document-discovery.ts (CLI-internal helper).\n */\nprogram\n .command('discover')\n .description('Discover and parse a remote /.well-known/peac.txt policy document')\n .argument('<url>', 'Origin URL (http/https) whose /.well-known/peac.txt to fetch')\n .option('-j, --json', 'output in JSON format')\n .action(async (url: string, opts: { json?: boolean }) => {\n const cmd = new DiscoverCommand();\n const result = await cmd.execute(url, { json: opts.json });\n console.log(formatOutput(result, opts.json));\n process.exitCode = result.success ? 0 : 1;\n });\n\n// Parse and handle Commander errors (exitOverride causes CommanderError on --help, --version, etc.)\ntry {\n program.parse();\n} catch (err) {\n if (err instanceof CommanderError) {\n // CommanderError from --help, --version, or validation errors\n process.exitCode = err.exitCode;\n } else {\n throw err;\n }\n}\n"]}
|