@telebort/question-banks 2.1.2 → 2.2.0
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/dist/cli/index.cjs +22153 -335
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +22154 -337
- package/dist/cli/index.js.map +1 -1
- package/dist/{index-6-dzKmlY.d.cts → index-B-16Gs9R.d.cts} +1 -1
- package/dist/{index-Czn4XLaj.d.ts → index-DRVgW8qc.d.ts} +1 -1
- package/dist/index.cjs +21638 -142
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +432 -125
- package/dist/index.d.ts +432 -125
- package/dist/index.js +21625 -143
- package/dist/index.js.map +1 -1
- package/dist/premium/index.d.cts +3 -3
- package/dist/premium/index.d.ts +3 -3
- package/dist/schemas/index.d.cts +2 -2
- package/dist/schemas/index.d.ts +2 -2
- package/dist/validation/index.d.cts +1 -1
- package/dist/validation/index.d.ts +1 -1
- package/package.json +1 -1
- package/dist/{assessment-FWaUHZjd.d.cts → assessment-DnV2240e.d.cts} +10 -10
- package/dist/{assessment-FWaUHZjd.d.ts → assessment-DnV2240e.d.ts} +10 -10
- package/dist/{course-CDOMaJwF.d.cts → course-CkP2VX_5.d.cts} +20 -20
- package/dist/{course-CDOMaJwF.d.ts → course-CkP2VX_5.d.ts} +20 -20
package/dist/cli/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schemas/question.ts","../../src/schemas/course.ts","../../src/schemas/assessment.ts","../../src/schemas/certification.ts","../../src/cli/utils/formatters.ts","../../src/cli/utils/error-handler.ts","../../src/cli/commands/validate.ts","../../src/knowledge/index.ts","../../src/malaysia-math/types.ts","../../src/malaysia-math/index.ts","../../src/index.ts","../../src/cli/utils/sdk-loader.ts","../../src/cli/commands/stats.ts","../../src/cli/commands/quiz.ts","../../src/cli/index.ts"],"names":["z","readFile","basename","readdir","join","stat","resolve","createLogger","RateLimiter","isValidDomainId","query","path","Command"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod'\n\n// ============================================================================\n// Feedback Schema (v1.1 enhancement)\n// ============================================================================\n\n/**\n * Structured feedback following the \"Not Yet\" protocol\n * - short: Brief acknowledgment (1 sentence)\n * - detailed: Full explanation of the misconception\n * - socraticHint: Optional guiding question for discovery learning\n */\nexport const FeedbackSchema = z.object({\n short: z.string().min(1).max(200),\n detailed: z.string().min(1).max(1000),\n socraticHint: z.string().max(300).optional(),\n})\n\nexport type Feedback = z.infer<typeof FeedbackSchema>\n\n// ============================================================================\n// Option Schema\n// ============================================================================\n\nexport const OptionKeySchema = z.enum(['A', 'B', 'C', 'D'])\n\nexport type OptionKey = z.infer<typeof OptionKeySchema>\n\n/**\n * Answer option with optional misconception tracking (v1.1)\n */\nexport const OptionSchema = z.object({\n key: OptionKeySchema,\n text: z.string().min(1),\n isCorrect: z.boolean(),\n // v1.1 fields - optional for backward compatibility\n misconceptionId: z.string().optional(),\n feedback: FeedbackSchema.optional(),\n})\n\nexport type Option = z.infer<typeof OptionSchema>\n\n// ============================================================================\n// Question Type Enums\n// ============================================================================\n\nexport const QuestionTypeSchema = z.enum([\n 'vocabulary',\n 'code_understanding',\n 'problem_solving',\n 'application',\n 'reflection',\n])\n\nexport type QuestionType = z.infer<typeof QuestionTypeSchema>\n\n/**\n * Question archetype for pedagogical classification\n * - vocabulary: Definition/terminology questions\n * - trace: Code tracing (mental execution)\n * - bebras: Logic-first, computational thinking\n * - blockmodel: Surface/flow/purpose analysis\n * - parsons: Code block reordering (future)\n */\nexport const QuestionArchetypeSchema = z.enum([\n 'vocabulary',\n 'trace',\n 'bebras',\n 'blockmodel',\n 'parsons',\n])\n\nexport type QuestionArchetype = z.infer<typeof QuestionArchetypeSchema>\n\nexport const DifficultySchema = z.enum(['easy', 'medium', 'hard', 'challenge'])\n\nexport type Difficulty = z.infer<typeof DifficultySchema>\n\nexport const BloomsTaxonomySchema = z.enum([\n 'remember',\n 'understand',\n 'apply',\n 'analyze',\n 'evaluate',\n 'create',\n])\n\nexport type BloomsTaxonomy = z.infer<typeof BloomsTaxonomySchema>\n\n// ============================================================================\n// Question Metadata Schema\n// ============================================================================\n\nexport const QuestionMetadataSchema = z.object({\n difficulty: DifficultySchema,\n estimatedTime: z.number().int().positive(), // seconds\n bloomsTaxonomy: BloomsTaxonomySchema,\n tags: z.array(z.string()),\n source: z.string().default('exit-ticket'),\n version: z.string().default('1.1'),\n createdDate: z.string().optional(),\n lastModified: z.string().optional(),\n})\n\nexport type QuestionMetadata = z.infer<typeof QuestionMetadataSchema>\n\n// ============================================================================\n// Question Schema (v1.1)\n// ============================================================================\n\n/**\n * Full question schema with v1.1 enhancements:\n * - questionArchetype: Pedagogical classification\n * - misconceptionTargets: Expected misconceptions this question probes\n * - options with misconceptionId and structured feedback\n */\nexport const QuestionSchema = z.object({\n // Identifiers\n questionId: z.string().regex(/^[a-z0-9-]+-l\\d+-q\\d+$/),\n globalId: z.string().regex(/^exit-ticket-\\d{4}$/),\n questionNumber: z.number().int().positive().max(5),\n\n // Classification\n questionType: QuestionTypeSchema,\n questionTypeLabel: z.string(),\n questionArchetype: QuestionArchetypeSchema.optional(), // v1.1\n\n // Content\n prompt: z.string().min(10),\n hasCodeBlock: z.boolean(),\n codeLanguage: z.string().nullable(),\n codeContent: z.string().nullable(),\n\n // Misconception targeting (v1.1)\n misconceptionTargets: z.array(z.string()).optional(),\n\n // Answer options (exactly 4)\n options: z.array(OptionSchema).length(4),\n\n // Correct answer\n correctAnswer: OptionKeySchema,\n correctAnswerText: z.string(),\n\n // Metadata\n metadata: QuestionMetadataSchema,\n})\n\nexport type Question = z.infer<typeof QuestionSchema>\n\n// ============================================================================\n// Question without answer (for Standard tier - no answer leakage)\n// ============================================================================\n\nexport const QuestionWithoutAnswerSchema = QuestionSchema.omit({\n correctAnswer: true,\n correctAnswerText: true,\n}).extend({\n options: z.array(\n OptionSchema.omit({\n isCorrect: true,\n feedback: true,\n misconceptionId: true,\n })\n ).length(4),\n})\n\nexport type QuestionWithoutAnswer = z.infer<typeof QuestionWithoutAnswerSchema>\n","import { z } from 'zod'\nimport { QuestionSchema } from './question'\n\n// ============================================================================\n// Course Domain & Tier\n// ============================================================================\n\nexport const CourseDomainSchema = z.enum([\n // AI & Data Science\n 'ai_data_science',\n 'ai_ml_cv',\n 'ai_generative',\n 'ai_advanced',\n // Web Development\n 'web_development',\n // Mobile Development\n 'mobile_development',\n 'mobile',\n // Block-based Programming\n 'block_based',\n 'python_programming',\n 'design',\n // Foundation\n 'foundation',\n 'creative_computing',\n])\n\nexport type CourseDomain = z.infer<typeof CourseDomainSchema>\n\nexport const CourseTierSchema = z.enum([\n 'foundation',\n 'intermediate',\n 'advanced',\n])\n\nexport type CourseTier = z.infer<typeof CourseTierSchema>\n\n// ============================================================================\n// Lesson Schema\n// ============================================================================\n\nexport const LessonSchema = z.object({\n lessonId: z.string(), // e.g., \"ai-1-lesson-1\"\n lessonNumber: z.number().int().positive(),\n lessonTitle: z.string(),\n lessonSlug: z.string().optional(),\n totalQuestions: z.number().int().positive().default(5),\n questions: z.array(QuestionSchema),\n})\n\nexport type Lesson = z.infer<typeof LessonSchema>\n\n// ============================================================================\n// Course Schema\n// ============================================================================\n\nexport const CourseSchema = z.object({\n courseId: z.string(), // e.g., \"ai-1\"\n courseName: z.string(), // e.g., \"AI-1 Data Analysis and Data Science\"\n courseCode: z.string(), // e.g., \"AI1\"\n domain: CourseDomainSchema,\n tier: CourseTierSchema,\n difficulty: z.number().int().min(1).max(5),\n totalLessons: z.number().int().positive(),\n totalQuestions: z.number().int().positive(),\n sourceFile: z.string().optional(),\n lessons: z.array(LessonSchema),\n})\n\nexport type Course = z.infer<typeof CourseSchema>\n\n// ============================================================================\n// Course Summary (without questions - for listing)\n// ============================================================================\n\nexport const CourseSummarySchema = CourseSchema.omit({ lessons: true }).extend({\n lessons: z.array(\n LessonSchema.omit({ questions: true })\n ).optional(),\n})\n\nexport type CourseSummary = z.infer<typeof CourseSummarySchema>\n","import { z } from 'zod'\nimport { OptionKeySchema, FeedbackSchema } from './question'\n\n// ============================================================================\n// User Response Schema\n// ============================================================================\n\n/**\n * A single user response to a question\n */\nexport const UserResponseSchema = z.object({\n questionId: z.string(),\n selectedAnswer: OptionKeySchema,\n timeSpent: z.number().int().nonnegative().optional(), // milliseconds\n submittedAt: z.string().datetime().optional(),\n})\n\nexport type UserResponse = z.infer<typeof UserResponseSchema>\n\n// ============================================================================\n// Assessment Submission Schema\n// ============================================================================\n\n/**\n * An assessment submission containing multiple responses\n */\nexport const AssessmentSubmissionSchema = z.object({\n assessmentId: z.string().uuid().optional(), // Generated if not provided\n userId: z.string().optional(), // For authenticated users\n sessionId: z.string().optional(), // For anonymous sessions\n courseId: z.string(),\n lessonId: z.string().optional(),\n responses: z.array(UserResponseSchema).min(1),\n submittedAt: z.string().datetime(),\n metadata: z.record(z.unknown()).optional(), // Custom metadata\n})\n\nexport type AssessmentSubmission = z.infer<typeof AssessmentSubmissionSchema>\n\n// ============================================================================\n// Graded Response Schema (Premium tier)\n// ============================================================================\n\n/**\n * Result of grading a single response\n */\nexport const GradedResponseSchema = z.object({\n questionId: z.string(),\n selectedAnswer: OptionKeySchema,\n correctAnswer: OptionKeySchema,\n isCorrect: z.boolean(),\n misconceptionId: z.string().nullable(), // For incorrect answers\n feedback: FeedbackSchema.optional(),\n timeSpent: z.number().int().nonnegative().optional(),\n})\n\nexport type GradedResponse = z.infer<typeof GradedResponseSchema>\n\n// ============================================================================\n// Misconception Report Schema (Premium tier)\n// ============================================================================\n\n/**\n * Aggregated misconception analysis for an assessment\n */\nexport const MisconceptionReportSchema = z.object({\n misconceptionId: z.string(),\n count: z.number().int().positive(),\n percentage: z.number().min(0).max(100),\n questionIds: z.array(z.string()),\n description: z.string().optional(),\n})\n\nexport type MisconceptionReport = z.infer<typeof MisconceptionReportSchema>\n\n// ============================================================================\n// Graded Assessment Schema (Premium tier)\n// ============================================================================\n\n/**\n * Complete graded assessment with scores and misconception analysis\n */\nexport const GradedAssessmentSchema = z.object({\n assessmentId: z.string().uuid(),\n userId: z.string().optional(),\n courseId: z.string(),\n lessonId: z.string().optional(),\n\n // Scores\n totalQuestions: z.number().int().positive(),\n correctCount: z.number().int().nonnegative(),\n incorrectCount: z.number().int().nonnegative(),\n score: z.number().min(0).max(100), // Percentage\n passed: z.boolean(), // Based on threshold (default 70%)\n\n // Detailed results\n responses: z.array(GradedResponseSchema),\n\n // Misconception analysis (v1.1 feature)\n misconceptions: z.array(MisconceptionReportSchema).optional(),\n topMisconceptions: z.array(z.string()).max(3).optional(),\n\n // Timing\n totalTimeSpent: z.number().int().nonnegative().optional(), // milliseconds\n averageTimePerQuestion: z.number().nonnegative().optional(),\n submittedAt: z.string().datetime(),\n gradedAt: z.string().datetime(),\n})\n\nexport type GradedAssessment = z.infer<typeof GradedAssessmentSchema>\n\n// ============================================================================\n// Validation Result Schema (Standard tier - no answer leakage)\n// ============================================================================\n\n/**\n * Result of validating an assessment submission\n * Does NOT reveal correct answers - only schema compliance\n */\nexport const ValidationResultSchema = z.object({\n valid: z.boolean(),\n errors: z.array(z.object({\n path: z.array(z.union([z.string(), z.number()])),\n message: z.string(),\n code: z.string().optional(),\n })).optional(),\n isComplete: z.boolean(), // All questions answered\n questionCount: z.number().int(),\n answeredCount: z.number().int(),\n})\n\nexport type ValidationResult = z.infer<typeof ValidationResultSchema>\n","import { z } from 'zod'\n\n// ============================================================================\n// Certification Metadata Schema (v1.2)\n// Used for Academic Transcript and Course Certification\n// ============================================================================\n\n/**\n * Certification Project Schema\n * Represents a project in a course for certification tracking\n */\nexport const CertificationProjectSchema = z.object({\n projectNumber: z.number().int().positive(),\n projectName: z.string(),\n sessionNumber: z.number().int().positive(),\n})\n\nexport type CertificationProject = z.infer<typeof CertificationProjectSchema>\n\n/**\n * Certification Metadata Schema (v1.2)\n *\n * Contains course metadata for generating:\n * - Academic Transcripts (topics list)\n * - Course Certifications (completion requirements)\n *\n * Extracted from course Welcome Note.mdx session tables.\n */\nexport const CertificationMetadataSchema = z.object({\n // Course identification\n courseId: z.string(), // e.g., \"bbp\"\n courseName: z.string(), // e.g., \"BBP: Block-based Python\"\n courseCode: z.string(), // e.g., \"BBP\"\n domain: z.string(), // e.g., \"block_based\"\n tier: z.string(), // e.g., \"foundation\"\n\n // Schema version\n schemaVersion: z.literal('1.2.0'),\n lastUpdated: z.string(), // ISO date string, e.g., \"2025-12-27\"\n\n // Academic Transcript content\n topics: z.array(z.string()), // Lesson names for transcript listing\n projects: z.array(CertificationProjectSchema),\n\n // Summary counts\n totalSessions: z.number().int().nonnegative(),\n totalTopics: z.number().int().nonnegative(),\n totalProjects: z.number().int().nonnegative(),\n})\n\nexport type CertificationMetadata = z.infer<typeof CertificationMetadataSchema>\n\n/**\n * Certification Index Schema\n * Lists all available courses with certification metadata\n */\nexport const CertificationIndexSchema = z.object({\n schemaVersion: z.string(),\n lastUpdated: z.string(),\n totalCourses: z.number().int().nonnegative(),\n courses: z.array(\n z.object({\n courseCode: z.string(),\n dataFile: z.string(),\n })\n ),\n cdnBaseUrl: z.string().url(),\n})\n\nexport type CertificationIndex = z.infer<typeof CertificationIndexSchema>\n","import type { Question } from '../../schemas'\nimport type { Statistics } from '../../types'\n\n// ANSI color codes (chalk-free for simpler dependencies)\nconst colors = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n}\n\nexport function green(text: string): string {\n return `${colors.green}${text}${colors.reset}`\n}\n\nexport function red(text: string): string {\n return `${colors.red}${text}${colors.reset}`\n}\n\nexport function yellow(text: string): string {\n return `${colors.yellow}${text}${colors.reset}`\n}\n\nexport function cyan(text: string): string {\n return `${colors.cyan}${text}${colors.reset}`\n}\n\nexport function bold(text: string): string {\n return `${colors.bold}${text}${colors.reset}`\n}\n\nexport function dim(text: string): string {\n return `${colors.dim}${text}${colors.reset}`\n}\n\n/**\n * Format a question for terminal display\n */\nexport function formatQuestion(q: Question, index: number): string {\n const difficultyColors: Record<string, string> = {\n easy: colors.green,\n medium: colors.yellow,\n hard: colors.red,\n challenge: colors.magenta,\n }\n\n const diffColor = difficultyColors[q.metadata.difficulty] || colors.white\n const diffLabel = `${diffColor}${q.metadata.difficulty}${colors.reset}`\n\n let output = `\\n${colors.bold}Q${index + 1}${colors.reset} [${diffLabel}] ${q.prompt}\\n`\n\n // Show code block if present\n if (q.hasCodeBlock && q.codeContent) {\n output += `${colors.dim}┌─ ${q.codeLanguage || 'code'} ─────────────────${colors.reset}\\n`\n const codeLines = q.codeContent.split('\\n')\n for (const line of codeLines) {\n output += `${colors.dim}│${colors.reset} ${line}\\n`\n }\n output += `${colors.dim}└────────────────────────────${colors.reset}\\n`\n }\n\n // Show options\n for (const opt of q.options) {\n output += ` ${colors.cyan}${opt.key})${colors.reset} ${opt.text}\\n`\n }\n\n return output\n}\n\n/**\n * Format statistics for terminal display\n */\nexport function formatStats(stats: Statistics, title?: string): string {\n let output = '\\n'\n\n if (title) {\n output += `${colors.bold}${colors.cyan}${title}${colors.reset}\\n`\n output += `${'─'.repeat(40)}\\n\\n`\n }\n\n output += `${colors.bold}Overview${colors.reset}\\n`\n output += ` Total Courses: ${stats.totalCourses}\\n`\n output += ` Total Lessons: ${stats.totalLessons}\\n`\n output += ` Total Questions: ${stats.totalQuestions}\\n\\n`\n\n output += `${colors.bold}Questions by Difficulty${colors.reset}\\n`\n const difficulties = ['easy', 'medium', 'hard', 'challenge']\n for (const diff of difficulties) {\n const count = stats.byDifficulty[diff] || 0\n const pct = stats.totalQuestions > 0\n ? Math.round((count / stats.totalQuestions) * 100)\n : 0\n const bar = '█'.repeat(Math.floor(pct / 5))\n output += ` ${diff.padEnd(10)} ${String(count).padStart(4)} ${colors.dim}${bar}${colors.reset} ${pct}%\\n`\n }\n output += '\\n'\n\n output += `${colors.bold}Questions by Type${colors.reset}\\n`\n const types = Object.entries(stats.byQuestionType).sort((a, b) => b[1] - a[1])\n for (const [type, count] of types) {\n output += ` ${type.padEnd(20)} ${count}\\n`\n }\n output += '\\n'\n\n output += `${colors.bold}Code Blocks${colors.reset}\\n`\n output += ` With Code: ${stats.withCodeBlocks}\\n`\n output += ` Without Code: ${stats.withoutCodeBlocks}\\n`\n\n return output\n}\n\n/**\n * Format validation error for terminal display\n */\nexport function formatValidationError(\n filePath: string,\n errors: Array<{ path: (string | number)[]; message: string }>\n): string {\n let output = `\\n${colors.red}✗${colors.reset} ${filePath}\\n`\n\n for (const error of errors) {\n const path = error.path.join('.')\n output += ` ${colors.dim}→${colors.reset} ${path}: ${error.message}\\n`\n }\n\n return output\n}\n\n/**\n * Format validation success for terminal display\n */\nexport function formatValidationSuccess(\n filePath: string,\n lessonCount: number,\n questionCount: number\n): string {\n return `${colors.green}✓${colors.reset} ${filePath}\\n` +\n ` ${colors.dim}${lessonCount} lessons, ${questionCount} questions${colors.reset}\\n`\n}\n\n/**\n * Format a summary line\n */\nexport function formatSummary(passed: number, failed: number): string {\n const total = passed + failed\n if (failed === 0) {\n return `\\n${colors.green}${colors.bold}All ${total} files valid${colors.reset}\\n`\n }\n return `\\n${colors.red}${colors.bold}${failed}/${total} files failed validation${colors.reset}\\n`\n}\n","import { red, bold } from './formatters'\n\n/**\n * Exit codes following Unix conventions\n */\nexport const EXIT_CODES = {\n SUCCESS: 0,\n VALIDATION_ERROR: 1,\n USAGE_ERROR: 2,\n FATAL_ERROR: 3,\n}\n\n/**\n * Handle errors consistently across the CLI\n */\nexport function handleError(error: Error): never {\n console.error(`\\n${red(bold('Error:'))} ${error.message}\\n`)\n\n if (process.env.DEBUG) {\n console.error(error.stack)\n }\n\n process.exit(EXIT_CODES.FATAL_ERROR)\n}\n\n/**\n * Setup global error handlers\n */\nexport function setupErrorHandlers(): void {\n process.on('uncaughtException', (error) => {\n console.error(`\\n${red(bold('Uncaught Exception:'))} ${error.message}`)\n if (process.env.DEBUG) {\n console.error(error.stack)\n }\n process.exit(EXIT_CODES.FATAL_ERROR)\n })\n\n process.on('unhandledRejection', (reason) => {\n const message = reason instanceof Error ? reason.message : String(reason)\n console.error(`\\n${red(bold('Unhandled Rejection:'))} ${message}`)\n if (process.env.DEBUG && reason instanceof Error) {\n console.error(reason.stack)\n }\n process.exit(EXIT_CODES.FATAL_ERROR)\n })\n}\n","import { readFile, readdir, stat } from 'fs/promises'\nimport { join, basename } from 'path'\nimport { CourseSchema } from '../../schemas'\nimport {\n formatValidationError,\n formatValidationSuccess,\n formatSummary,\n green,\n cyan,\n bold,\n} from '../utils/formatters'\nimport { EXIT_CODES } from '../utils/error-handler'\n\nexport interface ValidateOptions {\n all?: boolean\n verbose?: boolean\n}\n\n/**\n * Validate a single course JSON file\n */\nasync function validateFile(filePath: string, verbose?: boolean): Promise<boolean> {\n try {\n const content = await readFile(filePath, 'utf-8')\n const data = JSON.parse(content)\n const result = CourseSchema.safeParse(data)\n\n if (result.success) {\n const lessonCount = result.data.lessons?.length ?? 0\n const questionCount = result.data.lessons?.reduce(\n (sum, l) => sum + (l.questions?.length ?? 0),\n 0\n ) ?? 0\n console.log(formatValidationSuccess(basename(filePath), lessonCount, questionCount))\n return true\n } else {\n const errors = result.error.issues.map(issue => ({\n path: issue.path,\n message: issue.message,\n }))\n console.log(formatValidationError(basename(filePath), verbose ? errors : errors.slice(0, 5)))\n if (!verbose && errors.length > 5) {\n console.log(` ... and ${errors.length - 5} more errors (use --verbose to see all)\\n`)\n }\n return false\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.log(formatValidationError(basename(filePath), [\n { path: [], message: `Parse error: ${message}` },\n ]))\n return false\n }\n}\n\n/**\n * Validate all JSON files in a directory\n */\nasync function validateDirectory(dirPath: string, verbose?: boolean): Promise<boolean> {\n const files = await readdir(dirPath)\n const jsonFiles = files.filter(f => f.endsWith('.json'))\n\n if (jsonFiles.length === 0) {\n console.log(`No JSON files found in ${dirPath}`)\n return false\n }\n\n console.log(`\\n${cyan(bold('Validating'))} ${jsonFiles.length} files in ${dirPath}\\n`)\n\n let passed = 0\n let failed = 0\n\n for (const file of jsonFiles.sort()) {\n const filePath = join(dirPath, file)\n const success = await validateFile(filePath, verbose)\n if (success) {\n passed++\n } else {\n failed++\n }\n }\n\n console.log(formatSummary(passed, failed))\n return failed === 0\n}\n\n/**\n * Main validate command handler\n */\nexport async function validateCommand(\n fileOrDir: string,\n options: ValidateOptions\n): Promise<void> {\n try {\n const stats = await stat(fileOrDir)\n\n if (stats.isDirectory()) {\n const success = await validateDirectory(fileOrDir, options.verbose)\n process.exit(success ? EXIT_CODES.SUCCESS : EXIT_CODES.VALIDATION_ERROR)\n } else if (stats.isFile()) {\n console.log(`\\n${cyan(bold('Validating'))} ${basename(fileOrDir)}\\n`)\n const success = await validateFile(fileOrDir, options.verbose)\n if (success) {\n console.log(`\\n${green(bold('Valid!'))} File passed schema validation.\\n`)\n }\n process.exit(success ? EXIT_CODES.SUCCESS : EXIT_CODES.VALIDATION_ERROR)\n } else {\n console.error(`Invalid path: ${fileOrDir}`)\n process.exit(EXIT_CODES.USAGE_ERROR)\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n console.error(`File or directory not found: ${fileOrDir}`)\n process.exit(EXIT_CODES.USAGE_ERROR)\n }\n throw error\n }\n}\n","/**\n * @telebort/question-banks - Knowledge Module (v2.0)\n *\n * Provides topic-based access to the Knowledge Graph taxonomy\n *\n * @example\n * ```typescript\n * const sdk = createQuestionBanksSDK({ cdnBase: 'https://...' })\n *\n * // Get questions by topic\n * const sorting = await sdk.knowledge.getByTopic('computer-science/algorithms/sorting')\n *\n * // Get full taxonomy tree\n * const tree = await sdk.taxonomy.getTopics()\n *\n * // List all domains\n * const domains = await sdk.taxonomy.getDomains()\n * ```\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * 4-level topic structure for Knowledge Graph\n */\nexport interface Topic {\n level1_domain: string\n level2_strand: string\n level3_topic: string\n level4_concept?: string\n}\n\n/**\n * Full taxonomy tree structure\n */\nexport interface TaxonomyTree {\n version: string\n domains: DomainNode[]\n}\n\n/**\n * Domain node in taxonomy tree\n */\nexport interface DomainNode {\n id: string\n name: string\n strands: StrandNode[]\n}\n\n/**\n * Strand node in taxonomy tree\n */\nexport interface StrandNode {\n id: string\n name: string\n topics: TopicNode[]\n}\n\n/**\n * Topic node in taxonomy tree\n */\nexport interface TopicNode {\n id: string\n name: string\n concepts?: ConceptNode[]\n}\n\n/**\n * Concept node (Level 4)\n */\nexport interface ConceptNode {\n id: string\n name: string\n aliases?: string[]\n}\n\n/**\n * Question reference in topic index\n */\nexport interface TopicQuestionRef {\n questionId: string\n globalId: string\n courseId: string\n courseCode: string\n lessonNumber: number\n difficulty?: string\n type: string\n}\n\n/**\n * Topic index file structure\n */\nexport interface TopicIndex {\n topic: {\n domain: string\n strand: string\n topic: string\n }\n totalQuestions: number\n questions: TopicQuestionRef[]\n exportedAt: string\n}\n\n/**\n * Knowledge module filters\n */\nexport interface KnowledgeFilters {\n domain?: string\n strand?: string\n topic?: string\n difficulty?: string\n courseCode?: string\n limit?: number\n offset?: number\n}\n\n/**\n * Knowledge module configuration\n */\nexport interface KnowledgeConfig {\n cdnBase?: string\n cacheEnabled?: boolean\n /** Rate limit: max requests per second (default: 10) */\n rateLimit?: number\n /** Rate limit: burst capacity (default: 20) */\n rateLimitBurst?: number\n /** Enable debug logging to console */\n debug?: boolean\n /** Custom error handler for monitoring/analytics */\n onError?: (error: Error, context: string) => void\n}\n\n// ============================================================================\n// Debug Logger\n// ============================================================================\n\n/**\n * Create a debug logger that respects the debug config option\n */\nfunction createLogger(config: KnowledgeConfig) {\n return {\n debug(message: string, data?: unknown) {\n if (config.debug) {\n console.log(`[question-banks] ${message}`, data ?? '')\n }\n },\n warn(message: string) {\n if (config.debug) {\n console.warn(`[question-banks] ${message}`)\n }\n },\n error(error: Error, context: string) {\n if (config.debug) {\n console.error(`[question-banks] ${context}:`, error.message)\n }\n config.onError?.(error, context)\n },\n }\n}\n\n// ============================================================================\n// Rate Limiter (Token Bucket)\n// ============================================================================\n\n/**\n * Simple token bucket rate limiter\n */\nclass RateLimiter {\n private tokens: number\n private lastRefill: number\n private readonly maxTokens: number\n private readonly refillRate: number // tokens per ms\n\n constructor(requestsPerSecond: number, burstCapacity: number) {\n this.maxTokens = burstCapacity\n this.tokens = burstCapacity\n this.refillRate = requestsPerSecond / 1000\n this.lastRefill = Date.now()\n }\n\n /**\n * Attempt to consume a token, waiting if necessary\n */\n async acquire(): Promise<void> {\n this.refill()\n\n if (this.tokens >= 1) {\n this.tokens -= 1\n return\n }\n\n // Calculate wait time for next token\n const waitTime = Math.ceil((1 - this.tokens) / this.refillRate)\n await new Promise(resolve => setTimeout(resolve, waitTime))\n this.refill()\n this.tokens -= 1\n }\n\n private refill(): void {\n const now = Date.now()\n const elapsed = now - this.lastRefill\n this.tokens = Math.min(this.maxTokens, this.tokens + elapsed * this.refillRate)\n this.lastRefill = now\n }\n}\n\n// ============================================================================\n// Input Validators\n// ============================================================================\n\n/**\n * Validate topic path format (e.g., \"computer-science/algorithms/sorting\")\n * @param path - The topic path to validate\n * @returns true if valid, false otherwise\n */\nfunction isValidTopicPath(path: string): boolean {\n if (!path || typeof path !== 'string') return false\n // Must be alphanumeric with hyphens, separated by slashes, max 3 parts\n const pattern = /^[a-z0-9-]+\\/[a-z0-9-]+\\/[a-z0-9-]+$/\n return pattern.test(path) && path.length <= 100\n}\n\n/**\n * Validate domain ID format\n */\nfunction isValidDomainId(domain: string): boolean {\n if (!domain || typeof domain !== 'string') return false\n const pattern = /^[a-z0-9-]+$/\n return pattern.test(domain) && domain.length <= 50\n}\n\n// ============================================================================\n// Type Validators (Runtime Validation)\n// ============================================================================\n\n/**\n * Validate TopicIndex structure from CDN\n */\nfunction isValidTopicIndex(data: unknown): data is TopicIndex {\n if (!data || typeof data !== 'object') return false\n const obj = data as Record<string, unknown>\n return (\n typeof obj.topic === 'object' &&\n obj.topic !== null &&\n typeof (obj.topic as Record<string, unknown>).domain === 'string' &&\n Array.isArray(obj.questions) &&\n typeof obj.totalQuestions === 'number'\n )\n}\n\n/**\n * Validate TaxonomyTree structure from CDN\n */\nfunction isValidTaxonomyTree(data: unknown): data is TaxonomyTree {\n if (!data || typeof data !== 'object') return false\n const obj = data as Record<string, unknown>\n return typeof obj.version === 'string' && Array.isArray(obj.domains)\n}\n\n/**\n * Validate master knowledge bank structure from CDN\n */\nfunction isValidKnowledgeBank(data: unknown): data is { questions: unknown[] } {\n if (!data || typeof data !== 'object') return false\n const obj = data as Record<string, unknown>\n return Array.isArray(obj.questions)\n}\n\n// ============================================================================\n// Knowledge Module Implementation\n// ============================================================================\n\nconst DEFAULT_CDN_BASE = 'https://content-warehouse.vercel.app'\n\n/**\n * Create the knowledge module for v2.0 Knowledge Graph access\n */\nexport function createKnowledgeModule(config: KnowledgeConfig) {\n const cdnBase = config.cdnBase || DEFAULT_CDN_BASE\n const cache = new Map<string, unknown>()\n const rateLimiter = new RateLimiter(config.rateLimit ?? 10, config.rateLimitBurst ?? 20)\n const log = createLogger(config)\n\n log.debug('Knowledge module initialized', { cdnBase, cacheEnabled: config.cacheEnabled })\n\n /**\n * Fetch JSON from CDN with optional caching and type validation\n *\n * @param path - CDN path to fetch\n * @param validator - Optional runtime type validator\n * @throws Error if fetch fails or validation fails\n */\n async function fetchJson<T>(\n path: string,\n validator?: (data: unknown) => data is T\n ): Promise<T> {\n const url = `${cdnBase}${path}`\n\n if (config.cacheEnabled && cache.has(url)) {\n log.debug('Cache hit', path)\n return cache.get(url) as T\n }\n\n // Apply rate limiting before making request\n await rateLimiter.acquire()\n\n log.debug('Fetching', path)\n const startTime = Date.now()\n const response = await fetch(url)\n const elapsed = Date.now() - startTime\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch ${url}: ${response.status}`)\n log.error(error, `fetch ${path}`)\n throw error\n }\n\n log.debug(`Fetched in ${elapsed}ms`, path)\n\n let data: unknown\n try {\n data = await response.json()\n } catch {\n const error = new Error(`Invalid JSON response from ${url}`)\n log.error(error, `parse ${path}`)\n throw error\n }\n\n // Runtime type validation if validator provided\n if (validator && !validator(data)) {\n const error = new Error(`Invalid data structure from ${url}`)\n log.error(error, `validate ${path}`)\n throw error\n }\n\n if (config.cacheEnabled) {\n cache.set(url, data)\n log.debug('Cached', path)\n }\n\n return data as T\n }\n\n return {\n /**\n * Get questions by topic path\n *\n * @param topicPath - Path like \"computer-science/algorithms/sorting\"\n * @returns Array of question references\n *\n * @example\n * ```typescript\n * const questions = await sdk.knowledge.getByTopic('computer-science/algorithms/sorting')\n * console.log(questions.length) // Number of sorting questions\n * ```\n */\n async getByTopic(topicPath: string): Promise<TopicQuestionRef[]> {\n // Validate input\n if (!isValidTopicPath(topicPath)) {\n log.warn(`Invalid topic path: \"${topicPath}\"`)\n return [] // Invalid path returns empty array (same as \"not found\")\n }\n\n try {\n const index = await fetchJson<TopicIndex>(\n `/question-banks/v2.0/by-topic/${topicPath}.json`,\n isValidTopicIndex\n )\n log.debug(`getByTopic returned ${index.questions.length} questions`, topicPath)\n return index.questions\n } catch (error) {\n // Topic doesn't exist, not indexed yet, or invalid response\n log.debug(`Topic not found or error`, topicPath)\n return []\n }\n },\n\n /**\n * Get questions by domain\n *\n * @param domain - Domain like \"computer-science\" or \"mathematics\"\n * @returns Array of question references from all topics in domain\n */\n async getByDomain(domain: string): Promise<TopicQuestionRef[]> {\n // Validate input\n if (!isValidDomainId(domain)) {\n log.warn(`Invalid domain ID: \"${domain}\"`)\n return [] // Invalid domain returns empty array\n }\n\n // Load master knowledge bank and filter by domain\n const master = await fetchJson<{\n questions: Array<{\n questionId: string\n globalId: string\n courseId: string\n courseCode: string\n lessonNumber: number\n questionType: string\n metadata?: { difficulty?: string }\n topics?: Topic[]\n }>\n }>('/question-banks/v2.0/master/knowledge-bank.json')\n\n // Runtime validation\n if (!isValidKnowledgeBank(master)) {\n throw new Error('Invalid knowledge bank data structure')\n }\n\n return master.questions\n .filter(q => q.topics?.some(t => t.level1_domain === domain))\n .map(q => ({\n questionId: q.questionId,\n globalId: q.globalId,\n courseId: q.courseId,\n courseCode: q.courseCode,\n lessonNumber: q.lessonNumber,\n difficulty: q.metadata?.difficulty,\n type: q.questionType,\n }))\n },\n\n /**\n * Search questions with filters\n *\n * @param filters - Filter criteria\n * @returns Filtered question references\n */\n async search(filters: KnowledgeFilters): Promise<TopicQuestionRef[]> {\n const master = await fetchJson<{\n questions: Array<{\n questionId: string\n globalId: string\n courseId: string\n courseCode: string\n lessonNumber: number\n questionType: string\n metadata?: { difficulty?: string }\n topics?: Topic[]\n }>\n }>('/question-banks/v2.0/master/knowledge-bank.json')\n\n // Runtime validation\n if (!isValidKnowledgeBank(master)) {\n throw new Error('Invalid knowledge bank data structure')\n }\n\n let results = master.questions\n\n // Apply filters\n if (filters.domain) {\n results = results.filter(q =>\n q.topics?.some(t => t.level1_domain === filters.domain)\n )\n }\n if (filters.strand) {\n results = results.filter(q =>\n q.topics?.some(t => t.level2_strand === filters.strand)\n )\n }\n if (filters.topic) {\n results = results.filter(q =>\n q.topics?.some(t => t.level3_topic === filters.topic)\n )\n }\n if (filters.difficulty) {\n results = results.filter(q => q.metadata?.difficulty === filters.difficulty)\n }\n if (filters.courseCode) {\n results = results.filter(q => q.courseCode === filters.courseCode)\n }\n\n // Apply pagination\n const offset = filters.offset ?? 0\n const limit = filters.limit ?? 100\n results = results.slice(offset, offset + limit)\n\n return results.map(q => ({\n questionId: q.questionId,\n globalId: q.globalId,\n courseId: q.courseId,\n courseCode: q.courseCode,\n lessonNumber: q.lessonNumber,\n difficulty: q.metadata?.difficulty,\n type: q.questionType,\n }))\n },\n\n /**\n * Clear the internal cache\n */\n clearCache() {\n cache.clear()\n log.debug('Knowledge cache cleared')\n },\n }\n}\n\n// ============================================================================\n// Taxonomy Module Implementation\n// ============================================================================\n\n/**\n * Create the taxonomy module for browsing the Knowledge Graph structure\n */\nexport function createTaxonomyModule(config: KnowledgeConfig) {\n const cdnBase = config.cdnBase || DEFAULT_CDN_BASE\n const rateLimiter = new RateLimiter(config.rateLimit ?? 10, config.rateLimitBurst ?? 20)\n const log = createLogger(config)\n let cachedTaxonomy: TaxonomyTree | null = null\n\n log.debug('Taxonomy module initialized', { cdnBase })\n\n /**\n * Fetch the full taxonomy tree with validation\n */\n async function fetchTaxonomy(): Promise<TaxonomyTree> {\n if (cachedTaxonomy) {\n log.debug('Taxonomy cache hit')\n return cachedTaxonomy\n }\n\n // Apply rate limiting before making request\n await rateLimiter.acquire()\n\n log.debug('Fetching taxonomy')\n const startTime = Date.now()\n const response = await fetch(`${cdnBase}/question-banks/v2.0/taxonomy/topics.json`)\n const elapsed = Date.now() - startTime\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch taxonomy: ${response.status}`)\n log.error(error, 'fetchTaxonomy')\n throw error\n }\n\n log.debug(`Fetched taxonomy in ${elapsed}ms`)\n\n let data: unknown\n try {\n data = await response.json()\n } catch {\n const error = new Error('Invalid JSON response from taxonomy endpoint')\n log.error(error, 'parseTaxonomy')\n throw error\n }\n\n if (!isValidTaxonomyTree(data)) {\n const error = new Error('Invalid taxonomy data structure')\n log.error(error, 'validateTaxonomy')\n throw error\n }\n\n log.debug(`Taxonomy loaded: ${data.domains.length} domains`)\n cachedTaxonomy = data\n return cachedTaxonomy\n }\n\n return {\n /**\n * Get the full taxonomy tree\n *\n * @returns Complete 4-level taxonomy structure\n */\n async getTopics(): Promise<TaxonomyTree> {\n return fetchTaxonomy()\n },\n\n /**\n * Get all domains (Level 1)\n *\n * @returns Array of domain nodes\n */\n async getDomains(): Promise<DomainNode[]> {\n const taxonomy = await fetchTaxonomy()\n return taxonomy.domains\n },\n\n /**\n * Get strands for a domain (Level 2)\n *\n * @param domain - Domain ID like \"computer-science\"\n * @returns Array of strand nodes\n */\n async getStrands(domain: string): Promise<StrandNode[]> {\n // Validate input\n if (!isValidDomainId(domain)) {\n log.warn(`Invalid domain ID: \"${domain}\"`)\n return []\n }\n\n const taxonomy = await fetchTaxonomy()\n const domainNode = taxonomy.domains.find(d => d.id === domain)\n const strands = domainNode?.strands ?? []\n log.debug(`getStrands(${domain}): ${strands.length} strands`)\n return strands\n },\n\n /**\n * Get topics for a strand (Level 3)\n *\n * @param domain - Domain ID\n * @param strand - Strand ID like \"algorithms\"\n * @returns Array of topic nodes\n */\n async getTopicsForStrand(domain: string, strand: string): Promise<TopicNode[]> {\n // Validate inputs\n if (!isValidDomainId(domain) || !isValidDomainId(strand)) {\n log.warn(`Invalid domain or strand ID: \"${domain}/${strand}\"`)\n return []\n }\n\n const strands = await this.getStrands(domain)\n const strandNode = strands.find(s => s.id === strand)\n const topics = strandNode?.topics ?? []\n log.debug(`getTopicsForStrand(${domain}/${strand}): ${topics.length} topics`)\n return topics\n },\n\n /**\n * Get tag mappings (legacy tag → taxonomy concept)\n *\n * @returns Tag to topic mappings\n */\n async getTagMappings(): Promise<Record<string, Topic>> {\n // Apply rate limiting before making request\n await rateLimiter.acquire()\n\n log.debug('Fetching tag mappings')\n const startTime = Date.now()\n const response = await fetch(\n `${cdnBase}/question-banks/v2.0/taxonomy/tag-mappings.json`\n )\n const elapsed = Date.now() - startTime\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch tag mappings: ${response.status}`)\n log.error(error, 'fetchTagMappings')\n throw error\n }\n\n log.debug(`Fetched tag mappings in ${elapsed}ms`)\n\n let data: unknown\n try {\n data = await response.json()\n } catch {\n const error = new Error('Invalid JSON response from tag mappings endpoint')\n log.error(error, 'parseTagMappings')\n throw error\n }\n\n if (!data || typeof data !== 'object' || Array.isArray(data)) {\n const error = new Error('Invalid tag mappings data structure')\n log.error(error, 'validateTagMappings')\n throw error\n }\n\n const mappingCount = Object.keys(data).length\n log.debug(`Tag mappings loaded: ${mappingCount} mappings`)\n return data as Record<string, Topic>\n },\n\n /**\n * Clear the cached taxonomy\n */\n clearCache() {\n cachedTaxonomy = null\n log.debug('Taxonomy cache cleared')\n },\n }\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport type KnowledgeModule = ReturnType<typeof createKnowledgeModule>\nexport type TaxonomyModule = ReturnType<typeof createTaxonomyModule>\n","import { z } from 'zod'\n\n// ============================================================================\n// Malaysian Education Level Schema\n// ============================================================================\n\nexport const MalaysianEducationLevelSchema = z.enum([\n 'KSSR', // Primary (Year 1-6)\n 'KSSM', // Lower Secondary (Form 1-3)\n 'SPM', // SPM Mathematics (Form 4-5)\n 'SPM-AddMaths', // SPM Additional Mathematics (Form 4-5)\n 'STPM-T', // STPM Mathematics T (Science track)\n 'STPM-M', // STPM Mathematics M (Arts track)\n])\n\nexport type MalaysianEducationLevel = z.infer<typeof MalaysianEducationLevelSchema>\n\n// ============================================================================\n// Math Domain Schema (5 domains from DSKP)\n// ============================================================================\n\nexport const MathDomainSchema = z.enum([\n 'numbers-operations', // Nombor dan Operasi\n 'measurement-geometry', // Sukatan dan Geometri\n 'relationship-algebra', // Perkaitan dan Algebra\n 'statistics-probability', // Statistik dan Kebarangkalian\n 'discrete-mathematics', // Matematik Diskret (KSSM+ only)\n])\n\nexport type MathDomain = z.infer<typeof MathDomainSchema>\n\n// ============================================================================\n// Malaysian Curriculum Mapping Schema\n// ============================================================================\n\nexport const MalaysianCurriculumSchema = z.object({\n level: MalaysianEducationLevelSchema,\n year_form: z.number().int().min(1).max(6), // Year 1-6 or Form 1-5\n domain_id: MathDomainSchema,\n strand_id: z.string(),\n topic_id: z.string(),\n concept_id: z.string().optional(),\n dskp_standard: z.string().optional(), // DSKP reference code\n chapter: z.number().int().positive().optional(), // For SPM/STPM\n})\n\nexport type MalaysianCurriculum = z.infer<typeof MalaysianCurriculumSchema>\n\n// ============================================================================\n// Exam Alignment Schema\n// ============================================================================\n\nexport const ExamPaperSchema = z.enum(['1', '2'])\nexport const ExamSectionSchema = z.enum(['A', 'B', 'C'])\nexport const ClusterSourceSchema = z.enum(['SBP', 'MRSM', 'SMKA', 'Teknik'])\n\nexport const ExamAlignmentSchema = z.object({\n paper: ExamPaperSchema,\n section: ExamSectionSchema.optional(),\n historicalYears: z.array(z.number().int().min(2000).max(2030)).optional(),\n trialStates: z.array(z.string()).optional(), // Selangor, Johor, etc.\n clusterSource: ClusterSourceSchema.optional(),\n})\n\nexport type ExamAlignment = z.infer<typeof ExamAlignmentSchema>\n\n// ============================================================================\n// Bilingual Localization Schema\n// ============================================================================\n\nexport const LocalizedTextSchema = z.object({\n stem: z.string(),\n solution: z.string(),\n})\n\nexport const LocalizationSchema = z.object({\n bm: LocalizedTextSchema, // Bahasa Malaysia (required)\n en: LocalizedTextSchema, // English (required)\n zh: LocalizedTextSchema.optional(), // Chinese (UEC market, optional)\n})\n\nexport type Localization = z.infer<typeof LocalizationSchema>\n\n// ============================================================================\n// IRT Difficulty Schema\n// ============================================================================\n\nexport const DokLevelSchema = z.union([\n z.literal(1),\n z.literal(2),\n z.literal(3),\n z.literal(4),\n])\n\nexport const BloomLevelSchema = z.union([\n z.literal(1), // Remember\n z.literal(2), // Understand\n z.literal(3), // Apply\n z.literal(4), // Analyze\n z.literal(5), // Evaluate\n z.literal(6), // Create\n])\n\nexport const IrtDifficultySchema = z.object({\n irt_b: z.number().min(-3).max(3), // Difficulty logits\n irt_a: z.number().min(0.5).max(2.5), // Discrimination\n irt_c: z.number().min(0).max(0.25).optional(), // Guessing parameter\n dok_level: DokLevelSchema,\n bloom_level: BloomLevelSchema,\n estimated_minutes: z.number().positive(),\n})\n\nexport type IrtDifficulty = z.infer<typeof IrtDifficultySchema>\n\n// ============================================================================\n// Solution Step Schema\n// ============================================================================\n\nexport const SolutionStepSchema = z.object({\n step_number: z.number().int().positive(),\n description_en: z.string(),\n description_bm: z.string(),\n expression: z.string().optional(), // Math expression\n marks: z.number().int().positive().optional(), // Marks for this step\n})\n\nexport type SolutionStep = z.infer<typeof SolutionStepSchema>\n\n// ============================================================================\n// Full Malaysian Math Question Schema\n// ============================================================================\n\nexport const MalaysianMathQuestionSchema = z.object({\n // Identifiers\n id: z.string(),\n slug: z.string(),\n template_id: z.string().optional(),\n instance_seed: z.number().optional(),\n\n // Malaysian curriculum mapping\n curriculum: MalaysianCurriculumSchema,\n\n // Malaysian exam alignment\n examAlignment: ExamAlignmentSchema.optional(),\n\n // Difficulty calibration\n difficulty: IrtDifficultySchema,\n\n // Bilingual content\n localization: LocalizationSchema,\n\n // Solution structure\n solution: z.object({\n brief_answer: z.string(),\n steps: z.array(SolutionStepSchema),\n alternative_methods: z.array(z.string()).optional(),\n common_errors: z.array(z.string()).optional(),\n }),\n\n // Metadata\n tags: z.array(z.string()).optional(),\n version: z.string().default('1.0.0'),\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n})\n\nexport type MalaysianMathQuestion = z.infer<typeof MalaysianMathQuestionSchema>\n\n// ============================================================================\n// Search Query Schema\n// ============================================================================\n\nexport const MalaysianMathSearchQuerySchema = z.object({\n level: MalaysianEducationLevelSchema.optional(),\n form: z.number().int().min(1).max(5).optional(),\n year: z.number().int().min(1).max(6).optional(),\n domain: MathDomainSchema.optional(),\n strand: z.string().optional(),\n topic: z.string().optional(),\n chapter: z.number().int().positive().optional(),\n\n // Difficulty filters\n dok_level: DokLevelSchema.optional(),\n bloom_level: BloomLevelSchema.optional(),\n irt_b_min: z.number().optional(),\n irt_b_max: z.number().optional(),\n\n // Exam filters\n paper: ExamPaperSchema.optional(),\n section: ExamSectionSchema.optional(),\n\n // Pagination (optional with defaults applied at runtime)\n limit: z.number().int().positive().max(1000).optional(),\n offset: z.number().int().min(0).optional(),\n})\n\nexport type MalaysianMathSearchQuery = z.infer<typeof MalaysianMathSearchQuerySchema>\n\n// ============================================================================\n// Configuration Schema\n// ============================================================================\n\nexport const MalaysiaMathConfigSchema = z.object({\n cdnBase: z.string().url(),\n cacheEnabled: z.boolean().default(true),\n rateLimit: z.object({\n requestsPerSecond: z.number().positive().default(10),\n burstCapacity: z.number().positive().default(20),\n }).optional(),\n debug: z.boolean().default(false),\n onError: z.function().args(z.any()).returns(z.void()).optional(),\n})\n\nexport type MalaysiaMathConfig = z.infer<typeof MalaysiaMathConfigSchema>\n\n// ============================================================================\n// CDN Response Schemas\n// ============================================================================\n\nexport const CurriculumIndexResponseSchema = z.object({\n level: MalaysianEducationLevelSchema,\n total_questions: z.number().int().positive(),\n last_updated: z.string(),\n questions: z.array(MalaysianMathQuestionSchema),\n})\n\nexport type CurriculumIndexResponse = z.infer<typeof CurriculumIndexResponseSchema>\n\nexport const TaxonomyLevelSchema = z.object({\n id: z.string(),\n name_en: z.string(),\n name_bm: z.string(),\n description_en: z.string().optional(),\n description_bm: z.string().optional(),\n years: z.array(z.number()).optional(),\n forms: z.array(z.number()).optional(),\n semesters: z.array(z.number()).optional(),\n age_range: z.tuple([z.number(), z.number()]).optional(),\n question_target: z.number().int().positive(),\n})\n\nexport type TaxonomyLevel = z.infer<typeof TaxonomyLevelSchema>\n\nexport const TaxonomyDomainSchema = z.object({\n id: MathDomainSchema,\n name_en: z.string(),\n name_bm: z.string(),\n strands: z.array(z.string()),\n levels: z.array(MalaysianEducationLevelSchema).optional(),\n})\n\nexport type TaxonomyDomain = z.infer<typeof TaxonomyDomainSchema>\n\n// ============================================================================\n// Runtime Validators\n// ============================================================================\n\nexport function isValidQuestionList(data: unknown): data is MalaysianMathQuestion[] {\n return z.array(MalaysianMathQuestionSchema).safeParse(data).success\n}\n\nexport function isValidCurriculumIndex(data: unknown): data is CurriculumIndexResponse {\n return CurriculumIndexResponseSchema.safeParse(data).success\n}\n\nexport function isValidLevelId(id: unknown): id is MalaysianEducationLevel {\n return MalaysianEducationLevelSchema.safeParse(id).success\n}\n\nexport function isValidDomainId(id: unknown): id is MathDomain {\n return MathDomainSchema.safeParse(id).success\n}\n","/**\n * @telebort/question-banks - Malaysian Math Module\n *\n * Provides curriculum-aligned access to Malaysian mathematics questions\n * covering KSSR through STPM levels.\n *\n * @example\n * ```typescript\n * const sdk = createQuestionBanksSDK({ cdnBase: 'https://...' })\n *\n * // Get questions by education level\n * const addMaths = await sdk.malaysiaMath.getByLevel('SPM-AddMaths')\n *\n * // Get questions by curriculum mapping\n * const quadratics = await sdk.malaysiaMath.getByCurriculum({\n * level: 'SPM-AddMaths',\n * form: 4,\n * domain: 'relationship-algebra',\n * strand: 'quadratic-functions'\n * })\n *\n * // Get questions by exam alignment\n * const paper2C = await sdk.malaysiaMath.getByExam({\n * paper: '2',\n * section: 'C'\n * })\n * ```\n */\n\nimport {\n MalaysianEducationLevelSchema,\n MathDomainSchema,\n type MalaysianEducationLevel,\n type MathDomain,\n type MalaysianMathQuestion,\n type MalaysianMathSearchQuery,\n type MalaysiaMathConfig,\n type TaxonomyLevel,\n type TaxonomyDomain,\n} from './types'\n\nexport * from './types'\n\n// ============================================================================\n// Debug Logger\n// ============================================================================\n\nfunction createLogger(config: MalaysiaMathConfig) {\n return {\n debug(message: string, data?: unknown) {\n if (config.debug) {\n console.log(`[malaysia-math] ${message}`, data ?? '')\n }\n },\n warn(message: string) {\n if (config.debug) {\n console.warn(`[malaysia-math] ${message}`)\n }\n },\n error(error: Error, context: string) {\n if (config.debug) {\n console.error(`[malaysia-math] ${context}:`, error.message)\n }\n config.onError?.(error, context)\n },\n }\n}\n\n// ============================================================================\n// Rate Limiter (Token Bucket)\n// ============================================================================\n\nclass RateLimiter {\n private tokens: number\n private lastRefill: number\n private readonly maxTokens: number\n private readonly refillRate: number\n\n constructor(requestsPerSecond: number, burstCapacity: number) {\n this.maxTokens = burstCapacity\n this.tokens = burstCapacity\n this.refillRate = requestsPerSecond / 1000\n this.lastRefill = Date.now()\n }\n\n async acquire(): Promise<void> {\n this.refill()\n\n if (this.tokens >= 1) {\n this.tokens -= 1\n return\n }\n\n const waitTime = Math.ceil((1 - this.tokens) / this.refillRate)\n await new Promise(resolve => setTimeout(resolve, waitTime))\n this.refill()\n this.tokens -= 1\n }\n\n private refill(): void {\n const now = Date.now()\n const elapsed = now - this.lastRefill\n this.tokens = Math.min(this.maxTokens, this.tokens + elapsed * this.refillRate)\n this.lastRefill = now\n }\n}\n\n// ============================================================================\n// Input Validators\n// ============================================================================\n\nfunction isValidLevelId(id: unknown): id is MalaysianEducationLevel {\n return MalaysianEducationLevelSchema.safeParse(id).success\n}\n\nfunction isValidDomainId(id: unknown): id is MathDomain {\n return MathDomainSchema.safeParse(id).success\n}\n\nfunction isValidFormNumber(num: unknown): num is number {\n return typeof num === 'number' && Number.isInteger(num) && num >= 1 && num <= 6\n}\n\n// ============================================================================\n// Runtime Type Validators\n// ============================================================================\n\nfunction isValidLevelsList(data: unknown): data is { levels: TaxonomyLevel[] } {\n if (!data || typeof data !== 'object') return false\n const obj = data as Record<string, unknown>\n return Array.isArray(obj.levels)\n}\n\nfunction isValidDomainsList(data: unknown): data is { domains: TaxonomyDomain[] } {\n if (!data || typeof data !== 'object') return false\n const obj = data as Record<string, unknown>\n return Array.isArray(obj.domains)\n}\n\n// ============================================================================\n// Curriculum Query Interface\n// ============================================================================\n\nexport interface CurriculumQuery {\n level: MalaysianEducationLevel\n form?: number\n year?: number\n domain?: MathDomain\n strand?: string\n topic?: string\n chapter?: number\n}\n\nexport interface ExamQuery {\n level?: MalaysianEducationLevel\n paper: '1' | '2'\n section?: 'A' | 'B' | 'C'\n}\n\n// ============================================================================\n// Malaysian Math Module Implementation\n// ============================================================================\n\n/**\n * Create the Malaysian Math module for curriculum-aligned question access\n */\nexport function createMalaysiaMathModule(config: MalaysiaMathConfig) {\n const cdnBase = config.cdnBase\n const cache = new Map<string, unknown>()\n const rateLimiter = new RateLimiter(\n config.rateLimit?.requestsPerSecond ?? 10,\n config.rateLimit?.burstCapacity ?? 20\n )\n const log = createLogger(config)\n\n log.debug('Malaysian Math module initialized', { cdnBase, cacheEnabled: config.cacheEnabled })\n\n /**\n * Fetch JSON from CDN with caching and validation\n */\n async function fetchJson<T>(\n path: string,\n validator?: (data: unknown) => data is T\n ): Promise<T> {\n const url = `${cdnBase}${path}`\n\n if (config.cacheEnabled && cache.has(url)) {\n log.debug('Cache hit', path)\n return cache.get(url) as T\n }\n\n await rateLimiter.acquire()\n\n log.debug('Fetching', path)\n const startTime = Date.now()\n const response = await fetch(url)\n const elapsed = Date.now() - startTime\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch ${url}: ${response.status}`)\n log.error(error, `fetch ${path}`)\n throw error\n }\n\n log.debug(`Fetched in ${elapsed}ms`, path)\n\n let data: unknown\n try {\n data = await response.json()\n } catch {\n const error = new Error(`Invalid JSON response from ${url}`)\n log.error(error, `parse ${path}`)\n throw error\n }\n\n if (validator && !validator(data)) {\n const error = new Error(`Invalid data structure from ${url}`)\n log.error(error, `validate ${path}`)\n throw error\n }\n\n if (config.cacheEnabled) {\n cache.set(url, data)\n log.debug('Cached', path)\n }\n\n return data as T\n }\n\n return {\n /**\n * Get all questions for an education level\n *\n * @param level - Education level (KSSR, KSSM, SPM, SPM-AddMaths, STPM-T, STPM-M)\n * @returns Array of questions\n *\n * @example\n * ```typescript\n * const addMaths = await sdk.malaysiaMath.getByLevel('SPM-AddMaths')\n * console.log(addMaths.length) // ~18,000 questions\n * ```\n */\n async getByLevel(level: MalaysianEducationLevel): Promise<MalaysianMathQuestion[]> {\n if (!isValidLevelId(level)) {\n log.warn(`Invalid education level: \"${level}\"`)\n return []\n }\n\n try {\n const data = await fetchJson<{ questions: MalaysianMathQuestion[] }>(\n `/question-banks/v2.0/malaysia-math/levels/${level}.json`\n )\n log.debug(`getByLevel returned ${data.questions.length} questions`, level)\n return data.questions\n } catch (error) {\n log.debug(`Level not found or error`, level)\n return []\n }\n },\n\n /**\n * Get questions by curriculum mapping\n *\n * @param query - Curriculum query with level, form, domain, strand, topic\n * @returns Filtered questions\n *\n * @example\n * ```typescript\n * const quadratics = await sdk.malaysiaMath.getByCurriculum({\n * level: 'SPM-AddMaths',\n * form: 4,\n * domain: 'relationship-algebra',\n * strand: 'quadratic-functions'\n * })\n * ```\n */\n async getByCurriculum(query: CurriculumQuery): Promise<MalaysianMathQuestion[]> {\n if (!isValidLevelId(query.level)) {\n log.warn(`Invalid education level: \"${query.level}\"`)\n return []\n }\n\n // Build path based on query specificity\n let path = `/question-banks/v2.0/malaysia-math/by-curriculum/${query.level}`\n\n if (query.domain) {\n if (!isValidDomainId(query.domain)) {\n log.warn(`Invalid domain: \"${query.domain}\"`)\n return []\n }\n path += `/${query.domain}`\n }\n\n if (query.strand) {\n path += `/${query.strand}`\n }\n\n if (query.topic) {\n path += `/${query.topic}`\n }\n\n path += '.json'\n\n try {\n const data = await fetchJson<{ questions: MalaysianMathQuestion[] }>(path)\n\n // Apply additional client-side filters\n let questions = data.questions\n\n if (query.form !== undefined) {\n questions = questions.filter(q => q.curriculum.year_form === query.form)\n }\n\n if (query.year !== undefined) {\n questions = questions.filter(q => q.curriculum.year_form === query.year)\n }\n\n if (query.chapter !== undefined) {\n questions = questions.filter(q => q.curriculum.chapter === query.chapter)\n }\n\n log.debug(`getByCurriculum returned ${questions.length} questions`, query)\n return questions\n } catch (error) {\n log.debug('Curriculum query failed', query)\n return []\n }\n },\n\n /**\n * Get questions aligned to specific exam paper/section\n *\n * @param query - Exam query with paper and section\n * @returns Questions aligned to exam format\n *\n * @example\n * ```typescript\n * // Get SPM Add Maths Paper 2 Section C questions\n * const paper2C = await sdk.malaysiaMath.getByExam({\n * level: 'SPM-AddMaths',\n * paper: '2',\n * section: 'C'\n * })\n * ```\n */\n async getByExam(query: ExamQuery): Promise<MalaysianMathQuestion[]> {\n const level = query.level ?? 'SPM-AddMaths'\n\n if (!isValidLevelId(level)) {\n log.warn(`Invalid education level: \"${level}\"`)\n return []\n }\n\n let path = `/question-banks/v2.0/malaysia-math/by-exam/${level}/paper-${query.paper}`\n\n if (query.section) {\n path += `-section-${query.section.toLowerCase()}`\n }\n\n path += '.json'\n\n try {\n const data = await fetchJson<{ questions: MalaysianMathQuestion[] }>(path)\n log.debug(`getByExam returned ${data.questions.length} questions`, query)\n return data.questions\n } catch (error) {\n log.debug('Exam query failed', query)\n return []\n }\n },\n\n /**\n * Search questions with comprehensive filters\n *\n * @param filters - Search filters including difficulty, DOK, Bloom's level\n * @returns Paginated search results\n *\n * @example\n * ```typescript\n * const results = await sdk.malaysiaMath.search({\n * level: 'SPM-AddMaths',\n * form: 4,\n * domain: 'relationship-algebra',\n * dok_level: 2,\n * limit: 20\n * })\n * ```\n */\n async search(filters: MalaysianMathSearchQuery): Promise<{\n questions: MalaysianMathQuestion[]\n total: number\n hasMore: boolean\n }> {\n // Start with level-based or full dataset\n let questions: MalaysianMathQuestion[]\n\n if (filters.level) {\n questions = await this.getByLevel(filters.level)\n } else {\n // Load master dataset\n try {\n const data = await fetchJson<{ questions: MalaysianMathQuestion[] }>(\n '/question-banks/v2.0/malaysia-math/master/all-questions.json'\n )\n questions = data.questions\n } catch {\n questions = []\n }\n }\n\n // Apply filters\n if (filters.form !== undefined) {\n questions = questions.filter(q => q.curriculum.year_form === filters.form)\n }\n\n if (filters.year !== undefined) {\n questions = questions.filter(q => q.curriculum.year_form === filters.year)\n }\n\n if (filters.domain) {\n questions = questions.filter(q => q.curriculum.domain_id === filters.domain)\n }\n\n if (filters.strand) {\n questions = questions.filter(q => q.curriculum.strand_id === filters.strand)\n }\n\n if (filters.topic) {\n questions = questions.filter(q => q.curriculum.topic_id === filters.topic)\n }\n\n if (filters.chapter !== undefined) {\n questions = questions.filter(q => q.curriculum.chapter === filters.chapter)\n }\n\n if (filters.dok_level !== undefined) {\n questions = questions.filter(q => q.difficulty.dok_level === filters.dok_level)\n }\n\n if (filters.bloom_level !== undefined) {\n questions = questions.filter(q => q.difficulty.bloom_level === filters.bloom_level)\n }\n\n if (filters.irt_b_min !== undefined) {\n questions = questions.filter(q => q.difficulty.irt_b >= filters.irt_b_min!)\n }\n\n if (filters.irt_b_max !== undefined) {\n questions = questions.filter(q => q.difficulty.irt_b <= filters.irt_b_max!)\n }\n\n if (filters.paper) {\n questions = questions.filter(q => q.examAlignment?.paper === filters.paper)\n }\n\n if (filters.section) {\n questions = questions.filter(q => q.examAlignment?.section === filters.section)\n }\n\n // Pagination\n const total = questions.length\n const offset = filters.offset ?? 0\n const limit = filters.limit ?? 100\n const paginated = questions.slice(offset, offset + limit)\n\n log.debug(`search returned ${paginated.length}/${total} questions`, filters)\n\n return {\n questions: paginated,\n total,\n hasMore: offset + limit < total,\n }\n },\n\n /**\n * Get a random sample of questions\n *\n * @param count - Number of questions to return\n * @param filters - Optional filters to apply\n * @returns Random sample of questions\n */\n async getRandomQuestions(\n count: number,\n filters?: Partial<MalaysianMathSearchQuery>\n ): Promise<MalaysianMathQuestion[]> {\n const result = await this.search({ ...filters, limit: 1000 })\n\n // Fisher-Yates shuffle\n const shuffled = [...result.questions]\n for (let i = shuffled.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n const temp = shuffled[i]!\n shuffled[i] = shuffled[j]!\n shuffled[j] = temp\n }\n\n return shuffled.slice(0, count)\n },\n\n /**\n * Clear the internal cache\n */\n clearCache() {\n cache.clear()\n log.debug('Malaysian Math cache cleared')\n },\n }\n}\n\n// ============================================================================\n// Malaysian Math Taxonomy Module\n// ============================================================================\n\n/**\n * Create the Malaysian Math Taxonomy module for browsing curriculum structure\n */\nexport function createMalaysiaMathTaxonomyModule(config: MalaysiaMathConfig) {\n const cdnBase = config.cdnBase\n const rateLimiter = new RateLimiter(\n config.rateLimit?.requestsPerSecond ?? 10,\n config.rateLimit?.burstCapacity ?? 20\n )\n const log = createLogger(config)\n\n let cachedLevels: TaxonomyLevel[] | null = null\n let cachedDomains: TaxonomyDomain[] | null = null\n\n log.debug('Malaysian Math Taxonomy module initialized', { cdnBase })\n\n return {\n /**\n * Get all education levels\n *\n * @returns Array of education levels (KSSR, KSSM, SPM, SPM-AddMaths, STPM)\n */\n async getLevels(): Promise<TaxonomyLevel[]> {\n if (cachedLevels) {\n log.debug('Levels cache hit')\n return cachedLevels\n }\n\n await rateLimiter.acquire()\n\n log.debug('Fetching education levels')\n const response = await fetch(\n `${cdnBase}/question-banks/v2.0/malaysia-math/taxonomy/levels.json`\n )\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch levels: ${response.status}`)\n log.error(error, 'fetchLevels')\n throw error\n }\n\n const data = await response.json()\n\n if (!isValidLevelsList(data)) {\n const error = new Error('Invalid levels data structure')\n log.error(error, 'validateLevels')\n throw error\n }\n\n cachedLevels = data.levels\n log.debug(`Loaded ${cachedLevels.length} education levels`)\n return cachedLevels\n },\n\n /**\n * Get all math domains\n *\n * @param level - Optional level to filter domains\n * @returns Array of math domains\n */\n async getDomains(level?: MalaysianEducationLevel): Promise<TaxonomyDomain[]> {\n if (cachedDomains && !level) {\n log.debug('Domains cache hit')\n return cachedDomains\n }\n\n await rateLimiter.acquire()\n\n log.debug('Fetching math domains')\n const response = await fetch(\n `${cdnBase}/question-banks/v2.0/malaysia-math/taxonomy/domains.json`\n )\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch domains: ${response.status}`)\n log.error(error, 'fetchDomains')\n throw error\n }\n\n const data = await response.json()\n\n if (!isValidDomainsList(data)) {\n const error = new Error('Invalid domains data structure')\n log.error(error, 'validateDomains')\n throw error\n }\n\n cachedDomains = data.domains\n\n // Filter by level if specified\n if (level) {\n const filtered = cachedDomains.filter(d =>\n d.levels?.includes(level) ?? true\n )\n log.debug(`Filtered ${filtered.length} domains for level ${level}`)\n return filtered\n }\n\n log.debug(`Loaded ${cachedDomains.length} math domains`)\n return cachedDomains\n },\n\n /**\n * Get strands for a specific domain\n *\n * @param domainId - Domain ID (e.g., 'relationship-algebra')\n * @returns Array of strand IDs\n */\n async getStrands(domainId: MathDomain): Promise<string[]> {\n if (!isValidDomainId(domainId)) {\n log.warn(`Invalid domain ID: \"${domainId}\"`)\n return []\n }\n\n const domains = await this.getDomains()\n const domain = domains.find(d => d.id === domainId)\n\n if (!domain) {\n log.debug(`Domain not found: ${domainId}`)\n return []\n }\n\n log.debug(`getStrands(${domainId}): ${domain.strands.length} strands`)\n return domain.strands\n },\n\n /**\n * Get chapters for a specific level and form\n *\n * @param level - Education level (SPM, SPM-AddMaths, etc.)\n * @param form - Form number (1-5)\n * @returns Array of chapter objects\n */\n async getChapters(\n level: MalaysianEducationLevel,\n form: number\n ): Promise<Array<{ chapter: number; title_en: string; title_bm: string; domain: string }>> {\n if (!isValidLevelId(level)) {\n log.warn(`Invalid education level: \"${level}\"`)\n return []\n }\n\n if (!isValidFormNumber(form)) {\n log.warn(`Invalid form number: ${form}`)\n return []\n }\n\n await rateLimiter.acquire()\n\n try {\n const response = await fetch(\n `${cdnBase}/question-banks/v2.0/malaysia-math/taxonomy/${level.toLowerCase()}.json`\n )\n\n if (!response.ok) {\n log.debug(`Chapters not found for ${level}`)\n return []\n }\n\n const data = await response.json() as {\n chapters?: Array<{ chapter: number; form: number; title_en: string; title_bm: string; domain_id: string }>\n }\n\n // Filter by form\n const chapters = (data.chapters ?? [])\n .filter(c => c.form === form)\n .map(c => ({\n chapter: c.chapter,\n title_en: c.title_en,\n title_bm: c.title_bm,\n domain: c.domain_id,\n }))\n\n log.debug(`getChapters(${level}, ${form}): ${chapters.length} chapters`)\n return chapters\n } catch {\n log.debug(`Failed to fetch chapters for ${level}`)\n return []\n }\n },\n\n /**\n * Clear cached taxonomy data\n */\n clearCache() {\n cachedLevels = null\n cachedDomains = null\n log.debug('Malaysian Math Taxonomy cache cleared')\n },\n }\n}\n\n// ============================================================================\n// Module Type Exports\n// ============================================================================\n\nexport type MalaysiaMathModule = ReturnType<typeof createMalaysiaMathModule>\nexport type MalaysiaMathTaxonomyModule = ReturnType<typeof createMalaysiaMathTaxonomyModule>\n","/**\n * @telebort/question-banks - Question Banks SDK\n *\n * Three-tier access to question bank data and assessments:\n *\n * ## Free Tier - Schemas\n * ```typescript\n * import { QuestionSchema } from '@telebort/question-banks/schemas'\n * ```\n *\n * ## Standard Tier - Validation API\n * ```typescript\n * import { ValidationClient } from '@telebort/question-banks/validation'\n * ```\n *\n * ## Premium Tier - Full Access\n * ```typescript\n * import { PremiumClient } from '@telebort/question-banks/premium'\n * ```\n *\n * ## SDK Factory (for custom data sources)\n * ```typescript\n * import { createQuestionBanksSDK } from '@telebort/question-banks'\n *\n * const sdk = createQuestionBanksSDK({\n * dataSource: {\n * async loadCourses() {\n * return myQuestionData\n * }\n * }\n * })\n *\n * // v2.0: Knowledge Graph access\n * const sortingQuestions = await sdk.knowledge.getByTopic('computer-science/algorithms/sorting')\n * const taxonomy = await sdk.taxonomy.getTopics()\n * ```\n */\n\n// Re-export schemas (Free Tier)\nexport * from './schemas'\n\n// Re-export types\nexport * from './types'\n\n// Re-export core interfaces\nexport * from './core'\n\n// Re-export knowledge module types (v2.0)\nexport * from './knowledge'\n\n// Re-export Malaysian Math module (v2.0)\nexport * from './malaysia-math'\n\n// SDK Factory\nimport type { Course, Question, Lesson } from './schemas'\nimport type { ExitTicketsConfig, QuestionFilters, QuizCriteria, SearchOptions, Statistics } from './types'\nimport type { QueryResult } from './core/interfaces'\nimport {\n createKnowledgeModule,\n createTaxonomyModule,\n type KnowledgeModule,\n type TaxonomyModule,\n type KnowledgeConfig,\n} from './knowledge'\nimport {\n createMalaysiaMathModule,\n createMalaysiaMathTaxonomyModule,\n type MalaysiaMathModule,\n type MalaysiaMathTaxonomyModule,\n type MalaysiaMathConfig,\n} from './malaysia-math'\n\n/**\n * Question Banks SDK instance\n * @remarks Interface name kept as ExitTicketsSDK for v1.x backward compatibility\n * @see QuestionBanksSDK for the v2.0 alias\n */\nexport interface ExitTicketsSDK {\n /**\n * Data access methods\n */\n data: {\n getCourses(): Promise<Course[]>\n getCourse(courseId: string): Promise<Course | null>\n getLesson(courseId: string, lessonNumber: number): Promise<Lesson | null>\n getQuestion(questionId: string): Promise<Question | null>\n getAllQuestions(): Promise<Question[]>\n }\n\n /**\n * Query methods\n */\n query: {\n filterQuestions(filters: QuestionFilters): Promise<QueryResult<Question>>\n getRandomQuestions(count: number, filters?: QuestionFilters): Promise<Question[]>\n }\n\n /**\n * Quiz generation\n */\n quiz: {\n generateQuiz(criteria: QuizCriteria): Promise<{ questions: Question[]; metadata: Record<string, unknown> }>\n getLessonQuiz(courseId: string, lessonNumber: number): Promise<Question[]>\n }\n\n /**\n * Search\n */\n search: {\n search(options: SearchOptions): Promise<QueryResult<Question & { relevanceScore: number }>>\n searchByTags(tags: string[], matchAll?: boolean): Promise<Question[]>\n }\n\n /**\n * Analytics\n */\n analytics: {\n getStatistics(): Promise<Statistics>\n getCourseStatistics(courseId: string): Promise<Statistics & { courseId: string }>\n }\n\n /**\n * Answer validation (requires question data loaded)\n */\n validate: {\n checkAnswer(\n questionId: string,\n answer: string,\n mode: 'formative' | 'summative'\n ): Promise<{\n isCorrect: boolean\n feedback?: { short: string; detailed?: string; socraticHint?: string }\n misconceptionId?: string | null\n correctAnswer?: string\n }>\n }\n\n /**\n * Knowledge Graph access (v2.0)\n * Topic-based question retrieval\n */\n knowledge: KnowledgeModule\n\n /**\n * Taxonomy tree access (v2.0)\n * Browse the 4-level topic hierarchy\n */\n taxonomy: TaxonomyModule\n\n /**\n * Malaysian Mathematics curriculum access (v2.0)\n * KSSR through STPM curriculum-aligned questions\n */\n malaysiaMath: MalaysiaMathModule\n\n /**\n * Malaysian Mathematics taxonomy (v2.0)\n * Browse education levels, domains, and chapters\n */\n malaysiaMathTaxonomy: MalaysiaMathTaxonomyModule\n}\n\n/**\n * v2.0 SDK type alias for cleaner naming\n */\nexport type QuestionBanksSDK = ExitTicketsSDK\n\n/**\n * Create a Question Banks SDK instance\n *\n * @param config - SDK configuration with data source\n * @returns SDK instance with all services\n * @remarks Function name kept as createExitTicketsSDK for v1.x backward compatibility\n *\n * @example\n * ```typescript\n * // Using static JSON import\n * import coursesData from './data/courses.json'\n *\n * const sdk = createExitTicketsSDK({\n * dataSource: {\n * async loadCourses() {\n * return coursesData\n * }\n * }\n * })\n *\n * const questions = await sdk.query.filterQuestions({ courseId: 'ai-1' })\n * ```\n */\nexport function createExitTicketsSDK(config: ExitTicketsConfig): ExitTicketsSDK {\n // Internal state\n let courses: Course[] | null = null\n const questionsById = new Map<string, Question>()\n const questionsByGlobalId = new Map<string, string>()\n // Note: config.passingThreshold is available for future quiz scoring features\n\n // Input validators\n function isValidCourseId(id: unknown): id is string {\n return typeof id === 'string' && id.length > 0 && id.length <= 50 && /^[a-z0-9-]+$/i.test(id)\n }\n\n function isValidQuestionId(id: unknown): id is string {\n return typeof id === 'string' && id.length > 0 && id.length <= 100\n }\n\n function isValidLessonNumber(num: unknown): num is number {\n return typeof num === 'number' && Number.isInteger(num) && num >= 1 && num <= 100\n }\n\n // Helper: Ensure data is loaded\n async function ensureLoaded(): Promise<Course[]> {\n if (courses === null) {\n courses = await config.dataSource.loadCourses()\n\n // Build indexes\n for (const course of courses) {\n for (const lesson of course.lessons) {\n for (const question of lesson.questions) {\n questionsById.set(question.questionId, question)\n questionsByGlobalId.set(question.globalId, question.questionId)\n }\n }\n }\n }\n return courses\n }\n\n // Data access methods\n const data: ExitTicketsSDK['data'] = {\n async getCourses() {\n return ensureLoaded()\n },\n\n async getCourse(courseId) {\n if (!isValidCourseId(courseId)) return null\n const all = await ensureLoaded()\n return all.find(c => c.courseId === courseId) ?? null\n },\n\n async getLesson(courseId, lessonNumber) {\n if (!isValidCourseId(courseId) || !isValidLessonNumber(lessonNumber)) return null\n const course = await data.getCourse(courseId)\n return course?.lessons.find(l => l.lessonNumber === lessonNumber) ?? null\n },\n\n async getQuestion(questionId) {\n if (!isValidQuestionId(questionId)) return null\n await ensureLoaded()\n return questionsById.get(questionId) ?? null\n },\n\n async getAllQuestions() {\n await ensureLoaded()\n return Array.from(questionsById.values())\n },\n }\n\n // Query methods\n const query: ExitTicketsSDK['query'] = {\n async filterQuestions(filters) {\n const all = await data.getAllQuestions()\n let filtered = all\n\n if (filters.courseId) {\n filtered = filtered.filter(q => q.questionId.startsWith(filters.courseId!))\n }\n if (filters.lessonNumber) {\n filtered = filtered.filter(q => q.questionId.includes(`-l${filters.lessonNumber}-`))\n }\n if (filters.questionType) {\n filtered = filtered.filter(q => q.questionType === filters.questionType)\n }\n if (filters.difficulty) {\n filtered = filtered.filter(q => q.metadata.difficulty === filters.difficulty)\n }\n if (filters.hasCodeBlock !== undefined) {\n filtered = filtered.filter(q => q.hasCodeBlock === filters.hasCodeBlock)\n }\n if (filters.tags?.length) {\n filtered = filtered.filter(q =>\n filters.tags!.some(tag => q.metadata.tags.includes(tag))\n )\n }\n\n const total = filtered.length\n const offset = filters.offset ?? 0\n const limit = filters.limit ?? 20\n const paginated = filtered.slice(offset, offset + limit)\n\n return {\n data: paginated,\n total,\n limit,\n offset,\n hasMore: offset + limit < total,\n }\n },\n\n async getRandomQuestions(count, filters) {\n const result = await query.filterQuestions({ ...filters, limit: 1000 })\n // Fisher-Yates shuffle for unbiased randomization\n const shuffled = [...result.data]\n for (let i = shuffled.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n // Non-null assertions are safe: both i and j are valid indices within loop bounds\n const temp = shuffled[i]!\n shuffled[i] = shuffled[j]!\n shuffled[j] = temp\n }\n return shuffled.slice(0, count)\n },\n }\n\n // Quiz generation\n const quiz: ExitTicketsSDK['quiz'] = {\n async generateQuiz(criteria) {\n const questions = await query.getRandomQuestions(criteria.questionCount, {\n courseId: criteria.courseIds?.[0],\n difficulty: criteria.difficulty,\n questionType: criteria.questionTypes?.[0],\n hasCodeBlock: criteria.includeCodeBlocks,\n })\n\n return {\n questions,\n metadata: {\n distribution: questions.reduce((acc, q) => {\n acc[q.questionType] = (acc[q.questionType] ?? 0) + 1\n return acc\n }, {} as Record<string, number>),\n timestamp: new Date().toISOString(),\n },\n }\n },\n\n async getLessonQuiz(courseId, lessonNumber) {\n const lesson = await data.getLesson(courseId, lessonNumber)\n return lesson?.questions ?? []\n },\n }\n\n // Search\n const search: ExitTicketsSDK['search'] = {\n async search(options) {\n const all = await data.getAllQuestions()\n const query = options.query.toLowerCase()\n\n const scored = all\n .map(q => {\n let score = 0\n if (q.prompt.toLowerCase().includes(query)) score += 3\n if (q.options.some(o => o.text.toLowerCase().includes(query))) score += 1\n return { ...q, relevanceScore: score }\n })\n .filter(q => q.relevanceScore > 0)\n .sort((a, b) => b.relevanceScore - a.relevanceScore)\n\n const offset = options.offset ?? 0\n const limit = options.limit ?? 20\n\n return {\n data: scored.slice(offset, offset + limit),\n total: scored.length,\n limit,\n offset,\n hasMore: offset + limit < scored.length,\n }\n },\n\n async searchByTags(tags, matchAll = false) {\n const all = await data.getAllQuestions()\n return all.filter(q => {\n if (matchAll) {\n return tags.every(tag => q.metadata.tags.includes(tag))\n }\n return tags.some(tag => q.metadata.tags.includes(tag))\n })\n },\n }\n\n // Analytics\n const analytics: ExitTicketsSDK['analytics'] = {\n async getStatistics() {\n const all = await ensureLoaded()\n const questions = await data.getAllQuestions()\n\n const stats: Statistics = {\n totalCourses: all.length,\n totalLessons: all.reduce((sum, c) => sum + c.lessons.length, 0),\n totalQuestions: questions.length,\n byDifficulty: {},\n byQuestionType: {},\n byBloomsTaxonomy: {},\n withCodeBlocks: 0,\n withoutCodeBlocks: 0,\n }\n\n for (const q of questions) {\n stats.byDifficulty[q.metadata.difficulty] = (stats.byDifficulty[q.metadata.difficulty] ?? 0) + 1\n stats.byQuestionType[q.questionType] = (stats.byQuestionType[q.questionType] ?? 0) + 1\n stats.byBloomsTaxonomy[q.metadata.bloomsTaxonomy] = (stats.byBloomsTaxonomy[q.metadata.bloomsTaxonomy] ?? 0) + 1\n if (q.hasCodeBlock) stats.withCodeBlocks++\n else stats.withoutCodeBlocks++\n }\n\n return stats\n },\n\n async getCourseStatistics(courseId) {\n const course = await data.getCourse(courseId)\n if (!course) throw new Error(`Course not found: ${courseId}`)\n\n const questions = course.lessons.flatMap(l => l.questions)\n\n const stats = {\n courseId,\n totalCourses: 1,\n totalLessons: course.lessons.length,\n totalQuestions: questions.length,\n byDifficulty: {} as Record<string, number>,\n byQuestionType: {} as Record<string, number>,\n byBloomsTaxonomy: {} as Record<string, number>,\n withCodeBlocks: 0,\n withoutCodeBlocks: 0,\n }\n\n for (const q of questions) {\n stats.byDifficulty[q.metadata.difficulty] = (stats.byDifficulty[q.metadata.difficulty] ?? 0) + 1\n stats.byQuestionType[q.questionType] = (stats.byQuestionType[q.questionType] ?? 0) + 1\n stats.byBloomsTaxonomy[q.metadata.bloomsTaxonomy] = (stats.byBloomsTaxonomy[q.metadata.bloomsTaxonomy] ?? 0) + 1\n if (q.hasCodeBlock) stats.withCodeBlocks++\n else stats.withoutCodeBlocks++\n }\n\n return stats\n },\n }\n\n // Validation\n const validate: ExitTicketsSDK['validate'] = {\n async checkAnswer(questionId, answer, mode) {\n const question = await data.getQuestion(questionId)\n if (!question) throw new Error(`Question not found: ${questionId}`)\n\n const selectedOption = question.options.find(o => o.key === answer)\n if (!selectedOption) throw new Error(`Invalid answer: ${answer}`)\n\n const isCorrect = selectedOption.isCorrect\n\n return {\n isCorrect,\n feedback: selectedOption.feedback,\n misconceptionId: !isCorrect ? selectedOption.misconceptionId : null,\n correctAnswer: mode === 'formative' ? question.correctAnswer : undefined,\n }\n },\n }\n\n // v2.0: Knowledge Graph modules\n const knowledgeConfig: KnowledgeConfig = {\n cdnBase: 'https://content-warehouse.vercel.app',\n cacheEnabled: true,\n }\n\n const knowledge = createKnowledgeModule(knowledgeConfig)\n const taxonomy = createTaxonomyModule(knowledgeConfig)\n\n // v2.0: Malaysian Math modules\n const malaysiaMathConfig: MalaysiaMathConfig = {\n cdnBase: 'https://content-warehouse.vercel.app',\n cacheEnabled: true,\n debug: false,\n }\n\n const malaysiaMath = createMalaysiaMathModule(malaysiaMathConfig)\n const malaysiaMathTaxonomy = createMalaysiaMathTaxonomyModule(malaysiaMathConfig)\n\n return {\n data,\n query,\n quiz,\n search,\n analytics,\n validate,\n knowledge,\n taxonomy,\n malaysiaMath,\n malaysiaMathTaxonomy,\n }\n}\n\n/**\n * Create a Question Banks SDK instance (v2.0 naming)\n *\n * @param config - SDK configuration with data source\n * @returns SDK instance with all services including Knowledge Graph\n *\n * @example\n * ```typescript\n * const sdk = createQuestionBanksSDK({\n * dataSource: {\n * async loadCourses() {\n * return myCoursesData\n * }\n * }\n * })\n *\n * // v1.x: Course-based access\n * const cs1 = await sdk.data.getCourse('CS1')\n *\n * // v2.0: Knowledge Graph access\n * const sorting = await sdk.knowledge.getByTopic('computer-science/algorithms/sorting')\n * const tree = await sdk.taxonomy.getTopics()\n * ```\n */\nexport const createQuestionBanksSDK = createExitTicketsSDK\n","import { readdir, readFile } from 'fs/promises'\nimport { join, resolve } from 'path'\nimport { createExitTicketsSDK, type ExitTicketsSDK } from '../../index'\nimport type { Course } from '../../schemas'\n\nexport interface LoadSDKOptions {\n dataDir?: string\n}\n\n// Cache SDK instance per data directory\nconst sdkCache = new Map<string, ExitTicketsSDK>()\n\n/**\n * Detect the exports directory containing course JSON files\n */\nexport async function detectDataDir(): Promise<string> {\n // Common locations to check\n const possiblePaths = [\n // Relative to SDK\n '../question-banks-data/data/courses',\n // Relative to current working directory\n './data/courses',\n '../data/courses',\n // Absolute common locations\n join(process.cwd(), 'data', 'courses'),\n ]\n\n for (const path of possiblePaths) {\n try {\n const resolved = resolve(path)\n const files = await readdir(resolved)\n const jsonFiles = files.filter(f => f.endsWith('.json'))\n if (jsonFiles.length > 0) {\n return resolved\n }\n } catch {\n // Directory doesn't exist or not readable, continue\n }\n }\n\n throw new Error(\n 'Could not find data directory. Use --data-dir to specify the path to course JSON files.'\n )\n}\n\n/**\n * Load all course JSON files from a directory\n */\nexport async function loadCoursesFromDir(dir: string): Promise<Course[]> {\n const files = await readdir(dir)\n const jsonFiles = files.filter(f => f.endsWith('.json'))\n\n if (jsonFiles.length === 0) {\n throw new Error(`No JSON files found in ${dir}`)\n }\n\n const courses: Course[] = []\n\n for (const file of jsonFiles) {\n try {\n const content = await readFile(join(dir, file), 'utf-8')\n const data = JSON.parse(content)\n courses.push(data)\n } catch (error) {\n // Skip invalid JSON files\n console.warn(`Warning: Could not parse ${file}`)\n }\n }\n\n return courses\n}\n\n/**\n * Load SDK instance with courses from data directory\n */\nexport async function loadSDK(options?: LoadSDKOptions): Promise<ExitTicketsSDK> {\n const dataDir = options?.dataDir || await detectDataDir()\n const cacheKey = resolve(dataDir)\n\n // Return cached instance if available\n if (sdkCache.has(cacheKey)) {\n return sdkCache.get(cacheKey)!\n }\n\n const sdk = createExitTicketsSDK({\n dataSource: {\n async loadCourses() {\n return loadCoursesFromDir(dataDir)\n },\n },\n })\n\n sdkCache.set(cacheKey, sdk)\n return sdk\n}\n\n/**\n * Clear SDK cache (useful for testing)\n */\nexport function clearSDKCache(): void {\n sdkCache.clear()\n}\n","import { loadSDK, detectDataDir } from '../utils/sdk-loader'\nimport { formatStats, red } from '../utils/formatters'\nimport { EXIT_CODES } from '../utils/error-handler'\n\nexport interface StatsOptions {\n course?: string\n json?: boolean\n dataDir?: string\n}\n\n/**\n * Main stats command handler\n */\nexport async function statsCommand(options: StatsOptions): Promise<void> {\n try {\n const dataDir = options.dataDir || await detectDataDir()\n const sdk = await loadSDK({ dataDir })\n\n if (options.course) {\n // Course-specific statistics\n try {\n const stats = await sdk.analytics.getCourseStatistics(options.course)\n\n if (options.json) {\n console.log(JSON.stringify(stats, null, 2))\n } else {\n console.log(formatStats(stats, `Course: ${options.course}`))\n }\n } catch (error) {\n console.error(`${red('Error:')} Course not found: ${options.course}`)\n console.error('Use --data-dir to specify the path to course files.')\n process.exit(EXIT_CODES.USAGE_ERROR)\n }\n } else {\n // Global statistics\n const stats = await sdk.analytics.getStatistics()\n\n if (options.json) {\n console.log(JSON.stringify(stats, null, 2))\n } else {\n console.log(formatStats(stats, 'Question Banks Statistics'))\n }\n }\n\n process.exit(EXIT_CODES.SUCCESS)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error(`${red('Error:')} ${message}`)\n process.exit(EXIT_CODES.FATAL_ERROR)\n }\n}\n","import { loadSDK, detectDataDir } from '../utils/sdk-loader'\nimport { formatQuestion, cyan, bold, red, green } from '../utils/formatters'\nimport { EXIT_CODES } from '../utils/error-handler'\nimport type { Difficulty, QuestionType } from '../../schemas'\n\nexport interface QuizOptions {\n course?: string\n count: number\n difficulty?: string\n type?: string\n json?: boolean\n showAnswers?: boolean\n dataDir?: string\n}\n\n/**\n * Main quiz command handler\n */\nexport async function quizCommand(options: QuizOptions): Promise<void> {\n try {\n const dataDir = options.dataDir || await detectDataDir()\n const sdk = await loadSDK({ dataDir })\n\n // Generate quiz using SDK\n const quiz = await sdk.quiz.generateQuiz({\n questionCount: options.count,\n courseIds: options.course ? [options.course] : undefined,\n difficulty: options.difficulty as Difficulty | undefined,\n questionTypes: options.type ? [options.type as QuestionType] : undefined,\n })\n\n if (quiz.questions.length === 0) {\n console.error(`${red('Error:')} No questions found matching criteria.`)\n if (options.course) {\n console.error(`Check if course \"${options.course}\" exists.`)\n }\n process.exit(EXIT_CODES.USAGE_ERROR)\n }\n\n if (options.json) {\n // Output as JSON\n const output = {\n questions: options.showAnswers\n ? quiz.questions\n : quiz.questions.map(q => ({\n ...q,\n correctAnswer: undefined,\n correctAnswerText: undefined,\n options: q.options.map(o => ({\n key: o.key,\n text: o.text,\n })),\n })),\n metadata: quiz.metadata,\n }\n console.log(JSON.stringify(output, null, 2))\n } else {\n // Pretty print for terminal\n const title = options.course\n ? `Sample Quiz (${quiz.questions.length} questions from ${options.course})`\n : `Sample Quiz (${quiz.questions.length} questions)`\n\n console.log(`\\n${cyan(bold(title))}\\n`)\n\n for (let i = 0; i < quiz.questions.length; i++) {\n const q = quiz.questions[i]\n if (!q) continue // Type guard for TypeScript\n console.log(formatQuestion(q, i))\n\n if (options.showAnswers) {\n console.log(` ${green('Answer:')} ${q.correctAnswer}) ${q.correctAnswerText}\\n`)\n }\n }\n\n // Show distribution\n console.log(`\\n${bold('Distribution:')}`)\n for (const [type, count] of Object.entries(quiz.metadata.distribution as Record<string, number>)) {\n console.log(` ${type}: ${count}`)\n }\n console.log()\n }\n\n process.exit(EXIT_CODES.SUCCESS)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error(`${red('Error:')} ${message}`)\n process.exit(EXIT_CODES.FATAL_ERROR)\n }\n}\n","#!/usr/bin/env node\n/**\n * Question Banks CLI\n *\n * Command-line tools for validating, analyzing, and generating question bank quizzes.\n *\n * Usage:\n * question-banks validate <file|dir> Validate course JSON files\n * question-banks stats Show statistics\n * question-banks quiz Generate a sample quiz\n */\n\nimport { Command } from 'commander'\nimport { validateCommand } from './commands/validate'\nimport { statsCommand } from './commands/stats'\nimport { quizCommand } from './commands/quiz'\nimport { setupErrorHandlers } from './utils/error-handler'\n\n// Setup global error handlers\nsetupErrorHandlers()\n\n// Create CLI program\nconst program = new Command()\n\nprogram\n .name('question-banks')\n .description('CLI tools for Question Banks SDK')\n .version('2.1.1')\n\n// Validate command\nprogram\n .command('validate <path>')\n .description('Validate course JSON files against schemas')\n .option('-v, --verbose', 'Show all validation errors')\n .action(async (path: string, options) => {\n await validateCommand(path, options)\n })\n\n// Stats command\nprogram\n .command('stats')\n .description('Show question bank statistics')\n .option('-c, --course <id>', 'Show statistics for a specific course')\n .option('--json', 'Output as JSON')\n .option('-d, --data-dir <path>', 'Path to course data directory')\n .action(async (options) => {\n await statsCommand(options)\n })\n\n// Quiz command\nprogram\n .command('quiz')\n .description('Generate a sample quiz')\n .option('-c, --course <id>', 'Filter by course ID')\n .option('-n, --count <number>', 'Number of questions', '5')\n .option('--difficulty <level>', 'Filter by difficulty (easy, medium, hard, challenge)')\n .option('--type <type>', 'Filter by question type')\n .option('--json', 'Output as JSON')\n .option('-a, --show-answers', 'Show correct answers')\n .option('-d, --data-dir <path>', 'Path to course data directory')\n .action(async (options) => {\n await quizCommand({\n ...options,\n count: parseInt(options.count, 10),\n })\n })\n\n// Export for programmatic use\nexport function createCLI(): Command {\n return program\n}\n\n// Run CLI (called by bin/question-banks.js shim)\nexport async function run(argv?: string[]): Promise<void> {\n await program.parseAsync(argv ?? process.argv)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/schemas/question.ts","../../src/schemas/course.ts","../../src/schemas/assessment.ts","../../src/schemas/certification.ts","../../src/cli/utils/formatters.ts","../../src/cli/utils/error-handler.ts","../../src/cli/commands/validate.ts","../../src/knowledge/index.ts","../../src/malaysia-math/types.ts","../../src/malaysia-math/index.ts","../../src/guessability/types.ts","../../node_modules/compromise/src/API/world.js","../../node_modules/compromise/src/API/methods/compute.js","../../node_modules/compromise/src/API/methods/loops.js","../../node_modules/compromise/src/API/methods/utils.js","../../node_modules/compromise/src/API/methods/index.js","../../node_modules/compromise/src/API/View.js","../../node_modules/compromise/src/_version.js","../../node_modules/compromise/src/API/extend.js","../../node_modules/compromise/src/API/_lib.js","../../node_modules/compromise/src/API/inputs.js","../../node_modules/compromise/src/nlp.js","../../node_modules/compromise/src/1-one/cache/methods/cacheDoc.js","../../node_modules/compromise/src/1-one/cache/methods/index.js","../../node_modules/compromise/src/1-one/cache/api.js","../../node_modules/compromise/src/1-one/cache/compute.js","../../node_modules/compromise/src/1-one/cache/plugin.js","../../node_modules/compromise/src/1-one/change/api/case.js","../../node_modules/compromise/src/1-one/change/api/lib/insert.js","../../node_modules/compromise/src/1-one/change/compute/uuid.js","../../node_modules/compromise/src/1-one/change/api/insert.js","../../node_modules/compromise/src/1-one/change/api/replace.js","../../node_modules/compromise/src/1-one/change/api/lib/remove.js","../../node_modules/compromise/src/1-one/change/api/remove.js","../../node_modules/compromise/src/1-one/change/api/whitespace.js","../../node_modules/compromise/src/1-one/change/api/lib/_sort.js","../../node_modules/compromise/src/1-one/change/api/sort.js","../../node_modules/compromise/src/1-one/change/api/concat.js","../../node_modules/compromise/src/1-one/change/api/harden.js","../../node_modules/compromise/src/1-one/change/api/index.js","../../node_modules/compromise/src/1-one/change/compute/index.js","../../node_modules/compromise/src/1-one/change/plugin.js","../../node_modules/compromise/src/1-one/contraction-one/model/contractions.js","../../node_modules/compromise/src/1-one/contraction-one/model/number-suffix.js","../../node_modules/compromise/src/1-one/contraction-one/model/index.js","../../node_modules/compromise/src/1-one/contraction-one/compute/contractions/_splice.js","../../node_modules/compromise/src/1-one/contraction-one/compute/contractions/apostrophe-d.js","../../node_modules/compromise/src/1-one/contraction-one/compute/contractions/apostrophe-t.js","../../node_modules/compromise/src/1-one/contraction-one/compute/contractions/french.js","../../node_modules/compromise/src/1-one/contraction-one/compute/contractions/number-range.js","../../node_modules/compromise/src/1-one/contraction-one/compute/contractions/number-unit.js","../../node_modules/compromise/src/1-one/contraction-one/compute/contractions/index.js","../../node_modules/compromise/src/1-one/contraction-one/compute/index.js","../../node_modules/compromise/src/1-one/contraction-one/plugin.js","../../node_modules/compromise/src/1-one/freeze/compute.js","../../node_modules/compromise/src/1-one/freeze/debug.js","../../node_modules/compromise/src/1-one/freeze/plugin.js","../../node_modules/compromise/src/1-one/lexicon/compute/multi-word.js","../../node_modules/compromise/src/1-one/lexicon/compute/single-word.js","../../node_modules/compromise/src/1-one/lexicon/compute/index.js","../../node_modules/compromise/src/1-one/lexicon/methods/expand.js","../../node_modules/compromise/src/1-one/lexicon/methods/index.js","../../node_modules/compromise/src/1-one/lexicon/lib.js","../../node_modules/compromise/src/1-one/lexicon/plugin.js","../../node_modules/compromise/src/1-one/lookup/api/buildTrie/index.js","../../node_modules/compromise/src/1-one/lookup/api/scan.js","../../node_modules/compromise/src/1-one/lookup/api/index.js","../../node_modules/compromise/src/1-one/lookup/api/buildTrie/compress.js","../../node_modules/compromise/src/1-one/lookup/plugin.js","../../node_modules/compromise/src/1-one/match/api/_lib.js","../../node_modules/compromise/src/1-one/match/api/match.js","../../node_modules/compromise/src/1-one/match/api/lookaround.js","../../node_modules/compromise/src/1-one/match/api/split.js","../../node_modules/compromise/src/1-one/match/api/join.js","../../node_modules/compromise/src/1-one/match/api/index.js","../../node_modules/compromise/src/1-one/match/methods/parseMatch/01-parseBlocks.js","../../node_modules/compromise/src/1-one/match/methods/parseMatch/02-parseToken.js","../../node_modules/compromise/src/1-one/match/methods/parseMatch/03-splitHyphens.js","../../node_modules/compromise/src/1-one/match/methods/parseMatch/04-inflect-root.js","../../node_modules/compromise/src/1-one/match/methods/parseMatch/05-postProcess.js","../../node_modules/compromise/src/1-one/match/methods/parseMatch/index.js","../../node_modules/compromise/src/1-one/match/methods/match/01-failFast.js","../../node_modules/compromise/src/1-one/match/methods/match/term/_fuzzy.js","../../node_modules/compromise/src/1-one/match/methods/termMethods.js","../../node_modules/compromise/src/1-one/match/methods/match/term/doesMatch.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/logic/greedy.js","../../node_modules/compromise/src/1-one/match/methods/match/_lib.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/astrix.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/logic/and-or.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/or-block.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/and-block.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/logic/negative-greedy.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/negative.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/optional-match.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/greedy-match.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/contraction-skip.js","../../node_modules/compromise/src/1-one/match/methods/match/steps/simple-match.js","../../node_modules/compromise/src/1-one/match/methods/match/02-from-here.js","../../node_modules/compromise/src/1-one/match/methods/match/03-getGroup.js","../../node_modules/compromise/src/1-one/match/methods/match/03-notIf.js","../../node_modules/compromise/src/1-one/match/methods/match/index.js","../../node_modules/compromise/src/1-one/match/methods/index.js","../../node_modules/compromise/src/1-one/match/lib.js","../../node_modules/compromise/src/1-one/match/plugin.js","../../node_modules/compromise/src/1-one/output/api/html.js","../../node_modules/compromise/src/1-one/output/api/_text.js","../../node_modules/compromise/src/1-one/output/api/_fmts.js","../../node_modules/compromise/src/1-one/output/methods/hash.js","../../node_modules/compromise/src/1-one/output/api/json.js","../../node_modules/compromise/src/1-one/output/api/debug.js","../../node_modules/compromise/src/1-one/output/api/wrap.js","../../node_modules/compromise/src/1-one/output/api/out.js","../../node_modules/compromise/src/1-one/output/api/text.js","../../node_modules/compromise/src/1-one/output/api/index.js","../../node_modules/compromise/src/1-one/output/methods/debug/client-side.js","../../node_modules/compromise/src/1-one/output/methods/debug/_color.js","../../node_modules/compromise/src/1-one/output/methods/debug/tags.js","../../node_modules/compromise/src/1-one/output/methods/debug/chunks.js","../../node_modules/compromise/src/1-one/output/methods/debug/highlight.js","../../node_modules/compromise/src/1-one/output/methods/debug/index.js","../../node_modules/compromise/src/1-one/output/plugin.js","../../node_modules/compromise/src/1-one/pointers/api/lib/_lib.js","../../node_modules/compromise/src/1-one/pointers/api/lib/split.js","../../node_modules/compromise/src/1-one/pointers/methods/getDoc.js","../../node_modules/compromise/src/1-one/pointers/methods/index.js","../../node_modules/compromise/src/1-one/pointers/api/lib/union.js","../../node_modules/compromise/src/1-one/pointers/api/lib/difference.js","../../node_modules/compromise/src/1-one/pointers/api/lib/intersection.js","../../node_modules/compromise/src/1-one/pointers/api/index.js","../../node_modules/compromise/src/1-one/pointers/plugin.js","../../node_modules/compromise/src/1-one/sweep/lib.js","../../node_modules/compromise/src/1-one/sweep/api.js","../../node_modules/compromise/src/1-one/sweep/methods/buildNet/01-parse.js","../../node_modules/compromise/src/1-one/sweep/methods/buildNet/index.js","../../node_modules/compromise/src/1-one/sweep/methods/sweep/01-getHooks.js","../../node_modules/compromise/src/1-one/sweep/methods/sweep/02-trim-down.js","../../node_modules/compromise/src/1-one/sweep/methods/sweep/04-runMatch.js","../../node_modules/compromise/src/1-one/sweep/methods/sweep/index.js","../../node_modules/compromise/src/1-one/sweep/methods/tagger/canBe.js","../../node_modules/compromise/src/1-one/sweep/methods/tagger/index.js","../../node_modules/compromise/src/1-one/sweep/methods/index.js","../../node_modules/compromise/src/1-one/sweep/plugin.js","../../node_modules/compromise/src/1-one/tag/methods/setTag.js","../../node_modules/compromise/src/1-one/tag/methods/unTag.js","../../node_modules/compromise/src/1-one/tag/methods/canBe.js","../../node_modules/grad-school/builds/grad-school.mjs","../../node_modules/compromise/src/1-one/tag/methods/addTags/_colors.js","../../node_modules/compromise/src/1-one/tag/methods/addTags/02-fmt.js","../../node_modules/compromise/src/1-one/tag/methods/addTags/01-validate.js","../../node_modules/compromise/src/1-one/tag/methods/addTags/index.js","../../node_modules/compromise/src/1-one/tag/methods/index.js","../../node_modules/compromise/src/1-one/tag/api/tag.js","../../node_modules/compromise/src/1-one/tag/api/index.js","../../node_modules/compromise/src/1-one/tag/lib.js","../../node_modules/compromise/src/1-one/tag/compute/tagRank.js","../../node_modules/compromise/src/1-one/tag/plugin.js","../../node_modules/compromise/src/1-one/tokenize/methods/01-sentences/01-simple-split.js","../../node_modules/compromise/src/1-one/tokenize/methods/01-sentences/02-simple-merge.js","../../node_modules/compromise/src/1-one/tokenize/methods/01-sentences/03-smart-merge.js","../../node_modules/compromise/src/1-one/tokenize/methods/01-sentences/04-quote-merge.js","../../node_modules/compromise/src/1-one/tokenize/methods/01-sentences/05-parens-merge.js","../../node_modules/compromise/src/1-one/tokenize/methods/01-sentences/index.js","../../node_modules/compromise/src/1-one/tokenize/methods/02-terms/01-hyphens.js","../../node_modules/compromise/src/1-one/tokenize/methods/02-terms/03-ranges.js","../../node_modules/compromise/src/1-one/tokenize/methods/02-terms/02-slashes.js","../../node_modules/compromise/src/1-one/tokenize/methods/02-terms/index.js","../../node_modules/compromise/src/1-one/tokenize/methods/03-whitespace/tokenize.js","../../node_modules/compromise/src/1-one/tokenize/methods/03-whitespace/index.js","../../node_modules/compromise/src/1-one/tokenize/methods/unicode.js","../../node_modules/compromise/src/1-one/tokenize/compute/normal/01-cleanup.js","../../node_modules/compromise/src/1-one/tokenize/compute/normal/02-acronyms.js","../../node_modules/compromise/src/1-one/tokenize/compute/normal/index.js","../../node_modules/compromise/src/1-one/tokenize/methods/parse.js","../../node_modules/compromise/src/1-one/tokenize/methods/01-sentences/is-sentence.js","../../node_modules/compromise/src/1-one/tokenize/methods/index.js","../../node_modules/compromise/src/1-one/tokenize/model/aliases.js","../../node_modules/compromise/src/1-one/tokenize/model/abbreviations/misc.js","../../node_modules/compromise/src/1-one/tokenize/model/abbreviations/honorifics.js","../../node_modules/compromise/src/1-one/tokenize/model/abbreviations/months.js","../../node_modules/compromise/src/1-one/tokenize/model/abbreviations/nouns.js","../../node_modules/compromise/src/1-one/tokenize/model/abbreviations/organizations.js","../../node_modules/compromise/src/1-one/tokenize/model/abbreviations/places.js","../../node_modules/compromise/src/1-one/tokenize/model/abbreviations/units.js","../../node_modules/compromise/src/1-one/tokenize/model/lexicon.js","../../node_modules/compromise/src/1-one/tokenize/model/prefixes.js","../../node_modules/compromise/src/1-one/tokenize/model/suffixes.js","../../node_modules/compromise/src/1-one/tokenize/model/unicode.js","../../node_modules/compromise/src/1-one/tokenize/model/punctuation.js","../../node_modules/compromise/src/1-one/tokenize/model/index.js","../../node_modules/compromise/src/1-one/tokenize/compute/alias.js","../../node_modules/compromise/src/1-one/tokenize/compute/machine.js","../../node_modules/compromise/src/1-one/tokenize/compute/freq.js","../../node_modules/compromise/src/1-one/tokenize/compute/offset.js","../../node_modules/compromise/src/1-one/tokenize/compute/reindex.js","../../node_modules/compromise/src/1-one/tokenize/compute/wordCount.js","../../node_modules/compromise/src/1-one/tokenize/compute/index.js","../../node_modules/compromise/src/1-one/tokenize/plugin.js","../../node_modules/compromise/src/1-one/typeahead/compute.js","../../node_modules/compromise/src/1-one/typeahead/api.js","../../node_modules/compromise/src/1-one/typeahead/lib/allPrefixes.js","../../node_modules/compromise/src/1-one/typeahead/lib/index.js","../../node_modules/compromise/src/1-one/typeahead/plugin.js","../../node_modules/compromise/src/one.js","../../node_modules/compromise/src/2-two/preTagger/model/irregulars/plurals.js","../../node_modules/compromise/src/2-two/preTagger/model/lexicon/_data.js","../../node_modules/efrt/src/encoding.js","../../node_modules/efrt/src/unpack/symbols.js","../../node_modules/efrt/src/unpack/traverse.js","../../node_modules/efrt/src/unpack/index.js","../../node_modules/compromise/src/2-two/preTagger/model/lexicon/misc.js","../../node_modules/compromise/src/2-two/preTagger/model/lexicon/frozenLex.js","../../node_modules/compromise/src/2-two/preTagger/model/lexicon/emoticons.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/nouns/toPlural/_rules.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/nouns/toPlural/index.js","../../node_modules/compromise/src/2-two/preTagger/model/lexicon/index.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/_noun.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/_verb.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/actor-verb.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/_adj.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/_gerund.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/adj-gerund.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/adj-noun.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/adj-past.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/adj-present.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/noun-gerund.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/noun-verb.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/_person.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/person-date.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/person-noun.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/person-verb.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/person-place.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/person-adj.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/unit-noun.js","../../node_modules/compromise/src/2-two/preTagger/model/clues/index.js","../../node_modules/compromise/src/2-two/preTagger/model/patterns/suffixes.js","../../node_modules/compromise/src/2-two/preTagger/model/patterns/prefixes.js","../../node_modules/compromise/src/2-two/preTagger/model/patterns/endsWith.js","../../node_modules/compromise/src/2-two/preTagger/model/patterns/neighbours.js","../../node_modules/compromise/src/2-two/preTagger/model/models/_data.js","../../node_modules/suffix-thumb/src/convert/index.js","../../node_modules/suffix-thumb/src/reverse/index.js","../../node_modules/suffix-thumb/src/compress/unpack.js","../../node_modules/compromise/src/2-two/preTagger/model/models/index.js","../../node_modules/compromise/src/2-two/preTagger/model/regex/regex-normal.js","../../node_modules/compromise/src/2-two/preTagger/model/regex/regex-text.js","../../node_modules/compromise/src/2-two/preTagger/model/regex/regex-numbers.js","../../node_modules/compromise/src/2-two/preTagger/model/orgWords.js","../../node_modules/compromise/src/2-two/preTagger/model/placeWords.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/nouns/toSingular/_rules.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/nouns/toSingular/index.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/nouns/index.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/verbs/getTense/_guess.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/verbs/getTense/index.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/verbs/toInfinitive/index.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/verbs/conjugate/index.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/verbs/index.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/adjectives/inflect.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/adjectives/conjugate/lib.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/adjectives/conjugate/fromAdverb.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/adjectives/conjugate/toAdverb.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/adjectives/index.js","../../node_modules/compromise/src/2-two/preTagger/methods/transform/index.js","../../node_modules/compromise/src/2-two/preTagger/methods/expand/byTag.js","../../node_modules/compromise/src/2-two/preTagger/methods/expand/index.js","../../node_modules/compromise/src/2-two/preTagger/methods/quickSplit.js","../../node_modules/compromise/src/2-two/preTagger/methods/looksPlural.js","../../node_modules/compromise/src/2-two/preTagger/methods/index.js","../../node_modules/compromise/src/2-two/preTagger/model/_expand/irregulars.js","../../node_modules/compromise/src/2-two/preTagger/model/_expand/index.js","../../node_modules/compromise/src/2-two/preTagger/model/index.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/1st-pass/01-colons.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/1st-pass/02-hyphens.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/2nd-pass/00-tagSwitch.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/_fastTag.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/3rd-pass/_fillTags.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/2nd-pass/01-case.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/2nd-pass/02-suffix.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/2nd-pass/03-regex.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/2nd-pass/04-prefix.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/2nd-pass/05-year.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/3rd-pass/07-verb-type.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/3rd-pass/01-acronym.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/3rd-pass/02-neighbours.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/3rd-pass/03-orgWords.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/3rd-pass/04-placeWords.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/3rd-pass/05-fallback.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/3rd-pass/_adhoc.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/3rd-pass/06-switches.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/3rd-pass/08-imperative.js","../../node_modules/compromise/src/2-two/preTagger/compute/tagger/index.js","../../node_modules/compromise/src/2-two/preTagger/compute/root.js","../../node_modules/compromise/src/2-two/preTagger/compute/penn.js","../../node_modules/compromise/src/2-two/preTagger/compute/index.js","../../node_modules/compromise/src/2-two/preTagger/tagSet/nouns.js","../../node_modules/compromise/src/2-two/preTagger/tagSet/verbs.js","../../node_modules/compromise/src/2-two/preTagger/tagSet/values.js","../../node_modules/compromise/src/2-two/preTagger/tagSet/dates.js","../../node_modules/compromise/src/2-two/preTagger/tagSet/misc.js","../../node_modules/compromise/src/2-two/preTagger/tagSet/index.js","../../node_modules/compromise/src/2-two/preTagger/plugin.js","../../node_modules/compromise/src/2-two/contraction-two/api/contract.js","../../node_modules/compromise/src/2-two/contraction-two/api/index.js","../../node_modules/compromise/src/2-two/contraction-two/compute/_splice.js","../../node_modules/compromise/src/2-two/contraction-two/compute/apostrophe-s.js","../../node_modules/compromise/src/2-two/contraction-two/compute/apostrophe-d.js","../../node_modules/compromise/src/2-two/contraction-two/compute/apostrophe-t.js","../../node_modules/compromise/src/2-two/contraction-two/compute/isPossessive.js","../../node_modules/compromise/src/2-two/contraction-two/compute/index.js","../../node_modules/compromise/src/2-two/contraction-two/plugin.js","../../node_modules/compromise/src/2-two/postTagger/model/adjective/adjective.js","../../node_modules/compromise/src/2-two/postTagger/model/adjective/adj-adverb.js","../../node_modules/compromise/src/2-two/postTagger/model/adjective/adj-gerund.js","../../node_modules/compromise/src/2-two/postTagger/model/adjective/adj-noun.js","../../node_modules/compromise/src/2-two/postTagger/model/adjective/adj-verb.js","../../node_modules/compromise/src/2-two/postTagger/model/adverb.js","../../node_modules/compromise/src/2-two/postTagger/model/dates/date-phrase.js","../../node_modules/compromise/src/2-two/postTagger/model/dates/date.js","../../node_modules/compromise/src/2-two/postTagger/model/nouns/nouns.js","../../node_modules/compromise/src/2-two/postTagger/model/verbs/noun-gerund.js","../../node_modules/compromise/src/2-two/postTagger/model/verbs/verb-noun.js","../../node_modules/compromise/src/2-two/postTagger/model/numbers/money.js","../../node_modules/compromise/src/2-two/postTagger/model/numbers/fractions.js","../../node_modules/compromise/src/2-two/postTagger/model/numbers/numbers.js","../../node_modules/compromise/src/2-two/postTagger/model/person/person-phrase.js","../../node_modules/compromise/src/2-two/postTagger/model/person/ambig-name.js","../../node_modules/compromise/src/2-two/postTagger/model/verbs/verbs.js","../../node_modules/compromise/src/2-two/postTagger/model/verbs/auxiliary.js","../../node_modules/compromise/src/2-two/postTagger/model/verbs/phrasal.js","../../node_modules/compromise/src/2-two/postTagger/model/verbs/imperative.js","../../node_modules/compromise/src/2-two/postTagger/model/verbs/adj-gerund.js","../../node_modules/compromise/src/2-two/postTagger/model/verbs/passive.js","../../node_modules/compromise/src/2-two/postTagger/model/_misc.js","../../node_modules/compromise/src/2-two/postTagger/model/nouns/organizations.js","../../node_modules/compromise/src/2-two/postTagger/model/nouns/places.js","../../node_modules/compromise/src/2-two/postTagger/model/conjunctions.js","../../node_modules/compromise/src/2-two/postTagger/model/expressions.js","../../node_modules/compromise/src/2-two/postTagger/model/index.js","../../node_modules/compromise/src/2-two/postTagger/compute/index.js","../../node_modules/compromise/src/2-two/postTagger/api.js","../../node_modules/compromise/src/2-two/postTagger/plugin.js","../../node_modules/compromise/src/2-two/lazy/maybeMatch.js","../../node_modules/compromise/src/2-two/lazy/lazyParse.js","../../node_modules/compromise/src/2-two/lazy/plugin.js","../../node_modules/compromise/src/2-two/swap/api/swap-verb.js","../../node_modules/compromise/src/2-two/swap/api/swap.js","../../node_modules/compromise/src/2-two/swap/plugin.js","../../node_modules/compromise/src/two.js","../../node_modules/compromise/src/3-three/adjectives/plugin.js","../../node_modules/compromise/src/3-three/adverbs/plugin.js","../../node_modules/compromise/src/3-three/chunker/api/clauses.js","../../node_modules/compromise/src/3-three/chunker/api/chunks.js","../../node_modules/compromise/src/3-three/chunker/api/api.js","../../node_modules/compromise/src/3-three/chunker/compute/01-easy.js","../../node_modules/compromise/src/3-three/chunker/compute/02-neighbours.js","../../node_modules/compromise/src/3-three/chunker/compute/03-matcher.js","../../node_modules/compromise/src/3-three/chunker/compute/04-fallback.js","../../node_modules/compromise/src/3-three/chunker/compute/05-fixUp.js","../../node_modules/compromise/src/3-three/chunker/compute/index.js","../../node_modules/compromise/src/3-three/chunker/plugin.js","../../node_modules/compromise/src/3-three/misc/acronyms/index.js","../../node_modules/compromise/src/3-three/misc/parentheses/fns.js","../../node_modules/compromise/src/3-three/misc/parentheses/index.js","../../node_modules/compromise/src/3-three/misc/possessives/index.js","../../node_modules/compromise/src/3-three/misc/quotations/fns.js","../../node_modules/compromise/src/3-three/misc/quotations/index.js","../../node_modules/compromise/src/3-three/misc/selections/index.js","../../node_modules/compromise/src/3-three/misc/slashes/index.js","../../node_modules/compromise/src/3-three/misc/plugin.js","../../node_modules/compromise/src/3-three/normalize/methods.js","../../node_modules/compromise/src/3-three/normalize/api.js","../../node_modules/compromise/src/3-three/normalize/plugin.js","../../node_modules/compromise/src/3-three/nouns/find.js","../../node_modules/compromise/src/3-three/nouns/api/isSubordinate.js","../../node_modules/compromise/src/3-three/nouns/api/isPlural.js","../../node_modules/compromise/src/3-three/nouns/api/parse.js","../../node_modules/compromise/src/3-three/nouns/api/toJSON.js","../../node_modules/compromise/src/3-three/nouns/api/hasPlural.js","../../node_modules/compromise/src/3-three/nouns/api/toPlural.js","../../node_modules/compromise/src/3-three/nouns/api/toSingular.js","../../node_modules/compromise/src/3-three/nouns/api/api.js","../../node_modules/compromise/src/3-three/nouns/plugin.js","../../node_modules/compromise/src/3-three/numbers/fractions/find.js","../../node_modules/compromise/src/3-three/numbers/numbers/parse/toNumber/findModifiers.js","../../node_modules/compromise/src/3-three/numbers/numbers/parse/toNumber/data.js","../../node_modules/compromise/src/3-three/numbers/numbers/parse/toNumber/validate.js","../../node_modules/compromise/src/3-three/numbers/numbers/parse/toNumber/parseDecimals.js","../../node_modules/compromise/src/3-three/numbers/numbers/parse/toNumber/parseNumeric.js","../../node_modules/compromise/src/3-three/numbers/numbers/parse/toNumber/index.js","../../node_modules/compromise/src/3-three/numbers/fractions/parse.js","../../node_modules/compromise/src/3-three/numbers/numbers/_toString.js","../../node_modules/compromise/src/3-three/numbers/numbers/format/toText/data.js","../../node_modules/compromise/src/3-three/numbers/numbers/format/toText/index.js","../../node_modules/compromise/src/3-three/numbers/fractions/convert/toCardinal.js","../../node_modules/compromise/src/3-three/numbers/numbers/format/toOrdinal/textOrdinal.js","../../node_modules/compromise/src/3-three/numbers/fractions/convert/toOrdinal.js","../../node_modules/compromise/src/3-three/numbers/fractions/api.js","../../node_modules/compromise/src/3-three/numbers/numbers/find.js","../../node_modules/compromise/src/3-three/numbers/numbers/parse/index.js","../../node_modules/compromise/src/3-three/numbers/numbers/format/toOrdinal/numOrdinal.js","../../node_modules/compromise/src/3-three/numbers/numbers/format/suffix.js","../../node_modules/compromise/src/3-three/numbers/numbers/format/index.js","../../node_modules/compromise/src/3-three/numbers/numbers/isUnit.js","../../node_modules/compromise/src/3-three/numbers/numbers/api.js","../../node_modules/compromise/src/3-three/numbers/plugin.js","../../node_modules/compromise/src/3-three/redact/plugin.js","../../node_modules/compromise/src/3-three/sentences/questions.js","../../node_modules/compromise/src/3-three/sentences/parse/mainClause.js","../../node_modules/compromise/src/3-three/sentences/parse/index.js","../../node_modules/compromise/src/3-three/sentences/conjugate/toPast.js","../../node_modules/compromise/src/3-three/sentences/conjugate/toPresent.js","../../node_modules/compromise/src/3-three/sentences/conjugate/toFuture.js","../../node_modules/compromise/src/3-three/sentences/conjugate/toNegative.js","../../node_modules/compromise/src/3-three/sentences/conjugate/toInfinitive.js","../../node_modules/compromise/src/3-three/sentences/api.js","../../node_modules/compromise/src/3-three/sentences/plugin.js","../../node_modules/compromise/src/3-three/topics/people/find.js","../../node_modules/compromise/src/3-three/topics/people/parse.js","../../node_modules/compromise/src/3-three/topics/people/gender.js","../../node_modules/compromise/src/3-three/topics/people/api.js","../../node_modules/compromise/src/3-three/topics/places/find.js","../../node_modules/compromise/src/3-three/topics/places/api.js","../../node_modules/compromise/src/3-three/topics/orgs/api.js","../../node_modules/compromise/src/3-three/topics/topics.js","../../node_modules/compromise/src/3-three/topics/plugin.js","../../node_modules/compromise/src/3-three/verbs/find.js","../../node_modules/compromise/src/3-three/verbs/api/parse/root.js","../../node_modules/compromise/src/3-three/verbs/api/parse/adverbs.js","../../node_modules/compromise/src/3-three/verbs/api/parse/index.js","../../node_modules/compromise/src/3-three/verbs/api/parse/grammar/forms.js","../../node_modules/compromise/src/3-three/verbs/api/parse/grammar/index.js","../../node_modules/compromise/src/3-three/verbs/api/parse/getSubject.js","../../node_modules/compromise/src/3-three/verbs/api/lib.js","../../node_modules/compromise/src/3-three/verbs/api/toJSON.js","../../node_modules/compromise/src/3-three/verbs/api/conjugate/toInfinitive.js","../../node_modules/compromise/src/3-three/verbs/api/conjugate/toPast.js","../../node_modules/compromise/src/3-three/verbs/api/conjugate/toParticiple.js","../../node_modules/compromise/src/3-three/verbs/api/conjugate/toPresent.js","../../node_modules/compromise/src/3-three/verbs/api/conjugate/toFuture.js","../../node_modules/compromise/src/3-three/verbs/api/conjugate/toGerund.js","../../node_modules/compromise/src/3-three/verbs/api/conjugate/toNegative.js","../../node_modules/compromise/src/3-three/verbs/api/api.js","../../node_modules/compromise/src/3-three/verbs/plugin.js","../../node_modules/compromise/src/3-three/coreference/compute/lib.js","../../node_modules/compromise/src/3-three/coreference/compute/findPerson.js","../../node_modules/compromise/src/3-three/coreference/compute/findThey.js","../../node_modules/compromise/src/3-three/coreference/compute/index.js","../../node_modules/compromise/src/3-three/coreference/api/pronouns.js","../../node_modules/compromise/src/3-three/coreference/plugin.js","../../node_modules/compromise/src/three.js","../../src/guessability/grammar-detector.ts","../../src/guessability/convergence-detector.ts","../../src/guessability/analyzer.ts","../../src/index.ts","../../src/cli/utils/sdk-loader.ts","../../src/cli/commands/stats.ts","../../src/cli/commands/quiz.ts","../../src/cli/commands/score.ts","../../src/cli/index.ts"],"names":["z","index","a","verbose","readFile","l","basename","readdir","f","join","stat","resolve","cache","log","t","offset","d","s","createLogger","RateLimiter","isValidDomainId","i","j","c","world","compute","out","all","n","r","m","k","min","max","methods","start","end","isArray","model","plugin","View","nlp","p","hooks","env","isObject","o","document","methods_default","compute_default","hasSpace","hasDash","fns","isTitleCase","toTitleCase","toLowerCase","keep","match","indexN","self","remove_default","hasHyphen","sort_default","ptrs","addAPI","api_default","plugin_default","before","hasContraction","after","list","contractions_default","setTag","lexicon","expand","split","lex","_multi","opts","fixPointers","addIds","splitAll","prefixes","length","relative","g","getGroup","match_default","lib_default","killUnicode","h","debug","fmt","debug_default","str","matches","doesMatch","split_default","getDoc","net","runMatch","unTag","looksPlural","tagString","yellow","canBe","canBe_default","e","colors","allTags","nope","addTags","chunks","isSentence","m2","hasSomething","suffixes","splitHyphens","prePunctuation","postPunctuation","emoticons","whitespace_default","unicode","parse","splitSentences","parse_default","isAcronym","hasLetter","unicode_default","model_default","aliases","wordCount","api","prefix","defaults","places","unpack","misc_default","uncountable","plural","jj","clue","misc","clues","suffixes_default","Adj","Noun","prefixes_default","Inf","Pres","Sing","Past","Actor","Verb","Last","vb","nn","data_default","reverse","unpack_default","rules_default","nouns_default","fromPast","fromPresent","fromGerund","fromParticiple","toPast","toPresent","toGerund","toParticiple","toSuperlative","toComparative","fromComparative","fromSuperlative","exceptions","expand_default","tmpModel","switches","titleCase","case_default","suffixLoop","byEnd","oneLetterAcronym","periodAcronym","noPeriodAcronym","lowerCaseAcronym","neighbours_default","orgWords_default","tagOrgs","placeWords_default","tagger_default","verbs_default","insertContraction","splice_default","_apostropheD","apostrophe_d_default","apostropheT","apostrophe_t_default","adjLike","isPossessive","byApostrophe","reTag","toDocs","adj_gerund_default","adj_noun_default","noun_gerund_default","notIf","imperative_default","organizations_default","places_default","tagger","conjugate","toAdverb","toRoot","toNoun","chunks_default","byWord","_","fallback_default","hasPeriod","acronyms_default","hasOpen","hasClosed","find","apostropheS","pairs","findEnd","strip","hasSlash","slashes_default","termLoop","notPlural","isPlural","getRoot","toText","toArray","toJSON","toPlural_default","toSingular","toSingular_default","find_default","has","validate_default","mapping","round","parseNumeric","parseNumber","tens","suffix_default","v","clauses","toInfinitive","toInfinitive_default","grammar","addMethod","root_default","past","cleanUp","lastNoun","getTense","toInf","toJSON_default","toPast_default","forms","simple","toPresent_default","toFuture","toFuture_default","toNegative","tokenize","isCodeOption","STOP_WORDS","query","validate","path","__filename","fileURLToPath","__dirname","dirname","reset","writeFile","mkdir","Command"],"mappings":";;;;;;;;;;AAYO,IAAM,cAAA,GAAiBA,MAAE,MAAA,CAAO;AAAA,EACrC,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA,EAChC,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAI,CAAA;AAAA,EACpC,cAAcA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA;AACpC,CAAC,CAAA;AAQM,IAAM,eAAA,GAAkBA,MAAE,IAAA,CAAK,CAAC,KAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AAOnD,IAAM,YAAA,GAAeA,MAAE,MAAA,CAAO;AAAA,EACnC,GAAA,EAAK,eAAA;AAAA,EACL,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,SAAA,EAAWA,MAAE,OAAA,EAAQ;AAAA;AAAA,EAErB,eAAA,EAAiBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACrC,QAAA,EAAU,eAAe,QAAA;AAC3B,CAAC,CAAA;AAQM,IAAM,kBAAA,GAAqBA,MAAE,IAAA,CAAK;AAAA,EACvC,YAAA;AAAA,EACA,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAC,CAAA;AAYM,IAAM,uBAAA,GAA0BA,MAAE,IAAA,CAAK;AAAA,EAC5C,YAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA;AAIM,IAAM,gBAAA,GAAmBA,MAAE,IAAA,CAAK,CAAC,QAAQ,QAAA,EAAU,MAAA,EAAQ,WAAW,CAAC,CAAA;AAIvE,IAAM,oBAAA,GAAuBA,MAAE,IAAA,CAAK;AAAA,EACzC,UAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAQM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,UAAA,EAAY,gBAAA;AAAA,EACZ,eAAeA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA;AAAA,EACzC,cAAA,EAAgB,oBAAA;AAAA,EAChB,IAAA,EAAMA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,QAAQ,CAAA;AAAA,EACxB,MAAA,EAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,aAAa,CAAA;AAAA,EACxC,OAAA,EAASA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,KAAK,CAAA;AAAA,EACjC,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAA,EAAcA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC3B,CAAC,CAAA;AAcM,IAAM,cAAA,GAAiBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAErC,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,MAAM,wBAAwB,CAAA;AAAA,EACrD,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,MAAM,qBAAqB,CAAA;AAAA,EAChD,cAAA,EAAgBA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,GAAA,CAAI,CAAC,CAAA;AAAA;AAAA,EAGjD,YAAA,EAAc,kBAAA;AAAA,EACd,iBAAA,EAAmBA,MAAE,MAAA,EAAO;AAAA,EAC5B,iBAAA,EAAmB,wBAAwB,QAAA,EAAS;AAAA;AAAA;AAAA,EAGpD,MAAA,EAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAI,EAAE,CAAA;AAAA,EACzB,YAAA,EAAcA,MAAE,OAAA,EAAQ;AAAA,EACxB,YAAA,EAAcA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGjC,sBAAsBA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAGnD,SAASA,KAAA,CAAE,KAAA,CAAM,YAAY,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA;AAAA,EAGvC,aAAA,EAAe,eAAA;AAAA,EACf,iBAAA,EAAmBA,MAAE,MAAA,EAAO;AAAA;AAAA,EAG5B,QAAA,EAAU;AACZ,CAAC,CAAA;AAQ0C,eAAe,IAAA,CAAK;AAAA,EAC7D,aAAA,EAAe,IAAA;AAAA,EACf,iBAAA,EAAmB;AACrB,CAAC,EAAE,MAAA,CAAO;AAAA,EACR,SAASA,KAAA,CAAE,KAAA;AAAA,IACT,aAAa,IAAA,CAAK;AAAA,MAChB,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU,IAAA;AAAA,MACV,eAAA,EAAiB;AAAA,KAClB;AAAA,GACH,CAAE,OAAO,CAAC;AACZ,CAAC;AC7JM,IAAM,kBAAA,GAAqBA,MAAE,IAAA,CAAK;AAAA;AAAA,EAEvC,iBAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA;AAAA,EAEA,iBAAA;AAAA;AAAA,EAEA,oBAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAEA,aAAA;AAAA,EACA,oBAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAEA,YAAA;AAAA,EACA;AACF,CAAC,CAAA;AAIM,IAAM,gBAAA,GAAmBA,MAAE,IAAA,CAAK;AAAA,EACrC,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;AAQM,IAAM,YAAA,GAAeA,MAAE,MAAA,CAAO;AAAA,EACnC,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA;AAAA,EACnB,cAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACxC,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,cAAA,EAAgBA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACrD,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAM,cAAc;AACnC,CAAC,CAAA;AAQM,IAAM,YAAA,GAAeA,MAAE,MAAA,CAAO;AAAA,EACnC,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA;AAAA,EACnB,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA;AAAA,EACrB,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA;AAAA,EACrB,MAAA,EAAQ,kBAAA;AAAA,EACR,IAAA,EAAM,gBAAA;AAAA,EACN,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA;AAAA,EACzC,cAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACxC,gBAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EAC1C,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,YAAY;AAC/B,CAAC,CAAA;AAQkC,aAAa,IAAA,CAAK,EAAE,SAAS,IAAA,EAAM,EAAE,MAAA,CAAO;AAAA,EAC7E,SAASA,KAAAA,CAAE,KAAA;AAAA,IACT,YAAA,CAAa,IAAA,CAAK,EAAE,SAAA,EAAW,MAAM;AAAA,IACrC,QAAA;AACJ,CAAC;ACrEM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,EACrB,cAAA,EAAgB,eAAA;AAAA,EAChB,SAAA,EAAWA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA;AAAA,EACnD,aAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACrC,CAAC,CAAA;AAWyCA,MAAE,MAAA,CAAO;AAAA,EACjD,cAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA,EAAS;AAAA;AAAA,EACzC,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC5B,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC/B,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,EACnB,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,WAAWA,KAAAA,CAAE,KAAA,CAAM,kBAAkB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAC5C,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,UAAUA,KAAAA,CAAE,MAAA,CAAOA,MAAE,OAAA,EAAS,EAAE,QAAA;AAAS;AAC3C,CAAC;AAWM,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,EACrB,cAAA,EAAgB,eAAA;AAAA,EAChB,aAAA,EAAe,eAAA;AAAA,EACf,SAAA,EAAWA,MAAE,OAAA,EAAQ;AAAA,EACrB,eAAA,EAAiBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EACrC,QAAA,EAAU,eAAe,QAAA,EAAS;AAAA,EAClC,SAAA,EAAWA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA;AAC5C,CAAC,CAAA;AAWM,IAAM,yBAAA,GAA4BA,MAAE,MAAA,CAAO;AAAA,EAChD,eAAA,EAAiBA,MAAE,MAAA,EAAO;AAAA,EAC1B,OAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACjC,UAAA,EAAYA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA,EACrC,WAAA,EAAaA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA;AAAA,EAC/B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC,CAAA;AAWqCA,MAAE,MAAA,CAAO;AAAA,EAC7C,YAAA,EAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EAC9B,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,EACnB,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAG9B,gBAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EAC1C,cAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EAC3C,gBAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EAC7C,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA;AAAA,EAChC,MAAA,EAAQA,MAAE,OAAA,EAAQ;AAAA;AAAA;AAAA,EAGlB,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA;AAAA;AAAA,EAGvC,cAAA,EAAgBA,KAAAA,CAAE,KAAA,CAAM,yBAAyB,EAAE,QAAA,EAAS;AAAA,EAC5D,iBAAA,EAAmBA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA;AAAA,EAGvD,cAAA,EAAgBA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA;AAAA,EACxD,wBAAwBA,KAAAA,CAAE,MAAA,EAAO,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EAC1D,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACvB,CAAC;AAYqCA,MAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,MAAE,OAAA,EAAQ;AAAA,EACjB,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,CAAO;AAAA,IACvB,IAAA,EAAMA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,IAC/C,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,IAClB,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC3B,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACb,UAAA,EAAYA,MAAE,OAAA,EAAQ;AAAA;AAAA,EACtB,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,EAC9B,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA;AAC5B,CAAC;ACtHM,IAAM,0BAAA,GAA6BA,MAAE,MAAA,CAAO;AAAA,EACjD,eAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACzC,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,eAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA;AAClC,CAAC,CAAA;AAa0CA,MAAE,MAAA,CAAO;AAAA;AAAA,EAElD,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA;AAAA,EACnB,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA;AAAA,EACrB,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA;AAAA,EACrB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA;AAAA,EACjB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA;AAAA;AAAA,EAGf,aAAA,EAAeA,KAAAA,CAAE,OAAA,CAAQ,OAAO,CAAA;AAAA,EAChC,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA;AAAA;AAAA,EAGtB,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA;AAAA;AAAA,EAC1B,QAAA,EAAUA,KAAAA,CAAE,KAAA,CAAM,0BAA0B,CAAA;AAAA;AAAA,EAG5C,eAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EAC5C,aAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EAC1C,eAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA;AAClC,CAAC;AAQuCA,MAAE,MAAA,CAAO;AAAA,EAC/C,aAAA,EAAeA,MAAE,MAAA,EAAO;AAAA,EACxB,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,cAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAY;AAAA,EAC3C,SAASA,KAAAA,CAAE,KAAA;AAAA,IACTA,MAAE,MAAA,CAAO;AAAA,MACP,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,QAAA,EAAUA,MAAE,MAAA;AAAO,KACpB;AAAA,GACH;AAAA,EACA,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA;AACzB,CAAC;;;AC/DD,IAAM,MAAA,GAAS;AAAA,EACb,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,GAAA,EAAK,SAAA;AAAA,EACL,GAAA,EAAK,UAAA;AAAA,EACL,KAAA,EAAO,UAAA;AAAA,EACP,MAAA,EAAQ,UAAA;AAAA,EAER,OAAA,EAAS,UAAA;AAAA,EACT,IAAA,EAAM,UAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAEO,SAAS,MAAM,IAAA,EAAsB;AAC1C,EAAA,OAAO,GAAG,MAAA,CAAO,KAAK,GAAG,IAAI,CAAA,EAAG,OAAO,KAAK,CAAA,CAAA;AAC9C;AAEO,SAAS,IAAI,IAAA,EAAsB;AACxC,EAAA,OAAO,GAAG,MAAA,CAAO,GAAG,GAAG,IAAI,CAAA,EAAG,OAAO,KAAK,CAAA,CAAA;AAC5C;AAEO,SAAS,OAAO,IAAA,EAAsB;AAC3C,EAAA,OAAO,GAAG,MAAA,CAAO,MAAM,GAAG,IAAI,CAAA,EAAG,OAAO,KAAK,CAAA,CAAA;AAC/C;AAEO,SAAS,KAAK,IAAA,EAAsB;AACzC,EAAA,OAAO,GAAG,MAAA,CAAO,IAAI,GAAG,IAAI,CAAA,EAAG,OAAO,KAAK,CAAA,CAAA;AAC7C;AAEO,SAAS,KAAK,IAAA,EAAsB;AACzC,EAAA,OAAO,GAAG,MAAA,CAAO,IAAI,GAAG,IAAI,CAAA,EAAG,OAAO,KAAK,CAAA,CAAA;AAC7C;AASO,SAAS,cAAA,CAAe,GAAaC,MAAAA,EAAuB;AACjE,EAAA,MAAM,gBAAA,GAA2C;AAAA,IAC/C,MAAM,MAAA,CAAO,KAAA;AAAA,IACb,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,MAAM,MAAA,CAAO,GAAA;AAAA,IACb,WAAW,MAAA,CAAO;AAAA,GACpB;AAEA,EAAA,MAAM,YAAY,gBAAA,CAAiB,CAAA,CAAE,QAAA,CAAS,UAAU,KAAK,MAAA,CAAO,KAAA;AACpE,EAAA,MAAM,SAAA,GAAY,GAAG,SAAS,CAAA,EAAG,EAAE,QAAA,CAAS,UAAU,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,CAAA;AAErE,EAAA,IAAI,MAAA,GAAS;AAAA,EAAK,MAAA,CAAO,IAAI,CAAA,CAAA,EAAIA,MAAAA,GAAQ,CAAC,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,EAAA,EAAK,SAAS,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM;AAAA,CAAA;AAGpF,EAAA,IAAI,CAAA,CAAE,YAAA,IAAgB,CAAA,CAAE,WAAA,EAAa;AACnC,IAAA,MAAA,IAAU,CAAA,EAAG,OAAO,GAAG,CAAA,aAAA,EAAM,EAAE,YAAA,IAAgB,MAAM,CAAA,uGAAA,EAAqB,MAAA,CAAO,KAAK;AAAA,CAAA;AACtF,IAAA,MAAM,SAAA,GAAY,CAAA,CAAE,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA;AAC1C,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,MAAA,MAAA,IAAU,GAAG,MAAA,CAAO,GAAG,SAAI,MAAA,CAAO,KAAK,IAAI,IAAI;AAAA,CAAA;AAAA,IACjD;AACA,IAAA,MAAA,IAAU,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,8KAAA,EAAgC,OAAO,KAAK;AAAA,CAAA;AAAA,EACrE;AAGA,EAAA,KAAA,MAAW,GAAA,IAAO,EAAE,OAAA,EAAS;AAC3B,IAAA,MAAA,IAAU,CAAA,EAAA,EAAK,MAAA,CAAO,IAAI,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI;AAAA,CAAA;AAAA,EAClE;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,WAAA,CAAY,OAAmB,KAAA,EAAwB;AACrE,EAAA,IAAI,MAAA,GAAS,IAAA;AAEb,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAA,IAAU,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAG,KAAK,CAAA,EAAG,MAAA,CAAO,KAAK;AAAA,CAAA;AAC7D,IAAA,MAAA,IAAU,CAAA,EAAG,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC;;AAAA,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAA,IAAU,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,QAAA,EAAW,OAAO,KAAK;AAAA,CAAA;AAC/C,EAAA,MAAA,IAAU,CAAA,qBAAA,EAAwB,MAAM,YAAY;AAAA,CAAA;AACpD,EAAA,MAAA,IAAU,CAAA,qBAAA,EAAwB,MAAM,YAAY;AAAA,CAAA;AACpD,EAAA,MAAA,IAAU,CAAA,qBAAA,EAAwB,MAAM,cAAc;;AAAA,CAAA;AAEtD,EAAA,MAAA,IAAU,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,uBAAA,EAA0B,OAAO,KAAK;AAAA,CAAA;AAC9D,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,EAAQ,QAAA,EAAU,QAAQ,WAAW,CAAA;AAC3D,EAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,YAAA,CAAa,IAAI,CAAA,IAAK,CAAA;AAC1C,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,cAAA,GAAiB,CAAA,GAC/B,IAAA,CAAK,MAAO,KAAA,GAAQ,KAAA,CAAM,cAAA,GAAkB,GAAG,CAAA,GAC/C,CAAA;AACJ,IAAA,MAAM,MAAM,QAAA,CAAI,MAAA,CAAO,KAAK,KAAA,CAAM,GAAA,GAAM,CAAC,CAAC,CAAA;AAC1C,IAAA,MAAA,IAAU,CAAA,EAAA,EAAK,KAAK,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAA,CAAE,QAAA,CAAS,CAAC,CAAC,CAAA,EAAA,EAAK,OAAO,GAAG,CAAA,EAAG,GAAG,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA;AAAA,CAAA;AAAA,EACxG;AACA,EAAA,MAAA,IAAU,IAAA;AAEV,EAAA,MAAA,IAAU,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,iBAAA,EAAoB,OAAO,KAAK;AAAA,CAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,cAAc,CAAA,CAAE,IAAA,CAAK,CAACC,EAAAA,EAAG,MAAM,CAAA,CAAE,CAAC,CAAA,GAAIA,EAAAA,CAAE,CAAC,CAAC,CAAA;AAC7E,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,KAAA,EAAO;AACjC,IAAA,MAAA,IAAU,KAAK,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,IAAI,KAAK;AAAA,CAAA;AAAA,EACzC;AACA,EAAA,MAAA,IAAU,IAAA;AAEV,EAAA,MAAA,IAAU,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,WAAA,EAAc,OAAO,KAAK;AAAA,CAAA;AAClD,EAAA,MAAA,IAAU,CAAA,qBAAA,EAAwB,MAAM,cAAc;AAAA,CAAA;AACtD,EAAA,MAAA,IAAU,CAAA,qBAAA,EAAwB,MAAM,iBAAiB;AAAA,CAAA;AAEzD,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,qBAAA,CACd,UACA,MAAA,EACQ;AACR,EAAA,IAAI,MAAA,GAAS;AAAA,EAAK,OAAO,GAAG,CAAA,MAAA,EAAI,MAAA,CAAO,KAAK,IAAI,QAAQ;AAAA,CAAA;AAExD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAChC,IAAA,MAAA,IAAU,CAAA,EAAA,EAAK,MAAA,CAAO,GAAG,CAAA,MAAA,EAAI,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO;AAAA,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,uBAAA,CACd,QAAA,EACA,WAAA,EACA,aAAA,EACQ;AACR,EAAA,OAAO,GAAG,MAAA,CAAO,KAAK,SAAI,MAAA,CAAO,KAAK,IAAI,QAAQ;AAAA,EAAA,EAC3C,MAAA,CAAO,GAAG,CAAA,EAAG,WAAW,aAAa,aAAa,CAAA,UAAA,EAAa,OAAO,KAAK;AAAA,CAAA;AACpF;AAKO,SAAS,aAAA,CAAc,QAAgB,MAAA,EAAwB;AACpE,EAAA,MAAM,QAAQ,MAAA,GAAS,MAAA;AACvB,EAAA,IAAI,WAAW,CAAA,EAAG;AAChB,IAAA,OAAO;AAAA,EAAK,MAAA,CAAO,KAAK,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,IAAA,EAAO,KAAK,CAAA,YAAA,EAAe,MAAA,CAAO,KAAK;AAAA,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO;AAAA,EAAK,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,wBAAA,EAA2B,MAAA,CAAO,KAAK;AAAA,CAAA;AAC/F;;;ACtJO,IAAM,UAAA,GAAa;AAAA,EACxB,OAAA,EAAS,CAAA;AAAA,EACT,gBAAA,EAAkB,CAAA;AAAA,EAClB,WAAA,EAAa,CAAA;AAAA,EACb,WAAA,EAAa;AACf,CAAA;AAkBO,SAAS,kBAAA,GAA2B;AACzC,EAAA,OAAA,CAAQ,EAAA,CAAG,mBAAA,EAAqB,CAAC,KAAA,KAAU;AACzC,IAAA,OAAA,CAAQ,KAAA,CAAM;AAAA,EAAK,GAAA,CAAI,KAAK,qBAAqB,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AACtE,IAAA,IAAI,OAAA,CAAQ,IAAI,KAAA,EAAO;AACrB,MAAA,OAAA,CAAQ,KAAA,CAAM,MAAM,KAAK,CAAA;AAAA,IAC3B;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,WAAW,WAAW,CAAA;AAAA,EACrC,CAAC,CAAA;AAED,EAAA,OAAA,CAAQ,EAAA,CAAG,oBAAA,EAAsB,CAAC,MAAA,KAAW;AAC3C,IAAA,MAAM,UAAU,MAAA,YAAkB,KAAA,GAAQ,MAAA,CAAO,OAAA,GAAU,OAAO,MAAM,CAAA;AACxE,IAAA,OAAA,CAAQ,KAAA,CAAM;AAAA,EAAK,IAAI,IAAA,CAAK,sBAAsB,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AACjE,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,KAAA,IAAS,MAAA,YAAkB,KAAA,EAAO;AAChD,MAAA,OAAA,CAAQ,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,IAC5B;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,WAAW,WAAW,CAAA;AAAA,EACrC,CAAC,CAAA;AACH;;;ACxBA,eAAe,YAAA,CAAa,UAAkBC,QAAAA,EAAqC;AACjF,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAMC,iBAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAChD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,SAAA,CAAU,IAAI,CAAA;AAE1C,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,MAAA,IAAU,CAAA;AACnD,MAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,MAAA;AAAA,QACzC,CAAC,GAAA,EAAKC,EAAAA,KAAM,GAAA,IAAOA,EAAAA,CAAE,WAAW,MAAA,IAAU,CAAA,CAAA;AAAA,QAC1C;AAAA,OACF,IAAK,CAAA;AACL,MAAA,OAAA,CAAQ,IAAI,uBAAA,CAAwBC,aAAA,CAAS,QAAQ,CAAA,EAAG,WAAA,EAAa,aAAa,CAAC,CAAA;AACnF,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,MAAO;AACL,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,KAAA,MAAU;AAAA,QAC/C,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,SAAS,KAAA,CAAM;AAAA,OACjB,CAAE,CAAA;AACF,MAAA,OAAA,CAAQ,GAAA,CAAI,qBAAA,CAAsBA,aAAA,CAAS,QAAQ,CAAA,EAAGH,QAAAA,GAAU,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AAC5F,MAAA,IAAI,CAACA,QAAAA,IAAW,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACjC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAAA,CAA2C,CAAA;AAAA,MACvF;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAA,CAAQ,GAAA,CAAI,qBAAA,CAAsBG,aAAA,CAAS,QAAQ,CAAA,EAAG;AAAA,MACpD,EAAE,IAAA,EAAM,IAAI,OAAA,EAAS,CAAA,aAAA,EAAgB,OAAO,CAAA,CAAA;AAAG,KAChD,CAAC,CAAA;AACF,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAKA,eAAe,iBAAA,CAAkB,SAAiBH,QAAAA,EAAqC;AACrF,EAAA,MAAM,KAAA,GAAQ,MAAMI,gBAAA,CAAQ,OAAO,CAAA;AACnC,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,CAAAC,OAAKA,EAAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AAEvD,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,uBAAA,EAA0B,OAAO,CAAA,CAAE,CAAA;AAC/C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAK,IAAA,CAAK,KAAK,YAAY,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAA,UAAA,EAAa,OAAO;AAAA,CAAI,CAAA;AAErF,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,KAAA,MAAW,IAAA,IAAQ,SAAA,CAAU,IAAA,EAAK,EAAG;AACnC,IAAA,MAAM,QAAA,GAAWC,SAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,MAAM,YAAA,CAAa,QAAA,EAAUN,QAAO,CAAA;AACpD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAA,EAAA;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,EAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAc,MAAA,EAAQ,MAAM,CAAC,CAAA;AACzC,EAAA,OAAO,MAAA,KAAW,CAAA;AACpB;AAKA,eAAsB,eAAA,CACpB,WACA,OAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAMO,aAAA,CAAK,SAAS,CAAA;AAElC,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,MAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,SAAA,EAAW,QAAQ,OAAO,CAAA;AAClE,MAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,GAAU,UAAA,CAAW,OAAA,GAAU,WAAW,gBAAgB,CAAA;AAAA,IACzE,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,EAAO,EAAG;AACzB,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAK,IAAA,CAAK,KAAK,YAAY,CAAC,CAAC,CAAA,CAAA,EAAIJ,aAAA,CAAS,SAAS,CAAC;AAAA,CAAI,CAAA;AACpE,MAAA,MAAM,OAAA,GAAU,MAAM,YAAA,CAAa,SAAA,EAAW,QAAQ,OAAO,CAAA;AAC7D,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA;AAAA,CAAmC,CAAA;AAAA,MAC3E;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,GAAU,UAAA,CAAW,OAAA,GAAU,WAAW,gBAAgB,CAAA;AAAA,IACzE,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,cAAA,EAAiB,SAAS,CAAA,CAAE,CAAA;AAC1C,MAAA,OAAA,CAAQ,IAAA,CAAK,WAAW,WAAW,CAAA;AAAA,IACrC;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAK,KAAA,CAAgC,SAAS,QAAA,EAAU;AACtD,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,6BAAA,EAAgC,SAAS,CAAA,CAAE,CAAA;AACzD,MAAA,OAAA,CAAQ,IAAA,CAAK,WAAW,WAAW,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;;;ACwBA,SAAS,aAAa,MAAA,EAAyB;AAC7C,EAAA,OAAO;AAAA,IACL,KAAA,CAAM,SAAiB,IAAA,EAAgB;AACrC,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE,CAAA;AAAA,MACvD;AAAA,IACF,CAAA;AAAA,IACA,KAAK,OAAA,EAAiB;AACpB,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE,CAAA;AAAA,MAC5C;AAAA,IACF,CAAA;AAAA,IACA,KAAA,CAAM,OAAc,OAAA,EAAiB;AACnC,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAA,CAAA,EAAK,MAAM,OAAO,CAAA;AAAA,MAC7D;AACA,MAAA,MAAA,CAAO,OAAA,GAAU,OAAO,OAAO,CAAA;AAAA,IACjC;AAAA,GACF;AACF;AASA,IAAM,cAAN,MAAkB;AAAA;AAAA,EAMhB,WAAA,CAAY,mBAA2B,aAAA,EAAuB;AAC5D,IAAA,IAAA,CAAK,SAAA,GAAY,aAAA;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,aAAA;AACd,IAAA,IAAA,CAAK,aAAa,iBAAA,GAAoB,GAAA;AACtC,IAAA,IAAA,CAAK,UAAA,GAAa,KAAK,GAAA,EAAI;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,IAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;AACpB,MAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAA,CAAM,IAAI,IAAA,CAAK,MAAA,IAAU,KAAK,UAAU,CAAA;AAC9D,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAAK,aAAW,UAAA,CAAWA,QAAAA,EAAS,QAAQ,CAAC,CAAA;AAC1D,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AAAA,EACjB;AAAA,EAEQ,MAAA,GAAe;AACrB,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,GAAA,CAAI,IAAA,CAAK,WAAW,IAAA,CAAK,MAAA,GAAS,OAAA,GAAU,IAAA,CAAK,UAAU,CAAA;AAC9E,IAAA,IAAA,CAAK,UAAA,GAAa,GAAA;AAAA,EACpB;AACF,CAAA;AAWA,SAAS,iBAAiB,IAAA,EAAuB;AAC/C,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AAE9C,EAAA,MAAM,OAAA,GAAU,sCAAA;AAChB,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,IAAK,KAAK,MAAA,IAAU,GAAA;AAC9C;AAKA,SAAS,gBAAgB,MAAA,EAAyB;AAChD,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,UAAU,OAAO,KAAA;AAClD,EAAA,MAAM,OAAA,GAAU,cAAA;AAChB,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,IAAK,OAAO,MAAA,IAAU,EAAA;AAClD;AASA,SAAS,kBAAkB,IAAA,EAAmC;AAC5D,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,OACE,OAAO,GAAA,CAAI,KAAA,KAAU,YACrB,GAAA,CAAI,KAAA,KAAU,QACd,OAAQ,GAAA,CAAI,MAAkC,MAAA,KAAW,QAAA,IACzD,MAAM,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,IAC3B,OAAO,IAAI,cAAA,KAAmB,QAAA;AAElC;AAKA,SAAS,oBAAoB,IAAA,EAAqC;AAChE,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,OAAO,OAAO,GAAA,CAAI,OAAA,KAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AACrE;AAKA,SAAS,qBAAqB,IAAA,EAAiD;AAC7E,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AACpC;AAMA,IAAM,gBAAA,GAAmB,sCAAA;AAKlB,SAAS,sBAAsB,MAAA,EAAyB;AAC7D,EAAA,MAAM,OAAA,GAAU,OAAO,OAAA,IAAW,gBAAA;AAClC,EAAA,MAAMC,MAAAA,uBAAY,GAAA,EAAqB;AACvC,EAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAY,MAAA,CAAO,aAAa,EAAA,EAAI,MAAA,CAAO,kBAAkB,EAAE,CAAA;AACvF,EAAA,MAAMC,IAAAA,GAAM,aAAa,MAAM,CAAA;AAE/B,EAAAA,IAAAA,CAAI,MAAM,8BAAA,EAAgC,EAAE,SAAS,YAAA,EAAc,MAAA,CAAO,cAAc,CAAA;AASxF,EAAA,eAAe,SAAA,CACb,MACA,SAAA,EACY;AACZ,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA;AAE7B,IAAA,IAAI,MAAA,CAAO,YAAA,IAAgBD,MAAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAG;AACzC,MAAAC,IAAAA,CAAI,KAAA,CAAM,WAAA,EAAa,IAAI,CAAA;AAC3B,MAAA,OAAOD,MAAAA,CAAM,IAAI,GAAG,CAAA;AAAA,IACtB;AAGA,IAAA,MAAM,YAAY,OAAA,EAAQ;AAE1B,IAAAC,IAAAA,CAAI,KAAA,CAAM,UAAA,EAAY,IAAI,CAAA;AAC1B,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAChC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE7B,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,GAAG,CAAA,EAAA,EAAK,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACpE,MAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE,CAAA;AAChC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAAA,IAAAA,CAAI,KAAA,CAAM,CAAA,WAAA,EAAc,OAAO,MAAM,IAAI,CAAA;AAEzC,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,MAAM,SAAS,IAAA,EAAK;AAAA,IAC7B,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAE,CAAA;AAC3D,MAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE,CAAA;AAChC,MAAA,MAAM,KAAA;AAAA,IACR;AAGA,IAAA,IAAI,SAAA,IAAa,CAAC,SAAA,CAAU,IAAI,CAAA,EAAG;AACjC,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,GAAG,CAAA,CAAE,CAAA;AAC5D,MAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,CAAA,SAAA,EAAY,IAAI,CAAA,CAAE,CAAA;AACnC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAI,OAAO,YAAA,EAAc;AACvB,MAAAD,MAAAA,CAAM,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA;AACnB,MAAAC,IAAAA,CAAI,KAAA,CAAM,QAAA,EAAU,IAAI,CAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaL,MAAM,WAAW,SAAA,EAAgD;AAE/D,MAAA,IAAI,CAAC,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAChC,QAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,qBAAA,EAAwB,SAAS,CAAA,CAAA,CAAG,CAAA;AAC7C,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,IAAI;AACF,QAAA,MAAMZ,SAAQ,MAAM,SAAA;AAAA,UAClB,iCAAiC,SAAS,CAAA,KAAA,CAAA;AAAA,UAC1C;AAAA,SACF;AACA,QAAAY,KAAI,KAAA,CAAM,CAAA,oBAAA,EAAuBZ,OAAM,SAAA,CAAU,MAAM,cAAc,SAAS,CAAA;AAC9E,QAAA,OAAOA,MAAAA,CAAM,SAAA;AAAA,MACf,SAAS,KAAA,EAAO;AAEd,QAAAY,IAAAA,CAAI,KAAA,CAAM,CAAA,wBAAA,CAAA,EAA4B,SAAS,CAAA;AAC/C,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,YAAY,MAAA,EAA6C;AAE7D,MAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC5B,QAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,oBAAA,EAAuB,MAAM,CAAA,CAAA,CAAG,CAAA;AACzC,QAAA,OAAO,EAAC;AAAA,MACV;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAWlB,iDAAiD,CAAA;AAGpD,MAAA,IAAI,CAAC,oBAAA,CAAqB,MAAM,CAAA,EAAG;AACjC,QAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,MACzD;AAEA,MAAA,OAAO,MAAA,CAAO,SAAA,CACX,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,MAAA,EAAQ,IAAA,CAAK,CAAAC,EAAAA,KAAKA,GAAE,aAAA,KAAkB,MAAM,CAAC,CAAA,CAC3D,IAAI,CAAA,CAAA,MAAM;AAAA,QACT,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,UAAU,CAAA,CAAE,QAAA;AAAA,QACZ,UAAU,CAAA,CAAE,QAAA;AAAA,QACZ,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,cAAc,CAAA,CAAE,YAAA;AAAA,QAChB,UAAA,EAAY,EAAE,QAAA,EAAU,UAAA;AAAA,QACxB,MAAM,CAAA,CAAE;AAAA,OACV,CAAE,CAAA;AAAA,IACN,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,OAAO,OAAA,EAAwD;AACnE,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAWlB,iDAAiD,CAAA;AAGpD,MAAA,IAAI,CAAC,oBAAA,CAAqB,MAAM,CAAA,EAAG;AACjC,QAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,MACzD;AAEA,MAAA,IAAI,UAAU,MAAA,CAAO,SAAA;AAGrB,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,UAAO,CAAA,CAAA,KACvB,EAAE,MAAA,EAAQ,IAAA,CAAK,CAAAA,EAAAA,KAAKA,EAAAA,CAAE,aAAA,KAAkB,OAAA,CAAQ,MAAM;AAAA,SACxD;AAAA,MACF;AACA,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,UAAO,CAAA,CAAA,KACvB,EAAE,MAAA,EAAQ,IAAA,CAAK,CAAAA,EAAAA,KAAKA,EAAAA,CAAE,aAAA,KAAkB,OAAA,CAAQ,MAAM;AAAA,SACxD;AAAA,MACF;AACA,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,UAAO,CAAA,CAAA,KACvB,EAAE,MAAA,EAAQ,IAAA,CAAK,CAAAA,EAAAA,KAAKA,EAAAA,CAAE,YAAA,KAAiB,OAAA,CAAQ,KAAK;AAAA,SACtD;AAAA,MACF;AACA,MAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,QAAA,OAAA,GAAU,QAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,QAAA,EAAU,UAAA,KAAe,QAAQ,UAAU,CAAA;AAAA,MAC7E;AACA,MAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,QAAA,OAAA,GAAU,QAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,UAAA,KAAe,QAAQ,UAAU,CAAA;AAAA,MACnE;AAGA,MAAA,MAAMC,OAAAA,GAAS,QAAQ,MAAA,IAAU,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,GAAA;AAC/B,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAMA,OAAAA,EAAQA,OAAAA,GAAS,KAAK,CAAA;AAE9C,MAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,CAAA,MAAM;AAAA,QACvB,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,UAAU,CAAA,CAAE,QAAA;AAAA,QACZ,UAAU,CAAA,CAAE,QAAA;AAAA,QACZ,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,cAAc,CAAA,CAAE,YAAA;AAAA,QAChB,UAAA,EAAY,EAAE,QAAA,EAAU,UAAA;AAAA,QACxB,MAAM,CAAA,CAAE;AAAA,OACV,CAAE,CAAA;AAAA,IACJ,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA,GAAa;AACX,MAAAH,OAAM,KAAA,EAAM;AACZ,MAAAC,IAAAA,CAAI,MAAM,yBAAyB,CAAA;AAAA,IACrC;AAAA,GACF;AACF;AASO,SAAS,qBAAqB,MAAA,EAAyB;AAC5D,EAAA,MAAM,OAAA,GAAU,OAAO,OAAA,IAAW,gBAAA;AAClC,EAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAY,MAAA,CAAO,aAAa,EAAA,EAAI,MAAA,CAAO,kBAAkB,EAAE,CAAA;AACvF,EAAA,MAAMA,IAAAA,GAAM,aAAa,MAAM,CAAA;AAC/B,EAAA,IAAI,cAAA,GAAsC,IAAA;AAE1C,EAAAA,IAAAA,CAAI,KAAA,CAAM,6BAAA,EAA+B,EAAE,SAAS,CAAA;AAKpD,EAAA,eAAe,aAAA,GAAuC;AACpD,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAAA,IAAAA,CAAI,MAAM,oBAAoB,CAAA;AAC9B,MAAA,OAAO,cAAA;AAAA,IACT;AAGA,IAAA,MAAM,YAAY,OAAA,EAAQ;AAE1B,IAAAA,IAAAA,CAAI,MAAM,mBAAmB,CAAA;AAC7B,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,yCAAA,CAA2C,CAAA;AAClF,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE7B,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,QAAQ,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACtE,MAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,eAAe,CAAA;AAChC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAAA,IAAAA,CAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,EAAA,CAAI,CAAA;AAE5C,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,MAAM,SAAS,IAAA,EAAK;AAAA,IAC7B,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,8CAA8C,CAAA;AACtE,MAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,eAAe,CAAA;AAChC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAI,CAAC,mBAAA,CAAoB,IAAI,CAAA,EAAG;AAC9B,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,iCAAiC,CAAA;AACzD,MAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,kBAAkB,CAAA;AACnC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAAA,KAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,QAAA,CAAU,CAAA;AAC3D,IAAA,cAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,cAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAML,MAAM,SAAA,GAAmC;AACvC,MAAA,OAAO,aAAA,EAAc;AAAA,IACvB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,UAAA,GAAoC;AACxC,MAAA,MAAM,QAAA,GAAW,MAAM,aAAA,EAAc;AACrC,MAAA,OAAO,QAAA,CAAS,OAAA;AAAA,IAClB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,WAAW,MAAA,EAAuC;AAEtD,MAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC5B,QAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,oBAAA,EAAuB,MAAM,CAAA,CAAA,CAAG,CAAA;AACzC,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,aAAA,EAAc;AACrC,MAAA,MAAM,UAAA,GAAa,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAAG,EAAAA,KAAKA,EAAAA,CAAE,OAAO,MAAM,CAAA;AAC7D,MAAA,MAAM,OAAA,GAAU,UAAA,EAAY,OAAA,IAAW,EAAC;AACxC,MAAAH,KAAI,KAAA,CAAM,CAAA,WAAA,EAAc,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,MAAM,CAAA,QAAA,CAAU,CAAA;AAC5D,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,MAAM,kBAAA,CAAmB,MAAA,EAAgB,MAAA,EAAsC;AAE7E,MAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,KAAK,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AACxD,QAAAA,KAAI,IAAA,CAAK,CAAA,8BAAA,EAAiC,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAC7D,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AAC5C,MAAA,MAAM,aAAa,OAAA,CAAQ,IAAA,CAAK,CAAAI,EAAAA,KAAKA,EAAAA,CAAE,OAAO,MAAM,CAAA;AACpD,MAAA,MAAM,MAAA,GAAS,UAAA,EAAY,MAAA,IAAU,EAAC;AACtC,MAAAJ,IAAAA,CAAI,MAAM,CAAA,mBAAA,EAAsB,MAAM,IAAI,MAAM,CAAA,GAAA,EAAM,MAAA,CAAO,MAAM,CAAA,OAAA,CAAS,CAAA;AAC5E,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,cAAA,GAAiD;AAErD,MAAA,MAAM,YAAY,OAAA,EAAQ;AAE1B,MAAAA,IAAAA,CAAI,MAAM,uBAAuB,CAAA;AACjC,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,GAAG,OAAO,CAAA,+CAAA;AAAA,OACZ;AACA,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE7B,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,QAAQ,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAC1E,QAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,kBAAkB,CAAA;AACnC,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAAA,IAAAA,CAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,OAAO,CAAA,EAAA,CAAI,CAAA;AAEhD,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,MAAM,SAAS,IAAA,EAAK;AAAA,MAC7B,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,kDAAkD,CAAA;AAC1E,QAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,kBAAkB,CAAA;AACnC,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,IAAI,CAAC,QAAQ,OAAO,IAAA,KAAS,YAAY,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC5D,QAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,qCAAqC,CAAA;AAC7D,QAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,qBAAqB,CAAA;AACtC,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA;AACvC,MAAAA,IAAAA,CAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,YAAY,CAAA,SAAA,CAAW,CAAA;AACzD,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA,GAAa;AACX,MAAA,cAAA,GAAiB,IAAA;AACjB,MAAAA,IAAAA,CAAI,MAAM,wBAAwB,CAAA;AAAA,IACpC;AAAA,GACF;AACF;AC3pBO,IAAM,6BAAA,GAAgCb,MAAE,IAAA,CAAK;AAAA,EAClD,MAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,cAAA;AAAA;AAAA,EACA,QAAA;AAAA;AAAA,EACA;AAAA;AACF,CAAC,CAAA;AAQM,IAAM,gBAAA,GAAmBA,MAAE,IAAA,CAAK;AAAA,EACrC,oBAAA;AAAA;AAAA,EACA,sBAAA;AAAA;AAAA,EACA,sBAAA;AAAA;AAAA,EACA,wBAAA;AAAA;AAAA,EACA;AAAA;AACF,CAAC,CAAA;AAQM,IAAM,yBAAA,GAA4BA,MAAE,MAAA,CAAO;AAAA,EAChD,KAAA,EAAO,6BAAA;AAAA,EACP,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA;AAAA;AAAA,EACxC,SAAA,EAAW,gBAAA;AAAA,EACX,SAAA,EAAWA,MAAE,MAAA,EAAO;AAAA,EACpB,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,EACnB,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EACnC,OAAA,EAASA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA;AAAS;AAChD,CAAC,CAAA;AAQM,IAAM,kBAAkBA,KAAAA,CAAE,IAAA,CAAK,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AACzC,IAAM,oBAAoBA,KAAAA,CAAE,IAAA,CAAK,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AAChD,IAAM,mBAAA,GAAsBA,MAAE,IAAA,CAAK,CAAC,OAAO,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAEpE,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EAC1C,KAAA,EAAO,eAAA;AAAA,EACP,OAAA,EAAS,kBAAkB,QAAA,EAAS;AAAA,EACpC,eAAA,EAAiBA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,GAAI,CAAA,CAAE,GAAA,CAAI,IAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACxE,aAAaA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAC1C,aAAA,EAAe,oBAAoB,QAAA;AACrC,CAAC,CAAA;AAQM,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,QAAA,EAAUA,MAAE,MAAA;AACd,CAAC,CAAA;AAEM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,EAAA,EAAI,mBAAA;AAAA;AAAA,EACJ,EAAA,EAAI,mBAAA;AAAA;AAAA,EACJ,EAAA,EAAI,oBAAoB,QAAA;AAAS;AACnC,CAAC,CAAA;AAQM,IAAM,cAAA,GAAiBA,MAAE,KAAA,CAAM;AAAA,EACpCA,KAAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,EACXA,KAAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,EACXA,KAAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,EACXA,KAAAA,CAAE,QAAQ,CAAC;AACb,CAAC,CAAA;AAEM,IAAM,gBAAA,GAAmBA,MAAE,KAAA,CAAM;AAAA,EACtCA,KAAAA,CAAE,QAAQ,CAAC,CAAA;AAAA;AAAA,EACXA,KAAAA,CAAE,QAAQ,CAAC,CAAA;AAAA;AAAA,EACXA,KAAAA,CAAE,QAAQ,CAAC,CAAA;AAAA;AAAA,EACXA,KAAAA,CAAE,QAAQ,CAAC,CAAA;AAAA;AAAA,EACXA,KAAAA,CAAE,QAAQ,CAAC,CAAA;AAAA;AAAA,EACXA,KAAAA,CAAE,QAAQ,CAAC;AAAA;AACb,CAAC,CAAA;AAEM,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EAC1C,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,EAAE,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA;AAAA,EAC/B,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,GAAG,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA;AAAA,EAClC,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA,CAAE,QAAA,EAAS;AAAA;AAAA,EAC5C,SAAA,EAAW,cAAA;AAAA,EACX,WAAA,EAAa,gBAAA;AAAA,EACb,iBAAA,EAAmBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAChC,CAAC,CAAA;AAQM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,aAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACvC,cAAA,EAAgBA,MAAE,MAAA,EAAO;AAAA,EACzB,cAAA,EAAgBA,MAAE,MAAA,EAAO;AAAA,EACzB,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAChC,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA;AAAS;AAC9C,CAAC,CAAA;AAQM,IAAM,2BAAA,GAA8BA,MAAE,MAAA,CAAO;AAAA;AAAA,EAElD,EAAA,EAAIA,MAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGnC,UAAA,EAAY,yBAAA;AAAA;AAAA,EAGZ,aAAA,EAAe,oBAAoB,QAAA,EAAS;AAAA;AAAA,EAG5C,UAAA,EAAY,mBAAA;AAAA;AAAA,EAGZ,YAAA,EAAc,kBAAA;AAAA;AAAA,EAGd,QAAA,EAAUA,MAAE,MAAA,CAAO;AAAA,IACjB,YAAA,EAAcA,MAAE,MAAA,EAAO;AAAA,IACvB,KAAA,EAAOA,KAAAA,CAAE,KAAA,CAAM,kBAAkB,CAAA;AAAA,IACjC,qBAAqBA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,IAClD,eAAeA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;AAAS,GAC7C,CAAA;AAAA;AAAA,EAGD,MAAMA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACnC,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,OAAO,CAAA;AAAA,EACnC,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACzB,CAAC,CAAA;AAQ6CA,MAAE,MAAA,CAAO;AAAA,EACrD,KAAA,EAAO,8BAA8B,QAAA,EAAS;AAAA,EAC9C,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC9C,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC9C,MAAA,EAAQ,iBAAiB,QAAA,EAAS;AAAA,EAClC,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,OAAA,EAASA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA;AAAA,EAG9C,SAAA,EAAW,eAAe,QAAA,EAAS;AAAA,EACnC,WAAA,EAAa,iBAAiB,QAAA,EAAS;AAAA,EACvC,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAG/B,KAAA,EAAO,gBAAgB,QAAA,EAAS;AAAA,EAChC,OAAA,EAAS,kBAAkB,QAAA,EAAS;AAAA;AAAA,EAGpC,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,GAAA,CAAI,GAAI,CAAA,CAAE,QAAA,EAAS;AAAA,EACtD,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA;AAClC,CAAC;AAQuCA,MAAE,MAAA,CAAO;AAAA,EAC/C,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,EACxB,YAAA,EAAcA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA,EACtC,SAAA,EAAWA,MAAE,MAAA,CAAO;AAAA,IAClB,mBAAmBA,KAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,EAAE,CAAA;AAAA,IACnD,eAAeA,KAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,EAAE;AAAA,GAChD,EAAE,QAAA,EAAS;AAAA,EACZ,KAAA,EAAOA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA,EAChC,OAAA,EAASA,KAAAA,CAAE,QAAA,EAAS,CAAE,KAAKA,KAAAA,CAAE,GAAA,EAAK,CAAA,CAAE,OAAA,CAAQA,KAAAA,CAAE,IAAA,EAAM,EAAE,QAAA;AACxD,CAAC;AAQ4CA,MAAE,MAAA,CAAO;AAAA,EACpD,KAAA,EAAO,6BAAA;AAAA,EACP,iBAAiBA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EAC3C,YAAA,EAAcA,MAAE,MAAA,EAAO;AAAA,EACvB,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAM,2BAA2B;AAChD,CAAC;AAIkCA,MAAE,MAAA,CAAO;AAAA,EAC1C,EAAA,EAAIA,MAAE,MAAA,EAAO;AAAA,EACb,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,cAAA,EAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,cAAA,EAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,OAAOA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACpC,OAAOA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACpC,WAAWA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACxC,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACtD,iBAAiBA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA;AACpC,CAAC;AAImCA,MAAE,MAAA,CAAO;AAAA,EAC3C,EAAA,EAAI,gBAAA;AAAA,EACJ,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA;AAAA,EAC3B,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAM,6BAA6B,EAAE,QAAA;AACjD,CAAC;;;AC1MD,SAASkB,cAAa,MAAA,EAA4B;AAChD,EAAA,OAAO;AAAA,IACL,KAAA,CAAM,SAAiB,IAAA,EAAgB;AACrC,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmB,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE,CAAA;AAAA,MACtD;AAAA,IACF,CAAA;AAAA,IACA,KAAK,OAAA,EAAiB;AACpB,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,gBAAA,EAAmB,OAAO,CAAA,CAAE,CAAA;AAAA,MAC3C;AAAA,IACF,CAAA;AAAA,IACA,KAAA,CAAM,OAAc,OAAA,EAAiB;AACnC,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,gBAAA,EAAmB,OAAO,CAAA,CAAA,CAAA,EAAK,MAAM,OAAO,CAAA;AAAA,MAC5D;AACA,MAAA,MAAA,CAAO,OAAA,GAAU,OAAO,OAAO,CAAA;AAAA,IACjC;AAAA,GACF;AACF;AAMA,IAAMC,eAAN,MAAkB;AAAA,EAMhB,WAAA,CAAY,mBAA2B,aAAA,EAAuB;AAC5D,IAAA,IAAA,CAAK,SAAA,GAAY,aAAA;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,aAAA;AACd,IAAA,IAAA,CAAK,aAAa,iBAAA,GAAoB,GAAA;AACtC,IAAA,IAAA,CAAK,UAAA,GAAa,KAAK,GAAA,EAAI;AAAA,EAC7B;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,IAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;AACpB,MAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAA,CAAM,IAAI,IAAA,CAAK,MAAA,IAAU,KAAK,UAAU,CAAA;AAC9D,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAAR,aAAW,UAAA,CAAWA,QAAAA,EAAS,QAAQ,CAAC,CAAA;AAC1D,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AAAA,EACjB;AAAA,EAEQ,MAAA,GAAe;AACrB,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,GAAA,CAAI,IAAA,CAAK,WAAW,IAAA,CAAK,MAAA,GAAS,OAAA,GAAU,IAAA,CAAK,UAAU,CAAA;AAC9E,IAAA,IAAA,CAAK,UAAA,GAAa,GAAA;AAAA,EACpB;AACF,CAAA;AAMA,SAAS,eAAe,EAAA,EAA4C;AAClE,EAAA,OAAO,6BAAA,CAA8B,SAAA,CAAU,EAAE,CAAA,CAAE,OAAA;AACrD;AAEA,SAASS,iBAAgB,EAAA,EAA+B;AACtD,EAAA,OAAO,gBAAA,CAAiB,SAAA,CAAU,EAAE,CAAA,CAAE,OAAA;AACxC;AAEA,SAAS,kBAAkB,GAAA,EAA6B;AACtD,EAAA,OAAO,OAAO,QAAQ,QAAA,IAAY,MAAA,CAAO,UAAU,GAAG,CAAA,IAAK,GAAA,IAAO,CAAA,IAAK,GAAA,IAAO,CAAA;AAChF;AAMA,SAAS,kBAAkB,IAAA,EAAoD;AAC7E,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACjC;AAEA,SAAS,mBAAmB,IAAA,EAAsD;AAChF,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AAClC;AA6BO,SAAS,yBAAyB,MAAA,EAA4B;AACnE,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,EAAA,MAAMR,MAAAA,uBAAY,GAAA,EAAqB;AACvC,EAAA,MAAM,cAAc,IAAIO,YAAAA;AAAA,IACtB,MAAA,CAAO,WAAW,iBAAA,IAAqB,EAAA;AAAA,IACvC,MAAA,CAAO,WAAW,aAAA,IAAiB;AAAA,GACrC;AACA,EAAA,MAAMN,IAAAA,GAAMK,cAAa,MAAM,CAAA;AAE/B,EAAAL,IAAAA,CAAI,MAAM,mCAAA,EAAqC,EAAE,SAAS,YAAA,EAAc,MAAA,CAAO,cAAc,CAAA;AAK7F,EAAA,eAAe,SAAA,CACb,MACA,SAAA,EACY;AACZ,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA;AAE7B,IAAA,IAAI,MAAA,CAAO,YAAA,IAAgBD,MAAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAG;AACzC,MAAAC,IAAAA,CAAI,KAAA,CAAM,WAAA,EAAa,IAAI,CAAA;AAC3B,MAAA,OAAOD,MAAAA,CAAM,IAAI,GAAG,CAAA;AAAA,IACtB;AAEA,IAAA,MAAM,YAAY,OAAA,EAAQ;AAE1B,IAAAC,IAAAA,CAAI,KAAA,CAAM,UAAA,EAAY,IAAI,CAAA;AAC1B,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAChC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE7B,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,GAAG,CAAA,EAAA,EAAK,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACpE,MAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE,CAAA;AAChC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAAA,IAAAA,CAAI,KAAA,CAAM,CAAA,WAAA,EAAc,OAAO,MAAM,IAAI,CAAA;AAEzC,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,MAAM,SAAS,IAAA,EAAK;AAAA,IAC7B,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAE,CAAA;AAC3D,MAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE,CAAA;AAChC,MAAA,MAAM,KAAA;AAAA,IACR;AAQA,IAAA,IAAI,OAAO,YAAA,EAAc;AACvB,MAAAD,MAAAA,CAAM,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA;AACnB,MAAAC,IAAAA,CAAI,KAAA,CAAM,QAAA,EAAU,IAAI,CAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaL,MAAM,WAAW,KAAA,EAAkE;AACjF,MAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG;AAC1B,QAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,0BAAA,EAA6B,KAAK,CAAA,CAAA,CAAG,CAAA;AAC9C,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,MAAM,SAAA;AAAA,UACjB,6CAA6C,KAAK,CAAA,KAAA;AAAA,SACpD;AACA,QAAAA,KAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,KAAK,SAAA,CAAU,MAAM,cAAc,KAAK,CAAA;AACzE,QAAA,OAAO,IAAA,CAAK,SAAA;AAAA,MACd,SAAS,KAAA,EAAO;AACd,QAAAA,IAAAA,CAAI,KAAA,CAAM,CAAA,wBAAA,CAAA,EAA4B,KAAK,CAAA;AAC3C,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkBA,MAAM,gBAAgB,KAAA,EAA0D;AAC9E,MAAA,IAAI,CAAC,cAAA,CAAe,KAAA,CAAM,KAAK,CAAA,EAAG;AAChC,QAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,0BAAA,EAA6B,KAAA,CAAM,KAAK,CAAA,CAAA,CAAG,CAAA;AACpD,QAAA,OAAO,EAAC;AAAA,MACV;AAGA,MAAA,IAAI,IAAA,GAAO,CAAA,iDAAA,EAAoD,KAAA,CAAM,KAAK,CAAA,CAAA;AAE1E,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,IAAI,CAACO,gBAAAA,CAAgB,KAAA,CAAM,MAAM,CAAA,EAAG;AAClC,UAAAP,IAAAA,CAAI,IAAA,CAAK,CAAA,iBAAA,EAAoB,KAAA,CAAM,MAAM,CAAA,CAAA,CAAG,CAAA;AAC5C,UAAA,OAAO,EAAC;AAAA,QACV;AACA,QAAA,IAAA,IAAQ,CAAA,CAAA,EAAI,MAAM,MAAM,CAAA,CAAA;AAAA,MAC1B;AAEA,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,IAAA,IAAQ,CAAA,CAAA,EAAI,MAAM,MAAM,CAAA,CAAA;AAAA,MAC1B;AAEA,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,IAAA,IAAQ,CAAA,CAAA,EAAI,MAAM,KAAK,CAAA,CAAA;AAAA,MACzB;AAEA,MAAA,IAAA,IAAQ,OAAA;AAER,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAkD,IAAI,CAAA;AAGzE,QAAA,IAAI,YAAY,IAAA,CAAK,SAAA;AAErB,QAAA,IAAI,KAAA,CAAM,SAAS,KAAA,CAAA,EAAW;AAC5B,UAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,SAAA,KAAc,MAAM,IAAI,CAAA;AAAA,QACzE;AAEA,QAAA,IAAI,KAAA,CAAM,SAAS,KAAA,CAAA,EAAW;AAC5B,UAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,SAAA,KAAc,MAAM,IAAI,CAAA;AAAA,QACzE;AAEA,QAAA,IAAI,KAAA,CAAM,YAAY,KAAA,CAAA,EAAW;AAC/B,UAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,OAAA,KAAY,MAAM,OAAO,CAAA;AAAA,QAC1E;AAEA,QAAAA,KAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,SAAA,CAAU,MAAM,cAAc,KAAK,CAAA;AACzE,QAAA,OAAO,SAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAAA,IAAAA,CAAI,KAAA,CAAM,yBAAA,EAA2B,KAAK,CAAA;AAC1C,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkBA,MAAM,UAAU,KAAA,EAAoD;AAClE,MAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,cAAA;AAE7B,MAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG;AAC1B,QAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,0BAAA,EAA6B,KAAK,CAAA,CAAA,CAAG,CAAA;AAC9C,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,IAAI,IAAA,GAAO,CAAA,2CAAA,EAA8C,KAAK,CAAA,OAAA,EAAU,MAAM,KAAK,CAAA,CAAA;AAEnF,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,IAAA,IAAQ,CAAA,SAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAa,CAAA,CAAA;AAAA,MACjD;AAEA,MAAA,IAAA,IAAQ,OAAA;AAER,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAkD,IAAI,CAAA;AACzE,QAAAA,KAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,KAAK,SAAA,CAAU,MAAM,cAAc,KAAK,CAAA;AACxE,QAAA,OAAO,IAAA,CAAK,SAAA;AAAA,MACd,SAAS,KAAA,EAAO;AACd,QAAAA,IAAAA,CAAI,KAAA,CAAM,mBAAA,EAAqB,KAAK,CAAA;AACpC,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAmBA,MAAM,OAAO,OAAA,EAIV;AAED,MAAA,IAAI,SAAA;AAEJ,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,SAAA,GAAY,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,KAAK,CAAA;AAAA,MACjD,CAAA,MAAO;AAEL,QAAA,IAAI;AACF,UAAA,MAAM,OAAO,MAAM,SAAA;AAAA,YACjB;AAAA,WACF;AACA,UAAA,SAAA,GAAY,IAAA,CAAK,SAAA;AAAA,QACnB,CAAA,CAAA,MAAQ;AACN,UAAA,SAAA,GAAY,EAAC;AAAA,QACf;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAW;AAC9B,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,SAAA,KAAc,QAAQ,IAAI,CAAA;AAAA,MAC3E;AAEA,MAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAW;AAC9B,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,SAAA,KAAc,QAAQ,IAAI,CAAA;AAAA,MAC3E;AAEA,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,SAAA,KAAc,QAAQ,MAAM,CAAA;AAAA,MAC7E;AAEA,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,SAAA,KAAc,QAAQ,MAAM,CAAA;AAAA,MAC7E;AAEA,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,QAAA,KAAa,QAAQ,KAAK,CAAA;AAAA,MAC3E;AAEA,MAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,OAAA,KAAY,QAAQ,OAAO,CAAA;AAAA,MAC5E;AAEA,MAAA,IAAI,OAAA,CAAQ,cAAc,MAAA,EAAW;AACnC,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,SAAA,KAAc,QAAQ,SAAS,CAAA;AAAA,MAChF;AAEA,MAAA,IAAI,OAAA,CAAQ,gBAAgB,MAAA,EAAW;AACrC,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,WAAA,KAAgB,QAAQ,WAAW,CAAA;AAAA,MACpF;AAEA,MAAA,IAAI,OAAA,CAAQ,cAAc,MAAA,EAAW;AACnC,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,KAAA,IAAS,QAAQ,SAAU,CAAA;AAAA,MAC5E;AAEA,MAAA,IAAI,OAAA,CAAQ,cAAc,MAAA,EAAW;AACnC,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,UAAA,CAAW,KAAA,IAAS,QAAQ,SAAU,CAAA;AAAA,MAC5E;AAEA,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,aAAA,EAAe,KAAA,KAAU,QAAQ,KAAK,CAAA;AAAA,MAC5E;AAEA,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,aAAA,EAAe,OAAA,KAAY,QAAQ,OAAO,CAAA;AAAA,MAChF;AAGA,MAAA,MAAM,QAAQ,SAAA,CAAU,MAAA;AACxB,MAAA,MAAME,OAAAA,GAAS,QAAQ,MAAA,IAAU,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,GAAA;AAC/B,MAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAMA,OAAAA,EAAQA,UAAS,KAAK,CAAA;AAExD,MAAAF,IAAAA,CAAI,MAAM,CAAA,gBAAA,EAAmB,SAAA,CAAU,MAAM,CAAA,CAAA,EAAI,KAAK,cAAc,OAAO,CAAA;AAE3E,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,SAAA;AAAA,QACX,KAAA;AAAA,QACA,OAAA,EAASE,UAAS,KAAA,GAAQ;AAAA,OAC5B;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,MAAM,kBAAA,CACJ,KAAA,EACA,OAAA,EACkC;AAClC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,GAAA,EAAM,CAAA;AAG5D,MAAA,MAAM,QAAA,GAAW,CAAC,GAAG,MAAA,CAAO,SAAS,CAAA;AACrC,MAAA,KAAA,IAASM,KAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAGA,EAAAA,GAAI,GAAGA,EAAAA,EAAAA,EAAK;AAC5C,QAAA,MAAMC,KAAI,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,IAAKD,KAAI,CAAA,CAAE,CAAA;AAC5C,QAAA,MAAM,IAAA,GAAO,SAASA,EAAC,CAAA;AACvB,QAAA,QAAA,CAASA,EAAC,CAAA,GAAI,QAAA,CAASC,EAAC,CAAA;AACxB,QAAA,QAAA,CAASA,EAAC,CAAA,GAAI,IAAA;AAAA,MAChB;AAEA,MAAA,OAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAAA,IAChC,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA,GAAa;AACX,MAAAV,OAAM,KAAA,EAAM;AACZ,MAAAC,IAAAA,CAAI,MAAM,8BAA8B,CAAA;AAAA,IAC1C;AAAA,GACF;AACF;AASO,SAAS,iCAAiC,MAAA,EAA4B;AAC3E,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,EAAA,MAAM,cAAc,IAAIM,YAAAA;AAAA,IACtB,MAAA,CAAO,WAAW,iBAAA,IAAqB,EAAA;AAAA,IACvC,MAAA,CAAO,WAAW,aAAA,IAAiB;AAAA,GACrC;AACA,EAAA,MAAMN,IAAAA,GAAMK,cAAa,MAAM,CAAA;AAE/B,EAAA,IAAI,YAAA,GAAuC,IAAA;AAC3C,EAAA,IAAI,aAAA,GAAyC,IAAA;AAE7C,EAAAL,IAAAA,CAAI,KAAA,CAAM,4CAAA,EAA8C,EAAE,SAAS,CAAA;AAEnE,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAML,MAAM,SAAA,GAAsC;AAC1C,MAAA,IAAI,YAAA,EAAc;AAChB,QAAAA,IAAAA,CAAI,MAAM,kBAAkB,CAAA;AAC5B,QAAA,OAAO,YAAA;AAAA,MACT;AAEA,MAAA,MAAM,YAAY,OAAA,EAAQ;AAE1B,MAAAA,IAAAA,CAAI,MAAM,2BAA2B,CAAA;AACrC,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,GAAG,OAAO,CAAA,uDAAA;AAAA,OACZ;AAEA,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,QAAQ,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACpE,QAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,aAAa,CAAA;AAC9B,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAI,CAAA,EAAG;AAC5B,QAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,+BAA+B,CAAA;AACvD,QAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,gBAAgB,CAAA;AACjC,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,YAAA,GAAe,IAAA,CAAK,MAAA;AACpB,MAAAA,IAAAA,CAAI,KAAA,CAAM,CAAA,OAAA,EAAU,YAAA,CAAa,MAAM,CAAA,iBAAA,CAAmB,CAAA;AAC1D,MAAA,OAAO,YAAA;AAAA,IACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,WAAW,KAAA,EAA4D;AAC3E,MAAA,IAAI,aAAA,IAAiB,CAAC,KAAA,EAAO;AAC3B,QAAAA,IAAAA,CAAI,MAAM,mBAAmB,CAAA;AAC7B,QAAA,OAAO,aAAA;AAAA,MACT;AAEA,MAAA,MAAM,YAAY,OAAA,EAAQ;AAE1B,MAAAA,IAAAA,CAAI,MAAM,uBAAuB,CAAA;AACjC,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,GAAG,OAAO,CAAA,wDAAA;AAAA,OACZ;AAEA,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,QAAQ,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACrE,QAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,cAAc,CAAA;AAC/B,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,MAAA,IAAI,CAAC,kBAAA,CAAmB,IAAI,CAAA,EAAG;AAC7B,QAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,gCAAgC,CAAA;AACxD,QAAAA,IAAAA,CAAI,KAAA,CAAM,KAAA,EAAO,iBAAiB,CAAA;AAClC,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,aAAA,GAAgB,IAAA,CAAK,OAAA;AAGrB,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,WAAW,aAAA,CAAc,MAAA;AAAA,UAAO,CAAAG,EAAAA,KACpCA,EAAAA,CAAE,MAAA,EAAQ,QAAA,CAAS,KAAK,CAAA,IAAK;AAAA,SAC/B;AACA,QAAAH,KAAI,KAAA,CAAM,CAAA,SAAA,EAAY,SAAS,MAAM,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AAClE,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAAA,IAAAA,CAAI,KAAA,CAAM,CAAA,OAAA,EAAU,aAAA,CAAc,MAAM,CAAA,aAAA,CAAe,CAAA;AACvD,MAAA,OAAO,aAAA;AAAA,IACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,WAAW,QAAA,EAAyC;AACxD,MAAA,IAAI,CAACO,gBAAAA,CAAgB,QAAQ,CAAA,EAAG;AAC9B,QAAAP,IAAAA,CAAI,IAAA,CAAK,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAC3C,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AACtC,MAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAAG,EAAAA,KAAKA,EAAAA,CAAE,OAAO,QAAQ,CAAA;AAElD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAAH,IAAAA,CAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAQ,CAAA,CAAE,CAAA;AACzC,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAAA,IAAAA,CAAI,MAAM,CAAA,WAAA,EAAc,QAAQ,MAAM,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,QAAA,CAAU,CAAA;AACrE,MAAA,OAAO,MAAA,CAAO,OAAA;AAAA,IAChB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,MAAM,WAAA,CACJ,KAAA,EACA,IAAA,EACyF;AACzF,MAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG;AAC1B,QAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,0BAAA,EAA6B,KAAK,CAAA,CAAA,CAAG,CAAA;AAC9C,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAI,CAAA,EAAG;AAC5B,QAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAE,CAAA;AACvC,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,MAAM,YAAY,OAAA,EAAQ;AAE1B,MAAA,IAAI;AACF,QAAA,MAAM,WAAW,MAAM,KAAA;AAAA,UACrB,CAAA,EAAG,OAAO,CAAA,4CAAA,EAA+C,KAAA,CAAM,aAAa,CAAA,KAAA;AAAA,SAC9E;AAEA,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,UAAAA,IAAAA,CAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,KAAK,CAAA,CAAE,CAAA;AAC3C,UAAA,OAAO,EAAC;AAAA,QACV;AAEA,QAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAKjC,QAAA,MAAM,QAAA,GAAA,CAAY,IAAA,CAAK,QAAA,IAAY,IAChC,MAAA,CAAO,CAAAU,EAAAA,KAAKA,EAAAA,CAAE,IAAA,KAAS,IAAI,CAAA,CAC3B,GAAA,CAAI,CAAAA,EAAAA,MAAM;AAAA,UACT,SAASA,EAAAA,CAAE,OAAA;AAAA,UACX,UAAUA,EAAAA,CAAE,QAAA;AAAA,UACZ,UAAUA,EAAAA,CAAE,QAAA;AAAA,UACZ,QAAQA,EAAAA,CAAE;AAAA,SACZ,CAAE,CAAA;AAEJ,QAAAV,IAAAA,CAAI,MAAM,CAAA,YAAA,EAAe,KAAK,KAAK,IAAI,CAAA,GAAA,EAAM,QAAA,CAAS,MAAM,CAAA,SAAA,CAAW,CAAA;AACvE,QAAA,OAAO,QAAA;AAAA,MACT,CAAA,CAAA,MAAQ;AACN,QAAAA,IAAAA,CAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACjD,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA,GAAa;AACX,MAAA,YAAA,GAAe,IAAA;AACf,MAAA,aAAA,GAAgB,IAAA;AAChB,MAAAA,IAAAA,CAAI,MAAM,uCAAuC,CAAA;AAAA,IACnD;AAAA,GACF;AACF;;;AC/iBO,IAAM,eAAA,GAA0F;AAAA;AAAA,EAErG,WAAA,EAAa,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,UAAA,EAAW;AAAA,EAChD,WAAA,EAAa,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,UAAA,EAAW;AAAA,EAChD,SAAA,EAAW,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,OAAA,EAAQ;AAAA,EAC3C,WAAA,EAAa,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,OAAA,EAAQ;AAAA,EAC7C,WAAA,EAAa,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,OAAA,EAAQ;AAAA,EAC7C,cAAA,EAAgB,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA,EAC/C,gBAAA,EAAkB,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA,EACjD,eAAA,EAAiB,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA,EAChD,cAAA,EAAgB,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA,EAC/C,aAAA,EAAe,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA,EAC9C,eAAA,EAAiB,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA,EAChD,gBAAA,EAAkB,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA,EACjD,aAAA,EAAe,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA,EAC9C,eAAA,EAAiB,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA,EAChD,UAAA,EAAY,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA;AAAA,EAE3C,eAAA,EAAiB,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,UAAA,EAAW;AAAA;AAAA,EACpD,gBAAA,EAAkB,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,UAAA,EAAW;AAAA;AAAA,EACrD,mBAAA,EAAqB,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,OAAA,EAAQ;AAAA;AAAA,EACrD,eAAA,EAAiB,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,OAAA,EAAQ;AAAA;AAAA,EACjD,aAAA,EAAe,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,UAAA,EAAW;AAAA;AAAA,EAClD,WAAA,EAAa,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,OAAA,EAAQ;AAAA;AAAA,EAC5C,uBAAA,EAAyB,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAU,OAAA;AAAQ;AAC3D,CAAA;AAKO,IAAM,gBAAA,GAA0E;AAAA,EACrF,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,GAAA,EAAI;AAAA,EAC3B,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,GAAA,EAAI;AAAA,EAC3B,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,GAAA,EAAI;AAAA,EAC3B,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,GAAA,EAAI;AAAA,EAC3B,EAAE,QAAA,EAAU,GAAA,EAAK,KAAA,EAAO,GAAA;AAC1B,CAAA;;;ACpLA,IAAM,OAAA,GAAU;AAAA,EACd,KAAK,EAAC;AAAA,EACN,KAAK,EAAC;AAAA,EACN,OAAO,EAAC;AAAA,EACR,MAAM;AACR,CAAA;AAEA,IAAM,KAAA,GAAQ;AAAA,EACZ,KAAK,EAAC;AAAA,EACN,KAAK,EAAC;AAAA,EACN,OAAO;AACT,CAAA;AACA,IAAM,UAAU,EAAC;AACjB,IAAM,QAAQ,EAAC;AAEf,IAAO,aAAA,GAAQ,EAAE,OAAA,EAAS,KAAA,EAAO,SAAS,KAAA,EAAM;;;ACfhD,IAAM,UAAU,CAAA,KAAA,KAAS,MAAA,CAAO,UAAU,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,KAAM,gBAAA;AAEnE,IAAM,GAAA,GAAM;AAAA;AAAA,EAEV,OAAA,EAAS,SAAU,KAAA,EAAO;AACxB,IAAA,MAAM,EAAE,KAAA,EAAAW,MAAAA,EAAM,GAAI,IAAA;AAClB,IAAA,MAAMC,WAAUD,MAAAA,CAAM,OAAA;AAEtB,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAYC,QAAAA,CAAQ,cAAA,CAAe,KAAK,CAAA,EAAG;AAC9D,MAAAA,QAAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAA;AAAA,IACrB,CAAA,MAAA,IAES,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvB,MAAA,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AACpB,QAAA,IAAID,MAAAA,CAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA,EAAG;AACtC,UAAAC,QAAAA,CAAQ,IAAI,CAAA,CAAE,IAAI,CAAA;AAAA,QACpB,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,QACnC;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA,MAAA,IAES,OAAO,KAAA,KAAU,UAAA,EAAY;AACpC,MAAA,KAAA,CAAM,IAAI,CAAA;AAAA,IACZ,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,eAAA,GAAQ,GAAA;;;AC5Bf,IAAM,OAAA,GAAU,SAAU,EAAA,EAAI;AAC5B,EAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAKJ,EAAAA,KAAM;AACvB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAC9B,IAAA,EAAA,CAAG,MAAMA,EAAC,CAAA;AAAA,EACZ,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,GAAA,GAAM,SAAU,EAAA,EAAI,KAAA,EAAO;AAC/B,EAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAC,KAAKA,EAAAA,KAAM;AAC/B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAC9B,IAAA,MAAMK,IAAAA,GAAM,EAAA,CAAG,IAAA,EAAML,EAAC,CAAA;AAEtB,IAAA,IAAIK,SAAQ,MAAA,EAAW;AACrB,MAAA,OAAO,KAAK,IAAA,EAAK;AAAA,IACnB;AACA,IAAA,OAAOA,IAAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,IAAA,OAAO,KAAA,IAAS,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA;AAAA,EAChC;AAGA,EAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,EAAW;AAExB,IAAA,IAAI,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA,EAAU;AAC9B,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA,KAAa,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,IAAQ,CAAC,GAAA,CAAI,CAAC,EAAE,MAAA,CAAA,EAAS;AACrE,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,IAAIC,OAAM,EAAC;AACX,EAAA,GAAA,CAAI,QAAQ,CAAA,GAAA,KAAO;AACjB,IAAAA,IAAAA,GAAMA,IAAAA,CAAI,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA;AAAA,EAClC,CAAC,CAAA;AACD,EAAA,OAAO,IAAA,CAAK,OAAOA,IAAG,CAAA;AACxB,CAAA;AAEA,IAAM,MAAA,GAAS,SAAU,EAAA,EAAI;AAC3B,EAAA,IAAI,OAAO,IAAA,CAAK,WAAA;AAChB,EAAA,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAKN,EAAAA,KAAM;AAC7B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAC9B,IAAA,OAAO,EAAA,CAAG,MAAMA,EAAC,CAAA;AAAA,EACnB,CAAC,CAAA;AACD,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAC5B,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAM,IAAA,GAAO,SAAU,EAAA,EAAI;AACzB,EAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,KAAKA,EAAAA,KAAM;AAClC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAC9B,IAAA,OAAO,EAAA,CAAG,MAAMA,EAAC,CAAA;AAAA,EACnB,CAAC,CAAA;AACD,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAA;AAEA,IAAM,IAAA,GAAO,SAAU,EAAA,EAAI;AACzB,EAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,EAAKA,EAAAA,KAAM;AAC3B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAC9B,IAAA,OAAO,EAAA,CAAG,MAAMA,EAAC,CAAA;AAAA,EACnB,CAAC,CAAA;AACH,CAAA;AAEA,IAAM,MAAA,GAAS,SAAUO,EAAAA,GAAI,CAAA,EAAG;AAC9B,EAAA,IAAI,OAAO,IAAA,CAAK,WAAA;AAChB,EAAA,IAAIC,KAAI,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,KAAK,MAAM,CAAA;AAE9C,EAAA,IAAIA,EAAAA,GAAID,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQ;AACvB,IAAAC,EAAAA,GAAI,KAAK,MAAA,GAASD,EAAAA;AAClB,IAAAC,EAAAA,GAAIA,EAAAA,GAAI,CAAA,GAAI,CAAA,GAAIA,EAAAA;AAAA,EAClB;AACA,EAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAMA,EAAAA,EAAGA,EAAAA,GAAID,EAAC,CAAA;AAC1B,EAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AACzB,CAAA;AACA,IAAO,gBAAQ,EAAE,OAAA,EAAS,KAAK,MAAA,EAAQ,IAAA,EAAM,MAAM,MAAA,EAAO;;;ACnF1D,IAAM,KAAA,GAAQ;AAAA;AAAA,EAEZ,UAAU,WAAY;AACpB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,EAC5C,CAAA;AAAA;AAAA,EAEA,KAAA,EAAO,SAAUA,EAAAA,EAAG;AAClB,IAAA,MAAME,EAAAA,GAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAUxB,IAAA,OAAO,OAAOF,EAAAA,KAAM,QAAA,GAAWE,EAAAA,CAAE,EAAA,CAAGF,EAAC,CAAA,GAAIE,EAAAA;AAAA,EAC3C,CAAA;AAAA;AAAA,EAGA,MAAA,EAAQ,SAAU,KAAA,EAAO;AACvB,IAAA,IAAI,KAAA,IAAS,UAAU,CAAA,EAAG;AACxB,MAAA,OAAO,KAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,KAAK,CAAA,IAAK,EAAE,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,MAAM,EAAC;AACb,IAAA,MAAA,CAAO,KAAK,IAAA,CAAK,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAAC,EAAAA,KAAK;AACrC,MAAA,GAAA,CAAIA,EAAC,CAAA,GAAI,IAAA,CAAK,OAAO,IAAA,CAAK,OAAA,CAAQA,EAAC,CAAC,CAAA;AAAA,IACtC,CAAC,CAAA;AAED,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAEA,EAAA,EAAI,SAAUH,EAAAA,EAAG;AACf,IAAA,IAAI,MAAM,IAAA,CAAK,OAAA;AACf,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,GAAA,GAAM,IAAA,CAAK,KAAK,GAAA,CAAI,CAAC,MAAMP,EAAAA,KAAM,CAACA,EAAC,CAAC,CAAA;AAAA,IACtC;AACA,IAAA,IAAI,GAAA,CAAIO,EAAC,CAAA,EAAG;AACV,MAAA,OAAO,KAAK,MAAA,CAAO,CAAC,GAAA,CAAIA,EAAC,CAAC,CAAC,CAAA;AAAA,IAC7B;AACA,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB,CAAA;AAAA;AAAA,EAEA,OAAO,WAAY;AACjB,IAAA,OAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EAClB,CAAA;AAAA;AAAA,EAEA,MAAM,WAAY;AAChB,IAAA,MAAMA,EAAAA,GAAI,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA;AACpC,IAAA,OAAO,IAAA,CAAK,GAAGA,EAAC,CAAA;AAAA,EAClB,CAAA;AAAA;AAAA,EAGA,YAAY,WAAY;AACtB,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA;AAAA;AAAA,EAGA,WAAW,WAAY;AACrB,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA;AAAA;AAAA,EAGA,KAAA,EAAO,SAAUI,IAAAA,EAAKC,IAAAA,EAAK;AACzB,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,EAAA,EAAIL,EAAAA,KAAM,CAACA,EAAC,CAAC,CAAA;AACxD,IAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAMI,IAAAA,EAAKC,IAAG,CAAA;AAC5B,IAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EAC1B,CAAA;AAAA;AAAA,EAGA,KAAK,WAAY;AACf,IAAA,OAAO,IAAA,CAAK,MAAA,EAAO,CAAE,MAAA,EAAO;AAAA,EAC9B,CAAA;AAAA;AAAA,EAEA,eAAe,WAAY;AACzB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,CAAA/B,OAAK,CAACA,EAAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAC7C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,EAAO;AAAA,EAClC,CAAA;AAAA;AAAA,EAEA,MAAM,WAAY;AAChB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA;AAAA,EACvB,CAAA;AAAA;AAAA,EAGA,KAAA,EAAO,SAAU,CAAA,EAAG;AAClB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,CAAE,MAAA,EAAQ;AACnB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,IAAA,MAAM,OAAO,CAAA,CAAE,WAAA;AACf,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,MAAA,EAAQ;AAChC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAC,GAAA,EAAKmB,EAAAA,KAAM;AAC5B,MAAA,IAAI,CAAC,IAAA,CAAKA,EAAC,CAAA,EAAG;AACZ,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAKA,EAAC,CAAA,CAAE,CAAC,CAAA,IAAK,GAAA,CAAI,CAAC,CAAA,KAAM,KAAKA,EAAC,CAAA,CAAE,CAAC,CAAA,IAAK,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAKA,EAAC,CAAA,CAAE,CAAC,CAAA;AAAA,IAC/E,CAAC,CAAA;AAAA,EACH,CAAA;AAAA;AAAA,EAGA,WAAW,WAAY;AACrB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAC,OAAO,KAAA,KAAU;AACxC,MAAA,KAAA,IAAS,MAAM,MAAA,CAAO,CAAAP,OAAKA,EAAAA,CAAE,IAAA,KAAS,EAAE,CAAA,CAAE,MAAA;AAC1C,MAAA,OAAO,KAAA;AAAA,IACT,GAAG,CAAC,CAAA;AAAA,EACN,CAAA;AAAA;AAAA,EAGA,QAAQ,WAAY;AAClB,IAAA,MAAM,OAAO,IAAA,CAAK,OAAA;AAClB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,MAAM,CAAA,EAAG;AACzC,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,CAAA,KAAA,KAAS,SAAA,IAAa,MAAM,MAAM,CAAA;AACxD,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,CAAA,KAAA,KAAS,SAAA,IAAa,MAAM,MAAM,CAAA;AACpD,IAAA,OAAO,SAAA,KAAc,SAAA;AAAA,EAavB,CAAA;AAAA;AAAA,EAGA,MAAA,EAAQ,SAAUc,EAAAA,EAAG;AACnB,IAAA,IAAI,OAAOA,OAAM,QAAA,EAAU;AACzB,MAAA,OAAO,IAAA,CAAK,GAAGA,EAAC,CAAA;AAAA,IAClB,CAAA,MAAA,IAAW,OAAOA,EAAAA,KAAM,QAAA,EAAU;AAChC,MAAA,OAAO,IAAA,CAAK,GAAGA,EAAC,CAAA;AAAA,IAClB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEF,CAAA;AACA,KAAA,CAAM,QAAQ,KAAA,CAAM,MAAA;AACpB,KAAA,CAAM,eAAe,KAAA,CAAM,aAAA;AAC3B,KAAA,CAAM,WAAW,KAAA,CAAM,aAAA;AACvB,KAAA,CAAM,WAAW,KAAA,CAAM,SAAA;AACvB,KAAA,CAAM,YAAY,KAAA,CAAM,UAAA;AACxB,IAAO,aAAA,GAAQ,KAAA;;;AC1Jf,IAAMM,WAAU,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAA,EAAM,iBAAS,aAAK,CAAA;AAGtDA,QAAAA,CAAQ,MAAMA,QAAAA,CAAQ,EAAA;AACtB,IAAO,eAAA,GAAQA,QAAAA;;;ACLf,IAAM,IAAA,GAAN,MAAM,KAAA,CAAK;AAAA,EACT,WAAA,CAAY,QAAA,EAAU,OAAA,EAAS,MAAA,GAAS,EAAC,EAAG;AAE1C,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,CAAC,YAAY,QAAQ,CAAA;AAAA,MACrB,CAAC,SAAS,aAAK,CAAA;AAAA,MACf,CAAC,WAAW,MAAM,CAAA;AAAA,MAClB,CAAC,UAAU,IAAI,CAAA;AAAA,MACf,CAAC,YAAY,MAAM;AAAA,KACrB;AACA,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAAhC,EAAAA,KAAK;AACjB,MAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAMA,EAAAA,CAAE,CAAC,CAAA,EAAG;AAAA,QAChC,KAAA,EAAOA,GAAE,CAAC,CAAA;AAAA,QACV,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,OAAA;AAAA,EACd;AAAA;AAAA,EAEA,IAAI,IAAA,GAAO;AACT,IAAA,IAAI,OAAO,IAAA,CAAK,QAAA;AAChB,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAA,GAAO,cAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,IAAA,CAAK,IAAA,EAAM,KAAK,QAAQ,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EACA,IAAI,OAAA,GAAU;AACZ,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EACA,IAAI,OAAA,GAAU;AACZ,IAAA,OAAO,KAAK,KAAA,CAAM,OAAA;AAAA,EACpB;AAAA,EACA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA,EACpB;AAAA,EACA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA,EACpB;AAAA,EACA,IAAI,MAAA,GAAS;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAEA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,IAAA,CAAK,KAAK,MAAA,GAAS,CAAA;AAAA,EAC5B;AAAA;AAAA,EAEA,IAAI,MAAA,GAAS;AACX,IAAA,OAAO,KAAK,IAAA,CAAK,MAAA;AAAA,EACnB;AAAA;AAAA,EAEA,IAAI,WAAA,GAAc;AAChB,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS,GAAI,IAAA;AAEjC,IAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAC,EAAA,EAAI0B,EAAAA,KAAM,CAACA,EAAC,CAAC,CAAA;AAEhD,IAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAA1B,EAAAA,KAAK;AAEvB,MAAA,IAAI,CAAC0B,EAAAA,EAAGO,MAAAA,EAAOC,IAAAA,EAAK,EAAA,EAAI,KAAK,CAAA,GAAIlC,EAAAA;AACjC,MAAAiC,SAAQA,MAAAA,IAAS,CAAA;AACjB,MAAAC,OAAMA,IAAAA,IAAAA,CAAQ,QAAA,CAASR,EAAC,CAAA,IAAK,EAAC,EAAG,MAAA;AAEjC,MAAA,IAAI,SAASA,EAAC,CAAA,IAAK,SAASA,EAAC,CAAA,CAAEO,MAAK,CAAA,EAAG;AACrC,QAAA,EAAA,GAAK,EAAA,IAAM,QAAA,CAASP,EAAC,CAAA,CAAEO,MAAK,CAAA,CAAE,EAAA;AAC9B,QAAA,IAAI,QAAA,CAASP,EAAC,CAAA,CAAEQ,IAAAA,GAAM,CAAC,CAAA,EAAG;AACxB,UAAA,KAAA,GAAQ,SAAS,QAAA,CAASR,EAAC,CAAA,CAAEQ,IAAAA,GAAM,CAAC,CAAA,CAAE,EAAA;AAAA,QACxC;AAAA,MACF;AACA,MAAA,OAAO,CAACR,EAAAA,EAAGO,MAAAA,EAAOC,IAAAA,EAAK,IAAI,KAAK,CAAA;AAAA,IAClC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA,EAEA,OAAO,OAAA,EAAS;AACd,IAAA,MAAMN,EAAAA,GAAI,IAAI,KAAA,CAAK,IAAA,CAAK,UAAU,OAAO,CAAA;AAEzC,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,OAAA,IAAW,OAAA,CAAQ,SAAS,CAAA,EAAG;AAEhD,MAAA,MAAMlB,SAAQ,EAAC;AACf,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,EAAKS,EAAAA,KAAM;AAC1B,QAAA,MAAM,CAACO,EAAAA,EAAGO,MAAAA,EAAOC,IAAG,CAAA,GAAI,GAAA;AACxB,QAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,UAAAxB,MAAAA,CAAMS,EAAC,CAAA,GAAI,IAAA,CAAK,OAAOO,EAAC,CAAA;AAAA,QAC1B,CAAA,MAAA,IAAWO,WAAU,CAAA,IAAK,IAAA,CAAK,SAASP,EAAC,CAAA,CAAE,WAAWQ,IAAAA,EAAK;AACzD,UAAAxB,MAAAA,CAAMS,EAAC,CAAA,GAAI,IAAA,CAAK,OAAOO,EAAC,CAAA;AAAA,QAC1B;AAAA,MACF,CAAC,CAAA;AACD,MAAA,IAAIhB,MAAAA,CAAM,SAAS,CAAA,EAAG;AACpB,QAAAkB,GAAE,MAAA,GAASlB,MAAAA;AAAA,MACb;AAAA,IACF;AACA,IAAAkB,EAAAA,CAAE,QAAQ,IAAA,CAAK,KAAA;AACf,IAAA,OAAOA,EAAAA;AAAA,EACT;AAAA;AAAA,EAEA,OAAO,OAAA,EAAS;AACd,IAAA,OAAO,IAAI,KAAA,CAAK,IAAA,CAAK,QAAA,EAAU,OAAA,IAAW,KAAK,OAAO,CAAA;AAAA,EACxD;AAAA,EACA,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,EAAE,OAAA,EAAAI,SAAAA,EAAQ,GAAI,IAAA;AAEpB,IAAA,MAAM,WAAWA,SAAAA,CAAQ,GAAA,CAAI,SAAS,UAAA,CAAW,KAAA,EAAO,KAAK,KAAK,CAAA;AAClE,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAK,QAAQ,CAAA;AAC7B,IAAA,GAAA,CAAI,QAAQ,IAAA,CAAK,KAAA;AACjB,IAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,QAAA,EAAU,QAAA,EAAU,SAAS,CAAC,CAAA;AAC3C,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW;AAChC,MAAA,GAAA,CAAI,QAAQ,WAAW,CAAA;AAAA,IACzB;AACA,IAAA,GAAA,CAAI,QAAQ,UAAU,CAAA;AACtB,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EACA,KAAA,GAAQ;AAEN,IAAA,IAAI,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA;AACpC,IAAA,QAAA,GAAW,QAAA,CAAS,IAAI,CAAA,KAAA,KAAS;AAC/B,MAAA,OAAO,KAAA,CAAM,IAAI,CAAA,IAAA,KAAQ;AACvB,QAAA,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,IAAI,CAAA;AAC7B,QAAA,IAAA,CAAK,IAAA,GAAO,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAC7B,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,MAAMJ,EAAAA,GAAI,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAClC,IAAAA,GAAE,QAAA,GAAW,QAAA;AACb,IAAAA,EAAAA,CAAE,SAAS,IAAA,CAAK,MAAA;AAChB,IAAA,OAAOA,EAAAA;AAAA,EACT;AACF,CAAA;AACA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,eAAG,CAAA;AACjC,IAAO,YAAA,GAAQ,IAAA;;;AClIf,IAAO,eAAA,GAAQ,SAAA;;;ACAf,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM;AAC/B,EAAA,OAAO,QAAQ,OAAO,IAAA,KAAS,YAAY,CAAC,KAAA,CAAM,QAAQ,IAAI,CAAA;AAChE,CAAA;AAEA,IAAMO,QAAAA,GAAU,SAAU,GAAA,EAAK;AAC7B,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AACjD,CAAA;AAGA,SAAS,SAAA,CAAUC,QAAOC,OAAAA,EAAQ;AAChC,EAAA,IAAI,QAAA,CAASA,OAAM,CAAA,EAAG;AACpB,IAAA,KAAA,MAAW,OAAOA,OAAAA,EAAQ;AACxB,MAAA,IAAI,QAAA,CAASA,OAAAA,CAAO,GAAG,CAAC,CAAA,EAAG;AACzB,QAAA,IAAI,CAACD,MAAAA,CAAM,GAAG,CAAA,EAAG,MAAA,CAAO,MAAA,CAAOA,MAAAA,EAAO,EAAE,CAAC,GAAG,GAAG,IAAI,CAAA;AACnD,QAAA,SAAA,CAAUA,MAAAA,CAAM,GAAG,CAAA,EAAGC,OAAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACnC,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,MAAA,CAAOD,QAAO,EAAE,CAAC,GAAG,GAAGC,OAAAA,CAAO,GAAG,CAAA,EAAG,CAAA;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAOD,MAAAA;AACT;AAKA,SAAS,UAAA,CAAWA,QAAOC,OAAAA,EAAQ;AACjC,EAAA,KAAA,MAAW,OAAOA,OAAAA,EAAQ;AACxB,IAAAD,OAAM,GAAG,CAAA,GAAIA,MAAAA,CAAM,GAAG,KAAK,EAAC;AAC5B,IAAA,MAAA,CAAO,OAAOA,MAAAA,CAAM,GAAG,CAAA,EAAGC,OAAAA,CAAO,GAAG,CAAC,CAAA;AAAA,EACvC;AACA,EAAA,OAAOD,MAAAA;AACT;AAEA,IAAM,aAAA,GAAgB,SAAUA,MAAAA,EAAO,IAAA,EAAM;AAC3C,EAAA,MAAMR,EAAAA,GAAIQ,MAAAA,CAAM,GAAA,CAAI,MAAA,IAAU,EAAC;AAC/B,EAAA,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAAP,EAAAA,KAAK;AAE7B,IAAA,IAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,SAAA,EAAW;AACrB,MAAA,IAAID,GAAE,MAAA,EAAQ;AACZ,QAAAA,GAAE,MAAA,CAAO,EAAA,CAAGC,EAAC,CAAA,GAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,SAAA;AAAA,MAC3B;AACA,MAAA,IAAID,GAAE,QAAA,EAAU;AACd,QAAAA,GAAE,QAAA,CAAS,EAAA,CAAG,KAAKC,EAAC,CAAA,CAAE,SAAS,CAAA,GAAIA,EAAAA;AAAA,MACrC;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,YAAA,EAAc;AACxB,MAAA,IAAID,GAAE,SAAA,EAAW;AACf,QAAAA,GAAE,SAAA,CAAU,EAAA,CAAGC,EAAC,CAAA,GAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,YAAA;AAAA,MAC9B;AACA,MAAA,IAAID,GAAE,WAAA,EAAa;AACjB,QAAAA,GAAE,WAAA,CAAY,EAAA,CAAG,KAAKC,EAAC,CAAA,CAAE,YAAY,CAAA,GAAIA,EAAAA;AAAA,MAC3C;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,MAAA,EAAQ;AAClB,MAAA,IAAID,GAAE,QAAA,EAAU;AACd,QAAAA,GAAE,QAAA,CAAS,EAAA,CAAGC,EAAC,CAAA,GAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,MAAA;AAAA,MAC7B;AACA,MAAA,IAAID,GAAE,UAAA,EAAY;AAChB,QAAAA,GAAE,UAAA,CAAW,EAAA,CAAG,KAAKC,EAAC,CAAA,CAAE,MAAM,CAAA,GAAIA,EAAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,WAAA,EAAa;AACvB,MAAA,IAAID,GAAE,aAAA,EAAe;AACnB,QAAAA,GAAE,aAAA,CAAc,EAAA,CAAGC,EAAC,CAAA,GAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,WAAA;AAAA,MAClC;AACA,MAAA,IAAID,GAAE,eAAA,EAAiB;AACrB,QAAAA,GAAE,eAAA,CAAgB,EAAA,CAAG,KAAKC,EAAC,CAAA,CAAE,WAAW,CAAA,GAAIA,EAAAA;AAAA,MAC9C;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,WAAA,EAAa;AACvB,MAAA,IAAID,GAAE,aAAA,EAAe;AACnB,QAAAA,GAAE,aAAA,CAAc,EAAA,CAAGC,EAAC,CAAA,GAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,WAAA;AAAA,MAClC;AACA,MAAA,IAAID,GAAE,eAAA,EAAiB;AACrB,QAAAA,GAAE,eAAA,CAAgB,EAAA,CAAG,KAAKC,EAAC,CAAA,CAAE,WAAW,CAAA,GAAIA,EAAAA;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,CAAA;AAEA,IAAM,MAAA,GAAS,SAAUQ,OAAAA,EAAQf,MAAAA,EAAOgB,OAAMC,IAAAA,EAAK;AAEjD,EAAA,IAAIJ,QAAAA,CAAQE,OAAM,CAAA,EAAG;AACnB,IAAAA,OAAAA,CAAO,QAAQ,CAAAG,EAAAA,KAAK,OAAOA,EAAAA,EAAGlB,MAAAA,EAAOgB,KAAAA,EAAMC,IAAG,CAAC,CAAA;AAC/C,IAAA;AAAA,EACF;AACA,EAAA,MAAM,EAAE,SAAAP,SAAAA,EAAS,KAAA,EAAAI,QAAO,OAAA,EAAAb,QAAAA,EAAS,KAAA,EAAAkB,MAAAA,EAAM,GAAInB,MAAAA;AAC3C,EAAA,IAAIe,QAAO,OAAA,EAAS;AAClB,IAAA,UAAA,CAAWL,SAAAA,EAASK,QAAO,OAAO,CAAA;AAAA,EACpC;AACA,EAAA,IAAIA,QAAO,KAAA,EAAO;AAChB,IAAA,SAAA,CAAUD,MAAAA,EAAOC,QAAO,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,IAAIA,QAAO,UAAA,EAAY;AACrB,IAAA,aAAA,CAAcD,MAAAA,EAAOC,QAAO,UAAU,CAAA;AAAA,EACxC;AAEA,EAAA,IAAIA,QAAO,OAAA,EAAS;AAClB,IAAA,MAAA,CAAO,MAAA,CAAOd,QAAAA,EAASc,OAAAA,CAAO,OAAO,CAAA;AAAA,EACvC;AAEA,EAAA,IAAII,MAAAA,EAAO;AACT,IAAAnB,OAAM,KAAA,GAAQmB,MAAAA,CAAM,OAAOJ,OAAAA,CAAO,KAAA,IAAS,EAAE,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAIA,QAAO,GAAA,EAAK;AACd,IAAAA,OAAAA,CAAO,IAAIC,KAAI,CAAA;AAAA,EACjB;AACA,EAAA,IAAID,QAAO,GAAA,EAAK;AACd,IAAA,MAAA,CAAO,IAAA,CAAKA,OAAAA,CAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAAR,EAAAA,KAAMU,IAAAA,CAAIV,EAAC,CAAA,GAAIQ,OAAAA,CAAO,GAAA,CAAIR,EAAC,CAAE,CAAA;AAAA,EAC/D;AACA,EAAA,IAAIQ,QAAO,IAAA,EAAM;AACf,IAAAE,IAAAA,CAAI,OAAA,CAAQF,OAAAA,CAAO,IAAI,CAAA;AAAA,EACzB;AACA,EAAA,IAAIA,QAAO,KAAA,EAAO;AAChB,IAAAE,IAAAA,CAAI,QAAA,CAASF,OAAAA,CAAO,KAAK,CAAA;AAAA,EAC3B;AACA,EAAA,IAAIA,QAAO,MAAA,EAAQ;AACjB,IAAAE,IAAAA,CAAI,QAAA,CAASF,OAAAA,CAAO,MAAA,EAAQ,IAAI,CAAA;AAAA,EAClC;AACA,EAAA,IAAIA,QAAO,MAAA,EAAQ;AACjB,IAAAA,OAAAA,CAAO,MAAA,CAAOf,MAAAA,EAAOiB,IAAG,CAAA;AAAA,EAC1B;AACF,CAAA;AACA,IAAO,cAAA,GAAQ,MAAA;;;AC5Hf,IAAM,OAAA,GAAU,SAAU,GAAA,EAAK;AAC7B,EAAA,MAAMG,IAAAA,GAAM,OAAO,OAAA,KAAY,WAAA,IAAe,CAAC,OAAA,CAAQ,GAAA,GAAM,IAAA,CAAK,GAAA,IAAO,EAAC,GAAI,OAAA,CAAQ,GAAA;AACtF,EAAAA,KAAI,UAAA,GAAa,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,OAAO,IAAA,GAAO,EAAA;AAC3D,EAAAA,KAAI,WAAA,GAAc,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,OAAO,IAAA,GAAO,EAAA;AAC3D,EAAAA,KAAI,YAAA,GAAe,GAAA,KAAQ,SAAA,IAAa,GAAA,KAAQ,OAAO,IAAA,GAAO,EAAA;AAC9D,EAAA,OAAO,IAAA;AACT,CAAA;;;ACRA,IAAMC,YAAW,CAAA,GAAA,KAAO;AACtB,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,iBAAA;AACjD,CAAA;AAEA,IAAMR,QAAAA,GAAU,SAAU,GAAA,EAAK;AAC7B,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AACjD,CAAA;AAGA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM;AAC/B,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAAS,EAAAA,KAAK;AACnB,IAAA,OAAOA,EAAAA,CAAE,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ;AACzB,MAAA,IAAIT,QAAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AACtB,QAAA,IAAA,CAAK,IAAA,GAAO,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,MAC/B;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH,CAAA;AAGA,IAAM,YAAA,GAAe,SAAU,GAAA,EAAK;AAClC,EAAA,OAAO,GAAA,CAAI,GAAA,CAAI,CAACnC,EAAAA,KAAM;AACpB,IAAA,OAAOA,EAAAA,CAAE,IAAI,CAAA,GAAA,KAAO;AAClB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,GAAA;AAAA,QACN,MAAA,EAAQ,GAAA;AAAA;AAAA,QACR,GAAA,EAAK,EAAA;AAAA,QACL,IAAA,EAAM,GAAA;AAAA,QACN,IAAA,sBAAU,GAAA;AAAI,OAChB;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH,CAAA;AAEA,IAAM,MAAA,GAAS,SAAU,KAAA,EAAOsC,KAAAA,EAAMhB,MAAAA,EAAO;AAC3C,EAAA,MAAM,EAAE,OAAA,EAAAU,SAAAA,EAAQ,GAAIV,MAAAA;AACpB,EAAA,MAAM,GAAA,GAAM,IAAIgB,KAAAA,CAAK,EAAE,CAAA;AACvB,EAAA,GAAA,CAAI,KAAA,GAAQhB,MAAAA;AAEZ,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,KAAA,GAAQ,OAAO,KAAK,CAAA;AAAA,EACtB;AAEA,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,WAAWU,SAAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,UAAA,CAAW,OAAOV,MAAK,CAAA;AAC7D,IAAA,OAAO,IAAIgB,MAAK,QAAQ,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAIK,SAAAA,CAAS,KAAK,CAAA,IAAK,KAAA,CAAM,MAAA,EAAQ;AACnC,IAAA,OAAO,IAAIL,KAAAA,CAAK,KAAA,CAAM,QAAA,EAAU,MAAM,IAAI,CAAA;AAAA,EAC5C;AAEA,EAAA,IAAIH,QAAAA,CAAQ,KAAK,CAAA,EAAG;AAElB,IAAA,IAAIA,QAAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACrB,MAAA,MAAMU,SAAAA,GAAW,aAAa,KAAK,CAAA;AACnC,MAAA,OAAO,IAAIP,MAAKO,SAAQ,CAAA;AAAA,IAC1B;AAEA,IAAA,MAAM,QAAA,GAAW,SAAS,KAAK,CAAA;AAC/B,IAAA,OAAO,IAAIP,MAAK,QAAQ,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,cAAA,GAAQ,MAAA;;;AC9Df,IAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,aAAO,CAAA;AAEvC,IAAM,GAAA,GAAM,SAAU,KAAA,EAAO,GAAA,EAAK;AAChC,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,GAAA,CAAI,SAAS,GAAG,CAAA;AAAA,EAClB;AACA,EAAA,MAAM,GAAA,GAAM,cAAA,CAAa,KAAA,EAAO,YAAA,EAAM,KAAK,CAAA;AAC3C,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,GAAA,CAAI,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AACA,MAAA,CAAO,cAAA,CAAe,KAAK,QAAA,EAAU;AAAA,EACnC,KAAA,EAAO,KAAA;AAAA,EACP,QAAA,EAAU;AACZ,CAAC,CAAA;AAGD,GAAA,CAAI,QAAA,GAAW,SAAU,KAAA,EAAO,GAAA,EAAK;AACnC,EAAA,MAAM,EAAE,OAAA,EAAAf,QAAAA,EAAQ,GAAI,IAAA,CAAK,MAAA;AAEzB,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,GAAA,CAAI,SAAS,GAAG,CAAA;AAAA,EAClB;AAEA,EAAA,MAAM,GAAA,GAAM,cAAA,CAAa,KAAA,EAAO,YAAA,EAAM,KAAK,CAAA;AAE3C,EAAA,IAAIA,SAAQ,YAAA,EAAc;AACxB,IAAA,GAAA,CAAI,QAAQ,CAAC,OAAA,EAAS,QAAA,EAAU,SAAA,EAAW,cAAc,CAAC,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AAGA,GAAA,CAAI,MAAA,GAAS,SAAUc,OAAAA,EAAQ;AAC7B,EAAA,cAAA,CAAOA,OAAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,YAAA,EAAM,IAAI,CAAA;AACtC,EAAA,OAAO,IAAA;AACT,CAAA;AACA,GAAA,CAAI,SAAS,GAAA,CAAI,MAAA;AAIjB,GAAA,CAAI,QAAQ,WAAY;AACtB,EAAA,OAAO,IAAA,CAAK,MAAA;AACd,CAAA;AACA,GAAA,CAAI,QAAQ,WAAY;AACtB,EAAA,OAAO,KAAK,MAAA,CAAO,KAAA;AACrB,CAAA;AACA,GAAA,CAAI,UAAU,WAAY;AACxB,EAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AACrB,CAAA;AACA,GAAA,CAAI,QAAQ,WAAY;AACtB,EAAA,OAAO,KAAK,MAAA,CAAO,KAAA;AACrB,CAAA;AAGA,GAAA,CAAI,OAAA,GAAU,OAAA;AAEd,GAAA,CAAI,OAAA,GAAU,eAAA;AAEd,IAAO,WAAA,GAAQ,GAAA;;;ACnEf,IAAM,WAAA,GAAc,SAAU,QAAA,EAAU;AACtC,EAAA,MAAM3B,MAAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,KAAA,KAAS;AAClC,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAI;AACtB,IAAA,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AAEpB,MAAA,IAAI,IAAA,CAAK,WAAW,EAAA,EAAI;AACtB,QAAA,KAAA,CAAM,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,MACvB;AAEA,MAAA,IAAI,KAAK,MAAA,EAAQ;AACf,QAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MAC9B;AAEA,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,KAAA,CAAM,GAAA,CAAI,KAAK,QAAQ,CAAA;AAAA,MACzB;AACA,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,KAAA,CAAM,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,MACxB;AACA,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,KAAA,CAAM,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,MACrB;AAEA,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,CAAA,GAAA,KAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MAC1C;AACA,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AACjC,MAAA,KAAA,IAASE,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,QAAA,KAAA,CAAM,GAAA,CAAI,GAAA,GAAM,IAAA,CAAKA,EAAC,CAAC,CAAA;AAAA,MACzB;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAOF,MAAAA;AACT,CAAA;AACA,IAAO,gBAAA,GAAQ,WAAA;;;ACjCf,IAAOoC,gBAAAA,GAAQ;AAAA,EACb,GAAA,EAAK;AAAA,IACH,QAAA,EAAA;AAAA;AAEJ,CAAA;;;ACNA,IAAMd,QAAAA,GAAU;AAAA;AAAA,EAEd,OAAO,WAAY;AACjB,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,KAAK,QAAQ,CAAA;AACrD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAEA,SAAS,WAAY;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AACA,IAAM,MAAA,GAAS,SAAUM,KAAAA,EAAM;AAC7B,EAAA,MAAA,CAAO,MAAA,CAAOA,KAAAA,CAAK,SAAA,EAAWN,QAAO,CAAA;AACvC,CAAA;AACA,IAAO,WAAA,GAAQ,MAAA;;;ACdf,IAAOe,gBAAAA,GAAQ;AAAA,EACb,KAAA,EAAO,SAAU,IAAA,EAAM;AACrB,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA,EACvD;AACF,CAAA;;;ACDA,IAAO,cAAA,GAAQ;AAAA,EACb,GAAA,EAAA,WAAA;AAAA,EACA,OAAA,EAAAA,gBAAAA;AAAA,EACA,OAAA,EAAAD;AACF,CAAA;;;ACRA,IAAO,YAAA,GAAQ;AAAA;AAAA,EAEb,aAAa,WAAY;AACvB,IAAA,IAAA,CAAK,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAAlC,EAAAA,KAAK;AAC3B,MAAAA,EAAAA,CAAE,IAAA,GAAOA,EAAAA,CAAE,IAAA,CAAK,WAAA,EAAY;AAAA,IAC9B,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAEA,aAAa,WAAY;AACvB,IAAA,IAAA,CAAK,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAAA,EAAAA,KAAK;AAC3B,MAAAA,EAAAA,CAAE,IAAA,GAAOA,EAAAA,CAAE,IAAA,CAAK,WAAA,EAAY;AAAA,IAC9B,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAEA,aAAa,WAAY;AACvB,IAAA,IAAA,CAAK,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAAA,EAAAA,KAAK;AAC3B,MAAAA,EAAAA,CAAE,OAAOA,EAAAA,CAAE,IAAA,CAAK,QAAQ,uBAAA,EAAyB,CAAA,CAAA,KAAK,CAAA,CAAE,WAAA,EAAa,CAAA;AAAA,IACvE,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAEA,aAAa,WAAY;AACvB,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACzB,MAAA,KAAA,CAAM,OAAA,CAAQ,CAACA,EAAAA,EAAGO,EAAAA,KAAM;AACtB,QAAA,IAAIA,OAAM,CAAA,EAAG;AACX,UAAAP,EAAAA,CAAE,OAAOA,EAAAA,CAAE,IAAA,CAAK,QAAQ,uBAAA,EAAyB,CAAA,CAAA,KAAK,CAAA,CAAE,WAAA,EAAa,CAAA;AAAA,QACvE;AACA,QAAA,IAAIO,EAAAA,KAAM,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC1B,UAAAP,GAAE,IAAA,GAAO,EAAA;AAAA,QACX;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;;;ACnCA,IAAM,WAAA,GAAc,CAAC,GAAA,KAAQ,oBAAA,CAAqB,KAAK,GAAG,CAAA,IAAK,WAAA,CAAY,IAAA,CAAK,GAAG,CAAA;AACnF,IAAM,WAAA,GAAc,CAAC,GAAA,KAAQ,GAAA,CAAI,QAAQ,UAAA,EAAY,CAAA,CAAA,KAAK,CAAA,CAAE,WAAA,EAAa,CAAA;AACzE,IAAM,WAAA,GAAc,CAAC,GAAA,KAAQ,GAAA,CAAI,QAAQ,UAAA,EAAY,CAAA,CAAA,KAAK,CAAA,CAAE,WAAA,EAAa,CAAA;AAGzE,IAAM,SAAA,GAAY,CAAC,MAAA,EAAQb,MAAAA,EAAO,KAAA,KAAU;AAE1C,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAA,IAAA,KAAQ,IAAA,CAAK,KAAA,GAAQ,IAAI,CAAA;AACvC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,OAAO,CAACA,MAAAA,EAAO,CAAC,CAAA,CAAE,OAAO,KAAK,CAAA;AACpC,IAAA,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,EAC3C;AACA,EAAA,OAAO,MAAA;AACT,CAAA;AAGA,IAAM,QAAA,GAAW,SAAU,KAAA,EAAO;AAChC,EAAA,MAAMiD,SAAAA,GAAW,IAAA;AACjB,EAAA,MAAMC,QAAAA,GAAU,OAAA;AAChB,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACvC,EAAA,IAAI,QAAA,IAAY,CAACD,SAAAA,CAAS,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,CAACC,QAAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AAC7E,IAAA,QAAA,CAAS,IAAA,IAAQ,GAAA;AAAA,EACnB;AACF,CAAA;AAGA,IAAM,SAAA,GAAY,CAAC,MAAA,EAAQf,IAAAA,EAAK,MAAA,KAAW;AACzC,EAAA,MAAM,KAAA,GAAQ,iBAAA;AACd,EAAA,MAAM,OAAA,GAAU,MAAA,CAAOA,IAAAA,GAAM,CAAC,CAAA;AAC9B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA;AAAA,EACF;AACA,EAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG;AACpB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,KAAK,EAAE,CAAA;AACvC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACrC,IAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,IAAA,CAAK,IAAA;AAEzB,IAAA,OAAA,CAAQ,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,OAAO,EAAE,CAAA;AAAA,EAC/C;AACF,CAAA;AAGA,IAAM,aAAA,GAAgB,SAAU,IAAA,EAAMD,MAAAA,EAAO,MAAA,EAAQ;AACnD,EAAA,MAAM,IAAA,GAAO,KAAKA,MAAK,CAAA;AAEvB,EAAA,IAAIA,WAAU,CAAA,IAAK,CAAC,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1C,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,GAAO,YAAY,MAAA,CAAO,CAAC,EAAE,IAAI,CAAA;AAE3C,EAAA,MAAM,GAAA,GAAM,KAAKA,MAAK,CAAA;AACtB,EAAA,IAAI,GAAA,CAAI,KAAK,GAAA,CAAI,YAAY,KAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AACzD,IAAA;AAAA,EACF;AACA,EAAA,IAAI,YAAY,GAAA,CAAI,IAAI,KAAK,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AAChD,IAAA,GAAA,CAAI,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AAAA,EACjC;AACF,CAAA;AAGA,IAAM,YAAA,GAAe,SAAU,IAAA,EAAM,GAAA,EAAK,QAAQ,QAAA,EAAU;AAC1D,EAAA,MAAM,CAACP,EAAAA,EAAGO,MAAAA,EAAOC,IAAG,CAAA,GAAI,GAAA;AAExB,EAAA,IAAID,WAAU,CAAA,EAAG;AAEf,IAAA,QAAA,CAAS,MAAM,CAAA;AAAA,EACjB,CAAA,MAAA,IAAWC,IAAAA,KAAQ,QAAA,CAASR,EAAC,EAAE,MAAA,EAAQ;AAErC,IAAA,QAAA,CAAS,MAAM,CAAA;AAAA,EACjB,CAAA,MAAO;AAEL,IAAA,QAAA,CAAS,MAAM,CAAA;AACf,IAAA,QAAA,CAAS,CAAC,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,EACzB;AACA,EAAA,aAAA,CAAc,IAAA,EAAMO,QAAO,MAAM,CAAA;AAEjC,EAAA,SAAA,CAAU,IAAA,EAAMA,QAAO,MAAM,CAAA;AAC/B,CAAA;AAEA,IAAM,WAAA,GAAc,SAAU,IAAA,EAAM,GAAA,EAAK,QAAQ,QAAA,EAAU;AACzD,EAAA,MAAM,CAACP,EAAAA,IAAKQ,IAAG,CAAA,GAAI,GAAA;AACnB,EAAA,MAAM,KAAA,GAAA,CAAS,QAAA,CAASR,EAAC,CAAA,IAAK,EAAC,EAAG,MAAA;AAClC,EAAA,IAAIQ,OAAM,KAAA,EAAO;AAGf,IAAA,SAAA,CAAU,IAAA,EAAMA,MAAK,MAAM,CAAA;AAC3B,IAAA,QAAA,CAAS,MAAM,CAAA;AAAA,EACjB,CAAA,MAAA,IAAW,UAAUA,IAAAA,EAAK;AAGxB,IAAA,QAAA,CAAS,IAAI,CAAA;AAEb,IAAA,SAAA,CAAU,IAAA,EAAMA,MAAK,MAAM,CAAA;AAE3B,IAAA,IAAI,QAAA,CAASR,EAAAA,GAAI,CAAC,CAAA,EAAG;AACnB,MAAA,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,CAAE,IAAA,IAAQ,GAAA;AAAA,IACpC;AAAA,EACF;AACA,EAAA,SAAA,CAAU,IAAA,EAAM,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,CAAA;AAE9B,EAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,CAAE,EAAA;AACrC,CAAA;;;AC1EA,IAAI,KAAA,GAAQ,CAAA;AAEZ,IAAM,IAAA,GAAO,CAAC,GAAA,KAAQ;AACpB,EAAA,GAAA,GAAM,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,GAAA,GAAM,GAAA;AACnC,EAAA,OAAO,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,GAAA,GAAM,GAAA;AACtC,CAAA;AAEA,IAAM,IAAA,GAAO,SAAU,IAAA,EAAM;AAC3B,EAAA,IAAI,CAACA,IAAGP,EAAC,CAAA,GAAI,KAAK,KAAA,IAAS,CAAC,GAAG,CAAC,CAAA;AAChC,EAAA,KAAA,IAAS,CAAA;AAGT,EAAA,KAAA,GAAQ,KAAA,GAAQ,QAAQ,CAAA,GAAI,KAAA;AAE5B,EAAAO,EAAAA,GAAIA,EAAAA,GAAI,KAAA,GAAQ,CAAA,GAAIA,EAAAA;AAEpB,EAAAP,EAAAA,GAAIA,EAAAA,GAAI,IAAA,GAAO,CAAA,GAAIA,EAAAA;AAGnB,EAAA,IAAI,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,EAAE,CAAC,CAAA;AAEhC,EAAA,EAAA,IAAM,IAAA,CAAKO,EAAAA,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA;AAGzB,EAAA,IAAI,EAAA,GAAKP,EAAAA,CAAE,QAAA,CAAS,EAAE,CAAA;AACtB,EAAA,EAAA,GAAK,EAAA,CAAG,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,EAAA,GAAK,EAAA;AAChC,EAAA,EAAA,IAAM,EAAA;AAGN,EAAA,MAAMQ,KAAI,QAAA,CAAS,IAAA,CAAK,MAAA,EAAO,GAAI,IAAI,EAAE,CAAA;AACzC,EAAA,EAAA,IAAOA,EAAAA,CAAG,SAAS,EAAE,CAAA;AAErB,EAAA,OAAO,IAAA,CAAK,MAAA,GAAS,GAAA,GAAM,EAAA,CAAG,WAAA,EAAY;AAC5C,CAAA;AAEA,IAAO,YAAA,GAAQ,IAAA;;;AC7Df,IAAM,MAAA,GAAS,SAAUC,EAAAA,EAAG;AAC1B,EAAA,IAAIA,GAAE,GAAA,CAAI,iBAAiB,KAAK,OAAOA,EAAAA,CAAE,iBAAiB,UAAA,EAAY;AAEpE,IAAA,MAAM,IAAA,GAAOA,EAAAA,CAAE,IAAA,CAAK,iBAAiB,CAAA;AACrC,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA,EAAO;AAAA,EAC7B;AACF,CAAA;AAEA,IAAMO,WAAU,CAAA,GAAA,KAAO,MAAA,CAAO,UAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AAG/D,IAAM,MAAA,GAAS,SAAU,KAAA,EAAO;AAC9B,EAAA,KAAA,GAAQ,KAAA,CAAM,IAAI,CAAA,IAAA,KAAQ;AACxB,IAAA,IAAA,CAAK,EAAA,GAAK,aAAK,IAAI,CAAA;AACnB,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,KAAA,EAAOb,MAAAA,EAAO;AACvC,EAAA,MAAM,EAAE,OAAA,EAAAU,SAAAA,EAAQ,GAAIV,MAAAA;AAEpB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAOU,UAAQ,GAAA,CAAI,QAAA,CAAS,WAAW,KAAA,EAAOV,MAAK,EAAE,CAAC,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,EAAQ;AAC7C,IAAA,OAAO,MAAM,KAAA,EAAM,CAAE,IAAA,CAAK,CAAC,KAAK,EAAC;AAAA,EACnC;AAEA,EAAA,IAAIa,QAAAA,CAAQ,KAAK,CAAA,EAAG;AAClB,IAAA,OAAOA,SAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA;AAAA,EACxC;AACA,EAAA,OAAO,EAAC;AACV,CAAA;AAEA,IAAM,MAAA,GAAS,SAAU,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS;AAC7C,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAAb,MAAAA,EAAM,GAAI,IAAA;AAC5B,EAAA,IAAA,CAAK,OAAA,EAAQ;AAEb,EAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,EAAA,MAAM,WAAW,IAAA,CAAK,WAAA;AACtB,EAAA,IAAA,CAAK,OAAA,CAAQ,CAACM,EAAAA,EAAGT,EAAAA,KAAM;AACrB,IAAA,MAAM,GAAA,GAAMS,EAAAA,CAAE,WAAA,CAAY,CAAC,CAAA;AAC3B,IAAA,MAAM,CAACF,EAAC,CAAA,GAAI,GAAA;AAEZ,IAAA,MAAM,IAAA,GAAO,SAASA,EAAC,CAAA;AACvB,IAAA,IAAI,KAAA,GAAQ,QAAA,CAAS,KAAA,EAAOJ,MAAK,CAAA;AAEjC,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA;AAAA,IACF;AACA,IAAA,KAAA,GAAQ,OAAO,KAAK,CAAA;AACpB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAA,CAAO,KAAK,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,CAAE,WAAW,CAAA;AACrC,MAAA,YAAA,CAAa,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,QAAQ,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,CAAE,UAAU,CAAA;AACpC,MAAA,WAAA,CAAY,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,QAAQ,CAAA;AAAA,IACxC;AAEA,IAAA,IAAI,QAAA,CAASI,EAAC,CAAA,IAAK,QAAA,CAASA,EAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG;AACtC,MAAA,GAAA,CAAI,CAAC,IAAI,QAAA,CAASA,EAAC,EAAE,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,EAAA;AAAA,IAC/B;AAEA,IAAA,QAAA,CAASP,EAAC,CAAA,GAAI,GAAA;AAEd,IAAA,GAAA,CAAI,CAAC,KAAK,KAAA,CAAM,MAAA;AAChB,IAAA,IAAA,CAAKA,EAAC,CAAA,GAAI,GAAA;AAAA,EACZ,CAAC,CAAA;AACD,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAE5B,EAAA,IAAA,CAAK,IAAA,GAAO,QAAA;AAEZ,EAAA,GAAA,CAAI,QAAQ,CAAC,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,SAAS,CAAC,CAAA;AAChD,EAAA,IAAI,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW;AAC/B,IAAA,GAAA,CAAI,QAAQ,WAAW,CAAA;AAAA,EACzB;AACA,EAAA,GAAA,CAAI,QAAQ,UAAU,CAAA;AACtB,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAM+B,IAAAA,GAAM;AAAA,EACV,WAAA,EAAa,SAAU,KAAA,EAAO;AAC5B,IAAA,OAAO,MAAA,CAAO,KAAA,EAAO,IAAA,EAAM,KAAK,CAAA;AAAA,EAClC,CAAA;AAAA,EACA,YAAA,EAAc,SAAU,KAAA,EAAO;AAC7B,IAAA,OAAO,MAAA,CAAO,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA;AAAA,EACjC;AACF,CAAA;AACAA,IAAAA,CAAI,SAASA,IAAAA,CAAI,WAAA;AACjBA,IAAAA,CAAI,UAAUA,IAAAA,CAAI,YAAA;AAClBA,IAAAA,CAAI,SAASA,IAAAA,CAAI,WAAA;AAEjB,IAAO,cAAA,GAAQA,IAAAA;;;AClGf,IAAM,UAAA,GAAa,cAAA;AACnB,IAAMA,OAAM,EAAC;AAGb,IAAMC,YAAAA,GAAc,CAAC,GAAA,KAAQ,oBAAA,CAAqB,KAAK,GAAG,CAAA,IAAK,WAAA,CAAY,IAAA,CAAK,GAAG,CAAA;AACnF,IAAMC,YAAAA,GAAc,CAAC,GAAA,KAAQ,GAAA,CAAI,QAAQ,UAAA,EAAY,CAAA,CAAA,KAAK,CAAA,CAAE,WAAA,EAAa,CAAA;AACzE,IAAMC,YAAAA,GAAc,CAAC,GAAA,KAAQ,GAAA,CAAI,QAAQ,UAAA,EAAY,CAAA,CAAA,KAAK,CAAA,CAAE,WAAA,EAAa,CAAA;AAGzE,IAAM,WAAA,GAAc,SAAU,IAAA,EAAM,EAAA,EAAIC,KAAAA,EAAM;AAC5C,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAA1B,EAAAA,KAAK;AAChB,IAAA,MAAMJ,IAAAA,GAAM,GAAGI,EAAC,CAAA;AAChB,IAAAA,EAAAA,CAAE,WAAA,CAAYJ,IAAAA,EAAK8B,KAAI,CAAA;AAAA,EACzB,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AAGA,IAAM,aAAA,GAAgB,SAAU,KAAA,EAAO,IAAA,EAAM;AAC3C,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,EAAO;AAC3B,EAAA,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,CAAAtD,EAAAA,KAAK;AACrC,IAAA,MAAM,GAAA,GAAMA,EAAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAC9B,IAAA,IAAI,MAAA,CAAO,cAAA,CAAe,GAAG,CAAA,EAAG;AAC9B,MAAA,OAAO,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,IAC1B;AACA,IAAA,OAAOA,EAAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACT,CAAA;AAEAkD,IAAAA,CAAI,WAAA,GAAc,SAAU,KAAA,EAAOI,KAAAA,GAAO,EAAC,EAAG;AAC5C,EAAA,IAAI,OAAO,IAAA,CAAK,WAAA;AAChB,EAAA,MAAM,IAAA,GAAO,IAAA;AACb,EAAA,IAAA,CAAK,OAAA,EAAQ;AACb,EAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC/B,IAAA,OAAO,WAAA,CAAY,IAAA,EAAM,KAAA,EAAOA,KAAI,CAAA;AAAA,EACtC;AACA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACzB,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,oBAAA,GAAuBA,KAAAA,CAAK,WAAA,IAAe,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,YAAY,CAAA;AAC9F,EAAA,MAAM,sBAAsBA,KAAAA,CAAK,IAAA,IAAQH,aAAY,KAAA,CAAM,CAAC,EAAE,IAAI,CAAA;AAElE,EAAA,KAAA,GAAQ,aAAA,CAAc,OAAO,IAAI,CAAA;AAEjC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAEjC,EAAA,IAAA,GAAO,KAAK,GAAA,CAAI,CAAA,GAAA,KAAO,IAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAEtC,EAAA,MAAM,OAAA,GAAA,CAAW,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC,EAAG,GAAA,CAAI,CAAA,IAAA,KAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AAC1E,EAAA,MAAM,cAAc,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,GAAA;AACxC,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,CAAE,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA,CAAE,IAAA;AAEnE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,CAAE,QAAQ,IAAI,CAAA;AAAA,EAC3C;AACA,EAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAEtB,EAAA,IAAI,QAAA,CAAS,GAAA,CAAI,iBAAiB,CAAA,IAAK,KAAK,YAAA,EAAc;AACxD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,kBAAkB,CAAA;AACzC,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA,EAAO;AAAA,EAC7B;AAEA,EAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AAGpB,EAAA,IAAI,oBAAA,EAAsB;AACxB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACvB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,YAAY,CAAA,EAAG;AAChC,MAAA,IAAA,CAAK,IAAA,IAAQ,IAAA;AACb,MAAA,IAAA,CAAK,MAAA,IAAU,IAAA;AACf,MAAA,IAAA,CAAK,IAAA,CAAK,IAAI,YAAY,CAAA;AAAA,IAC5B;AAAA,EACF;AAGA,EAAA,IAAI,WAAA,IAAe,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG;AAC/B,IAAA,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,EAAE,GAAA,GAAM,WAAA;AAAA,EACxB;AAEA,EAAA,IAAI,YAAA,IAAgB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG;AAChC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,KAAK,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AACpD,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAK,EAAG;AACxB,MAAA,OAAA,CAAQ,IAAA,GAAO,YAAA;AAAA,IACjB;AAAA,EACF;AAGA,EAAA,MAAMvB,EAAAA,GAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,CAAE,QAAQ,CAAC,OAAA,EAAS,QAAA,EAAU,SAAS,CAAC,CAAA;AAClE,EAAA,IAAIA,EAAAA,CAAE,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW;AAC7B,IAAAA,EAAAA,CAAE,QAAQ,WAAW,CAAA;AAAA,EACvB;AACA,EAAAA,EAAAA,CAAE,QAAQ,UAAU,CAAA;AAEpB,EAAA,IAAI0B,MAAK,IAAA,EAAM;AACb,IAAA1B,GAAE,KAAA,EAAM,CAAE,OAAA,CAAQ,CAAC,MAAMT,EAAAA,KAAM;AAC7B,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQA,EAAC,CAAC,CAAA;AAAA,IACzB,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,CAACS,EAAAA,CAAE,IAAA,CAAK,CAAC,CAAA,IAAK,CAACA,EAAAA,CAAE,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,OAAOA,EAAAA;AAGxC,EAAA,IAAI0B,MAAK,IAAA,EAAM;AACb,IAAA,MAAM,aAAA,GAAgB,sBAAsBF,YAAAA,GAAcC,YAAAA;AAC1D,IAAAzB,EAAAA,CAAE,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,IAAA,GAAO,aAAA,CAAcA,EAAAA,CAAE,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,EAAE,IAAI,CAAA;AAAA,EACrD;AASA,EAAA,OAAOA,EAAAA;AACT,CAAA;AAEAsB,IAAAA,CAAI,OAAA,GAAU,SAAUK,MAAAA,EAAO,KAAA,EAAOD,KAAAA,EAAM;AAC1C,EAAA,IAAIC,MAAAA,IAAS,CAAC,KAAA,EAAO;AACnB,IAAA,OAAO,IAAA,CAAK,WAAA,CAAYA,MAAAA,EAAOD,KAAI,CAAA;AAAA,EACrC;AACA,EAAA,MAAM1B,EAAAA,GAAI,IAAA,CAAK,KAAA,CAAM2B,MAAK,CAAA;AAC1B,EAAA,IAAI,CAAC3B,GAAE,KAAA,EAAO;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAA,CAAK,MAAA,EAAO;AACZ,EAAA,OAAOA,EAAAA,CAAE,WAAA,CAAY,KAAA,EAAO0B,KAAI,CAAA;AAClC,CAAA;AACA,IAAO,eAAA,GAAQJ,IAAAA;;;AClIf,IAAM,WAAA,GAAc,SAAU,KAAA,EAAO,GAAA,EAAK;AACxC,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,GAAS,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,MAAM,IAAI,CAAA;AACvB,EAAA,MAAM,EAAA,GAAK,KAAA,CAAM,IAAA,GAAO,GAAG,CAAA;AAC3B,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,CAAG,QAAQ,IAAA,CAAK,IAAA;AAChB,IAAA,EAAA,CAAG,IAAA,GAAO,EAAA,CAAG,IAAA,CAAK,OAAA,CAAQ,gBAAgB,IAAI,CAAA;AAE9C,IAAA,EAAA,CAAG,IAAA,GAAO,EAAA,CAAG,IAAA,CAAK,OAAA,CAAQ,iBAAiB,IAAI,CAAA;AAAA,EACjD;AACF,CAAA;AAGA,IAAM,QAAA,GAAW,SAAU,QAAA,EAAU,IAAA,EAAM;AACzC,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,MAAM,CAACxB,EAAAA,EAAGO,MAAAA,EAAOC,IAAG,CAAA,GAAI,GAAA;AACxB,IAAA,MAAM,MAAMA,IAAAA,GAAMD,MAAAA;AAClB,IAAA,IAAI,CAAC,QAAA,CAASP,EAAC,CAAA,EAAG;AAChB,MAAA;AAAA,IACF;AACA,IAAA,IAAIQ,SAAQ,QAAA,CAASR,EAAC,CAAA,CAAE,MAAA,IAAUQ,OAAM,CAAA,EAAG;AACzC,MAAA,WAAA,CAAY,QAAA,CAASR,EAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IAC9B;AACA,IAAA,QAAA,CAASA,EAAC,CAAA,CAAE,MAAA,CAAOO,MAAAA,EAAO,GAAG,CAAA;AAAA,EAC/B,CAAC,CAAA;AAGD,EAAA,KAAA,IAASd,KAAI,QAAA,CAAS,MAAA,GAAS,GAAGA,EAAAA,IAAK,CAAA,EAAGA,MAAK,CAAA,EAAG;AAChD,IAAA,IAAI,QAAA,CAASA,EAAC,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AAC5B,MAAA,QAAA,CAAS,MAAA,CAAOA,IAAG,CAAC,CAAA;AAEpB,MAAA,IAAIA,OAAM,QAAA,CAAS,MAAA,IAAU,QAAA,CAASA,EAAAA,GAAI,CAAC,CAAA,EAAG;AAC5C,QAAA,MAAM,KAAA,GAAQ,QAAA,CAASA,EAAAA,GAAI,CAAC,CAAA;AAC5B,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACvC,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,QAAA,CAAS,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,OAAA,EAAQ;AAAA,QACxC;AAAA,MACF;AAAA,IAKF;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT,CAAA;AAEA,IAAO,cAAA,GAAQ,QAAA;;;AC/Cf,IAAM,WAAA,GAAc,SAAU,IAAA,EAAM,QAAA,EAAU;AAC5C,EAAA,IAAA,GAAO,IAAA,CAAK,IAAI,CAAA,GAAA,KAAO;AACrB,IAAA,MAAM,CAACO,EAAC,CAAA,GAAI,GAAA;AACZ,IAAA,IAAI,CAAC,QAAA,CAASA,EAAC,CAAA,EAAG;AAChB,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,QAAA,CAASA,EAAC,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAA,KAAM;AACxB,MAAA,MAAM,GAAA,GAAM,EAAA,CAAG,CAAC,CAAA,GAAI,GAAG,CAAC,CAAA;AAExB,MAAA,IAAI,GAAA,CAAI,CAAC,CAAA,IAAK,EAAA,CAAG,CAAC,CAAA,IAAK,GAAA,CAAI,CAAC,CAAA,IAAK,EAAA,CAAG,CAAC,CAAA,EAAG;AACtC,QAAA,GAAA,CAAI,CAAC,CAAA,IAAK,GAAA;AAAA,MACZ;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AAGD,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAKP,EAAAA,KAAM;AAEvB,IAAA,IAAI,IAAI,CAAC,CAAA,KAAM,KAAK,GAAA,CAAI,CAAC,KAAK,CAAA,EAAG;AAE/B,MAAA,KAAA,IAASO,KAAIP,EAAAA,GAAI,CAAA,EAAGO,KAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AAC3C,QAAA,IAAA,CAAKA,EAAC,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA;AACd,QAAA,IAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,CAAC,IAAI,CAAA,EAAG;AAClB,UAAA,IAAA,CAAKA,EAAC,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAA,GAAO,IAAA,CAAK,OAAO,CAAA,GAAA,KAAO,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,CAAC,CAAA;AAG7C,EAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACvB,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA;AACT,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA;AACT,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAMM,QAAAA,GAAU;AAAA;AAAA,EAEd,MAAA,EAAQ,SAAU,GAAA,EAAK;AACrB,IAAA,MAAM,EAAE,MAAA,EAAAwB,OAAAA,EAAO,GAAI,IAAA,CAAK,QAAQ,GAAA,CAAI,OAAA;AACpC,IAAA,IAAA,CAAK,OAAA,EAAQ;AAGb,IAAA,IAAIC,KAAAA,GAAO,KAAK,GAAA,EAAI;AACpB,IAAA,IAAI,GAAA,GAAM,IAAA;AAEV,IAAA,IAAI,GAAA,EAAK;AACP,MAAAA,KAAAA,GAAO,IAAA;AACP,MAAA,GAAA,GAAM,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACtB;AACA,IAAA,MAAM,MAAA,GAAS,CAACA,KAAAA,CAAK,IAAA;AAErB,IAAA,IAAI,GAAA,CAAI,GAAA,CAAI,iBAAiB,CAAA,IAAK,IAAI,YAAA,EAAc;AAClD,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,iBAAiB,CAAA;AACvC,MAAA,IAAA,CAAK,YAAA,GAAe,MAAA,EAAO;AAAA,IAC7B;AAEA,IAAA,IAAI,OAAOA,KAAAA,CAAK,WAAA;AAChB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,WAAA,CAAY,OAAA,EAAQ;AAErC,IAAA,MAAM,QAAA,GAAW,cAAA,CAAa,IAAA,CAAK,QAAA,EAAU,IAAI,CAAA;AAEjD,IAAA,MAAM,QAAA,GAAWD,QAAO,IAAI,CAAA;AAC5B,IAAA,IAAA,GAAO,WAAA,CAAY,MAAM,QAAQ,CAAA;AAEjC,IAAAC,MAAK,IAAA,GAAO,IAAA;AACZ,IAAAA,MAAK,QAAA,GAAW,QAAA;AAChB,IAAAA,KAAAA,CAAK,QAAQ,OAAO,CAAA;AAEpB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAAA,MAAK,IAAA,GAAO,MAAA;AAAA,IACd;AACA,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,IAAA,CAAK,OAAO,EAAC;AACb,MAAA,OAAOA,MAAK,IAAA,EAAK;AAAA,IACnB;AACA,IAAA,MAAM,GAAA,GAAMA,KAAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAC5B,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;AAGAzB,QAAAA,CAAQ,SAASA,QAAAA,CAAQ,MAAA;AACzB,IAAO0B,eAAAA,GAAQ1B,QAAAA;;;AC1Ff,IAAMA,QAAAA,GAAU;AAAA;AAAA,EAEd,GAAA,EAAK,SAAU,GAAA,EAAK,MAAA,EAAQ;AAC1B,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,IAAA,CAAK,KAAA,EAAO;AACnC,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,GAAA;AAAA,IACzB;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACzB,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,IAAA,CAAK,GAAA,IAAO,GAAA;AAAA,MACd,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,MACb;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAGA,IAAA,EAAM,SAAU,GAAA,EAAK,MAAA,EAAQ;AAC3B,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,MAAM,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,SAAS,CAAC,CAAA;AAC3C,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,CAAE,IAAA;AAAA,IAC/B;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACzB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,IAAA,CAAK,IAAA,IAAQ,GAAA;AAAA,MACf,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AAAA,MACd;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAGA,MAAM,WAAY;AAChB,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAMC,MAAAA,GAAQ,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA;AACvB,IAAAA,MAAAA,CAAM,GAAA,GAAMA,MAAAA,CAAM,GAAA,CAAI,SAAA,EAAU;AAChC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACjC,IAAA,MAAMC,IAAAA,GAAM,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAChC,IAAAA,IAAAA,CAAI,IAAA,GAAOA,IAAAA,CAAI,IAAA,CAAK,OAAA,EAAQ;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAGA,WAAW,WAAY;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AAEzB,MAAA,KAAA,CAAM,OAAA,CAAQ,CAACtB,EAAAA,EAAGO,EAAAA,KAAM;AACtB,QAAA,IAAIA,OAAM,CAAA,EAAG;AACX,UAAAP,GAAE,GAAA,GAAM,EAAA;AAAA,QACV;AACA,QAAA,IAAI,KAAA,CAAMO,EAAAA,GAAI,CAAC,CAAA,EAAG;AAChB,UAAAP,GAAE,IAAA,GAAO,GAAA;AAAA,QACX;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAGA,aAAa,WAAY;AACvB,IAAA,MAAM+C,UAAAA,GAAY,OAAA;AAClB,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AAEzB,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAA/C,EAAAA,KAAK;AACjB,QAAA,IAAI+C,UAAAA,CAAU,IAAA,CAAK/C,EAAAA,CAAE,IAAI,CAAA,EAAG;AAC1B,UAAAA,GAAE,IAAA,GAAO,GAAA;AAAA,QACX;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAGA,YAAA,EAAc,SAAUqB,MAAAA,EAAOC,IAAAA,EAAK;AAClC,IAAAD,SAAQA,MAAAA,IAAS,CAAA,CAAA,CAAA;AACjB,IAAAC,OAAMA,IAAAA,IAAO,CAAA,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACzB,MAAA,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA,GAAMD,MAAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA;AAChC,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,MAAA,IAAA,CAAK,IAAA,GAAOC,OAAM,IAAA,CAAK,IAAA;AAAA,IACzB,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAGA,aAAA,EAAe,SAAUD,MAAAA,EAAOC,IAAAA,EAAK;AACnC,IAAAD,SAAQA,MAAAA,IAAS,CAAA,CAAA,CAAA;AACjB,IAAAC,OAAMA,IAAAA,IAAO,CAAA,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACzB,MAAA,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA,GAAMD,MAAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA;AAChC,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,MAAA,IAAA,CAAK,IAAA,GAAOC,OAAM,IAAA,CAAK,IAAA;AAAA,IACzB,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAGAF,QAAAA,CAAQ,cAAcA,QAAAA,CAAQ,WAAA;AAC9BA,QAAAA,CAAQ,cAAcA,QAAAA,CAAQ,YAAA;AAE9B,IAAO,kBAAA,GAAQA,QAAAA;;;AC1Gf,IAAM,KAAA,GAAQ,CAAChC,EAAAA,EAAG,CAAA,KAAM;AACtB,EAAA,IAAIA,EAAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAA,EAAQ;AACvB,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,IAAIA,EAAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAA,EAAQ;AACvB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA;AACT,CAAA;AAGA,IAAM,MAAA,GAAS,CAACA,EAAAA,EAAG,CAAA,KAAM;AACvB,EAAA,MAAM,IAAA,GAAOA,EAAAA,CAAE,MAAA,CAAO,IAAA,EAAK,CAAE,MAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,MAAA,CAAO,IAAA,EAAK,CAAE,MAAA;AAC9B,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA;AACT,CAAA;AAGA,IAAM,SAAA,GAAY,CAACA,EAAAA,EAAG,CAAA,KAAM;AAC1B,EAAA,IAAIA,EAAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA,EAAO;AACrB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAIA,EAAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA,EAAO;AACrB,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA;AACT,CAAA;AAGA,IAAM,UAAA,GAAa,CAACA,EAAAA,EAAG,CAAA,KAAM;AAC3B,EAAA,IAAIA,EAAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,EAAG;AACf,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAIA,EAAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,EAAG;AACf,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAOA,GAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,IAAI,CAAA,GAAI,EAAA;AAC3B,CAAA;AAGA,IAAM,MAAA,GAAS,SAAU,GAAA,EAAK;AAC5B,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,GAAA,CAAI,OAAA,CAAQ,CAAA4C,EAAAA,KAAK;AACf,IAAA,MAAA,CAAOA,GAAE,MAAM,CAAA,GAAI,MAAA,CAAOA,EAAAA,CAAE,MAAM,CAAA,IAAK,CAAA;AACvC,IAAA,MAAA,CAAOA,EAAAA,CAAE,MAAM,CAAA,IAAK,CAAA;AAAA,EACtB,CAAC,CAAA;AAED,EAAA,GAAA,CAAI,IAAA,CAAK,CAAC5C,EAAAA,EAAG,CAAA,KAAM;AACjB,IAAA,MAAM,IAAA,GAAO,MAAA,CAAOA,EAAAA,CAAE,MAAM,CAAA;AAC5B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,CAAE,MAAM,CAAA;AAC7B,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAO,eAAQ,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,YAAY,MAAA,EAAO;;;AClE9D,IAAM,QAAA,mBAAW,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,YAAY,KAAA,EAAO,YAAA,EAAc,OAAA,EAAS,eAAe,CAAC,CAAA;AAC7F,IAAM,SAAA,uBAAgB,GAAA,CAAI,CAAC,QAAQ,WAAA,EAAa,MAAA,EAAQ,SAAS,CAAC,CAAA;AAClE,IAAM,6BAAa,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,cAAc,CAAC,CAAA;AAGpD,IAAM,UAAA,GAAa,SAAU,IAAA,EAAM,EAAA,EAAI;AACrC,EAAA,IAAI,OAAO,IAAA,CAAK,WAAA;AAChB,EAAA,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,CAACA,EAAAA,EAAG,CAAA,KAAM;AACzB,IAAAA,EAAAA,GAAI,IAAA,CAAK,MAAA,CAAO,CAACA,EAAC,CAAC,CAAA;AACnB,IAAA,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,OAAO,EAAA,CAAGA,IAAG,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,EAAA,OAAO,IAAA;AACT,CAAA;AAGA,IAAM,IAAA,GAAO,SAAU,KAAA,EAAO;AAC5B,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,IAAA;AAC1B,EAAA,IAAA,CAAK,OAAA,EAAQ;AACb,EAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC/B,IAAA,OAAO,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,KAAA,GAAQ,KAAA,IAAS,OAAA;AACjB,EAAA,MAAM,IAAA,GAAO,WAAW,IAAA,CAAK,GAAA,CAAI,CAAC,EAAA,EAAI0B,EAAAA,KAAM,CAACA,EAAC,CAAC,CAAA;AAC/C,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAC,OAAOA,EAAAA,KAAM;AAC/B,IAAA,OAAO;AAAA,MACL,KAAA,EAAOA,EAAAA;AAAA,MACP,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,CAAAd,EAAAA,KAAKA,EAAAA,CAAE,OAAA,IAAWA,EAAAA,CAAE,MAAA,IAAU,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,MAC5D,OAAA,EAAS,KAAKc,EAAC;AAAA,KACjB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA,EAAG;AACvB,IAAA,KAAA,GAAQ,YAAA;AAAA,EACV;AAEA,EAAA,IAAI,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EAAG;AACzB,IAAA,KAAA,GAAQ,OAAA;AAAA,EACV;AAEA,EAAA,IAAI,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA,EAAG;AACxB,IAAA,GAAA,GAAM,YAAA,CAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,OAAO,IAAA,CAAK,OAAO,GAAA,CAAI,GAAA,CAAI,CAAAkB,EAAAA,KAAKA,EAAAA,CAAE,OAAO,CAAC,CAAA;AAAA,EAC5C;AAEA,EAAA,IAAI,OAAO,YAAA,CAAQ,KAAK,CAAA,KAAM,UAAA,EAAY;AACxC,IAAA,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,YAAA,CAAQ,KAAK,CAAC,CAAA;AAC7B,IAAA,OAAO,IAAA,CAAK,OAAO,GAAA,CAAI,GAAA,CAAI,CAAAA,EAAAA,KAAKA,EAAAA,CAAE,OAAO,CAAC,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAGA,IAAM,UAAU,WAAY;AAC1B,EAAA,IAAI,IAAA,GAAO,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,EAAA,EAAIlB,EAAAA,KAAM,CAACA,EAAC,CAAC,CAAA;AACvD,EAAA,IAAA,GAAO,EAAC,CAAE,MAAA,CAAO,IAAI,CAAA;AACrB,EAAA,IAAA,GAAO,KAAK,OAAA,EAAQ;AACpB,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,OAAA,EAAQ;AAAA,EACpC;AACA,EAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AACzB,CAAA;AAGA,IAAM,SAAS,WAAY;AACzB,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAI;AACxB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,CAAAE,EAAAA,KAAK;AAC3B,IAAA,MAAM,GAAA,GAAMA,EAAAA,CAAE,IAAA,CAAK,SAAS,CAAA;AAC5B,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AACpB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAA,CAAQ,IAAI,GAAG,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAOgC,aAAAA,GAAQ,EAAE,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAK;;;AClFvC,IAAMzB,QAAAA,GAAU,CAAC,GAAA,KAAQ,MAAA,CAAO,UAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AAGjE,IAAM,WAAA,GAAc,SAAU,QAAA,EAAU,SAAA,EAAW;AACjD,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AAEvB,IAAA,MAAMD,IAAAA,GAAM,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACxC,IAAA,MAAM,IAAA,GAAOA,IAAAA,CAAIA,IAAAA,CAAI,MAAA,GAAS,CAAC,CAAA;AAC/B,IAAA,IAAI,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAI,MAAM,KAAA,EAAO;AACjC,MAAA,IAAA,CAAK,IAAA,IAAQ,GAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,QAAA,GAAW,QAAA,CAAS,OAAO,SAAS,CAAA;AACpC,EAAA,OAAO,QAAA;AACT,CAAA;AAEA,IAAM,YAAA,GAAe,SAAU,IAAA,EAAM,KAAA,EAAO;AAE1C,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,KAAA,CAAM,QAAA,EAAU;AACpC,IAAA,MAAM2B,KAAAA,GAAO,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,MAAM,WAAW,CAAA;AACtD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAOA,KAAI,CAAA,CAAE,QAAQ,OAAO,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,OAAO,KAAA,CAAM,WAAA;AACnB,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAA7D,EAAAA,KAAK;AAChB,IAAAA,EAAAA,CAAE,CAAC,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,MAAA;AAAA,EACxB,CAAC,CAAA;AACD,EAAA,IAAA,CAAK,QAAA,GAAW,WAAA,CAAY,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI,CAAA;AACrD,EAAA,OAAO,KAAK,GAAA,EAAI;AAClB,CAAA;AAEA,IAAO,cAAA,GAAQ;AAAA;AAAA,EAEb,MAAA,EAAQ,SAAU,KAAA,EAAO;AAEvB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AAEhC,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,CAAC,KAAK,IAAA,EAAM;AAC7B,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,MACpD,CAAA,MAAO;AAEL,QAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,QAAA,MAAM,KAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,EAAE,CAAC,CAAA;AAClC,QAAA,IAAA,CAAK,SAAS,MAAA,CAAO,EAAA,EAAI,CAAA,EAAG,GAAG,KAAK,QAAQ,CAAA;AAAA,MAC9C;AAEA,MAAA,OAAO,IAAA,CAAK,GAAA,EAAI,CAAE,OAAA,CAAQ,OAAO,CAAA;AAAA,IACnC;AAEA,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,EAAQ;AAC7C,MAAA,OAAO,YAAA,CAAa,MAAM,KAAK,CAAA;AAAA,IACjC;AAEA,IAAA,IAAImC,QAAAA,CAAQ,KAAK,CAAA,EAAG;AAClB,MAAA,MAAM,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,QAAA,EAAU,KAAK,CAAA;AAC7C,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,MAAA,OAAO,KAAK,GAAA,EAAI;AAAA,IAClB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;;;AC5DA,IAAM,SAAS,WAAY;AACzB,EAAA,IAAA,CAAK,OAAO,IAAA,CAAK,WAAA;AACjB,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,SAAS,WAAY;AACzB,EAAA,IAAI,MAAM,IAAA,CAAK,IAAA;AACf,EAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG;AAC1B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,GAAA,GAAM,GAAA,CAAI,IAAI,CAAAnC,EAAAA,KAAKA,GAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAChC,EAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,cAAA,GAAQ,EAAE,MAAA,EAAQ,MAAA,EAAO;;;ACNhC,IAAMgC,QAAAA,GAAU,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,YAAA,EAAS,cAAA,EAAQ,eAAA,EAAS0B,eAAAA,EAAQ,kBAAA,EAAYE,aAAAA,EAAM,cAAA,EAAQ,cAAM,CAAA;AAEpG,IAAME,OAAAA,GAAS,SAAUxB,KAAAA,EAAM;AAC7B,EAAA,MAAA,CAAO,MAAA,CAAOA,KAAAA,CAAK,SAAA,EAAWN,QAAO,CAAA;AACvC,CAAA;AACA,IAAO+B,YAAAA,GAAQD,OAAAA;;;ACZf,IAAMvC,QAAAA,GAAU;AAAA,EACd,EAAA,EAAI,SAAU,IAAA,EAAM;AAClB,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,KAAA,IAASG,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,MAAA,KAAA,IAASP,EAAAA,GAAI,GAAGA,EAAAA,GAAI,IAAA,CAAKO,EAAC,CAAA,CAAE,MAAA,EAAQP,MAAK,CAAA,EAAG;AAC1C,QAAA,MAAM,IAAA,GAAO,IAAA,CAAKO,EAAC,CAAA,CAAEP,EAAC,CAAA;AACtB,QAAA,IAAA,CAAK,EAAA,GAAK,IAAA,CAAK,EAAA,IAAM,YAAA,CAAK,IAAI,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAEA,IAAO4B,gBAAAA,GAAQxB,QAAAA;;;ACXf,IAAOyC,eAAAA,GAAQ;AAAA,EACb,GAAA,EAAAD,YAAAA;AAAA,EACA,OAAA,EAAAhB;AACF,CAAA;;;ACNA,IAAO,oBAAA,GAAQ;AAAA;AAAA,EAEb,EAAE,IAAA,EAAM,GAAA,EAAK,GAAA,EAAK,CAAC,IAAI,CAAA,EAAE;AAAA,EACzB,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,KAAA,EAAO,KAAK,CAAA,EAAE;AAAA,EACrC,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK,CAAC,GAAA,EAAK,KAAK,CAAA,EAAE;AAAA,EAClC,EAAE,MAAM,KAAA,EAAO,GAAA,EAAK,CAAC,IAAA,EAAM,OAAA,EAAS,MAAM,CAAA,EAAE;AAAA,EAC5C,EAAE,IAAA,EAAM,QAAA,EAAU,KAAK,CAAC,KAAA,EAAO,KAAK,CAAA,EAAE;AAAA,EACtC,EAAE,IAAA,EAAM,KAAA,EAAO,KAAK,CAAC,IAAA,EAAM,KAAK,CAAA,EAAE;AAAA,EAClC,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,KAAA,EAAO,KAAK,CAAA,EAAE;AAAA,EACrC,EAAE,IAAA,EAAM,QAAA,EAAU,KAAK,CAAC,QAAA,EAAU,KAAK,CAAA,EAAE;AAAA,EACzC,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,MAAA,EAAQ,KAAK,CAAA,EAAE;AAAA,EACtC,EAAE,IAAA,EAAM,QAAA,EAAU,KAAK,CAAC,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,EACtC,EAAE,IAAA,EAAM,QAAA,EAAU,KAAK,CAAC,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,EACtC,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA;AAAA,EAEpC,EAAE,MAAM,OAAA,EAAS,GAAA,EAAK,CAAC,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA,EAAE;AAAA,EAC5C,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,OAAA,EAAS,IAAI,CAAA,EAAE;AAAA,EACtC,EAAE,MAAM,OAAA,EAAS,GAAA,EAAK,CAAC,MAAA,EAAQ,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA;AAAA,EAC5C,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,EACrC,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,KAAA,EAAO,IAAI,CAAA,EAAE;AAAA,EACpC,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,QAAA,EAAU,IAAI,CAAA,EAAE;AAAA,EACvC,EAAE,MAAM,KAAA,EAAO,GAAA,EAAK,CAAC,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA,EAAE;AAAA,EACxC,EAAE,IAAA,EAAM,IAAA,EAAM,KAAK,CAAC,GAAA,EAAK,IAAI,CAAA,EAAE;AAAA,EAC/B,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK,CAAC,GAAA,EAAK,MAAM,CAAA,EAAE;AAAA,EACnC,EAAE,MAAM,KAAA,EAAO,GAAA,EAAK,CAAC,IAAA,EAAM,IAAA,EAAM,SAAS,CAAA,EAAE;AAAA,EAC5C,EAAE,MAAM,KAAA,EAAO,GAAA,EAAK,CAAC,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA,EAAE;AAAA,EAC3C,EAAE,IAAA,EAAM,KAAA,EAAO,KAAK,CAAC,GAAA,EAAK,MAAM,CAAA,EAAE;AAAA,EAClC,EAAE,IAAA,EAAM,IAAA,EAAM,KAAK,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA,EACpC,EAAE,MAAM,KAAA,EAAO,GAAA,EAAK,CAAC,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA,EAAE;AAAA,EAC3C,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,EACrC,EAAE,IAAA,EAAM,CAAA,MAAA,CAAA,EAAU,KAAK,CAAC,MAAA,EAAQ,MAAM,CAAA,EAAE;AAAA,EACxC,EAAE,IAAA,EAAM,CAAA,KAAA,CAAA,EAAS,KAAK,CAAC,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA;AAAA,EAErC,EAAE,IAAA,EAAM,SAAA,EAAW,KAAK,CAAC,QAAA,EAAU,MAAM,CAAA,EAAE;AAAA,EAC3C,EAAE,IAAA,EAAM,QAAA,EAAU,KAAK,CAAC,QAAA,EAAU,MAAM,CAAA,EAAE;AAAA,EAC1C,EAAE,IAAA,EAAM,QAAA,EAAU,KAAK,CAAC,QAAA,EAAU,MAAM,CAAA,EAAE;AAAA,EAC1C,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,MAAA,EAAQ,MAAM,CAAA,EAAE;AAAA,EAEvC,EAAE,IAAA,EAAM,KAAA,EAAO,KAAK,CAAC,IAAA,EAAM,IAAI,CAAA,EAAE;AAAA,EACjC,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK,CAAC,IAAA,EAAM,KAAK,CAAA,EAAE;AAAA,EACnC,EAAE,IAAA,EAAM,CAAA,MAAA,CAAA,EAAU,KAAK,CAAC,KAAA,EAAO,MAAM,CAAA,EAAE;AAAA,EACvC,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,CAAC,OAAO,CAAA,EAAE;AAAA,EAChC,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,CAAC,MAAM,CAAA,EAAE;AAAA;AAAA,EAE9B,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAK,CAAC,MAAM,CAAA,EAAE;AAAA,EAC7B,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAK,CAAC,MAAM,CAAA,EAAE;AAAA,EAC7B,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAK,CAAC,KAAK,CAAA,EAAE;AAAA,EAC5B,EAAE,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,CAAC,IAAI,CAAA,EAAE;AAAA;AAAA,EAE1B,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,CAAC,IAAI,CAAA,EAAE;AAAA,EAC3B,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,CAAC,IAAI,CAAA,EAAE;AAAA,EAC3B,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,CAAC,IAAI,CAAA,EAAE;AAAA,EAC3B,EAAE,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK,CAAC,KAAK,CAAA,EAAE;AAAA,EAC7B,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,CAAC,IAAI,CAAA,EAAE;AAAA,EAC3B,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,CAAC,IAAI,CAAA,EAAE;AAAA;AAAA;AAAA,EAG3B,EAAE,IAAA,EAAM,UAAA,EAAY,KAAK,CAAC,QAAA,EAAU,KAAK,CAAA,EAAE;AAAA,EAC3C,EAAE,IAAA,EAAM,SAAA,EAAW,KAAK,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA,EACzC,EAAE,IAAA,EAAM,SAAA,EAAW,KAAK,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA,EACzC,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,KAAA,EAAO,KAAK,CAAA,EAAE;AAAA,EACrC,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,KAAA,EAAO,KAAK,CAAA,EAAE;AAAA,EACrC,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK,CAAC,IAAA,EAAM,KAAK,CAAA,EAAE;AAAA,EACnC,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK,CAAC,KAAA,EAAO,KAAK,CAAA,EAAE;AAAA,EACpC,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK,CAAC,IAAA,EAAM,KAAK,CAAA,EAAE;AAAA,EACnC,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK,CAAC,MAAA,EAAQ,KAAK,CAAA,EAAE;AAAA;AAAA,EAErC,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK,CAAC,KAAA,EAAO,KAAK,CAAA,EAAE;AAAA,EACpC,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,MAAA,EAAQ,KAAK,CAAA,EAAE;AAAA,EACtC,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,MAAA,EAAQ,KAAK,CAAA,EAAE;AAAA,EACtC,EAAE,IAAA,EAAM,QAAA,EAAU,KAAK,CAAC,OAAA,EAAS,KAAK,CAAA;AACxC,CAAA;;;ACtEA,IAAM,CAAA,GAAI,IAAA;AACV,IAAO,qBAAA,GAAQ;AAAA,EACb,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,CAAA;AAAA;AAAA,EACL,GAAA,EAAK,CAAA;AAAA;AAAA,EACL,IAAA,EAAM,CAAA;AAAA;AAAA,EACN,QAAA,EAAO,CAAA;AAAA;AAAA,EACP,QAAA,EAAO;AAAA;AACT,CAAA;;;ACbA,IAAO,aAAA,GAAQ;AAAA,EACb,GAAA,EAAK;AAAA,IACH,YAAA,EAAA,oBAAA;AAAA,IACA,cAAA,EAAA;AAAA;AAEJ,CAAA;;;ACPA,IAAM,iBAAA,GAAoB,SAAU,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO;AAC1D,EAAA,MAAM,CAACrB,EAAAA,EAAG,CAAC,CAAA,GAAI,KAAA;AACf,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAChC,IAAA;AAAA,EACF;AACA,EAAA,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAMP,EAAAA,KAAM;AAC7B,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA;AACrB,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,IAAA;AACpB,IAAA,IAAA,CAAK,GAAA,GAAM,EAAA;AACX,IAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,EAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,CAACO,EAAAA,EAAG,CAAA,GAAIP,EAAC,CAAA;AACtB,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,EAAG;AAEZ,IAAA,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA,GAAM,SAASO,EAAC,CAAA,CAAE,CAAC,CAAA,CAAE,GAAA;AAC9B,IAAA,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA,CAAE,OAAO,QAAA,CAASA,EAAC,CAAA,CAAE,CAAC,CAAA,CAAE,IAAA;AAE9C,IAAA,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,GAAO,SAASA,EAAC,CAAA,CAAE,CAAC,CAAA,CAAE,IAAA;AAC/B,IAAA,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,GAAS,SAASA,EAAC,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAAA,EACnC;AAEA,EAAA,QAAA,CAASA,EAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAA,EAAG,GAAG,KAAK,CAAA;AACnC,CAAA;AACA,IAAO,cAAA,GAAQ,iBAAA;;;AC3Bf,IAAM,cAAA,GAAiB,GAAA;AAUvB,IAAM,SAAA,uBAAgB,GAAA,CAAI;AAAA,EACxB,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGD,IAAM,QAAA,uBAAe,GAAA,CAAI;AAAA,EACvB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,MAAA,uBAAa,GAAA,CAAI;AAAA,EACrB,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AASD,IAAM,YAAA,GAAe,SAAU,KAAA,EAAOP,EAAAA,EAAG;AACvC,EAAA,MAAM8C,OAAAA,GAAS,MAAM9C,EAAC,CAAA,CAAE,OAAO,KAAA,CAAM,cAAc,EAAE,CAAC,CAAA;AAGtD,EAAA,IAAI,SAAA,CAAU,GAAA,CAAI8C,OAAM,CAAA,EAAG;AACzB,IAAA,OAAO,CAACA,SAAQ,KAAK,CAAA;AAAA,EACvB;AACA,EAAA,IAAI,KAAA,CAAM9C,EAAAA,GAAI,CAAC,CAAA,EAAG;AAEhB,IAAA,IAAI,OAAO,GAAA,CAAI,KAAA,CAAMA,KAAI,CAAC,CAAA,CAAE,MAAM,CAAA,EAAG;AACnC,MAAA,OAAO,CAAC8C,SAAQ,KAAK,CAAA;AAAA,IACvB;AAEA,IAAA,IAAI,SAAS,GAAA,CAAI,KAAA,CAAM9C,KAAI,CAAC,CAAA,CAAE,MAAM,CAAA,EAAG;AACrC,MAAA,OAAO,CAAC8C,SAAQ,OAAO,CAAA;AAAA,IACzB;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AAMT,CAAA;AACA,IAAO,oBAAA,GAAQ,YAAA;;;AC7Df,IAAM,WAAA,GAAc,SAAU,KAAA,EAAO9C,EAAAA,EAAG;AACtC,EAAA,IAAI,KAAA,CAAMA,EAAC,CAAA,CAAE,MAAA,KAAW,WAAW,KAAA,CAAMA,EAAC,CAAA,CAAE,MAAA,KAAW,MAAA,EAAQ;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM8C,UAAS,KAAA,CAAM9C,EAAC,EAAE,MAAA,CAAO,OAAA,CAAQ,OAAO,EAAE,CAAA;AAChD,EAAA,OAAO,CAAC8C,SAAQ,KAAK,CAAA;AACvB,CAAA;AAEA,IAAO,oBAAA,GAAQ,WAAA;;;ACVf,IAAMC,eAAAA,GAAiB,GAAA;AACvB,IAAM,UAAA,GAAa,wBAAA;AACnB,IAAM,WAAA,GAAc,2BAAA;AAEpB,IAAM,IAAA,GAAO,CAAC,KAAA,EAAO/C,EAAAA,KAAM;AAEzB,EAAA,MAAMgD,MAAAA,GAAQ,MAAMhD,EAAC,CAAA,CAAE,OAAO,KAAA,CAAM+C,eAAc,EAAE,CAAC,CAAA;AAErD,EAAA,IAAIC,MAAAA,IAASA,MAAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AAChC,IAAA,OAAO,CAAC,MAAMA,MAAK,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,CAAC,MAAMA,MAAK,CAAA;AACrB,CAAA;AAGA,IAAM,IAAA,GAAO,CAAC,KAAA,EAAOhD,EAAAA,KAAM;AACzB,EAAA,MAAMgD,MAAAA,GAAQ,MAAMhD,EAAC,CAAA,CAAE,OAAO,KAAA,CAAM+C,eAAc,EAAE,CAAC,CAAA;AAErD,EAAA,IAAIC,MAAAA,IAAS,WAAW,IAAA,CAAKA,MAAK,KAAK,CAAC,WAAA,CAAY,IAAA,CAAKA,MAAK,CAAA,EAAG;AAC/D,IAAA,OAAO,CAAC,MAAMA,MAAK,CAAA;AAAA,EACrB,CAAA,MAAA,IAAWA,MAAAA,IAASA,MAAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACvC,IAAA,OAAO,CAAC,OAAOA,MAAK,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,CAAC,MAAMA,MAAK,CAAA;AACrB,CAAA;AAGA,IAAM,IAAA,GAAO,CAAC,KAAA,EAAOhD,EAAAA,KAAM;AACzB,EAAA,MAAMgD,MAAAA,GAAQ,MAAMhD,EAAC,CAAA,CAAE,OAAO,KAAA,CAAM+C,eAAc,EAAE,CAAC,CAAA;AACrD,EAAA,OAAO,CAAC,MAAMC,MAAK,CAAA;AACrB,CAAA;AAEA,IAAO,cAAA,GAAQ;AAAA,EACb,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA;;;ACpCA,IAAM,OAAA,GAAU,2DAAA;AAChB,IAAM,SAAA,GAAY,kFAAA;AAClB,IAAM,QAAA,GAAW,qBAAA;AAEjB,IAAM,WAAA,GAAc,SAAU,KAAA,EAAOhD,EAAAA,EAAG;AACtC,EAAA,MAAM,IAAA,GAAO,MAAMA,EAAC,CAAA;AACpB,EAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACnC,EAAA,IAAI,UAAU,IAAA,EAAM;AAElB,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,aAAa,CAAA,KAAM,QAAQ,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACrE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAC,KAAA,CAAM,CAAC,GAAG,IAAA,EAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EAClC,CAAA,MAAO;AACL,IAAA,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AACjC,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,OAAO,CAAC,KAAA,CAAM,CAAC,GAAG,IAAA,EAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,IAClC;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,oBAAA,GAAQ,WAAA;;;ACrBf,IAAM,OAAA,GAAU,qCAAA;AAEhB,IAAM,UAAA,GAAa,SAAU,KAAA,EAAOA,EAAAA,EAAGG,MAAAA,EAAO;AAC5C,EAAA,MAAM,OAAA,GAAUA,MAAAA,CAAM,KAAA,CAAM,GAAA,CAAI,kBAAkB,EAAC;AACnD,EAAA,MAAM,IAAA,GAAO,MAAMH,EAAC,CAAA;AACpB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACrC,EAAA,IAAI,UAAU,IAAA,EAAM;AAElB,IAAA,MAAM,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,GAAc,IAAA,EAAK;AAEzC,IAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA,EAAG;AAChC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,EACxB;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,mBAAA,GAAQ,UAAA;;;ACVf,IAAM,YAAA,GAAe,GAAA;AACrB,IAAM,OAAA,GAAU,4BAAA;AAGhB,IAAM,KAAA,GAAQ,SAAU,KAAA,EAAO,IAAA,EAAMc,QAAO,GAAA,EAAK;AAC/C,EAAA,MAAM,GAAA,GAAM,KAAK,MAAA,EAAO;AACxB,EAAA,GAAA,CAAI,QAAA,GAAW,CAAC,KAAK,CAAA;AAErB,EAAA,IAAIC,OAAMD,MAAAA,GAAQ,GAAA;AAClB,EAAA,IAAIA,SAAQ,CAAA,EAAG;AACb,IAAAA,MAAAA,IAAS,CAAA;AAAA,EACX;AACA,EAAA,IAAI,KAAA,CAAMC,IAAG,CAAA,EAAG;AACd,IAAAA,IAAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,GAAA,CAAI,OAAO,CAAC,CAAC,CAAA,EAAGD,MAAAA,EAAOC,IAAG,CAAC,CAAA;AAC7B,CAAA;AAEA,IAAM,KAAA,GAAQ;AAAA;AAAA,EAEZ,GAAG,CAAC,KAAA,EAAOf,EAAAA,KAAM,oBAAA,CAAY,OAAOA,EAAC,CAAA;AAAA;AAAA,EAErC,GAAG,CAAC,KAAA,EAAOA,EAAAA,KAAM,oBAAA,CAAY,OAAOA,EAAC;AACvC,CAAA;AAEA,IAAM,OAAA,GAAU;AAAA;AAAA,EAEd,GAAG,CAAC,KAAA,EAAOA,OAAM,cAAA,CAAO,IAAA,CAAK,OAAOA,EAAC,CAAA;AAAA;AAAA,EAErC,GAAG,CAAC,KAAA,EAAOA,OAAM,cAAA,CAAO,IAAA,CAAK,OAAOA,EAAC,CAAA;AAAA;AAAA,EAErC,GAAG,CAAC,KAAA,EAAOA,OAAM,cAAA,CAAO,IAAA,CAAK,OAAOA,EAAC;AACvC,CAAA;AAGA,IAAM,SAAA,GAAY,SAAUiD,KAAAA,EAAM,IAAA,EAAMH,SAAQE,MAAAA,EAAO;AACrD,EAAA,KAAA,IAAShD,KAAI,CAAA,EAAGA,EAAAA,GAAIiD,KAAAA,CAAK,MAAA,EAAQjD,MAAK,CAAA,EAAG;AACvC,IAAA,MAAMyB,EAAAA,GAAIwB,MAAKjD,EAAC,CAAA;AAEhB,IAAA,IAAIyB,EAAAA,CAAE,IAAA,KAAS,IAAA,CAAK,MAAA,EAAQ;AAC1B,MAAA,OAAOA,EAAAA,CAAE,GAAA;AAAA,IACX,CAAA,MAAA,IAESuB,MAAAA,KAAU,IAAA,IAAQA,MAAAA,KAAUvB,GAAE,KAAA,EAAO;AAC5C,MAAA,OAAO,CAACqB,OAAM,CAAA,CAAE,MAAA,CAAOrB,GAAE,GAAG,CAAA;AAAA,IAC9B,CAAA,MAAA,IAESqB,YAAW,IAAA,IAAQA,OAAAA,KAAWrB,GAAE,MAAA,IAAUuB,MAAAA,IAASA,MAAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC5E,MAAA,OAAOvB,EAAAA,CAAE,GAAA,CAAI,MAAA,CAAOuB,MAAK,CAAA;AAAA,IAE3B;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,MAAA,GAAS,SAAU,KAAA,EAAO,IAAA,EAAM;AACpC,EAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AACzC,EAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAC3B,EAAA,OAAO,GAAA,CAAI,KAAK,CAAC,CAAA;AACnB,CAAA;AAIA,IAAM,QAAA,GAAW,SAAU,KAAA,EAAOhD,EAAAA,EAAG;AACnC,EAAA,KAAA,IAASU,KAAIV,EAAAA,GAAI,CAAA,EAAGU,EAAAA,GAAI,CAAA,EAAGA,MAAK,CAAA,EAAG;AACjC,IAAA,IAAI,CAAC,KAAA,CAAMA,EAAC,CAAA,EAAG;AACb,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAMA,EAAC,CAAA,CAAE,MAAA,KAAW,MAAA,EAAQ;AAC9B,MAAA,OAAO,CAAC,SAAS,KAAK,CAAA;AAAA,IACxB;AAAA,EACF;AACA,EAAA,OAAO,CAAC,SAAS,IAAI,CAAA;AACvB,CAAA;AAGA,IAAM,eAAe,CAAA,IAAA,KAAQ;AAC3B,EAAA,MAAM,EAAE,KAAA,EAAAP,MAAAA,EAAO,QAAA,EAAS,GAAI,IAAA;AAC5B,EAAA,MAAM,EAAE,KAAA,EAAAc,MAAAA,EAAO,OAAA,EAAAJ,WAAQ,GAAIV,MAAAA;AAC3B,EAAA,MAAM8C,KAAAA,GAAOhC,MAAAA,CAAM,GAAA,CAAI,YAAA,IAAgB,EAAC;AAGxC,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,EAAOV,EAAAA,KAAM;AAE7B,IAAA,KAAA,IAASP,KAAI,KAAA,CAAM,MAAA,GAAS,GAAGA,EAAAA,IAAK,CAAA,EAAGA,MAAK,CAAA,EAAG;AAC7C,MAAA,IAAI8C,OAAAA,GAAS,IAAA;AACb,MAAA,IAAIE,MAAAA,GAAQ,IAAA;AACZ,MAAA,IAAI,aAAa,IAAA,CAAK,KAAA,CAAMhD,EAAC,CAAA,CAAE,MAAM,MAAM,IAAA,EAAM;AAC/C,QAAA,MAAM,MAAM,KAAA,CAAMA,EAAC,CAAA,CAAE,MAAA,CAAO,MAAM,YAAY,CAAA;AAC9C,QAAA8C,OAAAA,GAAS,IAAI,CAAC,CAAA;AACd,QAAAE,MAAAA,GAAQ,IAAI,CAAC,CAAA;AAAA,MACf;AAEA,MAAA,IAAI,QAAQ,SAAA,CAAUC,KAAAA,EAAM,MAAMjD,EAAC,CAAA,EAAG8C,SAAQE,MAAK,CAAA;AAEnD,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,cAAA,CAAeA,MAAK,CAAA,EAAG;AACzC,QAAA,KAAA,GAAQ,KAAA,CAAMA,MAAK,CAAA,CAAE,KAAA,EAAOhD,IAAGG,MAAK,CAAA;AAAA,MACtC;AAEA,MAAA,IAAI,CAAC,KAAA,IAAS,OAAA,CAAQ,cAAA,CAAe2C,OAAM,CAAA,EAAG;AAC5C,QAAA,KAAA,GAAQ,OAAA,CAAQA,OAAM,CAAA,CAAE,KAAA,EAAO9C,EAAC,CAAA;AAAA,MAClC;AAEA,MAAA,IAAI8C,OAAAA,KAAW,OAAA,IAAWE,MAAAA,KAAU,GAAA,EAAK;AACvC,QAAA,KAAA,GAAQ,QAAA,CAAS,OAAOhD,EAAC,CAAA;AAAA,MAC3B;AAEA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,GAAQ,MAAA,CAAO,OAAO,IAAI,CAAA;AAC1B,QAAA,cAAA,CAAO,QAAA,EAAU,CAACO,EAAAA,EAAGP,EAAC,GAAG,KAAK,CAAA;AAC9B,QAAA,KAAA,CAAM,SAASO,EAAC,CAAA,EAAG,IAAA,EAAMP,EAAAA,EAAG,MAAM,MAAM,CAAA;AACxC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,IAAA,CAAK,KAAA,CAAMA,EAAC,CAAA,CAAE,MAAM,CAAA,EAAG;AACjC,QAAA,KAAA,GAAQ,oBAAA,CAAY,OAAOA,EAAC,CAAA;AAC5B,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,KAAA,GAAQ,MAAA,CAAO,OAAO,IAAI,CAAA;AAC1B,UAAA,cAAA,CAAO,QAAA,EAAU,CAACO,EAAAA,EAAGP,EAAC,GAAG,KAAK,CAAA;AAC9B,UAAAa,SAAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,KAAA,EAAO,eAAeV,MAAK,CAAA;AAE9C,UAAA,IAAI,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AACzC,YAAAU,SAAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,CAAC,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,MAAA,EAAQV,MAAAA,EAAO,IAAA,EAAM,YAAY,CAAA;AAAA,UAClE;AACA,UAAA,KAAA,CAAM,SAASI,EAAC,CAAA,EAAG,IAAA,EAAMP,EAAAA,EAAG,MAAM,MAAM,CAAA;AAAA,QAC1C;AACA,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,GAAQ,mBAAA,CAAW,KAAA,EAAOA,EAAAA,EAAGG,MAAK,CAAA;AAClC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,GAAQ,MAAA,CAAO,OAAO,IAAI,CAAA;AAC1B,QAAA,cAAA,CAAO,QAAA,EAAU,CAACI,EAAAA,EAAGP,EAAC,GAAG,KAAK,CAAA;AAC9B,QAAAa,SAAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,CAAC,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,MAAA,EAAQV,MAAAA,EAAO,IAAA,EAAM,kBAAkB,CAAA;AAAA,MACxE;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,CAAA;AACA,IAAO+C,qBAAAA,GAAQ,YAAA;;;AC/If,IAAOtB,gBAAAA,GAAQ,EAAE,YAAA,EAAAsB,qBAAAA,EAAa;;;ACC9B,IAAM,MAAA,GAAS;AAAA,EACb,KAAA,EAAO,aAAA;AAAA,EACP,OAAA,EAAStB,gBAAAA;AAAA,EACT,KAAA,EAAO,CAAC,cAAc;AACxB,CAAA;AACA,IAAOiB,eAAAA,GAAQ,MAAA;;;ACRf,IAAM,MAAA,GAAS,SAAU,IAAA,EAAM;AAC7B,EAAA,MAAM1C,SAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,MAAM,EAAE,KAAA,EAAAc,MAAAA,EAAO,OAAA,EAAAJ,SAAAA,KAAY,IAAA,CAAK,KAAA;AAChC,EAAA,MAAMsC,OAAAA,GAAStC,UAAQ,GAAA,CAAI,MAAA;AAC3B,EAAA,MAAM,EAAE,SAAA,EAAU,GAAII,MAAAA,CAAM,GAAA;AAC5B,EAAA,MAAM,KAAA,GAAQA,MAAAA,CAAM,GAAA,CAAI,WAAA,IAAe,EAAC;AAExC,EAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACzB,IAAA,KAAA,IAASjB,KAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AAExC,MAAA,MAAMP,EAAAA,GAAI,MAAMO,EAAC,CAAA;AACjB,MAAA,MAAM,IAAA,GAAOP,EAAAA,CAAE,OAAA,IAAWA,EAAAA,CAAE,MAAA;AAG5B,MAAA,IAAI,MAAM,IAAI,CAAA,KAAM,UAAa,KAAA,CAAMO,EAAAA,GAAI,CAAC,CAAA,EAAG;AAC7C,QAAA,MAAMe,IAAAA,GAAMf,EAAAA,GAAI,KAAA,CAAM,IAAI,CAAA,GAAI,CAAA;AAC9B,QAAA,KAAA,IAASU,EAAAA,GAAIK,IAAAA,EAAKL,EAAAA,GAAIV,EAAAA,EAAGU,MAAK,CAAA,EAAG;AAC/B,UAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAMV,EAAAA,EAAGU,KAAI,CAAC,CAAA;AAClC,UAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,IAAA,CAAK,MAAM,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAEnE,UAAA,IAAI,SAAA,CAAU,cAAA,CAAe,GAAG,CAAA,KAAM,IAAA,EAAM;AAC1C,YAAAyC,QAAO,KAAA,EAAO,SAAA,CAAU,GAAG,CAAA,EAAGhD,MAAAA,EAAO,OAAO,wBAAwB,CAAA;AACpE,YAAA,KAAA,CAAM,OAAA,CAAQ,CAAA,IAAA,KAAS,IAAA,CAAK,MAAA,GAAS,IAAK,CAAA;AAC1C,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,UAAU,IAAI,CAAA,KAAM,UAAa,SAAA,CAAU,cAAA,CAAe,IAAI,CAAA,EAAG;AACnE,QAAAgD,OAAAA,CAAO,CAAC1D,EAAC,CAAA,EAAG,UAAU,IAAI,CAAA,EAAGU,MAAAA,EAAO,KAAA,EAAO,kBAAkB,CAAA;AAC7D,QAAAV,GAAE,MAAA,GAAS,IAAA;AACX,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM;AAC/B,EAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAA,KAAM;AACtB,IAAA,EAAA,CAAG,QAAQ,CAAA,IAAA,KAAQ;AACjB,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAOmC,gBAAAA,GAAQ,EAAE,MAAA,EAAQ,MAAA,EAAQ,QAAQ,QAAA,EAAS;;;AC5ClD,IAAM,IAAA,GAAO,CAAA,GAAA,KAAO,UAAA,GAAa,GAAA,GAAM,SAAA;AACvC,IAAM,GAAA,GAAM,CAAA,GAAA,KAAO,gBAAA,GAAmB,GAAA,GAAM,SAAA;AAE5C,IAAM,KAAA,GAAQ,SAAU,IAAA,EAAM;AAC5B,EAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACzB,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,kEAAgB,CAAC,CAAA;AAClC,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAAnC,EAAAA,KAAK;AACjB,MAAA,IAAI,GAAA,GAAM,CAAA,EAAA,EAAK,GAAA,CAAI,QAAG,CAAC,CAAA,EAAA,CAAA;AACvB,MAAA,MAAM,GAAA,GAAMA,EAAAA,CAAE,QAAA,IAAYA,EAAAA,CAAE,IAAA,IAAQ,GAAA;AACpC,MAAA,IAAIA,EAAAA,CAAE,WAAW,IAAA,EAAM;AACrB,QAAA,GAAA,IAAO,CAAA,EAAG,IAAA,CAAK,GAAG,CAAC,CAAA,aAAA,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,GAAA,IAAO,IAAI,GAAG,CAAA;AAAA,MAChB;AACA,MAAA,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,IACjB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH,CAAA;AACA,IAAO,aAAA,GAAQ,KAAA;;;AChBf,IAAOoD,eAAAA,GAAQ;AAAA;AAAA,EAEb,OAAA,EAAAjB,gBAAAA;AAAA,EAEA,MAAA,EAAQ,CAAAzB,MAAAA,KAAS;AACf,IAAA,MAAMU,SAAAA,GAAUV,OAAM,OAAA,CAAQ,GAAA;AAE9B,IAAAU,SAAAA,CAAQ,WAAA,CAAY,QAAA,GAAW,CAAA,IAAA,KAAQ,KAAK,MAAA,KAAW,IAAA;AAEvD,IAAAA,SAAAA,CAAQ,MAAM,MAAA,GAAS,aAAA;AACvB,IAAAA,SAAAA,CAAQ,MAAM,MAAA,GAAS,aAAA;AAAA,EACzB,CAAA;AAAA,EAEA,GAAA,EAAK,SAAUM,KAAAA,EAAM;AAEnB,IAAAA,KAAAA,CAAK,SAAA,CAAU,MAAA,GAAS,WAAY;AAClC,MAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAA,KAAM;AACtB,QAAA,EAAA,CAAG,QAAQ,CAAA,IAAA,KAAQ;AACjB,UAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,QAChB,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAEA,IAAAA,KAAAA,CAAK,SAAA,CAAU,QAAA,GAAW,WAAY;AACpC,MAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,IACzB,CAAA;AAEA,IAAAA,KAAAA,CAAK,SAAA,CAAU,QAAA,GAAW,WAAY;AACpC,MAAA,OAAO,IAAA,CAAK,MAAM,YAAY,CAAA;AAAA,IAChC,CAAA;AAAA,EACF,CAAA;AAAA;AAAA,EAEA,KAAA,EAAO,CAAC,QAAQ;AAClB,CAAA;;;ACpCA,IAAM,SAAA,GAAY,SAAU,KAAA,EAAO,OAAA,EAAShB,MAAAA,EAAO;AACjD,EAAA,MAAM,EAAE,KAAA,EAAAc,MAAAA,EAAO,OAAA,EAAAJ,WAAQ,GAAIV,MAAAA;AAC3B,EAAA,MAAMgD,OAAAA,GAAStC,UAAQ,GAAA,CAAI,MAAA;AAC3B,EAAA,MAAM,KAAA,GAAQI,MAAAA,CAAM,GAAA,CAAI,WAAA,IAAe,EAAC;AACxC,EAAA,MAAM,EAAE,OAAA,EAAAmC,QAAAA,EAAQ,GAAInC,MAAAA,CAAM,OAAO,EAAC;AAClC,EAAA,MAAMxB,EAAAA,GAAI,MAAM,OAAO,CAAA;AACvB,EAAA,MAAM,IAAA,GAAOA,EAAAA,CAAE,OAAA,IAAWA,EAAAA,CAAE,MAAA;AAG5B,EAAA,IAAI,MAAM,IAAI,CAAA,KAAM,UAAa,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA,EAAG;AACnD,IAAA,MAAMsB,IAAAA,GAAM,OAAA,GAAU,KAAA,CAAM,IAAI,CAAA,GAAI,CAAA;AACpC,IAAA,KAAA,IAASf,EAAAA,GAAIe,IAAAA,EAAKf,EAAAA,GAAI,OAAA,EAASA,MAAK,CAAA,EAAG;AACrC,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,OAAA,EAASA,KAAI,CAAC,CAAA;AACxC,MAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AACrB,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,IAAA,CAAK,MAAM,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAEnE,MAAA,IAAIoD,QAAAA,CAAQ,cAAA,CAAe,GAAG,CAAA,KAAM,IAAA,EAAM;AACxC,QAAA,MAAM,GAAA,GAAMA,SAAQ,GAAG,CAAA;AACvB,QAAAD,OAAAA,CAAO,KAAA,EAAO,GAAA,EAAKhD,MAAAA,EAAO,OAAO,iBAAiB,CAAA;AAElD,QAAA,IAAI,GAAA,IAAO,GAAA,CAAI,MAAA,KAAW,CAAA,KAAM,GAAA,CAAI,CAAC,CAAA,KAAM,aAAA,IAAiB,GAAA,CAAI,CAAC,CAAA,KAAM,aAAA,CAAA,EAAgB;AACrF,UAAAgD,OAAAA,CAAO,CAAC,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,UAAA,EAAYhD,MAAAA,EAAO,KAAA,EAAO,oBAAoB,CAAA;AAAA,QACnE;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,kBAAA,GAAQ,SAAA;;;ACjCf,IAAM,MAAA,GAAS,6CAAA;AAEf,IAAM,WAAA,mBAAc,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,YAAA,EAAc,WAAA,EAAa,QAAA,EAAU,cAAA,EAAgB,WAAA,EAAa,YAAY,CAAC,CAAA;AAGpH,IAAM,YAAA,GAAe,SAAU,KAAA,EAAOH,EAAAA,EAAGG,MAAAA,EAAO;AAC9C,EAAA,MAAM,EAAE,KAAA,EAAAc,MAAAA,EAAO,OAAA,EAAAJ,WAAQ,GAAIV,MAAAA;AAE3B,EAAA,MAAMgD,OAAAA,GAAStC,UAAQ,GAAA,CAAI,MAAA;AAC3B,EAAA,MAAM,EAAE,OAAA,EAAAuC,QAAAA,EAAQ,GAAInC,MAAAA,CAAM,GAAA;AAG1B,EAAA,MAAMxB,EAAAA,GAAI,MAAMO,EAAC,CAAA;AACjB,EAAA,MAAM,IAAA,GAAOP,EAAAA,CAAE,OAAA,IAAWA,EAAAA,CAAE,MAAA;AAE5B,EAAA,IAAI2D,SAAQ,IAAI,CAAA,KAAM,UAAaA,QAAAA,CAAQ,cAAA,CAAe,IAAI,CAAA,EAAG;AAC/D,IAAAD,OAAAA,CAAO,CAAC1D,EAAC,CAAA,EAAG2D,SAAQ,IAAI,CAAA,EAAGjD,MAAAA,EAAO,KAAA,EAAO,WAAW,CAAA;AACpD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAIV,GAAE,KAAA,EAAO;AACX,IAAA,MAAM,KAAA,GAAQA,GAAE,KAAA,CAAM,IAAA,CAAK,SAAO2D,QAAAA,CAAQ,cAAA,CAAe,GAAG,CAAC,CAAA;AAC7D,IAAA,IAAI,KAAA,EAAO;AACT,MAAAD,OAAAA,CAAO,CAAC1D,EAAC,CAAA,EAAG2D,SAAQ,KAAK,CAAA,EAAGjD,MAAAA,EAAO,KAAA,EAAO,iBAAiB,CAAA;AAC3D,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,KAAM,IAAA,EAAM;AAC9B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACpC,IAAA,IAAIiD,SAAQ,cAAA,CAAe,IAAI,CAAA,IAAK,IAAA,CAAK,SAAS,CAAA,EAAG;AAEnD,MAAA,IAAI,WAAA,CAAY,GAAA,CAAIA,QAAAA,CAAQ,IAAI,CAAC,CAAA,EAAG;AAElC,QAAAD,OAAAA,CAAO,CAAC1D,EAAC,CAAA,EAAG2D,SAAQ,IAAI,CAAA,EAAGjD,MAAAA,EAAO,KAAA,EAAO,kBAAkB,CAAA;AAC3D,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,mBAAA,GAAQ,YAAA;;;ACpCf,IAAM,OAAA,GAAU,SAAU,IAAA,EAAM;AAC9B,EAAA,MAAMA,SAAQ,IAAA,CAAK,KAAA;AAEnB,EAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACzB,IAAA,KAAA,IAASH,KAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACxC,MAAA,IAAI,KAAA,CAAMA,EAAC,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA,EAAG;AAC5B,QAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,QAAA,KAAA,GAAQ,KAAA,IAAS,kBAAA,CAAU,KAAA,EAAOA,EAAAA,EAAGG,MAAK,CAAA;AAE1C,QAAA,KAAA,GAAQ,KAAA,IAAS,mBAAA,CAAW,KAAA,EAAOH,EAAAA,EAAGG,MAAK,CAAA;AAAA,MAC7C;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,CAAA;AAEA,IAAOyB,gBAAAA,GAAQ;AAAA,EACb;AACF,CAAA;;;ACrBA,IAAMyB,OAAAA,GAAS,SAAU,KAAA,EAAO;AAE9B,EAAA,MAAM,MAAM,EAAC;AAEb,EAAA,MAAM,SAAS,EAAC;AAEhB,EAAA,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAA,IAAA,KAAQ;AACjC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAI,CAAA;AAEtB,IAAA,IAAA,GAAO,IAAA,CAAK,WAAA,EAAY,CAAE,IAAA,EAAK;AAC/B,IAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAE9B,IAAA,MAAMC,MAAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,IAAA,IAAIA,MAAAA,CAAM,SAAS,CAAA,EAAG;AAEpB,MAAA,IAAI,MAAA,CAAOA,MAAAA,CAAM,CAAC,CAAC,CAAA,KAAM,MAAA,IAAaA,MAAAA,CAAM,MAAA,GAAS,MAAA,CAAOA,MAAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACrE,QAAA,MAAA,CAAOA,MAAAA,CAAM,CAAC,CAAC,CAAA,GAAIA,MAAAA,CAAM,MAAA;AAAA,MAC3B;AAAA,IACF;AACA,IAAA,GAAA,CAAI,IAAI,CAAA,GAAI,GAAA,CAAI,IAAI,CAAA,IAAK,GAAA;AAAA,EAC3B,CAAC,CAAA;AAED,EAAA,OAAO,IAAI,EAAE,CAAA;AACb,EAAA,OAAO,IAAI,IAAI,CAAA;AACf,EAAA,OAAO,IAAI,GAAG,CAAA;AACd,EAAA,OAAO,EAAE,KAAK,MAAA,EAAO;AACvB,CAAA;AACA,IAAO,cAAA,GAAQD,OAAAA;;;AC1Bf,IAAO1B,gBAAAA,GAAQ;AAAA,EACb,GAAA,EAAK;AAAA,IACH,aAAA,EAAA;AAAA;AAEJ,CAAA;;;ACLA,IAAM,QAAA,GAAW,SAAU,KAAA,EAAO,QAAA,GAAW,KAAA,EAAO;AAClD,EAAA,MAAMxB,MAAAA,GAAQ,KAAK,KAAA,EAAM;AACzB,EAAA,MAAM,EAAE,OAAA,EAAAU,SAAAA,EAAS,KAAA,EAAAI,QAAM,GAAId,MAAAA;AAC3B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAAO,EAAAA,KAAK;AAC9B,IAAA,IAAI,OAAO,KAAA,CAAMA,EAAC,CAAA,KAAM,QAAA,IAAY,MAAMA,EAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5D,MAAA,KAAA,CAAMA,EAAC,CAAA,GAAI,KAAA,CAAMA,EAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AAAA,IACtC;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,MAAM,EAAE,GAAA,EAAA6C,IAAAA,EAAK,MAAA,EAAAC,OAAAA,KAAW3C,SAAAA,CAAQ,GAAA,CAAI,aAAA,CAAc,KAAA,EAAOV,MAAK,CAAA;AAC9D,IAAA,MAAA,CAAO,MAAA,CAAOc,MAAAA,CAAM,GAAA,CAAI,WAAA,EAAauC,OAAM,CAAA;AAC3C,IAAA,MAAA,CAAO,MAAA,CAAOvC,MAAAA,CAAM,GAAA,CAAI,SAAA,EAAWsC,IAAG,CAAA;AACtC,IAAA;AAAA,EACF;AAEA,EAAA,IAAI1C,SAAAA,CAAQ,IAAI,aAAA,EAAe;AAE7B,IAAA,MAAM,EAAE,GAAA,EAAA0C,IAAAA,EAAK,MAAA,EAAAC,OAAAA,KAAW3C,SAAAA,CAAQ,GAAA,CAAI,aAAA,CAAc,KAAA,EAAOV,MAAK,CAAA;AAC9D,IAAA,MAAA,CAAO,MAAA,CAAOc,MAAAA,CAAM,GAAA,CAAI,OAAA,EAASsC,IAAG,CAAA;AACpC,IAAA,MAAA,CAAO,MAAA,CAAOtC,MAAAA,CAAM,GAAA,CAAI,WAAA,EAAauC,OAAM,CAAA;AAAA,EAC7C;AAEA,EAAA,MAAM,EAAE,KAAK,MAAA,EAAO,GAAI3C,UAAQ,GAAA,CAAI,aAAA,CAAc,OAAOV,MAAK,CAAA;AAC9D,EAAA,MAAA,CAAO,MAAA,CAAOc,MAAAA,CAAM,GAAA,CAAI,OAAA,EAAS,GAAG,CAAA;AACpC,EAAA,MAAA,CAAO,MAAA,CAAOA,MAAAA,CAAM,GAAA,CAAI,WAAA,EAAa,MAAM,CAAA;AAC7C,CAAA;AAEA,IAAO,WAAA,GAAQ,EAAE,QAAA,EAAS;;;AC7B1B,IAAMA,MAAAA,GAAQ;AAAA,EACZ,GAAA,EAAK;AAAA,IACH,SAAS,EAAC;AAAA;AAAA,IACV,aAAa,EAAC;AAAA,IACd,WAAW;AAAC;AAAA;AAEhB,CAAA;AAEA,IAAO4B,eAAAA,GAAQ;AAAA,EACb,KAAA,EAAA5B,MAAAA;AAAA,EACA,OAAA,EAAAU,gBAAAA;AAAA,EACA,OAAA,EAAAC,gBAAAA;AAAA,EACA,GAAA,EAAA,WAAA;AAAA,EACA,KAAA,EAAO,CAAC,SAAS;AACnB,CAAA;;;ACfA,IAAM,QAAA,GAAW,SAAU,MAAA,EAAQzB,MAAAA,EAAO;AACxC,EAAA,MAAM,EAAE,OAAA,EAAAU,SAAAA,EAAS,KAAA,EAAAI,QAAM,GAAId,MAAAA;AAC3B,EAAA,MAAM,QAAQU,SAAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,UAAA,CAAW,QAAQI,MAAK,CAAA,CAAE,GAAA,CAAI,CAAAxB,OAAKoB,SAAAA,CAAQ,GAAA,CAAI,SAAS,eAAA,CAAgBpB,EAAAA,EAAGwB,MAAK,CAAC,CAAA;AACpH,EAAA,OAAO,MAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA;AAClD,CAAA;AAGA,IAAM,SAAA,GAAY,SAAU,OAAA,EAASd,MAAAA,EAAO;AAG1C,EAAA,MAAM,MAAA,GAAS,CAAC,EAAE,CAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAI,CAAA;AACnB,EAAA,MAAM,MAAA,GAAS,CAAC,CAAC,CAAA;AAEjB,EAAA,MAAM,KAAK,EAAC;AACZ,EAAA,IAAII,EAAAA,GAAI,CAAA;AACR,EAAA,OAAA,CAAQ,OAAA,CAAQ,SAAU,MAAA,EAAQ;AAChC,IAAA,IAAI,IAAA,GAAO,CAAA;AAEX,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,MAAA,EAAQJ,MAAK,CAAA;AACpC,IAAA,KAAA,IAASH,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,QAAQA,EAAAA,EAAAA,EAAK;AACrC,MAAA,MAAM,IAAA,GAAO,MAAMA,EAAC,CAAA;AACpB,MAAA,IAAI,MAAA,CAAO,IAAI,CAAA,IAAK,MAAA,CAAO,IAAI,CAAA,CAAE,cAAA,CAAe,IAAI,CAAA,EAAG;AACrD,QAAA,IAAA,GAAO,MAAA,CAAO,IAAI,CAAA,CAAE,IAAI,CAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAAO,EAAAA,EAAAA;AACA,QAAA,MAAA,CAAO,IAAI,CAAA,CAAE,IAAI,CAAA,GAAIA,EAAAA;AACrB,QAAA,MAAA,CAAOA,EAAC,IAAI,EAAC;AACb,QAAA,IAAA,GAAOA,EAAAA;AACP,QAAA,KAAA,CAAMA,EAAC,CAAA,GAAI,IAAA;AAAA,MACb;AAAA,IACF;AACA,IAAA,KAAA,CAAM,IAAI,CAAA,GAAI,CAAC,KAAA,CAAM,MAAM,CAAA;AAAA,EAC7B,CAAC,CAAA;AAED,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,CAAC,CAAA,EAAG;AAC5B,IAAAA,EAAAA,GAAI,MAAA,CAAO,CAAC,CAAA,CAAE,IAAI,CAAA;AAClB,IAAA,MAAA,CAAOA,EAAC,CAAA,GAAI,CAAA;AACZ,IAAA,EAAA,CAAG,KAAKA,EAAC,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,GAAG,MAAA,EAAQ;AAChB,IAAA,MAAMC,EAAAA,GAAI,GAAG,KAAA,EAAM;AAEnB,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAC,CAAA;AAClC,IAAA,KAAA,IAASR,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,MAAA,MAAM,IAAA,GAAO,KAAKA,EAAC,CAAA;AACnB,MAAA,MAAMJ,EAAAA,GAAI,MAAA,CAAOY,EAAC,CAAA,CAAE,IAAI,CAAA;AACxB,MAAA,EAAA,CAAG,KAAKZ,EAAC,CAAA;AAET,MAAAW,EAAAA,GAAI,OAAOC,EAAC,CAAA;AACZ,MAAA,OAAOD,EAAAA,GAAI,KAAK,CAAC,MAAA,CAAOA,EAAC,CAAA,CAAE,cAAA,CAAe,IAAI,CAAA,EAAG;AAC/C,QAAAA,EAAAA,GAAI,OAAOA,EAAC,CAAA;AAAA,MACd;AACA,MAAA,IAAI,MAAA,CAAO,cAAA,CAAeA,EAAC,CAAA,EAAG;AAC5B,QAAA,MAAM,EAAA,GAAK,MAAA,CAAOA,EAAC,CAAA,CAAE,IAAI,CAAA;AACzB,QAAA,MAAA,CAAOX,EAAC,CAAA,GAAI,EAAA;AACZ,QAAA,IAAI,KAAA,CAAM,EAAE,CAAA,EAAG;AACb,UAAA,KAAA,CAAMA,EAAC,CAAA,GAAI,KAAA,CAAMA,EAAC,KAAK,EAAC;AACxB,UAAA,KAAA,CAAMA,EAAC,IAAI,KAAA,CAAMA,EAAC,EAAE,MAAA,CAAO,KAAA,CAAM,EAAE,CAAC,CAAA;AAAA,QACtC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,CAAOA,EAAC,CAAA,GAAI,CAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AACjC,CAAA;AACA,IAAO,iBAAA,GAAQ,SAAA;;;ACtEf,IAAM,SAAA,GAAY,SAAU,KAAA,EAAO,IAAA,EAAM6D,KAAAA,EAAM;AAC7C,EAAA,IAAIlD,EAAAA,GAAI,CAAA;AACR,EAAA,MAAM,UAAU,EAAC;AACjB,EAAA,KAAA,IAASP,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,QAAQA,EAAAA,EAAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAMA,EAAC,CAAA,CAAEyD,MAAK,IAAI,CAAA,IAAK,KAAA,CAAMzD,EAAC,CAAA,CAAE,MAAA;AAE7C,IAAA,OAAOO,EAAAA,GAAI,CAAA,KAAM,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAA,KAAM,MAAA,IAAa,CAAC,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAA,CAAE,cAAA,CAAe,IAAI,CAAA,CAAA,EAAI;AACtF,MAAAA,EAAAA,GAAI,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAA,IAAK,CAAA;AAAA,IACxB;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAA,CAAE,cAAA,CAAe,IAAI,CAAA,EAAG;AACxC,MAAA;AAAA,IACF;AACA,IAAAA,EAAAA,GAAI,IAAA,CAAK,MAAA,CAAOA,EAAC,EAAE,IAAI,CAAA;AACvB,IAAA,IAAI,IAAA,CAAK,KAAA,CAAMA,EAAC,CAAA,EAAG;AACjB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAMA,EAAC,CAAA;AACxB,MAAA,KAAA,IAASkB,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,CAAI,QAAQA,EAAAA,EAAAA,EAAK;AACnC,QAAA,MAAM,GAAA,GAAM,IAAIA,EAAC,CAAA;AACjB,QAAA,MAAM,IAAA,GAAO,KAAA,CAAMzB,EAAAA,GAAI,GAAA,GAAM,CAAC,CAAA;AAC9B,QAAA,MAAM,CAAC,EAAA,EAAIc,MAAK,CAAA,GAAI,IAAA,CAAK,KAAA;AACzB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAAA,EAAIA,MAAAA,EAAOA,SAAQ,GAAA,EAAK,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT,CAAA;AAEA,IAAM,SAAA,GAAY,SAAU,KAAA,EAAOvB,MAAAA,EAAO;AACxC,EAAA,KAAA,IAASS,KAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACxC,IAAA,IAAIT,OAAM,GAAA,CAAI,KAAA,CAAMS,EAAC,CAAC,MAAM,IAAA,EAAM;AAChC,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,IAAA,GAAO,SAAU,IAAA,EAAM,IAAA,EAAMyD,KAAAA,EAAM;AACvC,EAAA,IAAI,UAAU,EAAC;AACf,EAAAA,KAAAA,CAAK,IAAA,GAAOA,KAAAA,CAAK,IAAA,IAAQ,QAAA;AACzB,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG;AACnC,IAAA,OAAA,CAAQ,MAAM,gCAAgC,CAAA;AAC9C,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AACA,EAAA,MAAM,aAAa,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAE7C,EAAA,KAAA,IAASzD,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,QAAQA,EAAAA,EAAAA,EAAK;AAEpC,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAA,IAAK,SAAA,CAAU,UAAA,EAAY,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAC,MAAM,IAAA,EAAM;AACnF,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,KAAKA,EAAC,CAAA;AACpB,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,EAAO,IAAA,EAAMyD,KAAI,CAAA;AACzC,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,OAAA,GAAU,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IAChC;AAAA,EACF;AACA,EAAA,OAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAC5B,CAAA;AACA,IAAO,YAAA,GAAQ,IAAA;;;ACzDf,IAAMjC,YAAW,CAAA,GAAA,KAAO;AACtB,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,iBAAA;AACjD,CAAA;AAEe,SAARoB,aAAkBzB,KAAAA,EAAM;AAG7B,EAAAA,MAAK,SAAA,CAAU,MAAA,GAAS,SAAU,KAAA,EAAOsC,KAAAA,GAAO,EAAC,EAAG;AAClD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAK,IAAA,EAAK;AAAA,IACnB;AACA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,KAAA,GAAQ,CAAC,KAAK,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,IAAA,GAAOjC,UAAS,KAAK,CAAA,GAAI,QAAQ,iBAAA,CAAM,KAAA,EAAO,KAAK,KAAK,CAAA;AAC9D,IAAA,IAAI,GAAA,GAAM,YAAA,CAAK,IAAA,EAAM,IAAA,EAAMiC,KAAI,CAAA;AAC/B,IAAA,GAAA,GAAM,IAAI,MAAA,EAAO;AACjB,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AACF;;;ACrBA,IAAM,QAAA,GAAW,CAACR,KAAAA,EAAM,GAAA,KAAQ;AAC9B,EAAA,KAAA,IAASjD,KAAIiD,KAAAA,CAAK,MAAA,GAAS,GAAGjD,EAAAA,IAAK,CAAA,EAAGA,MAAK,CAAA,EAAG;AAC5C,IAAA,IAAIiD,KAAAA,CAAKjD,EAAC,CAAA,KAAM,GAAA,EAAK;AACnB,MAAAiD,KAAAA,GAAOA,KAAAA,CAAK,KAAA,CAAM,CAAA,EAAGjD,KAAI,CAAC,CAAA;AAC1B,MAAA,OAAOiD,KAAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAOA,KAAAA;AACT,CAAA;AAGA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM;AAC/B,EAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAAxB,EAAAA,KAAK;AACjC,IAAA,IAAI,MAAA,CAAO,IAAA,CAAKA,EAAC,CAAA,CAAE,WAAW,CAAA,EAAG;AAC/B,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAOA,EAAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,MAAS,CAAA;AAE7C,EAAA,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAA;AAErC,EAAA,IAAA,CAAK,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA;AACtC,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,gBAAA,GAAQ,QAAA;;;ACtBf,IAAM,GAAA,GAAM;AAAA;AAAA,EAEV,SAAA,EAAW,SAAU,KAAA,EAAO;AAC1B,IAAA,MAAM,IAAA,GAAO,iBAAA,CAAM,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AACtC,IAAA,OAAO,iBAAS,IAAI,CAAA;AAAA,EACtB;AACF,CAAA;AAEA,GAAA,CAAI,UAAU,GAAA,CAAI,SAAA;AAElB,IAAOoB,eAAAA,GAAQ;AAAA,EACb,GAAA,EAAAD,YAAAA;AAAA,EACA;AACF,CAAA;;;AClBO,IAAM,UAAA,GAAa,SAAU,IAAA,EAAM,MAAA,EAAQ;AAChD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,MAAMrC,EAAAA,GAAI,IAAI,CAAC,CAAA;AACf,IAAA,IAAI,MAAA,CAAOA,EAAC,CAAA,EAAG;AACb,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAOA,EAAC,EAAE,CAAC,CAAA;AACpB,MAAA,GAAA,CAAI,CAAC,CAAA,IAAK,MAAA,CAAOA,EAAC,EAAE,CAAC,CAAA;AACrB,MAAA,GAAA,CAAI,CAAC,CAAA,IAAK,MAAA,CAAOA,EAAC,EAAE,CAAC,CAAA;AAAA,IACvB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AAGO,IAAMmD,YAAAA,GAAc,SAAU,GAAA,EAAK,MAAA,EAAQ;AAChD,EAAA,IAAI,EAAE,MAAK,GAAI,GAAA;AACf,EAAA,MAAM,EAAE,SAAQ,GAAI,GAAA;AACpB,EAAA,IAAA,GAAO,UAAA,CAAW,MAAM,MAAM,CAAA;AAC9B,EAAA,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAAhD,EAAAA,KAAK;AAChC,IAAA,OAAA,CAAQA,EAAC,CAAA,GAAI,UAAA,CAAW,OAAA,CAAQA,EAAC,GAAG,MAAM,CAAA;AAAA,EAC5C,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AACzB,CAAA;AAGO,IAAM,SAAA,GAAY,SAAU,IAAA,EAAM+C,KAAAA,EAAMtD,MAAAA,EAAO;AACpD,EAAA,MAAM,GAAA,GAAMA,OAAM,OAAA,CAAQ,GAAA;AAC1B,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAA,GAAO,OAAO,IAAI,CAAA;AAAA,EACpB;AAEA,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAA,GAAO,GAAA,CAAI,WAAA,CAAY,IAAA,EAAMA,MAAK,CAAA;AAClC,IAAA,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,IAAA,EAAMsD,KAAAA,EAAMtD,MAAK,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAMqB,YAAW,CAAA,GAAA,KAAO;AACtB,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,iBAAA;AACjD,CAAA;AAGO,IAAM,SAAS,CAAA,GAAA,KAAO,GAAA,IAAOA,UAAS,GAAG,CAAA,IAAK,IAAI,MAAA,KAAW,IAAA;AAE7D,IAAM,QAAQ,CAAA,GAAA,KAAO,GAAA,IAAOA,UAAS,GAAG,CAAA,IAAK,IAAI,KAAA,KAAU,IAAA;;;AC7ClE,IAAM,KAAA,GAAQ,SAAU,IAAA,EAAM,KAAA,EAAOiC,KAAAA,EAAM;AACzC,EAAA,MAAM,GAAA,GAAM,KAAK,OAAA,CAAQ,GAAA;AAEzB,EAAA,IAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAChB,IAAA,OAAO,IAAA,CAAK,aAAa,IAAI,CAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AACf,IAAA,OAAO,IAAA,CAAK,MAAM,IAAA,EAAM,EAAE,QAAQ,KAAA,EAAO,CAAA,CAAE,IAAA,CAAK,MAAA,EAAO;AAAA,EACzD;AACA,EAAA,IAAA,GAAO,SAAA,CAAU,IAAA,EAAMA,KAAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,EAAE,IAAA,EAAM,KAAA,EAAM;AAC3B,EAAA,MAAM,MAAM,GAAA,CAAI,KAAA,CAAM,KAAK,IAAA,EAAM,IAAA,EAAM,KAAK,MAAM,CAAA;AAClD,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,KAAYC,YAAAA,CAAY,GAAA,EAAK,KAAK,WAAW,CAAA;AAC3D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAC7B,EAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM,KAAA,EAAOD,KAAAA,EAAM;AAC5C,EAAA,MAAM,GAAA,GAAM,KAAK,OAAA,CAAQ,GAAA;AAEzB,EAAA,IAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAChB,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AACf,IAAA,OAAO,IAAA,CAAK,MAAM,IAAA,EAAM,EAAE,QAAQ,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,CAAA,CAAE,IAAA;AAAA,EAC7D;AACA,EAAA,IAAA,GAAO,SAAA,CAAU,IAAA,EAAMA,KAAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,IAAA,EAAK;AAC1C,EAAA,MAAM,MAAM,GAAA,CAAI,KAAA,CAAM,KAAK,IAAA,EAAM,IAAA,EAAM,KAAK,MAAM,CAAA;AAClD,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,KAAYC,YAAAA,CAAY,GAAA,EAAK,KAAK,WAAW,CAAA;AAC3D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAC7B,EAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,GAAA,GAAM,SAAU,IAAA,EAAM,KAAA,EAAOD,KAAAA,EAAM;AACvC,EAAA,MAAM,GAAA,GAAM,KAAK,OAAA,CAAQ,GAAA;AAEzB,EAAA,IAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAChB,IAAA,MAAMf,KAAAA,GAAO,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA,CAAE,WAAA;AACrC,IAAA,OAAOA,MAAK,MAAA,GAAS,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AACf,IAAA,OAAO,IAAA,CAAK,MAAM,IAAA,EAAM,EAAE,QAAQ,KAAA,EAAO,EAAE,IAAA,CAAK,KAAA;AAAA,EAClD;AACA,EAAA,IAAA,GAAO,SAAA,CAAU,IAAA,EAAMe,KAAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,IAAA,EAAK;AAC1C,EAAA,MAAM,IAAA,GAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAM,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA,CAAE,IAAA;AACrD,EAAA,OAAO,KAAK,MAAA,GAAS,CAAA;AACvB,CAAA;AAGA,IAAM,IAAA,GAAO,SAAU,IAAA,EAAM,KAAA,EAAOA,KAAAA,EAAM;AACxC,EAAA,MAAM,GAAA,GAAM,KAAK,OAAA,CAAQ,GAAA;AAEzB,EAAA,IAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAChB,IAAA,OAAO,IAAA,CAAK,OAAO,CAAAhD,EAAAA,KAAKA,GAAE,YAAA,CAAa,IAAI,EAAE,KAAK,CAAA;AAAA,EACpD;AAEA,EAAA,IAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AACf,IAAA,MAAMA,EAAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,EAAE,QAAQ,KAAA,EAAO,CAAA,CAAE,IAAA,CAAK,MAAA,EAAO;AAC1D,IAAA,OAAO,IAAA,CAAK,GAAGA,EAAC,CAAA;AAAA,EAClB;AACA,EAAA,IAAA,GAAO,SAAA,CAAU,IAAA,EAAMgD,KAAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,IAAA,EAAK;AAC1C,EAAA,IAAI,OAAO,IAAA,CAAK,WAAA;AAChB,EAAA,MAAMlE,MAAAA,GAAQ,IAAA,CAAK,MAAA,IAAU,EAAC;AAC9B,EAAA,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAKS,EAAAA,KAAM;AAC7B,IAAA,MAAMS,EAAAA,GAAI,IAAA,CAAK,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAC3B,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAMA,EAAAA,CAAE,MAAM,IAAA,EAAMlB,MAAAA,CAAMS,EAAC,CAAC,CAAA,CAAE,IAAA;AAC9C,IAAA,OAAO,IAAI,MAAA,GAAS,CAAA;AAAA,EACtB,CAAC,CAAA;AACD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAE7B,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,GAAA,CAAI,CAAA,GAAA,KAAOT,OAAM,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,IAAA,GAAO,SAAU,IAAA,EAAM,KAAA,EAAOkE,KAAAA,EAAM;AACxC,EAAA,MAAM,EAAE,OAAA,EAAA5C,SAAAA,EAAQ,GAAI,IAAA;AACpB,EAAA,MAAM,MAAMA,SAAAA,CAAQ,GAAA;AAEpB,EAAA,IAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAChB,IAAA,OAAO,IAAA,CAAK,OAAO,CAAAJ,EAAAA,KAAK,CAACA,EAAAA,CAAE,YAAA,CAAa,IAAI,CAAA,CAAE,KAAK,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AACf,IAAA,MAAMA,EAAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,EAAE,QAAQ,KAAA,EAAO,CAAA,CAAE,IAAA,CAAK,MAAA,EAAO;AAC1D,IAAA,OAAO,IAAA,CAAK,KAAKA,EAAC,CAAA;AAAA,EACpB;AAEA,EAAA,IAAA,GAAO,SAAA,CAAU,IAAA,EAAMgD,KAAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AACvC,EAAA,MAAMlE,MAAAA,GAAQ,IAAA,CAAK,MAAA,IAAU,EAAC;AAC9B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAACkB,IAAGT,EAAAA,KAAM;AACjC,IAAA,MAAM,IAAA,GAAO,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,IAAA,EAAK;AAC1C,IAAA,MAAM,IAAA,GAAO,IAAI,KAAA,CAAMS,EAAAA,CAAE,MAAM,IAAA,EAAMlB,MAAAA,CAAMS,EAAC,CAAC,CAAA,CAAE,IAAA;AAC/C,IAAA,OAAO,KAAK,MAAA,KAAW,CAAA;AAAA,EACzB,CAAC,CAAA;AAED,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,IAAA,CAAK,GAAA,CAAI,SAAOT,MAAAA,CAAM,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAO,gBAAQ,EAAE,QAAA,EAAU,OAAO,GAAA,EAAK,EAAA,EAAI,MAAM,IAAA,EAAK;;;ACjHtD,IAAM,MAAA,GAAS,SAAU,IAAA,EAAM,KAAA,EAAOkE,KAAAA,EAAM;AAC1C,EAAA,MAAM,EAAE,MAAA,EAAApB,OAAAA,EAAO,GAAI,IAAA,CAAK,QAAQ,GAAA,CAAI,OAAA;AACpC,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,MAAM,GAAA,GAAMA,OAAAA,CAAO,IAAA,CAAK,WAAW,CAAA;AACnC,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA3B,EAAAA,KAAK;AAE5B,IAAA,MAAM,QAAQ,GAAA,CAAIA,EAAC,CAAA,CAAE,IAAA,CAAK,CAAC7B,EAAAA,EAAG,CAAA,KAAOA,EAAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,IAAI,CAAA,GAAI,EAAG,EAAE,CAAC,CAAA;AAC7D,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA,EAAG;AAChB,MAAA,GAAA,CAAI,IAAA,CAAK,CAAC,KAAA,CAAM,CAAC,GAAG,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAAA,IAClC;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAChC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO4E,KAAI,CAAA;AACzC,CAAA;AAEA,IAAM,KAAA,GAAQ,SAAU,IAAA,EAAM,KAAA,EAAOA,KAAAA,EAAM;AACzC,EAAA,MAAM,EAAE,MAAA,EAAApB,OAAAA,EAAO,GAAI,IAAA,CAAK,QAAQ,GAAA,CAAI,OAAA;AACpC,EAAA,MAAM,OAAO,EAAC;AACd,EAAA,MAAM,GAAA,GAAMA,OAAAA,CAAO,IAAA,CAAK,WAAW,CAAA;AACnC,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA3B,EAAAA,KAAK;AAE5B,IAAA,MAAM,OAAO,GAAA,CAAIA,EAAC,CAAA,CAAE,IAAA,CAAK,CAAC7B,EAAAA,EAAG,CAAA,KAAOA,EAAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,IAAI,EAAA,GAAK,CAAE,EAAE,CAAC,CAAA;AAC5D,IAAA,MAAM,CAAC0B,EAAAA,IAAKQ,IAAG,CAAA,GAAI,IAAA;AACnB,IAAA,IAAIA,IAAAA,GAAM,QAAA,CAASR,EAAC,CAAA,CAAE,MAAA,EAAQ;AAC5B,MAAA,IAAA,CAAK,IAAA,CAAK,CAACA,EAAAA,EAAGQ,IAAAA,EAAK,SAASR,EAAC,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,IACxC;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAClC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,KAAA,EAAOkD,KAAI,CAAA;AAC1C,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM,KAAA,EAAOA,KAAAA,EAAM;AAC5C,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAA,GAAO,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA,CAAI,WAAW,IAAA,EAAMA,KAAAA,EAAM,KAAK,KAAK,CAAA;AAAA,EACjE;AACA,EAAA,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,CAAE,GAAA,GAAM,IAAA;AAC5B,EAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAChD,EAAAA,EAAGF,EAAAA,KAAM;AACrB,IAAA,MAAM,IAAA,GAAOE,EAAAA,CAAE,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AACjC,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,EAAM;AACzB,MAAA,IAAA,CAAKF,EAAC,CAAA,CAAE,CAAC,CAAA,IAAK,KAAA,CAAM,MAAA;AACpB,MAAA,IAAA,CAAKA,EAAC,EAAE,CAAC,CAAA,GAAI,MAAM,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,EAAA;AAAA,IAChC;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AACzB,CAAA;AAEA,IAAM,SAAA,GAAY,SAAU,IAAA,EAAM,KAAA,EAAOkD,KAAAA,EAAM;AAC7C,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAA,GAAO,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA,CAAI,WAAW,IAAA,EAAMA,KAAAA,EAAM,KAAK,KAAK,CAAA;AAAA,EACjE;AACA,EAAA,IAAA,CAAK,CAAC,EAAE,KAAA,GAAQ,IAAA;AAChB,EAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAChD,EAAAA,EAAGF,EAAAA,KAAM;AACrB,IAAA,MAAM,IAAA,GAAOE,EAAAA,CAAE,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AAChC,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,EAAM;AACzB,MAAA,IAAA,CAAKF,EAAC,CAAA,CAAE,CAAC,CAAA,IAAK,KAAA,CAAM,MAAA;AACpB,MAAA,IAAA,CAAKA,EAAC,CAAA,CAAE,CAAC,CAAA,GAAI,IAAA;AAAA,IACf;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AACzB,CAAA;AAEA,IAAM,IAAA,GAAO,SAAU,IAAA,EAAM,KAAA,EAAOkD,KAAAA,EAAM;AACxC,EAAA,OAAO,IAAA,CAAK,UAAU,IAAA,EAAM,KAAA,EAAOA,KAAI,CAAA,CAAE,QAAA,CAAS,IAAA,EAAM,KAAA,EAAOA,KAAI,CAAA;AACrE,CAAA;AAEA,IAAO,qBAAQ,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,WAAW,IAAA,EAAK;;;AC5E1D,IAAM,OAAA,GAAU,SAAU,IAAA,EAAM,KAAA,EAAO;AACrC,EAAA,OAAO,CAAC,KAAK,CAAC,CAAA,EAAG,KAAK,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA;AACpC,CAAA;AAEA,IAAMzC,QAAAA,GAAU,SAAU,GAAA,EAAK;AAC7B,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AACjD,CAAA;AAEA,IAAM,MAAA,GAAS,CAAC,GAAA,EAAK,IAAA,EAAM,KAAA,KAAU;AACnC,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAYA,QAAAA,CAAQ,GAAG,CAAA,EAAG;AAC3C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,KAAK,CAAA;AAAA,EAC9B;AACA,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAM2C,OAAAA,GAAS,SAAU,GAAA,EAAK,IAAA,EAAM;AAClC,EAAA,MAAM,CAACpD,EAAAA,EAAGO,MAAAA,EAAOC,IAAG,CAAA,GAAI,GAAA;AACxB,EAAA,IAAI,IAAA,CAAK,SAASR,EAAC,CAAA,IAAK,KAAK,QAAA,CAASA,EAAC,CAAA,CAAEO,MAAK,CAAA,EAAG;AAC/C,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,IAAK,KAAK,QAAA,CAASP,EAAC,CAAA,CAAEO,MAAK,CAAA,CAAE,EAAA;AAC3C,IAAA,IAAI,KAAK,QAAA,CAASP,EAAC,CAAA,CAAEQ,IAAAA,GAAM,CAAC,CAAA,EAAG;AAC7B,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,IAAK,IAAA,CAAK,QAAA,CAASR,EAAC,CAAA,CAAEQ,IAAAA,GAAM,CAAC,CAAA,CAAE,EAAA;AAAA,IAC/C;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAMF,WAAU,EAAC;AAEjBA,QAAAA,CAAQ,OAAA,GAAU,SAAUJ,EAAAA,EAAG,KAAA,EAAO;AACpC,EAAA,MAAM,EAAE,QAAA,EAAAmD,SAAAA,EAAS,GAAI,IAAA,CAAK,QAAQ,GAAA,CAAI,OAAA;AACtC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAOnD,EAAAA,EAAG,IAAA,EAAM,KAAK,CAAA,CAAE,WAAA;AACtC,EAAA,MAAMH,IAAAA,GAAMsD,SAAAA,CAAS,IAAA,CAAK,WAAA,EAAa,MAAM,CAAA;AAC7C,EAAA,IAAI,MAAM,EAAC;AACX,EAAAtD,IAAAA,CAAI,OAAA,CAAQ,CAAAmB,EAAAA,KAAK;AACf,IAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,WAAW,CAAA;AACtB,IAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,MAAM,CAAA;AACjB,IAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,KAAK,CAAA;AAChB,IAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,KAAK,CAAA;AAAA,EAClB,CAAC,CAAA;AACD,EAAA,GAAA,GAAM,GAAA,CAAI,MAAA,CAAO,CAAAJ,EAAAA,KAAKA,EAAC,CAAA;AACvB,EAAA,GAAA,GAAM,IAAI,GAAA,CAAI,CAAAA,OAAKsC,OAAAA,CAAOtC,EAAAA,EAAG,IAAI,CAAC,CAAA;AAClC,EAAA,OAAO,IAAA,CAAK,OAAO,GAAG,CAAA;AACxB,CAAA;AAGAR,QAAAA,CAAQ,WAAA,GAAc,SAAUJ,EAAAA,EAAG,KAAA,EAAO;AACxC,EAAA,MAAM,EAAE,QAAA,EAAAmD,SAAAA,EAAS,GAAI,IAAA,CAAK,QAAQ,GAAA,CAAI,OAAA;AACtC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAOnD,EAAAA,EAAG,IAAA,EAAM,KAAK,CAAA,CAAE,WAAA;AACtC,EAAA,MAAMH,IAAAA,GAAMsD,SAAAA,CAAS,IAAA,CAAK,WAAA,EAAa,MAAM,CAAA;AAG7C,EAAA,KAAA,IAAS5D,KAAI,CAAA,EAAGA,EAAAA,GAAIM,IAAAA,CAAI,MAAA,EAAQN,MAAK,CAAA,EAAG;AAEtC,IAAA,IAAI,CAACM,IAAAA,CAAIN,EAAC,CAAA,CAAE,KAAA,IAASM,IAAAA,CAAIN,EAAAA,GAAI,CAAC,CAAA,IAAKM,IAAAA,CAAIN,EAAAA,GAAI,CAAC,EAAE,MAAA,EAAQ;AAEpD,MAAA,IAAIM,KAAIN,EAAC,CAAA,CAAE,KAAA,IAASM,IAAAA,CAAIN,EAAC,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAMM,KAAIN,EAAAA,GAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG;AAC5D,QAAAM,KAAIN,EAAC,CAAA,CAAE,QAAQM,IAAAA,CAAIN,EAAAA,GAAI,CAAC,CAAA,CAAE,MAAA;AAC1B,QAAA,OAAOM,IAAAA,CAAIN,EAAAA,GAAI,CAAC,CAAA,CAAE,MAAA;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,EAAC;AACX,EAAAM,IAAAA,CAAI,OAAA,CAAQ,CAAAmB,EAAAA,KAAK;AACf,IAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,WAAW,CAAA;AACtB,IAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,MAAM,CAAA;AAEjB,IAAA,IAAIA,EAAAA,CAAE,KAAA,IAASA,EAAAA,CAAE,KAAA,EAAO;AACtB,MAAA,GAAA,CAAI,KAAK,OAAA,CAAQA,EAAAA,CAAE,KAAA,EAAOA,EAAAA,CAAE,KAAK,CAAC,CAAA;AAAA,IACpC,CAAA,MAAO;AAEL,MAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,GAAA,GAAM,GAAA,CAAI,MAAA,CAAO,CAAAJ,EAAAA,KAAKA,EAAC,CAAA;AACvB,EAAA,GAAA,GAAM,IAAI,GAAA,CAAI,CAAAA,OAAKsC,OAAAA,CAAOtC,EAAAA,EAAG,IAAI,CAAC,CAAA;AAClC,EAAA,OAAO,IAAA,CAAK,OAAO,GAAG,CAAA;AACxB,CAAA;AAGAR,QAAAA,CAAQ,UAAA,GAAa,SAAUJ,EAAAA,EAAG,KAAA,EAAO;AACvC,EAAA,MAAM,EAAE,QAAA,EAAAmD,SAAAA,EAAS,GAAI,IAAA,CAAK,QAAQ,GAAA,CAAI,OAAA;AACtC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAOnD,EAAAA,EAAG,IAAA,EAAM,KAAK,CAAA,CAAE,WAAA;AACtC,EAAA,MAAMH,IAAAA,GAAMsD,SAAAA,CAAS,IAAA,CAAK,WAAA,EAAa,MAAM,CAAA;AAC7C,EAAA,IAAI,MAAM,EAAC;AACX,EAAAtD,IAAAA,CAAI,OAAA,CAAQ,CAAAmB,EAAAA,KAAK;AACf,IAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,WAAW,CAAA;AACtB,IAAA,IAAIA,EAAAA,CAAE,MAAA,IAAUA,EAAAA,CAAE,KAAA,EAAO;AACvB,MAAA,GAAA,CAAI,KAAK,OAAA,CAAQA,EAAAA,CAAE,MAAA,EAAQA,EAAAA,CAAE,KAAK,CAAC,CAAA;AAAA,IACrC,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,MAAM,CAAA;AACjB,MAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,KAAK,CAAA;AAAA,IAClB;AACA,IAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,KAAK,CAAA;AAAA,EAClB,CAAC,CAAA;AACD,EAAA,GAAA,GAAM,GAAA,CAAI,MAAA,CAAO,CAAAJ,EAAAA,KAAKA,EAAC,CAAA;AACvB,EAAA,GAAA,GAAM,IAAI,GAAA,CAAI,CAAAA,OAAKsC,OAAAA,CAAOtC,EAAAA,EAAG,IAAI,CAAC,CAAA;AAClC,EAAA,OAAO,IAAA,CAAK,OAAO,GAAG,CAAA;AACxB,CAAA;AACAR,QAAAA,CAAQ,QAAQA,QAAAA,CAAQ,UAAA;AAExB,IAAO,aAAA,GAAQA,QAAAA;;;ACvGf,IAAM,WAAA,GAAc,SAAU,IAAA,EAAM,IAAA,EAAM;AAExC,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,EAAM;AAClB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,EAAG;AACvB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA;AAC3B,CAAA;AAGA,IAAM,OAAA,GAAU,SAAU,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ;AAC7C,EAAA,MAAMV,SAAQ,GAAA,CAAI,KAAA;AAClB,EAAA,MAAM,UAAA,GAAaA,MAAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,UAAA;AACrC,EAAA,MAAA,GAAS,MAAA,IAAU,IAAA;AACnB,EAAA,MAAA,GAAS,MAAA,IAAU,IAAA;AACnB,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,MAAA,EAAQ,IAAIA,MAAK,CAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,MAAA,EAAQ,IAAIA,MAAK,CAAA;AAE/C,EAAA,SAAA,CAAU,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,CAAE,GAAA,GAAM,IAAA;AACtC,EAAA,UAAA,CAAW,CAAC,EAAE,KAAA,GAAQ,IAAA;AAEtB,EAAA,MAAM,OAAO,GAAA,CAAI,WAAA;AACjB,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,CAAK,CAAC,CAAC,CAAA;AACpB,EAAA,KAAA,IAASH,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA;AAC/B,IAAA,MAAM,IAAA,GAAO,KAAKA,EAAC,CAAA;AACnB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,CAAC,IAAI,CAAC,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,CAAC,IAAI,CAAC,CAAA;AAE/B,IAAA,IAAI,WAAA,CAAY,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,IAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,EAAG;AAE3E,MAAA,GAAA,CAAI,IAAI,MAAA,GAAS,CAAC,IAAI,CAAC,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,IACpE,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IACf;AAAA,EACF;AAEA,EAAA,OAAO,GAAA,CAAI,OAAO,GAAG,CAAA;AACvB,CAAA;AAEA,IAAMa,QAAAA,GAAU;AAAA;AAAA,EAEd,MAAA,EAAQ,SAAU,MAAA,EAAQ,MAAA,EAAQ;AAChC,IAAA,OAAO,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAAA,EACrC,CAAA;AAAA;AAAA,EAEA,MAAM,WAAY;AAChB,IAAA,OAAO,QAAQ,IAAI,CAAA;AAAA,EACrB;AACF,CAAA;AACA,IAAO,YAAA,GAAQA,QAAAA;;;AClDf,IAAMA,QAAAA,GAAU,OAAO,MAAA,CAAO,IAAI,aAAA,EAAO,kBAAA,EAAY,eAAO,YAAI,CAAA;AAEhEA,QAAAA,CAAQ,aAAaA,QAAAA,CAAQ,MAAA;AAC7BA,QAAAA,CAAQ,aAAaA,QAAAA,CAAQ,MAAA;AAE7BA,QAAAA,CAAQ,YAAYA,QAAAA,CAAQ,KAAA;AAC5BA,QAAAA,CAAQ,YAAYA,QAAAA,CAAQ,KAAA;AAE5BA,QAAAA,CAAQ,QAAQA,QAAAA,CAAQ,IAAA;AACxB,IAAM,QAAA,GAAW,SAAUM,KAAAA,EAAM;AAC/B,EAAA,MAAA,CAAO,MAAA,CAAOA,KAAAA,CAAK,SAAA,EAAWN,QAAO,CAAA;AACvC,CAAA;AACA,IAAO+B,YAAAA,GAAQ,QAAA;;;AChBf,IAAM,SAAA,GAAY,6DAAA;AAElB,IAAM,aAAA,GAAgB,wDAAA;AAEtB,IAAM,MAAA,GAAS,IAAA;AAEf,IAAM,UAAU,CAAA,GAAA,KAAO;AACrB,EAAA,OAAO,sBAAsB,IAAA,CAAK,GAAG,CAAA,IAAK,eAAA,CAAgB,KAAK,GAAG,CAAA;AACpE,CAAA;AACA,IAAM,QAAQ,CAAA,GAAA,KAAO;AACnB,EAAA,OAAO,sBAAsB,IAAA,CAAK,GAAG,CAAA,IAAK,eAAA,CAAgB,KAAK,GAAG,CAAA;AACpE,CAAA;AAEA,IAAM,OAAA,GAAU,SAAU,GAAA,EAAK;AAC7B,EAAA,GAAA,GAAM,GAAA,CAAI,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,MAAM,CAAA;AAC/B,EAAA,GAAA,GAAM,GAAA,CAAI,MAAA,CAAO,CAAA,GAAA,KAAO,GAAG,CAAA;AAC3B,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAM,WAAA,GAAc,SAAU,GAAA,EAAK;AAEjC,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA;AAC/B,EAAA,IAAI,MAAM,EAAC;AAEX,EAAA,GAAA,CAAI,QAAQ,CAAA,GAAA,KAAO;AACjB,IAAA,IAAI,KAAA,CAAM,GAAG,CAAA,EAAG;AACd,MAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,GAAA,GAAM,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,aAAa,CAAC,CAAA;AAAA,EAC3C,CAAC,CAAA;AACD,EAAA,GAAA,GAAM,QAAQ,GAAG,CAAA;AAEjB,EAAA,IAAI,QAAQ,EAAC;AACb,EAAA,GAAA,CAAI,QAAQ,CAAA,GAAA,KAAO;AACjB,IAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChB,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,IAChB,CAAA,MAAA,IAAW,KAAA,CAAM,GAAG,CAAA,EAAG;AACrB,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,IACxC;AAAA,EACF,CAAC,CAAA;AACD,EAAA,KAAA,GAAQ,QAAQ,KAAK,CAAA;AACrB,EAAA,OAAO,KAAA;AACT,CAAA;AACA,IAAO,mBAAA,GAAQ,WAAA;;;AC/Cf,IAAM,SAAA,GAAY,2BAAA;AAClB,IAAM,OAAA,GAAU,IAAA;AAEhB,IAAM,WAAA,GAAc,IAAI,MAAA,CAAO,gBAAgB,CAAA;AAkB/C,IAAM,SAAA,GAAY,CAAA,GAAA,KAAO,GAAA,CAAI,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,GAAI,GAAA,CAAI,SAAA,CAAU,CAAC,CAAA;AACtE,IAAM,MAAM,CAAC,GAAA,KAAQ,IAAI,MAAA,CAAO,GAAA,CAAI,SAAS,CAAC,CAAA;AAC9C,IAAM,KAAA,GAAQ,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAO,CAAC,CAAA;AACnC,IAAM,UAAA,GAAa,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,CAAC,CAAA;AAC3C,IAAM,QAAA,GAAW,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,CAAA,EAAG,GAAA,CAAI,SAAS,CAAC,CAAA;AAEzD,IAAM,SAAA,GAAY,SAAU,GAAA,EAAK;AAC/B,EAAA,GAAA,GAAM,WAAW,GAAG,CAAA;AACpB,EAAA,GAAA,GAAM,SAAS,GAAG,CAAA;AAClB,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAM,UAAA,GAAa,SAAU,CAAA,EAAGa,KAAAA,EAAM;AACpC,EAAA,MAAM,MAAM,EAAC;AAEb,EAAA,KAAA,IAASzD,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,CAAA,EAAGA,MAAK,CAAA,EAAG;AAE7B,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAClB,MAAA,GAAA,CAAI,GAAA,GAAM,IAAA;AACV,MAAA,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK;AACpB,MAAA,GAAA,CAAI,KAAA,GAAQ,IAAA;AACZ,MAAA,CAAA,GAAI,WAAW,CAAC,CAAA;AAAA,IAClB;AACA,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAClB,MAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AACf,MAAA,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI,MAAM,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAC,MAAM,GAAA,EAAK;AACtC,MAAA,GAAA,CAAI,KAAA,GAAQ,IAAA;AACZ,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK;AACpB,QAAA,GAAA,CAAI,UAAA,GAAa,IAAA;AAAA,MACnB;AACA,MAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAClB,QAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AAAA,MACjB;AACA,MAAA,CAAA,GAAI,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACvB,MAAA,CAAA,GAAI,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAEvB,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK;AACpB,QAAA,MAAM,GAAA,GAAM,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA;AAC9B,QAAA,IAAI,GAAA,CAAI,UAAU,CAAA,EAAG;AACnB,UAAA,GAAA,CAAI,KAAA,GAAQ,IAAI,CAAC,CAAA;AACjB,UAAA,CAAA,GAAI,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAG,EAAE,CAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAClB,MAAA,GAAA,CAAI,MAAA,GAAS,IAAA;AACb,MAAA,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,IAAI,MAAM,GAAA,IAAO,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,MAAM,KAAA,EAAO;AAC9C,MAAA,GAAA,CAAI,MAAA,GAAS,IAAA;AACb,MAAA,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK;AACpB,MAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AAEf,MAAA,CAAA,GAAI,WAAW,CAAC,CAAA;AAAA,IAClB;AAEA,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,IAAO,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,CAAA,CAAE,MAAA,GAAS,CAAA,EAAG;AACtD,MAAA,CAAA,GAAI,UAAU,CAAC,CAAA;AACf,MAAA,GAAA,CAAI,KAAA,GAAQ,IAAA;AACZ,MAAA,GAAA,CAAI,GAAA,GAAMyD,MAAK,KAAA,IAAS,IAAA;AACxB,MAAA,IAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,EAAO;AAC1B,QAAA,GAAA,CAAI,IAAA,GAAO,CAAA;AACX,QAAA,OAAO,GAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,IAAI,MAAM,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAC,MAAM,GAAA,EAAK;AACtC,MAAA,CAAA,GAAI,UAAU,CAAC,CAAA;AACf,MAAA,IAAIA,MAAK,aAAA,EAAe;AACtB,QAAA,GAAA,CAAI,GAAA,GAAM,MAAA;AAAA,MACZ;AACA,MAAA,GAAA,CAAI,KAAA,GAAQ,IAAI,MAAA,CAAO,CAAC,CAAA;AACxB,MAAA,OAAO,GAAA;AAAA,IACT;AAGA,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,EAAM;AAC9B,MAAA,CAAA,GAAI,EAAE,OAAA,CAAQ,SAAA,EAAW,CAAC,EAAA,EAAI,GAAGvD,EAAAA,KAAM;AACrC,QAAA,IAAIA,OAAM,MAAA,EAAW;AAEnB,UAAA,GAAA,CAAI,GAAA,GAAM,OAAO,CAAC,CAAA;AAClB,UAAA,GAAA,CAAI,GAAA,GAAM,OAAO,CAAC,CAAA;AAAA,QACpB,CAAA,MAAO;AACL,UAAAA,EAAAA,GAAIA,EAAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACvB,UAAA,IAAI,MAAM,MAAA,EAAW;AAEnB,YAAA,GAAA,CAAI,GAAA,GAAM,CAAA;AACV,YAAA,GAAA,CAAI,GAAA,GAAM,OAAOA,EAAC,CAAA;AAAA,UACpB,CAAA,MAAO;AAEL,YAAA,GAAA,CAAI,GAAA,GAAM,OAAO,CAAC,CAAA;AAElB,YAAA,GAAA,CAAI,GAAA,GAAM,MAAA,CAAOA,EAAAA,IAAK,GAAG,CAAA;AAAA,UAC3B;AAAA,QACF;AAEA,QAAA,GAAA,CAAI,MAAA,GAAS,IAAA;AAEb,QAAA,IAAI,CAAC,IAAI,GAAA,EAAK;AACZ,UAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AAAA,QACjB;AACA,QAAA,OAAO,EAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,MAAM,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAC,MAAM,GAAA,EAAK;AAEtC,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG;AACnB,QAAA,GAAA,CAAI,OAAA,GAAU,CAAA,CAAE,KAAA,CAAM,OAAO,CAAA;AAC7B,QAAA,GAAA,CAAI,QAAA,GAAW,KAAA;AAAA,MACjB,CAAA,MAAO;AACL,QAAA,GAAA,CAAI,OAAA,GAAU,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA;AACzB,QAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AAAA,MACjB;AAEA,MAAA,GAAA,CAAI,QAAQ,CAAC,CAAA,GAAI,WAAW,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC1C,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,MAAA,GAAS,CAAA;AAClC,MAAA,GAAA,CAAI,QAAQ,IAAI,CAAA,GAAI,SAAS,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAA;AAE9C,MAAA,GAAA,CAAI,OAAA,GAAU,IAAI,OAAA,CAAQ,GAAA,CAAI,CAAAN,EAAAA,KAAKA,EAAAA,CAAE,MAAM,CAAA;AAC3C,MAAA,GAAA,CAAI,UAAU,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,CAAAA,OAAKA,EAAC,CAAA;AAEvC,MAAA,GAAA,CAAI,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAA,KAAO;AACnC,QAAA,OAAO,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAAA,EAAAA,KAAK,UAAA,CAAWA,EAAAA,EAAG6D,KAAI,CAAC,CAAA;AAAA,MACrD,CAAC,CAAA;AACD,MAAA,CAAA,GAAI,EAAA;AAAA,IACN;AAGA,IAAA,IAAI,MAAM,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAC,MAAM,GAAA,EAAK;AACtC,MAAA,CAAA,GAAI,UAAU,CAAC,CAAA;AAEf,MAAA,GAAA,CAAI,IAAA,GAAO,CAAA;AACX,MAAA,IAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG;AAChB,QAAA,MAAMH,MAAAA,GAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACjC,QAAA,GAAA,CAAI,IAAA,GAAOA,OAAM,CAAC,CAAA;AAClB,QAAA,GAAA,CAAI,GAAA,GAAMA,OAAM,CAAC,CAAA;AACjB,QAAA,IAAI,GAAA,CAAI,QAAQ,KAAA,EAAO;AACrB,UAAA,GAAA,CAAI,GAAA,GAAM,WAAA;AAAA,QACZ;AAEA,QAAA,GAAA,CAAI,GAAA,GAAM,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY;AAE1E,QAAA,IAAIA,MAAAA,CAAM,CAAC,CAAA,KAAM,MAAA,EAAW;AAC1B,UAAA,GAAA,CAAI,KAAA,GAAQA,OAAM,CAAC,CAAA;AAAA,QACrB;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,IAAI,MAAM,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAC,MAAM,GAAA,EAAK;AACtC,MAAA,CAAA,GAAI,UAAU,CAAC,CAAA;AACf,MAAA,GAAA,CAAI,KAAA,GAAQ,UAAU,CAAC,CAAA;AACvB,MAAA,GAAA,CAAI,MAAA,GAAS,IAAA;AACb,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,IAAI,MAAM,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAC,MAAM,GAAA,EAAK;AACtC,MAAA,CAAA,GAAI,UAAU,CAAC,CAAA;AACf,MAAA,GAAA,CAAI,MAAA,GAAS,CAAA;AACb,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK;AACpB,IAAA,GAAA,CAAI,GAAA,GAAM,WAAW,CAAC,CAAA;AACtB,IAAA,GAAA,CAAI,GAAA,GAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAC3B,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK;AACpB,IAAA,GAAA,CAAI,MAAA,GAAS,WAAW,CAAC,CAAA;AACzB,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,GAAA,EAAK;AACb,IAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AACf,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAM,GAAA,EAAK;AACb,IAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AACf,IAAA,GAAA,CAAI,MAAA,GAAS,IAAA;AACb,IAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AACf,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,EAAG;AAEL,IAAA,CAAA,GAAI,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACxB,IAAA,CAAA,GAAI,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACxB,IAAA,IAAIG,MAAK,aAAA,EAAe;AACtB,MAAA,GAAA,CAAI,GAAA,GAAM,MAAA;AAAA,IACZ,CAAA,MAAO;AACL,MAAA,CAAA,GAAI,EAAE,WAAA,EAAY;AAAA,IACpB;AACA,IAAA,GAAA,CAAI,IAAA,GAAO,CAAA;AAAA,EACb;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,kBAAA,GAAQ,UAAA;;;ACrOf,IAAM,OAAA,GAAU,qBAAA;AAGhB,IAAM,YAAA,GAAe,SAAU,IAAA,EAAMtD,MAAAA,EAAO;AAC1C,EAAA,MAAM0D,SAAAA,GAAW1D,MAAAA,CAAM,KAAA,CAAM,GAAA,CAAI,QAAA;AACjC,EAAA,KAAA,IAASH,KAAI,IAAA,CAAK,MAAA,GAAS,GAAGA,EAAAA,IAAK,CAAA,EAAGA,MAAK,CAAA,EAAG;AAC5C,IAAA,MAAM,GAAA,GAAM,KAAKA,EAAC,CAAA;AAClB,IAAA,IAAI,IAAI,IAAA,IAAQ,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG;AACtC,MAAA,IAAI,KAAA,GAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAEnC,MAAA,IAAI6D,SAAAA,CAAS,cAAA,CAAe,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACrC,QAAA;AAAA,MACF;AACA,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,EAAE,OAAA,EAAQ;AACrC,MAAA,IAAA,CAAK,MAAA,CAAO7D,IAAG,CAAC,CAAA;AAChB,MAAA,KAAA,CAAM,QAAQ,CAAA,CAAA,KAAK;AACjB,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,IAAI,GAAG,CAAA;AACjC,QAAA,GAAA,CAAI,IAAA,GAAO,CAAA;AACX,QAAA,IAAA,CAAK,MAAA,CAAOA,EAAAA,EAAG,CAAA,EAAG,GAAG,CAAA;AAAA,MACvB,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,oBAAA,GAAQ,YAAA;;;ACtBf,IAAM,QAAA,GAAW,SAAU,KAAA,EAAOG,MAAAA,EAAO;AACvC,EAAA,MAAM,EAAE,KAAAG,IAAAA,EAAI,GAAIH,OAAM,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,IAAA,IAAQ,EAAC;AACrD,EAAA,MAAM,MAAM,KAAA,CAAM,IAAA;AAClB,EAAA,IAAI,CAACG,IAAAA,EAAK;AACR,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,OAAOA,IAAAA,CAAI,GAAA,EAAKH,MAAAA,CAAM,KAAK,CAAA;AAC7B,CAAA;AAGA,IAAM,OAAA,GAAU,SAAU,KAAA,EAAOA,MAAAA,EAAO;AACtC,EAAA,MAAM,EAAE,KAAAG,IAAAA,EAAI,GAAIH,OAAM,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,IAAA,IAAQ,EAAC;AACrD,EAAA,IAAI,CAACG,IAAAA,EAAK;AACR,IAAA,OAAO,CAAC,MAAM,IAAI,CAAA;AAAA,EACpB;AACA,EAAA,OAAOA,IAAAA,CAAI,KAAA,CAAM,IAAA,EAAMH,MAAAA,CAAM,KAAK,CAAA;AACpC,CAAA;AAGA,IAAM,YAAA,GAAe,SAAU,KAAA,EAAOA,MAAAA,EAAO;AAC3C,EAAA,MAAM,EAAE,KAAAG,IAAAA,EAAI,GAAIH,OAAM,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,SAAA,IAAa,EAAC;AAC1D,EAAA,IAAI,CAACG,IAAAA,EAAK;AACR,IAAA,OAAO,CAAC,MAAM,IAAI,CAAA;AAAA,EACpB;AACA,EAAA,OAAOA,IAAAA,CAAI,KAAA,CAAM,IAAA,EAAMH,MAAAA,CAAM,KAAK,CAAA;AACpC,CAAA;AAGA,IAAM,WAAA,GAAc,SAAU,IAAA,EAAMA,MAAAA,EAAO;AAEzC,EAAA,IAAA,GAAO,IAAA,CAAK,IAAI,CAAA,KAAA,KAAS;AAEvB,IAAA,IAAI,MAAM,IAAA,EAAM;AAEd,MAAA,IAAIA,OAAM,OAAA,CAAQ,GAAA,IAAOA,MAAAA,CAAM,OAAA,CAAQ,IAAI,SAAA,EAAW;AACpD,QAAA,IAAI,UAAU,EAAC;AAEf,QAAA,IAAI,MAAM,GAAA,EAAK;AACb,UAAA,IAAI,KAAA,CAAM,QAAQ,MAAA,EAAQ;AACxB,YAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,KAAA,EAAOA,MAAK,CAAC,CAAA;AAAA,UACjD,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,MAAA,EAAQ;AAC/B,YAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAOA,MAAK,CAAC,CAAA;AAAA,UAChD,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,WAAA,EAAa;AACpC,YAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,YAAA,CAAa,KAAA,EAAOA,MAAK,CAAC,CAAA;AAAA,UACrD;AAAA,QACF,CAAA,MAAO;AAEL,UAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,KAAA,EAAOA,MAAK,CAAC,CAAA;AAC/C,UAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAOA,MAAK,CAAC,CAAA;AAC9C,UAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,YAAA,CAAa,KAAA,EAAOA,MAAK,CAAC,CAAA;AAAA,QACrD;AACA,QAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAA,GAAA,KAAO,GAAG,CAAA;AACnC,QAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,UAAA,KAAA,CAAM,QAAA,GAAW,IAAA;AACjB,UAAA,KAAA,CAAM,MAAA,GAAS,IAAI,GAAA,CAAI,OAAO,CAAA;AAAA,QAChC;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,KAAA,CAAM,UAAU,KAAA,CAAM,IAAA;AACtB,QAAA,OAAO,KAAA,CAAM,EAAA;AACb,QAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACf;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,oBAAA,GAAQ,WAAA;;;ACrEf,IAAM,UAAA,GAAa,SAAU,IAAA,EAAM;AACjC,EAAA,IAAIvB,MAAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,OAAA,GAAU,IAAA;AAEd,EAAA,KAAA,IAASoB,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,QAAQA,EAAAA,EAAAA,EAAK;AACpC,IAAA,MAAM,KAAA,GAAQ,KAAKA,EAAC,CAAA;AACpB,IAAA,IAAI,KAAA,CAAM,eAAe,IAAA,EAAM;AAC7B,MAAA,OAAA,GAAU,KAAA,CAAM,KAAA;AAChB,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,OAAA,GAAU,OAAOpB,MAAK,CAAA;AACtB,QAAAA,MAAAA,IAAS,CAAA;AAAA,MACX;AAAA,IACF;AACA,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,KAAA,CAAM,KAAA,GAAQ,OAAA;AAAA,IAChB;AACA,IAAA,IAAI,KAAA,CAAM,aAAa,IAAA,EAAM;AAC3B,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAGA,IAAM,YAAA,GAAe,SAAU,MAAA,EAAQ;AACrC,EAAA,OAAO,MAAA,CAAO,IAAI,CAAA,KAAA,KAAS;AACzB,IAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAE/B,MAAA,IAAI,KAAA,CAAM,aAAa,IAAA,EAAM;AAC3B,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI,KAAA,CAAM,UAAU,IAAA,EAAM;AACxB,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,CAAA,KAAA,KAAS;AAC9C,QAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AAEnB,QAAA,IAAI,GAAA,CAAI,UAAU,IAAA,EAAM;AACtB,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,IAAI,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,GAAA,EAAK;AACxB,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,IAAa,GAAA,CAAI,QAAA,KAAa,IAAA,IAAQ,GAAA,CAAI,QAAA,KAAa,IAAA,IAAQ,GAAA,CAAI,MAAA,KAAW,IAAA,EAAM;AACnG,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,OAAO,KAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,IAAI,eAAe,IAAA,EAAM;AACvB,QAAA,KAAA,CAAM,MAAA,uBAAa,GAAA,EAAI;AACvB,QAAA,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,KAAA,KAAS;AAC7B,UAAA,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,CAAC,EAAE,IAAI,CAAA;AAAA,QAChC,CAAC,CAAA;AACD,QAAA,OAAO,KAAA,CAAM,OAAA;AAAA,MACf;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAA;AAGA,IAAM,OAAA,GAAU,SAAU,IAAA,EAAM;AAC9B,EAAA,OAAO,IAAA,CAAK,IAAI,CAAA,GAAA,KAAO;AACrB,IAAA,IAAI,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,OAAA,EAAS;AAE5B,MAAA,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,CAAA4B,EAAAA,KAAK;AACvB,QAAA,IAAIA,GAAE,MAAA,KAAW,CAAA,IAAKA,EAAAA,CAAE,CAAC,EAAE,IAAA,EAAM;AAC/B,UAAAA,EAAAA,CAAE,CAAC,CAAA,CAAE,KAAA,GAAQ,IAAA;AACb,UAAAA,EAAAA,CAAE,CAAC,CAAA,CAAE,GAAA,GAAM,GAAA,CAAI,GAAA;AAAA,QACjB;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAA;AAEA,IAAM,WAAA,GAAc,SAAU,IAAA,EAAM;AAElC,EAAA,IAAA,GAAO,WAAW,IAAI,CAAA;AAEtB,EAAA,IAAA,GAAO,aAAa,IAAI,CAAA;AAExB,EAAA,IAAA,GAAO,QAAQ,IAAI,CAAA;AACnB,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,mBAAA,GAAQ,WAAA;;;ACpFf,IAAM,MAAA,GAAS,SAAU,KAAA,EAAOiD,KAAAA,EAAMtD,MAAAA,EAAO;AAE3C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,UAAU,EAAA,EAAI;AACzD,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAAsD,KAAAA,GAAOA,SAAQ,EAAC;AAChB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,KAAA,GAAQ,OAAO,KAAK,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,MAAA,GAAS,oBAAY,KAAK,CAAA;AAE9B,EAAA,MAAA,GAAS,OAAO,GAAA,CAAI,CAAA,GAAA,KAAO,kBAAA,CAAW,GAAA,EAAKA,KAAI,CAAC,CAAA;AAEhD,EAAA,MAAA,GAAS,oBAAA,CAAa,QAAQtD,MAAK,CAAA;AAEnC,EAAA,MAAA,GAAS,oBAAA,CAAY,QAAQA,MAAK,CAAA;AAElC,EAAA,MAAA,GAAS,mBAAA,CAAY,MAAY,CAAA;AAEjC,EAAA,OAAO,MAAA;AACT,CAAA;AACA,IAAO,kBAAA,GAAQ,MAAA;;;AC5Bf,IAAM,eAAA,GAAkB,SAAU,IAAA,EAAM,IAAA,EAAM;AAC5C,EAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAMZ,MAAAA,EAAO;AACtC,EAAA,KAAA,IAASS,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,IAAA,MAAM,GAAA,GAAM,KAAKA,EAAC,CAAA;AAClB,IAAA,IAAI,GAAA,CAAI,aAAa,IAAA,IAAQ,GAAA,CAAI,aAAa,IAAA,IAAQ,GAAA,CAAI,UAAU,IAAA,EAAM;AACxE,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,SAAS,MAAA,IAAaT,MAAAA,CAAM,IAAI,GAAA,CAAI,IAAI,MAAM,KAAA,EAAO;AAC3D,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,GAAA,CAAI,QAAQ,MAAA,IAAaA,MAAAA,CAAM,IAAI,GAAA,GAAM,GAAA,CAAI,GAAG,CAAA,KAAM,KAAA,EAAO;AAC/D,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAI,MAAA,IAAU,eAAA,CAAgB,IAAI,MAAA,EAAQA,MAAK,MAAM,KAAA,EAAO;AAC9D,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AACA,IAAO,gBAAA,GAAQ,QAAA;;;AC1Bf,IAAM,YAAA,GAAe,SAAU,IAAA,EAAM,IAAA,EAAM;AACzC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,EACnB,OAAA,GAAU,IAAA,CAAK,MAAA;AAEjB,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAA,CAAS,OAAA,GAAU,OAAA,GAAU,OAAA,GAAU,OAAA,IAAW,CAAA;AACxD,EAAA,IAAI,KAAK,GAAA,CAAI,OAAA,GAAU,OAAO,CAAA,IAAK,SAAS,GAAA,CAAA,EAAM;AAChD,IAAA,OAAO,KAAA,IAAS,GAAA;AAAA,EAClB;AAEA,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,KAAA,IAASS,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,EAAOA,EAAAA,EAAAA,EAAK;AAC9B,IAAA,MAAA,CAAOA,EAAC,CAAA,GAAI,CAACA,EAAC,CAAA;AACd,IAAA,MAAA,CAAOA,EAAC,EAAE,MAAA,GAAS,KAAA;AAAA,EACrB;AACA,EAAA,KAAA,IAASA,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,EAAOA,EAAAA,EAAAA,EAAK;AAC9B,IAAA,MAAA,CAAO,CAAC,CAAA,CAAEA,EAAC,CAAA,GAAIA,EAAAA;AAAA,EACjB;AAEA,EAAA,IAAIC,EAAAA,EAAG,OAAA,EAAS,OAAA,EAAS,IAAA,EAAMU,IAAAA,EAAKlB,EAAAA;AACpC,EAAA,KAAA,IAASO,EAAAA,GAAI,CAAA,EAAGA,EAAAA,IAAK,OAAA,EAAS,EAAEA,EAAAA,EAAG;AACjC,IAAA,OAAA,GAAU,IAAA,CAAKA,KAAI,CAAC,CAAA;AACpB,IAAA,KAAKC,EAAAA,GAAI,CAAA,EAAGA,EAAAA,IAAK,OAAA,EAAS,EAAEA,EAAAA,EAAG;AAE7B,MAAA,IAAID,OAAMC,EAAAA,IAAK,MAAA,CAAOD,EAAC,CAAA,CAAEC,EAAC,IAAI,CAAA,EAAG;AAC/B,QAAA,OAAO,OAAA;AAAA,MACT;AACA,MAAA,OAAA,GAAU,IAAA,CAAKA,KAAI,CAAC,CAAA;AACpB,MAAA,IAAA,GAAO,OAAA,KAAY,UAAU,CAAA,GAAI,CAAA;AAEjC,MAAAU,OAAM,MAAA,CAAOX,EAAAA,GAAI,CAAC,CAAA,CAAEC,EAAC,CAAA,GAAI,CAAA;AACzB,MAAA,IAAA,CAAKR,EAAAA,GAAI,MAAA,CAAOO,EAAC,CAAA,CAAEC,EAAAA,GAAI,CAAC,CAAA,GAAI,CAAA,IAAKU,IAAAA,EAAKA,IAAAA,GAAMlB,EAAAA;AAC5C,MAAA,IAAA,CAAKA,EAAAA,GAAI,MAAA,CAAOO,EAAAA,GAAI,CAAC,CAAA,CAAEC,EAAAA,GAAI,CAAC,CAAA,GAAI,IAAA,IAAQU,IAAAA,EAAKA,IAAAA,GAAMlB,EAAAA;AAEnD,MAAA,MAAM,YAAA,GACJO,KAAI,CAAA,IAAKC,EAAAA,GAAI,KAAK,OAAA,KAAY,IAAA,CAAKA,EAAAA,GAAI,CAAC,CAAA,IAAK,IAAA,CAAKD,KAAI,CAAC,CAAA,KAAM,OAAA,IAAA,CAAYP,EAAAA,GAAI,MAAA,CAAOO,EAAAA,GAAI,CAAC,CAAA,CAAEC,EAAAA,GAAI,CAAC,CAAA,GAAI,IAAA,IAAQU,IAAAA;AAC9G,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAA,CAAOX,EAAC,CAAA,CAAEC,EAAC,CAAA,GAAIR,EAAAA;AAAA,MACjB,CAAA,MAAO;AACL,QAAA,MAAA,CAAOO,EAAC,CAAA,CAAEC,EAAC,CAAA,GAAIU,IAAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,OAAO,CAAA,CAAE,OAAO,CAAA;AAChC,CAAA;AAEA,IAAM,UAAA,GAAa,SAAU,IAAA,EAAM,IAAA,EAAM,YAAY,CAAA,EAAG;AACtD,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,CAAK,MAAA,GAAS,SAAA,IAAa,IAAA,CAAK,SAAS,SAAA,EAAW;AACtD,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,EAAM,IAAI,CAAA;AACrC,EAAA,MAAMmD,UAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,MAAM,CAAA;AAChD,EAAA,MAAMC,SAAAA,GAAWD,OAAAA,KAAW,CAAA,GAAI,CAAA,GAAI,KAAA,GAAQA,OAAAA;AAC5C,EAAA,MAAM,aAAa,CAAA,GAAIC,SAAAA;AACvB,EAAA,OAAO,UAAA;AACT,CAAA;AACA,IAAO,aAAA,GAAQ,UAAA;;;ACrEf,IAAM,UAAA,GACJ,kHAAA;AAEF,IAAM,QAAA,GAAW,8EAAA;AAEjB,IAAM,SAAA,GAAY,SAAA;AAClB,IAAMjC,QAAAA,GAAU,cAAA;AAGhB,IAAM,OAAA,GAAU,CAAC,IAAA,EAAM,KAAA,KAAU,KAAK,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,KAAM,EAAA;AAI9D,IAAMjB,SAAAA,GAAU;AAAA;AAAA,EAEd,QAAA,EAAU,CAAA,IAAA,KAAQ,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,IAAK,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAAA;AAAA,EAEtE,QAAA,EAAU,CAAA,IAAA,KAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAAA;AAAA,EAEnC,SAAA,EAAW,CAAA,IAAA,KAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,MAAM,IAAA,IAAQ,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA,KAAM,KAAA;AAAA;AAAA,EAE3E,cAAA,EAAgB,CAAA,IAAA,KAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAAA;AAAA,EAEzC,eAAA,EAAiB,UAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,IAAK,OAAA,CAAQ,MAAM,MAAG,CAAA;AAAA;AAAA,EAEhE,WAAA,EAAa,UAAQ,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA,IAAK,OAAA,CAAQ,MAAM,QAAG,CAAA;AAAA;AAAA,EAE7D,YAAA,EAAc,CAAA,IAAA,KAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAAA;AAAA,EAEvC,QAAA,EAAU,CAAA,IAAA,KAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAAA;AAAA,EAEnC,QAAA,EAAU,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA;AAAA,EAErC,SAAA,EAAW,CAAA,IAAA,KAAQ,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,IAAK,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA;AAAA,EAEvE,OAAA,EAAS,CAAA,IAAA,KAAQiB,QAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,IAAKA,QAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA;AAAA,EAEjE,cAAA,EAAgB,CAAA,IAAA,KAAQ,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AAAA;AAAA,EAE7C,SAAA,EAAW,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,CAAK,IAAI,SAAS,CAAA;AAAA;AAAA,EAE1C,OAAA,EAAS,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,CAAA;AAAA;AAAA,EAElC,WAAA,EAAa,CAAA,IAAA,KAAQ,6BAAA,CAA8B,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA;AAAA,EAEjE,WAAA,EAAa,CAAA,IAAA,KAAQ,YAAA,CAAa,IAAA,CAAK,KAAK,IAAI;AAClD,CAAA;AAEAjB,SAAAA,CAAQ,eAAeA,SAAAA,CAAQ,QAAA;AAE/B,IAAO,mBAAA,GAAQA,SAAAA;;;AChDf,IAAI,YAAY,WAAY;AAAE,CAAA;AAE9B,IAAM,SAAA,GAAY,SAAU,IAAA,EAAM,GAAA,EAAKjC,QAAOkF,OAAAA,EAAQ;AAEpD,EAAA,IAAI,GAAA,CAAI,aAAa,IAAA,EAAM;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,KAAA,KAAU,IAAA,IAAQlF,MAAAA,KAAU,CAAA,EAAG;AACrC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,GAAA,KAAQ,IAAA,IAAQA,MAAAA,KAAUkF,UAAS,CAAA,EAAG;AAC5C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAI,EAAA,KAAO,MAAA,IAAa,GAAA,CAAI,EAAA,KAAO,KAAK,EAAA,EAAI;AAC9C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAW;AAE1B,IAAA,IAAI,IAAI,GAAA,EAAK;AACX,MAAA,OAAO,GAAA,CAAI,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAAA,IAClC;AAEA,IAAA,IAAI,KAAK,OAAA,KAAY,IAAA,IAAQ,IAAA,CAAK,OAAA,KAAY,IAAI,IAAA,EAAM;AACtD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,CAAK,UAAU,MAAA,IAAa,IAAA,CAAK,MAAM,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AACnE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,GAAA,CAAI,UAAU,IAAA,EAAM;AACtB,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM;AAC1B,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA,GAAQ,aAAA,CAAM,GAAA,CAAI,IAAA,EAAM,KAAK,MAAM,CAAA;AACzC,MAAA,IAAI,KAAA,IAAS,IAAI,GAAA,EAAK;AACpB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,GAAA,KAAO,GAAA,KAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1D,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAI,IAAA,KAAS,IAAA,CAAK,IAAA,IAAQ,GAAA,CAAI,SAAS,IAAA,CAAK,MAAA;AAAA,EACrD;AAEA,EAAA,IAAI,GAAA,CAAI,QAAQ,MAAA,EAAW;AACzB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,KAAM,IAAA;AAAA,EACpC;AAEA,EAAA,IAAI,GAAA,CAAI,WAAW,MAAA,EAAW;AAC5B,IAAA,IAAI,OAAO,mBAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,KAAM,UAAA,IAAc,mBAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,CAAE,IAAI,CAAA,KAAM,IAAA,EAAM;AACnF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,QAAQ,MAAA,EAAW;AACzB,IAAA,OAAO,KAAK,GAAA,IAAO,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,EAC9C;AACA,EAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAW;AAC1B,IAAA,OAAO,KAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAI,IAAI,CAAA;AAAA,EACjD;AAEA,EAAA,IAAI,GAAA,CAAI,UAAU,MAAA,EAAW;AAC3B,IAAA,IAAI,MAAM,IAAA,CAAK,MAAA;AACf,IAAA,IAAI,IAAI,GAAA,EAAK;AACX,MAAA,GAAA,GAAM,IAAA,CAAK,IAAI,GAAG,CAAA;AAAA,IACpB;AACA,IAAA,OAAO,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAAA,EAC3B;AAEA,EAAA,IAAI,GAAA,CAAI,UAAU,MAAA,EAAW;AAC3B,IAAA,OAAO,IAAA,CAAK,UAAU,GAAA,CAAI,KAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,GAAA,CAAI,WAAW,MAAA,EAAW;AAC5B,IAAA,OAAO,IAAA,CAAK,WAAW,GAAA,CAAI,MAAA;AAAA,EAC7B;AAEA,EAAA,IAAI,GAAA,CAAI,YAAY,MAAA,EAAW;AAC7B,IAAA,OAAO,IAAA,CAAK,MAAA,KAAW,GAAA,CAAI,OAAA,IAAW,IAAA,CAAK,YAAY,GAAA,CAAI,OAAA,IAAW,IAAA,CAAK,IAAA,KAAS,GAAA,CAAI,OAAA;AAAA,EAC1F;AAEA,EAAA,IAAI,GAAA,CAAI,UAAU,MAAA,EAAW;AAC3B,IAAA,OAAO,IAAA,CAAK,UAAU,GAAA,CAAI,KAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,GAAA,CAAI,WAAW,MAAA,EAAW;AAE5B,IAAA,IAAI,GAAA,CAAI,OAAO,CAAC,IAAA,CAAK,KAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG;AACtC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,IAAQ,KAAK,QAAA,IAAY,IAAA,CAAK,WAAW,IAAA,CAAK,MAAA;AAC/D,IAAA,OAAO,GAAA,CAAI,OAAO,GAAA,CAAI,GAAG,KAAK,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI,GAAA,CAAI,YAAY,MAAA,EAAW;AAE7B,IAAA,IAAI,GAAA,CAAI,aAAa,KAAA,EAAO;AAE1B,MAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,CAAAtD,EAAAA,KAAK,UAAU,IAAA,EAAMA,EAAAA,EAAG5B,MAAAA,EAAOkF,OAAM,CAAC,CAAA;AAAA,IACjE;AAEA,IAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,CAAAtD,EAAAA,KAAK,UAAU,IAAA,EAAMA,EAAAA,EAAG5B,MAAAA,EAAOkF,OAAM,CAAC,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,SAAA,GAAY,SAAUrE,EAAAA,EAAG,GAAA,EAAKb,MAAAA,EAAOkF,OAAAA,EAAQ;AAC3C,EAAA,MAAM,MAAA,GAAS,SAAA,CAAUrE,EAAAA,EAAG,GAAA,EAAKb,QAAOkF,OAAM,CAAA;AAC9C,EAAA,IAAI,GAAA,CAAI,aAAa,IAAA,EAAM;AACzB,IAAA,OAAO,CAAC,MAAA;AAAA,EACV;AACA,EAAA,OAAO,MAAA;AACT,CAAA;AACA,IAAO,iBAAA,GAAQ,SAAA;;;ACvHf,IAAM,SAAA,GAAY,SAAU,KAAA,EAAO,MAAA,EAAQ;AACzC,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,GAAG,EAAE,KAAA,EAAO,KAAA,EAAO,GAAA,EAAK,OAAO,CAAA;AAC/E,EAAA,MAAMhD,SAAQ,KAAA,CAAM,CAAA;AACpB,EAAA,OAAO,MAAM,CAAA,GAAI,KAAA,CAAM,MAAM,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,EAAG;AAEjD,IAAA,IAAI,MAAA,IAAU,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAM,MAAM,CAAC,CAAA,EAAG,MAAA,EAAQ,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,aAAa,CAAA,EAAG;AACnG,MAAA,OAAO,KAAA,CAAM,CAAA;AAAA,IACf;AACA,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,CAAA,GAAIA,MAAAA,GAAQ,CAAA;AAEhC,IAAA,IAAI,GAAA,CAAI,GAAA,KAAQ,MAAA,IAAa,KAAA,KAAU,IAAI,GAAA,EAAK;AAC9C,MAAA,OAAO,KAAA,CAAM,CAAA;AAAA,IACf;AAEA,IAAA,IAAI,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG,GAAA,EAAK,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,aAAa,MAAM,KAAA,EAAO;AAEhG,MAAA,IAAI,GAAA,CAAI,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,IAAI,GAAA,EAAK;AAC5C,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA,CAAM,CAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,CAAA;AACf,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,KAAA,EAAO,OAAA,EAAS;AACzC,EAAA,IAAIrB,KAAI,KAAA,CAAM,CAAA;AAEd,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAM,KAAA,CAAM,MAAA;AAAA,EACrB;AAEA,EAAA,OAAOA,EAAAA,GAAI,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACrC,IAAA,IAAI,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAMA,EAAC,CAAA,EAAG,OAAA,EAAS,KAAA,CAAM,OAAA,GAAUA,EAAAA,EAAG,KAAA,CAAM,aAAa,CAAA,KAAM,IAAA,EAAM;AAEvF,MAAA,OAAOA,EAAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,WAAA,GAAc,SAAU,GAAA,EAAK,KAAA,EAAO;AACxC,EAAA,IAAI,GAAA,CAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,CAAI,WAAW,IAAA,EAAM;AAC3C,IAAA,IAAI,MAAM,OAAA,GAAU,KAAA,CAAM,CAAA,GAAI,KAAA,CAAM,gBAAgB,CAAA,EAAG;AACrD,MAAA,MAAM,MAAA,GAAS,OAAO,MAAA,CAAO,IAAI,GAAA,EAAK,EAAE,GAAA,EAAK,KAAA,EAAO,CAAA;AACpD,MAAA,IAAI,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG,MAAA,EAAQ,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,aAAa,MAAM,IAAA,EAAM;AAElG,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT,CAAA;;;ACzDO,IAAM,QAAA,GAAW,SAAU,KAAA,EAAO,UAAA,EAAY;AACnD,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,EAAG;AAC/B,IAAA,OAAO,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA;AAAA,EACnC;AACA,EAAA,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI;AAAA,IAC5B,KAAA,EAAO,UAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA;AACnC,CAAA;;;ACLA,IAAM,QAAA,GAAW,SAAU,KAAA,EAAO;AAChC,EAAA,MAAM,EAAE,MAAK,GAAI,KAAA;AACjB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAExB,EAAA,MAAM,SAAS,QAAA,CAAS,KAAA,EAAO,KAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAC,CAAA;AAEhD,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,CAAA,EAAG;AACnC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAI,GAAA,KAAQ,MAAA,IAAa,SAAS,KAAA,CAAM,CAAA,GAAI,IAAI,GAAA,EAAK;AACvD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAI,GAAA,KAAQ,MAAA,IAAa,SAAS,KAAA,CAAM,CAAA,GAAI,IAAI,GAAA,EAAK;AACvD,IAAA,KAAA,CAAM,CAAA,GAAI,KAAA,CAAM,CAAA,GAAI,GAAA,CAAI,GAAA;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,aAAa,IAAA,EAAM;AAC3B,IAAA,MAAMuE,EAAAA,GAAI,QAAA,CAAS,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA;AACjC,IAAAA,EAAAA,CAAE,MAAA,GAAS,MAAA,GAAS,KAAA,CAAM,CAAA;AAAA,EAC5B;AACA,EAAA,KAAA,CAAM,CAAA,GAAI,MAAA;AAEV,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,cAAA,GAAQ,QAAA;;;AC/Bf,IAAMhD,QAAAA,GAAU,SAAU,GAAA,EAAK;AAC7B,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AACjD,CAAA;AAEO,IAAM,SAAA,GAAY,SAAU,KAAA,EAAO,KAAA,GAAQ,CAAA,EAAG;AACnD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAChC,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,KAAA,IAASd,KAAI,CAAA,EAAGA,EAAAA,GAAI,MAAM,OAAA,CAAQ,MAAA,EAAQA,MAAK,CAAA,EAAG;AAEhD,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQA,EAAC,CAAA;AAC5B,IAAA,IAAI,CAACc,QAAAA,CAAQ,IAAI,CAAA,EAAG;AAClB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,CAAC,EAAA,EAAI,OAAA,KAAY;AACrC,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,MAAMvB,EAAAA,GAAI,KAAA,CAAM,CAAA,GAAI,OAAA,GAAU,KAAA,GAAQ,KAAA;AACtC,MAAA,IAAI,KAAA,CAAM,KAAA,CAAMA,EAAC,CAAA,KAAM,MAAA,EAAW;AAChC,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM,UAAA,GAAa,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAMA,EAAC,CAAA,EAAG,EAAA,EAAIA,EAAAA,GAAI,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,aAAa,CAAA;AAEvF,MAAA,IAAI,UAAA,KAAe,IAAA,IAAQ,EAAA,CAAG,MAAA,KAAW,IAAA,EAAM;AAC7C,QAAA,KAAA,IAASO,KAAI,CAAA,EAAGA,EAAAA,GAAI,MAAM,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AAC9C,UAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAMP,EAAAA,GAAIO,EAAC,CAAA;AAC9B,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,MAAM,SAAA,GAAY,kBAAU,IAAA,EAAM,EAAA,EAAI,MAAM,OAAA,GAAUA,EAAAA,EAAG,MAAM,aAAa,CAAA;AAC5E,YAAA,IAAI,cAAc,IAAA,EAAM;AACtB,cAAA,KAAA,IAAS,CAAA;AAAA,YACX,CAAA,MAAO;AACL,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,KAAA,IAAS,KAAA;AACT,MAAA,OAAO,UAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,KAAA,IAAS,IAAA,CAAK,MAAA;AACd,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,IAAY,KAAA,CAAM,MAAA,KAAW,IAAA,EAAM;AACrC,IAAA,OAAO,SAAA,CAAU,OAAO,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,IAAM,UAAA,GAAa,SAAU,KAAA,EAAO;AAClC,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAC9B,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,CAAA,KAAA,KAAS;AAE7C,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,CAAC,IAAI,OAAA,KAAY;AAC5C,MAAA,MAAM,OAAA,GAAU,MAAM,CAAA,GAAI,OAAA;AAC1B,MAAA,IAAI,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA,KAAM,MAAA,EAAW;AACtC,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,iBAAA,CAAU,MAAM,KAAA,CAAM,OAAO,GAAG,EAAA,EAAI,OAAA,EAAS,MAAM,aAAa,CAAA;AAAA,IACzE,CAAC,CAAA;AACD,IAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,KAAA,CAAM,MAAA,GAAS,OAAA,EAAS;AAC/C,MAAA,OAAA,GAAU,KAAA,CAAM,MAAA;AAAA,IAClB;AACA,IAAA,OAAO,QAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,IAAI,gBAAgB,IAAA,EAAM;AAExB,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT,CAAA;;;ACxEA,IAAM,OAAA,GAAU,SAAU,KAAA,EAAO;AAC/B,EAAA,MAAM,EAAE,MAAK,GAAI,KAAA;AACjB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACxB,EAAA,MAAM,OAAA,GAAU,UAAU,KAAK,CAAA;AAE/B,EAAA,IAAI,OAAA,EAAS;AAEX,IAAA,IAAI,GAAA,CAAI,aAAa,IAAA,EAAM;AACzB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,CAAM,aAAa,IAAA,EAAM;AAC3B,MAAA,MAAMgE,EAAAA,GAAI,QAAA,CAAS,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA;AACjC,MAAAA,GAAE,MAAA,IAAU,OAAA;AAAA,IACd;AAEA,IAAA,IAAI,GAAA,CAAI,QAAQ,IAAA,EAAM;AACpB,MAAA,MAAMjD,OAAM,KAAA,CAAM,aAAA;AAClB,MAAA,IAAI,KAAA,CAAM,CAAA,GAAI,KAAA,CAAM,OAAA,GAAU,YAAYA,IAAAA,EAAK;AAC7C,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,KAAA,CAAM,CAAA,IAAK,OAAA;AAEX,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,MAAA,IAAW,CAAC,GAAA,CAAI,QAAA,EAAU;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,gBAAA,GAAQ,OAAA;;;AC7Bf,IAAM,QAAA,GAAW,SAAU,KAAA,EAAO;AAChC,EAAA,MAAM,EAAE,MAAK,GAAI,KAAA;AACjB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAExB,EAAA,MAAM,OAAA,GAAU,WAAW,KAAK,CAAA;AAChC,EAAA,IAAI,OAAA,EAAS;AAEX,IAAA,IAAI,GAAA,CAAI,aAAa,IAAA,EAAM;AACzB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAA,CAAM,aAAa,IAAA,EAAM;AAC3B,MAAA,MAAMiD,EAAAA,GAAI,QAAA,CAAS,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA;AACjC,MAAAA,GAAE,MAAA,IAAU,OAAA;AAAA,IACd;AAEA,IAAA,IAAI,GAAA,CAAI,QAAQ,IAAA,EAAM;AACpB,MAAA,MAAMjD,IAAAA,GAAM,MAAM,aAAA,GAAgB,CAAA;AAClC,MAAA,IAAI,KAAA,CAAM,CAAA,GAAI,KAAA,CAAM,OAAA,KAAYA,IAAAA,EAAK;AACnC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,KAAA,CAAM,CAAA,IAAK,OAAA;AAEX,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,MAAA,IAAW,CAAC,GAAA,CAAI,QAAA,EAAU;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,iBAAA,GAAQ,QAAA;;;AC/Bf,IAAM,SAAA,GAAY,SAAU,KAAA,EAAO,GAAA,EAAK,OAAA,EAAS;AAC/C,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,KAAA,IAAStB,EAAAA,GAAI,MAAM,CAAA,EAAGA,EAAAA,GAAI,MAAM,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACpD,IAAA,IAAI,KAAA,GAAQ,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAMA,EAAC,CAAA,EAAG,GAAA,EAAK,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,aAAa,CAAA;AAEvF,IAAA,IAAI,KAAA,EAAO;AACT,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,KAAA,GAAQ,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAMA,EAAC,CAAA,EAAG,OAAA,EAAS,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,aAAa,CAAA;AACvF,MAAA,IAAI,KAAA,EAAO;AACT,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAA,IAAQ,CAAA;AAER,IAAA,IAAI,GAAA,CAAI,GAAA,KAAQ,MAAA,IAAa,IAAA,KAAS,IAAI,GAAA,EAAK;AAC7C,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,GAAA,IAAO,GAAA,CAAI,GAAA,GAAM,IAAA,EAAM;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,KAAA,CAAM,CAAA,IAAK,IAAA;AAEX,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAO,uBAAA,GAAQ,SAAA;;;AC/Bf,IAAM,UAAA,GAAa,SAAU,KAAA,EAAO;AAClC,EAAA,MAAM,EAAE,MAAK,GAAI,KAAA;AACjB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAGxB,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,IAAI,GAAG,CAAA;AACpC,EAAA,MAAA,CAAO,QAAA,GAAW,KAAA;AAGlB,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG,MAAA,EAAQ,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,MAAM,aAAa,CAAA;AAClG,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAI,QAAA,EAAU;AAGhB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA;AAChC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,KAAA,GAAQ,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG,OAAA,EAAS,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,MAAM,aAAa,CAAA;AACnG,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,CAAA,IAAK,CAAA;AAAA,MACb,WAAW,OAAA,CAAQ,QAAA,IAAY,KAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,EAAG;AAIhD,QAAA,MAAM,SAAS,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,EAAG,KAAA,CAAM,UAAU,KAAA,CAAM,CAAA,EAAG,MAAM,aAAa,CAAA;AAC9G,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,KAAA,CAAM,CAAA,IAAK,CAAA;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,IAAI,MAAA,EAAQ;AACd,IAAA,OAAO,wBAAU,KAAA,EAAO,MAAA,EAAQ,KAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,EACnD;AACA,EAAA,KAAA,CAAM,CAAA,IAAK,CAAA;AACX,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,gBAAA,GAAQ,UAAA;;;AC1Cf,IAAM,aAAA,GAAgB,SAAU,KAAA,EAAO;AACrC,EAAA,MAAM,EAAE,MAAK,GAAI,KAAA;AACjB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACxB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAEhC,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAU,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,EAAG,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,MAAM,aAAa,CAAA;AACtG,EAAA,IAAI,GAAA,CAAI,YAAY,cAAA,EAAgB;AAGlC,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAA;AACxC,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,iBAAA,CAAU,QAAA,EAAU,KAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,EAAG,MAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,aAAa,CAAA,EAAG;AACtG,MAAA,KAAA,CAAM,CAAA,IAAK,CAAA;AAAA,IACb;AAAA,EACF;AACF,CAAA;AAEA,IAAO,sBAAA,GAAQ,aAAA;;;AChBf,IAAM,WAAA,GAAc,SAAU,KAAA,EAAO;AACnC,EAAA,MAAM,EAAE,IAAA,EAAM,aAAA,EAAc,GAAI,KAAA;AAChC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACxB,EAAA,KAAA,CAAM,IAAI,SAAA,CAAU,KAAA,EAAO,KAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAC,CAAA;AAC5C,EAAA,IAAI,KAAA,CAAM,MAAM,IAAA,EAAM;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,GAAA,IAAO,GAAA,CAAI,GAAA,GAAM,MAAM,CAAA,EAAG;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAI,GAAA,KAAQ,IAAA,IAAQ,MAAM,OAAA,GAAU,KAAA,CAAM,MAAM,aAAA,EAAe;AACjE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,oBAAA,GAAQ,WAAA;;;ACjBf,IAAM,eAAA,GAAkB,SAAU,KAAA,EAAO;AACvC,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAChC,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAE9B,EAAA,IAAI,KAAK,QAAA,IAAY,KAAA,CAAM,MAAM,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,EAAG;AAC7C,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAA;AAExC,IAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,IAAA,CAAK,MAAA,EAAQ;AAC5B,MAAA,KAAA,CAAM,CAAA,IAAK,CAAA;AAAA,IACb;AAEA,IAAA,IAAI,GAAA,CAAI,WAAW,gBAAA,EAAkB;AACnC,MAAA,KAAA,CAAM,CAAA,IAAK,CAAA;AAAA,IACb;AAAA,EACF;AACF,CAAA;AACA,IAAO,wBAAA,GAAQ,eAAA;;;AChBf,IAAM,QAAA,GAAW,SAAU,KAAA,EAAO,OAAA,EAAS;AACzC,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAE9B,EAAA,MAAMuE,EAAAA,GAAI,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAEjC,EAAA,IAAI,KAAA,CAAM,CAAA,GAAI,CAAA,IAAK,GAAA,CAAI,MAAA,EAAQ;AAC7B,IAAAA,EAAAA,CAAE,MAAA,IAAU,KAAA,CAAM,CAAA,GAAI,OAAA;AAAA,EACxB,CAAA,MAAO;AACL,IAAAA,EAAAA,CAAE,MAAA,EAAA;AAAA,EACJ;AACF,CAAA;AAGA,IAAM,WAAA,GAAc,SAAU,KAAA,EAAO;AACnC,EAAA,MAAM,EAAE,MAAK,GAAI,KAAA;AACjB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACxB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAChC,EAAA,MAAM,UAAU,KAAA,CAAM,CAAA;AAEtB,EAAA,IAAI,GAAA,CAAI,YAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA,IAAK,IAAI,QAAA,EAAU;AACrD,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAI,QAAA,IAAY,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,EAAG;AACrC,IAAA,sBAAA,CAAc,KAAK,CAAA;AAAA,EACrB;AAGA,EAAA,IAAI,KAAK,QAAA,IAAY,KAAA,CAAM,MAAM,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,EAAG;AAC7C,IAAA,wBAAA,CAAgB,KAAK,CAAA;AAAA,EACvB;AAEA,EAAA,KAAA,CAAM,CAAA,IAAK,CAAA;AAGX,EAAA,IAAI,GAAA,CAAI,GAAA,KAAQ,IAAA,IAAQ,KAAA,CAAM,CAAA,KAAM,MAAM,KAAA,CAAM,MAAA,IAAU,GAAA,CAAI,MAAA,KAAW,IAAA,EAAM;AAC7E,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,WAAW,IAAA,EAAM;AACvB,IAAA,MAAM,KAAA,GAAQ,qBAAY,KAAK,CAAA;AAC/B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,aAAa,IAAA,EAAM;AAC3B,IAAA,QAAA,CAAS,OAAO,OAAO,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,oBAAA,GAAQ,WAAA;;;AC7Cf,IAAM,OAAA,GAAU,SAAU,KAAA,EAAO,IAAA,EAAM,SAAS,aAAA,EAAe;AAE7D,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,WAAW,CAAA,EAAG;AAC3C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,CAAA,EAAG,CAAA;AAAA,IACH,KAAA;AAAA,IACA,CAAA,EAAG,CAAA;AAAA,IACH,IAAA;AAAA,IACA,QAAQ,EAAC;AAAA,IACT,OAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AAIA,EAAA,OAAO,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,EAAG;AAC1C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAExB,IAAA,KAAA,CAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA;AAElC,IAAA,IAAI,KAAA,CAAM,aAAa,IAAA,EAAM;AAC3B,MAAA,KAAA,CAAM,UAAU,GAAA,CAAI,KAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAAA,IAClB;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG;AAEzB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAC,EAAE,IAAA,CAAK,CAAA,MAAA,KAAU,CAAC,MAAA,CAAO,QAAQ,CAAA;AACjE,MAAA,IAAI,UAAU,KAAA,EAAO;AACnB,QAAA;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,GAAA,CAAI,QAAA,KAAa,IAAA,IAAQ,GAAA,CAAI,WAAW,IAAA,EAAM;AAChD,MAAA,MAAM,KAAA,GAAQ,eAAS,KAAK,CAAA;AAC5B,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,OAAA,KAAY,MAAA,IAAa,GAAA,CAAI,aAAa,IAAA,EAAM;AACtD,MAAA,MAAM,KAAA,GAAQ,iBAAU,KAAK,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,OAAA,KAAY,MAAA,IAAa,GAAA,CAAI,aAAa,KAAA,EAAO;AACvD,MAAA,MAAM,KAAA,GAAQ,kBAAW,KAAK,CAAA;AAC9B,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,aAAa,IAAA,EAAM;AAEzB,MAAA,IAAI,GAAA,CAAI,QAAA,IAAY,GAAA,CAAI,QAAA,EAAU;AAChC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA,GAAQ,qBAAY,KAAK,CAAA;AAC/B,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAA,CAAY,GAAA,EAAK,KAAK,CAAA,KAAM,IAAA,EAAM;AACpC,MAAA,MAAM,KAAA,GAAQ,qBAAY,KAAK,CAAA;AAC/B,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAI,QAAA,EAAU;AAEhB,MAAA,MAAM,KAAA,GAAQ,iBAAW,KAAK,CAAA;AAC9B,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,iBAAA,CAAU,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG,GAAA,EAAK,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,CAAA,EAAG,MAAM,aAAa,CAAA;AAClG,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,MAAM,KAAA,GAAQ,qBAAY,KAAK,CAAA;AAC/B,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,aAAa,IAAA,EAAM;AACzB,MAAA;AAAA,IACF;AAGA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAO,CAAC,IAAA,EAAM,OAAA,EAAS,KAAA,CAAM,IAAI,OAAO,CAAA;AAC9C,EAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,EAAG;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,MAAA,CAAO,KAAK,KAAA,CAAM,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAAtD,EAAAA,KAAK;AACrC,IAAA,MAAMe,EAAAA,GAAI,KAAA,CAAM,MAAA,CAAOf,EAAC,CAAA;AACxB,IAAA,MAAMI,MAAAA,GAAQ,UAAUW,EAAAA,CAAE,KAAA;AAC1B,IAAA,MAAA,CAAOf,EAAC,CAAA,GAAI,CAAC,MAAMI,MAAAA,EAAOA,MAAAA,GAAQW,GAAE,MAAM,CAAA;AAAA,EAC5C,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAe;AACzC,CAAA;AACA,IAAO,iBAAA,GAAQ,OAAA;;;ACrIf,IAAMwC,SAAAA,GAAW,SAAU,GAAA,EAAK,KAAA,EAAO;AACrC,EAAA,MAAM,OAAO,EAAC;AACd,EAAA,MAAM,UAAU,EAAC;AACjB,EAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,IAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,EACzB;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,KAAA,GAAQ,OAAO,KAAK,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,GAAA,CAAI,OAAA,CAAQ,CAAAzD,EAAAA,KAAK;AACf,MAAA,IAAIA,EAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG;AACnB,QAAA,IAAA,CAAK,IAAA,CAAKA,EAAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MAC3B;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,OAAA,CAAQ,CAAAA,EAAAA,KAAK;AACf,MAAA,IAAA,CAAK,IAAA,CAAKA,GAAE,OAAO,CAAA;AACnB,MAAA,MAAA,CAAO,KAAKA,EAAAA,CAAE,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAAE,EAAAA,KAAK;AACjC,QAAA,OAAA,CAAQA,EAAC,CAAA,GAAI,OAAA,CAAQA,EAAC,KAAK,EAAC;AAC5B,QAAA,OAAA,CAAQA,EAAC,CAAA,CAAE,IAAA,CAAKF,EAAAA,CAAE,MAAA,CAAOE,EAAC,CAAC,CAAA;AAAA,MAC7B,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AACzB,CAAA;AACA,IAAO,gBAAA,GAAQuD,SAAAA;;;AC1Bf,IAAM,KAAA,GAAQ,SAAU,OAAA,EAAS,GAAA,EAAK,IAAA,EAAM;AAC1C,EAAA,OAAA,GAAU,OAAA,CAAQ,OAAO,CAAA,GAAA,KAAO;AAC9B,IAAA,MAAM,CAAC1D,EAAAA,EAAGO,MAAAA,EAAOC,IAAG,IAAI,GAAA,CAAI,OAAA;AAC5B,IAAA,MAAM,QAAQ,IAAA,CAAKR,EAAC,CAAA,CAAE,KAAA,CAAMO,QAAOC,IAAG,CAAA;AACtC,IAAA,KAAA,IAASf,KAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACxC,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAMA,EAAC,CAAA;AAC3B,MAAA,MAAM,QAAQ,iBAAA,CAAS,KAAA,EAAO,GAAA,EAAKA,EAAAA,EAAG,MAAM,MAAM,CAAA;AAClD,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,OAAA;AACT,CAAA;AAEA,IAAO,aAAA,GAAQ,KAAA;;;ACXf,IAAM,WAAA,GAAc,SAAU,GAAA,EAAKO,EAAAA,EAAG;AACpC,EAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,GAAIA,EAAAA;AACjB,EAAA,MAAA,CAAO,KAAK,GAAA,CAAI,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAAG,EAAAA,KAAK;AACnC,IAAA,GAAA,CAAI,MAAA,CAAOA,EAAC,CAAA,CAAE,CAAC,CAAA,GAAIH,EAAAA;AAAA,EACrB,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAM,WAAA,GAAc,SAAU,KAAA,EAAO,IAAA,EAAMA,EAAAA,EAAG;AAC5C,EAAA,IAAI,MAAM,iBAAA,CAAS,KAAA,EAAO,IAAA,EAAM,CAAA,EAAG,MAAM,MAAM,CAAA;AAC/C,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,GAAA,GAAM,WAAA,CAAY,KAAKA,EAAC,CAAA;AACxB,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAGA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM,IAAA,EAAMhB,MAAAA,EAAO;AAC5C,EAAAA,MAAAA,GAAQA,UAAS,EAAC;AAClB,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,EAAQ,GAAI,IAAA;AACjC,EAAA,IAAI,UAAU,EAAC;AACf,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,OAAA,EAAS,EAAC,EAAE;AAAA,EACjC;AAEA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,CAAAiB,EAAAA,KAAKA,EAAAA,CAAE,QAAA,KAAa,IAAA,IAAQA,EAAAA,CAAE,QAAA,KAAa,IAAI,CAAA,CAAE,MAAA;AAC/E,EAAA,IAAA,WAAeD,EAAAA,GAAI,CAAA,EAAGA,KAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AAC7C,IAAA,MAAM,KAAA,GAAQ,KAAKA,EAAC,CAAA;AAGpB,IAAA,IAAIhB,MAAAA,CAAMgB,EAAC,CAAA,IAAK,gBAAA,CAAS,MAAMhB,MAAAA,CAAMgB,EAAC,CAAC,CAAA,EAAG;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,KAAU,IAAA,EAAM;AAC1B,MAAA,MAAM,UAAA,GAAa,WAAA,CAAY,KAAA,EAAO,IAAA,EAAMA,EAAQ,CAAA;AACpD,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,MACzB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,IAASP,KAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACxC,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAMA,EAAC,CAAA;AAE3B,MAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,MAAM,iBAAA,CAAS,KAAA,EAAO,IAAA,EAAMA,EAAAA,EAAG,MAAM,MAAM,CAAA;AAE/C,MAAA,IAAI,GAAA,EAAK;AAEP,QAAA,GAAA,GAAM,WAAA,CAAY,KAAKO,EAAC,CAAA;AACxB,QAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAEhB,QAAA,IAAI,YAAY,IAAA,EAAM;AACpB,UAAA,MAAM,IAAA;AAAA,QACR;AAEA,QAAA,MAAMQ,IAAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA;AACzB,QAAA,IAAI,IAAA,CAAK,GAAA,CAAIA,IAAAA,GAAM,CAAC,IAAIf,EAAAA,EAAG;AACzB,UAAAA,EAAAA,GAAI,IAAA,CAAK,GAAA,CAAIe,IAAAA,GAAM,CAAC,CAAA;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,CAAE,QAAQ,IAAA,EAAM;AACtC,IAAA,OAAA,GAAU,OAAA,CAAQ,OAAO,CAAA,GAAA,KAAO;AAC9B,MAAA,MAAMR,EAAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA;AACvB,MAAA,OAAO,KAAKA,EAAC,CAAA,CAAE,MAAA,KAAW,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,IACzC,CAAC,CAAA;AAAA,EACH;AACA,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,OAAA,GAAU,aAAA,CAAM,OAAA,EAAS,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA;AAAA,EAC3C;AAEA,EAAA,OAAA,GAAU,gBAAA,CAAS,SAAS,KAAK,CAAA;AAEjC,EAAA,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAC1B,IAAA,MAAM,CAACA,EAAAA,EAAGO,MAAAA,EAAOC,IAAG,CAAA,GAAI,GAAA;AACxB,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,CAAKR,EAAC,CAAA,CAAEO,MAAK,CAAA,CAAE,EAAA;AACxB,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,CAAKP,EAAC,CAAA,CAAEQ,IAAAA,GAAM,CAAC,CAAA,CAAE,EAAA;AAAA,EAC5B,CAAC,CAAA;AACD,EAAA,OAAO,OAAA;AACT,CAAA;AAEA,IAAOmD,cAAAA,GAAQ,QAAA;;;AC3Ff,IAAMrD,SAAAA,GAAU;AAAA,EACd,GAAA,EAAK;AAAA,IACH,WAAA,EAAA,mBAAA;AAAA,IACA,UAAA,EAAA,kBAAA;AAAA,IACA,KAAA,EAAAqD;AAAA;AAEJ,CAAA;AAEA,IAAOvC,gBAAAA,GAAQd,SAAAA;;;ACXf,IAAOsD,YAAAA,GAAQ;AAAA;AAAA,EAEb,UAAA,EAAY,SAAU,GAAA,EAAKV,KAAAA,EAAM;AAC/B,IAAA,MAAMtD,MAAAA,GAAQ,KAAK,KAAA,EAAM;AACzB,IAAA,MAAMiE,YAAAA,GAAcjE,MAAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,WAAA;AACtC,IAAA,IAAIiE,YAAAA,EAAa;AACf,MAAA,GAAA,GAAMA,YAAAA,CAAY,KAAKjE,MAAK,CAAA;AAAA,IAC9B;AACA,IAAA,OAAOA,OAAM,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,GAAA,EAAKsD,OAAMtD,MAAK,CAAA;AAAA,EACtD;AACF,CAAA;;;ACPA,IAAO0C,eAAAA,GAAQ;AAAA,EACb,GAAA,EAAAD,YAAAA;AAAA,EACA,OAAA,EAAAjB,gBAAAA;AAAA,EACA,GAAA,EAAAwC;AACF,CAAA;;;ACRA,IAAM,OAAA,GAAU,MAAA;AAChB,IAAM,IAAA,GAAO,KAAA;AAEb,IAAM,YAAY,CAAA,GAAA,KAAO;AACvB,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AAC/B,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAC9B,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAC9B,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA;AAChC,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA;AAChC,EAAA,OAAO,GAAA;AACT,CAAA;AAGA,IAAM,KAAA,GAAQ,SAAUzD,EAAAA,EAAG;AACzB,EAAA,IAAII,MAAAA,GAAQ,EAAA;AACZ,EAAA,IAAIC,IAAAA,GAAM,SAAA;AACV,EAAAL,EAAAA,GAAI,UAAUA,EAAC,CAAA;AACf,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAKA,EAAC,CAAA,EAAG;AACnB,IAAAI,SAAQ,CAAA,aAAA,EAAgBJ,EAAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA,CAAA;AAAA,EAC9C,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,CAAKA,EAAC,CAAA,EAAG;AACvB,IAAAI,SAAQ,CAAA,UAAA,EAAaJ,EAAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA,CAAA,CAAA;AAAA,EAC1C,CAAA,MAAO;AACL,IAAAI,MAAAA,GAAQ,IAAIJ,EAAC,CAAA,CAAA;AACb,IAAAK,IAAAA,GAAM,KAAKL,EAAC,CAAA,CAAA,CAAA;AAAA,EACd;AACA,EAAAI,MAAAA,IAAS,GAAA;AACT,EAAA,OAAO,EAAE,KAAA,EAAAA,MAAAA,EAAO,GAAA,EAAAC,IAAAA,EAAI;AACtB,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,GAAA,EAAK,GAAA,EAAK;AACnC,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,MAAM,OAAO,EAAC;AACd,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAAL,EAAAA,KAAK;AAC5B,IAAA,IAAI,GAAA,GAAM,IAAIA,EAAC,CAAA;AACf,IAAA,MAAM,GAAA,GAAM,MAAMA,EAAC,CAAA;AACnB,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,MAAA,GAAA,GAAM,GAAA,CAAI,MAAM,GAAG,CAAA;AAAA,IACrB;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AAExB,MAAA,IAAI,MAAM,KAAA,CAAM,CAAAjB,EAAAA,KAAKA,EAAAA,CAAE,QAAQ,CAAA,EAAG;AAChC,QAAA;AAAA,MACF;AACA,MAAA,MAAMZ,EAAAA,GAAI,KAAA,CAAM,CAAC,CAAA,CAAE,EAAA;AACnB,MAAA,MAAA,CAAOA,EAAC,CAAA,GAAI,MAAA,CAAOA,EAAC,KAAK,EAAC;AAC1B,MAAA,MAAA,CAAOA,EAAC,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AACxB,MAAA,MAAM,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAE,EAAA;AAClC,MAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,CAAC,KAAK,EAAC;AACtB,MAAA,IAAA,CAAK,CAAC,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AACxB,CAAA;AAEA,IAAM,IAAA,GAAO,SAAU,GAAA,EAAK;AAE1B,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,QAAA,CAAS,MAAM,GAAG,CAAA;AAE3C,EAAA,IAAIwB,IAAAA,GAAM,EAAA;AACV,EAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACzB,IAAA,KAAA,IAASL,KAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACxC,MAAA,MAAMP,EAAAA,GAAI,MAAMO,EAAC,CAAA;AAEjB,MAAA,IAAI,MAAA,CAAO,cAAA,CAAeP,EAAAA,CAAE,EAAE,CAAA,EAAG;AAC/B,QAAAY,QAAO,MAAA,CAAOZ,EAAAA,CAAE,EAAE,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,MAC7B;AACA,MAAAY,IAAAA,IAAOZ,GAAE,GAAA,IAAO,EAAA;AAChB,MAAAY,IAAAA,IAAOZ,GAAE,IAAA,IAAQ,EAAA;AACjB,MAAA,IAAI,IAAA,CAAK,cAAA,CAAeA,EAAAA,CAAE,EAAE,CAAA,EAAG;AAC7B,QAAAY,QAAO,IAAA,CAAKZ,EAAAA,CAAE,EAAE,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,MAC3B;AACA,MAAAY,IAAAA,IAAOZ,GAAE,IAAA,IAAQ,EAAA;AAAA,IACnB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAOY,IAAAA;AACT,CAAA;AACA,IAAO,YAAA,GAAQ,EAAE,IAAA,EAAK;;;AC5EtB,IAAM,OAAA,GAAU,qFAAA;AAChB,IAAM,SAAA,GACJ,4GAAA;AAEF,IAAM,WAAA,GAAc,mBAAA;AACpB,IAAM,QAAA,GAAW,SAAA;AACjB,IAAM,QAAA,GAAW,GAAA;AAEjB,IAAM,aAAA,GAAgB,SAAU,KAAA,EAAOoD,KAAAA,EAAM,YAAY,IAAA,EAAM;AAC7D,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAAhE,EAAAA,KAAK;AACjB,IAAA,IAAI,GAAA,GAAMA,GAAE,GAAA,IAAO,EAAA;AACnB,IAAA,IAAI,IAAA,GAAOA,GAAE,IAAA,IAAQ,EAAA;AACrB,IAAA,IAAIgE,KAAAA,CAAK,gBAAgB,MAAA,EAAQ;AAC/B,MAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAE/B,MAAA,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACvB,QAAA,IAAA,GAAO,GAAA;AAAA,MACT;AACA,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAEnC,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAC/B,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAC7B,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AAE9B,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAEhC,MAAA,IAAIhE,EAAAA,CAAE,IAAA,CAAK,GAAA,CAAI,cAAc,CAAA,EAAG;AAC9B,QAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAAA,MAC9B;AAAA,IACF;AACA,IAAA,IAAIgE,KAAAA,CAAK,eAAe,MAAA,EAAQ;AAC9B,MAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAC1B,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,CAACA,MAAK,SAAA,EAAW;AACnB,MAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAC/B,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,IAAA,GAAO,GAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAAA,MACjC;AAAA,IACF;AAEA,IAAA,IAAI,OAAOhE,EAAAA,CAAEgE,KAAAA,CAAK,QAAQ,MAAM,CAAA,IAAKhE,GAAE,MAAA,IAAU,EAAA;AACjD,IAAA,IAAIgE,KAAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,MAAA,IAAA,GAAOhE,EAAAA,CAAE,YAAYA,EAAAA,CAAE,IAAA;AAAA,IACzB;AACA,IAAA,IAAIgE,KAAAA,CAAK,IAAA,KAAS,MAAA,IAAUhE,EAAAA,CAAE,QAAA,EAAU;AACtC,MAAA,IAAA,GAAOA,EAAAA,CAAE,IAAA,IAAQA,EAAAA,CAAE,QAAA,IAAYA,EAAAA,CAAE,MAAA;AAAA,IACnC;AAEA,IAAA,IAAA,CAAKgE,KAAAA,CAAK,IAAA,KAAS,SAAA,IAAaA,KAAAA,CAAK,IAAA,KAAS,cAAcA,KAAAA,CAAK,IAAA,KAAS,MAAA,KAAWhE,EAAAA,CAAE,QAAA,EAAU;AAC/F,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACjC,QAAA,IAAA,IAAQ,GAAA;AAAA,MACV;AAAA,IACF;AACA,IAAA,GAAA,IAAO,MAAM,IAAA,GAAO,IAAA;AAAA,EACtB,CAAC,CAAA;AACD,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,GAAA,GAAM,IAAI,IAAA,EAAK;AAAA,EACjB;AACA,EAAA,IAAIgE,KAAAA,CAAK,cAAc,IAAA,EAAM;AAC3B,IAAA,GAAA,GAAM,IAAI,WAAA,EAAY;AAAA,EACxB;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAM,WAAA,GAAc,SAAU,IAAA,EAAMA,KAAAA,EAAM;AACxC,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,CAAK,CAAC,CAAA,IAAK,CAAC,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,KAAA,IAASzD,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AAEvC,IAAA,IAAA,IAAQ,aAAA,CAAc,IAAA,CAAKA,EAAC,CAAA,EAAGyD,OAAM,IAAI,CAAA;AAAA,EAC3C;AACA,EAAA,IAAI,CAACA,MAAK,SAAA,EAAW;AACnB,IAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AACA,EAAA,IAAIA,KAAAA,CAAK,iBAAiB,KAAA,EAAO;AAE/B,IAAA,IAAI,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA,EAAG;AACpC,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAAA,IACnC;AAEA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACjC,IAAA,IAAI,CAAC,KAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA,EAAG;AAC/C,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAAA,IACjC;AAEA,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,CAAA,CAAG,CAAA,IAAK,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9C,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AAAA,IAC7B;AAAA,EACF;AACA,EAAA,IAAIA,KAAAA,CAAK,oBAAoB,IAAA,EAAM;AACjC,IAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AACA,EAAA,OAAO,IAAA;AACT,CAAA;;;ACnGA,IAAM,IAAA,GAAO;AAAA,EACX,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,GACR;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,UAAA,EAAY,MAAA;AAAA,IACZ,WAAA,EAAa,MAAA;AAAA,IACb,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,IAAA,EAAM;AAAA,GACR;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAW,KAAA;AAAA,IACX,UAAA,EAAY,MAAA;AAAA,IACZ,WAAA,EAAa,MAAA;AAAA,IACb,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,IAAA,EAAM;AAAA,GACR;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,SAAA,EAAW,KAAA;AAAA,IACX,UAAA,EAAY,MAAA;AAAA,IACZ,WAAA,EAAa,MAAA;AAAA,IACb,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,IAAA,EAAM;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA;AAEV,CAAA;AACA,IAAA,CAAK,QAAQ,IAAA,CAAK,MAAA;AAClB,IAAA,CAAK,UAAU,IAAA,CAAK,IAAA;AACpB,IAAO,YAAA,GAAQ,IAAA;;;AC5Bf,IAAM,IAAI,EAAC;AACX,IAAI,CAAA,GAAI,CAAA;AACR,OAAO,IAAI,EAAA,IAAM;AACf,EAAA,CAAA,CAAE,CAAC,IAAI,CAAA,GAAK,IAAA,CAAK,IAAI,EAAE,CAAA,GAAI,IAAA,CAAK,EAAE,CAAA,GAAI,UAAA;AACxC;AAEA,IAAM,GAAA,GAAM,SAAU7D,EAAAA,EAAG;AACvB,EAAA,IAAI,CAAA,EACFM,EAAAA,EACAP,EAAAA,EACAM,EAAAA,GAAI,SAAA,CAAU,SAAA,CAAUL,EAAC,CAAC,CAAA,GAAI,MAAA,EAC9Bf,EAAAA,GAAIoB,EAAAA,CAAE,MAAA;AAER,EAAA,MAAMoE,EAAAA,GAAI,CAAE,CAAA,GAAI,UAAA,EAAcnE,EAAAA,GAAI,UAAA,EAAa,CAAC,CAAA,EAAG,CAACA,EAAC,CAAA,EACnD,KAAA,GAAQ,EAAC;AAEX,EAAAN,EAAAA,GAAK,EAAEf,EAAAA,GAAI,CAAA,GAAI,CAAA,GAAK,EAAA;AAEpB,EAAA,KAAA,CAAM,EAAEe,EAAC,CAAA,GAAIf,EAAAA,GAAI,CAAA;AAEjB,EAAA,OAAO,CAACA,EAAAA,IAAK;AACX,IAAA,KAAA,CAAMA,MAAK,CAAC,CAAA,IAAKoB,GAAE,UAAA,CAAWpB,EAAC,KAAM,CAAA,GAAIA,EAAAA,EAAAA;AAAA,EAC3C;AAEA,EAAA,KAAK,IAAIoB,EAAAA,GAAI,CAAA,EAAG,CAAA,GAAIL,EAAAA,EAAG,KAAK,EAAA,EAAI;AAC9B,IAAAf,EAAAA,GAAIwF,EAAAA;AAEJ,IAAA,OAEEpE,EAAAA,GAAI,IACJpB,EAAAA,GAAI;AAAA,MACDc,EAAAA,GAAId,GAAE,CAAC,CAAA;AAAA,MACR,CAAA,IAAA,CACKc,EAAAA,GACDd,EAAAA,CAAE,CAAC,IACH,CAAE,CAAA,GAAIqB,EAAAA,GAAM,CAAC,IAAIP,EAAAA,EAAKA,EAAAA,GAAI,CAAA,GAAM,CAACA,KAAIO,EAAAA,EAAI,CAAA,GAAIA,EAAAA,GAAIP,EAAAA,EAAGO,MAAK,CAAA,GAAI,CAACP,EAAAA,CAAE,CAAA,CAAGd,KAAIoB,EAAAA,IAAK,CAAE,CAAA,GAC9E,CAAA,CAAEA,EAAC,CAAA,GACH,CAAC,CAAC,KAAA,CAAM,IAAK,CAACA,EAAAA,EAAG,CAAA,GAAIA,EAAAA,GAAI,GAAG,CAAA,GAAIA,EAAAA,GAAI,CAAA,EAAG,CAAA,GAAIA,EAAC,CAAA,CAAEpB,EAAC,CAAA,GAAI,EAAG,OACrDA,EAAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,IAAI,EAAA,EAAI,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,IAAI,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,GAAG,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA,CAAE,IAAIA,EAAAA,GAAKoB,EAAAA,EAAAA,GAAM,CAAE,CAAA,CAAA,GACjFN,OAAM,CAACd,EAAAA,CAAAA;AAAA,MACZ,CAAA;AAAA,MACAqB;AAAA,KACF,EACA;AACA,MAAA,CAAA,GAAIrB,EAAAA,CAAE,CAAC,CAAA,GAAI,CAAA;AACX,MAAAqB,EAAAA,GAAIrB,GAAE,CAAC,CAAA;AAAA,IACT;AACA,IAAA,KAAKoB,EAAAA,GAAI,GAAGA,EAAAA,IAAKoE,GAAE,EAAEpE,EAAC,CAAA,IAAKpB,EAAAA,CAAEoB,EAAC,CAAA;AAAA,EAChC;AAEA,EAAA,KAAKL,EAAAA,GAAI,EAAA,EAAIK,EAAAA,GAAI,EAAA,IAAM;AACrB,IAAAL,EAAAA,IAAAA,CAAOyE,EAAAA,CAAEpE,EAAAA,IAAK,CAAC,CAAA,IAAA,CAAO,IAAIA,EAAAA,EAAAA,IAAO,CAAA,GAAM,EAAA,EAAI,QAAA,CAAS,EAAE,CAAA;AAAA,EACxD;AAEA,EAAA,OAAOL,EAAAA;AACT,CAAA;AACA,IAAO,YAAA,GAAQ,GAAA;;;ACzDf,IAAM,QAAA,GAAW;AAAA,EACf,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,IAAA,GAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW,WAAA,EAAa,MAAA,EAAO;AAEnF,IAAM,KAAA,GAAQ,SAAUf,EAAAA,EAAG,CAAA,EAAG;AAC5B,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAGA,IAAG,CAAC,CAAA;AAC/B,CAAA;AAEA,IAAMkD,IAAAA,GAAM;AAAA,EACV,IAAA,EAAM,WAAS,aAAA,CAAc,KAAA,EAAO,EAAE,SAAA,EAAW,IAAA,IAAQ,KAAK,CAAA;AAAA,EAC9D,MAAA,EAAQ,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,YAAA,CAAK,MAAA,EAAQ,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA,EAAG,KAAK,CAAA;AAAA,EACpF,QAAA,EAAU,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,YAAA,CAAK,QAAA,EAAU,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA,EAAG,KAAK,CAAA;AAAA,EAExF,OAAA,EAAS,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,EAClD,IAAA,EAAM,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,KAAK,CAAA;AAAA,EAExE,IAAA,EAAM,CAAA,KAAA,KAAS,YAAA,CAAK,aAAA,CAAc,KAAA,EAAO,EAAE,SAAA,EAAW,IAAA,EAAK,EAAG,KAAK,CAAC,CAAA;AAAA,EAEpE,QAAQ,CAAA,KAAA,KAAS;AACf,IAAA,MAAM,GAAA,GAAMA,IAAAA,CAAI,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA;AAC5B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,CAAO,KAAA;AAAA,MACvB,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,CAAO,KAAA;AAAA,MACvB,MAAA,EAAQ;AAAA,KACV;AAAA,EACF,CAAA;AAAA,EACA,OAAO,CAAA,KAAA,KAAS;AACd,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAAtC,EAAAA,KAAK;AACpB,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,IAAIA,EAAC,CAAA;AAChC,MAAA,IAAA,CAAK,IAAA,GAAO,KAAA,CAAM,IAAA,CAAKA,EAAAA,CAAE,IAAI,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EACA,UAAA,EAAY,CAAC,MAAA,EAAQ,IAAA,EAAMO,OAAM,IAAA,CAAK,EAAA,CAAGA,EAAC,CAAA,CAAE,UAAA,EAAW;AAAA,EACvD,SAAA,EAAW,CAAC,MAAA,EAAQ,IAAA,EAAMA,OAAM,IAAA,CAAK,EAAA,CAAGA,EAAC,CAAA,CAAE,SAAA,EAAU;AAAA,EACrD,QAAA,EAAU,CAAC,MAAA,EAAQ,IAAA,EAAMA,EAAAA,KAAM,IAAA,CAAK,EAAA,CAAGA,EAAC,CAAA,CAAE,YAAA,EAAa,CAAE,IAAA,EAAK;AAAA,EAC9D,KAAA,EAAO,WAAS,KAAA,CAAM,IAAA,CAAK,CAAAP,EAAAA,KAAKA,EAAAA,CAAE,UAAU,IAAI;AAClD,CAAA;AACAsC,IAAAA,CAAI,YAAYA,IAAAA,CAAI,QAAA;AACpBA,IAAAA,CAAI,QAAQA,IAAAA,CAAI,MAAA;AAChBA,IAAAA,CAAI,UAAUA,IAAAA,CAAI,IAAA;AAElB,IAAM,MAAA,GAAS,SAAU,IAAA,EAAM,MAAA,EAAQ;AACrC,EAAA,MAAA,GAAS,UAAU,EAAC;AACpB,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAA,GAAS,EAAC;AAAA,EACZ;AACA,EAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,UAAU,MAAM,CAAA;AAE3C,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,IAAA,CAAK,QAAQ,QAAQ,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,OAAO/B,EAAAA,KAAM;AACjC,IAAA,MAAM,MAAM,EAAC;AACb,IAAA,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAAU,EAAAA,KAAK;AAC/B,MAAA,IAAI,MAAA,CAAOA,EAAC,CAAA,IAAKqB,IAAAA,CAAIrB,EAAC,CAAA,EAAG;AACvB,QAAA,GAAA,CAAIA,EAAC,CAAA,GAAIqB,IAAAA,CAAIrB,EAAC,CAAA,CAAE,KAAA,EAAO,MAAMV,EAAC,CAAA;AAAA,MAChC;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAA;AAEA,IAAMa,SAAAA,GAAU;AAAA;AAAA,EAEd,IAAA,EAAM,SAAUN,EAAAA,EAAG;AACjB,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,EAAMA,EAAC,CAAA;AAC1B,IAAA,IAAI,OAAOA,OAAM,QAAA,EAAU;AACzB,MAAA,OAAO,IAAIA,EAAC,CAAA;AAAA,IACd;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;AACAM,SAAAA,CAAQ,OAAOA,SAAAA,CAAQ,IAAA;AACvB,IAAO,YAAA,GAAQA,SAAAA;;;ACjFf,IAAM,YAAA,GAAe,MAAM,OAAO,MAAA,KAAW,eAAe,MAAA,CAAO,QAAA;AAGnE,IAAMyD,MAAAA,GAAQ,SAAUC,IAAAA,EAAK;AAC3B,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,SAAS,EAAC;AAEhD,EAAA,IAAIA,IAAAA,IAAO,YAAA,CAAa,cAAA,CAAeA,IAAG,CAAA,EAAG;AAC3C,IAAA,YAAA,CAAaA,IAAG,EAAE,IAAI,CAAA;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,cAAa,EAAG;AAClB,IAAA,YAAA,CAAa,WAAW,IAAI,CAAA;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,YAAA,CAAa,KAAK,IAAI,CAAA;AACtB,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAOC,cAAAA,GAAQF,MAAAA;;;ACnBf,IAAM,MAAA,GAAS,SAAU,IAAA,EAAM;AAC7B,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,IAAO,EAAA;AACxB,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,EAAA;AAC1B,EAAA,OAAO,GAAA,GAAM,KAAK,IAAA,GAAO,IAAA;AAC3B,CAAA;AAEA,IAAM,UAAA,GAAa,SAAU,GAAA,EAAK,GAAA,EAAK;AACrC,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC9B,IAAA,MAAM7D,EAAAA,GAAI,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AACvB,IAAAA,EAAAA,CAAE,WAAA,CAAY,OAAA,CAAQ,CAAA5B,EAAAA,KAAK;AACzB,MAAA,MAAA,CAAOA,EAAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAE,EAAA,EAAI,GAAA,CAAI,GAAG,CAAA,EAAG,GAAA,EAAKA,EAAAA,CAAE,CAAC,CAAA,EAAE;AAAA,IAC3C,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT,CAAA;AAEA,IAAM,IAAA,GAAO,SAAU,GAAA,EAAK,GAAA,EAAK;AAE/B,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA;AAClC,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,CAAC,KAAA,EAAO0B,EAAAA,KAAM;AAC7B,IAAA,KAAA,IAASP,KAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACxC,MAAA,MAAMP,EAAAA,GAAI,MAAMO,EAAC,CAAA;AAEjB,MAAA,IAAI,MAAA,CAAO,cAAA,CAAeP,EAAAA,CAAE,EAAE,CAAA,EAAG;AAC/B,QAAA,MAAM,EAAE,EAAA,EAAI,GAAA,EAAAsB,MAAI,GAAI,MAAA,CAAOtB,GAAE,EAAE,CAAA;AAC/B,QAAA,MAAMgB,EAAAA,GAAI,IAAI,MAAA,CAAO,CAAC,CAACF,EAAAA,EAAGP,EAAAA,EAAGe,IAAG,CAAC,CAAC,CAAA;AAClC,QAAA,IAAA,IAAQ,KAAA,CAAMf,EAAC,CAAA,CAAE,GAAA,IAAO,EAAA;AACxB,QAAA,IAAA,IAAQ,GAAGS,EAAC,CAAA;AACZ,QAAAT,KAAIe,IAAAA,GAAM,CAAA;AACV,QAAA,IAAA,IAAQ,KAAA,CAAMf,EAAC,CAAA,CAAE,IAAA,IAAQ,EAAA;AAAA,MAC3B,CAAA,MAAO;AACL,QAAA,IAAA,IAAQ,OAAOP,EAAC,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,YAAA,GAAQ,IAAA;;;ACnCf,IAAM+B,YAAW,CAAA,GAAA,KAAO;AACtB,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,iBAAA;AACjD,CAAA;AAGA,IAAM,IAAA,GAAO,SAAU,GAAA,EAAK;AAC1B,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,GAAA,CAAI,OAAA,CAAQ,CAAA3C,EAAAA,KAAK;AACf,IAAA,GAAA,CAAIA,EAAC,CAAA,GAAI,GAAA,CAAIA,EAAC,CAAA,IAAK,CAAA;AACnB,IAAA,GAAA,CAAIA,EAAC,CAAA,IAAK,CAAA;AAAA,EACZ,CAAC,CAAA;AACD,EAAA,MAAM,MAAM,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA6B,EAAAA,KAAK;AACpC,IAAA,OAAO,EAAE,MAAA,EAAQA,EAAAA,EAAG,KAAA,EAAO,GAAA,CAAIA,EAAC,CAAA,EAAE;AAAA,EACpC,CAAC,CAAA;AACD,EAAA,OAAO,GAAA,CAAI,IAAA,CAAK,CAAC7B,EAAAA,EAAG,CAAA,KAAOA,GAAE,KAAA,GAAQ,CAAA,CAAE,KAAA,GAAQ,EAAA,GAAK,CAAE,CAAA;AACxD,CAAA;AAGA,IAAM,GAAA,GAAM,SAAU,MAAA,EAAQ;AAE5B,EAAA,IAAI2C,SAAAA,CAAS,MAAM,CAAA,EAAG;AACpB,IAAA,OAAO,YAAA,CAAK,MAAM,MAAM,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AACA,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,OAAO,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,OAAO,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,EACzB;AACA,EAAA,IAAI,MAAA,KAAW,SAAA,IAAa,MAAA,KAAW,SAAA,EAAW;AAChD,IAAA,OAAO,IAAA,CAAK,KAAK,SAAS,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,MAAA,KAAW,MAAA,IAAU,MAAA,KAAW,KAAA,EAAO;AACzC,IAAA,OAAO,YAAA,CAAK,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,EACzB;AAGA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AACA,EAAA,IAAI,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,SAAA,EAAW;AAC/C,IAAA,IAAA,CAAK,QAAQ,QAAQ,CAAA;AACrB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,KAAA,KAAS;AACjC,MAAA,OAAO,KAAA,CACJ,MAAA,CAAO,CAAC,GAAA,EAAK/B,EAAAA,KAAM;AAClB,QAAA,OAAO,GAAA,GAAMA,EAAAA,CAAE,GAAA,GAAMA,EAAAA,CAAE,OAAOA,EAAAA,CAAE,IAAA;AAAA,MAClC,CAAA,EAAG,EAAE,CAAA,CACJ,IAAA,EAAK;AAAA,IACV,CAAC,CAAA;AACD,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,CAAA,GAAA,KAAO,GAAG,CAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,MAAA,KAAW,MAAA,IAAU,MAAA,KAAW,WAAA,IAAe,WAAW,MAAA,EAAQ;AACpE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA,CAAE,GAAA,CAAI,CAAAgC,EAAAA,KAAKA,EAAAA,CAAE,MAAM,CAAC,CAAA;AAAA,EAC5D;AAGA,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,IAAIwB,QAAO,EAAC;AACZ,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACzB,MAAA,IAAI,QAAQ,KAAA,CAAM,GAAA,CAAI,CAAAxD,EAAAA,KAAKA,GAAE,IAAI,CAAA;AACjC,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAAA,EAAAA,KAAKA,EAAC,CAAA;AAC3B,MAAAwD,KAAAA,GAAOA,KAAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,IAC1B,CAAC,CAAA;AACD,IAAA,OAAOA,KAAAA;AAAA,EACT;AACA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,KAAA,KAAS;AAC5B,MAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAACoB,EAAAA,EAAG5E,EAAAA,KAAM;AAC5B,QAAA4E,EAAAA,CAAE5E,GAAE,QAAA,IAAYA,EAAAA,CAAE,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,CAAKA,EAAAA,CAAE,IAAI,CAAA;AAC7C,QAAA,OAAO4E,EAAAA;AAAA,MACT,CAAA,EAAG,EAAE,CAAA;AAAA,IACP,CAAC,CAAA;AAAA,EACH;AACA,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,OAAO,KAAK,KAAA,EAAM;AAAA,EACpB;AACA,EAAA,OAAO,KAAK,IAAA,EAAK;AACnB,CAAA;AAEA,IAAMxD,SAAAA,GAAU;AAAA;AAAA,EAEd,KAAA,EAAO2D,cAAAA;AAAA;AAAA,EAEP,GAAA;AAAA;AAAA,EAEA,IAAA,EAAM,SAAU,GAAA,EAAK;AACnB,IAAA,OAAO,YAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB;AACF,CAAA;AAEA,IAAO,WAAA,GAAQ3D,SAAAA;;;ACnGf,IAAMW,YAAW,CAAA,GAAA,KAAO;AACtB,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,iBAAA;AACjD,CAAA;AAEA,IAAO,YAAA,GAAQ;AAAA;AAAA,EAEb,IAAA,EAAM,SAAU+C,IAAAA,EAAK;AACnB,IAAA,IAAId,QAAO,EAAC;AACZ,IAAA,IAAIc,QAAO,OAAOA,IAAAA,KAAQ,YAAY,YAAA,CAAK,cAAA,CAAeA,IAAG,CAAA,EAAG;AAC9D,MAAAd,QAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,YAAA,CAAKc,IAAG,CAAC,CAAA;AAAA,IACpC,CAAA,MAAA,IAAWA,IAAAA,IAAO/C,SAAAA,CAAS+C,IAAG,CAAA,EAAG;AAC/B,MAAAd,KAAAA,GAAO,MAAA,CAAO,MAAA,CAAO,IAAIc,IAAG,CAAA;AAAA,IAC9B;AAEA,IAAA,IAAId,MAAK,SAAA,KAAc,MAAA,IAAa,CAAC,IAAA,CAAK,QAAO,EAAG;AAElD,MAAAA,MAAK,SAAA,GAAY,KAAA;AAAA,IACnB;AACA,IAAA,IAAIA,KAAAA,CAAK,YAAA,KAAiB,MAAA,IAAa,IAAA,CAAK,OAAA,EAAS;AACnD,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA;AAC1B,MAAA,IAAI,GAAA,IAAO,GAAA,CAAI,CAAC,CAAA,EAAG;AACjB,QAAAA,MAAK,YAAA,GAAe,KAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAAA,MAAK,YAAA,GAAe,IAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,IAAIA,KAAAA,CAAK,cAAc,MAAA,EAAW;AAChC,MAAAA,MAAK,SAAA,GAAY,IAAA;AAAA,IACnB;AACA,IAAA,IAAIA,KAAAA,CAAK,cAAc,MAAA,EAAW;AAChC,MAAAA,MAAK,SAAA,GAAY,IAAA;AAAA,IACnB;AACA,IAAA,OAAO,WAAA,CAAY,IAAA,CAAK,IAAA,EAAMA,KAAI,CAAA;AAAA,EACpC;AACF,CAAA;;;ACjCA,IAAM5C,SAAAA,GAAU,OAAO,MAAA,CAAO,IAAI,WAAA,EAAK,YAAA,EAAM,cAAM,YAAI,CAAA;AAEvD,IAAM8B,OAAAA,GAAS,SAAUxB,KAAAA,EAAM;AAC7B,EAAA,MAAA,CAAO,MAAA,CAAOA,KAAAA,CAAK,SAAA,EAAWN,SAAO,CAAA;AACvC,CAAA;AACA,IAAO+B,YAAAA,GAAQD,OAAAA;;;ACTf,IAAM,aAAA,GAAgB,SAAU,IAAA,EAAM;AACpC,EAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,2BAA2B,CAAA;AACpD,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAAlC,EAAAA,KAAK;AAChB,IAAA,OAAA,CAAQ,cAAA,CAAeA,EAAAA,CAAE,IAAA,EAAM,CAAA;AAC/B,IAAA,MAAM,KAAA,GAAQA,EAAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AACtB,IAAA,MAAMJ,IAAAA,GAAM,KAAA,CAAM,GAAA,CAAI,CAAAZ,EAAAA,KAAK;AACzB,MAAA,IAAI,IAAA,GAAOA,GAAE,IAAA,IAAQ,GAAA;AACrB,MAAA,IAAIA,GAAE,QAAA,EAAU;AACd,QAAA,IAAA,GAAO,GAAA,GAAMA,GAAE,QAAA,GAAW,GAAA;AAAA,MAC5B;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,IAAA,CAAKA,GAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,GAAA;AACnD,MAAA,OAAO,EAAE,MAAM,IAAA,EAAK;AAAA,IACtB,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,KAAA,CAAMY,IAAAA,EAAK,CAAC,MAAA,EAAQ,MAAM,CAAC,CAAA;AACnC,IAAA,OAAA,CAAQ,QAAA,EAAS;AAAA,EACnB,CAAC,CAAA;AACH,CAAA;AACA,IAAO,mBAAA,GAAQ,aAAA;;;ACjBf,IAAM,KAAA,GAAQ,SAAA;AAGd,IAAM,GAAA,GAAM;AAAA,EACV,KAAA,EAAO,CAAA,GAAA,KAAO,UAAA,GAAa,GAAA,GAAM,KAAA;AAAA,EACjC,GAAA,EAAK,CAAA,GAAA,KAAO,UAAA,GAAa,GAAA,GAAM,KAAA;AAAA,EAC/B,IAAA,EAAM,CAAA,GAAA,KAAO,UAAA,GAAa,GAAA,GAAM,KAAA;AAAA,EAChC,OAAA,EAAS,CAAA,GAAA,KAAO,UAAA,GAAa,GAAA,GAAM,KAAA;AAAA,EACnC,IAAA,EAAM,CAAA,GAAA,KAAO,UAAA,GAAa,GAAA,GAAM,KAAA;AAAA,EAChC,MAAA,EAAQ,CAAA,GAAA,KAAO,UAAA,GAAa,GAAA,GAAM,KAAA;AAAA,EAClC,KAAA,EAAO,CAAA,GAAA,KAAO,UAAA,GAAa,GAAA,GAAM,KAAA;AAAA,EACjC,GAAA,EAAK,CAAA,GAAA,KAAO,SAAA,GAAY,GAAA,GAAM,KAAA;AAAA,EAC9B,CAAA,EAAG,CAAA,GAAA,KAAO,SAAA,GAAY,GAAA,GAAM;AAC9B,CAAA;AACA,IAAO,aAAA,GAAQ,GAAA;;;ACZf,IAAM,SAAA,GAAY,SAAU,IAAA,EAAMY,MAAAA,EAAO;AACvC,EAAA,IAAIA,MAAAA,CAAM,IAAI,MAAA,EAAQ;AACpB,IAAA,IAAA,GAAO,IAAA,CAAK,IAAI,CAAA,GAAA,KAAO;AACrB,MAAA,IAAI,CAACA,MAAAA,CAAM,GAAA,CAAI,MAAA,CAAO,cAAA,CAAe,GAAG,CAAA,EAAG;AACzC,QAAA,OAAO,GAAA;AAAA,MACT;AACA,MAAA,MAAMf,KAAIe,MAAAA,CAAM,GAAA,CAAI,MAAA,CAAO,GAAG,EAAE,KAAA,IAAS,MAAA;AACzC,MAAA,OAAO,aAAA,CAAIf,EAAC,CAAA,CAAE,GAAG,CAAA;AAAA,IACnB,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,IAAA,CAAK,KAAK,IAAI,CAAA;AACvB,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM;AAC/B,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAAe,MAAAA,EAAM,GAAI,IAAA;AACxB,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAI,IAAA,CAAK,6CAAe,CAAC,CAAA;AAAA,EACvC;AACA,EAAA,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACpB,IAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAI,IAAA,CAAK,kEAAgB,CAAC,CAAA;AACtC,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAAxB,EAAAA,KAAK;AACjB,MAAA,MAAM,OAAO,CAAC,GAAIA,EAAAA,CAAE,IAAA,IAAQ,EAAG,CAAA;AAC/B,MAAA,IAAI,IAAA,GAAOA,GAAE,IAAA,IAAQ,GAAA;AACrB,MAAA,IAAIA,GAAE,KAAA,EAAO;AACX,QAAA,IAAA,GAAO,CAAA,CAAA,EAAIA,EAAAA,CAAE,MAAM,CAAA,CAAA,EAAIA,GAAE,KAAK,CAAA,CAAA,CAAA;AAAA,MAChC;AACA,MAAA,IAAIA,GAAE,QAAA,EAAU;AACd,QAAA,IAAA,GAAO,GAAA,GAAMA,GAAE,QAAA,GAAW,GAAA;AAAA,MAC5B;AACA,MAAA,IAAA,GAAO,aAAA,CAAI,OAAO,IAAI,CAAA;AACtB,MAAA,IAAI,IAAA,GAAO,MAAM,IAAA,GAAO,GAAA;AACxB,MAAA,IAAIA,GAAE,SAAA,EAAW;AACf,QAAA,MAAMgF,IAAAA,GAAM,KAAK,MAAA,CAAO,CAAChF,GAAE,SAAS,CAAC,CAAA,CAAE,IAAA,CAAK,QAAQ,CAAA;AACpD,QAAA,IAAA,IAAQ,CAAA,GAAA,EAAM,cAAI,GAAA,CAAI,aAAA,CAAI,EAAE,GAAA,GAAMgF,IAAAA,GAAM,GAAG,CAAC,CAAC,CAAA,CAAA;AAAA,MAC/C;AACA,MAAA,IAAA,GAAO,IAAA,CAAK,OAAO,EAAE,CAAA;AACrB,MAAA,MAAM,GAAA,GAAM,aAAA,CAAI,IAAA,CAAK,WAAM,CAAA,GAAI,aAAA,CAAI,CAAA,CAAE,IAAI,CAAA,GAAI,MAAA,GAAS,SAAA,CAAU,IAAA,EAAMxD,MAAK,CAAA;AAC3E,MAAA,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,IACjB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAClB,CAAA;AACA,IAAO,YAAA,GAAQ,QAAA;;;AC1Cf,IAAM,UAAA,GAAa,SAAU,IAAA,EAAM;AACjC,EAAA,MAAM,EAAE,MAAK,GAAI,IAAA;AACjB,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS;AACpB,IAAA,MAAMZ,OAAM,EAAC;AACb,IAAA,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AACpB,MAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAQ;AACzB,QAAAA,IAAAA,CAAI,KAAK,aAAA,CAAI,IAAA,CAAK,KAAK,QAAA,IAAY,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,MACjD,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,KAAU,MAAA,EAAQ;AAChC,QAAAA,IAAAA,CAAI,KAAK,aAAA,CAAI,KAAA,CAAM,KAAK,QAAA,IAAY,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,MAClD,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,KAAU,WAAA,EAAa;AACrC,QAAAA,IAAAA,CAAI,KAAK,aAAA,CAAI,MAAA,CAAO,KAAK,QAAA,IAAY,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,MACnD,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,KAAU,OAAA,EAAS;AACjC,QAAAA,IAAAA,CAAI,KAAK,aAAA,CAAI,GAAA,CAAI,KAAK,QAAA,IAAY,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,MAChD,CAAA,MAAO;AACL,QAAAA,IAAAA,CAAI,IAAA,CAAK,IAAA,CAAK,QAAA,IAAY,KAAK,MAAM,CAAA;AAAA,MACvC;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,GAAA,CAAIA,IAAAA,CAAI,IAAA,CAAK,GAAG,GAAG,IAAI,CAAA;AAAA,EACjC,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAClB,CAAA;AACA,IAAO,cAAA,GAAQ,UAAA;;;ACtBf,IAAM,KAAA,GAAQ,CAAC,GAAA,EAAKX,OAAAA,EAAQd,MAAAA,KAAU;AACpC,EAAA,MAAM,OAAOA,MAAAA,GAAQ,CAAA;AACrB,EAAA,MAAMkC,MAAAA,GAAQpB,QAAO,KAAA,GAAQ,IAAA;AAC7B,EAAA,MAAMqB,IAAAA,GAAMD,SAAQpB,OAAAA,CAAO,MAAA;AAC3B,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,SAAA,CAAU,CAAA,EAAGoB,MAAK,CAAA;AAClC,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,SAAA,CAAUA,MAAAA,EAAOC,IAAG,CAAA;AACpC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,SAAA,CAAUA,IAAAA,EAAK,IAAI,MAAM,CAAA;AAC1C,EAAA,OAAO,CAAC,GAAA,EAAK,GAAA,EAAK,IAAI,CAAA;AACxB,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,GAAA,EAAKrB,OAAAA,EAAQd,MAAAA,EAAO;AAC7C,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,EAAKc,OAAAA,EAAQd,MAAK,CAAA;AACtC,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,GAAG,aAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACpD,CAAA;AAEA,IAAM,aAAA,GAAgB,SAAU,GAAA,EAAK;AACnC,EAAA,IAAI,CAAC,IAAI,KAAA,EAAO;AACd,IAAA;AAAA,EACF;AACA,EAAA,MAAM,aAAa,EAAC;AACpB,EAAA,GAAA,CAAI,WAAA,CAAY,QAAQ,CAAA,GAAA,KAAO;AAC7B,IAAA,UAAA,CAAW,GAAA,CAAI,CAAC,CAAC,CAAA,GAAI,WAAW,GAAA,CAAI,CAAC,CAAC,CAAA,IAAK,EAAC;AAC5C,IAAA,UAAA,CAAW,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EAC7B,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAA8B,EAAAA,KAAK;AACnC,IAAA,MAAM,IAAA,GAAO,IAAI,MAAA,CAAO,CAAC,CAAC,MAAA,CAAOA,EAAC,CAAC,CAAC,CAAC,CAAA;AACrC,IAAA,IAAI,GAAA,GAAM,KAAK,IAAA,EAAK;AACpB,IAAA,MAAMgE,QAAAA,GAAU,GAAA,CAAI,MAAA,CAAO,UAAA,CAAWhE,EAAC,CAAC,CAAA;AACxC,IAAA,MAAM,OAAOgE,QAAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAM,CAAA;AAC1C,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK1E,EAAAA,KAAM;AACvB,MAAA,GAAA,GAAM,QAAA,CAAS,GAAA,EAAK,GAAA,CAAI,MAAA,EAAQA,EAAC,CAAA;AAAA,IACnC,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,EACjB,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAClB,CAAA;AACA,IAAO,iBAAA,GAAQ,aAAA;;;AClCf,IAAMsE,MAAAA,GAAQ;AAAA,EACZ,IAAA,EAAA,YAAA;AAAA,EACA,UAAA,EAAA,mBAAA;AAAA,EACA,MAAA,EAAA,cAAA;AAAA,EACA,SAAA,EAAA;AACF,CAAA;AACA,IAAOE,cAAAA,GAAQF,MAAAA;;;ACRf,IAAOzB,eAAAA,GAAQ;AAAA,EACb,GAAA,EAAAD,YAAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK;AAAA,MACH,IAAA,EAAA,YAAA;AAAA,MACA,KAAA,EAAA4B;AAAA;AACF;AAEJ,CAAA;;;ACVO,IAAM,WAAA,GAAc,SAAU3F,EAAAA,EAAG,CAAA,EAAG;AACzC,EAAA,IAAIA,EAAAA,CAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,EAAG;AACjB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAG,MAAA,EAAQ,IAAI,CAAA,GAAIA,EAAAA;AACzB,EAAA,MAAM,GAAG,MAAA,EAAQ,IAAI,CAAA,GAAI,CAAA;AAGzB,EAAA,IAAI,MAAA,IAAU,MAAA,IAAU,IAAA,GAAO,MAAA,EAAQ;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,MAAA,IAAU,MAAA,IAAU,IAAA,GAAO,MAAA,EAAQ;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAGO,IAAM,SAAA,GAAY,SAAU,IAAA,EAAM;AACvC,EAAA,IAAI8B,IAAAA,GAAM,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA;AACnB,EAAA,IAAIC,IAAAA,GAAM,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA;AACnB,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,GAAID,IAAAA,EAAK;AAChB,MAAAA,IAAAA,GAAM,IAAI,CAAC,CAAA;AAAA,IACb;AACA,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,GAAIC,IAAAA,EAAK;AAChB,MAAAA,IAAAA,GAAM,IAAI,CAAC,CAAA;AAAA,IACb;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,CAAC,IAAA,CAAK,CAAC,EAAE,CAAC,CAAA,EAAGD,MAAKC,IAAG,CAAA;AAC9B,CAAA;AAGO,IAAM,MAAA,GAAS,SAAU,IAAA,EAAM;AACpC,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,GAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,GAAI,IAAI,GAAA,CAAI,CAAC,CAAC,CAAA,IAAK,EAAC;AAC9B,IAAA,GAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EACtB,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT,CAAA;AAGO,IAAM,UAAA,GAAa,SAAU,GAAA,EAAK;AACvC,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,KAAA,IAASZ,KAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,CAAI,MAAA,EAAQA,MAAK,CAAA,EAAG;AACtC,IAAA,GAAA,CAAI,GAAA,CAAIA,EAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,GAAI,IAAIA,EAAC,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,MAAA,CAAO,OAAO,GAAG,CAAA;AAC1B,CAAA;;;ACjDA,IAAM,OAAA,GAAU,SAAU,IAAA,EAAMS,EAAAA,EAAG;AACjC,EAAA,MAAM,CAACF,EAAAA,EAAGO,MAAK,CAAA,GAAI,IAAA;AACnB,EAAA,MAAM,MAAA,GAASL,GAAE,CAAC,CAAA;AAClB,EAAA,MAAM,IAAA,GAAOA,GAAE,CAAC,CAAA;AAChB,EAAA,MAAM,MAAM,EAAC;AAEb,EAAA,IAAIK,SAAQ,MAAA,EAAQ;AAClB,IAAA,MAAMC,OAAM,MAAA,GAAS,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA,GAAS,KAAK,CAAC,CAAA;AAC9C,IAAA,GAAA,CAAI,MAAA,GAAS,CAACR,EAAAA,EAAGO,MAAAA,EAAOC,IAAG,CAAA;AAAA,EAC7B;AACA,EAAA,GAAA,CAAI,KAAA,GAAQN,EAAAA;AAEZ,EAAA,IAAI,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,EAAM;AAClB,IAAA,GAAA,CAAI,QAAQ,CAACF,EAAAA,EAAG,IAAA,EAAM,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAMoE,UAAAA,GAAY,SAAU,IAAA,EAAMlE,EAAAA,EAAG;AACnC,EAAA,OAAO,IAAA,CAAK,CAAC,CAAA,IAAKA,EAAAA,CAAE,CAAC,KAAKA,EAAAA,CAAE,CAAC,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA;AAC1C,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAMA,EAAAA,EAAG;AAClC,EAAA,MAAM,GAAA,GAAM,OAAOA,EAAC,CAAA;AACpB,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,MAAM,CAACF,EAAC,CAAA,GAAI,GAAA;AACZ,IAAA,IAAImE,QAAAA,GAAU,GAAA,CAAInE,EAAC,CAAA,IAAK,EAAC;AACzB,IAAAmE,QAAAA,GAAUA,SAAQ,MAAA,CAAO,CAAArD,OAAKsD,UAAAA,CAAU,GAAA,EAAKtD,EAAC,CAAC,CAAA;AAC/C,IAAA,IAAIqD,QAAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,WAAA,EAAa,GAAA,EAAK,CAAA;AAC7B,MAAA;AAAA,IACF;AAEA,IAAAA,QAAAA,GAAUA,QAAAA,CAAQ,IAAA,CAAK,CAAC7F,EAAAA,EAAG,CAAA,KAAMA,EAAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAE5C,IAAA,IAAI,KAAA,GAAQ,GAAA;AACZ,IAAA6F,QAAAA,CAAQ,OAAA,CAAQ,CAACrD,EAAAA,EAAGrB,EAAAA,KAAM;AACxB,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,EAAOqB,EAAC,CAAA;AAE9B,MAAA,IAAI,CAACqD,QAAAA,CAAQ1E,EAAAA,GAAI,CAAC,CAAA,EAAG;AACnB,QAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,GAAA,CAAI,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,CAAM,QAAQ,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AACrD,QAAA,IAAI,MAAM,KAAA,EAAO;AACf,UAAA,KAAA,GAAQ,KAAA,CAAM,KAAA;AAAA,QAChB;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAO4E,cAAAA,GAAQ,QAAA;;;ACxDf,IAAM,GAAA,GAAM,EAAA;AAGZ,IAAM,UAAA,GAAa,SAAU,EAAA,EAAI,GAAA,EAAKrE,EAAAA,EAAG;AACvC,EAAA,KAAA,IAASP,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,EAAKA,MAAK,CAAA,EAAG;AAE/B,IAAA,IAAI,GAAA,CAAIO,EAAAA,GAAIP,EAAC,CAAA,EAAG;AACd,MAAA,MAAMpB,MAAAA,GAAQ,IAAI2B,EAAAA,GAAIP,EAAC,EAAE,SAAA,CAAU,CAAA,IAAA,KAAQ,IAAA,CAAK,EAAA,KAAO,EAAE,CAAA;AACzD,MAAA,IAAIpB,WAAU,EAAA,EAAI;AAChB,QAAA,OAAO,CAAC2B,EAAAA,GAAIP,EAAAA,EAAGpB,MAAK,CAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI2B,EAAAA,GAAIP,EAAC,CAAA,EAAG;AACd,MAAA,MAAMpB,MAAAA,GAAQ,IAAI2B,EAAAA,GAAIP,EAAC,EAAE,SAAA,CAAU,CAAA,IAAA,KAAQ,IAAA,CAAK,EAAA,KAAO,EAAE,CAAA;AACzD,MAAA,IAAIpB,WAAU,EAAA,EAAI;AAChB,QAAA,OAAO,CAAC2B,EAAAA,GAAIP,EAAAA,EAAGpB,MAAK,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,YAAA,GAAe,SAAU,GAAA,EAAK,QAAA,EAAU;AAC5C,EAAA,MAAM,CAAC2B,EAAAA,EAAGO,MAAAA,MAAW,KAAK,CAAA,GAAI,GAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,SAASP,EAAC,CAAA;AAExB,EAAA,MAAM,SAAS,KAAA,CAAM,SAAA,CAAU,CAAAd,EAAAA,KAAKA,EAAAA,CAAE,OAAO,KAAK,CAAA;AAClD,EAAA,IAAI,WAAW,EAAA,EAAI;AAEjB,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,QAAA,CAASc,EAAC,CAAA,CAAE,MAAA;AACrB,IAAA,GAAA,CAAI,CAAC,IAAI,KAAA,CAAM,MAAA,GAAS,MAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAE,EAAA,GAAK,IAAA;AAAA,EACvD,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA;AAAA,EACX;AACA,EAAA,OAAO,QAAA,CAASA,EAAC,CAAA,CAAE,KAAA,CAAMO,QAAO,GAAA,CAAI,CAAC,IAAI,CAAC,CAAA;AAC5C,CAAA;AAGA,IAAM+D,OAAAA,GAAS,SAAU,IAAA,EAAM,QAAA,EAAU;AACvC,EAAA,IAAI,MAAM,EAAC;AACX,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK7E,EAAAA,KAAM;AACvB,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAACO,EAAAA,EAAGO,MAAAA,EAAOC,IAAAA,EAAK,EAAA,EAAI,KAAK,CAAA,GAAI,GAAA;AACjC,IAAA,IAAI,KAAA,GAAQ,QAAA,CAASR,EAAC,CAAA,IAAK,EAAC;AAC5B,IAAA,IAAIO,WAAU,MAAA,EAAW;AACvB,MAAAA,MAAAA,GAAQ,CAAA;AAAA,IACV;AACA,IAAA,IAAIC,SAAQ,MAAA,EAAW;AACrB,MAAAA,OAAM,KAAA,CAAM,MAAA;AAAA,IACd;AACA,IAAA,IAAI,EAAA,KAAO,CAAC,KAAA,CAAMD,MAAK,KAAK,KAAA,CAAMA,MAAK,CAAA,CAAE,EAAA,KAAO,EAAA,CAAA,EAAK;AAEnD,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAA,EAAI,QAAA,EAAUP,EAAC,CAAA;AACvC,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,MAAM,MAAMQ,IAAAA,GAAMD,MAAAA;AAClB,QAAA,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,CAAC,CAAC,CAAA,CAAE,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,GAAI,GAAG,CAAA;AAEtD,QAAA,MAAM,UAAU,KAAA,CAAM,CAAC,IAAI,KAAA,CAAM,CAAC,EAAE,EAAA,GAAK,IAAA;AACzC,QAAA,IAAA,CAAKd,EAAC,CAAA,GAAI,CAAC,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,GAAI,KAAK,OAAO,CAAA;AAAA,MACrD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAMc,MAAAA,EAAOC,IAAG,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA;AAAA,IACF;AACA,IAAA,IAAID,WAAUC,IAAAA,EAAK;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA,CAAE,OAAO,KAAA,EAAO;AACjD,MAAA,KAAA,GAAQ,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,IACpC;AAEA,IAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAA,GAAA,GAAM,IAAI,MAAA,CAAO,CAAAlC,EAAAA,KAAKA,EAAAA,CAAE,SAAS,CAAC,CAAA;AAClC,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,cAAA,GAAQgG,OAAAA;;;AC9Ef,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM;AAC/B,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,KAAA,IAAS7E,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,IAAA,KAAA,IAASP,EAAAA,GAAI,GAAGA,EAAAA,GAAI,IAAA,CAAKO,EAAC,CAAA,CAAE,MAAA,EAAQP,MAAK,CAAA,EAAG;AAC1C,MAAA,GAAA,CAAI,IAAA,CAAK,IAAA,CAAKO,EAAC,CAAA,CAAEP,EAAC,CAAC,CAAA;AAAA,IACrB;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAOkC,gBAAAA,GAAQ;AAAA,EACb,GAAA,EAAK;AAAA,IACH,QAAA;AAAA,IACA,MAAA,EAAA,cAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAA;AAAA,MACA,QAAA,EAAAiD;AAAA;AACF;AAEJ,CAAA;;;ACrBA,IAAM,QAAA,GAAW,SAAU/F,EAAAA,EAAG,CAAA,EAAG;AAC/B,EAAA,MAAM,IAAA,GAAOA,EAAAA,CAAE,MAAA,CAAO,CAAC,CAAA;AACvB,EAAA,MAAM,GAAA,GAAM,OAAO,IAAI,CAAA;AACvB,EAAA,IAAI,MAAM,EAAC;AACX,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,MAAM,CAAC0B,EAAC,CAAA,GAAI,GAAA;AACZ,IAAA,IAAI,GAAA,CAAIA,EAAC,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AAEvB,MAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,GAAA,CAAIA,EAAC,CAAA,CAAE,MAAA,CAAO,CAAAE,EAAAA,KAAK,WAAA,CAAY,GAAA,EAAKA,EAAC,CAAC,CAAA;AAClD,IAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AACZ,IAAA,MAAM,KAAA,GAAQ,UAAU,GAAG,CAAA;AAC3B,IAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAA,GAAA,GAAM,WAAW,GAAG,CAAA;AACpB,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,aAAA,GAAQ,QAAA;;;ACrBf,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM,GAAA,EAAK;AACpC,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,MAAM,KAAA,GAAQmE,cAAAA,CAAS,IAAA,EAAM,GAAG,CAAA;AAChC,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAAnD,EAAAA,KAAK;AACjB,IAAA,IAAIA,GAAE,WAAA,EAAa;AACjB,MAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,WAAW,CAAA;AAAA,IACxB;AACA,IAAA,IAAIA,GAAE,MAAA,EAAQ;AACZ,MAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,MAAM,CAAA;AAAA,IACnB;AACA,IAAA,IAAIA,GAAE,KAAA,EAAO;AACX,MAAA,GAAA,CAAI,IAAA,CAAKA,GAAE,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,kBAAA,GAAQ,QAAA;;;ACbf,IAAM,YAAA,GAAe,SAAU5C,EAAAA,EAAG,CAAA,EAAG;AAEnC,EAAA,MAAMiC,MAAAA,GAAQjC,EAAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAIA,EAAAA,CAAE,CAAC,CAAA;AAEtC,EAAA,MAAMkC,IAAAA,GAAMlC,EAAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAIA,EAAAA,CAAE,CAAC,CAAA;AAEpC,EAAA,IAAIiC,SAAQC,IAAAA,EAAK;AACf,IAAA,OAAO,CAAClC,EAAAA,CAAE,CAAC,CAAA,EAAGiC,QAAOC,IAAG,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,eAAA,GAAkB,SAAUlC,EAAAA,EAAG,CAAA,EAAG;AACtC,EAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,EAAA,MAAM,MAAM,EAAC;AACb,EAAAA,EAAAA,CAAE,QAAQ,CAAA,GAAA,KAAO;AACf,IAAA,IAAI,MAAM,GAAA,CAAI,GAAA,CAAI,CAAC,CAAC,KAAK,EAAC;AAC1B,IAAA,GAAA,GAAM,IAAI,MAAA,CAAO,CAAAwC,OAAK,WAAA,CAAY,GAAA,EAAKA,EAAC,CAAC,CAAA;AAEzC,IAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,MAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,OAAA,CAAQ,CAAAgD,EAAAA,KAAK;AACf,MAAA,MAAM,OAAA,GAAU,YAAA,CAAa,GAAA,EAAKA,EAAC,CAAA;AACnC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,MAClB;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,oBAAA,GAAQ,eAAA;;;AChCf,IAAMrD,QAAAA,GAAU,SAAU,GAAA,EAAK;AAC7B,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AACjD,CAAA;AAEA,IAAM6D,OAAAA,GAAS,CAACpE,EAAAA,EAAG,IAAA,KAAS;AAC1B,EAAA,IAAI,OAAOA,EAAAA,KAAM,QAAA,IAAYO,QAAAA,CAAQP,EAAC,CAAA,EAAG;AACvC,IAAA,OAAO,IAAA,CAAK,MAAMA,EAAC,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,CAACA,EAAAA,EAAG;AACN,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AAEA,EAAA,OAAOA,EAAAA;AACT,CAAA;AAGA,IAAMkD,OAAAA,GAAS,SAAU,IAAA,EAAM,IAAA,EAAM;AACnC,EAAA,OAAO,IAAA,CAAK,IAAI,CAAA,GAAA,KAAO;AACrB,IAAA,MAAM,CAACpD,EAAAA,EAAGO,MAAK,CAAA,GAAI,GAAA;AACnB,IAAA,IAAI,KAAKP,EAAC,CAAA,IAAK,KAAKA,EAAC,CAAA,CAAEO,MAAK,CAAA,EAAG;AAC7B,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,CAAKP,EAAC,CAAA,CAAEO,MAAK,CAAA,CAAE,EAAA;AAAA,IAC1B;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAA;AAEA,IAAMD,YAAU,EAAC;AAGjBA,SAAAA,CAAQ,KAAA,GAAQ,SAAUJ,EAAAA,EAAG;AAC3B,EAAAA,EAAAA,GAAIoE,OAAAA,CAAOpE,EAAAA,EAAG,IAAI,CAAA;AAClB,EAAA,IAAI,IAAA,GAAO,aAAA,CAAS,IAAA,CAAK,WAAA,EAAaA,GAAE,WAAW,CAAA;AACnD,EAAA,IAAA,GAAOkD,OAAAA,CAAO,IAAA,EAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,EAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AACzB,CAAA;AACA9C,SAAAA,CAAQ,MAAMA,SAAAA,CAAQ,KAAA;AAGtBA,SAAAA,CAAQ,YAAA,GAAe,SAAUJ,EAAAA,EAAG;AAClC,EAAAA,EAAAA,GAAIoE,OAAAA,CAAOpE,EAAAA,EAAG,IAAI,CAAA;AAClB,EAAA,IAAI,IAAA,GAAO,oBAAA,CAAgB,IAAA,CAAK,WAAA,EAAaA,GAAE,WAAW,CAAA;AAC1D,EAAA,IAAA,GAAOkD,OAAAA,CAAO,IAAA,EAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,EAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AACzB,CAAA;AAGA9C,SAAAA,CAAQ,GAAA,GAAM,SAAUJ,EAAAA,EAAG;AACzB,EAAAA,EAAAA,GAAIoE,OAAAA,CAAOpE,EAAAA,EAAG,IAAI,CAAA;AAClB,EAAA,IAAI,IAAA,GAAO,kBAAA,CAAc,IAAA,CAAK,WAAA,EAAaA,GAAE,WAAW,CAAA;AACxD,EAAA,IAAA,GAAOkD,OAAAA,CAAO,IAAA,EAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,EAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AACzB,CAAA;AACA9C,SAAAA,CAAQ,aAAaA,SAAAA,CAAQ,GAAA;AAG7BA,SAAAA,CAAQ,aAAa,WAAY;AAC/B,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,EAAA,IAAI,IAAA,GAAO,kBAAA,CAAc,GAAA,CAAI,WAAA,EAAa,KAAK,WAAW,CAAA;AAC1D,EAAA,IAAA,GAAO8C,OAAAA,CAAO,IAAA,EAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,EAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AACzB,CAAA;AAGA9C,SAAAA,CAAQ,SAAS,WAAY;AAC3B,EAAA,IAAI,OAAO,IAAA,CAAK,WAAA;AAChB,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,IAAA,GAAO,aAAA,CAAS,IAAA,EAAM,CAAC,GAAG,CAAC,CAAA;AAAA,EAC7B,CAAC,CAAA;AACD,EAAA,IAAA,GAAO8C,OAAAA,CAAO,IAAA,EAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,EAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AACzB,CAAA;AAEA,IAAMhB,OAAAA,GAAS,SAAUxB,KAAAA,EAAM;AAE7B,EAAA,MAAA,CAAO,MAAA,CAAOA,KAAAA,CAAK,SAAA,EAAWN,SAAO,CAAA;AACvC,CAAA;AACA,IAAO+B,YAAAA,GAAQD,OAAAA;;;AC7Ef,IAAOE,eAAAA,GAAQ;AAAA,EACb,OAAA,EAAAlB,gBAAAA;AAAA,EACA,GAAA,EAAAiB;AACF,CAAA;;;ACNA,IAAOuB,YAAAA,GAAQ;AAAA;AAAA,EAEb,QAAA,EAAU,SAAUO,QAAAA,EAAS;AAC3B,IAAA,MAAM7D,SAAAA,GAAU,KAAK,OAAA,EAAQ;AAC7B,IAAA,MAAMiE,OAAMjE,SAAAA,CAAQ,GAAA,CAAI,SAAS6D,QAAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AACtD,IAAAI,KAAI,KAAA,GAAQ,IAAA;AACZ,IAAA,OAAOA,IAAAA;AAAA,EACT;AACF,CAAA;;;ACRA,IAAM,GAAA,GAAM,SAAU3D,KAAAA,EAAM;AAG1B,EAAAA,MAAK,SAAA,CAAU,KAAA,GAAQ,SAAU2D,IAAAA,EAAKrB,KAAAA,GAAO,EAAC,EAAG;AAC/C,IAAA,MAAM,EAAE,KAAA,EAAAtD,MAAAA,EAAO,IAAA,EAAK,GAAI,IAAA;AACxB,IAAA,MAAM,EAAE,OAAA,EAAAU,SAAAA,EAAQ,GAAIV,MAAAA;AACpB,IAAA,IAAI,KAAA,GAAQU,UAAQ,GAAA,CAAI,SAAA,CAAU,MAAMiE,IAAAA,EAAK,IAAA,CAAK,SAASrB,KAAI,CAAA;AAG/D,IAAA,IAAIA,KAAAA,CAAK,WAAW,KAAA,EAAO;AACzB,MAAA5C,UAAQ,GAAA,CAAI,UAAA,CAAW,KAAA,EAAO,IAAA,EAAM,KAAK,KAAK,CAAA;AAAA,IAChD;AAGA,IAAA,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,CAAAY,EAAAA,KAAK;AACrB,MAAA,MAAM,MAAMA,EAAAA,CAAE,OAAA;AACd,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA;AAChC,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,GAAI,IAAI,CAAC,CAAA;AAC1B,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAAA,GAAE,OAAA,GAAU;AAAA,UACV,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,UACZ,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,UACZ,GAAA,CAAI,CAAC,CAAA,GAAI;AAAA,SACX;AAAA,MACF;AACA,MAAA,OAAOA,EAAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,MAAM,OAAO,KAAA,CAAM,GAAA,CAAI,CAAAA,EAAAA,KAAKA,GAAE,OAAO,CAAA;AAErC,IAAA,KAAA,GAAQ,KAAA,CAAM,IAAI,CAAA,GAAA,KAAO;AACvB,MAAA,GAAA,CAAI,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,CAAI,OAAO,CAAC,CAAA;AACpC,MAAA,OAAO,GAAA,CAAI,IAAA;AACX,MAAA,OAAO,GAAA,CAAI,KAAA;AACX,MAAA,OAAO,GAAA,CAAI,OAAA;AACX,MAAA,OAAO,GAAA,CAAI,SAAA;AACX,MAAA,OAAO,GAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAAA,MACtB;AAAA,KACF;AAAA,EACF,CAAA;AAEF,CAAA;AACA,IAAOmB,YAAAA,GAAQ,GAAA;;;AC3Cf,IAAM,aAAA,GAAgB,SAAU,GAAA,EAAK;AAEnC,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,IAAA,IAAQ,GAAA,CAAI,aAAa,IAAA,EAAM;AAClD,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAI,GAAA,EAAK;AACX,IAAA,OAAO,MAAM,GAAA,CAAI,GAAA;AAAA,EACnB;AACA,EAAA,IAAI,IAAI,IAAA,EAAM;AACZ,IAAA,OAAO,GAAA,CAAI,IAAA;AAAA,EACb;AACA,EAAA,IAAI,IAAI,MAAA,EAAQ;AACd,IAAA,OAAO,CAAA,CAAA,EAAI,IAAI,MAAM,CAAA,CAAA,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM;AAC/B,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,KAAA,CAAM,IAAA,CAAK,aAAA,CAAc,GAAG,CAAC,CAAA;AAE7B,IAAA,IAAI,GAAA,CAAI,QAAA,KAAa,KAAA,IAAS,GAAA,CAAI,OAAA,EAAS;AACzC,MAAA,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA,OAAA,KAAW;AAC7B,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAApC,EAAAA,KAAK;AACnB,UAAA,KAAA,CAAM,IAAA,CAAK,aAAA,CAAcA,EAAC,CAAC,CAAA;AAAA,QAC7B,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAA,GAAA,KAAO,GAAG,CAAA;AAChC,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM;AAC/B,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,IAAI,GAAA,CAAI,aAAa,IAAA,IAAQ,CAAC,IAAI,QAAA,IAAY,CAAC,IAAI,QAAA,EAAU;AAE3D,MAAA,IAAI,IAAI,MAAA,EAAQ;AACd,QAAA,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAE,QAAQ,CAAA,CAAA,KAAK;AAClC,UAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,QACd,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,IAAI,OAAA,EAAS;AACf,QAAA,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,KAAM;AACxB,UAAA,EAAA,CAAG,OAAA,CAAQ,CAAAA,EAAAA,KAAK;AACd,YAAA,MAAMD,EAAAA,GAAI,cAAcC,EAAC,CAAA;AACzB,YAAA,IAAID,EAAAA,EAAG;AACL,cAAA,KAAA,CAAM,KAAKA,EAAC,CAAA;AAAA,YACd;AAAA,UACF,CAAC,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH;AACA,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AACxB,CAAA;AAEA,IAAM,KAAA,GAAQ,SAAUmE,QAAAA,EAASvE,MAAAA,EAAO;AACtC,EAAA,MAAM,UAAA,GAAaA,MAAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,UAAA;AACrC,EAAAuE,QAAAA,CAAQ,QAAQ,CAAA,GAAA,KAAO;AACrB,IAAA,GAAA,CAAI,OAAO,UAAA,CAAW,GAAA,CAAI,KAAA,EAAO,IAAIvE,MAAK,CAAA;AAE1C,IAAA,IAAI,OAAO,GAAA,CAAI,IAAA,KAAS,QAAA,EAAU;AAChC,MAAA,GAAA,CAAI,IAAA,GAAO,CAAC,GAAA,CAAI,IAAI,CAAA;AAAA,IACtB;AACA,IAAA,IAAI,IAAI,KAAA,EAAO;AACb,MAAA,GAAA,CAAI,QAAQ,UAAA,CAAW,GAAA,CAAI,KAAA,EAAO,IAAIA,MAAK,CAAA;AAAA,IAC7C;AAEA,IAAA,GAAA,CAAI,KAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAC7B,IAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,QAAA,CAAS,IAAI,IAAI,CAAA;AAC1C,IAAA,GAAA,CAAI,KAAA,GAAQ,KAAA;AACZ,IAAA,GAAA,CAAI,OAAA,GAAU,KAAA;AAEd,IAAA,GAAA,CAAI,QAAA,GAAW,IAAI,IAAA,CAAK,MAAA,CAAO,CAAAsB,EAAAA,KAAK,CAACA,EAAAA,CAAE,QAAQ,CAAA,CAAE,MAAA;AAAA,EACnD,CAAC,CAAA;AACD,EAAA,OAAOiD,QAAAA;AACT,CAAA;AAEA,IAAO,aAAA,GAAQ,KAAA;;;ACjFf,IAAM,QAAA,GAAW,SAAUA,QAAAA,EAASvE,MAAAA,EAAO;AAEzC,EAAAuE,QAAAA,GAAU,aAAA,CAAMA,QAAAA,EAASvE,MAAK,CAAA;AAG9B,EAAA,MAAMmB,SAAQ,EAAC;AACf,EAAAoD,QAAAA,CAAQ,QAAQ,CAAA,GAAA,KAAO;AAErB,IAAA,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA,GAAA,KAAO;AACvB,MAAApD,MAAAA,CAAM,GAAG,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQA,MAAAA,CAAM,GAAG,CAAC,CAAA,GAAIA,MAAAA,CAAM,GAAG,CAAA,GAAI,EAAC;AACvD,MAAAA,MAAAA,CAAM,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,IACrB,CAAC,CAAA;AAED,IAAA,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA,GAAA,KAAO;AACvB,MAAAA,MAAAA,CAAM,GAAG,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQA,MAAAA,CAAM,GAAG,CAAC,CAAA,GAAIA,MAAAA,CAAM,GAAG,CAAA,GAAI,EAAC;AACvD,MAAAA,MAAAA,CAAM,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,IACrB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,IAAA,CAAKA,MAAK,CAAA,CAAE,OAAA,CAAQ,CAAAZ,EAAAA,KAAK;AAC9B,IAAA,MAAM,UAAU,EAAC;AACjB,IAAAY,OAAMZ,EAAC,CAAA,GAAIY,OAAMZ,EAAC,CAAA,CAAE,OAAO,CAAA,GAAA,KAAO;AAChC,MAAA,IAAI,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAM,SAAA,EAAW;AAC3C,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA;AACrB,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AAGD,EAAA,MAAM,MAAA,GAASgE,QAAAA,CAAQ,MAAA,CAAO,CAAAjD,EAAAA,KAAKA,EAAAA,CAAE,KAAA,CAAM,MAAA,KAAW,CAAA,IAAKA,EAAAA,CAAE,KAAA,CAAM,MAAA,KAAW,CAAC,CAAA;AAC/E,EAAA,OAAO;AAAA,IACL,KAAA,EAAAH,MAAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AAEA,IAAO,gBAAA,GAAQ,QAAA;;;ACxCf,IAAM,QAAA,GAAW,SAAU,SAAA,EAAWA,MAAAA,EAAO;AAC3C,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,GAAA,EAAKtB,EAAAA,KAAM;AAC/B,IAAA,IAAI,QAAQ,EAAC;AACb,IAAA,MAAA,CAAO,IAAA,CAAKsB,MAAK,CAAA,CAAE,OAAA,CAAQ,CAAAZ,EAAAA,KAAK;AAC9B,MAAA,IAAI,SAAA,CAAUV,EAAC,CAAA,CAAE,GAAA,CAAIU,EAAC,CAAA,EAAG;AACvB,QAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAOY,MAAAA,CAAMZ,EAAC,CAAC,CAAA;AAAA,MAC/B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAAD,EAAAA,KAAK;AACxB,MAAA,IAAI,OAAO,OAAA,CAAQA,EAAAA,CAAE,KAAK,MAAM,SAAA,EAAW;AACzC,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAA,CAAQA,EAAAA,CAAE,KAAK,CAAA,GAAI,IAAA;AACnB,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAA;AAEA,IAAO,gBAAA,GAAQ,QAAA;;;ACrBf,IAAM,SAAA,GAAY,SAAU,SAAA,EAAW,QAAA,EAAU;AAC/C,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAACwC,KAAAA,EAAM1C,EAAAA,KAAM;AAChC,IAAA,MAAM,KAAA,GAAQ,SAASA,EAAC,CAAA;AAExB,IAAA0C,KAAAA,GAAOA,KAAAA,CAAK,MAAA,CAAO,CAAA,GAAA,KAAO;AACxB,MAAA,OAAO,IAAI,KAAA,CAAM,KAAA,CAAM,UAAQ,KAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,IAChD,CAAC,CAAA;AAED,IAAAA,KAAAA,GAAOA,KAAAA,CAAK,MAAA,CAAO,CAAA,GAAA,KAAO;AACxB,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,IAAa,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,CAAA,EAAA,KAAM,KAAA,CAAM,GAAA,CAAI,EAAE,CAAC,CAAA,KAAM,IAAA,EAAM;AACzE,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAAA,KAAAA,GAAOA,KAAAA,CAAK,MAAA,CAAO,CAAA,GAAA,KAAO;AACxB,MAAA,IAAI,GAAA,CAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC1B,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,SAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA,CAAE,MAAA;AACtD,MAAA,OAAO,SAAS,GAAA,CAAI,OAAA;AAAA,IACtB,CAAC,CAAA;AACD,IAAA,OAAOA,KAAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAA;AACA,IAAO,iBAAA,GAAQ,SAAA;;;ACzBf,IAAM8B,YAAW,SAAU,SAAA,EAAW,QAAA,EAAU,QAAA,EAAUlE,WAAS4C,KAAAA,EAAM;AACvE,EAAA,MAAM,UAAU,EAAC;AACjB,EAAA,KAAA,IAASlD,KAAI,CAAA,EAAGA,EAAAA,GAAI,SAAA,CAAU,MAAA,EAAQA,MAAK,CAAA,EAAG;AAC5C,IAAA,KAAA,IAASP,EAAAA,GAAI,GAAGA,EAAAA,GAAI,SAAA,CAAUO,EAAC,CAAA,CAAE,MAAA,EAAQP,MAAK,CAAA,EAAG;AAC/C,MAAA,MAAMS,EAAAA,GAAI,SAAA,CAAUF,EAAC,CAAA,CAAEP,EAAC,CAAA;AAExB,MAAA,MAAM,GAAA,GAAMa,UAAQ,GAAA,CAAI,KAAA,CAAM,CAAC,QAAA,CAASN,EAAC,CAAC,CAAA,EAAGE,EAAC,CAAA;AAE9C,MAAA,IAAI,GAAA,CAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACvB,QAAA,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AACtB,UAAA,GAAA,CAAI,CAAC,CAAA,GAAIF,EAAAA;AAqBT,UAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CAAO,IAAIE,EAAAA,EAAG,EAAE,OAAA,EAAS,GAAA,EAAK,CAAA;AAClD,UAAA,IAAIA,EAAAA,CAAE,UAAU,MAAA,EAAW;AACzB,YAAA,IAAA,CAAK,QAAQA,EAAAA,CAAE,KAAA;AAAA,UACjB;AACA,UAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,QACnB,CAAC,CAAA;AAED,QAAA,IAAIgD,KAAAA,CAAK,aAAa,IAAA,EAAM;AAC1B,UAAA,OAAO,CAAC,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT,CAAA;AACA,IAAO,gBAAA,GAAQsB,SAAAA;;;AC1Cf,IAAM,QAAA,GAAW,SAAU,SAAA,EAAW,QAAA,EAAU;AAC9C,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,GAAA,EAAK/E,EAAAA,KAAM;AAC/B,IAAA,MAAM,SAAA,GAAY,QAAA,CAASA,EAAC,CAAA,CAAE,MAAA;AAC9B,IAAA,GAAA,GAAM,GAAA,CAAI,MAAA,CAAO,CAAAyB,EAAAA,KAAK;AACpB,MAAA,OAAO,aAAaA,EAAAA,CAAE,QAAA;AAAA,IACxB,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAA;AAEA,IAAM,QAAQ,SAAU,QAAA,EAAUqD,MAAKjE,SAAAA,EAAS4C,KAAAA,GAAO,EAAC,EAAG;AAEzD,EAAA,MAAM,QAAA,GAAW5C,SAAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA;AAE9C,EAAA,IAAI,SAAA,GAAY,gBAAA,CAAS,QAAA,EAAUiE,IAAAA,CAAI,KAAK,CAAA;AAE5C,EAAA,SAAA,GAAY,iBAAA,CAAS,SAAA,EAAW,QAAkB,CAAA;AAElD,EAAA,IAAIA,IAAAA,CAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACzB,IAAA,SAAA,GAAY,UAAU,GAAA,CAAI,CAAA,GAAA,KAAO,IAAI,MAAA,CAAOA,IAAAA,CAAI,MAAM,CAAC,CAAA;AAAA,EACzD;AAEA,EAAA,SAAA,GAAY,QAAA,CAAS,WAAW,QAAQ,CAAA;AAGxC,EAAA,MAAM,UAAU,gBAAA,CAAS,SAAA,EAAW,QAAA,EAAU,QAAA,EAAUjE,WAAS4C,KAAI,CAAA;AAErE,EAAA,OAAO,OAAA;AACT,CAAA;AACA,IAAO,aAAA,GAAQ,KAAA;;;AClCf,IAAM,KAAA,GAAQ,SAAU,KAAA,EAAO,GAAA,EAAKxC,MAAAA,EAAO;AACzC,EAAA,MAAM,MAAA,GAASA,OAAM,GAAA,CAAI,MAAA;AACzB,EAAA,IAAI,CAAC,MAAA,CAAO,cAAA,CAAe,GAAG,CAAA,EAAG;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAG,CAAA,CAAE,OAAO,EAAC;AAChC,EAAA,KAAA,IAASjB,KAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACxC,IAAA,MAAM,IAAA,GAAO,MAAMA,EAAC,CAAA;AACpB,IAAA,KAAA,IAASU,KAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,CAAI,MAAA,EAAQA,MAAK,CAAA,EAAG;AACtC,MAAA,IAAI,KAAK,IAAA,CAAK,GAAA,CAAI,IAAIA,EAAC,CAAC,MAAM,IAAA,EAAM;AAClC,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,aAAA,GAAQ,KAAA;;;ACff,IAAM,MAAA,GAAS,SAAUuC,KAAAA,EAAM,QAAA,EAAU9C,MAAAA,EAAO;AAC9C,EAAA,MAAM,EAAE,KAAA,EAAAc,MAAAA,EAAO,OAAA,EAAAJ,WAAQ,GAAIV,MAAAA;AAC3B,EAAA,MAAM,EAAE,QAAA0E,OAAAA,EAAQ,MAAA,EAAA1B,SAAQ,KAAA,EAAA6B,MAAAA,KAAUnE,SAAAA,CAAQ,GAAA;AAC1C,EAAA,MAAMoE,YAAAA,GAAcpE,UAAQ,GAAA,CAAI,WAAA;AAChC,EAAA,IAAIoC,KAAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAOA,KAAAA;AAAA,EACT;AAEA,EAAA,MAAM1B,IAAAA,GAAM,OAAO,OAAA,KAAY,WAAA,IAAe,CAAC,OAAA,CAAQ,GAAA,GAAM,IAAA,CAAK,GAAA,IAAO,EAAC,GAAI,OAAA,CAAQ,GAAA;AACtF,EAAA,IAAIA,KAAI,UAAA,EAAY;AAClB,IAAA,OAAA,CAAQ,GAAA,CAAI;;AAAA,iBAAA,EAAmB0B,KAAAA,CAAK,MAAM,CAAA,oBAAA,CAAsB,CAAA;AAAA,EAClE;AACA,EAAA,OAAOA,KAAAA,CAAK,IAAI,CAAA,IAAA,KAAQ;AACtB,IAAA,IAAI,CAAC,KAAK,GAAA,IAAO,CAAC,KAAK,KAAA,IAAS,CAAC,KAAK,KAAA,EAAO;AAC3C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,KAAA;AACnC,IAAA,MAAM,KAAA,GAAQ4B,QAAO,CAAC,IAAA,CAAK,OAAO,CAAA,EAAG,QAAQ,EAAE,CAAC,CAAA;AAEhD,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AAEtB,MAAA,IAAI,cAAM,KAAA,EAAO,IAAA,CAAK,GAAA,EAAK5D,MAAK,MAAM,KAAA,EAAO;AAC3C,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,MAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAE,SAAS,GAAA,EAAK;AACxC,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAW;AAC1B,MAAAkC,OAAAA,CAAO,OAAO,IAAA,CAAK,GAAA,EAAKhD,QAAO,IAAA,CAAK,IAAA,EAAM,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,CAAG,CAAA;AAE9D,MAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,IAAU8E,YAAAA,EAAa;AACtC,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,QAAA,IAAIA,YAAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1B,UAAA9B,OAAAA,CAAO,CAAC,IAAI,CAAA,EAAG,UAAUhD,MAAAA,EAAO,IAAA,CAAK,MAAM,cAAc,CAAA;AAAA,QAC3D,CAAA,MAAO;AACL,UAAAgD,OAAAA,CAAO,CAAC,IAAI,CAAA,EAAG,YAAYhD,MAAAA,EAAO,IAAA,CAAK,MAAM,gBAAgB,CAAA;AAAA,QAC/D;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,WAAW,IAAA,EAAM;AACxB,QAAA,KAAA,CAAM,OAAA,CAAQ,CAAA,IAAA,KAAS,IAAA,CAAK,MAAA,GAAS,IAAK,CAAA;AAAA,MAC5C;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,MAAA6E,OAAM,KAAA,EAAO,IAAA,CAAK,OAAO7E,MAAAA,EAAO,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,IACnD;AAEA,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,CAAAV,EAAAA,KAAMA,EAAAA,CAAE,KAAA,GAAQ,KAAK,KAAM,CAAA;AAAA,IAC3C;AAAA,EACF,CAAC,CAAA;AACH,CAAA;AACA,IAAO,cAAA,GAAQ,MAAA;;;ACpDf,IAAOkC,gBAAAA,GAAQ;AAAA,EACb,QAAA,EAAA,gBAAA;AAAA,EACA,SAAA,EAAA,aAAA;AAAA,EACA,UAAA,EAAA;AACF,CAAA;;;ACJA,IAAOkB,gBAAAA,GAAQ;AAAA,EACb,GAAA,EAAAsB,YAAAA;AAAA,EACA,GAAA,EAAAvB,YAAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAKjB;AAAA;AAET,CAAA;;;ACVA,IAAM,OAAA,GAAU,GAAA;AAEhB,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM,GAAA,EAAK;AACpC,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,IAAA,CAAK,KAAA,GAAQ,GAAA;AAAA,EACf;AACA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,IAAA,CAAK,KAAA,GAAQ,GAAA;AAAA,EACf;AACF,CAAA;AAEA,IAAM,OAAA,GAAU,SAAU,IAAA,EAAM,GAAA,EAAK,QAAQ,MAAA,EAAQ;AAEnD,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,MAAM,IAAA,EAAM;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,GAAA,EAAK;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,CAAK,WAAW,IAAA,EAAM;AACxB,IAAA,MAAA,GAAS,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,EAAA,IAAI,KAAA,EAAO;AAET,IAAA,IAAI,KAAA,CAAM,GAAA,IAAO,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA,EAAG;AACrC,MAAA,KAAA,IAASF,KAAI,CAAA,EAAGA,EAAAA,GAAI,MAAM,GAAA,CAAI,MAAA,EAAQA,MAAK,CAAA,EAAG;AAE5C,QAAA,IAAI,MAAA,KAAW,QAAQ,IAAA,CAAK,IAAA,CAAK,IAAI,KAAA,CAAM,GAAA,CAAIA,EAAC,CAAC,CAAA,EAAG;AAClD,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,GAAA,CAAIA,EAAC,CAAC,CAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC7C,MAAA,KAAA,IAASA,KAAI,CAAA,EAAGA,EAAAA,GAAI,MAAM,OAAA,CAAQ,MAAA,EAAQA,MAAK,CAAA,EAAG;AAChD,QAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQA,EAAC,CAAC,CAAA;AAC9B,QAAA,QAAA,CAAS,IAAA,EAAM,KAAA,CAAM,OAAA,CAAQA,EAAC,CAAC,CAAA;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,IAAA,CAAK,IAAI,GAAG,CAAA;AAEjB,EAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAEb,EAAA,QAAA,CAAS,MAAM,GAAG,CAAA;AAClB,EAAA,OAAO,IAAA;AACT,CAAA;AAGA,IAAM,QAAA,GAAW,SAAU,KAAA,EAAOyD,UAAAA,EAAW,QAAQ,MAAA,EAAQ;AAC3D,EAAA,MAAM,IAAA,GAAOA,UAAAA,CAAU,KAAA,CAAM,OAAO,CAAA;AACpC,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAMlF,EAAAA,KAAM;AACzB,IAAA,IAAI,GAAA,GAAM,KAAKA,EAAC,CAAA;AAChB,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAC1B,MAAA,OAAA,CAAQ,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AAAA,IACnC;AAAA,EACF,CAAC,CAAA;AACH,CAAA;AAEA,IAAMgB,QAAAA,GAAU,SAAU,GAAA,EAAK;AAC7B,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AACjD,CAAA;AAGA,IAAM,GAAA,GAAM,CAAC,KAAA,EAAO,GAAA,EAAK,SAAS,EAAA,KAAO;AACvC,EAAA,MAAMmE,OAAAA,GAAS,CAAA,GAAA,KAAO,iBAAA,GAAoB,GAAA,GAAM,SAAA;AAChD,EAAA,MAAMnF,EAAAA,GAAI,CAAA,GAAA,KAAO,SAAA,GAAY,GAAA,GAAM,SAAA;AACnC,EAAA,MAAM,IAAA,GAAO,KAAA,CACV,GAAA,CAAI,CAAAP,EAAAA,KAAK;AACR,IAAA,OAAOA,EAAAA,CAAE,IAAA,IAAQ,GAAA,GAAMA,EAAAA,CAAE,QAAA,GAAW,GAAA;AAAA,EACtC,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AACX,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7C,IAAA,GAAA,GAAM,IAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,GAAI,IAAA;AAAA,EACtC;AACA,EAAA,GAAA,GAAM,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA,GAAI,GAAA;AAClD,EAAA,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI0F,OAAAA,CAAO,IAAI,CAAA,CAAE,OAAO,EAAE,CAAC,CAAA,wBAAA,EAAsB,GAAA,CAAI,OAAO,EAAE,CAAC,KAAKnF,EAAAA,CAAE,MAAM,CAAC,CAAA,CAAE,CAAA;AAC7F,CAAA;AAGA,IAAM,MAAA,GAAS,SAAU,KAAA,EAAO,GAAA,EAAKG,SAAQ,EAAC,EAAG,QAAQ,MAAA,EAAQ;AAC/D,EAAA,MAAM,MAAA,GAASA,MAAAA,CAAM,KAAA,CAAM,GAAA,CAAI,UAAU,EAAC;AAC1C,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA;AAAA,EACF;AAEA,EAAA,MAAMoB,IAAAA,GAAM,OAAO,OAAA,KAAY,WAAA,IAAe,CAAC,OAAA,CAAQ,GAAA,GAAM,IAAA,CAAK,GAAA,IAAO,EAAC,GAAI,OAAA,CAAQ,GAAA;AACtF,EAAA,IAAIA,IAAAA,IAAOA,KAAI,UAAA,EAAY;AACzB,IAAA,GAAA,CAAI,KAAA,EAAO,KAAK,MAAM,CAAA;AAAA,EACxB;AACA,EAAA,IAAIP,QAAAA,CAAQ,GAAG,CAAA,KAAM,IAAA,EAAM;AACzB,IAAA,GAAA,CAAI,QAAQ,CAAA,EAAA,KAAM,MAAA,CAAO,OAAO,EAAA,EAAIb,MAAAA,EAAO,MAAM,CAAC,CAAA;AAClD,IAAA;AAAA,EACF;AACA,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yBAAA,EAA4B,GAAG,CAAA,CAAA,CAAG,CAAA;AAC/C,IAAA;AAAA,EACF;AACA,EAAA,GAAA,GAAM,IAAI,IAAA,EAAK;AAEf,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAG;AACrB,IAAA,QAAA,CAAS,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AACnC,IAAA;AAAA,EACF;AACA,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAE1B,EAAA,KAAA,IAASH,KAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACxC,IAAA,OAAA,CAAQ,KAAA,CAAMA,EAAC,CAAA,EAAG,GAAA,EAAK,QAAQ,MAAM,CAAA;AAAA,EACvC;AACF,CAAA;AACA,IAAO,cAAA,GAAQ,MAAA;;;ACpHf,IAAM,KAAA,GAAQ,SAAU,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ;AAC1C,EAAA,GAAA,GAAM,GAAA,CAAI,IAAA,EAAK,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACjC,EAAA,KAAA,IAASA,KAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,MAAA,EAAQA,MAAK,CAAA,EAAG;AACxC,IAAA,MAAM,IAAA,GAAO,MAAMA,EAAC,CAAA;AAEpB,IAAA,IAAI,IAAA,CAAK,WAAW,IAAA,EAAM;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AAExB,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACtC,MAAA,KAAA,IAASyB,KAAI,CAAA,EAAGA,EAAAA,GAAI,MAAM,QAAA,CAAS,MAAA,EAAQA,MAAK,CAAA,EAAG;AACjD,QAAA,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAA,CAASA,EAAC,CAAC,CAAA;AAAA,MACpC;AAAA,IACF;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,EACtB;AACF,CAAA;AACA,IAAO,aAAA,GAAQ,KAAA;;;ACxBf,IAAM2D,MAAAA,GAAQ,SAAU,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ;AACzC,EAAA,IAAI,CAAC,MAAA,CAAO,cAAA,CAAe,GAAG,CAAA,EAAG;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAG,CAAA,CAAE,OAAO,EAAC;AAChC,EAAA,KAAA,IAASpF,KAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,CAAI,MAAA,EAAQA,MAAK,CAAA,EAAG;AACtC,IAAA,IAAI,KAAK,IAAA,CAAK,GAAA,CAAI,GAAA,CAAIA,EAAC,CAAC,CAAA,EAAG;AACzB,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAOqF,cAAAA,GAAQD,MAAAA;;;ACbf,IAAM,CAAA,GAAE,SAASE,EAAAA,EAAE;AAAC,EAAA,OAAOA,EAAAA,CAAE,QAAA,GAASA,EAAAA,CAAE,QAAA,IAAU,EAAC,EAAEA,EAAAA,CAAE,MAAA,GAAOA,EAAAA,CAAE,MAAA,IAAQ,EAAC,EAAEA,EAAAA,CAAE,QAAMA,EAAAA,CAAE,KAAA,IAAO,EAAC,EAAEA,EAAAA,CAAE,MAAA,CAAO,OAAA,GAAQA,EAAAA,CAAE,OAAO,OAAA,IAAS,EAAC,EAAEA,EAAAA,CAAE,OAAO,QAAA,GAASA,EAAAA,CAAE,MAAA,CAAO,QAAA,IAAU,EAAC,EAAEA,EAAAA;AAAC,CAAA;AAA9K,IAAgL7F,EAAAA,GAAE,aAAA;AAAlL,IAAgM,CAAA,GAAE,SAASA,EAAAA,EAAE;AAAC,EAAA,IAAIc,EAAAA,GAAEd,GAAE,IAAA,EAAK,CAAE,MAAM,IAAI,CAAA,EAAEe,KAAE,EAAC;AAAE,EAAAD,EAAAA,CAAE,OAAA,EAAS,CAAAd,EAAAA,KAAG;AAAC,IAAAe,EAAAA,GAAEA,EAAAA,CAAE,MAAA,CAAA,CAAO,SAASf,EAAAA,EAAE;AAAC,MAAA,IAAG,EAAEA,EAAAA,GAAEA,EAAAA,CAAE,IAAA,KAAQ,OAAO,IAAA;AAAK,MAAA,IAAG,MAAM,IAAA,CAAKA,EAAC,KAAG,KAAA,CAAM,IAAA,CAAKA,EAAC,CAAA,EAAE;AAAC,QAAA,IAAIc,EAAAA,GAAAA,CAAGd,EAAAA,GAAAA,CAAGA,EAAAA,GAAEA,EAAAA,CAAE,OAAA,CAAQ,KAAA,EAAM,EAAE,CAAA,EAAG,OAAA,CAAQ,KAAA,EAAM,EAAE,CAAA,EAAG,MAAM,GAAG,CAAA;AAAE,QAAA,OAAOc,EAAAA,GAAEA,EAAAA,CAAE,GAAA,EAAK,CAAA+E,EAAAA,KAAGA,GAAE,IAAA,EAAK,EAAE,CAAE,MAAA,EAAQ,CAAAA,EAAAA,KAAGA,IAAE,EAAE/E,EAAAA,GAAEA,EAAAA,CAAE,GAAA,EAAK,CAAAd,EAAAA,KAAG,CAAA,CAAE,EAAC,EAAA,EAAGA,EAAAA,EAAE,CAAA,EAAE,EAAEc,EAAAA;AAAA,MAAC;AAAC,MAAA,OAAM,CAAC,CAAA,CAAE,EAAC,EAAA,EAAGd,EAAAA,EAAE,CAAC,CAAA;AAAA,IAAC,CAAA,EAAEA,EAAC,CAAC,CAAA;AAAA,EAAC,GAAE,EAAEe,EAAAA,GAAEA,GAAE,MAAA,EAAQ,CAAA8E,OAAGA,EAAAA,EAAE;AAAE,EAAA,IAAItF,EAAAA,GAAEQ,GAAE,CAAC,CAAA;AAAE,EAAA,KAAA,IAAQ8E,KAAE,CAAA,EAAEA,EAAAA,GAAE9E,EAAAA,CAAE,MAAA,EAAO8E,MAAG,CAAA,EAAEtF,EAAAA,CAAE,QAAA,CAAS,KAAKQ,EAAAA,CAAE8E,EAAC,CAAC,CAAA,EAAEtF,EAAAA,GAAEQ,GAAE8E,EAAC,CAAA;AAAE,EAAA,OAAO9E,GAAE,CAAC,CAAA;AAAC,CAAA;AAAplB,IAAslB,CAAA,GAAE,CAAC8E,EAAAA,EAAE7F,EAAAA,KAAI;AAAC,EAAA,IAAIc,EAAAA,GAAE,EAAC,EAAEC,EAAAA,GAAE,CAAC8E,EAAC,CAAA;AAAE,EAAA,OAAK9E,EAAAA,CAAE,SAAO,CAAA,IAAG;AAAC,IAAA,IAAI8E,EAAAA,GAAE9E,GAAE,GAAA,EAAI;AAAE,IAAAD,EAAAA,CAAE,IAAA,CAAK+E,EAAC,CAAA,EAAEA,EAAAA,CAAE,YAAUA,EAAAA,CAAE,QAAA,CAAS,OAAA,EAAS,CAAA/E,EAAAA,KAAG;AAAC,MAAAd,MAAGA,EAAAA,CAAE6F,EAAAA,EAAE/E,EAAC,CAAA,EAAEC,EAAAA,CAAE,KAAKD,EAAC,CAAA;AAAA,IAAC,CAAA,EAAE;AAAA,EAAC;AAAC,EAAA,OAAOA,EAAAA;AAAC,CAAA;AAA5tB,IAA8tBP,EAAAA,GAAE,CAAAsF,EAAAA,KAAG,gBAAA,KAAmB,OAAO,SAAA,CAAU,QAAA,CAAS,KAAKA,EAAC,CAAA;AAAtxB,IAAwxB,IAAE,CAAAA,EAAAA,KAAAA,CAAIA,EAAAA,GAAEA,EAAAA,IAAG,IAAI,IAAA,EAAK;AAA5yB,IAA8yB,CAAA,GAAE,SAASpF,EAAAA,GAAE,EAAC,EAAE;AAAC,EAAA,OAAM,QAAA,IAAU,OAAOA,EAAAA,GAAAA,CAAE,SAASM,EAAAA,EAAE;AAAC,IAAA,IAAIR,KAAEQ,EAAAA,CAAE,KAAA,CAAM,OAAO,CAAA,EAAEN,KAAE,EAAC;AAAE,IAAAF,EAAAA,CAAE,OAAA,EAAS,CAAAsF,EAAAA,KAAG;AAAC,MAAA,IAAG,CAACA,EAAAA,CAAE,IAAA,MAAQ7F,EAAAA,CAAE,IAAA,CAAK6F,EAAC,CAAA,EAAE;AAAO,MAAA,IAAI9E,EAAAA,GAAAA,CAAG,CAAA8E,EAAAA,KAAG;AAAC,QAAA,MAAM7F,EAAAA,GAAE,YAAA;AAAa,QAAA,IAAIc,EAAAA,GAAE,CAAA;AAAE,QAAA,OAAKd,EAAAA,CAAE,IAAA,CAAK6F,EAAC,CAAA,IAAGA,EAAAA,GAAEA,EAAAA,CAAE,OAAA,CAAQ7F,EAAAA,EAAE,EAAE,CAAA,EAAEc,EAAAA,IAAG,CAAA;AAAE,QAAA,OAAOA,EAAAA;AAAA,MAAC,GAAG+E,EAAC,CAAA;AAAE,MAAApF,EAAAA,CAAE,KAAK,EAAC,MAAA,EAAOM,IAAE,IAAA,EAAK,CAAA,CAAE8E,EAAC,CAAA,EAAE,CAAA;AAAA,IAAC,CAAA,EAAE;AAAE,IAAA,IAAI1F,EAAAA,GAAAA,CAAE,SAAS0F,EAAAA,EAAE;AAAC,MAAA,IAAI7F,EAAAA,GAAE,EAAC,QAAA,EAAS,EAAC,EAAC;AAAE,MAAA,OAAO6F,EAAAA,CAAE,OAAA,EAAS,CAAC/E,EAAAA,EAAEC,EAAAA,KAAI;AAAC,QAAA,CAAA,KAAID,GAAE,MAAA,GAAOd,EAAAA,CAAE,QAAA,GAASA,EAAAA,CAAE,SAAS,MAAA,CAAOc,EAAAA,CAAE,IAAI,CAAA,GAAE+E,GAAE9E,EAAAA,GAAE,CAAC,CAAA,IAAA,CAAG,SAAS8E,IAAE7F,EAAAA,EAAE;AAAC,UAAA,IAAIc,EAAAA,GAAE+E,EAAAA,CAAE7F,EAAC,CAAA,CAAE,MAAA;AAAO,UAAA,OAAKA,EAAAA,IAAG,CAAA,EAAEA,EAAAA,IAAG,CAAA,EAAE,IAAG6F,EAAAA,CAAE7F,EAAC,CAAA,CAAE,MAAA,GAAOc,EAAAA,EAAE,OAAO+E,EAAAA,CAAE7F,EAAC,CAAA;AAAE,UAAA,OAAO6F,GAAE,CAAC,CAAA;AAAA,QAAC,CAAA,EAAEA,IAAE9E,EAAC,CAAA,CAAE,KAAK,QAAA,CAAS,IAAA,CAAKD,GAAE,IAAI,CAAA;AAAA,MAAC,GAAE,EAAEd,EAAAA;AAAA,IAAC,GAAES,EAAC,CAAA;AAAE,IAAA,OAAON,EAAAA,GAAE,CAAA,CAAEA,EAAC,CAAA,EAAEA,EAAAA;AAAA,EAAC,GAAEM,EAAC,CAAA,GAAEF,GAAEE,EAAC,CAAA,GAAA,CAAE,SAAST,EAAAA,EAAE;AAAC,IAAA,IAAIc,KAAE,EAAC;AAAE,IAAAd,EAAAA,CAAE,OAAA,EAAS,CAAA6F,EAAAA,KAAG;AAAC,MAAA/E,EAAAA,CAAE+E,EAAAA,CAAE,EAAE,CAAA,GAAEA,EAAAA;AAAA,IAAC,CAAA,EAAE;AAAE,IAAA,IAAI9E,EAAAA,GAAE,CAAA,CAAE,EAAE,CAAA;AAAE,IAAA,OAAOf,EAAAA,CAAE,OAAA,EAAS,CAAAA,EAAAA,KAAG;AAAC,MAAA,IAAA,CAAIA,EAAAA,GAAE,CAAA,CAAEA,EAAC,CAAA,EAAG,MAAA,MAAUc,EAAAA,CAAE,cAAA,CAAed,EAAAA,CAAE,MAAM,CAAA,EAAE;AAAC,QAAA,IAAI6F,EAAAA,GAAE/E,EAAAA,CAAEd,EAAAA,CAAE,MAAM,CAAA;AAAE,QAAA,OAAOA,EAAAA,CAAE,MAAA,EAAO6F,EAAAA,CAAE,QAAA,CAAS,KAAK7F,EAAC,CAAA;AAAA,MAAC,OAAM,OAAA,CAAQ,IAAA,CAAK,CAAA,uBAAA,EAA0BA,EAAAA,CAAE,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,WAAOe,EAAAA,CAAE,QAAA,CAAS,IAAA,CAAKf,EAAC,CAAA;AAAA,IAAC,GAAE,EAAEe,EAAAA;AAAA,EAAC,CAAA,EAAEN,EAAC,CAAA,IAAG,CAAA,CAAEN,KAAEM,EAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,EAAEN,EAAAA,CAAAA;AAAG,EAAA,IAAIA,EAAAA;AAAC,CAAA;AAA/mD,IAAinD,CAAA,GAAE,CAAA0F,EAAAA,KAAG,UAAA,GAAQA,EAAAA,GAAE,SAAA;AAAhoD,IAAuoD,CAAA,GAAE,CAAAA,EAAAA,KAAG,SAAA,GAAOA,EAAAA,GAAE,SAAA;AAArpD,IAA4pD,CAAA,GAAE,SAASA,EAAAA,EAAE7F,EAAAA,EAAE;AAAC,EAAA,IAAIc,EAAAA,GAAE,KAAA;AAAM,EAAAd,EAAAA,KAAIc,EAAAA,GAAE,CAAA,CAAE,SAAI,CAAA,CAAA;AAAG,EAAA,IAAIP,EAAAA,GAAE,EAAA;AAAG,EAAA,OAAO,EAAEsF,EAAC,CAAA,CAAE,OAAA,EAAS,CAACA,IAAE9E,EAAAA,KAAI;AAAC,IAAA,IAAIN,EAAAA,GAAEoF,GAAE,EAAA,IAAI,EAAA;AAAG,IAAA,IAAG7F,EAAAA,KAAIS,KAAE,CAAA,CAAEA,EAAC,IAAG,CAAA,KAAIM,EAAAA,IAAG,CAAC8E,EAAAA,CAAE,EAAA,EAAG;AAAO,IAAA,IAAI1F,EAAAA,GAAE0F,EAAAA,CAAE,MAAA,CAAO,OAAA,CAAQ,MAAA;AAAO,IAAAtF,MAAG,MAAA,CAAO,MAAA,CAAOJ,EAAC,CAAA,GAAEW,KAAEL,EAAAA,GAAE,IAAA;AAAA,EAAI,GAAE,EAAEF,EAAAA;AAAC,CAAA;AAA91D,IAAg2D,CAAA,GAAE,SAASsF,EAAAA,EAAE;AAAC,EAAA,IAAI7F,EAAAA,GAAE,EAAE6F,EAAC,CAAA;AAAE,EAAA7F,EAAAA,CAAE,OAAA,EAAS,CAAA6F,EAAAA,KAAG;AAAC,IAAA,OAAA,CAAOA,KAAE,MAAA,CAAO,MAAA,CAAO,EAAC,EAAEA,EAAC,CAAA,EAAG,QAAA;AAAA,EAAQ,CAAA,EAAE;AAAE,EAAA,IAAI/E,EAAAA,GAAEd,GAAE,CAAC,CAAA;AAAE,EAAA,OAAOc,EAAAA,IAAG,CAACA,EAAAA,CAAE,EAAA,IAAI,CAAA,KAAI,MAAA,CAAO,IAAA,CAAKA,EAAAA,CAAE,KAAK,CAAA,CAAE,MAAA,IAAQd,EAAAA,CAAE,OAAM,EAAEA,EAAAA;AAAC,CAAA;AAA1/D,IAA4/D,CAAA,GAAE,EAAC,IAAA,EAAK,CAAA,EAAE,KAAI,CAAA,EAAE,KAAA,EAAM,CAAA,EAAE,IAAA,EAAK,CAAA,EAAC;AAA1hE,IAA4hE,CAAA,GAAE,SAAS6F,EAAAA,EAAE7F,EAAAA,EAAE;AAAC,EAAA,OAAM,QAAA,KAAWA,MAAG,MAAA,KAASA,EAAAA,GAAE6F,KAAE,OAAA,KAAU7F,EAAAA,IAAG,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE6F,EAAAA,EAAE,IAAE,CAAC,CAAA,EAAE,IAAA,IAAM,CAAA,CAAE,cAAA,CAAe7F,EAAC,IAAE,CAAA,CAAEA,EAAC,CAAA,CAAE6F,EAAC,CAAA,GAAEA,EAAAA;AAAC,CAAA;AAAlpE,IAAopE,CAAA,GAAE,CAAAA,EAAAA,KAAG;AAAC,EAAA,CAAA,CAAEA,EAAAA,GAAG,CAACA,EAAAA,EAAE7F,EAAAA,KAAI;AAAC,IAAA6F,EAAAA,CAAE,OAAKA,EAAAA,CAAE,MAAA,CAAO,UAAQA,EAAAA,CAAE,MAAA,CAAO,WAAS,EAAC,EAAE7F,GAAE,MAAA,CAAO,OAAA,GAAQ6F,GAAE,MAAA,CAAO,OAAA,CAAQ,OAAO,CAACA,EAAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AAAA,EAAE,CAAA,EAAE;AAAC,CAAA;AAAxwE,IAA0wE,CAAA,GAAE,CAACA,EAAAA,EAAE7F,EAAAA,MAAK,MAAA,CAAO,KAAKA,EAAC,CAAA,CAAE,OAAA,EAAS,CAAAc,EAAAA,KAAG;AAAC,EAAA,IAAGd,EAAAA,CAAEc,EAAC,CAAA,YAAY,GAAA,EAAI;AAAC,IAAA,IAAIC,EAAAA,GAAE8E,EAAAA,CAAE/E,EAAC,CAAA,oBAAG,IAAI,GAAA,EAAA;AAAI,IAAA+E,EAAAA,CAAE/E,EAAC,CAAA,mBAAE,IAAI,GAAA,CAAI,CAAC,GAAGC,EAAAA,EAAE,GAAGf,EAAAA,CAAEc,EAAC,CAAC,CAAC,CAAA;AAAA,EAAC,CAAA,MAAK;AAAC,IAAA,IAAA,CAAI,CAAA+E,EAAAA,KAAGA,EAAAA,IAAG,QAAA,IAAU,OAAOA,EAAAA,IAAG,CAAC,KAAA,CAAM,OAAA,CAAQA,EAAC,CAAA,EAAG7F,EAAAA,CAAEc,EAAC,CAAC,CAAA,EAAE;AAAC,MAAA,IAAIC,EAAAA,GAAE8E,EAAAA,CAAE/E,EAAC,CAAA,IAAG,EAAC;AAAE,MAAA+E,EAAAA,CAAE/E,EAAC,CAAA,GAAE,MAAA,CAAO,MAAA,CAAO,EAAC,EAAEd,EAAAA,CAAEc,EAAC,CAAA,EAAEC,EAAC,CAAA;AAAA,IAAC,CAAA,MAAMR,EAAAA,CAAEP,EAAAA,CAAEc,EAAC,CAAC,CAAA,GAAE+E,EAAAA,CAAE/E,EAAC,CAAA,GAAEd,EAAAA,CAAEc,EAAC,CAAA,CAAE,MAAA,CAAO+E,EAAAA,CAAE/E,EAAC,CAAA,IAAG,EAAE,CAAA,GAAE,MAAA,KAAS+E,EAAAA,CAAE/E,EAAC,CAAA,KAAI+E,EAAAA,CAAE/E,EAAC,CAAA,GAAEd,EAAAA,CAAEc,EAAC,CAAA,CAAA;AAAA,EAAE;AAAC,CAAA,EAAE,EAAE+E,EAAAA,CAAAA;AAAziF,IAA4iF,CAAA,GAAE,IAAA;AAAK,IAAM,CAAA,GAAN,MAAM,EAAA,CAAC;AAAA,EAAC,WAAA,CAAYA,EAAAA,GAAE,EAAC,EAAE;AAAC,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAK,MAAA,EAAO,EAAC,UAAA,EAAW,OAAG,KAAA,EAAMA,EAAAA,EAAE,QAAA,EAAS,IAAA,EAAG,CAAA;AAAA,EAAC;AAAA,EAAC,IAAI,QAAA,GAAU;AAAC,IAAA,OAAO,KAAK,IAAA,CAAK,QAAA;AAAA,EAAQ;AAAA,EAAC,IAAI,EAAA,GAAI;AAAC,IAAA,OAAO,KAAK,IAAA,CAAK,EAAA;AAAA,EAAE;AAAA,EAAC,IAAI,KAAA,GAAO;AAAC,IAAA,OAAO,KAAK,IAAA,CAAK,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,MAAA,GAAO,CAAA;AAAA,EAAC;AAAA,EAAC,KAAA,CAAMA,EAAAA,GAAE,EAAC,EAAE;AAAC,IAAA,IAAI7F,EAAAA,GAAE,IAAA,CAAK,IAAA,CAAK,KAAA,IAAO,EAAC;AAAE,IAAA,OAAM,QAAA,IAAU,OAAO6F,EAAAA,KAAI7F,EAAAA,CAAE6F,EAAC,CAAA,GAAE,IAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,KAAA,GAAM,MAAA,CAAO,MAAA,CAAO7F,EAAAA,EAAE6F,EAAC,CAAA,EAAE,IAAA;AAAA,EAAI;AAAA,EAAC,IAAI7F,EAAAA,EAAE;AAAC,IAAA,IAAGA,EAAAA,GAAE,EAAEA,EAAC,CAAA,EAAE,CAAC,CAAA,CAAE,IAAA,CAAKA,EAAC,CAAA,EAAE;AAAC,MAAA,IAAI6F,EAAAA,GAAE,KAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAAA,EAAAA,KAAGA,EAAAA,CAAE,EAAA,KAAK7F,EAAAA,EAAE;AAAE,MAAA,OAAO,IAAI,GAAE6F,EAAC,CAAA;AAAA,IAAC;AAAC,IAAA,IAAI/E,EAAAA,GAAAA,CAAG,CAAC+E,EAAAA,EAAE7F,EAAAA,KAAI;AAAC,MAAA,IAAIc,MAAG,CAAA+E,EAAAA,KAAG,YAAU,OAAOA,EAAAA,GAAEA,MAAGA,EAAAA,GAAEA,EAAAA,CAAE,OAAA,CAAQ,KAAA,EAAM,EAAE,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,EAAG7F,EAAAA,GAAEA,MAAG,EAAE,CAAA;AAAE,MAAA,KAAA,IAAQA,KAAE,CAAA,EAAEA,EAAAA,GAAEc,EAAAA,CAAE,MAAA,EAAOd,MAAG,CAAA,EAAE;AAAC,QAAA,IAAIe,EAAAA,GAAE8E,EAAAA,CAAE,QAAA,CAAS,IAAA,EAAM,CAAAA,OAAGA,EAAAA,CAAE,EAAA,KAAK/E,EAAAA,CAAEd,EAAC,CAAA,EAAE;AAAE,QAAA,IAAG,CAACe,IAAE,OAAO,IAAA;AAAK,QAAA8E,EAAAA,GAAE9E,EAAAA;AAAA,MAAC;AAAC,MAAA,OAAO8E,EAAAA;AAAA,IAAC,GAAG,IAAA,CAAK,IAAA,EAAK7F,EAAC,CAAA,IAAG,CAAA,CAAE,EAAE,CAAA;AAAE,IAAA,OAAO,IAAI,GAAEc,EAAC,CAAA;AAAA,EAAC;AAAA,EAAC,GAAA,CAAId,EAAAA,EAAEc,EAAAA,GAAE,EAAC,EAAE;AAAC,IAAA,IAAGP,EAAAA,CAAEP,EAAC,CAAA,EAAE,OAAOA,GAAE,OAAA,EAAS,CAAA6F,EAAAA,KAAG,IAAA,CAAK,IAAI,CAAA,CAAEA,EAAC,CAAA,EAAE/E,EAAC,GAAE,EAAE,IAAA;AAAK,IAAAd,EAAAA,GAAE,EAAEA,EAAC,CAAA;AAAE,IAAA,IAAIe,KAAE,CAAA,CAAE,EAAC,IAAGf,EAAAA,EAAE,KAAA,EAAMc,IAAE,CAAA;AAAE,IAAA,OAAO,IAAA,CAAK,KAAK,QAAA,CAAS,IAAA,CAAKC,EAAC,CAAA,EAAE,IAAI,GAAEA,EAAC,CAAA;AAAA,EAAC;AAAA,EAAC,OAAO8E,EAAAA,EAAE;AAAC,IAAA,OAAOA,KAAE,CAAA,CAAEA,EAAC,CAAA,EAAE,IAAA,CAAK,KAAK,QAAA,GAAS,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA7F,EAAAA,KAAGA,EAAAA,CAAE,EAAA,KAAK6F,IAAE,EAAE,IAAA;AAAA,EAAI;AAAA,EAAC,KAAA,GAAO;AAAC,IAAA,OAAO,EAAE,IAAA,CAAK,IAAI,CAAA,CAAE,GAAA,EAAK,CAAAA,EAAAA,MAAI,OAAA,CAAOA,EAAAA,GAAE,MAAA,CAAO,OAAO,EAAC,EAAEA,EAAC,CAAA,EAAG,UAASA,EAAAA,CAAAA,EAAG;AAAA,EAAC;AAAA,EAAC,KAAA,GAAO;AAAC,IAAA,OAAA,CAAO,CAAAA,EAAAA,KAAG;AAAC,MAAA,IAAI7F,EAAAA,GAAE,CAAA,CAAE6F,EAAAA,GAAG,CAACA,IAAE7F,EAAAA,KAAI;AAAC,QAAA6F,EAAAA,CAAE,EAAA,KAAKA,EAAAA,CAAE,MAAA,CAAO,OAAA,GAAQA,EAAAA,CAAE,MAAA,CAAO,OAAA,IAAS,EAAC,EAAEA,EAAAA,CAAE,MAAA,CAAO,QAAA,GAASA,EAAAA,CAAE,MAAA,CAAO,QAAA,IAAU,EAAC,EAAE7F,EAAAA,CAAE,MAAA,CAAO,OAAA,GAAQ6F,EAAAA,CAAE,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,CAACA,EAAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AAAA,MAAE,CAAA,EAAE,EAAE/E,EAAAA,GAAE,EAAC;AAAE,MAAAd,EAAAA,CAAE,OAAA,EAAS,CAAA6F,EAAAA,KAAG;AAAC,QAAAA,EAAAA,CAAE,EAAA,KAAK/E,EAAAA,CAAE+E,EAAAA,CAAE,EAAE,CAAA,GAAEA,EAAAA,CAAAA;AAAA,MAAE,CAAA,EAAE,EAAE7F,EAAAA,CAAE,OAAA,EAAS,CAAA6F,EAAAA,KAAG;AAAC,QAAAA,EAAAA,CAAE,MAAA,CAAO,OAAA,CAAQ,OAAA,EAAS,CAAA7F,EAAAA,KAAG;AAAC,UAAAc,EAAAA,CAAE,cAAA,CAAed,EAAC,CAAA,IAAGc,EAAAA,CAAEd,EAAC,CAAA,CAAE,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK6F,EAAAA,CAAE,EAAE,CAAA;AAAA,QAAC,CAAA,EAAE;AAAA,MAAC,GAAE,EAAEA,EAAAA,CAAE,OAAO,QAAA,GAAS,MAAA,CAAO,KAAK/E,EAAC,CAAA;AAAA,IAAC,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAE,IAAA;AAAA,EAAI;AAAA,EAAC,IAAA,GAAM;AAAC,IAAA,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,EAAC;AAAA,EAAC,QAAA,GAAU;AAAC,IAAA,IAAI+E,EAAAA;AAAE,IAAA,OAAOA,KAAE,IAAA,CAAK,IAAA,EAAK,EAAEA,EAAAA,GAAG,CAACA,IAAE7F,EAAAA,KAAI;AAAC,MAAAA,GAAE,KAAA,GAAM,CAAA,CAAEA,EAAAA,CAAE,KAAA,EAAM6F,GAAE,KAAK,CAAA;AAAA,IAAC,GAAE,EAAE,IAAA;AAAA,EAAI;AAAA,EAAC,KAAA,GAAO;AAAC,IAAA,CAAA,CAAE,KAAK,IAAI,CAAA;AAAE,IAAA,IAAIA,EAAAA,GAAE,EAAE,IAAA,CAAK,IAAI,GAAE7F,EAAAA,GAAE6F,EAAAA,CAAE,MAAA,GAAO,CAAA,GAAE,CAAA,GAAE,CAAA;AAAE,IAAA,OAAOA,EAAAA,CAAE,OAAA,EAAS,CAAAA,EAAAA,KAAG;AAAC,MAAA,IAAG,CAAA,KAAIA,EAAAA,CAAE,MAAA,CAAO,OAAA,CAAQ,MAAA,EAAO;AAAO,MAAA,IAAI/E,EAAAA,GAAE+E,EAAAA,CAAE,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAO,CAAA;AAAE,MAAA/E,EAAAA,GAAEd,OAAIA,EAAAA,GAAEc,EAAAA,CAAAA;AAAA,IAAE,GAAE,EAAEd,EAAAA;AAAA,EAAC;AAAA,EAAC,IAAI6F,EAAAA,EAAE;AAAC,IAAA,OAAO,EAAE,IAAA,CAAK,IAAI,GAAE,CAAA,CAAE,IAAA,CAAK,MAAKA,EAAC,CAAA;AAAA,EAAC;AAAA,EAAC,KAAA,GAAO;AAAC,IAAA,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA,EAAE,EAAE,IAAA,CAAK,IAAA,EAAK,OAAO,CAAA,EAAE,IAAA;AAAA,EAAI;AAAC,CAAA;AAAC,IAAM,CAAA,GAAE,SAASA,EAAAA,EAAE;AAAC,EAAA,IAAI7F,EAAAA,GAAE,EAAE6F,EAAC,CAAA;AAAE,EAAA,OAAO,IAAI,EAAE7F,EAAC,CAAA;AAAC,CAAA;AAAE,CAAA,CAAE,SAAA,CAAU,MAAA,GAAO,SAAS6F,EAAAA,EAAE;AAAC,EAAAA,GAAE,IAAI,CAAA;AAAC,CAAA;;;ACC7zI,IAAMC,OAAAA,GAAS;AAAA,EACb,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,OAAA;AAAA,EACN,QAAA,EAAU,OAAA;AAAA,EACV,IAAA,EAAM,KAAA;AAAA,EACN,KAAA,EAAO,KAAA;AAAA,EACP,SAAA,EAAW,SAAA;AAAA,EACX,WAAA,EAAa,MAAA;AAAA,EACb,WAAA,EAAa,MAAA;AAAA,EACb,UAAA,EAAY,MAAA;AAAA,EACZ,UAAA,EAAY,MAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;AAEA,IAAO,cAAA,GAAQA,OAAAA;;;ACbf,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM;AAC/B,EAAA,IAAI,cAAA,CAAO,cAAA,CAAe,IAAA,CAAK,EAAE,CAAA,EAAG;AAClC,IAAA,OAAO,cAAA,CAAO,KAAK,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,IAAI,cAAA,CAAO,cAAA,CAAe,IAAA,CAAK,EAAE,CAAA,EAAG;AAClC,IAAA,OAAO,cAAA,CAAO,KAAK,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAArF,EAAAA,KAAK,cAAA,CAAOA,EAAC,CAAC,CAAA;AACrD,EAAA,OAAO,eAAO,KAAK,CAAA;AACrB,CAAA;AAGA,IAAM,GAAA,GAAM,SAAU,KAAA,EAAO;AAC3B,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AACpB,IAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAM,EAAA,EAAI,KAAA,KAAU,IAAA,CAAK,KAAA;AACtC,IAAA,IAAI,OAAA,GAAU,KAAK,MAAA,CAAO,OAAA;AAC1B,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,GAAU,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,IAC/B;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,GAAI;AAAA,MACb,EAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAU,KAAK,MAAA,CAAO,QAAA;AAAA,MACtB,KAAA,EAAO,SAAS,IAAI;AAAA,KACtB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAAQ,EAAAA,KAAK;AAC5B,IAAA,MAAM,OAAO,IAAI,GAAA,CAAI,GAAA,CAAIA,EAAC,EAAE,GAAG,CAAA;AAC/B,IAAA,GAAA,CAAIA,EAAC,CAAA,CAAE,GAAA,CAAI,OAAA,CAAQ,CAAA,GAAA,KAAO;AACxB,MAAA,IAAI,GAAA,CAAI,GAAG,CAAA,EAAG;AACZ,QAAA,GAAA,CAAI,GAAG,EAAE,QAAA,CAAS,OAAA,CAAQ,SAAO,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MAChD;AAAA,IACF,CAAC,CAAA;AACD,IAAA,GAAA,CAAIA,EAAC,CAAA,CAAE,GAAA,GAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EAC9B,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,IAAO,WAAA,GAAQ,GAAA;;;AC5Cf,IAAM,KAAA,GAAQ,SAAU,KAAA,EAAO;AAC7B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,CAAC,KAAK,CAAA;AAAA,EACf;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,IAAM,UAAA,GAAa,SAAU,IAAA,EAAM,OAAA,EAAS;AAC1C,EAAA,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAAA,EAAAA,KAAK;AAE7B,IAAA,IAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,GAAA,EAAK;AACf,MAAA,IAAA,CAAKA,EAAC,CAAA,CAAE,EAAA,GAAK,IAAA,CAAKA,EAAC,CAAA,CAAE,GAAA;AAAA,IACvB;AACA,IAAA,IAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,IAAA,EAAM;AAChB,MAAA,IAAA,CAAKA,EAAC,CAAA,CAAE,GAAA,GAAM,IAAA,CAAKA,EAAC,CAAA,CAAE,IAAA;AAAA,IACxB;AAEA,IAAA,IAAI,IAAA,CAAKA,EAAC,CAAA,CAAE,EAAA,IAAM,OAAO,IAAA,CAAKA,EAAC,CAAA,CAAE,EAAA,KAAO,QAAA,EAAU;AAChD,MAAA,IAAI,CAAC,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAKA,EAAC,CAAA,CAAE,EAAE,CAAA,IAAK,CAAC,KAAK,cAAA,CAAe,IAAA,CAAKA,EAAC,CAAA,CAAE,EAAE,CAAA,EAAG;AAC3E,QAAA,IAAA,CAAK,IAAA,CAAKA,EAAC,CAAA,CAAE,EAAE,IAAI,EAAC;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,IAAI,KAAKA,EAAC,CAAA,CAAE,GAAA,IAAO,OAAO,KAAKA,EAAC,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,CAAC,IAAA,CAAK,cAAA,CAAe,KAAKA,EAAC,CAAA,CAAE,GAAG,CAAA,EAAG;AACvF,MAAA,IAAI,CAAC,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAKA,EAAC,CAAA,CAAE,GAAG,CAAA,IAAK,CAAC,KAAK,cAAA,CAAe,IAAA,CAAKA,EAAC,CAAA,CAAE,GAAG,CAAA,EAAG;AAC7E,QAAA,IAAA,CAAK,IAAA,CAAKA,EAAC,CAAA,CAAE,GAAG,IAAI,EAAC;AAAA,MACvB;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AAGA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM,OAAA,EAAS;AAExC,EAAA,IAAA,GAAO,UAAA,CAAW,MAAM,OAAO,CAAA;AAG/B,EAAA,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAAA,EAAAA,KAAK;AAC7B,IAAA,IAAA,CAAKA,EAAC,CAAA,CAAE,QAAA,GAAW,MAAM,IAAA,CAAKA,EAAC,EAAE,QAAQ,CAAA;AACzC,IAAA,IAAA,CAAKA,EAAC,CAAA,CAAE,GAAA,GAAM,MAAM,IAAA,CAAKA,EAAC,EAAE,GAAG,CAAA;AAAA,EACjC,CAAC,CAAA;AAGD,EAAA,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAAA,EAAAA,KAAK;AAC7B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAKA,EAAC,CAAA,CAAE,OAAO,EAAC;AAC7B,IAAA,IAAA,CAAK,QAAQ,CAAA,EAAA,KAAM;AACjB,MAAA,IAAI,KAAK,EAAE,CAAA,IAAK,IAAA,CAAK,EAAE,EAAE,GAAA,EAAK;AAC5B,QAAA,IAAA,CAAK,EAAE,CAAA,CAAE,GAAA,CAAI,IAAA,CAAKA,EAAC,CAAA;AAAA,MACrB;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,gBAAA,GAAQ,QAAA;;;ACrDf,IAAMN,QAAAA,GAAU,SAAUoF,QAAAA,EAAS;AAEjC,EAAA,MAAM,WAAW,MAAA,CAAO,IAAA,CAAKA,QAAO,CAAA,CAAE,GAAA,CAAI,CAAA9E,EAAAA,KAAK;AAC7C,IAAA,MAAMe,EAAAA,GAAI+D,SAAQ9E,EAAC,CAAA;AACnB,IAAA,MAAM,QAAQ,EAAE,GAAA,EAAK,IAAI,GAAA,CAAIe,GAAE,GAAG,CAAA,EAAG,IAAA,EAAMA,EAAAA,CAAE,MAAM,EAAA,EAAIA,EAAAA,CAAE,EAAA,EAAI,KAAA,EAAOA,GAAE,KAAA,EAAM;AAC5E,IAAA,OAAO,EAAE,IAAIf,EAAAA,EAAG,MAAA,EAAQe,GAAE,EAAA,EAAI,KAAA,EAAO,QAAA,EAAU,EAAC,EAAE;AAAA,EACpD,CAAC,CAAA;AACD,EAAA,MAAM,QAAQ,CAAA,CAAK,QAAQ,CAAA,CAAE,KAAA,GAAQ,QAAA,EAAS;AAC9C,EAAA,OAAO,KAAA,CAAM,IAAI,OAAO,CAAA;AAC1B,CAAA;AAEA,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM;AAC/B,EAAA,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAAf,EAAAA,KAAK;AAC7B,IAAA,IAAA,CAAKA,EAAC,IAAI,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,IAAA,CAAKA,EAAC,CAAC,CAAA;AACnC,IAAA,IAAA,CAAKA,EAAC,EAAE,KAAA,GAAQ,IAAA;AAAA,EAClB,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,OAAA,GAAU,SAAU,IAAA,EAAM,OAAA,EAAS;AAEvC,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AACnC,IAAA,IAAA,GAAO,SAAS,IAAI,CAAA;AAAA,EACtB;AACA,EAAA,IAAA,GAAO,gBAAA,CAAS,MAAM,OAAO,CAAA;AAE7B,EAAA,MAAM8E,WAAU,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,SAAS,IAAI,CAAA;AAG/C,EAAA,MAAM,KAAA,GAAQpF,SAAQoF,QAAO,CAAA;AAE7B,EAAA,MAAM,GAAA,GAAM,YAAI,KAAK,CAAA;AACrB,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,eAAA,GAAQ,OAAA;;;AClCf,IAAO7D,gBAAAA,GAAQ;AAAA,EACb,GAAA,EAAK;AAAA,IACH,MAAA,EAAA,cAAA;AAAA,IACA,KAAA,EAAA,aAAA;AAAA,IACA,OAAA,EAAA,eAAA;AAAA,IACA,KAAA,EAAA0D;AAAA;AAEJ,CAAA;;;ACXA,IAAMrE,SAAAA,GAAU,SAAU,GAAA,EAAK;AAC7B,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AACjD,CAAA;AACA,IAAMe,IAAAA,GAAM;AAAA;AAAA,EAEV,GAAA,EAAK,SAAU,KAAA,EAAO,MAAA,GAAS,IAAI,MAAA,EAAQ;AACzC,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,CAAC,KAAA,EAAO;AACzB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,EAAE,OAAA,EAAAlB,SAAAA,EAAS,SAAA/B,QAAAA,EAAS,KAAA,EAAAqB,QAAM,GAAI,IAAA;AAEpC,IAAA,IAAIrB,aAAY,IAAA,EAAM;AACpB,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,MAAA,IAAU,EAAE,CAAA;AAAA,IACzC;AACA,IAAA,IAAIkC,SAAAA,CAAQ,KAAK,CAAA,EAAG;AAClB,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAA,GAAA,KAAOH,SAAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,OAAO,GAAA,EAAKV,MAAAA,EAAO,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,IAC5E,CAAA,MAAO;AACL,MAAAU,UAAQ,GAAA,CAAI,MAAA,CAAO,OAAO,KAAA,EAAOV,MAAAA,EAAO,QAAQ,MAAM,CAAA;AAAA,IACxD;AAEA,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAGA,OAAA,EAAS,SAAU,KAAA,EAAO,MAAA,GAAS,EAAA,EAAI;AACrC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAA,EAAQ,IAAI,CAAA;AAAA,EACrC,CAAA;AAAA;AAAA,EAGA,KAAA,EAAO,SAAU,KAAA,EAAO,MAAA,EAAQ;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,CAAC,KAAA,EAAO;AACzB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,EAAE,OAAA,EAAAU,SAAAA,EAAS,SAAA/B,QAAAA,EAAS,KAAA,EAAAmC,QAAM,GAAI,IAAA;AAEpC,IAAA,IAAInC,aAAY,IAAA,EAAM;AACpB,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,MAAA,IAAU,EAAE,CAAA;AAAA,IACzC;AACA,IAAA,MAAM,MAAA,GAASmC,OAAM,GAAA,CAAI,MAAA;AACzB,IAAA,IAAID,SAAAA,CAAQ,KAAK,CAAA,EAAG;AAClB,MAAA,KAAA,CAAM,OAAA,CAAQ,SAAOH,SAAAA,CAAQ,GAAA,CAAI,MAAM,KAAA,EAAO,GAAA,EAAK,MAAM,CAAC,CAAA;AAAA,IAC5D,CAAA,MAAO;AACL,MAAAA,SAAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,OAAO,MAAM,CAAA;AAAA,IACxC;AAEA,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA;AAAA,EAGA,KAAA,EAAO,SAAU,GAAA,EAAK;AACpB,IAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAC1B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAA;AAC9B,IAAA,MAAMuE,MAAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAA;AAC/B,IAAA,MAAMK,QAAO,EAAC;AACd,IAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,EAAOlF,EAAAA,KAAM;AAClC,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAMP,EAAAA,KAAM;AACzB,QAAA,IAAI,CAACoF,MAAAA,CAAM,IAAA,EAAM,GAAA,EAAK,MAAM,CAAA,EAAG;AAC7B,UAAAK,MAAK,IAAA,CAAK,CAAClF,IAAGP,EAAAA,EAAGA,EAAAA,GAAI,CAAC,CAAC,CAAA;AAAA,QACzB;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAOyF,KAAI,CAAA;AAC9B,IAAA,OAAO,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,EAC9B;AACF,CAAA;AACA,IAAO,WAAA,GAAQ1D,IAAAA;;;AC1Ef,IAAM,MAAA,GAAS,SAAUZ,KAAAA,EAAM;AAC7B,EAAA,MAAA,CAAO,MAAA,CAAOA,KAAAA,CAAK,SAAA,EAAW,WAAG,CAAA;AACnC,CAAA;AACA,IAAOyB,YAAAA,GAAQ,MAAA;;;ACJf,IAAM8C,QAAAA,GAAU,SAAU,IAAA,EAAM;AAC9B,EAAA,MAAM,EAAE,KAAA,EAAAzE,MAAAA,EAAO,SAAAJ,SAAAA,EAAQ,GAAI,KAAK,KAAA,EAAM;AACtC,EAAA,MAAM,MAAA,GAASI,OAAM,GAAA,CAAI,MAAA;AACzB,EAAA,MAAM,EAAA,GAAKJ,UAAQ,GAAA,CAAI,OAAA;AACvB,EAAA,MAAM,GAAA,GAAM,EAAA,CAAG,IAAA,EAAM,MAAM,CAAA;AAC3B,EAAAI,MAAAA,CAAM,IAAI,MAAA,GAAS,GAAA;AACnB,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAOkD,YAAAA,GAAQ,EAAE,OAAA,EAAAuB,QAAAA,EAAQ;;;ACVzB,IAAM,6BAAa,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,YAAY,CAAC,CAAA;AAEtD,IAAM,UAAA,GAAa,SAAU,IAAA,EAAM,MAAA,EAAQ;AACzC,EAAA,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,CAAC7G,EAAAA,EAAG,CAAA,KAAM;AAEzB,IAAA,IAAI,UAAA,CAAW,IAAIA,EAAC,CAAA,IAAK,CAAC,MAAA,CAAO,cAAA,CAAe,CAAC,CAAA,EAAG;AAClD,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,UAAA,CAAW,IAAI,CAAC,CAAA,IAAK,CAAC,MAAA,CAAO,cAAA,CAAeA,EAAC,CAAA,EAAG;AAClD,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,IAAI,IAAA,GAAO,MAAA,CAAOA,EAAC,CAAA,CAAE,YAAY,EAAC;AAClC,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,GAAO,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,IAAY,EAAC;AAC9B,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,EACjB,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,OAAA,GAAU,SAAU,IAAA,EAAM;AAC9B,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAAsB,MAAAA,EAAM,GAAI,IAAA;AAC5B,EAAA,MAAM,MAAA,GAASA,MAAAA,CAAM,KAAA,CAAM,GAAA,CAAI,MAAA;AAC/B,EAAA,QAAA,CAAS,QAAQ,CAAA,KAAA,KAAS;AACxB,IAAA,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AACpB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AACjC,MAAA,IAAA,CAAK,OAAA,GAAU,UAAA,CAAW,IAAA,EAAM,MAAM,CAAA;AAAA,IACxC,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH,CAAA;AACA,IAAO,eAAA,GAAQ,OAAA;;;ACxBf,IAAO0C,gBAAAA,GAAQ;AAAA,EACb,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,EAAE,MAAA,EAAQ,EAAC;AAAE,GACpB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAA;AAAA,GACF;AAAA,EACA,OAAA,EAAAlB,gBAAAA;AAAA,EACA,GAAA,EAAAiB,YAAAA;AAAA,EACA,GAAA,EAAAuB;AACF,CAAA;;;ACfA,IAAM,SAAA,GAAY,kDAAA;AAElB,IAAM,UAAA,GAAa,iDAAA;AACnB,IAAM,OAAA,GAAU,iBAAA;AAGhB,IAAM,UAAA,GAAa,SAAU,IAAA,EAAM;AACjC,EAAA,MAAM7D,OAAM,EAAC;AAEb,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,EAAA,KAAA,IAASN,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,QAAQA,EAAAA,EAAAA,EAAK;AAErC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAMA,EAAC,CAAA,CAAE,MAAM,SAAS,CAAA;AACpC,IAAA,KAAA,IAASyB,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,CAAI,QAAQA,EAAAA,EAAAA,EAAK;AAEnC,MAAA,IAAI,GAAA,CAAIA,EAAAA,GAAI,CAAC,CAAA,IAAK,UAAA,CAAW,IAAA,CAAK,GAAA,CAAIA,EAAAA,GAAI,CAAC,CAAC,CAAA,KAAM,IAAA,EAAM;AACtD,QAAA,GAAA,CAAIA,EAAC,CAAA,IAAK,GAAA,CAAIA,EAAAA,GAAI,CAAC,CAAA;AACnB,QAAA,GAAA,CAAIA,EAAAA,GAAI,CAAC,CAAA,GAAI,EAAA;AAAA,MACf;AACA,MAAA,IAAI,GAAA,CAAIA,EAAC,CAAA,KAAM,EAAA,EAAI;AACjB,QAAAnB,IAAAA,CAAI,IAAA,CAAK,GAAA,CAAImB,EAAC,CAAC,CAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAOnB,IAAAA;AACT,CAAA;AACA,IAAO,oBAAA,GAAQ,UAAA;;;AC3Bf,IAAM,SAAA,GAAY,8DAAA;AAClB,IAAM,YAAA,GAAe,IAAA;AAErB,IAAM,QAAA,GAAW,SAAU,MAAA,EAAQ;AACjC,EAAA,MAAMqF,UAAS,EAAC;AAChB,EAAA,KAAA,IAAS3F,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,MAAA,CAAO,QAAQA,EAAAA,EAAAA,EAAK;AACtC,IAAA,MAAMJ,EAAAA,GAAI,OAAOI,EAAC,CAAA;AAClB,IAAA,IAAIJ,EAAAA,KAAM,MAAA,IAAaA,EAAAA,KAAM,EAAA,EAAI;AAC/B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,CAAa,KAAKA,EAAC,CAAA,KAAM,SAAS,SAAA,CAAU,IAAA,CAAKA,EAAC,CAAA,KAAM,KAAA,EAAO;AAEjE,MAAA,IAAI+F,OAAAA,CAAOA,OAAAA,CAAO,MAAA,GAAS,CAAC,CAAA,EAAG;AAC7B,QAAAA,OAAAA,CAAOA,OAAAA,CAAO,MAAA,GAAS,CAAC,CAAA,IAAK/F,EAAAA;AAC7B,QAAA;AAAA,MACF,CAAA,MAAA,IAAW,MAAA,CAAOI,EAAAA,GAAI,CAAC,CAAA,EAAG;AAExB,QAAA,MAAA,CAAOA,KAAI,CAAC,CAAA,GAAIJ,EAAAA,GAAI,MAAA,CAAOI,KAAI,CAAC,CAAA;AAChC,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA2F,OAAAA,CAAO,KAAK/F,EAAC,CAAA;AAAA,EACf;AACA,EAAA,OAAO+F,OAAAA;AACT,CAAA;AACA,IAAO,oBAAA,GAAQ,QAAA;;;AC3Bf,IAAM,UAAA,GAAa,SAAUzF,EAAAA,EAAG;AAC9B,EAAA,OAAO,OAAA,CAAQA,EAAAA,CAAE,KAAA,CAAM,KAAK,CAAC,CAAA;AAC/B,CAAA;AAGA,IAAM,UAAA,GAAa,SAAUyF,OAAAA,EAAQxF,MAAAA,EAAO;AAC1C,EAAA,MAAMyF,WAAAA,GAAazF,MAAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,UAAA;AAC9C,EAAA,MAAM,UAAUA,MAAAA,CAAM,KAAA,CAAM,GAAA,CAAI,aAAA,wBAAqB,GAAA,EAAI;AAEzD,EAAA,MAAM,YAAY,EAAC;AACnB,EAAA,KAAA,IAASH,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI2F,OAAAA,CAAO,QAAQ3F,EAAAA,EAAAA,EAAK;AACtC,IAAA,MAAME,EAAAA,GAAIyF,QAAO3F,EAAC,CAAA;AAElB,IAAA,IAAI2F,OAAAA,CAAO3F,EAAAA,GAAI,CAAC,CAAA,IAAK,CAAC4F,WAAAA,CAAW1F,EAAAA,EAAG,OAAO,CAAA,IAAK,CAAC,UAAA,CAAWA,EAAC,CAAA,EAAG;AAC9D,MAAAyF,OAAAA,CAAO3F,KAAI,CAAC,CAAA,GAAIE,MAAKyF,OAAAA,CAAO3F,EAAAA,GAAI,CAAC,CAAA,IAAK,EAAA,CAAA;AAAA,IACxC,CAAA,MAAA,IAAWE,EAAAA,IAAKA,EAAAA,CAAE,MAAA,GAAS,CAAA,EAAG;AAE5B,MAAA,SAAA,CAAU,KAAKA,EAAC,CAAA;AAChB,MAAAyF,OAAAA,CAAO3F,EAAC,CAAA,GAAI,EAAA;AAAA,IACd;AAAA,EACF;AACA,EAAA,OAAO,SAAA;AACT,CAAA;AACA,IAAO,mBAAA,GAAQ,UAAA;;;ACnBf,IAAM,SAAA,GAAY,GAAA;AAGlB,IAAM,KAAA,GAAQ;AAAA,EACZ,GAAA,EAAU,GAAA;AAAA;AAAA,EACV,QAAA,EAAU,QAAA;AAAA;AAAA;AAAA,EAEV,QAAA,EAAU,QAAA;AAAA;AAAA;AAAA,EAEV,QAAA,EAAU,QAAA;AAAA;AAAA;AAAA,EAEV,QAAA,EAAU,QAAA;AAAA;AAAA,EACV,QAAA,EAAU,QAAA;AAAA;AAAA,EACV,QAAA,EAAU,QAAA;AAAA;AAAA,EACV,MAAA,EAAU,MAAA;AAAA;AAAA,EACV,QAAA,EAAU,QAAA;AAAA;AAAA,EACV,QAAA,EAAU,QAAA;AAAA;AAAA,EACV,QAAA,EAAU,QAAA;AAAA;AAAA,EACV,QAAA,EAAU,QAAA;AAAA;AAAA,EACV,QAAA,EAAU,QAAA;AAAA;AAAA;AAAA,EAEV,QAAA,EAAU;AAAA;AACZ,CAAA;AACA,IAAM,SAAA,GAAY,MAAA,CAAO,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GAAI,GAAA,EAAK,GAAG,CAAA;AACrE,IAAM,UAAA,GAAa,MAAA,CAAO,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GAAI,GAAA,EAAK,GAAG,CAAA;AAExE,IAAM,WAAA,GAAc,SAAU,GAAA,EAAK;AACjC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAMS,EAAAA,GAAI,GAAA,CAAI,KAAA,CAAM,UAAU,CAAA;AAC9B,EAAA,IAAIA,EAAAA,KAAM,IAAA,IAAQA,EAAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAIA,IAAM,UAAA,GAAa,SAAU,MAAA,EAAQ;AACnC,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,KAAA,IAAST,KAAI,CAAA,EAAGA,EAAAA,GAAI,MAAA,CAAO,MAAA,EAAQA,MAAK,CAAA,EAAG;AACzC,IAAA,MAAMsD,MAAAA,GAAQ,OAAOtD,EAAC,CAAA;AAEtB,IAAA,MAAMS,EAAAA,GAAI6C,MAAAA,CAAM,KAAA,CAAM,SAAS,CAAA;AAC/B,IAAA,IAAI7C,EAAAA,KAAM,IAAA,IAAQA,EAAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AAGhC,MAAA,IAAI,WAAA,CAAY,MAAA,CAAOT,EAAAA,GAAI,CAAC,CAAC,CAAA,IAAK,MAAA,CAAOA,EAAAA,GAAI,CAAC,CAAA,CAAE,MAAA,GAAS,SAAA,EAAW;AAClE,QAAA,MAAA,CAAOA,EAAC,CAAA,IAAK,MAAA,CAAOA,EAAAA,GAAI,CAAC,CAAA;AACzB,QAAA,GAAA,CAAI,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAC,CAAA;AAClB,QAAA,MAAA,CAAOA,EAAAA,GAAI,CAAC,CAAA,GAAI,EAAA;AAChB,QAAAA,EAAAA,IAAK,CAAA;AACL,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,WAAA,CAAY,MAAA,CAAOA,EAAAA,GAAI,CAAC,CAAC,CAAA,EAAG;AAC9B,QAAA,MAAM,QAAQ,MAAA,CAAOA,EAAAA,GAAI,CAAC,CAAA,GAAI,MAAA,CAAOA,KAAI,CAAC,CAAA;AAE1C,QAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,UAAA,MAAA,CAAOA,EAAC,CAAA,IAAK,KAAA;AACb,UAAA,GAAA,CAAI,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAC,CAAA;AAClB,UAAA,MAAA,CAAOA,EAAAA,GAAI,CAAC,CAAA,GAAI,EAAA;AAChB,UAAA,MAAA,CAAOA,EAAAA,GAAI,CAAC,CAAA,GAAI,EAAA;AAChB,UAAAA,EAAAA,IAAK,CAAA;AACL,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAC,CAAA;AAAA,EACpB;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,mBAAA,GAAQ,UAAA;;;AC7Ef,IAAM,OAAA,GAAU,GAAA;AAIhB,IAAM,OAAA,GAAU,KAAA;AAChB,IAAM,SAAA,GAAY,KAAA;AAClB,IAAM,WAAA,GAAc,SAAU,MAAA,EAAQ;AACpC,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,KAAA,IAASA,KAAI,CAAA,EAAGA,EAAAA,GAAI,MAAA,CAAO,MAAA,EAAQA,MAAK,CAAA,EAAG;AACzC,IAAA,MAAMsD,MAAAA,GAAQ,OAAOtD,EAAC,CAAA;AACtB,IAAA,MAAMS,EAAAA,GAAI6C,MAAAA,CAAM,KAAA,CAAM,OAAO,CAAA;AAC7B,IAAA,IAAI7C,EAAAA,KAAM,IAAA,IAAQA,EAAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AAEhC,MAAA,IAAI,MAAA,CAAOT,KAAI,CAAC,CAAA,IAAK,OAAOA,EAAAA,GAAI,CAAC,CAAA,CAAE,MAAA,GAAS,OAAA,EAAS;AACnD,QAAA,MAAM6F,MAAK,MAAA,CAAO7F,EAAAA,GAAI,CAAC,CAAA,CAAE,MAAM,SAAS,CAAA;AACxC,QAAA,IAAI6F,GAAAA,KAAO,IAAA,IAAQpF,EAAAA,CAAE,MAAA,KAAW,CAAA,IAAK,CAAC,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAOT,EAAAA,GAAI,CAAC,CAAC,CAAA,EAAG;AAEjE,UAAA,MAAA,CAAOA,EAAC,CAAA,IAAK,MAAA,CAAOA,EAAAA,GAAI,CAAC,CAAA;AACzB,UAAA,GAAA,CAAI,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAC,CAAA;AAClB,UAAA,MAAA,CAAOA,EAAAA,GAAI,CAAC,CAAA,GAAI,EAAA;AAChB,UAAAA,EAAAA,IAAK,CAAA;AACL,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAC,CAAA;AAAA,EACpB;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,oBAAA,GAAQ,WAAA;;;ACrBf,IAAM8F,aAAAA,GAAe,IAAA;AACrB,IAAM,eAAA,GAAkB,MAAA;AAExB,IAAM,cAAA,GAAiB,SAAU,IAAA,EAAM3F,MAAAA,EAAO;AAC5C,EAAA,IAAA,GAAO,IAAA,IAAQ,EAAA;AACf,EAAA,IAAA,GAAO,OAAO,IAAI,CAAA;AAElB,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA,KAAS,YAAY2F,aAAAA,CAAa,IAAA,CAAK,IAAI,CAAA,KAAM,KAAA,EAAO;AAC1E,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAE/B,EAAA,MAAM,MAAA,GAAS,qBAAY,IAAI,CAAA;AAE/B,EAAA,IAAI,SAAA,GAAY,qBAAY,MAAM,CAAA;AAElC,EAAA,SAAA,GAAY,mBAAA,CAAW,WAAW3F,MAAK,CAAA;AAEvC,EAAA,SAAA,GAAY,oBAAW,SAAS,CAAA;AAEhC,EAAA,SAAA,GAAY,qBAAY,SAAS,CAAA;AAEjC,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,OAAO,CAAC,IAAI,CAAA;AAAA,EACd;AAGA,EAAA,KAAA,IAASH,KAAI,CAAA,EAAGA,EAAAA,GAAI,SAAA,CAAU,MAAA,EAAQA,MAAK,CAAA,EAAG;AAC5C,IAAA,MAAM,EAAA,GAAK,SAAA,CAAUA,EAAC,CAAA,CAAE,MAAM,eAAe,CAAA;AAC7C,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,SAAA,CAAUA,EAAAA,GAAI,CAAC,CAAA,IAAK,EAAA,CAAG,CAAC,CAAA;AACxB,MAAA,SAAA,CAAUA,EAAC,CAAA,GAAI,SAAA,CAAUA,EAAC,CAAA,CAAE,OAAA,CAAQ,iBAAiB,EAAE,CAAA;AAAA,IACzD;AAAA,EACF;AACA,EAAA,OAAO,SAAA;AACT,CAAA;AACA,IAAO,iBAAA,GAAQ,cAAA;;;AC7Cf,IAAMwC,UAAAA,GAAY,SAAU,GAAA,EAAKvB,MAAAA,EAAO;AACtC,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,EAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AACrB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAE,QAAA,EAAA4C,SAAAA,EAAU,QAAA,EAAAkC,SAAAA,KAAa9E,MAAAA,CAAM,GAAA;AAGrC,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,KAAW,CAAA,IAAK,SAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACpD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI4C,SAAAA,CAAS,cAAA,CAAe,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACrC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,CAAM,CAAC,IAAI,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK,CAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC/C,EAAA,IAAIkC,SAAAA,CAAS,cAAA,CAAe,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACrC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,2DAAA;AACZ,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AAC1B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,4DAAA;AACb,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,IAAMC,aAAAA,GAAe,SAAU,IAAA,EAAM;AACnC,EAAA,MAAM,MAAM,EAAC;AAEb,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAClC,EAAA,IAAI,SAAA,GAAY,GAAA;AAChB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,EAAA,IAAI,KAAA,IAAS,KAAA,CAAM,CAAC,CAAA,EAAG;AACrB,IAAA,SAAA,GAAY,KAAA;AAAA,EACd;AACA,EAAA,KAAA,IAASvE,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,OAAA,CAAQ,QAAQA,EAAAA,EAAAA,EAAK;AACvC,IAAA,IAAIA,EAAAA,KAAM,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQA,EAAC,CAAC,CAAA;AAAA,IACrB,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQA,EAAC,CAAA,GAAI,SAAS,CAAA;AAAA,IACjC;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT,CAAA;;;AChDA,IAAM,aAAA,GAAgB,SAAU,GAAA,EAAK;AACnC,EAAA,MAAM,UAAA,GAAa,kDAAA;AACnB,EAAA,MAAM,QAAA,GAAW,6BAAA;AACjB,EAAA,KAAA,IAASzB,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAI,MAAA,GAAS,CAAA,EAAGA,MAAK,CAAA,EAAG;AAC1C,IAAA,IAAI,IAAIA,EAAAA,GAAI,CAAC,CAAA,IAAK,UAAA,CAAW,KAAK,GAAA,CAAIA,EAAC,CAAC,CAAA,IAAK,SAAS,IAAA,CAAK,GAAA,CAAIA,EAAAA,GAAI,CAAC,CAAC,CAAA,EAAG;AACtE,MAAA,GAAA,CAAIA,EAAC,CAAA,GAAI,GAAA,CAAIA,EAAC,CAAA,GAAI,GAAA,CAAIA,KAAI,CAAC,CAAA;AAC3B,MAAA,GAAA,CAAIA,EAAAA,GAAI,CAAC,CAAA,GAAI,IAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,cAAA,GAAQ,aAAA;;;ACbf,IAAM,OAAA,GAAU,qBAAA;AAGhB,IAAM,cAAA,GAAiB,SAAU,GAAA,EAAK;AACpC,EAAA,KAAA,IAASA,KAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,CAAI,MAAA,GAAS,GAAGA,EAAAA,EAAAA,EAAK;AACvC,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAIA,EAAC,CAAC,CAAA,EAAG;AACxB,MAAA,GAAA,CAAIA,EAAAA,GAAI,CAAC,CAAA,IAAK,GAAA,CAAIA,EAAC,CAAA,GAAI,GAAA,CAAIA,KAAI,CAAC,CAAA;AAChC,MAAA,GAAA,CAAIA,EAAC,CAAA,GAAI,IAAA;AACT,MAAA,GAAA,CAAIA,EAAAA,GAAI,CAAC,CAAA,GAAI,IAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,eAAA,GAAQ,cAAA;;;ACTf,IAAM,QAAA,GAAW,IAAA;AACjB,IAAM,UAAA,GAAa,UAAA;AACnB,IAAM,WAAA,GAAc,OAAA;AAEpB,IAAI,OAAA,GAAU;AAAA,EACZ,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA;AACA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAACqE,EAAAA,EAAGnE,EAAAA,KAAM;AACjC,EAAAmE,EAAAA,CAAEnE,EAAC,CAAA,GAAI,IAAA;AACP,EAAA,OAAOmE,EAAAA;AACT,CAAA,EAAG,EAAE,CAAA;AAEL,IAAMrD,SAAAA,GAAU,SAAU,GAAA,EAAK;AAC7B,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AACjD,CAAA;AAGA,IAAM,UAAA,GAAa,SAAU,GAAA,EAAKC,MAAAA,EAAO;AACvC,EAAA,IAAI,SAAS,EAAC;AACd,EAAA,IAAI,MAAM,EAAC;AAEX,EAAA,GAAA,GAAM,GAAA,IAAO,EAAA;AACb,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,GAAA,GAAM,OAAO,GAAG,CAAA;AAAA,EAClB;AACA,EAAA,IAAID,SAAAA,CAAQ,GAAG,CAAA,EAAG;AAChB,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,WAAW,CAAA;AACnC,EAAA,KAAA,IAAShB,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,KAAA,CAAM,QAAQA,EAAAA,EAAAA,EAAK;AAErC,IAAA,IAAIwC,WAAU,KAAA,CAAMxC,EAAC,CAAA,EAAGiB,MAAK,MAAM,IAAA,EAAM;AACvC,MAAA,GAAA,GAAM,IAAI,MAAA,CAAO+E,aAAAA,CAAa,KAAA,CAAMhG,EAAC,CAAC,CAAC,CAAA;AACvC,MAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,KAAA,CAAMA,EAAC,CAAC,CAAA;AAAA,EACnB;AAEA,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,KAAA,IAASA,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,CAAI,QAAQA,EAAAA,EAAAA,EAAK;AACnC,IAAA,MAAM,IAAA,GAAO,IAAIA,EAAC,CAAA;AAElB,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,KAAM,QAAQ,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA,KAAM,KAAA,IAAS,UAAA,CAAW,IAAA,CAAK,IAAI,MAAM,KAAA,EAAO;AAE7G,MAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,IAAK,KAAA;AAC7B,QAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,MAClB,CAAA,MAAO;AAEL,QAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,MAC1B;AACA,MAAA,KAAA,GAAQ,EAAA;AAAA,IACV,CAAA,MAAO;AACL,MAAA,KAAA,IAAS,IAAA;AAAA,IACX;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,EAAA;AAAA,IACd;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,IAAK,KAAA;AAAA,EAC/B;AAEA,EAAA,MAAA,GAAS,gBAAe,MAAM,CAAA;AAC9B,EAAA,MAAA,GAAS,eAAc,MAAM,CAAA;AAE7B,EAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAAJ,EAAAA,KAAKA,EAAC,CAAA;AAC7B,EAAA,OAAO,MAAA;AACT,CAAA;AACA,IAAO,aAAA,GAAQ,UAAA;;;AC3Ff,IAAM,QAAA,GAAW,aAAA;AACjB,IAAM,QAAA,GAAW,kCAAA;AACjB,IAAM,UAAA,GAAa,qBAAA;AACnB,IAAM,OAAA,GAAU,WAAA;AAEhB,IAAM,oBAAA,GAAuB,SAAU,GAAA,EAAKqB,MAAAA,EAAO;AAEjD,EAAA,MAAM,EAAE,gBAAAgF,eAAAA,EAAgB,eAAA,EAAAC,kBAAiB,SAAA,EAAAC,UAAAA,KAAclF,MAAAA,CAAM,GAAA;AAC7D,EAAA,IAAI,QAAA,GAAW,GAAA;AACf,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAG5B,EAAA,IAAIkF,UAAAA,CAAU,cAAA,CAAe,GAAA,CAAI,IAAA,EAAM,CAAA,EAAG;AACxC,IAAA,OAAO,EAAE,GAAA,EAAK,GAAA,CAAI,MAAK,EAAG,GAAA,EAAK,MAAM,GAAA,EAAI;AAAA,EAC3C;AAGA,EAAA,IAAI,MAAM,KAAA,CAAM,MAAA;AAChB,EAAA,KAAA,IAASnG,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,EAAKA,MAAK,CAAA,EAAG;AAC/B,IAAA,MAAME,EAAAA,GAAI,MAAM,CAAC,CAAA;AAEjB,IAAA,IAAI+F,eAAAA,CAAe/F,EAAC,CAAA,KAAM,IAAA,EAAM;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAKA,EAAAA,KAAM,OAAOA,EAAAA,KAAM,GAAA,KAAQ,SAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACvD,MAAA;AAAA,IACF;AAEA,IAAA,IAAIA,EAAAA,KAAM,GAAA,IAAOA,EAAAA,CAAE,MAAA,KAAW,CAAA,IAAK,SAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AAC1D,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,IAAA,CAAKA,EAAC,KAAK,QAAA,CAAS,IAAA,CAAKA,EAAC,CAAA,EAAG;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,GAAA,IAAO,MAAM,KAAA,EAAM;AAAA,EACrB;AAGA,EAAA,GAAA,GAAM,KAAA,CAAM,MAAA;AACZ,EAAA,KAAA,IAASF,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,EAAKA,MAAK,CAAA,EAAG;AAC/B,IAAA,MAAME,EAAAA,GAAI,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAEhC,IAAA,IAAIgG,gBAAAA,CAAgBhG,EAAC,CAAA,KAAM,IAAA,EAAM;AAC/B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,IAAA,CAAKA,EAAC,KAAK,QAAA,CAAS,IAAA,CAAKA,EAAC,CAAA,EAAG;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,IAAIA,OAAM,GAAA,IAAO,UAAA,CAAW,IAAA,CAAK,QAAQ,MAAM,IAAA,EAAM;AACnD,MAAA;AAAA,IACF;AAEA,IAAA,IAAIA,OAAM,GAAA,IAAO,OAAA,CAAQ,IAAA,CAAK,QAAQ,MAAM,IAAA,EAAM;AAChD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,GAAO,KAAA,CAAM,KAAI,GAAI,IAAA;AAAA,EACvB;AACA,EAAA,GAAA,GAAM,KAAA,CAAM,KAAK,EAAE,CAAA;AAEnB,EAAA,IAAI,QAAQ,EAAA,EAAI;AAEd,IAAA,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,CAAA8C,MAAAA,KAAS;AAC1C,MAAA,IAAA,GAAOA,MAAAA,IAAS,EAAA;AAChB,MAAA,OAAO,EAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,GAAA,GAAM,QAAA;AACN,IAAA,GAAA,GAAM,EAAA;AAAA,EACR;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAK;AAC1B,CAAA;AACA,IAAO,gBAAA,GAAQ,oBAAA;;;AC/Ef,IAAM,SAAA,GAAY,CAAC,GAAA,EAAK/B,MAAAA,KAAU;AAEhC,EAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAK,MAAK,GAAI,gBAAA,CAAS,KAAKA,MAAK,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,IAAA,EAAM,GAAA;AAAA,IACN,GAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA,sBAAU,GAAA;AAAI,GAChB;AACA,EAAA,OAAO,MAAA;AACT,CAAA;AACA,IAAOmF,mBAAAA,GAAQ,SAAA;;;ACZf,IAAM,WAAA,GAAc,SAAU,GAAA,EAAKjG,MAAAA,EAAO;AACxC,EAAA,MAAMkG,QAAAA,GAAUlG,MAAAA,CAAM,KAAA,CAAM,GAAA,CAAI,WAAW,EAAC;AAC5C,EAAA,GAAA,GAAM,GAAA,IAAO,EAAA;AACb,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AAC1B,EAAA,KAAA,CAAM,OAAA,CAAQ,CAACP,EAAAA,EAAGI,EAAAA,KAAM;AACtB,IAAA,IAAIqG,QAAAA,CAAQzG,EAAC,CAAA,EAAG;AACd,MAAA,KAAA,CAAMI,EAAC,CAAA,GAAIqG,QAAAA,CAAQzG,EAAC,CAAA;AAAA,IACtB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,KAAA,CAAM,KAAK,EAAE,CAAA;AACtB,CAAA;AACA,IAAO,eAAA,GAAQ,WAAA;;;ACXf,IAAM,KAAA,GAAQ,SAAU,GAAA,EAAK;AAC3B,EAAA,GAAA,GAAM,GAAA,IAAO,EAAA;AACb,EAAA,GAAA,GAAM,IAAI,WAAA,EAAY;AACtB,EAAA,GAAA,GAAM,IAAI,IAAA,EAAK;AACf,EAAA,MAAM,QAAA,GAAW,GAAA;AAEjB,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAEjC,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAA;AAElC,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA;AAEhC,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,KAAM,KAAA,EAAO;AAC/B,IAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAChC,IAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA;AACrC,IAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAAA,EAClC;AAEA,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,wBAAA,EAA0B,EAAE,CAAA;AAE9C,EAAA,GAAA,GAAM,IAAI,IAAA,EAAK;AAEf,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,GAAA,GAAM,QAAA;AAAA,EACR;AAEA,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,kBAAA,EAAoB,MAAM,CAAA;AAC5C,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,eAAA,GAAQ,KAAA;;;AC7Bf,IAAM,aAAA,GAAgB,qBAAA;AACtB,IAAM,gBAAA,GAAmB,aAAA;AACzB,IAAM,eAAA,GAAkB,mBAAA;AACxB,IAAM,gBAAA,GAAmB,qBAAA;AAEzB,IAAM,SAAA,GAAY,SAAU,GAAA,EAAK;AAE/B,EAAA,IAAI,aAAA,CAAc,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,eAAA,CAAgB,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AACtC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,IAAM,SAAA,GAAY,SAAU,GAAA,EAAK;AAC/B,EAAA,IAAI,SAAA,CAAU,GAAG,CAAA,EAAG;AAClB,IAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AACA,IAAO,gBAAA,GAAQ,SAAA;;;AC5Bf,IAAM,SAAA,GAAY,SAAU,IAAA,EAAMO,MAAAA,EAAO;AACvC,EAAA,MAAMiE,YAAAA,GAAcjE,MAAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,WAAA;AAEtC,EAAA,IAAI,GAAA,GAAM,KAAK,IAAA,IAAQ,EAAA;AACvB,EAAA,GAAA,GAAM,gBAAQ,GAAG,CAAA;AAEjB,EAAA,GAAA,GAAMiE,YAAAA,CAAY,KAAKjE,MAAK,CAAA;AAC5B,EAAA,GAAA,GAAM,iBAAW,GAAG,CAAA;AACpB,EAAA,IAAA,CAAK,MAAA,GAAS,GAAA;AAChB,CAAA;AACA,IAAO,cAAA,GAAQ,SAAA;;;ACXf,IAAMmG,MAAAA,GAAQ,SAAU,KAAA,EAAOnG,MAAAA,EAAO;AACpC,EAAA,MAAM,EAAE,OAAA,EAAAU,SAAAA,EAAS,KAAA,EAAAI,QAAM,GAAId,MAAAA;AAC3B,EAAA,MAAM,EAAE,cAAA,EAAAoG,eAAAA,EAAgB,YAAY,eAAA,EAAgB,GAAI1F,UAAQ,GAAA,CAAI,QAAA;AACpE,EAAA,KAAA,GAAQ,KAAA,IAAS,EAAA;AAEjB,EAAA,MAAM,SAAA,GAAY0F,eAAAA,CAAe,KAAA,EAAOpG,MAAK,CAAA;AAE7C,EAAA,KAAA,GAAQ,SAAA,CAAU,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC7B,IAAA,IAAI,KAAA,GAAQ,UAAA,CAAW,GAAA,EAAKc,MAAK,CAAA;AAEjC,IAAA,KAAA,GAAQ,MAAM,GAAA,CAAI,CAAAxB,OAAK,eAAA,CAAgBA,EAAAA,EAAGwB,MAAK,CAAC,CAAA;AAEhD,IAAA,KAAA,CAAM,OAAA,CAAQ,CAACxB,EAAAA,KAAM;AACnB,MAAA,cAAA,CAAUA,IAAGU,MAAK,CAAA;AAAA,IACpB,CAAC,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACT,CAAA;AACA,IAAOqG,cAAAA,GAAQF,MAAAA;;;ACtBf,IAAMG,UAAAA,GAAY,kBAAA;AAClB,IAAM,UAAA,GAAa,sBAAA;AACnB,IAAMC,UAAAA,GAAY,QAAA;AAClB,IAAM,SAAA,GAAY,OAAA;AAClB,IAAM,QAAA,GAAW,YAAA;AAGjB,IAAM,UAAA,GAAa,SAAU,GAAA,EAAK,OAAA,EAAS;AAEzC,EAAA,IAAIA,UAAAA,CAAU,IAAA,CAAK,GAAG,CAAA,KAAM,KAAA,EAAO;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAID,UAAAA,CAAU,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AAChC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAI,MAAA,KAAW,CAAA,IAAK,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,EAAG;AAC1C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,yCAAA,EAA2C,EAAE,CAAA;AACrE,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,MAAM,WAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,EAAE,WAAA,EAAY;AAErD,EAAA,IAAI,OAAA,CAAQ,eAAe,QAAQ,CAAA,KAAM,QAAQ,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AAC7E,IAAA,OAAO,KAAA;AAAA,EACT;AAKA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,mBAAA,GAAQ,UAAA;;;AC9Bf,IAAO9E,gBAAAA,GAAQ;AAAA,EACb,GAAA,EAAK;AAAA,IACH,WAAA,EAAA,eAAA;AAAA,IACA,QAAA,EAAU;AAAA,MACR,cAAA,EAAA,iBAAA;AAAA,MACA,UAAA,EAAA,mBAAA;AAAA,MACA,UAAA,EAAA,aAAA;AAAA,MACA,eAAA,EAAAyE,mBAAAA;AAAA,MACA,UAAA,EAAAI;AAAA;AACF;AAEJ,CAAA;;;AClBA,IAAM,OAAA,GAAU;AAAA,EACd,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,IAAA;AAAA,EACL,GAAA,EAAK,SAAA;AAAA,EACL,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;AACA,IAAO,eAAA,GAAQ,OAAA;;;ACPf,IAAO,YAAA,GAAQ;AAAA,EACb,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AAAA;AACF,CAAA;;;ACpDA,IAAO,kBAAA,GAAQ;AAAA,EACb,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AAAA;AAAA;AAGF,CAAA;;;AC9CA,IAAO,cAAA,GAAQ,CAAC,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,OAAO,KAAK,CAAA;;;ACAnG,IAAO,aAAA,GAAQ;AAAA,EACb,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA;;;AClBA,IAAO,qBAAA,GAAQ,CAAC,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAA,EAAQ,KAAA,EAAO,OAAO,IAAI,CAAA;;;ACAlE,IAAO,cAAA,GAAQ;AAAA,EACb,IAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA;AAAA,EAEA,MAAA;AAAA,EACA,KAAA;AAAA;AAAA,EAEA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EAEA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA;;;AC9CA,IAAO,aAAA,GAAQ;AAAA,EACb,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA;AAAA,EAEA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA;AAAA,EAEA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA;AAAA,EAEA,OAAA;AAAA;AAAA,EACA;AACF,CAAA;;;AChCA,IAAM,IAAA,GAAO;AAAA,EACX,CAAC,YAAI,CAAA;AAAA,EACL,CAAC,eAAO,MAAM,CAAA;AAAA,EACd,CAAC,eAAO,MAAM,CAAA;AAAA,EACd,CAAC,oBAAY,WAAW,CAAA;AAAA,EACxB,CAAC,gBAAQ,OAAO,CAAA;AAAA,EAChB,CAAC,uBAAe,cAAc,CAAA;AAAA,EAC9B,CAAC,gBAAQ,OAAO;AAClB,CAAA;AAEA,IAAM,gBAAgB,EAAC;AAEvB,IAAMpD,WAAU,EAAC;AAEjB,IAAA,CAAK,OAAA,CAAQ,CAAAvE,EAAAA,KAAK;AAChB,EAAAA,EAAAA,CAAE,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAA,KAAK;AAEhB,IAAA,aAAA,CAAc,CAAC,CAAA,GAAI,IAAA;AAEnB,IAAAuE,QAAAA,CAAQ,CAAC,CAAA,GAAI,cAAA;AACb,IAAA,IAAIvE,EAAAA,CAAE,CAAC,CAAA,KAAM,MAAA,EAAW;AACtB,MAAAuE,QAAAA,CAAQ,CAAC,CAAA,GAAI,CAACA,SAAQ,CAAC,CAAA,EAAGvE,EAAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IAChC;AAAA,EACF,CAAC,CAAA;AACH,CAAC,CAAA;;;AC/BD,IAAO,gBAAA,GAAQ;AAAA,EACb,MAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaF,CAAA,CAAE,MAAA,CAAO,CAACwF,EAAAA,EAAG,GAAA,KAAQ;AACnB,EAAAA,EAAAA,CAAE,GAAG,CAAA,GAAI,IAAA;AACT,EAAA,OAAOA,EAAAA;AACT,CAAA,EAAG,EAAE,CAAA;;;AC3CL,IAAO,gBAAA,GAAQ;AAAA,EACb,MAAA,EAAQ,IAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,MAAA,EAAQ,IAAA;AAAA,EACR,MAAA,EAAQ,IAAA;AAAA,EACR,OAAA,EAAS,IAAA;AAAA,EACT,MAAA,EAAQ,IAAA;AAAA,EACR,WAAA,EAAa;AAAA;AAEf,CAAA;;;ACPA,IAAM,OAAA,GAAU;AAAA,EACd,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,YAAA;AAAA,EACL,GAAA,EAAK,2BAAA;AAAA,EACL,GAAA,EAAK,gCAAA;AAAA,EACL,GAAA,EAAK,cAAA;AAAA,EACL,CAAA,EAAG,wRAAA;AAAA,EACH,CAAA,EAAG,8IAAA;AAAA,EACH,CAAA,EAAG,8KAAA;AAAA,EACH,CAAA,EAAG,4DAAA;AAAA,EACH,CAAA,EAAG,kRAAA;AAAA,EACH,CAAA,EAAG,wDAAA;AAAA,EACH,CAAA,EAAG,4FAAA;AAAA,EACH,CAAA,EAAG,wJAAA;AAAA,EACH,CAAA,EAAG,kBAAA;AAAA,EACH,CAAA,EAAG,qLAAA;AAAA,EACH,CAAA,EAAG,wDAAA;AAAA,EACH,CAAA,EAAG,4IAAA;AAAA,EACH,CAAA,EAAG,0HAAA;AAAA,EACH,CAAA,EAAG,4CAAA;AAAA,EACH,CAAA,EAAG,oPAAA;AAAA,EACH,CAAA,EAAG,8WAAA;AAAA,EACH,CAAA,EAAG,kEAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,gIAAA;AAAA,EACH,CAAA,EAAG,4FAAA;AAAA,EACH,CAAA,EAAG,0HAAA;AAAA,EACH,CAAA,EAAG,oPAAA;AAAA,EACH,CAAA,EAAG,gCAAA;AAAA,EACH,CAAA,EAAG,sFAAA;AAAA,EACH,CAAA,EAAG,8EAAA;AAAA,EACH,CAAA,EAAG,0NAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEA,IAAM,UAAU,EAAC;AACjB,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,OAAA,CAAQ,SAAU3D,EAAAA,EAAG;AACxC,EAAA,OAAA,CAAQA,EAAC,CAAA,CAAE,KAAA,CAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,SAAUd,EAAAA,EAAG;AACxC,IAAA,OAAA,CAAQA,EAAC,CAAA,GAAIc,EAAAA;AAAA,EACf,CAAC,CAAA;AACH,CAAC,CAAA;AACD,IAAOiG,gBAAAA,GAAQ,OAAA;;;AC1Cf,IAAM,cAAA,GAAiB;AAAA,EACrB,GAAA,EAAK,IAAA;AAAA;AAAA,EACL,GAAA,EAAK,IAAA;AAAA;AAAA,EACL,GAAA,EAAK,IAAA;AAAA;AAAA,EACL,MAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKL,QAAA,EAAU,IAAA;AAAA,EACV,QAAA,EAAU,IAAA;AAAA,EACV,QAAA,EAAU,IAAA;AAAA,EACV,QAAA,EAAU;AACZ,CAAA;AAGA,IAAM,eAAA,GAAkB;AAAA,EACtB,GAAA,EAAK,IAAA;AAAA;AAAA,EACL,GAAA,EAAK,IAAA;AAAA;AAAA,EACL,MAAA,EAAK,IAAA;AAAA;AAAA;AAAA;AAAA,EAGL,QAAA,EAAU,IAAA;AAAA,EACV,QAAA,EAAU,IAAA;AAAA,EACV,QAAA,EAAU,IAAA;AAAA,EACV,QAAA,EAAU;AACZ,CAAA;AAEA,IAAM,SAAA,GAAY;AAAA,EAChB,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,MAAA,EAAQ,IAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;;;AChCA,IAAOC,cAAAA,GAAQ;AAAA,EACb,GAAA,EAAK;AAAA,IACH,OAAA,EAAA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA,EAAA,gBAAA;AAAA,IACA,QAAA,EAAA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA,EAAAxD,QAAAA;AAAA;AAAA,IACA,OAAA,EAAAuD,gBAAAA;AAAA,IACA;AAAA;AAEJ,CAAA;;;ACnBA,IAAM,QAAA,GAAW,IAAA;AACjB,IAAM,SAAA,GAAY,eAAA;AAClB,IAAM,MAAA,GAAS,OAAA;AAIf,IAAM,UAAA,GAAa,SAAU,IAAA,EAAMxG,MAAAA,EAAO;AACxC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,QAAQ,IAAA,CAAK,OAAA;AAC7C,EAAA,MAAM0G,QAAAA,GAAU1G,MAAAA,CAAM,KAAA,CAAM,GAAA,CAAI,OAAA;AAEhC,EAAA,IAAI0G,QAAAA,CAAQ,cAAA,CAAe,GAAG,CAAA,EAAG;AAC/B,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC5B,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,QAAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,IAAK,CAAC,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAG;AACnE,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA;AAE9B,IAAA,IAAI,GAAA,CAAI,UAAU,CAAA,EAAG;AACnB,MAAA,GAAA,CAAI,QAAQ,CAAA,IAAA,KAAQ;AAClB,QAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AACjB,QAAA,IAAI,SAAS,EAAA,EAAI;AACf,UAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC5B,UAAA,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,QACtB;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAOA,EAAA,OAAO,IAAA;AACT,CAAA;AACA,IAAO,aAAA,GAAQ,UAAA;;;ACpCf,IAAM/E,QAAAA,GAAU,4BAAA;AAEhB,IAAM,SAAA,GAAY,SAAU,IAAA,EAAM;AAChC,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,UAAU,IAAA,CAAK,IAAA;AAE/C,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC9B,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA;AAE/B,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,qBAAA,EAAuB,OAAO,CAAA;AAEhD,EAAA,IAAIA,QAAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAG;AACrB,IAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAAA,EAC5B;AAEA,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAC7B,EAAA,IAAI,GAAA,KAAQ,KAAK,MAAA,EAAQ;AACvB,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA;AAAA,EACjB;AACF,CAAA;AACA,IAAO,eAAA,GAAQ,SAAA;;;AClBf,IAAM,IAAA,GAAO,SAAU,IAAA,EAAM;AAC3B,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,KAAA,IAAS9B,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,IAAA,KAAA,IAASP,EAAAA,GAAI,GAAGA,EAAAA,GAAI,IAAA,CAAKO,EAAC,CAAA,CAAE,MAAA,EAAQP,MAAK,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAKO,EAAC,CAAA,CAAEP,EAAC,CAAA;AACtB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,MAAA;AAClC,MAAA,MAAA,CAAO,IAAI,CAAA,GAAI,MAAA,CAAO,IAAI,CAAA,IAAK,CAAA;AAC/B,MAAA,MAAA,CAAO,IAAI,CAAA,IAAK,CAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,KAAA,IAASO,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,IAAA,KAAA,IAASP,EAAAA,GAAI,GAAGA,EAAAA,GAAI,IAAA,CAAKO,EAAC,CAAA,CAAE,MAAA,EAAQP,MAAK,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAKO,EAAC,CAAA,CAAEP,EAAC,CAAA;AACtB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,MAAA;AAClC,MAAA,IAAA,CAAK,IAAA,GAAO,OAAO,IAAI,CAAA;AAAA,IACzB;AAAA,EACF;AACF,CAAA;AACA,IAAO,YAAA,GAAQ,IAAA;;;ACpBf,IAAM,MAAA,GAAS,SAAU,IAAA,EAAM;AAC7B,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,IAAIb,MAAAA,GAAQ,CAAA;AACZ,EAAA,MAAM,OAAO,IAAA,CAAK,QAAA;AAClB,EAAA,KAAA,IAASoB,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,IAAA,KAAA,IAASP,EAAAA,GAAI,GAAGA,EAAAA,GAAI,IAAA,CAAKO,EAAC,CAAA,CAAE,MAAA,EAAQP,MAAK,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAKO,EAAC,CAAA,CAAEP,EAAC,CAAA;AACtB,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACZ,KAAA,EAAOb,MAAAA;AAAA,QACP,KAAA,EAAO,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,MAAA;AAAA,QAC1B,MAAA,EAAQ,KAAK,IAAA,CAAK;AAAA,OACpB;AACA,MAAA,OAAA,IAAW,KAAK,GAAA,CAAI,MAAA,GAAS,KAAK,IAAA,CAAK,MAAA,GAAS,KAAK,IAAA,CAAK,MAAA;AAC1D,MAAAA,MAAAA,IAAS,CAAA;AAAA,IACX;AAAA,EACF;AACF,CAAA;AAGA,IAAO,cAAA,GAAQ,MAAA;;;ACnBf,IAAMA,MAAAA,GAAQ,SAAU,IAAA,EAAM;AAE5B,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,KAAA,IAAS2B,KAAI,CAAA,EAAGA,EAAAA,GAAI,QAAA,CAAS,MAAA,EAAQA,MAAK,CAAA,EAAG;AAC3C,IAAA,KAAA,IAASP,EAAAA,GAAI,GAAGA,EAAAA,GAAI,QAAA,CAASO,EAAC,CAAA,CAAE,MAAA,EAAQP,MAAK,CAAA,EAAG;AAC9C,MAAA,QAAA,CAASO,EAAC,CAAA,CAAEP,EAAC,EAAE,KAAA,GAAQ,CAACO,IAAGP,EAAC,CAAA;AAAA,IAC9B;AAAA,EACF;AAUF,CAAA;AAEA,IAAO,eAAA,GAAQpB,MAAAA;;;ACpBf,IAAMkI,UAAAA,GAAY,SAAU,IAAA,EAAM;AAChC,EAAA,IAAIvG,EAAAA,GAAI,CAAA;AACR,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,KAAA,IAASP,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,IAAA,KAAA,IAASP,EAAAA,GAAI,GAAGA,EAAAA,GAAI,IAAA,CAAKO,EAAC,CAAA,CAAE,MAAA,EAAQP,MAAK,CAAA,EAAG;AAC1C,MAAA,IAAI,KAAKO,EAAC,CAAA,CAAEP,EAAC,CAAA,CAAE,WAAW,EAAA,EAAI;AAC5B,QAAA;AAAA,MACF;AACA,MAAAc,EAAAA,IAAK,CAAA;AACL,MAAA,IAAA,CAAKP,EAAC,CAAA,CAAEP,EAAC,CAAA,CAAE,SAAA,GAAYc,EAAAA;AAAA,IACzB;AAAA,EACF;AACF,CAAA;AAEA,IAAO,iBAAA,GAAQuG,UAAAA;;;ACLf,IAAM,QAAA,GAAW,SAAU,IAAA,EAAM,EAAA,EAAI;AACnC,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,KAAA,IAAS9G,KAAI,CAAA,EAAGA,EAAAA,GAAI,IAAA,CAAK,MAAA,EAAQA,MAAK,CAAA,EAAG;AACvC,IAAA,KAAA,IAASP,EAAAA,GAAI,GAAGA,EAAAA,GAAI,IAAA,CAAKO,EAAC,CAAA,CAAE,MAAA,EAAQP,MAAK,CAAA,EAAG;AAC1C,MAAA,EAAA,CAAG,KAAKO,EAAC,CAAA,CAAEP,EAAC,CAAA,EAAG,KAAK,KAAK,CAAA;AAAA,IAC3B;AAAA,EACF;AACF,CAAA;AAEA,IAAMoB,SAAAA,GAAU;AAAA,EACd,KAAA,EAAO,CAAC,IAAA,KAAS,QAAA,CAAS,MAAM,aAAK,CAAA;AAAA,EACrC,OAAA,EAAS,CAAC,IAAA,KAAS,QAAA,CAAS,MAAM,eAAO,CAAA;AAAA,EACzC,MAAA,EAAQ,CAAC,IAAA,KAAS,QAAA,CAAS,MAAM,cAAM,CAAA;AAAA,EACvC,IAAA,EAAA,YAAA;AAAA,EACA,MAAA,EAAA,cAAA;AAAA,EACA,KAAA,EAAA,eAAA;AAAA,EACA,SAAA,EAAA;AACF,CAAA;AACA,IAAOe,gBAAAA,GAAQf,SAAAA;;;ACvBf,IAAOgC,gBAAAA,GAAQ;AAAA,EACb,OAAA,EAAAjB,gBAAAA;AAAA,EACA,OAAA,EAAAD,gBAAAA;AAAA,EACA,KAAA,EAAAiF,cAAAA;AAAA,EACA,KAAA,EAAO,CAAC,OAAA,EAAS,SAAA,EAAW,SAAS,IAAI;AAC3C,CAAA;;;ACRA,IAAM,SAAA,GAAY,SAAU,IAAA,EAAM;AAChC,EAAA,MAAM/C,SAAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,SAAA;AAChC,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,IAAK,MAAA,CAAO,KAAKA,SAAQ,CAAA,CAAE,WAAW,CAAA,EAAG;AAC3D,IAAA;AAAA,EACF;AACA,EAAA,MAAM,aAAa,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,KAAK,EAAC;AAC7C,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA;AAEjD,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA;AAAA,EACF;AAEA,EAAA,IAAIA,SAAAA,CAAS,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5C,IAAA,MAAM,KAAA,GAAQA,SAAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAEtC,IAAA,QAAA,CAAS,QAAA,GAAW,KAAA;AACpB,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,IAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AAErB,IAAA,IAAI,IAAA,CAAK,QAAQ,SAAA,EAAW;AAC1B,MAAA,IAAA,CAAK,IAAA,GAAO,KAAA,CAAM,GAAG,EAAE,OAAA,CAAQ,CAAC,SAAA,EAAW,WAAW,CAAC,CAAA;AAAA,IACzD;AAAA,EACF;AACF,CAAA;AAEA,IAAOjC,gBAAAA,GAAQ,EAAE,SAAA,EAAU;;;AC1B3B,IAAM,WAAW,WAAY;AAC3B,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,aAAa,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,KAAK,EAAC;AAC7C,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA;AAC7C,EAAA,IAAI,IAAA,CAAK,SAAA,KAAc,IAAA,IAAQ,IAAA,CAAK,OAAA,EAAS;AAC3C,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,OAAA;AACjB,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,OAAA;AAAA,EACrB;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAMmF,IAAAA,GAAM,SAAU5F,KAAAA,EAAM;AAC1B,EAAAA,KAAAA,CAAK,UAAU,QAAA,GAAW,QAAA;AAC5B,CAAA;AACA,IAAOyB,YAAAA,GAAQmE,IAAAA;;;ACjBf,IAAM,WAAA,GAAc,SAAU,GAAA,EAAKtD,KAAAA,EAAMtD,MAAAA,EAAO;AAC9C,EAAA,IAAIvB,SAAQ,EAAC;AACb,EAAA,MAAM,aAAa,EAAC;AACpB,EAAA,MAAM,QAAA,GAAWuB,MAAAA,CAAM,QAAA,IAAY,EAAC;AACpC,EAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACnB,IAAA,GAAA,GAAM,GAAA,CAAI,WAAA,EAAY,CAAE,IAAA,EAAK;AAC7B,IAAA,IAAIS,OAAM,GAAA,CAAI,MAAA;AACd,IAAA,IAAI6C,KAAAA,CAAK,GAAA,IAAO7C,IAAAA,GAAM6C,KAAAA,CAAK,GAAA,EAAK;AAC9B,MAAA7C,OAAM6C,KAAAA,CAAK,GAAA;AAAA,IACb;AACA,IAAA,KAAA,IAAS,OAAOA,KAAAA,CAAK,GAAA,EAAK,IAAA,GAAO7C,IAAAA,EAAK,QAAQ,CAAA,EAAG;AAC/C,MAAA,MAAMoG,OAAAA,GAAS,GAAA,CAAI,SAAA,CAAU,CAAA,EAAG,IAAI,CAAA;AAEpC,MAAA,IAAIvD,KAAAA,CAAK,QAAQtD,MAAAA,CAAM,KAAA,CAAM,IAAI,OAAA,CAAQ,cAAA,CAAe6G,OAAM,CAAA,EAAG;AAC/D,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,QAAA,CAAS,cAAA,CAAeA,OAAM,CAAA,KAAM,IAAA,EAAM;AAC5C,QAAA,UAAA,CAAW,KAAKA,OAAM,CAAA;AACtB,QAAA;AAAA,MACF;AACA,MAAA,IAAIpI,MAAAA,CAAM,cAAA,CAAeoI,OAAM,CAAA,KAAM,IAAA,EAAM;AACzC,QAAA,UAAA,CAAW,KAAKA,OAAM,CAAA;AACtB,QAAA;AAAA,MACF;AACA,MAAApI,MAAAA,CAAMoI,OAAM,CAAA,GAAI,GAAA;AAAA,IAClB;AAAA,EACF,CAAC,CAAA;AAED,EAAApI,SAAQ,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,UAAUA,MAAK,CAAA;AAEzC,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC1B,IAAA,OAAOA,OAAM,GAAG,CAAA;AAAA,EAClB,CAAC,CAAA;AACD,EAAA,OAAOA,MAAAA;AACT,CAAA;AAEA,IAAO,mBAAA,GAAQ,WAAA;;;ACpCf,IAAM4C,YAAW,CAAA,GAAA,KAAO;AACtB,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,iBAAA;AACjD,CAAA;AAEA,IAAMyF,SAAAA,GAAW;AAAA,EACf,IAAA,EAAM,IAAA;AAAA,EACN,GAAA,EAAK;AACP,CAAA;AAEA,IAAM,UAAU,SAAU,KAAA,GAAQ,EAAC,EAAGxD,KAAAA,GAAO,EAAC,EAAG;AAC/C,EAAA,MAAMxC,MAAAA,GAAQ,KAAK,KAAA,EAAM;AACzB,EAAAwC,QAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAGwD,WAAUxD,KAAI,CAAA;AACvC,EAAA,IAAIjC,SAAAA,CAAS,KAAK,CAAA,EAAG;AACnB,IAAA,MAAA,CAAO,MAAA,CAAOP,MAAAA,CAAM,GAAA,CAAI,OAAA,EAAS,KAAK,CAAA;AACtC,IAAA,KAAA,GAAQ,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EAC3B;AACA,EAAA,MAAM4C,YAAW,mBAAA,CAAY,KAAA,EAAOJ,KAAAA,EAAM,IAAA,CAAK,OAAO,CAAA;AAEtD,EAAA,MAAA,CAAO,IAAA,CAAKI,SAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAEnC,IAAA,IAAI5C,MAAAA,CAAM,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,GAAG,CAAA,EAAG;AAC3C,MAAA,OAAOA,MAAAA,CAAM,GAAA,CAAI,SAAA,CAAU,GAAG,CAAA;AAC9B,MAAA;AAAA,IACF;AACA,IAAAA,OAAM,GAAA,CAAI,SAAA,CAAU,GAAG,CAAA,GAAI4C,UAAS,GAAG,CAAA;AAAA,EACzC,CAAC,CAAA;AACD,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAOM,YAAAA,GAAQ;AAAA,EACb,SAAA,EAAW;AACb,CAAA;;;AC7BA,IAAMlD,MAAAA,GAAQ;AAAA,EACZ,GAAA,EAAK;AAAA,IACH,WAAW;AAAC;AAAA;AAEhB,CAAA;AACA,IAAO4B,gBAAAA,GAAQ;AAAA,EACb,KAAA,EAAA5B,MAAAA;AAAA,EACA,GAAA,EAAA2B,YAAAA;AAAA,EACA,GAAA,EAAAuB,YAAAA;AAAA,EACA,OAAA,EAAAvC,gBAAAA;AAAA,EACA,KAAA,EAAO,CAAC,WAAW;AACrB,CAAA;;;ACCA,WAAA,CAAI,OAAOiB,eAAM,CAAA;AACjB,WAAA,CAAI,OAAOA,eAAM,CAAA;AACjB,WAAA,CAAI,OAAOA,eAAK,CAAA;AAChB,WAAA,CAAI,OAAOA,eAAQ,CAAA;AACnB,WAAA,CAAI,OAAOA,gBAAG,CAAA;AACd,WAAA,CAAI,OAAOA,eAAY,CAAA;AACvB,WAAA,CAAI,OAAOA,gBAAQ,CAAA;AACnB,WAAA,CAAI,OAAOA,eAAM,CAAA;AACjB,WAAA,CAAI,OAAO,cAAK,CAAA;AAChB,WAAA,CAAI,OAAOA,eAAM,CAAA;AACjB,WAAA,CAAI,OAAOA,gBAAS,CAAA;AACpB,WAAA,CAAI,OAAOA,eAAO,CAAA;AAClB,WAAA,CAAI,OAAOA,gBAAK,CAAA;AAEhB,IAAO,WAAA,GAAQ,WAAA;;;AC3Bf,IAAO,eAAA,GAAQ;AAAA;AAAA,EAEb,QAAA,EAAU,SAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,SAAA,EAAW,UAAA;AAAA,EACX,UAAA,EAAY,WAAA;AAAA,EACZ,KAAA,EAAO,QAAA;AAAA,EACP,UAAA,EAAY,WAAA;AAAA,EACZ,IAAA,EAAM,OAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,UAAA,EAAY,WAAA;AAAA,EACZ,UAAA,EAAY,WAAA;AAAA;AAAA,EAGZ,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,UAAA;AAAA,EACT,OAAA,EAAS,UAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,QAAA,EAAU,WAAA;AAAA;AAAA,EAGV,QAAA,EAAU,UAAA;AAAA,EACV,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,WAAA;AAAA,EACX,WAAA,EAAa,aAAA;AAAA,EACb,SAAA,EAAW,WAAA;AAAA,EACX,QAAA,EAAU,UAAA;AAAA,EACV,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA;AAAA,EAEV,QAAA,EAAU,YAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ,UAAA;AAAA,EACR,EAAA,EAAI,MAAA;AAAA,EACJ,GAAA,EAAK,OAAA;AAAA;AAAA,EAGL,OAAA,EAAS,QAAA;AAAA,EACT,QAAA,EAAU,SAAA;AAAA,EACV,MAAA,EAAQ,OAAA;AAAA,EACR,MAAA,EAAQ,OAAA;AAAA,EACR,YAAA,EAAc,aAAA;AAAA,EACd,QAAA,EAAU,UAAA;AAAA,EACV,OAAA,EAAS,QAAA;AAAA,EACT,OAAA,EAAS,QAAA;AAAA,EACT,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,OAAA;AAAA,EACR,QAAA,EAAU,SAAA;AAAA,EACV,QAAA,EAAU,SAAA;AAAA;AAAA,EAGV,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,UAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,QAAA;AAAA,EACP,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ,SAAA;AAAA,EACR,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ,SAAA;AAAA;AAAA,EAGR,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,SAAA;AAAA;AAAA,EAGP,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA;AAAA,EAGP,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,UAAA;AAAA,EACT,OAAA,EAAS,UAAA;AAAA;AAAA,EAGT,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,OAAA;AAAA,EACL,MAAA,EAAQ,UAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,QAAA,EAAU,WAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,QAAA;AAAA,EAEP,OAAA,EAAS,UAAA;AAAA,EACT,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,UAAA;AAAA,EACP,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,WAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,OAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,KAAA,EAAO,OAAA;AAAA,EACP,QAAA,EAAU,YAAA;AAAA,EACV,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,OAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,OAAA,EAAS,UAAA;AAAA,EACT,OAAA,EAAS,UAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS;AAEX,CAAA;;;AChHA,IAAO,YAAA,GAAQ;AAAA,EACb,aAAA,EAAe,gCAAA;AAAA,EACf,aAAA,EAAe,iBAAA;AAAA,EACf,cAAA,EAAgB,sBAAA;AAAA,EAChB,WAAA,EAAa,qBAAA;AAAA,EACb,WAAA,EAAa,kEAAA;AAAA,EACb,YAAA,EAAc,6WAAA;AAAA,EACd,QAAA,EAAU,6CAAA;AAAA,EACV,YAAA,EAAc,qqBAAA;AAAA,EACd,UAAA,EAAY,wBAAA;AAAA,EACZ,cAAA,EAAgB,kDAAA;AAAA,EAChB,WAAA,EAAa,iEAAA;AAAA,EACb,QAAA,EAAU,mCAAA;AAAA,EACV,WAAA,EAAa,2JAAA;AAAA,EACb,OAAA,EAAS,eAAA;AAAA,EACT,YAAA,EAAc,0BAAA;AAAA,EACd,aAAA,EAAe,gBAAA;AAAA,EACf,SAAA,EAAW,m0BAAA;AAAA,EACX,cAAA,EAAgB,igFAAA;AAAA,EAChB,YAAA,EAAc,2BAAA;AAAA,EACd,WAAA,EAAa,yoHAAA;AAAA,EACb,OAAA,EAAS,i3FAAA;AAAA,EACT,UAAA,EAAY,46BAAA;AAAA,EACZ,UAAA,EAAY,m0DAAA;AAAA,EACZ,UAAA,EAAY,kwEAAA;AAAA,EACZ,aAAA,EAAe,8bAAA;AAAA,EACf,YAAA,EAAc,sNAAA;AAAA,EACd,UAAA,EAAY,kxKAAA;AAAA,EACZ,aAAA,EAAe,0mDAAA;AAAA,EACf,YAAA,EAAc,snHAAA;AAAA,EACd,QAAA,EAAU,8pDAAA;AAAA,EACV,WAAA,EAAa,yxIAAA;AAAA,EACb,SAAA,EAAW,2DAAA;AAAA,EACX,aAAA,EAAe,uWAAA;AAAA,EACf,YAAA,EAAc,m5CAAA;AAAA,EACd,MAAA,EAAQ,sdAAA;AAAA,EACR,aAAA,EAAe,0hDAAA;AAAA,EACf,aAAA,EAAe,8lHAAA;AAAA,EACf,YAAA,EAAc,uPAAA;AAAA,EACd,cAAA,EAAgB,+HAAA;AAAA,EAChB,UAAA,EAAY,02IAAA;AAAA,EACZ,SAAA,EAAW,gIAAA;AAAA,EACX,UAAA,EAAY,uIAAA;AAAA,EACZ,UAAA,EAAY,gEAAA;AAAA,EACZ,MAAA,EAAQ,ukGAAA;AAAA,EACR,QAAA,EAAU,0jDAAA;AAAA,EACV,OAAA,EAAS,woEAAA;AAAA,EACT,SAAA,EAAW,syDAAA;AAAA,EACX,WAAA,EAAa,0VAAA;AAAA,EACb,SAAA,EAAW,8DAAA;AAAA,EACX,OAAA,EAAS,kDAAA;AAAA,EACT,MAAA,EAAQ,uEAAA;AAAA,EACR,UAAA,EAAY,yHAAA;AAAA,EACZ,YAAA,EAAc,m6MAAA;AAAA,EACd,WAAA,EAAa,sFAAA;AAAA,EACb,YAAA,EAAc,giDAAA;AAAA,EACd,YAAA,EAAc,o8CAAA;AAAA,EACd,QAAA,EAAU,2mBAAA;AAAA,EACV,aAAA,EAAe,+UAAA;AAAA,EACf,UAAA,EAAY,sXAAA;AAAA,EACZ,YAAA,EAAc,6IAAA;AAAA,EACd,aAAA,EAAe,8bAAA;AAAA,EACf,YAAA,EAAc,qEAAA;AAAA,EACd,OAAA,EAAS,0EAAA;AAAA,EACT,MAAA,EAAQ,6CAAA;AAAA,EACR,aAAA,EAAe,8IAAA;AAAA,EACf,aAAA,EAAe;AACjB,CAAA;;;ACpEA,IAAM,IAAA,GAAO,EAAA;AACb,IAAM,GAAA,GAAM,sCAAA;AAEZ,IAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,EAAE,EAAE,MAAA,CAAO,SAAUwB,EAAAA,EAAGnE,EAAAA,EAAGF,EAAAA,EAAG;AACpD,EAAAqE,EAAAA,CAAEnE,EAAC,CAAA,GAAIF,EAAAA;AACP,EAAA,OAAOqE,EAAAA;AACT,CAAA,EAAG,EAAE,CAAA;AAGL,IAAM,WAAA,GAAc,SAAU9D,EAAAA,EAAG;AAC/B,EAAA,IAAI,GAAA,CAAIA,EAAC,CAAA,KAAM,MAAA,EAAW;AACxB,IAAA,OAAO,IAAIA,EAAC,CAAA;AAAA,EACd;AACA,EAAA,IAAI2G,OAAAA,GAAS,CAAA;AACb,EAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,EAAA,IAAItH,EAAAA,GAAI,EAAA;AACR,EAAA,OAAOW,MAAK,KAAA,EAAOA,EAAAA,IAAK,KAAA,EAAO2G,OAAAA,EAAAA,EAAU,SAAS,IAAA,EAAM;AAAA,EAAC;AACzD,EAAA,OAAOA,OAAAA,EAAAA,EAAU;AACf,IAAA,MAAMvH,KAAIY,EAAAA,GAAI,IAAA;AACd,IAAAX,EAAAA,GAAI,OAAO,YAAA,CAAA,CAAcD,EAAAA,GAAI,KAAK,EAAA,GAAK,EAAA,IAAMA,EAAC,CAAA,GAAIC,EAAAA;AAClD,IAAAW,EAAAA,GAAAA,CAAKA,KAAIZ,EAAAA,IAAK,IAAA;AAAA,EAChB;AACA,EAAA,OAAOC,EAAAA;AACT,CAAA;AAEA,IAAM,aAAA,GAAgB,SAAUA,EAAAA,EAAG;AACjC,EAAA,IAAI,KAAA,CAAMA,EAAC,CAAA,KAAM,MAAA,EAAW;AAC1B,IAAA,OAAO,MAAMA,EAAC,CAAA;AAAA,EAChB;AACA,EAAA,IAAIW,EAAAA,GAAI,CAAA;AACR,EAAA,IAAI2G,OAAAA,GAAS,CAAA;AACb,EAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,OAAOA,UAAStH,EAAAA,CAAE,MAAA,EAAQW,MAAK,KAAA,EAAO2G,OAAAA,EAAAA,EAAU,SAAS,IAAA,EAAM;AAAA,EAAC;AAChE,EAAA,KAAA,IAASlH,EAAAA,GAAIJ,GAAE,MAAA,GAAS,CAAA,EAAGI,MAAK,CAAA,EAAGA,EAAAA,EAAAA,EAAK,OAAO,IAAA,EAAM;AACnD,IAAA,IAAIL,EAAAA,GAAIC,EAAAA,CAAE,UAAA,CAAWI,EAAC,CAAA,GAAI,EAAA;AAC1B,IAAA,IAAIL,KAAI,EAAA,EAAI;AACV,MAAAA,EAAAA,IAAK,CAAA;AAAA,IACP;AACA,IAAAY,MAAKZ,EAAAA,GAAI,GAAA;AAAA,EACX;AACA,EAAA,OAAOY,EAAAA;AACT,CAAA;AAEA,IAAO,gBAAA,GAAQ;AAAA,EACb,WAAA;AAAA,EACA;AACF,CAAA;;;AC7CA,IAAM,OAAA,GAAU,SAAUd,EAAAA,EAAG;AAE3B,EAAA,MAAM,QAAA,GAAW,IAAI,MAAA,CAAO,yBAAyB,CAAA;AACrD,EAAA,KAAA,IAASO,KAAI,CAAA,EAAGA,EAAAA,GAAIP,EAAAA,CAAE,KAAA,CAAM,QAAQO,EAAAA,EAAAA,EAAK;AACvC,IAAA,MAAMS,KAAI,QAAA,CAAS,IAAA,CAAKhB,EAAAA,CAAE,KAAA,CAAMO,EAAC,CAAC,CAAA;AAClC,IAAA,IAAI,CAACS,EAAAA,EAAG;AACN,MAAAhB,GAAE,QAAA,GAAWO,EAAAA;AACb,MAAA;AAAA,IACF;AACA,IAAAP,EAAAA,CAAE,IAAA,CAAK,gBAAA,CAAS,aAAA,CAAcgB,EAAAA,CAAE,CAAC,CAAC,CAAC,CAAA,GAAI,gBAAA,CAAS,aAAA,CAAcA,EAAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EACpE;AAEA,EAAAhB,EAAAA,CAAE,QAAQA,EAAAA,CAAE,KAAA,CAAM,MAAMA,EAAAA,CAAE,QAAA,EAAUA,EAAAA,CAAE,KAAA,CAAM,MAAM,CAAA;AACpD,CAAA;AACA,IAAO,eAAA,GAAQ,OAAA;;;ACZf,IAAM,YAAA,GAAe,SAAU,IAAA,EAAM,GAAA,EAAKb,MAAAA,EAAO;AAC/C,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACxC,EAAA,IAAI,KAAA,GAAQ,KAAK,QAAA,EAAU;AACzB,IAAA,OAAO,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,EACxB;AACA,EAAA,OAAOA,MAAAA,GAAQ,KAAA,GAAQ,CAAA,GAAI,IAAA,CAAK,QAAA;AAClC,CAAA;AAEA,IAAM,OAAA,GAAU,SAAU,IAAA,EAAM;AAC9B,EAAA,MAAM0B,OAAM,EAAC;AACb,EAAA,MAAM,KAAA,GAAQ,CAAC1B,MAAAA,EAAO,IAAA,KAAS;AAC7B,IAAA,IAAI,IAAA,GAAO,IAAA,CAAK,KAAA,CAAMA,MAAK,CAAA;AAC3B,IAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,EAAK;AACnB,MAAA0B,IAAAA,CAAI,KAAK,IAAI,CAAA;AACb,MAAA,IAAA,GAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,IACrB;AACA,IAAA,MAAMoE,QAAAA,GAAU,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AAC1C,IAAA,KAAA,IAAS1E,KAAI,CAAA,EAAGA,EAAAA,GAAI0E,QAAAA,CAAQ,MAAA,EAAQ1E,MAAK,CAAA,EAAG;AAC1C,MAAA,MAAM,GAAA,GAAM0E,SAAQ1E,EAAC,CAAA;AACrB,MAAA,MAAM,GAAA,GAAM0E,QAAAA,CAAQ1E,EAAAA,GAAI,CAAC,CAAA;AACzB,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA;AAAA,MACF;AACA,MAAA,MAAM,OAAO,IAAA,GAAO,GAAA;AAEpB,MAAA,IAAI,GAAA,KAAQ,GAAA,IAAO,GAAA,KAAQ,MAAA,EAAW;AACpC,QAAAM,IAAAA,CAAI,KAAK,IAAI,CAAA;AACb,QAAA;AAAA,MACF;AACA,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,IAAA,EAAM,GAAA,EAAK1B,MAAK,CAAA;AAC9C,MAAA,KAAA,CAAM,UAAU,IAAI,CAAA;AAAA,IACtB;AAAA,EACF,CAAA;AACA,EAAA,KAAA,CAAM,GAAG,EAAE,CAAA;AACX,EAAA,OAAO0B,IAAAA;AACT,CAAA;AAGA,IAAM,MAAA,GAAS,SAAU,GAAA,EAAK;AAC5B,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAAA,IACpB,MAAM,EAAC;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAEA,EAAA,IAAI,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,EAAG;AAClB,IAAA,eAAA,CAAa,IAAI,CAAA;AAAA,EACnB;AACA,EAAA,OAAO,QAAQ,IAAI,CAAA;AACrB,CAAA;AAEA,IAAO,gBAAA,GAAQ,MAAA;;;ACrDf,IAAM6G,OAAAA,GAAS,SAAU,GAAA,EAAK;AAC5B,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC9C,IAAGzE,EAAAA,KAAM;AAC1C,IAAA,MAAM,GAAA,GAAMA,EAAAA,CAAE,KAAA,CAAM,MAAG,CAAA;AACvB,IAAAyE,GAAE,GAAA,CAAI,CAAC,CAAC,CAAA,GAAI,IAAI,CAAC,CAAA;AACjB,IAAA,OAAOA,EAAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM/D,OAAM,EAAC;AACb,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,SAAU,GAAA,EAAK;AACtC,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAS,GAAA,CAAI,GAAG,CAAC,CAAA;AAE7B,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,GAAA,GAAM,IAAA;AAAA,IACR;AACA,IAAA,KAAA,IAASN,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAI,GAAA,CAAI,QAAQA,EAAAA,EAAAA,EAAK;AACnC,MAAA,MAAMU,EAAAA,GAAI,IAAIV,EAAC,CAAA;AACf,MAAA,IAAIM,IAAAA,CAAI,cAAA,CAAeI,EAAC,CAAA,KAAM,IAAA,EAAM;AAClC,QAAA,IAAI,MAAM,OAAA,CAAQJ,IAAAA,CAAII,EAAC,CAAC,MAAM,KAAA,EAAO;AACnC,UAAAJ,KAAII,EAAC,CAAA,GAAI,CAACJ,IAAAA,CAAII,EAAC,GAAG,GAAG,CAAA;AAAA,QACvB,CAAA,MAAO;AACL,UAAAJ,IAAAA,CAAII,EAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,QACjB;AAAA,MACF,CAAA,MAAO;AACL,QAAAJ,IAAAA,CAAII,EAAC,CAAA,GAAI,GAAA;AAAA,MACX;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAOJ,IAAAA;AACT,CAAA;AAEA,IAAO,cAAA,GAAQ6G,OAAAA;;;ACnCf,IAAM,GAAA,GAAM,CAAC,YAAA,EAAc,SAAS,CAAA;AAEpC,IAAM,IAAA,GAAO;AAAA;AAAA,EAEX,kBAAA,EAAoB,cAAA;AAAA,EACpB,UAAA,EAAY,cAAA;AAAA,EACZ,SAAA,EAAW,cAAA;AAAA,EACX,EAAA,EAAI,cAAA;AAAA,EACJ,GAAA,EAAK,cAAA;AAAA,EACL,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EAET,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EAEJ,GAAA,EAAK,MAAA;AAAA,EACL,EAAA,EAAI,MAAA;AAAA,EACJ,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,KAAA,EAAO,MAAA;AAAA,EACP,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,EAAA,EAAI,MAAA;AAAA,EACJ,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA;AAAA,EAGL,MAAA,EAAQ,cAAA;AAAA,EACR,gBAAA,EAAkB,cAAA;AAAA,EAClB,OAAA,EAAS,cAAA;AAAA,EACT,mBAAA,EAAqB,cAAA;AAAA,EACrB,kBAAA,EAAoB,cAAA;AAAA,EACpB,eAAA,EAAiB,cAAA;AAAA,EACjB,GAAA,EAAK,aAAA;AAAA;AAAA,EAGL,CAAA,EAAG,CAAC,SAAA,EAAW,UAAU,CAAA;AAAA,EACzB,EAAA,EAAI,CAAC,SAAA,EAAW,UAAU,CAAA;AAAA,EAC1B,GAAA,EAAK,CAAC,SAAA,EAAW,UAAU,CAAA;AAAA,EAC3B,EAAA,EAAI,CAAC,SAAA,EAAW,UAAU,CAAA;AAAA,EAC1B,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ,CAAA;AAAA,EAC1B,EAAA,EAAI,CAAC,SAAA,EAAW,QAAQ,CAAA;AAAA,EACxB,GAAA,EAAK,CAAC,QAAA,EAAU,WAAW,CAAA;AAAA,EAC3B,EAAA,EAAI,CAAC,QAAA,EAAU,cAAc,CAAA;AAAA,EAC7B,GAAA,EAAK,CAAC,QAAA,EAAU,cAAc,CAAA;AAAA,EAC9B,EAAA,EAAI,CAAC,QAAA,EAAU,cAAc,CAAA;AAAA,EAC7B,IAAA,EAAM,CAAC,QAAA,EAAU,WAAW,CAAA;AAAA;AAAA,EAG5B,GAAA,EAAK,GAAA;AAAA,EACL,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM,GAAA;AAAA,EACN,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,UAAA,EAAY,GAAA;AAAA,EACZ,IAAA,EAAM,GAAA;AAAA,EACN,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM,GAAA;AAAA,EACN,EAAA,EAAI,GAAA;AAAA,EACJ,GAAA,EAAK,GAAA;AAAA;AAAA,EAGL,EAAA,EAAI,CAAC,aAAA,EAAe,cAAc,CAAA;AAAA,EAClC,EAAA,EAAI,CAAC,WAAA,EAAa,aAAa,CAAA;AAAA,EAC/B,MAAA,EAAQ,aAAA;AAAA,EACR,OAAA,EAAS,aAAA;AAAA,EACT,IAAA,EAAM,QAAA;AAAA,EACN,GAAA,EAAK,OAAA;AAAA;AAAA,EAGL,OAAA,EAAS,WAAA;AAAA,EACT,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO,WAAA;AAAA,EACP,KAAA,EAAO,WAAA;AAAA,EACP,OAAA,EAAS,WAAA;AAAA,EACT,MAAA,EAAQ,WAAA;AAAA,EACR,KAAA,EAAO,WAAA;AAAA,EACP,KAAA,EAAO,WAAA;AAAA,EACP,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO,WAAA;AAAA,EACP,UAAA,EAAY,WAAA;AAAA,EACZ,MAAA,EAAQ,WAAA;AAAA;AAAA,EAGR,KAAA,EAAO,cAAA;AAAA,EACP,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,WAAA;AAAA,EAER,EAAA,EAAI,CAAC,UAAA,EAAY,YAAY;AAAA;AAAA;AAK/B,CAAA;AACA,IAAOC,aAAAA,GAAQ,IAAA;;;ACrGf,IAAO,iBAAA,GAAQ;AAAA,EACb,kBAAA,EAAoB,cAAA;AAAA,EACpB,UAAA,EAAY,cAAA;AAAA,EACZ,SAAA,EAAW,cAAA;AAAA,EACX,WAAA,EAAa,YAAA;AAAA,EACb,iBAAA,EAAmB,cAAA;AAAA,EACnB,cAAA,EAAgB,cAAA;AAAA,EAChB,UAAA,EAAY,cAAA;AAAA,EACZ,cAAA,EAAgB,cAAA;AAAA,EAChB,uBAAA,EAAyB,cAAA;AAAA,EACzB,gBAAA,EAAkB,cAAA;AAAA,EAClB,eAAA,EAAiB,cAAA;AAAA,EACjB,YAAA,EAAc,cAAA;AAAA,EAEd,gBAAA,EAAkB,OAAA;AAAA,EAClB,aAAA,EAAe,UAAA;AAAA,EACf,QAAA,EAAU,UAAA;AAAA,EACV,aAAA,EAAe,UAAA;AAAA,EACf,cAAA,EAAgB,QAAA;AAAA,EAChB,UAAA,EAAY,UAAA;AAAA,EACZ,cAAA,EAAgB,aAAA;AAAA,EAChB,UAAA,EAAY,aAAA;AAAA,EACZ,WAAA,EAAa,aAAA;AAAA,EACb,kBAAA,EAAoB,aAAA;AAAA,EACpB,aAAA,EAAe,aAAA;AAAA,EACf,UAAA,EAAY,aAAA;AAAA,EACZ,WAAA,EAAa,YAAA;AAAA,EAEb,YAAA,EAAc,QAAA;AAAA,EACd,YAAA,EAAc,QAAA;AAAA,EACd,QAAA,EAAU,QAAA;AAAA,EACV,QAAA,EAAU,QAAA;AAAA,EACV,UAAA,EAAY,QAAA;AAAA,EACZ,UAAA,EAAY,QAAA;AAAA,EACZ,SAAA,EAAW,QAAA;AAAA,EACX,eAAA,EAAiB,QAAA;AAAA,EACjB,YAAA,EAAc,QAAA;AAAA,EACd,aAAA,EAAe,QAAA;AAAA,EAEf,WAAA,EAAa,WAAA;AAAA,EACb,UAAA,EAAY,WAAA;AAAA,EACZ,WAAA,EAAa,WAAA;AAAA,EACb,WAAA,EAAa,WAAA;AAAA,EACb,UAAA,EAAY,WAAA;AAAA,EACZ,WAAA,EAAa,WAAA;AAAA,EACb,YAAA,EAAc,WAAA;AAAA,EACd,WAAA,EAAa,WAAA;AAAA,EACb,SAAA,EAAW,WAAA;AAAA,EACX,kBAAA,EAAoB,WAAA;AAAA,EACpB,aAAA,EAAe,WAAA;AAAA,EACf,SAAA,EAAW,WAAA;AAAA,EACX,WAAA,EAAa,WAAA;AAAA,EACb,YAAA,EAAc,WAAA;AAAA,EACd,SAAA,EAAW,WAAA;AAAA,EAEX,eAAA,EAAiB,YAAA;AAAA,EACjB,eAAA,EAAiB,YAAA;AAAA,EACjB,gBAAA,EAAkB,YAAA;AAAA,EAClB,gBAAA,EAAkB,YAAA;AAAA,EAClB,iBAAA,EAAmB,YAAA;AAAA,EACnB,gBAAA,EAAkB,YAAA;AAAA,EAClB,iBAAA,EAAmB,YAAA;AAAA,EACnB,eAAA,EAAiB,YAAA;AAAA,EACjB,mBAAA,EAAqB,YAAA;AAAA,EACrB,oBAAA,EAAsB,YAAA;AAAA,EACtB,kBAAA,EAAoB,YAAA;AAAA,EAEpB,aAAA,EAAe,YAAA;AAAA,EACf,aAAA,EAAe,SAAA;AAAA,EACf,eAAA,EAAiB,SAAA;AAAA,EACjB,0BAAA,EAA4B,SAAA;AAAA,EAC5B,sBAAA,EAAwB,QAAA;AAAA,EACxB,cAAA,EAAgB,OAAA;AAAA,EAChB,aAAA,EAAe,OAAA;AAAA,EAEf,aAAA,EAAe,QAAA;AAAA,EACf,UAAA,EAAY,QAAA;AAAA,EACZ,aAAA,EAAe,aAAA;AAAA,EACf,WAAA,EAAa,aAAA;AAAA,EAEb,YAAA,EAAc,QAAA;AAAA,EACd,cAAA,EAAgB,QAAA;AAAA,EAChB,eAAA,EAAiB,QAAA;AAAA,EACjB,cAAA,EAAgB,QAAA;AAAA,EAChB,aAAA,EAAe,QAAA;AAAA,EACf,WAAA,EAAa,QAAA;AAAA,EACb,SAAA,EAAW,QAAA;AAAA,EACX,aAAA,EAAe,QAAA;AAAA,EACf,gBAAA,EAAkB,QAAA;AAAA,EAClB,eAAA,EAAiB,QAAA;AAAA,EACjB,aAAA,EAAe,QAAA;AAAA,EACf,eAAA,EAAiB,QAAA;AAAA,EACjB,aAAA,EAAe,QAAA;AAAA,EACf,UAAA,EAAY,QAAA;AAAA,EACZ,aAAA,EAAe,QAAA;AAAA,EAEf,WAAA,EAAa,WAAA;AAAA,EACb,YAAA,EAAc,cAAA;AAAA,EACd,aAAA,EAAe,QAAA;AAAA,EACf,YAAA,EAAc,YAAA;AAAA,EAEd,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,MAAA;AAAA,EACb,aAAA,EAAe,MAAA;AAAA,EACf,oBAAA,EAAsB;AACxB,CAAA;;;ACtGA,IAAO,iBAAA,GAAQ;AAAA,EACb,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;;;AC5DA,IAAM,QAAA,GAAW;AAAA,EACf,CAAA,EAAG;AAAA,IACD,CAAC,wCAAwC,MAAM,CAAA;AAAA,IAC/C,CAAC,QAAQ,IAAI;AAAA,GACf;AAAA,EACA,CAAA,EAAG;AAAA,IACD,CAAC,iBAAiB,QAAQ,CAAA;AAAA,IAC1B,CAAC,YAAY,KAAK,CAAA;AAAA,IAClB,CAAC,iBAAiB,OAAO,CAAA;AAAA,IACzB,CAAC,gBAAgB,OAAO;AAAA,GAC1B;AAAA,EACA,CAAA,EAAG;AAAA,IACD,CAAC,wCAAwC,OAAO,CAAA;AAAA,IAChD,CAAC,oEAAoE,OAAO;AAAA,GAC9E;AAAA,EACA,CAAA,EAAG,CAAC,CAAC,gBAAA,EAAkB,KAAK,CAAC,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,CAAC,YAAA,EAAc,KAAK,CAAC,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,CAAC,WAAA,EAAa,IAAI,CAAC,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,CAAC,wBAAA,EAA0B,OAAO,CAAC,CAAA;AAAA,EACvC,CAAA,EAAG;AAAA,IACD,CAAC,iBAAiB,MAAM,CAAA;AAAA,IACxB,CAAC,oBAAoB,MAAM,CAAA;AAAA,IAC3B,CAAC,SAAS,KAAK,CAAA;AAAA,IACf,CAAC,WAAW,OAAO,CAAA;AAAA,IACnB,CAAC,WAAW,KAAK,CAAA;AAAA,IACjB,CAAC,4BAA4B,OAAO,CAAA;AAAA,IACpC,CAAC,+CAA+C,KAAK;AAAA,GACvD;AAAA,EACA,CAAA,EAAG;AAAA,IACD,CAAC,iCAAiC,QAAQ,CAAA;AAAA,IAC1C,CAAC,WAAW,MAAM;AAAA,GACpB;AAAA,EACA,CAAA,EAAG,CAAC,CAAC,mBAAA,EAAqB,OAAO,CAAC,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,CAAC,UAAA,EAAY,OAAO,CAAC;AAC3B,CAAA;AACA,IAAO,aAAA,GAAQ,QAAA;;;ACnCf,IAAM,IAAA,GAAO,gBAAA;AAEb,IAAM,SAAA,GAAY,SAAU,GAAA,EAAK;AAC/B,EAAA,MAAMlH,EAAAA,GAAI,GAAA,CAAI,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA;AAC5B,EAAA,IAAI,aAAA,CAAM,cAAA,CAAeA,EAAC,CAAA,KAAM,IAAA,EAAM;AACpC,IAAA,KAAA,IAASF,EAAAA,GAAI,GAAGA,EAAAA,GAAI,aAAA,CAAME,EAAC,CAAA,CAAE,MAAA,EAAQF,MAAK,CAAA,EAAG;AAC3C,MAAA,MAAM,MAAM,aAAA,CAAME,EAAC,CAAA,CAAEF,EAAC,EAAE,CAAC,CAAA;AACzB,MAAA,IAAI,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AAC1B,QAAA,OAAO,GAAA,CAAI,QAAQ,GAAA,EAAK,aAAA,CAAME,EAAC,CAAA,CAAEF,EAAC,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAIA,IAAM,SAAA,GAAY,SAAU,GAAA,GAAM,EAAA,EAAIiB,MAAAA,EAAO;AAC3C,EAAA,MAAM,EAAE,gBAAA,EAAkB,WAAA,EAAAoG,YAAAA,KAAgBpG,MAAAA,CAAM,GAAA;AAEhD,EAAA,IAAIoG,YAAAA,CAAY,cAAA,CAAe,GAAG,CAAA,EAAG;AACnC,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,gBAAA,CAAiB,cAAA,CAAe,GAAG,CAAA,EAAG;AACxC,IAAA,OAAO,iBAAiB,GAAG,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAMC,OAAAA,GAAS,UAAU,GAAG,CAAA;AAC5B,EAAA,IAAIA,YAAW,IAAA,EAAM;AACnB,IAAA,OAAOA,OAAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,EAAG;AAClB,IAAA,OAAO,GAAA,GAAM,IAAA;AAAA,EACf;AAEA,EAAA,OAAO,GAAA,GAAM,GAAA;AACf,CAAA;AACA,IAAO,gBAAA,GAAQ,SAAA;;;AC5Bf,IAAM,SAAA,GAAY,IAAA;AAClB,IAAMlE,QAAAA,GAAUgE,aAAAA;AAChB,IAAM,WAAW,EAAC;AAElB,IAAM,QAAA,GAAW,EAAE,GAAA,EAAK,EAAE,mCAAkB,WAAA,EAAa,IAAG,EAAE;AAE9D,MAAA,CAAO,IAAA,CAAK,YAAO,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAClC,EAAA,MAAM,QAAA,GAAW,cAAA,CAAO,YAAA,CAAQ,GAAG,CAAC,CAAA;AAEpC,EAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,EAAG;AAExB,IAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAA,KAAK;AACjC,MAAAhE,QAAAA,CAAQ,CAAC,CAAA,GAAI,GAAA;AAAA,IACf,CAAC,CAAA;AACD,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAA,KAAK;AACjC,IAAA,QAAA,CAAS,CAAC,CAAA,GAAI,GAAA;AAEd,IAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,MAAA,MAAMkE,OAAAA,GAAS,gBAAA,CAAS,CAAA,EAAG,QAAQ,CAAA;AACnC,MAAA,QAAA,CAASA,OAAM,CAAA,GAAI,aAAA;AAAA,IACrB;AAAA,EACF,CAAC,CAAA;AACH,CAAC,CAAA;AAED,iBAAA,CAAU,OAAA,CAAQ,CAAA,GAAA,KAAQlE,QAAAA,CAAQ,GAAG,IAAI,UAAW,CAAA;AAGpD,OAAOA,SAAQ,EAAE,CAAA;AACjB,OAAOA,SAAQ,IAAI,CAAA;AACnB,OAAOA,SAAQ,GAAG,CAAA;;;AC5ClB,IAAM7C,EAAAA,GAAI,UAAA;AACV,IAAO,YAAA,GAAQ;AAAA,EACb,UAAA,EAAY;AAAA,IACV,UAAA,EAAYA,EAAAA;AAAA;AAAA,IACZ,UAAA,EAAYA,EAAAA;AAAA;AAAA,IACZ,OAAA,EAASA,EAAAA;AAAA;AAAA;AAAA,IAET,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,SAAA,EAAWA,EAAAA;AAAA;AAAA;AAAA,IAEX,YAAA,EAAcA,EAAAA;AAAA;AAAA,IACd,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,SAAA,EAAWA,EAAAA;AAAA;AAAA,IACX,UAAA,EAAYA,EAAAA;AAAA;AAAA,IACZ,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,OAAA,EAASA,EAAAA;AAAA;AAAA,IACT,OAAA,EAASA;AAAA;AAAA,GACX;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,YAAA,EAAcA,EAAAA;AAAA;AAAA,IACd,SAAA,EAAWA,EAAAA;AAAA;AAAA;AAAA,IAEX,OAAA,EAASA,EAAAA;AAAA;AAAA,IACT,KAAA,EAAOA;AAAA;AAAA,GACT;AAAA;AAAA,EAEA,WAAA,EAAa;AAAA,IACX,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,OAAA,EAASA,EAAAA;AAAA;AAAA;AAAA;AAAA,IAGT,EAAA,EAAIA,EAAAA;AAAA;AAAA,IACJ,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,EAAA,EAAIA,EAAAA;AAAA;AAAA;AAAA,IAEJ,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,QAAA,EAAUA,EAAAA;AAAA;AAAA,IACV,QAAA,EAAUA,EAAAA;AAAA;AAAA,IACV,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,IAAA,EAAMA,EAAAA;AAAA;AAAA;AAAA,IAEN,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,OAAA,EAASA,EAAAA;AAAA;AAAA,IACT,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,OAAA,EAASA,EAAAA;AAAA;AAAA,IACT,KAAA,EAAOA,EAAAA;AAAA;AAAA;AAAA,IAEP,QAAA,EAAUA,EAAAA;AAAA;AAAA,IACV,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,OAAA,EAASA,EAAAA;AAAA;AAAA,IACT,SAAA,EAAWA,EAAAA;AAAA;AAAA,IACX,QAAA,EAAUA,EAAAA;AAAA;AAAA,IACV,UAAA,EAAYA,EAAAA;AAAA;AAAA,IACZ,QAAA,EAAUA,EAAAA;AAAA;AAAA,IACV,UAAA,EAAYA,EAAAA;AAAA;AAAA,IACZ,OAAA,EAASA,EAAAA;AAAA;AAAA,IACT,MAAA,EAAQA,EAAAA;AAAA,IACR,EAAA,EAAIA,EAAAA;AAAA;AAAA,IACJ,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,EAAA,EAAIA,EAAAA;AAAA;AAAA,IACJ,KAAA,EAAOA,EAAAA;AAAA,IAEP,OAAA,EAASA,EAAAA;AAAA,IACT,MAAA,EAAQA,EAAAA;AAAA,IACR,OAAA,EAASA,EAAAA;AAAA,IACT,QAAA,EAAUA,EAAAA;AAAA,IACV,QAAA,EAAUA,EAAAA;AAAA,IACV,IAAA,EAAMA,EAAAA;AAAA,IACN,IAAA,EAAMA,EAAAA;AAAA,IACN,IAAA,EAAMA,EAAAA;AAAA,IACN,OAAA,EAASA,EAAAA;AAAA,IACT,KAAA,EAAOA,EAAAA;AAAA,IACP,SAAA,EAAWA,EAAAA;AAAA,IACX,GAAA,EAAKA,EAAAA;AAAA,IACL,GAAA,EAAKA,EAAAA;AAAA,IACL,MAAA,EAAQA,EAAAA;AAAA,IACR,MAAA,EAAQA,EAAAA;AAAA,IACR,IAAA,EAAMA,EAAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA,IACP,KAAA,EAAOA,EAAAA;AAAA,IACP,IAAA,EAAMA,EAAAA;AAAA,IACN,OAAA,EAASA,EAAAA;AAAA,IACT,UAAA,EAAYA,EAAAA;AAAA,IACZ,MAAA,EAAQA,EAAAA;AAAA,IACR,OAAA,EAASA;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,EAAA,EAAIA,EAAAA;AAAA;AAAA,IACJ,MAAA,EAAQA,EAAAA;AAAA,IACR,GAAA,EAAKA,EAAAA;AAAA,IACL,MAAA,EAAQA,EAAAA;AAAA,IACR,OAAA,EAASA,EAAAA;AAAA,IACT,IAAA,EAAMA,EAAAA;AAAA,IACN,MAAA,EAAQA,EAAAA;AAAA,IACR,OAAA,EAASA,EAAAA;AAAA,IACT,UAAA,EAAYA,EAAAA;AAAA,IACZ,IAAA,EAAMA,EAAAA;AAAA,IACN,SAAA,EAAWA,EAAAA;AAAA,IACX,IAAA,EAAMA,EAAAA;AAAA,IACN,IAAA,EAAMA,EAAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA,IACP,MAAA,EAAQA,EAAAA;AAAA,IACR,EAAA,EAAIA,EAAAA;AAAA,IACJ,GAAA,EAAKA,EAAAA;AAAA,IACL,EAAA,EAAIA,EAAAA;AAAA,IACJ,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,IAAA,EAAMA;AAAA;AAAA;AAAA;AAGV,CAAA;;;ACvIA,IAAM,CAAA,GAAI,YAAA;AAEV,IAAO,YAAA,GAAQ;AAAA,EACb,UAAA,EAAY;AAAA,IACV,KAAA,EAAO,CAAA;AAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA;AAAA,IACV,MAAA,EAAQ;AAAA;AAAA;AAAA,GAEV;AAAA,EACA,SAAA,EAAW;AAAA,IACT,UAAA,EAAY,CAAA;AAAA;AAAA,IACZ,MAAA,EAAQ,CAAA;AAAA;AAAA,IACR,UAAA,EAAY,CAAA;AAAA;AAAA,IACZ,SAAA,EAAW,CAAA;AAAA;AAAA;AAAA,IAEX,WAAA,EAAa,CAAA;AAAA;AAAA;AAAA,IAEb,QAAA,EAAU,CAAA;AAAA;AAAA,IACV,WAAA,EAAa,CAAA;AAAA;AAAA,IACb,WAAA,EAAa;AAAA;AAAA,GACf;AAAA,EACA,WAAA,EAAa;AAAA,IACX,CAAA,EAAG,CAAA;AAAA;AAAA,IACH,EAAA,EAAI,CAAA;AAAA;AAAA,IACJ,GAAA,EAAK,CAAA;AAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,EAAA,EAAI,CAAA;AAAA;AAAA,IACJ,MAAA,EAAQ,CAAA;AAAA;AAAA,IACR,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,IACN,GAAA,EAAK,CAAA;AAAA,IACL,KAAA,EAAO,CAAA;AAAA,IACP,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,EAAA,EAAI,CAAA;AAAA,IACJ,GAAA,EAAK,CAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,GAAA,EAAK,CAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,EAAA,EAAI,CAAA;AAAA,IACJ,EAAA,EAAI,CAAA;AAAA,IACJ,GAAA,EAAK,CAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA;AAAA;AAAA,IAEN,EAAA,EAAI,CAAA;AAAA,IACJ,GAAA,EAAK,CAAA;AAAA,IACL,EAAA,EAAI,CAAA;AAAA,IACJ,KAAA,EAAO,CAAA;AAAA;AAAA,IAEP,EAAA,EAAI,CAAA;AAAA,IACJ,EAAA,EAAI,CAAA;AAAA,IACJ,MAAA,EAAQ,CAAA;AAAA,IACR,EAAA,EAAI,CAAA;AAAA,IACJ,KAAA,EAAO,CAAA;AAAA,IACP,KAAA,EAAO,CAAA;AAAA,IACP,GAAA,EAAK,CAAA;AAAA,IACL,GAAA,EAAK,CAAA;AAAA,IACL,GAAA,EAAK,CAAA;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,MAAA,EAAQ,CAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EAAS,CAAA;AAAA,IACT,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA,GAIb;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,CAAA;AAAA;AAAA,IACL,EAAA,EAAI,CAAA;AAAA;AAAA,IACJ,GAAA,EAAK,CAAA;AAAA;AAAA,IACL,GAAA,EAAK,CAAA;AAAA;AAAA,IACL,EAAA,EAAI,CAAA;AAAA;AAAA,IACJ,GAAA,EAAK,CAAA;AAAA;AAAA,IACL,GAAA,EAAK,CAAA;AAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,EAAA,EAAI,CAAA;AAAA;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,OAAA,EAAS,CAAA;AAAA,IACT,MAAA,EAAQ,CAAA;AAAA,IACR,MAAA,EAAQ,CAAA;AAAA,IACR,SAAA,EAAW,CAAA;AAAA,IACX,UAAA,EAAY,CAAA;AAAA,IACZ,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU,CAAA;AAAA,IAEV,CAAA,EAAG,CAAA;AAAA;AAAA,IACH,EAAA,EAAI,CAAA;AAAA;AAAA;AAAA,IAEJ,EAAA,EAAI,CAAA;AAAA;AAAA,IACJ,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,EAAA,EAAI,CAAA;AAAA;AAAA,IAEJ,GAAA,EAAK,CAAA;AAAA;AAAA,IAEL,GAAA,EAAK,CAAA;AAAA,IACL,KAAA,EAAO,CAAA;AAAA,IACP,IAAA,EAAM,CAAA;AAAA;AAAA;AAAA;AAAA,IAGN,GAAA,EAAK,CAAA;AAAA;AAAA;AAAA,IAEL,EAAA,EAAI,CAAA;AAAA;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA;AAAA,IACT,QAAA,EAAU,CAAA;AAAA;AAAA;AAAA;AAAA,IAGV,GAAA,EAAK,CAAA;AAAA;AAAA,IACL,SAAA,EAAW,CAAA;AAAA;AAAA,IACX,QAAA,EAAU,CAAA;AAAA;AAAA,IACV,MAAA,EAAQ,CAAA;AAAA;AAAA,IACR,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,GAAA,EAAK,CAAA;AAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA;AAAA,IACP,IAAA,EAAM;AAAA;AAAA;AAEV,CAAA;;;ACvHA,IAAM,IAAA,GAAO;AAAA,EACX,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAK,UAAA,EAAY,YAAA,CAAK,UAAA,EAAY,EAC/D,CAAA;AAAA,EACD,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAK,SAAA,EAAW,YAAA,CAAK,SAAA,EAAW,EAAE,CAAA;AAAA,EAC/D,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAK,WAAA,EAAa,YAAA,CAAK,WAAA,EAAa,EAAE,CAAA;AAAA,EACrE,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAK,UAAA,EAAY,YAAA,CAAK,UAAA,EAAY,EAAE;AACpE,CAAA;AAEA,IAAO,kBAAA,GAAQ,IAAA;;;ACXf,IAAM,EAAA,GAAK,WAAA;AAEX,IAAO,WAAA,GAAQ;AAAA,EACb,UAAA,EAAY;AAAA,IACV,UAAA,EAAY,EAAA;AAAA;AAAA;AAAA,IAEZ,UAAA,EAAY,EAAA;AAAA;AAAA,IACZ,UAAA,EAAY;AAAA;AAAA,GACd;AAAA,EAEA,SAAA,EAAW;AAAA;AAAA,IAET,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EAEA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,EAAA;AAAA;AAAA,IACN,MAAA,EAAQ,EAAA;AAAA,IACR,KAAA,EAAO,EAAA;AAAA,IACP,IAAA,EAAM,EAAA;AAAA;AAAA,IACN,KAAA,EAAO,EAAA;AAAA,IACP,IAAA,EAAM,EAAA;AAAA,IACN,IAAA,EAAM,EAAA;AAAA,IACN,MAAA,EAAQ,EAAA;AAAA,IACR,OAAA,EAAS,EAAA;AAAA,IACT,QAAA,EAAU,EAAA;AAAA,IACV,IAAA,EAAM,EAAA;AAAA,IACN,IAAA,EAAM,EAAA;AAAA;AAAA,IACN,KAAA,EAAO,EAAA;AAAA,IACP,GAAA,EAAK,EAAA;AAAA;AAAA,IACL,EAAA,EAAI,EAAA;AAAA;AAAA,IACJ,GAAA,EAAK,EAAA;AAAA;AAAA,IACL,KAAA,EAAO,EAAA;AAAA;AAAA;AAAA,IAEP,MAAA,EAAQ,EAAA;AAAA;AAAA,IACR,KAAA,EAAO,EAAA;AAAA,IACP,IAAA,EAAM,EAAA;AAAA,IACN,IAAA,EAAM,EAAA;AAAA,IACN,KAAA,EAAO,EAAA;AAAA,IACP,GAAA,EAAK,EAAA;AAAA;AAAA,IACL,MAAA,EAAQ,EAAA;AAAA,IACR,KAAA,EAAO,EAAA;AAAA;AAAA;AAAA,IAGP,UAAA,EAAY,EAAA;AAAA,IACZ,SAAA,EAAW,EAAA;AAAA,IACX,EAAA,EAAI,EAAA;AAAA,IACJ,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,OAAA,EAAS,EAAA;AAAA,IACT,OAAA,EAAS,EAAA;AAAA,IACT,MAAA,EAAQ,EAAA;AAAA,IACR,OAAA,EAAS,EAAA;AAAA;AAAA,IACT,SAAA,EAAW,EAAA;AAAA;AAAA,IACX,QAAA,EAAU,EAAA;AAAA,IACV,GAAA,EAAK,EAAA;AAAA;AAAA,IACL,EAAA,EAAI,EAAA;AAAA;AAAA,IACJ,EAAA,EAAI,EAAA;AAAA,IAEJ,IAAA,EAAM,EAAA;AAAA;AAAA,IACN,KAAA,EAAO,EAAA;AAAA,IACP,KAAA,EAAO,EAAA;AAAA,IAEP,IAAA,EAAM,EAAA;AAAA,IACN,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IAER,MAAA,EAAQ,EAAA;AAAA,IACR,OAAA,EAAS,EAAA;AAAA,IACT,QAAA,EAAU,EAAA;AAAA,IAEV,KAAA,EAAO,EAAA;AAAA,IACP,OAAA,EAAS,EAAA;AAAA,IACT,MAAA,EAAQ,EAAA;AAAA,IACR,OAAA,EAAS,EAAA;AAAA,IACT,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,EAAA;AAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,MAAA,EAAQ,EAAA;AAAA,IAER,OAAA,EAAS,EAAA;AAAA,IACT,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,KAAA,EAAO,EAAA;AAAA,IACP,IAAA,EAAM,EAAA;AAAA;AAAA,IACN,KAAA,EAAO,EAAA;AAAA,IACP,EAAA,EAAI,EAAA;AAAA,IACJ,KAAA,EAAO,EAAA;AAAA,IACP,QAAA,EAAU,EAAA;AAAA,IACV,OAAA,EAAS,EAAA;AAAA,IACT,MAAA,EAAQ,EAAA;AAAA,IACR,QAAA,EAAU,EAAA;AAAA,IACV,EAAA,EAAI;AAAA;AAAA;AAAA,GAGN;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,EAAA;AAAA;AAAA,IACL,IAAA,EAAM,EAAA;AAAA;AAAA,IACN,EAAA,EAAI,EAAA;AAAA;AAAA,IACJ,MAAA,EAAQ,EAAA;AAAA;AAAA,IACR,EAAA,EAAI;AAAA;AAAA;AAAA;AAGR,CAAA;;;AC1GA,IAAMyD,EAAAA,GAAI,QAAA;AAKV,IAAO,cAAA,GAAQ;AAAA,EACb,UAAA,EAAY;AAAA;AAAA,IAEV,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,WAAA,EAAaA,EAAAA;AAAA;AAAA,IACb,WAAA,EAAaA;AAAA;AAAA,GACf;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,UAAA,EAAYA,EAAAA;AAAA;AAAA,IACZ,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,OAAA,EAASA,EAAAA;AAAA;AAAA,IACT,UAAA,EAAYA,EAAAA;AAAA;AAAA,IACZ,MAAA,EAAQA,EAAAA;AAAA;AAAA,IACR,WAAA,EAAaA,EAAAA;AAAA;AAAA,IACb,WAAA,EAAaA,EAAAA;AAAA;AAAA,IACb,WAAA,EAAaA;AAAA;AAAA,GACf;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAMA,EAAAA;AAAA,IACN,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,QAAA,EAAUA,EAAAA;AAAA;AAAA,IACV,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,EAAA,EAAIA,EAAAA;AAAA;AAAA,IACJ,EAAA,EAAIA,EAAAA;AAAA;AAAA,IACJ,EAAA,EAAIA,EAAAA;AAAA;AAAA;AAAA,IAEJ,KAAA,EAAOA,EAAAA;AAAA,IACP,KAAA,EAAOA,EAAAA;AAAA,IACP,MAAA,EAAQA,EAAAA;AAAA,IACR,OAAA,EAASA,EAAAA;AAAA,IACT,KAAA,EAAOA,EAAAA;AAAA,IACP,OAAA,EAASA,EAAAA;AAAA,IACT,IAAA,EAAMA,EAAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA,IACP,KAAA,EAAOA,EAAAA;AAAA,IACP,MAAA,EAAQA,EAAAA;AAAA,IACR,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA,IACP,KAAA,EAAOA,EAAAA;AAAA,IACP,IAAA,EAAMA,EAAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA,IACP,KAAA,EAAOA;AAAA;AAAA;AAAA;AAAA,GAIT;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,EAAA,EAAIA,EAAAA;AAAA;AAAA,IACJ,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,EAAA,EAAIA,EAAAA;AAAA;AAAA,IACJ,IAAA,EAAMA,EAAAA;AAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,EAAA,EAAIA,EAAAA;AAAA;AAAA,IACJ,KAAA,EAAOA,EAAAA;AAAA;AAAA,IACP,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,EAAA,EAAIA,EAAAA;AAAA;AAAA,IACJ,IAAA,EAAMA;AAAA;AAAA;AAEV,CAAA;;;ACnEA,IAAMA,EAAAA,GAAI,QAAA;AACV,IAAMuD,GAAAA,GAAK,WAAA;AAIX,IAAMC,KAAAA,GAAO;AAAA,EACX,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,UAAA,EAAY,eAAO,UAAA,EAAY;AAAA;AAAA,IAE/D,UAAA,EAAYxD,EAAAA;AAAA;AAAA,IACZ,UAAA,EAAYuD,GAAAA;AAAA;AAAA;AAAA,IAEZ,MAAA,EAAQvD;AAAA;AAAA,GACT,CAAA;AAAA,EAED,SAAA,EAAW,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,SAAA,EAAW,eAAO,SAAA,EAAW;AAAA,IAC5D,IAAA,EAAMuD;AAAA;AAAA;AAAA,GAEP,CAAA;AAAA,EAED,WAAA,EAAa,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,WAAA,EAAa,eAAO,WAAA,EAAa;AAAA,IAClE,EAAA,EAAIA,GAAAA;AAAA,IACJ,GAAA,EAAKvD,EAAAA;AAAA;AAAA,IACL,GAAA,EAAKuD,GAAAA;AAAA,IACL,EAAA,EAAIA,GAAAA;AAAA;AAAA,IACJ,OAAA,EAASvD,EAAAA;AAAA,IACT,QAAA,EAAUA,EAAAA;AAAA,IACV,SAAA,EAAWA,EAAAA;AAAA,IAEX,SAAA,EAAWA,EAAAA;AAAA,IACX,UAAA,EAAYA,EAAAA;AAAA,IACZ,WAAA,EAAaA,EAAAA;AAAA,IAEb,OAAA,EAASA,EAAAA;AAAA,IACT,QAAA,EAAUA,EAAAA;AAAA,IACV,QAAA,EAAUA,EAAAA;AAAA,IAEV,QAAA,EAAUA,EAAAA;AAAA,IACV,UAAA,EAAYA,EAAAA;AAAA,IACZ,WAAA,EAAaA,EAAAA;AAAA,IAEb,MAAA,EAAQA,EAAAA;AAAA,IACR,OAAA,EAASA,EAAAA;AAAA,IACT,QAAA,EAAUA,EAAAA;AAAA,IAEV,KAAA,EAAOA,EAAAA;AAAA,IACP,OAAA,EAASA,EAAAA;AAAA,IACT,QAAA,EAAUA,EAAAA;AAAA,IAEV,MAAA,EAAQuD,GAAAA;AAAA,IACR,MAAA,EAAQA,GAAAA;AAAA,IACR,MAAA,EAAQvD,EAAAA;AAAA,IACR,OAAA,EAASA,EAAAA;AAAA,IACT,IAAA,EAAMA,EAAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA,IACP,UAAA,EAAYA,EAAAA;AAAA,IACZ,QAAA,EAAUA,EAAAA;AAAA,IACV,IAAA,EAAMA,EAAAA;AAAA,IACN,OAAA,EAASA,EAAAA;AAAA,IACT,IAAA,EAAMuD;AAAA;AAAA,GACP,CAAA;AAAA,EAED,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,UAAA,EAAY,eAAO,UAAA,EAAY;AAAA,IAC/D,EAAA,EAAIvD,EAAAA;AAAA,IACJ,GAAA,EAAKA,EAAAA;AAAA;AAAA,IACL,GAAA,EAAKA;AAAA;AAAA,GACN;AACH,CAAA;AAEA,IAAO,kBAAA,GAAQwD,KAAAA;;;ACjEf,IAAMC,KAAAA,GAAO;AAAA,EACX,UAAA,EAAY;AAAA,IACV,UAAA,EAAY,MAAA;AAAA;AAAA,IACZ,QAAA,EAAU,MAAA;AAAA;AAAA,IACV,WAAA,EAAa;AAAA;AAAA,GACf;AAAA,EACA,SAAA,EAAW;AAAA;AAAA;AAGb,CAAA;AACA,IAAMD,KAAAA,GAAO;AAAA,EACX,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,YAAI,UAAA,EAAY,YAAA,CAAK,UAAA,EAAYC,KAAAA,CAAK,UAAU,CAAA;AAAA,EAC9E,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,YAAI,SAAA,EAAW,YAAA,CAAK,SAAA,EAAWA,KAAAA,CAAK,SAAS,CAAA;AAAA,EAC1E,WAAA,EAAa,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,WAAA,EAAa,aAAK,WAAA,EAAa;AAAA;AAAA,IAEhE,GAAA,EAAK,WAAA;AAAA,IAAa,EAAA,EAAI,WAAA;AAAA,IAAa,GAAA,EAAK,WAAA;AAAA,IAAa,EAAA,EAAI,WAAA;AAAA;AAAA,IAEzD,GAAA,EAAK,WAAA;AAAA;AAAA,IACL,GAAA,EAAK;AAAA;AAAA,GACN,CAAA;AAAA,EACD,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,UAAA,EAAY,aAAK,UAAU;AAC/D,CAAA;AACA,IAAO,gBAAA,GAAQD,KAAAA;;;ACvBf,IAAM,IAAA,GAAO,WAAA;AACb,IAAMD,GAAAA,GAAK,WAAA;AAEX,IAAM,OAAA,GAAU;AAAA,EACd,UAAA,EAAY;AAAA,IACV,MAAA,EAAQ,IAAA;AAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA;AAAA,IACT,UAAA,EAAY,IAAA;AAAA;AAAA,IACZ,SAAA,EAAW,IAAA;AAAA,IACX,IAAA,EAAM;AAAA;AAAA,GACR;AAAA,EACA,SAAA,EAAW;AAAA,IACT,UAAA,EAAY,IAAA;AAAA;AAAA,IACZ,OAAA,EAAS,IAAA;AAAA;AAAA,IACT,UAAA,EAAY,IAAA;AAAA;AAAA,IACZ,MAAA,EAAQ,IAAA;AAAA;AAAA,IACR,WAAA,EAAa,IAAA;AAAA;AAAA,IACb,IAAA,EAAM,IAAA;AAAA;AAAA,IACN,MAAA,EAAQ;AAAA;AAAA,GACV;AAAA,EACA,WAAA,EAAa;AAAA,IACX,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,GAAA,EAAK,IAAA;AAAA;AAAA,IACL,GAAA,EAAKA,GAAAA;AAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,GAAA,EAAKA,GAAAA;AAAA;AAAA,IACL,IAAA,EAAMA,GAAAA;AAAA;AAAA,IACN,MAAA,EAAQA;AAAA,GACV;AAAA,EACA,UAAA,EAAY;AAAA,IACV,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,IAAA,EAAM,IAAA;AAAA;AAAA,IACN,GAAA,EAAK,IAAA;AAAA;AAAA,IACL,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,IAAA,EAAM,IAAA;AAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA;AAAA,IACR,KAAA,EAAO,IAAA;AAAA;AAAA,IACP,GAAA,EAAK,IAAA;AAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA;AAAA,IACL,IAAA,EAAM,IAAA;AAAA;AAAA,IACN,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,OAAA,EAAS,IAAA;AAAA;AAAA,IACT,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,IAAA,EAAM,IAAA;AAAA;AAAA,IACN,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,IAAA,EAAM,IAAA;AAAA;AAAA,IACN,GAAA,EAAK,IAAA;AAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA;AAAA,IACL,KAAA,EAAO,IAAA;AAAA;AAAA,IACP,GAAA,EAAK,IAAA;AAAA;AAAA,IACL,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,KAAA,EAAOA;AAAA;AAEX,CAAA;AAEA,IAAO,gBAAA,GAAQ;AAAA,EACb,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,UAAA,EAAY,QAAQ,UAAU,CAAA;AAAA,EAChE,SAAA,EAAW,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,SAAA,EAAW,QAAQ,SAAS,CAAA;AAAA,EAC7D,WAAA,EAAa,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,WAAA,EAAa,QAAQ,WAAW,CAAA;AAAA,EACnE,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,UAAA,EAAY,QAAQ,UAAU;AAClE,CAAA;;;ACpEA,IAAME,KAAAA,GAAO;AAAA,EACX,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,WAAA;AAAA;AAAA,IACN,WAAA,EAAa;AAAA;AAAA;AAEjB,CAAA;AACA,IAAMD,KAAAA,GAAO;AAAA,EACX,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,UAAA,EAAY,aAAK,UAAA,EAAY;AAAA;AAAA,IAE7D,MAAA,EAAQ,MAAA;AAAA,IAAW,QAAA,EAAU;AAAA,GAC9B,CAAA;AAAA,EACD,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,YAAI,SAAA,EAAW,YAAA,CAAK,SAAA,EAAWC,KAAAA,CAAK,SAAS,CAAA;AAAA,EAC1E,WAAA,EAAa,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,WAAA,EAAa,aAAK,WAAA,EAAa;AAAA;AAAA,IAEhE,IAAA,EAAM,MAAA;AAAA,IAAW,GAAA,EAAK,MAAA;AAAA,IAAW,GAAA,EAAK,MAAA;AAAA;AAAA,IAEtC,IAAA,EAAM,WAAA;AAAA,IAAa,IAAA,EAAM,WAAA;AAAA,IAAa,GAAA,EAAK,WAAA;AAAA;AAAA,IAE3C,EAAA,EAAI;AAAA,GACL,CAAA;AAAA,EACD,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,WAAA,CAAI,UAAA,EAAY,aAAK,UAAA,EAAY;AAAA,IAC7D,EAAA,EAAI,MAAA;AAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAAA,GACL;AACH,CAAA;AAGA,IAAO,mBAAA,GAAQD,KAAAA;;;AC3Bf,IAAMC,KAAAA,GAAO;AAAA,EACX,UAAA,EAAY;AAAA,IACV,MAAA,EAAQ,QAAA;AAAA,IACR,SAAA,EAAW,QAAA;AAAA,IACX,YAAA,EAAc,QAAA;AAAA,IACd,UAAA,EAAY;AAAA,GACd;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO;AAAA;AAAA,GACT;AAAA,EACA,WAAA,EAAa;AAAA,IACX,GAAA,EAAK,QAAA;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,EAAA,EAAI,QAAA;AAAA,IACJ,EAAA,EAAI,QAAA;AAAA,IACJ,OAAA,EAAS,QAAA;AAAA;AAAA,IAET,GAAA,EAAK,QAAA;AAAA,IACL,EAAA,EAAI,QAAA;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,EAAA,EAAI,QAAA;AAAA,IACJ,GAAA,EAAK,QAAA;AAAA;AAAA,IAEL,EAAA,EAAI,QAAA;AAAA,IACJ,IAAA,EAAM;AAAA,GACR;AAAA,EACA,UAAA,EAAY;AAAA;AAAA,IAEV,GAAA,EAAK,QAAA;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA;AAAA,IAEN,EAAA,EAAI,QAAA;AAAA,IACJ,EAAA,EAAI,QAAA;AAAA,IACJ,IAAA,EAAM;AAAA;AAEV,CAAA;AACA,IAAMD,KAAAA,GAAO;AAAA,EACX,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,eAAO,UAAA,EAAY,YAAA,CAAK,UAAA,EAAYC,KAAAA,CAAK,UAAU,CAAA;AAAA,EACjF,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,eAAO,SAAA,EAAW,YAAA,CAAK,SAAA,EAAWA,KAAAA,CAAK,SAAS,CAAA;AAAA,EAC7E,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,eAAO,WAAA,EAAa,YAAA,CAAK,WAAA,EAAaA,KAAAA,CAAK,WAAW,CAAA;AAAA,EACrF,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,eAAO,UAAA,EAAY,YAAA,CAAK,UAAA,EAAYA,KAAAA,CAAK,UAAU;AACnF,CAAA;AACA,IAAO,mBAAA,GAAQD,KAAAA;;;AC7Cf,IAAM,EAAA,GAAK,UAAA;AACX,IAAM,EAAA,GAAK,YAAA;AAGX,IAAMA,KAAAA,GAAO;AAAA,EACX,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,YAAA,CAAK,UAAA,EAAY,aAAK,UAAA,EAAY;AAAA;AAAA,IAE9D,SAAA,EAAW,EAAA;AAAA;AAAA,IACX,QAAA,EAAU;AAAA;AAAA,GACX,CAAA;AAAA,EACD,SAAA,EAAW,OAAO,MAAA,CAAO,IAAI,YAAA,CAAK,SAAA,EAAW,aAAK,SAAA,EAAW;AAAA,IAC3D,UAAA,EAAY,EAAA;AAAA,IAAI,MAAA,EAAQ,EAAA;AAAA,IAAI,SAAA,EAAW,EAAA;AAAA,IACvC,MAAA,EAAQ;AAAA,GACT,CAAA;AAAA,EACD,WAAA,EAAa,OAAO,MAAA,CAAO,IAAI,YAAA,CAAK,WAAA,EAAa,aAAK,WAAA,EAAa;AAAA;AAAA,IAEjE,EAAA,EAAI,EAAA;AAAA,IAAI,GAAA,EAAK,EAAA;AAAA;AAAA,IAEb,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA,EAAM;AAAA;AAAA,GACP,CAAA;AAAA,EACD,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,YAAA,CAAK,UAAA,EAAY,aAAK,UAAA,EAAY;AAAA;AAAA,IAE9D,OAAA,EAAS,EAAA;AAAA;AAAA;AAAA,IAGT,KAAA,EAAO,EAAA;AAAA;AAAA,IACP,GAAA,EAAK,EAAA;AAAA;AAAA,IACL,GAAA,EAAK,EAAA;AAAA;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,EAAA,EAAI,IAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACL;AACH,CAAA;AAEA,IAAO,iBAAA,GAAQA,KAAAA;;;ACrCf,IAAMnG,EAAAA,GAAI,QAAA;AAEV,IAAO,cAAA,GAAQ;AAAA,EACb,UAAA,EAAY;AAAA,IACV,SAAA,EAAWA,EAAAA;AAAA,IACX,MAAA,EAAQA;AAAA;AAAA,GAEV;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQA,EAAAA;AAAA,IACR,UAAA,EAAYA,EAAAA;AAAA,IACZ,IAAA,EAAMA;AAAA;AAAA;AAAA;AAAA;AAAA,GAIR;AAAA,EAIA,WAAA,EAAa;AAAA,IACX,EAAA,EAAIA,EAAAA;AAAA,IACJ,GAAA,EAAKA,EAAAA;AAAA,IACL,EAAA,EAAIA,EAAAA;AAAA,IACJ,IAAA,EAAMA,EAAAA;AAAA,IACN,KAAA,EAAOA;AAAA,GACT;AAAA,EACA,UAAA,EAAY;AAAA;AAAA,IAEV,IAAA,EAAMA,EAAAA;AAAA,IACN,IAAA,EAAMA,EAAAA;AAAA,IACN,IAAA,EAAMA,EAAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA,IACP,KAAA,EAAOA,EAAAA;AAAA,IACP,IAAA,EAAMA,EAAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA,IACP,MAAA,EAAQA,EAAAA;AAAA,IACR,OAAA,EAASA,EAAAA;AAAA,IACT,MAAA,EAAQA,EAAAA;AAAA,IACR,MAAA,EAAQA,EAAAA;AAAA,IACR,KAAA,EAAOA,EAAAA;AAAA,IACP,MAAA,EAAQA,EAAAA;AAAA,IACR,IAAA,EAAMA,EAAAA;AAAA,IACN,IAAA,EAAMA,EAAAA;AAAA,IACN,KAAA,EAAOA,EAAAA;AAAA,IACP,OAAA,EAASA,EAAAA;AAAA,IACT,KAAA,EAAOA,EAAAA;AAAA,IACP,MAAA,EAAQA;AAAA;AAAA;AAGZ,CAAA;;;AC7CA,IAAM,CAAA,GAAI,OAAA;AACV,IAAMA,EAAAA,GAAI,QAAA;AACV,IAAM,KAAA,GAAQ;AAAA,EACZ,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,WAAA,EAAa;AAAA,IACX,EAAA,EAAI,CAAA;AAAA,IACJ,EAAA,EAAI,CAAA;AAAA,IACJ,EAAA,EAAI,CAAA;AAAA,IACJ,MAAA,EAAQ,CAAA;AAAA,IACR,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,OAAA,EAAS,CAAA;AAAA,IACT,KAAA,EAAO,CAAA;AAAA,IACP,GAAA,EAAK,CAAA;AAAA,IACL,QAAA,EAAU,CAAA;AAAA,IACV,EAAA,EAAI,CAAA;AAAA;AAAA,IACJ,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW,CAAA;AAAA,IACX,IAAA,EAAMA;AAAA;AAAA,GAER;AAAA,EACA,UAAA,EAAY;AAAA,IACV,QAAA,EAAU,CAAA;AAAA,IACV,EAAA,EAAI,CAAA;AAAA,IACJ,EAAA,EAAI,CAAA;AAAA,IACJ,KAAA,EAAO,CAAA;AAAA,IACP,GAAA,EAAK;AAAA;AAAA;AAET,CAAA;AACA,IAAO,mBAAA,GAAQ;AAAA,EACb,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,cAAA,CAAO,UAAA,EAAY,MAAM,UAAU,CAAA;AAAA,EACjE,SAAA,EAAW,OAAO,MAAA,CAAO,IAAI,cAAA,CAAO,SAAA,EAAW,MAAM,SAAS,CAAA;AAAA,EAC9D,WAAA,EAAa,OAAO,MAAA,CAAO,IAAI,cAAA,CAAO,WAAA,EAAa,MAAM,WAAW,CAAA;AAAA,EACpE,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,cAAA,CAAO,UAAA,EAAY,MAAM,UAAU;AACnE,CAAA;;;AC3CA,IAAMmG,KAAAA,GAAO;AAAA,EACX,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,YAAA,CAAK,UAAA,EAAY,eAAO,UAAU,CAAA;AAAA,EAChE,SAAA,EAAW,OAAO,MAAA,CAAO,IAAI,YAAA,CAAK,SAAA,EAAW,eAAO,SAAS,CAAA;AAAA,EAC7D,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,IAAI,YAAA,CAAK,WAAA,EAAa,cAAA,CAAO,WAAA,EAAa,EAAE,CAAA,EAAG,YAAA,EAAc,EAAA,EAAI,cAAc,CAAA;AAAA,EAC1G,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,YAAA,CAAK,UAAA,EAAY,eAAO,UAAU;AAClE,CAAA;AACA,IAAO,mBAAA,GAAQA,KAAAA;;;ACLf,IAAM,KAAA,GAAQ;AAAA,EACZ,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAK,UAAA,EAAY,cAAA,CAAO,UAAA,EAAY,YAAA,CAAK,UAAU,CAAA;AAAA,EACjF,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAK,SAAA,EAAW,cAAA,CAAO,SAAA,EAAW,YAAA,CAAK,SAAS,CAAA;AAAA,EAC7E,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAK,WAAA,EAAa,cAAA,CAAO,WAAA,EAAa,YAAA,CAAK,WAAW,CAAA;AAAA,EACrF,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAK,UAAA,EAAY,cAAA,CAAO,UAAA,EAAY,YAAA,CAAK,UAAU;AACnF,CAAA;AACA,IAAO,mBAAA,GAAQ,KAAA;;;ACXf,IAAMnG,EAAAA,GAAI,OAAA;AAGV,IAAM,KAAA,GAAQ;AAAA,EACZ,UAAA,EAAY;AAAA,IACV,KAAA,EAAOA;AAAA,GACT;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAOA,EAAAA;AAAA,IACP,YAAA,EAAcA;AAAA,GAChB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,EAAA,EAAIA,EAAAA;AAAA,IACJ,EAAA,EAAIA,EAAAA;AAAA,IACJ,IAAA,EAAMA,EAAAA;AAAA,IACN,IAAA,EAAMA,EAAAA;AAAA,IACN,EAAA,EAAIA;AAAA,GACN;AAAA,EACA,UAAA,EAAY;AAAA,IACV,EAAA,EAAIA,EAAAA;AAAA,IACJ,EAAA,EAAIA,EAAAA;AAAA,IACJ,IAAA,EAAMA,EAAAA;AAAA,IACN,IAAA,EAAMA,EAAAA;AAAA,IACN,EAAA,EAAIA,EAAAA;AAAA,IACJ,UAAA,EAAYA,EAAAA;AAAA,IACZ,OAAA,EAASA,EAAAA;AAAA,IACT,MAAA,EAAQA,EAAAA;AAAA,IACR,IAAA,EAAMA;AAAA;AAEV,CAAA;AAEA,IAAMmG,KAAAA,GAAO;AAAA,EACX,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,KAAA,CAAM,UAAA,EAAY,eAAO,UAAU,CAAA;AAAA,EACjE,SAAA,EAAW,OAAO,MAAA,CAAO,IAAI,KAAA,CAAM,SAAA,EAAW,eAAO,SAAS,CAAA;AAAA,EAC9D,WAAA,EAAa,OAAO,MAAA,CAAO,IAAI,KAAA,CAAM,WAAA,EAAa,eAAO,WAAW,CAAA;AAAA,EACpE,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,KAAA,CAAM,UAAA,EAAY,eAAO,UAAU;AACnE,CAAA;AACA,IAAO,oBAAA,GAAQA,KAAAA;;;AClCf,IAAME,MAAAA,GAAQ;AAAA,EACZ,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,cAAA,CAAO,UAAA,EAAY,YAAI,UAAU,CAAA;AAAA,EAC/D,SAAA,EAAW,OAAO,MAAA,CAAO,IAAI,cAAA,CAAO,SAAA,EAAW,YAAI,SAAS,CAAA;AAAA,EAC5D,WAAA,EAAa,OAAO,MAAA,CAAO,IAAI,cAAA,CAAO,WAAA,EAAa,YAAI,WAAW,CAAA;AAAA,EAClE,UAAA,EAAY,OAAO,MAAA,CAAO,IAAI,cAAA,CAAO,UAAA,EAAY,YAAI,UAAU;AACjE,CAAA;AACA,IAAO,kBAAA,GAAQA,MAAAA;;;ACTf,IAAM,EAAA,GAAK,MAAA;AACX,IAAMA,MAAAA,GAAQ;AAAA,EACZ,UAAA,EAAY,EAAE,KAAA,EAAO,EAAA,EAAG;AAAA,EACxB,WAAW,EAAC;AAAA,EACZ,WAAA,EAAa;AAAA,IACX,GAAA,EAAK,EAAA;AAAA,IACL,KAAA,EAAO,EAAA;AAAA,IACP,IAAA,EAAM,EAAA;AAAA,IACN,MAAA,EAAQ,EAAA;AAAA;AAAA,IACR,KAAA,EAAO,EAAA;AAAA,IACP,EAAA,EAAI,EAAA;AAAA,IACJ,MAAA,EAAQ;AAAA;AAAA,GACV;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,EAAA;AAAA,IACL,OAAA,EAAS,EAAA;AAAA,IACT,KAAA,EAAO,EAAA;AAAA,IACP,IAAA,EAAM;AAAA;AAAA;AAEV,CAAA;AACA,IAAO,iBAAA,GAAQA,MAAAA;;;ACPf,IAAMA,MAAAA,GAAQ;AAAA,EACZ,YAAA,EAAc,kBAAA;AAAA,EACd,YAAA,EAAc,kBAAA;AAAA,EACd,UAAA,EAAY,gBAAA;AAAA,EACZ,UAAA,EAAY,gBAAA;AAAA,EACZ,aAAA,EAAe,mBAAA;AAAA,EACf,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,cAAA,EAAgB,oBAAA;AAAA,EAChB,YAAA,EAAc,kBAAA;AAAA,EACd,WAAA,EAAa;AACf,CAAA;AAEA,IAAM,IAAA,GAAO,CAAC,GAAA,EAAK,IAAA,KAAS;AAC1B,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,GAAG,EAAE,MAAA,CAAO,CAACrD,IAAG3D,EAAAA,KAAM;AAC5C,IAAA2D,GAAE3D,EAAC,CAAA,GAAI,IAAIA,EAAC,CAAA,KAAM,eAAe,cAAA,GAAiB,QAAA;AAClD,IAAA,OAAO2D,EAAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,IAAI,CAAA;AAChC,CAAA;AAGAqD,MAAAA,CAAM,aAAa,CAAA,GAAI;AAAA,EACrB,WAAA,EAAa,IAAA,CAAKA,MAAAA,CAAM,WAAW,EAAE,WAAA,EAAa;AAAA,IAChD,GAAA,EAAK,QAAA;AAAA;AAAA,IACL,IAAA,EAAM;AAAA,GACP,CAAA;AAAA,EACD,UAAA,EAAY,IAAA,CAAKA,MAAAA,CAAM,WAAW,EAAE,UAAA,EAAY;AAAA,IAC9C,GAAA,EAAK,cAAA;AAAA,IAAgB,GAAA,EAAK,cAAA;AAAA,IAAgB,GAAA,EAAK,cAAA;AAAA,IAC/C,EAAA,EAAI,IAAA;AAAA,IAAM,EAAA,EAAI,IAAA;AAAA,IACd,EAAA,EAAI,cAAA;AAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAAA,GACL,CAAA;AAAA,EACD,UAAA,EAAY,IAAA,CAAKA,MAAAA,CAAM,WAAW,EAAE,UAAA,EAAY;AAAA,IAC9C,WAAA,EAAa,cAAA;AAAA;AAAA,IACb,IAAA,EAAM,MAAA;AAAA;AAAA,IACN,UAAA,EAAY;AAAA;AAAA,GACb,CAAA;AAAA,EACD,SAAA,EAAW,IAAA,CAAKA,MAAAA,CAAM,WAAW,EAAE,SAAA,EAAW;AAAA,IAC5C,MAAA,EAAQ,QAAA;AAAA;AAAA,IACR,IAAA,EAAM,cAAA;AAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAAA,GACR;AACH,CAAA;AAEA,IAAO,aAAA,GAAQA,MAAAA;;;AC7Df,IAAM,GAAA,GAAM,WAAA;AACZ,IAAM,GAAA,GAAM,YAAA;AACZ,IAAM,IAAA,GAAO,cAAA;AACb,IAAM,IAAA,GAAO,UAAA;AACb,IAAM,IAAA,GAAO,WAAA;AACb,IAAM,GAAA,GAAM,QAAA;AACZ,IAAM,IAAA,GAAO,QAAA;AACb,IAAM,KAAA,GAAQ,OAAA;AACd,IAAM,EAAA,GAAK,MAAA;AACX,IAAM,IAAA,GAAO,MAAA;AACb,IAAM,IAAA,GAAO,YAAA;AACb,IAAM,IAAA,GAAO,UAAA;AACb,IAAM,KAAA,GAAQ,OAAA;AACd,IAAM,KAAA,GAAQ,OAAA;AACd,IAAM,GAAA,GAAM,YAAA;AAEZ,IAAOC,iBAAAA,GAAQ;AAAA,EACb,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AAAA;AAAA,IAEE,EAAA,EAAI,IAAA;AAAA,IACJ,EAAA,EAAI,IAAA;AAAA,IACJ,EAAA,EAAI,GAAA;AAAA,IACJ,EAAA,EAAI,GAAA;AAAA,IACJ,IAAA,EAAM,EAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA;AAAA,IAEE,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,QAAA;AAAA,IACP,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,EAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA;AAAA,IAEL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA;AAAA,IAEL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA;AAAA,IAEE,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,EAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA;AAAA,IAEN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA;AAAA;AAAA,IAEN,IAAA,EAAM,GAAA;AAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA;AAAA,IAEE,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA;AAAA,IAEP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO,IAAA;AAAA,IACP,KAA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","file":"index.cjs","sourcesContent":["import { z } from 'zod'\n\n// ============================================================================\n// Feedback Schema (v1.1 enhancement)\n// ============================================================================\n\n/**\n * Structured feedback following the \"Not Yet\" protocol\n * - short: Brief acknowledgment (1 sentence)\n * - detailed: Full explanation of the misconception\n * - socraticHint: Optional guiding question for discovery learning\n */\nexport const FeedbackSchema = z.object({\n short: z.string().min(1).max(200),\n detailed: z.string().min(1).max(1000),\n socraticHint: z.string().max(300).optional(),\n})\n\nexport type Feedback = z.infer<typeof FeedbackSchema>\n\n// ============================================================================\n// Option Schema\n// ============================================================================\n\nexport const OptionKeySchema = z.enum(['A', 'B', 'C', 'D'])\n\nexport type OptionKey = z.infer<typeof OptionKeySchema>\n\n/**\n * Answer option with optional misconception tracking (v1.1)\n */\nexport const OptionSchema = z.object({\n key: OptionKeySchema,\n text: z.string().min(1),\n isCorrect: z.boolean(),\n // v1.1 fields - optional for backward compatibility\n misconceptionId: z.string().optional(),\n feedback: FeedbackSchema.optional(),\n})\n\nexport type Option = z.infer<typeof OptionSchema>\n\n// ============================================================================\n// Question Type Enums\n// ============================================================================\n\nexport const QuestionTypeSchema = z.enum([\n 'vocabulary',\n 'code_understanding',\n 'problem_solving',\n 'application',\n 'reflection',\n])\n\nexport type QuestionType = z.infer<typeof QuestionTypeSchema>\n\n/**\n * Question archetype for pedagogical classification\n * - vocabulary: Definition/terminology questions\n * - trace: Code tracing (mental execution)\n * - bebras: Logic-first, computational thinking\n * - blockmodel: Surface/flow/purpose analysis\n * - parsons: Code block reordering (future)\n */\nexport const QuestionArchetypeSchema = z.enum([\n 'vocabulary',\n 'trace',\n 'bebras',\n 'blockmodel',\n 'parsons',\n])\n\nexport type QuestionArchetype = z.infer<typeof QuestionArchetypeSchema>\n\nexport const DifficultySchema = z.enum(['easy', 'medium', 'hard', 'challenge'])\n\nexport type Difficulty = z.infer<typeof DifficultySchema>\n\nexport const BloomsTaxonomySchema = z.enum([\n 'remember',\n 'understand',\n 'apply',\n 'analyze',\n 'evaluate',\n 'create',\n])\n\nexport type BloomsTaxonomy = z.infer<typeof BloomsTaxonomySchema>\n\n// ============================================================================\n// Question Metadata Schema\n// ============================================================================\n\nexport const QuestionMetadataSchema = z.object({\n difficulty: DifficultySchema,\n estimatedTime: z.number().int().positive(), // seconds\n bloomsTaxonomy: BloomsTaxonomySchema,\n tags: z.array(z.string()),\n source: z.string().default('exit-ticket'),\n version: z.string().default('1.1'),\n createdDate: z.string().optional(),\n lastModified: z.string().optional(),\n})\n\nexport type QuestionMetadata = z.infer<typeof QuestionMetadataSchema>\n\n// ============================================================================\n// Question Schema (v1.1)\n// ============================================================================\n\n/**\n * Full question schema with v1.1 enhancements:\n * - questionArchetype: Pedagogical classification\n * - misconceptionTargets: Expected misconceptions this question probes\n * - options with misconceptionId and structured feedback\n */\nexport const QuestionSchema = z.object({\n // Identifiers\n questionId: z.string().regex(/^[a-z0-9-]+-l\\d+-q\\d+$/),\n globalId: z.string().regex(/^exit-ticket-\\d{4}$/),\n questionNumber: z.number().int().positive().max(5),\n\n // Classification\n questionType: QuestionTypeSchema,\n questionTypeLabel: z.string(),\n questionArchetype: QuestionArchetypeSchema.optional(), // v1.1\n\n // Content\n prompt: z.string().min(10),\n hasCodeBlock: z.boolean(),\n codeLanguage: z.string().nullable(),\n codeContent: z.string().nullable(),\n\n // Misconception targeting (v1.1)\n misconceptionTargets: z.array(z.string()).optional(),\n\n // Answer options (exactly 4)\n options: z.array(OptionSchema).length(4),\n\n // Correct answer\n correctAnswer: OptionKeySchema,\n correctAnswerText: z.string(),\n\n // Metadata\n metadata: QuestionMetadataSchema,\n})\n\nexport type Question = z.infer<typeof QuestionSchema>\n\n// ============================================================================\n// Question without answer (for Standard tier - no answer leakage)\n// ============================================================================\n\nexport const QuestionWithoutAnswerSchema = QuestionSchema.omit({\n correctAnswer: true,\n correctAnswerText: true,\n}).extend({\n options: z.array(\n OptionSchema.omit({\n isCorrect: true,\n feedback: true,\n misconceptionId: true,\n })\n ).length(4),\n})\n\nexport type QuestionWithoutAnswer = z.infer<typeof QuestionWithoutAnswerSchema>\n","import { z } from 'zod'\nimport { QuestionSchema } from './question'\n\n// ============================================================================\n// Course Domain & Tier\n// ============================================================================\n\nexport const CourseDomainSchema = z.enum([\n // AI & Data Science\n 'ai_data_science',\n 'ai_ml_cv',\n 'ai_generative',\n 'ai_advanced',\n // Web Development\n 'web_development',\n // Mobile Development\n 'mobile_development',\n 'mobile',\n // Block-based Programming\n 'block_based',\n 'python_programming',\n 'design',\n // Foundation\n 'foundation',\n 'creative_computing',\n])\n\nexport type CourseDomain = z.infer<typeof CourseDomainSchema>\n\nexport const CourseTierSchema = z.enum([\n 'foundation',\n 'intermediate',\n 'advanced',\n])\n\nexport type CourseTier = z.infer<typeof CourseTierSchema>\n\n// ============================================================================\n// Lesson Schema\n// ============================================================================\n\nexport const LessonSchema = z.object({\n lessonId: z.string(), // e.g., \"ai-1-lesson-1\"\n lessonNumber: z.number().int().positive(),\n lessonTitle: z.string(),\n lessonSlug: z.string().optional(),\n totalQuestions: z.number().int().positive().default(5),\n questions: z.array(QuestionSchema),\n})\n\nexport type Lesson = z.infer<typeof LessonSchema>\n\n// ============================================================================\n// Course Schema\n// ============================================================================\n\nexport const CourseSchema = z.object({\n courseId: z.string(), // e.g., \"ai-1\"\n courseName: z.string(), // e.g., \"AI-1 Data Analysis and Data Science\"\n courseCode: z.string(), // e.g., \"AI1\"\n domain: CourseDomainSchema,\n tier: CourseTierSchema,\n difficulty: z.number().int().min(1).max(5),\n totalLessons: z.number().int().positive(),\n totalQuestions: z.number().int().positive(),\n sourceFile: z.string().optional(),\n lessons: z.array(LessonSchema),\n})\n\nexport type Course = z.infer<typeof CourseSchema>\n\n// ============================================================================\n// Course Summary (without questions - for listing)\n// ============================================================================\n\nexport const CourseSummarySchema = CourseSchema.omit({ lessons: true }).extend({\n lessons: z.array(\n LessonSchema.omit({ questions: true })\n ).optional(),\n})\n\nexport type CourseSummary = z.infer<typeof CourseSummarySchema>\n","import { z } from 'zod'\nimport { OptionKeySchema, FeedbackSchema } from './question'\n\n// ============================================================================\n// User Response Schema\n// ============================================================================\n\n/**\n * A single user response to a question\n */\nexport const UserResponseSchema = z.object({\n questionId: z.string(),\n selectedAnswer: OptionKeySchema,\n timeSpent: z.number().int().nonnegative().optional(), // milliseconds\n submittedAt: z.string().datetime().optional(),\n})\n\nexport type UserResponse = z.infer<typeof UserResponseSchema>\n\n// ============================================================================\n// Assessment Submission Schema\n// ============================================================================\n\n/**\n * An assessment submission containing multiple responses\n */\nexport const AssessmentSubmissionSchema = z.object({\n assessmentId: z.string().uuid().optional(), // Generated if not provided\n userId: z.string().optional(), // For authenticated users\n sessionId: z.string().optional(), // For anonymous sessions\n courseId: z.string(),\n lessonId: z.string().optional(),\n responses: z.array(UserResponseSchema).min(1),\n submittedAt: z.string().datetime(),\n metadata: z.record(z.unknown()).optional(), // Custom metadata\n})\n\nexport type AssessmentSubmission = z.infer<typeof AssessmentSubmissionSchema>\n\n// ============================================================================\n// Graded Response Schema (Premium tier)\n// ============================================================================\n\n/**\n * Result of grading a single response\n */\nexport const GradedResponseSchema = z.object({\n questionId: z.string(),\n selectedAnswer: OptionKeySchema,\n correctAnswer: OptionKeySchema,\n isCorrect: z.boolean(),\n misconceptionId: z.string().nullable(), // For incorrect answers\n feedback: FeedbackSchema.optional(),\n timeSpent: z.number().int().nonnegative().optional(),\n})\n\nexport type GradedResponse = z.infer<typeof GradedResponseSchema>\n\n// ============================================================================\n// Misconception Report Schema (Premium tier)\n// ============================================================================\n\n/**\n * Aggregated misconception analysis for an assessment\n */\nexport const MisconceptionReportSchema = z.object({\n misconceptionId: z.string(),\n count: z.number().int().positive(),\n percentage: z.number().min(0).max(100),\n questionIds: z.array(z.string()),\n description: z.string().optional(),\n})\n\nexport type MisconceptionReport = z.infer<typeof MisconceptionReportSchema>\n\n// ============================================================================\n// Graded Assessment Schema (Premium tier)\n// ============================================================================\n\n/**\n * Complete graded assessment with scores and misconception analysis\n */\nexport const GradedAssessmentSchema = z.object({\n assessmentId: z.string().uuid(),\n userId: z.string().optional(),\n courseId: z.string(),\n lessonId: z.string().optional(),\n\n // Scores\n totalQuestions: z.number().int().positive(),\n correctCount: z.number().int().nonnegative(),\n incorrectCount: z.number().int().nonnegative(),\n score: z.number().min(0).max(100), // Percentage\n passed: z.boolean(), // Based on threshold (default 70%)\n\n // Detailed results\n responses: z.array(GradedResponseSchema),\n\n // Misconception analysis (v1.1 feature)\n misconceptions: z.array(MisconceptionReportSchema).optional(),\n topMisconceptions: z.array(z.string()).max(3).optional(),\n\n // Timing\n totalTimeSpent: z.number().int().nonnegative().optional(), // milliseconds\n averageTimePerQuestion: z.number().nonnegative().optional(),\n submittedAt: z.string().datetime(),\n gradedAt: z.string().datetime(),\n})\n\nexport type GradedAssessment = z.infer<typeof GradedAssessmentSchema>\n\n// ============================================================================\n// Validation Result Schema (Standard tier - no answer leakage)\n// ============================================================================\n\n/**\n * Result of validating an assessment submission\n * Does NOT reveal correct answers - only schema compliance\n */\nexport const ValidationResultSchema = z.object({\n valid: z.boolean(),\n errors: z.array(z.object({\n path: z.array(z.union([z.string(), z.number()])),\n message: z.string(),\n code: z.string().optional(),\n })).optional(),\n isComplete: z.boolean(), // All questions answered\n questionCount: z.number().int(),\n answeredCount: z.number().int(),\n})\n\nexport type ValidationResult = z.infer<typeof ValidationResultSchema>\n","import { z } from 'zod'\n\n// ============================================================================\n// Certification Metadata Schema (v1.2)\n// Used for Academic Transcript and Course Certification\n// ============================================================================\n\n/**\n * Certification Project Schema\n * Represents a project in a course for certification tracking\n */\nexport const CertificationProjectSchema = z.object({\n projectNumber: z.number().int().positive(),\n projectName: z.string(),\n sessionNumber: z.number().int().positive(),\n})\n\nexport type CertificationProject = z.infer<typeof CertificationProjectSchema>\n\n/**\n * Certification Metadata Schema (v1.2)\n *\n * Contains course metadata for generating:\n * - Academic Transcripts (topics list)\n * - Course Certifications (completion requirements)\n *\n * Extracted from course Welcome Note.mdx session tables.\n */\nexport const CertificationMetadataSchema = z.object({\n // Course identification\n courseId: z.string(), // e.g., \"bbp\"\n courseName: z.string(), // e.g., \"BBP: Block-based Python\"\n courseCode: z.string(), // e.g., \"BBP\"\n domain: z.string(), // e.g., \"block_based\"\n tier: z.string(), // e.g., \"foundation\"\n\n // Schema version\n schemaVersion: z.literal('1.2.0'),\n lastUpdated: z.string(), // ISO date string, e.g., \"2025-12-27\"\n\n // Academic Transcript content\n topics: z.array(z.string()), // Lesson names for transcript listing\n projects: z.array(CertificationProjectSchema),\n\n // Summary counts\n totalSessions: z.number().int().nonnegative(),\n totalTopics: z.number().int().nonnegative(),\n totalProjects: z.number().int().nonnegative(),\n})\n\nexport type CertificationMetadata = z.infer<typeof CertificationMetadataSchema>\n\n/**\n * Certification Index Schema\n * Lists all available courses with certification metadata\n */\nexport const CertificationIndexSchema = z.object({\n schemaVersion: z.string(),\n lastUpdated: z.string(),\n totalCourses: z.number().int().nonnegative(),\n courses: z.array(\n z.object({\n courseCode: z.string(),\n dataFile: z.string(),\n })\n ),\n cdnBaseUrl: z.string().url(),\n})\n\nexport type CertificationIndex = z.infer<typeof CertificationIndexSchema>\n","import type { Question } from '../../schemas'\nimport type { Statistics } from '../../types'\n\n// ANSI color codes (chalk-free for simpler dependencies)\nconst colors = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n}\n\nexport function green(text: string): string {\n return `${colors.green}${text}${colors.reset}`\n}\n\nexport function red(text: string): string {\n return `${colors.red}${text}${colors.reset}`\n}\n\nexport function yellow(text: string): string {\n return `${colors.yellow}${text}${colors.reset}`\n}\n\nexport function cyan(text: string): string {\n return `${colors.cyan}${text}${colors.reset}`\n}\n\nexport function bold(text: string): string {\n return `${colors.bold}${text}${colors.reset}`\n}\n\nexport function dim(text: string): string {\n return `${colors.dim}${text}${colors.reset}`\n}\n\n/**\n * Format a question for terminal display\n */\nexport function formatQuestion(q: Question, index: number): string {\n const difficultyColors: Record<string, string> = {\n easy: colors.green,\n medium: colors.yellow,\n hard: colors.red,\n challenge: colors.magenta,\n }\n\n const diffColor = difficultyColors[q.metadata.difficulty] || colors.white\n const diffLabel = `${diffColor}${q.metadata.difficulty}${colors.reset}`\n\n let output = `\\n${colors.bold}Q${index + 1}${colors.reset} [${diffLabel}] ${q.prompt}\\n`\n\n // Show code block if present\n if (q.hasCodeBlock && q.codeContent) {\n output += `${colors.dim}┌─ ${q.codeLanguage || 'code'} ─────────────────${colors.reset}\\n`\n const codeLines = q.codeContent.split('\\n')\n for (const line of codeLines) {\n output += `${colors.dim}│${colors.reset} ${line}\\n`\n }\n output += `${colors.dim}└────────────────────────────${colors.reset}\\n`\n }\n\n // Show options\n for (const opt of q.options) {\n output += ` ${colors.cyan}${opt.key})${colors.reset} ${opt.text}\\n`\n }\n\n return output\n}\n\n/**\n * Format statistics for terminal display\n */\nexport function formatStats(stats: Statistics, title?: string): string {\n let output = '\\n'\n\n if (title) {\n output += `${colors.bold}${colors.cyan}${title}${colors.reset}\\n`\n output += `${'─'.repeat(40)}\\n\\n`\n }\n\n output += `${colors.bold}Overview${colors.reset}\\n`\n output += ` Total Courses: ${stats.totalCourses}\\n`\n output += ` Total Lessons: ${stats.totalLessons}\\n`\n output += ` Total Questions: ${stats.totalQuestions}\\n\\n`\n\n output += `${colors.bold}Questions by Difficulty${colors.reset}\\n`\n const difficulties = ['easy', 'medium', 'hard', 'challenge']\n for (const diff of difficulties) {\n const count = stats.byDifficulty[diff] || 0\n const pct = stats.totalQuestions > 0\n ? Math.round((count / stats.totalQuestions) * 100)\n : 0\n const bar = '█'.repeat(Math.floor(pct / 5))\n output += ` ${diff.padEnd(10)} ${String(count).padStart(4)} ${colors.dim}${bar}${colors.reset} ${pct}%\\n`\n }\n output += '\\n'\n\n output += `${colors.bold}Questions by Type${colors.reset}\\n`\n const types = Object.entries(stats.byQuestionType).sort((a, b) => b[1] - a[1])\n for (const [type, count] of types) {\n output += ` ${type.padEnd(20)} ${count}\\n`\n }\n output += '\\n'\n\n output += `${colors.bold}Code Blocks${colors.reset}\\n`\n output += ` With Code: ${stats.withCodeBlocks}\\n`\n output += ` Without Code: ${stats.withoutCodeBlocks}\\n`\n\n return output\n}\n\n/**\n * Format validation error for terminal display\n */\nexport function formatValidationError(\n filePath: string,\n errors: Array<{ path: (string | number)[]; message: string }>\n): string {\n let output = `\\n${colors.red}✗${colors.reset} ${filePath}\\n`\n\n for (const error of errors) {\n const path = error.path.join('.')\n output += ` ${colors.dim}→${colors.reset} ${path}: ${error.message}\\n`\n }\n\n return output\n}\n\n/**\n * Format validation success for terminal display\n */\nexport function formatValidationSuccess(\n filePath: string,\n lessonCount: number,\n questionCount: number\n): string {\n return `${colors.green}✓${colors.reset} ${filePath}\\n` +\n ` ${colors.dim}${lessonCount} lessons, ${questionCount} questions${colors.reset}\\n`\n}\n\n/**\n * Format a summary line\n */\nexport function formatSummary(passed: number, failed: number): string {\n const total = passed + failed\n if (failed === 0) {\n return `\\n${colors.green}${colors.bold}All ${total} files valid${colors.reset}\\n`\n }\n return `\\n${colors.red}${colors.bold}${failed}/${total} files failed validation${colors.reset}\\n`\n}\n","import { red, bold } from './formatters'\n\n/**\n * Exit codes following Unix conventions\n */\nexport const EXIT_CODES = {\n SUCCESS: 0,\n VALIDATION_ERROR: 1,\n USAGE_ERROR: 2,\n FATAL_ERROR: 3,\n}\n\n/**\n * Handle errors consistently across the CLI\n */\nexport function handleError(error: Error): never {\n console.error(`\\n${red(bold('Error:'))} ${error.message}\\n`)\n\n if (process.env.DEBUG) {\n console.error(error.stack)\n }\n\n process.exit(EXIT_CODES.FATAL_ERROR)\n}\n\n/**\n * Setup global error handlers\n */\nexport function setupErrorHandlers(): void {\n process.on('uncaughtException', (error) => {\n console.error(`\\n${red(bold('Uncaught Exception:'))} ${error.message}`)\n if (process.env.DEBUG) {\n console.error(error.stack)\n }\n process.exit(EXIT_CODES.FATAL_ERROR)\n })\n\n process.on('unhandledRejection', (reason) => {\n const message = reason instanceof Error ? reason.message : String(reason)\n console.error(`\\n${red(bold('Unhandled Rejection:'))} ${message}`)\n if (process.env.DEBUG && reason instanceof Error) {\n console.error(reason.stack)\n }\n process.exit(EXIT_CODES.FATAL_ERROR)\n })\n}\n","import { readFile, readdir, stat } from 'fs/promises'\nimport { join, basename } from 'path'\nimport { CourseSchema } from '../../schemas'\nimport {\n formatValidationError,\n formatValidationSuccess,\n formatSummary,\n green,\n cyan,\n bold,\n} from '../utils/formatters'\nimport { EXIT_CODES } from '../utils/error-handler'\n\nexport interface ValidateOptions {\n all?: boolean\n verbose?: boolean\n}\n\n/**\n * Validate a single course JSON file\n */\nasync function validateFile(filePath: string, verbose?: boolean): Promise<boolean> {\n try {\n const content = await readFile(filePath, 'utf-8')\n const data = JSON.parse(content)\n const result = CourseSchema.safeParse(data)\n\n if (result.success) {\n const lessonCount = result.data.lessons?.length ?? 0\n const questionCount = result.data.lessons?.reduce(\n (sum, l) => sum + (l.questions?.length ?? 0),\n 0\n ) ?? 0\n console.log(formatValidationSuccess(basename(filePath), lessonCount, questionCount))\n return true\n } else {\n const errors = result.error.issues.map(issue => ({\n path: issue.path,\n message: issue.message,\n }))\n console.log(formatValidationError(basename(filePath), verbose ? errors : errors.slice(0, 5)))\n if (!verbose && errors.length > 5) {\n console.log(` ... and ${errors.length - 5} more errors (use --verbose to see all)\\n`)\n }\n return false\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.log(formatValidationError(basename(filePath), [\n { path: [], message: `Parse error: ${message}` },\n ]))\n return false\n }\n}\n\n/**\n * Validate all JSON files in a directory\n */\nasync function validateDirectory(dirPath: string, verbose?: boolean): Promise<boolean> {\n const files = await readdir(dirPath)\n const jsonFiles = files.filter(f => f.endsWith('.json'))\n\n if (jsonFiles.length === 0) {\n console.log(`No JSON files found in ${dirPath}`)\n return false\n }\n\n console.log(`\\n${cyan(bold('Validating'))} ${jsonFiles.length} files in ${dirPath}\\n`)\n\n let passed = 0\n let failed = 0\n\n for (const file of jsonFiles.sort()) {\n const filePath = join(dirPath, file)\n const success = await validateFile(filePath, verbose)\n if (success) {\n passed++\n } else {\n failed++\n }\n }\n\n console.log(formatSummary(passed, failed))\n return failed === 0\n}\n\n/**\n * Main validate command handler\n */\nexport async function validateCommand(\n fileOrDir: string,\n options: ValidateOptions\n): Promise<void> {\n try {\n const stats = await stat(fileOrDir)\n\n if (stats.isDirectory()) {\n const success = await validateDirectory(fileOrDir, options.verbose)\n process.exit(success ? EXIT_CODES.SUCCESS : EXIT_CODES.VALIDATION_ERROR)\n } else if (stats.isFile()) {\n console.log(`\\n${cyan(bold('Validating'))} ${basename(fileOrDir)}\\n`)\n const success = await validateFile(fileOrDir, options.verbose)\n if (success) {\n console.log(`\\n${green(bold('Valid!'))} File passed schema validation.\\n`)\n }\n process.exit(success ? EXIT_CODES.SUCCESS : EXIT_CODES.VALIDATION_ERROR)\n } else {\n console.error(`Invalid path: ${fileOrDir}`)\n process.exit(EXIT_CODES.USAGE_ERROR)\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n console.error(`File or directory not found: ${fileOrDir}`)\n process.exit(EXIT_CODES.USAGE_ERROR)\n }\n throw error\n }\n}\n","/**\n * @telebort/question-banks - Knowledge Module (v2.0)\n *\n * Provides topic-based access to the Knowledge Graph taxonomy\n *\n * @example\n * ```typescript\n * const sdk = createQuestionBanksSDK({ cdnBase: 'https://...' })\n *\n * // Get questions by topic\n * const sorting = await sdk.knowledge.getByTopic('computer-science/algorithms/sorting')\n *\n * // Get full taxonomy tree\n * const tree = await sdk.taxonomy.getTopics()\n *\n * // List all domains\n * const domains = await sdk.taxonomy.getDomains()\n * ```\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * 4-level topic structure for Knowledge Graph\n */\nexport interface Topic {\n level1_domain: string\n level2_strand: string\n level3_topic: string\n level4_concept?: string\n}\n\n/**\n * Full taxonomy tree structure\n */\nexport interface TaxonomyTree {\n version: string\n domains: DomainNode[]\n}\n\n/**\n * Domain node in taxonomy tree\n */\nexport interface DomainNode {\n id: string\n name: string\n strands: StrandNode[]\n}\n\n/**\n * Strand node in taxonomy tree\n */\nexport interface StrandNode {\n id: string\n name: string\n topics: TopicNode[]\n}\n\n/**\n * Topic node in taxonomy tree\n */\nexport interface TopicNode {\n id: string\n name: string\n concepts?: ConceptNode[]\n}\n\n/**\n * Concept node (Level 4)\n */\nexport interface ConceptNode {\n id: string\n name: string\n aliases?: string[]\n}\n\n/**\n * Question reference in topic index\n */\nexport interface TopicQuestionRef {\n questionId: string\n globalId: string\n courseId: string\n courseCode: string\n lessonNumber: number\n difficulty?: string\n type: string\n}\n\n/**\n * Topic index file structure\n */\nexport interface TopicIndex {\n topic: {\n domain: string\n strand: string\n topic: string\n }\n totalQuestions: number\n questions: TopicQuestionRef[]\n exportedAt: string\n}\n\n/**\n * Knowledge module filters\n */\nexport interface KnowledgeFilters {\n domain?: string\n strand?: string\n topic?: string\n difficulty?: string\n courseCode?: string\n limit?: number\n offset?: number\n}\n\n/**\n * Knowledge module configuration\n */\nexport interface KnowledgeConfig {\n cdnBase?: string\n cacheEnabled?: boolean\n /** Rate limit: max requests per second (default: 10) */\n rateLimit?: number\n /** Rate limit: burst capacity (default: 20) */\n rateLimitBurst?: number\n /** Enable debug logging to console */\n debug?: boolean\n /** Custom error handler for monitoring/analytics */\n onError?: (error: Error, context: string) => void\n}\n\n// ============================================================================\n// Debug Logger\n// ============================================================================\n\n/**\n * Create a debug logger that respects the debug config option\n */\nfunction createLogger(config: KnowledgeConfig) {\n return {\n debug(message: string, data?: unknown) {\n if (config.debug) {\n console.log(`[question-banks] ${message}`, data ?? '')\n }\n },\n warn(message: string) {\n if (config.debug) {\n console.warn(`[question-banks] ${message}`)\n }\n },\n error(error: Error, context: string) {\n if (config.debug) {\n console.error(`[question-banks] ${context}:`, error.message)\n }\n config.onError?.(error, context)\n },\n }\n}\n\n// ============================================================================\n// Rate Limiter (Token Bucket)\n// ============================================================================\n\n/**\n * Simple token bucket rate limiter\n */\nclass RateLimiter {\n private tokens: number\n private lastRefill: number\n private readonly maxTokens: number\n private readonly refillRate: number // tokens per ms\n\n constructor(requestsPerSecond: number, burstCapacity: number) {\n this.maxTokens = burstCapacity\n this.tokens = burstCapacity\n this.refillRate = requestsPerSecond / 1000\n this.lastRefill = Date.now()\n }\n\n /**\n * Attempt to consume a token, waiting if necessary\n */\n async acquire(): Promise<void> {\n this.refill()\n\n if (this.tokens >= 1) {\n this.tokens -= 1\n return\n }\n\n // Calculate wait time for next token\n const waitTime = Math.ceil((1 - this.tokens) / this.refillRate)\n await new Promise(resolve => setTimeout(resolve, waitTime))\n this.refill()\n this.tokens -= 1\n }\n\n private refill(): void {\n const now = Date.now()\n const elapsed = now - this.lastRefill\n this.tokens = Math.min(this.maxTokens, this.tokens + elapsed * this.refillRate)\n this.lastRefill = now\n }\n}\n\n// ============================================================================\n// Input Validators\n// ============================================================================\n\n/**\n * Validate topic path format (e.g., \"computer-science/algorithms/sorting\")\n * @param path - The topic path to validate\n * @returns true if valid, false otherwise\n */\nfunction isValidTopicPath(path: string): boolean {\n if (!path || typeof path !== 'string') return false\n // Must be alphanumeric with hyphens, separated by slashes, max 3 parts\n const pattern = /^[a-z0-9-]+\\/[a-z0-9-]+\\/[a-z0-9-]+$/\n return pattern.test(path) && path.length <= 100\n}\n\n/**\n * Validate domain ID format\n */\nfunction isValidDomainId(domain: string): boolean {\n if (!domain || typeof domain !== 'string') return false\n const pattern = /^[a-z0-9-]+$/\n return pattern.test(domain) && domain.length <= 50\n}\n\n// ============================================================================\n// Type Validators (Runtime Validation)\n// ============================================================================\n\n/**\n * Validate TopicIndex structure from CDN\n */\nfunction isValidTopicIndex(data: unknown): data is TopicIndex {\n if (!data || typeof data !== 'object') return false\n const obj = data as Record<string, unknown>\n return (\n typeof obj.topic === 'object' &&\n obj.topic !== null &&\n typeof (obj.topic as Record<string, unknown>).domain === 'string' &&\n Array.isArray(obj.questions) &&\n typeof obj.totalQuestions === 'number'\n )\n}\n\n/**\n * Validate TaxonomyTree structure from CDN\n */\nfunction isValidTaxonomyTree(data: unknown): data is TaxonomyTree {\n if (!data || typeof data !== 'object') return false\n const obj = data as Record<string, unknown>\n return typeof obj.version === 'string' && Array.isArray(obj.domains)\n}\n\n/**\n * Validate master knowledge bank structure from CDN\n */\nfunction isValidKnowledgeBank(data: unknown): data is { questions: unknown[] } {\n if (!data || typeof data !== 'object') return false\n const obj = data as Record<string, unknown>\n return Array.isArray(obj.questions)\n}\n\n// ============================================================================\n// Knowledge Module Implementation\n// ============================================================================\n\nconst DEFAULT_CDN_BASE = 'https://content-warehouse.vercel.app'\n\n/**\n * Create the knowledge module for v2.0 Knowledge Graph access\n */\nexport function createKnowledgeModule(config: KnowledgeConfig) {\n const cdnBase = config.cdnBase || DEFAULT_CDN_BASE\n const cache = new Map<string, unknown>()\n const rateLimiter = new RateLimiter(config.rateLimit ?? 10, config.rateLimitBurst ?? 20)\n const log = createLogger(config)\n\n log.debug('Knowledge module initialized', { cdnBase, cacheEnabled: config.cacheEnabled })\n\n /**\n * Fetch JSON from CDN with optional caching and type validation\n *\n * @param path - CDN path to fetch\n * @param validator - Optional runtime type validator\n * @throws Error if fetch fails or validation fails\n */\n async function fetchJson<T>(\n path: string,\n validator?: (data: unknown) => data is T\n ): Promise<T> {\n const url = `${cdnBase}${path}`\n\n if (config.cacheEnabled && cache.has(url)) {\n log.debug('Cache hit', path)\n return cache.get(url) as T\n }\n\n // Apply rate limiting before making request\n await rateLimiter.acquire()\n\n log.debug('Fetching', path)\n const startTime = Date.now()\n const response = await fetch(url)\n const elapsed = Date.now() - startTime\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch ${url}: ${response.status}`)\n log.error(error, `fetch ${path}`)\n throw error\n }\n\n log.debug(`Fetched in ${elapsed}ms`, path)\n\n let data: unknown\n try {\n data = await response.json()\n } catch {\n const error = new Error(`Invalid JSON response from ${url}`)\n log.error(error, `parse ${path}`)\n throw error\n }\n\n // Runtime type validation if validator provided\n if (validator && !validator(data)) {\n const error = new Error(`Invalid data structure from ${url}`)\n log.error(error, `validate ${path}`)\n throw error\n }\n\n if (config.cacheEnabled) {\n cache.set(url, data)\n log.debug('Cached', path)\n }\n\n return data as T\n }\n\n return {\n /**\n * Get questions by topic path\n *\n * @param topicPath - Path like \"computer-science/algorithms/sorting\"\n * @returns Array of question references\n *\n * @example\n * ```typescript\n * const questions = await sdk.knowledge.getByTopic('computer-science/algorithms/sorting')\n * console.log(questions.length) // Number of sorting questions\n * ```\n */\n async getByTopic(topicPath: string): Promise<TopicQuestionRef[]> {\n // Validate input\n if (!isValidTopicPath(topicPath)) {\n log.warn(`Invalid topic path: \"${topicPath}\"`)\n return [] // Invalid path returns empty array (same as \"not found\")\n }\n\n try {\n const index = await fetchJson<TopicIndex>(\n `/question-banks/v2.0/by-topic/${topicPath}.json`,\n isValidTopicIndex\n )\n log.debug(`getByTopic returned ${index.questions.length} questions`, topicPath)\n return index.questions\n } catch (error) {\n // Topic doesn't exist, not indexed yet, or invalid response\n log.debug(`Topic not found or error`, topicPath)\n return []\n }\n },\n\n /**\n * Get questions by domain\n *\n * @param domain - Domain like \"computer-science\" or \"mathematics\"\n * @returns Array of question references from all topics in domain\n */\n async getByDomain(domain: string): Promise<TopicQuestionRef[]> {\n // Validate input\n if (!isValidDomainId(domain)) {\n log.warn(`Invalid domain ID: \"${domain}\"`)\n return [] // Invalid domain returns empty array\n }\n\n // Load master knowledge bank and filter by domain\n const master = await fetchJson<{\n questions: Array<{\n questionId: string\n globalId: string\n courseId: string\n courseCode: string\n lessonNumber: number\n questionType: string\n metadata?: { difficulty?: string }\n topics?: Topic[]\n }>\n }>('/question-banks/v2.0/master/knowledge-bank.json')\n\n // Runtime validation\n if (!isValidKnowledgeBank(master)) {\n throw new Error('Invalid knowledge bank data structure')\n }\n\n return master.questions\n .filter(q => q.topics?.some(t => t.level1_domain === domain))\n .map(q => ({\n questionId: q.questionId,\n globalId: q.globalId,\n courseId: q.courseId,\n courseCode: q.courseCode,\n lessonNumber: q.lessonNumber,\n difficulty: q.metadata?.difficulty,\n type: q.questionType,\n }))\n },\n\n /**\n * Search questions with filters\n *\n * @param filters - Filter criteria\n * @returns Filtered question references\n */\n async search(filters: KnowledgeFilters): Promise<TopicQuestionRef[]> {\n const master = await fetchJson<{\n questions: Array<{\n questionId: string\n globalId: string\n courseId: string\n courseCode: string\n lessonNumber: number\n questionType: string\n metadata?: { difficulty?: string }\n topics?: Topic[]\n }>\n }>('/question-banks/v2.0/master/knowledge-bank.json')\n\n // Runtime validation\n if (!isValidKnowledgeBank(master)) {\n throw new Error('Invalid knowledge bank data structure')\n }\n\n let results = master.questions\n\n // Apply filters\n if (filters.domain) {\n results = results.filter(q =>\n q.topics?.some(t => t.level1_domain === filters.domain)\n )\n }\n if (filters.strand) {\n results = results.filter(q =>\n q.topics?.some(t => t.level2_strand === filters.strand)\n )\n }\n if (filters.topic) {\n results = results.filter(q =>\n q.topics?.some(t => t.level3_topic === filters.topic)\n )\n }\n if (filters.difficulty) {\n results = results.filter(q => q.metadata?.difficulty === filters.difficulty)\n }\n if (filters.courseCode) {\n results = results.filter(q => q.courseCode === filters.courseCode)\n }\n\n // Apply pagination\n const offset = filters.offset ?? 0\n const limit = filters.limit ?? 100\n results = results.slice(offset, offset + limit)\n\n return results.map(q => ({\n questionId: q.questionId,\n globalId: q.globalId,\n courseId: q.courseId,\n courseCode: q.courseCode,\n lessonNumber: q.lessonNumber,\n difficulty: q.metadata?.difficulty,\n type: q.questionType,\n }))\n },\n\n /**\n * Clear the internal cache\n */\n clearCache() {\n cache.clear()\n log.debug('Knowledge cache cleared')\n },\n }\n}\n\n// ============================================================================\n// Taxonomy Module Implementation\n// ============================================================================\n\n/**\n * Create the taxonomy module for browsing the Knowledge Graph structure\n */\nexport function createTaxonomyModule(config: KnowledgeConfig) {\n const cdnBase = config.cdnBase || DEFAULT_CDN_BASE\n const rateLimiter = new RateLimiter(config.rateLimit ?? 10, config.rateLimitBurst ?? 20)\n const log = createLogger(config)\n let cachedTaxonomy: TaxonomyTree | null = null\n\n log.debug('Taxonomy module initialized', { cdnBase })\n\n /**\n * Fetch the full taxonomy tree with validation\n */\n async function fetchTaxonomy(): Promise<TaxonomyTree> {\n if (cachedTaxonomy) {\n log.debug('Taxonomy cache hit')\n return cachedTaxonomy\n }\n\n // Apply rate limiting before making request\n await rateLimiter.acquire()\n\n log.debug('Fetching taxonomy')\n const startTime = Date.now()\n const response = await fetch(`${cdnBase}/question-banks/v2.0/taxonomy/topics.json`)\n const elapsed = Date.now() - startTime\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch taxonomy: ${response.status}`)\n log.error(error, 'fetchTaxonomy')\n throw error\n }\n\n log.debug(`Fetched taxonomy in ${elapsed}ms`)\n\n let data: unknown\n try {\n data = await response.json()\n } catch {\n const error = new Error('Invalid JSON response from taxonomy endpoint')\n log.error(error, 'parseTaxonomy')\n throw error\n }\n\n if (!isValidTaxonomyTree(data)) {\n const error = new Error('Invalid taxonomy data structure')\n log.error(error, 'validateTaxonomy')\n throw error\n }\n\n log.debug(`Taxonomy loaded: ${data.domains.length} domains`)\n cachedTaxonomy = data\n return cachedTaxonomy\n }\n\n return {\n /**\n * Get the full taxonomy tree\n *\n * @returns Complete 4-level taxonomy structure\n */\n async getTopics(): Promise<TaxonomyTree> {\n return fetchTaxonomy()\n },\n\n /**\n * Get all domains (Level 1)\n *\n * @returns Array of domain nodes\n */\n async getDomains(): Promise<DomainNode[]> {\n const taxonomy = await fetchTaxonomy()\n return taxonomy.domains\n },\n\n /**\n * Get strands for a domain (Level 2)\n *\n * @param domain - Domain ID like \"computer-science\"\n * @returns Array of strand nodes\n */\n async getStrands(domain: string): Promise<StrandNode[]> {\n // Validate input\n if (!isValidDomainId(domain)) {\n log.warn(`Invalid domain ID: \"${domain}\"`)\n return []\n }\n\n const taxonomy = await fetchTaxonomy()\n const domainNode = taxonomy.domains.find(d => d.id === domain)\n const strands = domainNode?.strands ?? []\n log.debug(`getStrands(${domain}): ${strands.length} strands`)\n return strands\n },\n\n /**\n * Get topics for a strand (Level 3)\n *\n * @param domain - Domain ID\n * @param strand - Strand ID like \"algorithms\"\n * @returns Array of topic nodes\n */\n async getTopicsForStrand(domain: string, strand: string): Promise<TopicNode[]> {\n // Validate inputs\n if (!isValidDomainId(domain) || !isValidDomainId(strand)) {\n log.warn(`Invalid domain or strand ID: \"${domain}/${strand}\"`)\n return []\n }\n\n const strands = await this.getStrands(domain)\n const strandNode = strands.find(s => s.id === strand)\n const topics = strandNode?.topics ?? []\n log.debug(`getTopicsForStrand(${domain}/${strand}): ${topics.length} topics`)\n return topics\n },\n\n /**\n * Get tag mappings (legacy tag → taxonomy concept)\n *\n * @returns Tag to topic mappings\n */\n async getTagMappings(): Promise<Record<string, Topic>> {\n // Apply rate limiting before making request\n await rateLimiter.acquire()\n\n log.debug('Fetching tag mappings')\n const startTime = Date.now()\n const response = await fetch(\n `${cdnBase}/question-banks/v2.0/taxonomy/tag-mappings.json`\n )\n const elapsed = Date.now() - startTime\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch tag mappings: ${response.status}`)\n log.error(error, 'fetchTagMappings')\n throw error\n }\n\n log.debug(`Fetched tag mappings in ${elapsed}ms`)\n\n let data: unknown\n try {\n data = await response.json()\n } catch {\n const error = new Error('Invalid JSON response from tag mappings endpoint')\n log.error(error, 'parseTagMappings')\n throw error\n }\n\n if (!data || typeof data !== 'object' || Array.isArray(data)) {\n const error = new Error('Invalid tag mappings data structure')\n log.error(error, 'validateTagMappings')\n throw error\n }\n\n const mappingCount = Object.keys(data).length\n log.debug(`Tag mappings loaded: ${mappingCount} mappings`)\n return data as Record<string, Topic>\n },\n\n /**\n * Clear the cached taxonomy\n */\n clearCache() {\n cachedTaxonomy = null\n log.debug('Taxonomy cache cleared')\n },\n }\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport type KnowledgeModule = ReturnType<typeof createKnowledgeModule>\nexport type TaxonomyModule = ReturnType<typeof createTaxonomyModule>\n","import { z } from 'zod'\n\n// ============================================================================\n// Malaysian Education Level Schema\n// ============================================================================\n\nexport const MalaysianEducationLevelSchema = z.enum([\n 'KSSR', // Primary (Year 1-6)\n 'KSSM', // Lower Secondary (Form 1-3)\n 'SPM', // SPM Mathematics (Form 4-5)\n 'SPM-AddMaths', // SPM Additional Mathematics (Form 4-5)\n 'STPM-T', // STPM Mathematics T (Science track)\n 'STPM-M', // STPM Mathematics M (Arts track)\n])\n\nexport type MalaysianEducationLevel = z.infer<typeof MalaysianEducationLevelSchema>\n\n// ============================================================================\n// Math Domain Schema (5 domains from DSKP)\n// ============================================================================\n\nexport const MathDomainSchema = z.enum([\n 'numbers-operations', // Nombor dan Operasi\n 'measurement-geometry', // Sukatan dan Geometri\n 'relationship-algebra', // Perkaitan dan Algebra\n 'statistics-probability', // Statistik dan Kebarangkalian\n 'discrete-mathematics', // Matematik Diskret (KSSM+ only)\n])\n\nexport type MathDomain = z.infer<typeof MathDomainSchema>\n\n// ============================================================================\n// Malaysian Curriculum Mapping Schema\n// ============================================================================\n\nexport const MalaysianCurriculumSchema = z.object({\n level: MalaysianEducationLevelSchema,\n year_form: z.number().int().min(1).max(6), // Year 1-6 or Form 1-5\n domain_id: MathDomainSchema,\n strand_id: z.string(),\n topic_id: z.string(),\n concept_id: z.string().optional(),\n dskp_standard: z.string().optional(), // DSKP reference code\n chapter: z.number().int().positive().optional(), // For SPM/STPM\n})\n\nexport type MalaysianCurriculum = z.infer<typeof MalaysianCurriculumSchema>\n\n// ============================================================================\n// Exam Alignment Schema\n// ============================================================================\n\nexport const ExamPaperSchema = z.enum(['1', '2'])\nexport const ExamSectionSchema = z.enum(['A', 'B', 'C'])\nexport const ClusterSourceSchema = z.enum(['SBP', 'MRSM', 'SMKA', 'Teknik'])\n\nexport const ExamAlignmentSchema = z.object({\n paper: ExamPaperSchema,\n section: ExamSectionSchema.optional(),\n historicalYears: z.array(z.number().int().min(2000).max(2030)).optional(),\n trialStates: z.array(z.string()).optional(), // Selangor, Johor, etc.\n clusterSource: ClusterSourceSchema.optional(),\n})\n\nexport type ExamAlignment = z.infer<typeof ExamAlignmentSchema>\n\n// ============================================================================\n// Bilingual Localization Schema\n// ============================================================================\n\nexport const LocalizedTextSchema = z.object({\n stem: z.string(),\n solution: z.string(),\n})\n\nexport const LocalizationSchema = z.object({\n bm: LocalizedTextSchema, // Bahasa Malaysia (required)\n en: LocalizedTextSchema, // English (required)\n zh: LocalizedTextSchema.optional(), // Chinese (UEC market, optional)\n})\n\nexport type Localization = z.infer<typeof LocalizationSchema>\n\n// ============================================================================\n// IRT Difficulty Schema\n// ============================================================================\n\nexport const DokLevelSchema = z.union([\n z.literal(1),\n z.literal(2),\n z.literal(3),\n z.literal(4),\n])\n\nexport const BloomLevelSchema = z.union([\n z.literal(1), // Remember\n z.literal(2), // Understand\n z.literal(3), // Apply\n z.literal(4), // Analyze\n z.literal(5), // Evaluate\n z.literal(6), // Create\n])\n\nexport const IrtDifficultySchema = z.object({\n irt_b: z.number().min(-3).max(3), // Difficulty logits\n irt_a: z.number().min(0.5).max(2.5), // Discrimination\n irt_c: z.number().min(0).max(0.25).optional(), // Guessing parameter\n dok_level: DokLevelSchema,\n bloom_level: BloomLevelSchema,\n estimated_minutes: z.number().positive(),\n})\n\nexport type IrtDifficulty = z.infer<typeof IrtDifficultySchema>\n\n// ============================================================================\n// Solution Step Schema\n// ============================================================================\n\nexport const SolutionStepSchema = z.object({\n step_number: z.number().int().positive(),\n description_en: z.string(),\n description_bm: z.string(),\n expression: z.string().optional(), // Math expression\n marks: z.number().int().positive().optional(), // Marks for this step\n})\n\nexport type SolutionStep = z.infer<typeof SolutionStepSchema>\n\n// ============================================================================\n// Full Malaysian Math Question Schema\n// ============================================================================\n\nexport const MalaysianMathQuestionSchema = z.object({\n // Identifiers\n id: z.string(),\n slug: z.string(),\n template_id: z.string().optional(),\n instance_seed: z.number().optional(),\n\n // Malaysian curriculum mapping\n curriculum: MalaysianCurriculumSchema,\n\n // Malaysian exam alignment\n examAlignment: ExamAlignmentSchema.optional(),\n\n // Difficulty calibration\n difficulty: IrtDifficultySchema,\n\n // Bilingual content\n localization: LocalizationSchema,\n\n // Solution structure\n solution: z.object({\n brief_answer: z.string(),\n steps: z.array(SolutionStepSchema),\n alternative_methods: z.array(z.string()).optional(),\n common_errors: z.array(z.string()).optional(),\n }),\n\n // Metadata\n tags: z.array(z.string()).optional(),\n version: z.string().default('1.0.0'),\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n})\n\nexport type MalaysianMathQuestion = z.infer<typeof MalaysianMathQuestionSchema>\n\n// ============================================================================\n// Search Query Schema\n// ============================================================================\n\nexport const MalaysianMathSearchQuerySchema = z.object({\n level: MalaysianEducationLevelSchema.optional(),\n form: z.number().int().min(1).max(5).optional(),\n year: z.number().int().min(1).max(6).optional(),\n domain: MathDomainSchema.optional(),\n strand: z.string().optional(),\n topic: z.string().optional(),\n chapter: z.number().int().positive().optional(),\n\n // Difficulty filters\n dok_level: DokLevelSchema.optional(),\n bloom_level: BloomLevelSchema.optional(),\n irt_b_min: z.number().optional(),\n irt_b_max: z.number().optional(),\n\n // Exam filters\n paper: ExamPaperSchema.optional(),\n section: ExamSectionSchema.optional(),\n\n // Pagination (optional with defaults applied at runtime)\n limit: z.number().int().positive().max(1000).optional(),\n offset: z.number().int().min(0).optional(),\n})\n\nexport type MalaysianMathSearchQuery = z.infer<typeof MalaysianMathSearchQuerySchema>\n\n// ============================================================================\n// Configuration Schema\n// ============================================================================\n\nexport const MalaysiaMathConfigSchema = z.object({\n cdnBase: z.string().url(),\n cacheEnabled: z.boolean().default(true),\n rateLimit: z.object({\n requestsPerSecond: z.number().positive().default(10),\n burstCapacity: z.number().positive().default(20),\n }).optional(),\n debug: z.boolean().default(false),\n onError: z.function().args(z.any()).returns(z.void()).optional(),\n})\n\nexport type MalaysiaMathConfig = z.infer<typeof MalaysiaMathConfigSchema>\n\n// ============================================================================\n// CDN Response Schemas\n// ============================================================================\n\nexport const CurriculumIndexResponseSchema = z.object({\n level: MalaysianEducationLevelSchema,\n total_questions: z.number().int().positive(),\n last_updated: z.string(),\n questions: z.array(MalaysianMathQuestionSchema),\n})\n\nexport type CurriculumIndexResponse = z.infer<typeof CurriculumIndexResponseSchema>\n\nexport const TaxonomyLevelSchema = z.object({\n id: z.string(),\n name_en: z.string(),\n name_bm: z.string(),\n description_en: z.string().optional(),\n description_bm: z.string().optional(),\n years: z.array(z.number()).optional(),\n forms: z.array(z.number()).optional(),\n semesters: z.array(z.number()).optional(),\n age_range: z.tuple([z.number(), z.number()]).optional(),\n question_target: z.number().int().positive(),\n})\n\nexport type TaxonomyLevel = z.infer<typeof TaxonomyLevelSchema>\n\nexport const TaxonomyDomainSchema = z.object({\n id: MathDomainSchema,\n name_en: z.string(),\n name_bm: z.string(),\n strands: z.array(z.string()),\n levels: z.array(MalaysianEducationLevelSchema).optional(),\n})\n\nexport type TaxonomyDomain = z.infer<typeof TaxonomyDomainSchema>\n\n// ============================================================================\n// Runtime Validators\n// ============================================================================\n\nexport function isValidQuestionList(data: unknown): data is MalaysianMathQuestion[] {\n return z.array(MalaysianMathQuestionSchema).safeParse(data).success\n}\n\nexport function isValidCurriculumIndex(data: unknown): data is CurriculumIndexResponse {\n return CurriculumIndexResponseSchema.safeParse(data).success\n}\n\nexport function isValidLevelId(id: unknown): id is MalaysianEducationLevel {\n return MalaysianEducationLevelSchema.safeParse(id).success\n}\n\nexport function isValidDomainId(id: unknown): id is MathDomain {\n return MathDomainSchema.safeParse(id).success\n}\n","/**\n * @telebort/question-banks - Malaysian Math Module\n *\n * Provides curriculum-aligned access to Malaysian mathematics questions\n * covering KSSR through STPM levels.\n *\n * @example\n * ```typescript\n * const sdk = createQuestionBanksSDK({ cdnBase: 'https://...' })\n *\n * // Get questions by education level\n * const addMaths = await sdk.malaysiaMath.getByLevel('SPM-AddMaths')\n *\n * // Get questions by curriculum mapping\n * const quadratics = await sdk.malaysiaMath.getByCurriculum({\n * level: 'SPM-AddMaths',\n * form: 4,\n * domain: 'relationship-algebra',\n * strand: 'quadratic-functions'\n * })\n *\n * // Get questions by exam alignment\n * const paper2C = await sdk.malaysiaMath.getByExam({\n * paper: '2',\n * section: 'C'\n * })\n * ```\n */\n\nimport {\n MalaysianEducationLevelSchema,\n MathDomainSchema,\n type MalaysianEducationLevel,\n type MathDomain,\n type MalaysianMathQuestion,\n type MalaysianMathSearchQuery,\n type MalaysiaMathConfig,\n type TaxonomyLevel,\n type TaxonomyDomain,\n} from './types'\n\nexport * from './types'\n\n// ============================================================================\n// Debug Logger\n// ============================================================================\n\nfunction createLogger(config: MalaysiaMathConfig) {\n return {\n debug(message: string, data?: unknown) {\n if (config.debug) {\n console.log(`[malaysia-math] ${message}`, data ?? '')\n }\n },\n warn(message: string) {\n if (config.debug) {\n console.warn(`[malaysia-math] ${message}`)\n }\n },\n error(error: Error, context: string) {\n if (config.debug) {\n console.error(`[malaysia-math] ${context}:`, error.message)\n }\n config.onError?.(error, context)\n },\n }\n}\n\n// ============================================================================\n// Rate Limiter (Token Bucket)\n// ============================================================================\n\nclass RateLimiter {\n private tokens: number\n private lastRefill: number\n private readonly maxTokens: number\n private readonly refillRate: number\n\n constructor(requestsPerSecond: number, burstCapacity: number) {\n this.maxTokens = burstCapacity\n this.tokens = burstCapacity\n this.refillRate = requestsPerSecond / 1000\n this.lastRefill = Date.now()\n }\n\n async acquire(): Promise<void> {\n this.refill()\n\n if (this.tokens >= 1) {\n this.tokens -= 1\n return\n }\n\n const waitTime = Math.ceil((1 - this.tokens) / this.refillRate)\n await new Promise(resolve => setTimeout(resolve, waitTime))\n this.refill()\n this.tokens -= 1\n }\n\n private refill(): void {\n const now = Date.now()\n const elapsed = now - this.lastRefill\n this.tokens = Math.min(this.maxTokens, this.tokens + elapsed * this.refillRate)\n this.lastRefill = now\n }\n}\n\n// ============================================================================\n// Input Validators\n// ============================================================================\n\nfunction isValidLevelId(id: unknown): id is MalaysianEducationLevel {\n return MalaysianEducationLevelSchema.safeParse(id).success\n}\n\nfunction isValidDomainId(id: unknown): id is MathDomain {\n return MathDomainSchema.safeParse(id).success\n}\n\nfunction isValidFormNumber(num: unknown): num is number {\n return typeof num === 'number' && Number.isInteger(num) && num >= 1 && num <= 6\n}\n\n// ============================================================================\n// Runtime Type Validators\n// ============================================================================\n\nfunction isValidLevelsList(data: unknown): data is { levels: TaxonomyLevel[] } {\n if (!data || typeof data !== 'object') return false\n const obj = data as Record<string, unknown>\n return Array.isArray(obj.levels)\n}\n\nfunction isValidDomainsList(data: unknown): data is { domains: TaxonomyDomain[] } {\n if (!data || typeof data !== 'object') return false\n const obj = data as Record<string, unknown>\n return Array.isArray(obj.domains)\n}\n\n// ============================================================================\n// Curriculum Query Interface\n// ============================================================================\n\nexport interface CurriculumQuery {\n level: MalaysianEducationLevel\n form?: number\n year?: number\n domain?: MathDomain\n strand?: string\n topic?: string\n chapter?: number\n}\n\nexport interface ExamQuery {\n level?: MalaysianEducationLevel\n paper: '1' | '2'\n section?: 'A' | 'B' | 'C'\n}\n\n// ============================================================================\n// Malaysian Math Module Implementation\n// ============================================================================\n\n/**\n * Create the Malaysian Math module for curriculum-aligned question access\n */\nexport function createMalaysiaMathModule(config: MalaysiaMathConfig) {\n const cdnBase = config.cdnBase\n const cache = new Map<string, unknown>()\n const rateLimiter = new RateLimiter(\n config.rateLimit?.requestsPerSecond ?? 10,\n config.rateLimit?.burstCapacity ?? 20\n )\n const log = createLogger(config)\n\n log.debug('Malaysian Math module initialized', { cdnBase, cacheEnabled: config.cacheEnabled })\n\n /**\n * Fetch JSON from CDN with caching and validation\n */\n async function fetchJson<T>(\n path: string,\n validator?: (data: unknown) => data is T\n ): Promise<T> {\n const url = `${cdnBase}${path}`\n\n if (config.cacheEnabled && cache.has(url)) {\n log.debug('Cache hit', path)\n return cache.get(url) as T\n }\n\n await rateLimiter.acquire()\n\n log.debug('Fetching', path)\n const startTime = Date.now()\n const response = await fetch(url)\n const elapsed = Date.now() - startTime\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch ${url}: ${response.status}`)\n log.error(error, `fetch ${path}`)\n throw error\n }\n\n log.debug(`Fetched in ${elapsed}ms`, path)\n\n let data: unknown\n try {\n data = await response.json()\n } catch {\n const error = new Error(`Invalid JSON response from ${url}`)\n log.error(error, `parse ${path}`)\n throw error\n }\n\n if (validator && !validator(data)) {\n const error = new Error(`Invalid data structure from ${url}`)\n log.error(error, `validate ${path}`)\n throw error\n }\n\n if (config.cacheEnabled) {\n cache.set(url, data)\n log.debug('Cached', path)\n }\n\n return data as T\n }\n\n return {\n /**\n * Get all questions for an education level\n *\n * @param level - Education level (KSSR, KSSM, SPM, SPM-AddMaths, STPM-T, STPM-M)\n * @returns Array of questions\n *\n * @example\n * ```typescript\n * const addMaths = await sdk.malaysiaMath.getByLevel('SPM-AddMaths')\n * console.log(addMaths.length) // ~18,000 questions\n * ```\n */\n async getByLevel(level: MalaysianEducationLevel): Promise<MalaysianMathQuestion[]> {\n if (!isValidLevelId(level)) {\n log.warn(`Invalid education level: \"${level}\"`)\n return []\n }\n\n try {\n const data = await fetchJson<{ questions: MalaysianMathQuestion[] }>(\n `/question-banks/v2.0/malaysia-math/levels/${level}.json`\n )\n log.debug(`getByLevel returned ${data.questions.length} questions`, level)\n return data.questions\n } catch (error) {\n log.debug(`Level not found or error`, level)\n return []\n }\n },\n\n /**\n * Get questions by curriculum mapping\n *\n * @param query - Curriculum query with level, form, domain, strand, topic\n * @returns Filtered questions\n *\n * @example\n * ```typescript\n * const quadratics = await sdk.malaysiaMath.getByCurriculum({\n * level: 'SPM-AddMaths',\n * form: 4,\n * domain: 'relationship-algebra',\n * strand: 'quadratic-functions'\n * })\n * ```\n */\n async getByCurriculum(query: CurriculumQuery): Promise<MalaysianMathQuestion[]> {\n if (!isValidLevelId(query.level)) {\n log.warn(`Invalid education level: \"${query.level}\"`)\n return []\n }\n\n // Build path based on query specificity\n let path = `/question-banks/v2.0/malaysia-math/by-curriculum/${query.level}`\n\n if (query.domain) {\n if (!isValidDomainId(query.domain)) {\n log.warn(`Invalid domain: \"${query.domain}\"`)\n return []\n }\n path += `/${query.domain}`\n }\n\n if (query.strand) {\n path += `/${query.strand}`\n }\n\n if (query.topic) {\n path += `/${query.topic}`\n }\n\n path += '.json'\n\n try {\n const data = await fetchJson<{ questions: MalaysianMathQuestion[] }>(path)\n\n // Apply additional client-side filters\n let questions = data.questions\n\n if (query.form !== undefined) {\n questions = questions.filter(q => q.curriculum.year_form === query.form)\n }\n\n if (query.year !== undefined) {\n questions = questions.filter(q => q.curriculum.year_form === query.year)\n }\n\n if (query.chapter !== undefined) {\n questions = questions.filter(q => q.curriculum.chapter === query.chapter)\n }\n\n log.debug(`getByCurriculum returned ${questions.length} questions`, query)\n return questions\n } catch (error) {\n log.debug('Curriculum query failed', query)\n return []\n }\n },\n\n /**\n * Get questions aligned to specific exam paper/section\n *\n * @param query - Exam query with paper and section\n * @returns Questions aligned to exam format\n *\n * @example\n * ```typescript\n * // Get SPM Add Maths Paper 2 Section C questions\n * const paper2C = await sdk.malaysiaMath.getByExam({\n * level: 'SPM-AddMaths',\n * paper: '2',\n * section: 'C'\n * })\n * ```\n */\n async getByExam(query: ExamQuery): Promise<MalaysianMathQuestion[]> {\n const level = query.level ?? 'SPM-AddMaths'\n\n if (!isValidLevelId(level)) {\n log.warn(`Invalid education level: \"${level}\"`)\n return []\n }\n\n let path = `/question-banks/v2.0/malaysia-math/by-exam/${level}/paper-${query.paper}`\n\n if (query.section) {\n path += `-section-${query.section.toLowerCase()}`\n }\n\n path += '.json'\n\n try {\n const data = await fetchJson<{ questions: MalaysianMathQuestion[] }>(path)\n log.debug(`getByExam returned ${data.questions.length} questions`, query)\n return data.questions\n } catch (error) {\n log.debug('Exam query failed', query)\n return []\n }\n },\n\n /**\n * Search questions with comprehensive filters\n *\n * @param filters - Search filters including difficulty, DOK, Bloom's level\n * @returns Paginated search results\n *\n * @example\n * ```typescript\n * const results = await sdk.malaysiaMath.search({\n * level: 'SPM-AddMaths',\n * form: 4,\n * domain: 'relationship-algebra',\n * dok_level: 2,\n * limit: 20\n * })\n * ```\n */\n async search(filters: MalaysianMathSearchQuery): Promise<{\n questions: MalaysianMathQuestion[]\n total: number\n hasMore: boolean\n }> {\n // Start with level-based or full dataset\n let questions: MalaysianMathQuestion[]\n\n if (filters.level) {\n questions = await this.getByLevel(filters.level)\n } else {\n // Load master dataset\n try {\n const data = await fetchJson<{ questions: MalaysianMathQuestion[] }>(\n '/question-banks/v2.0/malaysia-math/master/all-questions.json'\n )\n questions = data.questions\n } catch {\n questions = []\n }\n }\n\n // Apply filters\n if (filters.form !== undefined) {\n questions = questions.filter(q => q.curriculum.year_form === filters.form)\n }\n\n if (filters.year !== undefined) {\n questions = questions.filter(q => q.curriculum.year_form === filters.year)\n }\n\n if (filters.domain) {\n questions = questions.filter(q => q.curriculum.domain_id === filters.domain)\n }\n\n if (filters.strand) {\n questions = questions.filter(q => q.curriculum.strand_id === filters.strand)\n }\n\n if (filters.topic) {\n questions = questions.filter(q => q.curriculum.topic_id === filters.topic)\n }\n\n if (filters.chapter !== undefined) {\n questions = questions.filter(q => q.curriculum.chapter === filters.chapter)\n }\n\n if (filters.dok_level !== undefined) {\n questions = questions.filter(q => q.difficulty.dok_level === filters.dok_level)\n }\n\n if (filters.bloom_level !== undefined) {\n questions = questions.filter(q => q.difficulty.bloom_level === filters.bloom_level)\n }\n\n if (filters.irt_b_min !== undefined) {\n questions = questions.filter(q => q.difficulty.irt_b >= filters.irt_b_min!)\n }\n\n if (filters.irt_b_max !== undefined) {\n questions = questions.filter(q => q.difficulty.irt_b <= filters.irt_b_max!)\n }\n\n if (filters.paper) {\n questions = questions.filter(q => q.examAlignment?.paper === filters.paper)\n }\n\n if (filters.section) {\n questions = questions.filter(q => q.examAlignment?.section === filters.section)\n }\n\n // Pagination\n const total = questions.length\n const offset = filters.offset ?? 0\n const limit = filters.limit ?? 100\n const paginated = questions.slice(offset, offset + limit)\n\n log.debug(`search returned ${paginated.length}/${total} questions`, filters)\n\n return {\n questions: paginated,\n total,\n hasMore: offset + limit < total,\n }\n },\n\n /**\n * Get a random sample of questions\n *\n * @param count - Number of questions to return\n * @param filters - Optional filters to apply\n * @returns Random sample of questions\n */\n async getRandomQuestions(\n count: number,\n filters?: Partial<MalaysianMathSearchQuery>\n ): Promise<MalaysianMathQuestion[]> {\n const result = await this.search({ ...filters, limit: 1000 })\n\n // Fisher-Yates shuffle\n const shuffled = [...result.questions]\n for (let i = shuffled.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n const temp = shuffled[i]!\n shuffled[i] = shuffled[j]!\n shuffled[j] = temp\n }\n\n return shuffled.slice(0, count)\n },\n\n /**\n * Clear the internal cache\n */\n clearCache() {\n cache.clear()\n log.debug('Malaysian Math cache cleared')\n },\n }\n}\n\n// ============================================================================\n// Malaysian Math Taxonomy Module\n// ============================================================================\n\n/**\n * Create the Malaysian Math Taxonomy module for browsing curriculum structure\n */\nexport function createMalaysiaMathTaxonomyModule(config: MalaysiaMathConfig) {\n const cdnBase = config.cdnBase\n const rateLimiter = new RateLimiter(\n config.rateLimit?.requestsPerSecond ?? 10,\n config.rateLimit?.burstCapacity ?? 20\n )\n const log = createLogger(config)\n\n let cachedLevels: TaxonomyLevel[] | null = null\n let cachedDomains: TaxonomyDomain[] | null = null\n\n log.debug('Malaysian Math Taxonomy module initialized', { cdnBase })\n\n return {\n /**\n * Get all education levels\n *\n * @returns Array of education levels (KSSR, KSSM, SPM, SPM-AddMaths, STPM)\n */\n async getLevels(): Promise<TaxonomyLevel[]> {\n if (cachedLevels) {\n log.debug('Levels cache hit')\n return cachedLevels\n }\n\n await rateLimiter.acquire()\n\n log.debug('Fetching education levels')\n const response = await fetch(\n `${cdnBase}/question-banks/v2.0/malaysia-math/taxonomy/levels.json`\n )\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch levels: ${response.status}`)\n log.error(error, 'fetchLevels')\n throw error\n }\n\n const data = await response.json()\n\n if (!isValidLevelsList(data)) {\n const error = new Error('Invalid levels data structure')\n log.error(error, 'validateLevels')\n throw error\n }\n\n cachedLevels = data.levels\n log.debug(`Loaded ${cachedLevels.length} education levels`)\n return cachedLevels\n },\n\n /**\n * Get all math domains\n *\n * @param level - Optional level to filter domains\n * @returns Array of math domains\n */\n async getDomains(level?: MalaysianEducationLevel): Promise<TaxonomyDomain[]> {\n if (cachedDomains && !level) {\n log.debug('Domains cache hit')\n return cachedDomains\n }\n\n await rateLimiter.acquire()\n\n log.debug('Fetching math domains')\n const response = await fetch(\n `${cdnBase}/question-banks/v2.0/malaysia-math/taxonomy/domains.json`\n )\n\n if (!response.ok) {\n const error = new Error(`Failed to fetch domains: ${response.status}`)\n log.error(error, 'fetchDomains')\n throw error\n }\n\n const data = await response.json()\n\n if (!isValidDomainsList(data)) {\n const error = new Error('Invalid domains data structure')\n log.error(error, 'validateDomains')\n throw error\n }\n\n cachedDomains = data.domains\n\n // Filter by level if specified\n if (level) {\n const filtered = cachedDomains.filter(d =>\n d.levels?.includes(level) ?? true\n )\n log.debug(`Filtered ${filtered.length} domains for level ${level}`)\n return filtered\n }\n\n log.debug(`Loaded ${cachedDomains.length} math domains`)\n return cachedDomains\n },\n\n /**\n * Get strands for a specific domain\n *\n * @param domainId - Domain ID (e.g., 'relationship-algebra')\n * @returns Array of strand IDs\n */\n async getStrands(domainId: MathDomain): Promise<string[]> {\n if (!isValidDomainId(domainId)) {\n log.warn(`Invalid domain ID: \"${domainId}\"`)\n return []\n }\n\n const domains = await this.getDomains()\n const domain = domains.find(d => d.id === domainId)\n\n if (!domain) {\n log.debug(`Domain not found: ${domainId}`)\n return []\n }\n\n log.debug(`getStrands(${domainId}): ${domain.strands.length} strands`)\n return domain.strands\n },\n\n /**\n * Get chapters for a specific level and form\n *\n * @param level - Education level (SPM, SPM-AddMaths, etc.)\n * @param form - Form number (1-5)\n * @returns Array of chapter objects\n */\n async getChapters(\n level: MalaysianEducationLevel,\n form: number\n ): Promise<Array<{ chapter: number; title_en: string; title_bm: string; domain: string }>> {\n if (!isValidLevelId(level)) {\n log.warn(`Invalid education level: \"${level}\"`)\n return []\n }\n\n if (!isValidFormNumber(form)) {\n log.warn(`Invalid form number: ${form}`)\n return []\n }\n\n await rateLimiter.acquire()\n\n try {\n const response = await fetch(\n `${cdnBase}/question-banks/v2.0/malaysia-math/taxonomy/${level.toLowerCase()}.json`\n )\n\n if (!response.ok) {\n log.debug(`Chapters not found for ${level}`)\n return []\n }\n\n const data = await response.json() as {\n chapters?: Array<{ chapter: number; form: number; title_en: string; title_bm: string; domain_id: string }>\n }\n\n // Filter by form\n const chapters = (data.chapters ?? [])\n .filter(c => c.form === form)\n .map(c => ({\n chapter: c.chapter,\n title_en: c.title_en,\n title_bm: c.title_bm,\n domain: c.domain_id,\n }))\n\n log.debug(`getChapters(${level}, ${form}): ${chapters.length} chapters`)\n return chapters\n } catch {\n log.debug(`Failed to fetch chapters for ${level}`)\n return []\n }\n },\n\n /**\n * Clear cached taxonomy data\n */\n clearCache() {\n cachedLevels = null\n cachedDomains = null\n log.debug('Malaysian Math Taxonomy cache cleared')\n },\n }\n}\n\n// ============================================================================\n// Module Type Exports\n// ============================================================================\n\nexport type MalaysiaMathModule = ReturnType<typeof createMalaysiaMathModule>\nexport type MalaysiaMathTaxonomyModule = ReturnType<typeof createMalaysiaMathTaxonomyModule>\n","/**\n * Guessability Analysis Types\n *\n * Types for the anti-guessing MCQ quality assurance system.\n */\n\n/**\n * Violation rule identifiers\n */\nexport type ViolationRule =\n // General MCQ violations\n | 'LENGTH_BIAS'\n | 'GRAMMAR_CUE'\n | 'STEM_ECHO'\n | 'CONVERGENCE'\n | 'IMPLAUSIBLE'\n | 'ABSOLUTE_TERMS'\n | 'POSITION_PATTERN'\n | 'NON_HOMOGENEOUS'\n | 'ALL_NONE_ABOVE'\n | 'NEGATIVE_STEM'\n | 'INCOMPLETE_STEM'\n | 'NUMERIC_DISORDER'\n | 'TERM_MISMATCH'\n | 'DOUBLE_NEGATIVE'\n | 'COVER_TEST'\n // CS-specific violations (Phase 2)\n | 'HORIZONTAL_CODE' // Code options displayed horizontally instead of vertically\n | 'CODE_LENGTH_BIAS' // Code option lengths vary significantly (correct is longest)\n | 'CONFUSING_VARIABLES' // Generic variables (var1, var2, x, y) in non-teaching context\n | 'WINDOW_DRESSING' // Excessive irrelevant context in question stem\n | 'TYPE_K_FORMAT' // Combined options (A and C, I only, etc.)\n | 'TYPE_MIXING' // Options mix incompatible types (int + exception + null)\n | 'SYNTAX_ERROR_DISTRACTOR' // Syntax error in distractor when testing logic, not syntax\n\n/**\n * Violation severity levels\n */\nexport type ViolationSeverity = 'critical' | 'major' | 'minor'\n\n/**\n * Grade based on guessability score\n */\nexport type GuessabilityGrade = 'A' | 'B' | 'C' | 'D' | 'F'\n\n/**\n * A single violation detected in a question\n */\nexport interface Violation {\n /** Rule identifier */\n rule: ViolationRule\n /** Severity level */\n severity: ViolationSeverity\n /** Points added to guessability score */\n points: number\n /** Human-readable description of the violation */\n details: string\n /** Suggested fix */\n fix: string\n}\n\n/**\n * Guessability report for a single question\n */\nexport interface GuessabilityReport {\n /** Question identifier */\n questionId: string\n /** Guessability score (0-100, higher = more guessable = worse) */\n score: number\n /** Letter grade based on score */\n grade: GuessabilityGrade\n /** List of detected violations */\n violations: Violation[]\n /** Top 3 recommended fixes */\n recommendations: string[]\n}\n\n/**\n * Course-level guessability summary\n */\nexport interface GuessabilityCourseSummary {\n /** Course identifier */\n courseId: string\n /** Number of questions analyzed */\n questionCount: number\n /** Average guessability score */\n averageScore: number\n /** Average grade */\n averageGrade: GuessabilityGrade\n /** Distribution of grades */\n gradeDistribution: Record<GuessabilityGrade, number>\n /** Most common violations */\n topViolations: Array<{ rule: ViolationRule; count: number }>\n /** Worst questions (Grade D or F) */\n worstQuestions: Array<{\n questionId: string\n score: number\n grade: GuessabilityGrade\n }>\n}\n\n/**\n * Full audit report for all courses\n */\nexport interface AuditReport {\n /** Timestamp of report generation */\n timestamp: string\n /** Summary statistics */\n summary: {\n totalQuestions: number\n sampleSize: number\n averageScore: number\n averageGrade: GuessabilityGrade\n gradeDistribution: Record<GuessabilityGrade, number>\n }\n /** Per-course summaries */\n byCourse: Record<string, GuessabilityCourseSummary>\n /** Worst questions across all courses */\n worstQuestions: Array<{\n questionId: string\n courseId: string\n score: number\n grade: GuessabilityGrade\n violations: Violation[]\n }>\n}\n\n/**\n * Options for scoring\n */\nexport interface ScoreOptions {\n /** Include fix recommendations */\n withFixes?: boolean\n /** Threshold for failing (default: 30) */\n threshold?: number\n /** Sample size (for large datasets) */\n sampleSize?: number\n /** Stratify sampling by difficulty */\n stratify?: 'difficulty' | 'lesson' | 'random'\n}\n\n/**\n * Scoring weights for each violation type\n */\nexport const SCORING_WEIGHTS: Record<ViolationRule, { points: number; severity: ViolationSeverity }> = {\n // General MCQ violations\n LENGTH_BIAS: { points: 20, severity: 'critical' },\n GRAMMAR_CUE: { points: 15, severity: 'critical' },\n STEM_ECHO: { points: 12, severity: 'major' },\n CONVERGENCE: { points: 12, severity: 'major' },\n IMPLAUSIBLE: { points: 10, severity: 'major' },\n ABSOLUTE_TERMS: { points: 8, severity: 'minor' },\n POSITION_PATTERN: { points: 8, severity: 'minor' },\n NON_HOMOGENEOUS: { points: 8, severity: 'minor' },\n ALL_NONE_ABOVE: { points: 7, severity: 'minor' },\n NEGATIVE_STEM: { points: 5, severity: 'minor' },\n INCOMPLETE_STEM: { points: 5, severity: 'minor' },\n NUMERIC_DISORDER: { points: 3, severity: 'minor' },\n TERM_MISMATCH: { points: 5, severity: 'minor' },\n DOUBLE_NEGATIVE: { points: 5, severity: 'minor' },\n COVER_TEST: { points: 5, severity: 'minor' },\n // CS-specific violations (Phase 2 - from deep research)\n HORIZONTAL_CODE: { points: 25, severity: 'critical' }, // Code readability is existential\n CODE_LENGTH_BIAS: { points: 18, severity: 'critical' }, // Code-specific length check\n CONFUSING_VARIABLES: { points: 12, severity: 'major' }, // Generic variable names\n WINDOW_DRESSING: { points: 10, severity: 'major' }, // Excessive irrelevant context\n TYPE_K_FORMAT: { points: 15, severity: 'critical' }, // Combined options exploit patterns\n TYPE_MIXING: { points: 8, severity: 'minor' }, // Mixed incompatible types\n SYNTAX_ERROR_DISTRACTOR: { points: 12, severity: 'major' }, // Syntax errors in logic tests\n}\n\n/**\n * Grade thresholds\n */\nexport const GRADE_THRESHOLDS: Array<{ maxScore: number; grade: GuessabilityGrade }> = [\n { maxScore: 15, grade: 'A' },\n { maxScore: 30, grade: 'B' },\n { maxScore: 45, grade: 'C' },\n { maxScore: 60, grade: 'D' },\n { maxScore: 100, grade: 'F' },\n]\n","const methods = {\n one: {},\n two: {},\n three: {},\n four: {},\n}\n\nconst model = {\n one: {},\n two: {},\n three: {},\n}\nconst compute = {}\nconst hooks = []\n\nexport default { methods, model, compute, hooks }\n","const isArray = input => Object.prototype.toString.call(input) === '[object Array]'\n\nconst fns = {\n /** add metadata to term objects */\n compute: function (input) {\n const { world } = this\n const compute = world.compute\n // do one method\n if (typeof input === 'string' && compute.hasOwnProperty(input)) {\n compute[input](this)\n }\n // allow a list of methods\n else if (isArray(input)) {\n input.forEach(name => {\n if (world.compute.hasOwnProperty(name)) {\n compute[name](this)\n } else {\n console.warn('no compute:', input) // eslint-disable-line\n }\n })\n }\n // allow a custom compute function\n else if (typeof input === 'function') {\n input(this)\n } else {\n console.warn('no compute:', input) // eslint-disable-line\n }\n return this\n },\n}\nexport default fns\n","// wrappers for loops in javascript arrays\n\nconst forEach = function (cb) {\n const ptrs = this.fullPointer\n ptrs.forEach((ptr, i) => {\n const view = this.update([ptr])\n cb(view, i)\n })\n return this\n}\n\nconst map = function (cb, empty) {\n const ptrs = this.fullPointer\n const res = ptrs.map((ptr, i) => {\n const view = this.update([ptr])\n const out = cb(view, i)\n // if we returned nothing, return a view\n if (out === undefined) {\n return this.none()\n }\n return out\n })\n if (res.length === 0) {\n return empty || this.update([])\n }\n // return an array of values, or View objects?\n // user can return either from their callback\n if (res[0] !== undefined) {\n // array of strings\n if (typeof res[0] === 'string') {\n return res\n }\n // array of objects\n if (typeof res[0] === 'object' && (res[0] === null || !res[0].isView)) {\n return res\n }\n }\n // return a View object\n let all = []\n res.forEach(ptr => {\n all = all.concat(ptr.fullPointer)\n })\n return this.toView(all)\n}\n\nconst filter = function (cb) {\n let ptrs = this.fullPointer\n ptrs = ptrs.filter((ptr, i) => {\n const view = this.update([ptr])\n return cb(view, i)\n })\n const res = this.update(ptrs)\n return res\n}\n\nconst find = function (cb) {\n const ptrs = this.fullPointer\n const found = ptrs.find((ptr, i) => {\n const view = this.update([ptr])\n return cb(view, i)\n })\n return this.update([found])\n}\n\nconst some = function (cb) {\n const ptrs = this.fullPointer\n return ptrs.some((ptr, i) => {\n const view = this.update([ptr])\n return cb(view, i)\n })\n}\n\nconst random = function (n = 1) {\n let ptrs = this.fullPointer\n let r = Math.floor(Math.random() * ptrs.length)\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n ptrs = ptrs.slice(r, r + n)\n return this.update(ptrs)\n}\nexport default { forEach, map, filter, find, some, random }\n","const utils = {\n /** */\n termList: function () {\n return this.methods.one.termList(this.docs)\n },\n /** return individual terms*/\n terms: function (n) {\n const m = this.match('.')\n // this is a bit faster than .match('.') \n // let ptrs = []\n // this.docs.forEach((terms) => {\n // terms.forEach((term) => {\n // let [y, x] = term.index || []\n // ptrs.push([y, x, x + 1])\n // })\n // })\n // let m = this.update(ptrs)\n return typeof n === 'number' ? m.eq(n) : m\n },\n\n /** */\n groups: function (group) {\n if (group || group === 0) {\n return this.update(this._groups[group] || [])\n }\n // return an object of Views\n const res = {}\n Object.keys(this._groups).forEach(k => {\n res[k] = this.update(this._groups[k])\n })\n // this._groups = null\n return res\n },\n /** */\n eq: function (n) {\n let ptr = this.pointer\n if (!ptr) {\n ptr = this.docs.map((_doc, i) => [i])\n }\n if (ptr[n]) {\n return this.update([ptr[n]])\n }\n return this.none()\n },\n /** */\n first: function () {\n return this.eq(0)\n },\n /** */\n last: function () {\n const n = this.fullPointer.length - 1\n return this.eq(n)\n },\n\n /** grab term[0] for every match */\n firstTerms: function () {\n return this.match('^.')\n },\n\n /** grab the last term for every match */\n lastTerms: function () {\n return this.match('.$')\n },\n\n /** */\n slice: function (min, max) {\n let pntrs = this.pointer || this.docs.map((_o, n) => [n])\n pntrs = pntrs.slice(min, max)\n return this.update(pntrs)\n },\n\n /** return a view of the entire document */\n all: function () {\n return this.update().toView()\n },\n /** */\n fullSentences: function () {\n const ptrs = this.fullPointer.map(a => [a[0]]) //lazy!\n return this.update(ptrs).toView()\n },\n /** return a view of no parts of the document */\n none: function () {\n return this.update([])\n },\n\n /** are these two views looking at the same words? */\n isDoc: function (b) {\n if (!b || !b.isView) {\n return false\n }\n const aPtr = this.fullPointer\n const bPtr = b.fullPointer\n if (!aPtr.length === bPtr.length) {\n return false\n }\n // ensure pointers are the same\n return aPtr.every((ptr, i) => {\n if (!bPtr[i]) {\n return false\n }\n // ensure [n, start, end] are all the same\n return ptr[0] === bPtr[i][0] && ptr[1] === bPtr[i][1] && ptr[2] === bPtr[i][2]\n })\n },\n\n /** how many seperate terms does the document have? */\n wordCount: function () {\n return this.docs.reduce((count, terms) => {\n count += terms.filter(t => t.text !== '').length\n return count\n }, 0)\n },\n\n // is the pointer the full sentence?\n isFull: function () {\n const ptrs = this.pointer\n if (!ptrs) {\n return true\n }\n // must start at beginning\n if (ptrs.length === 0 || ptrs[0][0] !== 0) {\n return false\n }\n let wantTerms = 0\n let haveTerms = 0\n this.document.forEach(terms => wantTerms += terms.length)\n this.docs.forEach(terms => haveTerms += terms.length)\n return wantTerms === haveTerms\n // for (let i = 0; i < ptrs.length; i += 1) {\n // let [n, start, end] = ptrs[i]\n // // it's not the start\n // if (n !== i || start !== 0) {\n // return false\n // }\n // // it's too short\n // if (document[n].length > end) {\n // return false\n // }\n // }\n // return true\n },\n\n // return the nth elem of a doc\n getNth: function (n) {\n if (typeof n === 'number') {\n return this.eq(n)\n } else if (typeof n === 'string') {\n return this.if(n)\n }\n return this\n }\n\n}\nutils.group = utils.groups\nutils.fullSentence = utils.fullSentences\nutils.sentence = utils.fullSentences\nutils.lastTerm = utils.lastTerms\nutils.firstTerm = utils.firstTerms\nexport default utils\n","import compute from './compute.js'\nimport loops from './loops.js'\nimport util from './utils.js'\n\nconst methods = Object.assign({}, util, compute, loops)\n\n// aliases\nmethods.get = methods.eq\nexport default methods\n","import world from './world.js'\nimport api from './methods/index.js'\n\nclass View {\n constructor(document, pointer, groups = {}) {\n // invisible props\n const props = [\n ['document', document],\n ['world', world],\n ['_groups', groups],\n ['_cache', null],\n ['viewType', 'View'],\n ]\n props.forEach(a => {\n Object.defineProperty(this, a[0], {\n value: a[1],\n writable: true,\n })\n })\n this.ptrs = pointer\n }\n /* getters: */\n get docs() {\n let docs = this.document\n if (this.ptrs) {\n docs = world.methods.one.getDoc(this.ptrs, this.document)\n }\n return docs\n }\n get pointer() {\n return this.ptrs\n }\n get methods() {\n return this.world.methods\n }\n get model() {\n return this.world.model\n }\n get hooks() {\n return this.world.hooks\n }\n get isView() {\n return true //this comes in handy sometimes\n }\n // is the view not-empty?\n get found() {\n return this.docs.length > 0\n }\n // how many matches we have\n get length() {\n return this.docs.length\n }\n // return a more-hackable pointer\n get fullPointer() {\n const { docs, ptrs, document } = this\n // compute a proper pointer, from docs\n const pointers = ptrs || docs.map((_d, n) => [n])\n // do we need to repair it, first?\n return pointers.map(a => {\n // eslint-disable-next-line prefer-const\n let [n, start, end, id, endId] = a\n start = start || 0\n end = end || (document[n] || []).length\n //add frozen id, for good-measure\n if (document[n] && document[n][start]) {\n id = id || document[n][start].id\n if (document[n][end - 1]) {\n endId = endId || document[n][end - 1].id\n }\n }\n return [n, start, end, id, endId]\n })\n }\n // create a new View, from this one\n update(pointer) {\n const m = new View(this.document, pointer)\n // send the cache down, too?\n if (this._cache && pointer && pointer.length > 0) {\n // only keep cache if it's a full-sentence\n const cache = []\n pointer.forEach((ptr, i) => {\n const [n, start, end] = ptr\n if (ptr.length === 1) {\n cache[i] = this._cache[n]\n } else if (start === 0 && this.document[n].length === end) {\n cache[i] = this._cache[n]\n }\n })\n if (cache.length > 0) {\n m._cache = cache\n }\n }\n m.world = this.world\n return m\n }\n // create a new View, from this one\n toView(pointer) {\n return new View(this.document, pointer || this.pointer)\n }\n fromText(input) {\n const { methods } = this\n //assume ./01-tokenize is installed\n const document = methods.one.tokenize.fromString(input, this.world)\n const doc = new View(document)\n doc.world = this.world\n doc.compute(['normal', 'freeze', 'lexicon'])\n if (this.world.compute.preTagger) {\n doc.compute('preTagger')\n }\n doc.compute('unfreeze')\n return doc\n }\n clone() {\n // clone the whole document\n let document = this.document.slice(0) //node 17: structuredClone(document);\n document = document.map(terms => {\n return terms.map(term => {\n term = Object.assign({}, term)\n term.tags = new Set(term.tags)\n return term\n })\n })\n // clone only sub-document ?\n const m = this.update(this.pointer)\n m.document = document\n m._cache = this._cache //clone this too?\n return m\n }\n}\nObject.assign(View.prototype, api)\nexport default View\n","export default '14.14.5'","const isObject = function (item) {\n return item && typeof item === 'object' && !Array.isArray(item)\n}\n\nconst isArray = function (arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n// recursive merge of objects\nfunction mergeDeep(model, plugin) {\n if (isObject(plugin)) {\n for (const key in plugin) {\n if (isObject(plugin[key])) {\n if (!model[key]) Object.assign(model, { [key]: {} })\n mergeDeep(model[key], plugin[key]) //recursion\n } else {\n Object.assign(model, { [key]: plugin[key] })\n }\n }\n }\n return model\n}\n// const merged = mergeDeep({ a: 1 }, { b: { c: { d: { e: 12345 } } } })\n// console.dir(merged, { depth: 5 })\n\n// vroom\nfunction mergeQuick(model, plugin) {\n for (const key in plugin) {\n model[key] = model[key] || {}\n Object.assign(model[key], plugin[key])\n }\n return model\n}\n\nconst addIrregulars = function (model, conj) {\n const m = model.two.models || {}\n Object.keys(conj).forEach(k => {\n // verb forms\n if (conj[k].pastTense) {\n if (m.toPast) {\n m.toPast.ex[k] = conj[k].pastTense\n }\n if (m.fromPast) {\n m.fromPast.ex[conj[k].pastTense] = k\n }\n }\n if (conj[k].presentTense) {\n if (m.toPresent) {\n m.toPresent.ex[k] = conj[k].presentTense\n }\n if (m.fromPresent) {\n m.fromPresent.ex[conj[k].presentTense] = k\n }\n }\n if (conj[k].gerund) {\n if (m.toGerund) {\n m.toGerund.ex[k] = conj[k].gerund\n }\n if (m.fromGerund) {\n m.fromGerund.ex[conj[k].gerund] = k\n }\n }\n // adjective forms\n if (conj[k].comparative) {\n if (m.toComparative) {\n m.toComparative.ex[k] = conj[k].comparative\n }\n if (m.fromComparative) {\n m.fromComparative.ex[conj[k].comparative] = k\n }\n }\n if (conj[k].superlative) {\n if (m.toSuperlative) {\n m.toSuperlative.ex[k] = conj[k].superlative\n }\n if (m.fromSuperlative) {\n m.fromSuperlative.ex[conj[k].superlative] = k\n }\n }\n })\n}\n\nconst extend = function (plugin, world, View, nlp) {\n // support array of plugins\n if (isArray(plugin)) {\n plugin.forEach(p => extend(p, world, View, nlp))\n return\n }\n const { methods, model, compute, hooks } = world\n if (plugin.methods) {\n mergeQuick(methods, plugin.methods)\n }\n if (plugin.model) {\n mergeDeep(model, plugin.model)\n }\n if (plugin.irregulars) {\n addIrregulars(model, plugin.irregulars)\n }\n // shallow-merge compute\n if (plugin.compute) {\n Object.assign(compute, plugin.compute)\n }\n // append new hooks\n if (hooks) {\n world.hooks = hooks.concat(plugin.hooks || [])\n }\n // assign new class methods\n if (plugin.api) {\n plugin.api(View)\n }\n if (plugin.lib) {\n Object.keys(plugin.lib).forEach(k => (nlp[k] = plugin.lib[k]))\n }\n if (plugin.tags) {\n nlp.addTags(plugin.tags)\n }\n if (plugin.words) {\n nlp.addWords(plugin.words)\n }\n if (plugin.frozen) {\n nlp.addWords(plugin.frozen, true)\n }\n if (plugin.mutate) {\n plugin.mutate(world, nlp)\n }\n}\nexport default extend\n","\n/** log the decision-making to console */\nconst verbose = function (set) {\n const env = typeof process === 'undefined' || !process.env ? self.env || {} : process.env //use window, in browser\n env.DEBUG_TAGS = set === 'tagger' || set === true ? true : ''\n env.DEBUG_MATCH = set === 'match' || set === true ? true : ''\n env.DEBUG_CHUNKS = set === 'chunker' || set === true ? true : ''\n return this\n}\n\nexport { verbose }","const isObject = val => {\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\nconst isArray = function (arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n// internal Term objects are slightly different\nconst fromJson = function (json) {\n return json.map(o => {\n return o.terms.map(term => {\n if (isArray(term.tags)) {\n term.tags = new Set(term.tags)\n }\n return term\n })\n })\n}\n\n// interpret an array-of-arrays\nconst preTokenized = function (arr) {\n return arr.map((a) => {\n return a.map(str => {\n return {\n text: str,\n normal: str,//cleanup\n pre: '',\n post: ' ',\n tags: new Set()\n }\n })\n })\n}\n\nconst inputs = function (input, View, world) {\n const { methods } = world\n const doc = new View([])\n doc.world = world\n // support a number\n if (typeof input === 'number') {\n input = String(input)\n }\n // return empty doc\n if (!input) {\n return doc\n }\n // parse a string\n if (typeof input === 'string') {\n const document = methods.one.tokenize.fromString(input, world)\n return new View(document)\n }\n // handle compromise View\n if (isObject(input) && input.isView) {\n return new View(input.document, input.ptrs)\n }\n // handle json input\n if (isArray(input)) {\n // pre-tokenized array-of-arrays \n if (isArray(input[0])) {\n const document = preTokenized(input)\n return new View(document)\n }\n // handle json output\n const document = fromJson(input)\n return new View(document)\n }\n return doc\n}\nexport default inputs","import View from './API/View.js'\nimport tmpWrld from './API/world.js'\nimport version from './_version.js'\nimport extend from './API/extend.js'\nimport { verbose } from './API/_lib.js'\nimport handleInputs from './API/inputs.js'\n\nconst world = Object.assign({}, tmpWrld)\n\nconst nlp = function (input, lex) {\n if (lex) {\n nlp.addWords(lex)\n }\n const doc = handleInputs(input, View, world)\n if (input) {\n doc.compute(world.hooks)\n }\n return doc\n}\nObject.defineProperty(nlp, '_world', {\n value: world,\n writable: true,\n})\n\n/** don't run the POS-tagger */\nnlp.tokenize = function (input, lex) {\n const { compute } = this._world\n // add user-given words to lexicon\n if (lex) {\n nlp.addWords(lex)\n }\n // run the tokenizer\n const doc = handleInputs(input, View, world)\n // give contractions a shot, at least\n if (compute.contractions) {\n doc.compute(['alias', 'normal', 'machine', 'contractions']) //run it if we've got it\n }\n return doc\n}\n\n/** extend compromise functionality */\nnlp.plugin = function (plugin) {\n extend(plugin, this._world, View, this)\n return this\n}\nnlp.extend = nlp.plugin\n\n\n/** reach-into compromise internals */\nnlp.world = function () {\n return this._world\n}\nnlp.model = function () {\n return this._world.model\n}\nnlp.methods = function () {\n return this._world.methods\n}\nnlp.hooks = function () {\n return this._world.hooks\n}\n\n/** log the decision-making to console */\nnlp.verbose = verbose\n/** current library release version */\nnlp.version = version\n\nexport default nlp\n","const createCache = function (document) {\n const cache = document.map(terms => {\n const items = new Set()\n terms.forEach(term => {\n // add words\n if (term.normal !== '') {\n items.add(term.normal)\n }\n // cache switch-status - '%Noun|Verb%'\n if (term.switch) {\n items.add(`%${term.switch}%`)\n }\n // cache implicit words, too\n if (term.implicit) {\n items.add(term.implicit)\n }\n if (term.machine) {\n items.add(term.machine)\n }\n if (term.root) {\n items.add(term.root)\n }\n // cache slashes words, etc\n if (term.alias) {\n term.alias.forEach(str => items.add(str))\n }\n const tags = Array.from(term.tags)\n for (let t = 0; t < tags.length; t += 1) {\n items.add('#' + tags[t])\n }\n })\n return items\n })\n return cache\n}\nexport default createCache\n","import cacheDoc from './cacheDoc.js'\n\nexport default {\n one: {\n cacheDoc,\n },\n}\n","const methods = {\n /** */\n cache: function () {\n this._cache = this.methods.one.cacheDoc(this.document)\n return this\n },\n /** */\n uncache: function () {\n this._cache = null\n return this\n },\n}\nconst addAPI = function (View) {\n Object.assign(View.prototype, methods)\n}\nexport default addAPI\n","\nexport default {\n cache: function (view) {\n view._cache = view.methods.one.cacheDoc(view.document)\n }\n}","import methods from './methods/index.js'\nimport api from './api.js'\nimport compute from './compute.js'\n\nexport default {\n api,\n compute,\n methods,\n}\n","export default {\n /** */\n toLowerCase: function () {\n this.termList().forEach(t => {\n t.text = t.text.toLowerCase()\n })\n return this\n },\n /** */\n toUpperCase: function () {\n this.termList().forEach(t => {\n t.text = t.text.toUpperCase()\n })\n return this\n },\n /** */\n toTitleCase: function () {\n this.termList().forEach(t => {\n t.text = t.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n })\n return this\n },\n /** */\n toCamelCase: function () {\n this.docs.forEach(terms => {\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.text = t.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n return this\n },\n}\n","// case logic\nconst isTitleCase = (str) => /^\\p{Lu}[\\p{Ll}'’]/u.test(str) || /^\\p{Lu}$/u.test(str)\nconst toTitleCase = (str) => str.replace(/^\\p{Ll}/u, x => x.toUpperCase())\nconst toLowerCase = (str) => str.replace(/^\\p{Lu}/u, x => x.toLowerCase())\n\n// splice an array into an array\nconst spliceArr = (parent, index, child) => {\n // tag them as dirty\n child.forEach(term => term.dirty = true)\n if (parent) {\n const args = [index, 0].concat(child)\n Array.prototype.splice.apply(parent, args)\n }\n return parent\n}\n\n// add a space at end, if required\nconst endSpace = function (terms) {\n const hasSpace = / $/\n const hasDash = /[-–—]/\n const lastTerm = terms[terms.length - 1]\n if (lastTerm && !hasSpace.test(lastTerm.post) && !hasDash.test(lastTerm.post)) {\n lastTerm.post += ' '\n }\n}\n\n// sentence-ending punctuation should move in append\nconst movePunct = (source, end, needle) => {\n const juicy = /[-.?!,;:)–—'\"]/g\n const wasLast = source[end - 1]\n if (!wasLast) {\n return\n }\n const post = wasLast.post\n if (juicy.test(post)) {\n const punct = post.match(juicy).join('') //not perfect\n const last = needle[needle.length - 1]\n last.post = punct + last.post\n // remove it, from source\n wasLast.post = wasLast.post.replace(juicy, '')\n }\n}\n\n\nconst moveTitleCase = function (home, start, needle) {\n const from = home[start]\n // should we bother?\n if (start !== 0 || !isTitleCase(from.text)) {\n return\n }\n // titlecase new first term\n needle[0].text = toTitleCase(needle[0].text)\n // should we un-titlecase the old word?\n const old = home[start]\n if (old.tags.has('ProperNoun') || old.tags.has('Acronym')) {\n return\n }\n if (isTitleCase(old.text) && old.text.length > 1) {\n old.text = toLowerCase(old.text)\n }\n}\n\n// put these words before the others\nconst cleanPrepend = function (home, ptr, needle, document) {\n const [n, start, end] = ptr\n // introduce spaces appropriately\n if (start === 0) {\n // at start - need space in insert\n endSpace(needle)\n } else if (end === document[n].length) {\n // at end - need space in home\n endSpace(needle)\n } else {\n // in middle - need space in home and insert\n endSpace(needle)\n endSpace([home[ptr[1]]])\n }\n moveTitleCase(home, start, needle)\n // movePunct(home, end, needle)\n spliceArr(home, start, needle)\n}\n\nconst cleanAppend = function (home, ptr, needle, document) {\n const [n, , end] = ptr\n const total = (document[n] || []).length\n if (end < total) {\n // are we in the middle?\n // add trailing space on self\n movePunct(home, end, needle)\n endSpace(needle)\n } else if (total === end) {\n // are we at the end?\n // add a space to predecessor\n endSpace(home)\n // very end, move period\n movePunct(home, end, needle)\n // is there another sentence after?\n if (document[n + 1]) {\n needle[needle.length - 1].post += ' '\n }\n }\n spliceArr(home, ptr[2], needle)\n // set new endId\n ptr[4] = needle[needle.length - 1].id\n}\n\nexport { cleanPrepend, cleanAppend, spliceArr }\n","/*\nunique & ordered term ids, based on time & term index\n\nBase 36 (numbers+ascii)\n 3 digit 4,600\n 2 digit 1,200\n 1 digit 36\n\n TTT|NNN|II|R\n\nTTT -> 46 terms since load\nNNN -> 46 thousand sentences (>1 inf-jest)\nII -> 1,200 words in a sentence (nuts)\nR -> 1-36 random number \n\nnovels: \n avg 80,000 words\n 15 words per sentence\n 5,000 sentences\n\nInfinite Jest:\n 36,247 sentences\n https://en.wikipedia.org/wiki/List_of_longest_novels\n\ncollisions are more-likely after\n 46 seconds have passed,\n and \n after 46-thousand sentences\n\n*/\nlet index = 0\n\nconst pad3 = (str) => {\n str = str.length < 3 ? '0' + str : str\n return str.length < 3 ? '0' + str : str\n}\n\nconst toId = function (term) {\n let [n, i] = term.index || [0, 0]\n index += 1\n\n //don't overflow index\n index = index > 46655 ? 0 : index\n //don't overflow sentences\n n = n > 46655 ? 0 : n\n // //don't overflow terms\n i = i > 1294 ? 0 : i\n\n // 3 digits for time\n let id = pad3(index.toString(36))\n // 3 digit for sentence index (46k)\n id += pad3(n.toString(36))\n\n // 1 digit for term index (36)\n let tx = i.toString(36)\n tx = tx.length < 2 ? '0' + tx : tx //pad2\n id += tx\n\n // 1 digit random number\n const r = parseInt(Math.random() * 36, 10)\n id += (r).toString(36)\n\n return term.normal + '|' + id.toUpperCase()\n}\n\nexport default toId\n\n// setInterval(() => console.log(toId(4, 12)), 100)\n","import { cleanAppend, cleanPrepend } from './lib/insert.js'\nimport uuid from '../compute/uuid.js'\n// are we inserting inside a contraction?\n// expand it first\nconst expand = function (m) {\n if (m.has('@hasContraction') && typeof m.contractions === 'function') {\n //&& m.after('^.').has('@hasContraction')\n const more = m.grow('@hasContraction')\n more.contractions().expand()\n }\n}\n\nconst isArray = arr => Object.prototype.toString.call(arr) === '[object Array]'\n\n// set new ids for each terms\nconst addIds = function (terms) {\n terms = terms.map(term => {\n term.id = uuid(term)\n return term\n })\n return terms\n}\n\nconst getTerms = function (input, world) {\n const { methods } = world\n // create our terms from a string\n if (typeof input === 'string') {\n return methods.one.tokenize.fromString(input, world)[0] //assume one sentence\n }\n //allow a view object\n if (typeof input === 'object' && input.isView) {\n return input.clone().docs[0] || [] //assume one sentence\n }\n //allow an array of terms, too\n if (isArray(input)) {\n return isArray(input[0]) ? input[0] : input\n }\n return []\n}\n\nconst insert = function (input, view, prepend) {\n const { document, world } = view\n view.uncache()\n // insert words at end of each doc\n const ptrs = view.fullPointer\n const selfPtrs = view.fullPointer\n view.forEach((m, i) => {\n const ptr = m.fullPointer[0]\n const [n] = ptr\n // add-in the words\n const home = document[n]\n let terms = getTerms(input, world)\n // are we inserting nothing?\n if (terms.length === 0) {\n return\n }\n terms = addIds(terms)\n if (prepend) {\n expand(view.update([ptr]).firstTerm())\n cleanPrepend(home, ptr, terms, document)\n } else {\n expand(view.update([ptr]).lastTerm())\n cleanAppend(home, ptr, terms, document)\n }\n // harden the pointer\n if (document[n] && document[n][ptr[1]]) {\n ptr[3] = document[n][ptr[1]].id\n }\n // change self backwards by len\n selfPtrs[i] = ptr\n // extend the pointer\n ptr[2] += terms.length\n ptrs[i] = ptr\n })\n const doc = view.toView(ptrs)\n // shift our self pointer, if necessary\n view.ptrs = selfPtrs\n // try to tag them, too\n doc.compute(['id', 'index', 'freeze', 'lexicon'])\n if (doc.world.compute.preTagger) {\n doc.compute('preTagger')\n }\n doc.compute('unfreeze')\n return doc\n}\n\nconst fns = {\n insertAfter: function (input) {\n return insert(input, this, false)\n },\n insertBefore: function (input) {\n return insert(input, this, true)\n },\n}\nfns.append = fns.insertAfter\nfns.prepend = fns.insertBefore\nfns.insert = fns.insertAfter\n\nexport default fns\n","const dollarStub = /\\$[0-9a-z]+/g\nconst fns = {}\n\n// case logic\nconst isTitleCase = (str) => /^\\p{Lu}[\\p{Ll}'’]/u.test(str) || /^\\p{Lu}$/u.test(str)\nconst toTitleCase = (str) => str.replace(/^\\p{Ll}/u, x => x.toUpperCase())\nconst toLowerCase = (str) => str.replace(/^\\p{Lu}/u, x => x.toLowerCase())\n\n// doc.replace('foo', (m)=>{})\nconst replaceByFn = function (main, fn, keep) {\n main.forEach(m => {\n const out = fn(m)\n m.replaceWith(out, keep)\n })\n return main\n}\n\n// support 'foo $0' replacements\nconst subDollarSign = function (input, main) {\n if (typeof input !== 'string') {\n return input\n }\n const groups = main.groups()\n input = input.replace(dollarStub, a => {\n const num = a.replace(/\\$/, '')\n if (groups.hasOwnProperty(num)) {\n return groups[num].text()\n }\n return a\n })\n return input\n}\n\nfns.replaceWith = function (input, keep = {}) {\n let ptrs = this.fullPointer\n const main = this\n this.uncache()\n if (typeof input === 'function') {\n return replaceByFn(main, input, keep)\n }\n const terms = main.docs[0]\n if (!terms) return main\n const isOriginalPossessive = keep.possessives && terms[terms.length - 1].tags.has('Possessive')\n const isOriginalTitleCase = keep.case && isTitleCase(terms[0].text)\n // support 'foo $0' replacements\n input = subDollarSign(input, main)\n\n const original = this.update(ptrs)\n // soften-up pointer\n ptrs = ptrs.map(ptr => ptr.slice(0, 3))\n // original.freeze()\n const oldTags = (original.docs[0] || []).map(term => Array.from(term.tags))\n const originalPre = original.docs[0][0].pre\n const originalPost = original.docs[0][original.docs[0].length - 1].post\n // slide this in\n if (typeof input === 'string') {\n input = this.fromText(input).compute('id')\n }\n main.insertAfter(input)\n // are we replacing part of a contraction?\n if (original.has('@hasContraction') && main.contractions) {\n const more = main.grow('@hasContraction+')\n more.contractions().expand()\n }\n // delete the original terms\n main.delete(original) //science.\n\n // keep \"John's\"\n if (isOriginalPossessive) {\n const tmp = main.docs[0]\n const term = tmp[tmp.length - 1]\n if (!term.tags.has('Possessive')) {\n term.text += \"'s\"\n term.normal += \"'s\"\n term.tags.add('Possessive')\n }\n }\n\n // try to keep some pre-punctuation\n if (originalPre && main.docs[0]) {\n main.docs[0][0].pre = originalPre\n }\n // try to keep any post-punctuation\n if (originalPost && main.docs[0]) {\n const lastOne = main.docs[0][main.docs[0].length - 1]\n if (!lastOne.post.trim()) {\n lastOne.post = originalPost\n }\n }\n\n // what should we return?\n const m = main.toView(ptrs).compute(['index', 'freeze', 'lexicon'])\n if (m.world.compute.preTagger) {\n m.compute('preTagger')\n }\n m.compute('unfreeze')\n // replace any old tags\n if (keep.tags) {\n m.terms().forEach((term, i) => {\n term.tagSafe(oldTags[i])\n })\n }\n\n if (!m.docs[0] || !m.docs[0][0]) return m\n\n // try to co-erce case, too\n if (keep.case) {\n const transformCase = isOriginalTitleCase ? toTitleCase : toLowerCase\n m.docs[0][0].text = transformCase(m.docs[0][0].text)\n }\n\n // console.log(input.docs[0])\n // let regs = input.docs[0].map(t => {\n // return { id: t.id, optional: true }\n // })\n // m.after('(a|hoy)').debug()\n // m.growRight('(a|hoy)').debug()\n // console.log(m)\n return m\n}\n\nfns.replace = function (match, input, keep) {\n if (match && !input) {\n return this.replaceWith(match, keep)\n }\n const m = this.match(match)\n if (!m.found) {\n return this\n }\n this.soften()\n return m.replaceWith(input, keep)\n}\nexport default fns\n","\n// transfer sentence-ending punctuation\nconst repairPunct = function (terms, len) {\n const last = terms.length - 1\n const from = terms[last]\n const to = terms[last - len]\n if (to && from) {\n to.post += from.post //this isn't perfect.\n to.post = to.post.replace(/ +([.?!,;:])/, '$1')\n // don't allow any silly punctuation outcomes like ',!'\n to.post = to.post.replace(/[,;:]+([.?!])/, '$1')\n }\n}\n\n// remove terms from document json\nconst pluckOut = function (document, nots) {\n nots.forEach(ptr => {\n const [n, start, end] = ptr\n const len = end - start\n if (!document[n]) {\n return // weird!\n }\n if (end === document[n].length && end > 1) {\n repairPunct(document[n], len)\n }\n document[n].splice(start, len) // replaces len terms at index start\n })\n // remove any now-empty sentences\n // (foreach + splice = 'mutable filter')\n for (let i = document.length - 1; i >= 0; i -= 1) {\n if (document[i].length === 0) {\n document.splice(i, 1)\n // remove any trailing whitespace before our removed sentence\n if (i === document.length && document[i - 1]) {\n const terms = document[i - 1]\n const lastTerm = terms[terms.length - 1]\n if (lastTerm) {\n lastTerm.post = lastTerm.post.trimEnd()\n }\n }\n // repair any downstream indexes\n // for (let k = i; k < document.length; k += 1) {\n // document[k].forEach(term => term.index[0] -= 1)\n // }\n }\n }\n return document\n}\n\nexport default pluckOut","import pluckOutTerm from './lib/remove.js'\n\nconst fixPointers = function (ptrs, gonePtrs) {\n ptrs = ptrs.map(ptr => {\n const [n] = ptr\n if (!gonePtrs[n]) {\n return ptr\n }\n gonePtrs[n].forEach(no => {\n const len = no[2] - no[1]\n // does it effect our pointer?\n if (ptr[1] <= no[1] && ptr[2] >= no[2]) {\n ptr[2] -= len\n }\n })\n return ptr\n })\n\n // decrement any pointers after a now-empty pointer\n ptrs.forEach((ptr, i) => {\n // is the pointer now empty?\n if (ptr[1] === 0 && ptr[2] == 0) {\n // go down subsequent pointers\n for (let n = i + 1; n < ptrs.length; n += 1) {\n ptrs[n][0] -= 1\n if (ptrs[n][0] < 0) {\n ptrs[n][0] = 0\n }\n }\n }\n })\n // remove any now-empty pointers\n ptrs = ptrs.filter(ptr => ptr[2] - ptr[1] > 0)\n\n // remove old hard-pointers\n ptrs = ptrs.map((ptr) => {\n ptr[3] = null\n ptr[4] = null\n return ptr\n })\n return ptrs\n}\n\nconst methods = {\n /** */\n remove: function (reg) {\n const { indexN } = this.methods.one.pointer\n this.uncache()\n // two modes:\n // - a. remove self, from full parent\n let self = this.all()\n let not = this\n // - b. remove a match, from self\n if (reg) {\n self = this\n not = this.match(reg)\n }\n const isFull = !self.ptrs\n // is it part of a contraction?\n if (not.has('@hasContraction') && not.contractions) {\n const more = not.grow('@hasContraction')\n more.contractions().expand()\n }\n\n let ptrs = self.fullPointer\n const nots = not.fullPointer.reverse()\n // remove them from the actual document)\n const document = pluckOutTerm(this.document, nots)\n // repair our pointers\n const gonePtrs = indexN(nots)\n ptrs = fixPointers(ptrs, gonePtrs)\n // clean up our original inputs\n self.ptrs = ptrs\n self.document = document\n self.compute('index')\n // if we started zoomed-out, try to end zoomed-out\n if (isFull) {\n self.ptrs = undefined\n }\n if (!reg) {\n this.ptrs = []\n return self.none()\n }\n const res = self.toView(ptrs) //return new document\n return res\n },\n}\n\n// aliases\nmethods.delete = methods.remove\nexport default methods\n","const methods = {\n /** add this punctuation or whitespace before each match: */\n pre: function (str, concat) {\n if (str === undefined && this.found) {\n return this.docs[0][0].pre\n }\n this.docs.forEach(terms => {\n const term = terms[0]\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n },\n\n /** add this punctuation or whitespace after each match: */\n post: function (str, concat) {\n if (str === undefined) {\n const last = this.docs[this.docs.length - 1]\n return last[last.length - 1].post\n }\n this.docs.forEach(terms => {\n const term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n },\n\n /** remove whitespace from start/end */\n trim: function () {\n if (!this.found) {\n return this\n }\n const docs = this.docs\n const start = docs[0][0]\n start.pre = start.pre.trimStart()\n const last = docs[docs.length - 1]\n const end = last[last.length - 1]\n end.post = end.post.trimEnd()\n return this\n },\n\n /** connect words with hyphen, and remove whitespace */\n hyphenate: function () {\n this.docs.forEach(terms => {\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n },\n\n /** remove hyphens between words, and set whitespace */\n dehyphenate: function () {\n const hasHyphen = /[-–—]/\n this.docs.forEach(terms => {\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n },\n\n /** add quotations around these matches */\n toQuotations: function (start, end) {\n start = start || `\"`\n end = end || `\"`\n this.docs.forEach(terms => {\n terms[0].pre = start + terms[0].pre\n const last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n },\n\n /** add brackets around these matches */\n toParentheses: function (start, end) {\n start = start || `(`\n end = end || `)`\n this.docs.forEach(terms => {\n terms[0].pre = start + terms[0].pre\n const last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n },\n}\n\n// aliases\nmethods.deHyphenate = methods.dehyphenate\nmethods.toQuotation = methods.toQuotations\n\nexport default methods\n","/** alphabetical order */\nconst alpha = (a, b) => {\n if (a.normal < b.normal) {\n return -1\n }\n if (a.normal > b.normal) {\n return 1\n }\n return 0\n}\n\n/** count the # of characters of each match */\nconst length = (a, b) => {\n const left = a.normal.trim().length\n const right = b.normal.trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n}\n\n/** count the # of terms in each match */\nconst wordCount = (a, b) => {\n if (a.words < b.words) {\n return 1\n }\n if (a.words > b.words) {\n return -1\n }\n return 0\n}\n\n/** count the # of terms in each match */\nconst sequential = (a, b) => {\n if (a[0] < b[0]) {\n return 1\n }\n if (a[0] > b[0]) {\n return -1\n }\n return a[1] > b[1] ? 1 : -1\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function (arr) {\n const counts = {}\n arr.forEach(o => {\n counts[o.normal] = counts[o.normal] || 0\n counts[o.normal] += 1\n })\n // sort by freq\n arr.sort((a, b) => {\n const left = counts[a.normal]\n const right = counts[b.normal]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return arr\n}\n\nexport default { alpha, length, wordCount, sequential, byFreq }\n","import methods from './lib/_sort.js'\n// aliases\nconst seqNames = new Set(['index', 'sequence', 'seq', 'sequential', 'chron', 'chronological'])\nconst freqNames = new Set(['freq', 'frequency', 'topk', 'repeats'])\nconst alphaNames = new Set(['alpha', 'alphabetical'])\n\n// support function as parameter\nconst customSort = function (view, fn) {\n let ptrs = view.fullPointer\n ptrs = ptrs.sort((a, b) => {\n a = view.update([a])\n b = view.update([b])\n return fn(a, b)\n })\n view.ptrs = ptrs //mutate original\n return view\n}\n\n/** re-arrange the order of the matches (in place) */\nconst sort = function (input) {\n const { docs, pointer } = this\n this.uncache()\n if (typeof input === 'function') {\n return customSort(this, input)\n }\n input = input || 'alpha'\n const ptrs = pointer || docs.map((_d, n) => [n])\n let arr = docs.map((terms, n) => {\n return {\n index: n,\n words: terms.length,\n normal: terms.map(t => t.machine || t.normal || '').join(' '),\n pointer: ptrs[n],\n }\n })\n // 'chronological' sorting\n if (seqNames.has(input)) {\n input = 'sequential'\n }\n // alphabetical sorting\n if (alphaNames.has(input)) {\n input = 'alpha'\n }\n // sort by frequency\n if (freqNames.has(input)) {\n arr = methods.byFreq(arr)\n return this.update(arr.map(o => o.pointer))\n }\n // apply sort method on each phrase\n if (typeof methods[input] === 'function') {\n arr = arr.sort(methods[input])\n return this.update(arr.map(o => o.pointer))\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words or index */\nconst reverse = function () {\n let ptrs = this.pointer || this.docs.map((_d, n) => [n])\n ptrs = [].concat(ptrs)\n ptrs = ptrs.reverse()\n if (this._cache) {\n this._cache = this._cache.reverse()\n }\n return this.update(ptrs)\n}\n\n/** remove any duplicate matches */\nconst unique = function () {\n const already = new Set()\n const res = this.filter(m => {\n const txt = m.text('machine')\n if (already.has(txt)) {\n return false\n }\n already.add(txt)\n return true\n })\n // this.ptrs = res.ptrs //mutate original?\n return res//.compute('index')\n}\n\nexport default { unique, reverse, sort }\n","const isArray = (arr) => Object.prototype.toString.call(arr) === '[object Array]'\n\n// append a new document, somehow\nconst combineDocs = function (homeDocs, inputDocs) {\n if (homeDocs.length > 0) {\n // add a space\n const end = homeDocs[homeDocs.length - 1]\n const last = end[end.length - 1]\n if (/ /.test(last.post) === false) {\n last.post += ' '\n }\n }\n homeDocs = homeDocs.concat(inputDocs)\n return homeDocs\n}\n\nconst combineViews = function (home, input) {\n // is it a view from the same document?\n if (home.document === input.document) {\n const ptrs = home.fullPointer.concat(input.fullPointer)\n return home.toView(ptrs).compute('index')\n }\n // update n of new pointer, to end of our pointer\n const ptrs = input.fullPointer\n ptrs.forEach(a => {\n a[0] += home.document.length\n })\n home.document = combineDocs(home.document, input.docs)\n return home.all()\n}\n\nexport default {\n // add string as new match/sentence\n concat: function (input) {\n // parse and splice-in new terms\n if (typeof input === 'string') {\n const more = this.fromText(input)\n // easy concat\n if (!this.found || !this.ptrs) {\n this.document = this.document.concat(more.document)\n } else {\n // if we are in the middle, this is actually a splice operation\n const ptrs = this.fullPointer\n const at = ptrs[ptrs.length - 1][0]\n this.document.splice(at, 0, ...more.document)\n }\n // put the docs\n return this.all().compute('index')\n }\n // plop some view objects together\n if (typeof input === 'object' && input.isView) {\n return combineViews(this, input)\n }\n // assume it's an array of terms\n if (isArray(input)) {\n const docs = combineDocs(this.document, input)\n this.document = docs\n return this.all()\n }\n return this\n },\n}","// add indexes to pointers\nconst harden = function () {\n this.ptrs = this.fullPointer\n return this\n}\n// remove indexes from pointers\nconst soften = function () {\n let ptr = this.ptrs\n if (!ptr || ptr.length < 1) {\n return this\n }\n ptr = ptr.map(a => a.slice(0, 3))\n this.ptrs = ptr\n return this\n}\nexport default { harden, soften }","import caseFns from './case.js'\nimport insert from './insert.js'\nimport replace from './replace.js'\nimport remove from './remove.js'\nimport whitespace from './whitespace.js'\nimport sort from './sort.js'\nimport concat from './concat.js'\nimport harden from './harden.js'\n\nconst methods = Object.assign({}, caseFns, insert, replace, remove, whitespace, sort, concat, harden)\n\nconst addAPI = function (View) {\n Object.assign(View.prototype, methods)\n}\nexport default addAPI\n","import uuid from './uuid.js'\n\nconst compute = {\n id: function (view) {\n const docs = view.docs\n for (let n = 0; n < docs.length; n += 1) {\n for (let i = 0; i < docs[n].length; i += 1) {\n const term = docs[n][i]\n term.id = term.id || uuid(term)\n }\n }\n }\n}\n\nexport default compute","import api from './api/index.js'\nimport compute from './compute/index.js'\n\nexport default {\n api,\n compute,\n}\n","export default [\n // simple mappings\n { word: '@', out: ['at'] },\n { word: 'arent', out: ['are', 'not'] },\n { word: 'alot', out: ['a', 'lot'] },\n { word: 'brb', out: ['be', 'right', 'back'] },\n { word: 'cannot', out: ['can', 'not'] },\n { word: 'dun', out: ['do', 'not'] },\n { word: \"can't\", out: ['can', 'not'] },\n { word: \"shan't\", out: ['should', 'not'] },\n { word: \"won't\", out: ['will', 'not'] },\n { word: \"that's\", out: ['that', 'is'] },\n { word: \"what's\", out: ['what', 'is'] },\n { word: \"let's\", out: ['let', 'us'] },\n // { word: \"there's\", out: ['there', 'is'] },\n { word: 'dunno', out: ['do', 'not', 'know'] },\n { word: 'gonna', out: ['going', 'to'] },\n { word: 'gotta', out: ['have', 'got', 'to'] }, //hmm\n { word: 'gimme', out: ['give', 'me'] },\n { word: 'outta', out: ['out', 'of'] },\n { word: 'tryna', out: ['trying', 'to'] },\n { word: 'gtg', out: ['got', 'to', 'go'] },\n { word: 'im', out: ['i', 'am'] },\n { word: 'imma', out: ['I', 'will'] },\n { word: 'imo', out: ['in', 'my', 'opinion'] },\n { word: 'irl', out: ['in', 'real', 'life'] },\n { word: 'ive', out: ['i', 'have'] },\n { word: 'rn', out: ['right', 'now'] },\n { word: 'tbh', out: ['to', 'be', 'honest'] },\n { word: 'wanna', out: ['want', 'to'] },\n { word: `c'mere`, out: ['come', 'here'] },\n { word: `c'mon`, out: ['come', 'on'] },\n // shoulda, coulda\n { word: 'shoulda', out: ['should', 'have'] },\n { word: 'coulda', out: ['coulda', 'have'] },\n { word: 'woulda', out: ['woulda', 'have'] },\n { word: 'musta', out: ['must', 'have'] },\n\n { word: \"tis\", out: ['it', 'is'] },\n { word: \"twas\", out: ['it', 'was'] },\n { word: `y'know`, out: ['you', 'know'] },\n { word: \"ne'er\", out: ['never'] },\n { word: \"o'er\", out: ['over'] },\n // contraction-part mappings\n { after: 'll', out: ['will'] },\n { after: 've', out: ['have'] },\n { after: 're', out: ['are'] },\n { after: 'm', out: ['am'] },\n // french contractions\n { before: 'c', out: ['ce'] },\n { before: 'm', out: ['me'] },\n { before: 'n', out: ['ne'] },\n { before: 'qu', out: ['que'] },\n { before: 's', out: ['se'] },\n { before: 't', out: ['tu'] }, // t'aime\n\n // missing apostrophes\n { word: 'shouldnt', out: ['should', 'not'] },\n { word: 'couldnt', out: ['could', 'not'] },\n { word: 'wouldnt', out: ['would', 'not'] },\n { word: 'hasnt', out: ['has', 'not'] },\n { word: 'wasnt', out: ['was', 'not'] },\n { word: 'isnt', out: ['is', 'not'] },\n { word: 'cant', out: ['can', 'not'] },\n { word: 'dont', out: ['do', 'not'] },\n { word: 'wont', out: ['will', 'not'] },\n // apostrophe d\n { word: 'howd', out: ['how', 'did'] },\n { word: 'whatd', out: ['what', 'did'] },\n { word: 'whend', out: ['when', 'did'] },\n { word: 'whered', out: ['where', 'did'] },\n]\n","// number suffixes that are not units\nconst t = true\nexport default {\n 'st': t,\n 'nd': t,\n 'rd': t,\n 'th': t,\n 'am': t,\n 'pm': t,\n 'max': t,\n '°': t,\n 's': t, // 1990s\n 'e': t, // 18e - french/spanish ordinal\n 'er': t, //french 1er\n 'ère': t, //''\n 'ème': t, //french 2ème\n}","import contractions from './contractions.js'\nimport numberSuffixes from './number-suffix.js'\n\nexport default {\n one: {\n contractions,\n numberSuffixes\n }\n}\n","// put n new words where 1 word was\nconst insertContraction = function (document, point, words) {\n const [n, w] = point\n if (!words || words.length === 0) {\n return\n }\n words = words.map((word, i) => {\n word.implicit = word.text\n word.machine = word.text\n word.pre = ''\n word.post = ''\n word.text = ''\n word.normal = ''\n word.index = [n, w + i]\n return word\n })\n if (words[0]) {\n // move whitespace over\n words[0].pre = document[n][w].pre\n words[words.length - 1].post = document[n][w].post\n // add the text/normal to the first term\n words[0].text = document[n][w].text\n words[0].normal = document[n][w].normal // move tags too?\n }\n // do the splice\n document[n].splice(w, 1, ...words)\n}\nexport default insertContraction\n","const hasContraction = /'/\n//look for a past-tense verb\n// const hasPastTense = (terms, i) => {\n// let after = terms.slice(i + 1, i + 3)\n// return after.some(t => t.tags.has('PastTense'))\n// }\n// he'd walked -> had\n// how'd -> did\n// he'd go -> would\n\nconst alwaysDid = new Set([\n 'what',\n 'how',\n 'when',\n 'where',\n 'why',\n])\n\n// after-words\nconst useWould = new Set([\n 'be',\n 'go',\n 'start',\n 'think',\n 'need',\n])\n\nconst useHad = new Set([\n 'been',\n 'gone'\n])\n// they'd gone\n// they'd go\n\n\n// he'd been\n// he had been\n// he would been\n\nconst _apostropheD = function (terms, i) {\n const before = terms[i].normal.split(hasContraction)[0]\n\n // what'd, how'd\n if (alwaysDid.has(before)) {\n return [before, 'did']\n }\n if (terms[i + 1]) {\n // they'd gone\n if (useHad.has(terms[i + 1].normal)) {\n return [before, 'had']\n }\n // they'd go\n if (useWould.has(terms[i + 1].normal)) {\n return [before, 'would']\n }\n }\n return null\n // if (hasPastTense(terms, i) === true) {\n // return [before, 'had']\n // }\n // // had/would/did\n // return [before, 'would']\n}\nexport default _apostropheD\n","\n//ain't -> are/is not\nconst apostropheT = function (terms, i) {\n if (terms[i].normal === \"ain't\" || terms[i].normal === 'aint') {\n return null //do this in ./two/\n }\n const before = terms[i].normal.replace(/n't/, '')\n return [before, 'not']\n}\n\nexport default apostropheT\n","const hasContraction = /'/\nconst isFeminine = /(e|é|aison|sion|tion)$/\nconst isMasculine = /(age|isme|acle|ege|oire)$/\n// l'amour\nconst preL = (terms, i) => {\n // le/la\n const after = terms[i].normal.split(hasContraction)[1]\n // quick french gender disambig (rough)\n if (after && after.endsWith('e')) {\n return ['la', after]\n }\n return ['le', after]\n}\n\n// d'amerique\nconst preD = (terms, i) => {\n const after = terms[i].normal.split(hasContraction)[1]\n // quick guess for noun-agreement (rough)\n if (after && isFeminine.test(after) && !isMasculine.test(after)) {\n return ['du', after]\n } else if (after && after.endsWith('s')) {\n return ['des', after]\n }\n return ['de', after]\n}\n\n// j'aime\nconst preJ = (terms, i) => {\n const after = terms[i].normal.split(hasContraction)[1]\n return ['je', after]\n}\n\nexport default {\n preJ,\n preL,\n preD,\n}\n","const isRange = /^([0-9.]{1,4}[a-z]{0,2}) ?[-–—] ?([0-9]{1,4}[a-z]{0,2})$/i\nconst timeRange = /^([0-9]{1,2}(:[0-9][0-9])?(am|pm)?) ?[-–—] ?([0-9]{1,2}(:[0-9][0-9])?(am|pm)?)$/i\nconst phoneNum = /^[0-9]{3}-[0-9]{4}$/\n\nconst numberRange = function (terms, i) {\n const term = terms[i]\n let parts = term.text.match(isRange)\n if (parts !== null) {\n // 123-1234 is a phone number, not a number-range\n if (term.tags.has('PhoneNumber') === true || phoneNum.test(term.text)) {\n return null\n }\n return [parts[1], 'to', parts[2]]\n } else {\n parts = term.text.match(timeRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[4]]\n }\n }\n return null\n}\nexport default numberRange\n","const numUnit = /^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/ //(must be lowercase)\n\nconst numberUnit = function (terms, i, world) {\n const notUnit = world.model.one.numberSuffixes || {}\n const term = terms[i]\n const parts = term.text.match(numUnit)\n if (parts !== null) {\n // is it a recognized unit, like 'km'?\n const unit = parts[2].toLowerCase().trim()\n // don't split '3rd'\n if (notUnit.hasOwnProperty(unit)) {\n return null\n }\n return [parts[1], unit] //split it\n }\n return null\n}\nexport default numberUnit\n","import splice from './_splice.js'\nimport apostropheD from './apostrophe-d.js'\nimport apostropheT from './apostrophe-t.js'\nimport french from './french.js'\nimport numberRange from './number-range.js'\nimport numberUnit from './number-unit.js'\n\nconst byApostrophe = /'/\nconst numDash = /^[0-9][^-–—]*[-–—].*?[0-9]/\n\n// run tagger on our new implicit terms\nconst reTag = function (terms, view, start, len) {\n const tmp = view.update()\n tmp.document = [terms]\n // offer to re-tag neighbours, too\n let end = start + len\n if (start > 0) {\n start -= 1\n }\n if (terms[end]) {\n end += 1\n }\n tmp.ptrs = [[0, start, end]]\n}\n\nconst byEnd = {\n // ain't\n t: (terms, i) => apostropheT(terms, i),\n // how'd\n d: (terms, i) => apostropheD(terms, i),\n}\n\nconst byStart = {\n // j'aime\n j: (terms, i) => french.preJ(terms, i),\n // l'amour\n l: (terms, i) => french.preL(terms, i),\n // d'amerique\n d: (terms, i) => french.preD(terms, i),\n}\n\n// pull-apart known contractions from model\nconst knownOnes = function (list, term, before, after) {\n for (let i = 0; i < list.length; i += 1) {\n const o = list[i]\n // look for word-word match (cannot-> [can, not])\n if (o.word === term.normal) {\n return o.out\n }\n // look for after-match ('re -> [_, are])\n else if (after !== null && after === o.after) {\n return [before].concat(o.out)\n }\n // look for before-match (l' -> [le, _])\n else if (before !== null && before === o.before && after && after.length > 2) {\n return o.out.concat(after)\n // return [o.out, after] //typeof o.out === 'string' ? [o.out, after] : o.out(terms, i)\n }\n }\n return null\n}\n\nconst toDocs = function (words, view) {\n const doc = view.fromText(words.join(' '))\n doc.compute(['id', 'alias'])\n return doc.docs[0]\n}\n\n// there's is usually [there, is]\n// but can be 'there has' for 'there has (..) been'\nconst thereHas = function (terms, i) {\n for (let k = i + 1; k < 5; k += 1) {\n if (!terms[k]) {\n break\n }\n if (terms[k].normal === 'been') {\n return ['there', 'has']\n }\n }\n return ['there', 'is']\n}\n\n//really easy ones\nconst contractions = view => {\n const { world, document } = view\n const { model, methods } = world\n const list = model.one.contractions || []\n // let units = new Set(model.one.units || [])\n // each sentence\n document.forEach((terms, n) => {\n // loop through terms backwards\n for (let i = terms.length - 1; i >= 0; i -= 1) {\n let before = null\n let after = null\n if (byApostrophe.test(terms[i].normal) === true) {\n const res = terms[i].normal.split(byApostrophe)\n before = res[0]\n after = res[1]\n }\n // any known-ones, like 'dunno'?\n let words = knownOnes(list, terms[i], before, after)\n // ['foo', 's']\n if (!words && byEnd.hasOwnProperty(after)) {\n words = byEnd[after](terms, i, world)\n }\n // ['j', 'aime']\n if (!words && byStart.hasOwnProperty(before)) {\n words = byStart[before](terms, i)\n }\n // 'there is' vs 'there has'\n if (before === 'there' && after === 's') {\n words = thereHas(terms, i)\n }\n // actually insert the new terms\n if (words) {\n words = toDocs(words, view)\n splice(document, [n, i], words)\n reTag(document[n], view, i, words.length)\n continue\n }\n // '44-2' has special care\n if (numDash.test(terms[i].normal)) {\n words = numberRange(terms, i)\n if (words) {\n words = toDocs(words, view)\n splice(document, [n, i], words)\n methods.one.setTag(words, 'NumberRange', world) //add custom tag\n // is it a time-range, like '5-9pm'\n if (words[2] && words[2].tags.has('Time')) {\n methods.one.setTag([words[0]], 'Time', world, null, 'time-range')\n }\n reTag(document[n], view, i, words.length)\n }\n continue\n }\n // split-apart '4km'\n words = numberUnit(terms, i, world)\n if (words) {\n words = toDocs(words, view)\n splice(document, [n, i], words)\n methods.one.setTag([words[1]], 'Unit', world, null, 'contraction-unit')\n }\n }\n })\n}\nexport default contractions\n","import contractions from './contractions/index.js'\n\nexport default { contractions }\n","import model from './model/index.js'\nimport compute from './compute/index.js'\n\nconst plugin = {\n model: model,\n compute: compute,\n hooks: ['contractions'],\n}\nexport default plugin\n","const freeze = function (view) {\n const world = view.world\n const { model, methods } = view.world\n const setTag = methods.one.setTag\n const { frozenLex } = model.one\n const multi = model.one._multiCache || {}\n\n view.docs.forEach(terms => {\n for (let i = 0; i < terms.length; i += 1) {\n // basic lexicon lookup\n const t = terms[i]\n const word = t.machine || t.normal\n\n // test a multi-word\n if (multi[word] !== undefined && terms[i + 1]) {\n const end = i + multi[word] - 1\n for (let k = end; k > i; k -= 1) {\n const words = terms.slice(i, k + 1)\n const str = words.map(term => term.machine || term.normal).join(' ')\n // lookup frozen lexicon\n if (frozenLex.hasOwnProperty(str) === true) {\n setTag(words, frozenLex[str], world, false, '1-frozen-multi-lexicon')\n words.forEach(term => (term.frozen = true))\n continue\n }\n }\n }\n // test single word\n if (frozenLex[word] !== undefined && frozenLex.hasOwnProperty(word)) {\n setTag([t], frozenLex[word], world, false, '1-freeze-lexicon')\n t.frozen = true\n continue\n }\n }\n })\n}\n\nconst unfreeze = function (view) {\n view.docs.forEach(ts => {\n ts.forEach(term => {\n delete term.frozen\n })\n })\n return view\n}\nexport default { frozen: freeze, freeze, unfreeze }\n","/* eslint-disable no-console */\nconst blue = str => '\\x1b[34m' + str + '\\x1b[0m'\nconst dim = str => '\\x1b[3m\\x1b[2m' + str + '\\x1b[0m'\n\nconst debug = function (view) {\n view.docs.forEach(terms => {\n console.log(blue('\\n ┌─────────'))\n terms.forEach(t => {\n let str = ` ${dim('│')} `\n const txt = t.implicit || t.text || '-'\n if (t.frozen === true) {\n str += `${blue(txt)} ❄️`\n } else {\n str += dim(txt)\n }\n console.log(str)\n })\n })\n}\nexport default debug\n","import compute from './compute.js'\nimport debug from './debug.js'\n\nexport default {\n // add .compute('freeze')\n compute,\n\n mutate: world => {\n const methods = world.methods.one\n // add @isFrozen method\n methods.termMethods.isFrozen = term => term.frozen === true\n // adds `.debug('frozen')`\n methods.debug.freeze = debug\n methods.debug.frozen = debug\n },\n\n api: function (View) {\n // set all terms to reject any desctructive tags\n View.prototype.freeze = function () {\n this.docs.forEach(ts => {\n ts.forEach(term => {\n term.frozen = true\n })\n })\n return this\n }\n // reset all terms to allow any desctructive tags\n View.prototype.unfreeze = function () {\n this.compute('unfreeze')\n }\n // return all frozen terms\n View.prototype.isFrozen = function () {\n return this.match('@isFrozen+')\n }\n },\n // run it in init\n hooks: ['freeze'],\n}\n","// scan-ahead to match multiple-word terms - 'jack rabbit'\nconst multiWord = function (terms, start_i, world) {\n const { model, methods } = world\n const setTag = methods.one.setTag\n const multi = model.one._multiCache || {}\n const { lexicon } = model.one || {}\n const t = terms[start_i]\n const word = t.machine || t.normal\n\n // found a word to scan-ahead on\n if (multi[word] !== undefined && terms[start_i + 1]) {\n const end = start_i + multi[word] - 1\n for (let i = end; i > start_i; i -= 1) {\n const words = terms.slice(start_i, i + 1)\n if (words.length <= 1) {\n return false\n }\n const str = words.map(term => term.machine || term.normal).join(' ')\n // lookup regular lexicon\n if (lexicon.hasOwnProperty(str) === true) {\n const tag = lexicon[str]\n setTag(words, tag, world, false, '1-multi-lexicon')\n // special case for phrasal-verbs - 2nd word is a #Particle\n if (tag && tag.length === 2 && (tag[0] === 'PhrasalVerb' || tag[1] === 'PhrasalVerb')) {\n setTag([words[1]], 'Particle', world, false, '1-phrasal-particle')\n }\n return true\n }\n }\n return false\n }\n return null\n}\nexport default multiWord\n","const prefix = /^(under|over|mis|re|un|dis|semi|pre|post)-?/\n// anti|non|extra|inter|intra|over\nconst allowPrefix = new Set(['Verb', 'Infinitive', 'PastTense', 'Gerund', 'PresentTense', 'Adjective', 'Participle'])\n\n// tag any words in our lexicon\nconst checkLexicon = function (terms, i, world) {\n const { model, methods } = world\n // const fastTag = methods.one.fastTag\n const setTag = methods.one.setTag\n const { lexicon } = model.one\n\n // basic lexicon lookup\n const t = terms[i]\n const word = t.machine || t.normal\n // normal lexicon lookup\n if (lexicon[word] !== undefined && lexicon.hasOwnProperty(word)) {\n setTag([t], lexicon[word], world, false, '1-lexicon')\n return true\n }\n // lookup aliases in the lexicon\n if (t.alias) {\n const found = t.alias.find(str => lexicon.hasOwnProperty(str))\n if (found) {\n setTag([t], lexicon[found], world, false, '1-lexicon-alias')\n return true\n }\n }\n // prefixing for verbs/adjectives\n if (prefix.test(word) === true) {\n const stem = word.replace(prefix, '')\n if (lexicon.hasOwnProperty(stem) && stem.length > 3) {\n // only allow prefixes for verbs/adjectives\n if (allowPrefix.has(lexicon[stem])) {\n // console.log('->', word, stem, lexicon[stem])\n setTag([t], lexicon[stem], world, false, '1-lexicon-prefix')\n return true\n }\n }\n }\n return null\n}\nexport default checkLexicon\n","import multiWord from './multi-word.js'\nimport singleWord from './single-word.js'\n\n// tag any words in our lexicon - even if it hasn't been filled-up yet\n// rest of pre-tagger is in ./two/preTagger\nconst lexicon = function (view) {\n const world = view.world\n // loop through our terms\n view.docs.forEach(terms => {\n for (let i = 0; i < terms.length; i += 1) {\n if (terms[i].tags.size === 0) {\n let found = null\n found = found || multiWord(terms, i, world)\n // lookup known words\n found = found || singleWord(terms, i, world)\n }\n }\n })\n}\n\nexport default {\n lexicon,\n}\n","// derive clever things from our lexicon key-value pairs\nconst expand = function (words) {\n // const { methods, model } = world\n const lex = {}\n // console.log('start:', Object.keys(lex).length)\n const _multi = {}\n // go through each word in this key-value obj:\n Object.keys(words).forEach(word => {\n const tag = words[word]\n // normalize lexicon a little bit\n word = word.toLowerCase().trim()\n word = word.replace(/'s\\b/, '')\n // cache multi-word terms\n const split = word.split(/ /)\n if (split.length > 1) {\n // prefer longer ones\n if (_multi[split[0]] === undefined || split.length > _multi[split[0]]) {\n _multi[split[0]] = split.length\n }\n }\n lex[word] = lex[word] || tag\n })\n // cleanup\n delete lex['']\n delete lex[null]\n delete lex[' ']\n return { lex, _multi }\n}\nexport default expand\n","import expandLexicon from './expand.js'\n\nexport default {\n one: {\n expandLexicon,\n }\n}","/** insert new words/phrases into the lexicon */\nconst addWords = function (words, isFrozen = false) {\n const world = this.world()\n const { methods, model } = world\n if (!words) {\n return\n }\n // normalize tag vals\n Object.keys(words).forEach(k => {\n if (typeof words[k] === 'string' && words[k].startsWith('#')) {\n words[k] = words[k].replace(/^#/, '')\n }\n })\n // these words go into a seperate lexicon\n if (isFrozen === true) {\n const { lex, _multi } = methods.one.expandLexicon(words, world)\n Object.assign(model.one._multiCache, _multi)\n Object.assign(model.one.frozenLex, lex)\n return\n }\n // add some words to our lexicon\n if (methods.two.expandLexicon) {\n // do fancy ./two version\n const { lex, _multi } = methods.two.expandLexicon(words, world)\n Object.assign(model.one.lexicon, lex)\n Object.assign(model.one._multiCache, _multi)\n }\n // do basic ./one version\n const { lex, _multi } = methods.one.expandLexicon(words, world)\n Object.assign(model.one.lexicon, lex)\n Object.assign(model.one._multiCache, _multi)\n}\n\nexport default { addWords }\n","import compute from './compute/index.js'\nimport methods from './methods/index.js'\nimport lib from './lib.js'\n\nconst model = {\n one: {\n lexicon: {}, //setup blank lexicon\n _multiCache: {},\n frozenLex: {}, //2nd lexicon\n },\n}\n\nexport default {\n model,\n methods,\n compute,\n lib,\n hooks: ['lexicon'],\n}\n","// edited by Spencer Kelly\n// credit to https://github.com/BrunoRB/ahocorasick by Bruno Roberto Búrigo.\n\nconst tokenize = function (phrase, world) {\n const { methods, model } = world\n const terms = methods.one.tokenize.splitTerms(phrase, model).map(t => methods.one.tokenize.splitWhitespace(t, model))\n return terms.map(term => term.text.toLowerCase())\n}\n\n// turn an array or object into a compressed aho-corasick structure\nconst buildTrie = function (phrases, world) {\n\n // const tokenize=methods.one.\n const goNext = [{}]\n const endAs = [null]\n const failTo = [0]\n\n const xs = []\n let n = 0\n phrases.forEach(function (phrase) {\n let curr = 0\n // let wordsB = phrase.split(/ /g).filter(w => w)\n const words = tokenize(phrase, world)\n for (let i = 0; i < words.length; i++) {\n const word = words[i]\n if (goNext[curr] && goNext[curr].hasOwnProperty(word)) {\n curr = goNext[curr][word]\n } else {\n n++\n goNext[curr][word] = n\n goNext[n] = {}\n curr = n\n endAs[n] = null\n }\n }\n endAs[curr] = [words.length]\n })\n // f(s) = 0 for all states of depth 1 (the ones from which the 0 state can transition to)\n for (const word in goNext[0]) {\n n = goNext[0][word]\n failTo[n] = 0\n xs.push(n)\n }\n\n while (xs.length) {\n const r = xs.shift()\n // for each symbol a such that g(r, a) = s\n const keys = Object.keys(goNext[r])\n for (let i = 0; i < keys.length; i += 1) {\n const word = keys[i]\n const s = goNext[r][word]\n xs.push(s)\n // set state = f(r)\n n = failTo[r]\n while (n > 0 && !goNext[n].hasOwnProperty(word)) {\n n = failTo[n]\n }\n if (goNext.hasOwnProperty(n)) {\n const fs = goNext[n][word]\n failTo[s] = fs\n if (endAs[fs]) {\n endAs[s] = endAs[s] || []\n endAs[s] = endAs[s].concat(endAs[fs])\n }\n } else {\n failTo[s] = 0\n }\n }\n }\n return { goNext, endAs, failTo }\n}\nexport default buildTrie\n\n// console.log(buildTrie(['smart and cool', 'smart and nice']))\n","// follow our trie structure\nconst scanWords = function (terms, trie, opts) {\n let n = 0\n const results = []\n for (let i = 0; i < terms.length; i++) {\n const word = terms[i][opts.form] || terms[i].normal\n // main match-logic loop:\n while (n > 0 && (trie.goNext[n] === undefined || !trie.goNext[n].hasOwnProperty(word))) {\n n = trie.failTo[n] || 0 // (usually back to 0)\n }\n // did we fail?\n if (!trie.goNext[n].hasOwnProperty(word)) {\n continue\n }\n n = trie.goNext[n][word]\n if (trie.endAs[n]) {\n const arr = trie.endAs[n]\n for (let o = 0; o < arr.length; o++) {\n const len = arr[o]\n const term = terms[i - len + 1]\n const [no, start] = term.index\n results.push([no, start, start + len, term.id])\n }\n }\n }\n return results\n}\n\nconst cacheMiss = function (words, cache) {\n for (let i = 0; i < words.length; i += 1) {\n if (cache.has(words[i]) === true) {\n return false\n }\n }\n return true\n}\n\nconst scan = function (view, trie, opts) {\n let results = []\n opts.form = opts.form || 'normal'\n const docs = view.docs\n if (!trie.goNext || !trie.goNext[0]) {\n console.error('Compromise invalid lookup trie')//eslint-disable-line\n return view.none()\n }\n const firstWords = Object.keys(trie.goNext[0])\n // do each phrase\n for (let i = 0; i < docs.length; i++) {\n // can we skip the phrase, all together?\n if (view._cache && view._cache[i] && cacheMiss(firstWords, view._cache[i]) === true) {\n continue\n }\n const terms = docs[i]\n const found = scanWords(terms, trie, opts)\n if (found.length > 0) {\n results = results.concat(found)\n }\n }\n return view.update(results)\n}\nexport default scan\n","import build from './buildTrie/index.js'\nimport scan from './scan.js'\n\nconst isObject = val => {\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\nexport default function (View) {\n\n /** find all matches in this document */\n View.prototype.lookup = function (input, opts = {}) {\n if (!input) {\n return this.none()\n }\n if (typeof input === 'string') {\n input = [input]\n }\n const trie = isObject(input) ? input : build(input, this.world)\n let res = scan(this, trie, opts)\n res = res.settle()\n return res\n }\n}","// chop-off tail of redundant vals at end of array\nconst truncate = (list, val) => {\n for (let i = list.length - 1; i >= 0; i -= 1) {\n if (list[i] !== val) {\n list = list.slice(0, i + 1)\n return list\n }\n }\n return list\n}\n\n// prune trie a bit\nconst compress = function (trie) {\n trie.goNext = trie.goNext.map(o => {\n if (Object.keys(o).length === 0) {\n return undefined\n }\n return o\n })\n // chop-off tail of undefined vals in goNext array\n trie.goNext = truncate(trie.goNext, undefined)\n // chop-off tail of zeros in failTo array\n trie.failTo = truncate(trie.failTo, 0)\n // chop-off tail of nulls in endAs array\n trie.endAs = truncate(trie.endAs, null)\n return trie\n}\nexport default compress","import api from './api/index.js'\nimport compress from './api/buildTrie/compress.js'\nimport build from './api/buildTrie/index.js'\n\n/** pre-compile a list of matches to lookup */\nconst lib = {\n /** turn an array or object into a compressed trie*/\n buildTrie: function (input) {\n const trie = build(input, this.world())\n return compress(trie)\n }\n}\n// add alias\nlib.compile = lib.buildTrie\n\nexport default {\n api,\n lib\n}\n","export const relPointer = function (ptrs, parent) {\n if (!parent) {\n return ptrs\n }\n ptrs.forEach(ptr => {\n const n = ptr[0]\n if (parent[n]) {\n ptr[0] = parent[n][0] //n\n ptr[1] += parent[n][1] //start\n ptr[2] += parent[n][1] //end\n }\n })\n return ptrs\n}\n\n// make match-result relative to whole document\nexport const fixPointers = function (res, parent) {\n let { ptrs } = res\n const { byGroup } = res\n ptrs = relPointer(ptrs, parent)\n Object.keys(byGroup).forEach(k => {\n byGroup[k] = relPointer(byGroup[k], parent)\n })\n return { ptrs, byGroup }\n}\n\n// turn any matchable input intp a list of matches\nexport const parseRegs = function (regs, opts, world) {\n const one = world.methods.one\n if (typeof regs === 'number') {\n regs = String(regs)\n }\n // support param as string\n if (typeof regs === 'string') {\n regs = one.killUnicode(regs, world)\n regs = one.parseMatch(regs, opts, world)\n }\n return regs\n}\n\nconst isObject = val => {\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\n// did they pass-in a compromise object?\nexport const isView = val => val && isObject(val) && val.isView === true\n\nexport const isNet = val => val && isObject(val) && val.isNet === true\n","import { fixPointers, isView, isNet, parseRegs } from './_lib.js'\n\nconst match = function (regs, group, opts) {\n const one = this.methods.one\n // support param as view object\n if (isView(regs)) {\n return this.intersection(regs)\n }\n // support a compiled set of matches\n if (isNet(regs)) {\n return this.sweep(regs, { tagger: false }).view.settle()\n }\n regs = parseRegs(regs, opts, this.world)\n const todo = { regs, group }\n const res = one.match(this.docs, todo, this._cache)\n const { ptrs, byGroup } = fixPointers(res, this.fullPointer)\n const view = this.toView(ptrs)\n view._groups = byGroup\n return view\n}\n\nconst matchOne = function (regs, group, opts) {\n const one = this.methods.one\n // support at view as a param\n if (isView(regs)) {\n return this.intersection(regs).eq(0)\n }\n // support a compiled set of matches\n if (isNet(regs)) {\n return this.sweep(regs, { tagger: false, matchOne: true }).view\n }\n regs = parseRegs(regs, opts, this.world)\n const todo = { regs, group, justOne: true }\n const res = one.match(this.docs, todo, this._cache)\n const { ptrs, byGroup } = fixPointers(res, this.fullPointer)\n const view = this.toView(ptrs)\n view._groups = byGroup\n return view\n}\n\nconst has = function (regs, group, opts) {\n const one = this.methods.one\n // support view as input\n if (isView(regs)) {\n const ptrs = this.intersection(regs).fullPointer\n return ptrs.length > 0\n }\n // support a compiled set of matches\n if (isNet(regs)) {\n return this.sweep(regs, { tagger: false }).view.found\n }\n regs = parseRegs(regs, opts, this.world)\n const todo = { regs, group, justOne: true }\n const ptrs = one.match(this.docs, todo, this._cache).ptrs\n return ptrs.length > 0\n}\n\n// 'if'\nconst ifFn = function (regs, group, opts) {\n const one = this.methods.one\n // support view as input\n if (isView(regs)) {\n return this.filter(m => m.intersection(regs).found)\n }\n // support a compiled set of matches\n if (isNet(regs)) {\n const m = this.sweep(regs, { tagger: false }).view.settle()\n return this.if(m) //recurse with result\n }\n regs = parseRegs(regs, opts, this.world)\n const todo = { regs, group, justOne: true }\n let ptrs = this.fullPointer\n const cache = this._cache || []\n ptrs = ptrs.filter((ptr, i) => {\n const m = this.update([ptr])\n const res = one.match(m.docs, todo, cache[i]).ptrs\n return res.length > 0\n })\n const view = this.update(ptrs)\n // try and reconstruct the cache\n if (this._cache) {\n view._cache = ptrs.map(ptr => cache[ptr[0]])\n }\n return view\n}\n\nconst ifNo = function (regs, group, opts) {\n const { methods } = this\n const one = methods.one\n // support a view object as input\n if (isView(regs)) {\n return this.filter(m => !m.intersection(regs).found)\n }\n // support a compiled set of matches\n if (isNet(regs)) {\n const m = this.sweep(regs, { tagger: false }).view.settle()\n return this.ifNo(m)\n }\n // otherwise parse the match string\n regs = parseRegs(regs, opts, this.world)\n const cache = this._cache || []\n const view = this.filter((m, i) => {\n const todo = { regs, group, justOne: true }\n const ptrs = one.match(m.docs, todo, cache[i]).ptrs\n return ptrs.length === 0\n })\n // try to reconstruct the cache\n if (this._cache) {\n view._cache = view.ptrs.map(ptr => cache[ptr[0]])\n }\n return view\n}\n\nexport default { matchOne, match, has, if: ifFn, ifNo }\n","const before = function (regs, group, opts) {\n const { indexN } = this.methods.one.pointer\n const pre = []\n const byN = indexN(this.fullPointer)\n Object.keys(byN).forEach(k => {\n // check only the earliest match in the sentence\n const first = byN[k].sort((a, b) => (a[1] > b[1] ? 1 : -1))[0]\n if (first[1] > 0) {\n pre.push([first[0], 0, first[1]])\n }\n })\n const preWords = this.toView(pre)\n if (!regs) {\n return preWords\n }\n return preWords.match(regs, group, opts)\n}\n\nconst after = function (regs, group, opts) {\n const { indexN } = this.methods.one.pointer\n const post = []\n const byN = indexN(this.fullPointer)\n const document = this.document\n Object.keys(byN).forEach(k => {\n // check only the latest match in the sentence\n const last = byN[k].sort((a, b) => (a[1] > b[1] ? -1 : 1))[0]\n const [n, , end] = last\n if (end < document[n].length) {\n post.push([n, end, document[n].length])\n }\n })\n const postWords = this.toView(post)\n if (!regs) {\n return postWords\n }\n return postWords.match(regs, group, opts)\n}\n\nconst growLeft = function (regs, group, opts) {\n if (typeof regs === 'string') {\n regs = this.world.methods.one.parseMatch(regs, opts, this.world)\n }\n regs[regs.length - 1].end = true // ensure matches are beside us ←\n const ptrs = this.fullPointer\n this.forEach((m, n) => {\n const more = m.before(regs, group)\n if (more.found) {\n const terms = more.terms()\n ptrs[n][1] -= terms.length\n ptrs[n][3] = terms.docs[0][0].id\n }\n })\n return this.update(ptrs)\n}\n\nconst growRight = function (regs, group, opts) {\n if (typeof regs === 'string') {\n regs = this.world.methods.one.parseMatch(regs, opts, this.world)\n }\n regs[0].start = true // ensure matches are beside us →\n const ptrs = this.fullPointer\n this.forEach((m, n) => {\n const more = m.after(regs, group)\n if (more.found) {\n const terms = more.terms()\n ptrs[n][2] += terms.length\n ptrs[n][4] = null //remove end-id\n }\n })\n return this.update(ptrs)\n}\n\nconst grow = function (regs, group, opts) {\n return this.growRight(regs, group, opts).growLeft(regs, group, opts)\n}\n\nexport default { before, after, growLeft, growRight, grow }\n","const combine = function (left, right) {\n return [left[0], left[1], right[2]]\n}\n\nconst isArray = function (arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nconst getDoc = (reg, view, group) => {\n if (typeof reg === 'string' || isArray(reg)) {\n return view.match(reg, group)\n }\n if (!reg) {\n return view.none()\n }\n return reg\n}\n\nconst addIds = function (ptr, view) {\n const [n, start, end] = ptr\n if (view.document[n] && view.document[n][start]) {\n ptr[3] = ptr[3] || view.document[n][start].id\n if (view.document[n][end - 1]) {\n ptr[4] = ptr[4] || view.document[n][end - 1].id\n }\n }\n return ptr\n}\n\nconst methods = {}\n// [before], [match], [after]\nmethods.splitOn = function (m, group) {\n const { splitAll } = this.methods.one.pointer\n const splits = getDoc(m, this, group).fullPointer\n const all = splitAll(this.fullPointer, splits)\n let res = []\n all.forEach(o => {\n res.push(o.passthrough)\n res.push(o.before)\n res.push(o.match)\n res.push(o.after)\n })\n res = res.filter(p => p)\n res = res.map(p => addIds(p, this))\n return this.update(res)\n}\n\n// [before], [match after]\nmethods.splitBefore = function (m, group) {\n const { splitAll } = this.methods.one.pointer\n const splits = getDoc(m, this, group).fullPointer\n const all = splitAll(this.fullPointer, splits)\n // repair matches to favor [match, after]\n // - instead of [before, match]\n for (let i = 0; i < all.length; i += 1) {\n // move a before to a preceding after\n if (!all[i].after && all[i + 1] && all[i + 1].before) {\n // ensure it's from the same original sentence\n if (all[i].match && all[i].match[0] === all[i + 1].before[0]) {\n all[i].after = all[i + 1].before\n delete all[i + 1].before\n }\n }\n }\n\n let res = []\n all.forEach(o => {\n res.push(o.passthrough)\n res.push(o.before)\n // a, [x, b]\n if (o.match && o.after) {\n res.push(combine(o.match, o.after))\n } else {\n // a, [x], b\n res.push(o.match)\n }\n })\n res = res.filter(p => p)\n res = res.map(p => addIds(p, this))\n return this.update(res)\n}\n\n// [before match], [after]\nmethods.splitAfter = function (m, group) {\n const { splitAll } = this.methods.one.pointer\n const splits = getDoc(m, this, group).fullPointer\n const all = splitAll(this.fullPointer, splits)\n let res = []\n all.forEach(o => {\n res.push(o.passthrough)\n if (o.before && o.match) {\n res.push(combine(o.before, o.match))\n } else {\n res.push(o.before)\n res.push(o.match)\n }\n res.push(o.after)\n })\n res = res.filter(p => p)\n res = res.map(p => addIds(p, this))\n return this.update(res)\n}\nmethods.split = methods.splitAfter\n\nexport default methods\n","// check if two pointers are perfectly consecutive\nconst isNeighbour = function (ptrL, ptrR) {\n // validate\n if (!ptrL || !ptrR) {\n return false\n }\n // same sentence\n if (ptrL[0] !== ptrR[0]) {\n return false\n }\n // ensure R starts where L ends\n return ptrL[2] === ptrR[1]\n}\n\n// join two neighbouring words, if they both match\nconst mergeIf = function (doc, lMatch, rMatch) {\n const world = doc.world\n const parseMatch = world.methods.one.parseMatch\n lMatch = lMatch || '.$' //defaults\n rMatch = rMatch || '^.'\n const leftMatch = parseMatch(lMatch, {}, world)\n const rightMatch = parseMatch(rMatch, {}, world)\n // ensure end-requirement to left-match, start-requiremnts to right match\n leftMatch[leftMatch.length - 1].end = true\n rightMatch[0].start = true\n // let's get going.\n const ptrs = doc.fullPointer\n const res = [ptrs[0]]\n for (let i = 1; i < ptrs.length; i += 1) {\n const ptrL = res[res.length - 1]\n const ptrR = ptrs[i]\n const left = doc.update([ptrL])\n const right = doc.update([ptrR])\n // should we marge left+right?\n if (isNeighbour(ptrL, ptrR) && left.has(leftMatch) && right.has(rightMatch)) {\n // merge right ptr into existing result\n res[res.length - 1] = [ptrL[0], ptrL[1], ptrR[2], ptrL[3], ptrR[4]]\n } else {\n res.push(ptrR)\n }\n }\n // return new pointers\n return doc.update(res)\n}\n\nconst methods = {\n // merge only if conditions are met\n joinIf: function (lMatch, rMatch) {\n return mergeIf(this, lMatch, rMatch)\n },\n // merge all neighbouring matches\n join: function () {\n return mergeIf(this)\n },\n}\nexport default methods\n","import match from './match.js'\nimport lookaround from './lookaround.js'\nimport split from './split.js'\nimport join from './join.js'\n\nconst methods = Object.assign({}, match, lookaround, split, join)\n// aliases\nmethods.lookBehind = methods.before\nmethods.lookBefore = methods.before\n\nmethods.lookAhead = methods.after\nmethods.lookAfter = methods.after\n\nmethods.notIf = methods.ifNo\nconst matchAPI = function (View) {\n Object.assign(View.prototype, methods)\n}\nexport default matchAPI\n","// match 'foo /yes/' and not 'foo/no/bar'\nconst bySlashes = /(?:^|\\s)([![^]*(?:<[^<]*>)?\\/.*?[^\\\\/]\\/[?\\]+*$~]*)(?:\\s|$)/\n// match '(yes) but not foo(no)bar'\nconst byParentheses = /([!~[^]*(?:<[^<]*>)?\\([^)]+[^\\\\)]\\)[?\\]+*$~]*)(?:\\s|$)/\n// okay\nconst byWord = / /g\n\nconst isBlock = str => {\n return /^[![^]*(<[^<]*>)?\\(/.test(str) && /\\)[?\\]+*$~]*$/.test(str)\n}\nconst isReg = str => {\n return /^[![^]*(<[^<]*>)?\\//.test(str) && /\\/[?\\]+*$~]*$/.test(str)\n}\n\nconst cleanUp = function (arr) {\n arr = arr.map(str => str.trim())\n arr = arr.filter(str => str)\n return arr\n}\n\nconst parseBlocks = function (txt) {\n // parse by /regex/ first\n const arr = txt.split(bySlashes)\n let res = []\n // parse by (blocks), next\n arr.forEach(str => {\n if (isReg(str)) {\n res.push(str)\n return\n }\n res = res.concat(str.split(byParentheses))\n })\n res = cleanUp(res)\n // split by spaces, now\n let final = []\n res.forEach(str => {\n if (isBlock(str)) {\n final.push(str)\n } else if (isReg(str)) {\n final.push(str)\n } else {\n final = final.concat(str.split(byWord))\n }\n })\n final = cleanUp(final)\n return final\n}\nexport default parseBlocks\n","const hasMinMax = /\\{([0-9]+)?(, *[0-9]*)?\\}/\nconst andSign = /&&/\n// const hasDash = /\\p{Letter}[-–—]\\p{Letter}/u\nconst captureName = new RegExp(/^<\\s*(\\S+)\\s*>/)\n/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n named:'',\n choices:[],\n}\n*/\nconst titleCase = str => str.charAt(0).toUpperCase() + str.substring(1)\nconst end = (str) => str.charAt(str.length - 1)\nconst start = (str) => str.charAt(0)\nconst stripStart = (str) => str.substring(1)\nconst stripEnd = (str) => str.substring(0, str.length - 1)\n\nconst stripBoth = function (str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n//\nconst parseToken = function (w, opts) {\n const obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //end-flag\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flag\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.group = null\n if (start(w) === '[') {\n obj.groupStart = true\n }\n if (end(w) === ']') {\n obj.groupEnd = true\n }\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n // Use capture group name\n if (start(w) === '<') {\n const res = captureName.exec(w)\n if (res.length >= 2) {\n obj.group = res[1]\n w = w.replace(res[0], '')\n }\n }\n }\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n // obj.optional = true\n w = stripStart(w)\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~' && w.length > 2) {\n w = stripBoth(w)\n obj.fuzzy = true\n obj.min = opts.fuzzy || 0.85\n if (/\\(/.test(w) === false) {\n obj.word = w\n return obj\n }\n }\n\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n if (opts.caseSensitive) {\n obj.use = 'text'\n }\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n\n // support foo{1,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (_a, b, c) => {\n if (c === undefined) {\n // '{3}'\tExactly three times\n obj.min = Number(b)\n obj.max = Number(b)\n } else {\n c = c.replace(/, */, '')\n if (b === undefined) {\n // '{,9}' implied zero min\n obj.min = 0\n obj.max = Number(c)\n } else {\n // '{2,4}' Two to four times\n obj.min = Number(b)\n // '{3,}' Three or more times\n obj.max = Number(c || 999)\n }\n }\n // use same method as '+'\n obj.greedy = true\n // 0 as min means the same as '?'\n if (!obj.min) {\n obj.optional = true\n }\n return ''\n })\n }\n\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n const last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(str => {\n return str.split(/ /g).map(s => parseToken(s, opts))\n })\n w = ''\n }\n\n //root/sense overloaded\n if (start(w) === '{' && end(w) === '}') {\n w = stripBoth(w)\n // obj.sense = w\n obj.root = w\n if (/\\//.test(w)) {\n const split = obj.root.split(/\\//)\n obj.root = split[0]\n obj.pos = split[1]\n if (obj.pos === 'adj') {\n obj.pos = 'Adjective'\n }\n // titlecase\n obj.pos = obj.pos.charAt(0).toUpperCase() + obj.pos.substr(1).toLowerCase()\n // add sense-number too\n if (split[2] !== undefined) {\n obj.sense = split[2]\n }\n }\n return obj\n }\n //chunks\n if (start(w) === '<' && end(w) === '>') {\n w = stripBoth(w)\n obj.chunk = titleCase(w)\n obj.greedy = true\n return obj\n }\n if (start(w) === '%' && end(w) === '%') {\n w = stripBoth(w)\n obj.switch = w\n return obj\n }\n }\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n if (opts.caseSensitive) {\n obj.use = 'text'\n } else {\n w = w.toLowerCase()\n }\n obj.word = w\n }\n return obj\n}\nexport default parseToken\n","const hasDash = /[a-z0-9][-–—][a-z]/i\n\n// match 're-do' -> ['re','do']\nconst splitHyphens = function (regs, world) {\n const prefixes = world.model.one.prefixes\n for (let i = regs.length - 1; i >= 0; i -= 1) {\n const reg = regs[i]\n if (reg.word && hasDash.test(reg.word)) {\n let words = reg.word.split(/[-–—]/g)\n // don't split 're-cycle', etc\n if (prefixes.hasOwnProperty(words[0])) {\n continue\n }\n words = words.filter(w => w).reverse()\n regs.splice(i, 1)\n words.forEach(w => {\n const obj = Object.assign({}, reg)\n obj.word = w\n regs.splice(i, 0, obj)\n })\n }\n }\n return regs\n}\nexport default splitHyphens","\n// add all conjugations of this verb\nconst addVerbs = function (token, world) {\n const { all } = world.methods.two.transform.verb || {}\n const str = token.root\n if (!all) {\n return []\n }\n return all(str, world.model)\n}\n\n// add all inflections of this noun\nconst addNoun = function (token, world) {\n const { all } = world.methods.two.transform.noun || {}\n if (!all) {\n return [token.root]\n }\n return all(token.root, world.model)\n}\n\n// add all inflections of this adjective\nconst addAdjective = function (token, world) {\n const { all } = world.methods.two.transform.adjective || {}\n if (!all) {\n return [token.root]\n }\n return all(token.root, world.model)\n}\n\n// turn '{walk}' into 'walking', 'walked', etc\nconst inflectRoot = function (regs, world) {\n // do we have compromise/two?\n regs = regs.map(token => {\n // a reg to convert '{foo}'\n if (token.root) {\n // check if compromise/two is loaded\n if (world.methods.two && world.methods.two.transform) {\n let choices = []\n // have explicitly set from POS - '{sweet/adjective}'\n if (token.pos) {\n if (token.pos === 'Verb') {\n choices = choices.concat(addVerbs(token, world))\n } else if (token.pos === 'Noun') {\n choices = choices.concat(addNoun(token, world))\n } else if (token.pos === 'Adjective') {\n choices = choices.concat(addAdjective(token, world))\n }\n } else {\n // do verb/noun/adj by default\n choices = choices.concat(addVerbs(token, world))\n choices = choices.concat(addNoun(token, world))\n choices = choices.concat(addAdjective(token, world))\n }\n choices = choices.filter(str => str)\n if (choices.length > 0) {\n token.operator = 'or'\n token.fastOr = new Set(choices)\n }\n } else {\n // if no compromise/two, drop down into 'machine' lookup\n token.machine = token.root\n delete token.id\n delete token.root\n }\n }\n return token\n })\n\n return regs\n}\nexport default inflectRoot","// name any [unnamed] capture-groups with a number\nconst nameGroups = function (regs) {\n let index = 0\n let inGroup = null\n //'fill in' capture groups between start-end\n for (let i = 0; i < regs.length; i++) {\n const token = regs[i]\n if (token.groupStart === true) {\n inGroup = token.group\n if (inGroup === null) {\n inGroup = String(index)\n index += 1\n }\n }\n if (inGroup !== null) {\n token.group = inGroup\n }\n if (token.groupEnd === true) {\n inGroup = null\n }\n }\n return regs\n}\n\n// optimize an 'or' lookup, when the (a|b|c) list is simple or multi-word\nconst doFastOrMode = function (tokens) {\n return tokens.map(token => {\n if (token.choices !== undefined) {\n // make sure it's an OR\n if (token.operator !== 'or') {\n return token\n }\n if (token.fuzzy === true) {\n return token\n }\n // are they all straight-up words? then optimize them.\n const shouldPack = token.choices.every(block => {\n if (block.length !== 1) {\n return false\n }\n const reg = block[0]\n // ~fuzzy~ words need more care\n if (reg.fuzzy === true) {\n return false\n }\n // ^ and $ get lost in fastOr\n if (reg.start || reg.end) {\n return false\n }\n if (reg.word !== undefined && reg.negative !== true && reg.optional !== true && reg.method !== true) {\n return true //reg is simple-enough\n }\n return false\n })\n if (shouldPack === true) {\n token.fastOr = new Set()\n token.choices.forEach(block => {\n token.fastOr.add(block[0].word)\n })\n delete token.choices\n }\n }\n return token\n })\n}\n\n// support ~(a|b|c)~\nconst fuzzyOr = function (regs) {\n return regs.map(reg => {\n if (reg.fuzzy && reg.choices) {\n // pass fuzzy-data to each OR choice\n reg.choices.forEach(r => {\n if (r.length === 1 && r[0].word) {\n r[0].fuzzy = true\n r[0].min = reg.min\n }\n })\n }\n return reg\n })\n}\n\nconst postProcess = function (regs) {\n // ensure all capture groups names are filled between start and end\n regs = nameGroups(regs)\n // convert 'choices' format to 'fastOr' format\n regs = doFastOrMode(regs)\n // support ~(foo|bar)~\n regs = fuzzyOr(regs)\n return regs\n}\nexport default postProcess\n","import parseBlocks from './01-parseBlocks.js'\nimport parseToken from './02-parseToken.js'\nimport splitHyphens from './03-splitHyphens.js'\nimport inflectRoot from './04-inflect-root.js'\nimport postProcess from './05-postProcess.js'\n\n/** parse a match-syntax string into json */\nconst syntax = function (input, opts, world) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n opts = opts || {}\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = parseBlocks(input)\n //turn them into objects\n tokens = tokens.map(str => parseToken(str, opts))\n // '~re-do~'\n tokens = splitHyphens(tokens, world)\n // '{walk}'\n tokens = inflectRoot(tokens, world)\n //clean up anything weird\n tokens = postProcess(tokens, opts)\n // console.log(tokens)\n return tokens\n}\nexport default syntax\n","const anyIntersection = function (setA, setB) {\n for (const elem of setB) {\n if (setA.has(elem)) {\n return true\n }\n }\n return false\n}\n// check words/tags against our cache\nconst failFast = function (regs, cache) {\n for (let i = 0; i < regs.length; i += 1) {\n const reg = regs[i]\n if (reg.optional === true || reg.negative === true || reg.fuzzy === true) {\n continue\n }\n // is the word missing from the cache?\n if (reg.word !== undefined && cache.has(reg.word) === false) {\n return true\n }\n // is the tag missing?\n if (reg.tag !== undefined && cache.has('#' + reg.tag) === false) {\n return true\n }\n // perform a speedup for fast-or\n if (reg.fastOr && anyIntersection(reg.fastOr, cache) === false) {\n return false\n }\n }\n return false\n}\nexport default failFast\n","// fuzzy-match (damerau-levenshtein)\n// Based on tad-lispy /node-damerau-levenshtein\n// https://github.com/tad-lispy/node-damerau-levenshtein/blob/master/index.js\n// count steps (insertions, deletions, substitutions, or transpositions)\nconst editDistance = function (strA, strB) {\n const aLength = strA.length,\n bLength = strB.length\n // fail-fast\n if (aLength === 0) {\n return bLength\n }\n if (bLength === 0) {\n return aLength\n }\n // If the limit is not defined it will be calculate from this and that args.\n const limit = (bLength > aLength ? bLength : aLength) + 1\n if (Math.abs(aLength - bLength) > (limit || 100)) {\n return limit || 100\n }\n // init the array\n const matrix = []\n for (let i = 0; i < limit; i++) {\n matrix[i] = [i]\n matrix[i].length = limit\n }\n for (let i = 0; i < limit; i++) {\n matrix[0][i] = i\n }\n // Calculate matrix.\n let j, a_index, b_index, cost, min, t\n for (let i = 1; i <= aLength; ++i) {\n a_index = strA[i - 1]\n for (j = 1; j <= bLength; ++j) {\n // Check the jagged distance total so far\n if (i === j && matrix[i][j] > 4) {\n return aLength\n }\n b_index = strB[j - 1]\n cost = a_index === b_index ? 0 : 1 // Step 5\n // Calculate the minimum (much faster than Math.min(...)).\n min = matrix[i - 1][j] + 1 // Deletion.\n if ((t = matrix[i][j - 1] + 1) < min) min = t // Insertion.\n if ((t = matrix[i - 1][j - 1] + cost) < min) min = t // Substitution.\n // Update matrix.\n const shouldUpdate =\n i > 1 && j > 1 && a_index === strB[j - 2] && strA[i - 2] === b_index && (t = matrix[i - 2][j - 2] + cost) < min\n if (shouldUpdate) {\n matrix[i][j] = t\n } else {\n matrix[i][j] = min\n }\n }\n }\n // return number of steps\n return matrix[aLength][bLength]\n}\n// score similarity by from 0-1 (steps/length)\nconst fuzzyMatch = function (strA, strB, minLength = 3) {\n if (strA === strB) {\n return 1\n }\n //don't even bother on tiny strings\n if (strA.length < minLength || strB.length < minLength) {\n return 0\n }\n const steps = editDistance(strA, strB)\n const length = Math.max(strA.length, strB.length)\n const relative = length === 0 ? 0 : steps / length\n const similarity = 1 - relative\n return similarity\n}\nexport default fuzzyMatch\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote =\n /([\\u0022\\uFF02\\u0027\\u201C\\u2018\\u201F\\u201B\\u201E\\u2E42\\u201A\\u00AB\\u2039\\u2035\\u2036\\u2037\\u301D\\u0060\\u301F])/\n\nconst endQuote = /([\\u0022\\uFF02\\u0027\\u201D\\u2019\\u00BB\\u203A\\u2032\\u2033\\u2034\\u301E\\u00B4])/\n\nconst hasHyphen = /^[-–—]$/\nconst hasDash = / [-–—]{1,3} /\n\n/** search the term's 'post' punctuation */\nconst hasPost = (term, punct) => term.post.indexOf(punct) !== -1\n/** search the term's 'pre' punctuation */\n// const hasPre = (term, punct) => term.pre.indexOf(punct) !== -1\n\nconst methods = {\n /** does it have a quotation symbol? */\n hasQuote: term => startQuote.test(term.pre) || endQuote.test(term.post),\n /** does it have a comma? */\n hasComma: term => hasPost(term, ','),\n /** does it end in a period? */\n hasPeriod: term => hasPost(term, '.') === true && hasPost(term, '...') === false,\n /** does it end in an exclamation */\n hasExclamation: term => hasPost(term, '!'),\n /** does it end with a question mark? */\n hasQuestionMark: term => hasPost(term, '?') || hasPost(term, '¿'),\n /** is there a ... at the end? */\n hasEllipses: term => hasPost(term, '..') || hasPost(term, '…'),\n /** is there a semicolon after term word? */\n hasSemicolon: term => hasPost(term, ';'),\n /** is there a colon after term word? */\n hasColon: term => hasPost(term, ':'),\n /** is there a slash '/' in term word? */\n hasSlash: term => /\\//.test(term.text),\n /** a hyphen connects two words like-term */\n hasHyphen: term => hasHyphen.test(term.post) || hasHyphen.test(term.pre),\n /** a dash separates words - like that */\n hasDash: term => hasDash.test(term.post) || hasDash.test(term.pre),\n /** is it multiple words combinded */\n hasContraction: term => Boolean(term.implicit),\n /** is it an acronym */\n isAcronym: term => term.tags.has('Acronym'),\n /** does it have any tags */\n isKnown: term => term.tags.size > 0,\n /** uppercase first letter, then a lowercase */\n isTitleCase: term => /^\\p{Lu}[a-z'\\u00C0-\\u00FF]/u.test(term.text),\n /** uppercase all letters */\n isUpperCase: term => /^\\p{Lu}+$/u.test(term.text),\n}\n// aliases\nmethods.hasQuotation = methods.hasQuote\n\nexport default methods\n","import fuzzy from './_fuzzy.js'\nimport methods from '../../termMethods.js' //this should load off of 'methods.one.termMethods'\n\n//declare it up here\nlet wrapMatch = function () { }\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function (term, reg, index, length) {\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n // match an id\n if (reg.id !== undefined && reg.id === term.id) {\n return true\n }\n //support a text match\n if (reg.word !== undefined) {\n // check case-sensitivity, etc\n if (reg.use) {\n return reg.word === term[reg.use]\n }\n //match contractions, machine-form\n if (term.machine !== null && term.machine === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (term.alias !== undefined && term.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ fuzzy match\n if (reg.fuzzy === true) {\n if (reg.word === term.root) {\n return true\n }\n const score = fuzzy(reg.word, term.normal)\n if (score >= reg.min) {\n return true\n }\n }\n // match slashes and things\n if (term.alias && term.alias.some(str => str === reg.word)) {\n return true\n }\n //match either .normal or .text\n return reg.word === term.text || reg.word === term.normal\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return term.tags.has(reg.tag) === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof methods[reg.method] === 'function' && methods[reg.method](term) === true) {\n return true\n }\n return false\n }\n //support whitespace/punctuation\n if (reg.pre !== undefined) {\n return term.pre && term.pre.includes(reg.pre)\n }\n if (reg.post !== undefined) {\n return term.post && term.post.includes(reg.post)\n }\n //support /reg/\n if (reg.regex !== undefined) {\n let str = term.normal\n if (reg.use) {\n str = term[reg.use]\n }\n return reg.regex.test(str)\n }\n //support <chunk>\n if (reg.chunk !== undefined) {\n return term.chunk === reg.chunk\n }\n //support %Noun|Verb%\n if (reg.switch !== undefined) {\n return term.switch === reg.switch\n }\n //support {machine}\n if (reg.machine !== undefined) {\n return term.normal === reg.machine || term.machine === reg.machine || term.root === reg.machine\n }\n //support {word/sense}\n if (reg.sense !== undefined) {\n return term.sense === reg.sense\n }\n // support optimized (one|two)\n if (reg.fastOr !== undefined) {\n // {work/verb} must be a verb\n if (reg.pos && !term.tags.has(reg.pos)) {\n return null\n }\n const str = term.root || term.implicit || term.machine || term.normal\n return reg.fastOr.has(str) || reg.fastOr.has(term.text)\n }\n //support slower (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(term, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(term, r, index, length))\n }\n return false\n}\n// wrap result for !negative match logic\nwrapMatch = function (t, reg, index, length) {\n const result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\nexport default wrapMatch\n","import doesMatch from '../../term/doesMatch.js'\n\n// for greedy checking, we no longer care about the reg.start\n// value, and leaving it can cause failures for anchored greedy\n// matches. ditto for end-greedy matches: we need an earlier non-\n// ending match to succceed until we get to the actual end.\nconst getGreedy = function (state, endReg) {\n const reg = Object.assign({}, state.regs[state.r], { start: false, end: false })\n const start = state.t\n for (; state.t < state.terms.length; state.t += 1) {\n //stop for next-reg match\n if (endReg && doesMatch(state.terms[state.t], endReg, state.start_i + state.t, state.phrase_length)) {\n return state.t\n }\n const count = state.t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return state.t\n }\n //stop here\n if (doesMatch(state.terms[state.t], reg, state.start_i + state.t, state.phrase_length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return state.t\n }\n }\n return state.t\n}\n\nconst greedyTo = function (state, nextReg) {\n let t = state.t\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return state.terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < state.terms.length; t += 1) {\n if (doesMatch(state.terms[t], nextReg, state.start_i + t, state.phrase_length) === true) {\n // console.log(`greedyTo ${state.terms[t].normal}`)\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\nconst isEndGreedy = function (reg, state) {\n if (reg.end === true && reg.greedy === true) {\n if (state.start_i + state.t < state.phrase_length - 1) {\n const tmpReg = Object.assign({}, reg, { end: false })\n if (doesMatch(state.terms[state.t], tmpReg, state.start_i + state.t, state.phrase_length) === true) {\n // console.log(`endGreedy ${state.terms[state.t].normal}`)\n return true\n }\n }\n }\n return false\n}\n\nexport { isEndGreedy, greedyTo, getGreedy }","\n\nexport const getGroup = function (state, term_index) {\n if (state.groups[state.inGroup]) {\n return state.groups[state.inGroup]\n }\n state.groups[state.inGroup] = {\n start: term_index,\n length: 0,\n }\n return state.groups[state.inGroup]\n}\n","import { greedyTo } from './logic/greedy.js'\nimport { getGroup } from '../_lib.js'\n\n//support 'unspecific greedy' .* properly\n// its logic is 'greedy until', where it's looking for the next token\n// '.+ foo' means we check for 'foo', indefinetly\nconst doAstrix = function (state) {\n const { regs } = state\n const reg = regs[state.r]\n\n const skipto = greedyTo(state, regs[state.r + 1])\n //maybe we couldn't find it\n if (skipto === null || skipto === 0) {\n return null\n }\n // ensure it's long enough\n if (reg.min !== undefined && skipto - state.t < reg.min) {\n return null\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - state.t > reg.max) {\n state.t = state.t + reg.max\n return true\n }\n // set the group result\n if (state.hasGroup === true) {\n const g = getGroup(state, state.t)\n g.length = skipto - state.t\n }\n state.t = skipto\n // log(`✓ |greedy|`)\n return true\n}\nexport default doAstrix","import doesMatch from '../../term/doesMatch.js'\n\nconst isArray = function (arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexport const doOrBlock = function (state, skipN = 0) {\n const block = state.regs[state.r]\n let wasFound = false\n // do each multiword sequence\n for (let c = 0; c < block.choices.length; c += 1) {\n // try to match this list of tokens\n const regs = block.choices[c]\n if (!isArray(regs)) {\n return false\n }\n wasFound = regs.every((cr, w_index) => {\n let extra = 0\n const t = state.t + w_index + skipN + extra\n if (state.terms[t] === undefined) {\n return false\n }\n const foundBlock = doesMatch(state.terms[t], cr, t + state.start_i, state.phrase_length)\n // this can be greedy - '(foo+ bar)'\n if (foundBlock === true && cr.greedy === true) {\n for (let i = 1; i < state.terms.length; i += 1) {\n const term = state.terms[t + i]\n if (term) {\n const keepGoing = doesMatch(term, cr, state.start_i + i, state.phrase_length)\n if (keepGoing === true) {\n extra += 1\n } else {\n break\n }\n }\n }\n }\n skipN += extra\n return foundBlock\n })\n if (wasFound) {\n skipN += regs.length\n break\n }\n }\n // we found a match - is it greedy though?\n if (wasFound && block.greedy === true) {\n return doOrBlock(state, skipN) // try it again!\n }\n return skipN\n}\n\nconst doAndBlock = function (state) {\n let longest = 0\n // all blocks must match, and we return the greediest match\n const reg = state.regs[state.r]\n const allDidMatch = reg.choices.every(block => {\n // for multi-word blocks, all must match\n const allWords = block.every((cr, w_index) => {\n const tryTerm = state.t + w_index\n if (state.terms[tryTerm] === undefined) {\n return false\n }\n return doesMatch(state.terms[tryTerm], cr, tryTerm, state.phrase_length)\n })\n if (allWords === true && block.length > longest) {\n longest = block.length\n }\n return allWords\n })\n if (allDidMatch === true) {\n // console.log(`doAndBlock ${state.terms[state.t].normal}`)\n return longest\n }\n return false\n}\nexport { doAndBlock }","import { doOrBlock } from './logic/and-or.js'\nimport { getGroup } from '../_lib.js'\n\nconst orBlock = function (state) {\n const { regs } = state\n const reg = regs[state.r]\n const skipNum = doOrBlock(state)\n // did we find a match?\n if (skipNum) {\n // handle 'not' logic\n if (reg.negative === true) {\n return null // die\n }\n // tuck in as named-group\n if (state.hasGroup === true) {\n const g = getGroup(state, state.t)\n g.length += skipNum\n }\n // ensure we're at the end\n if (reg.end === true) {\n const end = state.phrase_length\n if (state.t + state.start_i + skipNum !== end) {\n return null\n }\n }\n state.t += skipNum\n // log(`✓ |found-or|`)\n return true\n } else if (!reg.optional) {\n return null //die\n }\n return true\n}\nexport default orBlock","import { doAndBlock } from './logic/and-or.js'\nimport { getGroup } from '../_lib.js'\n\n// '(foo && #Noun)' - require all matches on the term\nconst andBlock = function (state) {\n const { regs } = state\n const reg = regs[state.r]\n\n const skipNum = doAndBlock(state)\n if (skipNum) {\n // handle 'not' logic\n if (reg.negative === true) {\n return null // die\n }\n if (state.hasGroup === true) {\n const g = getGroup(state, state.t)\n g.length += skipNum\n }\n // ensure we're at the end\n if (reg.end === true) {\n const end = state.phrase_length - 1\n if (state.t + state.start_i !== end) {\n return null\n }\n }\n state.t += skipNum\n // log(`✓ |found-and|`)\n return true\n } else if (!reg.optional) {\n return null //die\n }\n return true\n}\nexport default andBlock","import doesMatch from '../../term/doesMatch.js'\n\nconst negGreedy = function (state, reg, nextReg) {\n let skip = 0\n for (let t = state.t; t < state.terms.length; t += 1) {\n let found = doesMatch(state.terms[t], reg, state.start_i + state.t, state.phrase_length)\n // we don't want a match, here\n if (found) {\n break//stop going\n }\n // are we doing 'greedy-to'?\n // - \"!foo+ after\" should stop at 'after'\n if (nextReg) {\n found = doesMatch(state.terms[t], nextReg, state.start_i + state.t, state.phrase_length)\n if (found) {\n break\n }\n }\n skip += 1\n // is it max-length now?\n if (reg.max !== undefined && skip === reg.max) {\n break\n }\n }\n if (skip === 0) {\n return false //dead\n }\n // did we satisfy min for !foo{min,max}\n if (reg.min && reg.min > skip) {\n return false//dead\n }\n state.t += skip\n // state.r += 1\n return true\n}\n\nexport default negGreedy","import matchTerm from '../term/doesMatch.js'\nimport negGreedy from './logic/negative-greedy.js'\n\n// '!foo' should match anything that isn't 'foo'\n// if it matches, return false\nconst doNegative = function (state) {\n const { regs } = state\n const reg = regs[state.r]\n\n // match *anything* but this term\n const tmpReg = Object.assign({}, reg)\n tmpReg.negative = false // try removing it\n\n // found it? if so, we die here\n const found = matchTerm(state.terms[state.t], tmpReg, state.start_i + state.t, state.phrase_length)\n if (found) {\n return false//bye\n }\n // should we skip the term too?\n if (reg.optional) {\n // \"before after\" - \"before !foo? after\"\n // does the next reg match the this term?\n const nextReg = regs[state.r + 1]\n if (nextReg) {\n const fNext = matchTerm(state.terms[state.t], nextReg, state.start_i + state.t, state.phrase_length)\n if (fNext) {\n state.r += 1\n } else if (nextReg.optional && regs[state.r + 2]) {\n // ugh. ok,\n // support \"!foo? extra? need\"\n // but don't scan ahead more than that.\n const fNext2 = matchTerm(state.terms[state.t], regs[state.r + 2], state.start_i + state.t, state.phrase_length)\n if (fNext2) {\n state.r += 2\n }\n }\n }\n }\n // negative greedy - !foo+ - super hard!\n if (reg.greedy) {\n return negGreedy(state, tmpReg, regs[state.r + 1])\n }\n state.t += 1\n return true\n}\nexport default doNegative","import matchTerm from '../term/doesMatch.js'\n\n// 'foo? foo' matches are tricky.\nconst foundOptional = function (state) {\n const { regs } = state\n const reg = regs[state.r]\n const term = state.terms[state.t]\n // does the next reg match it too?\n const nextRegMatched = matchTerm(term, regs[state.r + 1], state.start_i + state.t, state.phrase_length)\n if (reg.negative || nextRegMatched) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n const nextTerm = state.terms[state.t + 1]\n if (!nextTerm || !matchTerm(nextTerm, regs[state.r + 1], state.start_i + state.t, state.phrase_length)) {\n state.r += 1\n }\n }\n}\n\nexport default foundOptional","import { getGreedy } from './logic/greedy.js'\n\n// keep 'foo+' or 'foo*' going..\nconst greedyMatch = function (state) {\n const { regs, phrase_length } = state\n const reg = regs[state.r]\n state.t = getGreedy(state, regs[state.r + 1])\n if (state.t === null) {\n return null //greedy was too short\n }\n // foo{2,4} - has a greed-minimum\n if (reg.min && reg.min > state.t) {\n return null //greedy was too short\n }\n // 'foo+$' - if also an end-anchor, ensure we really reached the end\n if (reg.end === true && state.start_i + state.t !== phrase_length) {\n return null //greedy didn't reach the end\n }\n return true\n}\nexport default greedyMatch","// for: ['we', 'have']\n// a match for \"we have\" should work as normal\n// but matching \"we've\" should skip over implict terms\nconst contractionSkip = function (state) {\n const term = state.terms[state.t]\n const reg = state.regs[state.r]\n // did we match the first part of a contraction?\n if (term.implicit && state.terms[state.t + 1]) {\n const nextTerm = state.terms[state.t + 1]\n // ensure next word is implicit\n if (!nextTerm.implicit) {\n return\n }\n // we matched \"we've\" - skip-over [we, have]\n if (reg.word === term.normal) {\n state.t += 1\n }\n // also skip for @hasContraction\n if (reg.method === 'hasContraction') {\n state.t += 1\n }\n }\n}\nexport default contractionSkip","import { getGroup } from '../_lib.js'\nimport foundOptional from './optional-match.js'\nimport greedyMatch from './greedy-match.js'\nimport contractionSkip from './contraction-skip.js'\n\n\n// '[foo]' should also be logged as a group\nconst setGroup = function (state, startAt) {\n const reg = state.regs[state.r]\n // Get or create capture group\n const g = getGroup(state, startAt)\n // Update group - add greedy or increment length\n if (state.t > 1 && reg.greedy) {\n g.length += state.t - startAt\n } else {\n g.length++\n }\n}\n\n// when a reg matches a term\nconst simpleMatch = function (state) {\n const { regs } = state\n const reg = regs[state.r]\n const term = state.terms[state.t]\n const startAt = state.t\n // if it's a negative optional match... :0\n if (reg.optional && regs[state.r + 1] && reg.negative) {\n return true\n }\n // okay, it was a match, but if it's optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[state.r + 1]) {\n foundOptional(state)\n }\n // Contraction skip:\n // did we match the first part of a contraction?\n if (term.implicit && state.terms[state.t + 1]) {\n contractionSkip(state)\n }\n //advance to the next term!\n state.t += 1\n //check any ending '$' flags\n //if this isn't the last term, refuse the match\n if (reg.end === true && state.t !== state.terms.length && reg.greedy !== true) {\n return null //die\n }\n // keep 'foo+' going...\n if (reg.greedy === true) {\n const alive = greedyMatch(state)\n if (!alive) {\n return null\n }\n }\n // log '[foo]' as a group\n if (state.hasGroup === true) {\n setGroup(state, startAt)\n }\n return true\n}\nexport default simpleMatch","import doAstrix from './steps/astrix.js'\nimport doOrBlock from './steps/or-block.js'\nimport doAndBlock from './steps/and-block.js'\nimport doNegative from './steps/negative.js'\nimport simpleMatch from './steps/simple-match.js'\nimport { isEndGreedy } from './steps/logic/greedy.js'\nimport matchTerm from './term/doesMatch.js'\n// i formally apologize for how complicated this is.\n\n/** \n * try a sequence of match tokens ('regs') \n * on a sequence of terms, \n * starting at this certain term.\n */\nconst tryHere = function (terms, regs, start_i, phrase_length) {\n // console.log(`\\n\\n:start: '${terms[0].text}':`)\n if (terms.length === 0 || regs.length === 0) {\n return null\n }\n // all the variables that matter\n const state = {\n t: 0,\n terms: terms,\n r: 0,\n regs: regs,\n groups: {},\n start_i: start_i,\n phrase_length: phrase_length,\n inGroup: null,\n }\n\n // we must satisfy every token in 'regs'\n // if we get to the end, we have a match.\n for (; state.r < regs.length; state.r += 1) {\n const reg = regs[state.r]\n // Check if this reg has a named capture group\n state.hasGroup = Boolean(reg.group)\n // Reuse previous capture group if same\n if (state.hasGroup === true) {\n state.inGroup = reg.group\n } else {\n state.inGroup = null\n }\n //have we run-out of terms?\n if (!state.terms[state.t]) {\n //are all remaining regs optional or negative?\n const alive = regs.slice(state.r).some(remain => !remain.optional)\n if (alive === false) {\n break //done!\n }\n return null // die\n }\n // support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n const alive = doAstrix(state)\n if (!alive) {\n return null\n }\n continue\n }\n // slow-OR - multi-word OR (a|b|foo bar)\n if (reg.choices !== undefined && reg.operator === 'or') {\n const alive = doOrBlock(state)\n if (!alive) {\n return null\n }\n continue\n }\n // slow-AND - multi-word AND (#Noun && foo) blocks\n if (reg.choices !== undefined && reg.operator === 'and') {\n const alive = doAndBlock(state)\n if (!alive) {\n return null\n }\n continue\n }\n // support '.' as any-single\n if (reg.anything === true) {\n // '!.' negative anything should insta-fail\n if (reg.negative && reg.anything) {\n return null\n }\n const alive = simpleMatch(state)\n if (!alive) {\n return null\n }\n continue\n }\n // support 'foo*$' until the end\n if (isEndGreedy(reg, state) === true) {\n const alive = simpleMatch(state)\n if (!alive) {\n return null\n }\n continue\n }\n // ok, it doesn't match - but maybe it wasn't *supposed* to?\n if (reg.negative) {\n // we want *anything* but this term\n const alive = doNegative(state)\n if (!alive) {\n return null\n }\n continue\n }\n // ok, finally test the term-reg\n const hasMatch = matchTerm(state.terms[state.t], reg, state.start_i + state.t, state.phrase_length)\n if (hasMatch === true) {\n const alive = simpleMatch(state)\n if (!alive) {\n return null\n }\n continue\n }\n //ok who cares, keep going\n if (reg.optional === true) {\n continue\n }\n\n // finally, we die\n return null\n }\n //return our results, as pointers\n const pntr = [null, start_i, state.t + start_i]\n if (pntr[1] === pntr[2]) {\n return null //found 0 terms\n }\n const groups = {}\n Object.keys(state.groups).forEach(k => {\n const o = state.groups[k]\n const start = start_i + o.start\n groups[k] = [null, start, start + o.length]\n })\n return { pointer: pntr, groups: groups }\n}\nexport default tryHere\n","// support returning a subset of a match\n// like 'foo [bar] baz' -> bar\nconst getGroup = function (res, group) {\n const ptrs = []\n const byGroup = {}\n if (res.length === 0) {\n return { ptrs, byGroup }\n }\n if (typeof group === 'number') {\n group = String(group)\n }\n if (group) {\n res.forEach(r => {\n if (r.groups[group]) {\n ptrs.push(r.groups[group])\n }\n })\n } else {\n res.forEach(r => {\n ptrs.push(r.pointer)\n Object.keys(r.groups).forEach(k => {\n byGroup[k] = byGroup[k] || []\n byGroup[k].push(r.groups[k])\n })\n })\n }\n return { ptrs, byGroup }\n}\nexport default getGroup\n","import fromHere from './02-from-here.js'\n\nconst notIf = function (results, not, docs) {\n results = results.filter(res => {\n const [n, start, end] = res.pointer\n const terms = docs[n].slice(start, end)\n for (let i = 0; i < terms.length; i += 1) {\n const slice = terms.slice(i)\n const found = fromHere(slice, not, i, terms.length)\n if (found !== null) {\n return false\n }\n }\n return true\n })\n return results\n}\n\nexport default notIf","import failFast from './01-failFast.js'\nimport fromHere from './02-from-here.js'\nimport getGroup from './03-getGroup.js'\nimport notIf from './03-notIf.js'\n\n\n// make proper pointers\nconst addSentence = function (res, n) {\n res.pointer[0] = n\n Object.keys(res.groups).forEach(k => {\n res.groups[k][0] = n\n })\n return res\n}\n\nconst handleStart = function (terms, regs, n) {\n let res = fromHere(terms, regs, 0, terms.length)\n if (res) {\n res = addSentence(res, n)\n return res //getGroup([res], group)\n }\n return null\n}\n\n// ok, here we go.\nconst runMatch = function (docs, todo, cache) {\n cache = cache || []\n const { regs, group, justOne } = todo\n let results = []\n if (!regs || regs.length === 0) {\n return { ptrs: [], byGroup: {} }\n }\n\n const minLength = regs.filter(r => r.optional !== true && r.negative !== true).length\n docs: for (let n = 0; n < docs.length; n += 1) {\n const terms = docs[n]\n // let index = terms[0].index || []\n // can we skip this sentence?\n if (cache[n] && failFast(regs, cache[n])) {\n continue\n }\n // ^start regs only run once, per phrase\n if (regs[0].start === true) {\n const foundStart = handleStart(terms, regs, n, group)\n if (foundStart) {\n results.push(foundStart)\n }\n continue\n }\n //ok, try starting the match now from every term\n for (let i = 0; i < terms.length; i += 1) {\n const slice = terms.slice(i)\n // ensure it's long-enough\n if (slice.length < minLength) {\n break\n }\n let res = fromHere(slice, regs, i, terms.length)\n // did we find a result?\n if (res) {\n // res = addSentence(res, index[0])\n res = addSentence(res, n)\n results.push(res)\n // should we stop here?\n if (justOne === true) {\n break docs\n }\n // skip ahead, over these results\n const end = res.pointer[2]\n if (Math.abs(end - 1) > i) {\n i = Math.abs(end - 1)\n }\n }\n }\n }\n // ensure any end-results ($) match until the last term\n if (regs[regs.length - 1].end === true) {\n results = results.filter(res => {\n const n = res.pointer[0]\n return docs[n].length === res.pointer[2]\n })\n }\n if (todo.notIf) {\n results = notIf(results, todo.notIf, docs)\n }\n // grab the requested group\n results = getGroup(results, group)\n // add ids to pointers\n results.ptrs.forEach(ptr => {\n const [n, start, end] = ptr\n ptr[3] = docs[n][start].id//start-id\n ptr[4] = docs[n][end - 1].id//end-id\n })\n return results\n}\n\nexport default runMatch\n","import parseMatch from './parseMatch/index.js'\nimport match from './match/index.js'\nimport termMethods from './termMethods.js'\n\nconst methods = {\n one: {\n termMethods,\n parseMatch,\n match,\n },\n}\n\nexport default methods\n","\nexport default {\n /** pre-parse any match statements */\n parseMatch: function (str, opts) {\n const world = this.world()\n const killUnicode = world.methods.one.killUnicode\n if (killUnicode) {\n str = killUnicode(str, world)\n }\n return world.methods.one.parseMatch(str, opts, world)\n }\n}","import api from './api/index.js'\nimport methods from './methods/index.js'\nimport lib from './lib.js'\n\nexport default {\n api,\n methods,\n lib,\n}\n","const isClass = /^\\../\nconst isId = /^#./\n\nconst escapeXml = str => {\n str = str.replace(/&/g, '&')\n str = str.replace(/</g, '<')\n str = str.replace(/>/g, '>')\n str = str.replace(/\"/g, '"')\n str = str.replace(/'/g, ''')\n return str\n}\n\n// interpret .class, #id, tagName\nconst toTag = function (k) {\n let start = ''\n let end = '</span>'\n k = escapeXml(k)\n if (isClass.test(k)) {\n start = `<span class=\"${k.replace(/^\\./, '')}\"`\n } else if (isId.test(k)) {\n start = `<span id=\"${k.replace(/^#/, '')}\"`\n } else {\n start = `<${k}`\n end = `</${k}>`\n }\n start += '>'\n return { start, end }\n}\n\nconst getIndex = function (doc, obj) {\n const starts = {}\n const ends = {}\n Object.keys(obj).forEach(k => {\n let res = obj[k]\n const tag = toTag(k)\n if (typeof res === 'string') {\n res = doc.match(res)\n }\n res.docs.forEach(terms => {\n // don't highlight implicit terms\n if (terms.every(t => t.implicit)) {\n return\n }\n const a = terms[0].id\n starts[a] = starts[a] || []\n starts[a].push(tag.start)\n const b = terms[terms.length - 1].id\n ends[b] = ends[b] || []\n ends[b].push(tag.end)\n })\n })\n return { starts, ends }\n}\n\nconst html = function (obj) {\n // index ids to highlight\n const { starts, ends } = getIndex(this, obj)\n // create the text output\n let out = ''\n this.docs.forEach(terms => {\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n // do a span tag\n if (starts.hasOwnProperty(t.id)) {\n out += starts[t.id].join('')\n }\n out += t.pre || ''\n out += t.text || ''\n if (ends.hasOwnProperty(t.id)) {\n out += ends[t.id].join('')\n }\n out += t.post || ''\n }\n })\n return out\n}\nexport default { html }\n","const trimEnd = /[,:;)\\]*.?~!\\u0022\\uFF02\\u201D\\u2019\\u00BB\\u203A\\u2032\\u2033\\u2034\\u301E\\u00B4—-]+$/\nconst trimStart =\n /^[(['\"*~\\uFF02\\u201C\\u2018\\u201F\\u201B\\u201E\\u2E42\\u201A\\u00AB\\u2039\\u2035\\u2036\\u2037\\u301D\\u0060\\u301F]+/\n\nconst punctToKill = /[,:;)('\"\\u201D\\]]/\nconst isHyphen = /^[-–—]$/\nconst hasSpace = / /\n\nconst textFromTerms = function (terms, opts, keepSpace = true) {\n let txt = ''\n terms.forEach(t => {\n let pre = t.pre || ''\n let post = t.post || ''\n if (opts.punctuation === 'some') {\n pre = pre.replace(trimStart, '')\n // replace a hyphen with a space\n if (isHyphen.test(post)) {\n post = ' '\n }\n post = post.replace(punctToKill, '')\n // cleanup exclamations\n post = post.replace(/\\?!+/, '?')\n post = post.replace(/!+/, '!')\n post = post.replace(/\\?+/, '?')\n // kill elipses\n post = post.replace(/\\.{2,}/, '')\n // kill abbreviation periods\n if (t.tags.has('Abbreviation')) {\n post = post.replace(/\\./, '')\n }\n }\n if (opts.whitespace === 'some') {\n pre = pre.replace(/\\s/, '') //remove pre-whitespace\n post = post.replace(/\\s+/, ' ') //replace post-whitespace with a space\n }\n if (!opts.keepPunct) {\n pre = pre.replace(trimStart, '')\n if (post === '-') {\n post = ' '\n } else {\n post = post.replace(trimEnd, '')\n }\n }\n // grab the correct word format\n let word = t[opts.form || 'text'] || t.normal || ''\n if (opts.form === 'implicit') {\n word = t.implicit || t.text\n }\n if (opts.form === 'root' && t.implicit) {\n word = t.root || t.implicit || t.normal\n }\n // add an implicit space, for contractions\n if ((opts.form === 'machine' || opts.form === 'implicit' || opts.form === 'root') && t.implicit) {\n if (!post || !hasSpace.test(post)) {\n post += ' '\n }\n }\n txt += pre + word + post\n })\n if (keepSpace === false) {\n txt = txt.trim()\n }\n if (opts.lowerCase === true) {\n txt = txt.toLowerCase()\n }\n return txt\n}\n\nconst textFromDoc = function (docs, opts) {\n let text = ''\n if (!docs || !docs[0] || !docs[0][0]) {\n return text\n }\n for (let i = 0; i < docs.length; i += 1) {\n // middle\n text += textFromTerms(docs[i], opts, true)\n }\n if (!opts.keepSpace) {\n text = text.trim()\n }\n if (opts.keepEndPunct === false) {\n // don't remove ':)' etc\n if (!docs[0][0].tags.has('Emoticon')) {\n text = text.replace(trimStart, '')\n }\n // remove ending periods\n const last = docs[docs.length - 1]\n if (!last[last.length - 1].tags.has('Emoticon')) {\n text = text.replace(trimEnd, '')\n }\n // kill end quotations\n if (text.endsWith(`'`) && !text.endsWith(`s'`)) {\n text = text.replace(/'/, '')\n }\n }\n if (opts.cleanWhitespace === true) {\n text = text.trim()\n }\n return text\n}\nexport { textFromDoc, textFromTerms }\n","const fmts = {\n text: {\n form: 'text',\n },\n normal: {\n whitespace: 'some',\n punctuation: 'some',\n case: 'some',\n unicode: 'some',\n form: 'normal',\n },\n machine: {\n keepSpace: false,\n whitespace: 'some',\n punctuation: 'some',\n case: 'none',\n unicode: 'some',\n form: 'machine',\n },\n root: {\n keepSpace: false,\n whitespace: 'some',\n punctuation: 'some',\n case: 'some',\n unicode: 'some',\n form: 'root',\n },\n implicit: {\n form: 'implicit',\n }\n}\nfmts.clean = fmts.normal\nfmts.reduced = fmts.root\nexport default fmts","/* eslint-disable no-bitwise */\n/* eslint-disable no-mixed-operators */\n/* eslint-disable no-multi-assign */\n\n// https://github.com/jbt/tiny-hashes/\nconst k = []\nlet i = 0\nfor (; i < 64; ) {\n k[i] = 0 | (Math.sin(++i % Math.PI) * 4294967296)\n}\n\nconst md5 = function (s) {\n let b,\n c,\n d,\n j = decodeURI(encodeURI(s)) + '\\x80',\n a = j.length\n\n const h = [(b = 0x67452301), (c = 0xefcdab89), ~b, ~c],\n words = []\n\n s = (--a / 4 + 2) | 15\n\n words[--s] = a * 8\n\n for (; ~a; ) {\n words[a >> 2] |= j.charCodeAt(a) << (8 * a--)\n }\n\n for (i = j = 0; i < s; i += 16) {\n a = h\n\n for (\n ;\n j < 64;\n a = [\n (d = a[3]),\n b +\n (((d =\n a[0] +\n [(b & c) | (~b & d), (d & b) | (~d & c), b ^ c ^ d, c ^ (b | ~d)][(a = j >> 4)] +\n k[j] +\n ~~words[i | ([j, 5 * j + 1, 3 * j + 5, 7 * j][a] & 15)]) <<\n (a = [7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21][4 * a + (j++ % 4)])) |\n (d >>> -a)),\n b,\n c,\n ]\n ) {\n b = a[1] | 0\n c = a[2]\n }\n for (j = 4; j; ) h[--j] += a[j]\n }\n\n for (s = ''; j < 32; ) {\n s += ((h[j >> 3] >> ((1 ^ j++) * 4)) & 15).toString(16)\n }\n\n return s\n}\nexport default md5\n// console.log(md5('food-safety'))\n","import { textFromTerms } from './_text.js'\nimport fmts from './_fmts.js'\nimport hash from '../methods/hash.js'\n\nconst defaults = {\n text: true,\n terms: true,\n}\n\nconst opts = { case: 'none', unicode: 'some', form: 'machine', punctuation: 'some' }\n\nconst merge = function (a, b) {\n return Object.assign({}, a, b)\n}\n\nconst fns = {\n text: terms => textFromTerms(terms, { keepPunct: true }, false),\n normal: terms => textFromTerms(terms, merge(fmts.normal, { keepPunct: true }), false),\n implicit: terms => textFromTerms(terms, merge(fmts.implicit, { keepPunct: true }), false),\n\n machine: terms => textFromTerms(terms, opts, false),\n root: terms => textFromTerms(terms, merge(opts, { form: 'root' }), false),\n\n hash: terms => hash(textFromTerms(terms, { keepPunct: true }, false)),\n\n offset: terms => {\n const len = fns.text(terms).length\n return {\n index: terms[0].offset.index,\n start: terms[0].offset.start,\n length: len,\n }\n },\n terms: terms => {\n return terms.map(t => {\n const term = Object.assign({}, t)\n term.tags = Array.from(t.tags)\n return term\n })\n },\n confidence: (_terms, view, i) => view.eq(i).confidence(),\n syllables: (_terms, view, i) => view.eq(i).syllables(),\n sentence: (_terms, view, i) => view.eq(i).fullSentence().text(),\n dirty: terms => terms.some(t => t.dirty === true),\n}\nfns.sentences = fns.sentence\nfns.clean = fns.normal\nfns.reduced = fns.root\n\nconst toJSON = function (view, option) {\n option = option || {}\n if (typeof option === 'string') {\n option = {}\n }\n option = Object.assign({}, defaults, option)\n // run any necessary upfront steps\n if (option.offset) {\n view.compute('offset')\n }\n return view.docs.map((terms, i) => {\n const res = {}\n Object.keys(option).forEach(k => {\n if (option[k] && fns[k]) {\n res[k] = fns[k](terms, view, i)\n }\n })\n return res\n })\n}\n\nconst methods = {\n /** return data */\n json: function (n) {\n const res = toJSON(this, n)\n if (typeof n === 'number') {\n return res[n]\n }\n return res\n },\n}\nmethods.data = methods.json\nexport default methods\n","const isClientSide = () => typeof window !== 'undefined' && window.document\n\n//output some helpful stuff to the console\nconst debug = function (fmt) {\n const debugMethods = this.methods.one.debug || {}\n // see if method name exists\n if (fmt && debugMethods.hasOwnProperty(fmt)) {\n debugMethods[fmt](this)\n return this\n }\n // log default client-side view\n if (isClientSide()) {\n debugMethods.clientSide(this)\n return this\n }\n // else, show regular server-side tags view\n debugMethods.tags(this)\n return this\n}\nexport default debug\n","const toText = function (term) {\n const pre = term.pre || ''\n const post = term.post || ''\n return pre + term.text + post\n}\n\nconst findStarts = function (doc, obj) {\n const starts = {}\n Object.keys(obj).forEach(reg => {\n const m = doc.match(reg)\n m.fullPointer.forEach(a => {\n starts[a[3]] = { fn: obj[reg], end: a[2] }\n })\n })\n return starts\n}\n\nconst wrap = function (doc, obj) {\n // index ids to highlight\n const starts = findStarts(doc, obj)\n let text = ''\n doc.docs.forEach((terms, n) => {\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n // do a span tag\n if (starts.hasOwnProperty(t.id)) {\n const { fn, end } = starts[t.id]\n const m = doc.update([[n, i, end]])\n text += terms[i].pre || ''\n text += fn(m)\n i = end - 1\n text += terms[i].post || ''\n } else {\n text += toText(t)\n }\n }\n })\n return text\n}\nexport default wrap","import debug from './debug.js'\nimport wrap from './wrap.js'\nimport hash from '../methods/hash.js'\n\nconst isObject = val => {\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\n// sort by frequency\nconst topk = function (arr) {\n const obj = {}\n arr.forEach(a => {\n obj[a] = obj[a] || 0\n obj[a] += 1\n })\n const res = Object.keys(obj).map(k => {\n return { normal: k, count: obj[k] }\n })\n return res.sort((a, b) => (a.count > b.count ? -1 : 0))\n}\n\n/** some named output formats */\nconst out = function (method) {\n // support custom outputs\n if (isObject(method)) {\n return wrap(this, method)\n }\n // text out formats\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'root') {\n return this.text('root')\n }\n if (method === 'machine' || method === 'reduced') {\n return this.text('machine')\n }\n if (method === 'hash' || method === 'md5') {\n return hash(this.text())\n }\n\n // json data formats\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n this.compute('offset')\n return this.json({ offset: true })\n }\n if (method === 'array') {\n const arr = this.docs.map(terms => {\n return terms\n .reduce((str, t) => {\n return str + t.pre + t.text + t.post\n }, '')\n .trim()\n })\n return arr.filter(str => str)\n }\n // return terms sorted by frequency\n if (method === 'freq' || method === 'frequency' || method === 'topk') {\n return topk(this.json({ normal: true }).map(o => o.normal))\n }\n\n // some handy ad-hoc outputs\n if (method === 'terms') {\n let list = []\n this.docs.forEach(terms => {\n let words = terms.map(t => t.text)\n words = words.filter(t => t)\n list = list.concat(words)\n })\n return list\n }\n if (method === 'tags') {\n return this.docs.map(terms => {\n return terms.reduce((h, t) => {\n h[t.implicit || t.normal] = Array.from(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n return this.debug() //allow\n }\n return this.text()\n}\n\nconst methods = {\n /** */\n debug: debug,\n /** */\n out,\n /** */\n wrap: function (obj) {\n return wrap(this, obj)\n },\n}\n\nexport default methods\n","import { textFromDoc } from './_text.js'\nimport fmts from './_fmts.js'\n\nconst isObject = val => {\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\nexport default {\n /** */\n text: function (fmt) {\n let opts = {}\n if (fmt && typeof fmt === 'string' && fmts.hasOwnProperty(fmt)) {\n opts = Object.assign({}, fmts[fmt])\n } else if (fmt && isObject(fmt)) {\n opts = Object.assign({}, fmt) //todo: fixme\n }\n // is it a full document?\n if (opts.keepSpace === undefined && !this.isFull()) {\n //\n opts.keepSpace = false\n }\n if (opts.keepEndPunct === undefined && this.pointer) {\n const ptr = this.pointer[0]\n if (ptr && ptr[1]) {\n opts.keepEndPunct = false\n } else {\n opts.keepEndPunct = true\n }\n }\n // set defaults\n if (opts.keepPunct === undefined) {\n opts.keepPunct = true\n }\n if (opts.keepSpace === undefined) {\n opts.keepSpace = true\n }\n return textFromDoc(this.docs, opts)\n },\n}\n","import html from './html.js'\nimport json from './json.js'\nimport out from './out.js'\nimport text from './text.js'\n\nconst methods = Object.assign({}, out, text, json, html)\n\nconst addAPI = function (View) {\n Object.assign(View.prototype, methods)\n}\nexport default addAPI\n","/* eslint-disable no-console */\nconst logClientSide = function (view) {\n console.log('%c -=-=- ', 'background-color:#6699cc;')\n view.forEach(m => {\n console.groupCollapsed(m.text())\n const terms = m.docs[0]\n const out = terms.map(t => {\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n const tags = '[' + Array.from(t.tags).join(', ') + ']'\n return { text, tags }\n })\n console.table(out, ['text', 'tags'])\n console.groupEnd()\n })\n}\nexport default logClientSide\n","// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\n//cheaper than requiring chalk\nconst cli = {\n green: str => '\\x1b[32m' + str + reset,\n red: str => '\\x1b[31m' + str + reset,\n blue: str => '\\x1b[34m' + str + reset,\n magenta: str => '\\x1b[35m' + str + reset,\n cyan: str => '\\x1b[36m' + str + reset,\n yellow: str => '\\x1b[33m' + str + reset,\n black: str => '\\x1b[30m' + str + reset,\n dim: str => '\\x1b[2m' + str + reset,\n i: str => '\\x1b[3m' + str + reset,\n}\nexport default cli\n","/* eslint-disable no-console */\nimport cli from './_color.js'\n\nconst tagString = function (tags, model) {\n if (model.one.tagSet) {\n tags = tags.map(tag => {\n if (!model.one.tagSet.hasOwnProperty(tag)) {\n return tag\n }\n const c = model.one.tagSet[tag].color || 'blue'\n return cli[c](tag)\n })\n }\n return tags.join(', ')\n}\n\nconst showTags = function (view) {\n const { docs, model } = view\n if (docs.length === 0) {\n console.log(cli.blue('\\n ──────'))\n }\n docs.forEach(terms => {\n console.log(cli.blue('\\n ┌─────────'))\n terms.forEach(t => {\n const tags = [...(t.tags || [])]\n let text = t.text || '-'\n if (t.sense) {\n text = `{${t.normal}/${t.sense}}`\n }\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n text = cli.yellow(text)\n let word = \"'\" + text + \"'\"\n if (t.reference) {\n const str = view.update([t.reference]).text('normal')\n word += ` - ${cli.dim(cli.i('[' + str + ']'))}`\n }\n word = word.padEnd(18)\n const str = cli.blue(' │ ') + cli.i(word) + ' - ' + tagString(tags, model)\n console.log(str)\n })\n })\n console.log('\\n')\n}\nexport default showTags\n","/* eslint-disable no-console */\nimport cli from './_color.js'\n\nconst showChunks = function (view) {\n const { docs } = view\n console.log('')\n docs.forEach(terms => {\n const out = []\n terms.forEach(term => {\n if (term.chunk === 'Noun') {\n out.push(cli.blue(term.implicit || term.normal))\n } else if (term.chunk === 'Verb') {\n out.push(cli.green(term.implicit || term.normal))\n } else if (term.chunk === 'Adjective') {\n out.push(cli.yellow(term.implicit || term.normal))\n } else if (term.chunk === 'Pivot') {\n out.push(cli.red(term.implicit || term.normal))\n } else {\n out.push(term.implicit || term.normal)\n }\n })\n console.log(out.join(' '), '\\n')\n })\n console.log('\\n')\n}\nexport default showChunks\n","/* eslint-disable no-console */\nimport cli from './_color.js'\n\nconst split = (txt, offset, index) => {\n const buff = index * 9 //there are 9 new chars addded to each highlight\n const start = offset.start + buff\n const end = start + offset.length\n const pre = txt.substring(0, start)\n const mid = txt.substring(start, end)\n const post = txt.substring(end, txt.length)\n return [pre, mid, post]\n}\n\nconst spliceIn = function (txt, offset, index) {\n const parts = split(txt, offset, index)\n return `${parts[0]}${cli.blue(parts[1])}${parts[2]}`\n}\n\nconst showHighlight = function (doc) {\n if (!doc.found) {\n return\n }\n const bySentence = {}\n doc.fullPointer.forEach(ptr => {\n bySentence[ptr[0]] = bySentence[ptr[0]] || []\n bySentence[ptr[0]].push(ptr)\n })\n Object.keys(bySentence).forEach(k => {\n const full = doc.update([[Number(k)]])\n let txt = full.text()\n const matches = doc.update(bySentence[k])\n const json = matches.json({ offset: true })\n json.forEach((obj, i) => {\n txt = spliceIn(txt, obj.offset, i)\n })\n console.log(txt)\n })\n console.log('\\n')\n}\nexport default showHighlight\n","import clientSide from './client-side.js'\nimport tags from './tags.js'\nimport chunks from './chunks.js'\nimport highlight from './highlight.js'\n\nconst debug = {\n tags,\n clientSide,\n chunks,\n highlight,\n}\nexport default debug\n","import api from './api/index.js'\nimport { debug, hash } from './methods/index.js'\n\nexport default {\n api,\n methods: {\n one: {\n hash,\n debug,\n },\n },\n}\n","// do the pointers intersect?\nexport const doesOverlap = function (a, b) {\n if (a[0] !== b[0]) {\n return false\n }\n const [, startA, endA] = a\n const [, startB, endB] = b\n // [a,a,a,-,-,-,]\n // [-,-,b,b,b,-,]\n if (startA <= startB && endA > startB) {\n return true\n }\n // [-,-,-,a,a,-,]\n // [-,-,b,b,b,-,]\n if (startB <= startA && endB > startA) {\n return true\n }\n return false\n}\n\n// get widest min/max\nexport const getExtent = function (ptrs) {\n let min = ptrs[0][1]\n let max = ptrs[0][2]\n ptrs.forEach(ptr => {\n if (ptr[1] < min) {\n min = ptr[1]\n }\n if (ptr[2] > max) {\n max = ptr[2]\n }\n })\n return [ptrs[0][0], min, max]\n}\n\n// collect pointers by sentence number\nexport const indexN = function (ptrs) {\n const byN = {}\n ptrs.forEach(ref => {\n byN[ref[0]] = byN[ref[0]] || []\n byN[ref[0]].push(ref)\n })\n return byN\n}\n\n// remove exact duplicates\nexport const uniquePtrs = function (arr) {\n const obj = {}\n for (let i = 0; i < arr.length; i += 1) {\n obj[arr[i].join(',')] = arr[i]\n }\n return Object.values(obj)\n}\n\n// a before b\n// console.log(doesOverlap([0, 0, 4], [0, 2, 5]))\n// // b before a\n// console.log(doesOverlap([0, 3, 4], [0, 1, 5]))\n// // disjoint\n// console.log(doesOverlap([0, 0, 3], [0, 4, 5]))\n// neighbours\n// console.log(doesOverlap([0, 1, 3], [0, 3, 5]))\n// console.log(doesOverlap([0, 3, 5], [0, 1, 3]))\n\n// console.log(\n// getExtent([\n// [0, 3, 4],\n// [0, 4, 5],\n// [0, 1, 2],\n// ])\n// )\n","import { indexN } from './_lib.js'\n\n// split a pointer, by match pointer\nconst pivotBy = function (full, m) {\n const [n, start] = full\n const mStart = m[1]\n const mEnd = m[2]\n const res = {}\n // is there space before the match?\n if (start < mStart) {\n const end = mStart < full[2] ? mStart : full[2] // find closest end-point\n res.before = [n, start, end] //before segment\n }\n res.match = m\n // is there space after the match?\n if (full[2] > mEnd) {\n res.after = [n, mEnd, full[2]] //after segment\n }\n return res\n}\n\nconst doesMatch = function (full, m) {\n return full[1] <= m[1] && m[2] <= full[2]\n}\n\nconst splitAll = function (full, m) {\n const byN = indexN(m)\n const res = []\n full.forEach(ptr => {\n const [n] = ptr\n let matches = byN[n] || []\n matches = matches.filter(p => doesMatch(ptr, p))\n if (matches.length === 0) {\n res.push({ passthrough: ptr })\n return\n }\n // ensure matches are in-order\n matches = matches.sort((a, b) => a[1] - b[1])\n // start splitting our left-to-right\n let carry = ptr\n matches.forEach((p, i) => {\n const found = pivotBy(carry, p)\n // last one\n if (!matches[i + 1]) {\n res.push(found)\n } else {\n res.push({ before: found.before, match: found.match })\n if (found.after) {\n carry = found.after\n }\n }\n })\n })\n return res\n}\n\nexport default splitAll\n","const max = 20\n\n// sweep-around looking for our start term uuid\nconst blindSweep = function (id, doc, n) {\n for (let i = 0; i < max; i += 1) {\n // look up a sentence\n if (doc[n - i]) {\n const index = doc[n - i].findIndex(term => term.id === id)\n if (index !== -1) {\n return [n - i, index]\n }\n }\n // look down a sentence\n if (doc[n + i]) {\n const index = doc[n + i].findIndex(term => term.id === id)\n if (index !== -1) {\n return [n + i, index]\n }\n }\n }\n return null\n}\n\nconst repairEnding = function (ptr, document) {\n const [n, start, , , endId] = ptr\n const terms = document[n]\n // look for end-id\n const newEnd = terms.findIndex(t => t.id === endId)\n if (newEnd === -1) {\n // if end-term wasn't found, so go all the way to the end\n ptr[2] = document[n].length\n ptr[4] = terms.length ? terms[terms.length - 1].id : null\n } else {\n ptr[2] = newEnd // repair ending pointer\n }\n return document[n].slice(start, ptr[2] + 1)\n}\n\n/** return a subset of the document, from a pointer */\nconst getDoc = function (ptrs, document) {\n let doc = []\n ptrs.forEach((ptr, i) => {\n if (!ptr) {\n return\n }\n // eslint-disable-next-line prefer-const\n let [n, start, end, id, endId] = ptr //parsePointer(ptr)\n let terms = document[n] || []\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = terms.length\n }\n if (id && (!terms[start] || terms[start].id !== id)) {\n // console.log(' repairing pointer...')\n const wild = blindSweep(id, document, n)\n if (wild !== null) {\n const len = end - start\n terms = document[wild[0]].slice(wild[1], wild[1] + len)\n // actually change the pointer\n const startId = terms[0] ? terms[0].id : null\n ptrs[i] = [wild[0], wild[1], wild[1] + len, startId]\n }\n } else {\n terms = terms.slice(start, end)\n }\n if (terms.length === 0) {\n return\n }\n if (start === end) {\n return\n }\n // test end-id, if it exists\n if (endId && terms[terms.length - 1].id !== endId) {\n terms = repairEnding(ptr, document)\n }\n // otherwise, looks good!\n doc.push(terms)\n })\n doc = doc.filter(a => a.length > 0)\n return doc\n}\nexport default getDoc","import { indexN } from '../api/lib/_lib.js'\nimport splitAll from '../api/lib/split.js'\nimport getDoc from './getDoc.js'\n\n// flat list of terms from nested document\nconst termList = function (docs) {\n const arr = []\n for (let i = 0; i < docs.length; i += 1) {\n for (let t = 0; t < docs[i].length; t += 1) {\n arr.push(docs[i][t])\n }\n }\n return arr\n}\n\nexport default {\n one: {\n termList,\n getDoc,\n pointer: {\n indexN,\n splitAll,\n }\n },\n}\n","import { doesOverlap, getExtent, indexN, uniquePtrs } from './_lib.js'\n\n// a union is a + b, minus duplicates\nconst getUnion = function (a, b) {\n const both = a.concat(b)\n const byN = indexN(both)\n let res = []\n both.forEach(ptr => {\n const [n] = ptr\n if (byN[n].length === 1) {\n // we're alone on this sentence, so we're good\n res.push(ptr)\n return\n }\n // there may be overlaps\n const hmm = byN[n].filter(m => doesOverlap(ptr, m))\n hmm.push(ptr)\n const range = getExtent(hmm)\n res.push(range)\n })\n res = uniquePtrs(res)\n return res\n}\nexport default getUnion\n\n// two disjoint\n// console.log(getUnion([[1, 3, 4]], [[0, 1, 2]]))\n// two disjoint\n// console.log(getUnion([[0, 3, 4]], [[0, 1, 2]]))\n// overlap-plus\n// console.log(getUnion([[0, 1, 4]], [[0, 2, 6]]))\n// overlap\n// console.log(getUnion([[0, 1, 4]], [[0, 2, 3]]))\n// neighbours\n// console.log(getUnion([[0, 1, 3]], [[0, 3, 5]]))\n","import splitAll from './split.js'\n\nconst subtract = function (refs, not) {\n const res = []\n const found = splitAll(refs, not)\n found.forEach(o => {\n if (o.passthrough) {\n res.push(o.passthrough)\n }\n if (o.before) {\n res.push(o.before)\n }\n if (o.after) {\n res.push(o.after)\n }\n })\n return res\n}\nexport default subtract\n\n// console.log(subtract([[0, 0, 2]], [[0, 0, 1]]))\n// console.log(subtract([[0, 0, 2]], [[0, 1, 2]]))\n","import { doesOverlap, indexN } from './_lib.js'\n\n// [a,a,a,a,-,-,]\n// [-,-,b,b,b,-,]\n// [-,-,x,x,-,-,]\nconst intersection = function (a, b) {\n // find the latest-start\n const start = a[1] < b[1] ? b[1] : a[1]\n // find the earliest-end\n const end = a[2] > b[2] ? b[2] : a[2]\n // does it form a valid pointer?\n if (start < end) {\n return [a[0], start, end]\n }\n return null\n}\n\nconst getIntersection = function (a, b) {\n const byN = indexN(b)\n const res = []\n a.forEach(ptr => {\n let hmm = byN[ptr[0]] || []\n hmm = hmm.filter(p => doesOverlap(ptr, p))\n // no sentence-pairs, so no intersection\n if (hmm.length === 0) {\n return\n }\n hmm.forEach(h => {\n const overlap = intersection(ptr, h)\n if (overlap) {\n res.push(overlap)\n }\n })\n })\n return res\n}\nexport default getIntersection\n\n// console.log(getIntersection([[0, 1, 3]], [[0, 2, 4]]))\n","import getUnion from './lib/union.js'\nimport getDifference from './lib/difference.js'\nimport getIntersection from './lib/intersection.js'\n\nconst isArray = function (arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nconst getDoc = (m, view) => {\n if (typeof m === 'string' || isArray(m)) {\n return view.match(m)\n }\n if (!m) {\n return view.none()\n }\n // support pre-parsed reg object\n return m\n}\n\n// 'harden' our json pointers, again\nconst addIds = function (ptrs, docs) {\n return ptrs.map(ptr => {\n const [n, start] = ptr\n if (docs[n] && docs[n][start]) {\n ptr[3] = docs[n][start].id\n }\n return ptr\n })\n}\n\nconst methods = {}\n\n// all parts, minus duplicates\nmethods.union = function (m) {\n m = getDoc(m, this)\n let ptrs = getUnion(this.fullPointer, m.fullPointer)\n ptrs = addIds(ptrs, this.document)\n return this.toView(ptrs)\n}\nmethods.and = methods.union\n\n// only parts they both have\nmethods.intersection = function (m) {\n m = getDoc(m, this)\n let ptrs = getIntersection(this.fullPointer, m.fullPointer)\n ptrs = addIds(ptrs, this.document)\n return this.toView(ptrs)\n}\n\n// only parts of a that b does not have\nmethods.not = function (m) {\n m = getDoc(m, this)\n let ptrs = getDifference(this.fullPointer, m.fullPointer)\n ptrs = addIds(ptrs, this.document)\n return this.toView(ptrs)\n}\nmethods.difference = methods.not\n\n// get opposite of a match\nmethods.complement = function () {\n const doc = this.all()\n let ptrs = getDifference(doc.fullPointer, this.fullPointer)\n ptrs = addIds(ptrs, this.document)\n return this.toView(ptrs)\n}\n\n// remove overlaps\nmethods.settle = function () {\n let ptrs = this.fullPointer\n ptrs.forEach(ptr => {\n ptrs = getUnion(ptrs, [ptr])\n })\n ptrs = addIds(ptrs, this.document)\n return this.update(ptrs)\n}\n\nconst addAPI = function (View) {\n // add set/intersection/union\n Object.assign(View.prototype, methods)\n}\nexport default addAPI\n","import methods from './methods/index.js'\nimport api from './api/index.js'\n\nexport default {\n methods,\n api,\n}\n","export default {\n // compile a list of matches into a match-net\n buildNet: function (matches) {\n const methods = this.methods()\n const net = methods.one.buildNet(matches, this.world())\n net.isNet = true\n return net\n }\n}","const api = function (View) {\n\n /** speedy match a sequence of matches */\n View.prototype.sweep = function (net, opts = {}) {\n const { world, docs } = this\n const { methods } = world\n let found = methods.one.bulkMatch(docs, net, this.methods, opts)\n\n // apply any changes\n if (opts.tagger !== false) {\n methods.one.bulkTagger(found, docs, this.world)\n }\n // fix the pointers\n // collect all found results into a View\n found = found.map(o => {\n const ptr = o.pointer\n const term = docs[ptr[0]][ptr[1]]\n const len = ptr[2] - ptr[1]\n if (term.index) {\n o.pointer = [\n term.index[0],\n term.index[1],\n ptr[1] + len\n ]\n }\n return o\n })\n const ptrs = found.map(o => o.pointer)\n // cleanup results a bit\n found = found.map(obj => {\n obj.view = this.update([obj.pointer])\n delete obj.regs\n delete obj.needs\n delete obj.pointer\n delete obj._expanded\n return obj\n })\n return {\n view: this.update(ptrs),\n found\n }\n }\n\n}\nexport default api","// extract the clear needs for an individual match token\nconst getTokenNeeds = function (reg) {\n // negatives can't be cached\n if (reg.optional === true || reg.negative === true) {\n return null\n }\n if (reg.tag) {\n return '#' + reg.tag\n }\n if (reg.word) {\n return reg.word\n }\n if (reg.switch) {\n return `%${reg.switch}%`\n }\n return null\n}\n\nconst getNeeds = function (regs) {\n const needs = []\n regs.forEach(reg => {\n needs.push(getTokenNeeds(reg))\n // support AND (foo && tag)\n if (reg.operator === 'and' && reg.choices) {\n reg.choices.forEach(oneSide => {\n oneSide.forEach(r => {\n needs.push(getTokenNeeds(r))\n })\n })\n }\n })\n return needs.filter(str => str)\n}\n\nconst getWants = function (regs) {\n const wants = []\n let count = 0\n regs.forEach(reg => {\n if (reg.operator === 'or' && !reg.optional && !reg.negative) {\n // add fast-or terms\n if (reg.fastOr) {\n Array.from(reg.fastOr).forEach(w => {\n wants.push(w)\n })\n }\n // add slow-or\n if (reg.choices) {\n reg.choices.forEach(rs => {\n rs.forEach(r => {\n const n = getTokenNeeds(r)\n if (n) {\n wants.push(n)\n }\n })\n })\n }\n count += 1\n }\n })\n return { wants, count }\n}\n\nconst parse = function (matches, world) {\n const parseMatch = world.methods.one.parseMatch\n matches.forEach(obj => {\n obj.regs = parseMatch(obj.match, {}, world)\n // wrap these ifNo properties into an array\n if (typeof obj.ifNo === 'string') {\n obj.ifNo = [obj.ifNo]\n }\n if (obj.notIf) {\n obj.notIf = parseMatch(obj.notIf, {}, world)\n }\n // cache any requirements up-front \n obj.needs = getNeeds(obj.regs)\n const { wants, count } = getWants(obj.regs)\n obj.wants = wants\n obj.minWant = count\n // get rid of tiny sentences\n obj.minWords = obj.regs.filter(o => !o.optional).length\n })\n return matches\n}\n\nexport default parse\n","import parse from './01-parse.js'\n\n// do some indexing on the list of matches\nconst buildNet = function (matches, world) {\n // turn match-syntax into json\n matches = parse(matches, world)\n\n // collect by wants and needs\n const hooks = {}\n matches.forEach(obj => {\n // add needs\n obj.needs.forEach(str => {\n hooks[str] = Array.isArray(hooks[str]) ? hooks[str] : []\n hooks[str].push(obj)\n })\n // add wants\n obj.wants.forEach(str => {\n hooks[str] = Array.isArray(hooks[str]) ? hooks[str] : []\n hooks[str].push(obj)\n })\n })\n // remove duplicates\n Object.keys(hooks).forEach(k => {\n const already = {}\n hooks[k] = hooks[k].filter(obj => {\n if (typeof already[obj.match] === 'boolean') {\n return false\n }\n already[obj.match] = true\n return true\n })\n })\n\n // keep all un-cacheable matches (those with no needs) \n const always = matches.filter(o => o.needs.length === 0 && o.wants.length === 0)\n return {\n hooks,\n always\n }\n}\n\nexport default buildNet\n","// for each cached-sentence, find a list of possible matches\nconst getHooks = function (docCaches, hooks) {\n return docCaches.map((set, i) => {\n let maybe = []\n Object.keys(hooks).forEach(k => {\n if (docCaches[i].has(k)) {\n maybe = maybe.concat(hooks[k])\n }\n })\n // remove duplicates\n const already = {}\n maybe = maybe.filter(m => {\n if (typeof already[m.match] === 'boolean') {\n return false\n }\n already[m.match] = true\n return true\n })\n return maybe\n })\n}\n\nexport default getHooks\n","// filter-down list of maybe-matches\nconst localTrim = function (maybeList, docCache) {\n return maybeList.map((list, n) => {\n const haves = docCache[n]\n // ensure all stated-needs of the match are met\n list = list.filter(obj => {\n return obj.needs.every(need => haves.has(need))\n })\n // ensure nothing matches in our 'ifNo' property\n list = list.filter(obj => {\n if (obj.ifNo !== undefined && obj.ifNo.some(no => haves.has(no)) === true) {\n return false\n }\n return true\n })\n // ensure atleast one(?) of the wants is found\n list = list.filter(obj => {\n if (obj.wants.length === 0) {\n return true\n }\n // ensure there's one cache-hit\n const found = obj.wants.filter(str => haves.has(str)).length\n return found >= obj.minWant\n })\n return list\n })\n}\nexport default localTrim\n","// finally,\n// actually run these match-statements on the terms\nconst runMatch = function (maybeList, document, docCache, methods, opts) {\n const results = []\n for (let n = 0; n < maybeList.length; n += 1) {\n for (let i = 0; i < maybeList[n].length; i += 1) {\n const m = maybeList[n][i]\n // ok, actually do the work.\n const res = methods.one.match([document[n]], m)\n // found something.\n if (res.ptrs.length > 0) {\n res.ptrs.forEach(ptr => {\n ptr[0] = n // fix the sentence pointer\n // check ifNo\n // if (m.ifNo !== undefined) {\n // let terms = document[n].slice(ptr[1], ptr[2])\n // for (let k = 0; k < m.ifNo.length; k += 1) {\n // const no = m.ifNo[k]\n // // quick-check cache\n // if (docCache[n].has(no)) {\n // if (no.startsWith('#')) {\n // let tag = no.replace(/^#/, '')\n // if (terms.find(t => t.tags.has(tag))) {\n // console.log('+' + tag)\n // return\n // }\n // } else if (terms.find(t => t.normal === no || t.tags.has(no))) {\n // console.log('+' + no)\n // return\n // }\n // }\n // }\n // }\n const todo = Object.assign({}, m, { pointer: ptr })\n if (m.unTag !== undefined) {\n todo.unTag = m.unTag\n }\n results.push(todo)\n })\n //ok cool, can we stop early?\n if (opts.matchOne === true) {\n return [results[0]]\n }\n }\n }\n }\n return results\n}\nexport default runMatch\n","import getHooks from './01-getHooks.js'\nimport trimDown from './02-trim-down.js'\n// import getWants from './03-get-wants.js'\nimport runMatch from './04-runMatch.js'\n\n\nconst tooSmall = function (maybeList, document) {\n return maybeList.map((arr, i) => {\n const termCount = document[i].length\n arr = arr.filter(o => {\n return termCount >= o.minWords\n })\n return arr\n })\n}\n\nconst sweep = function (document, net, methods, opts = {}) {\n // find suitable matches to attempt, on each sentence\n const docCache = methods.one.cacheDoc(document)\n // collect possible matches for this document\n let maybeList = getHooks(docCache, net.hooks)\n // ensure all defined needs are met for each match\n maybeList = trimDown(maybeList, docCache, document)\n // add unchacheable matches to each sentence's todo-list\n if (net.always.length > 0) {\n maybeList = maybeList.map(arr => arr.concat(net.always))\n }\n // if we don't have enough words\n maybeList = tooSmall(maybeList, document)\n\n // now actually run the matches\n const results = runMatch(maybeList, document, docCache, methods, opts)\n // console.dir(results, { depth: 5 })\n return results\n}\nexport default sweep\n","// is this tag consistent with the tags they already have?\nconst canBe = function (terms, tag, model) {\n const tagSet = model.one.tagSet\n if (!tagSet.hasOwnProperty(tag)) {\n return true\n }\n const not = tagSet[tag].not || []\n for (let i = 0; i < terms.length; i += 1) {\n const term = terms[i]\n for (let k = 0; k < not.length; k += 1) {\n if (term.tags.has(not[k]) === true) {\n return false //found a tag conflict - bail!\n }\n }\n }\n return true\n}\nexport default canBe\n","import canBe from './canBe.js'\n\nconst tagger = function (list, document, world) {\n const { model, methods } = world\n const { getDoc, setTag, unTag } = methods.one\n const looksPlural = methods.two.looksPlural\n if (list.length === 0) {\n return list\n }\n // some logging for debugging\n const env = typeof process === 'undefined' || !process.env ? self.env || {} : process.env\n if (env.DEBUG_TAGS) {\n console.log(`\\n\\n \\x1b[32m→ ${list.length} post-tagger:\\x1b[0m`) //eslint-disable-line\n }\n return list.map(todo => {\n if (!todo.tag && !todo.chunk && !todo.unTag) {\n return\n }\n const reason = todo.reason || todo.match\n const terms = getDoc([todo.pointer], document)[0]\n // handle 'safe' tag\n if (todo.safe === true) {\n // check for conflicting tags\n if (canBe(terms, todo.tag, model) === false) {\n return\n }\n // dont tag half of a hyphenated word\n if (terms[terms.length - 1].post === '-') {\n return\n }\n }\n if (todo.tag !== undefined) {\n setTag(terms, todo.tag, world, todo.safe, `[post] '${reason}'`)\n // quick and dirty plural tagger 😕\n if (todo.tag === 'Noun' && looksPlural) {\n const term = terms[terms.length - 1]\n if (looksPlural(term.text)) {\n setTag([term], 'Plural', world, todo.safe, 'quick-plural')\n } else {\n setTag([term], 'Singular', world, todo.safe, 'quick-singular')\n }\n }\n // allow freezing this match, too\n if (todo.freeze === true) {\n terms.forEach(term => (term.frozen = true))\n }\n }\n if (todo.unTag !== undefined) {\n unTag(terms, todo.unTag, world, todo.safe, reason)\n }\n // allow setting chunks, too\n if (todo.chunk) {\n terms.forEach(t => (t.chunk = todo.chunk))\n }\n })\n}\nexport default tagger\n","import buildNet from './buildNet/index.js'\nimport bulkMatch from './sweep/index.js'\nimport bulkTagger from './tagger/index.js'\n\nexport default {\n buildNet,\n bulkMatch,\n bulkTagger\n}","import lib from './lib.js'\nimport api from './api.js'\nimport methods from './methods/index.js'\n\nexport default {\n lib,\n api,\n methods: {\n one: methods,\n }\n}","const isMulti = / /\n\nconst addChunk = function (term, tag) {\n if (tag === 'Noun') {\n term.chunk = tag\n }\n if (tag === 'Verb') {\n term.chunk = tag\n }\n}\n\nconst tagTerm = function (term, tag, tagSet, isSafe) {\n // does it already have this tag?\n if (term.tags.has(tag) === true) {\n return null\n }\n // allow this shorthand in multiple-tag strings\n if (tag === '.') {\n return null\n }\n // don't overwrite any tags, if term is frozen\n if (term.frozen === true) {\n isSafe = true\n }\n // for known tags, do logical dependencies first\n const known = tagSet[tag]\n if (known) {\n // first, we remove any conflicting tags\n if (known.not && known.not.length > 0) {\n for (let o = 0; o < known.not.length; o += 1) {\n // if we're in tagSafe, skip this term.\n if (isSafe === true && term.tags.has(known.not[o])) {\n return null\n }\n term.tags.delete(known.not[o])\n }\n }\n // add parent tags\n if (known.parents && known.parents.length > 0) {\n for (let o = 0; o < known.parents.length; o += 1) {\n term.tags.add(known.parents[o])\n addChunk(term, known.parents[o])\n }\n }\n }\n // finally, add our tag\n term.tags.add(tag)\n // now it's dirty?\n term.dirty = true\n // add a chunk too, if it's easy\n addChunk(term, tag)\n return true\n}\n\n// support '#Noun . #Adjective' syntax\nconst multiTag = function (terms, tagString, tagSet, isSafe) {\n const tags = tagString.split(isMulti)\n terms.forEach((term, i) => {\n let tag = tags[i]\n if (tag) {\n tag = tag.replace(/^#/, '')\n tagTerm(term, tag, tagSet, isSafe)\n }\n })\n}\n\nconst isArray = function (arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n// verbose-mode tagger debuging\nconst log = (terms, tag, reason = '') => {\n const yellow = str => '\\x1b[33m\\x1b[3m' + str + '\\x1b[0m'\n const i = str => '\\x1b[3m' + str + '\\x1b[0m'\n const word = terms\n .map(t => {\n return t.text || '[' + t.implicit + ']'\n })\n .join(' ')\n if (typeof tag !== 'string' && tag.length > 2) {\n tag = tag.slice(0, 2).join(', #') + ' +' //truncate the list of tags\n }\n tag = typeof tag !== 'string' ? tag.join(', #') : tag\n console.log(` ${yellow(word).padEnd(24)} \\x1b[32m→\\x1b[0m #${tag.padEnd(22)} ${i(reason)}`) // eslint-disable-line\n}\n\n// add a tag to all these terms\nconst setTag = function (terms, tag, world = {}, isSafe, reason) {\n const tagSet = world.model.one.tagSet || {}\n if (!tag) {\n return\n }\n // some logging for debugging\n const env = typeof process === 'undefined' || !process.env ? self.env || {} : process.env\n if (env && env.DEBUG_TAGS) {\n log(terms, tag, reason)\n }\n if (isArray(tag) === true) {\n tag.forEach(tg => setTag(terms, tg, world, isSafe))\n return\n }\n if (typeof tag !== 'string') {\n console.warn(`compromise: Invalid tag '${tag}'`) // eslint-disable-line\n return\n }\n tag = tag.trim()\n // support '#Noun . #Adjective' syntax\n if (isMulti.test(tag)) {\n multiTag(terms, tag, tagSet, isSafe)\n return\n }\n tag = tag.replace(/^#/, '')\n // let set = false\n for (let i = 0; i < terms.length; i += 1) {\n tagTerm(terms[i], tag, tagSet, isSafe)\n }\n}\nexport default setTag\n","// remove this tag, and its children, from these terms\nconst unTag = function (terms, tag, tagSet) {\n tag = tag.trim().replace(/^#/, '')\n for (let i = 0; i < terms.length; i += 1) {\n const term = terms[i]\n // don't untag anything if term is frozen\n if (term.frozen === true) {\n continue\n }\n // support clearing all tags, with '*'\n if (tag === '*') {\n term.tags.clear()\n continue\n }\n // for known tags, do logical dependencies first\n const known = tagSet[tag]\n // removing #Verb should also remove #PastTense\n if (known && known.children.length > 0) {\n for (let o = 0; o < known.children.length; o += 1) {\n term.tags.delete(known.children[o])\n }\n }\n term.tags.delete(tag)\n }\n}\nexport default unTag\n","// quick check if this tag will require any untagging\nconst canBe = function (term, tag, tagSet) {\n if (!tagSet.hasOwnProperty(tag)) {\n return true // everything can be an unknown tag\n }\n const not = tagSet[tag].not || []\n for (let i = 0; i < not.length; i += 1) {\n if (term.tags.has(not[i])) {\n return false\n }\n }\n return true\n}\nexport default canBe\n","const e=function(e){return e.children=e.children||[],e._cache=e._cache||{},e.props=e.props||{},e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],e},t=/^ *(#|\\/\\/)/,n=function(t){let n=t.trim().split(/->/),r=[];n.forEach((t=>{r=r.concat(function(t){if(!(t=t.trim()))return null;if(/^\\[/.test(t)&&/\\]$/.test(t)){let n=(t=(t=t.replace(/^\\[/,\"\")).replace(/\\]$/,\"\")).split(/,/);return n=n.map((e=>e.trim())).filter((e=>e)),n=n.map((t=>e({id:t}))),n}return[e({id:t})]}(t))})),r=r.filter((e=>e));let i=r[0];for(let e=1;e<r.length;e+=1)i.children.push(r[e]),i=r[e];return r[0]},r=(e,t)=>{let n=[],r=[e];for(;r.length>0;){let e=r.pop();n.push(e),e.children&&e.children.forEach((n=>{t&&t(e,n),r.push(n)}))}return n},i=e=>\"[object Array]\"===Object.prototype.toString.call(e),c=e=>(e=e||\"\").trim(),s=function(c=[]){return\"string\"==typeof c?function(r){let i=r.split(/\\r?\\n/),c=[];i.forEach((e=>{if(!e.trim()||t.test(e))return;let r=(e=>{const t=/^( {2}|\\t)/;let n=0;for(;t.test(e);)e=e.replace(t,\"\"),n+=1;return n})(e);c.push({indent:r,node:n(e)})}));let s=function(e){let t={children:[]};return e.forEach(((n,r)=>{0===n.indent?t.children=t.children.concat(n.node):e[r-1]&&function(e,t){let n=e[t].indent;for(;t>=0;t-=1)if(e[t].indent<n)return e[t];return e[0]}(e,r).node.children.push(n.node)})),t}(c);return s=e(s),s}(c):i(c)?function(t){let n={};t.forEach((e=>{n[e.id]=e}));let r=e({});return t.forEach((t=>{if((t=e(t)).parent)if(n.hasOwnProperty(t.parent)){let e=n[t.parent];delete t.parent,e.children.push(t)}else console.warn(`[Grad] - missing node '${t.parent}'`);else r.children.push(t)})),r}(c):(r(s=c).forEach(e),s);var s},h=e=>\"\u001b[31m\"+e+\"\u001b[0m\",o=e=>\"\u001b[2m\"+e+\"\u001b[0m\",l=function(e,t){let n=\"-> \";t&&(n=o(\"→ \"));let i=\"\";return r(e).forEach(((e,r)=>{let c=e.id||\"\";if(t&&(c=h(c)),0===r&&!e.id)return;let s=e._cache.parents.length;i+=\" \".repeat(s)+n+c+\"\\n\"})),i},a=function(e){let t=r(e);t.forEach((e=>{delete(e=Object.assign({},e)).children}));let n=t[0];return n&&!n.id&&0===Object.keys(n.props).length&&t.shift(),t},p={text:l,txt:l,array:a,flat:a},d=function(e,t){return\"nested\"===t||\"json\"===t?e:\"debug\"===t?(console.log(l(e,!0)),null):p.hasOwnProperty(t)?p[t](e):e},u=e=>{r(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],t._cache.parents=e._cache.parents.concat([e.id]))}))},f=(e,t)=>(Object.keys(t).forEach((n=>{if(t[n]instanceof Set){let r=e[n]||new Set;e[n]=new Set([...r,...t[n]])}else{if((e=>e&&\"object\"==typeof e&&!Array.isArray(e))(t[n])){let r=e[n]||{};e[n]=Object.assign({},t[n],r)}else i(t[n])?e[n]=t[n].concat(e[n]||[]):void 0===e[n]&&(e[n]=t[n])}})),e),j=/\\//;class g{constructor(e={}){Object.defineProperty(this,\"json\",{enumerable:!1,value:e,writable:!0})}get children(){return this.json.children}get id(){return this.json.id}get found(){return this.json.id||this.json.children.length>0}props(e={}){let t=this.json.props||{};return\"string\"==typeof e&&(t[e]=!0),this.json.props=Object.assign(t,e),this}get(t){if(t=c(t),!j.test(t)){let e=this.json.children.find((e=>e.id===t));return new g(e)}let n=((e,t)=>{let n=(e=>\"string\"!=typeof e?e:(e=e.replace(/^\\//,\"\")).split(/\\//))(t=t||\"\");for(let t=0;t<n.length;t+=1){let r=e.children.find((e=>e.id===n[t]));if(!r)return null;e=r}return e})(this.json,t)||e({});return new g(n)}add(t,n={}){if(i(t))return t.forEach((e=>this.add(c(e),n))),this;t=c(t);let r=e({id:t,props:n});return this.json.children.push(r),new g(r)}remove(e){return e=c(e),this.json.children=this.json.children.filter((t=>t.id!==e)),this}nodes(){return r(this.json).map((e=>(delete(e=Object.assign({},e)).children,e)))}cache(){return(e=>{let t=r(e,((e,t)=>{e.id&&(e._cache.parents=e._cache.parents||[],e._cache.children=e._cache.children||[],t._cache.parents=e._cache.parents.concat([e.id]))})),n={};t.forEach((e=>{e.id&&(n[e.id]=e)})),t.forEach((e=>{e._cache.parents.forEach((t=>{n.hasOwnProperty(t)&&n[t]._cache.children.push(e.id)}))})),e._cache.children=Object.keys(n)})(this.json),this}list(){return r(this.json)}fillDown(){var e;return e=this.json,r(e,((e,t)=>{t.props=f(t.props,e.props)})),this}depth(){u(this.json);let e=r(this.json),t=e.length>1?1:0;return e.forEach((e=>{if(0===e._cache.parents.length)return;let n=e._cache.parents.length+1;n>t&&(t=n)})),t}out(e){return u(this.json),d(this.json,e)}debug(){return u(this.json),d(this.json,\"debug\"),this}}const _=function(e){let t=s(e);return new g(t)};_.prototype.plugin=function(e){e(this)};export{_ as default};\n","// i just made these up\nconst colors = {\n Noun: 'blue',\n Verb: 'green',\n Negative: 'green',\n Date: 'red',\n Value: 'red',\n Adjective: 'magenta',\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Hyphenated: 'cyan',\n Adverb: 'cyan',\n}\n\nexport default colors","import colors from './_colors.js'\n\nconst getColor = function (node) {\n if (colors.hasOwnProperty(node.id)) {\n return colors[node.id]\n }\n if (colors.hasOwnProperty(node.is)) {\n return colors[node.is]\n }\n const found = node._cache.parents.find(c => colors[c])\n return colors[found]\n}\n\n// convert tags to our final format\nconst fmt = function (nodes) {\n const res = {}\n nodes.forEach(node => {\n const { not, also, is, novel } = node.props\n let parents = node._cache.parents\n if (also) {\n parents = parents.concat(also)\n }\n res[node.id] = {\n is,\n not,\n novel,\n also,\n parents,\n children: node._cache.children,\n color: getColor(node)\n }\n })\n // lastly, add all children of all nots\n Object.keys(res).forEach(k => {\n const nots = new Set(res[k].not)\n res[k].not.forEach(not => {\n if (res[not]) {\n res[not].children.forEach(tag => nots.add(tag))\n }\n })\n res[k].not = Array.from(nots)\n })\n return res\n}\n\nexport default fmt","\nconst toArr = function (input) {\n if (!input) {\n return []\n }\n if (typeof input === 'string') {\n return [input]\n }\n return input\n}\n\nconst addImplied = function (tags, already) {\n Object.keys(tags).forEach(k => {\n // support deprecated fmts\n if (tags[k].isA) {\n tags[k].is = tags[k].isA\n }\n if (tags[k].notA) {\n tags[k].not = tags[k].notA\n }\n // add any implicit 'is' tags\n if (tags[k].is && typeof tags[k].is === 'string') {\n if (!already.hasOwnProperty(tags[k].is) && !tags.hasOwnProperty(tags[k].is)) {\n tags[tags[k].is] = {}\n }\n }\n // add any implicit 'not' tags\n if (tags[k].not && typeof tags[k].not === 'string' && !tags.hasOwnProperty(tags[k].not)) {\n if (!already.hasOwnProperty(tags[k].not) && !tags.hasOwnProperty(tags[k].not)) {\n tags[tags[k].not] = {}\n }\n }\n })\n return tags\n}\n\n\nconst validate = function (tags, already) {\n\n tags = addImplied(tags, already)\n\n // property validation\n Object.keys(tags).forEach(k => {\n tags[k].children = toArr(tags[k].children)\n tags[k].not = toArr(tags[k].not)\n })\n // not links are bi-directional\n // add any incoming not tags\n Object.keys(tags).forEach(k => {\n const nots = tags[k].not || []\n nots.forEach(no => {\n if (tags[no] && tags[no].not) {\n tags[no].not.push(k)\n }\n })\n })\n return tags\n}\nexport default validate","import grad from 'grad-school'\nimport fmt from './02-fmt.js'\nimport validate from './01-validate.js'\n\n// 'fill-down' parent logic inference\nconst compute = function (allTags) {\n // setup graph-lib format\n const flatList = Object.keys(allTags).map(k => {\n const o = allTags[k]\n const props = { not: new Set(o.not), also: o.also, is: o.is, novel: o.novel }\n return { id: k, parent: o.is, props, children: [] }\n })\n const graph = grad(flatList).cache().fillDown()\n return graph.out('array')\n}\n\nconst fromUser = function (tags) {\n Object.keys(tags).forEach(k => {\n tags[k] = Object.assign({}, tags[k])\n tags[k].novel = true\n })\n return tags\n}\n\nconst addTags = function (tags, already) {\n // are these tags internal ones, or user-generated?\n if (Object.keys(already).length > 0) {\n tags = fromUser(tags)\n }\n tags = validate(tags, already)\n\n const allTags = Object.assign({}, already, tags)\n // do some basic setting-up\n // 'fill-down' parent logic\n const nodes = compute(allTags)\n // convert it to our final format\n const res = fmt(nodes)\n return res\n}\nexport default addTags\n","import setTag from './setTag.js'\nimport unTag from './unTag.js'\nimport canBe from './canBe.js'\nimport addTags from './addTags/index.js'\n\nexport default {\n one: {\n setTag,\n unTag,\n addTags,\n canBe,\n },\n}\n","/* eslint no-console: 0 */\nconst isArray = function (arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\nconst fns = {\n /** add a given tag, to all these terms */\n tag: function (input, reason = '', isSafe) {\n if (!this.found || !input) {\n return this\n }\n const terms = this.termList()\n if (terms.length === 0) {\n return this\n }\n const { methods, verbose, world } = this\n // logger\n if (verbose === true) {\n console.log(' + ', input, reason || '')\n }\n if (isArray(input)) {\n input.forEach(tag => methods.one.setTag(terms, tag, world, isSafe, reason))\n } else {\n methods.one.setTag(terms, input, world, isSafe, reason)\n }\n // uncache\n this.uncache()\n return this\n },\n\n /** add a given tag, only if it is consistent */\n tagSafe: function (input, reason = '') {\n return this.tag(input, reason, true)\n },\n\n /** remove a given tag from all these terms */\n unTag: function (input, reason) {\n if (!this.found || !input) {\n return this\n }\n const terms = this.termList()\n if (terms.length === 0) {\n return this\n }\n const { methods, verbose, model } = this\n // logger\n if (verbose === true) {\n console.log(' - ', input, reason || '')\n }\n const tagSet = model.one.tagSet\n if (isArray(input)) {\n input.forEach(tag => methods.one.unTag(terms, tag, tagSet))\n } else {\n methods.one.unTag(terms, input, tagSet)\n }\n // uncache\n this.uncache()\n return this\n },\n\n /** return only the terms that can be this tag */\n canBe: function (tag) {\n tag = tag.replace(/^#/, '')\n const tagSet = this.model.one.tagSet\n const canBe = this.methods.one.canBe\n const nope = []\n this.document.forEach((terms, n) => {\n terms.forEach((term, i) => {\n if (!canBe(term, tag, tagSet)) {\n nope.push([n, i, i + 1])\n }\n })\n })\n const noDoc = this.update(nope)\n return this.difference(noDoc)\n },\n}\nexport default fns\n","import tag from './tag.js'\n\nconst tagAPI = function (View) {\n Object.assign(View.prototype, tag)\n}\nexport default tagAPI\n","// wire-up more pos-tags to our model\nconst addTags = function (tags) {\n const { model, methods } = this.world()\n const tagSet = model.one.tagSet\n const fn = methods.one.addTags\n const res = fn(tags, tagSet)\n model.one.tagSet = res\n return this\n}\n\nexport default { addTags }","const boringTags = new Set(['Auxiliary', 'Possessive'])\n\nconst sortByKids = function (tags, tagSet) {\n tags = tags.sort((a, b) => {\n // (unknown tags are interesting)\n if (boringTags.has(a) || !tagSet.hasOwnProperty(b)) {\n return 1\n }\n if (boringTags.has(b) || !tagSet.hasOwnProperty(a)) {\n return -1\n }\n let kids = tagSet[a].children || []\n const aKids = kids.length\n kids = tagSet[b].children || []\n const bKids = kids.length\n return aKids - bKids\n })\n return tags\n}\n\nconst tagRank = function (view) {\n const { document, world } = view\n const tagSet = world.model.one.tagSet\n document.forEach(terms => {\n terms.forEach(term => {\n const tags = Array.from(term.tags)\n term.tagRank = sortByKids(tags, tagSet)\n })\n })\n}\nexport default tagRank\n","import methods from './methods/index.js'\nimport api from './api/index.js'\nimport lib from './lib.js'\nimport tagRank from './compute/tagRank.js'\n\n\nexport default {\n model: {\n one: { tagSet: {} }\n },\n compute: {\n tagRank\n },\n methods,\n api,\n lib\n}\n","// split by periods, question marks, unicode ⁇, etc\nconst initSplit = /([.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049\\u3002]+\\s)/g\n// merge these back into prev sentence\nconst splitsOnly = /^[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049\\u3002]+\\s$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\n\n// Start with a regex:\nconst basicSplit = function (text) {\n const all = []\n //first, split by newline\n const lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n const arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n // merge 'foo' + '.'\n if (arr[o + 1] && splitsOnly.test(arr[o + 1]) === true) {\n arr[o] += arr[o + 1]\n arr[o + 1] = ''\n }\n if (arr[o] !== '') {\n all.push(arr[o])\n }\n }\n }\n return all\n}\nexport default basicSplit\n","const hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9\\u00ae\\u2000-\\u3300\\ud000-\\udfff]/i\nconst hasSomething = /\\S/\n\nconst notEmpty = function (splits) {\n const chunks = []\n for (let i = 0; i < splits.length; i++) {\n const s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false || hasLetter.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n return chunks\n}\nexport default notEmpty","const hasNewline = function (c) {\n return Boolean(c.match(/\\n$/))\n}\n\n//loop through these chunks, and join the non-sentence chunks back together..\nconst smartMerge = function (chunks, world) {\n const isSentence = world.methods.one.tokenize.isSentence\n const abbrevs = world.model.one.abbreviations || new Set()\n\n const sentences = []\n for (let i = 0; i < chunks.length; i++) {\n const c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && !isSentence(c, abbrevs) && !hasNewline(c)) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n return sentences\n}\nexport default smartMerge","/* eslint-disable regexp/no-dupe-characters-character-class */\n\n// merge embedded quotes into 1 sentence\n// like - 'he said \"no!\" and left.'\nconst MAX_QUOTE = 280// ¯\\_(ツ)_/¯\n\n// don't support single-quotes for multi-sentences\nconst pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n // '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n // '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n // '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n // '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\nconst openQuote = RegExp('[' + Object.keys(pairs).join('') + ']', 'g')\nconst closeQuote = RegExp('[' + Object.values(pairs).join('') + ']', 'g')\n\nconst closesQuote = function (str) {\n if (!str) {\n return false\n }\n const m = str.match(closeQuote)\n if (m !== null && m.length === 1) {\n return true\n }\n return false\n}\n\n// allow micro-sentences when inside a quotation, like:\n// the doc said \"no sir. i will not beg\" and walked away.\nconst quoteMerge = function (splits) {\n const arr = []\n for (let i = 0; i < splits.length; i += 1) {\n const split = splits[i]\n // do we have an open-quote and not a closed one?\n const m = split.match(openQuote)\n if (m !== null && m.length === 1) {\n\n // look at the next sentence for a closing quote,\n if (closesQuote(splits[i + 1]) && splits[i + 1].length < MAX_QUOTE) {\n splits[i] += splits[i + 1]// merge them\n arr.push(splits[i])\n splits[i + 1] = ''\n i += 1\n continue\n }\n // look at n+2 for a closing quote,\n if (closesQuote(splits[i + 2])) {\n const toAdd = splits[i + 1] + splits[i + 2]// merge them all\n //make sure it's not too-long\n if (toAdd.length < MAX_QUOTE) {\n splits[i] += toAdd\n arr.push(splits[i])\n splits[i + 1] = ''\n splits[i + 2] = ''\n i += 2\n continue\n }\n }\n }\n arr.push(splits[i])\n }\n return arr\n}\nexport default quoteMerge\n","const MAX_LEN = 250// ¯\\_(ツ)_/¯\n\n// support unicode variants?\n// https://stackoverflow.com/questions/13535172/list-of-all-unicodes-open-close-brackets\nconst hasOpen = /\\(/g\nconst hasClosed = /\\)/g\nconst mergeParens = function (splits) {\n const arr = []\n for (let i = 0; i < splits.length; i += 1) {\n const split = splits[i]\n const m = split.match(hasOpen)\n if (m !== null && m.length === 1) {\n // look at next sentence, for closing parenthesis\n if (splits[i + 1] && splits[i + 1].length < MAX_LEN) {\n const m2 = splits[i + 1].match(hasClosed)\n if (m2 !== null && m.length === 1 && !hasOpen.test(splits[i + 1])) {\n // merge in 2nd sentence\n splits[i] += splits[i + 1]\n arr.push(splits[i])\n splits[i + 1] = ''\n i += 1\n continue\n }\n }\n }\n arr.push(splits[i])\n }\n return arr\n}\nexport default mergeParens","import simpleSplit from './01-simple-split.js'\nimport simpleMerge from './02-simple-merge.js'\nimport smartMerge from './03-smart-merge.js'\nimport quoteMerge from './04-quote-merge.js'\nimport parensMerge from './05-parens-merge.js'\n//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n//regs-\nconst hasSomething = /\\S/\nconst startWhitespace = /^\\s+/\n\nconst splitSentences = function (text, world) {\n text = text || ''\n text = String(text)\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return []\n }\n // cleanup unicode-spaces\n text = text.replace('\\xa0', ' ')\n // First do a greedy-split..\n const splits = simpleSplit(text)\n // Filter-out the crap ones\n let sentences = simpleMerge(splits)\n //detection of non-sentence chunks:\n sentences = smartMerge(sentences, world)\n // allow 'he said \"no sir.\" and left.'\n sentences = quoteMerge(sentences)\n // allow 'i thought (no way!) and left.'\n sentences = parensMerge(sentences)\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n const ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\nexport default splitSentences\n","const hasHyphen = function (str, model) {\n const parts = str.split(/[-–—]/)\n if (parts.length <= 1) {\n return false\n }\n const { prefixes, suffixes } = model.one\n\n // l-theanine, x-ray\n if (parts[0].length === 1 && /[a-z]/i.test(parts[0])) {\n return false\n }\n //dont split 're-do'\n if (prefixes.hasOwnProperty(parts[0])) {\n return false\n }\n //dont split 'flower-like'\n parts[1] = parts[1].trim().replace(/[.?!]$/, '')\n if (suffixes.hasOwnProperty(parts[1])) {\n return false\n }\n //letter-number 'aug-20'\n const reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)[-–—]([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //number-letter '20-aug'\n const reg2 = /^[('\"]?([0-9]{1,4})[-–—]([a-z\\u00C0-\\u00FF`\"'/-]+[)'\"]?$)/i\n if (reg2.test(str) === true) {\n return true\n }\n return false\n}\n\nconst splitHyphens = function (word) {\n const arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n const found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\nexport { splitHyphens, hasHyphen }\n","// combine '2 - 5' like '2-5' is\n// 2-4: 2, 4\nconst combineRanges = function (arr) {\n const startRange = /^[0-9]{1,4}(:[0-9][0-9])?([a-z]{1,2})? ?[-–—] ?$/\n const endRange = /^[0-9]{1,4}([a-z]{1,2})? ?$/\n for (let i = 0; i < arr.length - 1; i += 1) {\n if (arr[i + 1] && startRange.test(arr[i]) && endRange.test(arr[i + 1])) {\n arr[i] = arr[i] + arr[i + 1]\n arr[i + 1] = null\n }\n }\n return arr\n}\nexport default combineRanges\n","const isSlash = /\\p{L} ?\\/ ?\\p{L}+$/u\n\n// 'he / she' should be one word\nconst combineSlashes = function (arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\nexport default combineSlashes\n","import { hasHyphen, splitHyphens } from './01-hyphens.js'\nimport combineRanges from './03-ranges.js'\nimport combineSlashes from './02-slashes.js'\n\nconst wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\n\nlet notWord = [\n '.',\n '?',\n '!',\n ':',\n ';',\n '-',\n '–',\n '—',\n '--',\n '...',\n '(',\n ')',\n '[',\n ']',\n '\"',\n \"'\",\n '`',\n '«',\n '»',\n '*',\n '•',\n]\nnotWord = notWord.reduce((h, c) => {\n h[c] = true\n return h\n}, {})\n\nconst isArray = function (arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//turn a string into an array of strings (naiive for now, lumped later)\nconst splitWords = function (str, model) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n if (isArray(str)) {\n return str\n }\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i], model) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n const word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n result = combineRanges(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nexport default splitWords\n","//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n\n//we have slightly different rules for start/end - like #hashtags.\nconst isLetter = /\\p{Letter}/u\nconst isNumber = /[\\p{Number}\\p{Currency_Symbol}]/u\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst chillin = /[sn]['’]$/\n\nconst normalizePunctuation = function (str, model) {\n // quick lookup for allowed pre/post punctuation\n const { prePunctuation, postPunctuation, emoticons } = model.one\n let original = str\n let pre = ''\n let post = ''\n const chars = Array.from(str)\n\n // punctuation-only words, like '<3'\n if (emoticons.hasOwnProperty(str.trim())) {\n return { str: str.trim(), pre, post: ' ' } //not great\n }\n\n // pop any punctuation off of the start\n let len = chars.length\n for (let i = 0; i < len; i += 1) {\n const c = chars[0]\n // keep any declared chars\n if (prePunctuation[c] === true) {\n continue//keep it\n }\n // keep '+' or '-' only before a number\n if ((c === '+' || c === '-') && isNumber.test(chars[1])) {\n break//done\n }\n // '97 - year short-form\n if (c === \"'\" && c.length === 3 && isNumber.test(chars[1])) {\n break//done\n }\n // start of word\n if (isLetter.test(c) || isNumber.test(c)) {\n break //done\n }\n // punctuation\n pre += chars.shift()//keep going\n }\n\n // pop any punctuation off of the end\n len = chars.length\n for (let i = 0; i < len; i += 1) {\n const c = chars[chars.length - 1]\n // keep any declared chars\n if (postPunctuation[c] === true) {\n continue//keep it\n }\n // start of word\n if (isLetter.test(c) || isNumber.test(c)) {\n break //done\n }\n // F.B.I.\n if (c === '.' && hasAcronym.test(original) === true) {\n continue//keep it\n }\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (c === \"'\" && chillin.test(original) === true) {\n continue//keep it\n }\n // punctuation\n post = chars.pop() + post//keep going\n }\n str = chars.join('')\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n }\n return { str, pre, post }\n}\nexport default normalizePunctuation\n","import tokenize from './tokenize.js'\n\nconst parseTerm = (txt, model) => {\n // cleanup any punctuation as whitespace\n const { str, pre, post } = tokenize(txt, model)\n const parsed = {\n text: str,\n pre: pre,\n post: post,\n tags: new Set(),\n }\n return parsed\n}\nexport default parseTerm\n","// 'Björk' to 'Bjork'.\nconst killUnicode = function (str, world) {\n const unicode = world.model.one.unicode || {}\n str = str || ''\n const chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nexport default killUnicode\n","/** some basic operations on a string to reduce noise */\nconst clean = function (str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n const original = str\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",.!:;?)]+$/g, '')\n str = str.replace(/^['\"(]+/g, '')\n }\n // remove zero-width characters\n str = str.replace(/[\\u200B-\\u200D\\uFEFF]/g, '')\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //no-commas in numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\nexport default clean\n","// do acronyms need to be ASCII? ... kind of?\nconst periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.)+[a-z]\\.?$/\n\nconst isAcronym = function (str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\n\nconst doAcronym = function (str) {\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n return str\n}\nexport default doAcronym\n","import cleanup from './01-cleanup.js'\n// import doUnicode from './02-unicode.js'\nimport doAcronyms from './02-acronyms.js'\n\nconst normalize = function (term, world) {\n const killUnicode = world.methods.one.killUnicode\n // console.log(world.methods.one)\n let str = term.text || ''\n str = cleanup(str)\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str, world)\n str = doAcronyms(str)\n term.normal = str\n}\nexport default normalize\n","import normalize from '../compute/normal/index.js'\n\n// turn a string input into a 'document' json format\nconst parse = function (input, world) {\n const { methods, model } = world\n const { splitSentences, splitTerms, splitWhitespace } = methods.one.tokenize\n input = input || ''\n // split into sentences\n const sentences = splitSentences(input, world)\n // split into word objects\n input = sentences.map((txt) => {\n let terms = splitTerms(txt, model)\n // split into [pre-text-post]\n terms = terms.map(t => splitWhitespace(t, model))\n // add normalized term format, always\n terms.forEach((t) => {\n normalize(t, world)\n })\n return terms\n })\n return input\n}\nexport default parse","const isAcronym = /[ .][A-Z]\\.? *$/i //asci - 'n.s.a.'\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/ // '...'\nconst hasLetter = /\\p{L}/u\nconst hasPeriod = /\\. *$/\nconst leadInit = /^[A-Z]\\. $/ // \"W. Kensington\"\n\n/** does this look like a sentence? */\nconst isSentence = function (str, abbrevs) {\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n // check for leading initial - \"W. Kensington\"\n if (str.length === 3 && leadInit.test(str)) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n const txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n const words = txt.split(' ')\n const lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.' (and not mr?)\n if (abbrevs.hasOwnProperty(lastWord) === true && hasPeriod.test(str) === true) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\nexport default isSentence\n","import splitSentences from './01-sentences/index.js'\nimport splitTerms from './02-terms/index.js'\nimport splitWhitespace from './03-whitespace/index.js'\nimport killUnicode from './unicode.js'\nimport fromString from './parse.js'\nimport isSentence from './01-sentences/is-sentence.js'\n\nexport default {\n one: {\n killUnicode,\n tokenize: {\n splitSentences,\n isSentence,\n splitTerms,\n splitWhitespace,\n fromString,\n },\n },\n}\n","const aliases = {\n '&': 'and',\n '@': 'at',\n '%': 'percent',\n 'plz': 'please',\n 'bein': 'being',\n}\nexport default aliases\n","export default [\n 'approx',\n 'apt',\n 'bc',\n 'cyn',\n 'eg',\n 'esp',\n 'est',\n 'etc',\n 'ex',\n 'exp',\n 'prob', //probably\n 'pron', // Pronunciation\n 'gal', //gallon\n 'min',\n 'pseud',\n 'fig', //figure\n 'jd',\n 'lat', //latitude\n 'lng', //longitude\n 'vol', //volume\n 'fm', //not am\n 'def', //definition\n 'misc',\n 'plz', //please\n 'ea', //each\n 'ps',\n 'sec', //second\n 'pt',\n 'pref', //preface\n 'pl', //plural\n 'pp', //pages\n 'qt', //quarter\n 'fr', //french\n 'sq',\n 'nee', //given name at birth\n 'ss', //ship, or sections\n 'tel',\n 'temp',\n 'vet',\n 'ver', //version\n 'fem', //feminine\n 'masc', //masculine\n 'eng', //engineering/english\n 'adj', //adjective\n 'vb', //verb\n 'rb', //adverb\n 'inf', //infinitive\n 'situ', // in situ\n 'vivo',\n 'vitro',\n 'wr', //world record\n]\n","export default [\n 'adj',\n 'adm',\n 'adv',\n 'asst',\n 'atty',\n 'bldg',\n 'brig',\n 'capt',\n 'cmdr',\n 'comdr',\n 'cpl',\n 'det',\n 'dr',\n 'esq',\n 'gen',\n 'gov',\n 'hon',\n 'jr',\n 'llb',\n 'lt',\n 'maj',\n 'messrs',\n 'mlle',\n 'mme',\n 'mr',\n 'mrs',\n 'ms',\n 'mstr',\n 'phd',\n 'prof',\n 'pvt',\n 'rep',\n 'reps',\n 'res',\n 'rev',\n 'sen',\n 'sens',\n 'sfc',\n 'sgt',\n 'sir',\n 'sr',\n 'supt',\n 'surg'\n //miss\n //misses\n]\n","export default ['jan', 'feb', 'mar', 'apr', 'jun', 'jul', 'aug', 'sep', 'sept', 'oct', 'nov', 'dec']\n","export default [\n 'ad',\n 'al',\n 'arc',\n 'ba',\n 'bl',\n 'ca',\n 'cca',\n 'col',\n 'corp',\n 'ft',\n 'fy',\n 'ie',\n 'lit',\n 'ma',\n 'md',\n 'pd',\n 'tce',\n]\n","export default ['dept', 'univ', 'assn', 'bros', 'inc', 'ltd', 'co']\n","export default [\n 'rd',\n 'st',\n 'dist',\n 'mt',\n 'ave',\n 'blvd',\n 'cl',\n // 'ct',\n 'cres',\n 'hwy',\n //states\n 'ariz',\n 'cal',\n 'calif',\n 'colo',\n 'conn',\n 'fla',\n 'fl',\n 'ga',\n 'ida',\n 'ia',\n 'kan',\n 'kans',\n\n 'minn',\n 'neb',\n 'nebr',\n 'okla',\n 'penna',\n 'penn',\n 'pa',\n 'dak',\n 'tenn',\n 'tex',\n 'ut',\n 'vt',\n 'va',\n 'wis',\n 'wisc',\n 'wy',\n 'wyo',\n 'usafa',\n 'alta',\n 'ont',\n 'que',\n 'sask',\n]\n","// units that are abbreviations too\nexport default [\n 'dl',\n 'ml',\n 'gal',\n // 'ft', //ambiguous\n 'qt',\n 'pt',\n 'tbl',\n 'tsp',\n 'tbsp',\n 'km',\n 'dm', //decimeter\n 'cm',\n 'mm',\n 'mi',\n 'td',\n 'hr', //hour\n 'hrs', //hour\n 'kg',\n 'hg',\n 'dg', //decigram\n 'cg', //centigram\n 'mg', //milligram\n 'µg', //microgram\n 'lb', //pound\n 'oz', //ounce\n 'sq ft',\n 'hz', //hertz\n 'mps', //meters per second\n 'mph',\n 'kmph', //kilometers per hour\n 'kb', //kilobyte\n 'mb', //megabyte\n // 'gb', //ambig\n 'tb', //terabyte\n 'lx', //lux\n 'lm', //lumen\n // 'pa', //ambig\n 'fl oz', //\n 'yb',\n]\n","import misc from './abbreviations/misc.js'\nimport honorifics from './abbreviations/honorifics.js'\nimport months from './abbreviations/months.js'\nimport nouns from './abbreviations/nouns.js'\nimport organizations from './abbreviations/organizations.js'\nimport places from './abbreviations/places.js'\nimport units from './abbreviations/units.js'\n\n// add our abbreviation list to our lexicon\nconst list = [\n [misc],\n [units, 'Unit'],\n [nouns, 'Noun'],\n [honorifics, 'Honorific'],\n [months, 'Month'],\n [organizations, 'Organization'],\n [places, 'Place'],\n]\n// create key-val for sentence-tokenizer\nconst abbreviations = {}\n// add them to a future lexicon\nconst lexicon = {}\n\nlist.forEach(a => {\n a[0].forEach(w => {\n // sentence abbrevs\n abbreviations[w] = true\n // future-lexicon\n lexicon[w] = 'Abbreviation'\n if (a[1] !== undefined) {\n lexicon[w] = [lexicon[w], a[1]]\n }\n })\n})\n\nexport { lexicon, abbreviations }\n","// dashed prefixes that are not independent words\n// 'mid-century', 'pre-history'\nexport default [\n 'anti',\n 'bi',\n 'co',\n 'contra',\n 'de',\n 'extra',\n 'infra',\n 'inter',\n 'intra',\n 'macro',\n 'micro',\n 'mis',\n 'mono',\n 'multi',\n 'peri',\n 'pre',\n 'pro',\n 'proto',\n 'pseudo',\n 're',\n 'sub',\n 'supra',\n 'trans',\n 'tri',\n 'un',\n 'out', //out-lived\n 'ex',//ex-wife\n\n // 'counter',\n // 'mid',\n // 'out',\n // 'non',\n // 'over',\n // 'post',\n // 'semi',\n // 'super', //'super-cool'\n // 'ultra', //'ulta-cool'\n // 'under',\n // 'whole',\n].reduce((h, str) => {\n h[str] = true\n return h\n}, {})","// dashed suffixes that are not independent words\n// 'flower-like', 'president-elect'\nexport default {\n 'like': true,\n 'ish': true,\n 'less': true,\n 'able': true,\n 'elect': true,\n 'type': true,\n 'designate': true,\n // 'fold':true,\n}","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nconst compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜’',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАаѦѧӐӑӒӓƛæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƐȄȅȆȇȨȩɆɇΈΕΞΣέεξϵЀЁЕеѐёҼҽҾҿӖӗễ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇіїi̇',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'ÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƵƶȤȥɀΖ',\n}\n//decompress data into two hashes\nconst unicode = {}\nObject.keys(compact).forEach(function (k) {\n compact[k].split('').forEach(function (s) {\n unicode[s] = k\n })\n})\nexport default unicode\n","// https://util.unicode.org/UnicodeJsps/list-unicodeset.jsp?a=%5Cp%7Bpunctuation%7D\n\n// punctuation to keep at start of word\nconst prePunctuation = {\n '#': true, //#hastag\n '@': true, //@atmention\n '_': true,//underscore\n '°': true,\n // '+': true,//+4\n // '\\\\-',//-4 (escape)\n // '.',//.4\n // zero-width chars\n '\\u200B': true,\n '\\u200C': true,\n '\\u200D': true,\n '\\uFEFF': true\n}\n\n// punctuation to keep at end of word\nconst postPunctuation = {\n '%': true,//88%\n '_': true,//underscore\n '°': true,//degrees, italian ordinal\n // '\\'',// sometimes\n // zero-width chars\n '\\u200B': true,\n '\\u200C': true,\n '\\u200D': true,\n '\\uFEFF': true\n}\n\nconst emoticons = {\n '<3': true,\n '</3': true,\n '<\\\\3': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n}\n\nexport { prePunctuation, postPunctuation, emoticons }","import aliases from './aliases.js'\nimport { lexicon, abbreviations } from './lexicon.js'\nimport prefixes from './prefixes.js'\nimport suffixes from './suffixes.js'\nimport unicode from './unicode.js'\nimport { prePunctuation, postPunctuation, emoticons } from './punctuation.js'\n\nexport default {\n one: {\n aliases,\n abbreviations,\n prefixes,\n suffixes,\n prePunctuation,\n postPunctuation,\n lexicon, //give this one forward\n unicode,\n emoticons\n },\n}\n","const hasSlash = /\\//\nconst hasDomain = /[a-z]\\.[a-z]/i\nconst isMath = /[0-9]/\n// const hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n// const hasApostrophe = /['’]s$/\n\nconst addAliases = function (term, world) {\n const str = term.normal || term.text || term.machine\n const aliases = world.model.one.aliases\n // lookup known aliases like '&'\n if (aliases.hasOwnProperty(str)) {\n term.alias = term.alias || []\n term.alias.push(aliases[str])\n }\n // support slashes as aliases\n if (hasSlash.test(str) && !hasDomain.test(str) && !isMath.test(str)) {\n const arr = str.split(hasSlash)\n // don't split urls and things\n if (arr.length <= 3) {\n arr.forEach(word => {\n word = word.trim()\n if (word !== '') {\n term.alias = term.alias || []\n term.alias.push(word)\n }\n })\n }\n }\n // aliases for apostrophe-s\n // if (hasApostrophe.test(str)) {\n // let main = str.replace(hasApostrophe, '').trim()\n // term.alias = term.alias || []\n // term.alias.push(main)\n // }\n return term\n}\nexport default addAliases\n","const hasDash = /^\\p{Letter}+-\\p{Letter}+$/u\n// 'machine' is a normalized form that looses human-readability\nconst doMachine = function (term) {\n let str = term.implicit || term.normal || term.text\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in'$/, '$1ing')\n //turn re-enactment to reenactment\n if (hasDash.test(str)) {\n str = str.replace(/-/g, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n if (str !== term.normal) {\n term.machine = str\n }\n}\nexport default doMachine\n","// sort words by frequency\nconst freq = function (view) {\n const docs = view.docs\n const counts = {}\n for (let i = 0; i < docs.length; i += 1) {\n for (let t = 0; t < docs[i].length; t += 1) {\n const term = docs[i][t]\n const word = term.machine || term.normal\n counts[word] = counts[word] || 0\n counts[word] += 1\n }\n }\n // add counts on each term\n for (let i = 0; i < docs.length; i += 1) {\n for (let t = 0; t < docs[i].length; t += 1) {\n const term = docs[i][t]\n const word = term.machine || term.normal\n term.freq = counts[word]\n }\n }\n}\nexport default freq\n","// get all character startings in doc\nconst offset = function (view) {\n let elapsed = 0\n let index = 0\n const docs = view.document //start from the actual-top\n for (let i = 0; i < docs.length; i += 1) {\n for (let t = 0; t < docs[i].length; t += 1) {\n const term = docs[i][t]\n term.offset = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n }\n }\n}\n\n\nexport default offset\n","// cheat- add the document's pointer to the terms\nconst index = function (view) {\n // console.log('reindex')\n const document = view.document\n for (let n = 0; n < document.length; n += 1) {\n for (let i = 0; i < document[n].length; i += 1) {\n document[n][i].index = [n, i]\n }\n }\n // let ptrs = b.fullPointer\n // console.log(ptrs)\n // for (let i = 0; i < docs.length; i += 1) {\n // const [n, start] = ptrs[i]\n // for (let t = 0; t < docs[i].length; t += 1) {\n // let term = docs[i][t]\n // term.index = [n, start + t]\n // }\n // }\n}\n\nexport default index","const wordCount = function (view) {\n let n = 0\n const docs = view.docs\n for (let i = 0; i < docs.length; i += 1) {\n for (let t = 0; t < docs[i].length; t += 1) {\n if (docs[i][t].normal === '') {\n continue //skip implicit words\n }\n n += 1\n docs[i][t].wordCount = n\n }\n }\n}\n\nexport default wordCount\n","import alias from './alias.js'\nimport normal from './normal/index.js'\nimport machine from './machine.js'\nimport freq from './freq.js'\nimport offset from './offset.js'\nimport index from './reindex.js'\nimport wordCount from './wordCount.js'\n\n// cheat-method for a quick loop\nconst termLoop = function (view, fn) {\n const docs = view.docs\n for (let i = 0; i < docs.length; i += 1) {\n for (let t = 0; t < docs[i].length; t += 1) {\n fn(docs[i][t], view.world)\n }\n }\n}\n\nconst methods = {\n alias: (view) => termLoop(view, alias),\n machine: (view) => termLoop(view, machine),\n normal: (view) => termLoop(view, normal),\n freq,\n offset,\n index,\n wordCount,\n}\nexport default methods\n","import methods from './methods/index.js'\nimport model from './model/index.js'\nimport compute from './compute/index.js'\n\nexport default {\n compute,\n methods,\n model,\n hooks: ['alias', 'machine', 'index', 'id'],\n}\n\n// const plugin = function (world) {\n// let { methods, model, parsers } = world\n// Object.assign({}, methods, _methods)\n// Object.assign(model, _model)\n// methods.one.tokenize.fromString = tokenize\n// parsers.push('normal')\n// parsers.push('alias')\n// parsers.push('machine')\n// // extend View class\n// // addMethods(View)\n// }\n// export default plugin\n","// lookup last word in the type-ahead prefixes\nconst typeahead = function (view) {\n const prefixes = view.model.one.typeahead\n const docs = view.docs\n if (docs.length === 0 || Object.keys(prefixes).length === 0) {\n return\n }\n const lastPhrase = docs[docs.length - 1] || []\n const lastTerm = lastPhrase[lastPhrase.length - 1]\n // if we've already put whitespace, end.\n if (lastTerm.post) {\n return\n }\n // if we found something\n if (prefixes.hasOwnProperty(lastTerm.normal)) {\n const found = prefixes[lastTerm.normal]\n // add full-word as an implicit result\n lastTerm.implicit = found\n lastTerm.machine = found\n lastTerm.typeahead = true\n // tag it, as our assumed term\n if (view.compute.preTagger) {\n view.last().unTag('*').compute(['lexicon', 'preTagger'])\n }\n }\n}\n\nexport default { typeahead }\n","// assume any discovered prefixes\nconst autoFill = function () {\n const docs = this.docs\n if (docs.length === 0) {\n return this\n }\n const lastPhrase = docs[docs.length - 1] || []\n const term = lastPhrase[lastPhrase.length - 1]\n if (term.typeahead === true && term.machine) {\n term.text = term.machine\n term.normal = term.machine\n }\n return this\n}\n\nconst api = function (View) {\n View.prototype.autoFill = autoFill\n}\nexport default api","// generate all the possible prefixes up-front\nconst getPrefixes = function (arr, opts, world) {\n let index = {}\n const collisions = []\n const existing = world.prefixes || {}\n arr.forEach((str) => {\n str = str.toLowerCase().trim()\n let max = str.length\n if (opts.max && max > opts.max) {\n max = opts.max\n }\n for (let size = opts.min; size < max; size += 1) {\n const prefix = str.substring(0, size)\n // ensure prefix is not a word\n if (opts.safe && world.model.one.lexicon.hasOwnProperty(prefix)) {\n continue\n }\n // does it already exist?\n if (existing.hasOwnProperty(prefix) === true) {\n collisions.push(prefix)\n continue\n }\n if (index.hasOwnProperty(prefix) === true) {\n collisions.push(prefix)\n continue\n }\n index[prefix] = str\n }\n })\n // merge with existing prefixes\n index = Object.assign({}, existing, index)\n // remove ambiguous-prefixes\n collisions.forEach((str) => {\n delete index[str]\n })\n return index\n}\n\nexport default getPrefixes\n","import allPrefixes from './allPrefixes.js'\n\nconst isObject = val => {\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\nconst defaults = {\n safe: true,\n min: 3,\n}\n\nconst prepare = function (words = [], opts = {}) {\n const model = this.model()\n opts = Object.assign({}, defaults, opts)\n if (isObject(words)) {\n Object.assign(model.one.lexicon, words)\n words = Object.keys(words)\n }\n const prefixes = allPrefixes(words, opts, this.world())\n // manually combine these with any existing prefixes\n Object.keys(prefixes).forEach(str => {\n // explode any overlaps\n if (model.one.typeahead.hasOwnProperty(str)) {\n delete model.one.typeahead[str]\n return\n }\n model.one.typeahead[str] = prefixes[str]\n })\n return this\n}\n\nexport default {\n typeahead: prepare\n}","import compute from './compute.js'\nimport api from './api.js'\nimport lib from './lib/index.js'\n\nconst model = {\n one: {\n typeahead: {} //set a blank key-val\n }\n}\nexport default {\n model,\n api,\n lib,\n compute,\n hooks: ['typeahead']\n}\n\n","import nlp from './nlp.js' // 5kb\nimport cache from './1-one/cache/plugin.js'\nimport change from './1-one/change/plugin.js'\nimport contractions from './1-one/contraction-one/plugin.js'\nimport freeze from './1-one/freeze/plugin.js'\nimport lexicon from './1-one/lexicon/plugin.js'\nimport lookup from './1-one/lookup/plugin.js'\nimport match from './1-one/match/plugin.js'\nimport output from './1-one/output/plugin.js'\nimport pointers from './1-one/pointers/plugin.js'\nimport sweep from './1-one/sweep/plugin.js'\nimport tag from './1-one/tag/plugin.js'\nimport tokenize from './1-one/tokenize/plugin.js'\nimport typeahead from './1-one/typeahead/plugin.js'\n\n// order here matters\nnlp.extend(change) //0kb\nnlp.extend(output) //0kb\nnlp.extend(match) //10kb\nnlp.extend(pointers) //2kb\nnlp.extend(tag) //2kb\nnlp.plugin(contractions) //~6kb\nnlp.extend(tokenize) //7kb\nnlp.extend(freeze) //\nnlp.plugin(cache) //~1kb\nnlp.extend(lookup) //7kb\nnlp.extend(typeahead) //1kb\nnlp.extend(lexicon) //1kb\nnlp.extend(sweep) //1kb\n\nexport default nlp // 40kb\n","//nouns with irregular plural/singular forms\n//used in nouns.toPlural(), and also in the lexicon.\n\nexport default {\n // -a\n addendum: 'addenda',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n genus: 'genera',\n memorandum: 'memoranda',\n opus: 'opera',\n ovum: 'ova',\n phenomenon: 'phenomena',\n referendum: 'referenda',\n\n // -ae\n alga: 'algae',\n alumna: 'alumnae',\n antenna: 'antennae',\n formula: 'formulae',\n larva: 'larvae',\n nebula: 'nebulae',\n vertebra: 'vertebrae',\n\n // -is\n analysis: 'analyses',\n axis: 'axes',\n diagnosis: 'diagnoses',\n parenthesis: 'parentheses',\n prognosis: 'prognoses',\n synopsis: 'synopses',\n thesis: 'theses',\n neurosis: 'neuroses',\n // -x\n appendix: 'appendices',\n index: 'indices',\n matrix: 'matrices',\n ox: 'oxen',\n sex: 'sexes',\n\n // -i\n alumnus: 'alumni',\n bacillus: 'bacilli',\n cactus: 'cacti',\n fungus: 'fungi',\n hippopotamus: 'hippopotami',\n libretto: 'libretti',\n modulus: 'moduli',\n nucleus: 'nuclei',\n octopus: 'octopi',\n radius: 'radii',\n stimulus: 'stimuli',\n syllabus: 'syllabi',\n\n // -ie\n cookie: 'cookies',\n calorie: 'calories',\n auntie: 'aunties',\n movie: 'movies',\n pie: 'pies',\n rookie: 'rookies',\n tie: 'ties',\n zombie: 'zombies',\n\n // -f\n leaf: 'leaves',\n loaf: 'loaves',\n thief: 'thieves',\n\n // ee-\n foot: 'feet',\n goose: 'geese',\n tooth: 'teeth',\n\n // -eaux\n beau: 'beaux',\n chateau: 'chateaux',\n tableau: 'tableaux',\n\n // -ses\n bus: 'buses',\n gas: 'gases',\n circus: 'circuses',\n crisis: 'crises',\n virus: 'viruses',\n database: 'databases',\n excuse: 'excuses',\n abuse: 'abuses',\n\n avocado: 'avocados',\n barracks: 'barracks',\n child: 'children',\n clothes: 'clothes',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n deer: 'deer',\n halo: 'halos',\n man: 'men',\n woman: 'women',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n person: 'people',\n quiz: 'quizzes',\n rodeo: 'rodeos',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stomach: 'stomachs',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n volcano: 'volcanoes',\n\n}\n","// generated in ./lib/lexicon\nexport default {\n \"Comparative\": \"true¦bett1f0;arth0ew0in0;er\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦bests,sounds\",\n \"Condition\": \"true¦lest,unless\",\n \"PastTense\": \"true¦began,came,d4had,kneel3l2m0sa4we1;ea0sg2;nt;eap0i0;ed;id\",\n \"Participle\": \"true¦0:09;a06b01cZdXeat0fSgQhPoJprov0rHs7t6u4w1;ak0ithdra02o2r1;i02uY;k0v0;nd1pr04;ergoJoJ;ak0hHo3;e9h7lain,o6p5t4un3w1;o1um;rn;g,k;ol0reS;iQok0;ught,wn;ak0o1runk;ne,wn;en,wn;ewriNi1uJ;dd0s0;ut3ver1;do4se0t1;ak0h2;do2g1;roG;ne;ast0i7;iv0o1;ne,tt0;all0loBor1;bi3g2s1;ak0e0;iv0o9;dd0;ove,r1;a5eamt,iv0;hos0lu1;ng;e4i3lo2ui1;lt;wn;tt0;at0en,gun;r2w1;ak0ok0;is0;en\",\n \"Gerund\": \"true¦accord0be0doin,go0result0stain0;ing\",\n \"Expression\": \"true¦a0Yb0Uc0Sd0Oe0Mfarew0Lg0FhZjeez,lWmVnToOpLsJtIuFvEw7y0;a5e3i1u0;ck,p;k04p0;ee,pee;a0p,s;!h;!a,h,y;a5h2o1t0;af,f;rd up,w;atsoever,e1o0;a,ops;e,w;hoo,t;ery w06oi0L;gh,h0;! 0h,m;huh,oh;here nPsk,ut tut;h0ic;eesh,hh,it,oo;ff,h1l0ow,sst;ease,s,z;ew,ooey;h1i,mg,o0uch,w,y;h,o,ps;! 0h;hTmy go0wT;d,sh;a7evertheless,o0;!pe;eh,mm;ah,eh,m1ol0;!s;ao,fao;aCeBi9o2u0;h,mph,rra0zzC;h,y;l1o0;r6y9;la,y0;! 0;c1moCsmok0;es;ow;!p hip hoor0;ay;ck,e,llo,y;ha1i,lleluj0;ah;!ha;ah,ee4o1r0;eat scott,r;l1od0sh; grief,bye;ly;! whiz;ell;e0h,t cetera,ureka,ww,xcuse me;k,p;'oh,a0rat,uh;m0ng;mit,n0;!it;mon,o0;ngratulations,wabunga;a2oo1r0tw,ye;avo,r;!ya;h,m; 1h0ka,las,men,rgh,ye;!a,em,h,oy;la\",\n \"Negative\": \"true¦n0;ever,o0;n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Reflexive\": \"true¦h4it5my5o1the0your2;ir1m1;ne3ur0;sel0;f,ves;er0im0;self\",\n \"Plural\": \"true¦dick0gre0ones,records;ens\",\n \"Unit|Noun\": \"true¦cEfDgChBinchAk9lb,m6newt5oz,p4qt,t1y0;ardEd;able1b0ea1sp;!l,sp;spo1;a,t,x;on9;!b,g,i1l,m,p0;h,s;!les;!b,elvin,g,m;!es;g,z;al,b;eet,oot,t;m,up0;!s\",\n \"Value\": \"true¦a few\",\n \"Imperative\": \"true¦bewa0come he0;re\",\n \"Plural|Verb\": \"true¦leaves\",\n \"Demonym\": \"true¦0:15;1:12;a0Vb0Oc0Dd0Ce08f07g04h02iYjVkTlPmLnIomHpEqatari,rCs7t5u4v3welAz2;am0Gimbabwe0;enezuel0ietnam0I;gAkrai1;aiwTex0hai,rinida0Ju2;ni0Prkmen;a5cotti4e3ingapoOlovak,oma0Spaniard,udRw2y0W;ede,iss;negal0Cr09;sh;mo0uT;o5us0Jw2;and0;a2eru0Fhilippi0Nortugu07uerto r0S;kist3lesti1na2raguay0;ma1;ani;ami00i2orweP;caragu0geri2;an,en;a3ex0Lo2;ngo0Drocc0;cedo1la2;gasy,y07;a4eb9i2;b2thua1;e0Cy0;o,t01;azakh,eny0o2uwaiI;re0;a2orda1;ma0Ap2;anO;celandic,nd4r2sraeli,ta01vo05;a2iB;ni0qi;i0oneU;aiAin2ondur0unO;di;amEe2hanai0reek,uatemal0;or2rm0;gi0;ilipino,ren8;cuadoVgyp4mira3ngli2sto1thiopi0urope0;shm0;ti;ti0;aPominUut3;a9h6o4roat3ub0ze2;ch;!i0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el6o4r3ul2;gaE;azi9it;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;genti2me1;ne;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Organization\": \"true¦0:4Q;a3Tb3Bc2Od2He2Df27g1Zh1Ti1Pj1Nk1Ll1Gm12n0Po0Mp0Cqu0Br02sTtHuCv9w3xiaomi,y1;amaha,m1Bou1w1B;gov,tu3C;a4e2iki1orld trade organizati33;leaRped0O;lls fargo,st1;fie2Hinghou2R;l1rner br3U;gree3Jl street journ2Im1E;an halOeriz2Xisa,o1;dafo2Yl1;kswagMvo;b4kip,n2ps,s1;a tod3Aps;es3Mi1;lev3Fted natio3C;er,s; mobi32aco beRd bOe9gi frida3Lh3im horto3Amz,o1witt3D;shi49y1;ota,s r 05;e 1in lizzy;b3carpen3Jdaily ma3Dguess w2holli0s1w2;mashing pumpki35uprem0;ho;ea1lack eyed pe3Xyr0Q;ch bo3Dtl0;l2n3Qs1xas instrumen1U;co,la m1F;efoni0Kus;a8cientology,e5ieme2Ymirnoff,np,o3pice gir6quare0Ata1ubaru;rbuc1to34;ks;ny,undgard1;en;a2x pisto1;ls;g1Wrs;few2Minsbur31lesfor03msu2E;adiohead,b8e4o1yana3C;man empi1Xyal 1;b1dutch she4;ank;a3d 1max,vl20;bu1c2Ahot chili peppe2Ylobst2N;ll;ders dige1Ll madrid;c,s;ant3Aizn2Q;a8bs,e5fiz2Ihilip4i3r1;emier 1udenti1D;leagTo2K;nk floyd,zza hut; morrBs;psi2tro1uge0E;br33chi0Tn33;!co;lant2Un1yp16; 2ason27da2P;ld navy,pec,range juli2xf1;am;us;aAb9e6fl,h5i4o1sa,vid3wa;k2tre dame,vart1;is;ia;ke,ntendo,ss0QvZ;l,s;c,st1Otflix,w1; 1sweek;kids on the block,york0D;a,c;nd22s2t1;ional aca2Po,we0U;a,c02d0S;aDcdonalCe9i6lb,o3tv,y1;spa1;ce;b1Tnsanto,ody blu0t1;ley cr1or0T;ue;c2t1;as,subisO;helin,rosoft;dica2rcedes benz,talli1;ca;id,re;ds;cs milk,tt19z24;a3e1g,ittle caesa1P; ore09novo,x1;is,mark,us; 1bour party;pres0Dz boy;atv,fc,kk,lm,m1od1O;art;iffy lu0Roy divisi0Jpmorgan1sa;! cha09;bm,hop,k3n1tv;g,te1;l,rpol;ea;a5ewlett pack1Vi3o1sbc,yundai;me dep1n1P;ot;tac1zbollah;hi;lliburt08sbro;eneral 6hq,ithub,l5mb,o2reen d0Ou1;cci,ns n ros0;ldman sachs,o1;dye1g0H;ar;axo smith kli04encoW;electr0Nm1;oto0Z;a5bi,c barcelo4da,edex,i2leetwood m03o1rito l0G;rd,xcY;at,fa,nancial1restoZ; tim0;na;cebook,nnie mae;b0Asa,u3xxon1; m1m1;ob0J;!rosceptics;aiml0De5isney,o4u1;nkin donu2po0Zran dur1;an;ts;j,w jon0;a,f lepp12ll,peche mode,r spieg02stiny's chi1;ld;aJbc,hFiDloudflaCnn,o3r1;aigsli5eedence clearwater reviv1ossra09;al;c7inba6l4m1o0Est09;ca2p1;aq;st;dplSg1;ate;se;a c1o chanQ;ola;re;a,sco1tigroup;! systems;ev2i1;ck fil a,na daily;r1y;on;d2pital o1rls jr;ne;bury,ill1;ac;aEbc,eBf9l5mw,ni,o1p,rexiteeU;ei3mbardiIston 1;glo1pizza;be;ng;o2ue c1;roV;ckbuster video,omingda1;le; g1g1;oodriL;cht2e ge0rkshire hathaw1;ay;el;cardi,idu,nana republ3s1xt5y5;f,kin robbi1;ns;ic;bYcTdidSerosmith,iRlKmEnheuser busDol,ppleAr6s4u3v2y1;er;is,on;di,todesk;hland o1sociated E;il;b3g2m1;co;os;ys; compu1be0;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 5catel2ta1;ir;! lu1;ce1;nt;jazeera,qae1;da;g,rbnb;as;/dc,a3er,tivision1;! blizz1;ard;demy of scienc0;es;ba\",\n \"Possessive\": \"true¦its,my,our0thy;!s\",\n \"Noun|Verb\": \"true¦0:9W;1:AA;2:96;3:A3;4:9R;5:A2;6:9K;7:8N;8:7L;9:A8;A:93;B:8D;C:8X;a9Ob8Qc7Id6Re6Gf5Sg5Hh55i4Xj4Uk4Rl4Em40n3Vo3Sp2Squ2Rr21s0Jt02u00vVwGyFzD;ip,oD;ne,om;awn,e6Fie68;aOeMhJiHoErD;ap,e9Oink2;nd0rDuC;kDry,sh5Hth;!shop;ck,nDpe,re,sh;!d,g;e86iD;p,sD;k,p0t2;aDed,lco8W;r,th0;it,lk,rEsDt4ve,x;h,te;!ehou1ra9;aGen5FiFoD;iDmAte,w;ce,d;be,ew,sA;cuum,l4B;pDr7;da5gra6Elo6A;aReQhrPiOoMrGuEwiDy5Z;n,st;nDrn;e,n7O;aGeFiEoDu6;t,ub2;bu5ck4Jgg0m,p;at,k,nd;ck,de,in,nsDp,v7J;f0i8R;ll,ne,p,r4Yss,t94uD;ch,r;ck,de,e,le,me,p,re;e5Wow,u6;ar,e,ll,mp0st,xt;g,lDng2rg7Ps5x;k,ly;a0Sc0Ne0Kh0Fi0Dk0Cl0Am08n06o05pXquaBtKuFwD;ea88iD;ng,pe,t4;bGit,m,ppErD;fa3ge,pri1v2U;lDo6S;e6Py;!je8;aMeLiKoHrEuDy2;dy,ff,mb2;a85eEiDo5Pugg2;ke,ng;am,ss,t4;ckEop,p,rD;e,m;ing,pi2;ck,nk,t4;er,m,p;ck,ff,ge,in,ke,lEmp,nd,p2rDte,y;!e,t;k,l;aJeIiHlGoFrDur,y;ay,e56inDu3;g,k2;ns8Bt;a5Qit;ll,n,r87te;ed,ll;m,n,rk;b,uC;aDee1Tow;ke,p;a5Je4FiDo53;le,rk;eep,iDou4;ce,p,t;ateboa7Ii;de,gnDl2Vnk,p,ze;!al;aGeFiEoDuff2;ck,p,re,w;ft,p,v0;d,i3Ylt0;ck,de,pe,re,ve;aEed,nDrv1It;se,t2N;l,r4t;aGhedu2oBrD;aEeDibb2o3Z;en,w;pe,t4;le,n,r2M;cDfegua72il,mp2;k,rifi3;aZeHhy6LiGoEuD;b,in,le,n,s5X;a6ck,ll,oDpe,u5;f,t;de,ng,ot,p,s1W;aTcSdo,el,fQgPje8lOmMnLo17pJque6sFturn,vDwa6V;eDi27;al,r1;er74oFpe8tEuD;lt,me;!a55;l71rt;air,eaDly,o53;l,t;dezvo2Zt;aDedy;ke,rk;ea1i4G;a6Iist0r5N;act6Yer1Vo71uD;nd,se;a38o6F;ch,s6G;c1Dge,iEke,lly,nDp1Wt1W;ge,k,t;n,se;es6Biv0;a04e00hYiXlToNrEsy4uD;mp,n4rcha1sh;aKeIiHoDu4O;be,ceFdu3fi2grDje8mi1p,te6;amDe6W;!me;ed,ss;ce,de,nt;sDy;er6Cs;cti3i1;iHlFoEp,re,sDuCw0;e,i5Yt;l,p;iDl;ce,sh;nt,s5V;aEce,e32uD;g,mp,n7;ce,nDy;!t;ck,le,n17pe,tNvot;a1oD;ne,tograph;ak,eFnErDt;fu55mA;!c32;!l,r;ckJiInHrFsEtDu1y;ch,e9;s,te;k,tD;!y;!ic;nt,r,se;!a7;bje8ff0il,oErDutli3Qver4B;bAd0ie9;ze;a4ReFoDur1;d,tD;e,i3;ed,gle8tD;!work;aMeKiIoEuD;rd0;ck,d3Rld,nEp,uDve;nt,th;it5EkD;ey;lk,n4Brr5CsDx;s,ta2B;asuBn4UrDss;ge,it;il,nFp,rk3WsEtD;ch,t0;h,k,t0;da5n0oeuvB;aLeJiHoEuD;mp,st;aEbby,ck,g,oDve;k,t;d,n;cDe,ft,mAnIst;en1k;aDc0Pe4vK;ch,d,k,p,se;bFcEnd,p,t4uD;gh,n4;e,k;el,o2U;eEiDno4E;ck,d,ll,ss;el,y;aEo1OuD;i3mp;m,zz;mpJnEr46ssD;ue;c1Rdex,fluGha2k,se2HteDvoi3;nt,rD;e6fa3viD;ew;en3;a8le2A;aJeHiGoEuD;g,nt;l3Ano2Dok,pDr1u1;!e;ghli1Fke,nt,re,t;aDd7lp;d,t;ck,mGndFrEsh,tDu9;ch,e;bo3Xm,ne4Eve6;!le;!m0;aMear,ift,lKossJrFuD;arDe4Alp,n;antee,d;aFiEoDumb2;uCwth;ll,nd,p;de,sp;ip;aBoDue;ss,w;g,in,me,ng,s,te,ze;aZeWiRlNoJrFuD;ck,el,nDss,zz;c38d;aEoDy;st,wn;cDgme,me,nchi1;tuB;cFg,il,ld,rD;ce,e29mDwa31;!at;us;aFe0Vip,oDy;at,ck,od,wD;!er;g,ke,me,re,sh,vo1E;eGgFlEnDre,sh,t,x;an3i0Q;e,m,t0;ht,uB;ld;aEeDn3;d,l;r,tuB;ce,il,ll,rm,vo2W;cho,d7ffe8nMsKxFyeD;!baD;ll;cGerci1hFpDtra8;eriDo0W;en3me9;au6ibA;el,han7u1;caDtima5;pe;count0d,vy;a01eSiMoJrEuDye;b,el,mp,pli2X;aGeFiEoD;ne,p;ft,ll,nk,p,ve;am,ss;ft,g,in;cEd7ubt,wnloD;ad;k,u0E;ge6p,sFt4vD;e,iDor3;de;char7gui1h,liEpD;at4lay,u5;ke;al,bKcJfeIlGmaCposAsEtaD;il;e07iD;gn,re;ay,ega5iD;ght;at,ct;li04rea1;a5ut;b,ma7n3rDte;e,t;a0Eent0Dh06irc2l03oKrFuD;be,e,rDt;b,e,l,ve;aGeFoEuDy;sh;p,ss,wd;dAep;ck,ft,sh;at,de,in,lTmMnFordina5py,re,st,uDv0;gh,nDp2rt;s01t;ceHdu8fli8glomeIsFtDveN;a8rD;a6ol;e9tru8;ct;ntDrn;ra5;bHfoGmFpD;leDouCromi1;me9;aCe9it,u5;rt;at,iD;ne;lap1oD;r,ur;aEiDoud,ub;ck,p;im,w;aEeDip;at,ck,er;iGllen7nErD;ge,m,t;ge,nD;el;n,r;er,re;ke,ll,mp,noe,pGrXsFtEuDve;se,ti0I;alog,ch;h,t;!tuB;re;a03eZiXlToPrHuEyD;pa11;bb2ck2dgEff0mp,rDst,zz;den,n;et;anJeHiFoadEuD;i1sh;ca6;be,d7;ge;aDed;ch,k;ch,d;aFg,mb,nEoDrd0tt2x,ycott;k,st,t;d,e;rd,st;aFeCiDoYur;nk,tz;nd;me;as,d,ke,nd,opsy,tD;!ch,e;aFef,lt,nDt;d,efA;it;r,t;ck,il,lan3nIrFsEtt2;le;e,h;!gDk;aDe;in;!d,g,k;bu1c05dZge,iYlVnTppQrLsIttGucEwaD;rd;tiD;on;aDempt;ck;k,sD;i6ocia5;st;chFmD;!oD;ur;!iD;ve;eEroa4;ch;al;chDg0sw0;or;aEt0;er;rm;d,m,r;dreHvD;an3oD;ca5;te;ce;ss;cDe,he,t;eFoD;rd,u9;nt;nt,ss;se\",\n \"Actor\": \"true¦0:7B;1:7G;2:6A;3:7F;4:7O;5:7K;a6Nb62c4Ud4Be41f3Sg3Bh30i2Uj2Qkin2Pl2Km26n1Zo1Sp0Vqu0Tr0JsQtJuHvEw8yo6;gi,ut6;h,ub0;aAe9i8o7r6;estl0it0;m2rk0;fe,nn0t2Bza2H;atherm2ld0;ge earn0it0nder0rri1;eter7i6oyF;ll5Qp,s3Z;an,ina2U;n6s0;c6Uder03;aoisea23e9herapi5iktok0o8r6ut1yco6S;a6endseLo43;d0mp,nscri0Bvel0;ddl0u1G;a0Qchn7en6na4st0;ag0;i3Oo0D;aiXcUeRhPiMki0mu26oJpGquaFtBu7wee6;p0theart;lt2per7r6;f0ge6Iviv1;h6inten0Ist5Ivis1;ero,um2;a8ep7r6;ang0eam0;bro2Nc2Ofa2Nmo2Nsi20;ff0tesm2;tt0;ec7ir2Do6;kesp59u0M;ia5Jt3;l7me6An,rcere6ul;r,ss;di0oi5;n7s6;sy,t0;g0n0;am2ephe1Iow6;girl,m2r2Q;cretInior cit3Fr6;gea4v6;a4it1;hol4Xi7reen6ulpt1;wr2C;e01on;l1nt;aEe9o8u6;l0nn6;er up,ingE;g40le mod3Zof0;a4Zc8fug2Ppo32searQv6;ere4Uolution6;ary;e6luYru22;ptio3T;bbi,dic5Vpp0;arter6e2Z;back;aYeWhSiRlOoKr8sycho7u6;nk,p31;logi5;aGeDiBo6;d9fess1g7ph47s6;pe2Ktitu51;en6ramm0;it1y;igy,uc0;est4Nme mini0Unce6s3E;!ss;a7si6;de4;ch0;ctiti39nk0P;dca0Oet,li6pula50rnst42;c2Itic6;al scie6i2;nti5;a6umb0;nn0y6;er,ma4Lwright;lgrim,one0;a8iloso7otogra7ra6ysi1V;se;ph0;ntom,rmaci5;r6ssi1T;form0s4O;i3El,nel3Yr8st1tr6wn;i6on;arWot;ent4Wi42tn0;ccupa4ffBp8r7ut6;ca5l0B;ac4Iganiz0ig2Fph2;er3t6;i1Jomet6;ri5;ic0spring;aBe9ie4Xo7u6;n,rser3J;b6mad,vi4V;le2Vo4D;i6mesis,phew;ce,ghb1;nny,rr3t1X;aEeDiAo7u6yst1Y;m8si16;der3gul,m7n6th0;arDk;!my;ni7s6;f02s0Jt0;on,st0;chan1Qnt1rcha4;gi9k0n8rtyr,t6y1;e,riar6;ch;ag0iac;ci2stra3I;a7e2Aieutena4o6;rd,s0v0;bor0d7ndlo6ss,urea3Fwy0ym2;rd;!y;!s28;e8o7u6;ggl0;gg0urna2U;st0;c3Hdol,llu3Ummigra4n6; l9c1Qfa4habi42nov3s7ve6;nt1stig3;pe0Nt6;a1Fig3ru0M;aw;airFeBistoAo8u6ygie1K;man6sba2H;!ita8;bo,st6usekN;age,e3P;ri2;ir,r6;m7o6;!ine;it;dress0sty2C;aLeIhostGirl26ladi3oCrand7u6;e5ru;c9daug0Jfa8m7pa6s2Y;!re4;a,o6;th0;hi1B;al7d6lf0;!de3A;ie,k6te26;eep0;!wr6;it0;isha,n6;i6tl04;us;mbl0rden0;aDella,iAo7r6;eela2Nie1P;e,re6ster pare4;be1Hm2r6st0;unn0;an2ZgZlmm17nanci0r6tt0;e6st la2H; marsh2OfigXm2;rm0th0;conoEdDlectriCm8n7x6;amin0cellency,i2A;emy,trepreneur,vironmenta1J;c8p6;er1loye6;e,r;ee;ci2;it1;mi5;aKeBi8ork,ri7u6we02;de,tche2H;ft0v0;ct3eti7plom2Hre6va;ct1;ci2ti2;aDcor3fencCi0InAput9s7tectLvel6;op0;ce1Ge6ign0;rt0;ee,y;iz6;en;em2;c1Ml0;d8nc0redev7ug6;ht0;il;!dy;a06e04fo,hXitizenWlToBr9u6;r3stomer6;! representat6;ive;e3it6;ic;lJmGnAord9rpor1Nu7w6;boy,ork0;n6ri0;ciTte1Q;in3;fidantAgressSs9t6;e0Kr6;ibut1o6;ll0;tab13ul1O;!e;edi2m6pos0rade;a0EeQissi6;on0;leag8on7um6;ni5;el;ue;e6own;an0r6;ic,k;!s;a9e7i6um;ld;erle6f;ad0;ir7nce6plFract0;ll1;m2wI;lebri6o;ty;dBptAr6shi0;e7pe6;nt0;r,t6;ak0;ain;et;aMeLiJlogg0oErBu6;dd0Fild0rgl9siness6;m2p7w6;om2;ers05;ar;i7o6;!k0th0;cklay0de,gadi0;hemi2oge8y6;!frie6;nd;ym2;an;cyc6sR;li5;atbox0ings;by,nk0r6;b0on7te6;nd0;!e07;c04dWge4nQpLrHsFtAu7yatull6;ah;nt7t6;h1oG;!ie;h8t6;e6orney;nda4;ie5le6;te;sis00tron6;aut,om0;chbis8isto7tis6;an,t;crU;hop;ost9p6;ari6rentiS;ti6;on;le;a9cest1im3nou8y6;bo6;dy;nc0;ly5rc6;hi5;mi8v6;entur0is1;er;ni7r6;al;str3;at1;or;counBquaintanArob9t6;ivi5or,re6;ss;st;at;ce;ta4;nt\",\n \"Adj|Noun\": \"true¦0:16;a1Db17c0Ud0Re0Mf0Dg0Ah08i06ju05l02mWnUoSpNrIsBt7u4v1watershed;a1ision0Z;gabo4nilla,ria1;b0Vnt;ndergr1pstairs;adua14ou1;nd;a3e1oken,ri0;en,r1;min0rori13;boo,n;age,e5ilv0Flack,o3quat,ta2u1well;bordina0Xper5;b0Lndard;ciali0Yl1vereign;e,ve16;cret,n1ri0;ior;a4e2ou1ubbiL;nd,tiY;ar,bBl0Wnt0p1side11;resent0Vublican;ci0Qsh;a4eriodic0last0Zotenti0r1;emi2incip0o1;!fession0;er,um;rall4st,tie0U;ff1pposi0Hv0;ens0Oi0C;agg01ov1uts;el;a5e3iniatJo1;bi01der07r1;al,t0;di1tr0N;an,um;le,riG;attOi2u1;sh;ber0ght,qC;stice,veniT;de0mpressioYn1;cumbe0Edividu0no0Dsta0Eterim;alf,o1umdrum;bby,melF;en2old,ra1;ph0Bve;er0ious;a7e5i4l3u1;git03t1;ure;uid;ne;llow,m1;aFiL;ir,t,vo1;riOuriO;l3p00x1;c1ecutUpeV;ess;d1iK;er;ar2e1;mographUrivO;k,l2;hiGlassSo2rude,unn1;ing;m5n1operK;creCstitueOte2vertab1;le;mpor1nt;ary;ic,m2p1;anion,lex;er2u1;ni8;ci0;al;e5lank,o4r1;i2u1;te;ef;ttom,urgeois;st;cadem9d6l2ntarct9r1;ab,ct8;e3tern1;at1;ive;rt;oles1ult;ce1;nt;ic\",\n \"Adj|Past\": \"true¦0:4Q;1:4C;2:4H;3:4E;a44b3Tc36d2Je29f20g1Wh1Si1Jj1Gkno1Fl1Am15n12o0Xp0Mqu0Kr08sLtEuAv9w4yellow0;a7ea6o4rinkl0;r4u3Y;n,ri0;k31th3;rp0sh0tZ;ari0e1O;n5p4s0;d1li1Rset;cov3derstood,i4;fi0t0;a8e3Rhr7i6ouTr4urn0wi4C;a4imm0ou2G;ck0in0pp0;ed,r0;eat2Qi37;m0nn0r4;get0ni2T;aOcKeIhGimFm0Hoak0pDt7u4;bsid3Ogge44s4;pe4ta2Y;ct0nd0;a8e7i2Eok0r5u4;ff0mp0nn0;ength2Hip4;ed,p0;am0reotyp0;in0t0;eci4ik0oH;al3Efi0;pRul1;a4ock0ut;d0r0;a4c1Jle2t31;l0s3Ut0;a6or5r4;at4e25;ch0;r0tt3;t4ut0;is2Mur1;aEe5o4;tt0;cAdJf2Bg9je2l8m0Knew0p7qu6s4;eTpe2t4;or0ri2;e3Dir0;e1lac0;at0e2Q;i0Rul1;eiv0o4ycl0;mme2Lrd0v3;in0lli0ti2A;a4ot0;li28;aCer30iBlAo9r5u4;mp0zzl0;e6i2Oo4;ce2Fd4lo1Anou30pos0te2v0;uc0;fe1CocCp0Iss0;i2Kli1L;ann0e2CuS;ck0erc0ss0;ck0i2Hr4st0;allLk0;bse7c6pp13rgan2Dver4;lo4whelm0;ok0;cupi0;rv0;aJe5o4;t0uri1A;ed0gle2;a6e5ix0o4ut0ys1N;di1Nt15u26;as0Clt0;n4rk0;ag0ufact0A;e6i5o4;ad0ck0st,v0;cens0m04st0;ft,v4;el0;tt0wn;a5o15u4;dg0s1B;gg0;llumSmpAn4sol1;br0cre1Ldebt0f8jZspir0t5v4;it0olv0;e4ox0Y;gr1n4re23;d0si15;e2l1o1Wuri1;li0o01r4;ov0;a6e1o4um03;ok0r4;ri0Z;mm3rm0;i6r5u4;a1Bid0;a0Ui0Rown;ft0;aAe9i8l6oc0Ir4;a4i0oz0Y;ctHg19m0;avo0Ju4;st3;ni08tt0x0;ar0;d0il0sc4;in1;dCl1mBn9quipp0s8x4;agger1c6p4te0T;a0Se4os0;ct0rie1D;it0;cap0tabliZ;cha0XgFha1As4;ur0;a0Zbarra0N;i0Buc1;aMeDi5r4;a01i0;gni08miniSre2s4;a9c6grun0Ft4;o4re0Hu17;rt0;iplWou4;nt0r4;ag0;bl0;cBdRf9l8p7ra6t5v4;elop0ot0;ail0ermQ;ng0;re07;ay0ight0;e4in0o0M;rr0;ay0enTor1;m5t0z4;ed,zl0;ag0p4;en0;aPeLhIlHo9r6u4;lt4r0stom03;iv1;a5owd0u4;sh0;ck0mp0;d0loAm7n4ok0v3;centr1f5s4troC;id3olid1;us0;b5pl4;ic1;in0;r0ur0;assi9os0utt3;ar5i4;ll0;g0m0;lebr1n6r4;ti4;fi0;tralJ;g0lcul1;aDewild3iCl9o7r5urn4;ed,t;ok4uis0;en;il0r0t4und;tl0;e5i4;nd0;ss0;as0;ffl0k0laMs0tt3;bPcNdKfIg0lFmaz0nDppBrm0ss9u5wa4;rd0;g5thor4;iz0;me4;nt0;o6u4;m0r0;li0re4;ci1;im1ticip1;at0;a5leg0t3;er0;rm0;fe2;ct0;ju5o7va4;nc0;st0;ce4knowledg0;pt0;and5so4;rb0;on0;ed\",\n \"Singular\": \"true¦0:5J;1:5H;2:4W;3:4S;4:52;5:57;6:5L;7:56;8:5B;a52b4Lc3Nd35e2Xf2Og2Jh28in24j23k22l1Um1Ln1Ho1Bp0Rqu0Qr0FsZtMuHvCw9x r58yo yo;a9ha3Po3Q;f3i4Rt0Gy9;! arou39;arCeAideo ga2Qo9;cabu4Jl5C;gOr9t;di4Zt1Y;iety,ni4P;nBp30rAs 9;do43s5E;bani1in0;coordinat3Ader9;estima1to24we41; rex,aKeJhHiFoErBuAv9;! show;m2On2rntLto1D;agedy,ib9o4E;e,u9;n0ta46;ni1p2rq3L;c,er,m9;etF;ing9ree26;!y;am,mp3F;ct2le6x return;aNcMeKhor4QiJkHoGpin off,tDuBy9;ll9ner7st4T;ab2X;b9i1n28per bowl,rro1X;st3Ltot0;atAipe2Go1Lrate7udent9;! lo0I;i39u1;ft ser4Lmeo1I;elet5i9;ll,r3V;b38gn2Tte;ab2Jc9min3B;t,urity gua2N;e6ho2Y;bbatic0la3Jndwi0Qpi5;av5eDhetor2iAo9;de6om,w;tAv9;erb2C;e,u0;bDcBf9publ2r10spi1;er9orm3;e6r0;i9ord label;p2Ht0;a1u46;estion mark,ot2F;aPeMhoLiIlGoErAu9yram1F;ddi3HpErpo1Js3J;eBo9;bl3Zs9;pe3Jta1;dic1Rmi1Fp1Qroga8ss relea1F;p9rt0;py;a9ebisci1;q2Dte;cn2eAg9;!gy;!r;ne call,tocoK;anut,dAr9t0yo1;cen3Jsp3K;al,est0;nop4rAt9;e,hog5;adi11i2V;atme0bj3FcBpia1rde0thers,utspok5ve9wn3;n,r9;ti0Pview;cuAe9;an;pi3;arBitAot9umb3;a2Fhi2R;e,ra1;cot2ra8;aFeCiAo9ur0;nopo4p18rni2Nsq1Rti36uld;c,li11n0As9tt5;chief,si34;dAnu,t9;al,i3;al,ic;gna1mm0nd15rsupi0te9yf4;ri0;aDegCiBu9;ddi1n9;ch;me,p09; Be0M;bor14y9; 9er;up;eyno1itt5;el4ourn0;cBdices,itia8ni25sAtel0Lvert9;eb1J;e28titu1;en8i2T;aIeEighDoAu9;man right,s22;me9rmoFsp1Ftb0K;! r9;un; scho0YriY;a9i1N;d9v5; start,pho9;ne;ndful,sh brown,v5ze;aBelat0Ilaci3r9ul4yp1S;an9enadi3id;a1Cd slam,ny;df4r9;l2ni1I;aGeti1HiFlu1oCrAun9;er0;ee market,i9onti3;ga1;l4ur9;so9;me;ePref4;br2mi4;conoFffi7gg,lecto0Rmbas1EnCpidem2s1Zth2venBxAyel9;id;ampZempl0Nte6;i19t;er7terp9;ri9;se;my;eLiEoBr9ump tru0U;agonf4i9;er,ve thru;cAg7i4or,ssi3wn9;side;to0EumenE;aEgniDnn3sAvide9;nd;conte6incen8p9tri11;osi9;ti0C;ta0H;le0X;athBcAf9ni0terre6;ault 05err0;al,im0;!b9;ed;aWeThMiLlJoDr9;edit caBuc9;ib9;le;rd;efficDke,lCmmuniqLnsApi3rr0t0Xus9yo1;in;erv9uI;ato02;ic,lQ;ie6;er7i9oth;e6n2;ty,vil wM;aDeqCick5ocoBr9;istmas car9ysanthemum;ol;la1;ue;ndeli3racteri9;st2;iAllEr9;e0tifica1;liZ;hi3nFpErCt9ucus;erpi9hedr0;ll9;ar;!bohyd9ri3;ra1;it0;aAe,nib0t9;on;l,ry;aMeLiop2leJoHrDu9;nny,r9tterf4;g9i0;la9;ry;eakAi9;ck;fa9throB;st;dy,ro9wl;ugh;mi9;sh;an,l4;nkiArri3;er;ng;cSdMlInFppeti1rDsBtt2utop9;sy;ic;ce6pe9;ct;r9sen0;ay;ecAoma4tiA;ly;do1;i5l9;er7y;gy;en; hominDjAvan9;tage;ec8;ti9;ve;em;cCeAqui9;tt0;ta1;te;iAru0;al;de6;nt\",\n \"Person|Noun\": \"true¦a0Eb07c03dWeUfQgOhLjHkiGlFmCnBolive,p7r4s3trini06v1wa0;ng,rd,tts;an,enus,iol0;a,et;ky,onPumm09;ay,e1o0uby;bin,d,se;ed,x;a2e1o0;l,tt04;aLnJ;dYge,tR;at,orm;a0eloW;t0x,ya;!s;a9eo,iH;ng,tP;a2e1o0;lGy;an,w3;de,smi4y;a0erb,iOolBuntR;ll,z0;el;ail,e0iLuy;ne;a1ern,i0lo;elds,nn;ith,n0;ny;a0dEmir,ula,ve;rl;a4e3i1j,ol0;ly;ck,x0;ie;an,ja;i0wn;sy;am,h0liff,rystal;a0in,ristian;mbers,ri0;ty;a4e3i2o,r0ud;an0ook;dy;ll;nedict,rg;k0nks;er;l0rt;fredo,ma\",\n \"Actor|Verb\": \"true¦aCb8c5doctor,engineAfool,g3host,judge,m2nerd,p1recruit,scout,ushAvolunteAwi0;mp,tneA;arent,ilot;an,ime;eek,oof,r0uide;adu8oom;ha1o0;ach,nscript,ok;mpion,uffeur;o2u0;lly,tch0;er;ss;ddi1ffili0rchite1;ate;ct\",\n \"MaleName\": \"true¦0:H6;1:FZ;2:DS;3:GQ;4:CZ;5:FV;6:GM;7:FP;8:GW;9:ET;A:C2;B:GD;aF8bE1cCQdBMeASfA1g8Yh88i7Uj6Sk6Bl5Mm48n3So3Ip33qu31r26s1Et0Ru0Ov0CwTxSyHzC;aCor0;cChC1karia,nAT;!hDkC;!aF6;!ar7CeF5;aJevgenBSoEuC;en,rFVsCu3FvEF;if,uf;nDs6OusC;ouf,s6N;aCg;s,tC;an,h0;hli,nCrosE1ss09;is,nC;!iBU;avi2ho5;aPeNiDoCyaEL;jcieBJlfgang,odrFutR;lFnC;f8TsC;lCt1;ow;bGey,frEhe4QlC;aE5iCy;am,e,s;ed8iC;d,ed;eAur;i,ndeD2rn2sC;!l9t1;lDyC;l1ne;lDtC;!er;aCHy;aKernDAiFladDoC;jteB0lodymyr;!iC;mFQsDB;cFha0ktBZnceDrgCOvC;a0ek;!nC;t,zo;!e4StBV;lCnC7sily;!entC;in9J;ghE2lCm70nax,ri,sm0;riCyss87;ch,k;aWeRhNiLoGrEuDyC;!l2roEDs1;n6r6E;avD0eCist0oy,um0;ntCRvBKy;bFdAWmCny;!asDmCoharu;aFFie,y;!z;iA6y;mCt4;!my,othy;adEeoDia0SomC;!as;!dor91;!de4;dFrC;enBKrC;anBJeCy;ll,nBI;!dy;dgh,ha,iCnn2req,tsu5V;cDAka;aYcotWeThPiMlobod0oKpenc2tEurDvenAEyCzym1;ed,lvest2;aj,e9V;anFeDuC;!aA;fan17phEQvCwaA;e77ie;!islaCl9;v,w;lom1rBuC;leymaDHta;dDgmu9UlCm1yabonga;as,v8B;!dhart8Yn9;aEeClo75;lCrm0;d1t1;h9Jne,qu1Jun,wn,yne;aDbastiEDk2Yl5Mpp,rgCth,ymoCU;e1Dio;m4n;!tC;!ie,y;eDPlFmEnCq67tosCMul;dCj2UtiA5;e01ro;!iATkeB6mC4u5;!ik,vato9K;aZeUheC8iRoGuDyC;an,ou;b99dDf4peAssC;!elEG;ol00y;an,bLc7MdJel,geIh0lHmGnEry,sDyC;!ce;ar7Ocoe,s;!aCnBU;ld,n;an,eo;a7Ef;l7Jr;e3Eg2n9olfo,riC;go;bBNeDH;cCl9;ar87c86h54kCo;!ey,ie,y;cFeA3gDid,ubByCza;an8Ln06;g85iC;naC6s;ep;ch8Kfa5hHin2je8HlGmFndEoHpha5sDul,wi36yC;an,mo8O;h9Im4;alDSol3O;iD0on;f,ph;ul;e9CinC;cy,t1;aOeLhilJiFrCyoG;aDeC;m,st1;ka85v2O;eDoC;tr;r8GtC;er,ro;!ipCl6H;!p6U;dCLrcy,tC;ar,e9JrC;!o7;b9Udra8So9UscAHtri62ulCv8I;!ie,o7;ctav6Ji2lImHndrBRrGsDtCum6wB;is,to;aDc6k6m0vCwaBE;al79;ma;i,vR;ar,er;aDeksandr,ivC;er,i2;f,v;aNeLguyBiFoCu3O;aDel,j4l0ma0rC;beAm0;h,m;cFels,g5i9EkDlC;es,s;!au,h96l78olaC;!i,y;hCkCol76;ol75;al,d,il,ls1vC;ilAF;hom,tC;e,hC;anCy;!a5i5;aYeViLoGuDyC;l4Nr1;hamDr84staC;fa,p6E;ed,mG;di10e,hamEis4JntDritz,sCussa;es,he;e,y;ad,ed,mC;ad,ed;cGgu5hai,kFlEnDtchC;!e8O;a9Pik;house,o7t1;ae73eC3ha8Iolaj;ah,hDkC;!ey,y;aDeC;al,l;el,l;hDlv3rC;le,ri8Ev4T;di,met;ay0c00gn4hWjd,ks2NlTmadZnSrKsXtDuric7VxC;imilBKwe8B;eHhEi69tCus,y69;!eo,hCia7;ew,i67;eDiC;as,eu,s;us,w;j,o;cHiGkFlEqu8Qsha83tCv3;iCy;!m,n;in,on;el,o7us;a6Yo7us;!elCin,o7us;!l8o;frAEi5Zny,u5;achDcoCik;lm;ai,y;amDdi,e5VmC;oud;adCm6W;ou;aulCi9P;ay;aWeOiMloyd,oJuDyC;le,nd1;cFdEiDkCth2uk;a7e;gi,s,z;ov7Cv6Hw6H;!as,iC;a6Een;g0nn52renDuCvA4we7D;!iS;!zo;am,n4oC;n5r;a9Yevi,la5KnHoFst2thaEvC;eCi;nte;bo;nCpo8V;!a82el,id;!nC;aAy;mEnd1rDsz73urenCwr6K;ce,t;ry,s;ar,beAont;aOeIhalHiFla4onr63rDu5SylC;e,s;istCzysztof;i0oph2;er0ngsl9p,rC;ilA9k,ollos;ed,id;en0iGnDrmCv4Z;it;!dDnCt1;e2Ny;ri4Z;r,th;cp2j4mEna8BrDsp6them,uC;ri;im,l;al,il;a03eXiVoFuC;an,lCst3;en,iC;an,en,o,us;aQeOhKkub4AnIrGsDzC;ef;eDhCi9Wue;!ua;!f,ph;dCge;i,on;!aCny;h,s,th6J;anDnC;!ath6Hie,n72;!nC;!es;!l,sCy;ph;o,qu3;an,mC;!i,m6V;d,ffFns,rCs4;a7JemDmai7QoCry;me,ni1H;i9Dy;!e73rC;ey,y;cKdBkImHrEsDvi2yC;dBs1;on,p2;ed,oDrCv67;e6Qod;d,s61;al,es5Wis1;a,e,oCub;b,v;ob,qu13;aTbNchiMgLke53lija,nuKonut,rIsEtCv0;ai,suC;ki;aDha0i8XmaCsac;el,il;ac,iaC;h,s;a,vinCw3;!g;k,nngu6X;nac1Xor;ka;ai,rahC;im;aReLoIuCyd6;beAgGmFsC;eyDsC;a3e3;in,n;ber5W;h,o;m2raDsse3wC;a5Pie;c49t1K;a0Qct3XiGnDrC;beAman08;dr7VrC;iCy2N;!k,q1R;n0Tt3S;bKlJmza,nIo,rEsDyC;a5KdB;an,s0;lEo67r2IuCv9;hi5Hki,tC;a,o;an,ey;k,s;!im;ib;a08e00iUlenToQrMuCyorgy;iHnFsC;!taC;f,vC;!e,o;n6tC;er,h2;do,lC;herDlC;auCerQ;me;aEegCov2;!g,orC;!io,y;dy,h7C;dfr9nza3XrDttfC;ri6C;an,d47;!n;acoGlEno,oCuseppe;rgiCvan6O;!o,s;be6Ies,lC;es;mo;oFrC;aDha4HrCt;it,y;ld,rd8;ffErgC;!e7iCy;!os;!r9;bElBrCv3;eCla1Nr4Hth,y;th;e,rC;e3YielC;!i4;aXeSiQlOorrest,rCyod2E;aHedFiC;edDtC;s,z;ri18;!d42eri11riC;ck,k;nCs2;cEkC;ie,lC;in,yn;esLisC;!co,z3M;etch2oC;ri0yd;d5lConn;ip;deriFliEng,rC;dinaCg4nan0B;nd8;pe,x;co;bCdi,hd;iEriC;ce,zC;io;an,en,o;benez2dZfrYit0lTmMnJo3rFsteb0th0ugenEvCymBzra;an,eCge4D;ns,re3K;!e;gi,iDnCrol,v3w3;est8ie,st;cCk;!h,k;o0DriCzo;co,qC;ue;aHerGiDmC;aGe3A;lCrh0;!iC;a10o,s;s1y;nu5;beAd1iEliDm2t1viCwood;n,s;ot28s;!as,j5Hot,sC;ha;a3en;!dGg6mFoDua2QwC;a2Pin;arC;do;oZuZ;ie;a04eTiOmitrNoFrag0uEwDylC;an,l0;ay3Hig4D;a3Gdl9nc0st3;minFnDri0ugCvydGy2S;!lF;!a36nCov0;e1Eie,y;go,iDykC;as;cCk;!k;i,y;armuFetDll1mitri7neCon,rk;sh;er,m6riC;ch;id;andLepak,j0lbeAmetri4nIon,rGsEvDwCxt2;ay30ey;en,in;hawn,moC;nd;ek,riC;ck;is,nC;is,y;rt;re;an,le,mKnIrEvC;e,iC;!d;en,iEne0PrCyl;eCin,yl;l45n;n,o,us;!iCny;el,lo;iCon;an,en,on;a0Fe0Ch03iar0lRoJrFuDyrC;il,us;rtC;!is;aEistC;iaCob12;no;ig;dy,lInErC;ey,neliCy;s,us;nEor,rDstaC;nt3;ad;or;by,e,in,l3t1;aHeEiCyde;fCnt,ve;fo0Xt1;menDt4;us;s,t;rFuDyC;!t1;dCs;e,io;enC;ce;aHeGrisC;!toC;phCs;!eC;!r;st2t;d,rCs;b5leC;s,y;cDdrCs6;ic;il;lHmFrC;ey,lDroCy;ll;!o7t1;er1iC;lo;!eb,v3;a09eZiVjorn,laUoSrEuCyr1;ddy,rtKst2;er;aKeFiEuDyC;an,ce,on;ce,no;an,ce;nDtC;!t;dDtC;!on;an,on;dFnC;dDisC;lav;en,on;!foOl9y;bby,gd0rCyd;is;i0Lke;bElDshC;al;al,lL;ek;nIrCshoi;at,nEtC;!raC;m,nd;aDhaCie;rd;rd8;!iDjam3nCs1;ie,y;to;kaMlazs,nHrC;n9rDtC;!holomew;eCy;tt;ey;dCeD;ar,iC;le;ar1Nb1Dd16fon15gust3hm12i0Zja0Yl0Bm07nTputsiSrGsaFugustEveDyCziz;a0kh0;ry;o,us;hi;aMchiKiJjun,mHnEon,tCy0;em,hCie,ur8;ur;aDoC;!ld;ud,v;aCin;an,nd8;!el,ki;baCe;ld;ta;aq;aMdHgel8tCw6;hoFoC;iDnC;!i8y;ne;ny;er7rCy;eDzC;ej;!as,i,j,s,w;!s;s,tolC;iCy;!y;ar,iEmaCos;nu5r;el;ne,r,t;aVbSdBeJfHiGl01onFphonsEt1vC;aPin;on;e,o;so,zo;!sR;!onZrC;ed;c,jaHksFssaHxC;!andC;er,rC;e,os,u;andCei;ar,er,r;ndC;ro;en;eDrecC;ht;rt8;dd3in,n,sC;taC;ir;ni;dDm6;ar;an,en;ad,eC;d,t;in;so;aGi,olErDvC;ik;ian8;f8ph;!o;mCn;!a;dGeFraDuC;!bakr,lfazl;hCm;am;!l;allFel,oulaye,ulC;!lDrahm0;an;ah,o;ah;av,on\",\n \"Uncountable\": \"true¦0:2E;1:2L;2:33;a2Ub2Lc29d22e1Rf1Ng1Eh16i11j0Yk0Wl0Rm0Hn0Do0Cp03rZsLt9uran2Jv7w3you gu0E;a5his17i4oo3;d,l;ldlife,ne;rm8t1;apor,ernacul29i3;neg28ol1Otae;eDhBiAo8r4un3yranny;a,gst1B;aff2Oea1Ko4ue nor3;th;o08u3;bleshoot2Ose1Tt;night,othpas1Vwn3;foEsfoE;me off,n;er3und1;e,mod2S;a,nnis;aDcCeBhAi9ki8o7p6t4u3weepstak0;g1Unshi2Hshi;ati08e3;am,el;ace2Keci0;ap,cc1meth2C;n,ttl0;lk;eep,ingl0or1C;lf,na1Gri0;ene1Kisso1C;d0Wfe2l4nd,t3;i0Iurn;m1Ut;abi0e4ic3;e,ke15;c3i01laxa11search;ogni10rea10;a9e8hys7luto,o5re3ut2;amble,mis0s3ten20;en1Zs0L;l3rk;i28l0EyH; 16i28;a24tr0F;nt3ti0M;i0s;bstetri24vercrowd1Qxyg09;a5e4owada3utella;ys;ptu1Ows;il poliZtional securi2;aAe8o5u3;m3s1H;ps;n3o1K;ey,o3;gamy;a3cha0Elancholy,rchandi1Htallurgy;sl0t;chine3g1Aj1Hrs,thema1Q; learn1Cry;aught1e6i5ogi4u3;ck,g12;c,s1M;ce,ghtn18nguis1LteratWv1;ath1isVss;ara0EindergartPn3;icke0Aowled0Y;e3upit1;a3llyfiGwel0G;ns;ce,gnor6mp5n3;forma00ter3;net,sta07;atiSort3rov;an18;a7e6isto09o3ung1;ckey,mework,ne4o3rseradi8spitali2use arrest;ky;s2y;adquarteXre;ir,libut,ppiHs3;hi3te;sh;ene8l6o5r3um,ymnas11;a3eZ;niUss;lf,re;ut3yce0F;en; 3ti0W;edit0Hpo3;ol;aNicFlour,o4urnit3;ure;od,rgive3uri1wl;ness;arCcono0LducaBlectr9n7quip8thi0Pvery6x3;ist4per3;ti0B;en0J;body,o08th07;joy3tertain3;ment;ici2o3;ni0H;tiS;nings,th;emi02i6o4raugh3ynas2;ts;pe,wnstai3;rs;abet0ce,s3;honZrepu3;te;aDelciChAivi07l8o3urrency;al,ld w6mmenta5n3ral,ttIuscoB;fusiHt 3;ed;ry;ar;assi01oth0;es;aos,e3;eMwK;us;d,rO;a8i6lood,owlHread5u3;ntGtt1;er;!th;lliarJs3;on;g3ss;ga3;ge;cKdviJeroGirFmBn6ppeal court,r4spi3thleL;rin;ithmet3sen3;ic;i6y3;o4th3;ing;ne;se;en5n3;es2;ty;ds;craft;bi8d3nau7;yna3;mi6;ce;id,ous3;ti3;cs\",\n \"Infinitive\": \"true¦0:9G;1:9T;2:AD;3:90;4:9Z;5:84;6:AH;7:A9;8:92;9:A0;A:AG;B:AI;C:9V;D:8R;E:8O;F:97;G:6H;H:7D;a94b8Hc7Jd68e4Zf4Mg4Gh4Ai3Qj3Nk3Kl3Bm34nou48o2Vp2Equ2Dr1Es0CtZuTvRwI;aOeNiLors5rI;eJiI;ng,te;ak,st3;d5e8TthI;draw,er;a2d,ep;i2ke,nIrn;d1t;aIie;liADniAry;nJpI;ho8Llift;cov1dJear8Hfound8DlIplug,rav82tie,ve94;eaAo3X;erIo;cut,go,staAFvalA3w2G;aSeQhNoMrIu73;aIe72;ffi3Smp3nsI;aBfo7CpI;i8oD;pp3ugh5;aJiJrIwaD;eat5i2;nk;aImA0;ch,se;ck3ilor,keImp1r8L;! paD;a0Ic0He0Fh0Bi0Al08mugg3n07o05p02qu01tUuLwI;aJeeIim;p,t5;ll7Wy;bNccMffLggeCmmKppJrI;mouFpa6Zvi2;o0re6Y;ari0on;er,i4;e7Numb;li9KmJsiIveD;de,st;er9it;aMe8MiKrI;ang3eIi2;ng27w;fIng;f5le;b,gg1rI;t3ve;a4AiA;a4UeJit,l7DoI;il,of;ak,nd;lIot7Kw;icEve;atGeak,i0O;aIi6;m,y;ft,ng,t;aKi6CoJriIun;nk,v6Q;ot,rt5;ke,rp5tt1;eIll,nd,que8Gv1w;!k,m;aven9ul8W;dd5tis1Iy;a0FeKiJoI;am,t,ut;d,p5;a0Ab08c06d05f01group,hea00iZjoi4lXmWnVpTq3MsOtMup,vI;amp,eJiIo3B;sEve;l,rI;e,t;i8rI;ie2ofE;eLiKpo8PtIurfa4;o24rI;aHiBuctu8;de,gn,st;mb3nt;el,hra0lIreseF;a4e71;d1ew,o07;aHe3Fo2;a7eFiIo6Jy;e2nq41ve;mbur0nf38;r0t;inKleBocus,rJuI;el,rbiA;aBeA;an4e;aBu4;ei2k8Bla43oIyc3;gni39nci3up,v1;oot,uI;ff;ct,d,liIp;se,ze;tt3viA;aAenGit,o7;aWerUinpoiFlumm1LoTrLuI;b47ke,niArIt;poDsuI;aFe;eMoI;cKd,fe4XhibEmo7noJpo0sp1tru6vI;e,i6o5L;un4;la3Nu8;aGclu6dJf1occupy,sup0JvI;a6BeF;etermi4TiB;aGllu7rtr5Ksse4Q;cei2fo4NiAmea7plex,sIva6;eve8iCua6;mp1rItrol,ve;a6It6E;bOccuNmEpMutLverIwe;l07sJtu6Yu0wI;helm;ee,h1F;gr5Cnu2Cpa4;era7i4Ipo0;py,r;ey,seItaH;r2ss;aMe0ViJoIultiply;leCu6Pw;micJnIspla4;ce,g3us;!k;iIke,na9;m,ntaH;aPeLiIo0u3N;ke,ng1quIv5;eIi6S;fy;aKnIss5;d,gI;th5;rn,ve;ng2Gu1N;eep,idnJnI;e4Cow;ap;oHuI;gg3xtaI;po0;gno8mVnIrk;cTdRfQgeChPitia7ju8q1CsNtKun6EvI;a6eIo11;nt,rt,st;erJimi6BoxiPrI;odu4u6;aBn,pr03ru6C;iCpi8tIu8;all,il,ruB;abEibE;eCo3Eu0;iIul9;ca7;i7lu6;b5Xmer0pI;aLer4Uin9ly,oJrI;e3Ais6Bo2;rt,se,veI;riA;le,rt;aLeKiIoiCuD;de,jaInd1;ck;ar,iT;mp1ng,pp5raIve;ng5Mss;ath1et,iMle27oLrI;aJeIow;et;b,pp3ze;!ve5A;gg3ve;aTer45i5RlSorMrJuI;lf4Cndrai0r48;eJiIolic;ght5;e0Qsh5;b3XeLfeEgJsI;a3Dee;eIi2;!t;clo0go,shIwa4Z;ad3F;att1ee,i36;lt1st5;a0OdEl0Mm0FnXquip,rWsVtGvTxI;aRcPeDhOiNpJtIu6;ing0Yol;eKi8lIo0un9;aHoI;it,re;ct,di7l;st,t;a3oDu3B;e30lI;a10u6;lt,mi28;alua7oI;ke,l2;chew,pou0tab19;a0u4U;aYcVdTfSgQhan4joy,lPqOrNsuMtKvI;e0YisI;a9i50;er,i4rI;aHenGuC;e,re;iGol0F;ui8;ar9iC;a9eIra2ulf;nd1;or4;ang1oIu8;r0w;irc3lo0ou0ErJuI;mb1;oaGy4D;b3ct;bKer9pI;hasiIow1;ze;aKody,rI;a4oiI;d1l;lm,rk;ap0eBuI;ci40de;rIt;ma0Rn;a0Re04iKo,rIwind3;aw,ed9oI;wn;agno0e,ff1g,mi2Kne,sLvI;eIul9;rIst;ge,t;aWbVcQlod9mant3pNru3TsMtI;iIoDu37;lJngI;uiA;!l;ol2ua6;eJlIo0ro2;a4ea0;n0r0;a2Xe36lKoIu0S;uIv1;ra9;aIo0;im;a3Kur0;b3rm;af5b01cVduBep5fUliTmQnOpMrLsiCtaGvI;eIol2;lop;ch;a20i2;aDiBloIoD;re,y;oIy;te,un4;eJoI;liA;an;mEv1;a4i0Ao06raud,y;ei2iMla8oKrI;ee,yI;!pt;de,mIup3;missi34po0;de,ma7ph1;aJrief,uI;g,nk;rk;mp5rk5uF;a0Dea0h0Ai09l08oKrIurta1G;a2ea7ipp3uI;mb3;ales4e04habEinci6ll03m00nIrro6;cXdUfQju8no7qu1sLtKvI;eIin4;ne,r9y;aHin2Bribu7;er2iLoli2Epi8tJuI;lt,me;itu7raH;in;d1st;eKiJoIroFu0;rm;de,gu8rm;ss;eJoI;ne;mn,n0;eIlu6ur;al,i2;buCe,men4pI;eIi3ly;l,te;eBi6u6;r4xiC;ean0iT;rcumveFte;eJirp,oI;o0p;riAw;ncIre5t1ulk;el;a02eSi6lQoPrKuI;iXrIy;st,y;aLeaKiJoad5;en;ng;stfeLtX;ke;il,l11mba0WrrMth1;eIow;ed;!coQfrie1LgPhMliLqueaKstJtrIwild1;ay;ow;th;e2tt3;a2eJoI;ld;ad;!in,ui3;me;bysEckfi8ff3tI;he;b15c0Rd0Iff0Ggree,l0Cm09n03ppZrXsQttOuMvJwaE;it;eDoI;id;rt;gIto0X;meF;aIeCraB;ch,in;pi8sJtoI;niA;aKeIi04u8;mb3rt,ss;le;il;re;g0Hi0ou0rI;an9i2;eaKly,oiFrI;ai0o2;nt;r,se;aMi0GnJtI;icipa7;eJoIul;un4y;al;ly0;aJu0;se;lga08ze;iKlI;e9oIu6;t,w;gn;ix,oI;rd;a03jNmiKoJsoI;rb;pt,rn;niIt;st1;er;ouJuC;st;rn;cLhie2knowled9quiItiva7;es4re;ce;ge;eQliOoKrJusI;e,tom;ue;mIst;moJpI;any,liA;da7;ma7;te;pt;andPduBet,i6oKsI;coKol2;ve;liArt,uI;nd;sh;de;ct;on\",\n \"Person\": \"true¦0:1Q;a29b1Zc1Md1Ee18f15g13h0Ri0Qj0Nk0Jl0Gm09n06o05p00rPsItCusain bolt,v9w4xzibit,y1;anni,oko on2uji,v1;an,es;en,o;a3ednesday adams,i2o1;lfram,o0Q;ll ferrell,z khalifa;lt disn1Qr1;hol,r0G;a2i1oltai06;n dies0Zrginia wo17;lentino rossi,n goG;a4h3i2ripp,u1yra banks;lZpac shakur;ger woods,mba07;eresa may,or;kashi,t1ylor;um,ya1B;a5carlett johanss0h4i3lobodan milosevic,no2ocr1Lpider1uperm0Fwami; m0Em0E;op dogg,w whi1H;egfried,nbad;akespeaTerlock holm1Sia labeouf;ddam hussa16nt1;a cla11ig9;aAe6i5o3u1za;mi,n dmc,paul,sh limbau1;gh;bin hood,d stew16nald1thko;in0Mo;han0Yngo starr,valdo;ese witherspo0i1mbrandt;ll2nh1;old;ey,y;chmaninoff,ffi,iJshid,y roma1H;a4e3i2la16o1uff daddy;cahont0Ie;lar,p19;le,rZ;lm17ris hilt0;leg,prah winfr0Sra;a2e1iles cra1Bostradam0J; yo,l5tt06wmQ;pole0s;a5e4i2o1ubar03;by,lie5net,rriss0N;randa ju1tt romn0M;ly;rl0GssiaB;cklemo1rkov,s0ta hari,ya angelou;re;ady gaga,e1ibera0Pu;bron jam0Xch wale1e;sa;anye west,e3i1obe bryant;d cudi,efer suther1;la0P;ats,sha;a2effers0fk,k rowling,rr tolki1;en;ck the ripp0Mwaharlal nehru,y z;liTnez,ron m7;a7e5i3u1;lk hog5mphrey1sa01;! bog05;l1tl0H;de; m1dwig,nry 4;an;ile selassFlle ber4m3rrison1;! 1;ford;id,mo09;ry;ast0iannis,o1;odwPtye;ergus0lorence nightinga08r1;an1ederic chopN;s,z;ff5m2nya,ustaXzeki1;el;eril lagasse,i1;le zatop1nem;ek;ie;a6e4i2octor w1rake;ho;ck w1ego maradoC;olf;g1mi lovaOnzel washingt0;as;l1nHrth vadR;ai lNt0;a8h5lint0o1thulhu;n1olio;an,fuci1;us;on;aucKop2ristian baMy1;na;in;millo,ptain beefhe4r1;dinal wols2son1;! palmF;ey;art;a8e5hatt,i3oHro1;ck,n1;te;ll g1ng crosby;atB;ck,nazir bhut2rtil,yon1;ce;to;nksy,rack ob1;ama;l 6r3shton kutch2vril lavig8yn ra1;nd;er;chimed2istot1;le;es;capo2paci1;no;ne\",\n \"Adjective\": \"true¦0:AI;1:BS;2:BI;3:BA;4:A8;5:84;6:AV;7:AN;8:AF;9:7H;A:BQ;B:AY;C:BC;D:BH;E:9Y;aA2b9Ec8Fd7We79f6Ng6Eh61i4Xj4Wk4Tl4Im41n3Po36p2Oquart7Pr2Ds1Dt14uSvOwFye29;aMeKhIiHoF;man5oFrth7G;dADzy;despreB1n w97s86;acked1UoleF;!sa6;ather1PeFll o70ste1D;!k5;nt1Ist6Ate4;aHeGiFola5T;bBUce versa,gi3Lle;ng67rsa5R;ca1gBSluAV;lt0PnLpHrGsFttermoBL;ef9Ku3;b96ge1; Hb32pGsFtiAH;ca6ide d4R;er,i85;f52to da2;a0Fbeco0Hc0Bd04e02f01gu1XheaBGiXkn4OmUnTopp06pRrNsJtHus0wF;aFiel3K;nt0rra0P;app0eXoF;ld,uS;eHi37o5ApGuF;perv06spec39;e1ok9O;en,ttl0;eFu5;cogn06gul2RlGqu84sF;erv0olv0;at0en33;aFrecede0E;id,rallel0;am0otic0;aFet;rri0tF;ch0;nFq26vers3;sur0terFv7U;eFrupt0;st0;air,inish0orese98;mploy0n7Ov97xpF;ect0lain0;eHisFocume01ue;clFput0;os0;cid0rF;!a8Scov9ha8Jlyi8nea8Gprivileg0sMwF;aFei9I;t9y;hGircumcFonvin2U;is0;aFeck0;lleng0rt0;b20ppea85ssuGttend0uthorF;iz0;mi8;i4Ara;aLeIhoHip 25oGrF;anspare1encha1i2;geth9leADp notch,rpB;rny,ugh6H;ena8DmpGrFs6U;r49tia4;eCo8P;leFst4M;nt0;a0Dc09e07h06i04ki03l01mug,nobbi4XoVpRqueami4XtKuFymb94;bHccinAi generis,pFr5;erFre7N;! dup9b,vi70;du0li7Lp6IsFurb7J;eq9Atanda9X;aKeJi16o2QrGubboFy4Q;rn;aightFin5GungS; fFfF;or7V;adfa9Pri6;lwa6Ftu82;arHeGir6NlendBot Fry;on;c3Qe1S;k5se; call0lImb9phistic16rHuFviV;ndFth1B;proof;dBry;dFub6; o2A;e60ipF;pe4shod;ll0n d7R;g2HnF;ceEg6ist9;am3Se9;co1Zem5lfFn6Are7; suf4Xi43;aGholFient3A;ar5;rlFt4A;et;cr0me,tisfac7F;aOeIheumatoBiGoF;bu8Ztt7Gy3;ghtFv3; 1Sf6X;cJdu8PlInown0pro69sGtF;ard0;is47oF;lu2na1;e1Suc45;alcit8Xe1ondi2;bBci3mpa1;aSePicayu7laOoNrGuF;bl7Tnjabi;eKiIoF;b7VfGmi49pFxi2M;er,ort81;a7uD;maFor,sti7va2;!ry;ciDexis0Ima2CpaB;in55puli8G;cBid;ac2Ynt 3IrFti2;ma40tFv7W;!i3Z;i2YrFss7R;anoBtF; 5XiF;al,s5V;bSffQkPld OnMrLth9utKverF;!aIbMdHhGni75seas,t,wF;ei74rou74;a63e7A;ue;ll;do1Ger,si6A;d3Qg2Aotu5Z; bFbFe on o7g3Uli7;oa80;fashion0school;!ay; gua7XbFha5Uli7;eat;eHligGsF;ce7er0So1C;at0;diFse;a1e1;aOeNiMoGuF;anc0de; moEnHrthFt6V;!eFwe7L;a7Krn;chaGdescri7Iprof30sF;top;la1;ght5;arby,cessa4ighbor5wlyw0xt;k0usiaFv3;ti8;aQeNiLoHuF;dIltiF;facet0p6;deHlGnFot,rbBst;ochro4Xth5;dy;rn,st;ddle ag0nF;dbloZi,or;ag9diocEga,naGrFtropolit4Q;e,ry;ci8;cIgenta,inHj0Fkeshift,mmGnFri4Oscu61ver18;da5Dy;ali4Lo4U;!stream;abEho;aOeLiIoFumberi8;ngFuti1R;stan3RtF;erm,i4H;ghtGteraF;l,ry,te;heart0wei5O;ft JgFss9th3;al,eFi0M;nda4;nguBps0te5;apGind5noF;wi8;ut;ad0itte4uniW;ce co0Hgno6Mll0Cm04nHpso 2UrF;a2releF;va1; ZaYcoWdReQfOgrNhibi4Ri05nMoLsHtFvalu5M;aAeF;nDrdepe2K;a7iGolFuboI;ub6ve1;de,gF;nifica1;rdi5N;a2er;own;eriIiLluenVrF;ar0eq5H;pt,rt;eHiGoFul1O;or;e,reA;fiFpe26termi5E;ni2;mpFnsideCrreA;le2;ccuCdeq5Ene,ppr4J;fFsitu,vitro;ro1;mJpF;arHeGl15oFrop9;li2r11;n2LrfeA;ti3;aGeFi18;d4BnD;tuE;egGiF;c0YteC;al,iF;tiF;ma2;ld;aOelNiLoFuma7;a4meInHrrGsFur5;ti6;if4E;e58o3U; ma3GsF;ick;ghfalut2HspF;an49;li00pf33;i4llow0ndGrdFtM; 05coEworki8;sy,y;aLener44iga3Blob3oKrGuF;il1Nng ho;aFea1Fizzl0;cGtF;ef2Vis;ef2U;ld3Aod;iFuc2D;nf2R;aVeSiQlOoJrF;aGeFil5ug3;q43tf2O;gFnt3S;i6ra1;lk13oHrF; keeps,eFge0Vm9tu41;g0Ei2Ds3R;liF;sh;ag4Mowe4uF;e1or45;e4nF;al,i2;d Gmini7rF;ti6ve1;up;bl0lDmIr Fst pac0ux;oGreacF;hi8;ff;ed,ili0R;aXfVlTmQnOqu3rMthere3veryday,xF;aApIquisi2traHuF;be48lF;ta1;!va2L;edRlF;icF;it;eAstF;whi6; Famor0ough,tiE;rou2sui2;erGiF;ne1;ge1;dFe2Aoq34;er5;ficF;ie1;g9sF;t,ygF;oi8;er;aWeMiHoGrFue;ea4owY;ci6mina1ne,r31ti8ubQ;dact2Jfficult,m,sGverF;ge1se;creGePjoi1paCtF;a1inA;et,te; Nadp0WceMfiLgeneCliJmuEpeIreliAsGvoF;id,ut;pFtitu2ul1L;eCoF;nde1;ca2ghF;tf13;a1ni2;as0;facto;i5ngero0I;ar0Ce09h07i06l05oOrIuF;rmudgeon5stoma4teF;sy;ly;aIeHu1EystalF; cleFli7;ar;epy;fFv17z0;ty;erUgTloSmPnGrpoCunterclVveFy;rt;cLdJgr21jIsHtrF;aFi2;dic0Yry;eq1Yta1;oi1ug3;escenFuN;di8;a1QeFiD;it0;atoDmensuCpF;ass1SulF;so4;ni3ss3;e1niza1;ci1J;ockwiD;rcumspeAvil;eFintzy;e4wy;leGrtaF;in;ba2;diac,ef00;a00ePiLliJoGrFuck nak0;and new,isk,on22;gGldface,naF; fi05fi05;us;nd,tF;he;gGpartisFzarE;an;tiF;me;autifOhiNlLnHsFyoN;iWtselF;li8;eGiFt;gn;aFfi03;th;at0oF;v0w;nd;ul;ckwards,rF;e,rT; priori,b13c0Zd0Tf0Ng0Ihe0Hl09mp6nt06pZrTsQttracti0MuLvIwF;aGkF;wa1B;ke,re;ant garGeraF;ge;de;diIsteEtF;heFoimmu7;nt07;re;to4;hGlFtu2;eep;en;bitIchiv3roHtF;ifiFsy;ci3;ga1;ra4;ry;pFt;aHetizi8rF;oprF;ia2;llFre1;ed,i8;ng;iquFsy;at0e;ed;cohKiJkaHl,oGriFterX;ght;ne,of;li7;ne;ke,ve;olF;ic;ad;ain07gressiIi6rF;eeF;ab6;le;ve;fGraB;id;ectGlF;ue1;ioF;na2; JaIeGvF;erD;pt,qF;ua2;ma1;hoc,infinitum;cuCquiGtu3u2;al;esce1;ra2;erSjeAlPoNrKsGuF;nda1;e1olu2trF;aAuD;se;te;eaGuF;pt;st;aFve;rd;aFe;ze;ct;ra1;nt\",\n \"Pronoun\": \"true¦elle,h3i2me,she,th0us,we,you;e0ou;e,m,y;!l,t;e,im\",\n \"Preposition\": \"true¦aPbMcLdKexcept,fIinGmid,notwithstandiWoDpXqua,sCt7u4v2w0;/o,hereSith0;! whHin,oW;ersus,i0;a,s a vis;n1p0;!on;like,til;h1ill,oward0;!s;an,ereby,r0;ough0u;!oM;ans,ince,o that,uch G;f1n0ut;!to;!f;! 0to;effect,part;or,r0;om;espite,own,u3;hez,irca;ar1e0oBy;sides,tween;ri7;bo8cross,ft7lo6m4propos,round,s1t0;!op;! 0;a whole,long 0;as;id0ong0;!st;ng;er;ut\",\n \"SportsTeam\": \"true¦0:18;1:1E;2:1D;3:14;a1Db15c0Sd0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Am01new UoRpKqueens parkJreal salt lake,sBt6utah jazz,vancouver whitecaps,w4yW;ashington 4h10;natio1Mredski2wizar0W;ampa bay 7e6o4;ronto 4ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasD;buccanee0ra0K;a8eattle 6porting kansas0Wt4; louis 4oke0V;c1Drams;marine0s4;eah13ounH;cramento Rn 4;antonio spu0diego 4francisco gJjose earthquak1;char08paB; ran07;a9h6ittsburgh 5ortland t4;imbe0rail blaze0;pirat1steele0;il4oenix su2;adelphia 4li1;eagl1philNunE;dr1;akland 4klahoma city thunder,rlando magic;athle0Lrai4;de0;england 8orleans 7york 4;g5je3knYme3red bul0Xy4;anke1;ian3;pelica2sain3;patrio3revolut4;ion;anchEeAi4ontreal impact;ami 8lwaukee b7nnesota 4;t5vi4;kings;imberwolv1wi2;rewe0uc0J;dolphi2heat,marli2;mphis grizz4ts;li1;a6eic5os angeles 4;clippe0dodFlaB;esterV; galaxy,ke0;ansas city 4nF;chiefs,roya0D; pace0polis col3;astr05dynamo,rocke3texa2;olden state warrio0reen bay pac4;ke0;allas 8e4i04od6;nver 6troit 4;lio2pisto2ti4;ge0;broncYnugge3;cowbo5maver4;icZ;ys;arEelLhAincinnati 8leveland 6ol4;orado r4umbus crew sc;api7ocki1;brow2cavalie0guar4in4;dia2;bengaVre4;ds;arlotte horAicago 4;b5cubs,fire,wh4;iteB;ea0ulQ;diff4olina panthe0; city;altimore Alackburn rove0oston 6rooklyn 4uffalo bilN;ne3;ts;cel5red4; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 4;brav1falco2h4;awA;ns;es;on villa,r4;os;c6di4;amondbac4;ks;ardi4;na4;ls\",\n \"Unit\": \"true¦a07b04cXdWexVfTgRhePinYjoule0BkMlJmDnan08oCp9quart0Bsq ft,t7volts,w6y2ze3°1µ0;g,s;c,f,n;dVear1o0;ttR; 0s 0;old;att,b;erNon0;!ne02;ascals,e1i0;cXnt00;rcent,tJ;hms,unceY;/s,e4i0m²,²,³;/h,cro2l0;e0liK;!²;grLsR;gCtJ;it1u0;menQx;erPreP;b5elvins,ilo1m0notO;/h,ph,²;!byGgrEmCs;ct0rtzL;aJogrC;allonJb0ig3rB;ps;a0emtEl oz,t4;hrenheit,radG;aby9;eci3m1;aratDe1m0oulombD;²,³;lsius,nti0;gr2lit1m0;et0;er8;am7;b1y0;te5;l,ps;c2tt0;os0;econd1;re0;!s\",\n \"Noun|Gerund\": \"true¦0:3O;1:3M;2:3N;3:3D;4:32;5:2V;6:3E;7:3K;8:36;9:3J;A:3B;a3Pb37c2Jd27e23f1Vg1Sh1Mi1Ij1Gk1Dl18m13n11o0Wp0Pques0Sr0EsTtNunderMvKwFyDzB;eroi0oB;ni0o3P;aw2eB;ar2l3;aEed4hispe5i5oCrB;ap8est3i1;n0ErB;ki0r31;i1r2s9tc9;isualizi0oB;lunt1Vti0;stan4ta6;aFeDhin6iCraBy8;c6di0i2vel1M;mi0p8;aBs1;c9si0;l6n2s1;aUcReQhOiMkatKl2Wmo6nowJpeItFuCwB;ea5im37;b35f0FrB;fi0vB;e2Mi2J;aAoryt1KrCuB;d2KfS;etc9ugg3;l3n4;bCi0;ebBi0;oar4;gnBnAt1;a3i0;ip8oB;p8rte2u1;a1r27t1;hCo5reBulp1;a2Qe2;edu3oo3;i3yi0;aKeEi4oCuB;li0n2;oBwi0;fi0;aFcEhear7laxi0nDpor1sB;pon4tructB;r2Iu5;de5;or4yc3;di0so2;p8ti0;aFeacek20laEoCrBublis9;a1Teten4in1oces7;iso2siB;tio2;n2yi0;ckaAin1rB;ki0t1O;fEpeDrganiCvB;erco24ula1;si0zi0;ni0ra1;fe5;avi0QeBur7;gotia1twor6;aDeCi2oB;de3nito5;a2dita1e1ssaA;int0XnBrke1;ifUufactu5;aEeaDiBodAyi0;cen7f1mi1stB;e2i0;r2si0;n4ug9;iCnB;ea4it1;c6l3;ogAuB;dAgg3stif12;ci0llust0VmDnBro2;nova1sp0NterBven1;ac1vie02;agi2plo4;aDea1iCoBun1;l4w3;ki0ri0;nd3rB;roWvB;es1;aCene0Lli4rBui4;ee1ie0N;rde2the5;aHeGiDlCorBros1un4;e0Pmat1;ir1oo4;gh1lCnBs9;anZdi0;i0li0;e3nX;r0Zscina1;a1du01nCxB;erci7plo5;chan1di0ginB;ee5;aLeHiGoub1rCum8wB;el3;aDeCiB;bb3n6vi0;a0Qs7;wi0;rTscoDvi0;ba1coZlBvelo8;eCiB;ve5;ga1;nGti0;aVelebUhSlPoDrBur3yc3;aBos7yi0;f1w3;aLdi0lJmFnBo6pi0ve5;dDsCvinB;ci0;trBul1;uc1;muniDpB;lBo7;ai2;ca1;lBo5;ec1;c9ti0;ap8eaCimToBubT;ni0t9;ni0ri0;aBee5;n1t1;ra1;m8rCs1te5;ri0;vi0;aPeNitMlLoGrDuB;dge1il4llBr8;yi0;an4eat9oadB;cas1;di0;a1mEokB;i0kB;ee8;pi0;bi0;es7oa1;c9i0;gin2lonAt1;gi0;bysit1c6ki0tt3;li0;ki0;bando2cGdverti7gi0pproac9rgDssuCtB;trac1;mi0;ui0;hi0;si0;coun1ti0;ti0;ni0;ng\",\n \"PhrasalVerb\": \"true¦0:92;1:96;2:8H;3:8V;4:8A;5:83;6:85;7:98;8:90;9:8G;A:8X;B:8R;C:8U;D:8S;E:70;F:97;G:8Y;H:81;I:7H;J:79;a9Fb7Uc6Rd6Le6Jf5Ig50h4Biron0j47k40l3Em31n2Yo2Wp2Cquiet Hr1Xs0KtZuXvacuu6QwNyammerBzK;ero Dip LonK;e0k0;by,ov9up;aQeMhLiKor0Mrit19;mp0n3Fpe0r5s5;ackAeel Di0S;aLiKn33;gh 3Wrd0;n Dr K;do1in,oJ;it 79k5lk Lrm 69sh Kt83v60;aw3do1o7up;aw3in,oC;rgeBsK;e 2herE;a00eYhViRoQrMuKypP;ckErn K;do1in,oJup;aLiKot0y 30;ckl7Zp F;ck HdK;e 5Y;n7Wp 3Es5K;ck MdLe Kghten 6me0p o0Rre0;aw3ba4do1in,up;e Iy 2;by,oG;ink Lrow K;aw3ba4in,up;ba4ov9up;aKe 77ll62;m 2r 5M;ckBke Llk K;ov9shit,u47;aKba4do1in,leave,o4Dup;ba4ft9pa69w3;a0Vc0Te0Mh0Ii0Fl09m08n07o06p01quar5GtQuOwK;earMiK;ngLtch K;aw3ba4o8K; by;cKi6Bm 2ss0;k 64;aReQiPoNrKud35;aigh2Det75iK;ke 7Sng K;al6Yup;p Krm2F;by,in,oG;c3Ln3Lr 2tc4O;p F;c3Jmp0nd LrKveAy 2O;e Ht 2L;ba4do1up;ar3GeNiMlLrKurB;ead0ingBuc5;a49it 6H;c5ll o3Cn 2;ak Fe1Xll0;a3Bber 2rt0und like;ap 5Vow Duggl5;ash 6Noke0;eep NiKow 6;cLp K;o6Dup;e 68;in,oK;ff,v9;de19gn 4NnKt 6Gz5;gKkE; al6Ale0;aMoKu5W;ot Kut0w 7M;aw3ba4f48oC;c2WdeEk6EveA;e Pll1Nnd Orv5tK; Ktl5J;do1foLin,o7upK;!on;ot,r5Z;aw3ba4do1in,o33up;oCto;al66out0rK;ap65ew 6J;ilAv5;aXeUiSoOuK;b 5Yle0n Kstl5;aLba4do1inKo2Ith4Nu5P;!to;c2Xr8w3;ll Mot LpeAuK;g3Ind17;a2Wf3Po7;ar8in,o7up;ng 68p oKs5;ff,p18;aKelAinEnt0;c6Hd K;o4Dup;c27t0;aZeYiWlToQrOsyc35uK;ll Mn5Kt K;aKba4do1in,oJto47up;pa4Dw3;a3Jdo1in,o21to45up;attleBess KiNop 2;ah2Fon;iLp Kr4Zu1Gwer 6N;do1in,o6Nup;nt0;aLuK;gEmp 6;ce u20y 6D;ck Kg0le 4An 6p5B;oJup;el 5NncilE;c53ir 39n0ss MtLy K;ba4oG; Hc2R;aw3ba4in,oJ;pKw4Y;e4Xt D;aLerd0oK;dAt53;il Hrrow H;aTeQiPoLuK;ddl5ll I;c1FnkeyMp 6uthAve K;aKdo1in,o4Lup;l4Nw3; wi4K;ss0x 2;asur5e3SlLss K;a21up;t 6;ke Ln 6rKs2Ax0;k 6ryA;do,fun,oCsure,up;a02eViQoLuK;ck0st I;aNc4Fg MoKse0;k Kse4D;aft9ba4do1forw37in56o0Zu46;in,oJ;d 6;e NghtMnLsKve 00;ten F;e 2k 2; 2e46;ar8do1in;aMt LvelK; oC;do1go,in,o7up;nEve K;in,oK;pKut;en;c5p 2sh LtchBughAy K;do1o59;in4Po7;eMick Lnock K;do1oCup;oCup;eLy K;in,up;l Ip K;aw3ba4do1f04in,oJto,up;aMoLuK;ic5mpE;ke3St H;c43zz 2;a01eWiToPuK;nLrrKsh 6;y 2;keLt K;ar8do1;r H;lKneErse3K;d Ke 2;ba4dKfast,o0Cup;ear,o1;de Lt K;ba4on,up;aw3o7;aKlp0;d Ml Ir Kt 2;fKof;rom;f11in,o03uW;cPm 2nLsh0ve Kz2P;at,it,to;d Lg KkerP;do1in,o2Tup;do1in,oK;ut,v9;k 2;aZeTive Rloss IoMrLunK; f0S;ab hold,in43ow 2U; Kof 2I;aMb1Mit,oLr8th1IuK;nd9;ff,n,v9;bo7ft9hQw3;aw3bKdo1in,oJrise,up,w3;a4ir2H;ar 6ek0t K;aLb1Fdo1in,oKr8up;ff,n,ut,v9;cLhKl2Fr8t,w3;ead;ross;d aKng 2;bo7;a0Ee07iYlUoQrMuK;ck Ke2N;ar8up;eLighten KownBy 2;aw3oG;eKshe27; 2z5;g 2lMol Krk I;aKwi20;bo7r8;d 6low 2;aLeKip0;sh0;g 6ke0mKrKtten H;e F;gRlPnNrLsKzzle0;h F;e Km 2;aw3ba4up;d0isK;h 2;e Kl 1T;aw3fPin,o7;ht ba4ure0;ePnLsK;s 2;cMd K;fKoG;or;e D;d04l 2;cNll Krm0t1G;aLbKdo1in,o09sho0Eth08victim;a4ehi2O;pa0C;e K;do1oGup;at Kdge0nd 12y5;in,o7up;aOi1HoNrK;aLess 6op KuN;aw3b03in,oC;gBwB; Ile0ubl1B;m 2;a0Ah05l02oOrLut K;aw3ba4do1oCup;ackBeep LoKy0;ss Dwd0;by,do1in,o0Uup;me NoLuntK; o2A;k 6l K;do1oG;aRbQforOin,oNtKu0O;hLoKrue;geth9;rough;ff,ut,v9;th,wK;ard;a4y;paKr8w3;rt;eaLose K;in,oCup;n 6r F;aNeLiK;ll0pE;ck Der Kw F;on,up;t 2;lRncel0rOsMtch LveE; in;o1Nup;h Dt K;doubt,oG;ry LvK;e 08;aw3oJ;l Km H;aLba4do1oJup;ff,n,ut;r8w3;a0Ve0MiteAl0Fo04rQuK;bblNckl05il0Dlk 6ndl05rLsKtMy FzzA;t 00;n 0HsK;t D;e I;ov9;anWeaUiLush K;oGup;ghQng K;aNba4do1forMin,oLuK;nd9p;n,ut;th;bo7lKr8w3;ong;teK;n 2;k K;do1in,o7up;ch0;arTg 6iRn5oPrNssMttlLunce Kx D;aw3ba4;e 6; ar8;e H;do1;k Dt 2;e 2;l 6;do1up;d 2;aPeed0oKurt0;cMw K;aw3ba4do1o7up;ck;k K;in,oC;ck0nk0stA; oQaNef 2lt0nd K;do1ov9up;er;up;r Lt K;do1in,oCup;do1o7;ff,nK;to;ck Pil0nMrgLsK;h D;ainBe D;g DkB; on;in,o7;aw3do1in,oCup;ff,ut;ay;ct FdQir0sk MuctionA; oG;ff;ar8o7;ouK;nd; o7;d K;do1oKup;ff,n;wn;o7up;ut\",\n \"ProperNoun\": \"true¦aIbDc8dalhousHe7f5gosford,h4iron maiden,kirby,landsdowne,m2nis,r1s0wembF;herwood,paldiB;iel,othwe1;cgi0ercedes,issy;ll;intBudsB;airview,lorence,ra0;mpt9nco;lmo,uro;a1h0;arlt6es5risti;rl0talina;et4i0;ng;arb3e0;et1nt0rke0;ley;on;ie;bid,jax\",\n \"Person|Place\": \"true¦a8d6h4jordan,k3orlando,s1vi0;ctor9rgin9;a0ydney;lvador,mara,ntia4;ent,obe;amil0ous0;ton;arw2ie0;go;lexandr1ust0;in;ia\",\n \"LastName\": \"true¦0:BR;1:BF;2:B5;3:BH;4:AX;5:9Y;6:B6;7:BK;8:B0;9:AV;A:AL;B:8Q;C:8G;D:7K;E:BM;F:AH;aBDb9Zc8Wd88e81f7Kg6Wh64i60j5Lk4Vl4Dm39n2Wo2Op25quispe,r1Ls0Pt0Ev03wTxSyKzG;aIhGimmerm6A;aGou,u;ng,o;khar5ytsE;aKeun9BiHoGun;koya32shiBU;!lG;diGmaz;rim,z;maGng;da,g52mo83sGzaC;aChiBV;iao,u;aLeJiHoGright,u;jcA5lff,ng;lGmm0nkl0sniewsC;kiB1liams33s3;bGiss,lt0;b,er,st0;a6Vgn0lHtG;anabe,s3;k0sh,tG;e2Non;aLeKiHoGukD;gt,lk5roby5;dHllalGnogr3Kr1Css0val3S;ba,ob1W;al,ov4;lasHsel8W;lJn dIrgBEsHzG;qu7;ilyEqu7siljE;en b6Aijk,yk;enzueAIverde;aPeix1VhKi2j8ka43oJrIsui,uG;om5UrG;c2n0un1;an,emblA7ynisC;dorAMlst3Km4rrAth;atch0i8UoG;mHrG;are84laci79;ps3sG;en,on;hirDkah9Mnaka,te,varA;a06ch01eYhUiRmOoMtIuHvGzabo;en9Jobod3N;ar7bot4lliv2zuC;aIeHoG;i7Bj4AyanAB;ele,in2FpheBvens25;l8rm0;kol5lovy5re7Tsa,to,uG;ng,sa;iGy72;rn5tG;!h;l71mHnGrbu;at9cla9Egh;moBo7M;aIeGimizu;hu,vchG;en8Luk;la,r1G;gu9infe5YmGoh,pulveA7rra5P;jGyG;on5;evi6iltz,miHneid0roed0uGwarz;be3Elz;dHtG;!t,z;!t;ar4Th8ito,ka4OlJnGr4saCto,unde19v4;ch7dHtGz;a5Le,os;b53e16;as,ihDm4Po0Y;aVeSiPoJuHyG;a6oo,u;bio,iz,sG;so,u;bKc8Fdrigue67ge10j9YmJosevelt,sItHux,wG;e,li6;a9Ch;enb4Usi;a54e4L;erts15i93;bei4JcHes,vGzzo;as,e9;ci,hards12;ag2es,iHut0yG;es,nol5N;s,t0;dImHnGsmu97v6C;tan1;ir7os;ic,u;aUeOhMiJoHrGut8;asad,if6Zochazk27;lishc2GpGrti72u10we76;e3Aov51;cHe45nG;as,to;as70hl0;aGillips;k,m,n6I;a3Hde3Wete0Bna,rJtG;ersHrovGters54;!a,ic;!en,on;eGic,kiBss3;i9ra,tz,z;h86k,padopoulIrk0tHvG;ic,l4N;el,te39;os;bMconn2Ag2TlJnei6PrHsbor6XweBzG;dem7Rturk;ella4DtGwe6N;ega,iz;iGof7Hs8I;vGyn1R;ei9;aSri1;aPeNiJoGune50ym2;rHvGwak;ak4Qik5otn66;odahl,r4S;cholsZeHkolGls4Jx3;ic,ov84;ls1miG;!n1;ils3mG;co4Xec;gy,kaGray2sh,var38;jiGmu9shiG;ma;a07c04eZiWoMuHyeG;rs;lJnIrGssoli6S;atGp03r7C;i,ov4;oz,te58;d0l0;h2lOnNo0RrHsGza1A;er,s;aKeJiIoz5risHtG;e56on;!on;!n7K;au,i9no,t5J;!lA;r1Btgome59;i3El0;cracFhhail5kkeHlG;l0os64;ls1;hmeJiIj30lHn3Krci0ssiGyer2N;!er;n0Po;er,j0;dDti;cartHlG;aughl8e2;hy;dQe7Egnu68i0jer3TkPmNnMrItHyG;er,r;ei,ic,su21thews;iHkDquAroqu8tinG;ez,s;a5Xc,nG;!o;ci5Vn;a5UmG;ad5;ar5e6Kin1;rig77s1;aVeOiLoJuHyG;!nch;k4nGo;d,gu;mbarGpe3Fvr4we;di;!nGu,yana2B;coln,dG;b21holm,strom;bedEfeKhIitn0kaHn8rGw35;oy;!j;m11tG;in1on1;bvGvG;re;iGmmy,ng,rs2Qu,voie,ws3;ne,t1F;aZeYh2iWlUnez50oNrJuHvar2woG;k,n;cerGmar68znets5;a,o34;aHem0isGyeziu;h23t3O;m0sni4Fus3KvG;ch4O;bay57ch,rh0Usk16vaIwalGzl5;czGsC;yk;cIlG;!cGen4K;huk;!ev4ic,s;e8uiveG;rt;eff0kGl4mu9nnun1;ucF;ll0nnedy;hn,llKminsCne,pIrHstra3Qto,ur,yGzl5;a,s0;j0Rls22;l2oG;or;oe;aPenOha6im14oHuG;ng,r4;e32hInHrge32u6vG;anD;es,ss3;anHnsG;en,on,t3;nesGs1R;en,s1;kiBnings,s1;cJkob4EnGrv0E;kDsG;en,sG;en0Ion;ks3obs2A;brahimDglesi5Nke5Fl0Qno07oneIshikHto,vanoG;u,v54;awa;scu;aVeOiNjaltal8oIrist50uG;!aGb0ghAynh;m2ng;a6dz4fIjgaa3Hk,lHpUrGwe,x3X;ak1Gvat;mAt;er,fm3WmG;ann;ggiBtchcock;iJmingw4BnHrGss;nand7re9;deGriks1;rs3;kkiHnG;on1;la,n1;dz4g1lvoQmOns0ZqNrMsJuIwHyG;asFes;kiB;g1ng;anHhiG;mo14;i,ov0J;di6p0r10t;ue;alaG;in1;rs1;aVeorgUheorghe,iSjonRoLrJuGw3;errGnnar3Co,staf3Ctierr7zm2;a,eG;ro;ayli6ee2Lg4iffithGub0;!s;lIme0UnHodGrbachE;e,m2;calvAzale0S;dGubE;bGs0E;erg;aj,i;bs3l,mGordaO;en7;iev3U;gnMlJmaIndFo,rGsFuthi0;cGdn0za;ia;ge;eaHlG;agh0i,o;no;e,on;aVerQiLjeldsted,lKoIrHuG;chs,entAji41ll0;eem2iedm2;ntaGrt8urni0wl0;na;emi6orA;lipIsHtzgeraG;ld;ch0h0;ovG;!ic;hatDnanIrG;arGei9;a,i;deY;ov4;b0rre1D;dKinsJriksIsGvaB;cob3GpGtra3D;inoza,osiQ;en,s3;te8;er,is3warG;ds;aXePiNjurhuMoKrisco15uHvorakG;!oT;arte,boHmitru,nn,rGt3C;and,ic;is;g2he0Omingu7nErd1ItG;to;us;aGcki2Hmitr2Ossanayake,x3;s,z; JbnaIlHmirGrvisFvi,w2;!ov4;gado,ic;th;bo0groot,jo6lHsilGvriA;va;a cruz,e3uG;ca;hl,mcevsCnIt2WviG;dGes,s;ov,s3;ielsGku22;!en;ki;a0Be06hRiobQlarkPoIrGunningh1H;awfo0RivGuz;elli;h1lKntJoIrGs2Nx;byn,reG;a,ia;ke,p0;i,rer2K;em2liB;ns;!e;anu;aOeMiu,oIristGu6we;eGiaG;ns1;i,ng,p9uHwGy;!dH;dGng;huJ;!n,onGu6;!g;kJnIpm2ttHudhGv7;ry;erjee,o14;!d,g;ma,raboG;rty;bJl0Cng4rG;eghetHnG;a,y;ti;an,ota1C;cerAlder3mpbeLrIstGvadi0B;iGro;llo;doHl0Er,t0uGvalho;so;so,zo;ll;a0Fe01hYiXlUoNrKuIyG;rLtyG;qi;chan2rG;ke,ns;ank5iem,oGyant;oks,wG;ne;gdan5nIruya,su,uchaHyKziG;c,n5;rd;darGik;enG;ko;ov;aGond15;nco,zG;ev4;ancFshw16;a08oGuiy2;umGwmG;ik;ckRethov1gu,ktPnNrG;gJisInG;ascoGds1;ni;ha;er,mG;anG;!n;gtGit7nP;ss3;asF;hi;er,hG;am;b4ch,ez,hRiley,kk0ldw8nMrIshHtAu0;es;ir;bInHtlGua;ett;es,i0;ieYosa;dGik;a9yoG;padhyG;ay;ra;k,ng;ic;bb0Acos09d07g04kht05lZnPrLsl2tJyG;aHd8;in;la;chis3kiG;ns3;aImstro6sl2;an;ng;ujo,ya;dJgelHsaG;ri;ovG;!a;ersJov,reG;aGjEws;ss1;en;en,on,s3;on;eksejEiyEmeiIvG;ar7es;ez;da;ev;arwHuilG;ar;al;ams,l0;er;ta;as\",\n \"Ordinal\": \"true¦eBf7nin5s3t0zeroE;enDhir1we0;lfCn7;d,t3;e0ixt8;cond,vent7;et0th;e6ie7;i2o0;r0urt3;tie4;ft1rst;ight0lev1;e0h,ie1;en0;th\",\n \"Cardinal\": \"true¦bEeBf5mEnine7one,s4t0zero;en,h2rDw0;e0o;lve,n5;irt6ousands,ree;even2ix2;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illions\",\n \"Multiple\": \"true¦b3hundred,m3qu2se1t0;housand,r2;pt1xt1;adr0int0;illion\",\n \"City\": \"true¦0:74;1:61;2:6G;3:6J;4:5S;a68b53c4Id48e44f3Wg3Hh39i31j2Wk2Fl23m1Mn1Co19p0Wq0Ur0Os05tRuQvLwDxiBy9z5;a7h5i4Muri4O;a5e5ongsh0;ng3H;greb,nzib5G;ang2e5okoha3Sunfu;katerin3Hrev0;a5n0Q;m5Hn;arsBeAi6roclBu5;h0xi,zh5P;c7n5;d5nipeg,terth4;hoek,s1L;hi5Zkl3A;l63xford;aw;a8e6i5ladivost5Molgogr6L;en3lni6S;ni22r5;o3saill4N;lenc4Wncouv3Sr3ughn;lan bat1Crumqi,trecht;aFbilisi,eEheDiBo9r7u5;l21n63r5;in,ku;i5ondh62;es51poli;kyo,m2Zron1Pulo5;n,uS;an5jua3l2Tmisoa6Bra3;j4Tshui; hag62ssaloni2H;gucigal26hr0l av1U;briz,i6llinn,mpe56ng5rtu,shk2R;i3Esh0;an,chu1n0p2Eyu0;aEeDh8kopje,owe1Gt7u5;ra5zh4X;ba0Ht;aten is55ockholm,rasbou67uttga2V;an8e6i5;jiazhua1llo1m5Xy0;f50n5;ya1zh4H;gh3Kt4Q;att45o1Vv44;cramen16int ClBn5o paulo,ppo3Rrajevo; 7aa,t5;a 5o domin3E;a3fe,m1M;antonio,die3Cfrancisco,j5ped3Nsalvad0J;o5u0;se;em,t lake ci5Fz25;lou58peters24;a9e8i6o5;me,t59;ga,o5yadh;! de janei3F;cife,ims,nn3Jykjavik;b4Sip4lei2Inc2Pwalpindi;ingdao,u5;ez2i0Q;aFeEhDiCo9r7u6yong5;ya1;eb59ya1;a5etor3M;g52to;rt5zn0; 5la4Co;au prin0Melizabe24sa03;ls3Prae5Atts26;iladelph3Gnom pe1Aoenix;ki1tah tik3E;dua,lerYnaji,r4Ot5;na,r32;ak44des0Km1Mr6s5ttawa;a3Vlo;an,d06;a7ew5ing2Fovosibir1Jyc; 5cast36;del24orlea44taip14;g8iro4Wn5pl2Wshv33v0;ch6ji1t5;es,o1;a1o1;a6o5p4;ya;no,sa0W;aEeCi9o6u5;mb2Ani26sc3Y;gadishu,nt6s5;c13ul;evideo,pelli1Rre2Z;ami,l6n14s5;kolc,sissauga;an,waukee;cca,d5lbour2Mmph41ndo1Cssi3;an,ell2Xi3;cau,drAkass2Sl9n8r5shh4A;aca6ib5rakesh,se2L;or;i1Sy;a4EchFdal0Zi47;mo;id;aDeAi8o6u5vSy2;anMckn0Odhia3;n5s angel26;d2g bea1N;brev2Be3Lma5nz,sb2verpo28;!ss27; ma39i5;c5pzig;est16; p6g5ho2Wn0Cusan24;os;az,la33;aHharFiClaipeBo9rak0Du7y5;iv,o5;to;ala lump4n5;mi1sh0;hi0Hlka2Xpavog4si5wlo2;ce;da;ev,n5rkuk;gst2sha5;sa;k5toum;iv;bHdu3llakuric0Qmpa3Fn6ohsiu1ra5un1Iwaguc0Q;c0Pj;d5o,p4;ah1Ty;a7e6i5ohannesV;l1Vn0;dd36rusalem;ip4k5;ar2H;bad0mph1OnArkutUs7taXz5;mir,tapala5;pa;fah0l6tanb5;ul;am2Zi2H;che2d5;ianap2Mo20;aAe7o5yder2W; chi mi5ms,nolulu;nh;f6lsin5rakli2;ki;ei;ifa,lifax,mCn5rb1Dva3;g8nov01oi;aFdanEenDhCiPlasgBo9raz,u5;a5jr23;dal6ng5yaquil;zh1J;aja2Oupe;ld coa1Bthen5;bu2S;ow;ent;e0Uoa;sk;lw7n5za;dhi5gt1E;nag0U;ay;aisal29es,o8r6ukuya5;ma;ankfu5esno;rt;rt5sh0; wor6ale5;za;th;d5indhov0Pl paso;in5mont2;bur5;gh;aBe8ha0Xisp4o7resd0Lu5;b5esseldorf,nkirk,rb0shanbe;ai,l0I;ha,nggu0rtmu13;hradSl6nv5troit;er;hi;donghIe6k09l5masc1Zr es sala1KugavpiY;i0lU;gu,je2;aJebu,hAleve0Vo5raio02uriti1Q;lo7n6penhag0Ar5;do1Ok;akKst0V;gUm5;bo;aBen8i6ongqi1ristchur5;ch;ang m7ca5ttago1;go;g6n5;ai;du,zho1;ng5ttogr14;ch8sha,zh07;gliari,i9lga8mayenJn6pe town,r5tanO;acCdiff;ber1Ac5;un;ry;ro;aWeNhKirmingh0WoJr9u5;chareTdapeTenos air7r5s0tu0;g5sa;as;es;a9is6usse5;ls;ba6t5;ol;ne;sil8tisla7zzav5;il5;le;va;ia;goZst2;op6ubaneshw5;ar;al;iCl9ng8r5;g6l5n;in;en;aluru,hazi;fa6grade,o horizon5;te;st;ji1rut;ghd0BkFn9ot8r7s6yan n4;ur;el,r07;celo3i,ranquil09;ou;du1g6ja lu5;ka;alo6k5;ok;re;ng;ers5u;field;a05b02cc01ddis aba00gartaZhmedXizawl,lSmPnHqa00rEsBt7uck5;la5;nd;he7l5;an5;ta;ns;h5unci2;dod,gab5;at;li5;ngt2;on;a8c5kaOtwerp;hora6o3;na;ge;h7p5;ol5;is;eim;aravati,m0s5;terd5;am; 7buquerq6eppo,giers,ma5;ty;ue;basrah al qadim5mawsil al jadid5;ah;ab5;ad;la;ba;ra;idj0u dha5;bi;an;lbo6rh5;us;rg\",\n \"Region\": \"true¦0:2O;1:2L;2:2U;3:2F;a2Sb2Fc21d1Wes1Vf1Tg1Oh1Ki1Fj1Bk16l13m0Sn09o07pYqVrSsJtEuBverAw6y4zacatec2W;akut0o0Fu4;cat1k09;a5est 4isconsin,yomi1O;bengal,virgin0;rwick3shington4;! dc;acruz,mont;dmurt0t4;ah,tar4; 2Pa12;a6e5laxca1Vripu21u4;scaEva;langa2nnessee,x2J;bas10m4smQtar29;aulip2Hil nadu;a9elang07i7o5taf16u4ylh1J;ff02rr09s1E;me1Gno1Uuth 4;cZdY;ber0c4kkim,naloa;hu1ily;n5rawak,skatchew1xo4;ny; luis potosi,ta catari2;a4hodeA;j4ngp0C;asth1shahi;ingh29u4;e4intana roo;bec,en6retaro;aAe6rince edward4unjab; i4;sl0G;i,n5r4;ak,nambu0F;a0Rnsylv4;an0;ha0Pra4;!na;axa0Zdisha,h4klaho21ntar4reg7ss0Dx0I;io;aLeEo6u4;evo le4nav0X;on;r4tt18va scot0;f9mandy,th4; 4ampton3;c6d5yo4;rk3;ako1O;aroli2;olk;bras1Nva0Dw4; 6foundland4;! and labrad4;or;brunswick,hamp3jers5mexiTyork4;! state;ey;galPyarit;aAeghala0Mi6o4;nta2r4;dov0elos;ch6dlanDn5ss4zor11;issippi,ouri;as geraPneso18;ig1oac1;dhy12harasht0Gine,lac07ni5r4ssachusetts;anhao,i el,ylG;p4toba;ur;anca3e4incoln3ouisI;e4iR;ds;a6e5h4omi;aka06ul2;dah,lant1ntucky,ra01;bardino,lmyk0ns0Qr4;achay,el0nata0X;alis6har4iangxi;kh4;and;co;daho,llino7n4owa;d5gush4;et0;ia2;is;a6ert5i4un1;dalFm0D;ford3;mp3rya2waii;ansu,eorg0lou7oa,u4;an4izhou,jarat;ajuato,gdo4;ng;cester3;lori4uji1;da;sex;ageUe7o5uran4;go;rs4;et;lawaMrby3;aFeaEh9o4rim08umbr0;ahui7l6nnectic5rsi4ventry;ca;ut;i03orado;la;e5hattisgarh,i4uvash0;apRhuahua;chn5rke4;ss0;ya;ra;lGm4;bridge3peche;a9ihar,r8u4;ck4ryat0;ingham3;shi4;re;emen,itish columb0;h0ja cal8lk7s4v7;hkorto4que;st1;an;ar0;iforn0;ia;dygHguascalientes,lBndhr9r5ss4;am;izo2kans5un4;achal 7;as;na;a 4;pradesh;a6ber5t4;ai;ta;ba5s4;ka;ma;ea\",\n \"Place\": \"true¦0:4T;1:4V;2:44;3:4B;4:3I;a4Eb3Gc2Td2Ge26f25g1Vh1Ji1Fk1Cl14m0Vn0No0Jp08r04sTtNuLvJw7y5;a5o0Syz;kut1Bngtze;aDeChitBi9o5upatki,ycom2P;ki26o5;d5l1B;b3Ps5;i4to3Y;c0SllowbroCn5;c2Qgh2;by,chur1P;ed0ntw3Gs22;ke6r3St5;erf1f1; is0Gf3V;auxha3Mirgin is0Jost5;ok;laanbaatar,pto5xb3E;n,wn;a9eotihuac43h7ive49o6ru2Nsarskoe selo,u5;l2Dzigo47;nto,rquay,tt2J;am3e 5orn3E;bronx,hamptons;hiti,j mah0Iu1N;aEcotts bluff,eCfo,herbroQoApring9t7u5yd2F;dbu1Wn5;der03set3B;aff1ock2Nr5;atf1oud;hi37w24;ho,uth5; 1Iam1Zwo3E;a5i2O;f2Tt0;int lawrence riv3Pkhal2D;ayleigh,ed7i5oc1Z;chmo1Eo gran4ver5;be1Dfr09si4; s39cliffe,hi2Y;aCe9h8i5ompeii,utn2;c6ne5tcai2T; 2Pc0G;keri13t0;l,x;k,lh2mbr6n5r2J;n1Hzance;oke;cif38pahanaumokuak30r5;k5then0;si4w1K;ak7r6x5;f1l2X;ange county,d,f1inoco;mTw1G;e8i1Uo5;r5tt2N;th5wi0E; 0Sam19;uschwanste1Pw5; eng6a5h2market,po36;rk;la0P;a8co,e6i5uc;dt1Yll0Z;adow5ko0H;lands;chu picchu,gad2Ridsto1Ql8n7ple6r5;kh2; g1Cw11;hatt2Osf2B;ibu,t0ve1Z;a8e7gw,hr,in5owlOynd02;coln memori5dl2C;al;asi4w3;kefr7mbe1On5s,x;ca2Ig5si05;f1l27t0;ont;azan kreml14e6itchen2Gosrae,rasnoyar5ul;sk;ns0Hs1U;ax,cn,lf1n6ps5st;wiN;d5glew0Lverness;ian27ochina;aDeBi6kg,nd,ov5unti2H;d,enweep;gh6llc5;reL;bu03l5;and5;!s;r5yw0C;ef1tf1;libu24mp6r5stings;f1lem,row;stead,t0;aDodavari,r5uelph;avenAe5imsS;at 8en5; 6f1Fwi5;ch;acr3vall1H;brita0Flak3;hur5;st;ng3y villa0W;airhavHco,ra;aAgli9nf17ppi8u7ver6x5;et1Lf1;glad3t0;rope,st0;ng;nt0;rls1Ls5;t 5;e5si4;nd;aCe9fw,ig8o7ryd6u5xb;mfri3nstab00rh2tt0;en;nca18rcKv19wnt0B;by;n6r5vonpo1D;ry;!h2;nu8r5;l6t5;f1moor;ingt0;be;aLdg,eIgk,hClBo5royd0;l6m5rnwa0B;pt0;c7lingw6osse5;um;ood;he0S;earwat0St;a8el6i5uuk;chen itza,mney ro07natSricahua;m0Zt5;enh2;mor5rlottetPth2;ro;dar 5ntervilA;breaks,faZg5;rove;ld9m8r5versh2;lis6rizo pla5;in;le;bLpbellf1;weQ;aZcn,eNingl01kk,lackLolt0r5uckV;aGiAo5;ckt0ok5wns cany0;lyn,s5;i4to5;ne;de;dge6gh5;am,t0;n6t5;own;or5;th;ceb6m5;lNpt0;rid5;ge;bu5pool,wa8;rn;aconsfEdf1lBr9verly7x5;hi5;ll; hi5;lls;wi5;ck; air,l5;ingh2;am;ie5;ld;ltimore,rnsl6tters5;ea;ey;bLct0driadic,frica,ginJlGmFn9rc8s7tl6yleOzor3;es;!ant8;hcroft,ia; de triomphe,t6;adyr,ca8dov9tarct5;ic5; oce5;an;st5;er;ericas,s;be6dersh5hambra,list0;ot;rt0;cou5;rt;bot7i5;ngd0;on;sf1;ord\",\n \"Country\": \"true¦0:38;1:2L;2:3B;a2Xb2Ec22d1Ye1Sf1Mg1Ch1Ai14j12k0Zl0Um0Gn05om2pZqat1KrXsKtCu7v5wal4yemTz3;a25imbabwe;es,lis and futu2Y;a3enezue32ietnam;nuatu,tican city;gTk6nited 4ruXs3zbeE; 2Ca,sr;arab emirat0Kkingdom,states3;! of am2Y;!raiV;a8haCimor les0Co7rinidad 5u3;nis0rk3valu;ey,me2Zs and caic1V;and t3t3;oba1L;go,kel10nga;iw2ji3nz2T;ki2V;aDcotl1eCi9lov8o6pa2Dri lanka,u5w3yr0;az3edAitzerl1;il1;d2riname;lomon1Xmal0uth 3;afr2KkMsud2;ak0en0;erra leoFn3;gapo1Yt maart3;en;negLrb0ychellZ;int 3moa,n marino,udi arab0;hele26luc0mart21;epublic of ir0Eom2Euss0w3;an27;a4eIhilippinUitcairn1Mo3uerto riN;l1rtugF;ki2Dl4nama,pua new0Vra3;gu7;au,esti3;ne;aBe9i7or3;folk1Ith4w3;ay; k3ern mariana1D;or0O;caragua,ger3ue;!ia;p3ther1Aw zeal1;al;mib0u3;ru;a7exi6icro0Bo3yanm06;ldova,n3roc5zambA;a4gol0t3;enegro,serrat;co;cAdagasc01l7r5urit4yot3;te;an0i16;shall0Xtin3;ique;a4div3i,ta;es;wi,ys0;ao,ed02;a6e5i3uxembourg;b3echtenste12thu1G;er0ya;ban0Isotho;os,tv0;azakh1Fe4iriba04o3uwait,yrgyz1F;rXsovo;eling0Knya;a3erG;ma16p2;c7nd6r4s3taly,vory coast;le of m2rael;a3el1;n,q;ia,oJ;el1;aiTon3ungary;dur0Ng kong;aBermany,ha0QibraltAre8u3;a6ern5inea3ya0P;! biss3;au;sey;deloupe,m,tema0Q;e3na0N;ce,nl1;ar;bUmb0;a7i6r3;ance,ench 3;guia0Epoly3;nes0;ji,nl1;lklandUroeU;ast tim7cu6gypt,l salv6ngl1quatorial4ritr5st3thiop0;on0; guin3;ea;ad3;or;enmark,jibou5ominica4r con3;go;!n C;ti;aBentral african Ah8o5roat0u4yprRzech3; 9ia;ba,racao;c4lo3morQngo brazzaville,okGsta r04te de ivoiL;mb0;osE;i3ristmasG;le,na;republic;m3naUpe verde,ymanA;bod0ero3;on;aGeDhut2o9r5u3;lgar0r3;kina faso,ma,undi;azil,itish 3unei;virgin3; is3;lands;liv0nai5snia and herzegoviHtswaHuvet3; isl1;and;re;l3n8rmuG;ar3gium,ize;us;h4ngladesh,rbad3;os;am4ra3;in;as;fghaGlDmBn6r4ustr3zerbaij2;al0ia;genti3men0uba;na;dorra,g5t3;arct7igua and barbu3;da;o3uil3;la;er3;ica;b3ger0;an0;ia;ni3;st2;an\",\n \"FirstName\": \"true¦aTblair,cQdOfrancoZgabMhinaLilya,jHkClBm6ni4quinn,re3s0;h0umit,yd;ay,e0iloh;a,lby;g9ne;co,ko0;!s;a1el0ina,org6;!okuhF;ds,naia,r1tt0xiB;i,y;ion,lo;ashawn,eif,uca;a3e1ir0rM;an;lsFn0rry;dall,yat5;i,sD;a0essIie,ude;i1m0;ie,mG;me;ta;rie0y;le;arcy,ev0;an,on;as1h0;arl8eyenne;ey,sidy;drien,kira,l4nd1ubr0vi;ey;i,r0;a,e0;a,y;ex2f1o0;is;ie;ei,is\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦dec0february,july,nov0octo1sept0;em0;ber\",\n \"Date\": \"true¦ago,on4som4t1week0yesterd5; end,ends;mr1o0;d2morrow;!w;ed0;ay\",\n \"Duration\": \"true¦centurAd8h7m5q4se3w1y0;ear8r8;eek0k7;!end,s;ason,c5;tr,uarter;i0onth3;llisecond2nute2;our1r1;ay0ecade0;!s;ies,y\",\n \"FemaleName\": \"true¦0:J7;1:JB;2:IJ;3:IK;4:J1;5:IO;6:JS;7:JO;8:HB;9:JK;A:H4;B:I2;C:IT;D:JH;E:IX;F:BA;G:I4;aGTbFLcDRdD0eBMfB4gADh9Ti9Gj8Dk7Cl5Wm48n3Lo3Hp33qu32r29s15t0Eu0Cv02wVxiTyOzH;aLeIineb,oHsof3;e3Sf3la,ra;h2iKlIna,ynH;ab,ep;da,ma;da,h2iHra;nab;aKeJi0FolB7uIvH;et8onDP;i0na;le0sen3;el,gm3Hn,rGLs8W;aoHme0nyi;m5XyAD;aMendDZhiDGiH;dele9lJnH;if48niHo0;e,f47;a,helmi0lHma;a,ow;ka0nB;aNeKiHusa5;ck84kIl8oleAviH;anFenJ4;ky,toriBK;da,lA8rHs0;a,nHoniH9;a,iFR;leHnesH9;nILrH;i1y;g9rHs6xHA;su5te;aYeUhRiNoLrIuHy2;i,la;acJ3iHu0J;c3na,sH;hFta;nHr0F;iFya;aJffaEOnHs6;a,gtiH;ng;!nFSra;aIeHomasi0;a,l9Oo8Ares1;l3ndolwethu;g9Fo88rIssH;!a,ie;eHi,ri7;sa,za;bOlMmKnIrHs6tia0wa0;a60yn;iHya;a,ka,s6;arFe2iHm77ra;!ka;a,iH;a,t6;at6it6;a0Ecarlett,e0AhWiSkye,neza0oQri,tNuIyH;bIGlvi1;ha,mayIJniAsIzH;an3Net8ie,y;anHi7;!a,e,nH;aCe;aIeH;fan4l5Dphan6E;cI5r5;b3fiAAm0LnHphi1;d2ia,ja,ya;er2lJmon1nIobh8QtH;a,i;dy;lETv3;aMeIirHo0risFDy5;a,lDM;ba,e0i5lJrH;iHr6Jyl;!d8Ifa;ia,lDZ;hd,iMki2nJrIu0w0yH;la,ma,na;i,le9on,ron,yn;aIda,ia,nHon;a,on;!ya;k6mH;!aa;lJrItaye82vH;da,inj;e0ife;en1i0ma;anA9bLd5Oh1SiBkKlJmInd2rHs6vannaC;aCi0;ant6i2;lDOma,ome;ee0in8Tu2;in1ri0;a05eZhXiUoHuthDM;bScRghQl8LnPsJwIxH;anB3ie,y;an,e0;aIeHie,lD;ann7ll1marDGtA;!lHnn1;iHyn;e,nH;a,dF;da,i,na;ayy8G;hel67io;bDRerAyn;a,cIkHmas,nFta,ya;ki,o;h8Xki;ea,iannGMoH;da,n1P;an0bJemFgi0iInHta,y0;a8Bee;han86na;a,eH;cHkaC;a,ca;bi0chIe,i0mo0nHquETy0;di,ia;aERelHiB;!e,le;een4ia0;aPeOhMiLoJrHute6A;iHudenCV;scil3LyamvaB;lHrt3;i0ly;a,paluk;ilome0oebe,ylH;is,lis;ggy,nelope,r5t2;ige,m0VnKo5rvaDMtIulH;a,et8in1;ricHt4T;a,e,ia;do2i07;ctav3dIfD3is6ksa0lHphD3umC5yunbileg;a,ga,iv3;eHvAF;l3t8;aWeUiMoIurHy5;!ay,ul;a,eJor,rIuH;f,r;aCeEma;ll1mi;aNcLhariBQkKlaJna,sHta,vi;anHha;ur;!y;a,iDZki;hoGk9YolH;a,e4P;!mh;hir,lHna,risDEsreE;!a,iDDlBV;asuMdLh3i6Dl5nKomi7rgEVtH;aHhal4;lHs6;i1ya;cy,et8;e9iF0ya;nngu2X;a0Ackenz4e02iMoJrignayani,uriDJyH;a,rH;a,iOlNna,tG;bi0i2llBJnH;a,iH;ca,ka,qD9;a,cUdo4ZkaTlOmi,nMrItzi,yH;ar;aJiIlH;anET;am;!l,nB;dy,eHh,n4;nhGrva;aKdJe0iCUlH;iHy;cent,e;red;!gros;!e5;ae5hH;ae5el3Z;ag5DgNi,lKrH;edi7AiIjem,on,yH;em,l;em,sCG;an4iHliCF;nHsCJ;a,da;!an,han;b09cASd07e,g05ha,i04ja,l02n00rLsoum5YtKuIv84xBKyHz4;bell,ra,soBB;d7rH;a,eE;h8Gild1t4;a,cUgQiKjor4l7Un4s6tJwa,yH;!aHbe6Xja9lAE;m,nBL;a,ha,in1;!aJbCGeIja,lDna,sHt63;!a,ol,sa;!l1D;!h,mInH;!a,e,n1;!awit,i;arJeIie,oHr48ueri8;!t;!ry;et46i3B;el4Xi7Cy;dHon,ue5;akranAy;ak,en,iHlo3S;a,ka,nB;a,re,s4te;daHg4;!l3E;alDd4elHge,isDJon0;ei9in1yn;el,le;a0Ne0CiXoQuLyH;d3la,nH;!a,dIe2OnHsCT;!a,e2N;a,sCR;aD4cJel0Pis1lIna,pHz;e,iA;a,u,wa;iHy;a0Se,ja,l2NnB;is,l1UrItt1LuHvel4;el5is1;aKeIi7na,rH;aADi7;lHn1tA;ei;!in1;aTbb9HdSepa,lNnKsJvIzH;!a,be5Ret8z4;!ia;a,et8;!a,dH;a,sHy;ay,ey,i,y;a,iJja,lH;iHy;aA8e;!aH;!nF;ia,ya;!nH;!a,ne;aPda,e0iNjYla,nMoKsJtHx93y5;iHt4;c3t3;e2PlCO;la,nHra;a,ie,o2;a,or1;a,gh,laH;!ni;!h,nH;a,d2e,n5V;cOdon9DiNkes6mi9Gna,rMtJurIvHxmi,y5;ern1in3;a,e5Aie,yn;as6iIoH;nya,ya;fa,s6;a,isA9;a,la;ey,ie,y;a04eZhXiOlASoNrJyH;lHra;a,ee,ie;istHy6I;a,en,iIyH;!na;!e,n5F;nul,ri,urtnB8;aOerNlB7mJrHzzy;a,stH;en,in;!berlImernH;aq;eHi,y;e,y;a,stE;!na,ra;aHei2ongordzol;dij1w5;el7UiKjsi,lJnIrH;a,i,ri;d2na,za;ey,i,lBLs4y;ra,s6;biAcARdiat7MeBAiSlQmPnyakuma1DrNss6NtKviAyH;!e,lH;a,eH;e,i8T;!a6HeIhHi4TlDri0y;ar8Her8Hie,leErBAy;!lyn8Ori0;a,en,iHl5Xoli0yn;!ma,nFs95;a5il1;ei8Mi,lH;e,ie;a,tl6O;a0AeZiWoOuH;anMdLlHst88;es,iH;a8NeHs8X;!n9tH;!a,te;e5Mi3My;a,iA;!anNcelDdMelGhan7VleLni,sIva0yH;a,ce;eHie;fHlDph7Y;a,in1;en,n1;i7y;!a,e,n45;lHng;!i1DlH;!i1C;anNle0nKrJsH;i8JsH;!e,i8I;i,ri;!a,elGif2CnH;a,et8iHy;!e,f2A;a,eJiInH;a,eIiH;e,n1;!t8;cMda,mi,nIque4YsminFvie2y9zH;min7;a7eIiH;ce,e,n1s;!lHs82t0F;e,le;inIk6HlDquelH;in1yn;da,ta;da,lRmPnOo0rNsIvaHwo0zaro;!a0lu,na;aJiIlaHob89;!n9R;do2;belHdo2;!a,e,l3B;a7Ben1i0ma;di2es,gr72ji;a9elBogH;en1;a,e9iHo0se;a0na;aSeOiJoHus7Kyacin2C;da,ll4rten24snH;a,i9U;lImaH;ri;aIdHlaI;a,egard;ry;ath1BiJlInrietArmi9sH;sa,t1A;en2Uga,mi;di;bi2Fil8MlNnMrJsItHwa,yl8M;i5Tt4;n60ti;iHmo51ri53;etH;!te;aCnaC;a,ey,l4;a02eWiRlPoNrKunJwH;enHyne1R;!dolD;ay,el;acieIetHiselB;a,chE;!la;ld1CogooH;sh;adys,enHor3yn2K;a,da,na;aKgi,lIna,ov8EselHta;a,e,le;da,liH;an;!n0;mLnJorgIrH;ald5Si,m3Etrud7;et8i4X;a,eHna;s29vieve;ma;bIle,mHrnet,yG;al5Si5;iIrielH;a,l1;!ja;aTeQiPlorOoz3rH;anJeIiH;da,eB;da,ja;!cH;esIiHoi0P;n1s66;!ca;a,enc3;en,o0;lIn0rnH;anB;ec3ic3;jr,nArKtHy7;emIiHma,oumaA;ha,ma,n;eh;ah,iBrah,za0;cr4Rd0Re0Qi0Pk0Ol07mXn54rUsOtNuMvHwa;aKelIiH;!e,ta;inFyn;!a;!ngel4V;geni1ni47;h5Yien9ta;mLperanKtH;eIhHrel5;er;l31r7;za;a,eralB;iHma,ne4Lyn;cHka,n;a,ka;aPeNiKmH;aHe21ie,y;!li9nuH;elG;lHn1;e7iHy;a,e,ja;lHrald;da,y;!nue5;aWeUiNlMma,no2oKsJvH;a,iH;na,ra;a,ie;iHuiH;se;a,en,ie,y;a0c3da,e,f,nMsJzaH;!betHveA;e,h;aHe,ka;!beH;th;!a,or;anor,nH;!a,i;!in1na;ate1Rta;leEs6;vi;eIiHna,wi0;e,th;l,n;aYeMh3iLjeneKoH;lor5Vminiq4Ln3FrHtt4;a,eEis,la,othHthy;ea,y;ba;an09naCon9ya;anQbPde,eOiMlJmetr3nHsir5M;a,iH;ce,se;a,iIla,orHphi9;es,is;a,l6F;dHrdH;re;!d5Ena;!b2ForaCraC;a,d2nH;!a,e;hl3i0l0GmNnLphn1rIvi1WyH;le,na;a,by,cIia,lH;a,en1;ey,ie;a,et8iH;!ca,el1Aka,z;arHia;is;a0Re0Nh04i02lUoJristIynH;di,th3;al,i0;lPnMrIurH;tn1D;aJd2OiHn2Ori9;!nH;a,e,n1;!l4;cepci5Cn4sH;tanHuelo;ce,za;eHleE;en,t8;aJeoIotH;il54;!pat2;ir7rJudH;et8iH;a,ne;a,e,iH;ce,sZ;a2er2ndH;i,y;aReNloe,rH;isJyH;stH;al;sy,tH;a1Sen,iHy;an1e,n1;deJlseIrH;!i7yl;a,y;li9;nMrH;isKlImH;ai9;a,eHot8;n1t8;!sa;d2elGtH;al,elG;cIlH;es8i47;el3ilH;e,ia,y;itlYlXmilWndVrMsKtHy5;aIeIhHri0;er1IleErDy;ri0;a38sH;a37ie;a,iOlLmeJolIrH;ie,ol;!e,in1yn;lHn;!a,la;a,eIie,otHy;a,ta;ne,y;na,s1X;a0Ii0I;a,e,l1;isAl4;in,yn;a0Ke02iZlXoUrH;andi7eRiJoIyH;an0nn;nwDoke;an3HdgMgiLtH;n31tH;!aInH;ey,i,y;ny;d,t8;etH;!t7;an0e,nH;da,na;bbi7glarIlo07nH;iAn4;ka;ancHythe;a,he;an1Clja0nHsm3M;iAtH;ou;aWcVlinUniArPssOtJulaCvH;!erlH;ey,y;hJsy,tH;e,iHy7;e,na;!anH;ie,y;!ie;nItHyl;ha,ie;adIiH;ce;et8i9;ay,da;ca,ky;!triH;ce,z;rbJyaH;rmH;aa;a2o2ra;a2Ub2Od25g21i1Sj5l18m0Zn0Boi,r06sWtVuPvOwa,yIzH;ra,u0;aKes6gJlIn,seH;!l;in;un;!nH;a,na;a,i2K;drLguJrIsteH;ja;el3;stH;in1;a,ey,i,y;aahua,he0;hIi2Gja,miAs2DtrH;id;aMlIraqHt21;at;eIi7yH;!n;e,iHy;gh;!nH;ti;iJleIo6piA;ta;en,n1t8;aHelG;!n1J;a01dje5eZgViTjRnKohito,toHya;inet8nH;el5ia;te;!aKeIiHmJ;e,ka;!mHtt7;ar4;!belIliHmU;sa;!l1;a,eliH;ca;ka,sHta;a,sa;elHie;a,iH;a,ca,n1qH;ue;!tH;a,te;!bImHstasiMya;ar3;el;aLberKeliJiHy;e,l3naH;!ta;a,ja;!ly;hGiIl3nB;da;a,ra;le;aWba,ePiMlKthJyH;a,c3sH;a,on,sa;ea;iHys0N;e,s0M;a,cIn1sHza;a,e,ha,on,sa;e,ia,ja;c3is6jaKksaKna,sJxH;aHia;!nd2;ia,saH;nd2;ra;ia;i0nIyH;ah,na;a,is,naCoud;la;c6da,leEmNnLsH;haClH;inHyY;g,n;!h;a,o,slH;ey;ee;en;at6g4nIusH;ti0;es;ie;aWdiTelMrH;eJiH;anMenH;a,e,ne;an0;na;!aLeKiIyH;nn;a,n1;a,e;!ne;!iH;de;e,lDsH;on;yn;!lH;i9yn;ne;aKbIiHrL;!e,gaK;ey,i7y;!e;gaH;il;dKliyJradhIs6;ha;ya;ah;a,ya\",\n \"Honorific\": \"true¦director1field marsh2lieutenant1rear0sergeant major,vice0; admir1; gener0;al\",\n \"Adj|Gerund\": \"true¦0:3F;1:3H;2:31;3:2X;4:35;5:33;6:3C;7:2Z;8:36;9:29;a33b2Tc2Bd1Te1If19g12h0Zi0Rl0Nm0Gnu0Fo0Ap04rYsKtEuBvAw1Ayiel3;ar6e08;nBpA;l1Rs0B;fol3n1Zsett2;aEeDhrBi4ouc7rAwis0;e0Bif2oub2us0yi1;ea1SiA;l2vi1;l2mp0rr1J;nt1Vxi1;aMcreec7enten2NhLkyrocke0lo0Vmi2oJpHtDuBweA;e0Ul2;pp2ArA;gi1pri5roun3;aBea8iAri2Hun9;mula0r4;gge4rA;t2vi1;ark2eAraw2;e3llb2F;aAot7;ki1ri1;i9oc29;dYtisf6;aEeBive0oAus7;a4l2;assu4defi9fres7ig9juve07mai9s0vAwar3;ea2italiAol1G;si1zi1;gi1ll6mb2vi1;a6eDier23lun1VrAun2C;eBoA;mi5vo1Z;ce3s5vai2;n3rpleA;xi1;ffCpWutBverAwi1;arc7lap04p0Pri3whel8;goi1l6st1J;en3sA;et0;m2Jrtu4;aEeDiCoBuAyst0L;mb2;t1Jvi1;s5tiga0;an1Rl0n3smeri26;dAtu4;de9;aCeaBiAo0U;fesa0Tvi1;di1ni1;c1Fg19s0;llumiGmFnArri0R;cDfurHsCtBviA;go23ti1;e1Oimi21oxica0rig0V;pi4ul0;orpo20r0K;po5;na0;eaBorr02umilA;ia0;li1rtwar8;lFrA;atiDipCoBuelA;i1li1;undbrea10wi1;pi1;f6ng;a4ea8;a3etc7it0lEoCrBulfA;il2;ee1FighXust1L;rAun3;ebo3thco8;aCoA;a0wA;e4i1;mi1tte4;lectrJmHnExA;aCci0hBis0pA;an3lo3;aOila1B;c0spe1A;ab2coura0CdBergi13ga0Clive9ric7s02tA;hral2i0J;ea4u4;barras5er09pA;owe4;if6;aQeIiBrA;if0;sAzz6;aEgDhearCsen0tA;rAur11;ac0es5;te9;us0;ppoin0r8;biliGcDfi9gra3ligh0mBpres5sAvasG;erE;an3ea9orA;ali0L;a6eiBli9rA;ea5;vi1;ta0;maPri1s7un0zz2;aPhMlo5oAripp2ut0;mGnArrespon3;cer9fDspi4tA;inBrA;as0ibu0ol2;ui1;lic0u5;ni1;fDmCpA;eAromi5;l2ti1;an3;or0;aAil2;llenAnAr8;gi1;l8ptAri1;iva0;aff2eGin3lFoDrBuA;d3st2;eathtaAui5;ki1;gg2i2o8ri1unA;ci1;in3;co8wiA;lAtc7;de4;bsorVcOgonMlJmHnno6ppea2rFsA;pi4su4toA;nBun3;di1;is7;hi1;res0;li1;aFu5;si1;ar8lu4;ri1;mi1;iAzi1;zi1;cAhi1;eleDomA;moBpan6;yi1;da0;ra0;ti1;bi1;ng\",\n \"Comparable\": \"true¦0:3C;1:3Q;2:3F;a3Tb3Cc33d2Te2Mf2Ag1Wh1Li1Fj1Ek1Bl13m0Xn0So0Rp0Iqu0Gr07sHtCug0vAw4y3za0Q;el10ouN;ary,e6hi5i3ry;ck0Cde,l3n1ry,se;d,y;ny,te;a3i3R;k,ry;a3erda2ulgar;gue,in,st;a6en2Xhi5i4ouZr3;anqu2Cen1ue;dy,g36me0ny;ck,rs28;ll,me,rt,wd3I;aRcaPeOhMiLkin0BlImGoEpDt6u4w3;eet,ift;b3dd0Wperfi21rre28;sta26t21;a8e7iff,r4u3;pUr1;a4ict,o3;ng;ig2Vn0N;a1ep,rn;le,rk,te0;e1Si2Vright0;ci1Yft,l3on,re;emn,id;a3el0;ll,rt;e4i3y;g2Mm0Z;ek,nd2T;ck24l0mp1L;a3iRrill,y;dy,l01rp;ve0Jxy;n1Jr3;ce,y;d,fe,int0l1Hv0V;a8e6i5o3ude;mantic,o19sy,u3;gh;pe,t1P;a3d,mo0A;dy,l;gg4iFndom,p3re,w;id;ed;ai2i3;ck,et;hoAi1Fl9o8r5u3;ny,r3;e,p11;egna2ic4o3;fouSud;ey,k0;liXor;ain,easa2;ny;dd,i0ld,ranL;aive,e5i4o3u14;b0Sisy,rm0Ysy;bb0ce,mb0R;a3r1w;r,t;ad,e5ild,o4u3;nda12te;ist,o1;a4ek,l3;low;s0ty;a8e7i6o3ucky;f0Jn4o15u3ve0w10y0N;d,sy;e0g;ke0l,mp,tt0Eve0;e1Qwd;me,r3te;ge;e4i3;nd;en;ol0ui19;cy,ll,n3;secu6t3;e3ima4;llege2rmedia3;te;re;aAe7i6o5u3;ge,m3ng1C;bYid;me0t;gh,l0;a3fXsita2;dy,rWv3;en0y;nd13ppy,r3;d3sh;!y;aFenEhCiBlAoofy,r3;a8e6i5o3ue0Z;o3ss;vy;m,s0;at,e3y;dy,n;nd,y;ad,ib,ooD;a2d1;a3o3;st0;tDuiS;u1y;aCeebBi9l8o6r5u3;ll,n3r0N;!ny;aCesh,iend0;a3nd,rmD;my;at,ir7;erce,nan3;ci9;le;r,ul3;ty;a6erie,sse4v3xtre0B;il;nti3;al;r4s3;tern,y;ly,th0;appZe9i5ru4u3;mb;nk;r5vi4z3;zy;ne;e,ty;a3ep,n9;d3f,r;!ly;agey,h8l7o5r4u3;dd0r0te;isp,uel;ar3ld,mmon,st0ward0zy;se;evKou1;e3il0;ap,e3;sy;aHiFlCoAr5u3;ff,r0sy;ly;a6i3oad;g4llia2;nt;ht;sh,ve;ld,un3;cy;a4o3ue;nd,o1;ck,nd;g,tt3;er;d,ld,w1;dy;bsu6ng5we3;so3;me;ry;rd\",\n \"Adverb\": \"true¦a08b05d00eYfSheQinPjustOkinda,likewiZmMnJoEpCquite,r9s5t2u0very,well;ltima01p0; to,wards5;h1iny bit,o0wiO;o,t6;en,us;eldom,o0uch;!me1rt0; of;how,times,w0C;a1e0;alS;ndomRth05;ar excellenEer0oint blank; Lhaps;f3n0utright;ce0ly;! 0;ag05moX; courGten;ewJo0; longWt 0;onHwithstand9;aybe,eanwhiNore0;!ovT;! aboX;deed,steY;lla,n0;ce;or3u0;ck1l9rther0;!moK;ing; 0evK;exampCgood,suH;n mas0vI;se;e0irect2; 2fini0;te0;ly;juAtrop;ackward,y 0;far,no0; means,w; GbroFd nauseam,gEl7ny5part,s4t 2w0;ay,hi0;le;be7l0mo7wor7;arge,ea6; soon,i4;mo0way;re;l 3mo2ongsi1ready,so,togeth0ways;er;de;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Conjunction\": \"true¦aXbTcReNhowMiEjust00noBo9p8supposing,t5wh0yet;e1il0o3;e,st;n1re0thN; if,by,vM;evL;h0il,o;erefOo0;!uU;lus,rovided th9;r0therwiM;! not; mattEr,w0;! 0;since,th4w7;f4n0; 0asmuch;as mIcaForder t0;h0o;at;! 0;only,t0w0;hen;!ev3;ith2ven0;! 0;if,tB;er;o0uz;s,z;e0ut,y the time;cau1f0;ore;se;lt3nd,s 0;far1if,m0soon1t2;uch0; as;hou0;gh\",\n \"Currency\": \"true¦$,aud,bQcOdJeurIfHgbp,hkd,iGjpy,kElDp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotyQł;en,uanP;af,of;h0t5;e0il5;k0q0;elK;oubleJp,upeeJ;e2ound st0;er0;lingG;n0soF;ceEnies;empi7i7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!os;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;e0ny;nt1;aht,itcoin0;!s\",\n \"Determiner\": \"true¦aBboth,d9e6few,le5mu8neiDplenty,s4th2various,wh0;at0ich0;evC;a0e4is,ose;!t;everal,ome;!ast,s;a1l0very;!se;ch;e0u;!s;!n0;!o0y;th0;er\",\n \"Adj|Present\": \"true¦a07b04cVdQeNfJhollIidRlEmCnarrIoBp9qua8r7s3t2uttFw0;aKet,ro0;ng,u08;endChin;e2hort,l1mooth,our,pa9tray,u0;re,speU;i2ow;cu6da02leSpaN;eplica01i02;ck;aHerfePr0;eseUime,omV;bscu1pen,wn;atu0e3odeH;re;a2e1ive,ow0;er;an;st,y;ow;a2i1oul,r0;ee,inge;rm;iIke,ncy,st;l1mpty,x0;emHpress;abo4ic7;amp,e2i1oub0ry,ull;le;ffu9re6;fu8libe0;raE;alm,l5o0;mpleCn3ol,rr1unterfe0;it;e0u7;ct;juga8sum7;ea1o0;se;n,r;ankru1lu0;nt;pt;li2pproxi0rticula1;ma0;te;ght\",\n \"Person|Adj\": \"true¦b3du2earnest,frank,mi2r0san1woo1;an0ich,u1;dy;sty;ella,rown\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to,a;ight,ust;an,o0;uld\",\n \"Verb\": \"true¦born,cannot,gonna,has,keep tabs,msg\",\n \"Person|Verb\": \"true¦b8ch7dr6foster,gra5ja9lan4ma2ni9ollie,p1rob,s0wade;kip,pike,t5ue;at,eg,ier2;ck,r0;k,shal;ce;ce,nt;ew;ase,u1;iff,l1ob,u0;ck;aze,ossom\",\n \"Person|Date\": \"true¦a2j0sep;an0une;!uary;p0ugust,v0;ril\"\n}","const BASE = 36\nconst seq = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\nconst cache = seq.split('').reduce(function (h, c, i) {\n h[c] = i\n return h\n}, {})\n\n// 0, 1, 2, ..., A, B, C, ..., 00, 01, ... AA, AB, AC, ..., AAA, AAB, ...\nconst toAlphaCode = function (n) {\n if (seq[n] !== undefined) {\n return seq[n]\n }\n let places = 1\n let range = BASE\n let s = ''\n for (; n >= range; n -= range, places++, range *= BASE) {}\n while (places--) {\n const d = n % BASE\n s = String.fromCharCode((d < 10 ? 48 : 55) + d) + s\n n = (n - d) / BASE\n }\n return s\n}\n\nconst fromAlphaCode = function (s) {\n if (cache[s] !== undefined) {\n return cache[s]\n }\n let n = 0\n let places = 1\n let range = BASE\n let pow = 1\n for (; places < s.length; n += range, places++, range *= BASE) {}\n for (let i = s.length - 1; i >= 0; i--, pow *= BASE) {\n let d = s.charCodeAt(i) - 48\n if (d > 10) {\n d -= 7\n }\n n += d * pow\n }\n return n\n}\n\nexport default {\n toAlphaCode,\n fromAlphaCode\n}\n","import encoding from '../encoding.js'\n\nconst symbols = function (t) {\n //... process these lines\n const reSymbol = new RegExp('([0-9A-Z]+):([0-9A-Z]+)')\n for (let i = 0; i < t.nodes.length; i++) {\n const m = reSymbol.exec(t.nodes[i])\n if (!m) {\n t.symCount = i\n break\n }\n t.syms[encoding.fromAlphaCode(m[1])] = encoding.fromAlphaCode(m[2])\n }\n //remove from main node list\n t.nodes = t.nodes.slice(t.symCount, t.nodes.length)\n}\nexport default symbols\n","import parseSymbols from './symbols.js'\nimport encoding from '../encoding.js'\n\n// References are either absolute (symbol) or relative (1 - based)\nconst indexFromRef = function (trie, ref, index) {\n const dnode = encoding.fromAlphaCode(ref)\n if (dnode < trie.symCount) {\n return trie.syms[dnode]\n }\n return index + dnode + 1 - trie.symCount\n}\n\nconst toArray = function (trie) {\n const all = []\n const crawl = (index, pref) => {\n let node = trie.nodes[index]\n if (node[0] === '!') {\n all.push(pref)\n node = node.slice(1) //ok, we tried. remove it.\n }\n const matches = node.split(/([A-Z0-9,]+)/g)\n for (let i = 0; i < matches.length; i += 2) {\n const str = matches[i]\n const ref = matches[i + 1]\n if (!str) {\n continue\n }\n const have = pref + str\n //branch's end\n if (ref === ',' || ref === undefined) {\n all.push(have)\n continue\n }\n const newIndex = indexFromRef(trie, ref, index)\n crawl(newIndex, have)\n }\n }\n crawl(0, '')\n return all\n}\n\n//PackedTrie - Trie traversal of the Trie packed-string representation.\nconst unpack = function (str) {\n const trie = {\n nodes: str.split(';'),\n syms: [],\n symCount: 0\n }\n //process symbols, if they have them\n if (str.match(':')) {\n parseSymbols(trie)\n }\n return toArray(trie)\n}\n\nexport default unpack\n","import traverse from './traverse.js'\n\nconst unpack = function (str) {\n if (!str) {\n return {}\n }\n //turn the weird string into a key-value object again\n const obj = str.split('|').reduce((h, s) => {\n const arr = s.split('¦')\n h[arr[0]] = arr[1]\n return h\n }, {})\n const all = {}\n Object.keys(obj).forEach(function (cat) {\n const arr = traverse(obj[cat])\n //special case, for botched-boolean\n if (cat === 'true') {\n cat = true\n }\n for (let i = 0; i < arr.length; i++) {\n const k = arr[i]\n if (all.hasOwnProperty(k) === true) {\n if (Array.isArray(all[k]) === false) {\n all[k] = [all[k], cat]\n } else {\n all[k].push(cat)\n }\n } else {\n all[k] = cat\n }\n }\n })\n return all\n}\n\nexport default unpack\n","const prp = ['Possessive', 'Pronoun']\n//words that can't be compressed, for whatever reason\nconst misc = {\n // numbers\n '20th century fox': 'Organization',\n '7 eleven': 'Organization',\n 'motel 6': 'Organization',\n g8: 'Organization',\n vh1: 'Organization',\n '76ers': 'SportsTeam',\n '49ers': 'SportsTeam',\n\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n\n km2: 'Unit',\n m2: 'Unit',\n dm2: 'Unit',\n cm2: 'Unit',\n mm2: 'Unit',\n mile2: 'Unit',\n in2: 'Unit',\n yd2: 'Unit',\n ft2: 'Unit',\n m3: 'Unit',\n dm3: 'Unit',\n cm3: 'Unit',\n in3: 'Unit',\n ft3: 'Unit',\n yd3: 'Unit',\n\n // ampersands\n 'at&t': 'Organization',\n 'black & decker': 'Organization',\n 'h & m': 'Organization',\n 'johnson & johnson': 'Organization',\n 'procter & gamble': 'Organization',\n \"ben & jerry's\": 'Organization',\n '&': 'Conjunction',\n\n //pronouns\n i: ['Pronoun', 'Singular'],\n he: ['Pronoun', 'Singular'],\n she: ['Pronoun', 'Singular'],\n it: ['Pronoun', 'Singular'],\n they: ['Pronoun', 'Plural'],\n we: ['Pronoun', 'Plural'],\n was: ['Copula', 'PastTense'],\n is: ['Copula', 'PresentTense'],\n are: ['Copula', 'PresentTense'],\n am: ['Copula', 'PresentTense'],\n were: ['Copula', 'PastTense'],\n\n // possessive pronouns\n her: prp,\n his: prp,\n hers: prp,\n their: prp,\n theirs: prp,\n themselves: prp,\n your: prp,\n our: prp,\n ours: prp,\n my: prp,\n its: prp,\n\n // misc\n vs: ['Conjunction', 'Abbreviation'],\n if: ['Condition', 'Preposition'],\n closer: 'Comparative',\n closest: 'Superlative',\n much: 'Adverb',\n may: 'Modal',\n\n // irregular conjugations with two forms\n babysat: 'PastTense',\n blew: 'PastTense',\n drank: 'PastTense',\n drove: 'PastTense',\n forgave: 'PastTense',\n skiied: 'PastTense',\n spilt: 'PastTense',\n stung: 'PastTense',\n swam: 'PastTense',\n swung: 'PastTense',\n guaranteed: 'PastTense',\n shrunk: 'PastTense',\n\n // support 'near', 'nears', 'nearing'\n nears: 'PresentTense',\n nearing: 'Gerund',\n neared: 'PastTense',\n\n no: ['Negative', 'Expression'],\n\n // '-': 'Preposition', //june - july\n\n // there: 'There'\n}\nexport default misc\n","export default {\n '20th century fox': 'Organization',\n '7 eleven': 'Organization',\n 'motel 6': 'Organization',\n 'excuse me': 'Expression',\n 'financial times': 'Organization',\n 'guns n roses': 'Organization',\n 'la z boy': 'Organization',\n 'labour party': 'Organization',\n 'new kids on the block': 'Organization',\n 'new york times': 'Organization',\n 'the guess who': 'Organization',\n 'thin lizzy': 'Organization',\n\n 'prime minister': 'Actor',\n 'free market': 'Singular',\n 'lay up': 'Singular',\n 'living room': 'Singular',\n 'living rooms': 'Plural',\n 'spin off': 'Singular',\n 'appeal court': 'Uncountable',\n 'cold war': 'Uncountable',\n 'gene pool': 'Uncountable',\n 'machine learning': 'Uncountable',\n 'nail polish': 'Uncountable',\n 'time off': 'Uncountable',\n 'take part': 'Infinitive',\n\n 'bill gates': 'Person',\n 'doctor who': 'Person',\n 'dr who': 'Person',\n 'he man': 'Person',\n 'iron man': 'Person',\n 'kid cudi': 'Person',\n 'run dmc': 'Person',\n 'rush limbaugh': 'Person',\n 'snow white': 'Person',\n 'tiger woods': 'Person',\n\n 'brand new': 'Adjective',\n 'en route': 'Adjective',\n 'left wing': 'Adjective',\n 'off guard': 'Adjective',\n 'on board': 'Adjective',\n 'part time': 'Adjective',\n 'right wing': 'Adjective',\n 'so called': 'Adjective',\n 'spot on': 'Adjective',\n 'straight forward': 'Adjective',\n 'super duper': 'Adjective',\n 'tip top': 'Adjective',\n 'top notch': 'Adjective',\n 'up to date': 'Adjective',\n 'win win': 'Adjective',\n\n 'brooklyn nets': 'SportsTeam',\n 'chicago bears': 'SportsTeam',\n 'houston astros': 'SportsTeam',\n 'houston dynamo': 'SportsTeam',\n 'houston rockets': 'SportsTeam',\n 'houston texans': 'SportsTeam',\n 'minnesota twins': 'SportsTeam',\n 'orlando magic': 'SportsTeam',\n 'san antonio spurs': 'SportsTeam',\n 'san diego chargers': 'SportsTeam',\n 'san diego padres': 'SportsTeam',\n\n 'iron maiden': 'ProperNoun',\n 'isle of man': 'Country',\n 'united states': 'Country',\n 'united states of america': 'Country',\n 'prince edward island': 'Region',\n 'cedar breaks': 'Place',\n 'cedar falls': 'Place',\n\n 'point blank': 'Adverb',\n 'tiny bit': 'Adverb',\n 'by the time': 'Conjunction',\n 'no matter': 'Conjunction',\n\n 'civil wars': 'Plural',\n 'credit cards': 'Plural',\n 'default rates': 'Plural',\n 'free markets': 'Plural',\n 'head starts': 'Plural',\n 'home runs': 'Plural',\n 'lay ups': 'Plural',\n 'phone calls': 'Plural',\n 'press releases': 'Plural',\n 'record labels': 'Plural',\n 'soft serves': 'Plural',\n 'student loans': 'Plural',\n 'tax returns': 'Plural',\n 'tv shows': 'Plural',\n 'video games': 'Plural',\n\n 'took part': 'PastTense',\n 'takes part': 'PresentTense',\n 'taking part': 'Gerund',\n 'taken part': 'Participle',\n\n 'light bulb': 'Noun',\n 'rush hour': 'Noun',\n 'fluid ounce': 'Unit',\n 'the rolling stones': 'Organization',\n}\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nexport default [\n ':(',\n ':)',\n ':P',\n ':p',\n ':O',\n ';(',\n ';)',\n ';P',\n ';p',\n ';O',\n ':3',\n ':|',\n ':/',\n ':\\\\',\n ':$',\n ':*',\n ':@',\n ':-(',\n ':-)',\n ':-P',\n ':-p',\n ':-O',\n ':-3',\n ':-|',\n ':-/',\n ':-\\\\',\n ':-$',\n ':-*',\n ':-@',\n ':^(',\n ':^)',\n ':^P',\n ':^p',\n ':^O',\n ':^3',\n ':^|',\n ':^/',\n ':^\\\\',\n ':^$',\n ':^*',\n ':^@',\n '):',\n '(:',\n '$:',\n '*:',\n ')-:',\n '(-:',\n '$-:',\n '*-:',\n ')^:',\n '(^:',\n '$^:',\n '*^:',\n '<3',\n '</3',\n '<\\\\3',\n '=('\n]","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [\n [/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'],\n [/ia$/i, 'ia'],\n ],\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n i: [[/(octop|vir)i$/i, '$1i']],\n m: [[/([ti])um$/i, '$1a']],\n n: [[/^(oxen)$/i, '$1']],\n o: [[/(al|ad|at|er|et|ed)o$/i, '$1oes']],\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n x: [\n [/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'],\n [/^(ox)$/i, '$1en'],\n ],\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n z: [[/(quiz)$/i, '$1zes']],\n}\nexport default suffixes\n","import rules from './_rules.js'\nconst addE = /([xsz]|ch|sh)$/\n\nconst trySuffix = function (str) {\n const c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n const reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function (str = '', model) {\n const { irregularPlurals, uncountable } = model.two\n // is it a word without a plural form?\n if (uncountable.hasOwnProperty(str)) {\n return str\n }\n // check irregulars list\n if (irregularPlurals.hasOwnProperty(str)) {\n return irregularPlurals[str]\n }\n //we have some rules to try-out\n const plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nexport default pluralize\n","import lexData from './_data.js'\nimport { unpack } from 'efrt'\nimport misc from './misc.js'\nimport frozenLex from './frozenLex.js'\nimport emoticons from './emoticons.js'\nimport toPlural from '../../methods/transform/nouns/toPlural/index.js'\nimport irregularPlurals from '../irregulars/plurals.js'\n// unpack our lexicon of words\n// (found in ./lexicon/)\n\n// more clever things are done on the data later\n// - once the plugin is applied\nconst hasSwitch = /\\|/\nconst lexicon = misc\nconst switches = {}\n\nconst tmpModel = { two: { irregularPlurals, uncountable: {} } }\n\nObject.keys(lexData).forEach(tag => {\n const wordsObj = unpack(lexData[tag])\n // POS tag, or something fancier?\n if (!hasSwitch.test(tag)) {\n // set them as simple word key-value lookup\n Object.keys(wordsObj).forEach(w => {\n lexicon[w] = tag\n })\n return\n }\n // add them as seperate key-val object\n Object.keys(wordsObj).forEach(w => {\n switches[w] = tag\n // pluralize Noun|Verb switches\n if (tag === 'Noun|Verb') {\n const plural = toPlural(w, tmpModel)\n switches[plural] = 'Plural|Verb'\n }\n })\n})\n// add ':)'\nemoticons.forEach(str => (lexicon[str] = 'Emoticon'))\n\n// misc cleanup\ndelete lexicon['']\ndelete lexicon[null]\ndelete lexicon[' ']\n\nexport { lexicon, switches, frozenLex }\n","const n = 'Singular'\nexport default {\n beforeTags: {\n Determiner: n, //the date\n Possessive: n, //his date\n Acronym: n, //u.s. state\n // ProperNoun:n,\n Noun: n, //nasa funding\n Adjective: n, //whole bottles\n // Verb:true, //save storm victims\n PresentTense: n, //loves hiking\n Gerund: n, //uplifting victims\n PastTense: n, //saved storm victims\n Infinitive: n, //profess love\n Date: n, //9pm show\n Ordinal: n, //first date\n Demonym: n, //dutch map\n },\n afterTags: {\n Value: n, //date nine -?\n Modal: n, //date would\n Copula: n, //fear is\n PresentTense: n, //babysitting sucks\n PastTense: n, //babysitting sucked\n // Noun:n, //talking therapy, planning process\n Demonym: n, //american touch\n Actor: n, //dance therapist\n },\n // ownTags: { ProperNoun: n },\n beforeWords: {\n the: n, //the brands\n with: n, //with cakes\n without: n, //\n // was:n, //was time -- was working\n // is:n, //\n of: n, //of power\n for: n, //for rats\n any: n, //any rats\n all: n, //all tips\n on: n, //on time\n // thing-ish verbs\n cut: n, //cut spending\n cuts: n, //cut spending\n increase: n, // increase funding\n decrease: n, //\n raise: n, //\n drop: n, //\n // give: n,//give parents\n save: n, //\n saved: n, //\n saves: n, //\n make: n, //\n makes: n, //\n made: n, //\n minus: n, //minus laughing\n plus: n, //\n than: n, //more than age\n another: n, //\n versus: n, //\n neither: n, //\n about: n, //about claims\n // strong adjectives\n favorite: n, //\n best: n, //\n daily: n, //\n weekly: n, //\n linear: n, //\n binary: n, //\n mobile: n, //\n lexical: n, //\n technical: n, //\n computer: n, //\n scientific: n, //\n security: n, //\n government: n, //\n popular: n, //\n formal: n,\n no: n, //no worries\n more: n, //more details\n one: n, //one flood\n let: n, //let fear\n her: n, //her boots\n his: n, //\n their: n, //\n our: n, //\n us: n, //served us drinks\n sheer: n,\n\n monthly: n,\n yearly: n,\n current: n,\n previous: n,\n upcoming: n,\n last: n,\n next: n,\n main: n,\n initial: n,\n final: n,\n beginning: n,\n end: n,\n top: n,\n bottom: n,\n future: n,\n past: n,\n major: n,\n minor: n,\n side: n,\n central: n,\n peripheral: n,\n public: n,\n private: n,\n },\n afterWords: {\n of: n, //date of birth (preposition)\n system: n,\n aid: n,\n method: n,\n utility: n,\n tool: n,\n reform: n,\n therapy: n,\n philosophy: n,\n room: n,\n authority: n,\n says: n,\n said: n,\n wants: n,\n wanted: n,\n is: n,\n did: n,\n do: n,\n can: n, //parents can\n wise: n, //service-wise\n // they: n,//snakes they\n },\n}\n","const v = 'Infinitive'\n\nexport default {\n beforeTags: {\n Modal: v, //would date\n Adverb: v, //quickly date\n Negative: v, //not date\n Plural: v, //characters drink\n // ProperNoun: vb,//google thought\n },\n afterTags: {\n Determiner: v, //flash the\n Adverb: v, //date quickly\n Possessive: v, //date his\n Reflexive: v, //resolve yourself\n // Noun:true, //date spencer\n Preposition: v, //date around, dump onto, grumble about\n // Conjunction: v, // dip to, dip through\n Cardinal: v, //cut 3 squares\n Comparative: v, //feel greater\n Superlative: v, //feel greatest\n },\n beforeWords: {\n i: v, //i date\n we: v, //we date\n you: v, //you date\n they: v, //they date\n to: v, //to date\n please: v, //please check\n will: v, //will check\n have: v,\n had: v,\n would: v,\n could: v,\n should: v,\n do: v,\n did: v,\n does: v,\n can: v,\n must: v,\n us: v,\n me: v,\n let: v,\n even: v,\n when: v,\n help: v, //help combat\n // them: v,\n he: v,\n she: v,\n it: v,\n being: v,\n // prefixes\n bi: v,\n co: v,\n contra: v,\n de: v,\n inter: v,\n intra: v,\n mis: v,\n pre: v,\n out: v,\n counter: v,\n nobody: v,\n somebody: v,\n anybody: v,\n everybody: v,\n // un: v,\n // over: v,\n // under: v,\n },\n afterWords: {\n the: v, //echo the\n me: v, //date me\n you: v, //date you\n him: v, //loves him\n us: v, //cost us\n her: v, //\n his: v, //\n them: v, //\n they: v, //\n it: v, //hope it\n himself: v,\n herself: v,\n itself: v,\n myself: v,\n ourselves: v,\n themselves: v,\n something: v,\n anything: v,\n\n a: v, //covers a\n an: v, //covers an\n // from: v, //ranges from\n up: v, //serves up\n down: v, //serves up\n by: v,\n // in: v, //bob in\n out: v,\n // on: v,\n off: v,\n under: v,\n what: v, //look what\n // when: v,//starts when\n // for:true, //settled for\n all: v, //shiver all night\n // conjunctions\n to: v, //dip to\n because: v, //\n although: v, //\n // after: v,\n // before: v,//\n how: v, //\n otherwise: v, //\n together: v, //fit together\n though: v, //\n into: v, //\n yet: v, //\n more: v, //kill more\n here: v, // look here\n there: v, //\n away: v, //float away\n },\n}\n","import noun from './_noun.js'\nimport verb from './_verb.js'\n// 'the pilot' vs 'pilot the plane'\nconst clue = {\n beforeTags: Object.assign({}, verb.beforeTags, noun.beforeTags, {\n }),\n afterTags: Object.assign({}, verb.afterTags, noun.afterTags, {}),\n beforeWords: Object.assign({}, verb.beforeWords, noun.beforeWords, {}),\n afterWords: Object.assign({}, verb.afterWords, noun.afterWords, {}),\n}\n\nexport default clue","const jj = 'Adjective'\n\nexport default {\n beforeTags: {\n Determiner: jj, //the detailed\n // Copula: jj, //is detailed\n Possessive: jj, //spencer's detailed\n Hyphenated: jj, //rapidly-changing\n },\n\n afterTags: {\n // Noun: jj, //detailed plan, overwhelming evidence\n Adjective: jj, //intoxicated little\n },\n\n beforeWords: {\n seem: jj, //seem prepared\n seemed: jj,\n seems: jj,\n feel: jj, //feel prepared\n feels: jj,\n felt: jj,\n stay: jj,\n appear: jj,\n appears: jj,\n appeared: jj,\n also: jj,\n over: jj, //over cooked\n under: jj,\n too: jj, //too insulting\n it: jj, //find it insulting\n but: jj, //nothing but frustrating\n still: jj, //still scared\n // adverbs that are adjective-ish\n really: jj, //really damaged\n quite: jj,\n well: jj,\n very: jj,\n truly: jj,\n how: jj, //how slow\n deeply: jj,\n hella: jj,\n // always: jj,\n // never: jj,\n profoundly: jj,\n extremely: jj,\n so: jj,\n badly: jj,\n mostly: jj,\n totally: jj,\n awfully: jj,\n rather: jj,\n nothing: jj, //nothing secret,\n something: jj, //something wrong\n anything: jj,\n not: jj, //not swell\n me: jj, //called me swell\n is: jj,\n\n face: jj, //faces shocking revelations\n faces: jj,\n faced: jj,\n\n look: jj,\n looks: jj,\n looked: jj,\n\n reveal: jj,\n reveals: jj,\n revealed: jj,\n\n sound: jj,\n sounded: jj,\n sounds: jj,\n remains: jj,\n remained: jj,\n prove: jj, //would prove shocking\n proves: jj,\n proved: jj,\n\n becomes: jj,\n stays: jj,\n tastes: jj,\n taste: jj,\n smells: jj,\n smell: jj,\n gets: jj, //gets shocking snowfall\n grows: jj,\n as: jj,\n rings: jj,\n radiates: jj,\n conveys: jj,\n convey: jj,\n conveyed: jj,\n of: jj,\n // 'smacks of': jj,\n // 'reeks of': jj,\n },\n afterWords: {\n too: jj, //insulting too\n also: jj, //insulting too\n or: jj, //insulting or\n enough: jj, //cool enough\n as: jj, //as shocking as\n //about: jj, //cool about\n },\n}\n","const g = 'Gerund'\n\n// Adj|Gerund\n// Noun|Gerund\n\nexport default {\n beforeTags: {\n // Verb: g, // loves shocking\n Adverb: g, //quickly shocking\n Preposition: g, //by insulting\n Conjunction: g, //to insulting\n },\n afterTags: {\n Adverb: g, //shocking quickly\n Possessive: g, //shocking spencer's\n Person: g, //telling spencer\n Pronoun: g, //shocking him\n Determiner: g, //shocking the\n Copula: g, //shocking is\n Preposition: g, //dashing by, swimming in\n Conjunction: g, //insulting to\n Comparative: g, //growing shorter\n },\n beforeWords: {\n been: g,\n keep: g,//keep going\n continue: g,//\n stop: g,//\n am: g,//am watching\n be: g,//be timing\n me: g,//got me thinking\n // action-words\n began: g,\n start: g,\n starts: g,\n started: g,\n stops: g,\n stopped: g,\n help: g,\n helps: g,\n avoid: g,\n avoids: g,\n love: g,//love painting\n loves: g,\n loved: g,\n hate: g,\n hates: g,\n hated: g,\n // was:g,//was working\n // is:g,\n // be:g,\n },\n afterWords: {\n you: g, //telling you\n me: g, //\n her: g, //\n him: g, //\n his: g, //\n them: g, //\n their: g, // fighting their\n it: g, //dumping it\n this: g, //running this\n there: g, // swimming there\n on: g, // landing on\n about: g, // talking about\n for: g, // paying for\n up: g, //speeding up\n down: g, //\n },\n}\n","import adj from './_adj.js'\nimport gerund from './_gerund.js'\nconst g = 'Gerund'\nconst jj = 'Adjective'\n\n// rallying the troops\n// her rallying cry\nconst clue = {\n beforeTags: Object.assign({}, adj.beforeTags, gerund.beforeTags, {\n // Copula: jj,\n Imperative: g, //recommend living in\n Infinitive: jj, //say charming things\n // PresentTense: g,\n Plural: g, //kids cutting\n }),\n\n afterTags: Object.assign({}, adj.afterTags, gerund.afterTags, {\n Noun: jj, //shocking ignorance\n // Plural: jj, //shocking lies\n }),\n\n beforeWords: Object.assign({}, adj.beforeWords, gerund.beforeWords, {\n is: jj,\n are: g, //is overflowing: JJ, are overflowing : VB ??\n was: jj,\n of: jj, //of varying\n suggest: g,\n suggests: g,\n suggested: g,\n\n recommend: g,\n recommends: g,\n recommended: g,\n\n imagine: g,\n imagines: g,\n imagined: g,\n\n consider: g,\n considered: g,\n considering: g,\n\n resist: g,\n resists: g,\n resisted: g,\n\n avoid: g,\n avoided: g,\n avoiding: g,\n\n except: jj,\n accept: jj,\n assess: g,\n explore: g,\n fear: g,\n fears: g,\n appreciate: g,\n question: g,\n help: g,\n embrace: g,\n with: jj, //filled with daring\n }),\n\n afterWords: Object.assign({}, adj.afterWords, gerund.afterWords, {\n to: g,\n not: g, //trying not to car\n the: g, //sweeping the country\n }),\n}\n// console.log(clue)\nexport default clue\n","import adj from './_adj.js'\nimport noun from './_noun.js'\n// the commercial market\n// watching the commercial\n\nconst misc = {\n beforeTags: {\n Determiner: undefined, //the premier university\n Cardinal: 'Noun',//1950 convertable\n PhrasalVerb: 'Adjective'//starts out fine\n },\n afterTags: {\n // Pronoun: 'Noun'//as an adult i\n }\n}\nconst clue = {\n beforeTags: Object.assign({}, adj.beforeTags, noun.beforeTags, misc.beforeTags),\n afterTags: Object.assign({}, adj.afterTags, noun.afterTags, misc.afterTags),\n beforeWords: Object.assign({}, adj.beforeWords, noun.beforeWords, {\n // are representative\n are: 'Adjective', is: 'Adjective', was: 'Adjective', be: 'Adjective',\n // phrasals\n off: 'Adjective',//start off fine\n out: 'Adjective',//comes out fine\n }),\n afterWords: Object.assign({}, adj.afterWords, noun.afterWords),\n}\nexport default clue","import adj from './_adj.js'\n\n// the boiled egg\n// boiled the water\nconst past = 'PastTense'\nconst jj = 'Adjective'\n\nconst adjPast = {\n beforeTags: {\n Adverb: past, //quickly detailed\n Pronoun: past, //he detailed\n ProperNoun: past, //toronto closed\n Auxiliary: past,\n Noun: past, //eye closed -- i guess.\n },\n afterTags: {\n Possessive: past, //hooked him\n Pronoun: past, //hooked me\n Determiner: past, //hooked the\n Adverb: past, //cooked perfectly\n Comparative: past, //closed higher\n Date: past, // alleged thursday\n Gerund: past, //left dancing\n },\n beforeWords: {\n be: past, //be hooked vs be embarrassed\n who: past, //who lost\n get: jj, //get charged\n had: past,\n has: past,\n have: past,\n been: past,\n it: past, //it intoxicated him\n as: past, //as requested\n for: jj, //for discounted items\n more: jj, //more broken promises\n always: jj,\n },\n afterWords: {\n by: past, //damaged by\n back: past, //charged back\n out: past, //charged out\n in: past, //crowded in\n up: past, //heated up\n down: past, //hammered down\n before: past, //\n after: past, //\n for: past, //settled for\n the: past, //settled the\n with: past, //obsessed with\n as: past, //known as\n on: past, //focused on\n at: past, //recorded at\n between: past, //settled between\n to: past, //dedicated to\n into: past, //pumped into\n us: past, //charged us\n them: past, //charged us\n his: past, //shared his\n her: past, //\n their: past, //\n our: past, //\n me: past, //\n about: jj,\n },\n}\n\nexport default {\n beforeTags: Object.assign({}, adj.beforeTags, adjPast.beforeTags),\n afterTags: Object.assign({}, adj.afterTags, adjPast.afterTags),\n beforeWords: Object.assign({}, adj.beforeWords, adjPast.beforeWords),\n afterWords: Object.assign({}, adj.afterWords, adjPast.afterWords),\n}\n","import adj from './_adj.js'\nimport verb from './_verb.js'\n\n// 'would mean' vs 'is mean'\nconst misc = {\n afterTags: {\n Noun: 'Adjective',//ruling party\n Conjunction: undefined //clean and excellent\n }\n}\nconst clue = {\n beforeTags: Object.assign({}, adj.beforeTags, verb.beforeTags, {\n // always clean\n Adverb: undefined, Negative: undefined\n }),\n afterTags: Object.assign({}, adj.afterTags, verb.afterTags, misc.afterTags),\n beforeWords: Object.assign({}, adj.beforeWords, verb.beforeWords, {\n // have seperate contracts\n have: undefined, had: undefined, not: undefined,\n //went wrong, got wrong\n went: 'Adjective', goes: 'Adjective', got: 'Adjective',\n // be sure\n be: 'Adjective'\n }),\n afterWords: Object.assign({}, adj.afterWords, verb.afterWords, {\n to: undefined,//slick to the touch\n as: 'Adjective',//pale as\n }),\n}\n// console.log(clue.beforeWords)\n// console.log(clue)\nexport default clue","import noun from './_noun.js'\nimport gerund from './_gerund.js'\n\n// 'operating the crane', or 'operating room'\nconst misc = {\n beforeTags: {\n Copula: 'Gerund',\n PastTense: 'Gerund',\n PresentTense: 'Gerund',\n Infinitive: 'Gerund',\n },\n afterTags: {\n Value: 'Gerund', //maintaining 500\n },\n beforeWords: {\n are: 'Gerund',\n were: 'Gerund',\n be: 'Gerund',\n no: 'Gerund',\n without: 'Gerund',\n //are you playing\n you: 'Gerund',\n we: 'Gerund',\n they: 'Gerund',\n he: 'Gerund',\n she: 'Gerund',\n //stop us playing\n us: 'Gerund',\n them: 'Gerund',\n },\n afterWords: {\n // offering the\n the: 'Gerund',\n this: 'Gerund',\n that: 'Gerund',\n //got me thinking\n me: 'Gerund',\n us: 'Gerund',\n them: 'Gerund',\n },\n}\nconst clue = {\n beforeTags: Object.assign({}, gerund.beforeTags, noun.beforeTags, misc.beforeTags),\n afterTags: Object.assign({}, gerund.afterTags, noun.afterTags, misc.afterTags),\n beforeWords: Object.assign({}, gerund.beforeWords, noun.beforeWords, misc.beforeWords),\n afterWords: Object.assign({}, gerund.afterWords, noun.afterWords, misc.afterWords),\n}\nexport default clue\n","import noun from './_noun.js'\nimport verb from './_verb.js'\nconst nn = 'Singular'\nconst vb = 'Infinitive'\n// 'boot the ball' - 'the red boot'\n// 'boots the ball' - 'the red boots'\nconst clue = {\n beforeTags: Object.assign({}, verb.beforeTags, noun.beforeTags, {\n // Noun: undefined\n Adjective: nn,//great name\n Particle: nn//brought under control\n }),\n afterTags: Object.assign({}, verb.afterTags, noun.afterTags, {\n ProperNoun: vb, Gerund: vb, Adjective: vb,\n Copula: nn,\n }),\n beforeWords: Object.assign({}, verb.beforeWords, noun.beforeWords, {\n // is time\n is: nn, was: nn,\n //balance of power\n of: nn,\n have: null //have cash\n }),\n afterWords: Object.assign({}, verb.afterWords, noun.afterWords, {\n // for: vb,//work for\n instead: vb,\n // that: nn,//subject that was\n // for: vb,//work for\n about: vb,//talk about\n his: vb,//shot his\n her: vb,//\n to: null,\n by: null,\n in: null\n }),\n}\n\nexport default clue","const p = 'Person'\n\nexport default {\n beforeTags: {\n Honorific: p,\n Person: p,\n // Preposition: p, //with sue\n },\n afterTags: {\n Person: p,\n ProperNoun: p,\n Verb: p, //bob could\n // Modal:true, //bob could\n // Copula:true, //bob is\n // PresentTense:true, //bob seems\n },\n ownTags: {\n ProperNoun: p, //capital letter\n },\n beforeWords: {\n hi: p,\n hey: p,\n yo: p,\n dear: p,\n hello: p,\n },\n afterWords: {\n // person-usually verbs\n said: p,\n says: p,\n told: p,\n tells: p,\n feels: p,\n felt: p,\n seems: p,\n thinks: p,\n thought: p,\n spends: p,\n spendt: p,\n plays: p,\n played: p,\n sing: p,\n sang: p,\n learn: p,\n learned: p,\n wants: p,\n wanted: p\n // and:true, //sue and jeff\n },\n}\n","import person from './_person.js'\n\n// 'april o'neil' - 'april 1st'\n\nconst m = 'Month'\nconst p = 'Person'\nconst month = {\n beforeTags: {\n Date: m,\n Value: m,\n },\n afterTags: {\n Date: m,\n Value: m,\n },\n beforeWords: {\n by: m,\n in: m,\n on: m,\n during: m,\n after: m,\n before: m,\n between: m,\n until: m,\n til: m,\n sometime: m,\n of: m, //5th of april\n this: m, //this april\n next: m,\n last: m,\n previous: m,\n following: m,\n with: p,\n // for: p,\n },\n afterWords: {\n sometime: m,\n in: m,\n of: m,\n until: m,\n the: m, //june the 4th\n },\n}\nexport default {\n beforeTags: Object.assign({}, person.beforeTags, month.beforeTags),\n afterTags: Object.assign({}, person.afterTags, month.afterTags),\n beforeWords: Object.assign({}, person.beforeWords, month.beforeWords),\n afterWords: Object.assign({}, person.afterWords, month.afterWords),\n}\n","import person from './_person.js'\nimport noun from './_noun.js'\n\n// 'babling brook' vs 'brook sheilds'\n\nconst clue = {\n beforeTags: Object.assign({}, noun.beforeTags, person.beforeTags),\n afterTags: Object.assign({}, noun.afterTags, person.afterTags),\n beforeWords: Object.assign({}, noun.beforeWords, person.beforeWords, { i: 'Infinitive', we: 'Infinitive' }),\n afterWords: Object.assign({}, noun.afterWords, person.afterWords),\n}\nexport default clue","import person from './_person.js'\nimport verb from './_verb.js'\nimport noun from './_noun.js'\n\n// 'rob the store' - 'rob lowe'\n// can be a noun too - 'losing hope'\nconst clues = {\n beforeTags: Object.assign({}, noun.beforeTags, person.beforeTags, verb.beforeTags),\n afterTags: Object.assign({}, noun.afterTags, person.afterTags, verb.afterTags),\n beforeWords: Object.assign({}, noun.beforeWords, person.beforeWords, verb.beforeWords),\n afterWords: Object.assign({}, noun.afterWords, person.afterWords, verb.afterWords),\n}\nexport default clues","import person from './_person.js'\nconst p = 'Place'\n\n// 'paris hilton' vs 'paris france'\nconst place = {\n beforeTags: {\n Place: p\n },\n afterTags: {\n Place: p,\n Abbreviation: p\n },\n beforeWords: {\n in: p,\n by: p,\n near: p,\n from: p,\n to: p,\n },\n afterWords: {\n in: p,\n by: p,\n near: p,\n from: p,\n to: p,\n government: p,\n council: p,\n region: p,\n city: p,\n },\n}\n\nconst clue = {\n beforeTags: Object.assign({}, place.beforeTags, person.beforeTags),\n afterTags: Object.assign({}, place.afterTags, person.afterTags),\n beforeWords: Object.assign({}, place.beforeWords, person.beforeWords),\n afterWords: Object.assign({}, place.afterWords, person.afterWords),\n}\nexport default clue","import person from './_person.js'\nimport adj from './_adj.js'\n\n// 'rusty nail' - 'rusty smith'\nconst clues = {\n beforeTags: Object.assign({}, person.beforeTags, adj.beforeTags),\n afterTags: Object.assign({}, person.afterTags, adj.afterTags),\n beforeWords: Object.assign({}, person.beforeWords, adj.beforeWords),\n afterWords: Object.assign({}, person.afterWords, adj.afterWords),\n}\nexport default clues","// '5 oz' - 'dr oz'\nconst un = 'Unit'\nconst clues = {\n beforeTags: { Value: un },\n afterTags: {},\n beforeWords: {\n per: un,\n every: un,\n each: un,\n square: un, //square km\n cubic: un,\n sq: un,\n metric: un //metric ton\n },\n afterWords: {\n per: un,\n squared: un,\n cubed: un,\n long: un //foot long\n },\n}\nexport default clues","import actorVerb from './actor-verb.js'\nimport adjGerund from './adj-gerund.js'\nimport adjNoun from './adj-noun.js'\nimport adjPast from './adj-past.js'\nimport adjPresent from './adj-present.js'\nimport nounGerund from './noun-gerund.js'\nimport nounVerb from './noun-verb.js'\nimport personDate from './person-date.js'\nimport personNoun from './person-noun.js'\nimport personVerb from './person-verb.js'\nimport personPlace from './person-place.js'\nimport personAdj from './person-adj.js'\nimport unitNoun from './unit-noun.js'\n\nconst clues = {\n 'Actor|Verb': actorVerb,\n 'Adj|Gerund': adjGerund,\n 'Adj|Noun': adjNoun,\n 'Adj|Past': adjPast,\n 'Adj|Present': adjPresent,\n 'Noun|Verb': nounVerb,\n 'Noun|Gerund': nounGerund,\n 'Person|Noun': personNoun,\n 'Person|Date': personDate,\n 'Person|Verb': personVerb,\n 'Person|Place': personPlace,\n 'Person|Adj': personAdj,\n 'Unit|Noun': unitNoun,\n}\n\nconst copy = (obj, more) => {\n const res = Object.keys(obj).reduce((h, k) => {\n h[k] = obj[k] === 'Infinitive' ? 'PresentTense' : 'Plural'\n return h\n }, {})\n return Object.assign(res, more)\n}\n\n// make a copy of this one\nclues['Plural|Verb'] = {\n beforeWords: copy(clues['Noun|Verb'].beforeWords, {\n had: 'Plural', //had tears\n have: 'Plural',\n }),\n afterWords: copy(clues['Noun|Verb'].afterWords, {\n his: 'PresentTense', her: 'PresentTense', its: 'PresentTense',\n in: null, to: null,\n is: 'PresentTense', //the way it works is\n by: 'PresentTense', //it works by\n }),\n beforeTags: copy(clues['Noun|Verb'].beforeTags, {\n Conjunction: 'PresentTense', //and changes\n Noun: undefined, //the century demands\n ProperNoun: 'PresentTense'//john plays\n }),\n afterTags: copy(clues['Noun|Verb'].afterTags, {\n Gerund: 'Plural',//ice caps disappearing\n Noun: 'PresentTense', //changes gears\n Value: 'PresentTense' //changes seven gears\n }),\n}\n// add some custom plural clues\nexport default clues","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Prop = 'ProperNoun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\nconst Place = 'Place'\nconst Prt = 'Participle'\n\nexport default [\n null,\n null,\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n eer: Noun,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund',\n ize: Inf,\n ibe: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n // oid: Adj,\n ous: Adj,\n que: Adj,\n ger: Noun,\n ber: Noun,\n rol: Sing,\n sis: Sing,\n ogy: Sing,\n oid: Sing,\n ian: Sing,\n zes: Pres,\n eld: Past,\n ken: Prt, //awoken\n ven: Prt, //woven\n ten: Prt, //brighten\n ect: Inf,\n ict: Inf,\n // ide: Inf,\n ign: Inf,\n oze: Inf,\n ful: Adj,\n bal: Adj,\n ton: Noun,\n pur: Place,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n rked: Past,\n reed: Past,\n nded: Past,\n mned: Adj,\n cted: Past,\n dged: Past,\n ield: Sing,\n akis: Last,\n cede: Inf,\n chuk: Last,\n czyk: Last,\n ects: Pres,\n iend: Sing,\n ends: Vb,\n enko: Last,\n ette: Sing,\n iary: Sing,\n wner: Sing, //owner\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ruct: Inf,\n ines: Plrl,\n ions: Plrl,\n ners: Plrl,\n pers: Plrl,\n lers: Plrl,\n less: Adj,\n llen: Adj,\n made: Adj,\n nsen: Last,\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last,\n ians: Plrl,\n // tage: Inf,\n tion: Sing,\n tage: Noun,\n ique: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n lier: Sing,\n fier: Sing,\n wned: Past,\n gent: Sing,\n tist: Actor,\n pist: Actor,\n rist: Actor,\n mist: Actor,\n yist: Actor,\n vist: Actor,\n ists: Actor,\n lite: Sing,\n site: Sing,\n rite: Sing,\n mite: Sing,\n bite: Sing,\n mate: Sing,\n date: Sing,\n ndal: Sing,\n vent: Sing,\n uist: Actor,\n gist: Actor,\n note: Sing,\n cide: Sing, //homicide\n ence: Sing, //absence\n wide: Adj, //nationwide\n // side: Adj,//alongside\n vide: Inf, //provide\n ract: Inf,\n duce: Inf,\n pose: Inf,\n eive: Inf,\n lyze: Inf,\n lyse: Inf,\n iant: Adj,\n nary: Adj,\n ghty: Adj,\n uent: Adj,\n erer: Actor, //caterer\n bury: Place,\n dorf: Noun,\n esty: Noun,\n wych: Place,\n dale: Place,\n folk: Place,\n vale: Place,\n abad: Place,\n sham: Place,\n wick: Place,\n view: Place,\n },\n {\n //5-letter\n elist: Actor,\n holic: Sing,\n phite: Sing,\n tized: Past,\n urned: Past,\n eased: Past,\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last,\n nssen: Last,\n ology: Noun,\n osome: Sing,\n tment: Sing,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n archy: Noun,\n pathy: Noun,\n opoly: Noun,\n embly: Noun,\n phate: Noun,\n ndent: Sing,\n scent: Sing,\n onist: Actor,\n anist: Actor,\n alist: Actor,\n olist: Actor,\n icist: Actor,\n ounce: Inf,\n iable: Adj,\n borne: Adj,\n gnant: Adj,\n inant: Adj,\n igent: Adj,\n atory: Adj,\n // ctory: Adj,\n rient: Sing,\n dient: Sing,\n maker: Actor,\n burgh: Place,\n mouth: Place,\n ceter: Place,\n ville: Place,\n hurst: Place,\n stead: Place,\n endon: Place,\n brook: Place,\n shire: Place,\n worth: Noun,\n field: Prop,\n ridge: Place,\n },\n {\n //6-letter\n auskas: Last,\n parent: Sing,\n cedent: Sing,\n ionary: Sing,\n cklist: Sing,\n brooke: Place,\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n worker: Actor,\n master: Actor,\n writer: Actor,\n brough: Place,\n cester: Place,\n ington: Place,\n cliffe: Place,\n ingham: Place,\n },\n {\n //7-letter\n chester: Place,\n logists: Actor,\n opoulos: Last,\n borough: Place,\n sdottir: Last, //swedish female\n },\n]\n","//prefixes give very-little away, in general.\n// more-often for scientific terms, etc.\nconst Adj = 'Adjective'\nconst Noun = 'Noun'\nconst Verb = 'Verb'\n\nexport default [\n null,\n null,\n {\n // 2-letter\n },\n {\n // 3-letter\n neo: Noun,\n bio: Noun,\n // pre: Noun,\n 'de-': Verb,\n 're-': Verb,\n 'un-': Verb,\n 'ex-': Noun,\n },\n {\n // 4-letter\n anti: Noun,\n auto: Noun,\n faux: Adj,\n hexa: Noun,\n kilo: Noun,\n mono: Noun,\n nano: Noun,\n octa: Noun,\n poly: Noun,\n semi: Adj,\n tele: Noun,\n 'pro-': Adj,\n 'mis-': Verb,\n 'dis-': Verb,\n 'pre-': Adj, //hmm\n },\n {\n // 5-letter\n anglo: Noun,\n centi: Noun,\n ethno: Noun,\n ferro: Noun,\n grand: Noun,\n hepta: Noun,\n hydro: Noun,\n intro: Noun,\n macro: Noun,\n micro: Noun,\n milli: Noun,\n nitro: Noun,\n penta: Noun,\n quasi: Adj,\n radio: Noun,\n tetra: Noun,\n 'omni-': Adj,\n 'post-': Adj,\n },\n {\n // 6-letter\n pseudo: Adj,\n 'extra-': Adj,\n 'hyper-': Adj,\n 'inter-': Adj,\n 'intra-': Adj,\n 'deca-': Adj,\n // 'trans-': Noun,\n },\n {\n // 7-letter\n electro: Noun,\n },\n]\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n\nexport default {\n a: [\n [/.[aeiou]na$/, Noun, 'tuna'],\n [/.[oau][wvl]ska$/, Last],\n [/.[^aeiou]ica$/, Sing, 'harmonica'],\n [/^([hyj]a+)+$/, Exp, 'haha'], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past, 'popped'],\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past, 'rammed'],\n //-hed\n [/.[aeiou][sg]hed$/, Past, 'gushed'],\n //-rd\n [/.[aeiou]red$/, Past, 'hired'],\n [/.[aeiou]r?ried$/, Past, 'hurried'],\n // ard\n [/[^aeiou]ard$/, Sing, 'steward'],\n // id\n [/[aeiou][^aeiou]id$/, Adj, ''],\n [/.[vrl]id$/, Adj, 'livid'],\n\n // ===== -ed ======\n //-led\n [/..led$/, Past, 'hurled'],\n //-sed\n [/.[iao]sed$/, Past, ''],\n [/[aeiou]n?[cs]ed$/, Past, ''],\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past, ''],\n //-ked\n [/[aeiou][ns]?c?ked$/, Past, 'bunked'],\n //-gned\n [/[aeiou]gned$/, Past],\n //-ged\n [/[aeiou][nl]?ged$/, Past],\n //-ted\n [/.[tdbwxyz]ed$/, Past],\n [/[^aeiou][aeiou][tvx]ed$/, Past],\n //-ied\n [/.[cdflmnprstv]ied$/, Past, 'emptied'],\n ],\n e: [\n [/.[lnr]ize$/, Inf, 'antagonize'],\n [/.[^aeiou]ise$/, Inf, 'antagonise'],\n [/.[aeiou]te$/, Inf, 'bite'],\n [/.[^aeiou][ai]ble$/, Adj, 'fixable'],\n [/.[^aeiou]eable$/, Adj, 'maleable'],\n [/.[ts]ive$/, Adj, 'festive'],\n [/[a-z]-like$/, Adj, 'woman-like'],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj, 'cornish'],\n [/.v[iy]ch$/, Last, '..ovich'],\n [/^ug?h+$/, Exp, 'ughh'],\n [/^uh[ -]?oh$/, Exp, 'uhoh'],\n [/[a-z]-ish$/, Adj, 'cartoon-ish'],\n ],\n i: [[/.[oau][wvl]ski$/, Last, 'polish-male']],\n k: [\n [/^(k){2}$/, Exp, 'kkkk'], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj, 'familial'],\n [/.[^aeiou]ful$/, Adj, 'fitful'],\n [/.[nrtumcd]al$/, Adj, 'natal'],\n [/.[^aeiou][ei]al$/, Adj, 'familial'],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing, 'magnesium'],\n [/[^aeiou]ism$/, Sing, 'schism'],\n [/^[hu]m+$/, Exp, 'hmm'],\n [/^\\d+ ?[ap]m$/, 'Date', '3am'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj, 'republican'],\n [/[^aeiou]ician$/, Actor, 'musician'],\n [/[aeiou][ktrp]in'$/, 'Gerund', \"cookin'\"], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp, 'noooo'],\n [/^(yo)+$/, Exp, 'yoo'],\n [/^wo{2,}[pt]?$/, Exp, 'woop'], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n [/.[lk]er$/, 'Noun'],\n [/.ier$/, 'Comparative'],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[^aeiou]ises$/, Pres],\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres],\n [/.[aeiou]kes$/, Pres],\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/.(gg|bb|zz)ly$/, Adj],\n [/...lly$/, Adverb],\n [/.[gk]y$/, Adj],\n [/[bszmp]{2}y$/, Adj],\n [/.[ai]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","const vb = 'Verb'\nconst nn = 'Noun'\n\nexport default {\n // looking at the previous word's tags:\n leftTags: [\n ['Adjective', nn],\n ['Possessive', nn],\n ['Determiner', nn],\n ['Adverb', vb],\n ['Pronoun', vb],\n ['Value', nn],\n ['Ordinal', nn],\n ['Modal', vb],\n ['Superlative', nn],\n ['Demonym', nn],\n ['Honorific', 'Person'], //dr. Smith\n ],\n // looking at the previous word:\n leftWords: [\n ['i', vb],\n ['first', nn],\n ['it', vb],\n ['there', vb],\n ['not', vb],\n ['because', nn],\n ['if', nn],\n ['but', nn],\n ['who', vb],\n ['this', nn],\n ['his', nn],\n ['when', nn],\n ['you', vb],\n ['very', 'Adjective'],\n ['old', nn],\n ['never', vb],\n ['before', nn],\n ['a', nn],\n ['the', nn],\n ['been', vb],\n ],\n\n // looking at the next word's tags:\n rightTags: [\n ['Copula', nn],\n ['PastTense', nn],\n ['Conjunction', nn],\n ['Modal', nn],\n ],\n // looking at the next word:\n rightWords: [\n ['there', vb],\n ['me', vb],\n ['man', 'Adjective'],\n // ['only', vb],\n ['him', vb],\n ['it', vb],//relaunch it\n ['were', nn],\n ['took', nn],\n ['himself', vb],\n ['went', nn],\n ['who', nn],\n ['jr', 'Person'],\n ],\n}\n","// generated in ./lib/pairs\nexport default {\n \"Comparative\": {\n \"fwd\": \"3:ser,ier¦1er:h,t,f,l,n¦1r:e¦2er:ss,or,om\",\n \"both\": \"3er:ver,ear,alm¦3ner:hin¦3ter:lat¦2mer:im¦2er:ng,rm,mb¦2ber:ib¦2ger:ig¦1er:w,p,k,d¦ier:y\",\n \"rev\": \"1:tter,yer¦2:uer,ver,ffer,oner,eler,ller,iler,ster,cer,uler,sher,ener,gher,aner,adder,nter,eter,rter,hter,rner,fter¦3:oser,ooler,eafer,user,airer,bler,maler,tler,eater,uger,rger,ainer,urer,ealer,icher,pler,emner,icter,nser,iser¦4:arser,viner,ucher,rosser,somer,ndomer,moter,oother,uarer,hiter¦5:nuiner,esser,emier¦ar:urther\",\n \"ex\": \"worse:bad¦better:good¦4er:fair,gray,poor¦1urther:far¦3ter:fat,hot,wet¦3der:mad,sad¦3er:shy,fun¦4der:glad¦:¦4r:cute,dire,fake,fine,free,lame,late,pale,rare,ripe,rude,safe,sore,tame,wide¦5r:eerie,stale\"\n },\n \"Gerund\": {\n \"fwd\": \"1:nning,tting,rring,pping,eing,mming,gging,dding,bbing,kking¦2:eking,oling,eling,eming¦3:velling,siting,uiting,fiting,loting,geting,ialing,celling¦4:graming\",\n \"both\": \"1:aing,iing,fing,xing,ying,oing,hing,wing¦2:tzing,rping,izzing,bting,mning,sping,wling,rling,wding,rbing,uping,lming,wning,mping,oning,lting,mbing,lking,fting,hting,sking,gning,pting,cking,ening,nking,iling,eping,ering,rting,rming,cting,lping,ssing,nting,nding,lding,sting,rning,rding,rking¦3:belling,siping,toming,yaking,uaking,oaning,auling,ooping,aiding,naping,euring,tolling,uzzing,ganing,haning,ualing,halling,iasing,auding,ieting,ceting,ouling,voring,ralling,garing,joring,oaming,oaking,roring,nelling,ooring,uelling,eaming,ooding,eaping,eeting,ooting,ooming,xiting,keting,ooking,ulling,airing,oaring,biting,outing,oiting,earing,naling,oading,eeding,ouring,eaking,aiming,illing,oining,eaning,onging,ealing,aining,eading¦4:thoming,melling,aboring,ivoting,weating,dfilling,onoring,eriting,imiting,tialling,rgining,otoring,linging,winging,lleting,louding,spelling,mpelling,heating,feating,opelling,choring,welling,ymaking,ctoring,calling,peating,iloring,laiting,utoring,uditing,mmaking,loating,iciting,waiting,mbating,voiding,otalling,nsoring,nselling,ocusing,itoring,eloping¦5:rselling,umpeting,atrolling,treating,tselling,rpreting,pringing,ummeting,ossoming,elmaking,eselling,rediting,totyping,onmaking,rfeiting,ntrolling¦5e:chmaking,dkeeping,severing,erouting,ecreting,ephoning,uthoring,ravening,reathing,pediting,erfering,eotyping,fringing,entoring,ombining,ompeting¦4e:emaking,eething,twining,rruling,chuting,xciting,rseding,scoping,edoring,pinging,lunging,agining,craping,pleting,eleting,nciting,nfining,ncoding,tponing,ecoding,writing,esaling,nvening,gnoring,evoting,mpeding,rvening,dhering,mpiling,storing,nviting,ploring¦3e:tining,nuring,saking,miring,haling,ceding,xuding,rining,nuting,laring,caring,miling,riding,hoking,piring,lading,curing,uading,noting,taping,futing,paring,hading,loding,siring,guring,vading,voking,during,niting,laning,caping,luting,muting,ruding,ciding,juring,laming,caling,hining,uoting,liding,ciling,duling,tuting,puting,cuting,coring,uiding,tiring,turing,siding,rading,enging,haping,buting,lining,taking,anging,haring,uiring,coming,mining,moting,suring,viding,luding¦2e:tring,zling,uging,oging,gling,iging,vring,fling,lging,obing,psing,pling,ubing,cling,dling,wsing,iking,rsing,dging,kling,ysing,tling,rging,eging,nsing,uning,osing,uming,using,ibing,bling,aging,ising,asing,ating¦2ie:rlying¦1e:zing,uing,cing,ving\",\n \"rev\": \"ying:ie¦1ing:se,ke,te,we,ne,re,de,pe,me,le,c,he¦2ing:ll,ng,dd,ee,ye,oe,rg,us¦2ning:un¦2ging:og,ag,ug,ig,eg¦2ming:um¦2bing:ub,ab,eb,ob¦3ning:lan,can,hin,pin,win¦3ring:cur,lur,tir,tar,pur,car¦3ing:ait,del,eel,fin,eat,oat,eem,lel,ool,ein,uin¦3ping:rop,rap,top,uip,wap,hip,hop,lap,rip,cap¦3ming:tem,wim,rim,kim,lim¦3ting:mat,cut,pot,lit,lot,hat,set,pit,put¦3ding:hed,bed,bid¦3king:rek¦3ling:cil,pel¦3bing:rib¦4ning:egin¦4ing:isit,ruit,ilot,nsit,dget,rkel,ival,rcel¦4ring:efer,nfer¦4ting:rmit,mmit,ysit,dmit,emit,bmit,tfit,gret¦4ling:evel,xcel,ivel¦4ding:hred¦5ing:arget,posit,rofit¦5ring:nsfer¦5ting:nsmit,orget,cquit¦5ling:ancel,istil\",\n \"ex\": \"3:adding,eating,aiming,aiding,airing,outing,gassing,setting,getting,putting,cutting,winning,sitting,betting,mapping,tapping,letting,bidding,hitting,tanning,netting,popping,fitting,capping,lapping,barring,banning,vetting,topping,rotting,tipping,potting,wetting,pitting,dipping,budding,hemming,pinning,jetting,kidding,padding,podding,sipping,wedding,bedding,donning,warring,penning,gutting,cueing,wadding,petting,ripping,napping,matting,tinning,binning,dimming,hopping,mopping,nodding,panning,rapping,ridding,sinning¦4:selling,falling,calling,waiting,editing,telling,rolling,heating,boating,hanging,beating,coating,singing,tolling,felling,polling,discing,seating,voiding,gelling,yelling,baiting,reining,ruining,seeking,spanning,stepping,knitting,emitting,slipping,quitting,dialing,omitting,clipping,shutting,skinning,abutting,flipping,trotting,cramming,fretting,suiting¦5:bringing,treating,spelling,stalling,trolling,expelling,rivaling,wringing,deterring,singeing,befitting,refitting¦6:enrolling,distilling,scrolling,strolling,caucusing,travelling¦7:installing,redefining,stencilling,recharging,overeating,benefiting,unraveling,programing¦9:reprogramming¦is:being¦2e:using,aging,owing¦3e:making,taking,coming,noting,hiring,filing,coding,citing,doping,baking,coping,hoping,lading,caring,naming,voting,riding,mining,curing,lining,ruling,typing,boring,dining,firing,hiding,piling,taping,waning,baling,boning,faring,honing,wiping,luring,timing,wading,piping,fading,biting,zoning,daring,waking,gaming,raking,ceding,tiring,coking,wining,joking,paring,gaping,poking,pining,coring,liming,toting,roping,wiring,aching¦4e:writing,storing,eroding,framing,smoking,tasting,wasting,phoning,shaking,abiding,braking,flaking,pasting,priming,shoring,sloping,withing,hinging¦5e:defining,refining,renaming,swathing,fringing,reciting¦1ie:dying,tying,lying,vying¦7e:sunbathing\"\n },\n \"Participle\": {\n \"fwd\": \"1:mt¦2:llen¦3:iven,aken¦:ne¦y:in\",\n \"both\": \"1:wn¦2:me,aten¦3:seen,bidden,isen¦4:roven,asten¦3l:pilt¦3d:uilt¦2e:itten¦1im:wum¦1eak:poken¦1ine:hone¦1ose:osen¦1in:gun¦1ake:woken¦ear:orn¦eal:olen¦eeze:ozen¦et:otten¦ink:unk¦ing:ung\",\n \"rev\": \"2:un¦oken:eak¦ought:eek¦oven:eave¦1ne:o¦1own:ly¦1den:de¦1in:ay¦2t:am¦2n:ee¦3en:all¦4n:rive,sake,take¦5n:rgive\",\n \"ex\": \"2:been¦3:seen,run¦4:given,taken¦5:shaken¦2eak:broken¦1ive:dove¦2y:flown¦3e:hidden,ridden¦1eek:sought¦1ake:woken¦1eave:woven\"\n },\n \"PastTense\": {\n \"fwd\": \"1:tted,wed,gged,nned,een,rred,pped,yed,bbed,oed,dded,rd,wn,mmed¦2:eed,nded,et,hted,st,oled,ut,emed,eled,lded,ken,rt,nked,apt,ant,eped,eked¦3:eared,eat,eaded,nelled,ealt,eeded,ooted,eaked,eaned,eeted,mited,bid,uit,ead,uited,ealed,geted,velled,ialed,belled¦4:ebuted,hined,comed¦y:ied¦ome:ame¦ear:ore¦ind:ound¦ing:ung,ang¦ep:pt¦ink:ank,unk¦ig:ug¦all:ell¦ee:aw¦ive:ave¦eeze:oze¦old:eld¦ave:ft¦ake:ook¦ell:old¦ite:ote¦ide:ode¦ine:one¦in:un,on¦eal:ole¦im:am¦ie:ay¦and:ood¦1ise:rose¦1eak:roke¦1ing:rought¦1ive:rove¦1el:elt¦1id:bade¦1et:got¦1y:aid¦1it:sat¦3e:lid¦3d:pent\",\n \"both\": \"1:aed,fed,xed,hed¦2:sged,xted,wled,rped,lked,kied,lmed,lped,uped,bted,rbed,rked,wned,rled,mped,fted,mned,mbed,zzed,omed,ened,cked,gned,lted,sked,ued,zed,nted,ered,rted,rmed,ced,sted,rned,ssed,rded,pted,ved,cted¦3:cled,eined,siped,ooned,uked,ymed,jored,ouded,ioted,oaned,lged,asped,iged,mured,oided,eiled,yped,taled,moned,yled,lit,kled,oaked,gled,naled,fled,uined,oared,valled,koned,soned,aided,obed,ibed,meted,nicked,rored,micked,keted,vred,ooped,oaded,rited,aired,auled,filled,ouled,ooded,ceted,tolled,oited,bited,aped,tled,vored,dled,eamed,nsed,rsed,sited,owded,pled,sored,rged,osed,pelled,oured,psed,oated,loned,aimed,illed,eured,tred,ioned,celled,bled,wsed,ooked,oiled,itzed,iked,iased,onged,ased,ailed,uned,umed,ained,auded,nulled,ysed,eged,ised,aged,oined,ated,used,dged,doned¦4:ntied,efited,uaked,caded,fired,roped,halled,roked,himed,culed,tared,lared,tuted,uared,routed,pited,naked,miled,houted,helled,hared,cored,caled,tired,peated,futed,ciled,called,tined,moted,filed,sided,poned,iloted,honed,lleted,huted,ruled,cured,named,preted,vaded,sured,talled,haled,peded,gined,nited,uided,ramed,feited,laked,gured,ctored,unged,pired,cuted,voked,eloped,ralled,rined,coded,icited,vided,uaded,voted,mined,sired,noted,lined,nselled,luted,jured,fided,puted,piled,pared,olored,cided,hoked,enged,tured,geoned,cotted,lamed,uiled,waited,udited,anged,luded,mired,uired,raded¦5:modelled,izzled,eleted,umpeted,ailored,rseded,treated,eduled,ecited,rammed,eceded,atrolled,nitored,basted,twined,itialled,ncited,gnored,ploded,xcited,nrolled,namelled,plored,efeated,redited,ntrolled,nfined,pleted,llided,lcined,eathed,ibuted,lloted,dhered,cceded¦3ad:sled¦2aw:drew¦2ot:hot¦2ke:made¦2ow:hrew,grew¦2ose:hose¦2d:ilt¦2in:egan¦1un:ran¦1ink:hought¦1ick:tuck¦1ike:ruck¦1eak:poke,nuck¦1it:pat¦1o:did¦1ow:new¦1ake:woke¦go:went\",\n \"rev\": \"3:rst,hed,hut,cut,set¦4:tbid¦5:dcast,eread,pread,erbid¦ought:uy,eek¦1ied:ny,ly,dy,ry,fy,py,vy,by,ty,cy¦1ung:ling,ting,wing¦1pt:eep¦1ank:rink¦1ore:bear,wear¦1ave:give¦1oze:reeze¦1ound:rind,wind¦1ook:take,hake¦1aw:see¦1old:sell¦1ote:rite¦1ole:teal¦1unk:tink¦1am:wim¦1ay:lie¦1ood:tand¦1eld:hold¦2d:he,ge,re,le,leed,ne,reed,be,ye,lee,pe,we¦2ed:dd,oy,or,ey,gg,rr,us,ew,to¦2ame:ecome,rcome¦2ped:ap¦2ged:ag,og,ug,eg¦2bed:ub,ab,ib,ob¦2lt:neel¦2id:pay¦2ang:pring¦2ove:trive¦2med:um¦2ode:rride¦2at:ysit¦3ted:mit,hat,mat,lat,pot,rot,bat¦3ed:low,end,tow,und,ond,eem,lay,cho,dow,xit,eld,ald,uld,law,lel,eat,oll,ray,ank,fin,oam,out,how,iek,tay,haw,ait,vet,say,cay,bow¦3d:ste,ede,ode,ete,ree,ude,ame,oke,ote,ime,ute,ade¦3red:lur,cur,pur,car¦3ped:hop,rop,uip,rip,lip,tep,top¦3ded:bed,rod,kid¦3ade:orbid¦3led:uel¦3ned:lan,can,kin,pan,tun¦3med:rim,lim¦4ted:quit,llot¦4ed:pear,rrow,rand,lean,mand,anel,pand,reet,link,abel,evel,imit,ceed,ruit,mind,peal,veal,hool,head,pell,well,mell,uell,band,hear,weak¦4led:nnel,qual,ebel,ivel¦4red:nfer,efer,sfer¦4n:sake,trew¦4d:ntee¦4ded:hred¦4ned:rpin¦5ed:light,nceal,right,ndear,arget,hread,eight,rtial,eboot¦5d:edite,nvite¦5ted:egret¦5led:ravel\",\n \"ex\": \"2:been,upped¦3:added,aged,aided,aimed,aired,bid,died,dyed,egged,erred,eyed,fit,gassed,hit,lied,owed,pent,pied,tied,used,vied,oiled,outed,banned,barred,bet,canned,cut,dipped,donned,ended,feed,inked,jarred,let,manned,mowed,netted,padded,panned,pitted,popped,potted,put,set,sewn,sowed,tanned,tipped,topped,vowed,weed,bowed,jammed,binned,dimmed,hopped,mopped,nodded,pinned,rigged,sinned,towed,vetted¦4:ached,baked,baled,boned,bored,called,caned,cared,ceded,cited,coded,cored,cubed,cured,dared,dined,edited,exited,faked,fared,filed,fined,fired,fuelled,gamed,gelled,hired,hoped,joked,lined,mined,named,noted,piled,poked,polled,pored,pulled,reaped,roamed,rolled,ruled,seated,shed,sided,timed,tolled,toned,voted,waited,walled,waned,winged,wiped,wired,zoned,yelled,tamed,lubed,roped,faded,mired,caked,honed,banged,culled,heated,raked,welled,banded,beat,cast,cooled,cost,dealt,feared,folded,footed,handed,headed,heard,hurt,knitted,landed,leaked,leapt,linked,meant,minded,molded,neared,needed,peaked,plodded,plotted,pooled,quit,read,rooted,sealed,seeded,seeped,shipped,shunned,skimmed,slammed,sparred,stemmed,stirred,suited,thinned,twinned,swayed,winked,dialed,abutted,blotted,fretted,healed,heeded,peeled,reeled¦5:basted,cheated,equalled,eroded,exiled,focused,opined,pleated,primed,quoted,scouted,shored,sloped,smoked,sniped,spelled,spouted,routed,staked,stored,swelled,tasted,treated,wasted,smelled,dwelled,honored,prided,quelled,eloped,scared,coveted,sweated,breaded,cleared,debuted,deterred,freaked,modeled,pleaded,rebutted,speeded¦6:anchored,defined,endured,impaled,invited,refined,revered,strolled,cringed,recast,thrust,unfolded¦7:authored,combined,competed,conceded,convened,excreted,extruded,redefined,restored,secreted,rescinded,welcomed¦8:expedited,infringed¦9:interfered,intervened,persevered¦10:contravened¦eat:ate¦is:was¦go:went¦are:were¦3d:bent,lent,rent,sent¦3e:bit,fled,hid,lost¦3ed:bled,bred¦2ow:blew,grew¦1uy:bought¦2tch:caught¦1o:did¦1ive:dove,gave¦2aw:drew¦2ed:fed¦2y:flew,laid,paid,said¦1ight:fought¦1et:got¦2ve:had¦1ang:hung¦2ad:led¦2ght:lit¦2ke:made¦2et:met¦1un:ran¦1ise:rose¦1it:sat¦1eek:sought¦1each:taught¦1ake:woke,took¦1eave:wove¦2ise:arose¦1ear:bore,tore,wore¦1ind:bound,found,wound¦2eak:broke¦2ing:brought,wrung¦1ome:came¦2ive:drove¦1ig:dug¦1all:fell¦2el:felt¦4et:forgot¦1old:held¦2ave:left¦1ing:rang,sang¦1ide:rode¦1ink:sank¦1ee:saw¦2ine:shone¦4e:slid¦1ell:sold,told¦4d:spent¦2in:spun¦1in:won\"\n },\n \"PresentTense\": {\n \"fwd\": \"1:oes¦1ve:as\",\n \"both\": \"1:xes¦2:zzes,ches,shes,sses¦3:iases¦2y:llies,plies¦1y:cies,bies,ties,vies,nies,pies,dies,ries,fies¦:s\",\n \"rev\": \"1ies:ly¦2es:us,go,do¦3es:cho,eto\",\n \"ex\": \"2:does,goes¦3:gasses¦5:focuses¦is:are¦3y:relies¦2y:flies¦2ve:has\"\n },\n \"Superlative\": {\n \"fwd\": \"1st:e¦1est:l,m,f,s¦1iest:cey¦2est:or,ir¦3est:ver\",\n \"both\": \"4:east¦5:hwest¦5lest:erful¦4est:weet,lgar,tter,oung¦4most:uter¦3est:ger,der,rey,iet,ong,ear¦3test:lat¦3most:ner¦2est:pt,ft,nt,ct,rt,ht¦2test:it¦2gest:ig¦1est:b,k,n,p,h,d,w¦iest:y\",\n \"rev\": \"1:ttest,nnest,yest¦2:sest,stest,rmest,cest,vest,lmest,olest,ilest,ulest,ssest,imest,uest¦3:rgest,eatest,oorest,plest,allest,urest,iefest,uelest,blest,ugest,amest,yalest,ealest,illest,tlest,itest¦4:cerest,eriest,somest,rmalest,ndomest,motest,uarest,tiffest¦5:leverest,rangest¦ar:urthest¦3ey:riciest\",\n \"ex\": \"best:good¦worst:bad¦5est:great¦4est:fast,full,fair,dull¦3test:hot,wet,fat¦4nest:thin¦1urthest:far¦3est:gay,shy,ill¦4test:neat¦4st:late,wide,fine,safe,cute,fake,pale,rare,rude,sore,ripe,dire¦6st:severe\"\n },\n \"AdjToNoun\": {\n \"fwd\": \"1:tistic,eable,lful,sful,ting,tty¦2:onate,rtable,geous,ced,seful,ctful¦3:ortive,ented¦arity:ear¦y:etic¦fulness:begone¦1ity:re¦1y:tiful,gic¦2ity:ile,imous,ilous,ime¦2ion:ated¦2eness:iving¦2y:trious¦2ation:iring¦2tion:vant¦3ion:ect¦3ce:mant,mantic¦3tion:irable¦3y:est,estic¦3m:mistic,listic¦3ess:ning¦4n:utious¦4on:rative,native,vative,ective¦4ce:erant\",\n \"both\": \"1:king,wing¦2:alous,ltuous,oyful,rdous¦3:gorous,ectable,werful,amatic¦4:oised,usical,agical,raceful,ocused,lined,ightful¦5ness:stful,lding,itous,nuous,ulous,otous,nable,gious,ayful,rvous,ntous,lsive,peful,entle,ciful,osive,leful,isive,ncise,reful,mious¦5ty:ivacious¦5ties:ubtle¦5ce:ilient,adiant,atient¦5cy:icient¦5sm:gmatic¦5on:sessive,dictive¦5ity:pular,sonal,eative,entic¦5sity:uminous¦5ism:conic¦5nce:mperate¦5ility:mitable¦5ment:xcited¦5n:bitious¦4cy:brant,etent,curate¦4ility:erable,acable,icable,ptable¦4ty:nacious,aive,oyal,dacious¦4n:icious¦4ce:vient,erent,stent,ndent,dient,quent,ident¦4ness:adic,ound,hing,pant,sant,oing,oist,tute¦4icity:imple¦4ment:fined,mused¦4ism:otic¦4ry:dantic¦4ity:tund,eral¦4edness:hand¦4on:uitive¦4lity:pitable¦4sm:eroic,namic¦4sity:nerous¦3th:arm¦3ility:pable,bable,dable,iable¦3cy:hant,nant,icate¦3ness:red,hin,nse,ict,iet,ite,oud,ind,ied,rce¦3ion:lute¦3ity:ual,gal,volous,ial¦3ce:sent,fensive,lant,gant,gent,lent,dant¦3on:asive¦3m:fist,sistic,iastic¦3y:terious,xurious,ronic,tastic¦3ur:amorous¦3e:tunate¦3ation:mined¦3sy:rteous¦3ty:ain¦3ry:ave¦3ment:azed¦2ness:de,on,ue,rn,ur,ft,rp,pe,om,ge,rd,od,ay,ss,er,ll,oy,ap,ht,ld,ad,rt¦2inousness:umous¦2ity:neous,ene,id,ane¦2cy:bate,late¦2ation:ized¦2ility:oble,ible¦2y:odic¦2e:oving,aring¦2s:ost¦2itude:pt¦2dom:ee¦2ance:uring¦2tion:reet¦2ion:oted¦2sion:ending¦2liness:an¦2or:rdent¦1th:ung¦1e:uable¦1ness:w,h,k,f¦1ility:mble¦1or:vent¦1ement:ging¦1tiquity:ncient¦1ment:hed¦verty:or¦ength:ong¦eat:ot¦pth:ep¦iness:y\",\n \"rev\": \"\",\n \"ex\": \"5:forceful,humorous¦8:charismatic¦13:understanding¦5ity:active¦11ness:adventurous,inquisitive,resourceful¦8on:aggressive,automatic,perceptive¦7ness:amorous,fatuous,furtive,ominous,serious¦5ness:ample,sweet¦12ness:apprehensive,cantankerous,contemptuous,ostentatious¦13ness:argumentative,conscientious¦9ness:assertive,facetious,imperious,inventive,oblivious,rapacious,receptive,seditious,whimsical¦10ness:attractive,expressive,impressive,loquacious,salubrious,thoughtful¦3edom:boring¦4ness:calm,fast,keen,tame¦8ness:cheerful,gracious,specious,spurious,timorous,unctuous¦5sity:curious¦9ion:deliberate¦8ion:desperate¦6e:expensive¦7ce:fragrant¦3y:furious¦9ility:ineluctable¦6ism:mystical¦8ity:physical,proactive,sensitive,vertical¦5cy:pliant¦7ity:positive¦9ity:practical¦12ism:professional¦6ce:prudent¦3ness:red¦6cy:vagrant¦3dom:wise\"\n }\n}","\n// 01- full-word exceptions\nconst checkEx = function (str, ex = {}) {\n if (ex.hasOwnProperty(str)) {\n return ex[str]\n }\n return null\n}\n\n// 02- suffixes that pass our word through\nconst checkSame = function (str, same = []) {\n for (let i = 0; i < same.length; i += 1) {\n if (str.endsWith(same[i])) {\n return str\n }\n }\n return null\n}\n\n// 03- check rules - longest first\nconst checkRules = function (str, fwd, both = {}) {\n fwd = fwd || {}\n let max = str.length - 1\n // look for a matching suffix\n for (let i = max; i >= 1; i -= 1) {\n let size = str.length - i\n let suff = str.substring(size, str.length)\n // check fwd rules, first\n if (fwd.hasOwnProperty(suff) === true) {\n return str.slice(0, size) + fwd[suff]\n }\n // check shared rules\n if (both.hasOwnProperty(suff) === true) {\n return str.slice(0, size) + both[suff]\n }\n }\n // try a fallback transform\n if (fwd.hasOwnProperty('')) {\n return str += fwd['']\n }\n if (both.hasOwnProperty('')) {\n return str += both['']\n }\n return null\n}\n\n//sweep-through all suffixes\nconst convert = function (str = '', model = {}) {\n // 01- check exceptions\n let out = checkEx(str, model.ex)\n // 02 - check same\n out = out || checkSame(str, model.same)\n // check forward and both rules\n out = out || checkRules(str, model.fwd, model.both)\n //return unchanged\n out = out || str\n return out\n}\nexport default convert","const flipObj = function (obj) {\n return Object.entries(obj).reduce((h, a) => {\n h[a[1]] = a[0]\n return h\n }, {})\n}\n\nconst reverse = function (model = {}) {\n return {\n reversed: true,\n // keep these two\n both: flipObj(model.both),\n ex: flipObj(model.ex),\n // swap this one in\n fwd: model.rev || {}\n }\n}\nexport default reverse","const prefix = /^([0-9]+)/\n\nconst toObject = function (txt) {\n let obj = {}\n txt.split('¦').forEach(str => {\n let [key, vals] = str.split(':')\n vals = (vals || '').split(',')\n vals.forEach(val => {\n obj[val] = key\n })\n })\n return obj\n}\n\nconst growObject = function (key = '', val = '') {\n val = String(val)\n let m = val.match(prefix)\n if (m === null) {\n return val\n }\n let num = Number(m[1]) || 0\n let pre = key.substring(0, num)\n let full = pre + val.replace(prefix, '')\n return full\n}\n\nconst unpackOne = function (str) {\n let obj = toObject(str)\n return Object.keys(obj).reduce((h, k) => {\n h[k] = growObject(k, obj[k])\n return h\n }, {})\n}\n\nconst uncompress = function (model = {}) {\n if (typeof model === 'string') {\n model = JSON.parse(model)\n }\n model.fwd = unpackOne(model.fwd || '')\n model.both = unpackOne(model.both || '')\n model.rev = unpackOne(model.rev || '')\n model.ex = unpackOne(model.ex || '')\n return model\n}\nexport default uncompress\n","import data from './_data.js'\nimport { reverse, uncompress } from 'suffix-thumb'\n// import { reverse, uncompress } from '/Users/spencer/mountain/suffix-thumb'\n// const uncompress = function () { }\n// const reverse = function () { }\nconst fromPast = uncompress(data.PastTense)\nconst fromPresent = uncompress(data.PresentTense)\nconst fromGerund = uncompress(data.Gerund)\nconst fromParticiple = uncompress(data.Participle)\n\nconst toPast = reverse(fromPast)\nconst toPresent = reverse(fromPresent)\nconst toGerund = reverse(fromGerund)\nconst toParticiple = reverse(fromParticiple)\n\nconst toComparative = uncompress(data.Comparative)\nconst toSuperlative = uncompress(data.Superlative)\nconst fromComparative = reverse(toComparative)\nconst fromSuperlative = reverse(toSuperlative)\n\nconst adjToNoun = uncompress(data.AdjToNoun)\n\nexport default {\n fromPast,\n fromPresent,\n fromGerund,\n fromParticiple,\n toPast,\n toPresent,\n toGerund,\n toParticiple,\n // adjectives\n toComparative,\n toSuperlative,\n fromComparative,\n fromSuperlative,\n adjToNoun\n}\n// console.log(convert('collide', toPast))","export default [\n //web tags\n [/^[\\w.]+@[\\w.]+\\.[a-z]{2,3}$/, 'Email'],\n [/^(https?:\\/\\/|www\\.)+\\w+\\.[a-z]{2,3}/, 'Url', 'http..'],\n [/^[a-z0-9./].+\\.(com|net|gov|org|ly|edu|info|biz|dev|ru|jp|de|in|uk|br|io|ai)/, 'Url', '.com'],\n\n // timezones\n [/^[PMCE]ST$/, 'Timezone', 'EST'],\n\n //names\n [/^ma?c'[a-z]{3}/, 'LastName', \"mc'neil\"],\n [/^o'[a-z]{3}/, 'LastName', \"o'connor\"],\n [/^ma?cd[aeiou][a-z]{3}/, 'LastName', 'mcdonald'],\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression', 'lol'],\n [/^wo{2,}a*h?$/, 'Expression', 'wooah'],\n [/^(hee?){2,}h?$/, 'Expression', 'hehe'],\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb', 'un-vite'],\n\n // m/h\n [/^(m|k|cm|km)\\/(s|h|hr)$/, 'Unit', '5 k/m'],\n // μg/g\n [/^(ug|ng|mg)\\/(l|m3|ft3)$/, 'Unit', 'ug/L'],\n\n // love/hate\n [/[^:/]\\/\\p{Letter}/u, 'SlashedTerm', 'love/hate'],\n]\n","export default [\n // #coolguy\n [/^#[\\p{Number}_]*\\p{Letter}/u, 'HashTag'], // can't be all numbers\n\n // @spencermountain\n [/^@\\w{2,}$/, 'AtMention'],\n\n // period-ones acronyms - f.b.i.\n [/^([A-Z]\\.){2}[A-Z]?/i, ['Acronym', 'Noun'], 'F.B.I'], //ascii-only\n\n // ending-apostrophes\n [/.{3}[lkmnp]in['‘’‛‵′`´]$/, 'Gerund', \"chillin'\"],\n [/.{4}s['‘’‛‵′`´]$/, 'Possessive', \"flanders'\"],\n\n //from https://www.regextester.com/106421\n // [/^([\\u00a9\\u00ae\\u2319-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/, 'Emoji', 'emoji-range']\n // unicode character range\n [/^[\\p{Emoji_Presentation}\\p{Extended_Pictographic}]/u, 'Emoji', 'emoji-class'],\n]\n","export default [\n [/^@1?[0-9](am|pm)$/i, 'Time', '3pm'],\n [/^@1?[0-9]:[0-9]{2}(am|pm)?$/i, 'Time', '3:30pm'],\n [/^'[0-9]{2}$/, 'Year'],\n // times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time', '3:12:31'],\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/i, 'Time', '1:12pm'],\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/i, 'Time', '1:12:31pm'], //can remove?\n\n // iso-dates\n [/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}/i, 'Date', 'iso-date'],\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date', 'iso-dash'],\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/([0-9]{4}|[0-9]{2})$/, 'Date', 'iso-slash'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date', 'iso-dot'],\n [/^[0-9]{1,4}-[a-z]{2,9}-[0-9]{1,4}$/i, 'Date', '12-dec-2019'],\n\n // timezones\n [/^utc ?[+-]?[0-9]+$/, 'Timezone', 'utc-9'],\n [/^(gmt|utc)[+-][0-9]{1,2}$/i, 'Timezone', 'gmt-3'],\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber', '421-0029'],\n [/^(\\+?[0-9][ -])?[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber', '1-800-'],\n\n //money\n //like $5.30\n [/^[-+]?\\p{Currency_Symbol}[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?([kmb]|bn)?\\+?$/u, ['Money', 'Value'], '$5.30'],\n //like 5.30$\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\p{Currency_Symbol}\\+?$/u, ['Money', 'Value'], '5.30£'],\n //like\n [/^[-+]?[$£]?[0-9]([0-9,.])+(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value'], '$400usd'],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue'], '5,999'],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|r?th)$/, ['Ordinal', 'NumericValue'], '53rd'],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue'], '.73th'],\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue'], '-4%'],\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue'], '.3%'],\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}(st|nd|rd|th)?s?$/, ['Fraction', 'NumericValue'], '2/3rds'],\n //range\n [/^[0-9.]{1,3}[a-z]{0,2}[-–—][0-9]{1,3}[a-z]{0,2}$/, ['Value', 'NumberRange'], '3-4'],\n //time-range\n [/^[0-9]{1,2}(:[0-9][0-9])?(am|pm)? ?[-–—] ?[0-9]{1,2}(:[0-9][0-9])?(am|pm)$/, ['Time', 'NumberRange'], '3-4pm'],\n //number with unit\n [/^[0-9.]+([a-z°]{1,4})$/, 'NumericValue', '9km'],\n]\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nexport default [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'bureau',\n 'cafe',\n 'co',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'data',\n 'departement',\n 'department',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'faculty',\n 'faction',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n 'llc',\n 'ltd',\n 'limited',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n 'news',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'politburo',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'societe',\n 'subsidiary',\n 'society',\n 'sons',\n // 'standard',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n].reduce((h, str) => {\n h[str] = true\n return h\n}, {})\n","export default [\n // geology\n 'atoll',\n 'basin',\n 'bay',\n 'beach',\n 'bluff',\n 'bog',\n 'camp',\n 'canyon',\n 'canyons',\n 'cape',\n 'cave',\n 'caves',\n // 'cliff',\n 'cliffs',\n 'coast',\n 'cove',\n 'coves',\n 'crater',\n 'crossing',\n 'creek',\n 'desert',\n 'dune',\n 'dunes',\n 'downs',\n 'estates',\n 'escarpment',\n 'estuary',\n 'falls',\n 'fjord',\n 'fjords',\n 'forest',\n 'forests',\n 'glacier',\n 'gorge',\n 'gorges',\n 'grove',\n 'gulf',\n 'gully',\n 'highland',\n 'heights',\n 'hollow',\n 'hill',\n 'hills',\n 'inlet',\n 'island',\n 'islands',\n 'isthmus',\n 'junction',\n 'knoll',\n 'lagoon',\n 'lake',\n 'lakeshore',\n 'marsh',\n 'marshes',\n 'mount',\n 'mountain',\n 'mountains',\n 'narrows',\n 'peninsula',\n 'plains',\n 'plateau',\n 'pond',\n 'rapids',\n 'ravine',\n 'reef',\n 'reefs',\n 'ridge',\n // 'river delta',\n 'river',\n 'rivers',\n 'sandhill',\n 'shoal',\n 'shore',\n 'shoreline',\n 'shores',\n 'strait',\n 'straits',\n 'springs',\n 'stream',\n 'swamp',\n 'tombolo',\n 'trail',\n 'trails',\n 'trench',\n 'valley',\n 'vallies',\n 'village',\n 'volcano',\n 'waterfall',\n 'watershed',\n 'wetland',\n 'woods',\n 'acres',\n\n // districts\n 'burough',\n 'county',\n 'district',\n 'municipality',\n 'prefecture',\n 'province',\n 'region',\n 'reservation',\n 'state',\n 'territory',\n 'borough',\n 'metropolis',\n 'downtown',\n 'uptown',\n 'midtown',\n 'city',\n 'town',\n 'township',\n 'hamlet',\n 'country',\n 'kingdom',\n 'enclave',\n 'neighbourhood',\n 'neighborhood',\n 'kingdom',\n 'ward',\n 'zone',\n // 'range',\n\n //building/ complex\n 'airport',\n 'amphitheater',\n 'arch',\n 'arena',\n 'auditorium',\n 'bar',\n 'barn',\n 'basilica',\n 'battlefield',\n 'bridge',\n 'building',\n 'castle',\n 'centre',\n 'coliseum',\n 'cineplex',\n 'complex',\n 'dam',\n 'farm',\n 'field',\n 'fort',\n 'garden',\n 'gardens',\n // 'grounds',\n 'gymnasium',\n 'hall',\n 'house',\n 'levee',\n 'library',\n 'manor',\n 'memorial',\n 'monument',\n 'museum',\n 'gallery',\n 'palace',\n 'pillar',\n 'pits',\n // 'pit',\n // 'place',\n // 'point',\n // 'room',\n 'plantation',\n 'playhouse',\n 'quarry',\n // 'ruins',\n 'sportsfield',\n 'sportsplex',\n 'stadium',\n // 'statue',\n 'terrace',\n 'terraces',\n 'theater',\n 'tower',\n 'park',\n 'parks',\n 'site',\n 'ranch',\n 'raceway',\n 'sportsplex',\n\n // 'sports centre',\n // 'sports field',\n // 'soccer complex',\n // 'soccer centre',\n // 'sports complex',\n // 'civic centre',\n\n // roads\n 'ave',\n 'st',\n 'street',\n 'rd',\n 'road',\n 'lane',\n 'landing',\n 'crescent',\n 'cr',\n 'way',\n 'tr',\n 'terrace',\n 'avenue',\n].reduce((h, str) => {\n h[str] = true\n return h\n}, {})\n","export default [\n [/([^v])ies$/i, '$1y'],\n [/(ise)s$/i, '$1'],//promises\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n\n [/(ause)s$/i, '$1'],//causes\n [/(ease)s$/i, '$1'],//diseases\n [/(ious)es$/i, '$1'],//geniouses\n [/(ouse)s$/i, '$1'],//houses\n [/(ose)s$/i, '$1'],//roses\n\n [/(..ase)s$/i, '$1'],\n [/(..[aeiu]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/([xo]|ch|ss|sh)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ic)s$/i, '$1'],\n [/s$/i, ''],\n]\n","import rules from './_rules.js'\nconst invertObj = function (obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function (str, model) {\n const { irregularPlurals } = model.two\n const invert = invertObj(irregularPlurals) //(not very efficient)\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n // console.log(rules[i])\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nexport default toSingular\n","import toPlural from './toPlural/index.js'\nimport toSingular from './toSingular/index.js'\n\nconst all = function (str, model) {\n const arr = [str]\n const p = toPlural(str, model)\n if (p !== str) {\n arr.push(p)\n }\n const s = toSingular(str, model)\n if (s !== str) {\n arr.push(s)\n }\n return arr\n}\n\nexport default { toPlural, toSingular, all }\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'unk',\n 'ung',\n 'upt',\n 'en',\n ],\n PastTense: ['ept', 'ed', 'lt', 'nt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n Participle: ['ken', 'wn']\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nexport default guessVerb\n","import guess from './_guess.js'\n\n/** it helps to know what we're conjugating from */\nconst getTense = function (str) {\n const three = str.substring(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n const two = str.substring(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n const one = str.substring(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\nexport default getTense","import { convert } from 'suffix-thumb'\nimport getTense from '../getTense/index.js'\n\nconst toParts = function (str, model) {\n let prefix = ''\n let prefixes = {}\n if (model.one && model.one.prefixes) {\n prefixes = model.one.prefixes\n }\n // pull-apart phrasal verb 'fall over'\n let [verb, particle] = str.split(/ /)\n // support 'over cleaned'\n if (particle && prefixes[verb] === true) {\n prefix = verb\n verb = particle\n particle = ''\n }\n return {\n prefix, verb, particle\n }\n}\n\n\n// dunno about these..\nconst copulaMap = {\n are: 'be',\n were: 'be',\n been: 'be',\n is: 'be',\n am: 'be',\n was: 'be',\n be: 'be',\n being: 'be',\n}\n\nconst toInfinitive = function (str, model, tense) {\n const { fromPast, fromPresent, fromGerund, fromParticiple } = model.two.models\n const { prefix, verb, particle } = toParts(str, model)\n let inf = ''\n if (!tense) {\n tense = getTense(str)\n }\n if (copulaMap.hasOwnProperty(str)) {\n inf = copulaMap[str]\n } else if (tense === 'Participle') {\n inf = convert(verb, fromParticiple)\n } else if (tense === 'PastTense') {\n inf = convert(verb, fromPast)\n } else if (tense === 'PresentTense') {\n inf = convert(verb, fromPresent)\n } else if (tense === 'Gerund') {\n inf = convert(verb, fromGerund)\n } else {\n return str\n }\n\n // stitch phrasal back on\n if (particle) {\n inf += ' ' + particle\n }\n // stitch prefix back on\n if (prefix) {\n inf = prefix + ' ' + inf\n }\n return inf\n}\nexport default toInfinitive\n\n// console.log(toInfinitive('snarled', { one: {} }))\n// console.log(convert('snarled', fromPast))","// import { toPast, toPresent, toGerund, toParticiple } from '../../../../model/models/index.js'\nimport { convert } from 'suffix-thumb'\n\n// pull-apart phrasal verb 'fall over'\nconst parse = (inf) => {\n if (/ /.test(inf)) {\n return inf.split(/ /)\n }\n return [inf, '']\n}\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function (inf, model) {\n const { toPast, toPresent, toGerund, toParticiple } = model.two.models\n // ad-hoc Copula response\n if (inf === 'be') {\n return {\n Infinitive: inf,\n Gerund: 'being',\n PastTense: 'was',\n PresentTense: 'is',\n }\n }\n const [str, particle] = parse(inf)\n const found = {\n Infinitive: str,\n PastTense: convert(str, toPast),\n PresentTense: convert(str, toPresent),\n Gerund: convert(str, toGerund),\n FutureTense: 'will ' + str\n }\n // add past-participle if it's interesting\n // drive -> driven (not drove)\n let pastPrt = convert(str, toParticiple)\n if (pastPrt !== inf && pastPrt !== found.PastTense) {\n // ensure it's a known participle\n const lex = model.one.lexicon || {}\n if (lex[pastPrt] === 'Participle' || lex[pastPrt] === 'Adjective') {\n // one exception\n if (inf === 'play') {\n pastPrt = 'played'\n }\n found.Participle = pastPrt\n }\n }\n // put phrasal-verbs back together again\n if (particle) {\n Object.keys(found).forEach(k => {\n found[k] += ' ' + particle\n })\n }\n return found\n}\n\n\nexport default conjugate\n\n// console.log(toPresent.rules.y)\n// console.log(convert('buy', toPresent))\n\n","import toInfinitive from './toInfinitive/index.js'\nimport conjugate from './conjugate/index.js'\n\nconst all = function (str, model) {\n const res = conjugate(str, model)\n delete res.FutureTense\n return Object.values(res).filter(s => s)\n}\nexport default {\n toInfinitive, conjugate, all\n}\n","import { convert } from 'suffix-thumb'\n// import toAdverb from './adverbs/toAdverb.js'\n\n\nconst toSuperlative = function (adj, model) {\n const mod = model.two.models.toSuperlative\n return convert(adj, mod)\n}\nconst toComparative = function (adj, model) {\n const mod = model.two.models.toComparative\n return convert(adj, mod)\n}\nconst fromComparative = function (adj, model) {\n const mod = model.two.models.fromComparative\n return convert(adj, mod)\n}\nconst fromSuperlative = function (adj, model) {\n const mod = model.two.models.fromSuperlative\n return convert(adj, mod)\n}\nconst toNoun = function (adj, model) {\n const mod = model.two.models.adjToNoun\n return convert(adj, mod)\n}\n\nexport {\n toSuperlative, toComparative, fromComparative, fromSuperlative, toNoun\n}\n","//sweep-through all suffixes\nconst suffixLoop = function (str = '', suffixes = []) {\n const len = str.length\n const max = len <= 6 ? len - 1 : 6\n for (let i = max; i >= 1; i -= 1) {\n const suffix = str.substring(len - i, str.length)\n if (suffixes[suffix.length].hasOwnProperty(suffix) === true) {\n const pre = str.slice(0, len - i)\n const post = suffixes[suffix.length][suffix]\n return pre + post\n }\n }\n return null\n}\nexport default suffixLoop","import doRules from './lib.js'\n\nconst s = 'ically'\nconst ical = new Set([\n 'analyt' + s, //analytical\n 'chem' + s,// chemical\n 'class' + s, //classical\n 'clin' + s, // clinical\n 'crit' + s,// critical\n 'ecolog' + s,// ecological\n 'electr' + s,// electrical\n 'empir' + s, // empirical\n 'frant' + s, // frantical\n 'grammat' + s,// grammatical\n 'ident' + s, // identical\n 'ideolog' + s, // ideological\n 'log' + s, // logical\n 'mag' + s, //magical\n 'mathemat' + s,// mathematical\n 'mechan' + s,// mechanical\n 'med' + s,// medical\n 'method' + s, // methodical\n 'method' + s,// methodical\n 'mus' + s, // musical\n 'phys' + s, // physical\n 'phys' + s,// physical\n 'polit' + s,// political\n 'pract' + s,// practical\n 'rad' + s, //radical\n 'satir' + s, // satirical\n 'statist' + s, // statistical\n 'techn' + s,// technical\n 'technolog' + s, // technological\n 'theoret' + s,// theoretical\n 'typ' + s,// typical\n 'vert' + s,// vertical\n 'whims' + s,// whimsical\n])\n\nconst suffixes = [\n null,\n {},\n { 'ly': '' },\n {\n 'ily': 'y',\n 'bly': 'ble',\n 'ply': 'ple',\n },\n {\n 'ally': 'al',\n 'rply': 'rp',\n },\n {\n 'ually': 'ual',\n 'ially': 'ial',\n 'cally': 'cal',\n 'eally': 'eal',\n 'rally': 'ral',\n 'nally': 'nal',\n 'mally': 'mal',\n 'eeply': 'eep',\n 'eaply': 'eap',\n },\n {\n ically: 'ic',\n }\n]\n\nconst noAdj = new Set([\n 'early',\n 'only',\n 'hourly',\n 'daily',\n 'weekly',\n 'monthly',\n 'yearly',\n 'mostly',\n 'duly',\n 'unduly',\n 'especially',\n 'undoubtedly',\n 'conversely',\n 'namely',\n 'exceedingly',\n 'presumably',\n 'accordingly',\n 'overly',\n 'best',\n 'latter',\n 'little',\n 'long',\n 'low'\n])\n\n// exceptions to rules\nconst exceptions = {\n wholly: 'whole',\n fully: 'full',\n truly: 'true',\n gently: 'gentle',\n singly: 'single',\n customarily: 'customary',\n idly: 'idle',\n publically: 'public',\n quickly: 'quick',\n superbly: 'superb',\n cynically: 'cynical',\n well: 'good',// -?\n}\n\n\nconst toAdjective = function (str) {\n if (!str.endsWith('ly')) {\n return null\n }\n // 'electronic' vs 'electronical'\n if (ical.has(str)) {\n return str.replace(/ically/, 'ical')\n }\n if (noAdj.has(str)) {\n return null\n }\n if (exceptions.hasOwnProperty(str)) {\n return exceptions[str]\n }\n return doRules(str, suffixes) || str\n}\nexport default toAdjective\n\n// console.log(toAdjective('emphatically'))\n// console.log(toAdjective('usually'))\n// console.log(toAdjective('mechanically'))\n// console.log(toAdjective('vertically'))","import doRules from './lib.js'\n\nconst suffixes = [\n null,\n {\n y: 'ily'\n },\n {\n ly: 'ly',//unchanged\n ic: 'ically'\n },\n {\n ial: 'ially',\n ual: 'ually',\n tle: 'tly',\n ble: 'bly',\n ple: 'ply',\n ary: 'arily',\n },\n {},\n {},\n {},\n]\n\nconst exceptions = {\n cool: 'cooly',\n whole: 'wholly',\n full: 'fully',\n good: 'well',\n idle: 'idly',\n public: 'publicly',\n single: 'singly',\n special: 'especially',\n}\n\n// a lot of adjectives *don't really* have a adverb\n// 'roomy' -> 'roomily'\n// but here, conjugate what it would be, if it made sense to\nconst toAdverb = function (str) {\n if (exceptions.hasOwnProperty(str)) {\n return exceptions[str]\n }\n let adv = doRules(str, suffixes)\n if (!adv) {\n adv = str + 'ly'\n }\n // only return this if it exists in lexicon?\n // console.log(model.one.lexicon[adv])\n return adv\n}\nexport default toAdverb\n// console.log(toAdverb('unsightly'))","import { toSuperlative, toComparative, fromSuperlative, fromComparative, toNoun } from './inflect.js'\nimport fromAdverb from './conjugate/fromAdverb.js'\nimport toAdverb from './conjugate/toAdverb.js'\n// import toNoun from './conjugate/toNoun.js'\n\nconst all = function (str, model) {\n let arr = [str]\n arr.push(toSuperlative(str, model))\n arr.push(toComparative(str, model))\n arr.push(toAdverb(str))\n arr = arr.filter(s => s)\n arr = new Set(arr)\n return Array.from(arr)\n}\n\n\nexport default {\n toSuperlative, toComparative, toAdverb, toNoun,\n fromAdverb, fromSuperlative, fromComparative,\n all,\n}","import nouns from './nouns/index.js'\nimport verbs from './verbs/index.js'\nimport adjectives from './adjectives/index.js'\n\nexport default {\n noun: nouns,\n verb: verbs,\n adjective: adjectives\n}\n","// transformations to make on our lexicon\nexport default {\n // add plural forms of singular nouns\n Singular: (word, lex, methods, model) => {\n const already = model.one.lexicon\n const plural = methods.two.transform.noun.toPlural(word, model)\n if (!already[plural]) {\n lex[plural] = lex[plural] || 'Plural'\n }\n },\n // 'lawyer', 'manager' plural forms\n Actor: (word, lex, methods, model) => {\n const already = model.one.lexicon\n const plural = methods.two.transform.noun.toPlural(word, model)\n if (!already[plural]) {\n lex[plural] = lex[plural] || ['Plural', 'Actor']\n }\n },\n\n // superlative/ comparative forms for adjectives\n Comparable: (word, lex, methods, model) => {\n const already = model.one.lexicon\n const { toSuperlative, toComparative } = methods.two.transform.adjective\n // fast -> fastest\n const sup = toSuperlative(word, model)\n if (!already[sup]) {\n lex[sup] = lex[sup] || 'Superlative'\n }\n // fast -> faster\n const comp = toComparative(word, model)\n if (!already[comp]) {\n lex[comp] = lex[comp] || 'Comparative'\n }\n // overwrite\n lex[word] = 'Adjective'\n },\n\n // 'german' -> 'germans'\n Demonym: (word, lex, methods, model) => {\n const plural = methods.two.transform.noun.toPlural(word, model)\n lex[plural] = lex[plural] || ['Demonym', 'Plural']\n },\n\n // conjugate all forms of these verbs\n Infinitive: (word, lex, methods, model) => {\n const already = model.one.lexicon\n const all = methods.two.transform.verb.conjugate(word, model)\n Object.entries(all).forEach(a => {\n if (!already[a[1]] && !lex[a[1]] && a[0] !== 'FutureTense') {\n lex[a[1]] = a[0]\n }\n })\n },\n\n // 'walk up' should conjugate, too\n PhrasalVerb: (word, lex, methods, model) => {\n const already = model.one.lexicon\n lex[word] = ['PhrasalVerb', 'Infinitive']\n const _multi = model.one._multiCache\n const [inf, rest] = word.split(' ')\n // add root verb\n if (!already[inf]) {\n lex[inf] = lex[inf] || 'Infinitive'\n }\n // conjugate it\n const all = methods.two.transform.verb.conjugate(inf, model)\n delete all.FutureTense\n Object.entries(all).forEach(a => {\n // not 'walker up', or 'had taken up'\n if (a[0] === 'Actor' || a[1] === '') {\n return\n }\n // add the root verb, alone\n if (!lex[a[1]] && !already[a[1]]) {\n lex[a[1]] = a[0]\n }\n _multi[a[1]] = 2\n const str = a[1] + ' ' + rest\n lex[str] = lex[str] || [a[0], 'PhrasalVerb']\n })\n },\n\n // expand 'million'\n Multiple: (word, lex) => {\n lex[word] = ['Multiple', 'Cardinal']\n // 'millionth'\n lex[word + 'th'] = ['Multiple', 'Ordinal']\n // 'millionths'\n lex[word + 'ths'] = ['Multiple', 'Fraction']\n },\n // expand number-words\n Cardinal: (word, lex) => {\n lex[word] = ['TextValue', 'Cardinal']\n },\n\n // 'millionth'\n Ordinal: (word, lex) => {\n lex[word] = ['TextValue', 'Ordinal']\n lex[word + 's'] = ['TextValue', 'Fraction']\n },\n // 'thames'\n Place: (word, lex) => {\n lex[word] = ['Place', 'ProperNoun']\n },\n // 'ontario'\n Region: (word, lex) => {\n lex[word] = ['Region', 'ProperNoun']\n },\n}\n","import byTag from './byTag.js'\n\n// derive clever things from our lexicon key-value pairs\n// this method runs as the pre-tagger plugin gets loaded\nconst expand = function (words, world) {\n const { methods, model } = world\n const lex = {}\n // console.log('start:', Object.keys(lex).length)\n const _multi = {}\n // go through each word in this key-value obj:\n Object.keys(words).forEach(word => {\n const tag = words[word]\n // normalize lexicon a little bit\n word = word.toLowerCase().trim()\n word = word.replace(/'s\\b/, '')\n // cache multi-word terms\n const split = word.split(/ /)\n if (split.length > 1) {\n // prefer longer ones\n if (_multi[split[0]] === undefined || split.length > _multi[split[0]]) {\n _multi[split[0]] = split.length\n }\n }\n // do any clever-business, by it's tag\n if (byTag.hasOwnProperty(tag) === true) {\n byTag[tag](word, lex, methods, model)\n }\n lex[word] = lex[word] || tag\n })\n // cleanup\n delete lex['']\n delete lex[null]\n delete lex[' ']\n return { lex, _multi }\n}\nexport default expand\n","// roughly, split a document by comma or semicolon\n\nconst splitOn = function (terms, i) {\n const isNum = /^[0-9]+$/\n const term = terms[i]\n // early on, these may not be dates yet:\n if (!term) {\n return false\n }\n const maybeDate = new Set(['may', 'april', 'august', 'jan'])\n // veggies, like figs\n if (term.normal === 'like' || maybeDate.has(term.normal)) {\n return false\n }\n // toronto, canada - tuesday, march\n if (term.tags.has('Place') || term.tags.has('Date')) {\n return false\n }\n if (terms[i - 1]) {\n const lastTerm = terms[i - 1]\n // thursday, june\n if (lastTerm.tags.has('Date') || maybeDate.has(lastTerm.normal)) {\n return false\n }\n // pretty, nice, and fun\n if (lastTerm.tags.has('Adjective') || term.tags.has('Adjective')) {\n return false\n }\n }\n // don't split numbers, yet\n const str = term.normal\n if (str.length === 1 || str.length === 2 || str.length === 4) {\n if (isNum.test(str)) {\n return false\n }\n }\n return true\n}\n\n// kind-of a dirty sentence chunker\nconst quickSplit = function (document) {\n const splitHere = /[,:;]/\n const arr = []\n document.forEach(terms => {\n let start = 0\n terms.forEach((term, i) => {\n // does it have a comma/semicolon ?\n if (splitHere.test(term.post) && splitOn(terms, i + 1)) {\n arr.push(terms.slice(start, i + 1))\n start = i + 1\n }\n })\n if (start < terms.length) {\n arr.push(terms.slice(start, terms.length))\n }\n })\n return arr\n}\n\nexport default quickSplit","//similar to plural/singularize rules, but not the same\nconst isPlural = {\n e: ['mice', 'louse', 'antennae', 'formulae', 'nebulae', 'vertebrae', 'vitae'],\n i: ['tia', 'octopi', 'viri', 'radii', 'nuclei', 'fungi', 'cacti', 'stimuli'],\n n: ['men'],\n t: ['feet'],\n}\n// plural words as exceptions to suffix-rules\nconst exceptions = new Set([\n // 'formulas',\n // 'umbrellas',\n // 'gorillas',\n // 'koalas',\n 'israelis',\n 'menus',\n 'logos',\n])\n\nconst notPlural = [\n 'bus',\n 'mas', //christmas\n 'was',\n // 'las',\n 'ias', //alias\n 'xas',\n 'vas',\n 'cis', //probocis\n 'lis',\n 'nis', //tennis\n 'ois',\n 'ris',\n 'sis', //thesis\n 'tis', //mantis, testis\n 'xis',\n 'aus',\n 'cus',\n 'eus', //nucleus\n 'fus', //doofus\n 'gus', //fungus\n 'ius', //radius\n 'lus', //stimulus\n 'nus',\n 'das',\n 'ous',\n 'pus', //octopus\n 'rus', //virus\n 'sus', //census\n 'tus', //status,cactus\n 'xus',\n 'aos', //chaos\n 'igos',\n 'ados', //barbados\n 'ogos',\n \"'s\",\n 'ss',\n]\n\nconst looksPlural = function (str) {\n // not long enough to be plural\n if (!str || str.length <= 3) {\n return false\n }\n // 'menus' etc\n if (exceptions.has(str)) {\n return true\n }\n const end = str[str.length - 1]\n // look at 'firemen'\n if (isPlural.hasOwnProperty(end)) {\n return isPlural[end].find(suff => str.endsWith(suff))\n }\n if (end !== 's') {\n return false\n }\n // look for 'virus'\n if (notPlural.find(suff => str.endsWith(suff))) {\n return false\n }\n // ends with an s, seems plural i guess.\n return true\n}\nexport default looksPlural\n","import transform from './transform/index.js'\nimport expandLexicon from './expand/index.js'\nimport quickSplit from './quickSplit.js'\nimport looksPlural from './looksPlural.js'\n\n\nexport default {\n two: {\n quickSplit,\n expandLexicon,\n transform,\n looksPlural\n },\n}\n","// import irregularVerbs from './conjugations.js'\n// harvest list of irregulars for any juicy word-data\nconst expandIrregulars = function (model) {\n const { irregularPlurals } = model.two\n const { lexicon } = model.one\n Object.entries(irregularPlurals).forEach(a => {\n lexicon[a[0]] = lexicon[a[0]] || 'Singular'\n lexicon[a[1]] = lexicon[a[1]] || 'Plural'\n })\n return model\n}\nexport default expandIrregulars\n","import methods from '../../methods/index.js'\nimport expandIrregulars from './irregulars.js'\nimport toPlural from '../../methods/transform/nouns/toPlural/index.js'\nimport conjugate from '../../methods/transform/verbs/conjugate/index.js'\nimport { toSuperlative, toComparative } from '../../methods/transform/adjectives/inflect.js'\nimport toInfinitive from '../../methods/transform/verbs/toInfinitive/index.js'\nimport models from '../models/index.js'\nconst tmpModel = {\n one: { lexicon: {} },\n two: { models }\n}\n\n// defaults for switches\nconst switchDefaults = {\n // 'pilot'\n 'Actor|Verb': 'Actor', //\n // 'amusing'\n 'Adj|Gerund': 'Adjective', //+conjugations\n // 'standard'\n 'Adj|Noun': 'Adjective',\n // 'boiled'\n 'Adj|Past': 'Adjective', //+conjugations\n // 'smooth'\n 'Adj|Present': 'Adjective',//+conjugations\n // 'box'\n 'Noun|Verb': 'Singular', //+conjugations (no-present)\n //'singing'\n 'Noun|Gerund': 'Gerund', //+conjugations\n // 'hope'\n 'Person|Noun': 'Noun',\n // 'April'\n 'Person|Date': 'Month',\n // 'rob'\n 'Person|Verb': 'FirstName',//+conjugations\n // 'victoria'\n 'Person|Place': 'Person',\n // 'rusty'\n 'Person|Adj': 'Comparative',\n // 'boxes'\n 'Plural|Verb': 'Plural', //(these are already derivative)\n // 'miles'\n 'Unit|Noun': 'Noun',\n}\n\nconst expandLexicon = function (words, model) {\n // do clever tricks to grow the words\n const world = { model, methods }\n const { lex, _multi } = methods.two.expandLexicon(words, world)\n // store multiple-word terms in a cache\n Object.assign(model.one.lexicon, lex)\n Object.assign(model.one._multiCache, _multi)\n return model\n}\n\n// these words have no singular/plural conjugation\nconst addUncountables = function (words, model) {\n Object.keys(words).forEach(k => {\n if (words[k] === 'Uncountable') {\n model.two.uncountable[k] = true\n words[k] = 'Uncountable'\n }\n })\n return model\n}\n\nconst expandVerb = function (str, words, doPresent) {\n const obj = conjugate(str, tmpModel)\n words[obj.PastTense] = words[obj.PastTense] || 'PastTense'\n words[obj.Gerund] = words[obj.Gerund] || 'Gerund'\n if (doPresent === true) {\n // is this plural noun, or present-tense?\n words[obj.PresentTense] = words[obj.PresentTense] || 'PresentTense'\n }\n}\n\nconst expandAdjective = function (str, words, model) {\n const sup = toSuperlative(str, model)\n words[sup] = words[sup] || 'Superlative'\n const comp = toComparative(str, model)\n words[comp] = words[comp] || 'Comparative'\n}\n\nconst expandNoun = function (str, words, model) {\n const plur = toPlural(str, model)\n words[plur] = words[plur] || 'Plural'\n}\n\n// harvest ambiguous words for any conjugations\nconst expandVariable = function (switchWords, model) {\n const words = {}\n const lex = model.one.lexicon\n //add first tag as an assumption for each variable word\n Object.keys(switchWords).forEach(w => {\n const name = switchWords[w]\n words[w] = switchDefaults[name]\n // conjugate some verbs\n if (name === 'Noun|Verb' || name === 'Person|Verb' || name === 'Actor|Verb') {\n expandVerb(w, lex, false)\n }\n if (name === 'Adj|Present') {\n expandVerb(w, lex, true)\n expandAdjective(w, lex, model)\n }\n if (name === 'Person|Adj') {\n expandAdjective(w, lex, model)\n }\n // add infinitives for gerunds\n if (name === 'Adj|Gerund' || name === 'Noun|Gerund') {\n const inf = toInfinitive(w, tmpModel, 'Gerund')\n if (!lex[inf]) {\n words[inf] = 'Infinitive' //expand it later\n }\n }\n // add plurals for nouns\n if (name === 'Noun|Gerund' || name === 'Adj|Noun' || name === 'Person|Noun') {\n expandNoun(w, lex, model)\n }\n if (name === 'Adj|Past') {\n const inf = toInfinitive(w, tmpModel, 'PastTense')\n if (!lex[inf]) {\n words[inf] = 'Infinitive' //expand it later\n }\n }\n })\n // add conjugations\n model = expandLexicon(words, model)\n return model\n}\n\nconst expand = function (model) {\n model = expandLexicon(model.one.lexicon, model)\n model = addUncountables(model.one.lexicon, model)\n model = expandVariable(model.two.switches, model)\n model = expandIrregulars(model)\n return model\n}\nexport default expand\n","import irregularPlurals from './irregulars/plurals.js'\nimport { lexicon, switches, frozenLex } from './lexicon/index.js'\nimport clues from './clues/index.js'\nimport suffixPatterns from './patterns/suffixes.js'\nimport prefixPatterns from './patterns/prefixes.js'\nimport endsWith from './patterns/endsWith.js'\nimport neighbours from './patterns/neighbours.js'\nimport models from './models/index.js'\nimport regexNormal from './regex/regex-normal.js'\nimport regexText from './regex/regex-text.js'\nimport regexNumbers from './regex/regex-numbers.js'\nimport orgWords from './orgWords.js'\nimport placeWords from './placeWords.js'\nimport expandLexicon from './_expand/index.js'\n\nlet model = {\n one: {\n _multiCache: {},\n lexicon,\n frozenLex,\n },\n two: {\n irregularPlurals,\n models,\n\n suffixPatterns,\n prefixPatterns,\n endsWith,\n neighbours,\n\n regexNormal,\n regexText,\n regexNumbers,\n\n switches,\n clues,\n\n uncountable: {},\n\n orgWords,\n placeWords,\n },\n}\nmodel = expandLexicon(model)\nexport default model\n\n// console.log(model.one.lexicon.see)\n","const byPunctuation = function (terms, i, model, world) {\n const setTag = world.methods.one.setTag\n // colon following first word\n // edit: foo\n // breaking: foobar\n if (i === 0 && terms.length >= 3) {\n const hasColon = /:/\n const post = terms[0].post\n if (post.match(hasColon)) {\n // phone: 555-2938\n const nextTerm = terms[1]\n if (nextTerm.tags.has('Value') || nextTerm.tags.has('Email') || nextTerm.tags.has('PhoneNumber')) {\n return\n }\n //\n setTag([terms[0]], 'Expression', world, null, `2-punct-colon''`)\n }\n }\n}\nexport default byPunctuation\n","const byHyphen = function (terms, i, model, world) {\n const setTag = world.methods.one.setTag\n // two words w/ a dash\n if (terms[i].post === '-' && terms[i + 1]) {\n setTag([terms[i], terms[i + 1]], 'Hyphenated', world, null, `1-punct-hyphen''`)\n\n // bone-headed, man-made, good-tempered, coursely-ground\n // if (terms[i + 1].tags.has('PastTense')) {\n // let tags = terms[i].tags\n // if (tags.has('Noun') || tags.has('Adverb')) {\n // setTag([terms[i], terms[i + 1]], 'Adjective', world, null, `2-punct-dash''`)\n // }\n\n // }\n }\n}\nexport default byHyphen\n","const prefix = /^(under|over|mis|re|un|dis|semi)-?/\n\nconst tagSwitch = function (terms, i, model) {\n const switches = model.two.switches\n const term = terms[i]\n if (switches.hasOwnProperty(term.normal)) {\n term.switch = switches[term.normal]\n return\n }\n // support 'restrike' -> 'strike'\n if (prefix.test(term.normal)) {\n const stem = term.normal.replace(prefix, '')\n if (stem.length > 3 && switches.hasOwnProperty(stem)) {\n term.switch = switches[stem]\n }\n }\n}\nexport default tagSwitch","// verbose-mode tagger debuging\nconst log = (term, tag, reason = '') => {\n const yellow = str => '\\x1b[33m\\x1b[3m' + str + '\\x1b[0m'\n const i = str => '\\x1b[3m' + str + '\\x1b[0m'\n const word = term.text || '[' + term.implicit + ']'\n if (typeof tag !== 'string' && tag.length > 2) {\n tag = tag.slice(0, 2).join(', #') + ' +' //truncate the list of tags\n }\n tag = typeof tag !== 'string' ? tag.join(', #') : tag\n console.log(` ${yellow(word).padEnd(24)} \\x1b[32m→\\x1b[0m #${tag.padEnd(22)} ${i(reason)}`) // eslint-disable-line\n}\n\n// a faster version than the user-facing one in ./methods\nconst fastTag = function (term, tag, reason) {\n if (!tag || tag.length === 0) {\n return\n }\n if (term.frozen === true) {\n return\n }\n // some logging for debugging\n const env = typeof process === 'undefined' || !process.env ? self.env || {} : process.env\n if (env && env.DEBUG_TAGS) {\n log(term, tag, reason)\n }\n term.tags = term.tags || new Set()\n if (typeof tag === 'string') {\n term.tags.add(tag)\n } else {\n tag.forEach(tg => term.tags.add(tg))\n }\n}\n\nexport default fastTag\n","import fastTag from '../_fastTag.js'\nimport looksPlural from '../../../methods/looksPlural.js'\nimport getTense from '../../../methods/transform/verbs/getTense/index.js'\n// tags that are neither plural or singular\nconst uncountable = [\n 'Acronym',\n 'Abbreviation',\n 'ProperNoun',\n 'Uncountable',\n 'Possessive',\n 'Pronoun',\n 'Activity',\n 'Honorific',\n 'Month',\n]\n// try to guess if each noun is a plural/singular\nconst setPluralSingular = function (term) {\n if (!term.tags.has('Noun') || term.tags.has('Plural') || term.tags.has('Singular')) {\n return\n }\n if (uncountable.find(tag => term.tags.has(tag))) {\n return\n }\n if (looksPlural(term.normal)) {\n fastTag(term, 'Plural', '3-plural-guess')\n } else {\n fastTag(term, 'Singular', '3-singular-guess')\n }\n}\n\n// try to guess the tense of a naked verb\nconst setTense = function (term) {\n const tags = term.tags\n if (tags.has('Verb') && tags.size === 1) {\n const guess = getTense(term.normal)\n if (guess) {\n fastTag(term, guess, '3-verb-tense-guess')\n }\n }\n}\n\n//add deduced parent tags to our terms\nconst fillTags = function (terms, i, model) {\n const term = terms[i]\n //there is probably just one tag, but we'll allow more\n const tags = Array.from(term.tags)\n for (let k = 0; k < tags.length; k += 1) {\n if (model.one.tagSet[tags[k]]) {\n const toAdd = model.one.tagSet[tags[k]].parents\n fastTag(term, toAdd, ` -inferred by #${tags[k]}`)\n }\n }\n // turn 'Noun' into Plural/Singular\n setPluralSingular(term)\n // turn 'Verb' into Present/PastTense\n setTense(term, model)\n}\nexport default fillTags\n","import fastTag from '../_fastTag.js'\nimport fillTags from '../3rd-pass/_fillTags.js'\n\nconst titleCase = /^\\p{Lu}[\\p{Ll}'’]/u\nconst hasNumber = /[0-9]/\nconst notProper = ['Date', 'Month', 'WeekDay', 'Unit', 'Expression']\n\n// roman numeral by regex\nconst hasIVX = /[IVX]/ // does it ~look like~ a roman numeral?\n// quick-version\nconst romanNumeral = /^[IVXLCDM]{2,}$/\n// https://stackoverflow.com/a/267405/168877\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/\nconst nope = {\n li: true,\n dc: true,\n md: true,\n dm: true,\n ml: true,\n}\n\n// if it's a unknown titlecase word, it's a propernoun\nconst checkCase = function (terms, i, model) {\n const term = terms[i]\n // assume terms are already indexed\n term.index = term.index || [0, 0]\n const index = term.index[1]\n const str = term.text || '' //need case info\n // titlecase and not first word of sentence\n if (index !== 0 && titleCase.test(str) === true && hasNumber.test(str) === false) {\n // skip Dates and stuff\n if (notProper.find(tag => term.tags.has(tag))) {\n return null\n }\n // first word in a quotation?\n if (term.pre.match(/[\"']$/)) {\n return null\n }\n if (term.normal === 'the') {\n return null\n }\n fillTags(terms, i, model)\n if (!term.tags.has('Noun') && !term.frozen) {\n term.tags.clear()\n }\n fastTag(term, 'ProperNoun', '2-titlecase')\n return true\n }\n //roman numberals - XVII\n if (str.length >= 2 && romanNumeral.test(str) && hasIVX.test(str) && romanNumValid.test(str) && !nope[term.normal]) {\n fastTag(term, 'RomanNumeral', '2-xvii')\n return true\n }\n\n return null\n}\nexport default checkCase\n","import fastTag from '../_fastTag.js'\n\n//sweep-through all suffixes\nconst suffixLoop = function (str = '', suffixes = []) {\n const len = str.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n const suffix = str.substring(len - i, len)\n if (suffixes[suffix.length].hasOwnProperty(suffix) === true) {\n // console.log(suffix)\n const tag = suffixes[suffix.length][suffix]\n return tag\n }\n }\n return null\n}\n\n// decide tag from the ending of the word\nconst tagBySuffix = function (terms, i, model) {\n const term = terms[i]\n if (term.tags.size === 0) {\n let tag = suffixLoop(term.normal, model.two.suffixPatterns)\n if (tag !== null) {\n fastTag(term, tag, '2-suffix')\n term.confidence = 0.7\n return true\n }\n // try implicit form of word, too\n if (term.implicit) {\n tag = suffixLoop(term.implicit, model.two.suffixPatterns)\n if (tag !== null) {\n fastTag(term, tag, '2-implicit-suffix')\n term.confidence = 0.7\n return true\n }\n }\n // Infinitive suffix + 's' can be PresentTense\n // if (term.normal[term.normal.length - 1] === 's') {\n // let str = term.normal.replace(/s$/, '')\n // if (suffixLoop(str, model.two.suffixPatterns) === 'Infinitive') {\n // console.log(str)\n // fastTag(term, 'PresentTense', '2-implied-present')\n // term.confidence = 0.5\n // return true\n // }\n // }\n }\n return null\n}\nexport default tagBySuffix\n","const hasApostrophe = /['‘’‛‵′`´]/\n\n// normal regexes\nconst doRegs = function (str, regs) {\n for (let i = 0; i < regs.length; i += 1) {\n if (regs[i][0].test(str) === true) {\n return regs[i]\n }\n }\n return null\n}\n// suffix-regexes, indexed by last-character\nconst doEndsWith = function (str = '', byEnd) {\n const char = str[str.length - 1]\n if (byEnd.hasOwnProperty(char) === true) {\n const regs = byEnd[char] || []\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n return regs[r]\n }\n }\n }\n return null\n}\n\nconst checkRegex = function (terms, i, model, world) {\n const setTag = world.methods.one.setTag\n const { regexText, regexNormal, regexNumbers, endsWith } = model.two\n const term = terms[i]\n const normal = term.machine || term.normal\n let text = term.text\n // keep dangling apostrophe?\n if (hasApostrophe.test(term.post) && !hasApostrophe.test(term.pre)) {\n text += term.post.trim()\n }\n let arr = doRegs(text, regexText) || doRegs(normal, regexNormal)\n // hide a bunch of number regexes behind this one\n if (!arr && /[0-9]/.test(normal)) {\n arr = doRegs(normal, regexNumbers)\n }\n // only run endsWith if we're desperate\n if (!arr && term.tags.size === 0) {\n arr = doEndsWith(normal, endsWith)\n }\n if (arr) {\n // console.log(arr)\n setTag([term], arr[1], world, null, `2-regex-'${arr[2] || arr[0]}'`)\n term.confidence = 0.6\n return true\n }\n return null\n}\nexport default checkRegex\n","import fastTag from '../_fastTag.js'\n// const prefixes = /^(anti|re|un|non|extra|inter|intra|over)([a-z-]{3})/\n\n//sweep-through all prefixes\nconst prefixLoop = function (str = '', prefixes = []) {\n const len = str.length\n let max = 7\n if (max > len - 3) {\n max = len - 3\n }\n for (let i = max; i > 2; i -= 1) {\n const prefix = str.substring(0, i)\n if (prefixes[prefix.length].hasOwnProperty(prefix) === true) {\n const tag = prefixes[prefix.length][prefix]\n return tag\n }\n }\n return null\n}\n\n// give 'overwork' the same tag as 'work'\nconst checkPrefix = function (terms, i, model) {\n const term = terms[i]\n if (term.tags.size === 0) {\n const tag = prefixLoop(term.normal, model.two.prefixPatterns)\n if (tag !== null) {\n // console.log(term.normal, '->', tag)\n fastTag(term, tag, '2-prefix')\n term.confidence = 0.5\n return true\n }\n }\n return null\n}\nexport default checkPrefix\n","import fastTag from '../_fastTag.js'\nconst min = 1400\nconst max = 2100\n\nconst dateWords = new Set([\n 'in',\n 'on',\n 'by',\n 'until',\n 'for',\n 'to',\n 'during',\n 'throughout',\n 'through',\n 'within',\n 'before',\n 'after',\n 'of',\n 'this',\n 'next',\n 'last',\n 'circa',\n 'around',\n 'post',\n 'pre',\n 'budget',\n 'classic',\n 'plan',\n 'may',\n])\n\nconst seemsGood = function (term) {\n if (!term) {\n return false\n }\n const str = term.normal || term.implicit\n if (dateWords.has(str)) {\n return true\n }\n if (term.tags.has('Date') || term.tags.has('Month') || term.tags.has('WeekDay') || term.tags.has('Year')) {\n return true\n }\n // 1999 Film Festival\n if (term.tags.has('ProperNoun')) {\n return true\n }\n return false\n}\n\nconst seemsOkay = function (term) {\n if (!term) {\n return false\n }\n if (term.tags.has('Ordinal')) {\n return true\n }\n // untagged 'june 13 2007'\n if (term.tags.has('Cardinal') && term.normal.length < 3) {\n return true\n }\n // 2020 was ..\n if (term.normal === 'is' || term.normal === 'was') {\n return true\n }\n return false\n}\n\nconst seemsFine = function (term) {\n return term && (term.tags.has('Date') || term.tags.has('Month') || term.tags.has('WeekDay') || term.tags.has('Year'))\n}\n\n// recognize '1993' as a year\nconst tagYear = function (terms, i) {\n const term = terms[i]\n if (term.tags.has('NumericValue') && term.tags.has('Cardinal') && term.normal.length === 4) {\n const num = Number(term.normal)\n // number between 1400 and 2100\n if (num && !isNaN(num)) {\n if (num > min && num < max) {\n const lastTerm = terms[i - 1]\n const nextTerm = terms[i + 1]\n if (seemsGood(lastTerm) || seemsGood(nextTerm)) {\n return fastTag(term, 'Year', '2-tagYear')\n }\n // or is it really-close to a year?\n if (num >= 1920 && num < 2025) {\n // look at neighbours\n if (seemsOkay(lastTerm) || seemsOkay(nextTerm)) {\n return fastTag(term, 'Year', '2-tagYear-close')\n }\n // look at far-neighbours\n if (seemsFine(terms[i - 2]) || seemsFine(terms[i + 2])) {\n return fastTag(term, 'Year', '2-tagYear-far')\n }\n // 'the 2002 hit', 'my 1950 convertable'\n if (lastTerm && (lastTerm.tags.has('Determiner') || lastTerm.tags.has('Possessive'))) {\n if (nextTerm && nextTerm.tags.has('Noun') && !nextTerm.tags.has('Plural')) {\n return fastTag(term, 'Year', '2-tagYear-noun')\n }\n }\n }\n }\n }\n }\n return null\n}\n\nexport default tagYear\n","const verbType = function (terms, i, model, world) {\n const setTag = world.methods.one.setTag\n const term = terms[i]\n const types = ['PastTense', 'PresentTense', 'Auxiliary', 'Modal', 'Particle']\n if (term.tags.has('Verb')) {\n const type = types.find(typ => term.tags.has(typ))\n // is it a bare #Verb tag?\n if (!type) {\n setTag([term], 'Infinitive', world, null, `2-verb-type''`)\n }\n }\n}\nexport default verbType","import fastTag from '../_fastTag.js'\n\nconst oneLetterAcronym = /^[A-Z]('s|,)?$/\nconst isUpperCase = /^[A-Z-]+$/\nconst upperThenS = /^[A-Z]+s$/\nconst periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.)+[a-z]\\.?$/\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\n// only assume these are places if they are uppercased\nconst places = {\n la: true,\n ny: true,\n us: true,\n dc: true,\n gb: true,\n}\n\n// just uppercase acronyms, no periods - 'UNOCHA'\nconst isNoPeriodAcronym = function (term, model) {\n let str = term.text\n // ensure it's all upper-case\n if (isUpperCase.test(str) === false) {\n // allow lower-case plural - 'MMVAs'\n if (str.length > 3 && upperThenS.test(str) === true) {\n str = str.replace(/s$/, '')\n } else {\n return false\n }\n }\n // long capitalized words are not usually either\n if (str.length > 5) {\n return false\n }\n // 'I' is not a acronym\n if (oneLetterWord.hasOwnProperty(str)) {\n return false\n }\n // known-words, like 'PIZZA' is not an acronym.\n if (model.one.lexicon.hasOwnProperty(term.normal)) {\n return false\n }\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\n\nconst isAcronym = function (terms, i, model) {\n const term = terms[i]\n //these are not acronyms\n if (term.tags.has('RomanNumeral') || term.tags.has('Acronym') || term.frozen) {\n return null\n }\n //non-period ones are harder\n if (isNoPeriodAcronym(term, model)) {\n term.tags.clear()\n fastTag(term, ['Acronym', 'Noun'], '3-no-period-acronym')\n // ny, la\n if (places[term.normal] === true) {\n fastTag(term, 'Place', '3-place-acronym')\n }\n // UFOs\n if (upperThenS.test(term.text) === true) {\n fastTag(term, 'Plural', '3-plural-acronym')\n }\n // if(term.normal\n return true\n }\n // one-letter acronyms\n if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tags.clear()\n fastTag(term, ['Acronym', 'Noun'], '3-one-letter-acronym')\n return true\n }\n //if it's a very-short organization?\n if (term.tags.has('Organization') && term.text.length <= 3) {\n fastTag(term, 'Acronym', '3-org-acronym')\n return true\n }\n // upper-case org, like UNESCO\n if (term.tags.has('Organization') && isUpperCase.test(term.text) && term.text.length <= 6) {\n fastTag(term, 'Acronym', '3-titlecase-acronym')\n return true\n }\n return null\n}\nexport default isAcronym\n","import fastTag from '../_fastTag.js'\nimport fillTag from './_fillTags.js'\n\nconst lookAtWord = function (term, words) {\n if (!term) {\n return null\n }\n // look at prev word <-\n const found = words.find(a => term.normal === a[0])\n if (found) {\n return found[1]\n }\n return null\n}\n\nconst lookAtTag = function (term, tags) {\n if (!term) {\n return null\n }\n const found = tags.find(a => term.tags.has(a[0]))\n if (found) {\n return found[1]\n }\n return null\n}\n\n// look at neighbours for hints on unknown words\nconst neighbours = function (terms, i, model) {\n const { leftTags, leftWords, rightWords, rightTags } = model.two.neighbours\n const term = terms[i]\n if (term.tags.size === 0) {\n let tag = null\n // look left <-\n tag = tag || lookAtWord(terms[i - 1], leftWords)\n // look right ->\n tag = tag || lookAtWord(terms[i + 1], rightWords)\n // look left <-\n tag = tag || lookAtTag(terms[i - 1], leftTags)\n // look right ->\n tag = tag || lookAtTag(terms[i + 1], rightTags)\n if (tag) {\n fastTag(term, tag, '3-[neighbour]')\n fillTag(terms, i, model)\n terms[i].confidence = 0.2\n return true\n }\n }\n return null\n}\nexport default neighbours\n","const isTitleCase = (str) => /^\\p{Lu}[\\p{Ll}'’]/u.test(str)\n\nconst isOrg = function (term, i, yelling) {\n if (!term) {\n return false\n }\n if (term.tags.has('FirstName') || term.tags.has('Place')) {\n return false\n }\n if (term.tags.has('ProperNoun') || term.tags.has('Organization') || term.tags.has('Acronym')) {\n return true\n }\n // allow anything titlecased to be an org\n if (!yelling && isTitleCase(term.text)) {\n // only tag a titlecased first-word, if it checks-out\n if (i === 0) {\n return term.tags.has('Singular')\n }\n return true\n }\n return false\n}\n\nconst tagOrgs = function (terms, i, world, yelling) {\n const orgWords = world.model.two.orgWords\n const setTag = world.methods.one.setTag\n const term = terms[i]\n const str = term.machine || term.normal\n if (orgWords[str] === true && isOrg(terms[i - 1], i - 1, yelling)) {\n setTag([terms[i]], 'Organization', world, null, '3-[org-word]')\n // loop backwards, tag organization-like things\n for (let t = i; t >= 0; t -= 1) {\n if (isOrg(terms[t], t, yelling)) {\n setTag([terms[t]], 'Organization', world, null, '3-[org-word]')\n } else {\n break\n }\n }\n }\n return null\n}\nexport default tagOrgs","const isTitleCase = str => /^\\p{Lu}[\\p{Ll}'’]/u.test(str)\nconst isPossessive = /'s$/\n\n// words that can fit inside a place\nconst placeCont = new Set([\n 'athletic',\n 'city',\n 'community',\n 'eastern',\n 'federal',\n 'financial',\n 'great',\n 'historic',\n 'historical',\n 'local',\n 'memorial',\n 'municipal',\n 'national',\n 'northern',\n 'provincial',\n 'southern',\n 'state',\n 'western',\n 'spring',\n 'pine',\n 'sunset',\n 'view',\n 'oak',\n 'maple',\n 'spruce',\n 'cedar',\n 'willow',\n])\n// center of...\nconst noBefore = new Set(['center', 'centre', 'way', 'range', 'bar', 'bridge', 'field', 'pit'])\n\nconst isPlace = function (term, i, yelling) {\n if (!term) {\n return false\n }\n const tags = term.tags\n if (tags.has('Organization') || tags.has('Possessive') || isPossessive.test(term.normal)) {\n return false\n }\n if (tags.has('ProperNoun') || tags.has('Place')) {\n return true\n }\n // allow anything titlecased to be an org\n if (!yelling && isTitleCase(term.text)) {\n // only tag a titlecased first-word, if it checks-out\n if (i === 0) {\n return tags.has('Singular')\n }\n return true\n }\n return false\n}\n\nconst tagOrgs = function (terms, i, world, yelling) {\n const placeWords = world.model.two.placeWords\n const setTag = world.methods.one.setTag\n const term = terms[i]\n const str = term.machine || term.normal\n\n // 'river', delta, street, etc\n if (placeWords[str] === true) {\n //loop backward - 'Foo River ...'\n for (let n = i - 1; n >= 0; n -= 1) {\n // 'municipal ...'\n if (placeCont.has(terms[n].normal)) {\n continue\n }\n if (isPlace(terms[n], n, yelling)) {\n setTag(terms.slice(n, i + 1), 'Place', world, null, '3-[place-of-foo]')\n continue\n }\n break\n }\n //loop forward - 'River of Foo...'\n // 'center of x'\n if (noBefore.has(str)) {\n return false\n }\n for (let n = i + 1; n < terms.length; n += 1) {\n if (isPlace(terms[n], n, yelling)) {\n setTag(terms.slice(i, n + 1), 'Place', world, null, '3-[foo-place]')\n return true\n }\n // 'municipal ...'\n if (terms[n].normal === 'of' || placeCont.has(terms[n].normal)) {\n continue\n }\n break\n }\n }\n return null\n}\nexport default tagOrgs\n","import fastTag from '../_fastTag.js'\nimport fillTag from './_fillTags.js'\n\nconst nounFallback = function (terms, i, model) {\n let isEmpty = false\n const tags = terms[i].tags\n if (tags.size === 0) {\n isEmpty = true\n } else if (tags.size === 1) {\n // weaker tags to ignore\n if (tags.has('Hyphenated') || tags.has('HashTag') || tags.has('Prefix') || tags.has('SlashedTerm')) {\n isEmpty = true\n }\n }\n if (isEmpty) {\n fastTag(terms[i], 'Noun', '3-[fallback]')\n // try to give it singluar/plural tags, too\n fillTag(terms, i, model)\n terms[i].confidence = 0.1\n }\n}\nexport default nounFallback\n","const isTitleCase = /^[A-Z][a-z]/\n\nconst isCapital = (terms, i) => {\n if (terms[i].tags.has('ProperNoun') && isTitleCase.test(terms[i].text)) {// 'Comfort Inn'\n return 'Noun'\n }\n return null\n}\n\nconst isAlone = (terms, i, tag) => {\n if (i === 0 && !terms[1]) {// 'Help'\n return tag\n }\n return null\n}\n\n// 'a rental'\nconst isEndNoun = function (terms, i) {\n if (!terms[i + 1] && terms[i - 1] && terms[i - 1].tags.has('Determiner')) {\n return 'Noun'\n }\n return null\n}\n\n// the first word in the sentence\nconst isStart = function (terms, i, tag) {\n if (i === 0 && terms.length > 3) {\n return tag\n }\n return null\n}\n\nconst adhoc = {\n 'Adj|Gerund': (terms, i) => {\n return isCapital(terms, i)\n },\n 'Adj|Noun': (terms, i) => {\n return isCapital(terms, i) || isEndNoun(terms, i)\n },\n 'Actor|Verb': (terms, i) => {\n return isCapital(terms, i)\n },\n 'Adj|Past': (terms, i) => {\n return isCapital(terms, i)\n },\n 'Adj|Present': (terms, i) => {\n return isCapital(terms, i)\n },\n 'Noun|Gerund': (terms, i) => {\n return isCapital(terms, i)\n },\n 'Noun|Verb': (terms, i) => {\n return (i > 0 && isCapital(terms, i)) || isAlone(terms, i, 'Infinitive')\n },\n 'Plural|Verb': (terms, i) => {\n return isCapital(terms, i) || isAlone(terms, i, 'PresentTense') || isStart(terms, i, 'Plural')\n },\n 'Person|Noun': (terms, i) => {\n return isCapital(terms, i)\n },\n 'Person|Verb': (terms, i) => {\n if (i !== 0) {\n return isCapital(terms, i)\n }\n return null\n },\n 'Person|Adj': (terms, i) => {\n if (i === 0 && terms.length > 1) {\n return 'Person'\n }\n return isCapital(terms, i) ? 'Person' : null\n },\n}\nexport default adhoc","/* eslint-disable no-console */\nimport fillTags from './_fillTags.js'\nconst env = typeof process === 'undefined' || !process.env ? self.env || {} : process.env\nimport adhoc from './_adhoc.js'\nconst prefix = /^(under|over|mis|re|un|dis|semi)-?/\n\nconst checkWord = (term, obj) => {\n if (!term || !obj) {\n return null\n }\n const str = term.normal || term.implicit\n let found = null\n if (obj.hasOwnProperty(str)) {\n found = obj[str]\n }\n if (found && env.DEBUG_TAGS) {\n console.log(`\\n \\x1b[2m\\x1b[3m ↓ - '${str}' \\x1b[0m`)\n }\n return found\n}\n\nconst checkTag = (term, obj = {}, tagSet) => {\n if (!term || !obj) {\n return null\n }\n // rough sort, so 'Noun' is after ProperNoun, etc\n const tags = Array.from(term.tags).sort((a, b) => {\n const numA = tagSet[a] ? tagSet[a].parents.length : 0\n const numB = tagSet[b] ? tagSet[b].parents.length : 0\n return numA > numB ? -1 : 1\n })\n let found = tags.find(tag => obj[tag])\n if (found && env.DEBUG_TAGS) {\n console.log(` \\x1b[2m\\x1b[3m ↓ - '${term.normal || term.implicit}' (#${found}) \\x1b[0m`)\n }\n found = obj[found]\n return found\n}\n\nconst pickTag = function (terms, i, clues, model) {\n if (!clues) {\n return null\n }\n const beforeIndex = terms[i - 1]?.text !== 'also' ? i - 1 : Math.max(0, i - 2)\n const tagSet = model.one.tagSet\n // look -> right word, first\n let tag = checkWord(terms[i + 1], clues.afterWords)\n // look <- left word, second\n tag = tag || checkWord(terms[beforeIndex], clues.beforeWords)\n // look <- left tag\n tag = tag || checkTag(terms[beforeIndex], clues.beforeTags, tagSet)\n // look -> right tag\n tag = tag || checkTag(terms[i + 1], clues.afterTags, tagSet)\n // console.log(clues)\n return tag\n}\n\n// words like 'bob' that can change between two tags\nconst doSwitches = function (terms, i, world) {\n const model = world.model\n const setTag = world.methods.one.setTag\n const { switches, clues } = model.two\n const term = terms[i]\n let str = term.normal || term.implicit || ''\n // support prefixes for switching words\n if (prefix.test(str) && !switches[str]) {\n str = str.replace(prefix, '') // could use some guards, here\n }\n if (term.switch) {\n const form = term.switch\n // skip propernouns, acronyms, etc\n if (term.tags.has('Acronym') || term.tags.has('PhrasalVerb')) {\n return\n }\n let tag = pickTag(terms, i, clues[form], model)\n // lean-harder on some variable forms\n if (adhoc[form]) {\n tag = adhoc[form](terms, i) || tag\n }\n // did we find anything?\n if (tag) {\n // tag it\n setTag([term], tag, world, null, `3-[switch] (${form})`)\n // add plural/singular etc.\n fillTags(terms, i, model)\n } else if (env.DEBUG_TAGS) {\n console.log(`\\n -> X - '${str}' : (${form}) `)\n }\n }\n}\nexport default doSwitches\n","const beside = {\n there: true, //go there\n this: true, //try this\n it: true, //do it\n him: true,\n her: true,\n us: true, //tell us\n}\n\n// '[place] tea bags in hot water'\nconst imperative = function (terms, world) {\n const setTag = world.methods.one.setTag\n const multiWords = world.model.one._multiCache || {}\n const t = terms[0]\n const isRight = t.switch === 'Noun|Verb' || t.tags.has('Infinitive')\n if (isRight && terms.length >= 2) {\n // ensure rest of sentence is ok\n if (terms.length < 4 && !beside[terms[1].normal]) {\n return\n }\n // avoid multi-noun words like '[board] room'\n if (!t.tags.has('PhrasalVerb') && multiWords.hasOwnProperty(t.normal)) {\n return\n }\n // is the next word a noun? - 'compile information ..'\n const nextNoun = terms[1].tags.has('Noun') || terms[1].tags.has('Determiner')\n if (nextNoun) {\n // ensure no soon-verb - 'waste materials are ..'\n const soonVerb = terms.slice(1, 3).some(term => term.tags.has('Verb'))\n if (!soonVerb || t.tags.has('#PhrasalVerb')) {\n setTag([t], 'Imperative', world, null, '3-[imperative]')\n }\n }\n }\n}\nexport default imperative\n","import colons from './1st-pass/01-colons.js'\nimport hyphens from './1st-pass/02-hyphens.js'\n\nimport tagSwitch from './2nd-pass/00-tagSwitch.js'\nimport checkCase from './2nd-pass/01-case.js'\nimport checkSuffix from './2nd-pass/02-suffix.js'\nimport checkRegex from './2nd-pass/03-regex.js'\nimport checkPrefix from './2nd-pass/04-prefix.js'\nimport checkYear from './2nd-pass/05-year.js'\nimport verbType from './3rd-pass/07-verb-type.js'\n\nimport fillTags from './3rd-pass/_fillTags.js'\nimport checkAcronym from './3rd-pass/01-acronym.js'\nimport neighbours from './3rd-pass/02-neighbours.js'\nimport orgWords from './3rd-pass/03-orgWords.js'\nimport placeWords from './3rd-pass/04-placeWords.js'\nimport nounFallback from './3rd-pass/05-fallback.js'\nimport switches from './3rd-pass/06-switches.js'\nimport imperative from './3rd-pass/08-imperative.js'\n\n// is it all yelling-case?\nconst ignoreCase = function (terms) {\n // allow 'John F Kennedy'\n if (terms.filter(t => !t.tags.has('ProperNoun')).length <= 3) {\n return false\n }\n const lowerCase = /^[a-z]/\n return terms.every(t => !lowerCase.test(t.text))\n}\n\n// taggers with no clause-splitting\nconst firstPass = function (docs, model, world) {\n docs.forEach(terms => {\n // check whitespace/punctuation\n colons(terms, 0, model, world)\n })\n}\n\n// these methods don't care about word-neighbours\nconst secondPass = function (terms, model, world, isYelling) {\n for (let i = 0; i < terms.length; i += 1) {\n // skip frozen terms, for now\n if (terms[i].frozen === true) {\n continue\n }\n // mark Noun|Verb on term metadata\n tagSwitch(terms, i, model)\n // is it titlecased?\n if (isYelling === false) {\n checkCase(terms, i, model)\n }\n // look at word ending\n checkSuffix(terms, i, model)\n // try look-like rules\n checkRegex(terms, i, model, world)\n // check for recognized prefix, like 'micro-'\n checkPrefix(terms, i, model)\n // turn '1993' into a year\n checkYear(terms, i, model)\n }\n}\n\n// neighbour-based tagging\nconst thirdPass = function (terms, model, world, isYelling) {\n for (let i = 0; i < terms.length; i += 1) {\n // let these tags get layered\n let found = checkAcronym(terms, i, model)\n // deduce parent tags\n fillTags(terms, i, model)\n // look left+right for hints\n found = found || neighbours(terms, i, model)\n // ¯\\_(ツ)_/¯ - found nothing\n found = found || nounFallback(terms, i, model)\n }\n for (let i = 0; i < terms.length; i += 1) {\n // skip these\n if (terms[i].frozen === true) {\n continue\n }\n // Johnson LLC\n orgWords(terms, i, world, isYelling)\n // Wawel Castle\n placeWords(terms, i, world, isYelling)\n // verb-noun disambiguation, etc\n switches(terms, i, world)\n // give bare verbs more tags\n verbType(terms, i, model, world)\n // hard-nosed\n hyphens(terms, i, model, world)\n }\n // place tea bags\n imperative(terms, world)\n}\n\nconst preTagger = function (view) {\n const { methods, model, world } = view\n const docs = view.docs\n // try some early stuff\n firstPass(docs, model, world)\n // roughly split sentences up by clause\n const document = methods.two.quickSplit(docs)\n // start with all terms\n for (let n = 0; n < document.length; n += 1) {\n const terms = document[n]\n // is it all upper-case?\n const isYelling = ignoreCase(terms)\n // guess by the letters\n secondPass(terms, model, world, isYelling)\n // guess by the neighbours\n thirdPass(terms, model, world, isYelling)\n }\n return document\n}\n\nexport default preTagger\n","const toRoot = {\n // 'spencer's' -> 'spencer'\n 'Possessive': (term) => {\n let str = term.machine || term.normal || term.text\n str = str.replace(/'s$/, '')\n return str\n },\n // 'drinks' -> 'drink'\n 'Plural': (term, world) => {\n const str = term.machine || term.normal || term.text\n return world.methods.two.transform.noun.toSingular(str, world.model)\n },\n // ''\n 'Copula': () => {\n return 'is'\n },\n // 'walked' -> 'walk'\n 'PastTense': (term, world) => {\n const str = term.machine || term.normal || term.text\n return world.methods.two.transform.verb.toInfinitive(str, world.model, 'PastTense')\n },\n // 'walking' -> 'walk'\n 'Gerund': (term, world) => {\n const str = term.machine || term.normal || term.text\n return world.methods.two.transform.verb.toInfinitive(str, world.model, 'Gerund')\n },\n // 'walks' -> 'walk'\n 'PresentTense': (term, world) => {\n const str = term.machine || term.normal || term.text\n if (term.tags.has('Infinitive')) {\n return str\n }\n return world.methods.two.transform.verb.toInfinitive(str, world.model, 'PresentTense')\n },\n // 'quieter' -> 'quiet'\n 'Comparative': (term, world) => {\n const str = term.machine || term.normal || term.text\n return world.methods.two.transform.adjective.fromComparative(str, world.model)\n },\n // 'quietest' -> 'quiet'\n 'Superlative': (term, world) => {\n const str = term.machine || term.normal || term.text\n return world.methods.two.transform.adjective.fromSuperlative(str, world.model)\n },\n // 'suddenly' -> 'sudden'\n 'Adverb': (term, world) => {\n const { fromAdverb } = world.methods.two.transform.adjective\n const str = term.machine || term.normal || term.text\n return fromAdverb(str)\n },\n}\n\nconst getRoot = function (view) {\n const world = view.world\n const keys = Object.keys(toRoot)\n view.docs.forEach(terms => {\n for (let i = 0; i < terms.length; i += 1) {\n const term = terms[i]\n for (let k = 0; k < keys.length; k += 1) {\n if (term.tags.has(keys[k])) {\n const fn = toRoot[keys[k]]\n const root = fn(term, world)\n if (term.normal !== root) {\n term.root = root\n }\n break\n }\n }\n }\n })\n}\nexport default getRoot","// rough connection between compromise tagset and Penn Treebank\n// https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html\n\nconst mapping = {\n // adverbs\n // 'Comparative': 'RBR',\n // 'Superlative': 'RBS',\n Adverb: 'RB',\n\n // adjectives\n Comparative: 'JJR',\n Superlative: 'JJS',\n Adjective: 'JJ',\n TO: 'Conjunction',\n\n // verbs\n Modal: 'MD',\n Auxiliary: 'MD',\n Gerund: 'VBG', //throwing\n PastTense: 'VBD', //threw\n Participle: 'VBN', //thrown\n PresentTense: 'VBZ', //throws\n Infinitive: 'VB', //throw\n Particle: 'RP', //phrasal particle\n Verb: 'VB', // throw\n\n // pronouns\n Pronoun: 'PRP',\n\n // misc\n Cardinal: 'CD',\n Conjunction: 'CC',\n Determiner: 'DT',\n Preposition: 'IN',\n // 'Determiner': 'WDT',\n // 'Expression': 'FW',\n QuestionWord: 'WP',\n Expression: 'UH',\n\n //nouns\n Possessive: 'POS',\n ProperNoun: 'NNP',\n Person: 'NNP',\n Place: 'NNP',\n Organization: 'NNP',\n Singular: 'NN',\n Plural: 'NNS',\n Noun: 'NN',\n\n There: 'EX', //'there'\n // 'Adverb':'WRB',\n // 'Noun':'PDT', //predeterminer\n // 'Noun':'SYM', //symbol\n // 'Noun':'NFP', //\n\n // WDT \tWh-determiner\n // \tWP \tWh-pronoun\n // \tWP$ \tPossessive wh-pronoun\n // \tWRB \tWh-adverb\n}\n\nconst toPenn = function (term) {\n // try some ad-hoc ones\n if (term.tags.has('ProperNoun') && term.tags.has('Plural')) {\n return 'NNPS'\n }\n if (term.tags.has('Possessive') && term.tags.has('Pronoun')) {\n return 'PRP$'\n }\n if (term.normal === 'there') {\n return 'EX'\n }\n if (term.normal === 'to') {\n return 'TO'\n }\n // run through an ordered list of tags\n const arr = term.tagRank || []\n for (let i = 0; i < arr.length; i += 1) {\n if (mapping.hasOwnProperty(arr[i])) {\n return mapping[arr[i]]\n }\n }\n return null\n}\n\nconst pennTag = function (view) {\n view.compute('tagRank')\n view.docs.forEach(terms => {\n terms.forEach(term => {\n term.penn = toPenn(term)\n })\n })\n}\nexport default pennTag\n","import preTagger from './tagger/index.js'\nimport root from './root.js'\nimport penn from './penn.js'\n\nexport default { preTagger, root, penn }\n","const entity = ['Person', 'Place', 'Organization']\n\nexport default {\n Noun: {\n not: ['Verb', 'Adjective', 'Adverb', 'Value', 'Determiner'],\n },\n Singular: {\n is: 'Noun',\n not: ['Plural', 'Uncountable'],\n },\n // 'Canada'\n ProperNoun: {\n is: 'Noun',\n },\n Person: {\n is: 'Singular',\n also: ['ProperNoun'],\n not: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n is: 'Person',\n },\n MaleName: {\n is: 'FirstName',\n not: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n is: 'FirstName',\n not: ['MaleName', 'LastName'],\n },\n LastName: {\n is: 'Person',\n not: ['FirstName'],\n },\n // 'dr.'\n Honorific: {\n is: 'Person',\n not: ['FirstName', 'LastName', 'Value'],\n },\n Place: {\n is: 'Singular',\n not: ['Person', 'Organization'],\n },\n Country: {\n is: 'Place',\n also: ['ProperNoun'],\n not: ['City'],\n },\n City: {\n is: 'Place',\n also: ['ProperNoun'],\n not: ['Country'],\n },\n // 'california'\n Region: {\n is: 'Place',\n also: ['ProperNoun'],\n },\n Address: {\n // is: 'Place',\n },\n Organization: {\n is: 'ProperNoun',\n not: ['Person', 'Place'],\n },\n SportsTeam: {\n is: 'Organization',\n },\n School: {\n is: 'Organization',\n },\n Company: {\n is: 'Organization',\n },\n Plural: {\n is: 'Noun',\n not: ['Singular', 'Uncountable'],\n },\n // 'gravity'\n Uncountable: {\n is: 'Noun',\n },\n // 'it'\n Pronoun: {\n is: 'Noun',\n not: entity,\n },\n // 'swimmer'\n Actor: {\n is: 'Noun',\n not: ['Place', 'Organization'],\n },\n // walking\n Activity: {\n is: 'Noun',\n not: ['Person', 'Place'],\n },\n // kilometres\n Unit: {\n is: 'Noun',\n not: entity,\n },\n // canadian\n Demonym: {\n is: 'Noun',\n also: ['ProperNoun'],\n not: entity,\n },\n // [spencer's] hat\n Possessive: {\n is: 'Noun',\n },\n // 'yourself'\n Reflexive: {\n is: 'Pronoun',\n },\n}\n","export default {\n Verb: {\n not: ['Noun', 'Adjective', 'Adverb', 'Value', 'Expression'],\n },\n // 'he [walks]'\n PresentTense: {\n is: 'Verb',\n not: ['PastTense', 'FutureTense'],\n },\n // 'will [walk]'\n Infinitive: {\n is: 'PresentTense',\n not: ['Gerund'],\n },\n // '[walk] now!'\n Imperative: {\n is: 'Verb',\n not: ['PastTense', 'Gerund', 'Copula'],\n },\n // walking\n Gerund: {\n is: 'PresentTense',\n not: ['Copula'],\n },\n // walked\n PastTense: {\n is: 'Verb',\n not: ['PresentTense', 'Gerund', 'FutureTense'],\n },\n // will walk\n FutureTense: {\n is: 'Verb',\n not: ['PresentTense', 'PastTense'],\n },\n // is/was\n Copula: {\n is: 'Verb',\n },\n // '[could] walk'\n Modal: {\n is: 'Verb',\n not: ['Infinitive'],\n },\n // 'awaken'\n Participle: {\n is: 'PastTense',\n },\n // '[will have had] walked'\n Auxiliary: {\n is: 'Verb',\n not: ['PastTense', 'PresentTense', 'Gerund', 'Conjunction'],\n },\n // 'walk out'\n PhrasalVerb: {\n is: 'Verb',\n },\n // 'walk [out]'\n Particle: {\n is: 'PhrasalVerb',\n not: ['PastTense', 'PresentTense', 'Copula', 'Gerund'],\n },\n // 'walked by'\n Passive: {\n is: 'Verb',\n },\n}\n","export default {\n Value: {\n not: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n is: 'Value',\n not: ['Cardinal'],\n },\n Cardinal: {\n is: 'Value',\n not: ['Ordinal'],\n },\n Fraction: {\n is: 'Value',\n not: ['Noun'],\n },\n Multiple: {\n is: 'TextValue',\n },\n RomanNumeral: {\n is: 'Cardinal',\n not: ['TextValue'],\n },\n TextValue: {\n is: 'Value',\n not: ['NumericValue'],\n },\n NumericValue: {\n is: 'Value',\n not: ['TextValue'],\n },\n Money: {\n is: 'Cardinal',\n },\n Percent: {\n is: 'Value',\n },\n}\n","export default {\n Date: {\n not: ['Verb', 'Adverb', 'Adjective'],\n },\n Month: {\n is: 'Date',\n also: ['Noun'],\n not: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n is: 'Date',\n also: ['Noun'],\n },\n Year: {\n is: 'Date',\n not: ['RomanNumeral'],\n },\n FinancialQuarter: {\n is: 'Date',\n not: 'Fraction',\n },\n // 'easter'\n Holiday: {\n is: 'Date',\n also: ['Noun'],\n },\n // 'summer'\n Season: {\n is: 'Date',\n },\n Timezone: {\n is: 'Date',\n also: ['Noun'],\n not: ['ProperNoun'],\n },\n Time: {\n is: 'Date',\n not: ['AtMention'],\n },\n // 'months'\n Duration: {\n is: 'Date',\n also: ['Noun'],\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value', 'QuestionWord']\n\nexport default {\n Adjective: {\n not: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n Comparable: {\n is: 'Adjective',\n },\n Comparative: {\n is: 'Adjective',\n },\n Superlative: {\n is: 'Adjective',\n not: ['Comparative'],\n },\n NumberRange: {},\n Adverb: {\n not: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n Determiner: {\n not: ['Noun', 'Verb', 'Adjective', 'Adverb', 'QuestionWord', 'Conjunction'], //allow 'a' to be a Determiner/Value\n },\n Conjunction: {\n not: anything,\n },\n Preposition: {\n not: ['Noun', 'Verb', 'Adjective', 'Adverb', 'QuestionWord', 'Determiner'],\n },\n QuestionWord: {\n not: ['Determiner'],\n },\n Currency: {\n is: 'Noun',\n },\n Expression: {\n not: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n Abbreviation: {},\n Url: {\n not: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email', 'SlashedTerm'],\n },\n PhoneNumber: {\n not: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n is: 'Noun',\n not: ['HashTag', 'Email'],\n },\n Emoji: {\n not: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n not: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'SlashedTerm'],\n },\n SlashedTerm: {\n not: ['Emoticon', 'Url', 'Value']\n },\n Email: {\n not: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Acronym: {\n not: ['Plural', 'RomanNumeral', 'Pronoun', 'Date'],\n },\n Negative: {\n not: ['Noun', 'Adjective', 'Value', 'Expression'],\n },\n Condition: {\n not: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n // existential 'there'\n There: {\n not: ['Verb', 'Adjective', 'Noun', 'Value', 'Conjunction', 'Preposition'],\n },\n // 'co-wrote'\n Prefix: {\n not: ['Abbreviation', 'Acronym', 'ProperNoun'],\n },\n // hard-nosed, bone-headed\n Hyphenated: {},\n}\n","import nouns from './nouns.js'\nimport verbs from './verbs.js'\nimport values from './values.js'\nimport dates from './dates.js'\nimport misc from './misc.js'\n\nconst allTags = Object.assign({}, nouns, verbs, values, dates, misc)\n// const tagSet = compute(allTags)\nexport default allTags\n","import model from './model/index.js'\nimport methods from './methods/index.js'\nimport compute from './compute/index.js'\nimport tags from './tagSet/index.js'\n\nexport default {\n compute,\n methods,\n model,\n tags,\n hooks: ['preTagger'],\n}\n","const postPunct = /[,)\"';:\\-–—.…]/\n\nconst setContraction = function (m, suffix) {\n if (!m.found) {\n return\n }\n const terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n // set first word as full text\n terms[0].implicit = terms[0].normal\n terms[0].text += suffix\n terms[0].normal += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.implicit = t.normal\n t.text = ''\n t.normal = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n terms[i].post = terms[i].post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nconst contract = function () {\n const doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\nexport default contract\n","const titleCase = /^\\p{Lu}[\\p{Ll}'’]/u //upercase, then lowercase\nimport contract from './contract.js'\n\nconst toTitleCase = function (str = '') {\n str = str.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //TODO: support unicode\n return str\n}\n\nconst api = function (View) {\n /** */\n class Contractions extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Contraction'\n }\n /** i've -> 'i have' */\n expand() {\n this.docs.forEach(terms => {\n const isTitleCase = titleCase.test(terms[0].text)\n terms.forEach((t, i) => {\n t.text = t.implicit || ''\n delete t.implicit\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n // flag it as dirty\n t.dirty = true\n })\n // make the first word title-case?\n if (isTitleCase) {\n terms[0].text = toTitleCase(terms[0].text)\n }\n })\n this.compute('normal') //re-set normalized text\n return this\n }\n }\n // add fn to View\n View.prototype.contractions = function () {\n const m = this.match('@hasContraction+')\n return new Contractions(this.document, m.pointer)\n }\n View.prototype.contract = contract\n}\n\nexport default api\n","// put n new words where 1 word was\nconst insertContraction = function (document, point, words) {\n const [n, w] = point\n if (!words || words.length === 0) {\n return\n }\n words = words.map((word, i) => {\n word.implicit = word.text\n word.machine = word.text\n word.pre = ''\n word.post = ''\n word.text = ''\n word.normal = ''\n word.index = [n, w + i]\n return word\n })\n if (words[0]) {\n // move whitespace over\n words[0].pre = document[n][w].pre\n words[words.length - 1].post = document[n][w].post\n // add the text/normal to the first term\n words[0].text = document[n][w].text\n words[0].normal = document[n][w].normal // move tags too?\n }\n // do the splice\n document[n].splice(w, 1, ...words)\n}\nexport default insertContraction\n","const hasContraction = /'/\n\nconst hasWords = new Set([\n 'been', //the meeting's been ..\n 'become', //my son's become\n])\nconst isWords = new Set([\n 'what', //it's what\n 'how', //it's how\n 'when',\n 'if', //it's if\n 'too',\n])\nconst adjLike = new Set(['too', 'also', 'enough'])\n\n// the big clue is the tense of the following verb\nconst isOrHas = (terms, i) => {\n // scan ahead for the next verb or adjective\n for (let o = i + 1; o < terms.length; o += 1) {\n const t = terms[o]\n if (hasWords.has(t.normal)) {\n return 'has'\n }\n if (isWords.has(t.normal)) {\n return 'is'\n }\n // the cat's sleeping\n if (t.tags.has('Gerund')) {\n return 'is'\n }\n // she's the one\n if (t.tags.has('Determiner')) {\n return 'is'\n }\n // the food's ready\n if (t.tags.has('Adjective')) {\n return 'is'\n }\n // the car's parked\n if (t.switch === 'Adj|Past') {\n if (terms[o + 1]) {\n // car's parked too ..\n if (adjLike.has(terms[o + 1].normal)) {\n return 'is'\n }\n // car's parked on ..\n if (terms[o + 1].tags.has('Preposition')) {\n return 'is'\n }\n }\n // return 'is'\n }\n // The meeting's scheduled vs The plane's landed\n if (t.tags.has('PastTense')) {\n // meeting's scheduled for\n if (terms[o + 1] && terms[o + 1].normal === 'for') {\n return 'is'\n }\n return 'has'\n }\n }\n return 'is'\n}\n\n// 's -> [possessive, 'has', 'is', 'are', 'us']\nconst apostropheS = function (terms, i) {\n // possessive, is/has\n const before = terms[i].normal.split(hasContraction)[0]\n // let's - >[let, us]\n if (before === 'let') {\n return [before, 'us']\n }\n // allow slang \"there's cookies\" -> there are\n if (before === 'there') {\n const t = terms[i + 1]\n if (t && t.tags.has('Plural')) {\n return [before, 'are']\n }\n }\n // spencer's got -> spencer has got\n if (isOrHas(terms, i) === 'has') {\n return [before, 'has']\n }\n return [before, 'is']\n}\nexport default apostropheS\n","const hasContraction = /'/\n\nconst hadWords = new Set([\n 'better', //had better\n 'done', //had done\n 'before', // he'd _ before\n 'it', // he'd _ it\n 'had', //she'd had -> she would have..\n])\n\nconst wouldWords = new Set([\n 'have', // 'i'd have' -> i would have..\n 'be', //' she'd be'\n])\n\n//look for a past-tense verb\n// You'd mentioned -> you had mentioned\n// You'd mention -> you would mention\nconst hadOrWould = (terms, i) => {\n // scan ahead\n for (let o = i + 1; o < terms.length; o += 1) {\n const t = terms[o]\n // you'd better go\n if (hadWords.has(t.normal)) {\n return 'had'\n }\n // we'd have\n if (wouldWords.has(t.normal)) {\n return 'would'\n }\n // You'd mentioned -> you had mentioned\n if (t.tags.has('PastTense') || t.switch === 'Adj|Past') {\n return 'had'\n }\n // You'd mention -> you would mention\n if (t.tags.has('PresentTense') || t.tags.has('Infinitive')) {\n return 'would'\n }\n // i'd an issue\n if (t.tags.has('#Determiner')) {\n return 'had'\n }\n if (t.tags.has('Adjective')) {\n return 'would'\n }\n }\n return false\n}\n\n// he'd walked -> had\n// how'd -> did\n// he'd go -> would\nconst _apostropheD = function (terms, i) {\n const before = terms[i].normal.split(hasContraction)[0]\n // what'd, how'd\n if (before === 'how' || before === 'what') {\n return [before, 'did']\n }\n if (hadOrWould(terms, i) === 'had') {\n return [before, 'had']\n }\n // had/would/did\n return [before, 'would']\n}\nexport default _apostropheD\n","const lastNoun = function (terms, i) {\n for (let n = i - 1; n >= 0; n -= 1) {\n if (\n terms[n].tags.has('Noun') ||\n terms[n].tags.has('Pronoun') ||\n terms[n].tags.has('Plural') ||\n terms[n].tags.has('Singular')\n ) {\n return terms[n]\n }\n }\n return null\n}\n\n//ain't -> are/is not\nconst apostropheT = function (terms, i) {\n if (terms[i].normal === \"ain't\" || terms[i].normal === 'aint') {\n // \"ain't never\" -> have never (?)\n if (terms[i + 1] && terms[i + 1].normal === 'never') {\n return ['have']\n }\n // we aint -> are not, she aint -> is not\n const noun = lastNoun(terms, i)\n if (noun) {\n // plural/singular pronouns\n if (noun.normal === 'we' || noun.normal === 'they') {\n return ['are', 'not']\n }\n if (noun.normal === 'i') {\n return ['am', 'not']\n }\n // plural/singular tags\n if (noun.tags && noun.tags.has('Plural')) {\n return ['are', 'not']\n }\n }\n return ['is', 'not']\n }\n const before = terms[i].normal.replace(/n't/, '')\n return [before, 'not']\n}\n\nexport default apostropheT\n","const banList = {\n that: true,\n there: true,\n let: true,\n here: true,\n everywhere: true,\n}\n\nconst beforePossessive = {\n in: true, //in sunday's\n by: true, //by sunday's\n for: true, //for sunday's\n}\nconst adjLike = new Set(['too', 'also', 'enough', 'about'])\nconst nounLike = new Set(['is', 'are', 'did', 'were', 'could', 'should', 'must', 'had', 'have'])\n\nconst isPossessive = (terms, i) => {\n const term = terms[i]\n // these can't be possessive\n if (banList.hasOwnProperty(term.machine || term.normal)) {\n return false\n }\n // if we already know it\n if (term.tags.has('Possessive')) {\n return true\n }\n // who's\n if (term.tags.has('QuestionWord')) {\n return false\n }\n // some pronouns are never possessive\n if (term.normal === `he's` || term.normal === `she's`) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n const nextTerm = terms[i + 1]\n if (!nextTerm) {\n return true\n }\n // \"it's a life\" vs \"run it's business\"\n if (term.normal === `it's`) {\n if (nextTerm.tags.has('#Noun')) {\n return true\n }\n return false\n }\n // the sun's setting vs the artist's painting\n // gerund = is, noun = possessive\n // (we are doing some dupe-work of the switch classifier here)\n if (nextTerm.switch == 'Noun|Gerund') {\n const next2 = terms[i + 2]\n // the artist's painting.\n if (!next2) {\n if (term.tags.has('Actor') || term.tags.has('ProperNoun')) {\n return true\n }\n return false\n }\n // the artist's painting is..\n if (next2.tags.has('Copula')) {\n return true\n }\n // the cat's sleeping on ..\n if (next2.normal === 'on' || next2.normal === 'in') {\n return false\n }\n return false\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.has('Verb')) {\n //fix 'jamie's bite'\n if (nextTerm.tags.has('Infinitive')) {\n return true\n }\n //'jamaica's growing'\n if (nextTerm.tags.has('Gerund')) {\n return false\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.has('PresentTense')) {\n return true\n }\n return false\n }\n\n // john's nuts\n if (nextTerm.switch === 'Adj|Noun') {\n const twoTerm = terms[i + 2]\n if (!twoTerm) {\n return false //adj\n }\n // john's nuts were..\n if (nounLike.has(twoTerm.normal)) {\n return true\n }\n // john's nuts about..\n if (adjLike.has(twoTerm.normal)) {\n return false //adj\n }\n }\n //spencer's house\n if (nextTerm.tags.has('Noun')) {\n const nextStr = nextTerm.machine || nextTerm.normal\n // 'spencer's here'\n if (nextStr === 'here' || nextStr === 'there' || nextStr === 'everywhere') {\n return false\n }\n // the chair's his\n if (nextTerm.tags.has('Possessive')) {\n return false\n }\n // the captain's John\n if (nextTerm.tags.has('ProperNoun') && !term.tags.has('ProperNoun')) {\n return false\n }\n return true\n }\n\n // by sunday's final\n if (terms[i - 1] && beforePossessive[terms[i - 1].normal] === true) {\n return true\n }\n\n // spencer's tired\n if (nextTerm.tags.has('Adjective')) {\n const twoTerm = terms[i + 2]\n //the rocket's red\n if (!twoTerm) {\n return false\n }\n // rocket's red nozzle\n if (twoTerm.tags.has('Noun') && !twoTerm.tags.has('Pronoun')) {\n //project's behind schedule\n const str = nextTerm.normal\n if (str === 'above' || str === 'below' || str === 'behind') {\n return false\n }\n return true\n }\n // rocket's red glare\n if (twoTerm.switch === 'Noun|Verb') {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n return false\n }\n // baby's first steps\n if (nextTerm.tags.has('Value')) {\n return true\n }\n // otherwise not possessive\n return false\n}\nexport default isPossessive\n","import splice from './_splice.js'\nimport apostropheS from './apostrophe-s.js'\nimport apostropheD from './apostrophe-d.js'\nimport apostropheT from './apostrophe-t.js'\nimport isPossessive from './isPossessive.js'\n\nconst byApostrophe = /'/\n\n// poor-mans reindexing of this sentence only\nconst reIndex = function (terms) {\n terms.forEach((t, i) => {\n if (t.index) {\n t.index[1] = i\n }\n })\n}\n\n// run tagger on our new implicit terms\nconst reTag = function (terms, view, start, len) {\n const tmp = view.update()\n tmp.document = [terms]\n // offer to re-tag neighbours, too\n let end = start + len\n if (start > 0) {\n start -= 1\n }\n if (terms[end]) {\n end += 1\n }\n tmp.ptrs = [[0, start, end]]\n tmp.compute(['freeze', 'lexicon', 'preTagger', 'unfreeze'])\n // don't for a reindex of the whole document\n reIndex(terms)\n}\n\nconst byEnd = {\n // how'd\n d: (terms, i) => apostropheD(terms, i),\n // we ain't\n t: (terms, i) => apostropheT(terms, i),\n // bob's\n s: (terms, i, world) => {\n // [bob's house] vs [bob's cool]\n if (isPossessive(terms, i)) {\n return world.methods.one.setTag([terms[i]], 'Possessive', world, null, '2-contraction')\n }\n return apostropheS(terms, i)\n },\n}\n\nconst toDocs = function (words, view) {\n const doc = view.fromText(words.join(' '))\n doc.compute('id')\n return doc.docs[0]\n}\n\n//really easy ones\nconst contractionTwo = view => {\n const { world, document } = view\n // each sentence\n document.forEach((terms, n) => {\n // loop through terms backwards\n for (let i = terms.length - 1; i >= 0; i -= 1) {\n // is it already a contraction\n if (terms[i].implicit) {\n continue\n }\n let after = null\n if (byApostrophe.test(terms[i].normal) === true) {\n after = terms[i].normal.split(byApostrophe)[1]\n }\n let words = null\n // any known-ones, like 'dunno'?\n if (byEnd.hasOwnProperty(after)) {\n words = byEnd[after](terms, i, world)\n }\n // actually insert the new terms\n if (words) {\n words = toDocs(words, view)\n splice(document, [n, i], words)\n reTag(document[n], view, i, words.length)\n continue\n }\n }\n })\n}\nexport default { contractionTwo }\n","import api from './api/index.js'\nimport compute from './compute/index.js'\n\nexport default {\n compute,\n api,\n hooks: ['contractionTwo']\n}","export default [\n // all fell apart\n { match: '[(all|both)] #Determiner #Noun', group: 0, tag: 'Noun', reason: 'all-noun' },\n //sometimes not-adverbs\n { match: '#Copula [(just|alone)]$', group: 0, tag: 'Adjective', reason: 'not-adverb' },\n //jack is guarded\n { match: '#Singular is #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'is-filled' },\n // smoked poutine is\n { match: '[#PastTense] #Singular is', group: 0, tag: 'Adjective', reason: 'smoked-poutine' },\n // baked onions are\n { match: '[#PastTense] #Plural are', group: 0, tag: 'Adjective', reason: 'baked-onions' },\n // well made\n { match: 'well [#PastTense]', group: 0, tag: 'Adjective', reason: 'well-made' },\n // is f*ed up\n { match: '#Copula [fucked up?]', group: 0, tag: 'Adjective', reason: 'swears-adjective' },\n //jack seems guarded\n { match: '#Singular (seems|appears) #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'seems-filled' },\n // jury is out - preposition ➔ adjective\n { match: '#Copula #Adjective? [(out|in|through)]$', group: 0, tag: 'Adjective', reason: 'still-out' },\n // shut the door\n { match: '^[#Adjective] (the|your) #Noun', group: 0, notIf: '(all|even)', tag: 'Infinitive', reason: 'shut-the' },\n // the said card\n { match: 'the [said] #Noun', group: 0, tag: 'Adjective', reason: 'the-said-card' },\n // faith-based, much-appreciated, soft-boiled\n { match: '[#Hyphenated (#Hyphenated && #PastTense)] (#Noun|#Conjunction)', group: 0, tag: 'Adjective', notIf: '#Adverb', reason: 'faith-based' },\n //self-driving\n { match: '[#Hyphenated (#Hyphenated && #Gerund)] (#Noun|#Conjunction)', group: 0, tag: 'Adjective', notIf: '#Adverb', reason: 'self-driving' },\n //dammed-up\n { match: '[#PastTense (#Hyphenated && #PhrasalVerb)] (#Noun|#Conjunction)', group: 0, tag: 'Adjective', reason: 'dammed-up' },\n //two-fold\n { match: '(#Hyphenated && #Value) fold', tag: 'Adjective', reason: 'two-fold' },\n //must-win\n { match: 'must (#Hyphenated && #Infinitive)', tag: 'Adjective', reason: 'must-win' },\n // vacuum-sealed\n { match: `(#Hyphenated && #Infinitive) #Hyphenated`, tag: 'Adjective', notIf: '#PhrasalVerb', reason: 'vacuum-sealed' },\n\n { match: 'too much', tag: 'Adverb Adjective', reason: 'bit-4' },\n { match: 'a bit much', tag: 'Determiner Adverb Adjective', reason: 'bit-3' },\n\n // adjective-prefixes - 'un skilled'\n { match: '[(un|contra|extra|inter|intra|macro|micro|mid|mis|mono|multi|pre|sub|tri|ex)] #Adjective', group: 0, tag: ['Adjective', 'Prefix'], reason: 'un-skilled' },\n\n]\n","const adverbAdj = `(dark|bright|flat|light|soft|pale|dead|dim|faux|little|wee|sheer|most|near|good|extra|all)`\nconst noLy = '(hard|fast|late|early|high|right|deep|close|direct)'\n\nexport default [\n // kinda sparkly\n { match: `#Adverb [#Adverb] (and|or|then)`, group: 0, tag: 'Adjective', reason: 'kinda-sparkly-and' },\n // dark green\n { match: `[${adverbAdj}] #Adjective`, group: 0, tag: 'Adverb', reason: 'dark-green' },\n // far too\n { match: `#Copula [far too] #Adjective`, group: 0, tag: 'Adverb', reason: 'far-too' },\n // was still in\n { match: `#Copula [still] (in|#Gerund|#Adjective)`, group: 0, tag: 'Adverb', reason: 'was-still-walking' },\n // studies hard\n { match: `#Plural ${noLy}`, tag: '#PresentTense #Adverb', reason: 'studies-hard' },\n // shops direct\n {\n match: `#Verb [${noLy}] !#Noun?`,\n group: 0,\n notIf: '(#Copula|get|got|getting|become|became|becoming|feel|feels|feeling|#Determiner|#Preposition)',\n tag: 'Adverb',\n reason: 'shops-direct',\n },\n // studies a lot\n { match: `[#Plural] a lot`, tag: 'PresentTense', reason: 'studies-a-lot' },\n]\n","// Gerund-Adjectives - 'amusing, annoying'\nexport default [\n //a staggering cost\n // { match: '(a|an) [#Gerund]', group: 0, tag: 'Adjective', reason: 'a|an' },\n //as amusing as\n { match: 'as [#Gerund] as', group: 0, tag: 'Adjective', reason: 'as-gerund-as' },\n // more amusing than\n { match: 'more [#Gerund] than', group: 0, tag: 'Adjective', reason: 'more-gerund-than' },\n // very amusing\n { match: '(so|very|extremely) [#Gerund]', group: 0, tag: 'Adjective', reason: 'so-gerund' },\n // found it amusing\n { match: '(found|found) it #Adverb? [#Gerund]', group: 0, tag: 'Adjective', reason: 'found-it-gerund' },\n // a bit amusing\n { match: 'a (little|bit|wee) bit? [#Gerund]', group: 0, tag: 'Adjective', reason: 'a-bit-gerund' },\n // looking annoying\n {\n match: '#Gerund [#Gerund]',\n group: 0,\n tag: 'Adjective',\n notIf: '(impersonating|practicing|considering|assuming)',\n reason: 'looking-annoying',\n },\n // looked amazing\n {\n match: '(looked|look|looks) #Adverb? [%Adj|Gerund%]',\n group: 0,\n tag: 'Adjective',\n notIf: '(impersonating|practicing|considering|assuming)',\n reason: 'looked-amazing',\n },\n // were really amazing\n // { match: '(looked|look|looks) #Adverb [%Adj|Gerund%]', group: 0, tag: 'Adjective', notIf: '(impersonating|practicing|considering|assuming)', reason: 'looked-amazing' },\n // developing a\n { match: '[%Adj|Gerund%] #Determiner', group: 0, tag: 'Gerund', reason: 'developing-a' },\n // world's leading manufacturer\n { match: '#Possessive [%Adj|Gerund%] #Noun', group: 0, tag: 'Adjective', reason: 'leading-manufacturer' },\n // meaning alluring\n { match: '%Noun|Gerund% %Adj|Gerund%', tag: 'Gerund #Adjective', reason: 'meaning-alluring' },\n\n // face shocking revelations\n {\n match: '(face|embrace|reveal|stop|start|resume) %Adj|Gerund%',\n tag: '#PresentTense #Adjective',\n reason: 'face-shocking',\n },\n // are enduring symbols\n { match: '(are|were) [%Adj|Gerund%] #Plural', group: 0, tag: 'Adjective', reason: 'are-enduring-symbols' },\n]\n","export default [\n //the above is clear\n { match: '#Determiner [#Adjective] #Copula', group: 0, tag: 'Noun', reason: 'the-adj-is' },\n //real evil is\n { match: '#Adjective [#Adjective] #Copula', group: 0, tag: 'Noun', reason: 'adj-adj-is' },\n //his fine\n { match: '(his|its) [%Adj|Noun%]', group: 0, tag: 'Noun', notIf: '#Hyphenated', reason: 'his-fine' },\n //is all\n { match: '#Copula #Adverb? [all]', group: 0, tag: 'Noun', reason: 'is-all' },\n // have fun\n { match: `(have|had) [#Adjective] #Preposition .`, group: 0, tag: 'Noun', reason: 'have-fun' },\n // brewing giant\n { match: `#Gerund (giant|capital|center|zone|application)`, tag: 'Noun', reason: 'brewing-giant' },\n // in an instant\n { match: `#Preposition (a|an) [#Adjective]$`, group: 0, tag: 'Noun', reason: 'an-instant' },\n // no golden would\n { match: `no [#Adjective] #Modal`, group: 0, tag: 'Noun', reason: 'no-golden' },\n // brand new\n { match: `[brand #Gerund?] new`, group: 0, tag: 'Adverb', reason: 'brand-new' },\n // some kind\n { match: `(#Determiner|#Comparative|new|different) [kind]`, group: 0, tag: 'Noun', reason: 'some-kind' },\n // her favourite sport\n { match: `#Possessive [%Adj|Noun%] #Noun`, group: 0, tag: 'Adjective', reason: 'her-favourite' },\n // must-win\n { match: `must && #Hyphenated .`, tag: 'Adjective', reason: 'must-win' },\n // the present\n {\n match: `#Determiner [#Adjective]$`,\n tag: 'Noun',\n notIf: '(this|that|#Comparative|#Superlative)',\n reason: 'the-south',\n }, //are that crazy.\n // company-wide\n {\n match: `(#Noun && #Hyphenated) (#Adjective && #Hyphenated)`,\n tag: 'Adjective',\n notIf: '(this|that|#Comparative|#Superlative)',\n reason: 'company-wide',\n },\n // the poor were\n {\n match: `#Determiner [#Adjective] (#Copula|#Determiner)`,\n notIf: '(#Comparative|#Superlative)',\n group: 0,\n tag: 'Noun',\n reason: 'the-poor',\n },\n // professional bodybuilder\n {\n match: `[%Adj|Noun%] #Noun`,\n notIf: '(#Pronoun|#ProperNoun)',\n group: 0,\n tag: 'Adjective',\n reason: 'stable-foundations',\n },\n]\n","export default [\n // amusing his aunt\n // { match: '[#Adjective] #Possessive #Noun', group: 0, tag: 'Verb', reason: 'gerund-his-noun' },\n // loving you\n // { match: '[#Adjective] (us|you)', group: 0, tag: 'Gerund', reason: 'loving-you' },\n // slowly stunning\n { match: '(slowly|quickly) [#Adjective]', group: 0, tag: 'Verb', reason: 'slowly-adj' },\n // does mean\n { match: 'does (#Adverb|not)? [#Adjective]', group: 0, tag: 'PresentTense', reason: 'does-mean' },\n // okay by me\n { match: '[(fine|okay|cool|ok)] by me', group: 0, tag: 'Adjective', reason: 'okay-by-me' },\n // i mean\n { match: 'i (#Adverb|do)? not? [mean]', group: 0, tag: 'PresentTense', reason: 'i-mean' },\n //will secure our\n { match: 'will #Adjective', tag: 'Auxiliary Infinitive', reason: 'will-adj' },\n //he disguised the thing\n { match: '#Pronoun [#Adjective] #Determiner #Adjective? #Noun', group: 0, tag: 'Verb', reason: 'he-adj-the' },\n //is eager to go\n { match: '#Copula [%Adj|Present%] to #Verb', group: 0, tag: 'Verb', reason: 'adj-to' },\n //is done well\n { match: '#Copula [#Adjective] (well|badly|quickly|slowly)', group: 0, tag: 'Verb', reason: 'done-well' },\n // rude and insulting\n { match: '#Adjective and [#Gerund] !#Preposition?', group: 0, tag: 'Adjective', reason: 'rude-and-x' },\n // were over cooked\n { match: '#Copula #Adverb? (over|under) [#PastTense]', group: 0, tag: 'Adjective', reason: 'over-cooked' },\n // was bland and overcooked\n { match: '#Copula #Adjective+ (and|or) [#PastTense]$', group: 0, tag: 'Adjective', reason: 'bland-and-overcooked' },\n // got tired of\n { match: 'got #Adverb? [#PastTense] of', group: 0, tag: 'Adjective', reason: 'got-tired-of' },\n //felt loved\n {\n match:\n '(seem|seems|seemed|appear|appeared|appears|feel|feels|felt|sound|sounds|sounded) (#Adverb|#Adjective)? [#PastTense]',\n group: 0,\n tag: 'Adjective',\n reason: 'felt-loved',\n },\n // seem confused\n { match: '(seem|feel|seemed|felt) [#PastTense #Particle?]', group: 0, tag: 'Adjective', reason: 'seem-confused' },\n // a bit confused\n { match: 'a (bit|little|tad) [#PastTense #Particle?]', group: 0, tag: 'Adjective', reason: 'a-bit-confused' },\n // do not be embarrassed\n { match: 'not be [%Adj|Past% #Particle?]', group: 0, tag: 'Adjective', reason: 'do-not-be-confused' },\n // is just right\n { match: '#Copula just [%Adj|Past% #Particle?]', group: 0, tag: 'Adjective', reason: 'is-just-right' },\n // as pale as\n { match: 'as [#Infinitive] as', group: 0, tag: 'Adjective', reason: 'as-pale-as' },\n //failed and oppressive\n { match: '[%Adj|Past%] and #Adjective', group: 0, tag: 'Adjective', reason: 'faled-and-oppressive' },\n // or heightened emotion\n {\n match: 'or [#PastTense] #Noun',\n group: 0,\n tag: 'Adjective',\n notIf: '(#Copula|#Pronoun)',\n reason: 'or-heightened-emotion',\n },\n // became involved\n { match: '(become|became|becoming|becomes) [#Verb]', group: 0, tag: 'Adjective', reason: 'become-verb' },\n // their declared intentions\n { match: '#Possessive [#PastTense] #Noun', group: 0, tag: 'Adjective', reason: 'declared-intentions' },\n // is he cool\n { match: '#Copula #Pronoun [%Adj|Present%]', group: 0, tag: 'Adjective', reason: 'is-he-cool' },\n // is crowded with\n {\n match: '#Copula [%Adj|Past%] with',\n group: 0,\n tag: 'Adjective',\n notIf: '(associated|worn|baked|aged|armed|bound|fried|loaded|mixed|packed|pumped|filled|sealed)',\n reason: 'is-crowded-with',\n },\n // is empty$\n { match: '#Copula #Adverb? [%Adj|Present%]$', group: 0, tag: 'Adjective', reason: 'was-empty$' },\n]\n","// const adverbAdj = '(dark|bright|flat|light|soft|pale|dead|dim|faux|little|wee|sheer|most|near|good|extra|all)'\n\nexport default [\n //still good\n { match: '[still] #Adjective', group: 0, tag: 'Adverb', reason: 'still-advb' },\n //still make\n { match: '[still] #Verb', group: 0, tag: 'Adverb', reason: 'still-verb' },\n // so hot\n { match: '[so] #Adjective', group: 0, tag: 'Adverb', reason: 'so-adv' },\n // way hotter\n { match: '[way] #Comparative', group: 0, tag: 'Adverb', reason: 'way-adj' },\n // way too hot\n { match: '[way] #Adverb #Adjective', group: 0, tag: 'Adverb', reason: 'way-too-adj' },\n // all singing\n { match: '[all] #Verb', group: 0, tag: 'Adverb', reason: 'all-verb' },\n // sing like an angel\n { match: '#Verb [like]', group: 0, notIf: '(#Modal|#PhrasalVerb)', tag: 'Adverb', reason: 'verb-like' },\n //barely even walk\n { match: '(barely|hardly) even', tag: 'Adverb', reason: 'barely-even' },\n //even held\n { match: '[even] #Verb', group: 0, tag: 'Adverb', reason: 'even-walk' },\n //even worse\n { match: '[even] #Comparative', group: 0, tag: 'Adverb', reason: 'even-worse' },\n // even the greatest\n { match: '[even] (#Determiner|#Possessive)', group: 0, tag: '#Adverb', reason: 'even-the' },\n // even left\n { match: 'even left', tag: '#Adverb #Verb', reason: 'even-left' },\n // way over\n { match: '[way] #Adjective', group: 0, tag: '#Adverb', reason: 'way-over' },\n //cheering hard - dropped -ly's\n {\n match: '#PresentTense [(hard|quick|bright|slow|fast|backwards|forwards)]',\n notIf: '#Copula',\n group: 0,\n tag: 'Adverb',\n reason: 'lazy-ly',\n },\n // much appreciated\n { match: '[much] #Adjective', group: 0, tag: 'Adverb', reason: 'bit-1' },\n // is well\n { match: '#Copula [#Adverb]$', group: 0, tag: 'Adjective', reason: 'is-well' },\n // a bit cold\n { match: 'a [(little|bit|wee) bit?] #Adjective', group: 0, tag: 'Adverb', reason: 'a-bit-cold' },\n // super strong\n { match: `[(super|pretty)] #Adjective`, group: 0, tag: 'Adverb', reason: 'super-strong' },\n // become overly weakened\n { match: '(become|fall|grow) #Adverb? [#PastTense]', group: 0, tag: 'Adjective', reason: 'overly-weakened' },\n // a completely beaten man\n { match: '(a|an) #Adverb [#Participle] #Noun', group: 0, tag: 'Adjective', reason: 'completely-beaten' },\n //a close\n { match: '#Determiner #Adverb? [close]', group: 0, tag: 'Adjective', reason: 'a-close' },\n //walking close\n { match: '#Gerund #Adverb? [close]', group: 0, tag: 'Adverb', notIf: '(getting|becoming|feeling)', reason: 'being-close' },\n // a blown motor\n { match: '(the|those|these|a|an) [#Participle] #Noun', group: 0, tag: 'Adjective', reason: 'blown-motor' },\n // charged back\n { match: '(#PresentTense|#PastTense) [back]', group: 0, tag: 'Adverb', notIf: '(#PhrasalVerb|#Copula)', reason: 'charge-back' },\n // send around\n { match: '#Verb [around]', group: 0, tag: 'Adverb', notIf: '#PhrasalVerb', reason: 'send-around' },\n // later say\n { match: '[later] #PresentTense', group: 0, tag: 'Adverb', reason: 'later-say' },\n // the well\n { match: '#Determiner [well] !#PastTense?', group: 0, tag: 'Noun', reason: 'the-well' },\n // high enough\n { match: '#Adjective [enough]', group: 0, tag: 'Adverb', reason: 'high-enough' },\n]\n","export default [\n // ==== Holiday ====\n { match: '#Holiday (day|eve)', tag: 'Holiday', reason: 'holiday-day' },\n //5th of March\n { match: '#Value of #Month', tag: 'Date', reason: 'value-of-month' },\n //5 March\n { match: '#Cardinal #Month', tag: 'Date', reason: 'cardinal-month' },\n //march 5 to 7\n { match: '#Month #Value to #Value', tag: 'Date', reason: 'value-to-value' },\n //march the 12th\n { match: '#Month the #Value', tag: 'Date', reason: 'month-the-value' },\n //june 7\n { match: '(#WeekDay|#Month) #Value', tag: 'Date', reason: 'date-value' },\n //7 june\n { match: '#Value (#WeekDay|#Month)', tag: 'Date', reason: 'value-date' },\n //may twenty five\n { match: '(#TextValue && #Date) #TextValue', tag: 'Date', reason: 'textvalue-date' },\n // 'aug 20-21'\n { match: `#Month #NumberRange`, tag: 'Date', reason: 'aug 20-21' },\n // wed march 5th\n { match: `#WeekDay #Month #Ordinal`, tag: 'Date', reason: 'week mm-dd' },\n // aug 5th 2021\n { match: `#Month #Ordinal #Cardinal`, tag: 'Date', reason: 'mm-dd-yyy' },\n\n // === timezones ===\n // china standard time\n { match: `(#Place|#Demonmym|#Time) (standard|daylight|central|mountain)? time`, tag: 'Timezone', reason: 'std-time' },\n // eastern time\n {\n match: `(eastern|mountain|pacific|central|atlantic) (standard|daylight|summer)? time`,\n tag: 'Timezone',\n reason: 'eastern-time',\n },\n // 5pm central\n { match: `#Time [(eastern|mountain|pacific|central|est|pst|gmt)]`, group: 0, tag: 'Timezone', reason: '5pm-central' },\n // central european time\n { match: `(central|western|eastern) european time`, tag: 'Timezone', reason: 'cet' },\n]\n","export default [\n // ==== WeekDay ====\n // sun the 5th\n { match: '[sun] the #Ordinal', tag: 'WeekDay', reason: 'sun-the-5th' },\n //sun feb 2\n { match: '[sun] #Date', group: 0, tag: 'WeekDay', reason: 'sun-feb' },\n //1pm next sun\n { match: '#Date (on|this|next|last|during)? [sun]', group: 0, tag: 'WeekDay', reason: '1pm-sun' },\n //this sat\n { match: `(in|by|before|during|on|until|after|of|within|all) [sat]`, group: 0, tag: 'WeekDay', reason: 'sat' },\n { match: `(in|by|before|during|on|until|after|of|within|all) [wed]`, group: 0, tag: 'WeekDay', reason: 'wed' },\n { match: `(in|by|before|during|on|until|after|of|within|all) [march]`, group: 0, tag: 'Month', reason: 'march' },\n //sat november\n { match: '[sat] #Date', group: 0, tag: 'WeekDay', reason: 'sat-feb' },\n\n // ==== Month ====\n //all march\n { match: `#Preposition [(march|may)]`, group: 0, tag: 'Month', reason: 'in-month' },\n //this march\n { match: `(this|next|last) (march|may) !#Infinitive?`, tag: '#Date #Month', reason: 'this-month' },\n // march 5th\n { match: `(march|may) the? #Value`, tag: '#Month #Date #Date', reason: 'march-5th' },\n // 5th of march\n { match: `#Value of? (march|may)`, tag: '#Date #Date #Month', reason: '5th-of-march' },\n // march and feb\n { match: `[(march|may)] .? #Date`, group: 0, tag: 'Month', reason: 'march-and-feb' },\n // feb to march\n { match: `#Date .? [(march|may)]`, group: 0, tag: 'Month', reason: 'feb-and-march' },\n //quickly march\n { match: `#Adverb [(march|may)]`, group: 0, tag: 'Verb', reason: 'quickly-march' },\n //march quickly\n { match: `[(march|may)] #Adverb`, group: 0, tag: 'Verb', reason: 'march-quickly' },\n //12 am\n { match: `#Value (am|pm)`, tag: 'Time', reason: '2-am' },\n]\n","const infNouns =\n '(feel|sense|process|rush|side|bomb|bully|challenge|cover|crush|dump|exchange|flow|function|issue|lecture|limit|march|process)'\nexport default [\n //'more' is not always an adverb\n // any more\n { match: '(the|any) [more]', group: 0, tag: 'Singular', reason: 'more-noun' },\n // more players\n { match: '[more] #Noun', group: 0, tag: 'Adjective', reason: 'more-noun' },\n // rights of man\n { match: '(right|rights) of .', tag: 'Noun', reason: 'right-of' },\n // a bit\n { match: 'a [bit]', group: 0, tag: 'Singular', reason: 'bit-2' },\n // a must\n { match: 'a [must]', group: 0, tag: 'Singular', reason: 'must-2' },\n // we all\n { match: '(we|us) [all]', group: 0, tag: 'Noun', reason: 'we all' },\n // due to weather\n { match: 'due to [#Verb]', group: 0, tag: 'Noun', reason: 'due-to' },\n\n //some pressing issues\n { match: 'some [#Verb] #Plural', group: 0, tag: 'Noun', reason: 'determiner6' },\n // my first thought\n { match: '#Possessive #Ordinal [#PastTense]', group: 0, tag: 'Noun', reason: 'first-thought' },\n //the nice swim\n {\n match: '(the|this|those|these) #Adjective [%Verb|Noun%]',\n group: 0,\n tag: 'Noun',\n notIf: '#Copula',\n reason: 'the-adj-verb',\n },\n // the truly nice swim\n { match: '(the|this|those|these) #Adverb #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'determiner4' },\n //the wait to vote\n { match: 'the [#Verb] #Preposition .', group: 0, tag: 'Noun', reason: 'determiner1' },\n //a sense of\n { match: '(a|an|the) [#Verb] of', group: 0, tag: 'Noun', reason: 'the-verb-of' },\n //the threat of force\n { match: '#Determiner #Noun of [#Verb]', group: 0, tag: 'Noun', notIf: '#Gerund', reason: 'noun-of-noun' },\n // ended in ruins\n {\n match: '#PastTense #Preposition [#PresentTense]',\n group: 0,\n notIf: '#Gerund',\n tag: 'Noun',\n reason: 'ended-in-ruins',\n },\n //'u' as pronoun\n { match: '#Conjunction [u]', group: 0, tag: 'Pronoun', reason: 'u-pronoun-2' },\n { match: '[u] #Verb', group: 0, tag: 'Pronoun', reason: 'u-pronoun-1' },\n //the western line\n {\n match: '#Determiner [(western|eastern|northern|southern|central)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'western-line',\n },\n //air-flow\n { match: '(#Singular && @hasHyphen) #PresentTense', tag: 'Noun', reason: 'hyphen-verb' },\n //is no walk\n { match: 'is no [#Verb]', group: 0, tag: 'Noun', reason: 'is-no-verb' },\n //do so\n { match: 'do [so]', group: 0, tag: 'Noun', reason: 'so-noun' },\n // what the hell\n { match: '#Determiner [(shit|damn|hell)]', group: 0, tag: 'Noun', reason: 'swears-noun' },\n // go to shit\n { match: 'to [(shit|hell)]', group: 0, tag: 'Noun', reason: 'to-swears' },\n // the staff were\n { match: '(the|these) [#Singular] (were|are)', group: 0, tag: 'Plural', reason: 'singular-were' },\n // a comdominium, or simply condo\n { match: `a #Noun+ or #Adverb+? [#Verb]`, group: 0, tag: 'Noun', reason: 'noun-or-noun' },\n // walk the walk\n {\n match: '(the|those|these|a|an) #Adjective? [#PresentTense #Particle?]',\n group: 0,\n tag: 'Noun',\n notIf: '(seem|appear|include|#Gerund|#Copula)',\n reason: 'det-inf',\n },\n // { match: '(the|those|these|a|an) #Adjective? [#PresentTense #Particle?]', group: 0, tag: 'Noun', notIf: '(#Gerund|#Copula)', reason: 'det-pres' },\n\n // ==== Actor ====\n //Aircraft designer\n { match: '#Noun #Actor', tag: 'Actor', notIf: '(#Person|#Pronoun)', reason: 'thing-doer' },\n //lighting designer\n { match: '#Gerund #Actor', tag: 'Actor', reason: 'gerund-doer' },\n // captain sanders\n // { match: '[#Actor+] #ProperNoun', group: 0, tag: 'Honorific', reason: 'sgt-kelly' },\n // co-founder\n { match: `co #Singular`, tag: 'Actor', reason: 'co-noun' },\n // co-founder\n {\n match: `[#Noun+] #Actor`,\n group: 0,\n tag: 'Actor',\n notIf: '(#Honorific|#Pronoun|#Possessive)',\n reason: 'air-traffic-controller',\n },\n // fine-artist\n {\n match: `(urban|cardiac|cardiovascular|respiratory|medical|clinical|visual|graphic|creative|dental|exotic|fine|certified|registered|technical|virtual|professional|amateur|junior|senior|special|pharmaceutical|theoretical)+ #Noun? #Actor`,\n tag: 'Actor',\n reason: 'fine-artist',\n },\n // dance coach\n {\n match: `#Noun+ (coach|chef|king|engineer|fellow|personality|boy|girl|man|woman|master)`,\n tag: 'Actor',\n reason: 'dance-coach',\n },\n // chief design officer\n { match: `chief . officer`, tag: 'Actor', reason: 'chief-x-officer' },\n // chief of police\n { match: `chief of #Noun+`, tag: 'Actor', reason: 'chief-of-police' },\n // president of marketing\n { match: `senior? vice? president of #Noun+`, tag: 'Actor', reason: 'president-of' },\n\n // ==== Singular ====\n //the sun\n { match: '#Determiner [sun]', group: 0, tag: 'Singular', reason: 'the-sun' },\n //did a 900, paid a 20\n { match: '#Verb (a|an) [#Value]$', group: 0, tag: 'Singular', reason: 'did-a-value' },\n //'the can'\n { match: 'the [(can|will|may)]', group: 0, tag: 'Singular', reason: 'the can' },\n\n // ==== Possessive ====\n //spencer kelly's\n { match: '#FirstName #Acronym? (#Possessive && #LastName)', tag: 'Possessive', reason: 'name-poss' },\n //Super Corp's fundraiser\n { match: '#Organization+ #Possessive', tag: 'Possessive', reason: 'org-possessive' },\n //Los Angeles's fundraiser\n { match: '#Place+ #Possessive', tag: 'Possessive', reason: 'place-possessive' },\n // Ptolemy's experiments\n { match: '#Possessive #PresentTense #Particle?', notIf: '(#Gerund|her)', tag: 'Noun', reason: 'possessive-verb' }, // anna's eating vs anna's eating lunch\n // my presidents house\n { match: '(my|our|their|her|his|its) [(#Plural && #Actor)] #Noun', tag: 'Possessive', reason: 'my-dads' },\n\n // 10th of a second\n { match: '#Value of a [second]', group: 0, unTag: 'Value', tag: 'Singular', reason: '10th-of-a-second' },\n // 10 seconds\n { match: '#Value [seconds]', group: 0, unTag: 'Value', tag: 'Plural', reason: '10-seconds' },\n // in time\n { match: 'in [#Infinitive]', group: 0, tag: 'Singular', reason: 'in-age' },\n // a minor in\n { match: 'a [#Adjective] #Preposition', group: 0, tag: 'Noun', reason: 'a-minor-in' },\n //the repairer said\n { match: '#Determiner [#Singular] said', group: 0, tag: 'Actor', reason: 'the-actor-said' },\n //the euro sense\n {\n match: `#Determiner #Noun [${infNouns}] !(#Preposition|to|#Adverb)?`,\n group: 0,\n tag: 'Noun',\n reason: 'the-noun-sense',\n },\n // photographs of a computer are\n { match: '[#PresentTense] (of|by|for) (a|an|the) #Noun #Copula', group: 0, tag: 'Plural', reason: 'photographs-of' },\n // fight and win\n { match: '#Infinitive and [%Noun|Verb%]', group: 0, tag: 'Infinitive', reason: 'fight and win' },\n // peace and flowers and love\n { match: '#Noun and [#Verb] and #Noun', group: 0, tag: 'Noun', reason: 'peace-and-flowers' },\n // the 1992 classic\n { match: 'the #Cardinal [%Adj|Noun%]', group: 0, tag: 'Noun', reason: 'the-1992-classic' },\n // the premier university\n { match: '#Copula the [%Adj|Noun%] #Noun', group: 0, tag: 'Adjective', reason: 'the-premier-university' },\n\n // scottish - i ate me sandwich\n { match: 'i #Verb [me] #Noun', group: 0, tag: 'Possessive', reason: 'scottish-me' },\n // dance music\n {\n match: '[#PresentTense] (music|class|lesson|night|party|festival|league|ceremony)',\n group: 0,\n tag: 'Noun',\n reason: 'dance-music',\n },\n // wit it\n { match: '[wit] (me|it)', group: 0, tag: 'Presposition', reason: 'wit-me' },\n //left-her-boots, shoved her hand\n { match: '#PastTense #Possessive [#Verb]', group: 0, tag: 'Noun', notIf: '(saw|made)', reason: 'left-her-boots' },\n //35 signs\n { match: '#Value [%Plural|Verb%]', group: 0, tag: 'Plural', notIf: '(one|1|a|an)', reason: '35-signs' },\n //had time\n { match: 'had [#PresentTense]', group: 0, tag: 'Noun', notIf: '(#Gerund|come|become)', reason: 'had-time' },\n //instant access\n { match: '%Adj|Noun% %Noun|Verb%', tag: '#Adjective #Noun', notIf: '#ProperNoun #Noun', reason: 'instant-access' },\n // a representative to\n { match: '#Determiner [%Adj|Noun%] #Conjunction', group: 0, tag: 'Noun', reason: 'a-rep-to' },\n // near death experiences, ambitious sales targets\n {\n match: '#Adjective #Noun [%Plural|Verb%]$',\n group: 0,\n tag: 'Plural',\n notIf: '#Pronoun',\n reason: 'near-death-experiences',\n },\n // your guild colors\n { match: '#Possessive #Noun [%Plural|Verb%]$', group: 0, tag: 'Plural', reason: 'your-guild-colors' },\n]\n","export default [\n // the planning processes\n { match: '(this|that|the|a|an) [#Gerund #Infinitive]', group: 0, tag: 'Singular', reason: 'the-planning-process' },\n // the paving stones\n { match: '(that|the) [#Gerund #PresentTense]', group: 0, ifNo: '#Copula', tag: 'Plural', reason: 'the-paving-stones' },\n // this swimming\n // { match: '(this|that|the) [#Gerund]', group: 0, tag: 'Noun', reason: 'this-gerund' },\n // the remaining claims\n { match: '#Determiner [#Gerund] #Noun', group: 0, tag: 'Adjective', reason: 'the-gerund-noun' },\n // i think tipping sucks\n { match: `#Pronoun #Infinitive [#Gerund] #PresentTense`, group: 0, tag: 'Noun', reason: 'tipping-sucks' },\n // early warning\n { match: '#Adjective [#Gerund]', group: 0, tag: 'Noun', notIf: '(still|even|just)', reason: 'early-warning' },\n //walking is cool\n { match: '[#Gerund] #Adverb? not? #Copula', group: 0, tag: 'Activity', reason: 'gerund-copula' },\n //are doing is\n { match: '#Copula [(#Gerund|#Activity)] #Copula', group: 0, tag: 'Gerund', reason: 'are-doing-is' },\n //walking should be fun\n { match: '[#Gerund] #Modal', group: 0, tag: 'Activity', reason: 'gerund-modal' },\n // finish listening\n // { match: '#Infinitive [#Gerund]', group: 0, tag: 'Activity', reason: 'finish-listening' },\n // the ruling party\n\n // responsibility for setting\n { match: '#Singular for [%Noun|Gerund%]', group: 0, tag: 'Gerund', reason: 'noun-for-gerund' },\n // better for training\n { match: '#Comparative (for|at) [%Noun|Gerund%]', group: 0, tag: 'Gerund', reason: 'better-for-gerund' },\n // keep the touching\n { match: '#PresentTense the [#Gerund]', group: 0, tag: 'Noun', reason: 'keep-the-touching' },\n]\n","export default [\n // do the dance\n { match: '#Infinitive (this|that|the) [#Infinitive]', group: 0, tag: 'Noun', reason: 'do-this-dance' },\n //running-a-show\n { match: '#Gerund #Determiner [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-a-show' },\n //the-only-reason\n { match: '#Determiner (only|further|just|more|backward) [#Infinitive]', group: 0, tag: 'Noun', reason: 'the-only-reason' },\n // a stream runs\n { match: '(the|this|a|an) [#Infinitive] #Adverb? #Verb', group: 0, tag: 'Noun', reason: 'determiner5' },\n //a nice deal\n { match: '#Determiner #Adjective #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'a-nice-inf' },\n // the mexican train\n { match: '#Determiner #Demonym [#PresentTense]', group: 0, tag: 'Noun', reason: 'mexican-train' },\n //next career move\n { match: '#Adjective #Noun+ [#Infinitive] #Copula', group: 0, tag: 'Noun', reason: 'career-move' },\n // at some point\n { match: 'at some [#Infinitive]', group: 0, tag: 'Noun', reason: 'at-some-inf' },\n // goes to sleep\n { match: '(go|goes|went) to [#Infinitive]', group: 0, tag: 'Noun', reason: 'goes-to-verb' },\n //a close watch on\n { match: '(a|an) #Adjective? #Noun [#Infinitive] (#Preposition|#Noun)', group: 0, notIf: 'from', tag: 'Noun', reason: 'a-noun-inf' },\n //a tv show\n { match: '(a|an) #Noun [#Infinitive]$', group: 0, tag: 'Noun', reason: 'a-noun-inf2' },\n //is mark hughes\n // { match: '#Copula [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'is-pres-noun' },\n // good wait staff\n // { match: '#Adjective [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'good-wait-staff' },\n // running for congress\n { match: '#Gerund #Adjective? for [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-for' },\n // running to work\n // { match: '#Gerund #Adjective to [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-to' },\n // about love\n { match: 'about [#Infinitive]', group: 0, tag: 'Singular', reason: 'about-love' },\n // singers on stage\n { match: '#Plural on [#Infinitive]', group: 0, tag: 'Noun', reason: 'on-stage' },\n // any charge\n { match: 'any [#Infinitive]', group: 0, tag: 'Noun', reason: 'any-charge' },\n // no doubt\n { match: 'no [#Infinitive]', group: 0, tag: 'Noun', reason: 'no-doubt' },\n // number of seats\n { match: 'number of [#PresentTense]', group: 0, tag: 'Noun', reason: 'number-of-x' },\n // teaches/taught\n { match: '(taught|teaches|learns|learned) [#PresentTense]', group: 0, tag: 'Noun', reason: 'teaches-x' },\n // use reverse\n { match: '(try|use|attempt|build|make) [#Verb #Particle?]', notIf: '(#Copula|#Noun|sure|fun|up)', group: 0, tag: 'Noun', reason: 'do-verb' },//make sure of\n // checkmate is\n { match: '^[#Infinitive] (is|was)', group: 0, tag: 'Noun', reason: 'checkmate-is' },\n // get much sleep\n { match: '#Infinitive much [#Infinitive]', group: 0, tag: 'Noun', reason: 'get-much' },\n // cause i gotta\n { match: '[cause] #Pronoun #Verb', group: 0, tag: 'Conjunction', reason: 'cause-cuz' },\n // the cardio dance party\n { match: 'the #Singular [#Infinitive] #Noun', group: 0, tag: 'Noun', notIf: '#Pronoun', reason: 'cardio-dance' },\n\n // that should smoke\n { match: '#Determiner #Modal [#Noun]', group: 0, tag: 'PresentTense', reason: 'should-smoke' },\n //this rocks\n { match: 'this [#Plural]', group: 0, tag: 'PresentTense', notIf: '(#Preposition|#Date)', reason: 'this-verbs' },\n //voice that rocks\n { match: '#Noun that [#Plural]', group: 0, tag: 'PresentTense', notIf: '(#Preposition|#Pronoun|way)', reason: 'voice-that-rocks' },\n //that leads to\n { match: 'that [#Plural] to', group: 0, tag: 'PresentTense', notIf: '#Preposition', reason: 'that-leads-to' },\n //let him glue\n {\n match: '(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)',\n group: 0,\n tag: 'Infinitive',\n reason: 'let-him-glue',\n },\n\n // assign all tasks\n { match: '#Verb (all|every|each|most|some|no) [#PresentTense]', notIf: '#Modal', group: 0, tag: 'Noun', reason: 'all-presentTense' }, // PresentTense/Noun ambiguities\n // big dreams, critical thinking\n // have big dreams\n { match: '(had|have|#PastTense) #Adjective [#PresentTense]', group: 0, tag: 'Noun', notIf: 'better', reason: 'adj-presentTense' },\n // excellent answer spencer\n // { match: '^#Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'start adj-presentTense' },\n // one big reason\n { match: '#Value #Adjective [#PresentTense]', group: 0, tag: 'Noun', notIf: '#Copula', reason: 'one-big-reason' },\n // won widespread support\n { match: '#PastTense #Adjective+ [#PresentTense]', group: 0, tag: 'Noun', notIf: '(#Copula|better)', reason: 'won-wide-support' },\n // many poses\n { match: '(many|few|several|couple) [#PresentTense]', group: 0, tag: 'Noun', notIf: '#Copula', reason: 'many-poses' },\n // very big dreams\n { match: '#Determiner #Adverb #Adjective [%Noun|Verb%]', group: 0, tag: 'Noun', notIf: '#Copula', reason: 'very-big-dream' },\n // from start to finish\n { match: 'from #Noun to [%Noun|Verb%]', group: 0, tag: 'Noun', reason: 'start-to-finish' },\n // for comparison or contrast\n { match: '(for|with|of) #Noun (and|or|not) [%Noun|Verb%]', group: 0, tag: 'Noun', notIf: '#Pronoun', reason: 'for-food-and-gas' },\n // adorable little store\n { match: '#Adjective #Adjective [#PresentTense]', group: 0, tag: 'Noun', notIf: '#Copula', reason: 'adorable-little-store' },\n // of basic training\n // { match: '#Preposition #Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'of-basic-training' },\n // justifiying higher costs\n { match: '#Gerund #Adverb? #Comparative [#PresentTense]', group: 0, tag: 'Noun', notIf: '#Copula', reason: 'higher-costs' },\n\n { match: '(#Noun && @hasComma) #Noun (and|or) [#PresentTense]', group: 0, tag: 'Noun', notIf: '#Copula', reason: 'noun-list' },\n\n // any questions for\n { match: '(many|any|some|several) [#PresentTense] for', group: 0, tag: 'Noun', reason: 'any-verbs-for' },\n // to facilitate gas exchange with\n { match: `to #PresentTense #Noun [#PresentTense] #Preposition`, group: 0, tag: 'Noun', reason: 'gas-exchange' },\n // waited until release\n { match: `#PastTense (until|as|through|without) [#PresentTense]`, group: 0, tag: 'Noun', reason: 'waited-until-release' },\n // selling like hot cakes\n { match: `#Gerund like #Adjective? [#PresentTense]`, group: 0, tag: 'Plural', reason: 'like-hot-cakes' },\n // some valid reason\n { match: `some #Adjective [#PresentTense]`, group: 0, tag: 'Noun', reason: 'some-reason' },\n // for some reason\n { match: `for some [#PresentTense]`, group: 0, tag: 'Noun', reason: 'for-some-reason' },\n // same kind of shouts\n { match: `(same|some|the|that|a) kind of [#PresentTense]`, group: 0, tag: 'Noun', reason: 'some-kind-of' },\n // a type of shout\n { match: `(same|some|the|that|a) type of [#PresentTense]`, group: 0, tag: 'Noun', reason: 'some-type-of' },\n // doing better for fights\n { match: `#Gerund #Adjective #Preposition [#PresentTense]`, group: 0, tag: 'Noun', reason: 'doing-better-for-x' },\n // get better aim\n { match: `(get|got|have) #Comparative [#PresentTense]`, group: 0, tag: 'Noun', reason: 'got-better-aim' },\n // whose name was\n { match: 'whose [#PresentTense] #Copula', group: 0, tag: 'Noun', reason: 'whos-name-was' },\n // give up on reason\n { match: `#PhrasalVerb #Particle #Preposition [#PresentTense]`, group: 0, tag: 'Noun', reason: 'given-up-on-x' },\n //there are reasons\n { match: 'there (are|were) #Adjective? [#PresentTense]', group: 0, tag: 'Plural', reason: 'there-are' },\n // 30 trains\n { match: '#Value [#PresentTense] of', group: 0, notIf: '(one|1|#Copula|#Infinitive)', tag: 'Plural', reason: '2-trains' },\n // compromises are possible\n { match: '[#PresentTense] (are|were) #Adjective', group: 0, tag: 'Plural', reason: 'compromises-are-possible' },\n // hope i helped\n { match: '^[(hope|guess|thought|think)] #Pronoun #Verb', group: 0, tag: 'Infinitive', reason: 'suppose-i' },\n //pursue its dreams\n // { match: '#PresentTense #Possessive [#PresentTense]', notIf: '#Gerund', group: 0, tag: 'Plural', reason: 'pursue-its-dreams' },\n // our unyielding support\n { match: '#Possessive #Adjective [#Verb]', group: 0, tag: 'Noun', notIf: '#Copula', reason: 'our-full-support' },\n // tastes good\n { match: '[(tastes|smells)] #Adverb? #Adjective', group: 0, tag: 'PresentTense', reason: 'tastes-good' },\n // are you playing golf\n // { match: '^are #Pronoun [#Noun]', group: 0, notIf: '(here|there)', tag: 'Verb', reason: 'are-you-x' },\n // ignoring commute\n { match: '#Copula #Gerund [#PresentTense] !by?', group: 0, tag: 'Noun', notIf: 'going', reason: 'ignoring-commute' },\n // noun-pastTense variables\n { match: '#Determiner #Adjective? [(shed|thought|rose|bid|saw|spelt)]', group: 0, tag: 'Noun', reason: 'noun-past' },\n\n // 'verb-to'\n // how to watch\n { match: 'how to [%Noun|Verb%]', group: 0, tag: 'Infinitive', reason: 'how-to-noun' },\n // which boost it\n { match: 'which [%Noun|Verb%] #Noun', group: 0, tag: 'Infinitive', reason: 'which-boost-it' },\n // asking questions\n { match: '#Gerund [%Plural|Verb%]', group: 0, tag: 'Plural', reason: 'asking-questions' },\n // ready to stream\n { match: '(ready|available|difficult|hard|easy|made|attempt|try) to [%Noun|Verb%]', group: 0, tag: 'Infinitive', reason: 'ready-to-noun' },\n // bring to market\n { match: '(bring|went|go|drive|run|bike) to [%Noun|Verb%]', group: 0, tag: 'Noun', reason: 'bring-to-noun' },\n // can i sleep, would you look\n { match: '#Modal #Noun [%Noun|Verb%]', group: 0, tag: 'Infinitive', reason: 'would-you-look' },\n // is just spam\n { match: '#Copula just [#Infinitive]', group: 0, tag: 'Noun', reason: 'is-just-spam' },\n // request copies\n { match: '^%Noun|Verb% %Plural|Verb%', tag: 'Imperative #Plural', reason: 'request-copies' },\n // homemade pickles and drinks\n { match: '#Adjective #Plural and [%Plural|Verb%]', group: 0, tag: '#Plural', reason: 'pickles-and-drinks' },\n // the 1968 film\n { match: '#Determiner #Year [#Verb]', group: 0, tag: 'Noun', reason: 'the-1968-film' },\n // the break up\n { match: '#Determiner [#PhrasalVerb #Particle]', group: 0, tag: 'Noun', reason: 'the-break-up' },\n // the individual goals\n { match: '#Determiner [%Adj|Noun%] #Noun', group: 0, tag: 'Adjective', notIf: '(#Pronoun|#Possessive|#ProperNoun)', reason: 'the-individual-goals' },\n // work or prepare\n { match: '[%Noun|Verb%] or #Infinitive', group: 0, tag: 'Infinitive', reason: 'work-or-prepare' },\n // to give thanks\n { match: 'to #Infinitive [#PresentTense]', group: 0, tag: 'Noun', notIf: '(#Gerund|#Copula|help)', reason: 'to-give-thanks' },\n // kills me\n { match: '[#Noun] me', group: 0, tag: 'Verb', reason: 'kills-me' },\n // removes wrinkles\n { match: '%Plural|Verb% %Plural|Verb%', tag: '#PresentTense #Plural', reason: 'removes-wrinkles' },\n]\n","export default [\n { match: '#Money and #Money #Currency?', tag: 'Money', reason: 'money-and-money' },\n // 6 dollars and 5 cents\n { match: '#Value #Currency [and] #Value (cents|ore|centavos|sens)', group: 0, tag: 'money', reason: 'and-5-cents' },\n // maybe currencies\n { match: '#Value (mark|rand|won|rub|ore)', tag: '#Money #Currency', reason: '4-mark' },\n // 3 pounds\n { match: 'a pound', tag: '#Money #Unit', reason: 'a-pound' },\n { match: '#Value (pound|pounds)', tag: '#Money #Unit', reason: '4-pounds' },\n]\n","export default [\n // half a penny\n { match: '[(half|quarter)] of? (a|an)', group: 0, tag: 'Fraction', reason: 'millionth' },\n // nearly half\n { match: '#Adverb [half]', group: 0, tag: 'Fraction', reason: 'nearly-half' },\n // half the\n { match: '[half] the', group: 0, tag: 'Fraction', reason: 'half-the' },\n // and a half\n { match: '#Cardinal and a half', tag: 'Fraction', reason: 'and-a-half' },\n // two-halves\n { match: '#Value (halves|halfs|quarters)', tag: 'Fraction', reason: 'two-halves' },\n\n // ---ordinals as fractions---\n // a fifth\n { match: 'a #Ordinal', tag: 'Fraction', reason: 'a-quarter' },\n // seven fifths\n { match: '[#Cardinal+] (#Fraction && /s$/)', tag: 'Fraction', reason: 'seven-fifths' },\n // doc.match('(#Fraction && /s$/)').lookBefore('#Cardinal+$').tag('Fraction')\n // one third of ..\n { match: '[#Cardinal+ #Ordinal] of .', group: 0, tag: 'Fraction', reason: 'ordinal-of' },\n // 100th of\n { match: '[(#NumericValue && #Ordinal)] of .', group: 0, tag: 'Fraction', reason: 'num-ordinal-of' },\n // a twenty fifth\n { match: '(a|one) #Cardinal?+ #Ordinal', tag: 'Fraction', reason: 'a-ordinal' },\n\n // // '3 out of 5'\n { match: '#Cardinal+ out? of every? #Cardinal', tag: 'Fraction', reason: 'out-of' },\n]\n\n// {match:'', tag:'',reason:''},\n","export default [\n // ==== Ambiguous numbers ====\n // 'second'\n { match: `#Cardinal [second]`, tag: 'Unit', reason: 'one-second' },\n //'a/an' can mean 1 - \"a hour\"\n {\n match: '!once? [(a|an)] (#Duration|hundred|thousand|million|billion|trillion)',\n group: 0,\n tag: 'Value',\n reason: 'a-is-one',\n },\n // ==== PhoneNumber ====\n //1 800 ...\n { match: '1 #Value #PhoneNumber', tag: 'PhoneNumber', reason: '1-800-Value' },\n //(454) 232-9873\n { match: '#NumericValue #PhoneNumber', tag: 'PhoneNumber', reason: '(800) PhoneNumber' },\n\n // ==== Currency ====\n // chinese yuan\n { match: '#Demonym #Currency', tag: 'Currency', reason: 'demonym-currency' },\n // ten bucks\n { match: '#Value [(buck|bucks|grand)]', group: 0, tag: 'Currency', reason: 'value-bucks' },\n // ==== Money ====\n { match: '[#Value+] #Currency', group: 0, tag: 'Money', reason: '15 usd' },\n\n // ==== Ordinal ====\n { match: '[second] #Noun', group: 0, tag: 'Ordinal', reason: 'second-noun' },\n\n // ==== Units ====\n //5 yan\n { match: '#Value+ [#Currency]', group: 0, tag: 'Unit', reason: '5-yan' },\n { match: '#Value [(foot|feet)]', group: 0, tag: 'Unit', reason: 'foot-unit' },\n //5 kg.\n { match: '#Value [#Abbreviation]', group: 0, tag: 'Unit', reason: 'value-abbr' },\n { match: '#Value [k]', group: 0, tag: 'Unit', reason: 'value-k' },\n { match: '#Unit an hour', tag: 'Unit', reason: 'unit-an-hour' },\n\n // ==== Magnitudes ====\n //minus 7\n { match: '(minus|negative) #Value', tag: 'Value', reason: 'minus-value' },\n //seven point five\n { match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'value-point-value' },\n //quarter million\n { match: '#Determiner [(half|quarter)] #Ordinal', group: 0, tag: 'Value', reason: 'half-ordinal' },\n // thousand and two\n { match: `#Multiple+ and #Value`, tag: 'Value', reason: 'magnitude-and-value' },\n // ambiguous units like 'gb'\n // { match: '#Value square? [(kb|mb|gb|tb|ml|pt|qt|tbl|tbsp|km|cm|mm|mi|ft|yd|kg|hg|mg|oz|lb|mph|pa|miles|yard|yards|pound|pounds)]', group: 0, tag: 'Unit', reason: '12-gb' },\n // 5 miles per hour\n { match: '#Value #Unit [(per|an) (hr|hour|sec|second|min|minute)]', group: 0, tag: 'Unit', reason: '12-miles-per-second' },\n // 5 square miles\n { match: '#Value [(square|cubic)] #Unit', group: 0, tag: 'Unit', reason: 'square-miles' },\n // 5) The expenses\n // { match: '^[#Value] (#Determiner|#Gerund)', group: 0, tag: 'Expression', unTag: 'Value', reason: 'numbered-list' },\n]\n","export default [\n // ==== FirstNames ====\n //is foo Smith\n { match: '#Copula [(#Noun|#PresentTense)] #LastName', group: 0, tag: 'FirstName', reason: 'copula-noun-lastname' },\n //pope francis\n {\n match: '(sister|pope|brother|father|aunt|uncle|grandpa|grandfather|grandma) #ProperNoun',\n tag: 'Person',\n reason: 'lady-titlecase',\n safe: true,\n },\n\n // ==== Nickname ====\n // Dwayne 'the rock' Johnson\n { match: '#FirstName [#Determiner #Noun] #LastName', group: 0, tag: 'Person', reason: 'first-noun-last' },\n {\n match: '#ProperNoun (b|c|d|e|f|g|h|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z) #ProperNoun',\n tag: 'Person',\n reason: 'titlecase-acronym-titlecase',\n safe: true,\n },\n { match: '#Acronym #LastName', tag: 'Person', reason: 'acronym-lastname', safe: true },\n { match: '#Person (jr|sr|md)', tag: 'Person', reason: 'person-honorific' },\n //remove single 'mr'\n { match: '#Honorific #Acronym', tag: 'Person', reason: 'Honorific-TitleCase' },\n { match: '#Person #Person the? #RomanNumeral', tag: 'Person', reason: 'roman-numeral' },\n { match: '#FirstName [/^[^aiurck]$/]', group: 0, tag: ['Acronym', 'Person'], reason: 'john-e' },\n //j.k Rowling\n { match: '#Noun van der? #Noun', tag: 'Person', reason: 'van der noun', safe: true },\n //king of spain\n { match: '(king|queen|prince|saint|lady) of #Noun', tag: 'Person', reason: 'king-of-noun', safe: true },\n //lady Florence\n { match: '(prince|lady) #Place', tag: 'Person', reason: 'lady-place' },\n //saint Foo\n { match: '(king|queen|prince|saint) #ProperNoun', tag: 'Person', notIf: '#Place', reason: 'saint-foo' },\n\n // al sharpton\n { match: 'al (#Person|#ProperNoun)', tag: 'Person', reason: 'al-borlen', safe: true },\n //ferdinand de almar\n { match: '#FirstName de #Noun', tag: 'Person', reason: 'bill-de-noun' },\n //Osama bin Laden\n { match: '#FirstName (bin|al) #Noun', tag: 'Person', reason: 'bill-al-noun' },\n //John L. Foo\n { match: '#FirstName #Acronym #ProperNoun', tag: 'Person', reason: 'bill-acronym-title' },\n //Andrew Lloyd Webber\n { match: '#FirstName #FirstName #ProperNoun', tag: 'Person', reason: 'bill-firstname-title' },\n //Mr Foo\n { match: '#Honorific #FirstName? #ProperNoun', tag: 'Person', reason: 'dr-john-Title' },\n //peter the great\n { match: '#FirstName the #Adjective', tag: 'Person', reason: 'name-the-great' },\n\n // dick van dyke\n { match: '#ProperNoun (van|al|bin) #ProperNoun', tag: 'Person', reason: 'title-van-title', safe: true },\n //jose de Sucre\n { match: '#ProperNoun (de|du) la? #ProperNoun', tag: 'Person', notIf: '#Place', reason: 'title-de-title' },\n //Jani K. Smith\n { match: '#Singular #Acronym #LastName', tag: '#FirstName #Person .', reason: 'title-acro-noun', safe: true },\n //Foo Ford\n { match: '[#ProperNoun] #Person', group: 0, tag: 'Person', reason: 'proper-person', safe: true },\n // john keith jones\n {\n match: '#Person [#ProperNoun #ProperNoun]',\n group: 0,\n tag: 'Person',\n notIf: '#Possessive',\n reason: 'three-name-person',\n safe: true,\n },\n //John Foo\n {\n match: '#FirstName #Acronym? [#ProperNoun]',\n group: 0,\n tag: 'LastName',\n notIf: '#Possessive',\n reason: 'firstname-titlecase',\n },\n // john stewart\n { match: '#FirstName [#FirstName]', group: 0, tag: 'LastName', reason: 'firstname-firstname' },\n //Joe K. Sombrero\n { match: '#FirstName #Acronym #Noun', tag: 'Person', reason: 'n-acro-noun', safe: true },\n //Anthony de Marco\n { match: '#FirstName [(de|di|du|van|von)] #Person', group: 0, tag: 'LastName', reason: 'de-firstname' },\n\n // baker jenna smith\n // { match: '[#Actor+] #Person', group: 0, tag: 'Person', reason: 'baker-sam-smith' },\n // sergeant major Harold\n {\n match:\n '[(lieutenant|corporal|sergeant|captain|qeen|king|admiral|major|colonel|marshal|president|queen|king)+] #ProperNoun',\n group: 0,\n tag: 'Honorific',\n reason: 'seargeant-john',\n },\n // ==== Honorics ====\n {\n match: '[(private|general|major|rear|prime|field|count|miss)] #Honorific? #Person',\n group: 0,\n tag: ['Honorific', 'Person'],\n reason: 'ambg-honorifics',\n },\n // dr john foobar\n {\n match: '#Honorific #FirstName [#Singular]',\n group: 0,\n tag: 'LastName',\n notIf: '#Possessive',\n reason: 'dr-john-foo',\n safe: true,\n },\n //his-excellency\n {\n match: '[(his|her) (majesty|honour|worship|excellency|honorable)] #Person',\n group: 0,\n tag: 'Honorific',\n reason: 'his-excellency',\n },\n // Lieutenant colonel\n { match: '#Honorific #Actor', tag: 'Honorific', reason: 'Lieutenant colonel' },\n // first lady, second admiral\n { match: '(first|second|third|1st|2nd|3rd) #Actor', tag: 'Honorific', reason: 'first lady' },\n // Louis IV\n { match: '#Person #RomanNumeral', tag: 'Person', reason: 'louis-IV' },\n]\n","// const personAdj = '(misty|rusty|dusty|rich|randy|sandy|young|earnest|frank|brown)'\n\nexport default [\n // ebenezer scrooge\n {\n match: '#FirstName #Noun$',\n tag: '. #LastName',\n notIf: '(#Possessive|#Organization|#Place|#Pronoun|@hasTitleCase)',\n reason: 'firstname-noun',\n },\n\n // ===person-date===\n { match: '%Person|Date% #Acronym? #ProperNoun', tag: 'Person', reason: 'jan-thierson' },\n // ===person-noun===\n //Cliff Clavin\n { match: '%Person|Noun% #Acronym? #ProperNoun', tag: 'Person', reason: 'switch-person', safe: true },\n // olive garden\n { match: '%Person|Noun% #Organization', tag: 'Organization', reason: 'olive-garden' },\n // ===person-verb===\n // ollie faroo\n { match: '%Person|Verb% #Acronym? #ProperNoun', tag: 'Person', reason: 'verb-propernoun', ifNo: '#Actor' },\n // chuck will ...\n {\n match: `[%Person|Verb%] (will|had|has|said|says|told|did|learned|wants|wanted)`,\n group: 0,\n tag: 'Person',\n reason: 'person-said',\n },\n\n // ===person-place===\n //sydney harbour\n {\n match: `[%Person|Place%] (harbor|harbour|pier|town|city|place|dump|landfill)`,\n group: 0,\n tag: 'Place',\n reason: 'sydney-harbour',\n },\n // east sydney\n { match: `(west|east|north|south) [%Person|Place%]`, group: 0, tag: 'Place', reason: 'east-sydney' },\n\n // ===person-adjective===\n // rusty smith\n // { match: `${personAdj} #Person`, tag: 'Person', reason: 'randy-smith' },\n // rusty a. smith\n // { match: `${personAdj} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rusty-smith' },\n // very rusty\n // { match: `#Adverb [${personAdj}]`, group: 0, tag: 'Adjective', reason: 'really-rich' },\n\n // ===person-verb===\n // would wade\n { match: `#Modal [%Person|Verb%]`, group: 0, tag: 'Verb', reason: 'would-mark' },\n // really wade\n { match: `#Adverb [%Person|Verb%]`, group: 0, tag: 'Verb', reason: 'really-mark' },\n // drew closer\n { match: `[%Person|Verb%] (#Adverb|#Comparative)`, group: 0, tag: 'Verb', reason: 'drew-closer' },\n // wade smith\n { match: `%Person|Verb% #Person`, tag: 'Person', reason: 'rob-smith' },\n // wade m. Cooper\n { match: `%Person|Verb% #Acronym #ProperNoun`, tag: 'Person', reason: 'rob-a-smith' },\n // will go\n { match: '[will] #Verb', group: 0, tag: 'Modal', reason: 'will-verb' },\n // will Pharell\n { match: '(will && @isTitleCase) #ProperNoun', tag: 'Person', reason: 'will-name' },\n // jack layton won\n {\n match: '(#FirstName && !#Possessive) [#Singular] #Verb',\n group: 0,\n safe: true,\n tag: 'LastName',\n reason: 'jack-layton',\n },\n // sherwood anderson told\n { match: '^[#Singular] #Person #Verb', group: 0, safe: true, tag: 'Person', reason: 'sherwood-anderson' },\n // bought a warhol\n { match: '(a|an) [#Person]$', group: 0, unTag: 'Person', reason: 'a-warhol' },\n]\n","export default [\n //sometimes adverbs - 'pretty good','well above'\n {\n match: '#Copula (pretty|dead|full|well|sure) (#Adjective|#Noun)',\n tag: '#Copula #Adverb #Adjective',\n reason: 'sometimes-adverb',\n },\n //i better ..\n { match: '(#Pronoun|#Person) (had|#Adverb)? [better] #PresentTense', group: 0, tag: 'Modal', reason: 'i-better' },\n // adj -> gerund\n // like\n { match: '(#Modal|i|they|we|do) not? [like]', group: 0, tag: 'PresentTense', reason: 'modal-like' },\n // ==== Tense ====\n //he left\n { match: '#Noun #Adverb? [left]', group: 0, tag: 'PastTense', reason: 'left-verb' },\n\n // ==== Copula ====\n //will be running (not copula)\n { match: 'will #Adverb? not? #Adverb? [be] #Gerund', group: 0, tag: 'Copula', reason: 'will-be-copula' },\n //for more complex forms, just tag 'be'\n { match: 'will #Adverb? not? #Adverb? [be] #Adjective', group: 0, tag: 'Copula', reason: 'be-copula' },\n // ==== Infinitive ====\n //march to\n { match: '[march] (up|down|back|toward)', notIf: '#Date', group: 0, tag: 'Infinitive', reason: 'march-to' },\n //must march\n { match: '#Modal [march]', group: 0, tag: 'Infinitive', reason: 'must-march' },\n // may be\n { match: `[may] be`, group: 0, tag: 'Verb', reason: 'may-be' },\n // subject to\n { match: `[(subject|subjects|subjected)] to`, group: 0, tag: 'Verb', reason: 'subject to' },\n // subject to\n { match: `[home] to`, group: 0, tag: 'PresentTense', reason: 'home to' },\n\n // === misc==\n // side with\n // { match: '[(side|fool|monkey)] with', group: 0, tag: 'Infinitive', reason: 'fool-with' },\n // open the door\n { match: '[open] #Determiner', group: 0, tag: 'Infinitive', reason: 'open-the' },\n //were being run\n { match: `(were|was) being [#PresentTense]`, group: 0, tag: 'PastTense', reason: 'was-being' },\n //had been broken\n { match: `(had|has|have) [been /en$/]`, group: 0, tag: 'Auxiliary Participle', reason: 'had-been-broken' },\n //had been smoked\n { match: `(had|has|have) [been /ed$/]`, group: 0, tag: 'Auxiliary PastTense', reason: 'had-been-smoked' },\n //were being run\n { match: `(had|has) #Adverb? [been] #Adverb? #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-been-adj' },\n //had to walk\n { match: `(had|has) to [#Noun] (#Determiner|#Possessive)`, group: 0, tag: 'Infinitive', reason: 'had-to-noun' },\n // have read\n { match: `have [#PresentTense]`, group: 0, tag: 'PastTense', notIf: '(come|gotten)', reason: 'have-read' },\n // does that work\n { match: `(does|will|#Modal) that [work]`, group: 0, tag: 'PastTense', reason: 'does-that-work' },\n // sounds fun\n { match: `[(sound|sounds)] #Adjective`, group: 0, tag: 'PresentTense', reason: 'sounds-fun' },\n // look good\n { match: `[(look|looks)] #Adjective`, group: 0, tag: 'PresentTense', reason: 'looks-good' },\n // stops thinking\n { match: `[(start|starts|stop|stops|begin|begins)] #Gerund`, group: 0, tag: 'Verb', reason: 'starts-thinking' },\n // have read\n { match: `(have|had) read`, tag: 'Modal #PastTense', reason: 'read-read' },\n //were under cooked\n {\n match: `(is|was|were) [(under|over) #PastTense]`,\n group: 0,\n tag: 'Adverb Adjective',\n reason: 'was-under-cooked',\n },\n\n // damn them\n { match: '[shit] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear1-verb' },\n { match: '[damn] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear2-verb' },\n { match: '[fuck] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear3-verb' },\n\n // jobs that fit\n { match: '#Plural that %Noun|Verb%', tag: '. #Preposition #Infinitive', reason: 'jobs-that-work' },\n // works for me\n { match: '[works] for me', group: 0, tag: 'PresentTense', reason: 'works-for-me' },\n // as we please\n { match: 'as #Pronoun [please]', group: 0, tag: 'Infinitive', reason: 'as-we-please' },\n // verb-prefixes - 'co write'\n { match: '[(co|mis|de|inter|intra|pre|re|un|out|under|over|counter)] #Verb', group: 0, tag: ['Verb', 'Prefix'], notIf: '(#Copula|#PhrasalVerb)', reason: 'co-write' },\n // dressed and left\n { match: '#PastTense and [%Adj|Past%]', group: 0, tag: 'PastTense', reason: 'dressed-and-left' },\n // melted and fallen\n { match: '[%Adj|Past%] and #PastTense', group: 0, tag: 'PastTense', reason: 'dressed-and-left' },\n // is he stoked\n { match: '#Copula #Pronoun [%Adj|Past%]', group: 0, tag: 'Adjective', reason: 'is-he-stoked' },\n // to dream of\n { match: 'to [%Noun|Verb%] #Preposition', group: 0, tag: 'Infinitive', reason: 'to-dream-of' },\n]\n","// these are some of our heaviest-used matches\nexport default [\n // ==== Auxiliary ====\n // have been\n { match: `will (#Adverb|not)+? [have] (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'will-have-vb' },\n //was walking\n { match: `[#Copula] (#Adverb|not)+? (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //would walk\n { match: `[(#Modal|did)+] (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n //would have had\n { match: `#Modal (#Adverb|not)+? [have] (#Adverb|not)+? [had] (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-have' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had)] (#Adverb|not)+? #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n // will walk\n { match: '[(do|does|did|will|have|had|has|got)] (not|#Adverb)+? #Verb', group: 0, tag: 'Auxiliary', reason: 'have-had' },\n // about to go\n { match: '[about to] #Adverb? #Verb', group: 0, tag: ['Auxiliary', 'Verb'], reason: 'about-to' },\n //would be walking\n { match: `#Modal (#Adverb|not)+? [be] (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //had been walking\n { match: `[(#Modal|had|has)] (#Adverb|not)+? [been] (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'had-been' },\n // was being driven\n { match: '[(be|being|been)] #Participle', group: 0, tag: 'Auxiliary', reason: 'being-driven' },\n // may want\n { match: '[may] #Adverb? #Infinitive', group: 0, tag: 'Auxiliary', reason: 'may-want' },\n // was being walked\n { match: '#Copula (#Adverb|not)+? [(be|being|been)] #Adverb+? #PastTense', group: 0, tag: 'Auxiliary', reason: 'being-walked' },\n // will be walked\n { match: 'will [be] #PastTense', group: 0, tag: 'Auxiliary', reason: 'will-be-x' },\n // been walking\n { match: '[(be|been)] (#Adverb|not)+? #Gerund', group: 0, tag: 'Auxiliary', reason: 'been-walking' },\n // used to walk\n { match: '[used to] #PresentTense', group: 0, tag: 'Auxiliary', reason: 'used-to-walk' },\n // was going to walk\n { match: '#Copula (#Adverb|not)+? [going to] #Adverb+? #PresentTense', group: 0, tag: 'Auxiliary', reason: 'going-to-walk' },\n // tell me\n { match: '#Imperative [(me|him|her)]', group: 0, tag: 'Reflexive', reason: 'tell-him' },\n // there is no x\n { match: '(is|was) #Adverb? [no]', group: 0, tag: 'Negative', reason: 'is-no' },\n // been told\n { match: '[(been|had|became|came)] #PastTense', group: 0, notIf: '#PhrasalVerb', tag: 'Auxiliary', reason: 'been-told' },\n // being born\n { match: '[(being|having|getting)] #Verb', group: 0, tag: 'Auxiliary', reason: 'being-born' },\n // be walking\n { match: '[be] #Gerund', group: 0, tag: 'Auxiliary', reason: 'be-walking' },\n // better go\n { match: '[better] #PresentTense', group: 0, tag: 'Modal', notIf: '(#Copula|#Gerund)', reason: 'better-go' },\n // even better\n { match: 'even better', tag: 'Adverb #Comparative', reason: 'even-better' },\n]\n","export default [\n // ==== Phrasal ====\n //'foo-up'\n { match: '(#Verb && @hasHyphen) up', tag: 'PhrasalVerb', reason: 'foo-up' },\n { match: '(#Verb && @hasHyphen) off', tag: 'PhrasalVerb', reason: 'foo-off' },\n { match: '(#Verb && @hasHyphen) over', tag: 'PhrasalVerb', reason: 'foo-over' },\n { match: '(#Verb && @hasHyphen) out', tag: 'PhrasalVerb', reason: 'foo-out' },\n // walk in on\n {\n match: '[#Verb (in|out|up|down|off|back)] (on|in)',\n notIf: '#Copula',\n tag: 'PhrasalVerb Particle',\n reason: 'walk-in-on',\n },\n // went on for\n { match: '(lived|went|crept|go) [on] for', group: 0, tag: 'PhrasalVerb', reason: 'went-on' },\n // the curtains come down\n { match: '#Verb (up|down|in|on|for)$', tag: 'PhrasalVerb #Particle', notIf: '#PhrasalVerb', reason: 'come-down$' },\n // got me thinking\n // { match: '(got|had) me [#Noun]', group: 0, tag: 'Verb', reason: 'got-me-gerund' },\n // help stop\n { match: 'help [(stop|end|make|start)]', group: 0, tag: 'Infinitive', reason: 'help-stop' },\n // work in the office\n { match: '#PhrasalVerb (in && #Particle) #Determiner', tag: '#Verb #Preposition #Determiner', unTag: 'PhrasalVerb', reason: 'work-in-the' },\n // start listening\n { match: '[(stop|start|finish|help)] #Gerund', group: 0, tag: 'Infinitive', reason: 'start-listening' },\n // mis-fired\n // { match: '[(mis)] #Verb', group: 0, tag: 'Verb', reason: 'mis-firedsa' },\n //back it up\n {\n match: '#Verb (him|her|it|us|himself|herself|itself|everything|something) [(up|down)]',\n group: 0,\n tag: 'Adverb',\n reason: 'phrasal-pronoun-advb',\n },\n]\n","// this is really hard to do\nconst notIf = '(i|we|they)' //we do not go\nexport default [\n // do not go\n { match: '^do not? [#Infinitive #Particle?]', notIf, group: 0, tag: 'Imperative', reason: 'do-eat' },\n // please go\n { match: '^please do? not? [#Infinitive #Particle?]', group: 0, tag: 'Imperative', reason: 'please-go' },\n // just go\n { match: '^just do? not? [#Infinitive #Particle?]', group: 0, tag: 'Imperative', reason: 'just-go' },\n // do it better\n { match: '^[#Infinitive] it #Comparative', notIf, group: 0, tag: 'Imperative', reason: 'do-it-better' },\n // do it again\n { match: '^[#Infinitive] it (please|now|again|plz)', notIf, group: 0, tag: 'Imperative', reason: 'do-it-please' },\n // go quickly.\n { match: '^[#Infinitive] (#Adjective|#Adverb)$', group: 0, tag: 'Imperative', notIf: '(so|such|rather|enough)', reason: 'go-quickly' },\n // turn down the noise\n { match: '^[#Infinitive] (up|down|over) #Determiner', group: 0, tag: 'Imperative', reason: 'turn-down' },\n // eat my shorts\n { match: '^[#Infinitive] (your|my|the|a|an|any|each|every|some|more|with|on)', group: 0, notIf: 'like', tag: 'Imperative', reason: 'eat-my-shorts' },\n // tell him the story\n { match: '^[#Infinitive] (him|her|it|us|me|there)', group: 0, tag: 'Imperative', reason: 'tell-him' },\n // avoid loud noises\n { match: '^[#Infinitive] #Adjective #Noun$', group: 0, tag: 'Imperative', reason: 'avoid-loud-noises' },\n // call and reserve\n { match: '^[#Infinitive] (#Adjective|#Adverb)? and #Infinitive', group: 0, tag: 'Imperative', reason: 'call-and-reserve' },\n // one-word imperatives\n { match: '^(go|stop|wait|hurry) please?$', tag: 'Imperative', reason: 'go' },\n // somebody call\n { match: '^(somebody|everybody) [#Infinitive]', group: 0, tag: 'Imperative', reason: 'somebody-call' },\n // let's leave\n { match: '^let (us|me) [#Infinitive]', group: 0, tag: 'Imperative', reason: 'lets-leave' },\n // shut the door\n { match: '^[(shut|close|open|start|stop|end|keep)] #Determiner #Noun', group: 0, tag: 'Imperative', reason: 'shut-the-door' },\n // turn off the light\n { match: '^[#PhrasalVerb #Particle] #Determiner #Noun', group: 0, tag: 'Imperative', reason: 'turn-off-the-light' },\n // go to toronto\n { match: '^[go] to .', group: 0, tag: 'Imperative', reason: 'go-to-toronto' },\n // would you recommend\n { match: '^#Modal you [#Infinitive]', group: 0, tag: 'Imperative', reason: 'would-you-' },\n // never say\n { match: '^never [#Infinitive]', group: 0, tag: 'Imperative', reason: 'never-stop' },\n // come have a drink\n { match: '^come #Infinitive', tag: 'Imperative', notIf: 'on', reason: 'come-have' },\n // come and have a drink\n { match: '^come and? #Infinitive', tag: 'Imperative . Imperative', notIf: '#PhrasalVerb', reason: 'come-and-have' },\n // stay away\n { match: '^stay (out|away|back)', tag: 'Imperative', reason: 'stay-away' },\n // stay cool\n { match: '^[(stay|be|keep)] #Adjective', group: 0, tag: 'Imperative', reason: 'stay-cool' },\n // keep it silent\n { match: '^[keep it] #Adjective', group: 0, tag: 'Imperative', reason: 'keep-it-cool' },\n // don't be late\n { match: '^do not [#Infinitive]', group: 0, tag: 'Imperative', reason: 'do-not-be' },\n // allow yourself\n { match: '[#Infinitive] (yourself|yourselves)', group: 0, tag: 'Imperative', reason: 'allow-yourself' },\n // look what\n { match: '[#Infinitive] what .', group: 0, tag: 'Imperative', reason: 'look-what' },\n // continue playing\n { match: '^[#Infinitive] #Gerund', group: 0, tag: 'Imperative', reason: 'keep-playing' },\n // go to it\n { match: '^[#Infinitive] (to|for|into|toward|here|there)', group: 0, tag: 'Imperative', reason: 'go-to' },\n // relax and unwind\n { match: '^[#Infinitive] (and|or) #Infinitive', group: 0, tag: 'Imperative', reason: 'inf-and-inf' },\n\n // commit to\n { match: '^[%Noun|Verb%] to', group: 0, tag: 'Imperative', reason: 'commit-to' },\n // maintain eye contact\n { match: '^[#Infinitive] #Adjective? #Singular #Singular', group: 0, tag: 'Imperative', reason: 'maintain-eye-contact' },\n // don't forget to clean\n { match: 'do not (forget|omit|neglect) to [#Infinitive]', group: 0, tag: 'Imperative', reason: 'do-not-forget' },\n // pay attention\n { match: '^[(ask|wear|pay|look|help|show|watch|act|fix|kill|stop|start|turn|try|win)] #Noun', group: 0, tag: 'Imperative', reason: 'pay-attention' },\n\n]","export default [\n // that were growing\n { match: '(that|which) were [%Adj|Gerund%]', group: 0, tag: 'Gerund', reason: 'that-were-growing' },\n // was dissapointing\n // { match: '#Copula [%Adj|Gerund%]$', group: 0, tag: 'Adjective', reason: 'was-disappointing$' },\n\n // repairing crubling roads\n { match: '#Gerund [#Gerund] #Plural', group: 0, tag: 'Adjective', reason: 'hard-working-fam' },\n\n // { match: '(that|which) were [%Adj|Gerund%]', group: 0, tag: 'Gerund', reason: 'that-were-growing' },\n]\n","// ==== Passive voice ===\nexport default [\n // got walked, was walked, were walked\n { match: '(got|were|was|is|are|am) (#PastTense|#Participle)', tag: 'Passive', reason: 'got-walked' },\n // was being walked\n { match: '(was|were|is|are|am) being (#PastTense|#Participle)', tag: 'Passive', reason: 'was-being' },\n // had been walked, have been eaten\n { match: '(had|have|has) been (#PastTense|#Participle)', tag: 'Passive', reason: 'had-been' },\n // will be cleaned\n { match: 'will be being? (#PastTense|#Participle)', tag: 'Passive', reason: 'will-be-cleaned' },\n // suffered by the country\n { match: '#Noun [(#PastTense|#Participle)] by (the|a) #Noun', group: 0, tag: 'Passive', reason: 'suffered-by' },\n\n]","// order matters\nconst matches = [\n // u r cool\n { match: 'u r', tag: '#Pronoun #Copula', reason: 'u r' },\n { match: '#Noun [(who|whom)]', group: 0, tag: 'Determiner', reason: 'captain-who' },\n\n // ==== Conditions ====\n // had he survived,\n { match: '[had] #Noun+ #PastTense', group: 0, tag: 'Condition', reason: 'had-he' },\n // were he to survive\n { match: '[were] #Noun+ to #Infinitive', group: 0, tag: 'Condition', reason: 'were-he' },\n\n // some sort of\n { match: 'some sort of', tag: 'Adjective Noun Conjunction', reason: 'some-sort-of' },\n // some of\n // { match: 'some of', tag: 'Noun Conjunction', reason: 'some-of' },\n // of some sort\n { match: 'of some sort', tag: 'Conjunction Adjective Noun', reason: 'of-some-sort' },\n // such skill\n { match: '[such] (a|an|is)? #Noun', group: 0, tag: 'Determiner', reason: 'such-skill' },\n // another one\n // { match: '[another] (#Noun|#Value)', group: 0, tag: 'Adjective', reason: 'another-one' },\n // right after\n { match: '[right] (before|after|in|into|to|toward)', group: 0, tag: '#Adverb', reason: 'right-into' },\n // at about\n { match: '#Preposition [about]', group: 0, tag: 'Adjective', reason: 'at-about' },\n // are ya\n { match: '(are|#Modal|see|do|for) [ya]', group: 0, tag: 'Pronoun', reason: 'are-ya' },\n // long live\n { match: '[long live] .', group: 0, tag: '#Adjective #Infinitive', reason: 'long-live' },\n // plenty of\n { match: '[plenty] of', group: 0, tag: '#Uncountable', reason: 'plenty-of' },\n // 'there' as adjective\n { match: '(always|nearly|barely|practically) [there]', group: 0, tag: 'Adjective', reason: 'always-there' },\n // existential 'there'\n // there she is\n { match: '[there] (#Adverb|#Pronoun)? #Copula', group: 0, tag: 'There', reason: 'there-is' },\n // is there food\n { match: '#Copula [there] .', group: 0, tag: 'There', reason: 'is-there' },\n // should there\n { match: '#Modal #Adverb? [there]', group: 0, tag: 'There', reason: 'should-there' },\n // do you\n { match: '^[do] (you|we|they)', group: 0, tag: 'QuestionWord', reason: 'do-you' },\n // does he\n { match: '^[does] (he|she|it|#ProperNoun)', group: 0, tag: 'QuestionWord', reason: 'does-he' },\n // the person who\n { match: '#Determiner #Noun+ [who] #Verb', group: 0, tag: 'Preposition', reason: 'the-x-who' },\n // the person which\n { match: '#Determiner #Noun+ [which] #Verb', group: 0, tag: 'Preposition', reason: 'the-x-which' },\n // a while\n { match: 'a [while]', group: 0, tag: 'Noun', reason: 'a-while' },\n // guess who\n { match: 'guess who', tag: '#Infinitive #QuestionWord', reason: 'guess-who' },\n // swear words\n { match: '[fucking] !#Verb', group: 0, tag: '#Gerund', reason: 'f-as-gerund' },\n]\nexport default matches\n","// import orgWords from './_orgWords.js'\n// let orgMap = `(${orgWords.join('|')})`\n\n/*\nconst multi = [\n 'building society',\n 'central bank',\n 'department store',\n 'institute of technology',\n 'liberation army',\n 'people party',\n 'social club',\n 'state police',\n 'state university',\n]\n*/\n\nexport default [\n // Foo University\n // { match: `#Noun ${orgMap}`, tag: 'Organization', safe: true, reason: 'foo-university' },\n // // University of Toronto\n // { match: `${orgMap} of #Place`, tag: 'Organization', safe: true, reason: 'university-of-foo' },\n\n // // foo regional health authority\n // { match: `${orgMap} (health|local|regional)+ authority`, tag: 'Organization', reason: 'regional-health' },\n // // foo stock exchange\n // { match: `${orgMap} (stock|mergantile)+ exchange`, tag: 'Organization', reason: 'stock-exchange' },\n // // foo news service\n // { match: `${orgMap} (daily|evening|local)+ news service?`, tag: 'Organization', reason: 'foo-news' },\n //University of Foo\n { match: 'university of #Place', tag: 'Organization', reason: 'university-of-Foo' },\n //John & Joe's\n { match: '#Noun (&|n) #Noun', tag: 'Organization', reason: 'Noun-&-Noun' },\n // teachers union of Ontario\n { match: '#Organization of the? #ProperNoun', tag: 'Organization', reason: 'org-of-place', safe: true },\n //walmart USA\n { match: '#Organization #Country', tag: 'Organization', reason: 'org-country' },\n //organization\n { match: '#ProperNoun #Organization', tag: 'Organization', notIf: '#FirstName', reason: 'titlecase-org' },\n //FitBit Inc\n { match: '#ProperNoun (ltd|co|inc|dept|assn|bros)', tag: 'Organization', reason: 'org-abbrv' },\n // the OCED\n { match: 'the [#Acronym]', group: 0, tag: 'Organization', reason: 'the-acronym', safe: true },\n // government of india\n { match: 'government of the? [#Place+]', tag: 'Organization', reason: 'government-of-x' },\n // school board\n { match: '(health|school|commerce) board', tag: 'Organization', reason: 'school-board' },\n // special comittee\n {\n match: '(nominating|special|conference|executive|steering|central|congressional) committee',\n tag: 'Organization',\n reason: 'special-comittee',\n },\n // global trade union\n {\n match: '(world|global|international|national|#Demonym) #Organization',\n tag: 'Organization',\n reason: 'global-org',\n },\n // schools\n { match: '#Noun+ (public|private) school', tag: 'School', reason: 'noun-public-school' },\n // new york yankees\n { match: '#Place+ #SportsTeam', tag: 'SportsTeam', reason: 'place-sportsteam' },\n // 'manchester united'\n {\n match: '(dc|atlanta|minnesota|manchester|newcastle|sheffield) united',\n tag: 'SportsTeam',\n reason: 'united-sportsteam',\n },\n // 'toronto fc'\n { match: '#Place+ fc', tag: 'SportsTeam', reason: 'fc-sportsteam' },\n\n // baltimore quilting club\n {\n match: '#Place+ #Noun{0,2} (club|society|group|team|committee|commission|association|guild|crew)',\n tag: 'Organization',\n reason: 'place-noun-society',\n },\n]\n","export default [\n // ==== Region ====\n // West Norforlk\n { match: '(west|north|south|east|western|northern|southern|eastern)+ #Place', tag: 'Region', reason: 'west-norfolk' },\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n {\n match: '#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|pa|sc|tn|tx|ut|vt|pr)]',\n group: 0,\n tag: 'Region',\n reason: 'us-state',\n },\n // portland oregon\n { match: 'portland [or]', group: 0, tag: 'Region', reason: 'portland-or' },\n //words removed from preTagger/placeWords\n {\n match: '#ProperNoun+ (cliff|place|range|pit|place|point|room|grounds|ruins)',\n tag: 'Place',\n reason: 'foo-point',\n },\n // in Foo California\n { match: 'in [#ProperNoun] #Place', group: 0, tag: 'Place', reason: 'propernoun-place' },\n // Address\n {\n match: '#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)',\n tag: 'Address',\n reason: 'address-st',\n },\n // port dover\n { match: '(port|mount|mt) #ProperName', tag: 'Place', reason: 'port-name' },\n // generic 'oak ridge' names\n // { match: '(oak|maple|spruce|pine|cedar|willow|green|sunset|sunrise) #Place', tag: 'Place', reason: 'tree-name' },\n // generic 'sunset view' names\n // { match: '() #Place', tag: 'Place', reason: 'tree-name' },\n\n // Sports Arenas and Complexs\n // {\n // match:\n // '(#Place+|#Place|#ProperNoun) (memorial|athletic|community|financial)? (sportsplex|stadium|sports centre|sports field|soccer complex|soccer centre|sports complex|civic centre|centre|arena|gardens|complex|coliseum|auditorium|place|building)',\n // tag: 'Place',\n // reason: 'sport-complex',\n // },\n]\n","export default [\n // ==== Conjunctions ====\n { match: '[so] #Noun', group: 0, tag: 'Conjunction', reason: 'so-conj' },\n //how he is driving\n {\n match: '[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)',\n group: 0,\n tag: 'Conjunction',\n reason: 'how-he-is-x',\n },\n // when he\n { match: '#Copula [(who|what|where|why|how|when)] #Noun', group: 0, tag: 'Conjunction', reason: 'when-he' },\n // says that he..\n { match: '#Verb [that] #Pronoun', group: 0, tag: 'Conjunction', reason: 'said-that-he' },\n // things that are required\n { match: '#Noun [that] #Copula', group: 0, tag: 'Conjunction', reason: 'that-are' },\n // things that seem cool\n { match: '#Noun [that] #Verb #Adjective', group: 0, tag: 'Conjunction', reason: 'that-seem' },\n // wasn't that wide..\n { match: '#Noun #Copula not? [that] #Adjective', group: 0, tag: 'Adverb', reason: 'that-adj' },\n\n // ==== Prepositions ====\n //all students\n { match: '#Verb #Adverb? #Noun [(that|which)]', group: 0, tag: 'Preposition', reason: 'that-prep' },\n //work, which has been done.\n { match: '@hasComma [which] (#Pronoun|#Verb)', group: 0, tag: 'Preposition', reason: 'which-copula' },\n //folks like her\n { match: '#Noun [like] #Noun', group: 0, tag: 'Preposition', reason: 'noun-like' },\n //like the time\n { match: '^[like] #Determiner', group: 0, tag: 'Preposition', reason: 'like-the' },\n //a day like this\n { match: 'a #Noun [like] (#Noun|#Determiner)', group: 0, tag: 'Preposition', reason: 'a-noun-like' },\n // really like\n { match: '#Adverb [like]', group: 0, tag: 'Verb', reason: 'really-like' },\n // nothing like\n { match: '(not|nothing|never) [like]', group: 0, tag: 'Preposition', reason: 'nothing-like' },\n // treat them like\n { match: '#Infinitive #Pronoun [like]', group: 0, tag: 'Preposition', reason: 'treat-them-like' },\n\n\n\n\n // ==== Questions ====\n // where\n // why\n // when\n // who\n // whom\n // whose\n // what\n // which\n //the word 'how many'\n // { match: '^(how|which)', tag: 'QuestionWord', reason: 'how-question' },\n // how-he, when the\n { match: '[#QuestionWord] (#Pronoun|#Determiner)', group: 0, tag: 'Preposition', reason: 'how-he' },\n // when stolen\n { match: '[#QuestionWord] #Participle', group: 0, tag: 'Preposition', reason: 'when-stolen' },\n // how is\n { match: '[how] (#Determiner|#Copula|#Modal|#PastTense)', group: 0, tag: 'QuestionWord', reason: 'how-is' },\n // children who dance\n { match: '#Plural [(who|which|when)] .', group: 0, tag: 'Preposition', reason: 'people-who' },\n]\n","export default [\n\n //swear-words as non-expression POS\n { match: 'holy (shit|fuck|hell)', tag: 'Expression', reason: 'swears-expression' },\n // well..\n { match: '^[(well|so|okay|now)] !#Adjective?', group: 0, tag: 'Expression', reason: 'well-' },\n // well..\n { match: '^come on', tag: 'Expression', reason: 'come-on' },\n // sorry\n { match: '(say|says|said) [sorry]', group: 0, tag: 'Expression', reason: 'say-sorry' },\n // ok,\n { match: '^(ok|alright|shoot|hell|anyways)', tag: 'Expression', reason: 'ok-' },\n // c'mon marge..\n // { match: '^[come on] #Noun', group: 0, tag: 'Expression', reason: 'come-on' },\n // say,\n { match: '^(say && @hasComma)', tag: 'Expression', reason: 'say-' },\n { match: '^(like && @hasComma)', tag: 'Expression', reason: 'like-' },\n // dude we should\n { match: '^[(dude|man|girl)] #Pronoun', group: 0, tag: 'Expression', reason: 'dude-i' },\n]","import adj from './adjective/adjective.js'\nimport advAdj from './adjective/adj-adverb.js'\nimport gerundAdj from './adjective/adj-gerund.js'\nimport nounAdj from './adjective/adj-noun.js'\nimport adjVerb from './adjective/adj-verb.js'\n\nimport adv from './adverb.js'\n\nimport dates from './dates/date-phrase.js'\nimport ambigDates from './dates/date.js'\n\nimport noun from './nouns/nouns.js'\nimport gerundNouns from './verbs/noun-gerund.js'\nimport presNouns from './verbs/verb-noun.js'\n\nimport money from './numbers/money.js'\nimport fractions from './numbers/fractions.js'\nimport numbers from './numbers/numbers.js'\n\nimport person from './person/person-phrase.js'\nimport personName from './person/ambig-name.js'\n\nimport verbs from './verbs/verbs.js'\nimport auxiliary from './verbs/auxiliary.js'\nimport phrasal from './verbs/phrasal.js'\nimport imperative from './verbs/imperative.js'\nimport adjGerund from './verbs/adj-gerund.js'\nimport passive from './verbs/passive.js'\n\nimport misc from './_misc.js'\n\nimport orgs from './nouns/organizations.js'\nimport places from './nouns/places.js'\nimport conjunctions from './conjunctions.js'\nimport expressions from './expressions.js'\n\nconst matches = [].concat(\n // order matters top-matches can get overwritten\n passive,\n adj,\n advAdj,\n gerundAdj,\n nounAdj,\n adv,\n ambigDates,\n dates,\n noun,\n gerundNouns,\n presNouns,\n money,\n fractions,\n numbers,\n person,\n personName,\n verbs,\n adjVerb,\n auxiliary,\n phrasal,\n imperative,\n adjGerund,\n misc,\n orgs,\n places,\n conjunctions,\n expressions\n)\nexport default {\n two: {\n matches,\n },\n}\n","let net = null\n\n// runs all match/tag patterns in model.two.matches\nconst postTagger = function (view) {\n const { world } = view\n const { model, methods } = world\n net = net || methods.one.buildNet(model.two.matches, world)\n // perform these matches on a comma-seperated document\n const document = methods.two.quickSplit(view.document)\n const ptrs = document.map(terms => {\n const t = terms[0]\n return [t.index[0], t.index[1], t.index[1] + terms.length]\n })\n const m = view.update(ptrs)\n m.cache()\n m.sweep(net)\n view.uncache()\n view.unfreeze()\n return view\n}\n\n// helper function for compute('tagger')\nconst tagger = view => view.compute(['freeze', 'lexicon', 'preTagger', 'postTagger', 'unfreeze'])\n\nexport default { postTagger, tagger }\n","const round = n => Math.round(n * 100) / 100\n\nexport default function (View) {\n // average tagger score\n View.prototype.confidence = function () {\n let sum = 0\n let count = 0\n this.docs.forEach(terms => {\n terms.forEach(term => {\n count += 1\n sum += term.confidence || 1\n })\n })\n if (count === 0) {\n return 1\n }\n return round(sum / count)\n }\n\n // (re-) run the POS-tagger\n View.prototype.tagger = function () {\n return this.compute(['tagger'])\n }\n}","import model from './model/index.js'\nimport compute from './compute/index.js'\nimport api from './api.js'\n\n\nconst plugin = {\n api,\n compute,\n model,\n hooks: ['postTagger'],\n}\nexport default plugin\n","const getWords = function (net) {\n return Object.keys(net.hooks).filter(w => !w.startsWith('#') && !w.startsWith('%'))\n}\n\nconst maybeMatch = function (doc, net) {\n // must have *atleast* one of these words\n const words = getWords(net)\n if (words.length === 0) {\n return doc\n }\n if (!doc._cache) {\n doc.cache()\n }\n const cache = doc._cache\n // return sentences that have one of our needed words\n return doc.filter((_m, i) => {\n return words.some(str => cache[i].has(str))\n })\n}\nexport default maybeMatch","import maybeMatch from './maybeMatch.js'\n\n// tokenize first, then only tag sentences required\nconst lazyParse = function (input, reg) {\n let net = reg\n if (typeof reg === 'string') {\n net = this.buildNet([{ match: reg }])\n }\n const doc = this.tokenize(input)\n const m = maybeMatch(doc, net)\n if (m.found) {\n m.compute(['index', 'tagger'])\n return m.match(reg)\n }\n return doc.none()\n}\nexport default lazyParse","import lazy from './lazyParse.js'\n\nexport default {\n lib: {\n lazy\n }\n}","const matchVerb = function (m, lemma) {\n const conjugate = m.methods.two.transform.verb.conjugate\n const all = conjugate(lemma, m.model)\n if (m.has('#Gerund')) {\n return all.Gerund\n }\n if (m.has('#PastTense')) {\n return all.PastTense\n }\n if (m.has('#PresentTense')) {\n return all.PresentTense\n }\n if (m.has('#Gerund')) {\n return all.Gerund\n }\n return lemma\n}\n\nconst swapVerb = function (vb, lemma) {\n let str = lemma\n vb.forEach(m => {\n if (!m.has('#Infinitive')) {\n str = matchVerb(m, lemma)\n }\n m.replaceWith(str)\n })\n return vb\n}\nexport default swapVerb","import swapVerb from './swap-verb.js'\n\nconst swapNoun = function (m, lemma) {\n let str = lemma\n if (m.has('#Plural')) {\n const toPlural = m.methods.two.transform.noun.toPlural\n str = toPlural(lemma, m.model)\n }\n m.replaceWith(str, { possessives: true })\n}\n\nconst swapAdverb = function (m, lemma) {\n const { toAdverb } = m.methods.two.transform.adjective\n const str = lemma\n const adv = toAdverb(str)\n if (adv) {\n m.replaceWith(adv)\n }\n}\nconst swapAdjective = function (m, lemma) {\n const { toComparative, toSuperlative } = m.methods.two.transform.adjective\n let str = lemma\n if (m.has('#Comparative')) {\n str = toComparative(str, m.model)\n } else if (m.has('#Superlative')) {\n str = toSuperlative(str, m.model)\n }\n if (str) {\n m.replaceWith(str)\n }\n}\n\nconst swap = function (from, to, tag) {\n let reg = from.split(/ /g).map(str => str.toLowerCase().trim())\n reg = reg.filter(str => str)\n reg = reg.map(str => `{${str}}`).join(' ')\n let m = this.match(reg)\n // guard against some homonyms\n if (tag) {\n m = m.if(tag)\n }\n if (m.has('#Verb')) {\n return swapVerb(m, to)\n }\n if (m.has('#Noun')) {\n return swapNoun(m, to)\n }\n if (m.has('#Adverb')) {\n return swapAdverb(m, to)\n }\n if (m.has('#Adjective')) {\n return swapAdjective(m, to)\n }\n return this\n}\nexport default swap","import swap from './api/swap.js'\n\nconst api = function (View) {\n View.prototype.swap = swap\n}\n\nexport default {\n api\n}","import nlp from './one.js'\nimport preTag from './2-two/preTagger/plugin.js'\nimport contractionTwo from './2-two/contraction-two/plugin.js'\nimport postTag from './2-two/postTagger/plugin.js'\nimport lazy from './2-two/lazy/plugin.js'\nimport swap from './2-two/swap/plugin.js'\n\nnlp.plugin(preTag) //~103kb\nnlp.plugin(contractionTwo) //\nnlp.plugin(postTag) //~33kb\nnlp.plugin(lazy) //\nnlp.plugin(swap) //\n\nexport default nlp\n","\n// guard against superlative+comparative forms\nconst toRoot = function (adj) {\n const { fromComparative, fromSuperlative } = adj.methods.two.transform.adjective\n const str = adj.text('normal')\n if (adj.has('#Comparative')) {\n return fromComparative(str, adj.model)\n }\n if (adj.has('#Superlative')) {\n return fromSuperlative(str, adj.model)\n }\n return str\n}\n\nconst api = function (View) {\n\n class Adjectives extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Adjectives'\n }\n json(opts = {}) {\n const { toAdverb, toNoun, toSuperlative, toComparative } = this.methods.two.transform.adjective\n opts.normal = true\n return this.map(m => {\n const json = m.toView().json(opts)[0] || {}\n const str = toRoot(m)\n json.adjective = {\n adverb: toAdverb(str, this.model),\n noun: toNoun(str, this.model),\n superlative: toSuperlative(str, this.model),\n comparative: toComparative(str, this.model),\n }\n return json\n }, [])\n }\n adverbs() {\n return this.before('#Adverb+$').concat(this.after('^#Adverb+'))\n }\n conjugate(n) {\n const { toComparative, toSuperlative, toNoun, toAdverb } = this.methods.two.transform.adjective\n return this.getNth(n).map(adj => {\n const root = toRoot(adj)\n return {\n Adjective: root,\n Comparative: toComparative(root, this.model),\n Superlative: toSuperlative(root, this.model),\n Noun: toNoun(root, this.model),\n Adverb: toAdverb(root, this.model),\n }\n }, [])\n }\n toComparative(n) {\n const { toComparative } = this.methods.two.transform.adjective\n return this.getNth(n).map(adj => {\n const root = toRoot(adj)\n const str = toComparative(root, this.model)\n return adj.replaceWith(str)\n })\n }\n toSuperlative(n) {\n const { toSuperlative } = this.methods.two.transform.adjective\n return this.getNth(n).map(adj => {\n const root = toRoot(adj)\n const str = toSuperlative(root, this.model)\n return adj.replaceWith(str)\n })\n }\n toAdverb(n) {\n const { toAdverb } = this.methods.two.transform.adjective\n return this.getNth(n).map(adj => {\n const root = toRoot(adj)\n const str = toAdverb(root, this.model)\n return adj.replaceWith(str)\n })\n }\n toNoun(n) {\n const { toNoun } = this.methods.two.transform.adjective\n return this.getNth(n).map(adj => {\n const root = toRoot(adj)\n const str = toNoun(root, this.model)\n return adj.replaceWith(str)\n })\n }\n }\n\n View.prototype.adjectives = function (n) {\n let m = this.match('#Adjective')\n m = m.getNth(n)\n return new Adjectives(m.document, m.pointer)\n }\n View.prototype.superlatives = function (n) {\n let m = this.match('#Superlative')\n m = m.getNth(n)\n return new Adjectives(m.document, m.pointer)\n }\n View.prototype.comparatives = function (n) {\n let m = this.match('#Comparative')\n m = m.getNth(n)\n return new Adjectives(m.document, m.pointer)\n }\n}\nexport default { api }\n","// guard against superlative+comparative forms\nconst toRoot = function (adj) {\n const str = adj.compute('root').text('root')\n return str\n}\n\n// return the nth elem of a doc\nconst api = function (View) {\n\n class Adverbs extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Adverbs'\n }\n conjugate(n) {\n return this.getNth(n).map(adv => {\n const adj = toRoot(adv)\n return {\n Adverb: adv.text('normal'),\n Adjective: adj,\n }\n }, [])\n }\n json(opts = {}) {\n const fromAdverb = this.methods.two.transform.adjective.fromAdverb\n opts.normal = true\n return this.map(m => {\n const json = m.toView().json(opts)[0] || {}\n json.adverb = {\n adjective: fromAdverb(json.normal)\n }\n return json\n }, [])\n }\n }\n\n View.prototype.adverbs = function (n) {\n let m = this.match('#Adverb')\n m = m.getNth(n)\n return new Adverbs(m.document, m.pointer)\n }\n}\nexport default { api }\n","const byComma = function (doc) {\n let commas = doc.match('@hasComma')\n // remove any non-clause uses\n commas = commas.filter(m => {\n // don't split the first word\n if (m.growLeft('.').wordCount() === 1) {\n return false\n }\n // don't split the last word\n if (m.growRight('. .').wordCount() === 1) {\n return false\n }\n let more = m.grow('.') // grow by 1 word in either direction\n more = more.ifNo('@hasComma @hasComma') //fun, cool...\n more = more.ifNo('@hasComma (and|or) .') //cool, and fun\n more = more.ifNo('(#City && @hasComma) #Country') //'toronto, canada'\n more = more.ifNo('(#WeekDay && @hasComma) #Date') //'tuesday, march 2nd'\n more = more.ifNo('(#Date+ && @hasComma) #Value') //'july 6, 1992'\n more = more.ifNo('(#Adjective && @hasComma) #Adjective') //nice, pretty\n // more = more.ifNo('@hasComma (too|also)$') //at end of sentence\n return more.found\n })\n return doc.splitAfter(commas)\n}\n\n// should we split-out a clause (in brackets)?\nconst splitParentheses = function (doc) {\n let matches = doc.parentheses()\n matches = matches.filter(m => {\n return m.wordCount() >= 3 && m.has('#Verb') && m.has('#Noun')\n })\n return doc.splitOn(matches)\n}\n\n// split-out a long quotion, but not 'inline quotes'.\nconst splitQuotes = function (doc) {\n let matches = doc.quotations()\n matches = matches.filter(m => {\n return m.wordCount() >= 3 && m.has('#Verb') && m.has('#Noun')\n })\n return doc.splitOn(matches)\n}\n\nconst clauses = function (n) {\n let found = this\n\n found = splitParentheses(found)\n found = splitQuotes(found)\n\n found = byComma(found)\n\n found = found.splitAfter('(@hasEllipses|@hasSemicolon|@hasDash|@hasColon)')\n\n // i said\n found = found.splitAfter('^#Pronoun (said|says)')\n // ... said John.\n found = found.splitBefore('(said|says) #ProperNoun$')\n\n // ... if it was\n found = found.splitBefore('. . if .{4}')\n\n // various conjunctions\n found = found.splitBefore('and while')\n found = found.splitBefore('now that')\n found = found.splitBefore('ever since')\n found = found.splitBefore('(supposing|although)')\n found = found.splitBefore('even (while|if|though)')\n found = found.splitBefore('(whereas|whose)')\n // found = found.splitBefore('as (far|long|much|soon) as')\n found = found.splitBefore('as (though|if)')\n found = found.splitBefore('(til|until)')\n\n // it is cool but it is ..\n const m = found.match('#Verb .* [but] .* #Verb', 0)\n if (m.found) {\n found = found.splitBefore(m)\n }\n // it is cool and it is ..\n // let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n // found = found.splitBefore(conjunctions)\n\n // if it is this then that\n const condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // // misc clause partitions\n // found = found.splitBefore('as well as .')\n // found = found.splitBefore('such as .')\n // found = found.splitBefore('in addition to .')\n\n // // semicolons, dashes\n // found = found.splitAfter('@hasSemicolon')\n // found = found.splitAfter('@hasDash')\n\n // //\n // found = found.splitBefore('which (were|are|will)')\n\n // // he said [...]\n // found = found.splitAfter('#Noun (said|say|says)')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // does there appear to have relative/subordinate clause still?\n // let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n // if (tooLong.found) {\n // // and after the ..\n // found = found.splitBefore('#Conjunction #Preposition')\n\n // // let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n // // found = found.splitOn(m.eq(0))\n // }\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return found\n}\n\nexport default clauses\n","// split terms into Nounphrase, verbphrase, etc groups\nconst chunks = function (doc) {\n const all = []\n let lastOne = null\n // first, split by comma, etc\n const m = doc.clauses()\n // loop through each clause\n m.docs.forEach(terms => {\n terms.forEach(term => {\n // new chunk\n if (!term.chunk || term.chunk !== lastOne) {\n lastOne = term.chunk\n all.push([term.index[0], term.index[1], term.index[1] + 1])\n } else {\n // keep the chunk going\n all[all.length - 1][2] = term.index[1] + 1\n }\n })\n lastOne = null\n })\n const parts = doc.update(all)\n return parts\n}\nexport default chunks\n","import clauses from './clauses.js'\nimport getChunks from './chunks.js'\n\nconst api = function (View) {\n\n class Chunks extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Chunks'\n }\n isVerb() {\n return this.filter(c => c.has('<Verb>'))\n }\n isNoun() {\n return this.filter(c => c.has('<Noun>'))\n }\n isAdjective() {\n return this.filter(c => c.has('<Adjective>'))\n }\n isPivot() {\n return this.filter(c => c.has('<Pivot>'))\n }\n // chunk-friendly debug\n debug() {\n this.toView().debug('chunks')\n return this\n }\n // overloaded - keep Sentences class\n update(pointer) {\n const m = new Chunks(this.document, pointer)\n m._cache = this._cache // share this full thing\n return m\n }\n }\n\n View.prototype.chunks = function (n) {\n let m = getChunks(this)\n m = m.getNth(n)\n return new Chunks(this.document, m.pointer)\n }\n View.prototype.clauses = clauses\n}\nexport default api\n","const byWord = {\n this: 'Noun',\n then: 'Pivot'\n}\n\n// simply chunk Nouns as <Noun>\nconst easyMode = function (document) {\n for (let n = 0; n < document.length; n += 1) {\n for (let t = 0; t < document[n].length; t += 1) {\n const term = document[n][t]\n\n if (byWord.hasOwnProperty(term.normal) === true) {\n term.chunk = byWord[term.normal]\n continue\n }\n if (term.tags.has('Verb')) {\n term.chunk = 'Verb'\n continue\n }\n if (term.tags.has('Noun') || term.tags.has('Determiner')) {\n term.chunk = 'Noun'\n continue\n }\n // 100 cats\n if (term.tags.has('Value')) {\n term.chunk = 'Noun'\n continue\n }\n //\n if (term.tags.has('QuestionWord')) {\n term.chunk = 'Pivot'\n continue\n }\n\n }\n }\n}\nexport default easyMode\n","// simply chunk Nouns as <Noun>\nconst byNeighbour = function (document) {\n for (let n = 0; n < document.length; n += 1) {\n for (let t = 0; t < document[n].length; t += 1) {\n const term = document[n][t]\n if (term.chunk) {\n continue\n }\n // based on next-term\n const onRight = document[n][t + 1]\n // based on last-term\n const onLeft = document[n][t - 1]\n\n //'is cool' vs 'the cool dog'\n if (term.tags.has('Adjective')) {\n // 'is cool'\n if (onLeft && onLeft.tags.has('Copula')) {\n term.chunk = 'Adjective'\n continue\n }\n // 'the cool'\n if (onLeft && onLeft.tags.has('Determiner')) {\n term.chunk = 'Noun'\n continue\n }\n // 'cool dog'\n if (onRight && onRight.tags.has('Noun')) {\n term.chunk = 'Noun'\n continue\n }\n continue\n }\n // 'really swimming' vs 'really cool'\n if (term.tags.has('Adverb') || term.tags.has('Negative')) {\n if (onLeft && onLeft.tags.has('Adjective')) {\n term.chunk = 'Adjective'\n continue\n }\n if (onLeft && onLeft.tags.has('Verb')) {\n term.chunk = 'Verb'\n continue\n }\n\n if (onRight && onRight.tags.has('Adjective')) {\n term.chunk = 'Adjective'\n continue\n }\n if (onRight && onRight.tags.has('Verb')) {\n term.chunk = 'Verb'\n continue\n }\n }\n }\n }\n}\nexport default byNeighbour\n","const rules = [\n // === Conjunction ===\n // that the houses\n { match: '[that] #Determiner #Noun', group: 0, chunk: 'Pivot' },\n // estimated that\n { match: '#PastTense [that]', group: 0, chunk: 'Pivot' },\n // so the\n { match: '[so] #Determiner', group: 0, chunk: 'Pivot' },\n\n // === Adjective ===\n // was really nice\n { match: '#Copula #Adverb+? [#Adjective]', group: 0, chunk: 'Adjective' },\n // was nice\n // { match: '#Copula [#Adjective]', group: 0, chunk: 'Adjective' },\n // nice and cool\n { match: '#Adjective and #Adjective', chunk: 'Adjective' },\n // really nice\n // { match: '#Adverb+ #Adjective', chunk: 'Adjective' },\n\n // === Verb ===\n // quickly and suddenly run\n { match: '#Adverb+ and #Adverb #Verb', chunk: 'Verb' },\n // sitting near\n { match: '#Gerund #Adjective$', chunk: 'Verb' },\n // going to walk\n { match: '#Gerund to #Verb', chunk: 'Verb' },\n // come and have a drink\n { match: '#PresentTense and #PresentTense', chunk: 'Verb' },\n // really not\n { match: '#Adverb #Negative', chunk: 'Verb' },\n // want to see\n { match: '(want|wants|wanted) to #Infinitive', chunk: 'Verb' },\n // walk ourselves\n { match: '#Verb #Reflexive', chunk: 'Verb' },\n // tell him the story\n // { match: '#PresentTense [#Pronoun] #Determiner', group: 0, chunk: 'Verb' },\n // tries to walk\n { match: '#Verb [to] #Adverb? #Infinitive', group: 0, chunk: 'Verb' },\n // upon seeing\n { match: '[#Preposition] #Gerund', group: 0, chunk: 'Verb' },\n // ensure that\n { match: '#Infinitive [that] <Noun>', group: 0, chunk: 'Verb' },\n\n // === Noun ===\n // the brown fox\n // { match: '#Determiner #Adjective+ #Noun', chunk: 'Noun' },\n // the fox\n // { match: '(the|this) <Noun>', chunk: 'Noun' },\n // brown fox\n // { match: '#Adjective+ <Noun>', chunk: 'Noun' },\n // --- of ---\n // son of a gun\n { match: '#Noun of #Determiner? #Noun', chunk: 'Noun' },\n // 3 beautiful women\n { match: '#Value+ #Adverb? #Adjective', chunk: 'Noun' },\n // the last russian tsar\n { match: 'the [#Adjective] #Noun', chunk: 'Noun' },\n // breakfast in bed\n { match: '#Singular in #Determiner? #Singular', chunk: 'Noun' },\n // Some citizens in this Canadian capital\n { match: '#Plural [in] #Determiner? #Noun', group: 0, chunk: 'Pivot' },\n // indoor and outdoor seating\n { match: '#Noun and #Determiner? #Noun', notIf: '(#Possessive|#Pronoun)', chunk: 'Noun' },\n // boys and girls\n // { match: '#Plural and #Determiner? #Plural', chunk: 'Noun' },\n // tomatoes and cheese\n // { match: '#Noun and #Determiner? #Noun', notIf: '#Pronoun', chunk: 'Noun' },\n // that is why\n // { match: '[that] (is|was)', group: 0, chunk: 'Noun' },\n]\n\nlet net = null\nconst matcher = function (view, _, world) {\n const { methods } = world\n net = net || methods.one.buildNet(rules, world)\n view.sweep(net)\n}\nexport default matcher\n","const setChunk = function (term, chunk) {\n const env = typeof process === 'undefined' || !process.env ? self.env || {} : process.env\n if (env.DEBUG_CHUNKS) {\n const str = (term.normal + \"'\").padEnd(8)\n console.log(` | '${str} → \\x1b[34m${chunk.padEnd(12)}\\x1b[0m \\x1b[2m -fallback- \\x1b[0m`) // eslint-disable-line\n }\n term.chunk = chunk\n}\n\n// ensure everything has a chunk\nconst fallback = function (document) {\n for (let n = 0; n < document.length; n += 1) {\n for (let t = 0; t < document[n].length; t += 1) {\n const term = document[n][t]\n if (term.chunk === undefined) {\n // conjunctions stand alone\n if (term.tags.has('Conjunction')) {\n setChunk(term, 'Pivot')\n } else if (term.tags.has('Preposition')) {\n setChunk(term, 'Pivot')\n } else if (term.tags.has('Adverb')) {\n setChunk(term, 'Verb')\n }\n // just take the chunk on the right?\n // else if (document[n][t + 1] && document[n][t + 1].chunk) {\n // setChunk(term, document[n][t + 1].chunk)\n // }\n // // or take the chunk on the left\n // else if (document[n][t - 1] && document[n][t - 1].chunk) {\n // setChunk(term, document[n][t - 1].chunk)\n else {\n // ¯\\_(ツ)_/¯\n term.chunk = 'Noun'\n }\n }\n }\n }\n}\nexport default fallback\n","const fixUp = function (docs) {\n const byChunk = []\n let current = null\n docs.forEach(terms => {\n // ensure an adjective chunk is preceded by a copula\n for (let i = 0; i < terms.length; i += 1) {\n const term = terms[i]\n if (current && term.chunk === current) {\n byChunk[byChunk.length - 1].terms.push(term)\n } else {\n byChunk.push({ chunk: term.chunk, terms: [term] })\n current = term.chunk\n }\n }\n })\n // ensure every verb-phrase actually has a verb\n byChunk.forEach(c => {\n if (c.chunk === 'Verb') {\n const hasVerb = c.terms.find(t => t.tags.has('Verb'))\n if (!hasVerb) {\n c.terms.forEach(t => t.chunk = null)\n }\n }\n })\n}\nexport default fixUp\n","import easyMode from './01-easy.js'\nimport byNeighbour from './02-neighbours.js'\nimport matcher from './03-matcher.js'\nimport fallback from './04-fallback.js'\nimport fixUp from './05-fixUp.js'\n/* Chunks:\n Noun\n Verb\n Adjective\n Pivot\n*/\n\nconst findChunks = function (view) {\n const { document, world } = view\n easyMode(document)\n byNeighbour(document)\n matcher(view, document, world)\n // matcher(view, document, world) //run it 2nd time\n fallback(document, world)\n fixUp(document, world)\n}\nexport default { chunks: findChunks }\n","import api from './api/api.js'\nimport compute from './compute/index.js'\n\nexport default {\n compute: compute,\n api: api,\n hooks: ['chunks'],\n}\n","// return the nth elem of a doc\nconst hasPeriod = /\\./g\n\nconst api = function (View) {\n\n class Acronyms extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Acronyms'\n }\n strip() {\n this.docs.forEach(terms => {\n terms.forEach(term => {\n term.text = term.text.replace(hasPeriod, '')\n term.normal = term.normal.replace(hasPeriod, '')\n })\n })\n return this\n }\n addPeriods() {\n this.docs.forEach(terms => {\n terms.forEach(term => {\n term.text = term.text.replace(hasPeriod, '')\n term.normal = term.normal.replace(hasPeriod, '')\n term.text = term.text.split('').join('.') + '.'\n term.normal = term.normal.split('').join('.') + '.'\n })\n })\n return this\n }\n }\n\n View.prototype.acronyms = function (n) {\n let m = this.match('#Acronym')\n m = m.getNth(n)\n return new Acronyms(m.document, m.pointer)\n }\n}\nexport default api\n","const hasOpen = /\\(/\nconst hasClosed = /\\)/\n\nconst findEnd = function (terms, i) {\n for (; i < terms.length; i += 1) {\n if (terms[i].post && hasClosed.test(terms[i].post)) {\n let [, index] = terms[i].index\n index = index || 0\n return index\n }\n }\n return null\n}\n\nconst find = function (doc) {\n const ptrs = []\n doc.docs.forEach(terms => {\n const isOpen = false\n for (let i = 0; i < terms.length; i += 1) {\n const term = terms[i]\n if (!isOpen && term.pre && hasOpen.test(term.pre)) {\n const end = findEnd(terms, i)\n if (end !== null) {\n const [n, start] = terms[i].index\n ptrs.push([n, start, end + 1, terms[i].id])\n i = end\n }\n }\n }\n })\n return doc.update(ptrs)\n}\n\nconst strip = function (m) {\n m.docs.forEach(terms => {\n terms[0].pre = terms[0].pre.replace(hasOpen, '')\n const last = terms[terms.length - 1]\n last.post = last.post.replace(hasClosed, '')\n })\n return m\n}\nexport { find, strip }\n","import { find, strip } from './fns.js'\n\nconst api = function (View) {\n class Parentheses extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Possessives'\n }\n strip() {\n return strip(this)\n }\n }\n\n View.prototype.parentheses = function (n) {\n let m = find(this)\n m = m.getNth(n)\n return new Parentheses(m.document, m.pointer)\n }\n}\nexport default api\n","// return the nth elem of a doc\nconst apostropheS = /'s$/\n\nconst find = function (doc) {\n let m = doc.match('#Possessive+')\n // expand it to include 'john smith's'\n if (m.has('#Person')) {\n m = m.growLeft('#Person+')\n }\n if (m.has('#Place')) {\n m = m.growLeft('#Place+')\n }\n if (m.has('#Organization')) {\n m = m.growLeft('#Organization+')\n }\n return m\n}\n\n\nconst api = function (View) {\n\n class Possessives extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Possessives'\n }\n strip() {\n this.docs.forEach(terms => {\n terms.forEach(term => {\n term.text = term.text.replace(apostropheS, '')\n term.normal = term.normal.replace(apostropheS, '')\n })\n })\n return this\n }\n }\n\n View.prototype.possessives = function (n) {\n let m = find(this)\n m = m.getNth(n)\n return new Possessives(m.document, m.pointer)\n }\n}\nexport default api\n","/* eslint-disable regexp/no-dupe-characters-character-class */\n\nconst pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes' «, »\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('[' + Object.keys(pairs).join('') + ']')\nconst hasClosed = RegExp('[' + Object.values(pairs).join('') + ']')\n\nconst findEnd = function (terms, i) {\n const have = terms[i].pre.match(hasOpen)[0] || ''\n if (!have || !pairs[have]) {\n return null\n }\n const want = pairs[have]\n for (; i < terms.length; i += 1) {\n if (terms[i].post && terms[i].post.match(want)) {\n return i\n }\n }\n return null\n}\n\nconst find = function (doc) {\n const ptrs = []\n doc.docs.forEach(terms => {\n const isOpen = false\n for (let i = 0; i < terms.length; i += 1) {\n const term = terms[i]\n if (!isOpen && term.pre && hasOpen.test(term.pre)) {\n const end = findEnd(terms, i)\n if (end !== null) {\n const [n, start] = terms[i].index\n ptrs.push([n, start, end + 1, terms[i].id])\n i = end\n }\n }\n }\n })\n return doc.update(ptrs)\n}\n\nconst strip = function (m) {\n m.docs.forEach(terms => {\n terms[0].pre = terms[0].pre.replace(hasOpen, '')\n const lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(hasClosed, '')\n })\n}\nexport { find, strip }\n","import { find, strip } from './fns.js'\n\nconst api = function (View) {\n\n class Quotations extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Possessives'\n }\n strip() {\n return strip(this)\n }\n }\n\n View.prototype.quotations = function (n) {\n let m = find(this)\n m = m.getNth(n)\n return new Quotations(m.document, m.pointer)\n }\n}\nexport default api\n","/** return anything tagged as a phone number */\nconst phoneNumbers = function (n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n m = m.getNth(n)\n return m\n}\n\n// setup easy helper methods\nconst selections = [\n ['hyphenated', '@hasHyphen .'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n // ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n ['abbreviations', '#Abbreviation'],\n ['honorifics', '#Honorific'],\n]\n\n// aliases\nconst aliases = [\n ['emojis', 'emoji'],\n ['atmentions', 'atMentions'],\n]\n\nconst addMethods = function (View) {\n // add a list of new helper methods\n selections.forEach(a => {\n View.prototype[a[0]] = function (n) {\n const m = this.match(a[1])\n return typeof n === 'number' ? m.get(n) : m\n }\n })\n View.prototype.phoneNumbers = phoneNumbers\n // add aliases\n aliases.forEach(a => {\n View.prototype[a[0]] = View.prototype[a[1]]\n })\n}\n\nexport default addMethods\n","const hasSlash = /\\//\n\nconst api = function (View) {\n\n class Slashes extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Slashes'\n }\n split() {\n return this.map((m) => {\n const str = m.text()\n const arr = str.split(hasSlash)\n m = m.replaceWith(arr.join(' '))\n return m.growRight('(' + arr.join('|') + ')+')\n })\n }\n }\n\n View.prototype.slashes = function (n) {\n let m = this.match('#SlashedTerm')\n m = m.getNth(n)\n return new Slashes(m.document, m.pointer)\n }\n}\nexport default api\n","import addAcronyms from './acronyms/index.js'\nimport addParentheses from './parentheses/index.js'\nimport addPossessives from './possessives/index.js'\nimport addQuotations from './quotations/index.js'\nimport addSelections from './selections/index.js'\nimport addSlashes from './slashes/index.js'\n\nexport default {\n api: function (View) {\n addAcronyms(View)\n addParentheses(View)\n addPossessives(View)\n addQuotations(View)\n addSelections(View)\n addSlashes(View)\n }\n}\n","const termLoop = function (view, cb) {\n view.docs.forEach(terms => {\n terms.forEach(cb)\n })\n}\n\nexport default {\n // remove titlecasing, uppercase\n 'case': (doc) => {\n termLoop(doc, (term) => {\n term.text = term.text.toLowerCase()\n })\n },\n // visually romanize/anglicize 'Björk' into 'Bjork'.\n 'unicode': (doc) => {\n const world = doc.world\n const killUnicode = world.methods.one.killUnicode\n termLoop(doc, (term) => term.text = killUnicode(term.text, world))\n },\n // remove hyphens, newlines, and force one space between words\n 'whitespace': (doc) => {\n termLoop(doc, (term) => {\n // one space between words\n term.post = term.post.replace(/\\s+/g, ' ')\n term.post = term.post.replace(/\\s([.,?!:;])/g, '$1')//no whitespace before a period, etc\n // no whitepace before a word\n term.pre = term.pre.replace(/\\s+/g, '')\n })\n },\n // remove commas, semicolons - but keep sentence-ending punctuation\n 'punctuation': (doc) => {\n termLoop(doc, (term) => {\n // turn dashes to spaces\n term.post = term.post.replace(/[–—-]/g, ' ')\n // remove comma, etc \n term.post = term.post.replace(/[,:;]/g, '')\n // remove elipses\n term.post = term.post.replace(/\\.{2,}/g, '')\n // remove repeats\n term.post = term.post.replace(/\\?{2,}/g, '?')\n term.post = term.post.replace(/!{2,}/g, '!')\n // replace ?!\n term.post = term.post.replace(/\\?!+/g, '?')\n })\n // trim end\n const docs = doc.docs\n const terms = docs[docs.length - 1]\n if (terms && terms.length > 0) {\n const lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/ /g, '')\n }\n },\n\n // ====== subsets ===\n\n // turn \"isn't\" to \"is not\"\n 'contractions': (doc) => {\n doc.contractions().expand()\n },\n //remove periods from acronyms, like 'F.B.I.'\n 'acronyms': (doc) => {\n doc.acronyms().strip()\n },\n //remove words inside brackets (like these)\n 'parentheses': (doc) => {\n doc.parentheses().strip()\n },\n // turn \"Google's tax return\" to \"Google tax return\"\n 'possessives': (doc) => {\n doc.possessives().strip()\n },\n // turn \"tax return\" to tax return\n 'quotations': (doc) => {\n doc.quotations().strip()\n },\n\n // remove them\n 'emoji': (doc) => {\n doc.emojis().remove()\n },\n //turn 'Vice Admiral John Smith' to 'John Smith'\n 'honorifics': (doc) => {\n doc.match('#Honorific+ #Person').honorifics().remove()\n },\n // remove needless adverbs\n 'adverbs': (doc) => {\n doc.adverbs().remove()\n },\n\n // turn \"batmobiles\" into \"batmobile\"\n 'nouns': (doc) => {\n doc.nouns().toSingular()\n },\n // turn all verbs into Infinitive form - \"I walked\" → \"I walk\"\n 'verbs': (doc) => {\n doc.verbs().toInfinitive()\n },\n // turn \"fifty\" into \"50\"\n 'numbers': (doc) => {\n doc.numbers().toNumber()\n },\n\n /** remove bullets from beginning of phrase */\n 'debullet': (doc) => {\n const hasBullet = /^\\s*([-–—*•])\\s*$/\n doc.docs.forEach(terms => {\n //remove bullet symbols\n if (hasBullet.test(terms[0].pre)) {\n terms[0].pre = terms[0].pre.replace(hasBullet, '')\n }\n })\n return doc\n }\n}\n","import methods from './methods.js'\n\n// turn presets into key-vals\nconst split = (str) => {\n return str.split('|').reduce((h, k) => {\n h[k] = true\n return h\n }, {})\n}\n\nconst light = 'unicode|punctuation|whitespace|acronyms'\nconst medium = '|case|contractions|parentheses|quotations|emoji|honorifics|debullet'\nconst heavy = '|possessives|adverbs|nouns|verbs'\nconst presets = {\n light: split(light),\n medium: split(light + medium),\n heavy: split(light + medium + heavy)\n}\n\nexport default function (View) {\n View.prototype.normalize = function (opts = 'light') {\n if (typeof opts === 'string') {\n opts = presets[opts]\n }\n // run each method\n Object.keys(opts).forEach(fn => {\n if (methods.hasOwnProperty(fn)) {\n methods[fn](this, opts[fn])\n }\n })\n return this\n }\n}","import api from './api.js'\n\nexport default {\n api\n}","const findNouns = function (doc) {\n let m = doc.clauses().match('<Noun>')\n let commas = m.match('@hasComma')\n // allow toronto, ontario\n commas = commas.not('#Place')\n if (commas.found) {\n m = m.splitAfter(commas)\n }\n // yo there\n m = m.splitOn('#Expression')\n // these are individual nouns\n m = m.splitOn('(he|she|we|you|they|i)')\n // a client i saw\n m = m.splitOn('(#Noun|#Adjective) [(he|him|she|it)]', 0)\n // give him the best\n m = m.splitOn('[(he|him|she|it)] (#Determiner|#Value)', 0)\n // the noise the slide makes\n m = m.splitBefore('#Noun [(the|a|an)] #Adjective? #Noun', 0)\n // here spencer slept\n m = m.splitOn('[(here|there)] #Noun', 0)\n // put it there\n m = m.splitOn('[#Noun] (here|there)', 0)\n // its great purposes\n // give [parents] [our money]\n m = m.splitBefore('(our|my|their|your)')\n // tell my friend that he\n m = m.splitOn('#Noun [#Determiner]', 0)\n // his excuses\n // m = m.splitAfter('(his|hers|yours|ours|theirs)')\n // m = m.not('^#Determiner')\n //ensure there's actually a noun\n m = m.if('#Noun')\n return m\n}\nexport default findNouns\n","// https://www.trentu.ca/history/subordinate-clause-and-complex-sentence\nconst list = [\n 'after',\n 'although',\n 'as if',\n 'as long as',\n 'as',\n 'because',\n 'before',\n 'even if',\n 'even though',\n 'ever since',\n 'if',\n 'in order that',\n 'provided that',\n 'since',\n 'so that',\n 'than',\n 'that',\n 'though',\n 'unless',\n 'until',\n 'what',\n 'whatever',\n 'when',\n 'whenever',\n 'where',\n 'whereas',\n 'wherever',\n 'whether',\n 'which',\n 'whichever',\n 'who',\n 'whoever',\n 'whom',\n 'whomever',\n 'whose',\n]\n\nconst isSubordinate = function (m) {\n // athletes from toronto, days since december\n if (m.before('#Preposition$').found) {\n return true\n }\n const leadIn = m.before()\n if (!leadIn.found) {\n return false\n }\n for (let i = 0; i < list.length; i += 1) {\n if (m.has(list[i])) {\n return true\n }\n }\n return false\n}\nexport default isSubordinate\n","const notPlural = '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\nconst isPlural = function (m, root) {\n // const { looksPlural } = m.world.methods.two\n if (m.has('#Plural')) {\n return true\n }\n // two singular nouns are plural noun phrase\n if (m.has('#Noun and #Noun')) {\n return true\n }\n if (m.has('(we|they)')) {\n return true\n }\n // these can't be plural\n if (root.has(notPlural) === true) {\n return false\n }\n if (m.has('#Singular')) {\n return false\n }\n // word-reg fallback\n const str = root.text('normal')\n // ends with a brutal s fallback\n return str.length > 3 && str.endsWith('s') && !str.endsWith('ss')\n}\nexport default isPlural\n","import isSubordinate from './isSubordinate.js'\nimport isPlural from './isPlural.js'\n\nconst getRoot = function (m) {\n let tmp = m.clone()\n tmp = tmp.match('#Noun+')\n tmp = tmp.remove('(#Adjective|#Preposition|#Determiner|#Value)')\n tmp = tmp.not('#Possessive')\n tmp = tmp.first()\n if (!tmp.found) {\n return m\n }\n return tmp\n}\n\nconst parseNoun = function (m) {\n const root = getRoot(m)\n return {\n determiner: m.match('#Determiner').eq(0),\n adjectives: m.match('#Adjective'),\n number: m.values(),\n isPlural: isPlural(m, root),\n isSubordinate: isSubordinate(m),\n root: root,\n }\n}\nexport default parseNoun\n","import parseNoun from './parse.js'\n\nconst toText = m => m.text()\nconst toArray = m => m.json({ terms: false, normal: true }).map(s => s.normal)\n\nconst getNum = function (m) {\n const num = null\n if (!m.found) {\n return num\n }\n const val = m.values(0)\n if (val.found) {\n const obj = val.parse()[0] || {}\n return obj.num\n }\n return num\n}\n\nconst toJSON = function (m) {\n const res = parseNoun(m)\n return {\n root: toText(res.root),\n number: getNum(res.number),\n determiner: toText(res.determiner),\n adjectives: toArray(res.adjectives),\n isPlural: res.isPlural,\n isSubordinate: res.isSubordinate,\n }\n}\nexport default toJSON\n","\nconst hasPlural = function (root) {\n if (root.has('^(#Uncountable|#ProperNoun|#Place|#Pronoun|#Acronym)+$')) {\n return false\n }\n return true\n}\nexport default hasPlural","import hasPlural from './hasPlural.js'\n\nconst keep = { tags: true }\n\nconst nounToPlural = function (m, parsed) {\n // already plural?\n if (parsed.isPlural === true) {\n return m\n }\n // handle \"steve's\"\n if (parsed.root.has('#Possessive')) {\n parsed.root = parsed.root.possessives().strip()\n }\n // is a plural appropriate?\n if (!hasPlural(parsed.root)) {\n return m\n }\n const { methods, model } = m.world\n const { toPlural } = methods.two.transform.noun\n // inflect the root noun\n const str = parsed.root.text({ keepPunct: false })\n const plural = toPlural(str, model)\n m.match(parsed.root).replaceWith(plural, keep).tag('Plural', 'toPlural')\n // should we change the determiner/article?\n if (parsed.determiner.has('(a|an)')) {\n // 'a captain' -> 'the captains'\n // m.replace(parsed.determiner, 'the', keep)\n m.remove(parsed.determiner)\n }\n // should we change the following copula?\n const copula = parsed.root.after('not? #Adverb+? [#Copula]', 0)\n if (copula.found) {\n if (copula.has('is')) {\n m.replace(copula, 'are')\n } else if (copula.has('was')) {\n m.replace(copula, 'were')\n }\n }\n return m\n}\nexport default nounToPlural\n","const keep = { tags: true }\n\nconst nounToSingular = function (m, parsed) {\n // already singular?\n if (parsed.isPlural === false) {\n return m\n }\n const { methods, model } = m.world\n const { toSingular } = methods.two.transform.noun\n // inflect the root noun\n const str = parsed.root.text('normal')\n const single = toSingular(str, model)\n m.replace(parsed.root, single, keep).tag('Singular', 'toPlural')\n // should we change the determiner/article?\n // m.debug()\n return m\n}\nexport default nounToSingular\n","import find from '../find.js'\nimport parseNoun from './parse.js'\nimport toJSON from './toJSON.js'\nimport toPlural from './toPlural.js'\nimport hasPlural from './hasPlural.js'\nimport toSingular from './toSingular.js'\n\nconst api = function (View) {\n class Nouns extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Nouns'\n }\n\n parse(n) {\n return this.getNth(n).map(parseNoun)\n }\n\n json(n) {\n const opts = typeof n === 'object' ? n : {}\n return this.getNth(n).map(m => {\n const json = m.toView().json(opts)[0] || {}\n if (opts && opts.noun !== false) {\n json.noun = toJSON(m)\n }\n return json\n }, [])\n }\n conjugate(n) {\n const methods = this.world.methods.two.transform.noun\n return this.getNth(n).map(m => {\n const parsed = parseNoun(m)\n const root = parsed.root.compute('root').text('root')\n const res = {\n Singular: root,\n }\n if (hasPlural(parsed.root)) {\n res.Plural = methods.toPlural(root, this.model)\n }\n // only show plural if one exists\n if (res.Singular === res.Plural) {\n delete res.Plural\n }\n return res\n }, [])\n }\n isPlural(n) {\n const res = this.filter(m => parseNoun(m).isPlural)\n return res.getNth(n)\n }\n\n isSingular(n) {\n const res = this.filter(m => !parseNoun(m).isPlural)\n return res.getNth(n)\n }\n\n adjectives(n) {\n let res = this.update([])\n this.forEach(m => {\n const adj = parseNoun(m).adjectives\n if (adj.found) {\n res = res.concat(adj)\n }\n })\n return res.getNth(n)\n }\n\n toPlural(n) {\n return this.getNth(n).map(m => {\n return toPlural(m, parseNoun(m))\n })\n // return new Nouns(all.document, all.pointer)\n }\n\n toSingular(n) {\n return this.getNth(n).map(m => {\n const res = parseNoun(m)\n return toSingular(m, res)\n })\n }\n // create a new View, from this one\n update(pointer) {\n const m = new Nouns(this.document, pointer)\n m._cache = this._cache // share this full thing\n return m\n }\n }\n View.prototype.nouns = function (n) {\n let m = find(this)\n m = m.getNth(n)\n return new Nouns(this.document, m.pointer)\n }\n}\nexport default api\n","import api from './api/api.js'\n\nexport default {\n api,\n}\n","const findFractions = function (doc, n) {\n // five eighths\n let m = doc.match('#Fraction+')\n // remove 'two and five eights'\n m = m.filter(r => {\n return !r.lookBehind('#Value and$').found\n })\n // thirty seconds\n m = m.notIf('#Value seconds')\n\n if (typeof n === 'number') {\n m = m.eq(n)\n }\n return m\n}\nexport default findFractions\n","//support global multipliers, like 'half-million' by doing 'million' then multiplying by 0.5\nconst findModifiers = str => {\n const mults = [\n {\n reg: /^(minus|negative)[\\s-]/i,\n mult: -1,\n },\n {\n reg: /^(a\\s)?half[\\s-](of\\s)?/i,\n mult: 0.5,\n },\n // {\n // reg: /^(a\\s)?quarter[\\s\\-]/i,\n // mult: 0.25\n // }\n ]\n for (let i = 0; i < mults.length; i++) {\n if (mults[i].reg.test(str) === true) {\n return {\n amount: mults[i].mult,\n str: str.replace(mults[i].reg, ''),\n }\n }\n }\n return {\n amount: 1,\n str: str,\n }\n}\n\nexport default findModifiers\n","export default {\n ones: {\n zeroth: 0,\n first: 1,\n second: 2,\n third: 3,\n fourth: 4,\n fifth: 5,\n sixth: 6,\n seventh: 7,\n eighth: 8,\n ninth: 9,\n zero: 0,\n one: 1,\n two: 2,\n three: 3,\n four: 4,\n five: 5,\n six: 6,\n seven: 7,\n eight: 8,\n nine: 9,\n },\n teens: {\n tenth: 10,\n eleventh: 11,\n twelfth: 12,\n thirteenth: 13,\n fourteenth: 14,\n fifteenth: 15,\n sixteenth: 16,\n seventeenth: 17,\n eighteenth: 18,\n nineteenth: 19,\n ten: 10,\n eleven: 11,\n twelve: 12,\n thirteen: 13,\n fourteen: 14,\n fifteen: 15,\n sixteen: 16,\n seventeen: 17,\n eighteen: 18,\n nineteen: 19,\n },\n tens: {\n twentieth: 20,\n thirtieth: 30,\n fortieth: 40,\n fourtieth: 40,\n fiftieth: 50,\n sixtieth: 60,\n seventieth: 70,\n eightieth: 80,\n ninetieth: 90,\n twenty: 20,\n thirty: 30,\n forty: 40,\n fourty: 40,\n fifty: 50,\n sixty: 60,\n seventy: 70,\n eighty: 80,\n ninety: 90,\n },\n multiples: {\n hundredth: 100,\n thousandth: 1000,\n millionth: 1e6,\n billionth: 1e9,\n trillionth: 1e12,\n quadrillionth: 1e15,\n quintillionth: 1e18,\n sextillionth: 1e21,\n septillionth: 1e24,\n hundred: 100,\n thousand: 1000,\n million: 1e6,\n billion: 1e9,\n trillion: 1e12,\n quadrillion: 1e15,\n quintillion: 1e18,\n sextillion: 1e21,\n septillion: 1e24,\n grand: 1000,\n },\n}\n","import words from './data.js'\n\n//prevent things like 'fifteen ten', and 'five sixty'\nconst isValid = (w, has) => {\n if (words.ones.hasOwnProperty(w)) {\n if (has.ones || has.teens) {\n return false\n }\n } else if (words.teens.hasOwnProperty(w)) {\n if (has.ones || has.teens || has.tens) {\n return false\n }\n } else if (words.tens.hasOwnProperty(w)) {\n if (has.ones || has.teens || has.tens) {\n return false\n }\n }\n return true\n}\nexport default isValid\n","import words from './data.js'\n\n//concatenate into a string with leading '0.'\nconst parseDecimals = function (arr) {\n let str = '0.'\n for (let i = 0; i < arr.length; i++) {\n const w = arr[i]\n if (words.ones.hasOwnProperty(w) === true) {\n str += words.ones[w]\n } else if (words.teens.hasOwnProperty(w) === true) {\n str += words.teens[w]\n } else if (words.tens.hasOwnProperty(w) === true) {\n str += words.tens[w]\n } else if (/^[0-9]$/.test(w) === true) {\n str += w\n } else {\n return 0\n }\n }\n return parseFloat(str)\n}\n\nexport default parseDecimals\n","//parse a string like \"4,200.1\" into Number 4200.1\nconst parseNumeric = str => {\n //remove ordinal - 'th/rd'\n str = str.replace(/1st$/, '1')\n str = str.replace(/2nd$/, '2')\n str = str.replace(/3rd$/, '3')\n str = str.replace(/([4567890])r?th$/, '$1')\n //remove prefixes\n str = str.replace(/^[$€¥£¢]/, '')\n //remove suffixes\n str = str.replace(/[%$€¥£¢]$/, '')\n //remove commas\n str = str.replace(/,/g, '')\n //split '5kg' from '5'\n str = str.replace(/([0-9])([a-z\\u00C0-\\u00FF]{1,2})$/, '$1')\n return str\n}\n\nexport default parseNumeric\n","import findModifiers from './findModifiers.js'\nimport words from './data.js'\nimport isValid from './validate.js'\nimport parseDecimals from './parseDecimals.js'\nimport parseNumeric from './parseNumeric.js'\nconst improperFraction = /^([0-9,. ]+)\\/([0-9,. ]+)$/\n\n//some numbers we know\nconst casualForms = {\n 'a few': 3,\n 'a couple': 2,\n 'a dozen': 12,\n 'two dozen': 24,\n zero: 0,\n}\n\n// a 'section' is something like 'fifty-nine thousand'\n// turn a section into something we can add to - like 59000\nconst section_sum = obj => {\n return Object.keys(obj).reduce((sum, k) => {\n sum += obj[k]\n return sum\n }, 0)\n}\n\n//turn a string into a number\nconst parse = function (str) {\n //convert some known-numbers\n if (casualForms.hasOwnProperty(str) === true) {\n return casualForms[str]\n }\n //'a/an' is 1\n if (str === 'a' || str === 'an') {\n return 1\n }\n const modifier = findModifiers(str)\n str = modifier.str\n let last_mult = null\n let has = {}\n let sum = 0\n let isNegative = false\n const terms = str.split(/[ -]/)\n // const isFraction = findFraction(terms)\n for (let i = 0; i < terms.length; i++) {\n let w = terms[i]\n w = parseNumeric(w)\n\n if (!w || w === 'and') {\n continue\n }\n if (w === '-' || w === 'negative') {\n isNegative = true\n continue\n }\n if (w.charAt(0) === '-') {\n isNegative = true\n w = w.substring(1)\n }\n\n //decimal mode\n if (w === 'point') {\n sum += section_sum(has)\n sum += parseDecimals(terms.slice(i + 1, terms.length))\n sum *= modifier.amount\n return sum\n }\n\n //improper fraction\n const fm = w.match(improperFraction)\n if (fm) {\n const num = parseFloat(fm[1].replace(/[, ]/g, ''))\n const denom = parseFloat(fm[2].replace(/[, ]/g, ''))\n if (denom) {\n sum += num / denom || 0\n }\n continue\n }\n // try to support 'two fifty'\n if (words.tens.hasOwnProperty(w)) {\n if (has.ones && Object.keys(has).length === 1) {\n sum = has.ones * 100\n has = {}\n }\n }\n\n //prevent mismatched units, like 'seven eleven' if not a fraction\n if (isValid(w, has) === false) {\n return null\n }\n\n //buildOut section, collect 'has' values\n if (/^[0-9.]+$/.test(w)) {\n has.ones = parseFloat(w) //not technically right\n } else if (words.ones.hasOwnProperty(w) === true) {\n has.ones = words.ones[w]\n } else if (words.teens.hasOwnProperty(w) === true) {\n has.teens = words.teens[w]\n } else if (words.tens.hasOwnProperty(w) === true) {\n has.tens = words.tens[w]\n } else if (words.multiples.hasOwnProperty(w) === true) {\n let mult = words.multiples[w]\n\n //something has gone wrong : 'two hundred five hundred'\n //possibly because it's a fraction\n if (mult === last_mult) {\n return null\n }\n //support 'hundred thousand'\n //this one is tricky..\n if (mult === 100 && terms[i + 1] !== undefined) {\n const w2 = terms[i + 1]\n if (words.multiples[w2]) {\n mult *= words.multiples[w2] //hundredThousand/hundredMillion\n i += 1\n }\n }\n //natural order of things\n //five thousand, one hundred..\n if (last_mult === null || mult < last_mult) {\n sum += (section_sum(has) || 1) * mult\n last_mult = mult\n has = {}\n } else {\n //maybe hundred .. thousand\n sum += section_sum(has)\n last_mult = mult\n sum = (sum || 1) * mult\n has = {}\n }\n }\n }\n //dump the remaining has values\n sum += section_sum(has)\n //post-process add modifier\n sum *= modifier.amount\n sum *= isNegative ? -1 : 1\n //dont return 0, if it went straight-through\n if (sum === 0 && Object.keys(has).length === 0) {\n return null\n }\n return sum\n}\n\nexport default parse\n","const endS = /s$/\nimport parseText from '../numbers/parse/toNumber/index.js'\n\n// just using .toNumber() again may risk an infinite-loop\nconst parseNumber = function (m) {\n const str = m.text('reduced')\n return parseText(str)\n}\n\nconst mapping = {\n half: 2,\n halve: 2,\n quarter: 4,\n}\n\nconst slashForm = function (m) {\n const str = m.text('reduced')\n const found = str.match(/^([-+]?[0-9]+)\\/([-+]?[0-9]+)(st|nd|rd|th)?s?$/)\n if (found && found[1] && found[0]) {\n return {\n numerator: Number(found[1]),\n denominator: Number(found[2]),\n }\n }\n return null\n}\n\n// parse '4 out of 4'\nconst nOutOfN = function (m) {\n const found = m.match('[<num>#Value+] out of every? [<den>#Value+]')\n if (found.found !== true) {\n return null\n }\n let { num, den } = found.groups()\n if (!num || !den) {\n return null\n }\n num = parseNumber(num)\n den = parseNumber(den)\n if (!num || !den) {\n return null\n }\n if (typeof num === 'number' && typeof den === 'number') {\n return {\n numerator: num,\n denominator: den,\n }\n }\n return null\n}\n\n// parse 'five thirds'\nconst nOrinalth = function (m) {\n const found = m.match('[<num>(#Cardinal|a)+] [<den>#Fraction+]')\n if (found.found !== true) {\n return null\n }\n let { num, den } = found.groups()\n // -- parse numerator---\n // quick-support for 'a third'\n if (num.has('a')) {\n num = 1\n } else {\n // abuse the number-parser for 'thirty three'\n // let tmp = num.clone().unTag('Fraction')\n // num = tmp.numbers().get()[0]\n num = parseNumber(num)\n }\n // -- parse denominator --\n // turn 'thirds' into third\n let str = den.text('reduced')\n if (endS.test(str)) {\n str = str.replace(endS, '')\n den = den.replaceWith(str)\n }\n // support 'one half' as '1/2'\n if (mapping.hasOwnProperty(str)) {\n den = mapping[str]\n } else {\n // dem = dem.numbers().get()[0]\n den = parseNumber(den)\n }\n if (typeof num === 'number' && typeof den === 'number') {\n return {\n numerator: num,\n denominator: den,\n }\n }\n return null\n}\n\n// implied 1 in '100th of a', 'fifth of a'\nconst oneNth = function (m) {\n const found = m.match('^#Ordinal$')\n if (found.found !== true) {\n return null\n }\n // ensure it's '100th of a '\n if (m.lookAhead('^of .')) {\n // let num = found.numbers().get()[0]\n const num = parseNumber(found)\n return {\n numerator: 1,\n denominator: num,\n }\n }\n return null\n}\n\n// 'half'\nconst named = function (m) {\n const str = m.text('reduced')\n if (mapping.hasOwnProperty(str)) {\n return { numerator: 1, denominator: mapping[str] }\n }\n return null\n}\n\nconst round = n => {\n const rounded = Math.round(n * 1000) / 1000\n // don't round 1 millionth down into 0\n if (rounded === 0 && n !== 0) {\n return n\n }\n return rounded\n}\n\nconst parseFraction = function (m) {\n m = m.clone()\n const res = named(m) || slashForm(m) || nOutOfN(m) || nOrinalth(m) || oneNth(m) || null\n if (res !== null) {\n // do the math\n if (res.numerator && res.denominator) {\n res.decimal = res.numerator / res.denominator\n res.decimal = round(res.decimal)\n }\n }\n return res\n}\nexport default parseFraction\n","/**\n * turn big numbers, like 2.3e+22, into a string with a ton of trailing 0's\n * */\nconst numToString = function (n) {\n if (n < 1000000) {\n return String(n)\n }\n let str\n if (typeof n === 'number') {\n str = n.toFixed(0)\n } else {\n str = n\n }\n if (str.indexOf('e+') === -1) {\n return str\n }\n return str\n .replace('.', '')\n .split('e+')\n .reduce(function (p, b) {\n return p + Array(b - p.length + 2).join(0)\n })\n}\nexport default numToString\n// console.log(numToString(2.5e+22));\n","const tens_mapping = [\n ['ninety', 90],\n ['eighty', 80],\n ['seventy', 70],\n ['sixty', 60],\n ['fifty', 50],\n ['forty', 40],\n ['thirty', 30],\n ['twenty', 20],\n]\nconst ones_mapping = [\n '',\n 'one',\n 'two',\n 'three',\n 'four',\n 'five',\n 'six',\n 'seven',\n 'eight',\n 'nine',\n 'ten',\n 'eleven',\n 'twelve',\n 'thirteen',\n 'fourteen',\n 'fifteen',\n 'sixteen',\n 'seventeen',\n 'eighteen',\n 'nineteen',\n]\n\nconst sequence = [\n [1e24, 'septillion'],\n [1e20, 'hundred sextillion'],\n [1e21, 'sextillion'],\n [1e20, 'hundred quintillion'],\n [1e18, 'quintillion'],\n [1e17, 'hundred quadrillion'],\n [1e15, 'quadrillion'],\n [1e14, 'hundred trillion'],\n [1e12, 'trillion'],\n [1e11, 'hundred billion'],\n [1e9, 'billion'],\n [1e8, 'hundred million'],\n [1e6, 'million'],\n [100000, 'hundred thousand'],\n [1000, 'thousand'],\n [100, 'hundred'],\n [1, 'one'],\n]\nexport { sequence, tens_mapping, ones_mapping }\n","import toString from '../../_toString.js'\nimport { sequence, ones_mapping, tens_mapping } from './data.js'\n/**\n * turns an integer/float into.ber, like 'fifty-five'\n */\n\n//turn number into an array of magnitudes, like [[5, million], [2, hundred]]\nconst breakdown_magnitudes = function (num) {\n let working = num\n const have = []\n sequence.forEach(a => {\n if (num >= a[0]) {\n const howmany = Math.floor(working / a[0])\n working -= howmany * a[0]\n if (howmany) {\n have.push({\n unit: a[1],\n count: howmany,\n })\n }\n }\n })\n return have\n}\n\n//turn numbers from 100-0 into their text\nconst breakdown_hundred = function (num) {\n const arr = []\n if (num > 100) {\n return arr //something bad happened..\n }\n for (let i = 0; i < tens_mapping.length; i++) {\n if (num >= tens_mapping[i][1]) {\n num -= tens_mapping[i][1]\n arr.push(tens_mapping[i][0])\n }\n }\n //(hopefully) we should only have 20-0 now\n if (ones_mapping[num]) {\n arr.push(ones_mapping[num])\n }\n return arr\n}\n\n/** print-out 'point eight nine'*/\nconst handle_decimal = num => {\n const names = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']\n const arr = []\n //parse it out like a string, because js math is such shit\n const str = toString(num)\n const decimal = str.match(/\\.([0-9]+)/)\n if (!decimal || !decimal[0]) {\n return arr\n }\n arr.push('point')\n const decimals = decimal[0].split('')\n for (let i = 0; i < decimals.length; i++) {\n arr.push(names[decimals[i]])\n }\n return arr\n}\n\n/** turns an integer into a textual number */\nconst toText = function (obj) {\n let num = obj.num\n // handle zero, quickly\n if (num === 0 || num === '0') {\n return 'zero' // no?\n }\n //big numbers, north of sextillion, aren't gonna work well..\n //keep them small..\n if (num > 1e21) {\n num = toString(num)\n }\n let arr = []\n //handle negative numbers\n if (num < 0) {\n arr.push('minus')\n num = Math.abs(num)\n }\n //break-down into units, counts\n const units = breakdown_magnitudes(num)\n //build-up the string from its components\n for (let i = 0; i < units.length; i++) {\n let unit_name = units[i].unit\n if (unit_name === 'one') {\n unit_name = ''\n //put an 'and' in here\n if (arr.length > 1) {\n arr.push('and')\n }\n }\n arr = arr.concat(breakdown_hundred(units[i].count))\n arr.push(unit_name)\n }\n //also support decimals - 'point eight'\n arr = arr.concat(handle_decimal(num))\n //remove empties\n arr = arr.filter(s => s)\n if (arr.length === 0) {\n arr[0] = ''\n }\n return arr.join(' ')\n}\n\nexport default toText\n\n// console.log(to_text(-1000.8));\n","import toText from '../../numbers/format/toText/index.js'\n\nconst toCardinal = function (obj) {\n if (!obj.numerator || !obj.denominator) {\n return ''\n }\n const a = toText({ num: obj.numerator })\n const b = toText({ num: obj.denominator })\n return `${a} out of ${b}`\n}\nexport default toCardinal\n","import textValue from '../toText/index.js'\n\nconst irregulars = {\n one: 'first',\n two: 'second',\n three: 'third',\n five: 'fifth',\n eight: 'eighth',\n nine: 'ninth',\n twelve: 'twelfth',\n twenty: 'twentieth',\n thirty: 'thirtieth',\n forty: 'fortieth',\n fourty: 'fourtieth',\n fifty: 'fiftieth',\n sixty: 'sixtieth',\n seventy: 'seventieth',\n eighty: 'eightieth',\n ninety: 'ninetieth',\n}\n\n/**\n * convert a javascript number to 'twentieth' format\n * */\nconst textOrdinal = obj => {\n const words = textValue(obj).split(' ')\n //convert the last number to an ordinal\n const last = words[words.length - 1]\n if (irregulars.hasOwnProperty(last)) {\n words[words.length - 1] = irregulars[last]\n } else {\n words[words.length - 1] = last.replace(/y$/, 'i') + 'th'\n }\n return words.join(' ')\n}\n\nexport default textOrdinal\n","import toText from '../../numbers/format/toText/index.js'\nimport textOrdinal from '../../numbers/format/toOrdinal/textOrdinal.js'\n\nconst toOrdinal = function (obj) {\n // don't divide by zero!\n if (!obj.numerator || !obj.denominator) {\n return ''\n }\n // create [two] [fifths]\n const start = toText({ num: obj.numerator })\n let end = textOrdinal({ num: obj.denominator })\n // 'one secondth' -> 'one half'\n if (obj.denominator === 2) {\n end = 'half'\n }\n if (start && end) {\n if (obj.numerator !== 1) {\n end += 's'\n }\n return `${start} ${end}`\n }\n return ''\n}\nexport default toOrdinal\n","import find from './find.js'\nimport parse from './parse.js'\nimport toCardinal from './convert/toCardinal.js'\nimport toOrdinal from './convert/toOrdinal.js'\n\nconst plugin = function (View) {\n /**\n */\n class Fractions extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Fractions'\n }\n parse(n) {\n return this.getNth(n).map(parse)\n }\n get(n) {\n return this.getNth(n).map(parse)\n }\n json(n) {\n return this.getNth(n).map(p => {\n const json = p.toView().json(n)[0]\n const parsed = parse(p)\n json.fraction = parsed\n return json\n }, [])\n }\n // become 0.5\n toDecimal(n) {\n this.getNth(n).forEach(m => {\n const { decimal } = parse(m)\n m = m.replaceWith(String(decimal), true)\n m.tag('NumericValue')\n m.unTag('Fraction')\n })\n return this\n }\n toFraction(n) {\n this.getNth(n).forEach(m => {\n const obj = parse(m)\n if (obj && typeof obj.numerator === 'number' && typeof obj.denominator === 'number') {\n const str = `${obj.numerator}/${obj.denominator}`\n this.replace(m, str)\n }\n })\n return this\n }\n toOrdinal(n) {\n this.getNth(n).forEach(m => {\n const obj = parse(m)\n let str = toOrdinal(obj)\n if (m.after('^#Noun').found) {\n str += ' of' // three fifths of dentists\n }\n m.replaceWith(str)\n })\n return this\n }\n toCardinal(n) {\n this.getNth(n).forEach(m => {\n const obj = parse(m)\n const str = toCardinal(obj)\n m.replaceWith(str)\n })\n return this\n }\n toPercentage(n) {\n this.getNth(n).forEach(m => {\n const { decimal } = parse(m)\n let percent = decimal * 100\n percent = Math.round(percent * 100) / 100 // round it\n m.replaceWith(`${percent}%`)\n })\n return this\n }\n }\n\n View.prototype.fractions = function (n) {\n let m = find(this)\n m = m.getNth(n)\n return new Fractions(this.document, m.pointer)\n }\n}\n\nexport default plugin\n","const ones = 'one|two|three|four|five|six|seven|eight|nine'\nconst tens = 'twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|fourty'\nconst teens = 'eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen'\n\n// this is a bit of a mess\n// segment consecutive number-words into sensible chunks\nconst findNumbers = function (doc) {\n let m = doc.match('#Value+')\n\n //\"50 83\"\n if (m.has('#NumericValue #NumericValue')) {\n //a comma may mean two numbers\n if (m.has('#Value @hasComma #Value')) {\n m.splitAfter('@hasComma')\n } else if (m.has('#NumericValue #Fraction')) {\n m.splitAfter('#NumericValue #Fraction')\n } else {\n m = m.splitAfter('#NumericValue')\n }\n }\n\n //three-length\n if (m.has('#Value #Value #Value') && !m.has('#Multiple')) {\n //twenty-five-twenty\n if (m.has('(' + tens + ') #Cardinal #Cardinal')) {\n m = m.splitAfter('(' + tens + ') #Cardinal')\n }\n }\n\n //two-length ones\n if (m.has('#Value #Value')) {\n //june 21st 1992 is two seperate values\n if (m.has('#NumericValue #NumericValue')) {\n m = m.splitOn('#Year')\n }\n //sixty fifteen\n if (m.has('(' + tens + ') (' + teens + ')')) {\n m = m.splitAfter('(' + tens + ')')\n }\n\n //\"72 82\"\n const double = m.match('#Cardinal #Cardinal')\n if (double.found && !m.has('(point|decimal|#Fraction)')) {\n //not 'two hundred'\n if (!double.has('#Cardinal (#Multiple|point|decimal)')) {\n // two fifty five\n const noMultiple = m.has(`(${ones}) (${tens})`)\n // twenty one\n const tensVal = double.has('(' + tens + ') #Cardinal')\n // hundredOne\n const multVal = double.has('#Multiple #Value')\n //one proper way, 'twenty one', or 'hundred one'\n if (!noMultiple && !tensVal && !multVal) {\n // double = double.firstTerm()\n double.terms().forEach(d => {\n m = m.splitOn(d)\n })\n }\n }\n }\n\n //seventh fifth\n if (m.match('#Ordinal #Ordinal').match('#TextValue').found && !m.has('#Multiple')) {\n //the one proper way, 'twenty first'\n if (!m.has('(' + tens + ') #Ordinal')) {\n m = m.splitAfter('#Ordinal')\n }\n }\n //fifth five\n m = m.splitBefore('#Ordinal [#Cardinal]', 0)\n //five 2017 (support '5 hundred', and 'twenty 5'\n if (m.has('#TextValue #NumericValue') && !m.has('(' + tens + '|#Multiple)')) {\n m = m.splitBefore('#TextValue #NumericValue')\n }\n }\n\n //5-8\n m = m.splitAfter('#NumberRange')\n // june 5th 1999\n m = m.splitBefore('#Year')\n return m\n}\n\nexport default findNumbers\n","import parseText from './toNumber/index.js'\nimport parseFraction from '../../fractions/parse.js'\n\nconst parseNumeric = function (str, m) {\n str = str.replace(/,/g, '')\n //parse a numeric-number\n const arr = str.split(/([0-9.,]*)/)\n // eslint-disable-next-line prefer-const\n let [prefix, num] = arr\n let suffix = arr.slice(2).join('')\n if (num !== '' && m.length < 2) {\n num = Number(num || str)\n //ensure that num is an actual number\n if (typeof num !== 'number') {\n num = null\n }\n // strip an ordinal off the suffix\n suffix = suffix || ''\n if (suffix === 'st' || suffix === 'nd' || suffix === 'rd' || suffix === 'th') {\n suffix = ''\n }\n // support M for million, k for thousand\n // if (suffix === 'm' || suffix === 'M') {\n // num *= 1000000\n // suffix = ''\n // }\n // if (suffix === 'k' || suffix === 'k') {\n // num *= 1000\n // suffix = ''\n // }\n return {\n prefix: prefix || '',\n num: num,\n suffix: suffix,\n }\n }\n return null\n}\n\n// get a numeric value from this phrase\nconst parseNumber = function (m) {\n if (typeof m === 'string') {\n return { num: parseText(m) }\n }\n let str = m.text('reduced')\n // reach for '12 litres'\n const unit = m.growRight('#Unit').match('#Unit$').text('machine')\n // is it in '3,123' format?\n const hasComma = /[0-9],[0-9]/.test(m.text('text'))\n // parse a numeric-number like '$4.00'\n if (m.terms().length === 1 && !m.has('#Multiple')) {\n const res = parseNumeric(str, m)\n if (res !== null) {\n res.hasComma = hasComma\n res.unit = unit\n return res\n }\n }\n // -- parse text-formats --\n // Fractions: remove 'and a half' etc. from the end\n let frPart = m.match('#Fraction{2,}$')\n frPart = frPart.found === false ? m.match('^#Fraction$') : frPart\n let fraction = null\n if (frPart.found) {\n if (frPart.has('#Value and #Value #Fraction')) {\n frPart = frPart.match('and #Value #Fraction')\n }\n fraction = parseFraction(frPart)\n // remove it from our string\n m = m.not(frPart)\n m = m.not('and$')\n str = m.text('reduced')\n }\n let num = 0\n if (str) {\n num = parseText(str) || 0\n }\n // apply numeric fraction\n if (fraction && fraction.decimal) {\n num += fraction.decimal\n }\n\n\n return {\n hasComma,\n prefix: '',\n num,\n suffix: '',\n isOrdinal: m.has('#Ordinal'),\n isText: m.has('#TextValue'),\n isFraction: m.has('#Fraction'),\n isMoney: m.has('#Money'),\n unit\n }\n}\nexport default parseNumber\n","import toString from '../../_toString.js'\n\n/**\n * turn a number like 5 into an ordinal like 5th\n */\nconst numOrdinal = function (obj) {\n const num = obj.num\n if (!num && num !== 0) {\n return null\n }\n //the teens are all 'th'\n const tens = num % 100\n if (tens > 10 && tens < 20) {\n return String(num) + 'th'\n }\n //the rest of 'em\n const mapping = {\n 0: 'th',\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n }\n let str = toString(num)\n const last = str.slice(str.length - 1, str.length)\n if (mapping[last]) {\n str += mapping[last]\n } else {\n str += 'th'\n }\n return str\n}\n\nexport default numOrdinal\n","const prefixes = {\n '¢': 'cents',\n $: 'dollars',\n '£': 'pounds',\n '¥': 'yen',\n '€': 'euros',\n '₡': 'colón',\n '฿': 'baht',\n '₭': 'kip',\n '₩': 'won',\n '₹': 'rupees',\n '₽': 'ruble',\n '₺': 'liras',\n}\nconst suffixes = {\n '%': 'percent',\n // s: 'seconds',\n // cm: 'centimetres',\n // km: 'kilometres',\n // ft: 'feet',\n '°': 'degrees'\n}\n\nconst addSuffix = function (obj) {\n const res = {\n suffix: '',\n prefix: obj.prefix,\n }\n // $5 to 'five dollars'\n if (prefixes.hasOwnProperty(obj.prefix)) {\n res.suffix += ' ' + prefixes[obj.prefix]\n res.prefix = ''\n }\n // 5% to 'five percent'\n if (suffixes.hasOwnProperty(obj.suffix)) {\n res.suffix += ' ' + suffixes[obj.suffix]\n }\n if (res.suffix && obj.num === 1) {\n res.suffix = res.suffix.replace(/s$/, '')\n }\n // misc other suffixes\n if (!res.suffix && obj.suffix) {\n res.suffix += ' ' + obj.suffix\n }\n return res\n}\n\nexport default addSuffix","import numOrdinal from './toOrdinal/numOrdinal.js'\nimport textOrdinal from './toOrdinal/textOrdinal.js'\nimport textCardinal from './toText/index.js'\nimport makeSuffix from './suffix.js'\n\nconst format = function (obj, fmt) {\n if (fmt === 'TextOrdinal') {\n const { prefix, suffix } = makeSuffix(obj)\n return prefix + textOrdinal(obj) + suffix\n }\n if (fmt === 'Ordinal') {\n return obj.prefix + numOrdinal(obj) + obj.suffix\n }\n if (fmt === 'TextCardinal') {\n const { prefix, suffix } = makeSuffix(obj)\n return prefix + textCardinal(obj) + suffix\n }\n // assume Cardinal\n let num = obj.num\n if (obj.hasComma) {\n num = num.toLocaleString()\n }\n return obj.prefix + String(num) + obj.suffix\n}\nexport default format","import parse from './parse/index.js'\n\nconst isArray = arr => Object.prototype.toString.call(arr) === '[object Array]'\n\n// turn anything into {foo:true} format\nconst coerceToObject = function (input) {\n if (typeof input === 'string' || typeof input === 'number') {\n const tmp = {}\n tmp[input] = true\n return tmp\n }\n if (isArray(input)) {\n return input.reduce((h, s) => {\n h[s] = true\n return h\n }, {})\n }\n return input || {}\n}\n\n// only return values with the given unit\nconst isUnit = function (doc, input = {}) {\n input = coerceToObject(input)\n return doc.filter(p => {\n const { unit } = parse(p)\n if (unit && input[unit] === true) {\n return true\n }\n return false\n })\n}\nexport default isUnit\n","import find from './find.js'\nimport parse from './parse/index.js'\nimport format from './format/index.js'\nimport isUnit from './isUnit.js'\n\nconst addMethod = function (View) {\n /** */\n class Numbers extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Numbers'\n }\n parse(n) {\n return this.getNth(n).map(parse)\n }\n get(n) {\n return this.getNth(n)\n .map(parse)\n .map(o => o.num)\n }\n json(n) {\n const opts = typeof n === 'object' ? n : {}\n return this.getNth(n).map(p => {\n const json = p.toView().json(opts)[0]\n const parsed = parse(p)\n json.number = {\n prefix: parsed.prefix,\n num: parsed.num,\n suffix: parsed.suffix,\n hasComma: parsed.hasComma,\n unit: parsed.unit,\n }\n return json\n }, [])\n }\n /** any known measurement unit, for the number */\n units() {\n return this.growRight('#Unit').match('#Unit$')\n }\n /** return values that match a given unit */\n isUnit(allowed) {\n return isUnit(this, allowed)\n }\n /** return only ordinal numbers */\n isOrdinal() {\n return this.if('#Ordinal')\n }\n /** return only cardinal numbers*/\n isCardinal() {\n return this.if('#Cardinal')\n }\n\n /** convert to numeric form like '8' or '8th' */\n toNumber() {\n const res = this.map(val => {\n if (!this.has('#TextValue')) {\n return val\n }\n const obj = parse(val)\n if (obj.num === null) {\n return val\n }\n const fmt = val.has('#Ordinal') ? 'Ordinal' : 'Cardinal'\n const str = format(obj, fmt)\n val.replaceWith(str, { tags: true })\n return val.tag('NumericValue')\n })\n return new Numbers(res.document, res.pointer)\n }\n /** add commas, or nicer formatting for numbers */\n toLocaleString() {\n const m = this\n m.forEach(val => {\n const obj = parse(val)\n if (obj.num === null) {\n return\n }\n let num = obj.num.toLocaleString()\n // support ordinal ending, too\n if (val.has('#Ordinal')) {\n const str = format(obj, 'Ordinal')\n const end = str.match(/[a-z]+$/)\n if (end) {\n num += end[0] || ''\n }\n }\n val.replaceWith(num, { tags: true })\n })\n return this\n }\n /** convert to numeric form like 'eight' or 'eighth' */\n toText() {\n const m = this\n const res = m.map(val => {\n if (val.has('#TextValue')) {\n return val\n }\n const obj = parse(val)\n if (obj.num === null) {\n return val\n }\n const fmt = val.has('#Ordinal') ? 'TextOrdinal' : 'TextCardinal'\n const str = format(obj, fmt)\n val.replaceWith(str, { tags: true })\n val.tag('TextValue')\n return val\n })\n return new Numbers(res.document, res.pointer)\n }\n /** convert ordinal to cardinal form, like 'eight', or '8' */\n toCardinal() {\n const m = this\n const res = m.map(val => {\n if (!val.has('#Ordinal')) {\n return val\n }\n const obj = parse(val)\n if (obj.num === null) {\n return val\n }\n const fmt = val.has('#TextValue') ? 'TextCardinal' : 'Cardinal'\n const str = format(obj, fmt)\n val.replaceWith(str, { tags: true })\n val.tag('Cardinal')\n return val\n })\n return new Numbers(res.document, res.pointer)\n }\n /** convert cardinal to ordinal form, like 'eighth', or '8th' */\n toOrdinal() {\n const m = this\n const res = m.map(val => {\n if (val.has('#Ordinal')) {\n return val\n }\n const obj = parse(val)\n if (obj.num === null) {\n return val\n }\n const fmt = val.has('#TextValue') ? 'TextOrdinal' : 'Ordinal'\n const str = format(obj, fmt)\n val.replaceWith(str, { tags: true })\n val.tag('Ordinal')\n return val\n })\n return new Numbers(res.document, res.pointer)\n }\n\n /** return only numbers that are == n */\n isEqual(n) {\n return this.filter(val => {\n const num = parse(val).num\n return num === n\n })\n }\n /** return only numbers that are > n*/\n greaterThan(n) {\n return this.filter(val => {\n const num = parse(val).num\n return num > n\n })\n }\n /** return only numbers that are < n*/\n lessThan(n) {\n return this.filter(val => {\n const num = parse(val).num\n return num < n\n })\n }\n /** return only numbers > min and < max */\n between(min, max) {\n return this.filter(val => {\n const num = parse(val).num\n return num > min && num < max\n })\n }\n /** set these number to n */\n set(n) {\n if (n === undefined) {\n return this // don't bother\n }\n if (typeof n === 'string') {\n n = parse(n).num\n }\n const m = this\n const res = m.map(val => {\n const obj = parse(val)\n obj.num = n\n if (obj.num === null) {\n return val\n }\n let fmt = val.has('#Ordinal') ? 'Ordinal' : 'Cardinal'\n if (val.has('#TextValue')) {\n fmt = val.has('#Ordinal') ? 'TextOrdinal' : 'TextCardinal'\n }\n let str = format(obj, fmt)\n // add commas to number\n if (obj.hasComma && fmt === 'Cardinal') {\n str = Number(str).toLocaleString()\n }\n val = val.not('#Currency')\n val.replaceWith(str, { tags: true })\n // handle plural/singular unit\n // agreeUnits(agree, val, obj)\n return val\n })\n return new Numbers(res.document, res.pointer)\n }\n add(n) {\n if (!n) {\n return this // don't bother\n }\n if (typeof n === 'string') {\n n = parse(n).num\n }\n const m = this\n const res = m.map(val => {\n const obj = parse(val)\n if (obj.num === null) {\n return val\n }\n obj.num += n\n let fmt = val.has('#Ordinal') ? 'Ordinal' : 'Cardinal'\n if (obj.isText) {\n fmt = val.has('#Ordinal') ? 'TextOrdinal' : 'TextCardinal'\n }\n const str = format(obj, fmt)\n val.replaceWith(str, { tags: true })\n // handle plural/singular unit\n // agreeUnits(agree, val, obj)\n return val\n })\n return new Numbers(res.document, res.pointer)\n }\n /** decrease each number by n*/\n subtract(n, agree) {\n return this.add(n * -1, agree)\n }\n /** increase each number by 1 */\n increment(agree) {\n return this.add(1, agree)\n }\n /** decrease each number by 1 */\n decrement(agree) {\n return this.add(-1, agree)\n }\n // overloaded - keep Numbers class\n update(pointer) {\n const m = new Numbers(this.document, pointer)\n m._cache = this._cache // share this full thing\n return m\n }\n }\n // aliases\n Numbers.prototype.toNice = Numbers.prototype.toLocaleString\n Numbers.prototype.isBetween = Numbers.prototype.between\n Numbers.prototype.minus = Numbers.prototype.subtract\n Numbers.prototype.plus = Numbers.prototype.add\n Numbers.prototype.equals = Numbers.prototype.isEqual\n\n View.prototype.numbers = function (n) {\n let m = find(this)\n m = m.getNth(n)\n return new Numbers(this.document, m.pointer)\n }\n View.prototype.percentages = function (n) {\n let m = find(this)\n m = m.filter(v => v.has('#Percent') || v.after('^percent'))\n m = m.getNth(n)\n return new Numbers(this.document, m.pointer)\n }\n View.prototype.money = function (n) {\n let m = find(this)\n m = m.filter(v => v.has('#Money') || v.after('^#Currency'))\n m = m.getNth(n)\n return new Numbers(this.document, m.pointer)\n }\n // alias\n View.prototype.values = View.prototype.numbers\n}\nexport default addMethod\n","import fractions from './fractions/api.js'\nimport numbers from './numbers/api.js'\n\nconst api = function (View) {\n fractions(View)\n numbers(View)\n}\n\nexport default {\n api,\n\n // add @greaterThan, @lessThan\n // mutate: world => {\n // let termMethods = world.methods.one.termMethods\n\n // termMethods.lessThan = function (term) {\n // return false //TODO: implement\n // // return /[aeiou]/.test(term.text)\n // }\n // },\n}\n","const defaults = {\n people: true,\n emails: true,\n phoneNumbers: true,\n places: true,\n}\n\nconst redact = function (opts = {}) {\n opts = Object.assign({}, defaults, opts)\n if (opts.people !== false) {\n this.people().replaceWith('██████████')\n }\n if (opts.emails !== false) {\n this.emails().replaceWith('██████████')\n }\n if (opts.places !== false) {\n this.places().replaceWith('██████████')\n }\n if (opts.phoneNumbers !== false) {\n this.phoneNumbers().replaceWith('███████')\n }\n return this\n}\n\nconst plugin = {\n api: function (View) {\n View.prototype.redact = redact\n }\n}\nexport default plugin\n","//is this sentence asking a question?\nconst isQuestion = function (doc) {\n const clauses = doc.clauses()\n\n // Has ellipsis at the end means it's probably not a question\n // e.g., Is this just fantasy...\n if (/\\.\\.$/.test(doc.out('text'))) {\n return false\n }\n\n // Starts with question word, but has a comma, so probably not a question\n // e.g., Why are we caught in a land slide, no escape from reality\n if (doc.has('^#QuestionWord') && doc.has('@hasComma')) {\n return false\n }\n\n // do you see it or not\n if (doc.has('or not$')) {\n return true\n }\n\n // Starts with a #QuestionWord\n // e.g., What open your eyes look up to the skies and see\n if (doc.has('^#QuestionWord')) {\n return true\n }\n\n // Second word is a #QuestionWord\n // e.g., I'm what a poor boy\n // case ts.has('^\\w+\\s#QuestionWord'):\n // return true;\n\n // is it, do you - start of sentence\n // e.g., Do I need no sympathy\n if (doc.has('^(do|does|did|is|was|can|could|will|would|may) #Noun')) {\n return true\n }\n\n // these are a little more loose..\n // e.g., Must I be come easy come easy go\n if (doc.has('^(have|must) you')) {\n return true\n }\n\n // Clause starts with a question word\n // e.g., Anyway the wind blows, what doesn't really matter to me\n // if (clauses.has('^#QuestionWord')) {\n // return true\n // }\n\n //is wayne gretskzy alive\n if (clauses.has('(do|does|is|was) #Noun+ #Adverb? (#Adjective|#Infinitive)$')) {\n return true\n }\n\n // Probably not a question\n return false\n}\n\nconst findQuestions = function (view) {\n const hasQ = /\\?/\n const { document } = view\n return view.filter(m => {\n const terms = m.docs[0] || []\n const lastTerm = terms[terms.length - 1]\n // is it not a full sentence?\n if (!lastTerm || document[lastTerm.index[0]].length !== terms.length) {\n return false\n }\n // does it end with a question mark?\n if (hasQ.test(lastTerm.post)) {\n return true\n }\n // try to guess a sentence without a question-mark\n return isQuestion(m)\n })\n}\nexport default findQuestions\n","// if a clause starts with these, it's not a main clause\nconst subordinate = `(after|although|as|because|before|if|since|than|that|though|when|whenever|where|whereas|wherever|whether|while|why|unless|until|once)`\nconst relative = `(that|which|whichever|who|whoever|whom|whose|whomever)`\n\n//try to remove secondary clauses\nconst mainClause = function (s) {\n let m = s\n if (m.length === 1) {\n return m\n }\n // if there's no verb, it's dependent\n m = m.if('#Verb')\n if (m.length === 1) {\n return m\n }\n // this is a signal for subordinate-clauses\n m = m.ifNo(subordinate)\n m = m.ifNo('^even (if|though)')\n m = m.ifNo('^so that')\n m = m.ifNo('^rather than')\n m = m.ifNo('^provided that')\n if (m.length === 1) {\n return m\n }\n // relative clauses\n m = m.ifNo(relative)\n if (m.length === 1) {\n return m\n }\n\n // check for subordinating conjunctions -- must be at the beginning of the clause\n m = m.ifNo('(^despite|^during|^before|^through|^throughout)')\n if (m.length === 1) {\n return m\n }\n\n // check for clauses beginning with Gerund (\"Taking ..., ...\")\n m = m.ifNo('^#Gerund')\n if (m.length === 1) {\n return m\n }\n\n // did we go too far?\n if (m.length === 0) {\n m = s\n }\n // choose the first one?\n return m.eq(0)\n}\nexport default mainClause\n","import findMain from './mainClause.js'\n\nconst grammar = function (vb) {\n let tense = null\n if (vb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (vb.has('#FutureTense')) {\n tense = 'FutureTense'\n } else if (vb.has('#PresentTense')) {\n tense = 'PresentTense'\n }\n return {\n tense\n }\n}\n\nconst parse = function (s) {\n const clauses = s.clauses()\n const main = findMain(clauses)\n const chunks = main.chunks()\n let subj = s.none()\n let verb = s.none()\n let pred = s.none()\n chunks.forEach((ch, i) => {\n if (i === 0 && !ch.has('<Verb>')) {\n subj = ch\n return\n }\n if (!verb.found && ch.has('<Verb>')) {\n verb = ch\n return\n }\n if (verb.found) {\n pred = pred.concat(ch)\n }\n })\n // cleanup a missed parse\n if (verb.found && !subj.found) {\n subj = verb.before('<Noun>+').first()\n }\n return {\n subj,\n verb,\n pred,\n grammar: grammar(verb)\n }\n}\nexport default parse","const toPast = function (s) {\n let verbs = s.verbs()\n // translate the first verb, no-stress\n const first = verbs.eq(0)\n // already past\n if (first.has('#PastTense')) {\n return s\n }\n first.toPastTense()\n\n // force agreement with any 2nd/3rd verbs:\n if (verbs.length > 1) {\n verbs = verbs.slice(1)\n // remove any sorta infinitive - 'to engage'\n verbs = verbs.filter((v) => !v.lookBehind('to$').found)\n\n // keep -ing verbs\n verbs = verbs.if('#PresentTense')\n verbs = verbs.notIf('#Gerund')\n\n //run-on infinitive-list - 'to walk, sit and eat'\n const list = s.match('to #Verb+ #Conjunction #Verb').terms()\n verbs = verbs.not(list)\n\n // otherwise, I guess so?\n if (verbs.found) {\n verbs.verbs().toPastTense()\n }\n }\n\n // s.compute('chunks')\n return s\n}\nexport default toPast","const toPresent = function (s) {\n let verbs = s.verbs()\n // translate the first verb, no-stress\n const first = verbs.eq(0)\n // already present\n // if (first.has('#PresentTense')) {\n // return s\n // }\n first.toPresentTense()\n\n // force agreement with any 2nd/3rd verbs:\n if (verbs.length > 1) {\n verbs = verbs.slice(1)\n // remove any sorta infinitive - 'to engage'\n verbs = verbs.filter((v) => !v.lookBehind('to$').found)\n\n // keep -ing verbs\n // verbs = verbs.if('#PresentTense')\n verbs = verbs.notIf('#Gerund')\n\n //run-on infinitive-list - 'to walk, sit and eat'\n // let list = s.match('to #Verb+ #Conjunction #Verb').terms()\n // verbs = verbs.not(list)\n\n // otherwise, I guess so?\n if (verbs.found) {\n verbs.verbs().toPresentTense()\n }\n }\n\n // s.compute('chunks')\n return s\n}\nexport default toPresent","const toFuture = function (s) {\n let verbs = s.verbs()\n // translate the first verb, no-stress\n const first = verbs.eq(0)\n first.toFutureTense()\n s = s.fullSentence()\n verbs = s.verbs()//re-do it\n // verbs.debug()\n // force agreement with any 2nd/3rd verbs:\n if (verbs.length > 1) {\n verbs = verbs.slice(1)\n // which following-verbs should we also change?\n const toChange = verbs.filter((vb) => {\n // remove any sorta infinitive - 'to engage'\n if (vb.lookBehind('to$').found) {\n return false\n }\n // is watching\n if (vb.has('#Copula #Gerund')) {\n return true\n }\n // keep -ing verbs\n if (vb.has('#Gerund')) {\n return false\n }\n // he is green and he is friendly\n if (vb.has('#Copula')) {\n return true\n }\n // 'he will see when he watches'\n if (vb.has('#PresentTense') && !vb.has('#Infinitive') && vb.lookBefore('(he|she|it|that|which)$').found) {\n return false\n }\n return true\n })\n // otherwise, change em too\n if (toChange.found) {\n toChange.forEach(m => {\n //extra rules for 'is'\n if (m.has('#Copula')) {\n // when he was out..\n m.match('was').replaceWith('is')\n // when he is out\n m.match('is').replaceWith('will be')\n return\n }\n // if (m.has('#PastTense')) {\n // m.toPresentTense()\n // return\n // }\n m.toInfinitive()\n })\n }\n }\n return s\n}\nexport default toFuture","const toNegative = function (s) {\n s.verbs().first().toNegative().compute('chunks')\n return s\n}\nconst toPositive = function (s) {\n s.verbs().first().toPositive().compute('chunks')\n return s\n}\nexport { toNegative, toPositive }","const toInfinitive = function (s) {\n s.verbs().toInfinitive()\n // s.compute('chunks')\n return s\n}\nexport default toInfinitive","import isQuestion from './questions.js'\nimport parse from './parse/index.js'\nimport toPast from './conjugate/toPast.js'\nimport toPresent from './conjugate/toPresent.js'\nimport toFuture from './conjugate/toFuture.js'\nimport { toNegative, toPositive } from './conjugate/toNegative.js'\nimport toInfinitive from './conjugate/toInfinitive.js'\n\nconst api = function (View) {\n class Sentences extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Sentences'\n }\n json(opts = {}) {\n return this.map(m => {\n const json = m.toView().json(opts)[0] || {}\n const { subj, verb, pred, grammar } = parse(m)\n json.sentence = {\n subject: subj.text('normal'),\n verb: verb.text('normal'),\n predicate: pred.text('normal'),\n grammar\n }\n return json\n }, [])\n }\n toPastTense(n) {\n return this.getNth(n).map(s => {\n const parsed = parse(s)\n return toPast(s, parsed)\n })\n }\n toPresentTense(n) {\n return this.getNth(n).map(s => {\n const parsed = parse(s)\n return toPresent(s, parsed)\n })\n }\n toFutureTense(n) {\n return this.getNth(n).map(s => {\n const parsed = parse(s)\n s = toFuture(s, parsed)\n return s\n })\n }\n toInfinitive(n) {\n return this.getNth(n).map(s => {\n const parsed = parse(s)\n return toInfinitive(s, parsed)\n })\n }\n toNegative(n) {\n return this.getNth(n).map(vb => {\n const parsed = parse(vb)\n return toNegative(vb, parsed)\n })\n }\n toPositive(n) {\n return this.getNth(n).map(vb => {\n const parsed = parse(vb)\n return toPositive(vb, parsed)\n })\n }\n isQuestion(n) {\n return this.questions(n)\n }\n isExclamation(n) {\n const res = this.filter(s => s.lastTerm().has('@hasExclamation'))\n return res.getNth(n)\n }\n isStatement(n) {\n const res = this.filter(s => !s.isExclamation().found && !s.isQuestion().found)\n return res.getNth(n)\n }\n // overloaded - keep Sentences class\n update(pointer) {\n const m = new Sentences(this.document, pointer)\n m._cache = this._cache // share this full thing\n return m\n }\n }\n // aliases\n Sentences.prototype.toPresent = Sentences.prototype.toPresentTense\n Sentences.prototype.toPast = Sentences.prototype.toPastTense\n Sentences.prototype.toFuture = Sentences.prototype.toFutureTense\n\n const methods = {\n sentences: function (n) {\n let m = this.map(s => s.fullSentence())\n m = m.getNth(n)\n return new Sentences(this.document, m.pointer)\n },\n questions: function (n) {\n const m = isQuestion(this)\n return m.getNth(n)\n },\n }\n\n Object.assign(View.prototype, methods)\n}\nexport default api\n","import api from './api.js'\n\nexport default { api }\n","const find = function (doc) {\n let m = doc.splitAfter('@hasComma')\n m = m.match('#Honorific+? #Person+')\n // Spencer's King\n const poss = m.match('#Possessive').notIf('(his|her)') //her majesty ...\n m = m.splitAfter(poss)\n return m\n}\nexport default find\n","const parse = function (m) {\n const res = {}\n res.firstName = m.match('#FirstName+')\n res.lastName = m.match('#LastName+')\n res.honorific = m.match('#Honorific+')\n\n const last = res.lastName\n const first = res.firstName\n if (!first.found || !last.found) {\n // let p = m.clone()\n // assume 'Mr Springer' is a last-name\n if (!first.found && !last.found && m.has('^#Honorific .$')) {\n res.lastName = m.match('.$')\n return res\n }\n }\n return res\n}\nexport default parse\n","/*\n Important notice - \n this method makes many assumptions about gender-identity, in-order to assign grammatical gender.\n it should not be used for any other purposes, other than resolving pronouns in english\n*/\nconst m = 'male'\nconst f = 'female'\n\n// known gendered honorifics\nconst honorifics = {\n mr: m,\n mrs: f,\n miss: f,\n madam: f,\n\n // british stuff\n king: m,\n queen: f,\n duke: m,\n duchess: f,\n baron: m,\n baroness: f,\n count: m,\n countess: f,\n prince: m,\n princess: f,\n sire: m,\n dame: f,\n lady: f,\n\n ayatullah: m, //i think?\n\n congressman: m,\n congresswoman: f,\n 'first lady': f,\n\n // marked as non-binary\n mx: null,\n}\n\nconst predictGender = function (parsed, person) {\n const { firstName, honorific } = parsed\n // use first-name as signal-signal\n if (firstName.has('#FemaleName')) {\n return f\n }\n if (firstName.has('#MaleName')) {\n return m\n }\n // use honorics as gender-signal\n if (honorific.found) {\n let hon = honorific.text('normal')\n hon = hon.replace(/\\./g, '') //clean it up a bit\n if (honorifics.hasOwnProperty(hon)) {\n return honorifics[hon]\n }\n // her excelency\n if (/^her /.test(hon)) {\n return f\n }\n if (/^his /.test(hon)) {\n return m\n }\n }\n // offer used-pronouns as a signal\n const after = person.after()\n if (!after.has('#Person') && after.has('#Pronoun')) {\n const pro = after.match('#Pronoun')\n // manual use of gender-neutral\n if (pro.has('(they|their)')) {\n return null\n }\n const hasMasc = pro.has('(he|his)')\n const hasFem = pro.has('(she|her|hers)')\n if (hasMasc && !hasFem) {\n return m\n }\n if (hasFem && !hasMasc) {\n return f\n }\n }\n return null\n}\nexport default predictGender\n","import find from './find.js'\nimport parse from './parse.js'\nimport gender from './gender.js'\n\n\nconst addMethod = function (View) {\n /**\n *\n */\n class People extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'People'\n }\n parse(n) {\n return this.getNth(n).map(parse)\n }\n json(n) {\n const opts = typeof n === 'object' ? n : {}\n return this.getNth(n).map(p => {\n const json = p.toView().json(opts)[0]\n const parsed = parse(p)\n json.person = {\n firstName: parsed.firstName.text('normal'),\n lastName: parsed.lastName.text('normal'),\n honorific: parsed.honorific.text('normal'),\n presumed_gender: gender(parsed, p),\n }\n return json\n }, [])\n }\n // used for co-reference resolution only\n presumedMale() {\n return this.filter(m => {\n return m.has('(#MaleName|mr|mister|sr|jr|king|pope|prince|sir)')//todo configure these in .world\n })\n }\n presumedFemale() {\n return this.filter(m => {\n return m.has('(#FemaleName|mrs|miss|queen|princess|madam)')\n })\n }\n // overloaded - keep People class\n update(pointer) {\n const m = new People(this.document, pointer)\n m._cache = this._cache // share this full thing\n return m\n }\n }\n\n View.prototype.people = function (n) {\n let m = find(this)\n m = m.getNth(n)\n return new People(this.document, m.pointer)\n }\n}\nexport default addMethod\n","const find = function (doc) {\n let m = doc.match('(#Place|#Address)+')\n\n // split all commas except for 'paris, france'\n let splits = m.match('@hasComma')\n splits = splits.filter(c => {\n // split 'europe, china'\n if (c.has('(asia|africa|europe|america)$')) {\n return true\n }\n // don't split 'paris, france'\n if (c.has('(#City|#Region|#ProperNoun)$') && c.after('^(#Country|#Region)').found) {\n return false\n }\n return true\n })\n m = m.splitAfter(splits)\n return m\n}\nexport default find\n","import find from './find.js'\n\nconst addMethod = function (View) {\n View.prototype.places = function (n) {\n let m = find(this)\n m = m.getNth(n)\n return new View(this.document, m.pointer)\n }\n}\nexport default addMethod\n","\nconst api = function (View) {\n View.prototype.organizations = function (n) {\n const m = this.match('#Organization+')\n return m.getNth(n)\n }\n}\nexport default api\n","\n//combine them with .topics() method\nconst find = function (n) {\n const r = this.clauses()\n // Find people, places, and organizations\n let m = r.people()\n m = m.concat(r.places())\n m = m.concat(r.organizations())\n m = m.not('(someone|man|woman|mother|brother|sister|father)')\n //return them to normal ordering\n m = m.sort('seq')\n // m = m.unique()\n m = m.getNth(n)\n return m\n}\n\nconst api = function (View) {\n View.prototype.topics = find\n}\nexport default api\n","import people from './people/api.js'\nimport places from './places/api.js'\nimport orgs from './orgs/api.js'\nimport topics from './topics.js'\n\nconst api = function (View) {\n people(View)\n places(View)\n orgs(View)\n topics(View)\n}\nexport default { api }\n","const findVerbs = function (doc) {\n let m = doc.match('<Verb>')\n // want to see\n m = m.not('#Conjunction')\n // by walking\n m = m.not('#Preposition')\n\n\n m = m.splitAfter('@hasComma')\n\n // the reason he will is ...\n // all i do is talk\n m = m.splitAfter('[(do|did|am|was|is|will)] (is|was)', 0)\n // m = m.splitAfter('[(do|did|am|was|is|will)] #PresentTense', 0)\n\n // cool\n\n // like being pampered\n m = m.splitBefore('(#Verb && !#Copula) [being] #Verb', 0)\n // like to be pampered\n m = m.splitBefore('#Verb [to be] #Verb', 0)\n\n // implicit conjugation - 'help fix'\n\n m = m.splitAfter('[help] #PresentTense', 0)\n // what i can sell is..\n m = m.splitBefore('(#PresentTense|#PastTense) [#Copula]$', 0)\n // what i can sell will be\n m = m.splitBefore('(#PresentTense|#PastTense) [will be]$', 0)\n // directing had\n m = m.splitBefore('(#PresentTense|#PastTense) [(had|has)]', 0)\n\n // 'allow yourself'\n m = m.not('#Reflexive$')\n // sitting near\n m = m.not('#Adjective')\n\n // pastTense-pastTense\n // Everyone he [met] [told] him\n m = m.splitAfter('[#PastTense] #PastTense', 0)\n // Everyone he [met] had [told] him\n m = m.splitAfter('[#PastTense] #Auxiliary+ #PastTense', 0)\n\n // fans that were blowing felt amazing\n m = m.splitAfter('#Copula [#Gerund] #PastTense', 0)\n\n // managed to see\n // m = m.splitOn('#PastTense [to] #Infinitive', 0)\n\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n // the reason he will is ...\n // ensure it's not two verbs\n // held annually is called\n if (m.has('(#Verb && !#Auxiliary) #Adverb+? #Copula')) {\n m = m.splitBefore('#Copula')\n }\n return m\n}\nexport default findVerbs\n","// find the main verb, from a verb phrase\nconst getMain = function (vb) {\n let root = vb\n if (vb.wordCount() > 1) {\n root = vb.not('(#Negative|#Auxiliary|#Modal|#Adverb|#Prefix)')\n }\n // fallback to just the last word, sometimes\n if (root.length > 1 && !root.has('#Phrasal #Particle')) {\n root = root.last()\n }\n // look for more modals\n root = root.not('(want|wants|wanted) to')\n\n // fallback\n if (!root.found) {\n root = vb.not('#Negative')\n return root\n }\n return root\n}\nexport default getMain\n","// split adverbs as before/after the root\nconst getAdverbs = function (vb, root) {\n const res = {\n pre: vb.none(),\n post: vb.none(),\n }\n if (!vb.has('#Adverb')) {\n return res\n }\n // pivot on the main verb\n const parts = vb.splitOn(root)\n if (parts.length === 3) {\n return {\n pre: parts.eq(0).adverbs(),\n post: parts.eq(2).adverbs(),\n }\n }\n // it must be the second one\n if (parts.eq(0).isDoc(root)) {\n res.post = parts.eq(1).adverbs()\n return res\n }\n res.pre = parts.eq(0).adverbs()\n return res\n}\nexport default getAdverbs\n","import getRoot from './root.js'\nimport getAdverbs from './adverbs.js'\n\nconst getAuxiliary = function (vb, root) {\n const parts = vb.splitBefore(root)\n if (parts.length <= 1) {\n return vb.none()\n }\n let aux = parts.eq(0)\n aux = aux.not('(#Adverb|#Negative|#Prefix)')\n return aux\n}\n\nconst getNegative = function (vb) {\n return vb.match('#Negative')\n}\n\n// pull-apart phrasal-verb into verb-particle\nconst getPhrasal = function (root) {\n if (!root.has('(#Particle|#PhrasalVerb)')) {\n return {\n verb: root.none(),\n particle: root.none()\n }\n }\n const particle = root.match('#Particle$')\n return {\n verb: root.not(particle),\n particle: particle,\n }\n}\n\nconst parseVerb = function (view) {\n const vb = view.clone()\n vb.contractions().expand()\n const root = getRoot(vb)\n const res = {\n root: root,\n prefix: vb.match('#Prefix'),\n adverbs: getAdverbs(vb, root),\n auxiliary: getAuxiliary(vb, root),\n negative: getNegative(vb),\n phrasal: getPhrasal(root),\n }\n return res\n}\nexport default parseVerb\n","const present = { tense: 'PresentTense' }\nconst conditional = { conditional: true }\nconst future = { tense: 'FutureTense' }\nconst prog = { progressive: true }\nconst past = { tense: 'PastTense' }\nconst complete = { complete: true, progressive: false }\nconst passive = { passive: true }\nconst plural = { plural: true }\nconst singular = { plural: false }\n\nconst getData = function (tags) {\n const data = {}\n tags.forEach(o => {\n Object.assign(data, o)\n })\n return data\n}\n\nconst verbForms = {\n // === Simple ===\n 'imperative': [\n // walk!\n ['#Imperative', []],\n ],\n\n 'want-infinitive': [\n ['^(want|wants|wanted) to #Infinitive$', [present]],\n ['^wanted to #Infinitive$', [past]],\n ['^will want to #Infinitive$', [future]],\n ],\n\n 'gerund-phrase': [\n // started looking\n ['^#PastTense #Gerund$', [past]],\n // starts looking\n ['^#PresentTense #Gerund$', [present]],\n // start looking\n ['^#Infinitive #Gerund$', [present]],\n // will start looking\n ['^will #Infinitive #Gerund$', [future]],\n // have started looking\n ['^have #PastTense #Gerund$', [past]],\n // will have started looking\n ['^will have #PastTense #Gerund$', [past]],\n ],\n\n 'simple-present': [\n // he walks',\n ['^#PresentTense$', [present]],\n // we walk\n ['^#Infinitive$', [present]],\n ],\n 'simple-past': [\n // he walked',\n ['^#PastTense$', [past]],\n ],\n 'simple-future': [\n // he will walk\n ['^will #Adverb? #Infinitive', [future]],\n ],\n\n // === Progressive ===\n 'present-progressive': [\n // he is walking\n ['^(is|are|am) #Gerund$', [present, prog]],\n ],\n 'past-progressive': [\n // he was walking\n ['^(was|were) #Gerund$', [past, prog]],\n ],\n 'future-progressive': [\n // he will be\n ['^will be #Gerund$', [future, prog]],\n ],\n\n // === Perfect ===\n 'present-perfect': [\n // he has walked\n ['^(has|have) #PastTense$', [past, complete]], //past?\n ],\n 'past-perfect': [\n // he had walked\n ['^had #PastTense$', [past, complete]],\n // had been to see\n ['^had #PastTense to #Infinitive', [past, complete]],\n ],\n 'future-perfect': [\n // he will have\n ['^will have #PastTense$', [future, complete]],\n ],\n\n // === Progressive-perfect ===\n 'present-perfect-progressive': [\n // he has been walking\n ['^(has|have) been #Gerund$', [past, prog]], //present?\n ],\n 'past-perfect-progressive': [\n // he had been\n ['^had been #Gerund$', [past, prog]],\n ],\n 'future-perfect-progressive': [\n // will have been\n ['^will have been #Gerund$', [future, prog]],\n ],\n\n // ==== Passive ===\n 'passive-past': [\n // got walked, was walked, were walked\n ['(got|were|was) #Passive', [past, passive]],\n // was being walked\n ['^(was|were) being #Passive', [past, passive]],\n // had been walked, have been eaten\n ['^(had|have) been #Passive', [past, passive]],\n ],\n 'passive-present': [\n // is walked, are stolen\n ['^(is|are|am) #Passive', [present, passive]],\n // is being walked\n ['^(is|are|am) being #Passive', [present, passive]],\n // has been cleaned\n ['^has been #Passive', [present, passive]],\n ],\n 'passive-future': [\n // will have been walked\n ['will have been #Passive', [future, passive, conditional]],\n // will be cleaned\n ['will be being? #Passive', [future, passive, conditional]],\n ],\n\n // === Conditional ===\n 'present-conditional': [\n // would be walked\n ['would be #PastTense', [present, conditional]],\n ],\n 'past-conditional': [\n // would have been walked\n ['would have been #PastTense', [past, conditional]],\n ],\n\n // ==== Auxiliary ===\n 'auxiliary-future': [\n // going to drink\n ['(is|are|am|was) going to (#Infinitive|#PresentTense)', [future]],\n ],\n 'auxiliary-past': [\n // he did walk\n ['^did #Infinitive$', [past, singular]],\n // used to walk\n ['^used to #Infinitive$', [past, complete]],\n ],\n 'auxiliary-present': [\n // we do walk\n ['^(does|do) #Infinitive$', [present, complete, plural]],\n ],\n\n // === modals ===\n 'modal-past': [\n // he could have walked\n ['^(could|must|should|shall) have #PastTense$', [past]],\n ],\n 'modal-infinitive': [\n // he can walk\n ['^#Modal #Infinitive$', []],\n ],\n\n 'infinitive': [\n // walk\n ['^#Infinitive$', []],\n ],\n}\n\nconst list = []\nObject.keys(verbForms).map(k => {\n verbForms[k].forEach(a => {\n list.push({\n name: k,\n match: a[0],\n data: getData(a[1]),\n })\n })\n})\n\nexport default list\n","import forms from './forms.js'\n\nconst cleanUp = function (vb, res) {\n vb = vb.clone()\n // remove adverbs\n if (res.adverbs.post && res.adverbs.post.found) {\n vb.remove(res.adverbs.post)\n }\n if (res.adverbs.pre && res.adverbs.pre.found) {\n vb.remove(res.adverbs.pre)\n }\n // remove negatives\n if (vb.has('#Negative')) {\n vb = vb.remove('#Negative')\n }\n // remove prefixes like 'anti'\n if (vb.has('#Prefix')) {\n vb = vb.remove('#Prefix')\n }\n // cut-off phrasal-verb\n if (res.root.has('#PhrasalVerb #Particle')) {\n vb.remove('#Particle$')\n }\n // did we miss any of these?\n // vb = vb.remove('#Adverb')\n vb = vb.not('#Adverb')\n return vb\n}\n\n// 'learned [to code]'\nconst isInfinitive = function (vb) {\n if (vb.has('#Infinitive')) {\n const m = vb.growLeft('to')\n if (m.has('^to #Infinitive')) {\n return true\n }\n }\n return false\n}\n\nconst getGrammar = function (vb, res) {\n const grammar = {}\n // make it easy to classify, first\n vb = cleanUp(vb, res)\n for (let i = 0; i < forms.length; i += 1) {\n const todo = forms[i]\n if (vb.has(todo.match) === true) {\n grammar.form = todo.name\n Object.assign(grammar, todo.data)\n break //only match one\n }\n }\n // did we find nothing?\n if (!grammar.form) {\n if (vb.has('^#Verb$')) {\n grammar.form = 'infinitive'\n }\n }\n // fallback to 'naiive' tense detection\n if (!grammar.tense) {\n grammar.tense = res.root.has('#PastTense') ? 'PastTense' : 'PresentTense'\n }\n grammar.copula = res.root.has('#Copula')\n // 'learn to code'\n grammar.isInfinitive = isInfinitive(vb)\n return grammar\n}\n\nexport default getGrammar\n","const shouldSkip = function (last) {\n // is it our only choice?\n if (last.length <= 1) {\n return false\n }\n const obj = last.parse()[0] || {}\n return obj.isSubordinate\n}\n\n// try to chop-out any obvious conditional phrases\n// he wore, [if it was raining], a raincoat.\nconst noSubClause = function (before) {\n let parts = before.clauses()\n parts = parts.filter((m, i) => {\n // if it was raining..\n if (m.has('^(if|unless|while|but|for|per|at|by|that|which|who|from)')) {\n return false\n }\n // bowed to her,\n if (i > 0 && m.has('^#Verb . #Noun+$')) {\n return false\n }\n // the fog, suddenly increasing in..\n if (i > 0 && m.has('^#Adverb')) {\n return false\n }\n return true\n })\n // don't drop the whole thing.\n if (parts.length === 0) {\n return before\n }\n return parts\n}\n\n//\nconst lastNoun = function (vb) {\n let before = vb.before()\n // try to drop any mid-sentence clauses\n before = noSubClause(before)\n // parse-out our preceding nouns\n const nouns = before.nouns()\n // look for any dead-ringers\n let last = nouns.last()\n // i/she/he/they are very strong\n const pronoun = last.match('(i|he|she|we|you|they)')\n if (pronoun.found) {\n return pronoun.nouns()\n }\n // these are also good hints\n let det = nouns.if('^(that|this|those)')\n if (det.found) {\n return det\n }\n if (nouns.found === false) {\n det = before.match('^(that|this|those)')\n if (det.found) {\n return det\n }\n }\n\n // should we skip a subbordinate clause or two?\n last = nouns.last()\n if (shouldSkip(last)) {\n nouns.remove(last)\n last = nouns.last()\n }\n // i suppose we can skip two?\n if (shouldSkip(last)) {\n nouns.remove(last)\n last = nouns.last()\n }\n return last\n}\n\nconst isPlural = function (subj, vb) {\n // 'we are' vs 'he is'\n if (vb.has('(are|were|does)')) {\n return true\n }\n if (subj.has('(those|they|we)')) {\n return true\n }\n if (subj.found && subj.isPlural) {\n return subj.isPlural().found\n }\n return false\n}\n\nconst getSubject = function (vb) {\n const subj = lastNoun(vb)\n return {\n subject: subj,\n plural: isPlural(subj, vb),\n }\n}\nexport default getSubject\n","import getSubject from './parse/getSubject.js'\n\nconst noop = vb => vb\n\nconst isPlural = (vb, parsed) => {\n const subj = getSubject(vb, parsed)\n const m = subj.subject\n if (m.has('i') || m.has('we')) {\n return true\n }\n return subj.plural\n}\n\nconst wasWere = (vb, parsed) => {\n const { subject, plural } = getSubject(vb, parsed)\n if (plural || subject.has('we')) {\n return 'were'\n }\n return 'was'\n}\n\n// present-tense copula\nconst isAreAm = function (vb, parsed) {\n // 'people were' -> 'people are'\n if (vb.has('were')) {\n return 'are'\n }\n // 'i was' -> i am\n const { subject, plural } = getSubject(vb, parsed)\n if (subject.has('i')) {\n return 'am'\n }\n if (subject.has('we') || plural) {\n return 'are'\n }\n // 'he was' -> he is\n return 'is'\n}\n\n\nconst doDoes = function (vb, parsed) {\n const subj = getSubject(vb, parsed)\n const m = subj.subject\n if (m.has('i') || m.has('we')) {\n return 'do'\n }\n if (subj.plural) {\n return 'do'\n }\n return 'does'\n}\n\nconst getTense = function (m) {\n if (m.has('#Infinitive')) {\n return 'Infinitive'\n }\n if (m.has('#Participle')) {\n return 'Participle'\n }\n if (m.has('#PastTense')) {\n return 'PastTense'\n }\n if (m.has('#Gerund')) {\n return 'Gerund'\n }\n if (m.has('#PresentTense')) {\n return 'PresentTense'\n }\n return undefined\n}\n\nconst toInf = function (vb, parsed) {\n const { toInfinitive } = vb.methods.two.transform.verb\n let str = parsed.root.text({ keepPunct: false })\n str = toInfinitive(str, vb.model, getTense(vb))\n if (str) {\n vb.replace(parsed.root, str)\n }\n return vb\n}\n\n\n\n// i will start looking -> i started looking\n// i will not start looking -> i did not start looking\nconst noWill = (vb) => {\n if (vb.has('will not')) {\n return vb.replace('will not', 'have not')\n }\n return vb.remove('will')\n}\n\nexport { noop, isPlural, isAreAm, doDoes, toInf, getSubject, getTense, wasWere, noWill }","import parseVerb from './parse/index.js'\nimport getGrammar from './parse/grammar/index.js'\nimport { getTense } from './lib.js'\n\nconst toArray = function (m) {\n if (!m || !m.isView) {\n return []\n }\n const opts = { normal: true, terms: false, text: false }\n return m.json(opts).map(s => s.normal)\n}\n\nconst toText = function (m) {\n if (!m || !m.isView) {\n return ''\n }\n return m.text('normal')\n}\n\nconst toInf = function (root) {\n const { toInfinitive } = root.methods.two.transform.verb\n const str = root.text('normal')\n return toInfinitive(str, root.model, getTense(root))\n}\n\nconst toJSON = function (vb) {\n const parsed = parseVerb(vb)\n vb = vb.clone().toView()\n const info = getGrammar(vb, parsed)\n return {\n root: parsed.root.text(),\n preAdverbs: toArray(parsed.adverbs.pre),\n postAdverbs: toArray(parsed.adverbs.post),\n auxiliary: toText(parsed.auxiliary),\n negative: parsed.negative.found,\n prefix: toText(parsed.prefix),\n infinitive: toInf(parsed.root),\n grammar: info,\n }\n}\nexport default toJSON\n","import { doDoes, getTense } from '../lib.js'\nconst keep = { tags: true }\n\n// all verb forms are the same\nconst toInf = function (vb, parsed) {\n const { toInfinitive } = vb.methods.two.transform.verb\n const { root, auxiliary } = parsed\n const aux = auxiliary.terms().harden()\n let str = root.text('normal')\n str = toInfinitive(str, vb.model, getTense(root))\n if (str) {\n vb.replace(root, str, keep).tag('Verb').firstTerm().tag('Infinitive')\n }\n // remove any auxiliary terms\n if (aux.found) {\n vb.remove(aux)\n }\n // there is no real way to do this\n // 'i not walk'? 'i walk not'?\n if (parsed.negative.found) {\n if (!vb.has('not')) {\n vb.prepend('not')\n }\n const does = doDoes(vb, parsed)\n vb.prepend(does)\n }\n vb.fullSentence().compute(['freeze', 'lexicon', 'preTagger', 'postTagger', 'unfreeze', 'chunks'])\n return vb\n}\nexport default toInf\n","import { noop, getTense, wasWere, noWill } from '../lib.js'\nconst keep = { tags: true }\n\nconst fns = {\n\n noAux: (vb, parsed) => {\n if (parsed.auxiliary.found) {\n vb = vb.remove(parsed.auxiliary)\n }\n return vb\n },\n\n // walk->walked\n simple: (vb, parsed) => {\n const { conjugate, toInfinitive } = vb.methods.two.transform.verb\n const root = parsed.root\n // 'i may'\n if (root.has('#Modal')) {\n return vb\n }\n let str = root.text({ keepPunct: false })\n str = toInfinitive(str, vb.model, getTense(root))\n const all = conjugate(str, vb.model)\n // 'driven' || 'drove'\n str = all.PastTense\n // all.Participle || all.PastTense\n // but skip the 'is' participle..\n str = str === 'been' ? 'was' : str\n if (str === 'was') {\n str = wasWere(vb, parsed)\n }\n if (str) {\n vb.replace(root, str, keep)\n }\n return vb\n },\n\n both: function (vb, parsed) {\n // 'he did not walk'\n if (parsed.negative.found) {\n vb.replace('will', 'did')\n return vb\n }\n // 'he walked'\n vb = fns.simple(vb, parsed)\n vb = fns.noAux(vb, parsed)\n return vb\n },\n\n hasHad: vb => {\n vb.replace('has', 'had', keep)\n return vb\n },\n\n // some verbs have this weird past-tense form\n // drive -> driven, (!drove)\n hasParticiple: (vb, parsed) => {\n const { conjugate, toInfinitive } = vb.methods.two.transform.verb\n const root = parsed.root\n let str = root.text('normal')\n str = toInfinitive(str, vb.model, getTense(root))\n return conjugate(str, vb.model).Participle\n },\n\n\n\n}\n\n\nconst forms = {\n // walk -> walked\n 'infinitive': fns.simple,\n // he walks -> he walked\n 'simple-present': fns.simple,\n // he walked\n 'simple-past': noop,\n // he will walk -> he walked\n 'simple-future': fns.both,\n\n // he is walking\n 'present-progressive': vb => {\n vb.replace('are', 'were', keep)\n vb.replace('(is|are|am)', 'was', keep)\n return vb\n },\n // he was walking\n 'past-progressive': noop,\n // he will be walking\n 'future-progressive': (vb, parsed) => {\n vb.match(parsed.root).insertBefore('was')\n vb.remove('(will|be)')\n return vb\n },\n\n // has walked -> had walked (?)\n 'present-perfect': fns.hasHad,\n // had walked\n 'past-perfect': noop,\n // will have walked -> had walked\n 'future-perfect': (vb, parsed) => {\n vb.match(parsed.root).insertBefore('had')\n if (vb.has('will')) {\n vb = noWill(vb)\n }\n vb.remove('have')\n return vb\n },\n\n // has been walking -> had been\n 'present-perfect-progressive': fns.hasHad,\n // had been walking\n 'past-perfect-progressive': noop,\n // will have been -> had\n 'future-perfect-progressive': vb => {\n vb.remove('will')\n vb.replace('have', 'had', keep)\n return vb\n },\n\n // got walked\n 'passive-past': vb => {\n // 'have been walked' -> 'had been walked'\n vb.replace('have', 'had', keep)\n return vb\n },\n // is being walked -> 'was being walked'\n 'passive-present': vb => {\n vb.replace('(is|are)', 'was', keep)\n return vb\n },\n // will be walked -> had been walked\n 'passive-future': (vb, parsed) => {\n if (parsed.auxiliary.has('will be')) {\n vb.match(parsed.root).insertBefore('had been')\n vb.remove('(will|be)')\n }\n // will have been walked -> had been walked\n if (parsed.auxiliary.has('will have been')) {\n vb.replace('have', 'had', keep)\n vb.remove('will')\n }\n return vb\n },\n\n // would be walked -> 'would have been walked'\n 'present-conditional': vb => {\n vb.replace('be', 'have been')\n return vb\n },\n // would have been walked\n 'past-conditional': noop,\n\n // is going to drink -> was going to drink\n 'auxiliary-future': vb => {\n vb.replace('(is|are|am)', 'was', keep)\n return vb\n },\n // used to walk\n 'auxiliary-past': noop,\n // we do walk -> we did walk\n 'auxiliary-present': vb => {\n vb.replace('(do|does)', 'did', keep)\n return vb\n },\n\n // must walk -> 'must have walked'\n 'modal-infinitive': (vb, parsed) => {\n // this modal has a clear tense\n if (vb.has('can')) {\n // can drive -> could drive\n vb.replace('can', 'could', keep)\n } else {\n // otherwise, \n // walk -> have walked\n // drive -> have driven\n fns.simple(vb, parsed)\n vb.match('#Modal').insertAfter('have').tag('Auxiliary')\n }\n return vb\n },\n // must have walked\n 'modal-past': noop,\n // wanted to walk\n 'want-infinitive': vb => {\n vb.replace('(want|wants)', 'wanted', keep)\n vb.remove('will')\n return vb\n },\n // started looking\n 'gerund-phrase': (vb, parsed) => {\n parsed.root = parsed.root.not('#Gerund$')\n fns.simple(vb, parsed)\n noWill(vb)\n return vb\n },\n}\n\nconst toPast = function (vb, parsed, form) {\n // console.log(form)\n if (forms.hasOwnProperty(form)) {\n vb = forms[form](vb, parsed)\n vb.fullSentence().compute(['tagger', 'chunks'])\n return vb\n }\n // do nothing i guess?\n return vb\n}\nexport default toPast\n","import { noop, getTense, getSubject } from '../lib.js'\n\nconst haveHas = function (vb, parsed) {\n const subj = getSubject(vb, parsed)\n const m = subj.subject\n if (m.has('(i|we|you)')) {\n return 'have'\n }\n // the dog has\n if (subj.plural === false) {\n return 'has'\n }\n // spencer has\n if (m.has('he') || m.has('she') || m.has('#Person')) {\n return 'has'\n }\n return 'have'\n}\n\n// walk-> has walked\nconst simple = (vb, parsed) => {\n const { conjugate, toInfinitive } = vb.methods.two.transform.verb\n const { root, auxiliary } = parsed\n // 'i may'\n if (root.has('#Modal')) {\n return vb\n }\n let str = root.text({ keepPunct: false })\n str = toInfinitive(str, vb.model, getTense(root))\n const all = conjugate(str, vb.model)\n // 'driven' || 'drove'\n str = all.Participle || all.PastTense\n\n if (str) {\n vb = vb.replace(root, str)\n // 'have/had/has eaten'\n const have = haveHas(vb, parsed)\n vb.prepend(have).match(have).tag('Auxiliary')\n vb.remove(auxiliary)\n }\n\n return vb\n}\n\n\n\nconst forms = {\n // walk -> walked\n 'infinitive': simple,\n // he walks -> he walked\n 'simple-present': simple,\n // he walked\n // 'simple-past': noop,\n // he will walk -> he walked\n 'simple-future': (vb, parsed) => vb.replace('will', haveHas(vb, parsed)),\n\n // he is walking\n // 'present-progressive': noop,\n // he was walking\n // 'past-progressive': noop,\n // he will be walking\n // 'future-progressive': noop,\n\n // has walked -> had walked (?)\n 'present-perfect': noop,\n // had walked\n 'past-perfect': noop,\n // will have walked -> had walked\n 'future-perfect': (vb, parsed) => vb.replace('will have', haveHas(vb, parsed)),\n\n // has been walking -> had been\n 'present-perfect-progressive': noop,\n // had been walking\n 'past-perfect-progressive': noop,\n // will have been -> had\n 'future-perfect-progressive': noop,\n\n // got walked\n // 'passive-past': noop,\n // is being walked -> 'was being walked'\n // 'passive-present': noop,\n // will be walked -> had been walked\n // 'passive-future': noop,\n\n // would be walked -> 'would have been walked'\n // 'present-conditional': noop,\n // would have been walked\n // 'past-conditional': noop,\n\n // is going to drink -> was going to drink\n // 'auxiliary-future': noop,\n // used to walk\n // 'auxiliary-past': noop,\n // we do walk -> we did walk\n // 'auxiliary-present': noop,\n\n // must walk -> 'must have walked'\n // 'modal-infinitive': noop,\n // must have walked\n // 'modal-past': noop,\n // wanted to walk\n // 'want-infinitive': noop,\n // started looking\n // 'gerund-phrase': noop,\n}\n\nconst toPast = function (vb, parsed, form) {\n // console.log(form)\n if (forms.hasOwnProperty(form)) {\n vb = forms[form](vb, parsed)\n vb.fullSentence().compute(['tagger', 'chunks'])\n return vb\n }\n // do the simple form\n vb = simple(vb, parsed, form)\n vb.fullSentence().compute(['tagger', 'chunks'])\n // do nothing, then\n return vb\n}\nexport default toPast\n","import { noop, isPlural, isAreAm, doDoes, getSubject, toInf, getTense } from '../lib.js'\nconst keep = { tags: true }\n\n// walk->walked\nconst simple = (vb, parsed) => {\n const { conjugate, toInfinitive } = vb.methods.two.transform.verb\n const root = parsed.root\n let str = root.text('normal')\n str = toInfinitive(str, vb.model, getTense(root))\n // 'i walk' vs 'he walks'\n if (isPlural(vb, parsed) === false) {\n str = conjugate(str, vb.model).PresentTense\n }\n // handle copula\n if (root.has('#Copula')) {\n str = isAreAm(vb, parsed)\n }\n if (str) {\n vb = vb.replace(root, str, keep)\n vb.not('#Particle').tag('PresentTense')\n }\n // vb.replace('not ' + str, str + ' not')\n return vb\n}\n\nconst toGerund = (vb, parsed) => {\n const { conjugate, toInfinitive } = vb.methods.two.transform.verb\n const root = parsed.root\n let str = root.text('normal')\n str = toInfinitive(str, vb.model, getTense(root))\n // 'i walk' vs 'he walks'\n if (isPlural(vb, parsed) === false) {\n str = conjugate(str, vb.model).Gerund\n }\n if (str) {\n vb = vb.replace(root, str, keep)\n vb.not('#Particle').tag('Gerund')\n }\n return vb\n}\n\nconst vbToInf = (vb, parsed) => {\n const { toInfinitive } = vb.methods.two.transform.verb\n const root = parsed.root\n let str = parsed.root.text('normal')\n str = toInfinitive(str, vb.model, getTense(root))\n if (str) {\n vb = vb.replace(parsed.root, str, keep)\n }\n return vb\n}\n\n\n\nconst forms = {\n // walk\n 'infinitive': simple,\n // he walks -> he walked\n 'simple-present': (vb, parsed) => {\n const { conjugate } = vb.methods.two.transform.verb\n const { root } = parsed\n // is it *only* a infinitive? - 'we buy' etc\n if (root.has('#Infinitive')) {\n const subj = getSubject(vb, parsed)\n const m = subj.subject\n if (isPlural(vb, parsed) || m.has('i')) {\n // keep it infinitive\n return vb\n }\n const str = root.text('normal')\n const pres = conjugate(str, vb.model).PresentTense\n if (str !== pres) {\n vb.replace(root, pres, keep)\n }\n } else {\n return simple(vb, parsed)\n }\n return vb\n },\n // he walked\n 'simple-past': simple,\n // he will walk -> he walked\n 'simple-future': (vb, parsed) => {\n const { root, auxiliary } = parsed\n // handle 'will be'\n if (auxiliary.has('will') && root.has('be')) {\n const str = isAreAm(vb, parsed)\n vb.replace(root, str)\n vb = vb.remove('will')\n vb.replace('not ' + str, str + ' not')\n } else {\n simple(vb, parsed)\n vb = vb.remove('will')\n }\n return vb\n },\n\n // is walking ->\n 'present-progressive': noop,\n // was walking -> is walking\n 'past-progressive': (vb, parsed) => {\n const str = isAreAm(vb, parsed)\n return vb.replace('(were|was)', str, keep)\n },\n // will be walking -> is walking\n 'future-progressive': vb => {\n vb.match('will').insertBefore('is')\n vb.remove('be')\n return vb.remove('will')\n },\n\n // has walked -> (?)\n 'present-perfect': (vb, parsed) => {\n simple(vb, parsed)\n vb = vb.remove('(have|had|has)')\n return vb\n },\n\n // had walked -> has walked\n 'past-perfect': (vb, parsed) => {\n // not 'we has walked'\n const subj = getSubject(vb, parsed)\n const m = subj.subject\n if (isPlural(vb, parsed) || m.has('i')) {\n vb = toInf(vb, parsed)// we walk\n vb.remove('had')\n return vb\n }\n vb.replace('had', 'has', keep)\n return vb\n },\n // will have walked -> has walked\n 'future-perfect': vb => {\n vb.match('will').insertBefore('has')\n return vb.remove('have').remove('will')\n },\n\n // has been walking\n 'present-perfect-progressive': noop,\n // had been walking\n 'past-perfect-progressive': vb => vb.replace('had', 'has', keep),\n // will have been -> has been\n 'future-perfect-progressive': vb => {\n vb.match('will').insertBefore('has')\n return vb.remove('have').remove('will')\n },\n\n // got walked -> is walked\n // was walked -> is walked\n // had been walked -> is walked\n 'passive-past': (vb, parsed) => {\n const str = isAreAm(vb, parsed)\n if (vb.has('(had|have|has)') && vb.has('been')) {\n vb.replace('(had|have|has)', str, keep)\n vb.replace('been', 'being')\n return vb\n }\n return vb.replace('(got|was|were)', str)\n },\n // is being walked ->\n 'passive-present': noop,\n // will be walked -> is being walked\n 'passive-future': vb => {\n vb.replace('will', 'is')\n return vb.replace('be', 'being')\n },\n\n // would be walked ->\n 'present-conditional': noop,\n // would have been walked ->\n 'past-conditional': vb => {\n vb.replace('been', 'be')\n return vb.remove('have')\n },\n\n // is going to drink -> is drinking\n 'auxiliary-future': (vb, parsed) => {\n toGerund(vb, parsed)\n vb.remove('(going|to)')\n return vb\n },\n // used to walk -> is walking\n // did walk -> is walking\n 'auxiliary-past': (vb, parsed) => {\n // 'did provide' -> 'does provide'\n if (parsed.auxiliary.has('did')) {\n const str = doDoes(vb, parsed)\n vb.replace(parsed.auxiliary, str)\n return vb\n }\n toGerund(vb, parsed)\n vb.replace(parsed.auxiliary, 'is')\n return vb\n },\n // we do walk ->\n 'auxiliary-present': noop,\n\n // must walk -> 'must have walked'\n 'modal-infinitive': noop,\n // must have walked\n 'modal-past': (vb, parsed) => {\n vbToInf(vb, parsed)\n return vb.remove('have')\n },\n // started looking\n 'gerund-phrase': (vb, parsed) => {\n parsed.root = parsed.root.not('#Gerund$')\n simple(vb, parsed)\n return vb.remove('(will|have)')\n },\n // wanted to walk\n 'want-infinitive': (vb, parsed) => {\n let str = 'wants'\n if (isPlural(vb, parsed)) {\n str = 'want'//we want\n }\n vb.replace('(want|wanted|wants)', str, keep)\n vb.remove('will')\n return vb\n },\n}\n\nconst toPresent = function (vb, parsed, form) {\n // console.log(form)\n if (forms.hasOwnProperty(form)) {\n vb = forms[form](vb, parsed)\n vb.fullSentence().compute(['tagger', 'chunks'])\n return vb\n }\n return vb\n}\nexport default toPresent\n","import { noop, getTense } from '../lib.js'\nconst keep = { tags: true }\n\nconst simple = (vb, parsed) => {\n const { toInfinitive } = vb.methods.two.transform.verb\n const { root, auxiliary } = parsed\n // 'i may'\n if (root.has('#Modal')) {\n return vb\n }\n let str = root.text('normal')\n str = toInfinitive(str, vb.model, getTense(root))\n if (str) {\n vb = vb.replace(root, str, keep)\n vb.not('#Particle').tag('Verb')\n }\n vb.prepend('will').match('will').tag('Auxiliary')\n vb.remove(auxiliary)\n return vb\n}\n\n// 'will be walking'\nconst progressive = (vb, parsed) => {\n const { conjugate, toInfinitive } = vb.methods.two.transform.verb\n const { root, auxiliary } = parsed\n let str = root.text('normal')\n str = toInfinitive(str, vb.model, getTense(root))\n if (str) {\n str = conjugate(str, vb.model).Gerund\n vb.replace(root, str, keep)\n vb.not('#Particle').tag('PresentTense')\n }\n vb.remove(auxiliary)\n vb.prepend('will be').match('will be').tag('Auxiliary')\n return vb\n}\n\nconst forms = {\n // walk ->\n 'infinitive': simple,\n // he walks ->\n 'simple-present': simple,\n // he walked\n 'simple-past': simple,\n // he will walk ->\n 'simple-future': noop,\n\n // is walking ->\n 'present-progressive': progressive,\n // was walking ->\n 'past-progressive': progressive,\n // will be walking ->\n 'future-progressive': noop,\n\n // has walked ->\n 'present-perfect': (vb) => {\n vb.match('(have|has)').replaceWith('will have')\n return vb\n },\n // had walked ->\n 'past-perfect': vb => vb.replace('(had|has)', 'will have'),\n // will have walked ->\n 'future-perfect': noop,\n\n // has been walking\n 'present-perfect-progressive': vb => vb.replace('has', 'will have'),\n // had been walking\n 'past-perfect-progressive': vb => vb.replace('had', 'will have'),\n // will have been ->\n 'future-perfect-progressive': noop,\n\n // got walked ->\n // was walked ->\n // was being walked ->\n // had been walked ->\n 'passive-past': vb => {\n if (vb.has('got')) {\n return vb.replace('got', 'will get')\n }\n if (vb.has('(was|were)')) {\n vb.replace('(was|were)', 'will be')\n return vb.remove('being')\n }\n if (vb.has('(have|has|had) been')) {\n return vb.replace('(have|has|had) been', 'will be')\n }\n return vb\n },\n // is being walked ->\n 'passive-present': vb => {\n vb.replace('being', 'will be')\n vb.remove('(is|are|am)')\n return vb\n },\n // will be walked ->\n 'passive-future': noop,\n // would be walked ->\n 'present-conditional': vb => vb.replace('would', 'will'),\n // would have been walked ->\n 'past-conditional': vb => vb.replace('would', 'will'),\n\n // is going to drink ->\n 'auxiliary-future': noop,\n // used to walk -> is walking\n // did walk -> is walking\n 'auxiliary-past': vb => {\n if (vb.has('used') && vb.has('to')) {\n vb.replace('used', 'will')\n return vb.remove('to')\n }\n vb.replace('did', 'will')\n return vb\n },\n // we do walk ->\n // he does walk ->\n 'auxiliary-present': vb => {\n return vb.replace('(do|does)', 'will')\n },\n\n // must walk ->\n 'modal-infinitive': noop,\n // must have walked\n 'modal-past': noop,\n // started looking\n 'gerund-phrase': (vb, parsed) => {\n parsed.root = parsed.root.not('#Gerund$')\n simple(vb, parsed)\n return vb.remove('(had|have)')\n },\n // wanted to walk\n 'want-infinitive': vb => {\n vb.replace('(want|wants|wanted)', 'will want')\n return vb\n },\n}\n\nconst toFuture = function (vb, parsed, form) {\n // console.log(form)\n // is it already future-tense?\n if (vb.has('will') || vb.has('going to')) {\n return vb\n }\n if (forms.hasOwnProperty(form)) {\n vb = forms[form](vb, parsed)\n vb.fullSentence().compute(['tagger', 'chunks'])\n return vb\n }\n return vb\n}\nexport default toFuture\n","import { getTense, isAreAm } from '../lib.js'\nconst keep = { tags: true }\n\n// all verb forms are the same\nconst toGerund = function (vb, parsed) {\n // console.log(form)\n const { toInfinitive, conjugate } = vb.methods.two.transform.verb\n const { root, auxiliary } = parsed\n if (vb.has('#Gerund')) {\n return vb\n }\n\n // conjugate '-ing' verb\n let str = root.text('normal')\n str = toInfinitive(str, vb.model, getTense(root))\n const gerund = conjugate(str, vb.model).Gerund\n // 'are walking', 'is walking'\n if (gerund) {\n const aux = isAreAm(vb, parsed)\n vb.replace(root, gerund, keep)\n vb.remove(auxiliary)\n vb.prepend(aux)//.match(aux)\n }\n // remove any existing auxiliary\n // if (auxiliary.found) {\n // vb.match(auxiliary).debug()\n // vb.remove(auxiliary)\n // }\n\n vb.replace('not is', 'is not')\n vb.replace('not are', 'are not')\n vb.fullSentence().compute(['tagger', 'chunks'])\n return vb\n}\nexport default toGerund\n","import { doDoes, toInf } from '../lib.js'\nconst keep = { tags: true }\n\n// do/does not walk \nconst doesNot = function (vb, parsed) {\n const does = doDoes(vb, parsed)\n vb.prepend(does + ' not')\n return vb\n}\n\nconst isWas = function (vb) {\n // not be\n let m = vb.match('be')\n if (m.found) {\n m.prepend('not')\n return vb\n }\n // will not\n m = vb.match('(is|was|am|are|will|were)')\n if (m.found) {\n m.append('not')\n return vb\n }\n return vb\n}\n\nconst hasCopula = (vb) => vb.has('(is|was|am|are|will|were|be)')\n\n//vaguely, turn 'he is cool' into 'he is not cool'\nconst forms = {\n\n\n // he walks' -> 'he does not walk'\n 'simple-present': (vb, parsed) => {\n // is/was\n if (hasCopula(vb) === true) {\n return isWas(vb, parsed)\n }\n // he walk\n vb = toInf(vb, parsed)\n // does not \n vb = doesNot(vb, parsed)\n return vb\n },\n // 'he walked' -> 'he did not walk'\n 'simple-past': (vb, parsed) => {\n // is/was\n if (hasCopula(vb) === true) {\n return isWas(vb, parsed)\n }\n // he walk\n vb = toInf(vb, parsed)\n // vb.debug()\n // did not walk\n vb.prepend('did not')\n return vb\n },\n\n // walk! -> 'do not walk'\n 'imperative': (vb) => {\n vb.prepend('do not')\n return vb\n },\n // walk -> does not walk\n 'infinitive': (vb, parsed) => {\n if (hasCopula(vb) === true) {\n return isWas(vb, parsed)\n }\n return doesNot(vb, parsed)\n },\n\n 'passive-past': (vb) => {\n // got walked -> did not get walked\n if (vb.has('got')) {\n vb.replace('got', 'get', keep)\n vb.prepend('did not')\n return vb\n }\n // was walked, were walked\n // was being walked\n // had been walked, have been eaten\n const m = vb.match('(was|were|had|have)')\n if (m.found) {\n m.append('not')\n }\n return vb\n },\n 'auxiliary-past': (vb) => {\n // used to walk\n if (vb.has('used')) {\n vb.prepend('did not')\n return vb\n }\n // he did walk\n const m = vb.match('(did|does|do)')\n if (m.found) {\n m.append('not')\n }\n return vb\n },\n\n // wants to walk\n 'want-infinitive': (vb, parsed) => {\n // does not \n vb = doesNot(vb, parsed)\n // want\n vb = vb.replace('wants', 'want', keep)\n return vb\n },\n\n}\n\nconst toNegative = function (vb, parsed, form) {\n // console.log(form)\n if (vb.has('#Negative')) {\n return vb\n }\n if (forms.hasOwnProperty(form)) {\n vb = forms[form](vb, parsed)\n return vb\n }\n\n // 'not be'\n let m = vb.matchOne('be')\n if (m.found) {\n m.prepend('not')\n return vb\n }\n // is/was not\n if (hasCopula(vb) === true) {\n return isWas(vb, parsed)\n }\n\n // 'would not'\n m = vb.matchOne('(will|had|have|has|did|does|do|#Modal)')\n if (m.found) {\n m.append('not')\n return vb\n }\n // do nothing i guess?\n return vb\n}\nexport default toNegative","import find from '../find.js'\nimport toJSON from './toJSON.js'\nimport parseVerb from './parse/index.js'\nimport toInf from './conjugate/toInfinitive.js'\nimport toPast from './conjugate/toPast.js'\nimport toParticiple from './conjugate/toParticiple.js'\nimport toPresent from './conjugate/toPresent.js'\nimport toFuture from './conjugate/toFuture.js'\nimport toGerund from './conjugate/toGerund.js'\nimport getSubject from './parse/getSubject.js'\nimport getGrammar from './parse/grammar/index.js'\nimport toNegative from './conjugate/toNegative.js'\nimport { getTense } from './lib.js'\n\n\nconst api = function (View) {\n class Verbs extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Verbs'\n }\n parse(n) {\n return this.getNth(n).map(parseVerb)\n }\n json(opts, n) {\n const m = this.getNth(n)\n const arr = m.map(vb => {\n const json = vb.toView().json(opts)[0] || {}\n json.verb = toJSON(vb)\n return json\n }, [])\n return arr\n }\n subjects(n) {\n return this.getNth(n).map(vb => {\n const parsed = parseVerb(vb)\n return getSubject(vb, parsed).subject\n })\n }\n adverbs(n) {\n return this.getNth(n).map(vb => vb.match('#Adverb'))\n }\n isSingular(n) {\n return this.getNth(n).filter(vb => {\n return getSubject(vb).plural !== true\n })\n }\n isPlural(n) {\n return this.getNth(n).filter(vb => {\n return getSubject(vb).plural === true\n })\n }\n isImperative(n) {\n return this.getNth(n).filter(vb => vb.has('#Imperative'))\n }\n toInfinitive(n) {\n return this.getNth(n).map(vb => {\n const parsed = parseVerb(vb)\n const info = getGrammar(vb, parsed)\n return toInf(vb, parsed, info.form)\n })\n }\n toPresentTense(n) {\n return this.getNth(n).map(vb => {\n const parsed = parseVerb(vb)\n const info = getGrammar(vb, parsed)\n if (info.isInfinitive) {\n return vb\n }\n return toPresent(vb, parsed, info.form)\n })\n }\n toPastTense(n) {\n return this.getNth(n).map(vb => {\n const parsed = parseVerb(vb)\n const info = getGrammar(vb, parsed)\n if (info.isInfinitive) {\n return vb\n }\n return toPast(vb, parsed, info.form)\n })\n }\n toFutureTense(n) {\n return this.getNth(n).map(vb => {\n const parsed = parseVerb(vb)\n const info = getGrammar(vb, parsed)\n if (info.isInfinitive) {\n return vb\n }\n return toFuture(vb, parsed, info.form)\n })\n }\n toGerund(n) {\n return this.getNth(n).map(vb => {\n const parsed = parseVerb(vb)\n const info = getGrammar(vb, parsed)\n if (info.isInfinitive) {\n return vb\n }\n return toGerund(vb, parsed, info.form)\n })\n }\n toPastParticiple(n) {\n return this.getNth(n).map(vb => {\n const parsed = parseVerb(vb)\n const info = getGrammar(vb, parsed)\n if (info.isInfinitive) {\n return vb\n }\n return toParticiple(vb, parsed, info.form)\n })\n }\n conjugate(n) {\n const { conjugate, toInfinitive } = this.world.methods.two.transform.verb\n return this.getNth(n).map(vb => {\n const parsed = parseVerb(vb)\n const info = getGrammar(vb, parsed)\n // allow imperatives like 'go!' to be conjugated here (only)\n if (info.form === 'imperative') {\n info.form = 'simple-present'\n }\n let inf = parsed.root.text('normal')\n if (!parsed.root.has('#Infinitive')) {\n const tense = getTense(parsed.root)\n inf = toInfinitive(inf, vb.model, tense) || inf\n }\n return conjugate(inf, vb.model)\n }, [])\n }\n\n /** return only verbs with 'not'*/\n isNegative() {\n return this.if('#Negative')\n }\n /** return only verbs without 'not'*/\n isPositive() {\n return this.ifNo('#Negative')\n }\n /** remove 'not' from these verbs */\n toPositive() {\n const m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n }\n toNegative(n) {\n return this.getNth(n).map(vb => {\n const parsed = parseVerb(vb)\n const info = getGrammar(vb, parsed)\n return toNegative(vb, parsed, info.form)\n })\n }\n // overloaded - keep Verb class\n update(pointer) {\n const m = new Verbs(this.document, pointer)\n m._cache = this._cache // share this full thing\n return m\n }\n }\n Verbs.prototype.toPast = Verbs.prototype.toPastTense\n Verbs.prototype.toPresent = Verbs.prototype.toPresentTense\n Verbs.prototype.toFuture = Verbs.prototype.toFutureTense\n\n View.prototype.verbs = function (n) {\n let vb = find(this)\n vb = vb.getNth(n)\n return new Verbs(this.document, vb.pointer)\n }\n}\nexport default api\n","import api from './api/api.js'\n\nexport default {\n api,\n}\n","\n// borrow a reference from another pronoun\n// 'mike is tall, [he] climbs and [he] swims'\nconst findChained = function (want, s) {\n const m = s.match(want)\n if (m.found) {\n const ref = m.pronouns().refersTo()\n if (ref.found) {\n return ref\n }\n }\n return s.none()\n}\n\nconst prevSentence = function (m) {\n if (!m.found) {\n return m\n }\n const [n] = m.fullPointer[0]\n if (n && n > 0) {\n return m.update([[n - 1]])\n }\n return m.none()\n}\nexport { prevSentence, findChained }","import { findChained } from './lib.js'\n\n// only filter if we know a gender\n// ambiguous names like 'jamie smith' will refer to either he or she\nconst byGender = function (ppl, gender) {\n if (gender === 'm') {\n return ppl.filter(m => !m.presumedFemale().found)\n } else if (gender === 'f') {\n return ppl.filter(m => !m.presumedMale().found)\n }\n return ppl\n}\n\n\nconst getPerson = function (s, gender) {\n // look at current sentence\n let people = s.people()\n people = byGender(people, gender)\n if (people.found) {\n return people.last()\n }\n // non-named people, like 'the cowboy'\n people = s.nouns('#Actor')\n if (people.found) {\n return people.last()\n }\n // existing pronouns\n if (gender === 'f') {\n return findChained('(she|her|hers)', s)\n }\n if (gender === 'm') {\n return findChained('(he|him|his)', s)\n }\n return s.none()\n}\n\nexport default getPerson\n","import { findChained } from './lib.js'\n\n// find best reference for 'they' & 'their'\nconst getThey = function (s) {\n const nouns = s.nouns()\n\n // 'the bananas'\n let things = nouns.isPlural().notIf('#Pronoun')\n if (things.found) {\n return things.last()\n }\n // re-use existing pronoun reference\n const chain = findChained('(they|their|theirs)', s)\n if (chain.found) {\n return chain\n }\n\n // they can also refer to a singular noun\n // \"the restaurant sold their food\"\n // \"a choir sang their song\"\n\n // somebody shaved their head\n things = nouns.match('(somebody|nobody|everybody|anybody|someone|noone|everyone|anyone)')\n if (things.found) {\n return things.last()\n }\n return s.none()\n}\n\n\nexport default getThey","import getPerson from './findPerson.js'\nimport getThey from './findThey.js'\n// import getIt from './findIt.js'\nimport { prevSentence } from './lib.js'\n\nconst addReference = function (pron, m) {\n if (m && m.found) {\n // add reference on the pronoun\n const term = pron.docs[0][0]//pronouns are 1 word only\n term.reference = m.ptrs[0]\n }\n}\n\nconst stepBack = function (m, cb) {\n // 1st - in same sentence\n let s = m.before()\n let res = cb(s)\n if (res.found) {\n return res\n }\n // 2nd - previous sentence\n s = prevSentence(m)\n res = cb(s)\n if (res.found) {\n return res\n }\n // 3rd - two sentences back\n s = prevSentence(s)\n res = cb(s)\n if (res.found) {\n return res\n }\n return m.none()\n}\n\nconst coreference = function (view) {\n const pronouns = view.pronouns().if('(he|him|his|she|her|hers|they|their|theirs|it|its)')\n pronouns.forEach(pron => {\n let res = null\n // connect pronoun to its reference\n if (pron.has('(he|him|his)')) {\n res = stepBack(pron, (m) => getPerson(m, 'm'))\n } else if (pron.has('(she|her|hers)')) {\n res = stepBack(pron, (m) => getPerson(m, 'f'))\n } else if (pron.has('(they|their|theirs)')) {\n res = stepBack(pron, getThey)\n }\n if (res && res.found) {\n addReference(pron, res)\n }\n })\n}\nexport default coreference","const api = function (View) {\n\n class Pronouns extends View {\n constructor(document, pointer, groups) {\n super(document, pointer, groups)\n this.viewType = 'Pronouns'\n }\n hasReference() {\n this.compute('coreference')\n return this.filter(m => {\n const term = m.docs[0][0]\n return term.reference\n })\n }\n // get the noun-phrase this pronoun refers to\n refersTo() {\n //calculate links\n this.compute('coreference')\n // return them\n return this.map(m => {\n if (!m.found) {\n return m.none()\n }\n const term = m.docs[0][0]\n if (term.reference) {\n return m.update([term.reference])\n }\n return m.none()\n })\n }\n // overloaded - keep Numbers class\n update(pointer) {\n const m = new Pronouns(this.document, pointer)\n m._cache = this._cache // share this full thing\n return m\n }\n }\n\n View.prototype.pronouns = function (n) {\n let m = this.match('#Pronoun')\n m = m.getNth(n)\n return new Pronouns(m.document, m.pointer)\n }\n}\nexport default api\n","import coreference from './compute/index.js'\nimport api from './api/pronouns.js'\n\nexport default {\n compute: { coreference },\n api\n}","import nlp from './two.js'\nimport adjectives from './3-three/adjectives/plugin.js'\nimport adverbs from './3-three/adverbs/plugin.js'\nimport chunker from './3-three/chunker/plugin.js'\nimport misc from './3-three/misc/plugin.js'\nimport normalize from './3-three/normalize/plugin.js'\nimport nouns from './3-three/nouns/plugin.js'\nimport numbers from './3-three/numbers/plugin.js'\nimport redact from './3-three/redact/plugin.js'\nimport sentences from './3-three/sentences/plugin.js'\nimport topics from './3-three/topics/plugin.js'\nimport verbs from './3-three/verbs/plugin.js'\nimport coreference from './3-three/coreference/plugin.js'\n\nnlp.plugin(adjectives) //\nnlp.plugin(adverbs) //\nnlp.plugin(chunker) //\nnlp.plugin(coreference)\nnlp.plugin(misc) //\nnlp.plugin(normalize) //\nnlp.plugin(nouns) //\nnlp.plugin(numbers) //\nnlp.plugin(redact) //\nnlp.plugin(sentences) //\nnlp.plugin(topics) //\nnlp.plugin(verbs) //\n\nexport default nlp\n","/**\n * Grammar Completion Detector\n *\n * Detects GRAMMAR_CUE violations where options don't grammatically\n * complete the stem. Uses compromise.js for NLP-based grammar analysis.\n *\n * @module guessability/grammar-detector\n */\n\nimport nlp from 'compromise'\nimport { Violation, SCORING_WEIGHTS } from './types'\n\n/**\n * Expected grammatical pattern based on stem analysis\n */\nexport interface ExpectedPattern {\n /** Type of grammatical construction expected */\n type: 'predicate' | 'infinitive' | 'means' | 'naming' | 'question' | 'unknown'\n /** List of acceptable grammatical structures */\n expects: string[]\n}\n\n/**\n * Question option interface (minimal)\n */\ninterface QuestionOption {\n key: string\n text: string\n isCorrect: boolean\n}\n\n/**\n * Question interface (minimal for grammar detection)\n */\ninterface Question {\n questionId: string\n prompt: string\n options: QuestionOption[]\n}\n\n/**\n * Analyzes the stem ending to determine what grammatical structure\n * the options should follow.\n *\n * @param stem - The question stem/prompt\n * @returns Expected grammatical pattern\n *\n * @example\n * analyzeStemEnding(\"The main purpose of CSS is...\")\n * // Returns: { type: 'predicate', expects: ['adjective', 'noun', 'gerund'] }\n */\nexport function analyzeStemEnding(stem: string): ExpectedPattern {\n const trimmedStem = stem.trim()\n\n // Pattern: Question ending with \"?\" → flexible (any structure valid)\n if (trimmedStem.endsWith('?')) {\n return { type: 'question', expects: ['any'] }\n }\n\n // Remove trailing punctuation for analysis\n const cleanStem = trimmedStem.replace(/[.…:]+$/, '').trim().toLowerCase()\n\n // Pattern: \"... is\" or \"... are\" → expects predicate (adjective/noun/gerund)\n if (/\\b(is|are|was|were|been)$/.test(cleanStem)) {\n return { type: 'predicate', expects: ['adjective', 'noun', 'gerund', 'noun_phrase'] }\n }\n\n // Pattern: \"... to\" → expects infinitive verb\n if (/\\bto$/.test(cleanStem)) {\n return { type: 'infinitive', expects: ['verb'] }\n }\n\n // Pattern: \"... by\" → expects gerund or noun (means/method)\n if (/\\bby$/.test(cleanStem)) {\n return { type: 'means', expects: ['gerund', 'noun', 'noun_phrase'] }\n }\n\n // Pattern: \"... called\" or \"... named\" → expects noun\n if (/\\b(called|named|known as|referred to as)$/.test(cleanStem)) {\n return { type: 'naming', expects: ['noun', 'noun_phrase'] }\n }\n\n // Pattern: \"... for\" → expects gerund or noun\n if (/\\bfor$/.test(cleanStem)) {\n return { type: 'means', expects: ['gerund', 'noun', 'noun_phrase'] }\n }\n\n // Pattern: \"... of\" → expects noun\n if (/\\bof$/.test(cleanStem)) {\n return { type: 'naming', expects: ['noun', 'noun_phrase', 'gerund'] }\n }\n\n // Unknown pattern - don't flag\n return { type: 'unknown', expects: ['any'] }\n}\n\n/**\n * Classifies the grammatical structure of an option text.\n * Uses compromise.js for NLP analysis with regex fallbacks.\n *\n * @param optionText - The option text to classify\n * @returns Grammatical structure type\n *\n * @example\n * classifyOptionStructure(\"styling web pages\") // 'gerund'\n * classifyOptionStructure(\"to create files\") // 'infinitive'\n * classifyOptionStructure(\"A variable\") // 'noun_phrase'\n */\nexport function classifyOptionStructure(optionText: string): string {\n const text = optionText.trim()\n\n // Empty or very short text\n if (!text || text.length < 2) {\n return 'other'\n }\n\n // Check for code (highest priority - always exempt)\n if (isCodeOption(text)) {\n return 'code'\n }\n\n // Check for infinitive (\"to\" + verb) - before NLP since it's clear\n if (/^(to|To)\\s+[a-z]/i.test(text)) {\n return 'infinitive'\n }\n\n // Use compromise.js for NLP analysis\n try {\n const doc = nlp(text)\n\n // Check for gerund (ends in -ing, acts as noun)\n // Compromise tags gerunds as #Gerund\n if (doc.has('^#Gerund') || doc.has('^#Activity')) {\n return 'gerund'\n }\n\n // Check for verb at start\n if (doc.has('^#Verb') && !doc.has('^#Gerund')) {\n return 'verb'\n }\n\n // Check for adjective at start\n if (doc.has('^#Adjective')) {\n return 'adjective'\n }\n\n // Check for noun phrase (determiner + noun)\n if (doc.has('^#Determiner #Noun') || doc.has('^#Determiner #Adjective')) {\n return 'noun_phrase'\n }\n\n // Check for noun at start\n if (doc.has('^#Noun') || doc.has('^#ProperNoun')) {\n return 'noun'\n }\n\n } catch {\n // If compromise fails, fall through to regex fallbacks\n }\n\n // Regex fallbacks for when NLP doesn't match\n\n // Gerund pattern: starts with capital letter + \"ing\" word\n if (/^[A-Z][a-z]*ing\\b/.test(text)) {\n return 'gerund'\n }\n\n // Noun phrase: starts with article\n if (/^(a|an|the|A|An|The)\\s+/.test(text)) {\n return 'noun_phrase'\n }\n\n // Adjective patterns (common adjective endings)\n if (/^(very|more|most|less|least)\\s+/i.test(text)) {\n return 'adjective'\n }\n\n // Common gerund starters\n if (/^(using|creating|making|building|storing|processing|running|executing|defining|declaring)/i.test(text)) {\n return 'gerund'\n }\n\n return 'other'\n}\n\n/**\n * Checks if the option text appears to be code\n *\n * @param text - Option text to check\n * @returns True if the text appears to be code\n */\nfunction isCodeOption(text: string): boolean {\n // Inline code with backticks\n if (/^`.*`$/.test(text)) return true\n\n // Function call pattern\n if (/^[a-zA-Z_][a-zA-Z0-9_]*\\s*\\(/.test(text)) return true\n\n // Python/JS keywords at start\n if (/^(def|function|class|const|let|var|import|from|if|for|while|return)\\b/.test(text)) return true\n\n // Assignment pattern\n if (/^[a-zA-Z_][a-zA-Z0-9_]*\\s*=/.test(text)) return true\n\n // Array/object literal\n if (/^\\[.*\\]$/.test(text) || /^\\{.*\\}$/.test(text)) return true\n\n // Numeric value (could be code output)\n if (/^-?\\d+(\\.\\d+)?$/.test(text)) return true\n\n // String literal\n if (/^[\"'].*[\"']$/.test(text)) return true\n\n return false\n}\n\n/**\n * Detects GRAMMAR_CUE violations where options don't grammatically\n * complete the stem.\n *\n * @param question - The question to analyze\n * @returns Violation if detected, null otherwise\n *\n * @example\n * detectGrammarCue({\n * questionId: 'test-1',\n * prompt: 'The main purpose of CSS is...',\n * options: [\n * { key: 'A', text: 'styling web pages', isCorrect: true },\n * { key: 'B', text: 'to create databases', isCorrect: false },\n * { key: 'C', text: 'managing servers', isCorrect: false },\n * { key: 'D', text: 'storing data', isCorrect: false }\n * ]\n * })\n * // Returns violation: Option B is infinitive, others are gerund\n */\nexport function detectGrammarCue(question: Question): Violation | null {\n // Analyze what grammatical structure the stem expects\n const stemPattern = analyzeStemEnding(question.prompt)\n\n // Skip flexible patterns (questions, unknown)\n if (stemPattern.expects.includes('any')) {\n return null\n }\n\n // Classify each option's grammatical structure\n const optionAnalysis = question.options.map(o => ({\n key: o.key,\n structure: classifyOptionStructure(o.text),\n isCorrect: o.isCorrect,\n text: o.text\n }))\n\n // Find options that don't fit the expected pattern\n const misfits = optionAnalysis.filter(o => {\n // Code options are always acceptable (exempt from grammar rules)\n if (o.structure === 'code') return false\n\n // 'other' means we couldn't classify - don't penalize\n if (o.structure === 'other') return false\n\n // Check if this structure is acceptable\n return !stemPattern.expects.includes(o.structure)\n })\n\n // Only flag if SOME but not ALL options are misfits\n // If ALL are misfits, our stem pattern detection is probably wrong\n if (misfits.length > 0 && misfits.length < question.options.length) {\n // Get the structures for reporting\n const misfitDetails = misfits.map(m => `${m.key}:${m.structure}`).join(', ')\n\n return {\n rule: 'GRAMMAR_CUE',\n severity: SCORING_WEIGHTS.GRAMMAR_CUE.severity,\n points: SCORING_WEIGHTS.GRAMMAR_CUE.points,\n details: `Options don't grammatically complete stem. Expected: ${stemPattern.expects.join('/')}. Misfits: ${misfitDetails}`,\n fix: 'Rewrite options to all grammatically complete the stem with parallel structure'\n }\n }\n\n return null\n}\n","/**\n * CONVERGENCE Detector (Phase 7)\n *\n * Detects when multiple distractors are semantically similar to each other,\n * clustering together and making the correct answer stand out as \"odd one out.\"\n *\n * Uses TF-IDF (Term Frequency) + Cosine Similarity for lightweight semantic analysis.\n * No external dependencies required - pure TypeScript implementation.\n */\n\nimport { Violation, SCORING_WEIGHTS } from './types'\n\n// Question interface (minimal, compatible with analyzer)\ninterface QuestionOption {\n key: string\n text: string\n isCorrect: boolean\n}\n\ninterface Question {\n questionId: string\n prompt: string\n options: QuestionOption[]\n}\n\n// Stop words to filter out (common words that don't carry semantic meaning)\nconst STOP_WORDS = new Set([\n // Articles and pronouns\n 'a', 'an', 'the', 'is', 'are', 'was', 'were', 'be', 'been', 'being',\n 'to', 'of', 'in', 'for', 'that', 'which', 'this', 'it', 'as', 'at',\n 'by', 'from', 'or', 'and', 'on', 'with', 'can', 'will', 'what', 'how',\n 'when', 'where', 'why', 'you', 'your', 'they', 'them', 'their', 'its',\n 'has', 'have', 'had', 'do', 'does', 'did', 'but', 'if', 'so', 'than',\n // MCQ-common words that appear in wrong answers but don't indicate domain clustering\n 'only', 'just', 'all', 'every', 'any', 'some', 'none', 'both',\n 'always', 'never', 'use', 'using', 'used', 'make', 'makes', 'made',\n 'get', 'gets', 'give', 'gives', 'take', 'takes', 'need', 'needs',\n 'way', 'one', 'two', 'first', 'new', 'same', 'different', 'other',\n 'not', 'more', 'most', 'less', 'also', 'very', 'even', 'still',\n 'would', 'could', 'should', 'must', 'may', 'might',\n])\n\n/**\n * Tokenize text into words for TF-IDF analysis\n * - Lowercases text\n * - Removes punctuation and special characters\n * - Filters out stop words and short words\n */\nexport function tokenize(text: string): string[] {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, ' ') // Replace non-alphanumeric with space\n .split(/\\s+/)\n .filter(w => w.length > 2 && !STOP_WORDS.has(w))\n}\n\n/**\n * Calculate Term Frequency vector for a piece of text\n * Returns a Map of term -> normalized frequency\n */\nexport function getTfVector(text: string): Map<string, number> {\n const tokens = tokenize(text)\n const tf = new Map<string, number>()\n\n if (tokens.length === 0) return tf\n\n // Count term frequency\n for (const token of tokens) {\n tf.set(token, (tf.get(token) || 0) + 1)\n }\n\n // Normalize by document length\n const docLen = tokens.length\n for (const [term, count] of tf) {\n tf.set(term, count / docLen)\n }\n\n return tf\n}\n\n/**\n * Calculate cosine similarity between two TF vectors\n * Returns a value between 0 (no similarity) and 1 (identical)\n */\nexport function cosineSimilarity(a: Map<string, number>, b: Map<string, number>): number {\n let dotProduct = 0\n let normA = 0\n let normB = 0\n\n // Get all unique terms\n const allTerms = new Set([...a.keys(), ...b.keys()])\n\n for (const term of allTerms) {\n const aVal = a.get(term) || 0\n const bVal = b.get(term) || 0\n dotProduct += aVal * bVal\n normA += aVal * aVal\n normB += bVal * bVal\n }\n\n if (normA === 0 || normB === 0) return 0\n return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB))\n}\n\n/**\n * Check if text appears to be code (should skip convergence check)\n * Code options don't work well with TF-IDF tokenization\n */\nfunction isCodeOption(text: string): boolean {\n const codePatterns = [\n /\\w+\\s*\\([^)]*\\)/, // Function calls: print(), len()\n /\\w+\\s*=\\s*.+/, // Assignments: x = 5\n /^\\s*[`'\"].+[`'\"]\\s*$/, // Quoted strings\n /\\b(def|function|return|if|for|while|class)\\b/i, // Keywords\n /[{}\\[\\];<>]/, // Brackets and syntax\n /\\.\\w+\\(/, // Method calls: .append(\n ]\n return codePatterns.some(p => p.test(text))\n}\n\n/**\n * Detect CONVERGENCE violation\n *\n * CONVERGENCE occurs when:\n * 1. Distractors are highly similar to each other (cluster together)\n * 2. Correct answer is dissimilar to distractors (stands out as \"odd one out\")\n *\n * This allows test-wise students to identify the correct answer by noticing\n * it's different from the thematically similar wrong answers.\n *\n * Example violation:\n * Stem: \"What is the primary purpose of a web server?\"\n * A) To serve static files and web pages ✓ (stands out!)\n * B) To process database queries ← similar\n * C) To store database records ← similar\n * D) To manage database connections ← similar\n */\nexport function detectConvergence(question: Question): Violation | null {\n const options = question.options\n const distractors = options.filter(o => !o.isCorrect)\n const correct = options.find(o => o.isCorrect)\n\n // Need at least 2 distractors and 1 correct answer\n if (distractors.length < 2 || !correct) return null\n\n // Skip code-heavy options (TF-IDF doesn't work well)\n const codeCount = options.filter(o => isCodeOption(o.text)).length\n if (codeCount >= options.length / 2) return null\n\n // Skip very short options (not enough text for meaningful similarity)\n const avgLength = options.reduce((sum, o) => sum + o.text.length, 0) / options.length\n if (avgLength < 15) return null // Average option < 15 chars\n\n // Get TF vectors for all options\n const distractorVectors = distractors.map(d => ({\n key: d.key,\n text: d.text,\n vector: getTfVector(d.text)\n }))\n const correctVector = getTfVector(correct.text)\n\n // Skip if any option has empty vector (no meaningful tokens)\n if (correctVector.size === 0) return null\n if (distractorVectors.some(d => d.vector.size === 0)) return null\n\n // Calculate average pairwise similarity among distractors\n let totalDistractorSim = 0\n let pairCount = 0\n for (let i = 0; i < distractorVectors.length; i++) {\n for (let j = i + 1; j < distractorVectors.length; j++) {\n totalDistractorSim += cosineSimilarity(\n distractorVectors[i]!.vector,\n distractorVectors[j]!.vector\n )\n pairCount++\n }\n }\n const avgDistractorSim = pairCount > 0 ? totalDistractorSim / pairCount : 0\n\n // Calculate average similarity of correct answer to distractors\n const correctToDistractorSims = distractorVectors.map(d =>\n cosineSimilarity(correctVector, d.vector)\n )\n const avgCorrectSim = correctToDistractorSims.reduce((a, b) => a + b, 0) / correctToDistractorSims.length\n\n // Find common terms in distractors (domain terms that appear in multiple distractors)\n const distractorTokenSets = distractors.map(d => new Set(tokenize(d.text)))\n const correctTokens = new Set(tokenize(correct.text))\n\n // Count how many distractors each term appears in\n const termDistractorCount = new Map<string, number>()\n for (const tokenSet of distractorTokenSets) {\n for (const token of tokenSet) {\n termDistractorCount.set(token, (termDistractorCount.get(token) || 0) + 1)\n }\n }\n\n // Find terms that appear in ALL or MOST distractors but NOT in correct answer\n const numDistractors = distractors.length\n const sharedDomainTerms = [...termDistractorCount.entries()]\n .filter(([term, count]) =>\n count >= Math.max(2, numDistractors - 1) && // In most/all distractors\n !correctTokens.has(term) // NOT in correct answer\n )\n .map(([term]) => term)\n\n // CONVERGENCE Detection Strategy:\n // Primary: Distractors share domain terms that correct answer lacks\n // Secondary: High TF-IDF similarity among distractors + low similarity to correct\n\n // Strategy 1: Domain term clustering (most reliable)\n // Require 2+ shared domain terms to reduce false positives from single common words\n // Also require correct answer to be clearly isolated (< 15% similarity)\n if (sharedDomainTerms.length >= 2 && avgCorrectSim < 0.15) {\n return {\n rule: 'CONVERGENCE',\n severity: SCORING_WEIGHTS.CONVERGENCE.severity,\n points: SCORING_WEIGHTS.CONVERGENCE.points,\n details: `Distractors cluster around shared term(s): \"${sharedDomainTerms.join('\", \"')}\" while correct answer is isolated (${Math.round(avgCorrectSim * 100)}% similarity)`,\n fix: 'Diversify distractors to cover different misconceptions or domains. Each distractor should represent a distinct wrong approach.',\n }\n }\n\n // Strategy 2: TF-IDF similarity thresholds (for cases without exact term overlap)\n // Lower thresholds since TF-IDF yields conservative scores for short text\n const DISTRACTOR_SIMILARITY_THRESHOLD = 0.30 // Distractors cluster together\n const CORRECT_ISOLATION_THRESHOLD = 0.15 // Correct stands apart\n\n if (avgDistractorSim > DISTRACTOR_SIMILARITY_THRESHOLD &&\n avgCorrectSim < CORRECT_ISOLATION_THRESHOLD) {\n\n const distractorTokens = distractors.flatMap(d => tokenize(d.text))\n const tokenFreq = new Map<string, number>()\n for (const token of distractorTokens) {\n tokenFreq.set(token, (tokenFreq.get(token) || 0) + 1)\n }\n const commonTerms = [...tokenFreq.entries()]\n .filter(([, count]) => count >= 2)\n .sort(([, a], [, b]) => b - a)\n .slice(0, 3)\n .map(([term]) => term)\n\n const clusterDescription = commonTerms.length > 0\n ? ` (clustering around: ${commonTerms.join(', ')})`\n : ''\n\n return {\n rule: 'CONVERGENCE',\n severity: SCORING_WEIGHTS.CONVERGENCE.severity,\n points: SCORING_WEIGHTS.CONVERGENCE.points,\n details: `Distractors cluster together (${Math.round(avgDistractorSim * 100)}% similar) while correct answer is isolated (${Math.round(avgCorrectSim * 100)}% similar to distractors)${clusterDescription}`,\n fix: 'Diversify distractors to cover different misconceptions or domains. Each distractor should represent a distinct wrong approach.',\n }\n }\n\n return null\n}\n","/**\n * Guessability Analyzer\n *\n * Analyzes MCQ questions for testwiseness vulnerabilities and calculates\n * a guessability score (0-100).\n */\n\nimport {\n Violation,\n ViolationRule,\n GuessabilityReport,\n GuessabilityGrade,\n GuessabilityCourseSummary,\n SCORING_WEIGHTS,\n GRADE_THRESHOLDS,\n} from './types'\nimport { detectGrammarCue } from './grammar-detector'\nimport { detectConvergence } from './convergence-detector'\n\n// Types for question data (compatible with SDK question schema)\ninterface QuestionOption {\n key: string\n text: string\n isCorrect: boolean\n}\n\ninterface Question {\n questionId: string\n prompt: string\n options: QuestionOption[]\n hasCodeBlock?: boolean // Whether question contains code\n codeLanguage?: string // Programming language (python, javascript, etc.)\n codeContent?: string // The actual code in the question\n}\n\n// Options for analyzer behavior\ninterface AnalyzerOptions {\n csMode?: boolean // Enable CS-specific detectors\n}\n\n// Stop words for keyword extraction (includes common CS/tech terms)\nconst STOP_WORDS = new Set([\n // Basic stop words\n 'a', 'an', 'the', 'is', 'are', 'to', 'of', 'in', 'for', 'that', 'which',\n 'this', 'it', 'be', 'as', 'at', 'by', 'from', 'or', 'and', 'on', 'with',\n 'can', 'will', 'what', 'how', 'when', 'where', 'why', 'you', 'your',\n // Additional common words to reduce false positives\n 'does', 'should', 'would', 'could', 'have', 'has', 'had', 'been', 'being',\n 'more', 'most', 'some', 'each', 'them', 'they', 'their', 'than', 'then',\n 'need', 'needs', 'good', 'best', 'well', 'both', 'also', 'only', 'very',\n 'just', 'over', 'time', 'between', 'using', 'used', 'uses', 'make', 'made',\n 'move', 'current', 'player', 'cases', 'case', 'reopen', 'open', 'close',\n // Common CS/tech terms that naturally appear in questions and answers\n 'data', 'code', 'user', 'form', 'list', 'text', 'name', 'loop', 'else',\n 'html', 'function', 'method', 'class', 'object', 'array', 'string', 'number',\n 'value', 'variable', 'true', 'false', 'return', 'print', 'output', 'input',\n 'error', 'type', 'file', 'model', 'models', 'device', 'visual', 'task',\n 'side', 'risk', 'food', 'scan', 'menu', 'find', 'fact', 'ward', 'both',\n // CS data structure and algorithm terms\n 'stack', 'stacks', 'queue', 'queues', 'tree', 'trees', 'graph', 'graphs',\n 'coin', 'coins', 'node', 'nodes', 'edge', 'edges', 'path', 'paths',\n 'elif', 'item', 'items', 'index', 'indices', 'element', 'elements',\n // Company/brand names that may appear in case studies\n 'amazon', 'google', 'apple', 'microsoft', 'facebook', 'meta', 'netflix',\n])\n\n/**\n * Extract keywords from text (removing stop words, short words, and code patterns)\n */\nfunction extractKeywords(text: string): string[] {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, '')\n .split(/\\s+/)\n .filter(w => {\n if (w.length <= 3) return false\n if (STOP_WORDS.has(w)) return false\n // Filter out code-like concatenated patterns (e.g., \"printwelcome\", \"distneighbor\")\n // These are often variable names or code patterns extracted from prompts\n if (w.length > 12 && !/^[a-z]+$/.test(w)) return false // Very long with mixed chars\n return true\n })\n}\n\n/**\n * Detect LENGTH_BIAS: Correct answer is significantly longer than average\n */\nfunction detectLengthBias(question: Question): Violation | null {\n const lengths = question.options.map(o => o.text.length)\n const avgLength = lengths.reduce((a, b) => a + b) / lengths.length\n\n const correctOption = question.options.find(o => o.isCorrect)\n if (!correctOption) return null\n\n const correctLength = correctOption.text.length\n const ratio = correctLength / avgLength\n\n // Math/numeric context detection: Reduce sensitivity for numeric-only options\n // Numbers naturally vary in length (\"1\" vs \"12\" vs \"123\") without indicating testwiseness\n const allNumeric = question.options.every(o => {\n const text = o.text.trim()\n // Match: integers, decimals, fractions, percentages, square roots, scientific notation\n return /^-?\\d+(\\.\\d+)?%?$/.test(text) || // \"12\", \"-3.14\", \"50%\"\n /^-?√\\d+$/.test(text) || // \"√2\", \"-√3\"\n /^-?\\d+\\/\\d+$/.test(text) || // \"1/2\", \"-3/4\"\n /^-?\\d+(\\.\\d+)?[×x]\\s*10\\^-?\\d+$/.test(text) // \"3.14×10^8\"\n })\n\n // For purely numeric options, use relaxed threshold (1.5 instead of 1.2)\n // and reduce points since length variance is natural for numbers\n const threshold = allNumeric ? 1.5 : 1.2\n\n if (ratio > threshold) {\n // Scale points based on how much longer\n const basePoints = SCORING_WEIGHTS.LENGTH_BIAS.points\n // Further reduce points for numeric options\n const numericReduction = allNumeric ? 5 : 0\n const scaledPoints = ratio > 1.6 ? basePoints - numericReduction :\n ratio > 1.4 ? basePoints - 2 - numericReduction :\n basePoints - 5 - numericReduction\n\n // Don't flag if points would be 0 or negative\n if (scaledPoints <= 0) return null\n\n return {\n rule: 'LENGTH_BIAS',\n severity: SCORING_WEIGHTS.LENGTH_BIAS.severity,\n points: scaledPoints,\n details: `Correct answer is ${Math.round(ratio * 100)}% of average option length`,\n fix: 'Shorten correct answer or expand distractors to within ±20%',\n }\n }\n return null\n}\n\n/**\n * Detect STEM_ECHO: Correct answer contains keywords from stem not in distractors\n */\nfunction detectStemEcho(question: Question): Violation | null {\n // Skip code-heavy questions - code terminology naturally repeats\n // (e.g., if stem has `pop(0)`, answer saying \"pop(0) is O(n)\" is necessary, not testwiseness)\n const hasCodeInStem = question.hasCodeBlock ||\n /```/.test(question.prompt) ||\n /`[^`]+`/.test(question.prompt)\n if (hasCodeInStem) return null\n\n const stemWords = extractKeywords(question.prompt)\n const correctOption = question.options.find(o => o.isCorrect)\n const distractors = question.options.filter(o => !o.isCorrect)\n\n if (!correctOption) return null\n\n const correctKeywords = extractKeywords(correctOption.text)\n const distractorKeywords = new Set(\n distractors.flatMap(d => extractKeywords(d.text))\n )\n\n // Extract terms in quotes from stem - these are concepts being asked about\n // and will naturally appear in the answer (e.g., \"What is 'pick random'?\" -> answer says \"pick\")\n const quotedTerms = new Set(\n (question.prompt.match(/['\"][^'\"]+['\"]/g) || [])\n .flatMap(t => extractKeywords(t))\n )\n\n // Extract subject terms - the main topic being asked about\n // \"What is X and Y?\" or \"How does X work?\" - X will naturally appear in answer\n const subjectMatch = question.prompt.match(/^(?:what|how|which|when|why|where)\\s+(?:is|are|does|do|should|would|can|will)\\s+(\\w+(?:['']\\w+)?(?:\\s+\\w+)?)/i)\n if (subjectMatch && subjectMatch[1]) {\n extractKeywords(subjectMatch[1]).forEach(w => quotedTerms.add(w))\n }\n\n // Also skip terms that appear in lists/examples in the stem\n // e.g., \"['cat', 'dog', 'bird']\" - these are data, not testwiseness cues\n const listTerms = question.prompt.match(/\\[([^\\]]+)\\]/g) || []\n listTerms.flatMap(t => extractKeywords(t)).forEach(w => quotedTerms.add(w))\n\n // Keywords in correct answer that appear in stem but not in distractors\n // Exclude quoted terms (subject matter that must repeat)\n const echoedWords = correctKeywords.filter(\n word => stemWords.includes(word) &&\n !distractorKeywords.has(word) &&\n !quotedTerms.has(word)\n )\n\n if (echoedWords.length > 0) {\n return {\n rule: 'STEM_ECHO',\n severity: SCORING_WEIGHTS.STEM_ECHO.severity,\n points: SCORING_WEIGHTS.STEM_ECHO.points,\n details: `Correct answer echoes stem keywords: ${echoedWords.slice(0, 3).join(', ')}`,\n fix: 'Move shared keywords to stem or add to distractors',\n }\n }\n return null\n}\n\n/**\n * Detect ABSOLUTE_TERMS: Distractors contain \"always\", \"never\", etc.\n */\nfunction detectAbsoluteTerms(question: Question): Violation | null {\n const absoluteWords = ['always', 'never', 'all', 'none', 'only', 'every', 'must']\n const distractors = question.options.filter(o => !o.isCorrect)\n\n const flaggedOptions = distractors.filter(d =>\n absoluteWords.some(abs =>\n new RegExp(`\\\\b${abs}\\\\b`, 'i').test(d.text)\n )\n )\n\n if (flaggedOptions.length > 0) {\n return {\n rule: 'ABSOLUTE_TERMS',\n severity: SCORING_WEIGHTS.ABSOLUTE_TERMS.severity,\n points: SCORING_WEIGHTS.ABSOLUTE_TERMS.points,\n details: `Distractors contain absolute terms: ${flaggedOptions.map(o => o.key).join(', ')}`,\n fix: 'Remove absolute terms or make them true in context',\n }\n }\n return null\n}\n\n/**\n * Detect ALL_NONE_ABOVE: Options contain \"All of the above\" or \"None of the above\"\n */\nfunction detectAllNoneAbove(question: Question): Violation | null {\n const patterns = [\n /all of the above/i,\n /none of the above/i,\n /both a and b\\b(?! (are|is|have|has|equal|same))/i, // \"Both A and B\" as option reference\n /all of these/i,\n /none of these/i,\n /^(a and b|b and c|a, b,? and c)$/i, // Only if ENTIRE option is \"A and B\"\n /^both [abc]\\.? and [abc]\\.?$/i, // \"Both A and B\" as whole option\n ]\n\n const flagged = question.options.filter(o =>\n patterns.some(p => p.test(o.text.trim()))\n )\n\n if (flagged.length > 0) {\n return {\n rule: 'ALL_NONE_ABOVE',\n severity: SCORING_WEIGHTS.ALL_NONE_ABOVE.severity,\n points: SCORING_WEIGHTS.ALL_NONE_ABOVE.points,\n details: `Contains collective option: ${flagged.map(o => o.key).join(', ')}`,\n fix: 'Replace with specific, independent options',\n }\n }\n return null\n}\n\n/**\n * Detect NEGATIVE_STEM: Stem contains NOT, EXCEPT, LEAST without capitalization\n *\n * Uses word boundaries to avoid false positives like \"Note\" matching \"not\"\n */\nfunction detectNegativeStem(question: Question): Violation | null {\n const prompt = question.prompt\n\n // Check for lowercase negative words using word boundaries\n // This prevents false positives like \"Note\" matching \"not\"\n const negativePatterns = [\n /\\bnot\\b/i, // matches \"not\" but not \"Note\", \"notation\", \"nothing\"\n /\\bexcept\\b/i, // matches \"except\" but not \"exception\", \"exceptional\"\n /\\bleast\\b/i, // matches \"least\" as standalone word\n /n't\\b/i, // matches contractions: isn't, doesn't, can't, won't, etc.\n ]\n\n const hasNegative = negativePatterns.some(pattern => pattern.test(prompt))\n const isCapitalized = /\\b(NOT|EXCEPT|LEAST)\\b/.test(prompt)\n\n if (hasNegative && !isCapitalized) {\n return {\n rule: 'NEGATIVE_STEM',\n severity: SCORING_WEIGHTS.NEGATIVE_STEM.severity,\n points: SCORING_WEIGHTS.NEGATIVE_STEM.points,\n details: 'Stem contains negative word without capitalization',\n fix: 'Reframe positively or CAPITALIZE the negative word',\n }\n }\n return null\n}\n\n/**\n * Detect NUMERIC_DISORDER: Numeric options not in ascending/descending order\n */\nfunction detectNumericDisorder(question: Question): Violation | null {\n const numbers = question.options.map(o => {\n const match = o.text.match(/^-?\\d+(\\.\\d+)?$/)\n return match ? parseFloat(o.text) : null\n })\n\n // Only check if all options are numeric\n if (numbers.some(n => n === null)) return null\n\n const numericValues = numbers as number[]\n const isAscending = numericValues.every((n, i) => i === 0 || n >= numericValues[i - 1]!)\n const isDescending = numericValues.every((n, i) => i === 0 || n <= numericValues[i - 1]!)\n\n if (!isAscending && !isDescending) {\n return {\n rule: 'NUMERIC_DISORDER',\n severity: SCORING_WEIGHTS.NUMERIC_DISORDER.severity,\n points: SCORING_WEIGHTS.NUMERIC_DISORDER.points,\n details: `Numeric options not in logical order: ${numericValues.join(', ')}`,\n fix: 'Arrange in ascending or descending order',\n }\n }\n return null\n}\n\n/**\n * Detect DOUBLE_NEGATIVE: Negative stem combined with negative option\n *\n * Uses word boundaries to avoid false positives like \"Note\" matching \"not\"\n */\nfunction detectDoubleNegative(question: Question): Violation | null {\n // Use word boundaries to avoid false positives\n const negativePatterns = [\n /\\bnot\\b/i,\n /\\bexcept\\b/i,\n /n't\\b/i,\n /\\bwithout\\b/i,\n /\\bunless\\b/i,\n ]\n\n const hasNegativeStem = negativePatterns.some(pattern =>\n pattern.test(question.prompt)\n )\n\n if (!hasNegativeStem) return null\n\n // Skip debugging questions where negative language is natural\n // \"Why won't this work?\" with options like \"It can't parse\" is pedagogically valid\n const isDebuggingQuestion = /\\b(why|what).*(wrong|error|fail|bug|fix|debug|issue|problem)/i.test(question.prompt) ||\n /\\bwon't\\s+.*(work|run|compile|execute|display)/i.test(question.prompt) ||\n /\\bwill\\s+NOT\\s+.*(work|run|compile|execute|display)/i.test(question.prompt) ||\n /\\bwithout\\s+[\"']?(correct|right|known)\\s+(answer|label)/i.test(question.prompt)\n if (isDebuggingQuestion) return null\n\n const negativeOptions = question.options.filter(o =>\n negativePatterns.some(pattern => pattern.test(o.text))\n )\n\n if (negativeOptions.length > 0) {\n return {\n rule: 'DOUBLE_NEGATIVE',\n severity: SCORING_WEIGHTS.DOUBLE_NEGATIVE.severity,\n points: SCORING_WEIGHTS.DOUBLE_NEGATIVE.points,\n details: `Negative stem + negative option: ${negativeOptions.map(o => o.key).join(', ')}`,\n fix: 'Reframe question positively',\n }\n }\n return null\n}\n\n/**\n * Detect INCOMPLETE_STEM: Stem doesn't form a complete question\n *\n * Phase 8 - Incomplete stems are problematic because:\n * 1. Fill-in-the-blank format (ending with \":\") tests recognition, not understanding\n * 2. Very short stems may lack context\n * 3. Label-only stems don't ask a clear question\n */\nfunction detectIncompleteStem(question: Question): Violation | null {\n const stem = question.prompt.trim()\n\n // Skip code questions - they often use \":\" legitimately\n if (question.hasCodeBlock || /```/.test(stem)) return null\n\n // Pattern 1: Stem ends with colon (fill-in-the-blank format)\n // This is a major issue - it turns MCQ into recognition task\n // Exception: Common valid patterns that use colons contextually\n const validColonPatterns = [\n /what is the (output|result|value)/i,\n /select the (correct|best|most)/i,\n /choose the (correct|best|most)/i,\n /which (of the following|statement)/i,\n /complete the following/i,\n /fill in the blank/i,\n /consider the following/i,\n /given the following/i,\n ]\n const hasValidColonPattern = validColonPatterns.some(p => p.test(stem))\n\n if (stem.endsWith(':') && !stem.includes('?') && !hasValidColonPattern) {\n return {\n rule: 'INCOMPLETE_STEM',\n severity: SCORING_WEIGHTS.INCOMPLETE_STEM.severity,\n points: SCORING_WEIGHTS.INCOMPLETE_STEM.points,\n details: 'Stem ends with colon - this is a fill-in-the-blank format, not a complete question',\n fix: 'Rewrite as a complete question ending with \"?\" or a complete statement',\n }\n }\n\n // Pattern 2: Very short stems (less than 5 words, excluding code)\n const wordsOnly = stem.replace(/`[^`]+`/g, '').trim()\n const wordCount = wordsOnly.split(/\\s+/).filter(w => w.length > 0).length\n\n if (wordCount < 4 && !stem.includes('?')) {\n return {\n rule: 'INCOMPLETE_STEM',\n severity: SCORING_WEIGHTS.INCOMPLETE_STEM.severity,\n points: Math.round(SCORING_WEIGHTS.INCOMPLETE_STEM.points * 0.6), // Lower severity\n details: `Stem is very short (${wordCount} words) and may be incomplete`,\n fix: 'Add context to make the question clearer and more specific',\n }\n }\n\n return null\n}\n\n/**\n * Detect COVER_TEST: Correct answer can be identified from stem alone\n *\n * Phase 8 - The \"cover test\" checks if you could answer the question\n * without seeing the options. This happens when:\n * 1. Stem contains the answer verbatim\n * 2. Stem is so specific only one answer is possible\n * 3. Stem essentially states the answer\n */\nfunction detectCoverTest(question: Question): Violation | null {\n const correct = question.options.find(o => o.isCorrect)\n if (!correct) return null\n\n const stemLower = question.prompt.toLowerCase()\n const correctLower = correct.text.toLowerCase()\n\n // Skip very short answers (less than 10 chars) - too likely to be coincidental\n if (correctLower.length < 10) return null\n\n // Skip code answers - they might appear in code blocks legitimately\n if (/\\w+\\s*[=(]/.test(correct.text)) return null\n\n // Pattern 1: Correct answer appears verbatim in stem\n if (stemLower.includes(correctLower)) {\n return {\n rule: 'COVER_TEST',\n severity: SCORING_WEIGHTS.COVER_TEST.severity,\n points: SCORING_WEIGHTS.COVER_TEST.points,\n details: 'Correct answer appears verbatim in the question stem',\n fix: 'Rephrase the stem so it doesn\\'t give away the answer',\n }\n }\n\n // Pattern 2: Stem contains most keywords from correct answer\n const correctKeywords = extractKeywords(correct.text)\n const stemKeywords = new Set(extractKeywords(question.prompt))\n\n if (correctKeywords.length >= 3) {\n const matchCount = correctKeywords.filter(k => stemKeywords.has(k)).length\n const matchRatio = matchCount / correctKeywords.length\n\n if (matchRatio > 0.7) {\n return {\n rule: 'COVER_TEST',\n severity: SCORING_WEIGHTS.COVER_TEST.severity,\n points: Math.round(SCORING_WEIGHTS.COVER_TEST.points * 0.8),\n details: `Stem contains ${matchCount}/${correctKeywords.length} keywords from correct answer`,\n fix: 'Reduce overlap between stem and correct answer keywords',\n }\n }\n }\n\n return null\n}\n\n/**\n * Detect TERM_MISMATCH: Stem and correct answer use different terminology\n *\n * Phase 8 - When the stem uses one term but the correct answer uses a\n * synonym or different terminology, test-wise students can be confused\n * or unfairly penalized. Examples:\n * - Stem says \"function\" but answer says \"method\"\n * - Stem says \"array\" but answer says \"list\"\n */\nfunction detectTermMismatch(question: Question): Violation | null {\n // Common technical synonym pairs\n const synonymPairs: [string, string][] = [\n ['function', 'method'],\n ['array', 'list'],\n ['object', 'instance'],\n ['variable', 'parameter'],\n ['loop', 'iteration'],\n ['string', 'text'],\n ['integer', 'number'],\n ['boolean', 'bool'],\n ['null', 'none'],\n ['error', 'exception'],\n ['argument', 'parameter'],\n ['property', 'attribute'],\n ['class', 'type'],\n ['module', 'package'],\n ['callback', 'handler'],\n ]\n\n const correct = question.options.find(o => o.isCorrect)\n if (!correct) return null\n\n const stemLower = question.prompt.toLowerCase()\n const correctLower = correct.text.toLowerCase()\n\n for (const [term1, term2] of synonymPairs) {\n // Check if stem uses term1 but answer uses term2\n const stemHas1 = new RegExp(`\\\\b${term1}s?\\\\b`).test(stemLower)\n const stemHas2 = new RegExp(`\\\\b${term2}s?\\\\b`).test(stemLower)\n const answerHas1 = new RegExp(`\\\\b${term1}s?\\\\b`).test(correctLower)\n const answerHas2 = new RegExp(`\\\\b${term2}s?\\\\b`).test(correctLower)\n\n // Mismatch: stem uses one term, answer uses the other\n if ((stemHas1 && !stemHas2 && answerHas2 && !answerHas1) ||\n (stemHas2 && !stemHas1 && answerHas1 && !answerHas2)) {\n return {\n rule: 'TERM_MISMATCH',\n severity: SCORING_WEIGHTS.TERM_MISMATCH.severity,\n points: SCORING_WEIGHTS.TERM_MISMATCH.points,\n details: `Stem uses \"${stemHas1 ? term1 : term2}\" but correct answer uses \"${answerHas1 ? term1 : term2}\"`,\n fix: 'Use consistent terminology between stem and correct answer',\n }\n }\n }\n\n return null\n}\n\n/**\n * Domain-relevant technical vocabulary for CS/tech questions\n * A distractor containing ANY of these terms is considered plausible\n */\nconst DOMAIN_TERMS = new Set([\n // Programming fundamentals\n 'function', 'method', 'variable', 'parameter', 'argument', 'return', 'value',\n 'array', 'list', 'object', 'class', 'type', 'string', 'integer', 'boolean',\n 'loop', 'condition', 'statement', 'expression', 'operator', 'syntax',\n 'code', 'program', 'script', 'module', 'package', 'library', 'import',\n 'error', 'exception', 'debug', 'output', 'input', 'print', 'console',\n 'typescript', 'python', 'java', 'swift', 'kotlin', 'dart', 'flutter',\n 'compile', 'runtime', 'callback', 'async', 'await', 'promise', 'thread',\n\n // Web development\n 'html', 'css', 'javascript', 'react', 'component', 'element', 'tag',\n 'attribute', 'style', 'layout', 'responsive', 'browser', 'dom', 'api',\n 'server', 'client', 'request', 'response', 'endpoint', 'route', 'url',\n 'frontend', 'backend', 'database', 'query', 'fetch', 'webhook', 'rest',\n 'json', 'xml', 'http', 'https', 'ssl', 'tls', 'websocket', 'graphql',\n 'framework', 'svelte', 'vue', 'angular', 'node', 'express', 'next',\n\n // Mobile development\n 'mobile', 'native', 'app', 'screen', 'view', 'navigation', 'button',\n 'touch', 'gesture', 'handler', 'event', 'state', 'props', 'render',\n 'expo', 'android', 'ios', 'device', 'emulator', 'simulator', 'xcode',\n 'sdk', 'build', 'release', 'debug', 'performance', 'memory', 'battery',\n\n // AI/Data\n 'data', 'model', 'training', 'learning', 'algorithm', 'neural', 'network',\n 'prediction', 'classification', 'regression', 'accuracy', 'dataset',\n 'feature', 'label', 'tensor', 'layer', 'weights', 'bias', 'loss',\n 'pandas', 'numpy', 'matplotlib', 'sklearn', 'pytorch', 'tensorflow',\n 'csv', 'dataframe', 'plot', 'chart', 'graph', 'visualization', 'analysis',\n 'ai', 'ml', 'llm', 'gpt', 'chatgpt', 'gemini', 'claude', 'openai', 'anthropic',\n 'generative', 'prompt', 'token', 'embedding', 'vector', 'semantic', 'context',\n 'finetune', 'pretrain', 'transformer', 'attention', 'encoder', 'decoder',\n 'creative', 'creativity', 'generate', 'generation', 'output', 'response',\n 'hallucination', 'temperature', 'parameter', 'hyperparameter', 'epoch',\n\n // Design/UI\n 'design', 'color', 'font', 'image', 'icon', 'animation', 'transition',\n 'interface', 'user', 'interaction', 'wireframe', 'prototype', 'figma',\n 'pixel', 'margin', 'padding', 'border', 'shadow', 'gradient', 'opacity',\n 'flex', 'grid', 'container', 'wrapper', 'header', 'footer', 'sidebar',\n\n // General tech\n 'file', 'folder', 'directory', 'path', 'system', 'process', 'memory',\n 'storage', 'network', 'protocol', 'security', 'authentication', 'login',\n 'password', 'encryption', 'key', 'token', 'session', 'cookie', 'cache',\n 'git', 'commit', 'branch', 'merge', 'repository', 'version', 'deploy',\n 'cloud', 'aws', 'azure', 'docker', 'kubernetes', 'ci', 'cd', 'devops',\n 'test', 'unit', 'integration', 'mock', 'assert', 'spec', 'coverage',\n\n // Block-based\n 'block', 'sprite', 'scratch', 'edublocks', 'teachable', 'machine',\n\n // CS/Algorithms (for competitive programming)\n 'complexity', 'runtime', 'space', 'time', 'big', 'notation', 'optimal',\n 'recursive', 'iterative', 'divide', 'conquer', 'greedy', 'dynamic',\n 'dp', 'bfs', 'dfs', 'dijkstra', 'kruskal', 'prim', 'bellman', 'ford',\n 'tree', 'binary', 'heap', 'trie', 'segment', 'fenwick', 'sparse',\n 'edge', 'vertex', 'node', 'parent', 'child', 'leaf', 'root', 'depth',\n 'prime', 'factorial', 'modulo', 'gcd', 'lcm', 'fibonacci', 'combinatorics',\n 'permutation', 'combination', 'probability', 'expected', 'bitwise',\n 'sliding', 'window', 'prefix', 'suffix', 'subsequence', 'substring',\n\n // Common tech actions/concepts\n 'create', 'read', 'update', 'delete', 'crud', 'sort', 'filter', 'search',\n 'validate', 'parse', 'format', 'convert', 'transform', 'serialize',\n 'encrypt', 'decrypt', 'hash', 'encode', 'decode', 'compress', 'decompress',\n 'upload', 'download', 'sync', 'async', 'batch', 'stream', 'buffer',\n 'sql', 'nosql', 'mongodb', 'postgresql', 'mysql', 'redis', 'firebase',\n 'inline', 'external', 'internal', 'public', 'private', 'static', 'dynamic',\n 'load', 'save', 'store', 'cache', 'queue', 'stack', 'heap', 'pointer',\n 'local', 'remote', 'global', 'scope', 'closure', 'context', 'binding',\n 'resolution', 'quality', 'optimize', 'performance', 'latency', 'bandwidth',\n 'task', 'todo', 'item', 'entry', 'record', 'row', 'column', 'field',\n 'count', 'total', 'sum', 'average', 'max', 'min', 'range', 'index',\n 'camera', 'photo', 'video', 'audio', 'media', 'player', 'recorder',\n 'sensor', 'gps', 'location', 'map', 'marker', 'coordinate', 'distance',\n 'feedback', 'notification', 'alert', 'modal', 'popup', 'toast', 'snackbar',\n 'scroll', 'swipe', 'tap', 'press', 'hold', 'drag', 'drop', 'pinch', 'zoom',\n 'hook', 'ref', 'memo', 'effect', 'reducer', 'dispatch', 'provider', 'context',\n\n // Business/Analytics (Phase 8.3 - reduce false positives)\n 'customer', 'revenue', 'sales', 'profit', 'budget', 'marketing', 'campaign',\n 'business', 'company', 'organization', 'team', 'manager', 'employee', 'staff',\n\n // Medical/Healthcare (for AI/data science questions)\n 'clinical', 'physician', 'patient', 'hospital', 'healthcare', 'medical', 'diagnosis',\n 'treatment', 'symptom', 'disease', 'health', 'doctor', 'nurse', 'prescription',\n\n // NLP/Text processing\n 'sentence', 'paragraph', 'word', 'readability', 'grammar', 'spelling', 'vocabulary',\n 'text', 'document', 'corpus', 'tokenize', 'nlp', 'language', 'translation',\n\n // Math/Statistics\n 'formula', 'equation', 'mathematical', 'statistical', 'calculation', 'percentage',\n 'probability', 'distribution', 'variance', 'deviation', 'correlation', 'median',\n\n // Logic/Rules/Decision\n 'rule', 'logic', 'decision', 'policy', 'criteria', 'requirement', 'constraint',\n 'condition', 'threshold', 'limit', 'boundary', 'specification', 'guideline',\n\n // Education (for educational tech questions)\n 'student', 'teacher', 'course', 'lesson', 'grade', 'assignment', 'curriculum',\n 'learning', 'education', 'school', 'classroom', 'instruction', 'assessment',\n])\n\n/**\n * Check if text contains any domain-relevant technical terms\n * Uses stemming-like logic to handle plurals and word forms\n * (e.g., \"styles\" matches \"style\", \"components\" matches \"component\")\n */\nfunction containsDomainTerms(text: string): boolean {\n const words = text.toLowerCase().replace(/[^a-z0-9\\s]/g, '').split(/\\s+/)\n\n for (const word of words) {\n // Exact match\n if (DOMAIN_TERMS.has(word)) return true\n\n // Handle plurals: try removing 's' first, then 'es'\n if (word.endsWith('s') && word.length > 3) {\n // Try removing just 's' first (images → image, styles → style)\n const withoutS = word.slice(0, -1)\n if (DOMAIN_TERMS.has(withoutS)) return true\n\n // Try removing 'es' (classes → class, boxes → box)\n if (word.endsWith('es') && word.length > 4) {\n const withoutEs = word.slice(0, -2)\n if (DOMAIN_TERMS.has(withoutEs)) return true\n }\n\n // Handle 'ies' → 'y' (queries → query)\n if (word.endsWith('ies') && word.length > 4) {\n const withY = word.slice(0, -3) + 'y'\n if (DOMAIN_TERMS.has(withY)) return true\n }\n }\n\n // Handle -ing forms: \"coding\" → \"code\", \"loading\" → \"load\"\n if (word.endsWith('ing') && word.length > 5) {\n const root = word.slice(0, -3)\n if (DOMAIN_TERMS.has(root)) return true\n // Handle \"coding\" → \"code\" (add 'e')\n if (DOMAIN_TERMS.has(root + 'e')) return true\n // Handle \"running\" → \"run\" (remove doubled consonant)\n if (root.length > 2 && root[root.length - 1] === root[root.length - 2]) {\n if (DOMAIN_TERMS.has(root.slice(0, -1))) return true\n }\n }\n\n // Handle -ed forms: \"styled\" → \"style\", \"loaded\" → \"load\"\n if (word.endsWith('ed') && word.length > 4) {\n const root = word.slice(0, -2)\n if (DOMAIN_TERMS.has(root)) return true\n // Handle \"styled\" → \"style\" (remove 'd', keep 'e')\n if (word.endsWith('ed') && DOMAIN_TERMS.has(root + 'e')) return true\n const withoutD = word.slice(0, -1) // \"styled\" → \"style\"\n if (DOMAIN_TERMS.has(withoutD)) return true\n }\n\n // Handle -ly forms: \"remotely\" → \"remote\"\n if (word.endsWith('ly') && word.length > 4) {\n const root = word.slice(0, -2)\n if (DOMAIN_TERMS.has(root)) return true\n }\n }\n\n return false\n}\n\n/**\n * Detect IMPLAUSIBLE: Distractors that are obviously wrong without domain knowledge\n *\n * Phase 8.2 - DOMAIN-TERM APPROACH (target 5-10% detection rate)\n *\n * Key insight: Plausible distractors use DIFFERENT vocabulary than the stem\n * (they represent alternative concepts). Keyword overlap fails because it\n * flags any distractor that uses different words.\n *\n * NEW Detection strategy:\n * 1. Check if distractor contains ANY domain-relevant technical terms\n * 2. Only flag if distractor has ZERO technical terms (truly unrelated)\n * 3. Require distractor to be long enough to assess (5+ words)\n *\n * This catches truly implausible distractors like \"The weather is nice\"\n * while allowing valid ones like \"Backend database system for mobile apps\"\n */\nfunction detectImplausible(question: Question): Violation | null {\n const distractors = question.options.filter(o => !o.isCorrect)\n\n if (distractors.length < 2) return null\n\n // Check each distractor for domain relevance\n const implausibleDistractors: string[] = []\n\n for (const d of distractors) {\n const words = d.text.toLowerCase().replace(/[^a-z0-9\\s]/g, '').split(/\\s+/)\n const meaningfulWords = words.filter(w => w.length > 2)\n\n // Require at least 7 meaningful words to assess (skip short options)\n // This makes the detector conservative - only flagging longer distractors\n if (meaningfulWords.length < 7) continue\n\n // Check if distractor contains ANY domain-relevant technical terms\n // If it does, it's plausible (represents an alternative concept)\n if (!containsDomainTerms(d.text)) {\n implausibleDistractors.push(d.key)\n }\n }\n\n // Only flag if we found implausible distractors\n if (implausibleDistractors.length > 0) {\n return {\n rule: 'IMPLAUSIBLE',\n severity: SCORING_WEIGHTS.IMPLAUSIBLE.severity,\n points: SCORING_WEIGHTS.IMPLAUSIBLE.points,\n details: `Distractor(s) ${implausibleDistractors.join(', ')} contain no domain-relevant technical terms`,\n fix: 'Replace with plausible distractors that use technical vocabulary and represent common misconceptions',\n }\n }\n\n return null\n}\n\n/**\n * Detect NON_HOMOGENEOUS: Options have inconsistent structure\n */\nfunction detectNonHomogeneous(question: Question): Violation | null {\n // Check if options start with same part of speech pattern\n const startsWithVerb = question.options.map(o =>\n /^(is|are|to|can|will|does|has|have|should|must|may|would)/i.test(o.text.trim())\n )\n const startsWithNoun = question.options.map(o =>\n /^(a|an|the|[A-Z])/i.test(o.text.trim())\n )\n\n const verbCount = startsWithVerb.filter(Boolean).length\n const nounCount = startsWithNoun.filter(Boolean).length\n\n // If there's a mix, flag it\n if (verbCount > 0 && nounCount > 0 && (verbCount !== question.options.length && nounCount !== question.options.length)) {\n return {\n rule: 'NON_HOMOGENEOUS',\n severity: SCORING_WEIGHTS.NON_HOMOGENEOUS.severity,\n points: SCORING_WEIGHTS.NON_HOMOGENEOUS.points,\n details: 'Options have inconsistent grammatical structure',\n fix: 'Make all options start with same part of speech',\n }\n }\n return null\n}\n\n// =========================================================================\n// CS-SPECIFIC DETECTORS (Phase 2 - Deep Research Integration)\n// =========================================================================\n\n/**\n * Detect HORIZONTAL_CODE: Code options displayed horizontally instead of vertically\n *\n * Research shows vertical code formatting is EXISTENTIAL for CS questions.\n * Horizontal code (A) x=5 B) x=\"5\" C) x=5.0 hides syntax differences.\n */\nfunction detectHorizontalCode(question: Question): Violation | null {\n const allText = question.prompt + ' ' + question.options.map(o => o.text).join(' ')\n\n // Math context detection: Skip this check for pure math questions\n // Math notation like \"y = mx + c\", \"f(x) = x²\", \"x = 3\" should not be flagged as code\n const mathContextPatterns = [\n /\\b(solve|find|calculate|compute|evaluate|simplify|differentiate|integrate)\\b/i,\n /\\b(equation|expression|function|polynomial|quadratic|linear)\\b/i,\n /\\b(coordinate|graph|plot|axis|origin|intersection)\\b/i,\n /\\b(angle|triangle|circle|radius|diameter|perimeter|area|volume)\\b/i,\n /\\b(matrix|vector|determinant|magnitude)\\b/i,\n /\\b(derivative|integral|limit|logarithm|exponent)\\b/i,\n /[²³⁴⁵⁶⁷⁸⁹⁰¹]/, // Superscript numbers (math notation)\n /[₀₁₂₃₄₅₆₇₈₉]/, // Subscript numbers\n /[×÷±√∑∏∫∂∞≤≥≠≈∝∈∉∀∃]/, // Math symbols\n /\\^\\d+\\b/, // Power notation: x^2\n /\\b(time|space)\\s+complexity\\b/i, // CS complexity questions\n /\\bO\\([^)]+\\)/, // Big-O notation: O(n), O(log n), O(n²)\n /\\bΘ\\([^)]+\\)/, // Big-Theta notation\n /\\bΩ\\([^)]+\\)/, // Big-Omega notation\n ]\n const isMathContext = mathContextPatterns.some(p => p.test(allText))\n\n // Skip horizontal code check for math contexts\n if (isMathContext) return null\n\n // Check if any option contains code-like patterns\n // More strict patterns to avoid false positives on natural language\n const codePatterns = [\n /\\w+\\s*=\\s*[\\w\"'`\\[\\]{}\\d.]+/, // Assignment: x = 5, name = \"test\"\n /\\w+\\([^)]*\\)/, // Function call: print(), len()\n /^(if|for|while|def|function|return)\\b/i, // Keywords at START of option\n /\\w+\\s*[<>=!]+\\s*\\w+/, // Comparison with identifiers: x > y, a == b\n ]\n\n // Filter: option must START with code-like pattern OR be very short\n // This excludes prose like \"If the score is greater than 50\"\n const codeOptions = question.options.filter(o => {\n const text = o.text.trim()\n // Exclude natural language (starts with \"If the\", \"When the\", etc.)\n if (/^(if|when|what|how|why|the|a|an)\\s+\\w+\\s+\\w+/i.test(text)) return false\n return codePatterns.some(p => p.test(text))\n })\n\n if (codeOptions.length < 2) return null // Not enough code options\n\n // Check if code options are short and could be displayed horizontally\n // Horizontal display typically means options are on same visual line\n const shortCodeOptions = codeOptions.filter(o => o.text.length < 30 && !o.text.includes('\\n'))\n\n // Skip if options are simple method name choices (legitimate MCQ format)\n // Examples: \"append()\", \"insert()\", \"math.sqrt(number)\", \"pop() or remove()\"\n // \"peek() or front()\", \"pop() or remove from end\"\n // These are valid MCQ options asking which method to use, not horizontal display issues\n const simpleMethodPattern = /^`?[\\w.]+\\([^)]*\\)`?(\\s+or\\s+[\\w.]+\\([^)]*\\))?(\\s+\\w+)*$/\n const allSimpleMethods = codeOptions.every(o => simpleMethodPattern.test(o.text.trim()))\n if (allSimpleMethods) return null\n\n // If most code options are short single-line snippets, flag as potential horizontal layout\n if (shortCodeOptions.length >= 3 && !question.options.some(o => o.text.includes('\\n'))) {\n // Additional check: look for multi-space separators that suggest inline display\n const allOptionsText = question.options.map(o => o.text).join(' ')\n const hasInlinePattern = /\\)\\s{2,}[A-D]\\)|=\\s*\\d+\\s{2,}[A-D]\\)/i.test(allOptionsText)\n\n if (hasInlinePattern || (codeOptions.length >= 3 && shortCodeOptions.length >= 3)) {\n return {\n rule: 'HORIZONTAL_CODE',\n severity: SCORING_WEIGHTS.HORIZONTAL_CODE.severity,\n points: SCORING_WEIGHTS.HORIZONTAL_CODE.points,\n details: 'Code options appear to be displayed horizontally. Each code snippet should be on its own line.',\n fix: 'Display each code option vertically with proper formatting and indentation',\n }\n }\n }\n return null\n}\n\n/**\n * Detect CODE_LENGTH_BIAS: Code option lengths vary significantly (correct is longest)\n *\n * Similar to LENGTH_BIAS but specifically for code content, measuring\n * character count of code rather than prose.\n */\nfunction detectCodeLengthBias(question: Question): Violation | null {\n // Check for explicit code blocks first\n if (!question.hasCodeBlock && !question.options.some(o => /\\w+\\s*[=(]/.test(o.text))) {\n return null // Not a code question\n }\n\n // Math context detection: Skip for math questions\n // Math expressions like \"f(x) = x²\" or \"y = mx + c\" are not code\n const allText = question.prompt + ' ' + question.options.map(o => o.text).join(' ')\n const mathContextPatterns = [\n /\\b(solve|find|calculate|compute|evaluate|simplify)\\b/i,\n /\\b(equation|expression|polynomial|quadratic|linear)\\b/i,\n /\\b(coordinate|graph|axis|angle|triangle|circle)\\b/i,\n /\\b(matrix|vector|determinant|derivative|integral)\\b/i,\n /[²³⁴⁵⁶⁷⁸⁹⁰¹₀₁₂₃₄₅₆₇₈₉]/, // Super/subscript numbers\n /[×÷±√∑∏∫∂∞≤≥≠≈∝]/, // Math symbols\n /\\^\\d+\\b/, // Power notation: x^2\n ]\n const isMathContext = mathContextPatterns.some(p => p.test(allText))\n\n // Skip code length bias check for math contexts\n if (isMathContext) return null\n\n // Extract code-like content from each option\n const codeLengths = question.options.map(o => {\n // Remove whitespace for fairer comparison\n const codeOnly = o.text.replace(/\\s+/g, '')\n return { key: o.key, length: codeOnly.length, isCorrect: o.isCorrect }\n })\n\n const avgLength = codeLengths.reduce((sum, o) => sum + o.length, 0) / codeLengths.length\n const correctOption = codeLengths.find(o => o.isCorrect)\n\n if (!correctOption || avgLength === 0) return null\n\n const ratio = correctOption.length / avgLength\n\n if (ratio > 1.3) { // More sensitive for code (30% vs 20% for prose)\n return {\n rule: 'CODE_LENGTH_BIAS',\n severity: SCORING_WEIGHTS.CODE_LENGTH_BIAS.severity,\n points: SCORING_WEIGHTS.CODE_LENGTH_BIAS.points,\n details: `Correct code option is ${Math.round(ratio * 100)}% of average length (${correctOption.length} vs avg ${Math.round(avgLength)})`,\n fix: 'Equalize code option lengths - add equivalent complexity to distractors',\n }\n }\n return null\n}\n\n/**\n * Detect CONFUSING_VARIABLES: Generic variables (var1, var2, x, y) in non-teaching context\n *\n * Research shows meaningful variable names (playerScore, userName) improve\n * comprehension and reduce cognitive load. Generic names (x, var1) are\n * only acceptable when teaching about variables themselves.\n */\nfunction detectConfusingVariables(question: Question): Violation | null {\n const confusingPatterns = [\n /\\bvar[0-9]\\b/gi, // var1, var2, var3\n /\\bnum[0-9]\\b/gi, // num1, num2\n /\\bstr[0-9]\\b/gi, // str1, str2\n /\\blist[0-9]\\b/gi, // list1, list2\n /\\barr[0-9]\\b/gi, // arr1, arr2\n ]\n\n // Single-letter variables (except common loop counters i, j, k, n)\n // Matches: a-h, l, o-z (excluding i, j, k, m, n which are common in loops and math)\n const singleLetterVars = /(?<![a-zA-Z])[a-hlopqrstuvwxyzABCDEFGHLOPQRSTUVWXYZ](?![a-zA-Z])\\s*=/g\n\n const allText = question.prompt + ' ' + question.options.map(o => o.text).join(' ')\n\n // Math context detection: Skip single-letter check for mathematical notation\n // Includes: vectors, algebra, geometry, calculus - where single-letter vars are standard\n const mathContextPatterns = [\n // Vector notation\n /\\d+[ijk]\\s*[+\\-]/i, // \"3i + \", \"2j - \" (vector components)\n /[+\\-]\\s*\\d*[ijk]\\b/i, // \"+ 2k\", \"- j\" (vector components)\n /[ijk]\\s*[+\\-]\\s*[ijk]/i, // \"i + j\", \"j - k\" (unit vectors)\n /[→⃗]\\s*[a-z]/i, // \"→v\", \"⃗a\" (vector arrow notation)\n /\\|[a-z]\\|/i, // \"|v|\" (magnitude notation)\n\n // Algebra and substitution (common in Malaysian math curriculum)\n /\\b(if|given|when|substitute|let)\\s+[a-z]\\s*=/i, // \"if x = 2\", \"given that y = 3\"\n /\\bfind\\s+the\\s+value\\s+of\\b/i, // \"find the value of 5x + 6\"\n /\\bevaluate\\b/i, // \"evaluate the expression\"\n /\\bsolve\\s+for\\s+[a-z]\\b/i, // \"solve for x\"\n /\\d+[a-z]\\s*[+\\-×÷*/]/i, // \"5x + \", \"3y - \" (algebraic terms)\n /[+\\-]\\s*\\d*[a-z]\\b/i, // \"+ 2x\", \"- y\" (algebraic terms)\n\n // Geometry\n /∠[A-Z]{2,3}/, // \"∠ABC\" (angle notation)\n /\\b(triangle|circle|square|rectangle|polygon)\\s+[A-Z]{3,}/i, // \"triangle ABC\"\n /\\bpoint\\s+[A-Z]\\b/i, // \"point A\", \"point P\"\n /\\bline\\s+[A-Z]{2}\\b/i, // \"line AB\", \"line PQ\"\n\n // Functions and calculus\n /[fg]\\s*\\(\\s*[a-z]\\s*\\)/i, // \"f(x)\", \"g(t)\"\n /\\b(derivative|integral|limit|gradient)\\b/i,\n /d[a-z]\\/d[a-z]/i, // \"dy/dx\" (derivative notation)\n\n // Physics/Math keywords that imply mathematical context\n /\\b(vector|magnitude|direction|unit\\s*vector|position\\s*vector)\\b/i,\n /\\b(velocity|acceleration|force|displacement|momentum)\\b/i,\n /\\b(equation|expression|formula|polynomial|quadratic|linear)\\b/i,\n /\\b(perimeter|area|volume|radius|diameter|circumference)\\b/i,\n\n // Math symbols\n /[²³⁴⁵⁶⁷⁸⁹⁰¹₀₁₂₃₄₅₆₇₈₉]/, // Super/subscript numbers\n /[×÷±√∑∏∫∂∞≤≥≠≈∝∈∉∀∃]/, // Math symbols\n /\\^\\d+\\b/, // Power notation: x^2\n ]\n const isMathContext = mathContextPatterns.some(p => p.test(allText))\n\n // Check for numbered variables\n const numberedVars = confusingPatterns.some(p => p.test(allText))\n\n // Check for single-letter variables (excluding i, j, k, n which are common in loops)\n // Skip this check in math contexts where single-letter variables are standard notation\n const singleLetterMatches = allText.match(singleLetterVars) || []\n const hasSingleLetter = !isMathContext && singleLetterMatches.length >= 2\n\n if (numberedVars || hasSingleLetter) {\n const examples = allText.match(/\\b(var[0-9]|num[0-9]|[a-hlo-z]\\s*=)/gi)?.slice(0, 3).join(', ') || ''\n return {\n rule: 'CONFUSING_VARIABLES',\n severity: SCORING_WEIGHTS.CONFUSING_VARIABLES.severity,\n points: SCORING_WEIGHTS.CONFUSING_VARIABLES.points,\n details: `Question uses generic variable names: ${examples}. Use meaningful names instead.`,\n fix: 'Replace generic variables with meaningful names (score, playerName, totalPrice)',\n }\n }\n return null\n}\n\n/**\n * Detect WINDOW_DRESSING: Excessive irrelevant context in question stem\n *\n * Research identifies \"window dressing\" as adding irrelevant details that:\n * 1. Increase cognitive load without testing knowledge\n * 2. May confuse or mislead students\n * 3. Make questions longer without adding value\n */\nfunction detectWindowDressing(question: Question): Violation | null {\n const prompt = question.prompt\n\n // Common window dressing patterns\n const dressingPatterns = [\n /\\b(John|Jane|Bob|Alice|Sarah|Mike|Tom|Emma)\\b.*?\\b(is a|works at|opened|started|went to)\\b/i,\n /\\bon a (rainy|sunny|cold|busy|quiet) (day|morning|afternoon|evening)/i,\n /\\bat a (Fortune 500|tech|startup|software) company/i,\n /\\b(In San Francisco|In New York|In Seattle|At Google|At Facebook)/i,\n /\\b(Last week|Yesterday|This morning|After lunch)/i,\n ]\n\n // Count narrative vs. technical content\n const narrativeIndicators = dressingPatterns.filter(p => p.test(prompt)).length\n\n // Check ratio of prompt length to actual technical question\n const codeMatch = prompt.match(/```[\\s\\S]*?```|`[^`]+`|^\\s*\\w+\\s*[=(].*$/gm)\n const codeLength = codeMatch?.join('').length || 0\n const proseLength = prompt.length - codeLength\n\n // If more than 60% is prose and we have narrative patterns, flag it\n if (proseLength > 200 && narrativeIndicators >= 2) {\n return {\n rule: 'WINDOW_DRESSING',\n severity: SCORING_WEIGHTS.WINDOW_DRESSING.severity,\n points: SCORING_WEIGHTS.WINDOW_DRESSING.points,\n details: `Excessive narrative context detected (${narrativeIndicators} patterns). Focus on the technical question.`,\n fix: 'Remove irrelevant narrative details. Keep only context necessary for the question.',\n }\n }\n\n // Also flag very long prompts with little code\n if (proseLength > 300 && codeLength < 50 && prompt.includes('?')) {\n const questionStart = prompt.lastIndexOf('?')\n const prefixLength = questionStart > 0 ? questionStart : prompt.length\n if (prefixLength > 200) {\n return {\n rule: 'WINDOW_DRESSING',\n severity: SCORING_WEIGHTS.WINDOW_DRESSING.severity,\n points: Math.round(SCORING_WEIGHTS.WINDOW_DRESSING.points * 0.7), // Lower score for length-only\n details: `Long stem with excessive context (${prefixLength} chars before question mark)`,\n fix: 'Trim unnecessary context. Get to the technical question faster.',\n }\n }\n }\n return null\n}\n\n/**\n * Detect TYPE_K_FORMAT: Combined options (A and C, I only, etc.)\n *\n * Type K items (complex multiple choice with combinations) are problematic:\n * 1. Students can partially eliminate by recognizing patterns\n * 2. They test logical reasoning about options, not content knowledge\n * 3. Research shows they have lower discrimination indices\n */\nfunction detectTypeKFormat(question: Question): Violation | null {\n const typeKPatterns = [\n /\\b(I|II|III|IV)\\s+(and|or)\\s+(I|II|III|IV)\\b/i, // I and II, II or III\n /\\b(I|II|III|IV)\\s+only\\b/i, // I only, II only\n /\\b(A|B|C|D)\\s+and\\s+(A|B|C|D)\\b/i, // A and B, B and C\n /\\bboth\\s+(A|B|C|D)\\s+and\\s+(A|B|C|D)\\b/i, // Both A and B\n /\\bneither\\s+(A|B|C|D)\\s+nor\\s+(A|B|C|D)\\b/i, // Neither A nor B\n /\\b(options?|choices?)\\s+(A|B|C|D)\\s+and\\s+(A|B|C|D)\\b/i, // Options A and C\n ]\n\n const flaggedOptions = question.options.filter(o =>\n typeKPatterns.some(p => p.test(o.text))\n )\n\n if (flaggedOptions.length > 0) {\n return {\n rule: 'TYPE_K_FORMAT',\n severity: SCORING_WEIGHTS.TYPE_K_FORMAT.severity,\n points: SCORING_WEIGHTS.TYPE_K_FORMAT.points,\n details: `Type K format detected in options: ${flaggedOptions.map(o => o.key).join(', ')}. These combined options enable pattern-based guessing.`,\n fix: 'Replace combined options with independent, parallel options that each stand alone',\n }\n }\n return null\n}\n\n/**\n * Detect TYPE_MIXING: Options mix incompatible types (int + exception + null)\n *\n * When options mix different types (number, string, null, exception),\n * students can often eliminate based on type alone without understanding\n * the underlying concept.\n */\nfunction detectTypeMixing(question: Question): Violation | null {\n // Skip if options have misconceptionId - type mixing is intentional for pedagogy\n // Example: split() returning count vs list vs character array are valid misconceptions\n const hasMisconceptionIds = question.options.some((o: any) => o.misconceptionId)\n if (hasMisconceptionIds) return null\n\n // Patterns for different types\n const typePatterns = {\n number: /^-?\\d+(\\.\\d+)?$|^\\d+\\.\\d+$/,\n string: /^[\"'].*[\"']$|^['\"].*['\"]$/,\n boolean: /^(true|false|True|False|TRUE|FALSE)$/,\n none: /^(None|null|nil|undefined|NaN)$/i,\n error: /^(Error|Exception|TypeError|ValueError|KeyError)/i,\n list: /^\\[.*\\]$/,\n dict: /^\\{.*\\}$/,\n }\n\n const optionTypes = question.options.map(o => {\n const text = o.text.trim()\n for (const [typeName, pattern] of Object.entries(typePatterns)) {\n if (pattern.test(text)) return typeName\n }\n return 'other'\n })\n\n // Count unique types (excluding 'other')\n const uniqueTypes = new Set(optionTypes.filter(t => t !== 'other'))\n\n // If we have 3+ different value types, that's suspicious\n // But only flag if this isn't a code trace question with type-based misconceptions\n if (uniqueTypes.size >= 3) {\n return {\n rule: 'TYPE_MIXING',\n severity: SCORING_WEIGHTS.TYPE_MIXING.severity,\n points: SCORING_WEIGHTS.TYPE_MIXING.points,\n details: `Options mix ${uniqueTypes.size} different types: ${[...uniqueTypes].join(', ')}`,\n fix: 'Use options of the same type. Students should distinguish by value, not type.',\n }\n }\n return null\n}\n\n/**\n * Detect SYNTAX_ERROR_DISTRACTOR: Syntax error in distractor when testing logic\n *\n * If a question is testing logic/reasoning (not syntax), distractors should\n * not contain syntax errors. Students can eliminate syntactically invalid\n * code without understanding the logic being tested.\n */\nfunction detectSyntaxErrorDistractor(question: Question): Violation | null {\n // Only applies to code questions\n const hasCode = question.hasCodeBlock ||\n question.options.some(o => /\\w+\\s*[=(]/.test(o.text))\n\n if (!hasCode) return null\n\n // Check if question is about syntax (if so, syntax errors are expected)\n const syntaxKeywords = /\\bsyntax\\b|\\bvalid\\b|\\bcompile\\b|\\bparse\\b|\\berror\\b|\\bcorrect code\\b/i\n if (syntaxKeywords.test(question.prompt)) return null\n\n // Common syntax errors to detect\n // Note: Most patterns removed due to high false positive rates in MCQ options\n // which often mix code with natural language explanations\n const syntaxErrors = [\n /\\bpirnt\\b|\\bprnit\\b/, // Typos in print\n /\\bfro\\b|\\bwhlie\\b|\\biff\\b/, // Typos in keywords\n /\\(\\s*,/, // Comma after open paren (e.g., \"(,)\")\n /,\\s*\\)/, // Comma before close paren (e.g., \"(x,)\")\n // REMOVED patterns that caused too many false positives:\n // - Empty parentheses () - valid in arrow functions, method calls\n // - Empty brackets [] - valid in Python output, list initialization\n // - def/if/for without colon - matches natural language \"for best results\"\n // - Assignment without value - often truncated in display\n ]\n\n const distractors = question.options.filter(o => !o.isCorrect)\n const flagged = distractors.filter(d =>\n syntaxErrors.some(err => err.test(d.text))\n )\n\n if (flagged.length > 0) {\n return {\n rule: 'SYNTAX_ERROR_DISTRACTOR',\n severity: SCORING_WEIGHTS.SYNTAX_ERROR_DISTRACTOR.severity,\n points: SCORING_WEIGHTS.SYNTAX_ERROR_DISTRACTOR.points,\n details: `Distractor(s) ${flagged.map(o => o.key).join(', ')} contain syntax errors. If testing logic, all options should be syntactically valid.`,\n fix: 'Fix syntax in distractors - they should differ in logic/output, not syntax',\n }\n }\n return null\n}\n\n// =========================================================================\n// MAIN ANALYZER\n// =========================================================================\n\n/**\n * Calculate guessability score for a single question\n */\nexport function analyzeQuestion(question: Question, options?: AnalyzerOptions): GuessabilityReport {\n const violations: Violation[] = []\n const csMode = options?.csMode ?? false\n\n // General MCQ detectors (always run)\n const generalDetectors = [\n detectLengthBias,\n detectStemEcho,\n detectAbsoluteTerms,\n detectGrammarCue, // Phase 6 - NLP-based grammar completion detection\n detectConvergence, // Phase 7 - TF-IDF semantic similarity detection\n detectIncompleteStem, // Phase 8 - Fill-in-blank and short stem detection\n detectCoverTest, // Phase 8 - Stem gives away answer detection\n detectTermMismatch, // Phase 8 - Synonym inconsistency detection\n detectImplausible, // Phase 8 - Unrelated distractor detection\n detectAllNoneAbove,\n detectNegativeStem,\n detectNumericDisorder,\n detectDoubleNegative,\n detectNonHomogeneous,\n ]\n\n // CS-specific detectors (Phase 2 - from deep research)\n const csDetectors = [\n detectHorizontalCode,\n detectCodeLengthBias,\n detectConfusingVariables,\n detectWindowDressing,\n detectTypeKFormat,\n detectTypeMixing,\n detectSyntaxErrorDistractor,\n ]\n\n // Run general detectors\n for (const detector of generalDetectors) {\n const violation = detector(question)\n if (violation) {\n violations.push(violation)\n }\n }\n\n // Run CS-specific detectors (always run, but csMode increases weight)\n for (const detector of csDetectors) {\n const violation = detector(question)\n if (violation) {\n // In CS mode, CS-specific violations are weighted higher\n if (csMode) {\n violation.points = Math.round(violation.points * 1.2)\n }\n violations.push(violation)\n }\n }\n\n // Sum points, cap at 100\n const rawScore = violations.reduce((sum, v) => sum + v.points, 0)\n const score = Math.min(rawScore, 100)\n\n // Assign grade\n const gradeEntry = GRADE_THRESHOLDS.find(t => score <= t.maxScore)\n const grade: GuessabilityGrade = gradeEntry?.grade ?? 'F'\n\n // Generate recommendations\n const recommendations = violations\n .sort((a, b) => b.points - a.points)\n .slice(0, 3)\n .map(v => v.fix)\n\n return {\n questionId: question.questionId,\n score,\n grade,\n violations,\n recommendations,\n }\n}\n\n/**\n * Analyze position distribution across a question set\n */\nexport function analyzePositionPattern(questions: Question[]): Violation | null {\n const positions: Record<string, number> = { A: 0, B: 0, C: 0, D: 0 }\n\n for (const q of questions) {\n const correct = q.options.find(o => o.isCorrect)\n if (correct && correct.key in positions) {\n positions[correct.key] = (positions[correct.key] ?? 0) + 1\n }\n }\n\n const n = questions.length\n if (n < 4) return null // Need minimum questions for meaningful analysis\n\n const expected = n / 4\n\n // Chi-square test\n const chiSquare = Object.values(positions)\n .map(observed => Math.pow(observed - expected, 2) / expected)\n .reduce((a, b) => a + b)\n\n // Critical value for df=3, α=0.05 is 7.815\n if (chiSquare > 7.815) {\n const dist = Object.entries(positions)\n .map(([k, v]) => `${k}:${Math.round((v / n) * 100)}%`)\n .join(', ')\n return {\n rule: 'POSITION_PATTERN',\n severity: SCORING_WEIGHTS.POSITION_PATTERN.severity,\n points: SCORING_WEIGHTS.POSITION_PATTERN.points,\n details: `Position distribution unbalanced: ${dist} (χ²=${chiSquare.toFixed(2)})`,\n fix: 'Redistribute correct answers to achieve ~25% per position',\n }\n }\n return null\n}\n\n/**\n * Generate course summary from individual reports\n */\nexport function generateCourseSummary(\n courseId: string,\n reports: GuessabilityReport[]\n): GuessabilityCourseSummary {\n const scores = reports.map(r => r.score)\n const averageScore = scores.reduce((a, b) => a + b, 0) / scores.length\n\n // Grade distribution\n const gradeDistribution: Record<GuessabilityGrade, number> = {\n A: 0, B: 0, C: 0, D: 0, F: 0,\n }\n for (const r of reports) {\n gradeDistribution[r.grade]++\n }\n\n // Convert to percentages\n const total = reports.length\n const gradePercentages: Record<GuessabilityGrade, number> = {\n A: Math.round((gradeDistribution.A / total) * 100),\n B: Math.round((gradeDistribution.B / total) * 100),\n C: Math.round((gradeDistribution.C / total) * 100),\n D: Math.round((gradeDistribution.D / total) * 100),\n F: Math.round((gradeDistribution.F / total) * 100),\n }\n\n // Top violations\n const violationCounts: Record<string, number> = {}\n for (const r of reports) {\n for (const v of r.violations) {\n violationCounts[v.rule] = (violationCounts[v.rule] || 0) + 1\n }\n }\n const topViolations = Object.entries(violationCounts)\n .sort(([, a], [, b]) => b - a)\n .slice(0, 5)\n .map(([rule, count]) => ({ rule: rule as ViolationRule, count }))\n\n // Worst questions\n const worstQuestions = reports\n .filter(r => r.grade === 'D' || r.grade === 'F')\n .sort((a, b) => b.score - a.score)\n .slice(0, 10)\n .map(r => ({\n questionId: r.questionId,\n score: r.score,\n grade: r.grade,\n }))\n\n // Average grade\n const avgGradeEntry = GRADE_THRESHOLDS.find(t => averageScore <= t.maxScore)\n const averageGrade: GuessabilityGrade = avgGradeEntry?.grade ?? 'F'\n\n return {\n courseId,\n questionCount: reports.length,\n averageScore: Math.round(averageScore * 10) / 10,\n averageGrade,\n gradeDistribution: gradePercentages,\n topViolations,\n worstQuestions,\n }\n}\n\n/**\n * Get score color for terminal output\n */\nexport function getScoreColor(score: number): string {\n if (score <= 15) return '\\x1b[32m' // green\n if (score <= 30) return '\\x1b[33m' // yellow\n if (score <= 45) return '\\x1b[33m' // yellow\n return '\\x1b[31m' // red\n}\n\n/**\n * Get grade color for terminal output\n */\nexport function getGradeColor(grade: GuessabilityGrade): string {\n switch (grade) {\n case 'A': return '\\x1b[32m' // green\n case 'B': return '\\x1b[32m' // green\n case 'C': return '\\x1b[33m' // yellow\n case 'D': return '\\x1b[31m' // red\n case 'F': return '\\x1b[31m' // red\n }\n}\n","/**\n * @telebort/question-banks - Question Banks SDK\n *\n * Three-tier access to question bank data and assessments:\n *\n * ## Free Tier - Schemas\n * ```typescript\n * import { QuestionSchema } from '@telebort/question-banks/schemas'\n * ```\n *\n * ## Standard Tier - Validation API\n * ```typescript\n * import { ValidationClient } from '@telebort/question-banks/validation'\n * ```\n *\n * ## Premium Tier - Full Access\n * ```typescript\n * import { PremiumClient } from '@telebort/question-banks/premium'\n * ```\n *\n * ## SDK Factory (for custom data sources)\n * ```typescript\n * import { createQuestionBanksSDK } from '@telebort/question-banks'\n *\n * const sdk = createQuestionBanksSDK({\n * dataSource: {\n * async loadCourses() {\n * return myQuestionData\n * }\n * }\n * })\n *\n * // v2.0: Knowledge Graph access\n * const sortingQuestions = await sdk.knowledge.getByTopic('computer-science/algorithms/sorting')\n * const taxonomy = await sdk.taxonomy.getTopics()\n * ```\n */\n\n// Re-export schemas (Free Tier)\nexport * from './schemas'\n\n// Re-export types\nexport * from './types'\n\n// Re-export core interfaces\nexport * from './core'\n\n// Re-export knowledge module types (v2.0)\nexport * from './knowledge'\n\n// Re-export Malaysian Math module (v2.0)\nexport * from './malaysia-math'\n\n// Re-export Guessability Analysis (Phase 8)\nexport * from './guessability'\n\n// SDK Factory\nimport type { Course, Question, Lesson } from './schemas'\nimport type { ExitTicketsConfig, QuestionFilters, QuizCriteria, SearchOptions, Statistics } from './types'\nimport type { QueryResult } from './core/interfaces'\nimport {\n createKnowledgeModule,\n createTaxonomyModule,\n type KnowledgeModule,\n type TaxonomyModule,\n type KnowledgeConfig,\n} from './knowledge'\nimport {\n createMalaysiaMathModule,\n createMalaysiaMathTaxonomyModule,\n type MalaysiaMathModule,\n type MalaysiaMathTaxonomyModule,\n type MalaysiaMathConfig,\n} from './malaysia-math'\n\n/**\n * Question Banks SDK instance\n * @remarks Interface name kept as ExitTicketsSDK for v1.x backward compatibility\n * @see QuestionBanksSDK for the v2.0 alias\n */\nexport interface ExitTicketsSDK {\n /**\n * Data access methods\n */\n data: {\n getCourses(): Promise<Course[]>\n getCourse(courseId: string): Promise<Course | null>\n getLesson(courseId: string, lessonNumber: number): Promise<Lesson | null>\n getQuestion(questionId: string): Promise<Question | null>\n getAllQuestions(): Promise<Question[]>\n }\n\n /**\n * Query methods\n */\n query: {\n filterQuestions(filters: QuestionFilters): Promise<QueryResult<Question>>\n getRandomQuestions(count: number, filters?: QuestionFilters): Promise<Question[]>\n }\n\n /**\n * Quiz generation\n */\n quiz: {\n generateQuiz(criteria: QuizCriteria): Promise<{ questions: Question[]; metadata: Record<string, unknown> }>\n getLessonQuiz(courseId: string, lessonNumber: number): Promise<Question[]>\n }\n\n /**\n * Search\n */\n search: {\n search(options: SearchOptions): Promise<QueryResult<Question & { relevanceScore: number }>>\n searchByTags(tags: string[], matchAll?: boolean): Promise<Question[]>\n }\n\n /**\n * Analytics\n */\n analytics: {\n getStatistics(): Promise<Statistics>\n getCourseStatistics(courseId: string): Promise<Statistics & { courseId: string }>\n }\n\n /**\n * Answer validation (requires question data loaded)\n */\n validate: {\n checkAnswer(\n questionId: string,\n answer: string,\n mode: 'formative' | 'summative'\n ): Promise<{\n isCorrect: boolean\n feedback?: { short: string; detailed?: string; socraticHint?: string }\n misconceptionId?: string | null\n correctAnswer?: string\n }>\n }\n\n /**\n * Knowledge Graph access (v2.0)\n * Topic-based question retrieval\n */\n knowledge: KnowledgeModule\n\n /**\n * Taxonomy tree access (v2.0)\n * Browse the 4-level topic hierarchy\n */\n taxonomy: TaxonomyModule\n\n /**\n * Malaysian Mathematics curriculum access (v2.0)\n * KSSR through STPM curriculum-aligned questions\n */\n malaysiaMath: MalaysiaMathModule\n\n /**\n * Malaysian Mathematics taxonomy (v2.0)\n * Browse education levels, domains, and chapters\n */\n malaysiaMathTaxonomy: MalaysiaMathTaxonomyModule\n}\n\n/**\n * v2.0 SDK type alias for cleaner naming\n */\nexport type QuestionBanksSDK = ExitTicketsSDK\n\n/**\n * Create a Question Banks SDK instance\n *\n * @param config - SDK configuration with data source\n * @returns SDK instance with all services\n * @remarks Function name kept as createExitTicketsSDK for v1.x backward compatibility\n *\n * @example\n * ```typescript\n * // Using static JSON import\n * import coursesData from './data/courses.json'\n *\n * const sdk = createExitTicketsSDK({\n * dataSource: {\n * async loadCourses() {\n * return coursesData\n * }\n * }\n * })\n *\n * const questions = await sdk.query.filterQuestions({ courseId: 'ai-1' })\n * ```\n */\nexport function createExitTicketsSDK(config: ExitTicketsConfig): ExitTicketsSDK {\n // Internal state\n let courses: Course[] | null = null\n const questionsById = new Map<string, Question>()\n const questionsByGlobalId = new Map<string, string>()\n // Note: config.passingThreshold is available for future quiz scoring features\n\n // Input validators\n function isValidCourseId(id: unknown): id is string {\n return typeof id === 'string' && id.length > 0 && id.length <= 50 && /^[a-z0-9-]+$/i.test(id)\n }\n\n function isValidQuestionId(id: unknown): id is string {\n return typeof id === 'string' && id.length > 0 && id.length <= 100\n }\n\n function isValidLessonNumber(num: unknown): num is number {\n return typeof num === 'number' && Number.isInteger(num) && num >= 1 && num <= 100\n }\n\n // Helper: Ensure data is loaded\n async function ensureLoaded(): Promise<Course[]> {\n if (courses === null) {\n courses = await config.dataSource.loadCourses()\n\n // Build indexes\n for (const course of courses) {\n for (const lesson of course.lessons) {\n for (const question of lesson.questions) {\n questionsById.set(question.questionId, question)\n questionsByGlobalId.set(question.globalId, question.questionId)\n }\n }\n }\n }\n return courses\n }\n\n // Data access methods\n const data: ExitTicketsSDK['data'] = {\n async getCourses() {\n return ensureLoaded()\n },\n\n async getCourse(courseId) {\n if (!isValidCourseId(courseId)) return null\n const all = await ensureLoaded()\n return all.find(c => c.courseId === courseId) ?? null\n },\n\n async getLesson(courseId, lessonNumber) {\n if (!isValidCourseId(courseId) || !isValidLessonNumber(lessonNumber)) return null\n const course = await data.getCourse(courseId)\n return course?.lessons.find(l => l.lessonNumber === lessonNumber) ?? null\n },\n\n async getQuestion(questionId) {\n if (!isValidQuestionId(questionId)) return null\n await ensureLoaded()\n return questionsById.get(questionId) ?? null\n },\n\n async getAllQuestions() {\n await ensureLoaded()\n return Array.from(questionsById.values())\n },\n }\n\n // Query methods\n const query: ExitTicketsSDK['query'] = {\n async filterQuestions(filters) {\n const all = await data.getAllQuestions()\n let filtered = all\n\n if (filters.courseId) {\n filtered = filtered.filter(q => q.questionId.startsWith(filters.courseId!))\n }\n if (filters.lessonNumber) {\n filtered = filtered.filter(q => q.questionId.includes(`-l${filters.lessonNumber}-`))\n }\n if (filters.questionType) {\n filtered = filtered.filter(q => q.questionType === filters.questionType)\n }\n if (filters.difficulty) {\n filtered = filtered.filter(q => q.metadata.difficulty === filters.difficulty)\n }\n if (filters.hasCodeBlock !== undefined) {\n filtered = filtered.filter(q => q.hasCodeBlock === filters.hasCodeBlock)\n }\n if (filters.tags?.length) {\n filtered = filtered.filter(q =>\n filters.tags!.some(tag => q.metadata.tags.includes(tag))\n )\n }\n\n const total = filtered.length\n const offset = filters.offset ?? 0\n const limit = filters.limit ?? 20\n const paginated = filtered.slice(offset, offset + limit)\n\n return {\n data: paginated,\n total,\n limit,\n offset,\n hasMore: offset + limit < total,\n }\n },\n\n async getRandomQuestions(count, filters) {\n const result = await query.filterQuestions({ ...filters, limit: 1000 })\n // Fisher-Yates shuffle for unbiased randomization\n const shuffled = [...result.data]\n for (let i = shuffled.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n // Non-null assertions are safe: both i and j are valid indices within loop bounds\n const temp = shuffled[i]!\n shuffled[i] = shuffled[j]!\n shuffled[j] = temp\n }\n return shuffled.slice(0, count)\n },\n }\n\n // Quiz generation\n const quiz: ExitTicketsSDK['quiz'] = {\n async generateQuiz(criteria) {\n const questions = await query.getRandomQuestions(criteria.questionCount, {\n courseId: criteria.courseIds?.[0],\n difficulty: criteria.difficulty,\n questionType: criteria.questionTypes?.[0],\n hasCodeBlock: criteria.includeCodeBlocks,\n })\n\n return {\n questions,\n metadata: {\n distribution: questions.reduce((acc, q) => {\n acc[q.questionType] = (acc[q.questionType] ?? 0) + 1\n return acc\n }, {} as Record<string, number>),\n timestamp: new Date().toISOString(),\n },\n }\n },\n\n async getLessonQuiz(courseId, lessonNumber) {\n const lesson = await data.getLesson(courseId, lessonNumber)\n return lesson?.questions ?? []\n },\n }\n\n // Search\n const search: ExitTicketsSDK['search'] = {\n async search(options) {\n const all = await data.getAllQuestions()\n const query = options.query.toLowerCase()\n\n const scored = all\n .map(q => {\n let score = 0\n if (q.prompt.toLowerCase().includes(query)) score += 3\n if (q.options.some(o => o.text.toLowerCase().includes(query))) score += 1\n return { ...q, relevanceScore: score }\n })\n .filter(q => q.relevanceScore > 0)\n .sort((a, b) => b.relevanceScore - a.relevanceScore)\n\n const offset = options.offset ?? 0\n const limit = options.limit ?? 20\n\n return {\n data: scored.slice(offset, offset + limit),\n total: scored.length,\n limit,\n offset,\n hasMore: offset + limit < scored.length,\n }\n },\n\n async searchByTags(tags, matchAll = false) {\n const all = await data.getAllQuestions()\n return all.filter(q => {\n if (matchAll) {\n return tags.every(tag => q.metadata.tags.includes(tag))\n }\n return tags.some(tag => q.metadata.tags.includes(tag))\n })\n },\n }\n\n // Analytics\n const analytics: ExitTicketsSDK['analytics'] = {\n async getStatistics() {\n const all = await ensureLoaded()\n const questions = await data.getAllQuestions()\n\n const stats: Statistics = {\n totalCourses: all.length,\n totalLessons: all.reduce((sum, c) => sum + c.lessons.length, 0),\n totalQuestions: questions.length,\n byDifficulty: {},\n byQuestionType: {},\n byBloomsTaxonomy: {},\n withCodeBlocks: 0,\n withoutCodeBlocks: 0,\n }\n\n for (const q of questions) {\n stats.byDifficulty[q.metadata.difficulty] = (stats.byDifficulty[q.metadata.difficulty] ?? 0) + 1\n stats.byQuestionType[q.questionType] = (stats.byQuestionType[q.questionType] ?? 0) + 1\n stats.byBloomsTaxonomy[q.metadata.bloomsTaxonomy] = (stats.byBloomsTaxonomy[q.metadata.bloomsTaxonomy] ?? 0) + 1\n if (q.hasCodeBlock) stats.withCodeBlocks++\n else stats.withoutCodeBlocks++\n }\n\n return stats\n },\n\n async getCourseStatistics(courseId) {\n const course = await data.getCourse(courseId)\n if (!course) throw new Error(`Course not found: ${courseId}`)\n\n const questions = course.lessons.flatMap(l => l.questions)\n\n const stats = {\n courseId,\n totalCourses: 1,\n totalLessons: course.lessons.length,\n totalQuestions: questions.length,\n byDifficulty: {} as Record<string, number>,\n byQuestionType: {} as Record<string, number>,\n byBloomsTaxonomy: {} as Record<string, number>,\n withCodeBlocks: 0,\n withoutCodeBlocks: 0,\n }\n\n for (const q of questions) {\n stats.byDifficulty[q.metadata.difficulty] = (stats.byDifficulty[q.metadata.difficulty] ?? 0) + 1\n stats.byQuestionType[q.questionType] = (stats.byQuestionType[q.questionType] ?? 0) + 1\n stats.byBloomsTaxonomy[q.metadata.bloomsTaxonomy] = (stats.byBloomsTaxonomy[q.metadata.bloomsTaxonomy] ?? 0) + 1\n if (q.hasCodeBlock) stats.withCodeBlocks++\n else stats.withoutCodeBlocks++\n }\n\n return stats\n },\n }\n\n // Validation\n const validate: ExitTicketsSDK['validate'] = {\n async checkAnswer(questionId, answer, mode) {\n const question = await data.getQuestion(questionId)\n if (!question) throw new Error(`Question not found: ${questionId}`)\n\n const selectedOption = question.options.find(o => o.key === answer)\n if (!selectedOption) throw new Error(`Invalid answer: ${answer}`)\n\n const isCorrect = selectedOption.isCorrect\n\n return {\n isCorrect,\n feedback: selectedOption.feedback,\n misconceptionId: !isCorrect ? selectedOption.misconceptionId : null,\n correctAnswer: mode === 'formative' ? question.correctAnswer : undefined,\n }\n },\n }\n\n // v2.0: Knowledge Graph modules\n const knowledgeConfig: KnowledgeConfig = {\n cdnBase: 'https://content-warehouse.vercel.app',\n cacheEnabled: true,\n }\n\n const knowledge = createKnowledgeModule(knowledgeConfig)\n const taxonomy = createTaxonomyModule(knowledgeConfig)\n\n // v2.0: Malaysian Math modules\n const malaysiaMathConfig: MalaysiaMathConfig = {\n cdnBase: 'https://content-warehouse.vercel.app',\n cacheEnabled: true,\n debug: false,\n }\n\n const malaysiaMath = createMalaysiaMathModule(malaysiaMathConfig)\n const malaysiaMathTaxonomy = createMalaysiaMathTaxonomyModule(malaysiaMathConfig)\n\n return {\n data,\n query,\n quiz,\n search,\n analytics,\n validate,\n knowledge,\n taxonomy,\n malaysiaMath,\n malaysiaMathTaxonomy,\n }\n}\n\n/**\n * Create a Question Banks SDK instance (v2.0 naming)\n *\n * @param config - SDK configuration with data source\n * @returns SDK instance with all services including Knowledge Graph\n *\n * @example\n * ```typescript\n * const sdk = createQuestionBanksSDK({\n * dataSource: {\n * async loadCourses() {\n * return myCoursesData\n * }\n * }\n * })\n *\n * // v1.x: Course-based access\n * const cs1 = await sdk.data.getCourse('CS1')\n *\n * // v2.0: Knowledge Graph access\n * const sorting = await sdk.knowledge.getByTopic('computer-science/algorithms/sorting')\n * const tree = await sdk.taxonomy.getTopics()\n * ```\n */\nexport const createQuestionBanksSDK = createExitTicketsSDK\n","import { readdir, readFile } from 'fs/promises'\nimport { join, resolve } from 'path'\nimport { createExitTicketsSDK, type ExitTicketsSDK } from '../../index'\nimport type { Course } from '../../schemas'\n\nexport interface LoadSDKOptions {\n dataDir?: string\n}\n\n// Cache SDK instance per data directory\nconst sdkCache = new Map<string, ExitTicketsSDK>()\n\n/**\n * Detect the exports directory containing course JSON files\n */\nexport async function detectDataDir(): Promise<string> {\n // Common locations to check\n const possiblePaths = [\n // Relative to SDK - new consolidated structure\n '../question-banks-data/data/questions/curated',\n // Relative to current working directory\n './data/questions/curated',\n '../data/questions/curated',\n // Absolute common locations\n join(process.cwd(), 'data', 'questions', 'curated'),\n ]\n\n for (const path of possiblePaths) {\n try {\n const resolved = resolve(path)\n const files = await readdir(resolved)\n const jsonFiles = files.filter(f => f.endsWith('.json'))\n if (jsonFiles.length > 0) {\n return resolved\n }\n } catch {\n // Directory doesn't exist or not readable, continue\n }\n }\n\n throw new Error(\n 'Could not find data directory. Use --data-dir to specify the path to course JSON files.'\n )\n}\n\n/**\n * Load all course JSON files from a directory\n */\nexport async function loadCoursesFromDir(dir: string): Promise<Course[]> {\n const files = await readdir(dir)\n const jsonFiles = files.filter(f => f.endsWith('.json'))\n\n if (jsonFiles.length === 0) {\n throw new Error(`No JSON files found in ${dir}`)\n }\n\n const courses: Course[] = []\n\n for (const file of jsonFiles) {\n try {\n const content = await readFile(join(dir, file), 'utf-8')\n const data = JSON.parse(content)\n courses.push(data)\n } catch (error) {\n // Skip invalid JSON files\n console.warn(`Warning: Could not parse ${file}`)\n }\n }\n\n return courses\n}\n\n/**\n * Load SDK instance with courses from data directory\n */\nexport async function loadSDK(options?: LoadSDKOptions): Promise<ExitTicketsSDK> {\n const dataDir = options?.dataDir || await detectDataDir()\n const cacheKey = resolve(dataDir)\n\n // Return cached instance if available\n if (sdkCache.has(cacheKey)) {\n return sdkCache.get(cacheKey)!\n }\n\n const sdk = createExitTicketsSDK({\n dataSource: {\n async loadCourses() {\n return loadCoursesFromDir(dataDir)\n },\n },\n })\n\n sdkCache.set(cacheKey, sdk)\n return sdk\n}\n\n/**\n * Clear SDK cache (useful for testing)\n */\nexport function clearSDKCache(): void {\n sdkCache.clear()\n}\n","import { loadSDK, detectDataDir } from '../utils/sdk-loader'\nimport { formatStats, red } from '../utils/formatters'\nimport { EXIT_CODES } from '../utils/error-handler'\n\nexport interface StatsOptions {\n course?: string\n json?: boolean\n dataDir?: string\n}\n\n/**\n * Main stats command handler\n */\nexport async function statsCommand(options: StatsOptions): Promise<void> {\n try {\n const dataDir = options.dataDir || await detectDataDir()\n const sdk = await loadSDK({ dataDir })\n\n if (options.course) {\n // Course-specific statistics\n try {\n const stats = await sdk.analytics.getCourseStatistics(options.course)\n\n if (options.json) {\n console.log(JSON.stringify(stats, null, 2))\n } else {\n console.log(formatStats(stats, `Course: ${options.course}`))\n }\n } catch (error) {\n console.error(`${red('Error:')} Course not found: ${options.course}`)\n console.error('Use --data-dir to specify the path to course files.')\n process.exit(EXIT_CODES.USAGE_ERROR)\n }\n } else {\n // Global statistics\n const stats = await sdk.analytics.getStatistics()\n\n if (options.json) {\n console.log(JSON.stringify(stats, null, 2))\n } else {\n console.log(formatStats(stats, 'Question Banks Statistics'))\n }\n }\n\n process.exit(EXIT_CODES.SUCCESS)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error(`${red('Error:')} ${message}`)\n process.exit(EXIT_CODES.FATAL_ERROR)\n }\n}\n","import { loadSDK, detectDataDir } from '../utils/sdk-loader'\nimport { formatQuestion, cyan, bold, red, green } from '../utils/formatters'\nimport { EXIT_CODES } from '../utils/error-handler'\nimport type { Difficulty, QuestionType } from '../../schemas'\n\nexport interface QuizOptions {\n course?: string\n count: number\n difficulty?: string\n type?: string\n json?: boolean\n showAnswers?: boolean\n dataDir?: string\n}\n\n/**\n * Main quiz command handler\n */\nexport async function quizCommand(options: QuizOptions): Promise<void> {\n try {\n const dataDir = options.dataDir || await detectDataDir()\n const sdk = await loadSDK({ dataDir })\n\n // Generate quiz using SDK\n const quiz = await sdk.quiz.generateQuiz({\n questionCount: options.count,\n courseIds: options.course ? [options.course] : undefined,\n difficulty: options.difficulty as Difficulty | undefined,\n questionTypes: options.type ? [options.type as QuestionType] : undefined,\n })\n\n if (quiz.questions.length === 0) {\n console.error(`${red('Error:')} No questions found matching criteria.`)\n if (options.course) {\n console.error(`Check if course \"${options.course}\" exists.`)\n }\n process.exit(EXIT_CODES.USAGE_ERROR)\n }\n\n if (options.json) {\n // Output as JSON\n const output = {\n questions: options.showAnswers\n ? quiz.questions\n : quiz.questions.map(q => ({\n ...q,\n correctAnswer: undefined,\n correctAnswerText: undefined,\n options: q.options.map(o => ({\n key: o.key,\n text: o.text,\n })),\n })),\n metadata: quiz.metadata,\n }\n console.log(JSON.stringify(output, null, 2))\n } else {\n // Pretty print for terminal\n const title = options.course\n ? `Sample Quiz (${quiz.questions.length} questions from ${options.course})`\n : `Sample Quiz (${quiz.questions.length} questions)`\n\n console.log(`\\n${cyan(bold(title))}\\n`)\n\n for (let i = 0; i < quiz.questions.length; i++) {\n const q = quiz.questions[i]\n if (!q) continue // Type guard for TypeScript\n console.log(formatQuestion(q, i))\n\n if (options.showAnswers) {\n console.log(` ${green('Answer:')} ${q.correctAnswer}) ${q.correctAnswerText}\\n`)\n }\n }\n\n // Show distribution\n console.log(`\\n${bold('Distribution:')}`)\n for (const [type, count] of Object.entries(quiz.metadata.distribution as Record<string, number>)) {\n console.log(` ${type}: ${count}`)\n }\n console.log()\n }\n\n process.exit(EXIT_CODES.SUCCESS)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error(`${red('Error:')} ${message}`)\n process.exit(EXIT_CODES.FATAL_ERROR)\n }\n}\n","/**\n * Score Command\n *\n * Analyze questions for guessability and generate reports.\n *\n * Usage:\n * question-banks score --course BBAI\n * question-banks score --all --sample 100\n * question-banks score --question-id \"bbai-l1-q1\"\n */\n\nimport { readFile, readdir, writeFile, mkdir } from 'fs/promises'\nimport { join, basename, dirname } from 'path'\nimport { fileURLToPath } from 'url'\nimport {\n analyzeQuestion,\n analyzePositionPattern,\n generateCourseSummary,\n getScoreColor,\n getGradeColor,\n} from '../../guessability'\nimport type { GuessabilityReport, GuessabilityCourseSummary, AuditReport } from '../../guessability'\nimport { bold, cyan, red, green, yellow } from '../utils/formatters'\nimport { EXIT_CODES } from '../utils/error-handler'\n\nexport interface ScoreOptions {\n course?: string\n questionId?: string\n all?: boolean\n sample?: number\n samplePerCourse?: number\n threshold?: number\n withFixes?: boolean\n output?: string\n outputDir?: string\n listFailures?: boolean\n json?: boolean\n dataDir?: string\n csMode?: boolean // Enable CS-specific detectors with higher weights\n}\n\n// ESM-compatible __dirname\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = dirname(__filename)\n\n// Default data directory (relative to dist/cli/) - new consolidated structure\nconst DEFAULT_DATA_DIR = '../../../question-banks-data/data/questions/curated'\n\n/**\n * Load course data from JSON file\n */\nasync function loadCourseData(filePath: string): Promise<any> {\n const content = await readFile(filePath, 'utf-8')\n return JSON.parse(content)\n}\n\n/**\n * Extract questions from course data\n */\nfunction extractQuestions(courseData: any): Array<{\n questionId: string\n prompt: string\n options: Array<{ key: string; text: string; isCorrect: boolean }>\n hasCodeBlock?: boolean\n codeLanguage?: string\n codeContent?: string\n}> {\n const questions: any[] = []\n\n if (courseData.lessons) {\n for (const lesson of courseData.lessons) {\n if (lesson.questions) {\n for (const q of lesson.questions) {\n questions.push({\n questionId: q.questionId || `${courseData.courseId}-unknown`,\n prompt: q.prompt || '',\n options: (q.options || []).map((o: any) => ({\n key: o.key || '',\n text: o.text || '',\n isCorrect: o.isCorrect || false,\n })),\n // CS-specific fields for enhanced analysis\n hasCodeBlock: q.hasCodeBlock || false,\n codeLanguage: q.codeLanguage || null,\n codeContent: q.codeContent || null,\n })\n }\n }\n }\n }\n\n return questions\n}\n\n/**\n * Format a single question report for terminal output\n */\nfunction formatQuestionReport(report: GuessabilityReport): string {\n const reset = '\\x1b[0m'\n const scoreColor = getScoreColor(report.score)\n const gradeColor = getGradeColor(report.grade)\n\n let output = `\\n${bold('Question:')} ${report.questionId}\\n`\n output += `${bold('Guessability Score:')} ${scoreColor}${report.score}/100${reset} `\n output += `(Grade ${gradeColor}${report.grade}${reset})\\n`\n\n if (report.violations.length > 0) {\n output += `\\n${bold('Violations:')}\\n`\n for (const v of report.violations) {\n const severityColor = v.severity === 'critical' ? red : v.severity === 'major' ? yellow : cyan\n output += ` ${severityColor(`[${v.points}]`)} ${bold(v.rule)}: ${v.details}\\n`\n output += ` ${cyan('Fix:')} ${v.fix}\\n`\n }\n } else {\n output += `\\n${green('No violations detected!')}\\n`\n }\n\n if (report.recommendations.length > 0) {\n output += `\\n${bold('Recommendations:')}\\n`\n report.recommendations.forEach((rec, i) => {\n output += ` ${i + 1}. ${rec}\\n`\n })\n }\n\n return output\n}\n\n/**\n * Format course summary for terminal output\n */\nfunction formatCourseSummary(summary: GuessabilityCourseSummary): string {\n const reset = '\\x1b[0m'\n const gradeColor = getGradeColor(summary.averageGrade)\n\n let output = `\\n${bold(cyan(summary.courseId))}\\n`\n output += ` Questions: ${summary.questionCount}\\n`\n output += ` Avg Score: ${getScoreColor(summary.averageScore)}${summary.averageScore}${reset} `\n output += `(Grade ${gradeColor}${summary.averageGrade}${reset})\\n`\n\n output += ` Distribution: `\n output += `${green(`A:${summary.gradeDistribution.A}%`)} `\n output += `${green(`B:${summary.gradeDistribution.B}%`)} `\n output += `${yellow(`C:${summary.gradeDistribution.C}%`)} `\n output += `${red(`D:${summary.gradeDistribution.D}%`)} `\n output += `${red(`F:${summary.gradeDistribution.F}%`)}\\n`\n\n if (summary.topViolations.length > 0) {\n output += ` Top Issues: ${summary.topViolations.map(v => `${v.rule}(${v.count})`).join(', ')}\\n`\n }\n\n if (summary.worstQuestions.length > 0) {\n output += ` Worst: ${summary.worstQuestions.slice(0, 3).map(q => q.questionId).join(', ')}\\n`\n }\n\n return output\n}\n\n/**\n * Score a single question by ID\n */\nasync function scoreQuestion(\n questionId: string,\n dataDir: string,\n options: ScoreOptions\n): Promise<void> {\n // Parse question ID to find course\n const parts = questionId.split('-')\n if (parts.length < 3) {\n console.error(red(`Invalid question ID format: ${questionId}`))\n process.exit(EXIT_CODES.USAGE_ERROR)\n }\n\n // Try to find the course file\n const files = await readdir(dataDir)\n let found = false\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue\n\n const courseData = await loadCourseData(join(dataDir, file))\n const questions = extractQuestions(courseData)\n const question = questions.find(q => q.questionId === questionId)\n\n if (question) {\n const report = analyzeQuestion(question, { csMode: options.csMode })\n if (options.json) {\n console.log(JSON.stringify(report, null, 2))\n } else {\n console.log(formatQuestionReport(report))\n }\n found = true\n break\n }\n }\n\n if (!found) {\n console.error(red(`Question not found: ${questionId}`))\n process.exit(EXIT_CODES.VALIDATION_ERROR)\n }\n}\n\n/**\n * Score all questions in a course\n */\nasync function scoreCourse(\n courseId: string,\n dataDir: string,\n options: ScoreOptions\n): Promise<GuessabilityCourseSummary | null> {\n const files = await readdir(dataDir)\n const courseFiles = files.filter(\n f => f.endsWith('.json') && f.toLowerCase().includes(courseId.toLowerCase())\n )\n\n if (courseFiles.length === 0) {\n console.error(red(`Course not found: ${courseId}`))\n return null\n }\n\n const allQuestions: any[] = []\n const allReports: GuessabilityReport[] = []\n\n for (const file of courseFiles) {\n const courseData = await loadCourseData(join(dataDir, file))\n const questions = extractQuestions(courseData)\n\n // Sample if requested\n let questionsToAnalyze = questions\n if (options.sample && options.sample < questions.length) {\n questionsToAnalyze = questions\n .sort(() => Math.random() - 0.5)\n .slice(0, options.sample)\n }\n\n allQuestions.push(...questionsToAnalyze)\n\n for (const q of questionsToAnalyze) {\n const report = analyzeQuestion(q, { csMode: options.csMode })\n allReports.push(report)\n }\n }\n\n // Check position pattern at set level\n const positionViolation = analyzePositionPattern(allQuestions)\n if (positionViolation) {\n // Add to each report (informational)\n console.log(yellow(`\\nNote: ${positionViolation.details}`))\n }\n\n const summary = generateCourseSummary(courseId, allReports)\n\n if (options.json) {\n console.log(JSON.stringify(summary, null, 2))\n } else {\n console.log(formatCourseSummary(summary))\n\n if (options.withFixes && summary.worstQuestions.length > 0) {\n console.log(`\\n${bold('Worst Questions:')}\\n`)\n for (const wq of summary.worstQuestions) {\n const report = allReports.find(r => r.questionId === wq.questionId)\n if (report) {\n console.log(formatQuestionReport(report))\n }\n }\n }\n }\n\n // Check threshold\n if (options.threshold && summary.averageScore > options.threshold) {\n console.log(red(`\\nFAILED: Average score ${summary.averageScore} exceeds threshold ${options.threshold}`))\n process.exit(EXIT_CODES.VALIDATION_ERROR)\n }\n\n // Write output file if requested\n if (options.output) {\n await writeFile(options.output, JSON.stringify(summary, null, 2))\n console.log(green(`\\nReport saved to ${options.output}`))\n }\n\n return summary\n}\n\n/**\n * Score all courses\n */\nasync function scoreAll(dataDir: string, options: ScoreOptions): Promise<void> {\n const files = await readdir(dataDir)\n const jsonFiles = files.filter(f => f.endsWith('.json'))\n\n console.log(cyan(bold(`\\nScoring ${jsonFiles.length} course files...\\n`)))\n\n const summaries: Record<string, GuessabilityCourseSummary> = {}\n const allReports: GuessabilityReport[] = []\n let totalQuestions = 0\n\n for (const file of jsonFiles) {\n const courseData = await loadCourseData(join(dataDir, file))\n const courseId = courseData.courseId || basename(file, '.json')\n const questions = extractQuestions(courseData)\n\n // Sample if requested\n let questionsToAnalyze = questions\n const sampleSize = options.samplePerCourse || options.sample\n if (sampleSize && sampleSize < questions.length) {\n questionsToAnalyze = questions\n .sort(() => Math.random() - 0.5)\n .slice(0, sampleSize)\n }\n\n totalQuestions += questionsToAnalyze.length\n\n const reports: GuessabilityReport[] = []\n for (const q of questionsToAnalyze) {\n const report = analyzeQuestion(q, { csMode: options.csMode })\n reports.push(report)\n allReports.push(report)\n }\n\n if (reports.length > 0) {\n const summary = generateCourseSummary(courseId, reports)\n summaries[courseId] = summary\n\n if (!options.json) {\n console.log(formatCourseSummary(summary))\n }\n }\n }\n\n // Overall summary\n const avgScore = allReports.reduce((s, r) => s + r.score, 0) / allReports.length\n const gradeDistribution = { A: 0, B: 0, C: 0, D: 0, F: 0 }\n for (const r of allReports) {\n gradeDistribution[r.grade]++\n }\n\n const auditReport: AuditReport = {\n timestamp: new Date().toISOString(),\n summary: {\n totalQuestions,\n sampleSize: allReports.length,\n averageScore: Math.round(avgScore * 10) / 10,\n averageGrade: avgScore <= 15 ? 'A' : avgScore <= 30 ? 'B' : avgScore <= 45 ? 'C' : avgScore <= 60 ? 'D' : 'F',\n gradeDistribution: {\n A: Math.round((gradeDistribution.A / allReports.length) * 100),\n B: Math.round((gradeDistribution.B / allReports.length) * 100),\n C: Math.round((gradeDistribution.C / allReports.length) * 100),\n D: Math.round((gradeDistribution.D / allReports.length) * 100),\n F: Math.round((gradeDistribution.F / allReports.length) * 100),\n },\n },\n byCourse: summaries,\n worstQuestions: allReports\n .filter(r => r.grade === 'D' || r.grade === 'F')\n .sort((a, b) => b.score - a.score)\n .slice(0, 20)\n .map(r => {\n const courseId = r.questionId.split('-').slice(0, 2).join('-')\n return {\n questionId: r.questionId,\n courseId,\n score: r.score,\n grade: r.grade,\n violations: r.violations,\n }\n }),\n }\n\n if (options.json) {\n console.log(JSON.stringify(auditReport, null, 2))\n } else {\n console.log(bold('\\n' + '='.repeat(50)))\n console.log(bold('OVERALL SUMMARY'))\n console.log('='.repeat(50))\n console.log(`Total Questions: ${totalQuestions}`)\n console.log(`Sample Analyzed: ${allReports.length}`)\n console.log(`Average Score: ${getScoreColor(avgScore)}${auditReport.summary.averageScore}\\x1b[0m`)\n console.log(`Average Grade: ${getGradeColor(auditReport.summary.averageGrade as any)}${auditReport.summary.averageGrade}\\x1b[0m`)\n console.log(`Distribution: A:${auditReport.summary.gradeDistribution.A}% B:${auditReport.summary.gradeDistribution.B}% C:${auditReport.summary.gradeDistribution.C}% D:${auditReport.summary.gradeDistribution.D}% F:${auditReport.summary.gradeDistribution.F}%`)\n }\n\n // Output files\n if (options.output) {\n await writeFile(options.output, JSON.stringify(auditReport, null, 2))\n console.log(green(`\\nReport saved to ${options.output}`))\n }\n\n if (options.outputDir) {\n await mkdir(options.outputDir, { recursive: true })\n for (const [courseId, summary] of Object.entries(summaries)) {\n const filePath = join(options.outputDir, `${courseId}-guessability.json`)\n await writeFile(filePath, JSON.stringify(summary, null, 2))\n }\n console.log(green(`\\nCourse reports saved to ${options.outputDir}/`))\n }\n\n if (options.listFailures) {\n console.log(bold('\\nFailing Questions (Grade D or F):'))\n for (const q of auditReport.worstQuestions) {\n console.log(`${q.questionId} (${q.score}, ${q.grade})`)\n }\n }\n\n // Check threshold\n if (options.threshold && auditReport.summary.averageScore > options.threshold) {\n console.log(red(`\\nFAILED: Average score ${auditReport.summary.averageScore} exceeds threshold ${options.threshold}`))\n process.exit(EXIT_CODES.VALIDATION_ERROR)\n }\n}\n\n/**\n * Main score command handler\n */\nexport async function scoreCommand(options: ScoreOptions): Promise<void> {\n // Determine data directory\n const dataDir = options.dataDir || join(__dirname, DEFAULT_DATA_DIR)\n\n const modeLabel = options.csMode ? ' (CS Mode - Enhanced Detectors)' : ''\n console.log(cyan(bold(`\\n📊 Guessability Analysis${modeLabel}\\n`)))\n\n try {\n if (options.questionId) {\n await scoreQuestion(options.questionId, dataDir, options)\n } else if (options.course) {\n await scoreCourse(options.course, dataDir, options)\n } else if (options.all) {\n await scoreAll(dataDir, options)\n } else {\n console.log('Usage:')\n console.log(' question-banks score --course <id> Score a specific course')\n console.log(' question-banks score --question-id <id> Score a specific question')\n console.log(' question-banks score --all Score all courses')\n console.log('')\n console.log('Options:')\n console.log(' --sample <n> Sample n questions per course')\n console.log(' --threshold <n> Fail if avg score exceeds n')\n console.log(' --with-fixes Show fix recommendations')\n console.log(' --output <file> Save report to file')\n console.log(' --json Output as JSON')\n console.log(' --cs-mode Enable CS-specific detectors with higher weights')\n console.log('')\n console.log('CS Mode Detectors:')\n console.log(' HORIZONTAL_CODE Code options displayed horizontally (25 pts)')\n console.log(' CODE_LENGTH_BIAS Correct code option significantly longer (18 pts)')\n console.log(' CONFUSING_VARIABLES Generic variable names like var1, x, y (12 pts)')\n console.log(' WINDOW_DRESSING Excessive irrelevant context in stem (10 pts)')\n console.log(' TYPE_K_FORMAT Combined options like \"A and B\" (15 pts)')\n console.log(' TYPE_MIXING Options mix incompatible types (8 pts)')\n console.log(' SYNTAX_ERROR_DISTRACTOR Syntax errors in logic test (12 pts)')\n }\n } catch (error) {\n console.error(red(`Error: ${error instanceof Error ? error.message : String(error)}`))\n process.exit(EXIT_CODES.VALIDATION_ERROR)\n }\n}\n","#!/usr/bin/env node\n/**\n * Question Banks CLI\n *\n * Command-line tools for validating, analyzing, and generating question bank quizzes.\n *\n * Usage:\n * question-banks validate <file|dir> Validate course JSON files\n * question-banks stats Show statistics\n * question-banks quiz Generate a sample quiz\n */\n\nimport { Command } from 'commander'\nimport { validateCommand } from './commands/validate'\nimport { statsCommand } from './commands/stats'\nimport { quizCommand } from './commands/quiz'\nimport { scoreCommand } from './commands/score'\nimport { setupErrorHandlers } from './utils/error-handler'\n\n// Setup global error handlers\nsetupErrorHandlers()\n\n// Create CLI program\nconst program = new Command()\n\nprogram\n .name('question-banks')\n .description('CLI tools for Question Banks SDK')\n .version('2.1.1')\n\n// Validate command\nprogram\n .command('validate <path>')\n .description('Validate course JSON files against schemas')\n .option('-v, --verbose', 'Show all validation errors')\n .action(async (path: string, options) => {\n await validateCommand(path, options)\n })\n\n// Stats command\nprogram\n .command('stats')\n .description('Show question bank statistics')\n .option('-c, --course <id>', 'Show statistics for a specific course')\n .option('--json', 'Output as JSON')\n .option('-d, --data-dir <path>', 'Path to course data directory')\n .action(async (options) => {\n await statsCommand(options)\n })\n\n// Quiz command\nprogram\n .command('quiz')\n .description('Generate a sample quiz')\n .option('-c, --course <id>', 'Filter by course ID')\n .option('-n, --count <number>', 'Number of questions', '5')\n .option('--difficulty <level>', 'Filter by difficulty (easy, medium, hard, challenge)')\n .option('--type <type>', 'Filter by question type')\n .option('--json', 'Output as JSON')\n .option('-a, --show-answers', 'Show correct answers')\n .option('-d, --data-dir <path>', 'Path to course data directory')\n .action(async (options) => {\n await quizCommand({\n ...options,\n count: parseInt(options.count, 10),\n })\n })\n\n// Score command (Guessability Analysis)\nprogram\n .command('score')\n .description('Analyze questions for guessability (anti-guessing quality check)')\n .option('-c, --course <id>', 'Score a specific course')\n .option('-q, --question-id <id>', 'Score a specific question')\n .option('--all', 'Score all courses')\n .option('-s, --sample <number>', 'Sample n questions', parseInt)\n .option('--sample-per-course <number>', 'Sample n questions per course', parseInt)\n .option('-t, --threshold <number>', 'Fail if avg score exceeds threshold', parseInt)\n .option('-f, --with-fixes', 'Show fix recommendations for worst questions')\n .option('-o, --output <file>', 'Save report to file')\n .option('--output-dir <dir>', 'Save per-course reports to directory')\n .option('--list-failures', 'List questions that fail (Grade D or F)')\n .option('--json', 'Output as JSON')\n .option('-d, --data-dir <path>', 'Path to course data directory')\n .option('--cs-mode', 'Enable CS-specific detectors with higher weights')\n .action(async (options) => {\n await scoreCommand(options)\n })\n\n// Export for programmatic use\nexport function createCLI(): Command {\n return program\n}\n\n// Run CLI (called by bin/question-banks.js shim)\nexport async function run(argv?: string[]): Promise<void> {\n await program.parseAsync(argv ?? process.argv)\n}\n"]}
|