@almadar/core 1.0.17 → 2.0.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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/field.ts","../src/types/asset.ts","../src/types/entity.ts","../src/types/page.ts","../src/types/effect.ts","../src/types/expression.ts","../src/types/state-machine.ts","../src/types/trait.ts","../src/types/domain.ts","../src/types/service.ts","../src/types/orbital.ts","../src/types/schema.ts","../src/types/operators.ts","../src/types/bindings.ts","../src/types/interaction-model.ts","../src/types/pattern.ts","../src/types/ir.ts","../src/resolver.ts","../src/diff.ts","../src/domain-language/tokens.ts","../src/domain-language/lexer.ts","../src/domain-language/parsers/entity-parser.ts","../src/domain-language/parsers/page-parser.ts","../src/domain-language/parsers/guard-parser.ts","../src/domain-language/parsers/sexpr-parser.ts","../src/domain-language/parsers/behavior-parser.ts","../src/domain-language/formatters/entity-formatter.ts","../src/domain-language/formatters/page-formatter.ts","../src/domain-language/formatters/sexpr-formatter.ts","../src/domain-language/formatters/behavior-formatter.ts","../src/domain-language/formatters/guard-formatter.ts","../src/domain-language/sync/schema-to-domain.ts","../src/domain-language/sync/domain-to-schema.ts","../src/domain-language/sync/section-mapping.ts","../src/domain-language/sync/merge-chunks.ts","../src/domain-language/types.ts","../src/domain-language/registry.ts"],"names":["z","_NAMES","_PATTERN_TYPES","inferTsType","getPageName","TokenType","entity","toKebabCase","nameParts","name","page","parseValue","toCamelCase","toSpaceSeparated","splitAtTopLevel","parseComparison","behavior","text","toPascalCase","startsWithVowel","formatFieldType","isEffectOperator","message","formatGuardForDomain","parseFieldReference","domainText","formatIntervalMs","getEntityName","UI_SLOTS"],"mappings":";;;;;;;AAkCO,IAAM,eAAA,GAAkB,EAAE,IAAA,CAAK;AAAA,EAClC,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACJ,CAAC;AAiBM,IAAM,yBAAA,GAA4B,EAAE,IAAA,CAAK;AAAA,EAC5C,KAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA;AACJ,CAAC,CAAA;AAmCM,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EACzC,QAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,2BAA2B,CAAA;AAAA,EACrD,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAa,0BAA0B,QAAA,EAAS;AAAA,EAChD,QAAA,EAAU,EAAE,IAAA,CAAK,CAAC,WAAW,SAAA,EAAW,UAAU,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA;AAAA,EAE9D,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,IAAA,EAAM,0BAA0B,QAAA;AACpC,CAAC,CAAA,CAAE,SAAA,CAAU,CAAC,IAAA,KAAS;AAEnB,EAAA,MAAM,UAAA,GAA6B;AAAA,IAC/B,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,IAAU,EAAA;AAAA,IACtC,WAAA,EAAa,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,IAAA;AAAA,IACtC,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,UAAU,IAAA,CAAK;AAAA,GACnB;AACA,EAAA,OAAO,UAAA;AACX,CAAC;AAaM,IAAM,iBAAA,GAAoB,EAAE,IAAA,CAAK;AAAA,EACpC,OAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACJ,CAAC;AAkCM,IAAM,oBAA4C,CAAA,CAAE,IAAA;AAAA,EAAK,MAC5D,EAAE,MAAA,CAAO;AAAA,IACL,MAAM,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,wBAAwB,CAAA;AAAA,IAChD,IAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,IAC/B,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,IAC9B,QAAQ,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,IACrC,MAAM,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,IACnC,MAAA,EAAQ,kBAAkB,QAAA,EAAS;AAAA,IACnC,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACzB,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACzB,KAAA,EAAO,kBAAkB,QAAA,EAAS;AAAA,IAClC,QAAA,EAAU,qBAAqB,QAAA;AAAS,GAC3C,CAAA,CAAE,MAAA;AAAA,IACC,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,UAAA,IAAc,MAAM,QAAA,KAAa,MAAA;AAAA,IAC3D,EAAE,OAAA,EAAS,qDAAA,EAAuD,IAAA,EAAM,CAAC,UAAU,CAAA;AAAE;AAE7F;AAYO,IAAM,WAAA,GAAc;AC1LpB,IAAM,YAAA,GAAe;AAAA,EACxB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA;AACJ;AAIO,IAAM,gBAAA,GAAmBA,CAAAA,CAAE,IAAA,CAAK,YAAY;AAS5C,IAAM,gBAAgB,CAAC,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,SAAS,WAAW;AAIpE,IAAM,iBAAA,GAAoBA,CAAAA,CAAE,IAAA,CAAK,aAAa;AAS9C,IAAM,UAAA,GAAa;AAAA,EACtB,YAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ;AAIO,IAAM,cAAA,GAAiBA,CAAAA,CAAE,IAAA,CAAK,UAAU;AAkBxC,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACvC,QAAQA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,EAAGA,EAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,EAC1D,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACzB,IAAA,EAAMA,EAAE,OAAA;AACZ,CAAC;AAuBM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC3C,IAAA,EAAM,gBAAA;AAAA,EACN,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,YAAYA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACzC,KAAA,EAAO,kBAAkB,QAAA,EAAS;AAAA,EAClC,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACxB,CAAC;AAwBM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EACxC,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,OAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACpC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,OAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACpC,UAAA,EAAYA,CAAAA,CAAE,MAAA,CAAO,kBAAkB,EAAE,QAAA;AAC7C,CAAC;AAsBM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACvC,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,OAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACpC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,OAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACpC,UAAA,EAAYA,CAAAA,CAAE,MAAA,CAAO,kBAAkB,EAAE,QAAA;AAC7C,CAAC;AAqBM,IAAM,cAAA,GAAiBA,EAAE,MAAA,CAAO;AAAA,EACnC,QAAA,EAAU,cAAA;AAAA,EACV,KAAA,EAAO,iBAAA;AAAA,EACP,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAO,kBAAkB;AACzC,CAAC;AAmBM,SAAS,cAAA,CAAe,MAAkB,QAAA,EAA0B;AACvE,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAC9B;AAKO,SAAS,cAAc,GAAA,EAAwD;AAClF,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,OAAO,EAAE,MAAM,KAAA,CAAM,CAAC,GAAG,QAAA,EAAU,KAAA,CAAM,CAAC,CAAA,EAAE;AAChD;AAKO,SAAS,4BAA4B,IAAA,EAA4B;AACpE,EAAA,QAAQ,IAAA;AAAM,IACV,KAAK,QAAA;AACD,MAAA,OAAO,CAAC,MAAA,EAAQ,KAAA,EAAO,QAAQ,MAAA,EAAQ,QAAA,EAAU,QAAQ,KAAK,CAAA;AAAA,IAClE,KAAK,OAAA;AACD,MAAA,OAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAU,QAAQ,KAAK,CAAA;AAAA,IACnD,KAAK,KAAA;AACD,MAAA,OAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAAA,IAClC,KAAK,MAAA;AACD,MAAA,OAAO,CAAC,QAAQ,WAAW,CAAA;AAAA,IAC/B,KAAK,MAAA;AACD,MAAA,OAAO,CAAC,QAAQ,CAAA;AAAA,IACpB,KAAK,YAAA;AACD,MAAA,OAAO,CAAC,KAAA,EAAO,KAAA,EAAO,QAAQ,CAAA;AAAA,IAClC,KAAK,QAAA;AACD,MAAA,OAAO,CAAC,MAAM,CAAA;AAAA,IAClB,KAAK,IAAA;AACD,MAAA,OAAO,CAAC,QAAA,EAAU,OAAA,EAAS,SAAA,EAAW,UAAU,CAAA;AAAA,IACpD,KAAK,YAAA;AACD,MAAA,OAAO,CAAC,MAAM,CAAA;AAAA,IAClB,KAAK,SAAA;AACD,MAAA,OAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AAAA,IACnC;AACI,MAAA,OAAO,CAAC,MAAM,CAAA;AAAA;AAE1B;AAKO,SAAS,uBAAA,CACZ,UACA,kBAAA,EACqC;AACrC,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,UAAA,IAAc,EAAC;AACzC,EAAA,MAAM,OAAA,GAAU,mBAAmB,MAAA,CAAO,CAAC,SAAS,CAAC,QAAA,CAAS,QAAA,CAAS,IAAI,CAAC,CAAA;AAC5E,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,CAAQ,MAAA,KAAW,GAAG,OAAA,EAAQ;AAClD;;;AC3PO,IAAM,uBAAA,GAA0BA,EAAE,IAAA,CAAK;AAAA,EAC1C,YAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACJ,CAAC;AA4CM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EACxC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,yBAAyB,CAAA;AAAA,EACjD,WAAA,EAAa,uBAAA,CAAwB,OAAA,CAAQ,YAAY,CAAA;AAAA,EACzD,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,QAAQA,CAAAA,CAAE,KAAA,CAAM,iBAAiB,CAAA,CAAE,GAAA,CAAI,GAAG,gCAAgC,CAAA;AAAA,EAC1E,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAOA,EAAE,OAAA,EAAS,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACnD,UAAA,EAAYA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACjC,UAAA,EAAYA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,aAAA,EAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,QAAA,EAAU,uBAAuB,QAAA;AACrC,CAAC;AAYM,IAAM,YAAA,GAAe;AAUrB,SAAS,iBAAiB,MAAA,EAA2C;AACxE,EAAA,IAAI,MAAA,CAAO,gBAAgB,YAAA,EAAc;AACrC,IAAA,OAAO,MAAA;AAAA,EACX;AAEA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,WAAA,EAAY,GAAI,GAAA;AACvC;AAKO,SAAS,gBAAgB,MAAA,EAAgC;AAC5D,EAAA,OAAO,OAAO,WAAA,KAAgB,SAAA;AAClC;AAKO,SAAS,kBAAkB,MAAA,EAAgC;AAC9D,EAAA,OAAO,OAAO,WAAA,KAAgB,WAAA;AAClC;ACzGO,IAAM,cAAA,GAAiBA,EAAE,IAAA,CAAK;AAAA,EACjC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA;AACJ,CAAC;AAkBM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACvC,KAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,uBAAuB,CAAA;AAAA,EAC9C,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,QAAQA,CAAAA,CAAE,MAAA,CAAOA,EAAE,OAAA,EAAS,EAAE,QAAA;AAClC,CAAC;AAyCM,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC5C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,uBAAuB,CAAA;AAAA,EAC/C,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,uBAAuB,CAAA,CAAE,UAAA,CAAW,GAAA,EAAK,wBAAwB,CAAA;AAAA,EACzF,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,4BAA4B,CAAA;AAAA,EAC7D,QAAQA,CAAAA,CAAE,KAAA,CAAM,kBAAkB,CAAA,CAAE,GAAA,CAAI,GAAG,mCAAmC,CAAA;AAAA,EAC9E,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtB,CAAC,EAAE,MAAA;AAOI,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA,EACtC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,uBAAuB,CAAA;AAAA,EAC/C,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,uBAAuB,CAAA,CAAE,UAAA,CAAW,GAAA,EAAK,wBAAwB,CAAA;AAAA,EACzF,QAAA,EAAU,eAAe,QAAA,EAAS;AAAA,EAClC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,aAAA,EAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAM,kBAAkB,EAAE,QAAA,EAAS;AAAA,EAC7C,SAAA,EAAWA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC3B,CAAC,EAAE,MAAA;AAaI,IAAM,UAAA,GAAa;AC5GnB,IAAM,QAAA,GAAW;AAAA;AAAA,EAEpB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAEA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA;AAAA,EAEA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACJ;AAIO,IAAM,YAAA,GAAeA,CAAAA,CAAE,IAAA,CAAK,QAAQ;AAiTpC,IAAM,YAAA,GAAeA,EAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,MAAA;AAAA,EACpD,CAAC,GAAA,KAAQ,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA;AAAA,EAC3B,EAAE,SAAS,wEAAA;AACf;AAOO,SAAS,SAAS,KAAA,EAAiC;AACtD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,IAAK,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,QAAA;AAC3E;AAKO,IAAM,aAAA,GAAgB;AAUtB,SAAS,GAAA,CAAI,SAAiB,KAAA,EAAsB;AACvD,EAAA,OAAO,CAAC,KAAA,EAAO,OAAA,EAAS,KAAK,CAAA;AACjC;AAMO,SAAS,IAAA,CAAK,OAAe,OAAA,EAA2C;AAC3E,EAAA,OAAO,OAAA,GAAU,CAAC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA,GAAI,CAAC,QAAQ,KAAK,CAAA;AAC9D;AAQO,SAAS,QAAA,CAAS,MAAc,MAAA,EAAiD;AACpF,EAAA,OAAO,MAAA,GAAS,CAAC,UAAA,EAAY,IAAA,EAAM,MAAM,CAAA,GAAI,CAAC,YAAY,IAAI,CAAA;AAClE;AAeO,SAAS,QAAA,CACZ,MAAA,EACA,OAAA,EACA,KAAA,EACc;AACd,EAAA,OAAO,KAAA,GACD,CAAC,WAAA,EAAa,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAA,GACpC,CAAC,WAAA,EAAa,MAAA,EAAQ,OAAO,CAAA;AACvC;AAgBO,SAAS,OAAA,CACZ,MAAA,EACA,MAAA,EACA,IAAA,EACa;AACb,EAAA,IAAI,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,QAAA,EAAU;AAC5C,IAAA,OAAO,CAAC,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,IAAK,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,IAAA,GACD,CAAC,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA,GAChC,CAAC,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AACpC;AAMO,SAAS,WAAA,CACZ,aACA,MAAA,EACiB;AACjB,EAAA,OAAO,CAAC,cAAA,EAAgB,WAAA,EAAa,MAAM,CAAA;AAC/C;AAQO,SAAS,KAAA,CAAM,QAAgB,YAAA,EAAqD;AACvF,EAAA,OAAO,YAAA,GAAe,CAAC,OAAA,EAAS,MAAA,EAAQ,YAAY,CAAA,GAAI,CAAC,SAAS,MAAM,CAAA;AAC5E;AAMO,SAAS,QAAQ,QAAA,EAAiC;AACrD,EAAA,OAAO,CAAC,WAAW,QAAQ,CAAA;AAC/B;AAMO,SAAS,aAAa,OAAA,EAA4B;AACrD,EAAA,OAAO,CAAC,IAAA,EAAM,GAAG,OAAO,CAAA;AAC5B;AAeO,SAAS,MAAA,CACZ,OAAA,EACA,OAAA,EACA,SAAA,EACY;AACZ,EAAA,OAAO,SAAA,GACD,CAAC,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,SAAS,CAAA,GACtC,CAAC,QAAA,EAAU,OAAA,EAAS,OAAO,CAAA;AACrC;AC5cO,IAAM,eAAA,GAAwCA,EAAE,KAAA,CAAM;AAAA,EAC3DA,EAAE,MAAA,EAAO;AAAA,EACTA,EAAE,MAAA,EAAO;AAAA,EACTA,EAAE,OAAA,EAAQ;AAAA,EACVA,EAAE,IAAA,EAAK;AAAA,EACPA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,OAAA,EAAS;AAAA;AACtB,CAAC;AAMM,IAAM,cAAgCA,CAAAA,CAAE,IAAA;AAAA,EAAK,MAClDA,EAAE,KAAA,CAAM;AAAA,IACN,eAAA;AAAA,IACAA,CAAAA,CACG,KAAA,CAAMA,CAAAA,CAAE,IAAA,CAAK,MAAM,WAAW,CAAC,CAAA,CAC/B,GAAA,CAAI,CAAC,CAAA,CACL,MAAA;AAAA,MACC,CAAC,GAAA,KAAQ,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA;AAAA,MAC3B,EAAE,SAAS,iEAAA;AAAkE;AAC/E,GACH;AACH;AAQO,IAAM,gBAAA,GAA0C;AAahD,SAAS,QAAQ,KAAA,EAAkC;AACxD,EAAA,OACE,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IACnB,KAAA,CAAM,SAAS,CAAA,IACf,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,QAAA;AAExB;AAMO,SAAS,YAAY,KAAA,EAAoC;AAC9D,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;AACjC,EAAA,MAAM,OAAO,OAAO,KAAA;AACpB,EAAA,OAAO,SAAS,QAAA,IAAY,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,aAAa,IAAA,KAAS,QAAA;AAClF;AAMO,SAAS,UAAU,KAAA,EAAiC;AACzD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,WAAW,GAAG,CAAA;AAC1D;AAMO,SAAS,YAAY,KAAA,EAAkC;AAC5D,EAAA,OAAO,QAAQ,KAAK,CAAA;AACtB;AAwBO,IAAM,aAAA,GAAgB,CAAC,QAAA,EAAU,SAAA,EAAW,SAAS,KAAA,EAAO,QAAA,EAAU,YAAY,OAAO;AAUzF,SAAS,aAAa,OAAA,EAAuC;AAClE,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA;AAGrC,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,CAAM,GAAG,CAAA;AAErC,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,CAAC,MAAM,EAAA,EAAI;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAG1B,EAAA,MAAM,MAAA,GAAU,aAAA,CAAoC,QAAA,CAAS,IAAI,CAAA;AAEjE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAS,MAAA,GAAS,QAAA;AAAA,IACxB,IAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA,EAAU;AAAA,GACZ;AACF;AAQO,SAAS,eAAe,OAAA,EAA0B;AACvD,EAAA,MAAM,MAAA,GAAS,aAAa,OAAO,CAAA;AACnC,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAIpB,EAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,OAAA,IAAW,MAAA,CAAO,SAAS,KAAA,EAAO;AACpD,MAAA,OAAO,MAAA,CAAO,KAAK,MAAA,KAAW,CAAA;AAAA,IAChC;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,OAAO,MAAA,CAAO,KAAK,MAAA,GAAS,CAAA;AAC9B;AAYO,SAAS,YAAY,IAAA,EAA4B;AACtD,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG,OAAO,IAAA;AAC3B,EAAA,OAAO,KAAK,CAAC,CAAA;AACf;AAQO,SAAS,QAAQ,IAAA,EAAsB;AAC5C,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAI,CAAA,SAAU,EAAC;AAC5B,EAAA,OAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AACrB;AASO,SAAS,KAAA,CAAM,aAAqB,IAAA,EAAwB;AACjE,EAAA,OAAO,CAAC,QAAA,EAAU,GAAG,IAAI,CAAA;AAC3B;AAQO,SAAS,UACd,IAAA,EACA,OAAA,EACA,MAAA,GAAyB,IAAA,EACzB,QAAgB,CAAA,EACV;AACN,EAAA,OAAA,CAAQ,IAAA,EAAM,QAAQ,KAAK,CAAA;AAE3B,EAAA,IAAI,OAAA,CAAQ,IAAI,CAAA,EAAG;AACjB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAG,OAAA,EAAS,MAAM,CAAC,CAAA;AAAA,IACrC;AAAA,EACF;AACF;AAQO,SAAS,gBAAgB,IAAA,EAAuB;AACrD,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,SAAA,CAAU,IAAA,EAAM,CAAC,IAAA,KAAS;AACxB,IAAA,IAAI,SAAA,CAAU,IAAI,CAAA,EAAG;AACnB,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IACpB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,QAAA;AACT;;;AC1PO,IAAM,WAAA,GAAcA,EAAE,MAAA,CAAO;AAAA,EAClC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,wBAAwB,CAAA;AAAA,EAChD,SAAA,EAAWA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAChC,UAAA,EAAYA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAASA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAASA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACtC,QAAQA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA;AAC9B,CAAC;AAeM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACzC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,IAAA,EAAMA,EAAE,IAAA,CAAK,CAAC,UAAU,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,OAAO,CAAC,CAAA;AAAA,EAC/D,QAAA,EAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACxB,CAAC;AAoBM,IAAM,WAAA,GAAcA,EAAE,MAAA,CAAO;AAAA,EAClC,KAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,uBAAuB,CAAA;AAAA,EAC9C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,wBAAwB,CAAA;AAAA,EAChD,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,aAAA,EAAeA,CAAAA,CAAE,KAAA,CAAM,kBAAkB,EAAE,QAAA,EAAS;AAAA,EACpD,cAAA,EAAgBA,EAAE,IAAA,CAAK,CAAC,UAAU,QAAQ,CAAC,EAAE,QAAA,EAAS;AAAA,EACtD,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC3B,CAAC;AAwBM,IAAM,WAAA,GAAcA,EAAE,MAAA,CAAO;AAAA,EAClC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,wBAAwB,CAAA;AAAA,EAChD,UAAA,EAAY,gBAAA;AAAA,EACZ,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC;AAqCM,IAAM,gBAAA,GAAmBA,EAAE,MAAA,CAAO;AAAA,EACvC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,qCAAqC,CAAA;AAAA,EAC7D,IAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,qCAAqC,CAAA;AAAA,EAC3D,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,8BAA8B,CAAA;AAAA,EACvD,KAAA,EAAO,iBAAiB,OAAA,EAAQ;AAAA,EAChC,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,YAAY,EAAE,QAAA,EAAS;AAAA,EACxC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,OAAA;AAC1B,CAAC;AAoBM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACzC,QAAQA,CAAAA,CAAE,KAAA,CAAM,WAAW,CAAA,CAAE,GAAA,CAAI,GAAG,gCAAgC,CAAA;AAAA,EACpE,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAM,WAAW,CAAA;AAAA,EAC3B,WAAA,EAAaA,CAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA,EACrC,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAM,WAAW,EAAE,QAAA;AAC/B,CAAC;AA8BM,SAAS,eAAe,KAAA,EAAwB;AACrD,EAAA,OAAO,CAAC,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA;AAC9B;;;ACtLO,IAAM,mBAAA,GAAsBA,EAAE,IAAA,CAAK;AAAA,EACtC,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACJ,CAAC;AAsBM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC3C,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,IAAA,EAAMA,EAAE,IAAA,CAAK;AAAA,IACT,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACH,CAAA;AAAA,EACD,QAAA,EAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,OAAA,EAASA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAQA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA;AAChC,CAAC;AAoBM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,QAAQA,CAAAA,CAAE,KAAA,CAAM,sBAAsB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAC7C,UAAA,EAAYA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAASA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,SAAA,EAAWA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAChC,OAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA;AAC/B,CAAC;AA8BM,IAAM,eAAA,GAAkBA,EAAE,MAAA,CAAO;AAAA,EACpC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,EAAGA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAU,CAAC,CAAA;AAAA,EAC7D,WAAWA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACxC,OAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACpC,KAAA,EAAO,iBAAiB,QAAA,EAAS;AAAA,EACjC,SAASA,CAAAA,CAAE,KAAA,CAAM,YAAY,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EACpC,OAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA;AAC/B,CAAC;AAaM,IAAM,mBAAmBA,CAAAA,CAAE,IAAA,CAAK,CAAC,UAAA,EAAY,UAAU,CAAC;AAuBxD,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC5C,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,IAAA,EAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,UAAU,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,QAAQ,CAAC,CAAA;AAAA,EACzE,QAAA,EAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC3B,CAAC;AAyBM,IAAM,wBAAA,GAA2BA,EAAE,MAAA,CAAO;AAAA,EAC7C,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,KAAA;AAAA,IACrB,mBAAA;AAAA,IACA;AAAA,GACJ;AAAA,EACA,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,uBAAuB,EAAE,QAAA,EAAS;AAAA,EACnD,KAAA,EAAO,iBAAiB,QAAA;AAC5B,CAAC;AA4BM,IAAM,wBAAA,GAA2BA,EAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,KAAA,EAAO,iBAAiB,QAAA,EAAS;AAAA,EACjC,KAAA,EAAO,iBAAiB,QAAA,EAAS;AAAA,EACjC,gBAAgBA,CAAAA,CAAE,MAAA,CAAOA,EAAE,MAAA,EAAQ,EAAE,QAAA;AACzC,CAAC;AAeM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EACxC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,IAAA,EAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,WAAA,EAAa,UAAA,EAAY,MAAM,CAAC,CAAA;AAAA,EACxG,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC5B,CAAC;AAgBM,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EACzC,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACrB,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,MAAA,EAAQA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,CAAOA,EAAE,OAAA,EAAS,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACjD,WAAWA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA;AACnC,CAAC;AA2EM,IAAM,WAAA,GAAcA,EAAE,MAAA,CAAO;AAAA,EAChC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,yBAAA,EAA2BA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/C,QAAA,EAAU,oBAAoB,QAAA,EAAS;AAAA,EACvC,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,cAAA,EAAgBA,CAAAA,CAAE,KAAA,CAAM,mBAAmB,EAAE,QAAA,EAAS;AAAA,EACtD,YAAA,EAAcA,CAAAA,CAAE,KAAA,CAAM,qBAAqB,EAAE,QAAA,EAAS;AAAA,EACtD,YAAA,EAAc,mBAAmB,QAAA,EAAS;AAAA,EAC1C,cAAA,EAAgBA,CAAAA,CAAE,KAAA,CAAM,YAAY,EAAE,QAAA,EAAS;AAAA,EAC/C,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,eAAe,EAAE,QAAA,EAAS;AAAA,EACzC,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,wBAAwB,EAAE,QAAA,EAAS;AAAA,EAClD,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,wBAAwB,EAAE,QAAA,EAAS;AAAA,EACpD,IAAIA,CAAAA,CAAE,MAAA,CAAOA,EAAE,OAAA,EAAS,EAAE,QAAA;AAC9B,CAAC;AAGM,IAAM,cAAA,GAAiBA,EAAE,KAAA,CAAM;AAAA,EAClCA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA;AAAA,EAChBA,EAAE,MAAA,CAAO;AAAA,IACL,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,IACrB,QAAQA,CAAAA,CAAE,MAAA,CAAOA,EAAE,OAAA,EAAS,EAAE,QAAA,EAAS;AAAA,IACvC,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GACrC,CAAA;AAAA,EACD;AAAA;AACJ,CAAC;AASM,SAAS,cAAc,QAAA,EAAuC;AACjE,EAAA,OAAO,OAAO,QAAA,KAAa,QAAA,IAAY,MAAA,IAAU,QAAA,IAAY,EAAE,KAAA,IAAS,QAAA,CAAA;AAC5E;AAKO,SAAS,aAAa,QAAA,EAA4B;AACrD,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAC9B,IAAA,OAAO,QAAA;AAAA,EACX;AACA,EAAA,IAAI,aAAA,CAAc,QAAQ,CAAA,EAAG;AACzB,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AACA,EAAA,OAAO,QAAA,CAAS,GAAA;AACpB;AAKO,SAAS,eAAe,QAAA,EAAyD;AACpF,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAC9B,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,IAAI,aAAA,CAAc,QAAQ,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,OAAO,QAAA,CAAS,MAAA;AACpB;AAKO,SAAS,kBAAkB,QAAA,EAAuE;AACrG,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAC9B,IAAA,OAAO,EAAE,KAAK,QAAA,EAAS;AAAA,EAC3B;AACA,EAAA,IAAI,aAAA,CAAc,QAAQ,CAAA,EAAG;AACzB,IAAA,OAAO,EAAE,GAAA,EAAK,QAAA,CAAS,IAAA,EAAK;AAAA,EAChC;AACA,EAAA,OAAO,QAAA;AACX;AAWO,IAAM,qBAAA,GAAwB;ACrb9B,IAAM,oBAAA,GAAuBA,EAAE,IAAA,CAAK;AAAA,EACzC,YAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,oBAAA;AAAA,EACA,QAAA;AAAA,EACA,oBAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC;AAUM,IAAM,uBAAA,GAA0B;AAAA,EACrC,MAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF;AAIO,IAAM,4BAA4BA,CAAAA,CAAE,IAAA,CAAK,CAAC,GAAG,uBAAuB,CAAC;AAuBrE,IAAM,qBAAA,GAAwBA,EAAE,IAAA,CAAK;AAAA,EAC1C,YAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC;AAWM,IAAM,2BAA2BA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,QAAQ,CAAC;AAsB5D,IAAM,uBAAA,GAA0BA,EAAE,IAAA,CAAK;AAAA,EAC5C,SAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAC;AAUM,IAAM,uBAAA,GAA0BA,EAAE,IAAA,CAAK;AAAA,EAC5C,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,mBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAC;AAUM,IAAM,wBAAA,GAA2BA,EAAE,IAAA,CAAK;AAAA,EAC7C,aAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAC;AAyBM,IAAM,sBAAA,GAAyBA,CAAAA,CACnC,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAC7B,QAAA;AAkBI,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA,EACxC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,MAAA,EAAQA,EAAE,IAAA,CAAK,CAAC,UAAU,QAAA,EAAU,SAAS,CAAC,CAAA,CAAE,QAAA;AAClD,CAAC;AAuCM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,8BAA8B,CAAA;AAAA,EACzD,eAAA,EAAiBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACrC,QAAA,EAAU,yBAAA;AAAA,EACV,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAM,iBAAiB,EAAE,QAAA,EAAS;AAAA,EAC9C,UAAA,EAAY,uBAAuB,QAAA;AACrC,CAAC;AAgCM,IAAM,aAAA,GAAgBA,EAAE,MAAA,CAAO;AAAA,EACpC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,aAAA,EAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,YAAA,EAAcA,EAAE,KAAA,CAAMA,CAAAA,CAAE,KAAK,MAAM,iBAAiB,CAAC,CAAA,CAAE,QAAA;AACzD,CAAC;AAcM,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA,EACxC,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,UAAA,EAAYA,EAAE,IAAA,CAAK,CAAC,QAAQ,QAAQ,CAAC,EAAE,QAAA;AACzC,CAAC;AAmBM,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EAC3C,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACpB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC7B,SAAA,EAAWA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAC;AACtC,CAAC;AAsBM,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,KAAA,EAAOA,CAAAA,CACJ,IAAA,CAAK,CAAC,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,aAAA,EAAe,WAAW,CAAC,CAAA,CACjE,QAAA,EAAS;AAAA,EACZ,YAAA,EAAcA,EACX,MAAA,EAAO,CACP,MAAM,mBAAA,EAAqB,yBAAyB,EACpD,QAAA,EAAS;AAAA,EACZ,MAAA,EAAQA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,UAAU,SAAA,EAAW,KAAK,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAChE,QAAA,EAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,OAAA,EAAS,cAAc,QAAA;AACzB,CAAC;AAsBM,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA,EACxC,MAAA,EAAQA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EAClD,KAAA,EAAOA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EACjD,OAAA,EAASA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EACnD,UAAA,EAAYA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EACtD,OAAA,EAASA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA;AAC5C,CAAC;AAkBM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACzC,MAAA,EAAQA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EAClD,KAAA,EAAOA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EACjD,OAAA,EAASA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EACnD,UAAA,EAAYA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EACtD,OAAA,EAASA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA;AAC5C,CAAC;AAcM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EAC5C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,wBAAwB,CAAA;AAAA,EAChD,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAUA,EAAE,MAAA,CAAOA,CAAAA,CAAE,QAAO,EAAG,kBAAkB,EAAE,QAAA;AACrD,CAAC;AAYM,SAAS,iBAAiB,KAAA,EAAkC;AACjE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA;AAC1B;AAKO,IAAM,oBAAA,GAAuBA,CAAAA,CACjC,MAAA,EAAO,CACP,KAAA;AAAA,EACC,4BAAA;AAAA,EACA;AACF;AAEK,IAAM,cAAA,GAAiBA,EAAE,KAAA,CAAM;AAAA,EACpC,qBAAA;AAAA,EACA;AACF,CAAC;AA0BM,IAAM,qBAAqBA,CAAAA,CAC/B,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAC,EACnD,QAAA;AAUI,IAAM,yBAAA,GAA4B;AAAA,EACvC,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;AAsBO,IAAM,6BAAA,GAAgCA,EAAE,MAAA,CAAO;AAAA,EACpD,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACxB,SAAA,EAAWA,CAAAA,CAAE,IAAA,CAAK,yBAAyB,CAAA;AAAA,EAC3C,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,OAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACpC,OAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA;AAC7B,CAAC;AAOM,IAAM,sBAAA,GAAyBA,EACnC,MAAA,CAAOA,CAAAA,CAAE,QAAO,EAAG,6BAA6B,EAChD,QAAA;ACrkBI,IAAM,aAAA,GAAgB,CAAC,MAAA,EAAQ,QAAA,EAAU,KAAK;AAI9C,IAAM,iBAAA,GAAoBA,CAAAA,CAAE,IAAA,CAAK,aAAa;AAkE9C,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EAC3C,IAAA,EAAMA,EAAE,IAAA,CAAK,CAAC,WAAW,QAAA,EAAU,OAAA,EAAS,QAAQ,CAAC,CAAA;AAAA,EACrD,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,QAAA,EAAUA,EAAE,IAAA,CAAK,CAAC,SAAS,QAAQ,CAAC,EAAE,QAAA,EAAS;AAAA,EAC/C,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACxB,CAAC;AAEM,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EAC3C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,0BAA0B,CAAA;AAAA,EAClD,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,EACtB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,8BAA8B,CAAA;AAAA,EACtD,SAASA,CAAAA,CAAE,MAAA,CAAOA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACvC,IAAA,EAAM,qBAAqB,QAAA,EAAS;AAAA,EACpC,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACjC,CAAC;AA4DM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACzC,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC3B,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ;AAC9B,CAAC;AAEM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,0BAA0B,CAAA;AAAA,EAClD,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACxB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,6BAA6B,CAAA;AAAA,EACjD,MAAA,EAAQ,kBAAA;AAAA,EACR,SAAA,EAAWA,EACR,MAAA,CAAO;AAAA,IACN,OAAA,EAASA,EAAE,OAAA,EAAQ;AAAA,IACnB,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC5C,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAAS,GACzC,EACA,QAAA;AACL,CAAC;AAuCM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,0BAA0B,CAAA;AAAA,EAClD,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,KAAK,CAAA;AAAA,EACrB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,yBAAyB,CAAA;AAAA,EACvD,YAAA,EAAcA,EACX,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAChB,GAAA,CAAI,CAAA,EAAG,qCAAqC,CAAA;AAAA,EAC/C,KAAKA,CAAAA,CAAE,MAAA,CAAOA,EAAE,MAAA,EAAQ,EAAE,QAAA;AAC5B,CAAC;AAcM,IAAM,uBAAA,GAA0BA,CAAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAAA,EAClE,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAC;AAgBM,SAAS,mBAAmB,OAAA,EAAwC;AACzE,EAAA,OAAO,OAAO,OAAA,KAAY,QAAA;AAC5B;AAKO,IAAM,sBAAA,GAAyBA,CAAAA,CACnC,MAAA,EAAO,CACP,KAAA;AAAA,EACC,qDAAA;AAAA,EACA;AACF;AAEK,IAAM,gBAAA,GAAmBA,EAAE,KAAA,CAAM;AAAA,EACtC,uBAAA;AAAA,EACA;AACF,CAAC;AAMM,SAAS,gBACd,GAAA,EAC+C;AAC/C,EAAA,MAAM,QAAQ,GAAA,CAAI,KAAA;AAAA,IAChB;AAAA,GACF;AACA,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,OAAO,EAAE,OAAO,KAAA,CAAM,CAAC,GAAG,WAAA,EAAa,KAAA,CAAM,CAAC,CAAA,EAAE;AAClD;AASO,SAAS,cACd,OAAA,EAC2B;AAC3B,EAAA,OAAO,QAAQ,IAAA,KAAS,MAAA;AAC1B;AAKO,SAAS,gBACd,OAAA,EAC6B;AAC7B,EAAA,OAAO,QAAQ,IAAA,KAAS,QAAA;AAC1B;AAKO,SAAS,aACd,OAAA,EAC0B;AAC1B,EAAA,OAAO,QAAQ,IAAA,KAAS,KAAA;AAC1B;AAKO,SAAS,gBAAgB,QAAA,EAAyC;AACvE,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AACnC;AAKO,SAAS,WAAA,CACd,UACA,IAAA,EAC+B;AAC/B,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,WAAA,EAAY,KAAM,IAAA,CAAK,WAAA,EAAa,CAAA;AACzE;AAKO,SAAS,UAAA,CACd,UACA,IAAA,EACS;AACT,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,WAAA,EAAY,KAAM,IAAA,CAAK,WAAA,EAAa,CAAA;AACzE;;;ACxQO,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EAC3C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,2BAA2B,CAAA;AAAA,EACnD,IAAIA,CAAAA,CACD,MAAA,GACA,GAAA,CAAI,CAAA,EAAG,mBAAmB,CAAA,CAC1B,KAAA;AAAA,IACC,qBAAA;AAAA,IACA;AAAA;AAEN,CAAC;AAyBM,SAAS,kBAAkB,MAAA,EAAqC;AACrE,EAAA,OAAO,OAAO,MAAA,KAAW,QAAA;AAC3B;AAKO,IAAM,qBAAA,GAAwBA,CAAAA,CAClC,MAAA,EAAO,CACP,KAAA;AAAA,EACC,6BAAA;AAAA,EACA;AACF;AAEK,IAAM,kBAAkBA,CAAAA,CAAE,KAAA,CAAM,CAAC,YAAA,EAAc,qBAAqB,CAAC;AA8CrE,SAAS,sBAAsB,IAAA,EAA+B;AACnE,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA;AACzB;AAKO,SAAS,sBAAsB,IAAA,EAAsC;AAC1E,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,KAAA,IAAS,IAAA,IAAQ,EAAE,MAAA,IAAU,IAAA,CAAA;AAClE;AAKO,SAAS,gBAAgB,IAAA,EAA+C;AAC7E,EAAA,OAAO,qBAAA,CAAsB,IAAI,CAAA,IAAK,qBAAA,CAAsB,IAAI,CAAA;AAClE;AAKO,IAAM,mBAAA,GAAsBA,CAAAA,CAChC,MAAA,EAAO,CACP,KAAA;AAAA,EACC,+CAAA;AAAA,EACA;AACF;AAEK,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,GAAA,EAAK,mBAAA;AAAA,EACL,MAAMA,CAAAA,CAAE,MAAA,GAAS,UAAA,CAAW,GAAG,EAAE,QAAA;AACnC,CAAC;AAEM,IAAM,aAAA,GAAgBA,EAAE,KAAA,CAAM;AAAA,EACnC,UAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAC;AAmB2CA,CAAAA,CACzC,MAAA,EAAO,CACP,KAAA;AAAA,EACC,mDAAA;AAAA,EACA;AACF;AAKK,SAAS,mBAAmB,GAAA,EAAsB;AACvD,EAAA,OAAO,gDAAA,CAAiD,KAAK,GAAG,CAAA;AAClE;AAMO,SAAS,sBACd,GAAA,EAC6C;AAC7C,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,oDAAoD,CAAA;AAC5E,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,OAAO,EAAE,OAAO,KAAA,CAAM,CAAC,GAAG,SAAA,EAAW,KAAA,CAAM,CAAC,CAAA,EAAE;AAChD;AAMO,SAAS,eAAe,GAAA,EAAuC;AACpE,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,+BAA+B,CAAA;AACvD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,EAAE;AAC3B;AAMO,SAAS,aACd,GAAA,EAC4C;AAC5C,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,mDAAmD,CAAA;AAC3E,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,OAAO,EAAE,OAAO,KAAA,CAAM,CAAC,GAAG,QAAA,EAAU,KAAA,CAAM,CAAC,CAAA,EAAE;AAC/C;AAmBO,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpB,CAAC;AAkBM,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC;AAmBM,IAAM,2BAAA,GAA8BA,EAAE,MAAA,CAAO;AAAA,EAClD,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,aAAA,EAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC/B,MAAA,EAAQ,iBAAA;AAAA,EACR,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,uBAAuB,EAAE,QAAA;AAC5C,CAAC;AAmBM,IAAM,2BAAA,GAA8BA,EAAE,MAAA,CAAO;AAAA,EAClD,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,KAAA,EAAO,iBAAiB,QAAA,EAAS;AAAA,EACjC,gBAAgBA,CAAAA,CAAE,MAAA,CAAOA,EAAE,MAAA,EAAQ,EAAE,QAAA;AACvC,CAAC;AAwKM,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,0BAA0B,CAAA;AAAA,EAClD,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,aAAA,EAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAEnC,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAM,oBAAoB,EAAE,QAAA,EAAS;AAAA;AAAA,EAE7C,KAAA,EAAO,eAAe,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAM,gBAAgB,EAAE,QAAA,EAAS;AAAA;AAAA,EAE7C,MAAA,EAAQ,eAAA;AAAA,EACR,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAM,cAAc,CAAA;AAAA,EAC9B,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,aAAa,CAAA;AAAA;AAAA,EAE5B,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,2BAA2B,EAAE,QAAA,EAAS;AAAA,EACrD,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,2BAA2B,EAAE,QAAA,EAAS;AAAA;AAAA,EAEvD,SAASA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAEtC,aAAA,EAAe,oBAAoB,QAAA,EAAS;AAAA,EAC5C,MAAA,EAAQ,wBAAwB,QAAA,EAAS;AAAA,EACzC,eAAA,EAAiBA,CAAAA,CAAE,KAAA,CAAM,oBAAoB,EAAE,QAAA;AACjD,CAAC;AAEM,IAAM,aAAA,GAAgB;AAUtB,SAAS,oBACd,OAAA,EAC8B;AAC9B,EAAA,OAAO,QAAA,IAAY,OAAA;AACrB;AAUO,IAAM,iBAAA,GAAoB;ACjiB1B,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC7B,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC/B,IAAA,EAAMA,EAAE,IAAA,CAAK,CAAC,SAAS,MAAA,EAAQ,QAAQ,CAAC,CAAA,CAAE,QAAA;AAAS,GACpD,EACA,QAAA,EAAS;AAAA,EACZ,UAAUA,CAAAA,CAAE,MAAA,CAAOA,EAAE,OAAA,EAAS,EAAE,QAAA,EAAS;AAAA,EACzC,GAAA,EAAKA,EACF,MAAA,CAAO;AAAA,IACN,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC7B,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC9B,EACA,QAAA;AACL,CAAC;AAsDM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,yBAAyB,CAAA;AAAA,EACjD,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,aAAA,EAAe,oBAAoB,QAAA,EAAS;AAAA,EAC5C,MAAA,EAAQ,wBAAwB,QAAA,EAAS;AAAA,EACzC,YAAA,EAAc,kBAAA;AAAA,EACd,cAAA,EAAgB,sBAAA;AAAA,EAChB,UAAUA,CAAAA,CACP,KAAA,CAAM,aAAgB,CAAA,CACtB,GAAA,CAAI,GAAG,kCAAkC,CAAA;AAAA,EAC5C,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAM,uBAAuB,EAAE,QAAA,EAAS;AAAA,EACpD,MAAA,EAAQ,oBAAoB,QAAA;AAC9B,CAAC;AASM,SAAS,mBAAmB,IAAA,EAA8B;AAC/D,EAAA,OAAO,mBAAA,CAAoB,MAAM,IAAI,CAAA;AACvC;AAKO,SAAS,uBAAuB,IAAA,EAAe;AACpD,EAAA,OAAO,mBAAA,CAAoB,UAAU,IAAI,CAAA;AAC3C;AChHO,IAAM,kBAAkB,MAAMC;ACA9B,IAAM,aAAA,GAAgBD,CAAAA,CAAE,MAAA,EAAO,CAAE,MAAA;AAAA,EACtC,CAAC,GAAA,KAAQ;AACP,IAAA,IAAI,CAAC,GAAA,CAAI,UAAA,CAAW,GAAG,GAAG,OAAO,KAAA;AACjC,IAAA,MAAM,QAAQ,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA;AACpC,IAAA,IAAI,MAAM,MAAA,KAAW,CAAA,IAAK,MAAM,CAAC,CAAA,KAAM,IAAI,OAAO,KAAA;AAElD,IAAA,OAAO,MAAM,KAAA,CAAM,CAAC,SAAS,0BAAA,CAA2B,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EACpE,CAAA;AAAA,EACA,EAAE,SAAS,8DAAA;AACb;AASO,IAAM,YAAA,GAAe;AAAA,EAC1B,MAAA,EAAQ;AAAA,IACN,WAAA,EAAa,+CAAA;AAAA,IACb,QAAA,EAAU,CAAC,gBAAA,EAAkB,WAAA,EAAa,gBAAgB,CAAA;AAAA,IAC1D,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,WAAA,EAAa,qCAAA;AAAA,IACb,QAAA,EAAU,CAAC,iBAAA,EAAmB,mBAAA,EAAqB,iBAAiB,CAAA;AAAA,IACpE,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,WAAA,EAAa,kCAAA;AAAA,IACb,QAAA,EAAU,CAAC,QAAQ,CAAA;AAAA,IACnB,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,GAAA,EAAK;AAAA,IACH,WAAA,EAAa,mCAAA;AAAA,IACb,QAAA,EAAU,CAAC,MAAM,CAAA;AAAA,IACjB,YAAA,EAAc;AAAA;AAElB;AAKO,IAAM,qBAAA,GAAwB;AAAA,EACnC,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,CAAC,QAAA,EAAU,SAAA,EAAW,SAAS,KAAK,CAAA;AAAA,IAC7C,WAAA,EAAa;AAAA,GACf;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,CAAC,QAAA,EAAU,SAAA,EAAW,SAAS,KAAK,CAAA;AAAA,IAC7C,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,CAAC,QAAA,EAAU,OAAA,EAAS,KAAK,CAAA;AAAA,IAClC,WAAA,EAAa;AAAA;AAEjB;AAeO,SAAS,wBAAA,CACd,SACA,OAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAQ,sBAAsB,OAAO,CAAA;AAE3C,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,IAAA,IAAI,CAAE,KAAA,CAAM,OAAA,CAA8B,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,EAAG;AAChE,MAAA,OAAO,CAAA,SAAA,EAAY,OAAA,CAAQ,IAAI,CAAA,mBAAA,EAAsB,OAAO,sBAAsB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,IAC5G;AAAA,EACF;AAGA,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,mBAAmB,OAAA,EAAmC;AACpE,EAAA,MAAM,KAAA,GAAQ,sBAAsB,OAAO,CAAA;AAC3C,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,KAAA,MAAW,OAAA,IAAW,MAAM,OAAA,EAAS;AACnC,IAAA,MAAM,GAAA,GAAM,aAAa,OAAO,CAAA;AAChC,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,GAAA,CAAI,QAAQ,CAAA;AAAA,EAC/B;AAGA,EAAA,QAAA,CAAS,IAAA,CAAK,uBAAuB,oBAAoB,CAAA;AAEzD,EAAA,OAAO,QAAA;AACT;ACtEO,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC3C,UAAA,EAAYA,EAAE,IAAA,CAAK,CAAC,SAAS,MAAA,EAAQ,QAAA,EAAU,MAAM,CAAC,CAAA;AAAA,EACtD,QAAA,EAAUA,EAAE,IAAA,CAAK,CAAC,SAAS,MAAA,EAAQ,QAAA,EAAU,MAAM,CAAC,CAAA;AAAA,EACpD,QAAA,EAAUA,EAAE,IAAA,CAAK,CAAC,UAAU,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,MAAM,CAAC,CAAA;AAAA,EAC9D,YAAYA,CAAAA,CAAE,IAAA,CAAK,CAAC,SAAA,EAAW,SAAA,EAAW,MAAM,CAAC,CAAA;AAAA,EACjD,eAAA,EAAiBA,EAAE,IAAA,CAAK,CAAC,iBAAiB,eAAA,EAAiB,aAAa,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACpF,WAAA,EAAaA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,QAAA,EAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC1B,CAAC;AASM,IAAM,0BAAA,GAA+D;AAAA,EACxE,QAAA,EAAU;AAAA,IACN,UAAA,EAAY,OAAA;AAAA,IACZ,QAAA,EAAU,OAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,SAAA;AAAA,IACZ,eAAA,EAAiB,eAAA;AAAA,IACjB,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,IAAA,EAAM;AAAA,IACF,UAAA,EAAY,MAAA;AAAA,IACZ,QAAA,EAAU,MAAA;AAAA,IACV,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,MAAA;AAAA,IACZ,QAAA,EAAU;AAAA,GACd;AAAA,EACA,IAAA,EAAM;AAAA,IACF,UAAA,EAAY,QAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY;AAAA,GAChB;AAAA,EACA,SAAA,EAAW;AAAA,IACP,UAAA,EAAY,OAAA;AAAA,IACZ,QAAA,EAAU,OAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,SAAA;AAAA,IACZ,eAAA,EAAiB;AAAA,GACrB;AAAA,EACA,OAAA,EAAS;AAAA,IACL,UAAA,EAAY,MAAA;AAAA,IACZ,QAAA,EAAU,MAAA;AAAA,IACV,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,SAAA;AAAA,IACZ,eAAA,EAAiB;AAAA;AAEzB;AAKO,SAAS,6BAA6B,MAAA,EAAkC;AAC3E,EAAA,OAAO,0BAAA,CAA2B,MAAM,CAAA,IAAK,0BAAA,CAA2B,QAAA;AAC5E;AC1GO,IAAM,iBAAA,GAAoBA,EAAE,MAAA;AAS5B,SAAS,kBAAA,GAA+B;AAC7C,EAAA,OAAO,CAAC,GAAGE,aAAc,CAAA;AAC3B;;;ACsTO,SAAS,wBAAA,CAAyB,MAAc,MAAA,EAAwD;AAC7G,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAQ,EAAC;AAAA,IACT,QAAQ,EAAC;AAAA,IACT,aAAa,EAAC;AAAA,IACd,QAAQ,EAAC;AAAA,IACT,OAAO,EAAC;AAAA,IACR,SAAS,EAAC;AAAA,IACV,cAAc;AAAC,GACjB;AACF;AAKO,SAAS,wBAAwB,IAAA,EAA4B;AAClE,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,IAAA,EAAM,CAAA,CAAA,EAAI,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA;AAAA,IAC5B,WAAA,EAAa,KAAK,WAAA,EAAY;AAAA,IAC9B,UAAU,EAAC;AAAA,IACX,QAAQ,EAAC;AAAA,IACT,gBAAgB,EAAC;AAAA,IACjB,YAAY,EAAC;AAAA,IACb,mBAAmB;AAAC,GACtB;AACF;AAKO,SAAS,YAAY,UAAA,EAA4B;AACtD,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW,QAAA;AAAA,IACX,KAAA,EAAO,WAAA;AAAA,IACP,MAAA,EAAQ,yBAAA;AAAA,IACR,GAAA,EAAK;AAAA,GACP;AAGA,EAAA,IAAI,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,EAAG;AAC7B,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACvC,IAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAQ,CAAA,EAAA,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO,OAAA,CAAQ,UAAU,CAAA,IAAK,UAAA;AAChC;AAKO,SAAS,oBAAoB,KAAA,EAQlB;AAChB,EAAA,OAAO;AAAA,IACL,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,MAAA,EAAQ,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA;AAAA,IAC9B,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,QAAA,EAAU,MAAM,QAAA,IAAY,KAAA;AAAA,IAC5B,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,QAAQ,KAAA,CAAM;AAAA,GAChB;AACF;AAMO,SAAS,aAAa,EAAA,EAA+B;AAC1D,EAAA,IAAI,CAAC,EAAA,IAAM,OAAO,EAAA,KAAO,UAAU,OAAO,KAAA;AAC1C,EAAA,MAAM,CAAA,GAAI,EAAA;AACV,EAAA,OAAO,OAAO,EAAE,OAAA,KAAY,QAAA,IAAY,EAAE,MAAA,YAAkB,GAAA,IAAO,EAAE,KAAA,YAAiB,GAAA;AACxF;;;ACjaA,IAAM,WAAA,uBAAkB,GAAA,EAAwB;AAMzC,SAAS,gBAAA,GAAyB;AACvC,EAAA,WAAA,CAAY,KAAA,EAAM;AACpB;AAKO,SAAS,mBAAA,GAAsB;AACpC,EAAA,OAAO;AAAA,IACL,MAAM,WAAA,CAAY,IAAA;AAAA,IAClB,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,MAAM;AAAA,GACrC;AACF;AAyBO,SAAS,UAAA,CAAW,MAAA,EAAuB,QAAA,GAAoB,IAAA,EAAkB;AAEtF,EAAA,MAAM,WAAW,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,MAAA,CAAO,WAAW,OAAO,CAAA,CAAA;AAG5D,EAAA,IAAI,QAAA,IAAY,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA,EAAG;AACzC,IAAA,OAAO,WAAA,CAAY,IAAI,QAAQ,CAAA;AAAA,EACjC;AAGA,EAAA,MAAM,EAAA,GAAiB;AAAA,IACrB,SAAS,MAAA,CAAO,IAAA;AAAA,IAChB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,OAAA,EAAS,OAAO,OAAA,IAAW,OAAA;AAAA,IAC3B,QAAA,sBAAc,GAAA,EAA4B;AAAA,IAC1C,MAAA,sBAAY,GAAA,EAA2B;AAAA,IACvC,KAAA,sBAAW,GAAA,EAA0B;AAAA,IACrC,gBAAgB,EAAC;AAAA,IACjB,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,GACtC;AAGA,EAAA,KAAA,MAAW,OAAA,IAAW,OAAO,QAAA,EAAuB;AAElD,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,OAAO,OAAA,CAAQ,WAAW,QAAA,EAAU;AACxD,MAAA,MAAM,YAAY,OAAA,CAAQ,MAAA;AAC1B,MAAA,MAAM,MAAA,GAAyB;AAAA,QAC7B,MAAM,SAAA,CAAU,IAAA;AAAA,QAChB,aAAa,SAAA,CAAU,WAAA;AAAA,QACvB,MAAO,SAAA,CAAkB,IAAA;AAAA;AAAA,QACzB,YAAY,SAAA,CAAU,UAAA,IAAc,SAAA,CAAU,IAAA,CAAK,aAAY,GAAI,GAAA;AAAA,QACnE,SAAS,SAAA,CAAU,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAgB;AAAA,UACpD,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,MAAA,EAAQC,YAAAA,CAAY,KAAA,CAAM,IAAI,CAAA;AAAA,UAC9B,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,QAAA,EAAU,MAAM,QAAA,IAAY,KAAA;AAAA,UAC5B,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,YAAY,KAAA,CAAM,MAAA;AAAA,UAClB,UAAU,KAAA,CAAM;AAAA,SAClB,CAAE,CAAA;AAAA,QACF,OAAA,EAAS,UAAU,WAAA,KAAgB,SAAA;AAAA,QACnC,SAAA,EAAW,UAAU,WAAA,KAAgB,WAAA;AAAA,QACrC,YAAA,EAAA,CAAe,SAAA,CAAU,SAAA,EAAW,MAAA,IAAU,CAAA,IAAK,CAAA;AAAA,QACnD,WAAW,SAAA,CAAU,SAAA;AAAA,QACrB,UAAW,SAAA,CAAkB,QAAA;AAAA;AAAA,QAC7B,cAAc,EAAC;AAAA,QACf,aAAa;AAAC,OAChB;AACA,MAAA,EAAA,CAAG,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAAA,IACrC;AAGA,IAAA,KAAA,MAAW,KAAA,IAAU,OAAA,CAAQ,MAAA,IAAU,EAAC,EAAe;AACrD,MAAA,MAAM,aAAA,GAA+B;AAAA,QACnC,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,MAAA,EAAQ,QAAA;AAAA,QACR,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,MAAA,EAAA,CAAS,MAAM,YAAA,EAAc,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,UAC1D,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,SAAA,EAAW,EAAE,SAAA,IAAa,KAAA;AAAA,UAC1B,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,UAAA,IAAc;AAAA,SACxC,CAAE,CAAA;AAAA,QACF,MAAA,EAAA,CAAS,MAAM,YAAA,EAAc,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,UAC1D,KAAK,OAAO,CAAA,KAAM,WAAW,CAAA,GAAI,CAAA,CAAE,OAAO,CAAA,CAAE,IAAA;AAAA,UAC5C,IAAA,EAAM,OAAO,CAAA,KAAM,QAAA,GAAW,IAAI,CAAA,CAAE,IAAA;AAAA,UACpC,SAAS,OAAO,CAAA,KAAM,YAAY,eAAA,IAAmB,CAAA,GAClD,EAAE,aAAA,GAAwB;AAAA,SAC/B,CAAE,CAAA;AAAA,QACF,WAAA,EAAA,CAAc,MAAM,YAAA,EAAc,WAAA,IAAe,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,UACpE,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,IAAI,CAAA,CAAE,EAAA;AAAA,UACN,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW;AAAC,SACzB,CAAE,CAAA;AAAA,QACF,QAAQ,EAAC;AAAA,QACT,OAAO,EAAC;AAAA,QACR,UAAW,KAAA,CAAc,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,UACvD,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,UAAU,CAAA,CAAE,QAAA;AAAA,UACZ,OAAO,CAAA,CAAE;AAAA,SACX,CAAE,CAAA;AAAA,QACF,cAAc;AAAC,OACjB;AACA,MAAA,EAAA,CAAG,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,aAAa,CAAA;AAAA,IACzC;AAGA,IAAA,KAAA,MAAW,IAAA,IAAS,OAAA,CAAQ,KAAA,IAAS,EAAC,EAAc;AAClD,MAAA,MAAM,YAAA,GAA6B;AAAA,QACjC,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,WAAA,EAAa,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY;AAAA,QACnC,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,CAAC,QAAQ,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,WAAW,EAAE,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,GACjG,KAAK,QAAA,GAAoE,MAAA;AAAA,QAC3E,UAAU,EAAC;AAAA,QACX,SAAS,IAAA,CAAK,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,QAAA,MAA4B;AAAA,UAC3D,GAAA,EAAK,OAAO,QAAA,KAAa,QAAA,GAAW,WAAW,QAAA,CAAS,GAAA;AAAA,UACxD,KAAA,EAAO,gBAAgB,QAAA,EAAU,EAAA,CAAG,QAAQ,OAAA,CAAQ,MAAA,IAAqB,EAAE,CAAA;AAAA,UAC3E,YAAA,EAAc,OAAO,QAAA,KAAa,QAAA,IAAY,kBAAkB,QAAA,GAC7D,QAAA,CAAiB,YAAA,GACjB,OAAA,CAAQ,MAAA,GAAU,OAAO,QAAQ,MAAA,KAAW,QAAA,GAAY,QAAQ,MAAA,CAAkB,OAAA,CAAQ,WAAW,EAAE,CAAA,GAAK,OAAA,CAAQ,MAAA,CAAkB,IAAA,GAAQ,MAAA;AAAA,UACjJ,QAAQ,OAAO,QAAA,KAAa,YAAY,QAAA,IAAY,QAAA,GACjD,SAAiB,MAAA,GAAS;AAAA,SAC/B,CAAE,CAAA;AAAA,QACF,gBAAgB,EAAC;AAAA,QACjB,YAAY,EAAC;AAAA,QACb,mBAAmB;AAAC,OACtB;AACA,MAAA,EAAA,CAAG,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,YAAY,CAAA;AAAA,IACtC;AAAA,EACF;AAGA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,WAAA,CAAY,GAAA,CAAI,UAAU,EAAE,CAAA;AAAA,EAC9B;AAEA,EAAA,OAAO,EAAA;AACT;AASA,SAASA,aAAY,UAAA,EAA4B;AAC/C,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW,QAAA;AAAA,IACX,KAAA,EAAO,WAAA;AAAA,IACP,MAAA,EAAQ,yBAAA;AAAA,IACR,GAAA,EAAK;AAAA,GACP;AAGA,EAAA,IAAI,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,EAAG;AAC7B,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACvC,IAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAQ,CAAA,EAAA,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO,OAAA,CAAQ,UAAU,CAAA,IAAK,UAAA;AAChC;AAKA,SAAS,eAAA,CACP,QAAA,EACA,SAAA,EACA,YAAA,EACe;AACf,EAAA,MAAM,UAAU,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,SAAS,GAAA,IAAO,EAAA;AAG1E,EAAA,IAAI,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,SAAA,CAAU,IAAI,OAAO,CAAA;AAAA,EAC9B;AAGA,EAAA,MAAM,cAAc,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAa,CAAA,CAAE,SAAS,OAAO,CAAA;AACtE,EAAA,IAAI,WAAA,EAAa;AAEf,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,QAAQ,EAAC;AAAA,MACT,QAAQ,EAAC;AAAA,MACT,aAAa,EAAC;AAAA,MACd,QAAQ,EAAC;AAAA,MACT,OAAO,EAAC;AAAA,MACR,SAAS,EAAC;AAAA,MACV,cAAc;AAAC,KACjB;AAAA,EACF;AAGA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,QAAQ,EAAC;AAAA,IACT,QAAQ,EAAC;AAAA,IACT,aAAa,EAAC;AAAA,IACd,QAAQ,EAAC;AAAA,IACT,OAAO,EAAC;AAAA,IACR,SAAS,EAAC;AAAA,IACV,cAAc;AAAC,GACjB;AACF;AAmBO,SAAS,OAAA,CAAQ,IAAgB,QAAA,EAA6C;AACnF,EAAA,IAAI,CAAC,QAAA,EAAU;AAEb,IAAA,OAAO,EAAA,CAAG,KAAA,CAAM,MAAA,EAAO,CAAE,MAAK,CAAE,KAAA;AAAA,EAClC;AACA,EAAA,OAAO,EAAA,CAAG,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AAC9B;AAQO,SAAS,SAAS,EAAA,EAAgC;AACvD,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,EAAA,CAAG,KAAA,CAAM,QAAQ,CAAA;AACrC;AASO,SAAS,SAAA,CAAU,IAAgB,UAAA,EAAgD;AACxF,EAAA,OAAO,EAAA,CAAG,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA;AACnC;AASO,SAAS,QAAA,CAAS,IAAgB,SAAA,EAA8C;AACrF,EAAA,OAAO,EAAA,CAAG,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA;AAChC;;;ACtSO,SAAS,WAAA,CACd,QACA,KAAA,EAC6B;AAC7B,EAAA,MAAM,UAA0B,EAAC;AACjC,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,MAAM,MAAA,GAAS,MAAM,CAAA,OAAA,EAAU,EAAE,QAAQ,CAAA,CAAA;AAGzC,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,KAAA,CAAM,IAAA,EAAM;AAC9B,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,IAAI,MAAA,EAAO;AAAA,MACX,SAAA,EAAW,QAAA;AAAA,MACX,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,MACb,QAAQ,MAAA,CAAO,IAAA;AAAA,MACf,OAAO,KAAA,CAAM,IAAA;AAAA,MACb,aAAa,CAAA,qBAAA,EAAwB,MAAA,CAAO,IAAI,CAAA,MAAA,EAAS,MAAM,IAAI,CAAA,CAAA;AAAA,KACpE,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAA,CAAO,WAAA,KAAgB,KAAA,CAAM,WAAA,EAAa;AAC5C,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,IAAI,MAAA,EAAO;AAAA,MACX,SAAA,EAAW,QAAA;AAAA,MACX,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,QAAQ,MAAA,CAAO,WAAA;AAAA,MACf,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,WAAA,EAAa,CAAA,2BAAA;AAAA,KACd,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,iBAAiB,IAAI,GAAA;AAAA,IAAA,CACxB,OAAO,QAAA,IAAY,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA,CAAE,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,CAAC;AAAA,GAC1E;AACA,EAAA,MAAM,gBAAgB,IAAI,GAAA;AAAA,IAAA,CACvB,MAAM,QAAA,IAAY,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA,CAAE,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,CAAC;AAAA,GACzE;AAGA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,EAAE,KAAA,EAAO,KAAK,cAAA,EAAgB;AAC9C,IAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA,EAAG;AAC5B,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAI,MAAA,EAAO;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX,MAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAM,CAAC,UAAA,EAAY,KAAK,CAAA;AAAA,QACxB,MAAA,EAAQ,IAAA;AAAA,QACR,WAAA,EAAa,oBAAoB,IAAI,CAAA;AAAA,OACtC,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,EAAE,KAAA,EAAO,KAAK,aAAA,EAAe;AAC7C,IAAA,IAAI,CAAC,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AAC7B,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAI,MAAA,EAAO;AAAA,QACX,SAAA,EAAW,KAAA;AAAA,QACX,MAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAM,CAAC,UAAA,EAAY,KAAK,CAAA;AAAA,QACxB,KAAA,EAAO,IAAA;AAAA,QACP,WAAA,EAAa,kBAAkB,IAAI,CAAA;AAAA,OACpC,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,CAAC,MAAM,EAAE,OAAA,EAAS,cAAc,KAAA,EAAO,KAAK,aAAA,EAAe;AACpE,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAC3C,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,WAAA,CAAY,OAAO,CAAA;AACrD,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,YAAY,CAAA;AAC7C,MAAA,IAAI,eAAe,SAAA,EAAW;AAC5B,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,IAAI,MAAA,EAAO;AAAA,UACX,SAAA,EAAW,QAAA;AAAA,UACX,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,CAAC,UAAA,EAAY,KAAK,CAAA;AAAA,UACxB,WAAA,EAAa,qBAAqB,IAAI,CAAA;AAAA,SACvC,CAAA;AAGD,QAAA,MAAM,YAAA,GAAe,YAAY,OAAA,CAAQ,MAAA;AACzC,QAAA,MAAM,cAAc,YAAA,CAAa,MAAA;AACjC,QAAA,IAAI,KAAK,SAAA,CAAU,YAAY,MAAM,IAAA,CAAK,SAAA,CAAU,WAAW,CAAA,EAAG;AAChE,UAAA,MAAM,UAAA,GACJ,OAAO,WAAA,KAAgB,QAAA,GACnB,WAAA,GACA,WAAA,IAAe,OAAO,WAAA,KAAgB,QAAA,IAAY,MAAA,IAAU,WAAA,GACzD,WAAA,CAAiC,IAAA,GAClC,QAAA;AACR,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,IAAI,MAAA,EAAO;AAAA,YACX,SAAA,EAAW,QAAA;AAAA,YACX,MAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAM,CAAC,UAAA,EAAY,KAAA,EAAO,QAAQ,CAAA;AAAA,YAClC,WAAA,EAAa,oBAAoB,UAAU,CAAA;AAAA,WAC5C,CAAA;AAAA,QACH;AAGA,QAAA,MAAM,YAAA,GAAe,WAAA,CAAY,OAAA,CAAQ,MAAA,IAAU,EAAC;AACpD,QAAA,MAAM,WAAA,GAAc,YAAA,CAAa,MAAA,IAAU,EAAC;AAC5C,QAAA,IAAI,KAAK,SAAA,CAAU,YAAY,MAAM,IAAA,CAAK,SAAA,CAAU,WAAW,CAAA,EAAG;AAChE,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,IAAI,MAAA,EAAO;AAAA,YACX,SAAA,EAAW,QAAA;AAAA,YACX,MAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAM,CAAC,UAAA,EAAY,KAAA,EAAO,QAAQ,CAAA;AAAA,YAClC,WAAA,EAAa,+BAA+B,IAAI,CAAA;AAAA,WACjD,CAAA;AAAA,QACH;AAGA,QAAA,MAAM,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,KAAA,IAAS,EAAC;AAClD,QAAA,MAAM,UAAA,GAAa,YAAA,CAAa,KAAA,IAAS,EAAC;AAC1C,QAAA,IAAI,KAAK,SAAA,CAAU,WAAW,MAAM,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA,EAAG;AAC9D,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,IAAI,MAAA,EAAO;AAAA,YACX,SAAA,EAAW,QAAA;AAAA,YACX,MAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAM,CAAC,UAAA,EAAY,KAAA,EAAO,OAAO,CAAA;AAAA,YACjC,WAAA,EAAa,8BAA8B,IAAI,CAAA;AAAA,WAChD,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,iBAAiB,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAA,IAAY,EAAE,CAAA;AAC3D,EAAA,MAAM,gBAAgB,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAA,IAAY,EAAE,CAAA;AACzD,EAAA,IAAI,mBAAmB,aAAA,EAAe;AACpC,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,IAAI,MAAA,EAAO;AAAA,MACX,SAAA,EAAW,QAAA;AAAA,MACX,MAAA,EAAQ,UAAA;AAAA,MACR,IAAA,EAAM,CAAC,UAAU,CAAA;AAAA,MACjB,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB;AASO,SAAS,oBAAoB,SAAA,EAAiD;AACnF,EAAA,OAAO,UAAU,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,QAAQ,CAAA;AAC/D;AAKO,SAAS,YAAY,SAAA,EAAwD;AAClF,EAAA,OAAO,UAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,QAAQ,CAAA;AACjE;AASO,SAAS,mBAAmB,SAAA,EAEX;AACtB,EAAA,MAAM,WAA2B,EAAC;AAClC,EAAA,MAAM,WAA2B,EAAC;AAClC,EAAA,MAAM,QAAwB,EAAC;AAE/B,EAAA,KAAA,MAAW,MAAA,IAAU,UAAU,OAAA,EAAS;AACtC,IAAA,IAAI,MAAA,CAAO,cAAc,QAAA,EAAU;AAEnC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,WAAA,EAAY;AACzC,IAAA,IACE,WAAW,SAAA,IACX,MAAA,KAAW,YACX,MAAA,KAAW,OAAA,IACX,WAAW,MAAA,EACX;AACA,MAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,IACtB,CAAA,MAAA,IACE,WAAW,OAAA,IACX,MAAA,KAAW,YACX,MAAA,KAAW,OAAA,IACX,WAAW,QAAA,EACX;AACA,MAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,qBAAA,EAAuB,EAAC,EAAE;AAChE;AAKO,SAAS,qBAAqB,QAAA,EAAwC;AAC3E,EAAA,OAAO,QAAA,CAAS,SAAS,MAAA,GAAS,CAAA;AACpC;AAWO,SAAS,0BAAA,CACd,aACA,UAAA,EACwB;AACxB,EAAA,MAAM,aAAqC,EAAC;AAE5C,EAAA,MAAMC,YAAAA,GAAc,CAAC,CAAA,KAA8B;AACjD,IAAA,IAAI,CAAA,IAAK,OAAO,CAAA,KAAM,QAAA,IAAY,UAAU,CAAA,EAAG;AAC7C,MAAA,OAAQ,CAAA,CAAuB,IAAA;AAAA,IACjC;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CACnB,IAAA,KAC0C;AAC1C,IAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,SAAiB,EAAE,QAAA,EAAU,CAAA,EAAG,OAAA,EAAS,CAAA,EAAE;AACxE,IAAA,MAAM,CAAA,GAAI,IAAA;AACV,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,CAAA,CAAE,MAAM,CAAA,GAAI,CAAA,CAAE,SAAS,EAAC;AACrD,IAAA,OAAO,EAAE,QAAA,EAAU,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,EAC/C,CAAA;AAGA,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAqB;AAC3C,EAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,IAAA,MAAM,IAAA,GAAOA,aAAY,CAAC,CAAA;AAC1B,IAAA,IAAI,IAAA,EAAM,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAC,CAAA;AAAA,EACjC;AAEA,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,IAAA,GAAOA,aAAY,SAAS,CAAA;AAClC,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AACrC,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,MAAM,aAAA,GAAgB,aAAa,UAAU,CAAA;AAC7C,IAAA,MAAM,YAAA,GAAe,aAAa,SAAS,CAAA;AAE3C,IAAA,MAAM,eAAA,GAAkB,aAAA,CAAc,QAAA,GAAW,YAAA,CAAa,QAAA;AAC9D,IAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,OAAA,GAAU,YAAA,CAAa,OAAA;AAE5D,IAAA,IAAI,eAAA,GAAkB,CAAA,IAAK,cAAA,GAAiB,CAAA,EAAG;AAC7C,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,QAAA,EAAU,IAAA;AAAA,QACV,iBAAA,EAAmB,eAAA;AAAA,QACnB,cAAA;AAAA,QACA,eAAA,EAAiB,CAAA;AAAA,QACjB,MAAA,EAAQ,aAAA;AAAA,QACR,KAAA,EAAO,YAAA;AAAA,QACP,eAAe,eAAA,GAAkB;AAAA,OAClC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,UAAA;AACT;AAKO,SAAS,4BACd,UAAA,EACS;AACT,EAAA,OAAO,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,aAAa,CAAA;AAC/C;;;AC/SO,IAAK,SAAA,qBAAAC,UAAAA,KAAL;AAEL,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AAGT,EAAAA,WAAA,cAAA,CAAA,GAAe,cAAA;AAGf,EAAAA,WAAA,GAAA,CAAA,GAAI,GAAA;AACJ,EAAAA,WAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,WAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,WAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,WAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AAGT,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,WAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,UAAA,CAAA,GAAW,UAAA;AAGX,EAAAA,WAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,WAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,WAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,WAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,WAAA,OAAA,CAAA,GAAQ,OAAA;AAGR,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,WAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AAGP,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AAGP,EAAAA,WAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AAGV,EAAAA,WAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,WAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,WAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,WAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,WAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,WAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,YAAA,CAAA,GAAa,YAAA;AAGb,EAAAA,WAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,WAAA,gBAAA,CAAA,GAAiB,gBAAA;AACjB,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AAGV,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,OAAA,CAAA,GAAQ,OAAA;AApGE,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;AAgHL,IAAM,QAAA,GAAsC;AAAA,EACjD,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO,KAAA;AAAA,EACP,SAAA,EAAW,SAAA;AAAA,EACX,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ,MAAA;AAAA,EACR,KAAA,EAAO,KAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO,KAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,QAAA,EAAU,QAAA;AAAA,EACV,KAAA,EAAO,KAAA;AAAA,EACP,OAAA,EAAS,OAAA;AAAA,EACT,QAAA,EAAU,QAAA;AAAA,EACV,SAAA,EAAW,SAAA;AAAA,EACX,KAAA,EAAO,KAAA;AAAA,EACP,UAAA,EAAY,UAAA;AAAA,EACZ,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA;AAAA,EACN,UAAA,EAAY,UAAA;AAAA,EACZ,WAAA,EAAa,WAAA;AAAA,EACb,UAAA,EAAY,UAAA;AAAA,EACZ,QAAA,EAAU,QAAA;AAAA,EACV,SAAA,EAAW,SAAA;AAAA,EACX,aAAA,EAAe,aAAA;AAAA,EACf,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS,OAAA;AAAA,EACT,KAAA,EAAO,KAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO,KAAA;AAAA,EACP,UAAA,EAAY,UAAA;AAAA,EACZ,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,QAAA,EAAU,QAAA;AAAA,EACV,UAAA,EAAY,UAAA;AAAA,EACZ,MAAA,EAAQ,MAAA;AAAA,EACR,WAAA,EAAa,WAAA;AAAA,EACb,UAAA,EAAY,UAAA;AAAA,EACZ,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,MAAA;AAAA,EACR,SAAA,EAAW,SAAA;AAAA,EACX,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AACX;AAGO,IAAM,mBAAA,GAAiD;AAAA,EAC5D,WAAA,EAAa,WAAA;AAAA,EACb,QAAA,EAAU,QAAA;AAAA,EACV,YAAA,EAAc,SAAA;AAAA,EACd,UAAA,EAAY,KAAA;AAAA,EACZ,SAAA,EAAW,KAAA;AAAA,EACX,WAAA,EAAa,QAAA;AAAA,EACb,QAAA,EAAU,KAAA;AAAA,EACV,QAAA,EAAU,IAAA;AACZ;;;AChLO,IAAM,QAAN,MAAY;AAAA,EAOjB,YAAY,KAAA,EAAe;AAL3B,IAAA,IAAA,CAAQ,GAAA,GAAc,CAAA;AACtB,IAAA,IAAA,CAAQ,IAAA,GAAe,CAAA;AACvB,IAAA,IAAA,CAAQ,MAAA,GAAiB,CAAA;AACzB,IAAA,IAAA,CAAQ,WAAA,GAAwB,CAAC,CAAC,CAAA;AAGhC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAAoB;AAClB,IAAA,MAAM,SAAkB,EAAC;AAEzB,IAAA,OAAO,CAAC,IAAA,CAAK,OAAA,EAAQ,EAAG;AACtB,MAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,MACnB;AAAA,IACF;AAGA,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,YAAY,GAAA,EAAI;AACrB,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAA,QAAA,eAA4B,EAAE,CAAC,CAAA;AAAA,IAClD;AAEA,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAA,KAAA,YAAyB,EAAE,CAAC,CAAA;AAC7C,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,SAAA,GAA0B;AAEhC,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,MAAM,WAAA,GAAc,KAAK,iBAAA,EAAkB;AAC3C,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,OAAO,WAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,cAAA,EAAe;AAEpB,IAAA,IAAI,IAAA,CAAK,SAAQ,EAAG;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAAK;AAGvB,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,OAAO,KAAK,cAAA,EAAe;AAAA,IAC7B;AAGA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,MAAA,OAAO,KAAK,SAAA,EAAU;AAAA,IACxB;AAGA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,MAAA,OAAO,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,IAChC;AAGA,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,EAAG;AACtB,MAAA,OAAO,KAAK,aAAA,EAAc;AAAA,IAC5B;AAGA,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,WAAA,CAAA,OAAA,aAA2B;AAAA,MACzC,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,WAAA,CAAA,OAAA,aAA2B;AAAA,MACzC,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,WAAA,CAAA,MAAA,YAA0B;AAAA,MACxC,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,WAAA,CAAA,KAAA,WAAyB;AAAA,MACvC,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,WAAA,CAAA,MAAA,YAA0B;AAAA,MACxC,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,WAAA,CAAA,UAAA,gBAA8B;AAAA,MAC5C,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,WAAA,CAAA,UAAA,gBAA8B;AAAA,MAC5C,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,WAAA,CAAA,QAAA,cAA4B;AAAA,MAC1C,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,WAAA,CAAA,QAAA,cAA4B;AAAA,MAC1C,KAAK,GAAA;AACH,QAAA,IAAI,IAAA,CAAK,QAAA,EAAS,KAAM,GAAA,EAAK;AAC3B,UAAA,OAAO,IAAA,CAAK,aAAa,CAAA,EAAA,eAAA,qBAA0B;AAAA,QACrD;AACA,QAAA,OAAO,KAAK,WAAA,CAAA,cAAA,oBAAkC;AAAA,MAChD,KAAK,GAAA;AACH,QAAA,IAAI,IAAA,CAAK,QAAA,EAAS,KAAM,GAAA,EAAK;AAC3B,UAAA,OAAO,IAAA,CAAK,aAAa,CAAA,EAAA,YAAA,kBAAuB;AAAA,QAClD;AACA,QAAA,OAAO,KAAK,WAAA,CAAA,WAAA,iBAA+B;AAAA,MAC7C,KAAK,GAAA;AACH,QAAA,IAAI,IAAA,CAAK,QAAA,EAAS,KAAM,GAAA,EAAK;AAC3B,UAAA,OAAO,IAAA,CAAK,aAAa,CAAA,EAAA,QAAA,cAAmB;AAAA,QAC9C;AACA,QAAA;AAAA,MACF,KAAK,GAAA;AACH,QAAA,IAAI,IAAA,CAAK,QAAA,EAAS,KAAM,GAAA,EAAK;AAC3B,UAAA,OAAO,IAAA,CAAK,aAAa,CAAA,EAAA,YAAA,kBAAuB;AAAA,QAClD;AACA,QAAA;AAAA;AAIJ,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,OAAO,KAAK,kBAAA,EAAmB;AAAA,IACjC;AAGA,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,EAAG;AACtB,MAAA,OAAO,KAAK,iBAAA,EAAkB;AAAA,IAChC;AAGA,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,OAAO,KAAK,SAAA,EAAU;AAAA,EACxB;AAAA,EAEQ,kBAAA,GAA4B;AAClC,IAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AACnB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAGb,IAAA,IAAI,UAAA,GAAa,CAAA;AAGjB,IAAA,OAAO,CAAC,KAAK,OAAA,EAAQ,IAAK,aAAa,CAAA,IAAK,IAAA,CAAK,IAAA,EAAK,KAAM,IAAA,EAAM;AAChE,MAAA,MAAM,EAAA,GAAK,KAAK,IAAA,EAAK;AACrB,MAAA,IAAI,OAAO,GAAA,EAAK;AACd,QAAA,UAAA,EAAA;AAAA,MACF,CAAA,MAAA,IAAW,OAAO,GAAA,EAAK;AACrB,QAAA,UAAA,EAAA;AACA,QAAA,IAAI,eAAe,CAAA,EAAG;AACpB,UAAA,IAAA,CAAK,OAAA,EAAQ;AACb,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf;AAEA,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,KAAA,EAAO,KAAK,GAAG,CAAA;AAClD,IAAA,OAAO,IAAA,CAAK,6CAAkC,KAAK,CAAA;AAAA,EACrD;AAAA,EAEQ,iBAAA,GAAkC;AACxC,IAAA,IAAI,KAAK,OAAA,EAAQ,IAAK,IAAA,CAAK,IAAA,OAAW,IAAA,EAAM;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,OAAO,KAAK,IAAA,EAAK,KAAM,OAAO,IAAA,CAAK,IAAA,OAAW,GAAA,EAAM;AAClD,MAAA,MAAA,IAAU,IAAA,CAAK,IAAA,EAAK,KAAM,GAAA,GAAO,CAAA,GAAI,CAAA;AACrC,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf;AAGA,IAAA,IAAI,KAAK,IAAA,EAAK,KAAM,QAAQ,IAAA,CAAK,IAAA,OAAW,GAAA,EAAK;AAC/C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,gBAAgB,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY,SAAS,CAAC,CAAA;AAElE,IAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,MAAA,IAAA,CAAK,WAAA,CAAY,KAAK,MAAM,CAAA;AAC5B,MAAA,OAAO,IAAA,CAAK,iCAA4B,EAAE,CAAA;AAAA,IAC5C,CAAA,MAAA,IAAW,SAAS,aAAA,EAAe;AAEjC,MAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA,IAC1B,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA,EAAQ;AAC7D,QAAA,IAAA,CAAK,YAAY,GAAA,EAAI;AAAA,MACvB;AACA,MAAA,OAAO,IAAA,CAAK,iCAA4B,EAAE,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,cAAA,GAAwB;AAC9B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAA,SAAA,gBAA6B,IAAI,CAAA;AACpD,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,IAAA,CAAK,IAAA,EAAA;AACL,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,cAAc,KAAA,EAAsB;AAC1C,IAAA,MAAM,YAAY,IAAA,CAAK,IAAA;AACvB,IAAA,MAAM,cAAc,IAAA,CAAK,MAAA;AACzB,IAAA,MAAM,cAAc,IAAA,CAAK,GAAA;AAEzB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAEb,IAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,IAAA,OAAO,CAAC,IAAA,CAAK,OAAA,MAAa,IAAA,CAAK,IAAA,OAAW,KAAA,EAAO;AAC/C,MAAA,IAAI,KAAK,IAAA,EAAK,KAAM,QAAQ,IAAA,CAAK,QAAA,OAAe,KAAA,EAAO;AACrD,QAAA,IAAA,CAAK,OAAA,EAAQ;AACb,QAAA,KAAA,IAAS,KAAA;AAAA,MACX,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,EAAK,KAAM,IAAA,EAAM;AAE/B,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,KAAA,IAAS,KAAK,IAAA,EAAK;AAAA,MACrB;AACA,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf;AAEA,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,KAAA,EAAO;AACzB,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA,EAAM,SAAA;AAAA,MACN,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAAA,EAEQ,aAAA,GAAuB;AAC7B,IAAA,MAAM,YAAY,IAAA,CAAK,IAAA;AACvB,IAAA,MAAM,cAAc,IAAA,CAAK,MAAA;AACzB,IAAA,MAAM,cAAc,IAAA,CAAK,GAAA;AAEzB,IAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG;AAChC,MAAA,KAAA,IAAS,KAAK,OAAA,EAAQ;AAAA,IACxB;AAGA,IAAA,IAAI,IAAA,CAAK,MAAK,KAAM,GAAA,IAAO,KAAK,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,CAAA,EAAG;AACxD,MAAA,KAAA,IAAS,KAAK,OAAA,EAAQ;AACtB,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG;AAChC,QAAA,KAAA,IAAS,KAAK,OAAA,EAAQ;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAA,gBAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA,EAAM,SAAA;AAAA,MACN,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAAA,EAEQ,iBAAA,GAA2B;AACjC,IAAA,MAAM,YAAY,IAAA,CAAK,IAAA;AACvB,IAAA,MAAM,cAAc,IAAA,CAAK,MAAA;AACzB,IAAA,MAAM,cAAc,IAAA,CAAK,GAAA;AAEzB,IAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,IAAK,IAAA,CAAK,IAAA,EAAK,KAAM,GAAA,IAAO,IAAA,CAAK,IAAA,OAAW,GAAA,EAAK;AACrF,MAAA,KAAA,IAAS,KAAK,OAAA,EAAQ;AAAA,IACxB;AAGA,IAAA,MAAM,UAAA,GAAa,MAAM,WAAA,EAAY;AACrC,IAAA,MAAM,WAAA,GAAc,SAAS,UAAU,CAAA;AAEvC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,WAAA,IAAA,YAAA;AAAA,MACN,KAAA;AAAA,MACA,IAAA,EAAM,SAAA;AAAA,MACN,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAAA,EAEQ,YAAY,IAAA,EAAwB;AAC1C,IAAA,MAAM,QAAQ,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAC9C,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,YAAA,CAAa,OAAe,IAAA,EAAwB;AAC1D,IAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,KAAA,IAAS,KAAK,OAAA,EAAQ;AAAA,IACxB;AACA,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAA,EAAQ,KAAK,MAAA,GAAS,KAAA;AAAA,MACtB,MAAA,EAAQ,KAAK,GAAA,GAAM;AAAA,KACrB;AAAA,EACF;AAAA,EAEQ,cAAA,GAAuB;AAC7B,IAAA,OAAO,CAAC,IAAA,CAAK,OAAA,EAAQ,KAAM,IAAA,CAAK,IAAA,EAAK,KAAM,GAAA,IAAO,IAAA,CAAK,IAAA,EAAK,KAAM,GAAA,CAAA,EAAO;AACvE,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,OAAO,CAAC,IAAA,CAAK,OAAA,MAAa,IAAA,CAAK,IAAA,OAAW,IAAA,EAAM;AAC9C,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEQ,SAAA,CAAU,MAAiB,KAAA,EAAsB;AACvD,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,QAAQ,IAAA,CAAK;AAAA,KACf;AAAA,EACF;AAAA,EAEQ,IAAA,GAAe;AACrB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,IAAK,IAAA;AAAA,EACjC;AAAA,EAEQ,QAAA,GAAmB;AACzB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,GAAM,CAAC,CAAA,IAAK,IAAA;AAAA,EACrC;AAAA,EAEQ,OAAA,GAAkB;AACxB,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAAK;AACvB,IAAA,IAAA,CAAK,GAAA,EAAA;AACL,IAAA,IAAA,CAAK,MAAA,EAAA;AACL,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,OAAA,GAAmB;AACzB,IAAA,OAAO,IAAA,CAAK,GAAA,IAAO,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,EAChC;AAAA,EAEQ,QAAQ,IAAA,EAAuB;AACrC,IAAA,OAAO,IAAA,IAAQ,OAAO,IAAA,IAAQ,GAAA;AAAA,EAChC;AAAA,EAEQ,QAAQ,IAAA,EAAuB;AACrC,IAAA,OAAQ,IAAA,IAAQ,OAAO,IAAA,IAAQ,GAAA,IACvB,QAAQ,GAAA,IAAO,IAAA,IAAQ,OACxB,IAAA,KAAS,GAAA;AAAA,EAClB;AAAA,EAEQ,eAAe,IAAA,EAAuB;AAC5C,IAAA,OAAO,KAAK,OAAA,CAAQ,IAAI,CAAA,IAAK,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,EAChD;AACF;AAKO,SAAS,SAAS,KAAA,EAAwB;AAC/C,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,KAAK,CAAA;AAC7B,EAAA,OAAO,MAAM,QAAA,EAAS;AACxB;;;AC3UO,SAAS,YAAY,IAAA,EAAyC;AACnE,EAAA,MAAM,MAA0B,EAAE,MAAA,EAAQ,EAAC,EAAG,QAAA,EAAU,EAAC,EAAE;AAC3D,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,IAAI,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,EAAS;AAE9B,EAAA,IAAI,GAAA,GAAM,CAAA;AAGV,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,GAAG,KAAK,EAAE,IAAA,EAAA,KAAA,YAAqB,KAAA,EAAO,EAAA,EAAI,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAA,EAAE;AAErG,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,GAAA,EAAK,CAAA;AAClC,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,EAAQ,CAAE,IAAA,KAAA,KAAA;AAChC,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAoB;AAChC,IAAA,OAAO,OAAA,EAAQ,CAAE,IAAA,KAAS,IAAA,EAAM,OAAA,EAAQ;AAAA,EAC1C,CAAA;AAGA,EAAA,IAAA,CAAA,SAAA,eAAsB;AAGtB,EAAA,MAAM,eAAe,iBAAA,EAAkB;AACvC,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,QAAQ,GAAA,CAAI,MAAA,CAAO,SAAS,CAAA,GAAI,GAAA,CAAI,SAAS,CAAC;AAAA,QAC5C,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,MACD,UAAU;AAAC,KACb;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAuB;AAAA,IAC3B,IAAA,EAAM,QAAA;AAAA,IACN,MAAM,YAAA,CAAa,IAAA;AAAA,IACnB,aAAa,YAAA,CAAa,WAAA;AAAA,IAC1B,QAAQ,EAAC;AAAA,IACT,eAAe;AAAC,GAClB;AAEA,EAAA,IAAA,CAAA,SAAA,eAAsB;AAGtB,EAAA,OAAO,CAAC,SAAQ,EAAG;AACjB,IAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,IAAA,IAAI,SAAQ,EAAG;AAEf,IAAA,MAAM,aAAA,GAAgB,aAAa,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,aAAA,EAAe;AAElB,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,UAAU,GAAA,CAAI;AAAA,GAChB;AAMA,EAAA,SAAS,aAAa,KAAA,EAAuB;AAE3C,IAAA,IAAI,KAAA,CAAM,wCAA+B,OAAO,IAAA;AAGhD,IAAA,MAAM,kBAAA,GAAqB;AAAA,MAAA,MAAA;AAAA;AAAA,MAAA,MAAA;AAAA;AAAA,MAAA,QAAA;AAAA;AAAA,MAAA,MAAA;AAAA;AAAA,KAK3B;AACA,IAAA,OAAO,kBAAA,CAAmB,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAAA,EAC/C;AAEA,EAAA,SAAS,iBAAA,GAAkE;AAEzE,IAAA,IAAI,OAAA,EAAQ,CAAE,IAAA,KAAA,GAAA,YAAwB,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACrE,MAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AACjF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAA,EAAQ;AAGR,IAAA,IAAI,CAAC,YAAA,CAAa,OAAA,EAAS,CAAA,EAAG;AAC5B,MAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,EAAE,OAAA,EAAS,kCAAkC,CAAA;AAC7D,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAA,GAAO,SAAQ,CAAE,KAAA;AACvB,IAAA,OAAA,EAAQ;AAGR,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACnC,MAAA,GAAA,CAAI,OAAO,IAAA,CAAK,EAAE,SAAS,CAAA,iCAAA,EAAoC,IAAI,KAAK,CAAA;AACxE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAA,EAAQ;AAGR,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AACzD,MAAA,SAAA,CAAU,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC9B,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,WAAA,EAAa,SAAA,CAAU,IAAA,CAAK,GAAG,EAAE,IAAA;AAAK,KACxC;AAAA,EACF;AAEA,EAAA,SAAS,aAAaC,OAAAA,EAA+B;AACnD,IAAA,MAAM,QAAQ,OAAA,EAAQ;AAGtB,IAAA,IAAI,MAAM,IAAA,KAAA,QAAA,eAA2B;AACnC,MAAA,OAAA,EAAQ;AACR,MAAA,mBAAA,CAAoBA,OAAM,CAAA;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,IAAA,WAAuB;AAC/B,MAAA,OAAA,EAAQ;AACR,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,KAAA,YAAwB;AACpC,QAAA,OAAA,EAAQ;AACR,QAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,QAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,QAAA,kBAAA,CAAmBA,OAAM,CAAA;AACzB,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AACxC,QAAA,OAAA,EAAQ;AACR,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACnC,UAAA,OAAA,EAAQ;AACR,UAAA,iBAAA,CAAkBA,SAAQ,YAAY,CAAA;AACtC,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,KAAA,YAAwB;AACpC,QAAA,OAAA,EAAQ;AACR,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACnC,UAAA,OAAA,EAAQ;AACR,UAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,UAAA,WAAA,CAAYA,OAAM,CAAA;AAClB,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,QAAA,OAAA,EAAQ;AACR,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACnC,UAAA,OAAA,EAAQ;AACR,UAAA,iBAAA,CAAkBA,OAAM,CAAA;AACxB,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,KAAA,YAAwB;AAChC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,QAAA,OAAA,EAAQ;AACR,QAAA,iBAAA,CAAkBA,SAAQ,UAAU,CAAA;AACpC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,KAAA,YAAwB;AACpC,QAAA,OAAA,EAAQ;AACR,QAAA,iBAAA,CAAkBA,SAAQ,SAAS,CAAA;AACnC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAQA,EAAA,SAAS,oBAAoBA,OAAAA,EAA4B;AACvD,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACxD,MAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAGzC,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,QAAA,OAAA,EAAQ;AAAA,MACV;AAGA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,KAAA,YAAwB;AACpC,QAAA,OAAA,EAAQ;AAGR,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,UAAA,OAAA,EAAQ;AACR,UAAA,iBAAA,CAAkBA,SAAQ,UAAU,CAAA;AACpC,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,QAAA,IAAI,KAAA,EAAO;AACT,UAAAA,OAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,QAC1B;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AACxC,QAAA,OAAA,EAAQ;AACR,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACnC,UAAA,OAAA,EAAQ;AACR,UAAA,iBAAA,CAAkBA,SAAQ,YAAY,CAAA;AACtC,UAAA;AAAA,QACF;AAAA,MACF;AAGA,MAAA,OAAO,CAAC,SAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,kBAA8B,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAChG,QAAA,OAAA,EAAQ;AAAA,MACV;AACA,MAAA,IAAA,CAAA,SAAA,eAAsB;AAAA,IACxB;AAGA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF;AAKA,EAAA,SAAS,iBAAA,GAAwC;AAE/C,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC7C,IAAA,OAAA,EAAQ;AAGR,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AAEnC,MAAA,OAAO,CAAC,SAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,kBAA8B,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAChG,QAAA,OAAA,EAAQ;AAAA,MACV;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAA,EAAQ;AAGR,IAAA,MAAM,KAAA,GAAqB;AAAA,MACzB,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAW,MAAA;AAAA,MACX,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAGA,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,OAAO,CAAC,OAAA,EAAQ,IACT,OAAA,GAAU,IAAA,KAAA,SAAA,kBACV,OAAA,EAAQ,CAAE,IAAA,KAAA,QAAA,iBACV,SAAQ,CAAE,IAAA,KAAA,QAAA,iBACV,OAAA,EAAQ,CAAE,UAAU,MAAA,EAAQ;AACjC,MAAA,SAAA,CAAU,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC9B,MAAA,OAAA,EAAQ;AAAA,IACV;AACA,IAAA,MAAM,WAAW,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,GAAO,WAAA,EAAY;AAGxD,IAAA,IAAI,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA,EAAG;AAClC,MAAA,KAAA,CAAM,SAAA,GAAY,WAAA;AAAA,IACpB,CAAA,MAAA,IAAW,QAAA,KAAa,MAAA,IAAU,QAAA,KAAa,QAAA,EAAU;AACvD,MAAA,KAAA,CAAM,SAAA,GAAY,MAAA;AAAA,IACpB,CAAA,MAAA,IAAW,QAAA,KAAa,QAAA,IAAY,QAAA,KAAa,SAAA,EAAW;AAC1D,MAAA,KAAA,CAAM,SAAA,GAAY,QAAA;AAAA,IACpB,CAAA,MAAA,IAAW,aAAa,UAAA,EAAY;AAClC,MAAA,KAAA,CAAM,SAAA,GAAY,UAAA;AAAA,IACpB,CAAA,MAAA,IAAW,QAAA,KAAa,QAAA,IAAY,QAAA,KAAa,SAAA,EAAW;AAC1D,MAAA,KAAA,CAAM,SAAA,GAAY,QAAA;AAAA,IACpB,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC9B,MAAA,KAAA,CAAM,SAAA,GAAY,MAAA;AAAA,IACpB,CAAA,MAAA,IAAW,QAAA,KAAa,WAAA,IAAe,QAAA,KAAa,UAAA,EAAY;AAC9D,MAAA,KAAA,CAAM,SAAA,GAAY,WAAA;AAAA,IACpB,CAAA,MAAA,IAAW,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,EAAG;AACtC,MAAA,KAAA,CAAM,SAAA,GAAY,MAAA;AAElB,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,qBAAqB,CAAA;AACtD,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,KAAA,CAAM,UAAA,GAAa,SAAA,CAAU,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,MAC9D;AAAA,IACF,CAAA,MAAA,IAAW,QAAA,KAAa,MAAA,IAAU,QAAA,KAAa,OAAA,EAAS;AACtD,MAAA,KAAA,CAAM,SAAA,GAAY,MAAA;AAAA,IACpB,CAAA,MAAA,IAAW,aAAa,QAAA,EAAU;AAChC,MAAA,KAAA,CAAM,SAAA,GAAY,QAAA;AAAA,IACpB,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,SAAA,GAAY,MAAA;AAAA,IACpB;AAGA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA,OAAA,EAAQ;AACR,MAAA,OAAO,CAAC,SAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,QAAA,iBAA6B,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AAChG,QAAA,MAAM,UAAA,GAAa,OAAA,EAAQ,CAAE,KAAA,CAAM,WAAA,EAAY;AAC/C,QAAA,IAAI,eAAe,UAAA,EAAY;AAC7B,UAAA,KAAA,CAAM,QAAA,GAAW,IAAA;AAAA,QACnB,CAAA,MAAA,IAAW,eAAe,UAAA,EAAY;AACpC,UAAA,KAAA,CAAM,QAAA,GAAW,KAAA;AAAA,QACnB,CAAA,MAAA,IAAW,eAAe,QAAA,EAAU;AAClC,UAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AAAA,QACjB;AACA,QAAA,OAAA,EAAQ;AAAA,MACV;AACA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,qBAAiC,OAAA,GAAU,KAAA,CAAM,WAAA,OAAkB,MAAA,EAAQ;AACvF,MAAA,OAAA,EAAQ;AACR,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AACxC,QAAA,OAAA,EAAQ;AAER,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,UAAA,KAAA,CAAM,OAAA,GAAU,SAAQ,CAAE,KAAA;AAC1B,UAAA,OAAA,EAAQ;AAAA,QACV,CAAA,MAAA,IAAW,OAAA,EAAQ,CAAE,IAAA,KAAA,gBAAA,uBAAmC;AACtD,UAAA,KAAA,CAAM,OAAA,GAAU,UAAA,CAAW,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC1C,UAAA,OAAA,EAAQ;AAAA,QACV,CAAA,MAAA,IAAW,OAAA,EAAQ,CAAE,IAAA,KAAA,SAAA,gBAA4B;AAC/C,UAAA,KAAA,CAAM,OAAA,GAAU,OAAA,EAAQ,CAAE,KAAA,KAAU,MAAA;AACpC,UAAA,OAAA,EAAQ;AAAA,QACV,CAAA,MAAA,IAAW,OAAA,EAAQ,CAAE,IAAA,KAAA,YAAA,mBAA+B;AAClD,UAAA,KAAA,CAAM,OAAA,GAAU,SAAQ,CAAE,KAAA;AAC1B,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,SAAS,mBAAmBA,OAAAA,EAA4B;AAEtD,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA;AAAA,IACF;AACA,IAAA,OAAA,EAAQ;AAER,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACxD,MAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAGzC,MAAA,MAAM,QAAQ,cAAA,EAAe;AAC7B,MAAA,IAAI,KAAA,EAAO;AACT,QAAAA,OAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,MAC1B;AAEA,MAAA,IAAA,CAAA,SAAA,eAAsB;AAAA,IACxB;AAGA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF;AAEA,EAAA,SAAS,cAAA,GAAqC;AAE5C,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,MAAA,OAAA,EAAQ;AAAA,IACV;AAGA,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,OAAO,CAAC,SAAQ,IACT,OAAA,GAAU,IAAA,KAAA,OAAA,gBACV,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AAC3C,MAAA,SAAA,CAAU,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC9B,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA;AAGjD,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,OAAA,cAA0B;AACtC,MAAA,GAAA,CAAI,OAAO,IAAA,CAAK,EAAE,SAAS,CAAA,+BAAA,EAAkC,SAAS,KAAK,CAAA;AAC3E,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAA,EAAQ;AAGR,IAAA,OAAO,6BAA6B,SAAS,CAAA;AAAA,EAC/C;AAEA,EAAA,SAAS,6BAA6B,SAAA,EAAgC;AACpE,IAAA,MAAM,KAAA,GAAqB;AAAA,MACzB,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAW,MAAA;AAAA,MACX,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAEA,IAAA,MAAM,QAAkB,EAAC;AAGzB,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AACzD,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC1B,MAAA,OAAA,EAAQ;AAAA,IACV;AAGA,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AAGrC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,MAAA,KAAA,CAAM,SAAA,GAAY,MAAA;AAClB,MAAA,KAAA,CAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAK,CAAC,CAAA;AACtE,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA;AAEnE,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAE9B,MAAA,IAAI,OAAA,KAAY,MAAA,EAAQ,KAAA,CAAM,SAAA,GAAY,MAAA;AAAA,WAAA,IACjC,OAAA,KAAY,WAAA,EAAa,KAAA,CAAM,SAAA,GAAY,WAAA;AAAA,WAAA,IAC3C,OAAA,KAAY,QAAA,EAAU,KAAA,CAAM,SAAA,GAAY,QAAA;AAAA,WAAA,IACxC,OAAA,KAAY,UAAA,EAAY,KAAA,CAAM,SAAA,GAAY,UAAA;AAAA,WAAA,IAC1C,OAAA,KAAY,MAAA,EAAQ,KAAA,CAAM,SAAA,GAAY,MAAA;AAAA,WAAA,IACtC,OAAA,KAAY,WAAA,EAAa,KAAA,CAAM,SAAA,GAAY,WAAA;AAAA,WAAA,IAC3C,OAAA,KAAY,UAAA,EAAY,KAAA,CAAM,SAAA,GAAY,UAAA;AAAA,WAAA,IAC1C,OAAA,KAAY,QAAA,IAAY,OAAA,KAAY,SAAA,QAAiB,SAAA,GAAY,QAAA;AAAA,WAAA,IACjE,OAAA,KAAY,MAAA,EAAQ,KAAA,CAAM,SAAA,GAAY,MAAA;AAAA,WAAA,IACtC,OAAA,KAAY,QAAA,EAAU,KAAA,CAAM,SAAA,GAAY,QAAA;AAAA,WAAA,IAExC,OAAA,KAAY,UAAA,EAAY,KAAA,CAAM,QAAA,GAAW,IAAA;AAAA,WAAA,IACzC,OAAA,KAAY,QAAA,EAAU,KAAA,CAAM,MAAA,GAAS,IAAA;AAAA,WAAA,IACrC,OAAA,KAAY,MAAA,EAAQ,KAAA,CAAM,IAAA,GAAO,IAAA;AAAA,WAAA,IACjC,OAAA,CAAQ,UAAA,CAAW,UAAU,CAAA,EAAG;AACvC,QAAA,KAAA,CAAM,OAAA,GAAU,UAAA,CAAW,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,MAC7C;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,SAAS,iBAAA,CAAkBA,SAAsB,OAAA,EAAiC;AAEhF,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,YAAA,GAAe,SAAQ,CAAE,KAAA;AAC/B,IAAA,OAAA,EAAQ;AAER,IAAA,IAAI,KAAA;AAGJ,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACnC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,QAAA,KAAA,GAAQ,SAAQ,CAAE,KAAA;AAClB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF;AAEA,IAAAA,OAAAA,CAAO,cAAc,IAAA,CAAK;AAAA,MACxB,IAAA,EAAM,cAAA;AAAA,MACN,gBAAA,EAAkB,OAAA;AAAA,MAClB,YAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,SAAS,YAAYA,OAAAA,EAA4B;AAC/C,IAAA,MAAM,SAAmB,EAAC;AAE1B,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AACzD,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,QAAA,MAAA,CAAO,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAAA,MAC7B;AACA,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAAA,QAAO,MAAA,GAAS,MAAA;AAAA,EAClB;AAEA,EAAA,SAAS,kBAAkBA,OAAAA,EAA4B;AACrD,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,MAAAA,OAAAA,CAAO,YAAA,GAAe,OAAA,EAAQ,CAAE,KAAA;AAChC,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF;AACF;AAKO,SAAS,qBAAqB,MAAA,EAA8B;AACjE,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,MAAA,CAAO,IAAI,IAAI,IAAA,GAAO,GAAA;AACtD,EAAA,KAAA,CAAM,IAAA,CAAK,GAAG,OAAO,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,IAAA,EAAO,MAAA,CAAO,WAAW,CAAA,CAAE,CAAA;AAG/D,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,gBAAA,CAAiB,KAAA,CAAM,IAAI,CAAC,CAAA,EAAA,EAAK,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,GAAA,IAAO,OAAO,aAAA,EAAe;AACtC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,IAAI,GAAA,CAAI,qBAAqB,YAAA,EAAc;AACzC,MAAA,MAAM,WAAW,GAAA,CAAI,KAAA,GAAQ,CAAA,IAAA,EAAO,GAAA,CAAI,KAAK,CAAA,CAAA,GAAK,EAAA;AAClD,MAAA,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,GAAA,CAAI,YAAY,CAAA,EAAG,QAAQ,CAAA,CAAE,CAAA;AAAA,IAC3D,CAAA,MAAA,IAAW,GAAA,CAAI,gBAAA,KAAqB,UAAA,EAAY;AAC9C,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,GAAA,CAAI,YAAY,CAAA,CAAE,CAAA;AAAA,IAC9C,CAAA,MAAA,IAAW,GAAA,CAAI,gBAAA,KAAqB,SAAA,EAAW;AAC7C,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,GAAA,CAAI,YAAY,CAAA,CAAE,CAAA;AAAA,IAC7C;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC7C,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACnD,IAAA,IAAI,OAAO,YAAA,EAAc;AACvB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,MAAA,CAAO,YAAY,CAAA,CAAE,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKO,SAAS,qBAAqB,MAAA,EAA+C;AAClF,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAA,KAAA,MAAU;AAAA,IACzC,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,IAAA,EAAM,oBAAA,CAAqB,KAAA,CAAM,SAAS,CAAA;AAAA,IAC1C,QAAA,EAAU,MAAM,QAAA,IAAY,MAAA;AAAA,IAC5B,MAAA,EAAQ,MAAM,MAAA,IAAU,MAAA;AAAA,IACxB,IAAA,EAAM,MAAM,IAAA,IAAQ,MAAA;AAAA,IACpB,QAAQ,KAAA,CAAM,UAAA;AAAA;AAAA,IACd,SAAS,KAAA,CAAM;AAAA,GACjB,CAAE,CAAA;AAGF,EAAA,KAAA,MAAW,GAAA,IAAO,OAAO,aAAA,EAAe;AACtC,IAAA,IAAI,GAAA,CAAI,qBAAqB,YAAA,EAAc;AACzC,MAAA,MAAM,SAAA,GAAY,GAAA,CAAI,KAAA,GAClB,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA,GACzB,WAAA,CAAY,GAAA,CAAI,YAAY,CAAA,GAAI,IAAA;AACpC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU,MAAA;AAAA,QACV,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,MAAA;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,QAAA,EAAU;AAAA,UACR,QAAQ,GAAA,CAAI,YAAA;AAAA,UACZ,IAAA,EAAM;AAAA;AACR,OACM,CAAA;AAAA,IACV;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,UAAA,EAAY,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,GAAI,GAAA;AAAA,IACvC,MAAA,EAAQ,OAAO,MAAA,CAAO,CAAA,CAAA,KAAK,OAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAAA,IACpD,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,cAAc,MAAA,CAAO;AAAA,GACvB;AACF;AAIA,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,OAAO,IAAA,CACJ,WAAA,EAAY,CACZ,KAAA,CAAM,KAAK,CAAA,CACX,GAAA;AAAA,IAAI,CAAC,IAAA,EAAM,KAAA,KACV,KAAA,KAAU,IAAI,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,IAAA,CAAK,MAAM,CAAC;AAAA,GAClE,CACC,KAAK,EAAE,CAAA;AACZ;AAEA,SAAS,iBAAiB,IAAA,EAAsB;AAC9C,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,iBAAA,EAAmB,OAAO,EAAE,WAAA,EAAY;AAC9D;AAEA,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,OAAO,IAAA,CACJ,OAAA,CAAQ,iBAAA,EAAmB,OAAO,EAClC,WAAA,EAAY;AACjB;AAMA,SAAS,gBAAgB,IAAA,EAAuB;AAC9C,EAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,EAAY;AAK/B,EAAA,IAAI,wBAAA,CAAyB,IAAA,CAAK,KAAK,CAAA,EAAG;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AAIA,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,KAAK,CAAA,EAAG;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,OAAO,WAAA,CAAY,KAAK,IAAI,CAAA;AAC9B;AAEA,SAAS,WAAW,IAAA,EAAyC;AAC3D,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AACjB,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,MAAA,EAAQ,OAAO,IAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,OAAA,EAAS,OAAO,KAAA;AAC3C,EAAA,MAAM,GAAA,GAAM,WAAW,IAAI,CAAA;AAC3B,EAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG,OAAO,GAAA;AACxB,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAA;AACxC;AAEA,SAAS,gBAAgB,KAAA,EAA4B;AACnD,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,UAAA,CAAW,SAAS,CAAA,EAAG;AACnD,IAAA,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,EACzC,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,IAAA,CAAK,MAAM,SAAS,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,KAAA,CAAM,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA;AACzC,EAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACrC,EAAA,IAAI,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AACjC,EAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAC/B,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,qBAAqB,SAAA,EAAoC;AAEhE,EAAA,MAAM,OAAA,GAA2C;AAAA,IAC/C,MAAA,EAAQ,QAAA;AAAA,IACR,WAAA,EAAa,QAAA;AAAA,IACb,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,QAAA;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,WAAA,EAAa,WAAA;AAAA,IACb,UAAA,EAAY,UAAA;AAAA,IACZ,QAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,MAAA,EAAQ,OAAA;AAAA,IACR,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AACA,EAAA,OAAO,OAAA,CAAQ,SAAS,CAAA,IAAK,QAAA;AAC/B;;;AC5rBO,SAAS,UAAU,IAAA,EAAuC;AAC/D,EAAA,MAAM,MAAwB,EAAE,MAAA,EAAQ,EAAC,EAAG,QAAA,EAAU,EAAC,EAAE;AACzD,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,IAAI,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,EAAS;AAE9B,EAAA,IAAI,GAAA,GAAM,CAAA;AAGV,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,GAAG,KAAK,EAAE,IAAA,EAAA,KAAA,YAAqB,KAAA,EAAO,EAAA,EAAI,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAA,EAAE;AACrG,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,GAAA,EAAK,CAAA;AAClC,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,EAAQ,CAAE,IAAA,KAAA,KAAA;AAChC,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAoB;AAChC,IAAA,OAAO,OAAA,EAAQ,CAAE,IAAA,KAAS,IAAA,EAAM,OAAA,EAAQ;AAAA,EAC1C,CAAA;AAGA,EAAA,IAAA,CAAA,SAAA,eAAsB;AAGtB,EAAA,MAAM,aAAa,eAAA,EAAgB;AACnC,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,QAAQ,GAAA,CAAI,MAAA,CAAO,SAAS,CAAA,GAAI,GAAA,CAAI,SAAS,CAAC;AAAA,QAC5C,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,MACD,UAAU;AAAC,KACb;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAmB;AAAA,IACvB,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,UAAA,CAAW,IAAA;AAAA,IACjB,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,OAAA,EAAS,EAAA;AAAA,IACT,GAAA,EAAK,WAAW,GAAA,IAAO,EAAA;AAAA,IACvB,eAAe,UAAA,CAAW,aAAA;AAAA,IAC1B,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,UAAU,EAAC;AAAA,IACX,SAAS;AAAC,GACZ;AAEA,EAAA,IAAA,CAAA,SAAA,eAAsB;AAGtB,EAAA,OAAO,CAAC,SAAQ,EAAG;AACjB,IAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,IAAA,IAAI,SAAQ,EAAG;AAEf,IAAA,MAAM,MAAA,GAAS,iBAAiB,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACb,IAAA,IAAA,CAAK,GAAA,GAAM,MAAMC,YAAAA,CAAY,IAAA,CAAK,KAAK,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAC,CAAA;AAAA,EAC9D;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,IAAA;AAAA,IACN,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,UAAU,GAAA,CAAI;AAAA,GAChB;AAIA,EAAA,SAAS,eAAA,GAA0H;AAEjI,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,MAAA,MAAM,UAAA,GAAa,SAAQ,CAAE,KAAA;AAC7B,MAAA,OAAA,EAAQ;AAGR,MAAA,MAAMC,UAAAA,GAAsB,CAAC,UAAU,CAAA;AACvC,MAAA,OAAO,OAAA,GAAU,IAAA,KAAA,YAAA,qBAAiC,OAAA,GAAU,KAAA,CAAM,WAAA,OAAkB,IAAA,EAAM;AACxF,QAAAA,UAAAA,CAAU,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC9B,QAAA,OAAA,EAAQ;AAAA,MACV;AAGA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,qBAAiC,OAAA,GAAU,KAAA,CAAM,WAAA,OAAkB,IAAA,EAAM;AACrF,QAAA,OAAA,EAAQ;AAGR,QAAA,MAAM,YAAsB,EAAC;AAC7B,QAAA,OAAO,CAAC,SAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,OAAA,gBAA4B,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AAC/F,UAAA,SAAA,CAAU,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC9B,UAAA,OAAA,EAAQ;AAAA,QACV;AACA,QAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,EAAE,CAAA;AAG7B,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,OAAA,cAA0B;AACtC,UAAA,OAAA,EAAQ;AAAA,QACV;AAGA,QAAA,IAAIC,KAAAA,GAAOD,WAAU,GAAA,CAAI,CAAA,CAAA,KAAK,aAAa,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AACtD,QAAA,IAAI,CAACC,KAAAA,CAAK,WAAA,EAAY,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,UAAAA,KAAAA,IAAQ,MAAA;AAAA,QACV;AAGA,QAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,QAAA,IAAI,aAAA;AACJ,QAAA,IAAI,SAAA;AAGJ,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,UAAA,OAAA,EAAQ;AACR,UAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACxD,YAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,YAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAGzC,YAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,cAAA,OAAA,EAAQ;AAAA,YACV;AAGA,YAAA,IAAI,OAAA,GAAU,IAAA,KAAA,OAAA,cAA0B;AACtC,cAAA,OAAA,EAAQ;AACR,cAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,gBAAA,aAAA,GAAgB,SAAQ,CAAE,KAAA;AAC1B,gBAAA,OAAA,EAAQ;AAAA,cACV;AAEA,cAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,qBAAiC,OAAA,GAAU,KAAA,CAAM,WAAA,OAAkB,OAAA,EAAS;AACxF,gBAAA,OAAA,EAAQ;AACR,gBAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,kBAAA,SAAA,GAAY,SAAQ,CAAE,KAAA;AACtB,kBAAA,OAAA,EAAQ;AAAA,gBACV;AAAA,cACF;AAAA,YACF;AAGA,YAAA,OAAO,CAAC,SAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,kBAA8B,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAChG,cAAA,OAAA,EAAQ;AAAA,YACV;AACA,YAAA,IAAA,CAAA,SAAA,eAAsB;AAAA,UACxB;AACA,UAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,YAAA,OAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAEA,QAAA,OAAO;AAAA,UACL,IAAA,EAAAA,KAAAA;AAAA,UACA,WAAA,EAAa,WAAW,GAAG,CAAA,CAAA;AAAA,UAC3B,GAAA;AAAA,UACA,aAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IAIF;AAIA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,KAAA,YAAwB;AACpC,MAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,EAAE,OAAA,EAAS,8CAA8C,CAAA;AACzE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAA,EAAQ;AAGR,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,OAAO,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC9C,MAAA,SAAA,CAAU,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC9B,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,EAAE,OAAA,EAAS,kCAAkC,CAAA;AAC7D,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,IAAA,GAAO,UAAU,GAAA,CAAI,CAAA,CAAA,KAAK,aAAa,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AACtD,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,MAAA,IAAA,IAAQ,MAAA;AAAA,IACV;AAGA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,OAAA,cAA0B;AACtC,MAAA,GAAA,CAAI,OAAO,IAAA,CAAK,EAAE,SAAS,CAAA,kCAAA,EAAqC,IAAI,KAAK,CAAA;AACzE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAA,EAAQ;AAGR,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AACzD,MAAA,SAAA,CAAU,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC9B,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,WAAA,EAAa,SAAA,CAAU,IAAA,CAAK,GAAG,EAAE,IAAA;AAAK,KACxC;AAAA,EACF;AAEA,EAAA,SAAS,iBAAiBC,KAAAA,EAA2B;AACnD,IAAA,MAAM,QAAQ,OAAA,EAAQ;AAGtB,IAAA,IAAI,MAAM,IAAA,KAAA,QAAA,eAA2B;AACnC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,MAAAA,KAAAA,CAAK,gBAAgB,mBAAA,EAAoB;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,SAAA,gBAA4B;AACpC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,MAAAA,KAAAA,CAAK,UAAU,mBAAA,EAAoB;AACnC,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,KAAA,YAAwB;AAChC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,MAAAA,KAAAA,CAAK,MAAM,mBAAA,EAAoB;AAC/B,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,IAAA,WAAuB;AAC/B,MAAA,OAAA,EAAQ;AACR,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,UAAA,iBAA6B;AACzC,QAAA,OAAA,EAAQ;AACR,QAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,QAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,QAAA,oBAAA,CAAqBA,KAAI,CAAA;AACzB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,OAAA,cAA0B;AAClC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,KAAA,YAAwB;AACpC,QAAA,OAAA,EAAQ;AACR,QAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,QAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,QAAA,mBAAA,CAAoBA,KAAI,CAAA;AACxB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,MAAA,aAAyB;AACjC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,UAAA,iBAA6B;AACzC,QAAA,OAAA,EAAQ;AACR,QAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,QAAAA,KAAAA,CAAK,WAAW,mBAAA,EAAoB;AACpC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,SAAS,qBAAqBA,KAAAA,EAAwB;AAEpD,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA;AAAA,IACF;AACA,IAAA,OAAA,EAAQ;AAER,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACxD,MAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAGzC,MAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,MAAA,IAAI,OAAA,EAAS;AACX,QAAAA,KAAAA,CAAK,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AAAA,MAC5B;AAEA,MAAA,IAAA,CAAA,SAAA,eAAsB;AAAA,IACxB;AAGA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF;AAEA,EAAA,SAAS,gBAAA,GAA6C;AAEpD,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,MAAM,cAAc,mBAAA,EAAoB;AACxC,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,cAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF;AAEA,EAAA,SAAS,oBAAoBA,KAAAA,EAAwB;AAEnD,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA;AAAA,IACF;AACA,IAAA,OAAA,EAAQ;AAER,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACxD,MAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAGzC,MAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAAA,KAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,MAC1B;AAEA,MAAA,IAAA,CAAA,SAAA,eAAsB;AAAA,IACxB;AAGA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF;AAEA,EAAA,SAAS,eAAA,GAA2C;AAElD,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,MAAM,WAAW,mBAAA,EAAoB;AACrC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,WAAA,EAAY,CAAE,QAAQ,MAAM,CAAA;AACrD,IAAA,IAAI,YAAY,EAAA,EAAI;AAElB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,EAAS,QAAA;AAAA,QACT,MAAA,EAAQ;AAAA,OACV;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,aAAA;AAAA,MACN,SAAS,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,OAAO,EAAE,IAAA,EAAK;AAAA,MACzC,QAAQ,QAAA,CAAS,KAAA,CAAM,OAAA,GAAU,CAAC,EAAE,IAAA;AAAK,KAC3C;AAAA,EACF;AAEA,EAAA,SAAS,mBAAA,GAA8B;AACrC,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AACzD,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAC1B,MAAA,OAAA,EAAQ;AAAA,IACV;AACA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,EAC9B;AACF;AAKO,SAAS,mBAAmB,IAAA,EAA0B;AAC3D,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,CAAA;AACjD,EAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,WAAW,CAAA,OAAA,EAAU,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA;AAGzD,EAAA,IAAI,KAAK,aAAA,EAAe;AACtB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,IAAA,CAAK,aAAa,CAAA,CAAE,CAAA;AAAA,EAC5C;AAGA,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAAA,EACvC;AAGA,EAAA,IAAI,KAAK,GAAA,EAAK;AACZ,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAG,CAAA,CAAE,CAAA;AAAA,EAC/B;AAGA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACnC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,OAAA,CAAQ,WAAW,CAAA,CAAE,CAAA;AAAA,IACzC;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC3B,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AACvB,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,MAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,QAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,MAAA,CAAO,OAAO,CAAA,IAAA,EAAO,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,MACxD,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,eAAA,EAAkB,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKO,SAAS,mBAAmB,IAAA,EAA2C;AAE5E,EAAA,MAAM,QAAA,GAAW,yBAAA,CAA0B,IAAA,CAAK,IAAI,CAAA;AAGpD,EAAA,MAAM,gBAAgB,IAAA,CAAK,aAAA;AAE3B,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,GAAG,IAAI,IAAA,CAAK,GAAA,GAAM,CAAA,CAAA,EAAI,IAAA,CAAK,GAAG,CAAA,CAAA;AAAA,IACxD,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,WAAA;AAAA,IAC9B,UAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,SAAS,KAAA,KAAU;AAC9C,MAAA,MAAM,OAAA,GAAU,2BAAA,CAA4B,OAAA,CAAQ,WAAW,CAAA;AAC/D,MAAA,MAAM,aAAA,GAAgB,iCAAA,CAAkC,OAAA,CAAQ,WAAA,EAAa,KAAK,aAAa,CAAA;AAE/F,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,WAAW,KAAK,CAAA,CAAA;AAAA,QACpB,SAAS,OAAA,CAAQ,WAAA;AAAA,QACjB,KAAA,EAAO,KAAA;AAAA,QACP,aAAA,EAAe,QAAA;AAAA,QACf,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,OAAA;AAAA,UACN,GAAG;AAAA;AACL,OACF;AAAA,IACF,CAAC,CAAA;AAAA,IACD,QAAQ,EAAC;AAAA,IACT,aAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,EAAW,IAAA,CAAK,GAAA,KAAQ,GAAA,IAAO,KAAK,GAAA,KAAQ;AAAA,GAC9C;AACF;AAKA,SAAS,0BAA0B,IAAA,EAAsB;AACvD,EAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,EAAY;AAE/B,EAAA,IAAI,MAAM,QAAA,CAAS,MAAM,KAAK,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG;AACrD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,QAAA,CAAS,QAAQ,KAAK,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG;AACtD,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,QAAA,CAAS,QAAQ,KAAK,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,EAAG;AACrD,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,EAAG;AAC/B,IAAA,OAAO,WAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA;AACT;AAQA,SAAS,iCAAA,CAAkC,aAAqB,aAAA,EAAiD;AAC/G,EAAA,MAAM,KAAA,GAAQ,YAAY,WAAA,EAAY;AAItC,EAAA,MAAM,aAAa,aAAA,IAAiB,MAAA;AAGpC,EAAA,IAAI,MAAM,QAAA,CAAS,QAAQ,KAAK,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG;AACvD,IAAA,MAAM,aAAa,WAAA,CAAY,KAAA,CAAM,6BAA6B,CAAA,IAChD,WAAA,CAAY,MAAM,kBAAkB,CAAA;AACtD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,UAAA,GAAa,UAAA,CAAW,CAAC,CAAA,GAAI;AAAA,KACtC;AAAA,EACF;AAGA,EAAA,IAAI,MAAM,QAAA,CAAS,MAAM,KAAK,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG;AACrD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,UAAA;AAAA,MACR,UAAA,EAAY,CAAC,IAAA,EAAM,MAAA,EAAQ,WAAW;AAAA,KACxC;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC5B,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,UAAA;AAAA,MACR,UAAA,EAAY,CAAC,IAAA,EAAM,MAAA,EAAQ,eAAe,WAAW;AAAA,KACvD;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1B,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,UAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,EAAE,OAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,IAAA,EAAM,MAAA,EAAQ,UAAU,IAAA,EAAK;AAAA,QAC7D,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,MAAM,UAAA;AAAW;AACjE,KACF;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,IAAK,MAAM,QAAA,CAAS,YAAY,CAAA,IACtD,KAAA,CAAM,SAAS,SAAS,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,UAAU,CAAA,EAAG;AAC3D,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,UAAA;AAAA,MACR,UAAA,EAAY,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO;AAAA,KACpC;AAAA,EACF;AAGA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAA;AAAA,IACR,UAAA,EAAY,CAAC,IAAA,EAAM,MAAA,EAAQ,WAAW;AAAA,GACxC;AACF;AAcA,SAAS,aAAa,IAAA,EAAsB;AAE1C,EAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,EAAG;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,aAAa,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,EAC/F;AAEA,EAAA,OAAO,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAA;AACpD;AAEA,SAASH,aAAY,IAAA,EAAsB;AACzC,EAAA,OAAO,IAAA,CACJ,QAAQ,iBAAA,EAAmB,OAAO,EAClC,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,WAAA,EAAY;AACjB;AAMA,SAAS,4BAA4B,WAAA,EAA6B;AAChE,EAAA,MAAM,KAAA,GAAQ,YAAY,WAAA,EAAY;AAGtC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC5B,IAAA,OAAO,aAAA;AAAA,EACT;AAGA,EAAA,IAAI,MAAM,QAAA,CAAS,MAAM,KAAK,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG;AACrD,IAAA,OAAO,aAAA;AAAA,EACT;AAGA,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA,IAAK,MAAM,QAAA,CAAS,OAAO,CAAA,IACtD,KAAA,CAAM,SAAS,SAAS,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,UAAU,CAAA,EAAG;AAC3D,IAAA,OAAO,aAAA;AAAA,EACT;AAGA,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG;AAC/E,IAAA,OAAO,cAAA;AAAA,EACT;AAGA,EAAA,IAAI,MAAM,QAAA,CAAS,QAAQ,KAAK,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG;AACtD,IAAA,OAAO,eAAA;AAAA,EACT;AAGA,EAAA,IAAI,MAAM,QAAA,CAAS,OAAO,KAAK,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG;AACtD,IAAA,OAAO,aAAA;AAAA,EACT;AAGA,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,UAAU,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,UAAU,CAAA,EAAG;AACzF,IAAA,OAAO,aAAA;AAAA,EACT;AAGA,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG;AAC3B,IAAA,OAAO,aAAA;AAAA,EACT;AAGA,EAAA,OAAO,aAAA;AACT;;;AC9oBO,SAAS,UAAA,CAAW,MAAc,UAAA,EAA8C;AACrF,EAAA,MAAM,GAAA,GAAyB,EAAE,UAAA,EAAY,MAAA,EAAQ,EAAC,EAAE;AAGxD,EAAA,IAAI,UAAA,GAAa,KAAK,IAAA,EAAK;AAC3B,EAAA,IAAI,UAAA,CAAW,WAAA,EAAY,CAAE,UAAA,CAAW,KAAK,CAAA,EAAG;AAC9C,IAAA,UAAA,GAAa,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,EACxC;AAEA,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,UAAA,EAAY,GAAG,CAAA;AAEhD,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,QAAQ,GAAA,CAAI,MAAA,CAAO,SAAS,CAAA,GAAI,GAAA,CAAI,SAAS,CAAC;AAAA,QAC5C,OAAA,EAAS,sCAAsC,IAAI,CAAA,CAAA;AAAA,OACpD,CAAA;AAAA,MACD,UAAU;AAAC,KACb;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,OAAA;AAAA,MACN,SAAA;AAAA,MACA,GAAA,EAAK;AAAA,KACP;AAAA,IACA,QAAQ,EAAC;AAAA,IACT,UAAU;AAAC,GACb;AACF;AAKA,SAAS,cAAA,CAAe,MAAc,GAAA,EAA+C;AACnF,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAGjB,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,IAAA,EAAM,OAAO,CAAA;AAC9C,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,QAAA,CAAS,IAAA,EAAM,GAAG,CAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,QAAA,CAAS,KAAA,EAAO,GAAG,CAAA;AAChD,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,KAAA;AAAA,QACV,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AAC5C,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AAC/C,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,IAAA;AAAA,QACV,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,OAAO,cAAA,CAAe,IAAS,CAAA,IACxB,eAAA,CAAgB,MAAM,GAAG,CAAA,IACzB,eAAA,CAAgB,IAAA,EAAM,GAAG,CAAA;AAClC;AAOA,SAAS,cAAA,CAAe,MAAc,GAAA,EAAmD;AACvF,EAAA,MAAM,SAAA,GAAY,KAAK,WAAA,EAAY;AAGnC,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,qBAAqB,CAAA;AACvD,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,YAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,UAAU,CAAC;AAAA,KACnB;AAAA,EACF;AAGA,EAAA,IAAI,cAAc,gBAAA,EAAkB;AAClC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,YAAA;AAAA,MACN,KAAA,EAAO,WAAA;AAAA,MACP,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AASA,SAAS,eAAA,CAAgB,MAAc,GAAA,EAAoD;AACzF,EAAkB,KAAK,WAAA;AAGvB,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,0BAA0B,CAAA;AAC3D,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,aAAA,CAAc,CAAC,GAAG,GAAG,CAAA;AACvD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,KAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,uBAAuB,CAAA;AACrD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,UAAA,CAAW,CAAC,GAAG,GAAG,CAAA;AACpD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,KAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,4BAA4B,CAAA;AAC9D,EAAA,IAAI,cAAA,EAAgB;AAElB,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,sBAAsB,CAAA;AACrD,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAC,CAAA,CAAE,IAAA,EAAK;AACtC,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,CAAC,CAAA,CAAE,IAAA,EAAK;AAGlC,IAAA,IAAI,CAAC,YAAY,OAAA,EAAS,KAAK,EAAE,QAAA,CAAS,KAAA,CAAM,WAAA,EAAa,CAAA,EAAG;AAC9D,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,SAAA,EAAW,GAAG,CAAA;AAChD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,KAAA;AAAA,QACA,KAAA,EAAO,QAAA;AAAA,QACP,KAAA,EAAOI,YAAW,KAAK;AAAA,OACzB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAQA,SAAS,eAAA,CAAgB,MAAc,GAAA,EAAoD;AAEzF,EAAA,MAAM,SAAA,GAAiE;AAAA,IACrE,EAAE,OAAA,EAAS,qBAAA,EAAuB,QAAA,EAAU,IAAA,EAAK;AAAA,IACjD,EAAE,OAAA,EAAS,qBAAA,EAAuB,QAAA,EAAU,IAAA,EAAK;AAAA,IACjD,EAAE,OAAA,EAAS,qBAAA,EAAuB,QAAA,EAAU,IAAA,EAAK;AAAA,IACjD,EAAE,OAAA,EAAS,qBAAA,EAAuB,QAAA,EAAU,IAAA,EAAK;AAAA,IACjD,EAAE,OAAA,EAAS,oBAAA,EAAsB,QAAA,EAAU,GAAA,EAAI;AAAA,IAC/C,EAAE,OAAA,EAAS,oBAAA,EAAsB,QAAA,EAAU,GAAA;AAAI,GACjD;AAGA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,4BAA4B,CAAA;AAC1D,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,UAAA,CAAW,CAAC,GAAG,GAAG,CAAA;AACpD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,YAAA;AAAA,QACN,KAAA;AAAA,QACA,QAAA,EAAU,IAAA;AAAA,QACV,KAAA,EAAOA,WAAAA,CAAW,UAAA,CAAW,CAAC,CAAC;AAAA,OACjC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,EAAE,OAAA,EAAS,QAAA,EAAS,IAAK,SAAA,EAAW;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAC/C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,YAAA;AAAA,UACN,KAAA;AAAA,UACA,QAAA;AAAA,UACA,KAAA,EAAOA,WAAAA,CAAW,KAAA,CAAM,CAAC,CAAC;AAAA,SAC5B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAQA,SAAS,mBAAA,CAAoB,MAAc,GAAA,EAA+C;AACxF,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAGjB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA;AAC5C,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,iBAAA;AAAA,MACN,UAAA,EAAY,SAAS,CAAC,CAAA;AAAA,MACtB,SAAA,EAAW,SAAS,CAAC;AAAA,KACvB;AAAA,EACF;AAGA,EAAA,MAAM,SAAA,GAAYC,aAAY,IAAI,CAAA;AAElC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,iBAAA;AAAA,IACN,YAAY,GAAA,CAAI,UAAA;AAAA,IAChB;AAAA,GACF;AACF;AAKA,SAASD,YAAW,IAAA,EAAyC;AAC3D,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAGjB,EAAA,IAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,KAAK,QAAA,CAAS,GAAG,CAAA,IACzC,IAAA,CAAK,WAAW,GAAG,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAI;AAChD,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EACzB;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,MAAA,EAAQ,OAAO,IAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,OAAA,EAAS,OAAO,KAAA;AAG3C,EAAA,MAAM,GAAA,GAAM,WAAW,IAAI,CAAA;AAC3B,EAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG,OAAO,GAAA;AAGxB,EAAA,OAAO,IAAA;AACT;AAMA,SAASC,aAAY,IAAA,EAAsB;AACzC,EAAA,OAAO,IAAA,CACJ,WAAA,EAAY,CACZ,KAAA,CAAM,KAAK,CAAA,CACX,GAAA;AAAA,IAAI,CAAC,IAAA,EAAM,KAAA,KACV,KAAA,KAAU,IAAI,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,IAAA,CAAK,MAAM,CAAC;AAAA,GAClE,CACC,KAAK,EAAE,CAAA;AACZ;AAKA,SAAS,eAAA,CAAgB,MAAc,SAAA,EAA2D;AAChG,EAAA,MAAM,cAAA,GAAiB,UAAU,WAAA,EAAY;AAC7C,EAAA,MAAM,SAAA,GAAY,KAAK,WAAA,EAAY;AAEnC,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,IAAK,UAAU,MAAA,GAAS,cAAA,CAAe,QAAQ,CAAA,EAAA,EAAK;AAClE,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,IAAA,IAAI,SAAS,GAAA,EAAK,KAAA,EAAA;AAAA,SAAA,IACT,SAAS,GAAA,EAAK,KAAA,EAAA;AAAA,SAAA,IACd,KAAA,KAAU,KAAK,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA,GAAI,cAAA,CAAe,MAAM,CAAA,KAAM,cAAA,EAAgB;AACxF,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,QACrB,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,UAAU,MAAM;AAAA,OACxC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,oBAAoB,KAAA,EAA4B;AAC9D,EAAA,OAAO,uBAAA,CAAwB,MAAM,SAAS,CAAA;AAChD;AAEA,SAAS,wBAAwB,SAAA,EAAmC;AAClE,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,QAAA,GAAW,GAAG,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,SAAS,CAAA,CAAA;AAC3E,MAAA,QAAQ,UAAU,KAAA;AAAO,QACvB,KAAK,UAAA;AACH,UAAA,OAAO,GAAG,QAAQ,CAAA,QAAA,CAAA;AAAA,QACpB,KAAK,OAAA;AACH,UAAA,OAAO,GAAG,QAAQ,CAAA,QAAA,CAAA;AAAA,QACpB,KAAK,QAAA;AACH,UAAA,MAAM,KAAA,GAAQ,OAAO,SAAA,CAAU,KAAA,KAAU,WACrC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAK,CAAA,CAAA,CAAA,GACnB,SAAA,CAAU,KAAA;AACd,UAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA;AAAA;AAElC,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,QAAA,GAAW,GAAG,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,SAAS,CAAA,CAAA;AAC3E,MAAA,MAAM,KAAA,GAAQ,OAAO,SAAA,CAAU,KAAA,KAAU,WACrC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAK,CAAA,CAAA,CAAA,GACnB,SAAA,CAAU,KAAA;AACd,MAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAI,SAAA,CAAU,QAAQ,IAAI,KAAK,CAAA,CAAA;AAAA,IACnD;AAAA,IAEA,KAAK,YAAA,EAAc;AACjB,MAAA,IAAI,SAAA,CAAU,UAAU,SAAA,EAAW;AACjC,QAAA,OAAO,CAAA,qBAAA,EAAwB,UAAU,IAAI,CAAA,CAAA,CAAA;AAAA,MAC/C,CAAA,MAAO;AACL,QAAA,OAAO,CAAA,EAAG,UAAU,UAAU,CAAA,kBAAA,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,IAAA,GAAO,uBAAA,CAAwB,SAAA,CAAU,IAAI,CAAA;AACnD,MAAA,MAAM,KAAA,GAAQ,uBAAA,CAAwB,SAAA,CAAU,KAAK,CAAA;AACrD,MAAA,MAAM,EAAA,GAAK,SAAA,CAAU,QAAA,KAAa,KAAA,GAAQ,IAAA,GAAO,IAAA;AACjD,MAAA,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,EAAE,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,IAClC;AAAA;AAGF,EAAA,OAAO,EAAA;AACT;AAKO,SAAS,oBAAoB,KAAA,EAA4B;AAC9D,EAAA,OAAO,KAAA,GAAQ,uBAAA,CAAwB,KAAA,CAAM,SAAS,CAAA;AACxD;AAEA,SAAS,wBAAwB,SAAA,EAAmC;AAClE,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,SAAA,GAAYC,iBAAAA,CAAiB,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA;AAC5D,MAAA,QAAQ,UAAU,KAAA;AAAO,QACvB,KAAK,UAAA;AACH,UAAA,OAAO,GAAG,SAAS,CAAA,YAAA,CAAA;AAAA,QACrB,KAAK,OAAA;AACH,UAAA,OAAO,GAAG,SAAS,CAAA,SAAA,CAAA;AAAA,QACrB,KAAK,QAAA;AACH,UAAA,OAAO,CAAA,EAAG,SAAS,CAAA,IAAA,EAAO,SAAA,CAAU,KAAK,CAAA,CAAA;AAAA;AAE7C,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAiB,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA;AAC5D,MAAA,MAAM,KAAA,GAAgC;AAAA,QACpC,IAAA,EAAM,IAAA;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,GAAA,EAAK,GAAA;AAAA,QACL,GAAA,EAAK,GAAA;AAAA,QACL,IAAA,EAAM,IAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AACA,MAAA,OAAO,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,KAAA,CAAM,SAAA,CAAU,QAAQ,CAAA,IAAK,SAAA,CAAU,QAAQ,CAAA,CAAA,EAAI,SAAA,CAAU,KAAK,CAAA,CAAA;AAAA,IAC3F;AAAA,IAEA,KAAK,YAAA,EAAc;AACjB,MAAA,IAAI,SAAA,CAAU,UAAU,SAAA,EAAW;AACjC,QAAA,OAAO,CAAA,QAAA,EAAW,UAAU,IAAI,CAAA,CAAA;AAAA,MAClC,CAAA,MAAO;AACL,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,IAAA,GAAO,uBAAA,CAAwB,SAAA,CAAU,IAAI,CAAA;AACnD,MAAA,MAAM,KAAA,GAAQ,uBAAA,CAAwB,SAAA,CAAU,KAAK,CAAA;AACrD,MAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,SAAA,CAAU,QAAQ,IAAI,KAAK,CAAA,CAAA;AAAA,IAC/C;AAAA;AAGF,EAAA,OAAO,EAAA;AACT;AAMA,SAASA,kBAAiB,IAAA,EAAsB;AAC9C,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,iBAAA,EAAmB,OAAO,EAAE,WAAA,EAAY;AAC9D;ACrbA,SAAS,eAAe,OAAA,EAA0B;AAChD,EAAA,OAAO,oBAAA,CAAqB,OAAO,CAAA,KAAM,IAAA;AAC3C;AAkDO,SAAS,gBAAA,CAAiB,MAAc,UAAA,EAA4B;AAEzE,EAAA,IAAI,IAAA,GAAO,KAAK,IAAA,EAAK;AAGrB,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,CAAE,UAAA,CAAW,KAAK,CAAA,EAAG;AACxC,IAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,EAC5B;AAEA,EAAA,OAAO,eAAA,CAAgB,IAAS,CAAA;AAClC;AAcO,SAAS,iBAAA,CAAkB,MAAc,UAAA,EAA4B;AAE1E,EAAA,IAAI,IAAA,GAAO,KAAK,IAAA,EAAK;AAGrB,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,CAAE,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1C,IAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,EAC5B;AAEA,EAAA,OAAO,WAAA,CAAY,IAAS,CAAA;AAC9B;AASO,SAAS,kBAAA,CAAmB,MAAc,UAAA,EAA8B;AAE7E,EAAA,IAAI,IAAA,GAAO,KAAK,IAAA,EAAK;AAGrB,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,CAAE,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1C,IAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,EAC5B;AAGA,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,yBAAyB,EAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA;AAExE,EAAA,OAAO,KAAA,CAAM,IAAI,CAAA,CAAA,KAAK,WAAA,CAAY,EAAE,IAAA,EAAW,CAAC,CAAA;AAClD;AAsBA,SAAS,cAAc,IAAA,EAAuB;AAC5C,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,WAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA;AACrF;AASA,SAAS,iBAAiB,IAAA,EAAqB;AAC7C,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAG1B,EAAA,IAAI,QAAQ,UAAA,CAAW,GAAG,KAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AACtD,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAO,iBAAiB,OAAO,CAAA;AAAA,IACjC;AAAA,EACF;AAGA,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,IAAA,OAAO,eAAe,OAAO,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,IAAI,CAAA,CAAE,CAAA;AACxD;AAKA,SAAS,iBAAiB,IAAA,EAAqB;AAE7C,EAAA,IAAI,UAAA,GAAa,IAAA;AAGjB,EAAA,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,6BAAA,EAA+B,MAAM,CAAA;AAGrE,EAAA,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAuB,SAAS,CAAA;AAEhE,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,EAC9B,SAAS,CAAA,EAAG;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAA;AAAA,EACzD;AACF;AAUA,SAAS,eAAe,IAAA,EAAqB;AAC3C,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAE1B,EAAA,IAAI,CAAC,QAAQ,UAAA,CAAW,GAAG,KAAK,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACtD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,IAAI,CAAA,CAAE,CAAA;AAAA,EACtD;AAEA,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,EAAE,IAAA,EAAK;AACxC,EAAA,MAAM,MAAA,GAAS,aAAa,KAAK,CAAA;AAEjC,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,OAAO,MAAA,CAAO,IAAI,cAAc,CAAA;AAClC;AAKA,SAAS,aAAa,IAAA,EAAwB;AAC5C,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,UAAA,GAAa,EAAA;AAEjB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AAEnB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAA,IAAW,IAAA;AACX,MAAA,IAAI,SAAS,UAAA,IAAc,IAAA,CAAK,CAAA,GAAI,CAAC,MAAM,IAAA,EAAM;AAC/C,QAAA,QAAA,GAAW,KAAA;AAAA,MACb;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,OAAA,IAAW,IAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAO,SAAS,GAAA,EAAK;AAChD,MAAA,KAAA,EAAA;AACA,MAAA,OAAA,IAAW,IAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAO,SAAS,GAAA,EAAK;AAChD,MAAA,KAAA,EAAA;AACA,MAAA,OAAA,IAAW,IAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAQ,SAAS,IAAA,EAAM;AAClD,MAAA,IAAI,KAAA,KAAU,CAAA,IAAK,OAAA,CAAQ,IAAA,EAAK,EAAG;AACjC,QAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAA;AAC1B,QAAA,OAAA,GAAU,EAAA;AAAA,MACZ,CAAA,MAAA,IAAW,QAAQ,CAAA,EAAG;AACpB,QAAA,OAAA,IAAW,IAAA;AAAA,MACb;AACA,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,IAAW,IAAA;AAAA,EACb;AAEA,EAAA,IAAI,OAAA,CAAQ,MAAK,EAAG;AAClB,IAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,eAAe,KAAA,EAAsB;AAC5C,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAG3B,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,IAAA,OAAO,eAAe,OAAO,CAAA;AAAA,EAC/B;AAGA,EAAA,IAAI,QAAQ,UAAA,CAAW,GAAG,KAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AACtD,IAAA,OAAO,iBAAiB,OAAO,CAAA;AAAA,EACjC;AAGA,EAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,QAAQ,QAAA,CAAS,GAAG,CAAA,IAC/C,OAAA,CAAQ,WAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAI;AACtD,IAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EAC5B;AAGA,EAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,OAAO,CAAA,EAAG;AACnC,IAAA,OAAO,WAAW,OAAO,CAAA;AAAA,EAC3B;AAGA,EAAA,IAAI,OAAA,KAAY,QAAQ,OAAO,IAAA;AAC/B,EAAA,IAAI,OAAA,KAAY,SAAS,OAAO,KAAA;AAChC,EAAA,IAAI,OAAA,KAAY,QAAQ,OAAO,IAAA;AAG/B,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,IAAA,OAAO,OAAA;AAAA,EACT;AAGA,EAAA,OAAO,OAAA;AACT;AASA,SAAS,eAAA,CAAgB,MAAc,GAAA,EAA0B;AAC/D,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAGjB,EAAA,IAAI,aAAA,CAAc,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO,iBAAiB,IAAI,CAAA;AAAA,EAC9B;AAGA,EAAA,MAAM,QAAA,GAAWC,gBAAAA,CAAgB,IAAA,EAAM,OAAO,CAAA;AAC9C,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,QAAA,CAAS,IAAS,CAAA;AAC/C,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,QAAA,CAAS,KAAU,CAAA;AACjD,IAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,KAAK,CAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,OAAA,GAAUA,gBAAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AAC5C,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,OAAA,CAAQ,IAAS,CAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,OAAA,CAAQ,KAAU,CAAA;AAChD,IAAA,OAAO,CAAC,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,EAC3B;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,CAAE,UAAA,CAAW,MAAM,CAAA,EAAG;AACzC,IAAA,MAAM,KAAA,GAAQ,gBAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAW,CAAA;AACvD,IAAA,OAAO,CAAC,OAAO,KAAK,CAAA;AAAA,EACtB;AAGA,EAAA,IAAI,KAAK,UAAA,CAAW,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAC9C,IAAA,OAAO,gBAAgB,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAM,CAAA;AAAA,EAC/C;AAGA,EAAA,OAAOC,gBAAAA,CAAgB,IAAS,CAAA;AAClC;AAKA,SAASA,gBAAAA,CAAgB,MAAc,GAAA,EAA0B;AAE/D,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,mCAAmC,CAAA;AACnE,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,YAAA,CAAa,CAAC,CAAM,CAAA;AAChD,IAAA,MAAM,KAAA,GAAQJ,WAAAA,CAAW,YAAA,CAAa,CAAC,CAAC,CAAA;AACxC,IAAA,OAAO,CAAC,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAAA,EAC5B;AAGA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,kCAAkC,CAAA;AACjE,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,WAAA,CAAY,CAAC,CAAM,CAAA;AAC/C,IAAA,MAAM,KAAA,GAAQA,WAAAA,CAAW,WAAA,CAAY,CAAC,CAAC,CAAA;AACvC,IAAA,OAAO,CAAC,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAAA,EAC5B;AAGA,EAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,KAAA,CAAM,uCAAuC,CAAA;AAC3E,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,gBAAA,CAAiB,CAAC,CAAM,CAAA;AACpD,IAAA,MAAM,KAAA,GAAQA,WAAAA,CAAW,gBAAA,CAAiB,CAAC,CAAC,CAAA;AAC5C,IAAA,OAAO,CAAC,GAAA,EAAK,KAAA,EAAO,KAAK,CAAA;AAAA,EAC3B;AAGA,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,oCAAoC,CAAA;AACrE,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,aAAA,CAAc,CAAC,CAAM,CAAA;AACjD,IAAA,MAAM,KAAA,GAAQA,WAAAA,CAAW,aAAA,CAAc,CAAC,CAAC,CAAA;AACzC,IAAA,OAAO,CAAC,GAAA,EAAK,KAAA,EAAO,KAAK,CAAA;AAAA,EAC3B;AAGA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,4BAA4B,CAAA;AAC1D,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,UAAA,CAAW,CAAC,CAAM,CAAA;AAC9C,IAAA,MAAM,KAAA,GAAQA,WAAAA,CAAW,UAAA,CAAW,CAAC,CAAC,CAAA;AACtC,IAAA,OAAO,CAAC,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAAA,EAC5B;AAGA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,sBAAsB,CAAA;AACjD,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAM,CAAA;AAC3C,IAAA,MAAM,KAAA,GAAQA,WAAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA;AACnC,IAAA,OAAO,CAAC,GAAA,EAAK,KAAA,EAAO,KAAK,CAAA;AAAA,EAC3B;AAGA,EAAA,MAAM,UAAA,GAAgD;AAAA,IACpD,EAAE,OAAA,EAAS,qBAAA,EAAuB,EAAA,EAAI,IAAA,EAAK;AAAA,IAC3C,EAAE,OAAA,EAAS,qBAAA,EAAuB,EAAA,EAAI,IAAA,EAAK;AAAA,IAC3C,EAAE,OAAA,EAAS,qBAAA,EAAuB,EAAA,EAAI,IAAA,EAAK;AAAA,IAC3C,EAAE,OAAA,EAAS,qBAAA,EAAuB,EAAA,EAAI,GAAA,EAAI;AAAA,IAC1C,EAAE,OAAA,EAAS,oBAAA,EAAsB,EAAA,EAAI,GAAA,EAAI;AAAA,IACzC,EAAE,OAAA,EAAS,oBAAA,EAAsB,EAAA,EAAI,GAAA;AAAI,GAC3C;AAEA,EAAA,KAAA,MAAW,EAAE,OAAA,EAAS,EAAA,EAAG,IAAK,UAAA,EAAY;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,KAAA,CAAM,CAAC,CAAM,CAAA;AACxC,MAAA,MAAM,KAAA,GAAQA,WAAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA;AACjC,MAAA,OAAO,CAAC,EAAA,EAAI,IAAA,EAAM,KAAK,CAAA;AAAA,IACzB;AAAA,EACF;AAGA,EAAA,OAAO,aAAA,CAAc,IAAS,CAAA;AAChC;AAeA,SAAS,WAAA,CAAY,MAAc,GAAA,EAA0B;AAC3D,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAGjB,EAAA,IAAI,aAAA,CAAc,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO,iBAAiB,IAAI,CAAA;AAAA,EAC9B;AAGA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,+BAA+B,CAAA;AAC9D,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,WAAA,CAAY,CAAC,CAAM,CAAA;AAC/C,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,WAAA,CAAY,CAAC,CAAM,CAAA;AAClD,IAAA,OAAO,CAAC,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA;AAAA,EAC7B;AAGA,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,+BAA+B,CAAA;AAChE,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAM,KAAA,GAAQ,cAAc,CAAC,CAAA;AAC7B,IAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,aAAA,CAAc,CAAC,CAAM,CAAA;AACtD,IAAA,OAAO,CAAC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,EAChC;AAGA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA;AAC9C,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,CAAC,MAAA,EAAQ,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,EAC9B;AAGA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,+BAA+B,CAAA;AAClE,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO,CAAC,WAAA,EAAa,eAAA,CAAgB,CAAC,GAAG,IAAI,CAAA;AAAA,EAC/C;AAGA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,4DAA4D,CAAA;AAC/F,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM,OAAA,GAAU,gBAAgB,CAAC,CAAA;AACjC,IAAA,MAAM,IAAA,GAAO,gBAAgB,CAAC,CAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,gBAAgB,CAAC,CAAA;AAChC,IAAA,MAAM,SAAA,GAAY,gBAAgB,CAAC,CAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,iBAAiB,SAAS,CAAA;AAExC,IAAA,mBAAA,CAAoB,OAAO,CAAA;AAC3B,IAAA,OAAO,CAAC,aAAa,IAAA,EAAM,EAAE,MAAM,OAAA,EAAS,MAAA,EAAQ,GAAG,KAAA,EAAO,CAAA;AAAA,EAChE;AAGA,EAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,KAAA,CAAM,8CAA8C,CAAA;AACnF,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,MAAM,OAAA,GAAU,kBAAkB,CAAC,CAAA;AACnC,IAAA,MAAM,IAAA,GAAO,kBAAkB,CAAC,CAAA;AAChC,IAAA,MAAM,MAAA,GAAS,kBAAkB,CAAC,CAAA;AAElC,IAAA,mBAAA,CAAoB,OAAO,CAAA;AAC3B,IAAA,OAAO,CAAC,WAAA,EAAa,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,CAAA;AAAA,EACtD;AAGA,EAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,KAAA,CAAM,8CAA8C,CAAA;AAClF,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,MAAM,OAAA,GAAU,iBAAiB,CAAC,CAAA;AAClC,IAAA,MAAM,IAAA,GAAO,iBAAiB,CAAC,CAAA;AAC/B,IAAA,MAAM,SAAA,GAAY,iBAAiB,CAAC,CAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,iBAAiB,SAAS,CAAA;AAExC,IAAA,mBAAA,CAAoB,OAAO,CAAA;AAC3B,IAAA,OAAO,CAAC,aAAa,IAAA,EAAM,EAAE,MAAM,OAAA,EAAS,GAAG,OAAO,CAAA;AAAA,EACxD;AAGA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,gCAAgC,CAAA;AAC/D,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,OAAA,GAAU,YAAY,CAAC,CAAA;AAC7B,IAAA,MAAM,IAAA,GAAO,YAAY,CAAC,CAAA;AAE1B,IAAA,mBAAA,CAAoB,OAAO,CAAA;AAC3B,IAAA,OAAO,CAAC,WAAA,EAAa,IAAA,EAAM,EAAE,IAAA,EAAM,SAAS,CAAA;AAAA,EAC9C;AAGA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,wBAAwB,CAAA;AAC3D,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO,CAAC,WAAA,EAAa,eAAA,CAAgB,CAAC,CAAC,CAAA;AAAA,EACzC;AAGA,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,wCAAwC,CAAA;AACxE,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,MAAM,IAAA,GAAO,aAAa,CAAC,CAAA;AAC3B,IAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,YAAA,CAAa,CAAC,CAAM,CAAA;AACpD,IAAA,OAAO,CAAC,UAAA,EAAY,IAAA,EAAM,MAAM,CAAA;AAAA,EAClC;AAGA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,yBAAyB,CAAA;AACrD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,CAAC,UAAA,EAAY,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACjC;AAGA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,yCAAyC,CAAA;AAC5E,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO,CAAC,QAAA,EAAU,eAAA,CAAgB,CAAC,CAAA,EAAG,eAAA,CAAgB,CAAC,CAAC,CAAA;AAAA,EAC1D;AAGA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,oBAAoB,CAAA;AACnD,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO,CAAC,QAAA,EAAU,WAAA,CAAY,CAAC,CAAC,CAAA;AAAA,EAClC;AAGA,EAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,KAAA,CAAM,2BAA2B,CAAA;AAC/D,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,MAAM,MAAA,GAAS,iBAAiB,CAAC,CAAA;AACjC,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,gBAAA,CAAiB,CAAC,CAAM,CAAA;AACnD,IAAA,OAAO,CAAC,SAAA,EAAW,MAAA,EAAQ,IAAI,CAAA;AAAA,EACjC;AAGA,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,oBAAoB,CAAA;AACpD,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,OAAO,CAAC,SAAA,EAAW,YAAA,CAAa,CAAC,CAAC,CAAA;AAAA,EACpC;AAGA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,gCAAgC,CAAA;AAClE,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,MAAM,UAAA,GAAa,eAAe,CAAC,CAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,cAAA,CAAe,CAAC,CAAM,CAAA;AACrD,IAAA,OAAO,CAAC,OAAA,EAAS,UAAA,EAAY,KAAK,CAAA;AAAA,EACpC;AAGA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,kBAAkB,CAAA;AAChD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,CAAC,OAAA,EAAS,UAAA,CAAW,CAAC,CAAC,CAAA;AAAA,EAChC;AAGA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,mBAAmB,CAAA;AACrD,EAAA,IAAI,cAAA,IAAkB,cAAA,CAAe,CAAC,CAAA,KAAM,MAAA,EAAQ;AAClD,IAAA,OAAO,CAAC,SAAA,EAAW,aAAA,CAAc,eAAe,CAAC,CAAM,CAAC,CAAA;AAAA,EAC1D;AAGA,EAAA,IAAI,KAAK,WAAA,EAAY,KAAM,aAAa,IAAA,CAAK,WAAA,OAAkB,cAAA,EAAgB;AAC7E,IAAA,OAAO,CAAC,SAAS,CAAA;AAAA,EACnB;AAGA,EAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,KAAA,CAAM,wBAAwB,CAAA;AAC5D,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,OAAO,CAAC,cAAA,EAAgB,gBAAA,CAAiB,CAAC,CAAA,EAAG,gBAAA,CAAiB,CAAC,CAAC,CAAA;AAAA,EAClE;AAGA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA;AAC9C,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,CAAC,cAAA,EAAgB,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,EACtC;AAGA,EAAA,OAAO,IAAA;AACT;AAUA,SAAS,aAAA,CAAc,MAAc,GAAA,EAA2B;AAC9D,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAGjB,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,eAAA,EAAiB;AAC1C,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,cAAA,EAAgB;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,QAAA,EAAU;AACnC,IAAA,OAAO,SAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,SAAA,EAAW;AACpC,IAAA,OAAO,UAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,CAAE,UAAA,CAAW,WAAW,CAAA,EAAG;AAC9C,IAAA,MAAM,QAAQC,YAAAA,CAAY,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,MAAM,CAAA;AAC9C,IAAA,OAAO,YAAY,KAAK,CAAA,CAAA;AAAA,EAC1B;AAGA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,kBAAkB,CAAA;AACrD,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM,MAAA,GAAS,gBAAgB,CAAC,CAAA;AAChC,IAAA,MAAM,KAAA,GAAQA,YAAAA,CAAY,eAAA,CAAgB,CAAC,CAAC,CAAA;AAC5C,IAAA,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAAA,EAC5B;AAGA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAEtB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,IAAK,QAAA,CAAS,KAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACvC,MAAA,OAAO,IAAI,IAAI,CAAA,CAAA;AAAA,IACjB;AAEA,IAAA,OAAO,WAAW,IAAI,CAAA,CAAA;AAAA,EACxB;AAGA,EAAA,MAAM,SAAA,GAAYA,aAAY,IAAI,CAAA;AAClC,EAAA,OAAO,WAAW,SAAS,CAAA,CAAA;AAC7B;AASA,SAASD,YAAW,IAAA,EAAqB;AACvC,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAGjB,EAAA,IAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,KAAK,QAAA,CAAS,GAAG,CAAA,IACzC,IAAA,CAAK,WAAW,GAAG,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAI;AAChD,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EACzB;AAGA,EAAA,IAAI,KAAK,WAAA,EAAY,KAAM,aAAa,IAAA,CAAK,WAAA,OAAkB,MAAA,EAAQ;AACrE,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,MAAA,EAAQ,OAAO,IAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,OAAA,EAAS,OAAO,KAAA;AAG3C,EAAA,MAAM,GAAA,GAAM,WAAW,IAAI,CAAA;AAC3B,EAAA,IAAI,CAAC,KAAA,CAAM,GAAG,KAAK,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA,EAAG;AAChD,IAAA,OAAO,GAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,gBAAA,CAAiB,MAAc,GAAA,EAA0B;AAChE,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAGjB,EAAA,IAAI,KAAK,UAAA,CAAW,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAC9C,IAAA,IAAI;AAEF,MAAA,MAAM,SAAA,GAAY,KAAK,OAAA,CAAQ,UAAA,EAAY,CAAC,KAAA,KAAU,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAA;AAClE,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAEhC,MAAA,OAAO,wBAAwB,GAAG,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,qDAAqD,CAAA;AACxF,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,eAAA,CAAgB,CAAC,CAAM,CAAA;AACrD,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,eAAA,CAAgB,CAAC,CAAM,CAAA;AACtD,IAAA,MAAM,KAAA,GAAgC;AAAA,MACpC,MAAA,EAAQ,GAAA;AAAA,MACR,OAAA,EAAS,GAAA;AAAA,MACT,OAAA,EAAS,GAAA;AAAA,MACT,YAAA,EAAc;AAAA,KAChB;AACA,IAAA,OAAO,CAAC,KAAA,CAAM,eAAA,CAAgB,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA,IAAK,eAAA,CAAgB,CAAC,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AAAA,EACpF;AAGA,EAAA,IAAI,KAAK,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA,CAAK,aAAY,CAAE,UAAA,CAAW,WAAW,CAAA,IAC/D,KAAK,KAAA,CAAM,WAAW,KAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AAElD,IAAA,OAAO,aAAA,CAAc,IAAS,CAAA;AAAA,EAChC;AAGA,EAAA,OAAOA,YAAW,IAAI,CAAA;AACxB;AAKA,SAAS,wBAAwB,GAAA,EAAqB;AACpD,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA,EAAW;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAE3B,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACvB,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,GAAA,CAAI,IAAI,uBAAuB,CAAA;AAAA,EACxC;AAGA,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,uBAAA,CAAwB,KAAK,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,MAAA;AACT;AASA,SAASG,gBAAAA,CAAgB,MAAc,SAAA,EAA2D;AAChG,EAAA,MAAM,cAAA,GAAiB,UAAU,WAAA,EAAY;AAC7C,EAAA,MAAM,SAAA,GAAY,KAAK,WAAA,EAAY;AAEnC,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,IAAK,UAAU,MAAA,GAAS,cAAA,CAAe,QAAQ,CAAA,EAAA,EAAK;AAClE,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAO,SAAS,GAAA,EAAK,KAAA,EAAA;AAAA,SAAA,IACzC,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAO,SAAS,GAAA,EAAK,KAAA,EAAA;AAAA,SAAA,IAC9C,KAAA,KAAU,KAAK,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA,GAAI,cAAA,CAAe,MAAM,CAAA,KAAM,cAAA,EAAgB;AACxF,MAAA,OAAO;AAAA,QACL,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,IAAA,EAAK;AAAA,QAC5B,OAAO,IAAA,CAAK,KAAA,CAAM,IAAI,SAAA,CAAU,MAAM,EAAE,IAAA;AAAK,OAC/C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAMA,SAASF,aAAY,IAAA,EAAsB;AACzC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAG9B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,MAAM,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,OAAO,KAAA,CACJ,GAAA;AAAA,IAAI,CAAC,IAAA,EAAM,KAAA,KACV,UAAU,CAAA,GACN,IAAA,CAAK,aAAY,GACjB,IAAA,CAAK,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,GAAI,KAAK,KAAA,CAAM,CAAC,EAAE,WAAA;AAAY,GAC/D,CACC,KAAK,EAAE,CAAA;AACZ;AAKA,SAAS,gBAAgB,OAAA,EAA2B;AAClD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,SAAA,GAAY,EAAA;AAEhB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AAEtB,IAAA,IAAA,CAAK,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,MAAS,CAAA,KAAM,KAAK,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA,KAAM,IAAA,CAAA,EAAO;AAC1E,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,SAAA,GAAY,IAAA;AAAA,MACd,CAAA,MAAA,IAAW,SAAS,SAAA,EAAW;AAC7B,QAAA,OAAA,GAAU,KAAA;AAAA,MACZ;AACA,MAAA,OAAA,IAAW,IAAA;AAAA,IACb,CAAA,MAAA,IAAW,IAAA,KAAS,GAAA,IAAO,CAAC,OAAA,EAAS;AACnC,MAAA,IAAI,OAAA,CAAQ,MAAK,EAAG;AAClB,QAAA,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAA;AAAA,MAC3B;AACA,MAAA,OAAA,GAAU,EAAA;AAAA,IACZ,CAAA,MAAO;AACL,MAAA,OAAA,IAAW,IAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,MAAK,EAAG;AAClB,IAAA,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,QAAQ,KAAA,EAAuB;AACtC,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,QAAQ,QAAA,CAAS,GAAG,CAAA,IAC/C,OAAA,CAAQ,WAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAI;AACtD,IAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,OAAA;AACT;AAsBA,SAAS,eAAe,IAAA,EAAuB;AAC7C,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAG1B,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,0CAA0C,CAAA;AACzE,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,EAAE,EAAA,EAAI,QAAA,CAAS,CAAC,CAAA,EAAG,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA,EAAG,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA,EAAE;AAAA,EACnE;AAGA,EAAA,MAAM,kBAAA,GAAqB,OAAA,CAAQ,KAAA,CAAM,+BAA+B,CAAA;AACxE,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,kBAAA,CAAmB,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,MAClC,KAAA,EAAO,mBAAmB,CAAC,CAAA;AAAA,MAC3B,OAAA,EAAS,mBAAmB,CAAC;AAAA,KAC/B;AAAA,EACF;AAGA,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,oCAAoC,CAAA;AACtE,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO,EAAE,KAAA,EAAO,WAAA,CAAY,CAAC,CAAA,CAAE,MAAK,EAAG,KAAA,EAAO,WAAA,CAAY,CAAC,CAAA,EAAE;AAAA,EAC/D;AAGA,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,KAAA,CAAM,2BAA2B,CAAA;AAC/D,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,cAAc,CAAC,CAAA;AAAA,MACxB,OAAA,EAAS,QAAA,CAAS,aAAA,CAAc,CAAC,GAAG,EAAE,CAAA;AAAA,MACtC,OAAA,EAAS,QAAA,CAAS,aAAA,CAAc,CAAC,GAAG,EAAE;AAAA,KACxC;AAAA,EACF;AAGA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,qBAAqB,CAAA;AACrD,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,UAAU,CAAC,CAAA;AAAA,MACpB,OAAA,EAAS,QAAA,CAAS,SAAA,CAAU,CAAC,GAAG,EAAE;AAAA,KACpC;AAAA,EACF;AAGA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,iCAAiC,CAAA;AAC/D,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,EAAE,OAAO,OAAA,CAAQ,CAAC,GAAG,KAAA,EAAO,OAAA,CAAQ,CAAC,CAAA,EAAE;AAAA,EAChD;AAGA,EAAA,OAAO,QAAQ,OAAO,CAAA;AACxB;AAKA,SAAS,eAAe,OAAA,EAA4B;AAClD,EAAA,MAAM,KAAA,GAAQ,gBAAgB,OAAO,CAAA;AACrC,EAAA,OAAO,KAAA,CAAM,IAAI,cAAc,CAAA;AACjC;AAKA,SAAS,iBAAiB,OAAA,EAA0B;AAClD,EAAA,OAAO,cAAA,CAAe,KAAK,OAAO,CAAA;AAAA,EAC3B,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,EACvB,eAAA,CAAgB,KAAK,OAAO,CAAA;AACrC;AAaA,SAAS,iBAAiB,IAAA,EAAuC;AAC/D,EAAA,MAAM,QAAiC,EAAC;AAGxC,EAAA,MAAM,UAAA,GAAa,qDAAA;AACnB,EAAA,IAAI,KAAA;AAEJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAC/C,IAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,IAAA,MAAM,YAAA,GAAe,MAAM,CAAC,CAAA;AAC5B,IAAA,MAAM,YAAA,GAAe,MAAM,CAAC,CAAA;AAC5B,IAAA,MAAM,YAAA,GAAe,MAAM,CAAC,CAAA;AAC5B,IAAA,MAAM,SAAA,GAAY,MAAM,CAAC,CAAA;AAEzB,IAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,MAAA,KAAA,CAAM,GAAG,CAAA,GAAI,YAAA;AAAA,IACf,CAAA,MAAA,IAAW,iBAAiB,MAAA,EAAW;AACrC,MAAA,KAAA,CAAM,GAAG,CAAA,GAAI,YAAA;AAAA,IACf,CAAA,MAAA,IAAW,iBAAiB,MAAA,EAAW;AAErC,MAAA,IAAI,gBAAA,CAAiB,YAAY,CAAA,EAAG;AAClC,QAAA,KAAA,CAAM,GAAG,CAAA,GAAI,cAAA,CAAe,YAAY,CAAA;AAAA,MAC1C,CAAA,MAAO;AAEL,QAAA,KAAA,CAAM,GAAG,CAAA,GAAI,YAAA,CAAa,KAAA,CAAM,SAAS,EAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,MAC9D;AAAA,IACF,CAAA,MAAA,IAAW,cAAc,MAAA,EAAW;AAElC,MAAA,IAAI,SAAA,KAAc,MAAA,EAAQ,KAAA,CAAM,GAAG,CAAA,GAAI,IAAA;AAAA,WAAA,IAC9B,SAAA,KAAc,OAAA,EAAS,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AAAA,WAAA,IACpC,eAAA,CAAgB,KAAK,SAAS,CAAA,QAAS,GAAG,CAAA,GAAI,WAAW,SAAS,CAAA;AAAA,WACtE,KAAA,CAAM,GAAG,CAAA,GAAI,SAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAMA,SAAS,oBAAoB,OAAA,EAAuB;AAClD,EAAA,IAAI,CAAC,cAAA,CAAe,OAAO,CAAA,EAAG;AAOhC;;;ACv/BO,SAAS,aAAA,CAAc,MAAc,UAAA,EAAiD;AAC3F,EAAA,MAAM,GAAA,GAA4B,EAAE,UAAA,EAAY,MAAA,EAAQ,EAAC,EAAG,QAAA,EAAU,EAAC,EAAE;AACzE,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,IAAI,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,EAAS;AAE9B,EAAA,IAAI,GAAA,GAAM,CAAA;AAGV,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,GAAG,KAAK,EAAE,IAAA,EAAA,KAAA,YAAqB,KAAA,EAAO,EAAA,EAAI,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAA,EAAE;AACrG,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,GAAA,EAAK,CAAA;AAClC,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,EAAQ,CAAE,IAAA,KAAA,KAAA;AAChC,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAoB;AAChC,IAAA,OAAO,OAAA,EAAQ,CAAE,IAAA,KAAS,IAAA,EAAM,OAAA,EAAQ;AAAA,EAC1C,CAAA;AAGA,EAAA,IAAA,CAAA,SAAA,eAAsB;AAGtB,EAAA,MAAM,eAAe,iBAAA,EAAkB;AACvC,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,QAAQ,GAAA,CAAI,MAAA,CAAO,SAAS,CAAA,GAAI,GAAA,CAAI,SAAS,CAAC;AAAA,QAC5C,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,MACD,UAAU;AAAC,KACb;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAA2B;AAAA,IAC/B,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,UAAA;AAAA,IACA,QAAQ,EAAC;AAAA,IACT,YAAA,EAAc,EAAA;AAAA,IACd,aAAa,EAAC;AAAA,IACd,OAAO,EAAC;AAAA,IACR,OAAO;AAAC,GACV;AAEA,EAAA,IAAA,CAAA,SAAA,eAAsB;AAGtB,EAAA,OAAO,CAAC,SAAQ,EAAG;AACjB,IAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,IAAA,IAAI,SAAQ,EAAG;AAEf,IAAA,MAAM,MAAA,GAAS,qBAAqB,QAAQ,CAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,QAAA,CAAS,YAAA,IAAgB,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA,EAAG;AACxD,IAAA,QAAA,CAAS,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA;AAAA,EAC3C;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,UAAU,GAAA,CAAI;AAAA,GAChB;AAIA,EAAA,SAAS,iBAAA,GAAmC;AAC1C,IAAA,MAAM,YAAsB,EAAC;AAE7B,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AAEzD,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,qBAAiC,OAAA,GAAU,KAAA,CAAM,WAAA,OAAkB,QAAA,EAAU;AACzF,QAAA,OAAA,EAAQ;AACR,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,OAAA,cAA0B;AACtC,UAAA,OAAA,EAAQ;AAER,UAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,YAAA,GAAA,CAAI,UAAA,GAAa,SAAQ,CAAE,KAAA;AAC3B,YAAA,OAAA,EAAQ;AAAA,UACV;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,EAAQ,CAAE,IAAA,KAAA,QAAA,iBAA6B,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAC9E,QAAA,OAAA,EAAQ;AACR,QAAA;AAAA,MACF;AAIA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,qBACV,OAAA,GAAU,IAAA,KAAA,WAAA,oBACV,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,QAAA,SAAA,CAAU,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAAA,MAChC;AAGA,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,SAAA,CAAU,KAAK,GAAG,CAAA;AAAA,EAC3B;AAEA,EAAA,SAAS,qBAAqBI,SAAAA,EAAmC;AAC/D,IAAA,MAAM,QAAQ,OAAA,EAAQ;AAGtB,IAAA,IAAI,MAAM,IAAA,KAAA,YAAA,qBAAiC,KAAA,CAAM,KAAA,CAAM,WAAA,OAAkB,QAAA,EAAU;AACjF,MAAA,OAAA,EAAQ;AACR,MAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,QAAA,GAAA,CAAI,UAAA,GAAa,SAAQ,CAAE,KAAA;AAC3B,QAAAA,SAAAA,CAAS,UAAA,GAAa,OAAA,EAAQ,CAAE,KAAA;AAChC,QAAA,OAAA,EAAQ;AAAA,MACV;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,QAAA,eAA2B;AACnC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,MAAA,eAAA,CAAgBA,SAAQ,CAAA;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,SAAA,gBAA4B;AACpC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,QAAAA,SAAAA,CAAS,YAAA,GAAe,OAAA,EAAQ,CAAE,KAAA;AAClC,QAAA,OAAA,EAAQ;AAAA,MACV;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,aAAA,oBAAgC;AACxC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,MAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,MAAA,uBAAA,CAAwBA,SAAQ,CAAA;AAChC,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,OAAA,cAA0B;AAClC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,MAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,MAAA,iBAAA,CAAkBA,SAAQ,CAAA;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,OAAA,cAA0B;AAClC,MAAA,OAAA,EAAQ;AACR,MAAA,SAAA,CAAUA,SAAQ,CAAA;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAM,IAAA,KAAA,WAAA,kBAA8B;AACtC,MAAA,OAAA,EAAQ;AACR,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,SAAS,gBAAgBA,SAAAA,EAAgC;AACvD,IAAA,MAAM,SAAmB,EAAC;AAE1B,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AACzD,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,QAAA,MAAA,CAAO,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAAA,MAC7B;AACA,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAAA,UAAS,MAAA,GAAS,MAAA;AAAA,EACpB;AAEA,EAAA,SAAS,wBAAwBA,SAAAA,EAAgC;AAE/D,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA,OAAA,EAAQ;AAER,MAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACxD,QAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAGzC,QAAA,IAAI,OAAA,EAAQ,CAAE,IAAA,KAAA,MAAA,eACV,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,UAAA,MAAM,aAAa,mBAAA,EAAoB;AACvC,UAAA,IAAI,UAAA,EAAY;AACd,YAAAA,SAAAA,CAAS,WAAA,CAAY,IAAA,CAAK,UAAU,CAAA;AAAA,UACtC;AAAA,QACF,CAAA,MAAO;AAGL,UAAA,OAAO,CAAC,SAAQ,IACT,OAAA,GAAU,IAAA,KAAA,SAAA,kBACV,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAC1C,YAAA,OAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,OAAO,CAAC,SAAQ,IACT,OAAA,GAAU,IAAA,KAAA,OAAA,gBACV,OAAA,GAAU,IAAA,KAAA,OAAA,cAA0B;AACzC,QAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,QAAA,IAAI,SAAQ,CAAE,IAAA,KAAA,OAAA,gBACV,SAAQ,CAAE,IAAA,KAAA,OAAA,gBACV,SAAQ,EAAG;AAEf,QAAA,IAAI,OAAA,EAAQ,CAAE,IAAA,KAAA,MAAA,eACV,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,UAAA,MAAM,aAAa,mBAAA,EAAoB;AACvC,UAAA,IAAI,UAAA,EAAY;AACd,YAAAA,SAAAA,CAAS,WAAA,CAAY,IAAA,CAAK,UAAU,CAAA;AAAA,UACtC;AAAA,QACF,CAAA,MAAO;AACL,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,SAAS,mBAAA,GAA+C;AAEtD,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,MAAA,OAAA,EAAQ;AAAA,IACV;AAGA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAA,EAAQ;AAGR,IAAA,IAAI,SAAA,GAAY,EAAA;AAChB,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,MAAA,SAAA,GAAY,SAAQ,CAAE,KAAA;AACtB,MAAA,OAAA,EAAQ;AAAA,IACV;AAGA,IAAA,IAAI,SAAA,CAAU,WAAA,EAAY,KAAM,KAAA,EAAO;AACrC,MAAA,SAAA,GAAY,GAAA;AAAA,IACd;AAGA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACnC,MAAA,GAAA,CAAI,OAAO,IAAA,CAAK,EAAE,SAAS,CAAA,kCAAA,EAAqC,SAAS,KAAK,CAAA;AAC9E,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAA,EAAQ;AAGR,IAAA,IAAI,OAAA,GAAU,EAAA;AACd,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,MAAA,OAAA,GAAU,SAAQ,CAAE,KAAA;AACpB,MAAA,OAAA,EAAQ;AAAA,IACV;AAGA,IAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,MAAA,OAAA,EAAQ;AACR,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,YAAA,mBAA+B;AAC3C,QAAA,KAAA,GAAQ,SAAQ,CAAE,KAAA;AAClB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAA+B;AAAA,MACnC,IAAA,EAAM,YAAA;AAAA,MACN,SAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA,EAAO,MAAM,WAAA,EAAY;AAAA,MACzB,QAAQ,EAAC;AAAA,MACT,SAAS;AAAC,KACZ;AAEA,IAAA,IAAA,CAAA,SAAA,eAAsB;AAGtB,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA,OAAA,EAAQ;AAER,MAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACxD,QAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAGzC,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACnC,UAAA,MAAM,YAAY,WAAA,EAAY;AAC9B,UAAA,MAAM,WAAA,GAAc,UAAA,CAAW,SAAA,EAAW,UAAU,CAAA;AACpD,UAAA,IAAI,WAAA,CAAY,OAAA,IAAW,WAAA,CAAY,IAAA,EAAM;AAC3C,YAAA,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAAA,UACzC;AACA,UAAA;AAAA,QACF;AAGA,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,UAAA,OAAA,EAAQ;AACR,UAAA,MAAM,aAAa,mBAAA,EAAoB;AACvC,UAAA,MAAM,MAAA,GAAS,gBAAgB,UAAU,CAAA;AACzC,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA,UAAA,CAAW,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,UAChC;AACA,UAAA;AAAA,QACF;AAGA,QAAA,IAAI,OAAA,EAAQ,CAAE,IAAA,KAAA,SAAA,kBAA8B,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAC/E,UAAA,OAAA,EAAQ;AAAA,QACV;AAEA,QAAA,IAAA,CAAA,SAAA,eAAsB;AAAA,MACxB;AAEA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACnC,QAAA,MAAM,YAAY,WAAA,EAAY;AAC9B,QAAA,MAAM,WAAA,GAAc,UAAA,CAAW,SAAA,EAAW,UAAU,CAAA;AACpD,QAAA,IAAI,WAAA,CAAY,OAAA,IAAW,WAAA,CAAY,IAAA,EAAM;AAC3C,UAAA,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,SAAS,kBAAkBA,SAAAA,EAAgC;AACzD,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA,OAAA,EAAQ;AAER,MAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACxD,QAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAGzC,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,UAAA,OAAA,EAAQ;AAAA,QACV;AAEA,QAAA,MAAM,OAAO,mBAAA,EAAoB;AACjC,QAAA,IAAI,IAAA,EAAM;AACR,UAAAA,SAAAA,CAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,QAC1B;AAEA,QAAA,IAAA,CAAA,SAAA,eAAsB;AAAA,MACxB;AAEA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,EAAA,SAAS,UAAUA,SAAAA,EAAgC;AAEjD,IAAA,MAAM,gBAA0B,EAAC;AACjC,IAAA,OAAO,CAAC,SAAQ,IACT,OAAA,GAAU,IAAA,KAAA,OAAA,gBACV,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AAC3C,MAAA,aAAA,CAAc,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAK,CAAA;AAClC,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,MAAM,QAAA,GAAW,aAAA,CAAc,IAAA,CAAK,GAAG,CAAA;AAEvC,IAAA,IAAA,CAAA,OAAA,aAAoB;AACpB,IAAA,IAAA,CAAA,SAAA,eAAsB;AAEtB,IAAA,MAAM,IAAA,GAAmB;AAAA,MACvB,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,QAAQ,QAAA,CAAS,OAAA,CAAQ,QAAQ,GAAG,CAAA,CAAE,aAAa,CAAA,CAAA;AAAA,MACzD,QAAA;AAAA,MACA,UAAA,EAAY,cAAc,QAAQ,CAAA;AAAA,MAClC,SAAS;AAAC,KACZ;AAGA,IAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,MAAA,OAAA,EAAQ;AAER,MAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACxD,QAAA,IAAA,CAAA,SAAA,eAAsB;AACtB,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AAGzC,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,IAAA,WAAuB;AACnC,UAAA,MAAM,YAAY,WAAA,EAAY;AAC9B,UAAA,MAAM,WAAA,GAAc,UAAA,CAAW,SAAA,EAAW,UAAU,CAAA;AACpD,UAAA,IAAI,WAAA,CAAY,OAAA,IAAW,WAAA,CAAY,IAAA,EAAM;AAC3C,YAAA,IAAA,CAAK,QAAQ,WAAA,CAAY,IAAA;AAAA,UAC3B;AAAA,QACF;AAGA,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,UAAA,OAAA,EAAQ;AAAA,QACV;AAEA,QAAA,IAAI,OAAA,GAAU,IAAA,KAAA,MAAA,aAAyB;AACrC,UAAA,OAAA,EAAQ;AAAA,QACV;AAEA,QAAA,MAAM,aAAa,mBAAA,EAAoB;AACvC,QAAA,IAAI,UAAA,IAAc,OAAA,EAAQ,CAAE,IAAA,KAAA,IAAA,WAAuB;AACjD,UAAA,MAAM,MAAA,GAAS,gBAAgB,UAAU,CAAA;AACzC,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,UAC1B;AAAA,QACF;AAEA,QAAA,IAAA,CAAA,SAAA,eAAsB;AAAA,MACxB;AAEA,MAAA,IAAI,OAAA,GAAU,IAAA,KAAA,QAAA,eAA2B;AACvC,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF;AAEA,IAAAA,SAAAA,CAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,EAC1B;AAEA,EAAA,SAAS,WAAA,GAAsB;AAC7B,IAAA,OAAO,sBAAA,EAAuB;AAAA,EAChC;AAEA,EAAA,SAAS,mBAAA,GAA8B;AACrC,IAAA,OAAO,sBAAA,EAAuB;AAAA,EAChC;AASA,EAAA,SAAS,sBAAA,GAAiC;AACxC,IAAA,MAAM,QAA8C,EAAC;AACrD,IAAA,OAAO,CAAC,OAAA,EAAQ,IAAK,OAAA,GAAU,IAAA,KAAA,SAAA,gBAA4B;AACzD,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAQ,CAAE,OAAO,IAAA,EAAM,OAAA,EAAQ,CAAE,IAAA,EAAM,CAAA;AAC3D,MAAA,OAAA,EAAQ;AAAA,IACV;AAIA,IAAA,MAAM,oBAAoB,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,KAAA,UAAA;AAGvD,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA;AAGxB,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,IAAA,KAAA,MAAA,eACL,IAAA,CAAK,IAAA,KAAA,KAAA,cACL,IAAA,CAAK,IAAA,KAAA,OAAA,gBACL,IAAA,CAAK,IAAA,KAAA,OAAA,gBACL,IAAA,CAAK,IAAA,KAAA,UAAA,mBACL,IAAA,CAAK,IAAA,KAAA,QAAA;AAG3B,MAAA,MAAM,gBAAA,GAAmB,SACC,IAAA,CAAK,IAAA,KAAA,MAAA,eACL,KAAK,IAAA,KAAA,KAAA,cACL,IAAA,CAAK,sCACL,IAAA,CAAK,IAAA,KAAA,QAAA,cAAA;AAE/B,MAAA,IAAI,CAAA,GAAI,CAAA,IAAK,CAAC,aAAA,IAAiB,CAAC,gBAAA,EAAkB;AAChD,QAAA,MAAA,IAAU,GAAA;AAAA,MACZ;AAGA,MAAA,IAAI,iBAAA,IAAqB,KAAK,IAAA,KAAA,QAAA,eAA2B;AACvD,QAAA,MAAA,IAAU,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,MAAA,IAAU,IAAA,CAAK,KAAA;AAAA,MACjB;AAAA,IACF;AAEA,IAAA,OAAO,OAAO,IAAA,EAAK;AAAA,EACrB;AAEA,EAAA,SAAS,gBAAgBC,KAAAA,EAAmC;AAC1D,IAAA,MAAM,OAAA,GAAUA,MAAK,IAAA,EAAK;AAC1B,IAAA,MAAM,KAAA,GAAQ,QAAQ,WAAA,EAAY;AAIlC,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,QAAA,IAAI,MAAM,OAAA,CAAQ,MAAM,CAAA,IAAK,MAAA,CAAO,SAAS,CAAA,EAAG;AAC9C,UAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA;AAIjC,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,QAAA;AAAA,YACN,UAAA,EAAY,QAAA;AAAA,YACZ,WAAA,EAAa,OAAA;AAAA,YACb,MAAA,EAAQ,EAAE,SAAA,EAAW,MAAA;AAAO;AAAA,WAC9B;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAeA,KAAAA,CAAK,KAAA,CAAM,iCAAiC,CAAA;AACjE,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,SAAA;AAAA,QACZ,WAAA,EAAaA,KAAAA;AAAA,QACb,MAAA,EAAQ;AAAA,UACN,UAAA,EAAY,YAAA,CAAa,CAAC,CAAA,CAAE,WAAA,EAAY;AAAA,UACxC,MAAA,EAAQ,YAAA,CAAa,CAAC,CAAA,IAAK;AAAA;AAC7B,OACF;AAAA,IACF;AAGA,IAAA,MAAM,cAAA,GAAiBA,KAAAA,CAAK,KAAA,CAAM,2FAA2F,CAAA;AAC7H,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,QAAA;AAAA,QACZ,WAAA,EAAaA,KAAAA;AAAA,QACb,MAAA,EAAQ;AAAA,UACN,MAAA,EAAQ,eAAe,CAAC,CAAA;AAAA,UACxB,KAAA,EAAO,eAAe,CAAC,CAAA;AAAA,UACvB,OAAA,EAAS,eAAe,CAAC,CAAA;AAAA,UACzB,IAAA,EAAM,cAAA,CAAe,CAAC,CAAA,IAAK;AAAA;AAC7B,OACF;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,KAAA,CAAM,kBAAkB,CAAA;AAC/C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,CAAC,CAAC,CAAA;AACtC,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY,UAAU,CAAC,CAAA;AAAA,UACvB,WAAA,EAAaA,KAAAA;AAAA,UACb;AAAA,SACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAGA,IAAA,MAAM,wBAAA,GAA2BA,KAAAA,CAAK,KAAA,CAAM,+BAA+B,CAAA;AAC3E,IAAA,IAAI,wBAAA,EAA0B;AAC5B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,QAAA;AAAA,QACZ,WAAA,EAAaA,KAAAA;AAAA,QACb,MAAA,EAAQ;AAAA,UACN,SAAA,EAAW,yBAAyB,CAAC,CAAA;AAAA,UACrC,OAAA,EAAS,yBAAyB,CAAC;AAAA;AACrC,OACF;AAAA,IACF;AAGA,IAAA,IAAI,KAAA,CAAM,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC9B,MAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK;AAErC,MAAA,MAAM,WAAA,GAAc,SAAA,CAAU,KAAA,CAAM,aAAa,CAAA;AACjD,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,QAAA;AAAA,QACZ,WAAA,EAAaA,KAAAA;AAAA,QACb,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,WAAA,GAAc,WAAA,CAAY,CAAC,CAAA,GAAI;AAAA;AAC1C,OACF;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAcA,KAAAA,CAAK,KAAA,CAAM,+BAA+B,CAAA;AAC9D,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,KAAA;AAAA,QACZ,WAAA,EAAaA,KAAAA;AAAA,QACb,MAAA,EAAQ;AAAA,UACN,KAAA,EAAO,oBAAA,CAAqB,WAAA,CAAY,CAAC,CAAC,CAAA;AAAA,UAC1C,KAAA,EAAO,YAAY,CAAC;AAAA;AACtB,OACF;AAAA,IACF;AAGA,IAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,KAAA,CAAM,yBAAyB,CAAA;AACrD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,UAAA;AAAA,QACZ,WAAA,EAAaA,KAAAA;AAAA,QACb,MAAA,EAAQ;AAAA,UACN,IAAA,EAAM,SAAS,CAAC;AAAA;AAClB,OACF;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA;AAC7C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,MAAA;AAAA,QACZ,WAAA,EAAaA,KAAAA;AAAA,QACb,MAAA,EAAQ;AAAA,UACN,QAAA,EAAU,UAAU,CAAC,CAAA,CAAE,aAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG;AAAA;AAC1D,OACF;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA;AAC7C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,cAAA;AAAA,QACZ,WAAA,EAAaA,KAAAA;AAAA,QACb,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,UAAU,CAAC;AAAA;AACtB,OACF;AAAA,IACF;AAGA,IAAA,IAAI,KAAA,CAAM,UAAA,CAAW,SAAS,CAAA,EAAG;AAG/B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,kBAAkBA,KAAI,CAAA;AACrC,QAAA,IAAI,MAAM,OAAA,CAAQ,MAAM,KAAK,MAAA,CAAO,CAAC,MAAM,WAAA,EAAa;AACtD,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,QAAA;AAAA,YACN,UAAA,EAAY,WAAA;AAAA,YACZ,WAAA,EAAaA,KAAAA;AAAA,YACb,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,cACd,OAAA,EAAS,OAAO,CAAC;AAAA;AACnB,WACF;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAIA,IAAA,GAAA,CAAI,SAAS,IAAA,CAAK;AAAA,MAChB,OAAA,EAAS,2BAA2BA,KAAI,CAAA,8JAAA;AAAA,KACzC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,SAAS,cAAcA,KAAAA,EAAsB;AAC3C,IAAA,MAAM,KAAA,GAAQA,MAAK,WAAA,EAAY;AAG/B,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,yCAAyC,CAAA;AACnE,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AACnC,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAEpB,MAAA,QAAQ,IAAA;AAAM,QACZ,KAAK,QAAA;AAAU,UAAA,OAAO,KAAA,GAAQ,GAAA;AAAA,QAC9B,KAAK,QAAA;AAAU,UAAA,OAAO,QAAQ,EAAA,GAAK,GAAA;AAAA,QACnC,KAAK,MAAA;AAAQ,UAAA,OAAO,KAAA,GAAQ,KAAK,EAAA,GAAK,GAAA;AAAA,QACtC,KAAK,KAAA;AAAO,UAAA,OAAO,KAAA,GAAQ,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAAA,QAC1C,KAAK,MAAA;AAAQ,UAAA,OAAO,KAAA,GAAQ,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAAA;AACjD,IACF;AAGA,IAAA,OAAO,KAAK,EAAA,GAAK,GAAA;AAAA,EACnB;AACF;AAKO,SAAS,uBAAuB,QAAA,EAAkC;AACvE,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,KAAA,CAAM,IAAA,CAAK,SAAS,IAAI,CAAA;AACxB,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,IAAI,QAAA,CAAS,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,QAAA,CAAS,OAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAClD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,IAAI,QAAA,CAAS,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,IAAA,KAAA,MAAW,UAAA,IAAc,SAAS,WAAA,EAAa;AAC7C,MAAA,MAAM,SAAA,GAAY,UAAA,CAAW,SAAA,KAAc,GAAA,GAAM,QAAQ,UAAA,CAAW,SAAA;AACpE,MAAA,IAAI,IAAA,GAAO,CAAA,SAAA,EAAY,SAAS,CAAA,IAAA,EAAO,WAAW,OAAO,CAAA,CAAA;AACzD,MAAA,IAAI,WAAW,KAAA,EAAO;AACpB,QAAA,IAAA,IAAQ,CAAA,MAAA,EAAS,WAAW,KAAK,CAAA,CAAA;AAAA,MACnC;AACA,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAGf,MAAA,KAAA,MAAW,KAAA,IAAS,WAAW,MAAA,EAAQ;AACrC,QAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,KAAA,CAAM,OAAO,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,MAC9D;AAGA,MAAA,KAAA,MAAW,MAAA,IAAU,WAAW,OAAA,EAAS;AACvC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,MAAA,CAAO,WAAW,CAAA,CAAE,CAAA;AAAA,MAC7C;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,MAAA,EAAS,IAAA,CAAK,QAAQ,CAAA,CAAA,CAAG,CAAA;AACpC,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,IAAA,CAAK,KAAA,CAAM,OAAO,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACtE;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,MAAA,CAAO,WAAW,CAAA,CAAE,CAAA;AAAA,IACxC;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,IAAI,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC7B,IAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,IAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,EAAK;AAC/B;AAKO,SAAS,uBAAuB,QAAA,EAAmD;AACxF,EAAA,MAAM,KAAA,GAAiC;AAAA;AAAA;AAAA,IAGrC,IAAA,EAAM,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,IACtC,aAAa,QAAA,CAAS;AAAA,GACxB;AAGA,EAAA,IAAI,QAAA,CAAS,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,KAAA,CAAM,YAAA,GAAe;AAAA,MACnB,QAAQ,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,KAAA,MAAW;AAAA,QAC7C,IAAA,EAAM,KAAA;AAAA,QACN,WAAW,KAAA,KAAU,QAAA,CAAS,gBAAiB,KAAA,KAAU,CAAA,IAAK,CAAC,QAAA,CAAS;AAAA,OAC1E,CAAE,CAAA;AAAA,MACF,MAAA,EAAQ,4BAAA,CAA6B,QAAA,CAAS,WAAW,CAAA;AAAA,MACzD,WAAA,EAAa,QAAA,CAAS,WAAA,CAAY,GAAA,CAAI,CAAA,CAAA,KAAK;AACzC,QAAA,MAAM,UAAA,GAAsC;AAAA,UAC1C,MAAM,CAAA,CAAE,SAAA;AAAA,UACR,IAAI,CAAA,CAAE,OAAA;AAAA,UACN,OAAO,CAAA,CAAE;AAAA,SACX;AAGA,QAAA,IAAI,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAEvB,UAAA,MAAM,UAAA,GAAa,CAAA,CAAE,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,KAAK;AAEnC,YAAA,IAAI,EAAE,GAAA,EAAK;AACT,cAAA,OAAO,gBAAA,CAAiB,CAAA,CAAE,GAAA,EAAK,QAAA,CAAS,UAAU,CAAA;AAAA,YACpD;AACA,YAAA,OAAO,gBAAA,CAAiB,sBAAA,CAAuB,CAAC,CAAA,EAAG,SAAS,UAAU,CAAA;AAAA,UACxE,CAAC,CAAA;AAED,UAAA,UAAA,CAAW,KAAA,GAAQ,UAAA,CAAW,MAAA,KAAW,CAAA,GACrC,UAAA,CAAW,CAAC,CAAA,GACZ,CAAC,KAAA,EAAO,GAAG,UAAU,CAAA;AAAA,QAC3B;AAGA,QAAA,IAAI,CAAA,CAAE,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACxB,UAAA,UAAA,CAAW,OAAA,GAAU,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK;AAEtC,YAAA,IAAI,CAAA,CAAE,MAAA,IAAU,WAAA,IAAe,CAAA,CAAE,MAAA,IAAU,MAAM,OAAA,CAAQ,CAAA,CAAE,MAAA,CAAO,SAAS,CAAA,EAAG;AAC5E,cAAA,OAAO,EAAE,MAAA,CAAO,SAAA;AAAA,YAClB;AAEA,YAAA,OAAO,iBAAA,CAAkB,CAAA,CAAE,WAAA,EAAa,QAAA,CAAS,UAAU,CAAA;AAAA,UAC7D,CAAC,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,UAAA;AAAA,MACT,CAAC;AAAA,KACH;AAAA,EACF;AAGA,EAAA,IAAI,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC7B,IAAA,KAAA,CAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,MACrC,MAAMC,aAAAA,CAAa,CAAA,CAAE,KAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA;AAAA,MAC7C,UAAU,CAAA,CAAE,UAAA;AAAA;AAAA,MACZ,KAAA,EAAO,CAAA,CAAE,KAAA,GACL,gBAAA,CAAiB,CAAA,CAAE,KAAA,CAAM,GAAA,IAAO,sBAAA,CAAuB,CAAA,CAAE,KAAK,CAAA,EAAG,QAAA,CAAS,UAAU,CAAA,GACpF,MAAA;AAAA,MACJ,OAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK;AAE1B,QAAA,IAAI,CAAA,CAAE,MAAA,IAAU,WAAA,IAAe,CAAA,CAAE,MAAA,IAAU,MAAM,OAAA,CAAQ,CAAA,CAAE,MAAA,CAAO,SAAS,CAAA,EAAG;AAC5E,UAAA,OAAO,EAAE,MAAA,CAAO,SAAA;AAAA,QAClB;AAEA,QAAA,OAAO,iBAAA,CAAkB,CAAA,CAAE,WAAA,EAAa,QAAA,CAAS,UAAU,CAAA;AAAA,MAC7D,CAAC;AAAA,KACH,CAAE,CAAA;AAAA,EACJ;AAEA,EAAA,OAAO,KAAA;AACT;AAIA,SAASN,aAAY,IAAA,EAAsB;AACzC,EAAA,OAAO,IAAA,CACJ,WAAA,EAAY,CACZ,KAAA,CAAM,KAAK,CAAA,CACX,GAAA;AAAA,IAAI,CAAC,IAAA,EAAM,KAAA,KACV,KAAA,KAAU,IAAI,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,IAAA,CAAK,MAAM,CAAC;AAAA,GAClE,CACC,KAAK,EAAE,CAAA;AACZ;AAEA,SAASM,cAAa,IAAA,EAAsB;AAG1C,EAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,IAAA,OAAO,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EACpD;AAEA,EAAA,OAAO,IAAA,CACJ,MAAM,KAAK,CAAA,CACX,IAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,aAAa,CAAA,CACtE,KAAK,EAAE,CAAA;AACZ;AAEA,SAAS,6BAA6B,WAAA,EAAkE;AACtG,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AAEvC,EAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,IAAA,IAAI,EAAE,KAAA,IAAS,CAAC,OAAO,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,EAAG;AACnC,MAAA,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAA,EAAO,WAAA,CAAY,CAAA,CAAE,MAAM,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAC,CAAA;AAAA,IAC7D;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,KAAK,IAAI,CAAA,MAAO,EAAE,GAAA,EAAK,MAAK,CAAE,CAAA;AAC1E;AAEA,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,OAAO,IAAA,CACJ,aAAY,CACZ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,UAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CACxD,KAAK,GAAG,CAAA;AACb;AAEA,SAAS,qBAAqB,KAAA,EAA4B;AACxD,EAAA,OAAO,MAAM,GAAA,IAAO,cAAA;AACtB;AAEA,SAAS,uBAAuB,KAAA,EAA4B;AAE1D,EAAA,IAAI,MAAM,GAAA,EAAK;AAEb,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,MAAA;AACT;AAQA,SAAS,qBAAqB,IAAA,EAAsB;AAElD,EAAA,IAAI,KAAK,QAAA,CAAS,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAE5C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,GAAG,CAAA;AAAA,EACtC;AAIA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,GAAG,CAAA;AAGjD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,GAAG,CAAA,EAAG;AAC7B,IAAA,OAAO,WAAA;AAAA,EACT;AAGA,EAAA,OAAON,aAAY,IAAI,CAAA;AACzB;;;AC59BO,SAAS,2BAA2B,MAAA,EAAyC;AAClF,EAAA,MAAM,YAAA,GAAe,2BAA2B,MAAM,CAAA;AACtD,EAAA,OAAO,iBAAiB,YAAY,CAAA;AACtC;AAKO,SAAS,2BAA2B,MAAA,EAA+C;AACxF,EAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,EAAA,MAAM,cAAe,MAAA,CAAO,WAAA,IAA0B,CAAA,EAAA,EAAK,IAAA,CAAK,aAAa,CAAA,CAAA;AAC7E,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAA,MAAM,gBAAsC,EAAC;AAG7C,EAAA,MAAM,YAAA,GAAgB,MAAA,CAAO,MAAA,IAA6C,EAAC;AAC3E,EAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,IAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,IAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AAGxB,IAAA,IAAI,cAAc,UAAA,EAAY;AAC5B,MAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,UAAU,QAAA,CAAS,IAAA;AACzB,QAAA,MAAM,eAAe,QAAA,CAAS,MAAA;AAE9B,QAAA,IAAI,YAAY,aAAA,EAAe;AAE7B,UAAA,IAAI,KAAA;AACJ,UAAA,IAAI,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,IAAK,CAAC,SAAA,CAAU,WAAA,EAAY,CAAE,UAAA,CAAW,YAAA,CAAa,WAAA,EAAa,CAAA,EAAG;AAC/F,YAAA,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC7B,YAAA,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,UACvD;AAEA,UAAA,aAAA,CAAc,IAAA,CAAK;AAAA,YACjB,IAAA,EAAM,cAAA;AAAA,YACN,gBAAA,EAAkB,YAAA;AAAA,YAClB,YAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA,QACH,CAAA,MAAA,IAAW,YAAY,aAAA,EAAe;AACpC,UAAA,aAAA,CAAc,IAAA,CAAK;AAAA,YACjB,IAAA,EAAM,cAAA;AAAA,YACN,gBAAA,EAAkB,UAAA;AAAA,YAClB;AAAA,WACD,CAAA;AAAA,QACH,CAAA,MAAA,IAAW,YAAY,YAAA,EAAc;AACnC,UAAA,aAAA,CAAc,IAAA,CAAK;AAAA,YACjB,IAAA,EAAM,cAAA;AAAA,YACN,gBAAA,EAAkB,SAAA;AAAA,YAClB;AAAA,WACD,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,eAAA,GAAkB,sBAAsB,SAAS,CAAA;AAEvD,IAAA,MAAM,WAAA,GAA2B;AAAA,MAC/B,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAW,eAAA;AAAA,MACX,QAAA,EAAW,MAAM,QAAA,IAAwB,KAAA;AAAA,MACzC,MAAA,EAAS,MAAM,MAAA,IAAsB,KAAA;AAAA,MACrC,IAAA,EAAO,MAAM,IAAA,IAAoB;AAAA,KACnC;AAGA,IAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,MAAA,MAAM,UAAA,GAAc,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,MAAA;AAC9C,MAAA,IAAI,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACvC,QAAA,WAAA,CAAY,UAAA,GAAa,UAAA;AAAA,MAC3B;AAAA,IACF;AAGA,IAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAC/B,MAAA,WAAA,CAAY,UAAU,KAAA,CAAM,OAAA;AAAA,IAC9B;AAEA,IAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,EACzB;AAGA,EAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,EAAA,MAAM,eAAe,MAAA,CAAO,YAAA;AAE5B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,IAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,SAAS,iBAAiB,MAAA,EAA8B;AACtD,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,MAAM,OAAA,GAAUO,gBAAAA,CAAgB,MAAA,CAAO,IAAI,IAAI,IAAA,GAAO,GAAA;AACtD,EAAA,KAAA,CAAM,IAAA,CAAK,GAAG,OAAO,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,IAAA,EAAO,MAAA,CAAO,WAAW,CAAA,CAAE,CAAA;AAG/D,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAON,iBAAAA,CAAiB,KAAA,CAAM,IAAI,CAAC,CAAA,EAAA,EAAKO,gBAAAA,CAAgB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,GAAA,IAAO,OAAO,aAAA,EAAe;AACtC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,IAAI,GAAA,CAAI,qBAAqB,YAAA,EAAc;AACzC,MAAA,MAAM,WAAW,GAAA,CAAI,KAAA,GAAQ,CAAA,IAAA,EAAO,GAAA,CAAI,KAAK,CAAA,CAAA,GAAK,EAAA;AAClD,MAAA,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,GAAA,CAAI,YAAY,CAAA,EAAG,QAAQ,CAAA,CAAE,CAAA;AAAA,IAC3D,CAAA,MAAA,IAAW,GAAA,CAAI,gBAAA,KAAqB,UAAA,EAAY;AAC9C,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,GAAA,CAAI,YAAY,CAAA,CAAE,CAAA;AAAA,IAC9C,CAAA,MAAA,IAAW,GAAA,CAAI,gBAAA,KAAqB,SAAA,EAAW;AAC7C,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,GAAA,CAAI,YAAY,CAAA,CAAE,CAAA;AAAA,IAC7C;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC7C,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACnD,IAAA,IAAI,OAAO,YAAA,EAAc;AACvB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,MAAA,CAAO,YAAY,CAAA,CAAE,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAMA,SAAS,sBAAsB,UAAA,EAAqC;AAClE,EAAA,MAAM,OAAA,GAA2C;AAAA,IAC/C,QAAA,EAAU,MAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW,QAAA;AAAA,IACX,MAAA,EAAQ,MAAA;AAAA,IACR,WAAA,EAAa,WAAA;AAAA,IACb,UAAA,EAAY,UAAA;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AACA,EAAA,OAAO,OAAA,CAAQ,UAAU,CAAA,IAAK,MAAA;AAChC;AAKA,SAASA,iBAAgB,KAAA,EAA4B;AACnD,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,UAAA,CAAW,SAAS,CAAA,EAAG;AACnD,IAAA,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,EACzC,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,IAAA,CAAK,MAAM,SAAS,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,KAAA,CAAM,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA;AACzC,EAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACrC,EAAA,IAAI,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AACjC,EAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAC/B,IAAA,MAAM,UAAA,GAAa,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,GACxC,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA,CAAA,CAAA,GACjB,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA;AACxB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,UAAU,CAAA,CAAE,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKA,SAASP,kBAAiB,IAAA,EAAsB;AAC9C,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,iBAAA,EAAmB,OAAO,EAAE,WAAA,EAAY;AAC9D;AAMA,SAASM,iBAAgB,IAAA,EAAuB;AAC9C,EAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,EAAY;AAK/B,EAAA,IAAI,wBAAA,CAAyB,IAAA,CAAK,KAAK,CAAA,EAAG;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AAIA,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,KAAK,CAAA,EAAG;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,OAAO,WAAA,CAAY,KAAK,IAAI,CAAA;AAC9B;;;AC3NO,SAAS,yBAAyB,IAAA,EAAuC;AAC9E,EAAA,MAAM,UAAA,GAAa,uBAAuB,IAAI,CAAA;AAC9C,EAAA,OAAO,eAAe,UAAU,CAAA;AAClC;AAKO,SAAS,uBAAuB,IAAA,EAA2C;AAChF,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,MAAM,IAAA,GAAQ,KAAK,IAAA,IAAmB,EAAA;AACtC,EAAA,MAAM,OAAA,GAAW,IAAA,CAAK,OAAA,IAAuB,IAAA,CAAK,WAAA,IAA0B,EAAA;AAC5E,EAAA,MAAM,gBAAgB,IAAA,CAAK,aAAA;AAG3B,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,MAAM,WAAA,GAAc,KAAA,IAAS,OAAA,IAAW,QAAA,IAAY,4BAA4B,IAAI,CAAA;AAGpF,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,MAAM,cAAA,GAAkB,IAAA,CAAK,QAAA,IAA+C,EAAC;AAC7E,EAAA,MAAM,YAAA,GAAgB,IAAA,CAAK,MAAA,IAAsD,EAAC;AAGlF,EAAA,KAAA,MAAW,WAAW,cAAA,EAAgB;AACpC,IAAA,MAAM,aAAa,OAAA,CAAQ,OAAA;AAC3B,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,SAAkC,EAAC;AAEvC,IAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,MAAA,OAAA,GAAU,UAAA;AACV,MAAA,MAAA,GAAU,OAAA,CAAQ,UAAsC,EAAC;AAAA,IAC3D,CAAA,MAAA,IAAW,UAAA,IAAc,OAAO,UAAA,KAAe,QAAA,EAAU;AACvD,MAAA,MAAM,UAAA,GAAa,UAAA;AACnB,MAAA,OAAA,GAAW,WAAW,IAAA,IAAmB,gBAAA;AACzC,MAAA,MAAM,EAAE,IAAA,EAAM,GAAG,UAAA,EAAW,GAAI,UAAA;AAChC,MAAA,MAAA,GAAS,UAAA;AAAA,IACX,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,gBAAA;AAAA,IACZ;AAEA,IAAA,MAAM,kBAAA,GAAqB,0BAAA,CAA2B,OAAA,EAAS,MAAM,CAAA;AACrE,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,cAAA;AAAA,MACN,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH;AAGA,EAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,YAAA;AAEJ,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,SAAA,GAAY,KAAA;AAAA,IACd,CAAA,MAAO;AACL,MAAA,SAAA,GAAa,KAAA,CAAM,GAAA,IAAmB,KAAA,CAAM,IAAA,IAAmB,SAAA;AAC/D,MAAA,YAAA,GAAe,KAAA,CAAM,YAAA;AAAA,IACvB;AAGA,IAAA,MAAM,gBAAA,GAAmB,YAAA,GACrB,CAAA,EAAG,eAAA,CAAgB,SAAS,CAAC,CAAA,KAAA,EAAQ,YAAY,CAAA,CAAA,GACjD,eAAA,CAAgB,SAAS,CAAA;AAE7B,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,cAAA;AAAA,MACN,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,UAA8B,EAAC;AACrC,EAAA,MAAM,aAAA,GAAiB,IAAA,CAAK,OAAA,IAA8C,EAAC;AAE3E,EAAA,KAAA,MAAW,UAAU,aAAA,EAAe;AAClC,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,IAAA,EAAM,aAAA;AAAA,MACN,OAAA,EAAU,OAAO,OAAA,IAAsB,EAAA;AAAA,MACvC,MAAA,EAAS,OAAO,MAAA,IAAqB;AAAA,KACtC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,IAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAA,EAAK,IAAA;AAAA,IACL,aAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,SAAS,gBAAgB,IAAA,EAAsB;AAC7C,EAAA,OAAO,KACJ,OAAA,CAAQ,iBAAA,EAAmB,OAAO,CAAA,CAClC,OAAA,CAAQ,wBAAwB,OAAO,CAAA;AAC5C;AAKA,SAAS,eAAe,IAAA,EAA0B;AAChD,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,CAAA;AACjD,EAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,WAAW,CAAA,OAAA,EAAU,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA;AAGzD,EAAA,IAAI,KAAK,aAAA,EAAe;AACtB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,IAAA,CAAK,aAAa,CAAA,CAAE,CAAA;AAAA,EAC5C;AAGA,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAAA,EACvC;AAGA,EAAA,IAAI,KAAK,GAAA,EAAK;AACZ,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAG,CAAA,CAAE,CAAA;AAAA,EAC/B;AAGA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACnC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,OAAA,CAAQ,WAAW,CAAA,CAAE,CAAA;AAAA,IACzC;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC3B,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AACvB,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,MAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,QAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,MAAA,CAAO,OAAO,CAAA,IAAA,EAAO,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,MACxD,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKA,SAAS,4BAA4B,IAAA,EAAsB;AAEzD,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAGzC,EAAA,IAAI,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG;AAC7B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnC,IAAA,OAAO,CAAA,UAAA,EAAa,SAAA,CAAU,MAAA,CAAO,WAAA,EAAa,CAAC,CAAA,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,SAAS,QAAA,CAAS,QAAQ,KAAK,QAAA,CAAS,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/D,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAC/C,IAAA,OAAO,CAAA,cAAA,EAAiB,MAAA,CAAO,WAAA,EAAa,CAAA,CAAA;AAAA,EAC9C;AAEA,EAAA,IAAI,SAAS,UAAA,CAAW,QAAQ,KAAK,QAAA,CAAS,UAAA,CAAW,KAAK,CAAA,EAAG;AAC/D,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA;AACnD,IAAA,OAAO,CAAA,uBAAA,EAA0B,MAAA,CAAO,WAAA,EAAa,CAAA,CAAA;AAAA,EACvD;AAEA,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,EAAG;AAC/B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAC3C,IAAA,OAAO,kBAAkB,MAAA,GAAS,CAAA,EAAA,EAAK,OAAO,WAAA,EAAa,KAAK,SAAS,CAAA,CAAA;AAAA,EAC3E;AAEA,EAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,IAAA,OAAO,gCAAA;AAAA,EACT;AAEA,EAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,IAAA,OAAO,+BAAA;AAAA,EACT;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAA,KAAa,UAAA,IAAc,QAAA,KAAa,QAAA,EAAU;AACpD,IAAA,OAAO,uBAAA;AAAA,EACT;AAGA,EAAA,OAAON,iBAAAA,CAAiB,QAAQ,CAAA,CAAE,WAAA,EAAY;AAChD;AAKA,SAAS,0BAAA,CAA2B,SAAiB,MAAA,EAAyC;AAC5F,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,aAAA;AACH,MAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,MAAA,OAAO,KAAA,GAAQ,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAA,CAAA,GAAM,aAAA;AAAA,IAElD,KAAK,aAAA;AACH,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,MAAA,MAAM,eAAe,MAAA,CAAO,YAAA;AAC5B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,gBAAA,GAAmB,YAAA,KAAiB,OAAA,GAAU,OAAA,GAAU,OAAA;AAC9D,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,mBAAA,EAAsB,gBAAgB,CAAA,CAAA;AAAA,MACxD;AACA,MAAA,OAAO,eAAA;AAAA,IAET,KAAK,eAAA;AACH,MAAA,MAAM,eAAe,MAAA,CAAO,MAAA;AAC5B,MAAA,OAAO,YAAA,GAAe,CAAA,EAAG,YAAY,CAAA,QAAA,CAAA,GAAa,cAAA;AAAA,IAEpD,KAAK,cAAA;AACH,MAAA,MAAM,aAAa,MAAA,CAAO,MAAA;AAC1B,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAO,SAAS,MAAA,GACZ,CAAA,aAAA,EAAgB,UAAU,CAAA,CAAA,GAC1B,kBAAkB,UAAU,CAAA,CAAA;AAAA,MAClC;AACA,MAAA,OAAO,iBAAA;AAAA,IAET,KAAK,iBAAA;AACH,MAAA,OAAO,oBAAA;AAAA,IAET,KAAK,eAAA;AACH,MAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AACzB,MAAA,MAAM,aAAa,MAAA,CAAO,KAAA;AAC1B,MAAA,OAAO,UAAA,GACH,GAAG,UAAU,CAAA,EAAA,EAAK,aAAa,OAAO,CAAA,CAAA,CAAA,GACtC,CAAA,EAAG,SAAA,IAAa,OAAO,CAAA,cAAA,CAAA;AAAA,IAE7B,KAAK,kBAAA;AACH,MAAA,OAAO,mBAAA;AAAA,IAET,KAAK,iBAAA;AACH,MAAA,OAAO,qBAAA;AAAA,IAET,KAAK,gBAAA;AACH,MAAA,MAAM,aAAa,MAAA,CAAO,WAAA;AAC1B,MAAA,OAAO,UAAA,IAAc,wBAAA;AAAA,IAEvB;AAEE,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAC1C,MAAA,OAAO,QAAA,CAAS,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA;AAEhE;AAKA,SAASA,kBAAiB,IAAA,EAAsB;AAC9C,EAAA,OAAO,KACJ,OAAA,CAAQ,iBAAA,EAAmB,OAAO,CAAA,CAClC,OAAA,CAAQ,wBAAwB,OAAO,CAAA;AAC5C;AAKA,SAAS,UAAU,IAAA,EAAsB;AACvC,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IAAK,KAAK,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA,CAAK,SAAS,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1F,IAAA,OAAO,IAAA,GAAO,IAAA;AAAA,EAChB;AACA,EAAA,IAAI,KAAK,QAAA,CAAS,GAAG,KAAK,CAAC,CAAC,KAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,EAAE,QAAA,CAAS,IAAA,CAAK,KAAK,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AACpF,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,KAAA;AAAA,EAC7B;AACA,EAAA,OAAO,IAAA,GAAO,GAAA;AAChB;;;ACrRO,SAAS,mBAAA,CAAoB,MAAa,OAAA,EAAiC;AAGhF,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG;AAElB,IAAA,OAAO,gBAAgB,IAAI,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,EAAA,GAAK,YAAY,IAAI,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAI,CAAA;AAGzB,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,OAAO,gBAAgB,IAAI,CAAA;AAAA,EAC7B;AAGA,EAAA,IAAI,oBAAA,CAAqB,EAAE,CAAA,EAAG;AAC5B,IAAA,OAAO,gBAAA,CAAiB,EAAA,EAAI,IAAS,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,oBAAA,CAAqB,EAAE,CAAA,EAAG;AAC5B,IAAA,OAAO,gBAAA,CAAiB,EAAA,EAAI,IAAS,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,iBAAA,CAAkB,EAAE,CAAA,EAAG;AACzB,IAAA,OAAO,aAAA,CAAc,EAAA,EAAI,IAAS,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,iBAAA,CAAkB,EAAE,CAAA,EAAG;AACzB,IAAA,OAAO,aAAA,CAAc,EAAA,EAAI,IAAS,CAAA;AAAA,EACpC;AAEA,EAAA,IAAIQ,iBAAAA,CAAiB,EAAE,CAAA,EAAG;AACxB,IAAA,OAAO,YAAA,CAAa,EAAA,EAAI,IAAS,CAAA;AAAA,EACnC;AAGA,EAAA,IAAI,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACpB,IAAA,OAAO,gBAAA,CAAiB,EAAA,EAAI,IAAS,CAAA;AAAA,EACvC;AAGA,EAAA,OAAO,qBAAA,CAAsB,EAAA,EAAI,IAAS,CAAA;AAC5C;AAKO,SAAS,wBAAA,CAAyB,MAAa,UAAA,EAA6B;AACjF,EAAA,MAAM,OAAO,mBAAA,CAAoB,IAAsC,CAAA;AACvE,EAAA,OAAO,MAAM,IAAI,CAAA,CAAA;AACnB;AAYO,SAAS,aAAa,KAAA,EAAgC;AAC3D,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,IAAK,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,QAAA;AACzE;AAcA,IAAM,oBAAA,GAAuB,CAAC,GAAA,EAAK,IAAA,EAAM,MAAM,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,OAAO,KAAK,CAAA;AAC1G,IAAM,uBAAuB,CAAC,GAAA,EAAK,KAAK,GAAA,EAAK,GAAA,EAAK,KAAK,KAAK,CAAA;AAC5D,IAAM,oBAAoB,CAAC,KAAA,EAAO,MAAM,KAAA,EAAO,IAAA,EAAM,MAAM,GAAG,CAAA;AAC9D,IAAM,iBAAA,GAAoB,CAAC,IAAA,EAAM,MAAA,EAAQ,MAAM,KAAA,EAAO,MAAA,EAAQ,UAAU,MAAM,CAAA;AAC9E,IAAM,gBAAA,GAAmB,CAAC,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAY,UAAU,SAAA,EAAW,OAAA,EAAS,SAAA,EAAW,cAAA,EAAgB,WAAW,CAAA;AAEzH,SAAS,qBAAqB,EAAA,EAAqB;AACjD,EAAA,OAAO,oBAAA,CAAqB,SAAS,EAAE,CAAA;AACzC;AAEA,SAAS,qBAAqB,EAAA,EAAqB;AACjD,EAAA,OAAO,oBAAA,CAAqB,SAAS,EAAE,CAAA;AACzC;AAEA,SAAS,kBAAkB,EAAA,EAAqB;AAC9C,EAAA,OAAO,iBAAA,CAAkB,SAAS,EAAE,CAAA;AACtC;AAEA,SAAS,kBAAkB,EAAA,EAAqB;AAC9C,EAAA,OAAO,iBAAA,CAAkB,SAAS,EAAE,CAAA;AACtC;AAEA,SAASA,kBAAiB,EAAA,EAAqB;AAC7C,EAAA,OAAO,gBAAA,CAAiB,SAAS,EAAE,CAAA;AACrC;AAMA,SAAS,gBAAgB,KAAA,EAAwB;AAC/C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAE7B,IAAA,IAAI,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,MAAA,OAAO,cAAc,KAAK,CAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAI,KAAK,CAAA,CAAA,CAAA;AAAA,EAClB;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,QAAQ,MAAA,GAAS,OAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAExB,IAAA,MAAM,QAAQ,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK,eAAA,CAAgB,CAAC,CAAC,CAAA;AAC/C,IAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAE7B,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,CAC5D,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAA,EAAG,CAAC,KAAK,eAAA,CAAgB,CAAC,CAAC,CAAA,CAAE,CAAA;AAChD,IAAA,OAAO,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAKA,SAAS,cAAc,OAAA,EAAyB;AAC9C,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5B,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA;AACxC,EAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAE1B,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA;AAEH,MAAA,OAAO,KAAK,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,GAAI,QAAA;AAAA,IAE5C,KAAK,SAAA;AAEH,MAAA,OAAO,IAAA,CAAK,SAAS,CAAA,GAAI,CAAA,SAAA,EAAY,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK,SAAA;AAAA,IAE1D,KAAK,OAAA;AACH,MAAA,OAAO,eAAA;AAAA,IAET,KAAK,KAAA;AACH,MAAA,OAAO,cAAA;AAAA,IAET;AAEE,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,OAAO,GAAG,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,MACpC;AACA,MAAA,OAAO,IAAA;AAAA;AAEb;AAMA,IAAM,eAAA,GAA0C;AAAA,EAC9C,GAAA,EAAK,IAAA;AAAA,EACL,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,GAAA,EAAK,iBAAA;AAAA,EACL,IAAA,EAAM,iBAAA;AAAA,EACN,GAAA,EAAK,cAAA;AAAA,EACL,IAAA,EAAM,cAAA;AAAA,EACN,IAAA,EAAM,aAAA;AAAA,EACN,KAAA,EAAO,aAAA;AAAA,EACP,IAAA,EAAM,YAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAEA,SAAS,gBAAA,CAAiB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AAC/E,EAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,EAAE,CAAA,IAAK,EAAA;AAEtC,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAM,IAAI,KAAK,CAAA,CAAA;AACnC;AAMA,IAAM,eAAA,GAA0C;AAAA,EAC9C,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,YAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,KAAA,EAAO;AACT,CAAA;AAEA,SAAS,gBAAA,CAAiB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AAC/E,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,EAAA,KAAO,GAAA,EAAK;AAEnC,IAAA,OAAO,YAAY,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAC,CAAA,CAAA;AAAA,EACtD;AAEA,EAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,EAAE,CAAA,IAAK,EAAA;AAEtC,EAAA,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,MAAM,IAAI,KAAK,CAAA,CAAA,CAAA;AACpC;AAMA,SAAS,aAAA,CAAc,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AAC5E,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA;AAAA,IACL,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AACvD,MAAA,OAAO,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,IAC3B;AAAA,IAEA,KAAK,IAAA;AAAA,IACL,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AACvD,MAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,IAC1B;AAAA,IAEA,KAAK,KAAA;AAAA,IACL,KAAK,GAAA,EAAK;AACR,MAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC9C,MAAA,OAAO,OAAO,KAAK,CAAA,CAAA;AAAA,IACrB;AAAA,IAEA;AACE,MAAA,OAAO,qBAAA,CAAsB,EAAA,EAAI,IAAS,CAAA;AAAA;AAEhD;AAMA,SAAS,aAAA,CAAc,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AAC5E,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAClD,MAAA,MAAM,UAAA,GAAa,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AACnD,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAM,UAAA,GAAa,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AACnD,QAAA,OAAO,CAAA,GAAA,EAAM,SAAS,CAAA,MAAA,EAAS,UAAU,SAAS,UAAU,CAAA,CAAA;AAAA,MAC9D;AACA,MAAA,OAAO,CAAA,GAAA,EAAM,SAAS,CAAA,MAAA,EAAS,UAAU,CAAA,CAAA;AAAA,IAC3C;AAAA,IAEA,KAAK,MAAA,EAAQ;AAEX,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,UAAA,KAAc;AACnC,QAAA,IAAI,OAAA,CAAQ,UAAU,CAAA,EAAG;AACvB,UAAA,MAAM,UAAA,GAAa,QAAQ,UAAU,CAAA;AACrC,UAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,UAAA,CAAW,CAAC,CAAM,CAAA;AACnD,UAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,UAAA,CAAW,CAAC,CAAM,CAAA;AACrD,UAAA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA;AAAA,QAChC;AACA,QAAA,OAAO,mBAAA,CAAoB,UAAe,CAAA;AAAA,MAC5C,CAAC,CAAA;AACD,MAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACxB;AAAA,IAEA,KAAK,IAAA,EAAM;AAET,MAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AACvD,MAAA,OAAO,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,IAC7B;AAAA,IAEA,KAAK,KAAA,EAAO;AAEV,MAAA,MAAM,QAAA,GAAW,KAAK,CAAC,CAAA;AACvB,MAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,MAAA,IAAI,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACrB,QAAA,MAAM,WAAA,GAAc,QAAQ,QAAQ,CAAA;AACpC,QAAA,MAAM,cAAc,EAAC;AACrB,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC9C,UAAA,MAAM,OAAA,GAAU,aAAA,CAAc,WAAA,CAAY,CAAC,CAAW,CAAA;AACtD,UAAA,MAAM,WAAW,mBAAA,CAAoB,WAAA,CAAY,CAAA,GAAI,CAAC,CAAM,CAAA;AAC5D,UAAA,WAAA,CAAY,IAAA,CAAK,CAAA,EAAG,OAAO,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAE,CAAA;AAAA,QAC7C;AACA,QAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,IAAS,CAAA;AAC9C,QAAA,OAAO,OAAO,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,OAAO,QAAQ,CAAA,CAAA;AAAA,MACrD;AACA,MAAA,OAAO,qBAAA,CAAsB,EAAA,EAAI,IAAS,CAAA;AAAA,IAC5C;AAAA,IAEA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAClD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AAClE,MAAA,OAAO,QAAQ,SAAS,CAAA,EAAA,EAAK,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA;AAAA,IACtD;AAAA,IAEA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAClD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AAClE,MAAA,OAAO,UAAU,SAAS,CAAA,EAAA,EAAK,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA;AAAA,IACxD;AAAA,IAEA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC9C,MAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAI,CAAA,UAAA,KAAc;AAC5C,QAAA,IAAI,OAAA,CAAQ,UAAU,CAAA,EAAG;AACvB,UAAA,MAAM,UAAA,GAAa,QAAQ,UAAU,CAAA;AACrC,UAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,UAAA,CAAW,CAAC,CAAM,CAAA;AACtD,UAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,UAAA,CAAW,CAAC,CAAM,CAAA;AACrD,UAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA;AAAA,QAC9B;AACA,QAAA,OAAO,mBAAA,CAAoB,UAAe,CAAA;AAAA,MAC5C,CAAC,CAAA;AACD,MAAA,OAAO,QAAQ,KAAK,CAAA,IAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,IAC7C;AAAA,IAEA;AACE,MAAA,OAAO,qBAAA,CAAsB,EAAA,EAAI,IAAS,CAAA;AAAA;AAEhD;AA6EA,SAAS,uBAAuB,UAAA,EAA8C;AAC5E,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrD,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,QAAA,EAAU;AAGxC,IAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5C,MAAA,IAAI,OAAO,MAAM,CAAC,CAAA,KAAM,YAAY,KAAA,CAAM,CAAC,MAAM,IAAA,EAAM;AACrD,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAMA,SAAS,yBAAyB,UAAA,EAA6C;AAC7E,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AAErD,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,QAAA,EAAU;AAExC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AAG3C,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAExB,MAAA,IAAI,MAAM,KAAA,CAAM,CAAA,CAAA,KAAK,OAAO,CAAA,KAAM,QAAQ,CAAA,EAAG;AAC3C,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,GAAG,CAAA,EAAA,EAAK,MAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,MAC3C;AAAA,IAEF,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IAChC,WAAW,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW;AAClE,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,IAC9B;AAAA,EAEF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB;AAoCA,SAAS,YAAA,CAAa,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AAC3E,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,CAAC,CAAW,CAAA;AAC7C,MAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC9C,MAAA,OAAO,CAAA,OAAA,EAAU,KAAK,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA;AAAA,IACpC;AAAA,IAEA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAChD,QAAA,OAAO,CAAA,KAAA,EAAQ,KAAK,CAAA,MAAA,EAAS,OAAO,CAAA,CAAA;AAAA,MACtC;AACA,MAAA,OAAO,QAAQ,KAAK,CAAA,CAAA;AAAA,IACtB;AAAA,IAEA,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC/C,QAAA,OAAO,CAAA,YAAA,EAAe,IAAI,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA;AAAA,MAC3C;AACA,MAAA,OAAO,eAAe,IAAI,CAAA,CAAA;AAAA,IAC5B;AAAA,IAEA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,QAAA,GAAW,KAAK,CAAC,CAAA;AAEvB,MAAA,IAAI,OAAO,aAAa,QAAA,IAAY,QAAA,KAAa,QAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACjF,QAAA,MAAM,GAAA,GAAM,QAAA;AACZ,QAAA,MAAMC,QAAAA,GAAU,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,IAAA,IAAQ,cAAA;AAC3C,QAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,OAAA,IAAW,MAAA;AACxC,QAAA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,eAAA,EAAkBA,QAAO,CAAA,CAAA,CAAA;AAAA,MAC9C;AAEA,MAAA,MAAM,UAAU,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,gBAAgB,QAAQ,CAAA;AAClF,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAM,IAAA,GAAO,OAAO,IAAA,CAAK,CAAC,MAAM,QAAA,GAAW,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA;AACrD,QAAA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,eAAA,EAAkB,OAAO,CAAA,CAAA,CAAA;AAAA,MAC9C;AACA,MAAA,OAAO,WAAW,OAAO,CAAA,CAAA,CAAA;AAAA,IAC3B;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,MAAA,GAAS,KAAK,CAAC,CAAA;AACrB,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC7C,QAAA,OAAO,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,MAClC;AACA,MAAA,OAAO,WAAW,MAAM,CAAA,CAAA;AAAA,IAC1B;AAAA,IAEA,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,UAAA,GAAa,KAAK,CAAC,CAAA;AACzB,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC9C,QAAA,OAAO,CAAA,MAAA,EAAS,UAAU,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA;AAAA,MAC1C;AACA,MAAA,OAAO,SAAS,UAAU,CAAA,CAAA;AAAA,IAC5B;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAM,EAAA,GAAK,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAM,CAAA;AAC3C,QAAA,OAAO,WAAW,EAAE,CAAA,CAAA;AAAA,MACtB;AACA,MAAA,OAAO,cAAA;AAAA,IACT;AAAA,IAEA,KAAK,cAAA,EAAgB;AACnB,MAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AACtB,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,GAAc,EAAA;AACrD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,OAAO,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAClC;AACA,MAAA,OAAO,QAAQ,OAAO,CAAA,CAAA;AAAA,IACxB;AAAA,IAEA,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,MAAA,MAAM,aAAa,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA;AAE/C,MAAA,IAAI,eAAe,IAAA,EAAM;AACvB,QAAA,OAAO,kBAAkB,IAAI,CAAA,CAAA;AAAA,MAC/B;AAEA,MAAA,IAAI,eAAe,IAAA,EAAM;AAEvB,QAAA,IAAI,OAAO,eAAe,QAAA,IAAY,UAAA,KAAe,QAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AACvF,UAAA,MAAM,UAAA,GAAa,UAAA;AACnB,UAAA,MAAM,cAAc,UAAA,CAAW,IAAA;AAC/B,UAAA,MAAM,SAAS,UAAA,CAAW,MAAA;AAG1B,UAAA,MAAM,eAAA,GAAkB,uBAAuB,UAAU,CAAA;AAEzD,UAAA,IAAI,eAAA,EAAiB;AAEnB,YAAA,OAAO,kBAAkB,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,SAAA,CAAU,UAAU,CAAC,CAAA,CAAA,CAAA;AAAA,UAC/D;AAGA,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,MAAM,QAAA,GAAW,yBAAyB,UAAU,CAAA;AACpD,YAAA,IAAI,UAAU,QAAA,EAAU;AACtB,cAAA,OAAO,UAAU,WAAW,CAAA,IAAA,EAAO,IAAI,CAAA,KAAA,EAAQ,MAAM,SAAS,QAAQ,CAAA,CAAA;AAAA,YACxE;AACA,YAAA,IAAI,MAAA,EAAQ;AACV,cAAA,OAAO,CAAA,OAAA,EAAU,WAAW,CAAA,IAAA,EAAO,IAAI,QAAQ,MAAM,CAAA,CAAA;AAAA,YACvD;AACA,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,OAAO,CAAA,OAAA,EAAU,WAAW,CAAA,IAAA,EAAO,IAAI,SAAS,QAAQ,CAAA,CAAA;AAAA,YAC1D;AACA,YAAA,OAAO,CAAA,OAAA,EAAU,WAAW,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA;AAAA,UACzC;AAEA,UAAA,OAAO,kBAAkB,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,SAAA,CAAU,UAAU,CAAC,CAAA,CAAA,CAAA;AAAA,QAC/D;AAEA,QAAA,IAAI,OAAA,CAAQ,UAAU,CAAA,EAAG;AACvB,UAAA,OAAO,UAAU,mBAAA,CAAoB,UAAe,CAAC,OAAO,IAAI,CAAA,CAAA;AAAA,QAClE;AACA,QAAA,OAAO,CAAA,OAAA,EAAU,UAAU,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA;AAAA,MACxC;AACA,MAAA,OAAO,aAAa,IAAI,CAAA,CAAA;AAAA,IAC1B;AAAA,IAEA;AACE,MAAA,OAAO,qBAAA,CAAsB,EAAA,EAAI,IAAS,CAAA;AAAA;AAEhD;AAMA,SAAS,gBAAA,CAAiB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AAC/E,EAAA,MAAM,CAAC,MAAA,EAAQ,EAAE,CAAA,GAAI,EAAA,CAAG,MAAM,GAAG,CAAA;AAEjC,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,MAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,EAAA,EAAI,IAAS,CAAA;AAAA,IACzC,KAAK,KAAA;AACH,MAAA,OAAO,iBAAA,CAAkB,EAAA,EAAI,IAAS,CAAA;AAAA,IACxC,KAAK,OAAA;AACH,MAAA,OAAO,mBAAA,CAAoB,EAAA,EAAI,IAAS,CAAA;AAAA,IAC1C,KAAK,QAAA;AACH,MAAA,OAAO,oBAAA,CAAqB,EAAA,EAAI,IAAS,CAAA;AAAA,IAC3C,KAAK,UAAA;AACH,MAAA,OAAO,sBAAA,CAAuB,EAAA,EAAI,IAAS,CAAA;AAAA,IAC7C,KAAK,MAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,EAAA,EAAI,IAAS,CAAA;AAAA,IACzC,KAAK,QAAA;AACH,MAAA,OAAO,oBAAA,CAAqB,EAAA,EAAI,IAAS,CAAA;AAAA,IAC3C;AACE,MAAA,OAAO,qBAAA,CAAsB,EAAA,EAAI,IAAS,CAAA;AAAA;AAEhD;AAEA,SAAS,kBAAA,CAAmB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AACjF,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AAE/D,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,kBAAA,EAAqB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC9C,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,WAAA,EAAc,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,IAC/C,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,WAAA,EAAc,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,IAC/C,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,iBAAA,EAAoB,aAAA,CAAc,CAAC,CAAC,CAAA,KAAA,EAAQ,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACxF,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,SAAA,EAAY,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACrC,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,WAAA,EAAc,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACvC,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,QAAA,CAAA;AAAA,IAC5B,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,eAAA,EAAkB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC3C,KAAK,KAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,iBAAA,EAAoB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAChE,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,UAAA,EAAa,aAAA,CAAc,CAAC,CAAC,CAAA,IAAA,EAAO,aAAA,CAAc,CAAC,CAAC,CAAA,IAAA,EAAO,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACpF,KAAK,QAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,0BAA0B,aAAA,CAAc,CAAC,CAAC,CAAA,KAAA,EAAQ,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC3E;AACE,MAAA,OAAO,QAAQ,EAAE,CAAA,CAAA,EAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA;AAEnD;AAEA,SAAS,iBAAA,CAAkB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AAChF,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AAE/D,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,UAAA,EAAa,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACtC,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,UAAA,CAAA;AAAA,IAC5B,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,UAAA,CAAA;AAAA,IAC5B,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,QAAA,CAAA;AAAA,IAC5B,KAAK,OAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,UAAA,EAAa,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACzD,KAAK,MAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,aAAA,EAAgB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC5D,KAAK,UAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,UAAA,EAAa,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACzD,KAAK,YAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,aAAA,EAAgB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC5D,KAAK,UAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,WAAA,EAAc,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC1D,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,MAAA,EAAS,aAAA,CAAc,CAAC,CAAC,CAAA,aAAA,EAAgB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACrF,KAAK,UAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,cAAA,EAAiB,aAAA,CAAc,CAAC,CAAC,CAAA,WAAA,CAAA;AAAA,IAC7D,KAAK,UAAA;AACH,MAAA,OAAO,YAAY,aAAA,CAAc,CAAC,CAAC,CAAA,MAAA,EAAS,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC9D;AACE,MAAA,OAAO,OAAO,EAAE,CAAA,CAAA,EAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA;AAElD;AAEA,SAAS,mBAAA,CAAoB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AAClF,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AAE/D,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,SAAA,EAAY,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACrC,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,cAAA,EAAiB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC1C,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,aAAA,EAAgB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACzC,KAAK,QAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,gBAAA,EAAmB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC/D,KAAK,KAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,gBAAA,EAAmB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC/D,KAAK,QAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,cAAA,EAAiB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC7D,KAAK,MAAA;AACH,MAAA,OAAO,WAAW,aAAA,CAAc,CAAC,CAAC,CAAA,OAAA,EAAU,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC9D,KAAK,MAAA;AACH,MAAA,OAAO,UAAU,aAAA,CAAc,CAAC,CAAC,CAAA,SAAA,EAAY,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC/D,KAAK,OAAA;AACH,MAAA,OAAO,UAAU,aAAA,CAAc,CAAC,CAAC,CAAA,OAAA,EAAU,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC7D,KAAK,UAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,UAAA,EAAa,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACzD,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,OAAA,CAAA;AAAA,IAC5B,KAAK,QAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,WAAA,EAAc,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC1D,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,SAAA,CAAA;AAAA,IAC5B,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,gBAAA,EAAmB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC5C,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,UAAA,CAAA;AAAA,IAC5B,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,IAAA,CAAK,iBAAiB,CAAC,CAAA,CAAA;AAAA,IACjD,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,MAAA,EAAS,aAAA,CAAc,CAAC,CAAC,CAAA,IAAA,EAAO,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC5E,KAAK,MAAA;AACH,MAAA,OAAO,SAAS,aAAA,CAAc,CAAC,CAAC,CAAA,UAAA,EAAa,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC/D,KAAK,MAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,eAAA,EAAkB,aAAA,CAAc,CAAC,CAAC,CAAA,MAAA,CAAA;AAAA,IAC9D,KAAK,SAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,YAAA,EAAe,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC3D,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,OAAA,EAAU,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACnC,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,WAAA,EAAc,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACvC;AACE,MAAA,OAAO,SAAS,EAAE,CAAA,CAAA,EAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA;AAEpD;AAEA,SAAS,oBAAA,CAAqB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AACnF,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AAE/D,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,IAAA,EAAO,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACnD,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,MAAA,EAAS,aAAA,CAAc,CAAC,CAAC,CAAA,QAAA,EAAW,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAChF,KAAK,KAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,KAAA,EAAQ,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACpD,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,QAAA,EAAW,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACpC,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,UAAA,EAAa,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACtC,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,WAAA,EAAc,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACvC,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,IAAA,CAAK,eAAe,CAAC,CAAA,CAAA;AAAA,IAC/C,KAAK,MAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,WAAA,EAAc,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC1D,KAAK,MAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,SAAA,EAAY,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACxD,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,SAAA,CAAA;AAAA,IAC5B;AACE,MAAA,OAAO,UAAU,EAAE,CAAA,CAAA,EAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA;AAErD;AAEA,SAAS,sBAAA,CAAuB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AACrF,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AAE/D,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,YAAA,CAAA;AAAA,IAC5B,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,eAAA,CAAA;AAAA,IAC5B,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,aAAA,CAAA;AAAA,IAC5B,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,eAAA,CAAA;AAAA,IAC5B,KAAK,WAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,cAAA,EAAiB,aAAA,CAAc,CAAC,CAAC,CAAA,WAAA,CAAA;AAAA,IAC7D,KAAK,WAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,aAAA,EAAgB,aAAA,CAAc,CAAC,CAAC,CAAA,WAAA,CAAA;AAAA,IAC5D,KAAK,KAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,aAAA,EAAgB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC5D,KAAK,KAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,YAAA,EAAe,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC3D,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,YAAA,EAAe,aAAA,CAAc,CAAC,CAAC,CAAA,KAAA,EAAQ,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACnF,KAAK,SAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,iBAAA,EAAoB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAChE;AACE,MAAA,OAAO,YAAY,EAAE,CAAA,CAAA,EAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA;AAEvD;AAEA,SAAS,kBAAA,CAAmB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AACjF,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AAE/D,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA;AACH,MAAA,OAAO,cAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,cAAA,EAAiB,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC7D,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,MAAA,EAAS,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA,EAAI,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACzE,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,OAAA,EAAU,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA,EAAI,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC1E,KAAK,MAAA;AACH,MAAA,OAAO,sBAAsB,aAAA,CAAc,CAAC,CAAC,CAAA,KAAA,EAAQ,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACvE,KAAK,UAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,WAAA,EAAc,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IAC1D,KAAK,SAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,UAAA,EAAa,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACzD,KAAK,WAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,YAAA,EAAe,aAAA,CAAc,CAAC,CAAC,CAAA,KAAA,EAAQ,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACnF,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,QAAA,EAAW,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACpC,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,SAAA,EAAY,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACrC,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,OAAA,EAAU,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACnC;AACE,MAAA,OAAO,QAAQ,EAAE,CAAA,CAAA,EAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA;AAEnD;AAEA,SAAS,oBAAA,CAAqB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AACnF,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AAE/D,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,UAAA,CAAA;AAAA,IAC5B,KAAK,UAAA;AACH,MAAA,OAAO,GAAG,aAAA,CAAc,CAAC,CAAC,CAAA,IAAA,EAAO,aAAA,CAAc,CAAC,CAAC,CAAA,SAAA,CAAA;AAAA,IACnD,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,cAAA,CAAA;AAAA,IAC5B,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,aAAA,CAAA;AAAA,IAC5B,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,WAAA,CAAA;AAAA,IAC5B,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,MAAA,EAAS,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA,EAAI,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAAA,IACzE,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,QAAA,CAAA;AAAA,IAC5B,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,CAAC,CAAC,CAAA,gBAAA,CAAA;AAAA,IAC5B;AACE,MAAA,OAAO,UAAU,EAAE,CAAA,CAAA,EAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA;AAErD;AAMA,SAAS,qBAAA,CAAsB,EAAA,EAAY,IAAA,EAAe,GAAA,EAA4B;AACpF,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,OAAK,mBAAA,CAAoB,CAAM,CAAC,CAAA;AAC/D,EAAA,OAAO,GAAG,EAAE,CAAA,CAAA,EAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAC1C;;;ACh5BO,SAAS,yBAAA,CAA0B,OAAgC,UAAA,EAA6B;AACrG,EAAA,MAAM,cAAA,GAAiB,2BAAA,CAA4B,KAAA,EAAO,UAAU,CAAA;AACpE,EAAA,OAAO,mBAAmB,cAAc,CAAA;AAC1C;AAKO,SAAS,2BAAA,CAA4B,OAAgC,UAAA,EAAqC;AAC/G,EAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AACnB,EAAqB,MAAM,WAAA,IAA0B;AAGrD,EAAA,IAAI,qBAAqB,UAAA,IAAc,EAAA;AACvC,EAAA,MAAM,eAAe,KAAA,CAAM,YAAA;AAC3B,EAAA,IAAI,CAAC,kBAAA,IAAsB,YAAA,IAAgB,YAAA,CAAa,SAAS,CAAA,EAAG;AAClE,IAAA,kBAAA,GAAqB,YAAA,CAAa,CAAC,CAAA,CAAE,MAAA,IAAoB,EAAA;AAAA,EAC3D;AACA,EAAA,IAAI,CAAC,kBAAA,EAAoB;AAEvB,IAAA,kBAAA,GAAqB,sBAAsB,IAAI,CAAA;AAAA,EACjD;AAGA,EAAA,MAAM,eAAe,KAAA,CAAM,YAAA;AAC3B,EAAA,IAAI,SAAmB,EAAC;AACxB,EAAA,IAAI,YAAA,GAAe,EAAA;AACnB,EAAA,MAAM,cAAkC,EAAC;AAEzC,EAAA,IAAI,YAAA,EAAc;AAEhB,IAAA,MAAM,YAAA,GAAgB,YAAA,CAAa,MAAA,IAA6C,EAAC;AACjF,IAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,MAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,MAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AACrB,MAAA,IAAI,MAAM,SAAA,EAAW;AACnB,QAAA,YAAA,GAAe,SAAA;AAAA,MACjB;AAAA,IACF;AAGA,IAAA,MAAM,iBAAA,GAAqB,YAAA,CAAa,WAAA,IAAkD,EAAC;AAC3F,IAAA,KAAA,MAAW,KAAK,iBAAA,EAAmB;AACjC,MAAA,MAAM,YAAY,CAAA,CAAE,IAAA;AACpB,MAAA,MAAM,UAAU,CAAA,CAAE,EAAA;AAClB,MAAA,MAAM,QAAQ,CAAA,CAAE,KAAA;AAGhB,MAAA,MAAM,SAAwB,EAAC;AAC/B,MAAA,MAAM,YAAA,GAAgB,CAAA,CAAE,MAAA,IAAyD,EAAC;AAClF,MAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAE5B,QAAA,IAAI,YAAA,CAAa,CAAC,CAAA,EAAG;AACnB,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,OAAA;AAAA,YACN,SAAA,EAAW,mBAAA,CAAoB,EAAA,EAAI,kBAAkB,CAAA;AAAA,YACrD,GAAA,EAAK,wBAAA,CAAyB,CAAqB;AAAA,WACpD,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,MAAM,QAAA,GAAW,CAAA;AACjB,UAAA,MAAM,YAAY,QAAA,CAAS,SAAA;AAE3B,UAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,YAAA,MAAA,CAAO,IAAA,CAAK;AAAA,cACV,IAAA,EAAM,OAAA;AAAA,cACN,SAAA,EAAW,mBAAA,CAAoB,EAAA,EAAI,kBAAkB,CAAA;AAAA,cACrD,GAAA,EAAK,wBAAA,CAAyB,SAA6B;AAAA,aAC5D,CAAA;AAAA,UACH,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAA,CAAK;AAAA,cACV,IAAA,EAAM,OAAA;AAAA,cACN,SAAA,EAAW,mBAAA,CAAoB,SAAA,EAAqB,kBAAkB,CAAA;AAAA,cACtE,GAAA,EAAK,MAAM,SAAS,CAAA;AAAA,aACrB,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,EAAE,KAAA,EAAO;AAEX,QAAA,IAAI,YAAA,CAAa,CAAA,CAAE,KAAK,CAAA,EAAG;AACzB,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,OAAA;AAAA,YACN,SAAA,EAAW,mBAAA,CAAoB,EAAA,EAAI,kBAAkB,CAAA;AAAA,YACrD,GAAA,EAAK,wBAAA,CAAyB,CAAA,CAAE,KAAyB;AAAA,WAC1D,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,MAAM,WAAW,CAAA,CAAE,KAAA;AACnB,UAAA,MAAM,YAAY,QAAA,CAAS,SAAA;AAE3B,UAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,YAAA,MAAA,CAAO,IAAA,CAAK;AAAA,cACV,IAAA,EAAM,OAAA;AAAA,cACN,SAAA,EAAW,mBAAA,CAAoB,EAAA,EAAI,kBAAkB,CAAA;AAAA,cACrD,GAAA,EAAK,wBAAA,CAAyB,SAA6B;AAAA,aAC5D,CAAA;AAAA,UACH,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAA,CAAK;AAAA,cACV,IAAA,EAAM,OAAA;AAAA,cACN,SAAA,EAAW,mBAAA,CAAoB,SAAA,EAAqB,kBAAkB,CAAA;AAAA,cACtE,GAAA,EAAK,MAAM,SAAS,CAAA;AAAA,aACrB,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,OAAA,GAAU,cAAA,CAAe,CAAA,CAAE,OAAqD,CAAA;AAEtF,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,YAAA;AAAA,QACN,SAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,MAAM,QAAsB,EAAC;AAC7B,EAAA,MAAM,WAAA,GAAe,KAAA,CAAM,KAAA,IAA4C,EAAC;AACxE,EAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAE3B,IAAA,MAAM,QAAA,GAAY,CAAA,CAAE,IAAA,IAAoB,CAAA,CAAE,EAAA,IAAiB,cAAA;AAC3D,IAAA,MAAM,gBAAgB,CAAA,CAAE,QAAA;AAGxB,IAAA,IAAI,WAAA,GAAc,YAAA;AAClB,IAAA,IAAI,UAAA,GAAa,IAAA;AACjB,IAAA,IAAI,OAAO,kBAAkB,QAAA,EAAU;AAErC,MAAA,UAAA,GAAa,aAAA;AACb,MAAA,WAAA,GAAc,iBAAiB,UAAU,CAAA;AAAA,IAC3C,CAAA,MAAA,IAAW,aAAA,IAAiB,OAAO,aAAA,KAAkB,QAAA,EAAU;AAC7D,MAAA,MAAM,QAAA,GAAW,aAAA;AACjB,MAAA,IAAI,SAAS,EAAA,EAAI;AACf,QAAA,UAAA,GAAa,QAAA,CAAS,EAAA;AACtB,QAAA,WAAA,GAAc,iBAAiB,UAAU,CAAA;AAAA,MAC3C,CAAA,MAAA,IAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,UAAA,GAAc,SAAS,MAAA,GAAoB,GAAA;AAC3C,QAAA,WAAA,GAAc,iBAAiB,UAAU,CAAA;AAAA,MAC3C;AAAA,IACF;AAGA,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,EAAE,KAAA,EAAO;AAEX,MAAA,IAAI,YAAA,CAAa,CAAA,CAAE,KAAK,CAAA,EAAG;AACzB,QAAA,SAAA,GAAY;AAAA,UACV,IAAA,EAAM,OAAA;AAAA,UACN,SAAA,EAAW,mBAAA,CAAoB,EAAA,EAAI,kBAAkB,CAAA;AAAA,UACrD,GAAA,EAAK,wBAAA,CAAyB,CAAA,CAAE,KAAyB;AAAA,SAC3D;AAAA,MACF,CAAA,MAAA,IAAW,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,EAAU;AACtC,QAAA,SAAA,GAAY;AAAA,UACV,IAAA,EAAM,OAAA;AAAA,UACN,SAAA,EAAW,mBAAA,CAAoB,CAAA,CAAE,KAAA,EAAO,kBAAkB,CAAA;AAAA,UAC1D,GAAA,EAAK,CAAA,GAAA,EAAM,CAAA,CAAE,KAAK,CAAA;AAAA,SACpB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,WAAW,CAAA,CAAE,KAAA;AACnB,QAAA,MAAM,YAAY,QAAA,CAAS,SAAA;AAE3B,QAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,UAAA,SAAA,GAAY;AAAA,YACV,IAAA,EAAM,OAAA;AAAA,YACN,SAAA,EAAW,mBAAA,CAAoB,EAAA,EAAI,kBAAkB,CAAA;AAAA,YACrD,GAAA,EAAK,wBAAA,CAAyB,SAA6B;AAAA,WAC7D;AAAA,QACF,CAAA,MAAO;AACL,UAAA,SAAA,GAAY;AAAA,YACV,IAAA,EAAM,OAAA;AAAA,YACN,SAAA,EAAW,mBAAA,CAAoB,SAAA,EAAqB,kBAAkB,CAAA;AAAA,YACtE,GAAA,EAAK,MAAM,SAAS,CAAA;AAAA,WACtB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,CAAA,CAAE,OAAqD,CAAA;AAEtF,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,WAAA;AAAA,MACV,UAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,mBAAmB,IAAI,CAAA;AAAA,IAC7B,UAAA,EAAY,kBAAA;AAAA,IACZ,MAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAO;AAAC,GACV;AACF;AAKA,SAAS,mBAAmB,QAAA,EAAkC;AAC5D,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,KAAA,CAAM,IAAA,CAAK,SAAS,IAAI,CAAA;AACxB,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,IAAI,QAAA,CAAS,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,QAAA,CAAS,OAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAClD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,IAAI,QAAA,CAAS,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,IAAA,KAAA,MAAW,UAAA,IAAc,SAAS,WAAA,EAAa;AAC7C,MAAA,MAAM,SAAA,GAAY,UAAA,CAAW,SAAA,KAAc,GAAA,GAAM,QAAQ,UAAA,CAAW,SAAA;AACpE,MAAA,IAAI,IAAA,GAAO,CAAA,SAAA,EAAY,SAAS,CAAA,IAAA,EAAO,WAAW,OAAO,CAAA,CAAA;AACzD,MAAA,IAAI,WAAW,KAAA,EAAO;AACpB,QAAA,IAAA,IAAQ,CAAA,MAAA,EAAS,WAAW,KAAK,CAAA,CAAA;AAAA,MACnC;AACA,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAGf,MAAA,KAAA,MAAW,KAAA,IAAS,WAAW,MAAA,EAAQ;AACrC,QAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,KAAA,CAAM,OAAOC,qBAAAA,CAAqB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,MAC9D;AAGA,MAAA,KAAA,MAAW,MAAA,IAAU,WAAW,OAAA,EAAS;AACvC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,MAAA,CAAO,WAAW,CAAA,CAAE,CAAA;AAAA,MAC7C;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,MAAA,EAAS,IAAA,CAAK,QAAQ,CAAA,CAAA,CAAG,CAAA;AACpC,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,IAAA,CAAK,KAAA,CAAM,OAAOA,qBAAAA,CAAqB,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACtE;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,MAAA,CAAO,WAAW,CAAA,CAAE,CAAA;AAAA,IACxC;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,IAAI,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC7B,IAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,IAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,EAAK;AAC/B;AAMA,SAAS,eAAe,OAAA,EAAiF;AACvG,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAC;AAEtB,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,CAAA,KAAK;AAEtB,IAAA,IAAI,YAAA,CAAa,CAAC,CAAA,EAAG;AACnB,MAAA,MAAM,WAAA,GAAc,oBAAoB,CAAC,CAAA;AACzC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,OAAA;AAAA,QACZ,WAAA;AAAA,QACA,MAAA,EAAQ,EAAE,KAAA,EAAO,CAAA;AAAE,OACrB;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,CAAA;AAClB,IAAA,MAAM,aAAa,SAAA,CAAU,IAAA;AAC7B,IAAA,MAAM,MAAA,GAAU,SAAA,CAAU,MAAA,IAAsC,EAAC;AAEjE,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,UAAA;AAAA,MACA,WAAA,EAAa,yBAAA,CAA0B,UAAA,EAAY,MAAM,CAAA;AAAA,MACzD;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAKA,SAAS,yBAAA,CAA0B,MAAkB,MAAA,EAAyC;AAC5F,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA;AACH,MAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,MAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AACzB,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,OAAO,UAAU,CAAA,OAAA,EAAU,SAAS,KAAK,OAAO,CAAA,CAAA,CAAA,GAAM,UAAU,SAAS,CAAA,CAAA;AAAA,MAC3E;AACA,MAAA,OAAO,OAAA,GAAU,CAAA,QAAA,EAAW,OAAO,CAAA,CAAA,CAAA,GAAM,mBAAA;AAAA,IAE3C,KAAK,KAAA;AACH,MAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,MAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,MAAA,OAAO,CAAA,OAAA,EAAU,KAAK,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA;AAAA,IAEpC,KAAK,UAAA;AACH,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,OAAO,eAAe,IAAI,CAAA,CAAA;AAAA,IAE5B,KAAK,MAAA;AACH,MAAA,MAAM,KAAA,GAAS,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,KAAA;AACzC,MAAA,OAAO,QAAQ,KAAK,CAAA,CAAA;AAAA,IAEtB,KAAK,cAAA;AACH,MAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,MAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,MAAA,OAAO,OAAA,GAAU,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAA,GAAK,QAAQ,QAAQ,CAAA,CAAA;AAAA,IAEvD,KAAK,SAAA;AACH,MAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAwB,MAAA;AAClD,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,MAAA,OAAO,SAAS,CAAA,QAAA,EAAW,UAAU,IAAI,MAAM,CAAA,CAAA,GAAK,WAAW,UAAU,CAAA,CAAA;AAAA,IAE3E;AAEE,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,SAAS,CAAA,EAAG;AAClC,QAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA,CAAA;AAAA,MAC1C;AACA,MAAA,OAAO,GAAG,IAAI,CAAA,OAAA,CAAA;AAAA;AAEpB;AAKA,SAAS,iBAAiB,EAAA,EAAoB;AAC5C,EAAA,MAAM,UAAU,EAAA,GAAK,GAAA;AACrB,EAAA,MAAM,UAAU,OAAA,GAAU,EAAA;AAC1B,EAAA,MAAM,QAAQ,OAAA,GAAU,EAAA;AACxB,EAAA,MAAM,OAAO,KAAA,GAAQ,EAAA;AAErB,EAAA,IAAI,QAAQ,CAAA,IAAK,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAG;AAC1C,IAAA,OAAO,IAAA,KAAS,CAAA,GAAI,OAAA,GAAU,CAAA,EAAG,IAAI,CAAA,KAAA,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,SAAS,CAAA,IAAK,KAAA,KAAU,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG;AAC7C,IAAA,OAAO,KAAA,KAAU,CAAA,GAAI,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,MAAA,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,WAAW,CAAA,IAAK,OAAA,KAAY,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG;AACnD,IAAA,OAAO,OAAA,KAAY,CAAA,GAAI,UAAA,GAAa,CAAA,EAAG,OAAO,CAAA,QAAA,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,OAAA,KAAY,CAAA,GAAI,UAAA,GAAa,CAAA,EAAG,OAAO,CAAA,QAAA,CAAA;AAChD;AAKA,SAAS,mBAAmB,IAAA,EAAsB;AAChD,EAAA,OAAO,KACJ,OAAA,CAAQ,iBAAA,EAAmB,OAAO,CAAA,CAClC,OAAA,CAAQ,wBAAwB,OAAO,CAAA;AAC5C;AAKA,SAAS,sBAAsB,IAAA,EAAsB;AAEnD,EAAA,MAAM,WAAW,CAAC,WAAA,EAAa,YAAY,UAAA,EAAY,QAAA,EAAU,WAAW,MAAM,CAAA;AAClF,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACzB,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,OAAO,MAAM,CAAA;AAAA,IACrC;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAMA,SAAS,mBAAA,CAAoB,WAAmB,UAAA,EAAyB;AAEvE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,iBAAA;AAAA,MACN,UAAA;AAAA,MACA,SAAA,EAAW;AAAA,KACb;AAAA,IACA,QAAA,EAAU,IAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AACF;AAKA,SAASA,sBAAqB,KAAA,EAA4B;AACxD,EAAA,OAAO,MAAM,GAAA,IAAO,cAAA;AACtB;;;AC3ZO,SAAS,yBAAA,CAA0B,OAA4C,UAAA,EAA4B;AAEhH,EAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG;AACvB,IAAA,OAAO,wBAAA,CAAyB,KAAiB,CAAA;AAAA,EACnD;AAGA,EAAA,MAAM,YAAa,KAAA,CAA6C,SAAA;AAChE,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,OAAO,wBAAA,CAAyB,SAAqB,CAAA;AAAA,EACvD;AAGA,EAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,SAAA,EAAW,UAAU,CAAA;AACzD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,MAAM,SAAS,CAAA,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,6BAA6B,MAAM,CAAA;AAC5C;AAKO,SAAS,0BAA0B,KAAA,EAA4B;AACpE,EAAA,OAAO,6BAAA,CAA8B,MAAM,SAAS,CAAA;AACtD;AAKO,SAAS,6BAA6B,SAAA,EAAmC;AAC9E,EAAA,OAAO,KAAA,GAAQ,oBAAoB,SAAS,CAAA;AAC9C;AAKA,SAAS,oBAAoB,SAAA,EAAmC;AAC9D,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,SAAA,GAAYV,iBAAAA,CAAiB,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA;AAC5D,MAAA,QAAQ,UAAU,KAAA;AAAO,QACvB,KAAK,UAAA;AACH,UAAA,OAAO,GAAG,SAAS,CAAA,YAAA,CAAA;AAAA,QACrB,KAAK,OAAA;AACH,UAAA,OAAO,GAAG,SAAS,CAAA,SAAA,CAAA;AAAA,QACrB,KAAK,QAAA;AACH,UAAA,OAAO,CAAA,EAAG,SAAS,CAAA,IAAA,EAAO,SAAA,CAAU,KAAK,CAAA,CAAA;AAAA;AAE7C,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAiB,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA;AAC5D,MAAA,MAAM,KAAA,GAA4C;AAAA,QAChD,IAAA,EAAM,IAAA;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,GAAA,EAAK,GAAA;AAAA,QACL,GAAA,EAAK,GAAA;AAAA,QACL,IAAA,EAAM,IAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AACA,MAAA,MAAM,EAAA,GAAK,KAAA,CAAM,SAAA,CAAU,QAAQ,KAAK,SAAA,CAAU,QAAA;AAClD,MAAA,OAAO,GAAG,SAAS,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,UAAU,KAAK,CAAA,CAAA;AAAA,IAC9C;AAAA,IAEA,KAAK,YAAA,EAAc;AACjB,MAAA,IAAI,SAAA,CAAU,UAAU,SAAA,EAAW;AACjC,QAAA,OAAO,CAAA,QAAA,EAAW,UAAU,IAAI,CAAA,CAAA;AAAA,MAClC,CAAA,MAAO;AACL,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,SAAA,CAAU,IAAI,CAAA;AAC/C,MAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,SAAA,CAAU,KAAK,CAAA;AACjD,MAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,SAAA,CAAU,QAAQ,IAAI,KAAK,CAAA,CAAA;AAAA,IAC/C;AAAA;AAGF,EAAA,OAAO,EAAA;AACT;AAKA,SAAS,8BAA8B,SAAA,EAAmC;AACxE,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,QAAA,GAAW,GAAG,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,SAAS,CAAA,CAAA;AAC3E,MAAA,QAAQ,UAAU,KAAA;AAAO,QACvB,KAAK,UAAA;AACH,UAAA,OAAO,GAAG,QAAQ,CAAA,QAAA,CAAA;AAAA,QACpB,KAAK,OAAA;AACH,UAAA,OAAO,GAAG,QAAQ,CAAA,QAAA,CAAA;AAAA,QACpB,KAAK,QAAA;AACH,UAAA,MAAM,KAAA,GAAQ,OAAO,SAAA,CAAU,KAAA,KAAU,WACrC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAK,CAAA,CAAA,CAAA,GACnB,SAAA,CAAU,KAAA;AACd,UAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA;AAAA;AAElC,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,QAAA,GAAW,GAAG,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,SAAS,CAAA,CAAA;AAC3E,MAAA,MAAM,KAAA,GAAQ,OAAO,SAAA,CAAU,KAAA,KAAU,WACrC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAK,CAAA,CAAA,CAAA,GACnB,SAAA,CAAU,KAAA;AACd,MAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAI,SAAA,CAAU,QAAQ,IAAI,KAAK,CAAA,CAAA;AAAA,IACnD;AAAA,IAEA,KAAK,YAAA,EAAc;AACjB,MAAA,IAAI,SAAA,CAAU,UAAU,SAAA,EAAW;AACjC,QAAA,OAAO,CAAA,qBAAA,EAAwB,UAAU,IAAI,CAAA,CAAA,CAAA;AAAA,MAC/C,CAAA,MAAO;AACL,QAAA,OAAO,CAAA,EAAG,UAAU,UAAU,CAAA,kBAAA,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,IAAA,GAAO,6BAAA,CAA8B,SAAA,CAAU,IAAI,CAAA;AACzD,MAAA,MAAM,KAAA,GAAQ,6BAAA,CAA8B,SAAA,CAAU,KAAK,CAAA;AAC3D,MAAA,MAAM,EAAA,GAAK,SAAA,CAAU,QAAA,KAAa,KAAA,GAAQ,IAAA,GAAO,IAAA;AACjD,MAAA,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,EAAE,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,IAClC;AAAA;AAGF,EAAA,OAAO,EAAA;AACT;AAMA,SAAS,oBAAA,CAAqB,WAAmB,iBAAA,EAAkD;AACjG,EAAA,SAAA,GAAY,UAAU,IAAA,EAAK;AAG3B,EAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,SAAA,EAAW,IAAI,CAAA;AACrD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,QAAA,CAAS,IAAA,EAAM,iBAAiB,CAAA;AAClE,IAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,QAAA,CAAS,KAAA,EAAO,iBAAiB,CAAA;AACpE,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,KAAA;AAAA,QACV,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,SAAA,EAAW,IAAI,CAAA;AACpD,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,OAAA,CAAQ,IAAA,EAAM,iBAAiB,CAAA;AACjE,IAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,OAAA,CAAQ,KAAA,EAAO,iBAAiB,CAAA;AACnE,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,IAAA;AAAA,QACV,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,SAAA,CAAU,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC1C,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,0CAA0C,CAAA;AAC5E,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,SAAA;AAAA,QACP,IAAA,EAAM,UAAU,CAAC;AAAA,OACnB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,SAAA,CAAU,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACxC,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,KAAA,CAAM,8BAA8B,CAAA;AACjE,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,WAAA;AAAA,QACP,UAAA,EAAY,WAAW,CAAC;AAAA,OAC1B;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,KAAA,CAAM,0BAA0B,CAAA;AACjE,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,MAAM,QAAA,GAAWW,oBAAAA,CAAoB,cAAA,CAAe,CAAC,GAAG,iBAAiB,CAAA;AACzE,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,KAAA,EAAO,QAAA;AAAA,QACP,KAAA,EAAO,cAAA,CAAe,CAAC,CAAA,KAAM,OAAO,UAAA,GAAa;AAAA,OACnD;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,KAAA,CAAM,oCAAoC,CAAA;AAC5E,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM,QAAA,GAAWA,oBAAAA,CAAoB,eAAA,CAAgB,CAAC,GAAG,iBAAiB,CAAA;AAC1E,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,QAAA;AAAA,QACP,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAAA,QAC3B,KAAA,EAAOb,WAAAA,CAAW,eAAA,CAAgB,CAAC,CAAC;AAAA,OACtC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAASa,oBAAAA,CAAoB,MAAc,iBAAA,EAAkD;AAC3F,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAGjB,EAAA,IAAI,KAAK,UAAA,CAAW,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAC9C,IAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,EAAE,IAAA,EAAK;AAAA,EAChC;AAGA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA;AAC5C,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,iBAAA;AAAA,MACN,UAAA,EAAY,SAAS,CAAC,CAAA;AAAA,MACtB,SAAA,EAAW,SAAS,CAAC;AAAA,KACvB;AAAA,EACF;AAGA,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,iBAAA;AAAA,MACN,UAAA,EAAY,iBAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAASb,YAAW,IAAA,EAAyC;AAC3D,EAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAGjB,EAAA,IAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,KAAK,QAAA,CAAS,GAAG,CAAA,IACzC,IAAA,CAAK,WAAW,GAAG,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAI;AAChD,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EACzB;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,MAAA,EAAQ,OAAO,IAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,WAAA,EAAY,KAAM,OAAA,EAAS,OAAO,KAAA;AAG3C,EAAA,MAAM,GAAA,GAAM,WAAW,IAAI,CAAA;AAC3B,EAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG,OAAO,GAAA;AAGxB,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,oBAAA,CAAqB,MAAc,QAAA,EAA0D;AACpG,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,MAAA,GAAS,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACtD,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,IAAA,IAAI,SAAS,GAAA,EAAK,KAAA,EAAA;AAAA,SAAA,IACT,SAAS,GAAA,EAAK,KAAA,EAAA;AAAA,SAAA,IACd,KAAA,KAAU,KAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,QAAA,CAAS,MAAM,CAAA,KAAM,QAAA,EAAU;AACvE,MAAA,OAAO;AAAA,QACL,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,IAAA,EAAK;AAAA,QAC5B,OAAO,IAAA,CAAK,KAAA,CAAM,IAAI,QAAA,CAAS,MAAM,EAAE,IAAA;AAAK,OAC9C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAASE,kBAAiB,IAAA,EAAsB;AAC9C,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,iBAAA,EAAmB,OAAO,EAAE,WAAA,EAAY;AAC9D;;;AC3SA,SAAS,cAAc,MAAA,EAA2B;AAChD,EAAA,IAAI,iBAAA,CAAkB,MAAM,CAAA,EAAG;AAC7B,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,MAAA,CAAO,IAAA;AAChB;AAoBA,SAAS,eAAe,MAAA,EAAqC;AAC3D,EAAA,OAAO,CAAC,kBAAkB,MAAM,CAAA;AAClC;AAKA,SAAS,aAAa,IAAA,EAA6B;AACjD,EAAA,OAAO,CAAC,qBAAA,CAAsB,IAAI,CAAA,IAAK,CAAC,sBAAsB,IAAI,CAAA;AACpE;AAuCA,SAAS,eAAe,MAAA,EAAkD;AACxE,EAAA,OAAO,cAAA,IAAkB,MAAA,IAAW,IAAA,IAAQ,MAAA,IAAU,EAAE,UAAA,IAAc,MAAA,CAAA;AACxE;AAKO,SAAS,sBAAsB,MAAA,EAA2C;AAE/E,EAAA,IAAI,cAAA,CAAe,MAAM,CAAA,EAAG;AAC1B,IAAA,OAAO,4BAA4B,MAAM,CAAA;AAAA,EAC3C;AAGA,EAAA,OAAO,6BAA6B,MAAM,CAAA;AAC5C;AAKA,SAAS,4BAA4B,MAAA,EAAiD;AACpF,EAAA,MAAM,QAAA,GAA2B;AAAA,IAC/B,IAAA,EAAM,UAAA;AAAA,IACN,UAAU,EAAC;AAAA,IACX,OAAO,EAAC;AAAA,IACR,WAAW;AAAC,GACd;AAEA,EAAA,MAAM,WAA6B,EAAC;AACpC,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,UAAU,EAAC;AAAA,IACX,OAAO,EAAC;AAAA,IACR,WAAW;AAAC,GACd;AAGA,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,YAAA,IAAgB,EAAC;AAC7C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC5C,IAAA,MAAM,MAAA,GAAS,aAAa,CAAC,CAAA;AAC7B,IAAA,MAAMY,WAAAA,GAAa,2BAA2B,MAAM,CAAA;AACpD,IAAA,MAAM,YAAA,GAAe,2BAA2B,MAAM,CAAA;AAEtD,IAAA,QAAA,CAAS,QAAA,CAAS,KAAK,YAAY,CAAA;AACnC,IAAA,QAAA,CAAS,QAAA,CAAS,KAAKA,WAAU,CAAA;AAEjC,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,SAAA,EAAW,CAAA,OAAA,EAAU,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,MAChC,WAAA,EAAa,QAAA;AAAA,MACb,UAAA,EAAY,gBAAgB,CAAC,CAAA,CAAA,CAAA;AAAA,MAC7B,UAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,EAAA,EAAI,KAAA,IAAS,EAAC;AACnC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAMA,WAAAA,GAAa,yBAAyB,IAAI,CAAA;AAChD,IAAA,MAAM,UAAA,GAAa,uBAAuB,IAAI,CAAA;AAE9C,IAAA,QAAA,CAAS,KAAA,CAAM,KAAK,UAAU,CAAA;AAC9B,IAAA,QAAA,CAAS,KAAA,CAAM,KAAKA,WAAU,CAAA;AAE9B,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,SAAA,EAAW,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,MAC5B,WAAA,EAAa,MAAA;AAAA,MACb,UAAA,EAAY,YAAY,CAAC,CAAA,CAAA,CAAA;AAAA,MACzB,UAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,EAAC;AACjC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,IAAA,MAAMA,WAAAA,GAAa,0BAA0B,KAAK,CAAA;AAClD,IAAA,MAAM,cAAA,GAAiB,4BAA4B,KAAK,CAAA;AAExD,IAAA,QAAA,CAAS,SAAA,CAAU,KAAK,cAAc,CAAA;AACtC,IAAA,QAAA,CAAS,SAAA,CAAU,KAAKA,WAAU,CAAA;AAElC,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,SAAA,EAAW,CAAA,SAAA,EAAY,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,MACjC,WAAA,EAAa,UAAA;AAAA,MACb,UAAA,EAAY,UAAU,CAAC,CAAA,CAAA,CAAA;AAAA,MACvB,UAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,EAAC;AAC/B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAM,YAAA,GAAe,mBAAmB,IAAI,CAAA;AAE5C,IAAA,QAAA,CAAS,SAAA,CAAU,KAAK,YAAY,CAAA;AAEpC,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,SAAA,EAAW,CAAA,KAAA,EAAQ,IAAA,CAAK,EAAA,IAAM,KAAK,IAAI,CAAA,CAAA;AAAA,MACvC,WAAA,EAAa,MAAA;AAAA,MACb,UAAA,EAAY,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,MACtB,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,UAAA,GAAa,oBAAoB,QAAQ,CAAA;AAE/C,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,SAAS,6BAA6B,MAAA,EAA6C;AACjF,EAAA,MAAM,QAAA,GAA2B;AAAA,IAC/B,IAAA,EAAM,UAAA;AAAA,IACN,UAAU,EAAC;AAAA,IACX,OAAO,EAAC;AAAA,IACR,WAAW;AAAC,GACd;AAEA,EAAA,MAAM,WAA6B,EAAC;AACpC,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,UAAU,EAAC;AAAA,IACX,OAAO,EAAC;AAAA,IACR,WAAW;AAAC,GACd;AAGA,EAAA,KAAA,IAAS,eAAe,CAAA,EAAG,YAAA,GAAe,MAAA,CAAO,QAAA,CAAS,QAAQ,YAAA,EAAA,EAAgB;AAChF,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA;AAG5C,IAAA,IAAI,CAAC,mBAAA,CAAoB,OAAO,CAAA,EAAG;AACjC,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AACvB,IAAA,IAAI,cAAA,CAAe,MAAM,CAAA,EAAG;AAC1B,MAAA,MAAM,YAAA,GAAe,MAAA;AACrB,MAAA,MAAMA,WAAAA,GAAa,2BAA2B,YAAY,CAAA;AAC1D,MAAA,MAAM,YAAA,GAAe,2BAA2B,YAAY,CAAA;AAE5D,MAAA,QAAA,CAAS,QAAA,CAAS,KAAK,YAAY,CAAA;AACnC,MAAA,QAAA,CAAS,QAAA,CAAS,KAAKA,WAAU,CAAA;AAEjC,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,SAAA,EAAW,CAAA,OAAA,EAAU,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,QAChC,WAAA,EAAa,QAAA;AAAA,QACb,UAAA,EAAY,YAAY,YAAY,CAAA,QAAA,CAAA;AAAA,QACpC,UAAA,EAAAA;AAAA,OACD,CAAA;AAAA,IACH;AAGA,IAAA,KAAA,IAAS,YAAY,CAAA,EAAG,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,QAAQ,SAAA,EAAA,EAAa;AACrE,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA;AAGpC,MAAA,IAAI,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG;AACvB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA;AACnB,MAAA,MAAM,cAAA,GAAiB,yBAAyB,UAAU,CAAA;AAC1D,MAAA,MAAM,UAAA,GAAa,uBAAuB,UAAU,CAAA;AAEpD,MAAA,QAAA,CAAS,KAAA,CAAM,KAAK,UAAU,CAAA;AAC9B,MAAA,QAAA,CAAS,KAAA,CAAM,KAAK,cAAc,CAAA;AAElC,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,SAAA,EAAW,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,QAC5B,WAAA,EAAa,MAAA;AAAA,QACb,UAAA,EAAY,CAAA,SAAA,EAAY,YAAY,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA,CAAA;AAAA,QACxD,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAGA,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAA,IAAU,EAAC;AACzC,IAAA,KAAA,IAAS,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,aAAA,CAAc,QAAQ,UAAA,EAAA,EAAc;AACxE,MAAA,MAAM,UAAA,GAAa,cAAc,UAAU,CAAA;AAI3C,MAAA,MAAM,WAAA,GAAc,UAAA;AACpB,MAAA,MAAM,SAAA,GAAa,WAAA,CAAY,IAAA,IAAmB,YAAA,CAAa,UAAU,CAAA;AAGzE,MAAA,IAAI,CAAC,WAAA,CAAY,IAAA,IAAQ,CAAC,YAAY,YAAA,EAAc;AAClD,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,MAAA,MAAM,eAAA,GAAkB,yBAAA,CAA0B,WAAA,EAAa,UAAU,CAAA;AACzE,MAAA,MAAM,cAAA,GAAiB,2BAAA,CAA4B,WAAA,EAAa,UAAU,CAAA;AAE1E,MAAA,QAAA,CAAS,SAAA,CAAU,KAAK,cAAc,CAAA;AACtC,MAAA,QAAA,CAAS,SAAA,CAAU,KAAK,eAAe,CAAA;AAEvC,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,SAAA,EAAW,YAAY,SAAS,CAAA,CAAA;AAAA,QAChC,WAAA,EAAa,UAAA;AAAA,QACb,UAAA,EAAY,CAAA,SAAA,EAAY,YAAY,CAAA,SAAA,EAAY,UAAU,CAAA,CAAA,CAAA;AAAA,QAC1D,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAAA,EACF;AAMA,EAAA,MAAM,UAAA,GAAa,oBAAoB,QAAQ,CAAA;AAE/C,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,SAAS,mBAAmB,IAAA,EAAuC;AACjE,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAkB,IAAA,CAAK,IAAA,IAAoB,IAAA,CAAK,EAAA,IAAiB;AACjE,EAAA,MAAM,gBAAgB,IAAA,CAAK,QAAA;AAG3B,EAAA,IAAI,WAAA,GAAc,YAAA;AAClB,EAAA,IAAI,OAAO,kBAAkB,QAAA,EAAU;AAErC,IAAA,WAAA,GAAcC,kBAAiB,aAAa,CAAA;AAAA,EAC9C,CAAA,MAAA,IAAW,aAAA,IAAiB,OAAO,aAAA,KAAkB,QAAA,EAAU;AAC7D,IAAA,MAAM,QAAA,GAAW,aAAA;AACjB,IAAA,IAAI,SAAS,EAAA,EAAI;AACf,MAAA,WAAA,GAAcA,iBAAAA,CAAiB,SAAS,EAAY,CAAA;AAAA,IACtD,CAAA,MAAA,IAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,WAAA,GAAcA,iBAAAA,CAAkB,QAAA,CAAS,MAAA,GAAoB,GAAI,CAAA;AAAA,IACnE;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,MAAA,EAAS,WAAW,CAAA,CAAA,CAAG,CAAA;AAGlC,EAAA,IAAI,KAAK,KAAA,EAAO;AAEd,IAAA,IAAI,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,EAAG;AAC5B,MAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,wBAAA,CAAyB,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACxD,CAAA,MAAA,IAAW,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,EAAU;AACzC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IACjC,CAAA,MAAO;AACL,MAAA,MAAM,WAAW,IAAA,CAAK,KAAA;AACtB,MAAA,MAAM,YAAY,QAAA,CAAS,SAAA;AAE3B,MAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,wBAAA,CAAyB,SAAS,CAAC,CAAA,CAAE,CAAA;AAAA,MACvD,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAE,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,OAAA,GAAW,IAAA,CAAK,OAAA,IAA0D,EAAC;AACjF,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAE5B,IAAA,IAAI,YAAA,CAAa,MAAM,CAAA,EAAG;AACxB,MAAA,MAAM,IAAA,GAAO,oBAAoB,MAAM,CAAA;AACvC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE,CAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,MAAM,SAAA,GAAY,MAAA;AAClB,MAAA,MAAM,OAAO,SAAA,CAAU,IAAA;AACvB,MAAA,MAAM,MAAA,GAAU,SAAA,CAAU,MAAA,IAAsC,EAAC;AACjE,MAAA,MAAM,IAAA,GAAO,uBAAA,CAAwB,IAAA,EAAM,MAAM,CAAA;AACjD,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKO,SAAS,wBAAwB,QAAA,EAA4B;AAClE,EAAA,OAAO,QAAA,CAAS,IAAI,CAAA,CAAA,KAAK,0BAAA,CAA2B,CAAuC,CAAC,CAAA,CAAE,KAAK,aAAa,CAAA;AAClH;AAKO,SAAS,qBAAqB,KAAA,EAAuB;AAC1D,EAAA,OAAO,KAAA,CAAM,IAAI,CAAA,CAAA,KAAK,wBAAA,CAAyB,CAAuC,CAAC,CAAA,CAAE,KAAK,aAAa,CAAA;AAC7G;AAKO,SAAS,sBAAsB,MAAA,EAAyB;AAC7D,EAAA,OAAO,MAAA,CAAO,IAAI,CAAA,CAAA,KAAK,yBAAA,CAA0B,CAAuC,CAAC,CAAA,CAAE,KAAK,aAAa,CAAA;AAC/G;AAKA,SAAS,oBAAoB,QAAA,EAAgF;AAC3G,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAChC,IAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,IAAA,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,aAAa,CAAC,CAAA;AAAA,EAClD;AAEA,EAAA,IAAI,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC7B,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,aAAa,CAAC,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,QAAA,CAAS,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,KAAA,CAAM,KAAK,mBAAmB,CAAA;AAC9B,IAAA,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,IAAA,CAAK,aAAa,CAAC,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,EAAE,CAAA;AACtB;AAKO,SAASA,kBAAiB,EAAA,EAAoB;AACnD,EAAA,MAAM,UAAU,EAAA,GAAK,GAAA;AACrB,EAAA,MAAM,UAAU,OAAA,GAAU,EAAA;AAC1B,EAAA,MAAM,QAAQ,OAAA,GAAU,EAAA;AACxB,EAAA,MAAM,OAAO,KAAA,GAAQ,EAAA;AAErB,EAAA,IAAI,QAAQ,CAAA,IAAK,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAG;AAC1C,IAAA,OAAO,IAAA,KAAS,CAAA,GAAI,OAAA,GAAU,CAAA,EAAG,IAAI,CAAA,KAAA,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,SAAS,CAAA,IAAK,KAAA,KAAU,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG;AAC7C,IAAA,OAAO,KAAA,KAAU,CAAA,GAAI,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,MAAA,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,WAAW,CAAA,IAAK,OAAA,KAAY,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG;AACnD,IAAA,OAAO,OAAA,KAAY,CAAA,GAAI,UAAA,GAAa,CAAA,EAAG,OAAO,CAAA,QAAA,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,OAAA,KAAY,CAAA,GAAI,UAAA,GAAa,CAAA,EAAG,OAAO,CAAA,QAAA,CAAA;AAChD;AAKO,SAAS,uBAAA,CAAwB,MAAc,MAAA,EAAyC;AAC7F,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA;AACH,MAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,MAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AACzB,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,OAAO,UAAU,CAAA,OAAA,EAAU,SAAS,KAAK,OAAO,CAAA,CAAA,CAAA,GAAM,UAAU,SAAS,CAAA,CAAA;AAAA,MAC3E;AACA,MAAA,OAAO,OAAA,GAAU,CAAA,QAAA,EAAW,OAAO,CAAA,CAAA,CAAA,GAAM,mBAAA;AAAA,IAE3C,KAAK,cAAA;AACH,MAAA,OAAO,CAAA,OAAA,EAAU,MAAA,CAAO,KAAK,CAAA,IAAA,EAAO,OAAO,KAAK,CAAA,CAAA;AAAA,IAElD,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,YAAA,EAAe,OAAO,IAAI,CAAA,CAAA;AAAA,IAEnC,KAAK,YAAA;AACH,MAAA,MAAM,KAAA,GAAS,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,KAAA;AACzC,MAAA,OAAO,QAAQ,KAAK,CAAA,CAAA;AAAA,IAEtB,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,KAAA,EAAQ,OAAO,QAAQ,CAAA,CAAA;AAAA,IAEhC,KAAK,cAAA;AACH,MAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAwB,MAAA;AAClD,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,MAAA,OAAO,SAAS,CAAA,QAAA,EAAW,UAAU,IAAI,MAAM,CAAA,CAAA,GAAK,WAAW,UAAU,CAAA,CAAA;AAAA,IAE3E,KAAK,aAAA;AACH,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,MAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,MAAA,MAAM,eAAe,MAAA,CAAO,OAAA;AAC5B,MAAA,MAAM,OAAA,GAAU,OAAO,IAAA,IAAkB,MAAA;AACzC,MAAA,OAAO,kBAAkB,MAAM,CAAA,QAAA,EAAW,KAAK,CAAA,WAAA,EAAc,YAAY,UAAU,OAAO,CAAA,CAAA;AAAA,IAE5F;AAEE,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,SAAS,CAAA,EAAG;AAClC,QAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA,CAAA;AAAA,MAC1C;AACA,MAAA,OAAO,GAAG,IAAI,CAAA,OAAA,CAAA;AAAA;AAEpB;;;ACteA,SAASC,eAAc,MAAA,EAA2B;AAChD,EAAA,IAAI,iBAAA,CAAkB,MAAM,CAAA,EAAG;AAE7B,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,MAAA,CAAO,IAAA;AAChB;AAKA,SAAS,YAAY,IAAA,EAAuB;AAC1C,EAAA,IAAI,qBAAA,CAAsB,IAAI,CAAA,EAAG;AAE/B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,IAAA,OAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,IAAI,qBAAA,CAAsB,IAAI,CAAA,EAAG;AAC/B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAChC,IAAA,OAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,IAAA,CAAK,IAAA;AACd;AAsBO,SAAS,qBAAA,CAAsB,YAAoB,UAAA,EAAkD;AAC1G,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,MAAM,WAAyB,EAAC;AAChC,EAAA,MAAM,WAA6B,EAAC;AAIpC,EAAA,MAAM,SAAwB,UAAA,GAAa;AAAA,IACzC,GAAG,UAAA;AAAA,IACH,UAAU,CAAC,GAAI,UAAA,CAAW,QAAA,IAAY,EAAG;AAAA,GAC3C,GAAI;AAAA,IACF,IAAA,EAAM,aAAA;AAAA,IACN,UAAU;AAAC,GACb;AAGA,EAAA,MAAM,QAAA,GAAW,oBAAoB,UAAU,CAAA;AAG/C,EAAA,MAAM,iBAAwE,EAAC;AAC/E,EAAA,MAAM,cAAqF,EAAC;AAC5F,EAAA,MAAM,eAAwF,EAAC;AAI/F,EAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,QAAA,EAAU;AACpC,IAAA,MAAM,MAAA,GAAS,YAAY,IAAI,CAAA;AAC/B,IAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,IAAA,EAAM;AACjC,MAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,MAAA,CAAO,IAAI,CAAA;AACrD,MAAA,MAAM,MAAA,GAAiB;AAAA,QACrB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,MAAA,EAAS,YAAA,CAAa,MAAA,IAAU,EAAC;AAAA,QACjC,WAAA,EAAa;AAAA,OACf;AACA,MAAA,cAAA,CAAe,IAAA,CAAK;AAAA,QAClB,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA;AAAA,QAClB,MAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,MAAM,CAAA;AAAA,IAC9B;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,QAAQ,CAAA;AAAA,EAClC;AAGA,EAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjC,IAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAC7B,IAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,IAAA,EAAM;AACjC,MAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,MAAA,CAAO,IAAI,CAAA;AACjD,MAAA,MAAM,IAAA,GAAa;AAAA,QACjB,MAAM,UAAA,CAAW,IAAA;AAAA,QACjB,IAAA,EAAO,WAAW,IAAA,IAAQ,GAAA;AAAA,QAC1B,eAAe,UAAA,CAAW;AAAA,OAC5B;AAGA,MAAA,IAAI,MAAA,CAAO,KAAK,SAAA,EAAW;AACzB,QAAA,IAAA,CAAK,SAAS,CAAC;AAAA,UACb,GAAA,EAAK,OAAO,IAAA,CAAK,SAAA;AAAA,UACjB,YAAA,EAAc,OAAO,IAAA,CAAK;AAAA,SAC3B,CAAA;AAAA,MACH;AAIA,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,aAAA;AACpD,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA;AAAA,QAClB,IAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,MAAM,CAAA;AAAA,IAC9B;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,QAAQ,CAAA;AAAA,EAClC;AAGA,EAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,SAAA,EAAW;AAErC,IAAA,IAAI,KAAK,IAAA,EAAK,CAAE,aAAY,CAAE,UAAA,CAAW,OAAO,CAAA,EAAG;AACjD,MAAa,oBAAoB,IAAI;AAIrC,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,IAAA,EAAM,EAAE,CAAA;AACrC,IAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,IAAA,EAAM;AACjC,MAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,MAAA,CAAO,IAAI,CAAA;AACtD,MAAA,MAAM,KAAA,GAAe;AAAA,QACnB,MAAM,WAAA,CAAY,IAAA;AAAA,QAClB,cAAc,WAAA,CAAY;AAAA,OAC5B;AAGA,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,UAAA,IAAc,MAAA;AAC5C,MAAA,YAAA,CAAa,IAAA,CAAK;AAAA,QAChB,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA;AAAA,QAClB,KAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,MAAM,CAAA;AAAA,IAC9B;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,QAAQ,CAAA;AAAA,EAClC;AAGA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yBAAA,EAA4B,cAAA,CAAe,MAAM,CAAA,WAAA,EAAc,YAAY,MAAM,CAAA,QAAA,EAAW,YAAA,CAAa,MAAM,CAAA,OAAA,CAAS,CAAA;AACpI,EAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,2BAAA,EAA8B,cAAA,CAAe,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACxF;AACA,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yBAAA,EAA4B,YAAA,CAAa,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACpF;AAIA,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAoB;AACjD,EAAA,KAAA,MAAW,EAAE,IAAA,EAAK,IAAK,WAAA,EAAa;AAClC,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,aAAA,EAAe;AACrC,MAAA,KAAA,MAAW,QAAA,IAAY,KAAK,MAAA,EAAQ;AAElC,QAAA,IAAI,SAAS,GAAA,EAAK;AAEhB,UAAA,MAAM,YAAA,GAAe,QAAA,CAAS,YAAA,IAAgB,IAAA,CAAK,aAAA;AACnD,UAAA,IAAI,YAAA,EAAc;AAChB,YAAA,gBAAA,CAAiB,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,WAAA,IAAe,YAAY,CAAA;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,gBAAA,CAAiB,OAAO,CAAA,EAAG;AAC7B,IAAA,OAAA,CAAQ,GAAA,CAAI,2CAA2C,KAAA,CAAM,IAAA,CAAK,iBAAiB,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,MAAA,EAAI,CAAC,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACzI,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,IAAI,CAAA,8FAAA,CAAgG,CAAA;AAAA,EAC9G;AAGA,EAAA,MAAM,WAAgC,EAAC;AAEvC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,cAAA,CAAe,QAAQ,CAAA,EAAA,EAAK;AAC9C,IAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK,GAAI,eAAe,CAAC,CAAA;AAG/C,IAAA,MAAM,WAAA,GAAc,WAAA,CACjB,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,SAAA,KAAc,IAAA,IAAQ,CAAA,CAAE,IAAA,CAAK,kBAAkB,IAAI,CAAA,CACjE,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA;AAMlB,IAAA,MAAM,YAAA,GAA2B,YAAA,CAC9B,MAAA,CAAO,CAAA,CAAA,KAAK;AACX,MAAA,MAAM,cAAA,GAAiB,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY;AAG1C,MAAA,IAAI,CAAA,CAAE,cAAc,IAAA,EAAM;AACxB,QAAA,OAAA,CAAQ,IAAI,CAAA,+BAAA,EAA6B,CAAA,CAAE,IAAI,CAAA,iBAAA,EAAe,IAAI,CAAA,2BAAA,CAA6B,CAAA;AAC/F,QAAA,OAAO,IAAA;AAAA,MACT;AAIA,MAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,GAAA,CAAI,cAAc,CAAA;AACxD,MAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,QAAA,OAAA,CAAQ,IAAI,CAAA,+BAAA,EAA6B,CAAA,CAAE,IAAI,CAAA,iBAAA,EAAe,IAAI,CAAA,wBAAA,CAA0B,CAAA;AAC5F,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA,CACA,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,MAAM,IAAI,CAAA;AAExB,IAAA,MAAM,OAAA,GAA6B;AAAA,MACjC,IAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA,EAAQ,YAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAGrB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,SAAA,EAAW,UAAU,IAAI,CAAA,CAAA;AAAA,MACzB,WAAA,EAAa,QAAA;AAAA,MACb,UAAA,EAAY,YAAY,CAAC,CAAA,QAAA,CAAA;AAAA,MACzB,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAGA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,MAAU,WAAA,EAAa;AACnD,IAAA,MAAM,eAAe,cAAA,CAAe,SAAA,CAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,SAAS,CAAA;AACvE,IAAA,MAAM,SAAA,GAAY,YAAA,IAAgB,CAAA,GAC9B,QAAA,CAAS,YAAY,CAAA,CAAE,KAAA,CAAM,SAAA,CAAU,CAAA,CAAA,KAAK,WAAA,CAAY,CAAC,CAAA,KAAM,IAAI,CAAA,GACnE,EAAA;AAEJ,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,SAAA,EAAW,QAAQ,IAAI,CAAA,CAAA;AAAA,MACvB,WAAA,EAAa,MAAA;AAAA,MACb,UAAA,EAAY,gBAAgB,CAAA,IAAK,SAAA,IAAa,IAC1C,CAAA,SAAA,EAAY,YAAY,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA,CAAA,GAC5C,CAAA,aAAA,CAAA;AAAA,MACJ,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,MAAU,YAAA,EAAc;AACpD,IAAA,MAAM,eAAe,cAAA,CAAe,SAAA,CAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,SAAS,CAAA;AACvE,IAAA,MAAM,UAAA,GAAa,YAAA,IAAgB,CAAA,GAC/B,QAAA,CAAS,YAAY,CAAA,CAAE,MAAA,CAAO,SAAA,CAAU,CAAA,CAAA,KAAK,YAAA,CAAa,CAAC,CAAA,KAAM,IAAI,CAAA,GACrE,EAAA;AAEJ,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,SAAA,EAAW,YAAY,IAAI,CAAA,CAAA;AAAA,MAC3B,WAAA,EAAa,UAAA;AAAA,MACb,UAAA,EAAY,gBAAgB,CAAA,IAAK,UAAA,IAAc,IAC3C,CAAA,SAAA,EAAY,YAAY,CAAA,SAAA,EAAY,UAAU,CAAA,CAAA,CAAA,GAC9C,CAAA,MAAA,CAAA;AAAA,MACJ,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,kBAAA,uBAAyB,GAAA,EAAY;AAC3C,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,KAAA,MAAW,QAAA,IAAY,QAAQ,MAAA,EAAQ;AACrC,MAAA,MAAM,SAAA,GAAY,aAAa,QAAQ,CAAA;AACvC,MAAA,kBAAA,CAAmB,GAAA,CAAI,SAAA,CAAU,WAAA,EAAa,CAAA;AAAA,IAChD;AAAA,EACF;AAQA,EAAA,OAAA,CAAQ,IAAI,CAAA,iBAAA,EAAoB,YAAA,CAAa,MAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,IAAI,CAAA,qBAAA,CAAuB,CAAA;AACpH,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC7B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yBAAA,EAA4B,OAAA,CAAQ,IAAI,KAAK,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,UAAA,EAAa,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACxH;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,QAAA,GAAW,QAAA;AAElB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAO,MAAA,KAAW,CAAA;AAAA,IAC3B,MAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,kBAAA,CACd,MAAA,EACA,WAAA,EACA,SAAA,EACA,aAAA,EACsB;AACtB,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,MAAM,WAAyB,EAAC;AAChC,EAAA,MAAM,gBAA+B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAGtE,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,OAAA,CAAQ,+BAAA,EAAiC,EAAE,CAAA;AAElE,EAAA,QAAQ,WAAA;AAAa,IACnB,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,MAAA,GAAS,YAAY,aAAa,CAAA;AACxC,MAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,IAAA,EAAM;AACjC,QAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,MAAA,CAAO,IAAI,CAAA;AACrD,QAAA,MAAM,MAAA,GAAiB;AAAA,UACrB,MAAM,YAAA,CAAa,IAAA;AAAA,UACnB,MAAA,EAAS,YAAA,CAAa,MAAA,IAAU,EAAC;AAAA,UACjC,WAAA,EAAa;AAAA,SACf;AAGA,QAAA,MAAM,YAAA,GAAe,cAAc,QAAA,CAAS,SAAA;AAAA,UAC1C,OAAK,mBAAA,CAAoB,CAAC,KAAKA,cAAAA,CAAc,CAAA,CAAE,MAAM,CAAA,KAAM;AAAA,SAC7D;AAEA,QAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,UAAA,MAAM,OAAA,GAAU,aAAA,CAAc,QAAA,CAAS,YAAY,CAAA;AACnD,UAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AAAA,QACnB,CAAA,MAAO;AAEL,UAAA,aAAA,CAAc,SAAS,IAAA,CAAK;AAAA,YAC1B,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA;AAAA,YAClB,MAAA;AAAA,YACA,QAAQ,EAAC;AAAA,YACT,OAAO;AAAC,WACT,CAAA;AAAA,QACH;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,MAAM,CAAA;AAAA,MAC9B;AACA,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,QAAQ,CAAA;AAChC,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,MAAA,GAAS,UAAU,aAAa,CAAA;AACtC,MAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,IAAA,EAAM;AACjC,QAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,MAAA,CAAO,IAAI,CAAA;AACjD,QAAA,MAAM,IAAA,GAAa;AAAA,UACjB,MAAM,UAAA,CAAW,IAAA;AAAA,UACjB,IAAA,EAAO,WAAW,IAAA,IAAQ,GAAA;AAAA,UAC1B,eAAe,UAAA,CAAW;AAAA,SAC5B;AAGA,QAAA,KAAA,MAAW,OAAA,IAAW,cAAc,QAAA,EAAU;AAC5C,UAAA,IAAI,CAAC,mBAAA,CAAoB,OAAO,CAAA,EAAG;AAEnC,UAAA,MAAM,SAAA,GAAY,QAAQ,KAAA,CAAM,SAAA,CAAU,OAAK,WAAA,CAAY,CAAC,MAAM,IAAI,CAAA;AACtE,UAAA,IAAI,aAAa,CAAA,EAAG;AAClB,YAAA,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,GAAI,IAAA;AAC3B,YAAA;AAAA,UACF;AAGA,UAAA,IAAI,KAAK,aAAA,IAAiBA,cAAAA,CAAc,QAAQ,MAAM,CAAA,KAAM,KAAK,aAAA,EAAe;AAC9E,YAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,IAAI,CAAA;AACvB,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,MAAM,CAAA;AAAA,MAC9B;AACA,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,QAAQ,CAAA;AAChC,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,aAAA,EAAe,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,IAAA,EAAM;AACjC,QAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,MAAA,CAAO,IAAI,CAAA;AACtD,QAAA,MAAM,KAAA,GAAe;AAAA,UACnB,MAAM,WAAA,CAAY,IAAA;AAAA,UAClB,cAAc,WAAA,CAAY;AAAA,SAC5B;AACA,QAAA,MAAM,WAAqB,KAAA,CAAM,IAAA;AAIjC,QAAA,IAAI,KAAA,GAAQ,KAAA;AAGZ,QAAA,KAAA,MAAW,OAAA,IAAW,cAAc,QAAA,EAAU;AAC5C,UAAA,IAAI,CAAC,mBAAA,CAAoB,OAAO,CAAA,EAAG;AACnC,UAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,CAAO,SAAA,CAAU,OAAK,YAAA,CAAa,CAAC,MAAM,IAAI,CAAA;AACzE,UAAA,IAAI,cAAc,CAAA,EAAG;AACnB,YAAA,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,GAAI,QAAA;AAC7B,YAAA,KAAA,GAAQ,IAAA;AACR,YAAA;AAAA,UACF;AAAA,QACF;AAIA,QAAA,IAAI,CAAC,KAAA,EAAO;AAEV,UAAA,MAAM,eAAe,aAAA,CAAc,QAAA,CAAS,KAAK,CAAA,CAAA,KAAK,mBAAA,CAAoB,CAAC,CAAC,CAAA;AAC5E,UAAA,IAAI,YAAA,IAAgB,mBAAA,CAAoB,YAAY,CAAA,EAAG;AACrD,YAAA,YAAA,CAAa,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,UACnC,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,KAAK,EAAE,OAAA,EAAS,CAAA,kCAAA,EAAqC,IAAI,QAAQ,CAAA;AAAA,UAC1E;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,MAAM,CAAA;AAAA,MAC9B;AACA,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,QAAQ,CAAA;AAChC,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,MAAA,EAAQ;AAEX,MAAA,MAAM,IAAA,GAAO,oBAAoB,aAAa,CAAA;AAC9C,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,QAAA,CAAS,IAAA,CAAK,EAAE,OAAA,EAAS,oDAAA,EAAsD,CAAA;AAAA,MACjF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,OAAA,EAAS,uCAAA,EAAyC,CAAA;AAAA,MAClE;AACA,MAAA;AAAA,IACF;AAAA;AAGF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAO,MAAA,KAAW,CAAA;AAAA,IAC3B,MAAA,EAAQ,aAAA;AAAA,IACR,MAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAU;AAAC,GACb;AACF;AAKO,SAAS,aAAA,CACd,MAAA,EACA,WAAA,EACA,SAAA,EACe;AACf,EAAA,MAAM,gBAA+B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAGtE,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,OAAA,CAAQ,+BAAA,EAAiC,EAAE,CAAA;AAElE,EAAA,QAAQ,WAAA;AAAa,IACnB,KAAK,QAAA,EAAU;AAEb,MAAA,aAAA,CAAc,QAAA,GAAW,cAAc,QAAA,CAAS,MAAA;AAAA,QAC9C,CAAA,CAAA,KAAK,CAAC,mBAAA,CAAoB,CAAC,KAAKA,cAAAA,CAAc,CAAA,CAAE,MAAM,CAAA,KAAM;AAAA,OAC9D;AACA,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,MAAA,EAAQ;AAEX,MAAA,KAAA,MAAW,OAAA,IAAW,cAAc,QAAA,EAAU;AAC5C,QAAA,IAAI,CAAC,mBAAA,CAAoB,OAAO,CAAA,EAAG;AACnC,QAAA,OAAA,CAAQ,KAAA,GAAQ,QAAQ,KAAA,CAAM,MAAA,CAAO,OAAK,WAAA,CAAY,CAAC,MAAM,IAAI,CAAA;AAAA,MACnE;AACA,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,UAAA,EAAY;AAGf,MAAA,KAAA,MAAW,OAAA,IAAW,cAAc,QAAA,EAAU;AAC5C,QAAA,IAAI,CAAC,mBAAA,CAAoB,OAAO,CAAA,EAAG;AACnC,QAAA,OAAA,CAAQ,MAAA,GAAS,QAAQ,MAAA,CAAO,MAAA,CAAO,OAAK,YAAA,CAAa,CAAC,MAAM,IAAI,CAAA;AAAA,MACtE;AACA,MAAA;AAAA,IACF;AAKA;AAGF,EAAA,OAAO,aAAA;AACT;AAKA,SAAS,oBAAoB,IAAA,EAA4E;AACvG,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,UAAU,EAAC;AAAA,IACX,OAAO,EAAC;AAAA,IACR,WAAW;AAAC,GACd;AAGA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA;AAGjD,EAAA,IAAI,cAAA,GAA4D,IAAA;AAChE,EAAA,IAAI,iBAA2B,EAAC;AAEhC,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA;AAEvC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,EAAK,CAAE,WAAA,EAAY;AAGxC,IAAA,IAAI,OAAA,KAAY,YAAA,IAAgB,OAAA,KAAY,WAAA,EAAa;AACvD,MAAA,YAAA,EAAa;AACb,MAAA,cAAA,GAAiB,UAAA;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,KAAY,SAAA,IAAa,OAAA,KAAY,QAAA,EAAU;AACjD,MAAA,YAAA,EAAa;AACb,MAAA,cAAA,GAAiB,OAAA;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,YAAY,aAAA,IAAiB,OAAA,KAAY,gBAC3C,OAAA,KAAY,UAAA,IAAc,YAAY,SAAA,EAAW;AACjD,MAAA,YAAA,EAAa;AACb,MAAA,cAAA,GAAiB,WAAA;AACjB,MAAA;AAAA,IACF;AAGA,IAAA,cAAA,CAAe,KAAK,IAAI,CAAA;AAAA,EAC1B;AAGA,EAAA,YAAA,EAAa;AAGb,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AAC9F,IAAA,OAAO,mBAAmB,cAAc,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,MAAA;AAEP,EAAA,SAAS,YAAA,GAAe;AACtB,IAAA,IAAI,CAAC,cAAA,IAAkB,cAAA,CAAe,MAAA,KAAW,CAAA,EAAG;AAClD,MAAA,cAAA,GAAiB,EAAC;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,IAAA,CAAK,IAAI,EAAE,IAAA,EAAK;AAC/C,IAAA,IAAI,OAAA,EAAS;AAEX,MAAA,IAAI,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,SAAS,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA;AAIzE,MAAA,IAAI,mBAAmB,UAAA,EAAY;AACjC,QAAA,KAAA,GAAQ,uBAAuB,KAAK,CAAA;AAAA,MACtC,CAAA,MAAA,IAES,mBAAmB,OAAA,EAAS;AACnC,QAAA,KAAA,GAAQ,oBAAoB,KAAK,CAAA;AAAA,MACnC,CAAA,MAAA,IAES,mBAAmB,WAAA,EAAa;AACvC,QAAA,KAAA,GAAQ,wBAAwB,KAAK,CAAA;AAAA,MACvC;AAEA,MAAA,MAAA,CAAO,cAAc,CAAA,CAAE,IAAA,CAAK,GAAG,KAAK,CAAA;AAAA,IACtC;AAEA,IAAA,cAAA,GAAiB,EAAC;AAAA,EACpB;AACF;AAKA,SAAS,uBAAuB,KAAA,EAA2B;AACzD,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AAExB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,IAAA,IAAI,gBAA0B,EAAC;AAE/B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAE1B,MAAA,IAAI,qBAAqB,IAAA,CAAK,OAAO,CAAA,IAAK,aAAA,CAAc,SAAS,CAAA,EAAG;AAElE,QAAA,MAAA,CAAO,KAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA,CAAE,MAAM,CAAA;AAC3C,QAAA,aAAA,GAAgB,CAAC,IAAI,CAAA;AAAA,MACvB,CAAA,MAAO;AACL,QAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA,MACzB;AAAA,IACF;AAGA,IAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,MAAA,MAAA,CAAO,KAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA,CAAE,MAAM,CAAA;AAAA,IAC7C;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA;AAC7B;AAKA,SAAS,oBAAoB,KAAA,EAA2B;AACtD,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,IAAA,IAAI,cAAwB,EAAC;AAE7B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAE1B,MAAA,IAAI,2BAA2B,IAAA,CAAK,OAAO,CAAA,IAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AAEtE,QAAA,MAAA,CAAO,KAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,CAAE,MAAM,CAAA;AACzC,QAAA,WAAA,GAAc,CAAC,IAAI,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,MACvB;AAAA,IACF;AAGA,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAA,CAAO,KAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,CAAE,MAAM,CAAA;AAAA,IAC3C;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA;AAC7B;AAKA,SAAS,wBAAwB,KAAA,EAA2B;AAC1D,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,IAAA,IAAI,kBAA4B,EAAC;AAEjC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAE1B,MAAA,IAAA,CAAK,qBAAA,CAAsB,IAAA,CAAK,OAAO,CAAA,IAAK,YAAA,CAAa,KAAK,OAAO,CAAA,KAAM,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AAErG,QAAA,MAAA,CAAO,KAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA,CAAE,MAAM,CAAA;AAC7C,QAAA,eAAA,GAAkB,CAAC,IAAI,CAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,MAC3B;AAAA,IACF;AAGA,IAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,MAAA,MAAA,CAAO,KAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA,CAAE,MAAM,CAAA;AAAA,IAC/C;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA;AAC7B;AAKA,SAAS,mBAAmB,IAAA,EAA4E;AACtG,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,UAAU,EAAC;AAAA,IACX,OAAO,EAAC;AAAA,IACR,WAAW;AAAC,GACd;AAGA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,SAAS,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA;AAE3E,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,EAAE,WAAA,EAAY;AAGrD,IAAA,IAAI,SAAA,CAAU,KAAA,CAAM,iBAAiB,CAAA,EAAG;AACtC,MAAA,MAAA,CAAO,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,IAC9B,CAAA,MAAA,IAES,SAAA,CAAU,KAAA,CAAM,mBAAmB,CAAA,EAAG;AAC7C,MAAA,MAAA,CAAO,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,IAC3B,CAAA,MAAA,IAES,SAAA,CAAU,KAAA,CAAM,WAAW,CAAA,EAAG;AACrC,MAAA,MAAA,CAAO,SAAA,CAAU,KAAK,OAAO,CAAA;AAAA,IAC/B,CAAA,MAAA,IAES,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,SAAS,CAAA,IAC/C,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,cAAc,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,SAAA,CAAU,KAAK,OAAO,CAAA;AAAA,IAC/B,WAES,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,SAAS,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,IAC9B,WACS,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,cAAc,CAAA,EAAG;AACvD,MAAA,MAAA,CAAO,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,IAC3B,CAAA,MACK;AAEH,MAAA,MAAA,CAAO,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,oBAAoB,IAAA,EAA8C;AACzE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,EAAK,CAAE,MAAM,IAAI,CAAA;AACpC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAGhC,EAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,KAAA,CAAM,oBAAoB,CAAA;AAC1D,EAAA,IAAI,CAAC,eAAe,OAAO,IAAA;AAE3B,EAAA,MAAM,WAAA,GAAc,cAAc,CAAC,CAAA;AACnC,EAAA,MAAM,UAAA,GAAa,kBAAkB,WAAW,CAAA;AAGhD,EAAA,MAAM,QAAA,GAAW,YACd,KAAA,CAAM,KAAK,EACX,GAAA,CAAI,CAAA,IAAA,KAAQ,KAAK,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,GAAI,KAAK,KAAA,CAAM,CAAC,EAAE,WAAA,EAAa,CAAA,CACtE,IAAA,CAAK,EAAE,CAAA;AAEV,EAAA,MAAM,IAAA,GAAgC;AAAA,IACpC,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU,UAAA;AAAA,IACV,SAAS;AAAC;AAAA,GACZ;AAGA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAE3B,IAAA,IAAI,IAAA,CAAK,WAAA,EAAY,CAAE,UAAA,CAAW,KAAK,CAAA,EAAG;AACxC,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK;AAAA,IAClC,CAAA,MAAA,IAAW,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAC/B,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK;AACtC,MAAA,MAAM,MAAA,GAAS,oBAAoB,UAAU,CAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAC,IAAA,CAAK,OAAA,CAA6B,IAAA,CAAK,MAAM,CAAA;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,kBAAkB,IAAA,EAAsB;AAC/C,EAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,EAAY;AAE/B,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,yCAAyC,CAAA;AACnE,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AACnC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAEpB,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,QAAA;AAAU,QAAA,OAAO,KAAA,GAAQ,GAAA;AAAA,MAC9B,KAAK,QAAA;AAAU,QAAA,OAAO,QAAQ,EAAA,GAAK,GAAA;AAAA,MACnC,KAAK,MAAA;AAAQ,QAAA,OAAO,KAAA,GAAQ,KAAK,EAAA,GAAK,GAAA;AAAA,MACtC,KAAK,KAAA;AAAO,QAAA,OAAO,KAAA,GAAQ,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAAA,MAC1C,KAAK,MAAA;AAAQ,QAAA,OAAO,KAAA,GAAQ,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAAA;AACjD,EACF;AAGA,EAAA,OAAO,KAAK,EAAA,GAAK,GAAA;AACnB;AAMA,SAAS,oBAAoB,IAAA,EAAgC;AAC3D,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,kBAAkB,IAAI,CAAA;AAGrC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;ACh0BO,SAAS,kBAAA,CAAmB,QAAA,GAA6B,EAAC,EAAiB;AAChF,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,QAAA,EAAU,KAAK,GAAA;AAAI,GACrB;AACF;AAKO,SAAS,WAAA,CAAY,OAAqB,SAAA,EAA+C;AAC9F,EAAA,OAAO,MAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,SAAS,CAAA;AAC7D;AAKO,SAAS,iBAAA,CAAkB,OAAqB,UAAA,EAAgD;AACrG,EAAA,OAAO,MAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,UAAU,CAAA;AAC/D;AAKO,SAAS,kBAAA,CACd,OACA,WAAA,EACkB;AAClB,EAAA,OAAO,MAAM,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,WAAW,CAAA;AACnE;AAKO,SAAS,aAAA,CAAc,OAAqB,OAAA,EAAuC;AACxF,EAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,OAAA,CAAQ,SAAS,CAAA;AAE/E,EAAA,MAAM,WAAA,GAAc,CAAC,GAAG,KAAA,CAAM,QAAQ,CAAA;AACtC,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,WAAA,CAAY,KAAK,IAAI,EAAE,GAAG,SAAS,YAAA,EAAc,IAAA,CAAK,KAAI,EAAE;AAAA,EAC9D,CAAA,MAAO;AACL,IAAA,WAAA,CAAY,IAAA,CAAK,EAAE,GAAG,OAAA,EAAS,cAAc,IAAA,CAAK,GAAA,IAAO,CAAA;AAAA,EAC3D;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,QAAA,EAAU,WAAA;AAAA,IACV,QAAA,EAAU,KAAK,GAAA;AAAI,GACrB;AACF;AAKO,SAAS,aAAA,CAAc,OAAqB,SAAA,EAAiC;AAClF,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,QAAA,EAAU,MAAM,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,SAAS,CAAA;AAAA,IAChE,QAAA,EAAU,KAAK,GAAA;AAAI,GACrB;AACF;AAKO,SAAS,aAAA,CACd,aACA,WAAA,EAKA;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,WAAA,CAAY,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAC,CAAA;AAC1D,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,WAAA,CAAY,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAC,CAAA;AAE1D,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,SAAS,CAAC,CAAA;AAChE,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,SAAS,CAAC,CAAA;AAElE,EAAA,MAAM,WAA6B,EAAC;AACpC,EAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,IAAA,MAAM,UAAA,GAAa,YAAY,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,WAAW,SAAS,CAAA;AAC/E,IAAA,IAAI,UAAA,IAAc,UAAA,CAAW,UAAA,KAAe,UAAA,CAAW,UAAA,EAAY;AACjE,MAAA,QAAA,CAAS,KAAK,UAAU,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,QAAA,EAAS;AACpC;AAKO,SAAS,iBAAA,CACd,aACA,IAAA,EACQ;AACR,EAAA,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAC/B;AAKO,SAAS,eAAe,SAAA,EAGtB;AACP,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,oCAAoC,CAAA;AAClE,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,MAAM,CAAC,CAAA;AAAA,IACpB,IAAA,EAAM,MAAM,CAAC;AAAA,GACf;AACF;AAKO,SAAS,aAAA,CACd,aACA,KAAA,EACQ;AACR,EAAA,QAAQ,WAAA;AAAa,IACnB,KAAK,QAAA;AACH,MAAA,OAAO,gBAAgB,KAAK,CAAA,CAAA,CAAA;AAAA,IAC9B,KAAK,MAAA;AACH,MAAA,OAAO,YAAY,KAAK,CAAA,CAAA,CAAA;AAAA,IAC1B,KAAK,UAAA;AACH,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA,CAAA;AAAA,IACxB,KAAK,MAAA;AACH,MAAA,OAAO,SAAS,KAAK,CAAA,CAAA,CAAA;AAAA;AAE3B;AAKO,SAAS,kBAAA,CACd,SACA,QAAA,EACgB;AAChB,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA;AACjD,EAAA,IAAI,UAAU,EAAA,EAAI;AAChB,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,KAAA,GAAQ,OAAA,CAAQ,UAAA,CAAW,MAAA;AAGvC,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA;AACzC,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,WAAA,CAAY,IAAI,CAAA;AAC/C,EAAA,MAAM,cAAc,KAAA,GAAQ,WAAA;AAG5B,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AACvC,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA;AACtC,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,WAAA,CAAY,IAAI,CAAA;AACjD,EAAA,MAAM,YAAY,GAAA,GAAM,cAAA;AAExB,EAAA,MAAM,KAAA,GAAqB;AAAA,IACzB,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,OAAA;AAAA,MACN,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ;AAAA;AACV,GACF;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH;AAAA,GACF;AACF;AAKO,SAAS,eAAA,CACd,aAAA,EACA,aAAA,EACA,UAAA,EACgB;AAChB,EAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,IAAA,OAAO,aAAA;AAAA,EACT;AAEA,EAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,IAAA,OAAO,aAAA;AAAA,EACT;AAGA,EAAA,MAAM,UAAA,GAAa,cAAc,YAAA,IAAgB,CAAA;AACjD,EAAA,MAAM,UAAA,GAAa,cAAc,YAAA,IAAgB,CAAA;AAEjD,EAAA,OAAO,UAAA,IAAc,aAAa,aAAA,GAAgB,aAAA;AACpD;AAKO,SAAS,kBAAkB,MAAA,EAAyC;AACzE,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AACjC,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC7B,IAAA,IAAA,GAAA,CAAS,IAAA,IAAQ,KAAK,IAAA,GAAQ,IAAA;AAC9B,IAAA,IAAA,GAAO,IAAA,GAAO,IAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AACzB;AAKO,SAAS,gBAAA,CAAiB,OAAqB,MAAA,EAA0C;AAC9F,EAAA,MAAM,WAAA,GAAc,kBAAkB,MAAM,CAAA;AAC5C,EAAA,OAAO,MAAM,UAAA,KAAe,WAAA;AAC9B;AAKO,SAAS,gBAAA,CAAiB,OAAqB,MAAA,EAA+C;AACnG,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,UAAA,EAAY,kBAAkB,MAAM,CAAA;AAAA,IACpC,QAAA,EAAU,KAAK,GAAA;AAAI,GACrB;AACF;;;ACnOA,SAAS,cAAA,CAAe,MAAc,MAAA,EAAwB;AAC1D,EAAA,MAAM,gBAAgB,IAAI,MAAA,CAAO,CAAA,MAAA,EAAS,MAAM,SAAS,IAAI,CAAA;AAC7D,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,aAAa,CAAA;AACtC,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAEnB,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,GAAS,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA;AAG3C,EAAA,MAAM,kBAAkB,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA,CAAE,MAAM,WAAW,CAAA;AAChE,EAAA,MAAM,QAAA,GAAW,eAAA,GACX,UAAA,GAAa,eAAA,CAAgB,QAC7B,IAAA,CAAK,MAAA;AAEX,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,UAAA,EAAY,QAAQ,EAAE,IAAA,EAAK;AACjD;AAKA,SAAS,UAAA,CAAW,aAAqB,IAAA,EAA8C;AACnF,EAAA,IAAI,CAAC,aAAa,OAAO,CAAA;AAEzB,EAAA,QAAQ,IAAA;AAAM,IACV,KAAK,QAAA;AAED,MAAA,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,wBAAwB,CAAA,IAAK,EAAC,EAAG,MAAA;AAAA,IAC/D,KAAK,MAAA;AAED,MAAA,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,sCAAsC,CAAA,IAAK,EAAC,EAAG,MAAA;AAAA,IAC7E,KAAK,UAAA;AAED,MAAA,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,8BAA8B,CAAA,IAAK,EAAC,EAAG,MAAA;AAAA;AAE7E;AAyBO,SAAS,kBAAkB,MAAA,EAAoC;AAClE,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,YAAsB,EAAC;AAE7B,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AACxB,IAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,KAAA,CAAM,IAAA,EAAM,UAAU,CAAA;AAC3D,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AACtD,IAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,KAAA,CAAM,IAAA,EAAM,WAAW,CAAA;AAE9D,IAAA,IAAI,aAAA,EAAe,QAAA,CAAS,IAAA,CAAK,aAAa,CAAA;AAC9C,IAAA,IAAI,WAAA,EAAa,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA;AACvC,IAAA,IAAI,eAAA,EAAiB,SAAA,CAAU,IAAA,CAAK,eAAe,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACrB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA;;AAAA,EAAiB,QAAA,CAAS,IAAA,CAAK,aAAa,CAAC,CAAA,CAAE,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAClB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA;;AAAA,EAAc,KAAA,CAAM,IAAA,CAAK,aAAa,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA;;AAAA,EAAkB,SAAA,CAAU,IAAA,CAAK,aAAa,CAAC,CAAA,CAAE,CAAA;AAAA,EACnE;AAEA,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AAGvC,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AACxC,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAClC,EAAA,MAAM,YAAA,GAAe,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA;AAE1C,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,UAAA,CAAW,WAAA,EAAa,QAAQ,CAAA;AAAA,IAC7C,SAAA,EAAW,UAAA,CAAW,QAAA,EAAU,MAAM,CAAA;AAAA,IACtC,aAAA,EAAe,UAAA,CAAW,YAAA,EAAc,UAAU;AAAA,GACtD;AACJ;AAMO,SAAS,oBAAoB,KAAA,EAA8B;AAC9D,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,IAAI,CAAC,MAAM,IAAA,IAAQ,KAAA,CAAM,KAAK,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC/C,IAAA,MAAA,CAAO,KAAK,qBAAqB,CAAA;AACjC,IAAA,OAAO,MAAA;AAAA,EACX;AAGA,EAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACrD,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC/C,EAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAEvD,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,QAAA,IAAY,CAAC,YAAA,EAAc;AAC5C,IAAA,MAAA,CAAO,KAAK,2EAA2E,CAAA;AAAA,EAC3F;AAEA,EAAA,OAAO,MAAA;AACX;AAKO,SAAS,mBAAmB,MAAA,EAA6B;AAC5D,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,MAAA,CAAO,cAAc,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAG,MAAA,CAAO,WAAW,CAAA,SAAA,CAAW,CAAA;AACvE,EAAA,IAAI,MAAA,CAAO,YAAY,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAG,MAAA,CAAO,SAAS,CAAA,MAAA,CAAQ,CAAA;AAChE,EAAA,IAAI,MAAA,CAAO,gBAAgB,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAG,MAAA,CAAO,aAAa,CAAA,UAAA,CAAY,CAAA;AAC5E,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,IAAK,OAAA;AAC/B;;;ACvFO,IAAMC,SAAAA,GAAW;AAAA,EACpB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA;AACJ,CAAA;;;ACJO,IAAM,mBAAA,GAAwD;AAAA,EACjE,MAAA,EAAQ;AAAA,IACJ,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,CAAC,MAAA,EAAQ,WAAW,CAAA;AAAA,IACpC,QAAQ,MAAM,MAAA;AAAA,IACd,OAAO,MAAM;AAAA,GACjB;AAAA,EACA,MAAA,EAAQ;AAAA,IACJ,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,CAAC,QAAA,EAAU,UAAU,CAAA;AAAA,IACrC,QAAQ,MAAM,QAAA;AAAA,IACd,OAAO,MAAM;AAAA,GACjB;AAAA,EACA,OAAA,EAAS;AAAA,IACL,UAAA,EAAY,SAAA;AAAA,IACZ,cAAA,EAAgB,CAAC,QAAA,EAAU,SAAS,CAAA;AAAA,IACpC,QAAQ,MAAM,QAAA;AAAA,IACd,OAAO,MAAM;AAAA,GACjB;AAAA,EACA,IAAA,EAAM;AAAA,IACF,UAAA,EAAY,MAAA;AAAA,IACZ,cAAA,EAAgB,CAAC,MAAM,CAAA;AAAA,IACvB,QAAQ,MAAM,MAAA;AAAA,IACd,OAAO,MAAM;AAAA,GACjB;AAAA,EACA,SAAA,EAAW;AAAA,IACP,UAAA,EAAY,WAAA;AAAA,IACZ,cAAA,EAAgB,CAAC,WAAW,CAAA;AAAA,IAC5B,QAAQ,MAAM,WAAA;AAAA,IACd,OAAO,MAAM;AAAA,GACjB;AAAA,EACA,QAAA,EAAU;AAAA,IACN,UAAA,EAAY,UAAA;AAAA,IACZ,cAAA,EAAgB,CAAC,UAAU,CAAA;AAAA,IAC3B,QAAQ,MAAM,UAAA;AAAA,IACd,OAAO,MAAM;AAAA,GACjB;AAAA,EACA,KAAA,EAAO;AAAA,IACH,UAAA,EAAY,OAAA;AAAA,IACZ,cAAA,EAAgB,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,IAChC,QAAQ,MAAM,MAAA;AAAA,IACd,OAAO,MAAM;AAAA,GACjB;AAAA,EACA,MAAA,EAAQ;AAAA,IACJ,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,CAAC,QAAQ,CAAA;AAAA,IACzB,QAAQ,MAAM,QAAA;AAAA,IACd,OAAO,MAAM;AAAA,GACjB;AAAA,EACA,IAAA,EAAM;AAAA,IACF,UAAA,EAAY,MAAA;AAAA,IACZ,cAAA,EAAgB,CAAC,MAAM,CAAA;AAAA,IACvB,MAAA,EAAQ,CAAC,KAAA,KAAU;AACf,MAAA,IAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA,EAAG;AACzC,QAAA,OAAO,CAAA,MAAA,EAAS,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MAC3C;AACA,MAAA,OAAO,MAAA;AAAA,IACX,CAAA;AAAA,IACA,OAAO,MAAM;AAAA,GACjB;AAAA,EACA,QAAA,EAAU;AAAA,IACN,UAAA,EAAY,UAAA;AAAA,IACZ,cAAA,EAAgB,CAAC,UAAA,EAAY,YAAA,EAAc,UAAU,CAAA;AAAA,IACrD,MAAA,EAAQ,CAAC,KAAA,KAAU;AACf,MAAA,IAAI,KAAA,CAAM,UAAU,MAAA,EAAQ;AACxB,QAAA,OAAO,CAAA,WAAA,EAAc,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,MAC9C;AACA,MAAA,OAAO,UAAA;AAAA,IACX,CAAA;AAAA,IACA,OAAO,MAAM;AAAA;AAErB;AASO,IAAM,eAAA,GAAiD;AAAA,EAC1D,GAAA,EAAK;AAAA,IACD,QAAA,EAAU,KAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,2BAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,IAAA,EAAM;AAAA,IACF,QAAA,EAAU,MAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,cAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,WAAA,EAAa;AAAA,IACT,QAAA,EAAU,WAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,4BAAA;AAAA,MACA,yCAAA;AAAA,MACA,yCAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,QAAA,EAAU;AAAA,IACN,QAAA,EAAU,UAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,oBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,OAAA,EAAS;AAAA,IACL,QAAA,EAAU,SAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,yBAAA;AAAA,MACA,yBAAA;AAAA,MACA,yBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,cAAA,EAAgB;AAAA,IACZ,QAAA,EAAU,cAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,yBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,KAAA,EAAO;AAAA,IACH,QAAA,EAAU,OAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,gBAAA;AAAA,MACA,8BAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,OAAA,EAAS;AAAA,IACL,QAAA,EAAU,SAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,SAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,MAAA,EAAQ;AAAA,IACJ,QAAA,EAAU,QAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,oCAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,EAAA,EAAI;AAAA,IACA,QAAA,EAAU,IAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA;AAErB;AASO,IAAM,cAAA,GAA+C;AAAA;AAAA,EAExD,GAAA,EAAK;AAAA,IACD,QAAA,EAAU,GAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,oBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,IAAA,EAAM;AAAA,IACF,QAAA,EAAU,IAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,wBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,GAAA,EAAK;AAAA,IACD,QAAA,EAAU,GAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,mBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,GAAA,EAAK;AAAA,IACD,QAAA,EAAU,GAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,mBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,IAAA,EAAM;AAAA,IACF,QAAA,EAAU,IAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,oBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,IAAA,EAAM;AAAA,IACF,QAAA,EAAU,IAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,oBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA;AAAA,EAEA,GAAA,EAAK;AAAA,IACD,QAAA,EAAU,KAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,EAAA,EAAI;AAAA,IACA,QAAA,EAAU,IAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,GAAA,EAAK;AAAA,IACD,QAAA,EAAU,KAAA;AAAA,IACV,cAAA,EAAgB;AAAA,MACZ,iBAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA;AAErB;AASO,SAAS,uBAAA,GAAoC;AAChD,EAAA,OAAO,MAAA,CAAO,KAAK,mBAAmB,CAAA;AAC1C;AAKO,SAAS,oBAAA,GAAiC;AAC7C,EAAA,OAAO,MAAA,CAAO,KAAK,eAAe,CAAA;AACtC;AAKO,SAAS,mBAAA,GAAgC;AAC5C,EAAA,OAAO,MAAA,CAAO,KAAK,cAAc,CAAA;AACrC;AAKO,SAAS,sBAAsB,IAAA,EAAuB;AACzD,EAAA,OAAO,IAAA,IAAQ,mBAAA;AACnB;AAKO,SAAS,mBAAmB,QAAA,EAA2B;AAC1D,EAAA,OAAO,QAAA,IAAY,eAAA;AACvB;AAKO,SAAS,kBAAkB,QAAA,EAA2B;AACzD,EAAA,OAAO,QAAA,IAAY,cAAA;AACvB;AAKO,SAAS,oBAAoB,IAAA,EAA4C;AAC5E,EAAA,OAAO,oBAAoB,IAAI,CAAA;AACnC;AAKO,SAAS,iBAAiB,QAAA,EAA6C;AAC1E,EAAA,OAAO,gBAAgB,QAAQ,CAAA;AACnC;AAKO,SAAS,gBAAgB,QAAA,EAA4C;AACxE,EAAA,OAAO,eAAe,QAAQ,CAAA;AAClC;AAKO,SAAS,0BAA0B,OAAA,EAAqC;AAC3E,EAAA,MAAM,iBAAA,GAAoB,OAAA,CAAQ,WAAA,EAAY,CAAE,IAAA,EAAK;AACrD,EAAA,KAAA,MAAW,OAAA,IAAW,MAAA,CAAO,MAAA,CAAO,mBAAmB,CAAA,EAAG;AACtD,IAAA,IAAI,OAAA,CAAQ,eAAe,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,WAAA,EAAY,KAAM,iBAAiB,CAAA,EAAG;AACzE,MAAA,OAAO,OAAA,CAAQ,UAAA;AAAA,IACnB;AAAA,EACJ;AACA,EAAA,OAAO,MAAA;AACX;AAKO,SAAS,0BAA0B,IAAA,EAAkC;AACxE,EAAA,MAAM,OAAA,GAAU,oBAAoB,IAAI,CAAA;AACxC,EAAA,OAAO,OAAA,EAAS,eAAe,CAAC,CAAA;AACpC;AASO,SAAS,gBAAA,GAKd;AACE,EAAA,OAAO;AAAA,IACH,UAAA,EAAY,MAAA,CAAO,IAAA,CAAK,mBAAmB,CAAA,CAAE,MAAA;AAAA,IAC7C,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,CAAE,MAAA;AAAA,IACtC,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA,CAAE,MAAA;AAAA,IACpC,SAASA,SAAAA,CAAS;AAAA,GACtB;AACJ","file":"index.js","sourcesContent":["/**\n * Field Types for Orbital Units\n *\n * Extracted from schema/data-entities.ts for the orbitals module.\n * These types define the field structure within orbital entities.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Field Types\n// ============================================================================\n\n/**\n * Supported field types for entity fields.\n *\n * @example\n * { name: 'status', type: 'enum', values: ['draft', 'published'] }\n * { name: 'authorId', type: 'relation', relation: { entity: 'User', cardinality: 'one' } }\n */\nexport type FieldType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'date'\n | 'timestamp'\n | 'datetime'\n | 'array'\n | 'object'\n | 'enum'\n | 'relation';\n\nexport const FieldTypeSchema = z.enum([\n 'string',\n 'number',\n 'boolean',\n 'date',\n 'timestamp',\n 'datetime',\n 'array',\n 'object',\n 'enum',\n 'relation',\n]);\n\n// ============================================================================\n// Relation Configuration\n// ============================================================================\n\n/**\n * Cardinality for relation fields.\n * Matches Rust compiler's Cardinality enum.\n */\nexport type RelationCardinality = \n | 'one' \n | 'many' \n | 'one-to-many' \n | 'many-to-one' \n | 'many-to-many';\n\nexport const RelationCardinalitySchema = z.enum([\n 'one',\n 'many',\n 'one-to-many',\n 'many-to-one',\n 'many-to-many',\n]);\n\n/**\n * Configuration for relation fields (foreign keys).\n * Matches Rust compiler's RelationDefinition format.\n */\nexport interface RelationConfig {\n /** Target entity name (e.g., 'User', 'Task') - matches Rust's `entity` field */\n entity: string;\n /** Field on target entity (defaults to 'id') */\n field?: string;\n /** \n * Cardinality: one, many, one-to-many, many-to-one, many-to-many\n * Matches Rust compiler's cardinality format\n */\n cardinality?: RelationCardinality;\n /** Delete behavior */\n onDelete?: 'cascade' | 'nullify' | 'restrict';\n /** \n * Foreign key field name (for legacy compatibility).\n * @deprecated Use field instead\n */\n foreignKey?: string;\n /**\n * Target entity name (for legacy compatibility).\n * @deprecated Use entity instead\n */\n target?: string;\n /**\n * Cardinality type alias (for legacy compatibility).\n * @deprecated Use cardinality instead\n */\n type?: RelationCardinality;\n}\n\nexport const RelationConfigSchema = z.object({\n entity: z.string().min(1, 'Target entity is required'),\n field: z.string().optional(),\n cardinality: RelationCardinalitySchema.optional(),\n onDelete: z.enum(['cascade', 'nullify', 'restrict']).optional(),\n // Legacy compatibility fields\n foreignKey: z.string().optional(),\n target: z.string().optional(),\n type: RelationCardinalitySchema.optional(),\n}).transform((data) => {\n // Normalize legacy format to standard format\n const normalized: RelationConfig = {\n entity: data.entity || data.target || '',\n cardinality: data.cardinality || data.type,\n field: data.field,\n onDelete: data.onDelete,\n };\n return normalized;\n});\n\nexport type RelationConfigInput = z.input<typeof RelationConfigSchema>;\n\n// ============================================================================\n// Field Format\n// ============================================================================\n\n/**\n * Field format validators for string fields.\n */\nexport type FieldFormat = 'email' | 'url' | 'phone' | 'date' | 'datetime' | 'uuid';\n\nexport const FieldFormatSchema = z.enum([\n 'email',\n 'url',\n 'phone',\n 'date',\n 'datetime',\n 'uuid',\n]);\n\n// ============================================================================\n// Entity Field\n// ============================================================================\n\n/**\n * Entity field definition.\n */\nexport interface EntityField {\n /** Field name (camelCase) */\n name: string;\n /** Data type */\n type: FieldType;\n /** Whether the field is required */\n required?: boolean;\n /** Default value */\n default?: unknown;\n /** Allowed values for enum types */\n values?: string[];\n /** @deprecated Use 'values' instead */\n enum?: string[];\n /** Validation format */\n format?: FieldFormat;\n /** Minimum value (for number) or length (for string) */\n min?: number;\n /** Maximum value or length */\n max?: number;\n /** Array item schema (for array type) */\n items?: EntityField;\n /** Relation configuration (required when type is 'relation') */\n relation?: RelationConfig;\n}\n\nexport const EntityFieldSchema: z.ZodType<EntityField> = z.lazy(() =>\n z.object({\n name: z.string().min(1, 'Field name is required'),\n type: FieldTypeSchema,\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n values: z.array(z.string()).optional(),\n enum: z.array(z.string()).optional(),\n format: FieldFormatSchema.optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n items: EntityFieldSchema.optional(),\n relation: RelationConfigSchema.optional(),\n }).refine(\n (field) => field.type !== 'relation' || field.relation !== undefined,\n { message: 'Relation config is required when type is \"relation\"', path: ['relation'] }\n )\n);\n\nexport type EntityFieldInput = z.input<typeof EntityFieldSchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for EntityField - preferred name */\nexport type Field = EntityField;\n\n/** Alias for EntityFieldSchema - preferred name */\nexport const FieldSchema = EntityFieldSchema;\n","/**\n * Asset Types for Semantic Asset References\n *\n * Defines types for abstracting asset paths into semantic references.\n * Assets are resolved from SemanticAssetRef to actual paths at compile time.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Entity Roles\n// ============================================================================\n\n/**\n * Entity roles in game contexts\n */\nexport const ENTITY_ROLES = [\n 'player',\n 'enemy',\n 'npc',\n 'item',\n 'tile',\n 'projectile',\n 'effect',\n 'ui',\n 'decoration',\n 'vehicle',\n] as const;\n\nexport type EntityRole = (typeof ENTITY_ROLES)[number];\n\nexport const EntityRoleSchema = z.enum(ENTITY_ROLES);\n\n// ============================================================================\n// Visual Styles\n// ============================================================================\n\n/**\n * Visual art styles for games\n */\nexport const VISUAL_STYLES = ['pixel', 'vector', 'hd', '1-bit', 'isometric'] as const;\n\nexport type VisualStyle = (typeof VISUAL_STYLES)[number];\n\nexport const VisualStyleSchema = z.enum(VISUAL_STYLES);\n\n// ============================================================================\n// Game Types\n// ============================================================================\n\n/**\n * Game type classifications\n */\nexport const GAME_TYPES = [\n 'platformer',\n 'roguelike',\n 'top-down',\n 'puzzle',\n 'racing',\n 'card',\n 'board',\n 'shooter',\n 'rpg',\n] as const;\n\nexport type GameType = (typeof GAME_TYPES)[number];\n\nexport const GameTypeSchema = z.enum(GAME_TYPES);\n\n// ============================================================================\n// Animation Definition\n// ============================================================================\n\n/**\n * Animation definition for sprites\n */\nexport interface AnimationDef {\n /** Frame indices or file names */\n frames: number[] | string[];\n /** Frames per second */\n fps: number;\n /** Whether animation loops */\n loop: boolean;\n}\n\nexport const AnimationDefSchema = z.object({\n frames: z.union([z.array(z.number()), z.array(z.string())]),\n fps: z.number().positive(),\n loop: z.boolean(),\n});\n\n// ============================================================================\n// Semantic Asset Reference\n// ============================================================================\n\n/**\n * Semantic reference to an asset (not a hardcoded path).\n * Resolved to actual paths at compile time via asset maps.\n */\nexport interface SemanticAssetRef {\n /** Entity role (player, enemy, item, etc.) */\n role: EntityRole;\n /** Sub-category within role (hero, slime, coin, etc.) */\n category: string;\n /** Required animations for this entity */\n animations?: string[];\n /** Visual style preference */\n style?: VisualStyle;\n /** Variant identifier (for multiple versions) */\n variant?: string;\n}\n\nexport const SemanticAssetRefSchema = z.object({\n role: EntityRoleSchema,\n category: z.string().min(1),\n animations: z.array(z.string()).optional(),\n style: VisualStyleSchema.optional(),\n variant: z.string().optional(),\n});\n\n// ============================================================================\n// Resolved Asset\n// ============================================================================\n\n/**\n * Result of resolving a SemanticAssetRef to actual asset paths\n */\nexport interface ResolvedAsset {\n /** Base path to the asset pack */\n basePath: string;\n /** Relative path within the pack */\n path: string;\n /** Tile indices for tilesheet-based assets */\n tiles?: number[];\n /** Size of each tile in pixels */\n tileSize?: number;\n /** List of individual files (for non-tilesheet assets) */\n files?: string[];\n /** Animation definitions by name */\n animations?: Record<string, AnimationDef>;\n}\n\nexport const ResolvedAssetSchema = z.object({\n basePath: z.string(),\n path: z.string(),\n tiles: z.array(z.number()).optional(),\n tileSize: z.number().positive().optional(),\n files: z.array(z.string()).optional(),\n animations: z.record(AnimationDefSchema).optional(),\n});\n\n// ============================================================================\n// Asset Mapping\n// ============================================================================\n\n/**\n * Single asset mapping entry in an asset map\n */\nexport interface AssetMapping {\n /** Relative path to the asset */\n path: string;\n /** Tile indices for tilesheets */\n tiles?: number[];\n /** Tile size in pixels */\n tileSize?: number;\n /** Individual file patterns */\n files?: string[];\n /** Animation definitions */\n animations?: Record<string, AnimationDef>;\n}\n\nexport const AssetMappingSchema = z.object({\n path: z.string(),\n tiles: z.array(z.number()).optional(),\n tileSize: z.number().positive().optional(),\n files: z.array(z.string()).optional(),\n animations: z.record(AnimationDefSchema).optional(),\n});\n\n// ============================================================================\n// Asset Map\n// ============================================================================\n\n/**\n * Asset map for a specific game type and visual style.\n * Maps semantic keys (role:category) to asset paths.\n */\nexport interface AssetMap {\n /** Game type this map is for */\n gameType: GameType;\n /** Visual style this map is for */\n style: VisualStyle;\n /** Base path to the asset pack */\n basePath: string;\n /** Mappings from semantic keys to asset paths */\n mappings: Record<string, AssetMapping>;\n}\n\nexport const AssetMapSchema = z.object({\n gameType: GameTypeSchema,\n style: VisualStyleSchema,\n basePath: z.string(),\n mappings: z.record(AssetMappingSchema),\n});\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SemanticAssetRefInput = z.input<typeof SemanticAssetRefSchema>;\nexport type ResolvedAssetInput = z.input<typeof ResolvedAssetSchema>;\nexport type AssetMappingInput = z.input<typeof AssetMappingSchema>;\nexport type AssetMapInput = z.input<typeof AssetMapSchema>;\nexport type AnimationDefInput = z.input<typeof AnimationDefSchema>;\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create a semantic asset key from role and category\n */\nexport function createAssetKey(role: EntityRole, category: string): string {\n return `${role}:${category}`;\n}\n\n/**\n * Parse an asset key into role and category\n */\nexport function parseAssetKey(key: string): { role: string; category: string } | null {\n const parts = key.split(':');\n if (parts.length !== 2) return null;\n return { role: parts[0], category: parts[1] };\n}\n\n/**\n * Get common animations for an entity role\n */\nexport function getDefaultAnimationsForRole(role: EntityRole): string[] {\n switch (role) {\n case 'player':\n return ['idle', 'run', 'jump', 'fall', 'attack', 'hurt', 'die'];\n case 'enemy':\n return ['idle', 'walk', 'attack', 'hurt', 'die'];\n case 'npc':\n return ['idle', 'walk', 'talk'];\n case 'item':\n return ['idle', 'collected'];\n case 'tile':\n return ['static'];\n case 'projectile':\n return ['fly', 'hit', 'expire'];\n case 'effect':\n return ['play'];\n case 'ui':\n return ['normal', 'hover', 'pressed', 'disabled'];\n case 'decoration':\n return ['idle'];\n case 'vehicle':\n return ['idle', 'move', 'brake'];\n default:\n return ['idle'];\n }\n}\n\n/**\n * Validate that an asset ref has required animations\n */\nexport function validateAssetAnimations(\n assetRef: SemanticAssetRef,\n requiredAnimations: string[]\n): { valid: boolean; missing: string[] } {\n const provided = assetRef.animations || [];\n const missing = requiredAnimations.filter((anim) => !provided.includes(anim));\n return { valid: missing.length === 0, missing };\n}\n","/**\n * Entity Types for Orbital Units\n *\n * Defines the OrbitalEntity type - the nucleus of an Orbital Unit.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport { EntityFieldSchema, type EntityField } from './field.js';\nimport { SemanticAssetRefSchema, type SemanticAssetRef } from './asset.js';\n\n// ============================================================================\n// Entity Persistence\n// ============================================================================\n\n/**\n * Entity persistence types.\n *\n * - persistent: Stored in database (has collection)\n * - runtime: Exists only at runtime (not persisted)\n * - singleton: Single global instance\n * - instance: Static data (read-only instances)\n */\nexport type EntityPersistence = 'persistent' | 'runtime' | 'singleton' | 'instance';\n\nexport const EntityPersistenceSchema = z.enum([\n 'persistent',\n 'runtime',\n 'singleton',\n 'instance',\n]);\n\n// ============================================================================\n// Orbital Entity\n// ============================================================================\n\n/**\n * OrbitalEntity - the nucleus of an Orbital Unit.\n *\n * This is a simplified entity definition optimized for orbital composition.\n * Collection names are derived automatically from persistence type if not provided.\n */\nexport interface OrbitalEntity {\n /** Entity name (PascalCase, e.g., \"Task\", \"User\") */\n name: string;\n\n /** Entity persistence type (defaults to 'persistent' if not specified) */\n persistence?: EntityPersistence;\n\n /** Collection name (auto-derived if not provided for persistent entities) */\n collection?: string;\n\n /** Entity fields */\n fields: EntityField[];\n\n /** Pre-authored instances (seed data or static reference data) */\n instances?: Record<string, unknown>[];\n\n /** Auto-add createdAt/updatedAt timestamps */\n timestamps?: boolean;\n\n /** Soft delete support */\n softDelete?: boolean;\n\n /** Human-readable description */\n description?: string;\n\n /** Visual prompt for AI generation */\n visual_prompt?: string;\n\n /** Semantic asset reference for visual representation (games) */\n assetRef?: SemanticAssetRef;\n}\n\nexport const OrbitalEntitySchema = z.object({\n name: z.string().min(1, 'Entity name is required'),\n persistence: EntityPersistenceSchema.default('persistent'),\n collection: z.string().optional(),\n fields: z.array(EntityFieldSchema).min(1, 'At least one field is required'),\n instances: z.array(z.record(z.unknown())).optional(),\n timestamps: z.boolean().optional(),\n softDelete: z.boolean().optional(),\n description: z.string().optional(),\n visual_prompt: z.string().optional(),\n assetRef: SemanticAssetRefSchema.optional(),\n});\n\nexport type OrbitalEntityInput = z.input<typeof OrbitalEntitySchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for OrbitalEntity - preferred name */\nexport type Entity = OrbitalEntity;\n\n/** Alias for OrbitalEntitySchema - preferred name */\nexport const EntitySchema = OrbitalEntitySchema;\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Derive collection name from entity.\n * Only persistent entities have collections.\n */\nexport function deriveCollection(entity: OrbitalEntity): string | undefined {\n if (entity.persistence !== 'persistent') {\n return undefined;\n }\n // Lowercase + 's' suffix (simple pluralization)\n return entity.name.toLowerCase() + 's';\n}\n\n/**\n * Check if entity is runtime-only (not persisted).\n */\nexport function isRuntimeEntity(entity: OrbitalEntity): boolean {\n return entity.persistence === 'runtime';\n}\n\n/**\n * Check if entity is a singleton.\n */\nexport function isSingletonEntity(entity: OrbitalEntity): boolean {\n return entity.persistence === 'singleton';\n}\n","/**\n * Page Types for Orbital Units\n *\n * Defines OrbitalPage type for pages within an Orbital Unit.\n *\n * IMPORTANT: Trait-driven UI architecture requires pages to have traits.\n * Static sections are NO LONGER SUPPORTED.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// View Type\n// ============================================================================\n\n/**\n * Page view types.\n * Note: viewType may be deprecated in favor of trait-driven UI.\n */\nexport type ViewType = 'list' | 'detail' | 'create' | 'edit' | 'dashboard' | 'custom';\n\nexport const ViewTypeSchema = z.enum([\n 'list',\n 'detail',\n 'create',\n 'edit',\n 'dashboard',\n 'custom',\n]);\n\n// ============================================================================\n// Trait Reference\n// ============================================================================\n\n/**\n * Trait reference on a page.\n */\nexport interface PageTraitRef {\n /** Trait name from library */\n ref: string;\n /** Entity this trait operates on */\n linkedEntity?: string;\n /** Additional trait configuration */\n config?: Record<string, unknown>;\n}\n\nexport const PageTraitRefSchema = z.object({\n ref: z.string().min(1, 'Trait ref is required'),\n linkedEntity: z.string().optional(),\n config: z.record(z.unknown()).optional(),\n});\n\n// ============================================================================\n// Orbital Page\n// ============================================================================\n\n/**\n * OrbitalPage - a page definition within an Orbital Unit.\n *\n * TRAIT-DRIVEN: Pages must have traits array. Sections are NOT supported.\n */\nexport interface OrbitalPage {\n /** Page name (PascalCase, e.g., \"TasksPage\") */\n name: string;\n\n /** URL path (e.g., \"/tasks\", \"/tasks/:id\") */\n path: string;\n\n /** View type (optional in trait-driven mode) */\n viewType?: ViewType;\n\n /** Page title (optional, defaults to derived from name) */\n title?: string;\n\n /** Primary entity for this page */\n primaryEntity?: string;\n\n /**\n * Traits that drive UI for this page.\n * REQUIRED in trait-driven architecture.\n */\n traits?: PageTraitRef[];\n\n /** Is this the initial page for navigation? */\n isInitial?: boolean;\n}\n\n/**\n * Strict Zod schema for trait-driven pages.\n * Rejects unknown properties like 'sections'.\n */\nexport const OrbitalPageStrictSchema = z.object({\n name: z.string().min(1, 'Page name is required'),\n path: z.string().min(1, 'Page path is required').startsWith('/', 'Path must start with /'),\n primaryEntity: z.string().min(1, 'Primary entity is required'),\n traits: z.array(PageTraitRefSchema).min(1, 'Page must have at least one trait'),\n title: z.string().optional(),\n}).strict(); // Reject unknown keys like 'sections'\n\n/**\n * Zod schema for OrbitalPage.\n * Trait-driven: pages have traits instead of static sections/patterns.\n * Uses .strict() to reject unknown keys like 'sections'.\n */\nexport const OrbitalPageSchema = z.object({\n name: z.string().min(1, 'Page name is required'),\n path: z.string().min(1, 'Page path is required').startsWith('/', 'Path must start with /'),\n viewType: ViewTypeSchema.optional(),\n title: z.string().optional(),\n primaryEntity: z.string().optional(),\n traits: z.array(PageTraitRefSchema).optional(),\n isInitial: z.boolean().optional(),\n}).strict(); // Reject unknown keys like 'sections' - use traits with render_ui effects\n\nexport type OrbitalPageInput = z.input<typeof OrbitalPageSchema>;\nexport type OrbitalPageStrictInput = z.input<typeof OrbitalPageStrictSchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for OrbitalPage - preferred name */\nexport type Page = OrbitalPage;\n\n/** Alias for OrbitalPageSchema - preferred name */\nexport const PageSchema = OrbitalPageSchema;\n","/**\n * Effect Types (Self-Contained)\n *\n * Defines effect types for trait transitions and ticks.\n * Effects are S-expressions (arrays) that describe actions to perform.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport { type SExpr, type Expression } from './expression.js';\n\n// ============================================================================\n// UI Slots\n// ============================================================================\n\n/**\n * Known UI slots where content can be rendered\n */\nexport const UI_SLOTS = [\n // App slots\n 'main',\n 'sidebar',\n 'modal',\n 'drawer',\n 'overlay',\n 'center',\n 'toast',\n 'floating',\n 'system', // For invisible system components (InputListener, CollisionDetector)\n 'content',\n 'screen',\n // Game HUD slots\n 'hud',\n 'hud-top',\n 'hud-bottom',\n 'hud.health',\n 'hud.score',\n 'hud.inventory',\n 'hud.stamina',\n // Game overlay slots\n 'overlay.inventory',\n 'overlay.dialogue',\n 'overlay.menu',\n 'overlay.pause',\n] as const;\n\nexport type UISlot = (typeof UI_SLOTS)[number];\n\nexport const UISlotSchema = z.enum(UI_SLOTS);\n\n// ============================================================================\n// Pattern Config (for render-ui effects)\n// ============================================================================\n\n// Import pattern types for local use and re-export for consumers\nimport type {\n PatternType,\n PatternConfig,\n PatternProps,\n PatternPropsMap,\n AnyPatternConfig,\n} from '@almadar/patterns';\n\n/**\n * Type-safe pattern configuration for render-ui effects.\n *\n * Re-exported from @almadar/patterns. Generated from patterns-registry.json.\n *\n * @example\n * // Type-safe with specific pattern type\n * const config: PatternConfig<'entity-table'> = {\n * patternType: 'entity-table',\n * columns: ['name', 'email'], // ✅ Required prop\n * entity: 'User',\n * };\n *\n * // Error: Property 'columns' is missing (required prop)\n * const bad: PatternConfig<'entity-table'> = { patternType: 'entity-table' };\n *\n * // Error: 'fake-pattern' is not assignable to PatternType\n * const invalid: PatternConfig = { patternType: 'fake-pattern' };\n */\nexport type {\n PatternType,\n PatternConfig,\n PatternProps,\n PatternPropsMap,\n AnyPatternConfig,\n};\n\n/**\n * Configuration for render-ui effect.\n * Used in runtime to specify which slot and pattern to render.\n */\nexport interface RenderUIConfig {\n /** Target UI slot */\n slot: UISlot;\n /** Pattern configuration (null clears the slot) */\n pattern: AnyPatternConfig | null;\n /** Target element (trait name or entity ID) */\n target?: string;\n /** Additional props for the pattern */\n props?: Record<string, unknown>;\n /** Optional priority for slot ordering */\n priority?: number;\n}\n\n// ============================================================================\n// Service Config (for call-service effects)\n// ============================================================================\n\n/**\n * Configuration extracted from call-service effects\n */\nexport interface CallServiceConfig {\n service: string;\n action: string;\n endpoint?: string;\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n params?: Record<string, unknown>;\n onSuccess?: string;\n onError?: string;\n}\n\n// ============================================================================\n// Typed Effect Tuples\n// ============================================================================\n\n/**\n * Render UI effect - displays a pattern in a UI slot.\n * @example ['render-ui', 'main', { patternType: 'entity-table', columns: ['name'] }]\n */\nexport type RenderUIEffect =\n | ['render-ui', UISlot, AnyPatternConfig]\n | ['render-ui', UISlot, AnyPatternConfig, Record<string, unknown>];\n\n/**\n * Navigate effect - navigates to a path.\n * @example ['navigate', '/tasks'] or ['navigate', '/tasks/:id', { id: '123' }]\n */\nexport type NavigateEffect = ['navigate', string] | ['navigate', string, Record<string, string>];\n\n/**\n * Emit effect - emits an event, optionally with payload.\n * @example ['emit', 'SAVE'] or ['emit', 'PLAYER_DIED', { playerId: '@entity.id' }]\n * @example ['emit', 'FILTER_CHANGED', '@entity.filters']\n */\nexport type EmitEffect = ['emit', string] | ['emit', string, Record<string, unknown> | string];\n\n/**\n * Set effect - sets a binding to a value.\n * @example ['set', '@entity.health', 100]\n */\nexport type SetEffect = ['set', string, unknown];\n\n/**\n * Persist effect - creates, updates, deletes, or clears entities.\n * @example ['persist', 'create', 'Task', { title: '@payload.title' }]\n * @example ['persist', 'update', '@entity.entityType', '@payload.data']\n */\nexport type PersistEffect =\n | ['persist', 'create', string, Record<string, unknown> | string]\n | ['persist', 'update', string, Record<string, unknown> | string]\n | ['persist', 'delete', string]\n | ['persist', 'delete', string, Record<string, unknown> | string]\n | ['persist', 'clear', string]\n | ['persist', 'clear', string, Record<string, unknown> | string];\n\n/**\n * Call service effect - invokes an external service.\n * @example ['call-service', 'WeatherAPI', { service: 'weather', action: 'get', onSuccess: 'OK' }]\n */\nexport type CallServiceEffect = ['call-service', string, CallServiceConfig];\n\n/**\n * Spawn effect - creates a new entity instance (games).\n * @example ['spawn', 'Bullet', { x: '@entity.x', y: '@entity.y' }]\n */\nexport type SpawnEffect = ['spawn', string] | ['spawn', string, Record<string, unknown>];\n\n/**\n * Despawn effect - removes an entity instance (games).\n * @example ['despawn', '@entity.id']\n */\nexport type DespawnEffect = ['despawn', string];\n\n/**\n * Do effect - executes multiple effects in sequence.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['do', ['set', '@entity.x', 0], ['set', '@entity.y', 0]]\n */\nexport type DoEffect = ['do', ...SExpr[]];\n\n/**\n * Notify effect - sends a notification.\n * @example ['notify', 'in_app', 'Task created successfully']\n * @example ['notify', 'in_app', ['str/concat', 'Item: ', '@entity.name']]\n */\nexport type NotifyEffect =\n | ['notify', string, string | SExpr]\n | ['notify', string, string | SExpr, string];\n\n/**\n * Fetch effect - retrieves entity data (server-side).\n * @example ['fetch', 'User'] or ['fetch', 'User', { id: '@payload.userId' }]\n */\nexport type FetchEffect = ['fetch', string] | ['fetch', string, Record<string, unknown>];\n\n/**\n * If effect - conditional effect execution.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['if', ['>', '@entity.health', 0], ['emit', 'ALIVE'], ['emit', 'DEAD']]\n */\nexport type IfEffect = ['if', Expression, SExpr] | ['if', Expression, SExpr, SExpr];\n\n/**\n * When effect - conditional effect similar to if but without else.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['when', ['>', '@entity.health', 0], ['emit', 'ALIVE']]\n */\nexport type WhenEffect = ['when', Expression, SExpr];\n\n/**\n * Let effect - creates local bindings for effects.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['let', ['temp', ['get', '@payload.value']], ['set', '@entity.value', 'temp']]\n */\nexport type LetEffect = ['let', [string, unknown][], ...SExpr[]];\n\n/**\n * Log effect - logs a message for debugging.\n * @example ['log', 'User created:', '@entity.name']\n */\nexport type LogEffect = ['log', ...unknown[]];\n\n/**\n * Wait effect - delays execution.\n * @example ['wait', 1000] - wait 1 second\n */\nexport type WaitEffect = ['wait', number];\n\n// ============================================================================\n// Async Effects (from almadar-std/modules/async)\n// ============================================================================\n\n/**\n * Async delay effect - wait then execute effects.\n * @example ['async/delay', 2000, ['emit', 'TIMEOUT']]\n */\nexport type AsyncDelayEffect = ['async/delay', number | string, ...Effect[]];\n\n/**\n * Async debounce effect - debounce then execute effect.\n * @example ['async/debounce', 300, ['emit', 'SEARCH_COMPLETE']]\n * @example ['async/debounce', '@entity.debounceMs', ['emit', 'SEARCH_COMPLETE']]\n */\nexport type AsyncDebounceEffect = ['async/debounce', number | string, SExpr];\n\n/**\n * Async throttle effect - throttle then execute effect.\n * @example ['async/throttle', 100, ['emit', 'SCROLL_HANDLED']]\n * @example ['async/throttle', '@entity.throttleMs', ['emit', 'SCROLL_HANDLED']]\n */\nexport type AsyncThrottleEffect = ['async/throttle', number | string, SExpr];\n\n/**\n * Async interval effect - execute effect at intervals.\n * @example ['async/interval', 1000, ['emit', 'TICK']]\n * @example ['async/interval', '@entity.intervalMs', ['emit', 'POLL_TICK']]\n */\nexport type AsyncIntervalEffect = ['async/interval', number | string, SExpr];\n\n/**\n * Async race effect - first effect to complete wins.\n * @example ['async/race', ['call', 'api1'], ['call', 'api2']]\n */\nexport type AsyncRaceEffect = ['async/race', ...Effect[]];\n\n/**\n * Async all effect - wait for all effects to complete.\n * @example ['async/all', ['call', 'api1'], ['call', 'api2']]\n */\nexport type AsyncAllEffect = ['async/all', ...Effect[]];\n\n/**\n * Async sequence effect - execute effects in sequence.\n * @example ['async/sequence', ['call', 'validate'], ['call', 'save']]\n */\nexport type AsyncSequenceEffect = ['async/sequence', ...Effect[]];\n\n/**\n * Union of all typed effects.\n * Provides compile-time validation for common effect types.\n */\nexport type TypedEffect =\n | RenderUIEffect\n | NavigateEffect\n | EmitEffect\n | SetEffect\n | PersistEffect\n | CallServiceEffect\n | SpawnEffect\n | DespawnEffect\n | DoEffect\n | NotifyEffect\n | FetchEffect\n | IfEffect\n | WhenEffect\n | LetEffect\n | LogEffect\n | WaitEffect\n | AsyncDelayEffect\n | AsyncDebounceEffect\n | AsyncThrottleEffect\n | AsyncIntervalEffect\n | AsyncRaceEffect\n | AsyncAllEffect\n | AsyncSequenceEffect;\n\n// ============================================================================\n// Effect Type (Strictly Typed)\n// ============================================================================\n\n/**\n * Effect type - typed S-expression format.\n *\n * Effects are strongly typed tuples that enforce:\n * - Valid effect operators (render-ui, emit, set, persist, navigate, call-service)\n * - Valid UISlots for render-ui\n * - Valid PatternTypes and props for render-ui\n * - Correct argument types for each effect\n *\n * Available typed effects:\n * - RenderUIEffect: ['render-ui', UISlot, PatternConfig]\n * - NavigateEffect: ['navigate', path] or ['navigate', path, params]\n * - EmitEffect: ['emit', eventName] or ['emit', eventName, payload]\n * - SetEffect: ['set', binding, value]\n * - PersistEffect: ['persist', operation, entity, data?]\n * - CallServiceEffect: ['call-service', serviceName, config]\n *\n * @example\n * [\"set\", \"@entity.health\", 100]\n * [\"emit\", \"PLAYER_DIED\", { \"playerId\": \"@entity.id\" }]\n * [\"render-ui\", \"main\", { \"patternType\": \"entity-table\", \"columns\": [\"name\"] }]\n * [\"call-service\", \"WeatherAPI\", { \"action\": \"getWeather\", \"onSuccess\": \"OK\" }]\n * [\"navigate\", \"/tasks\"]\n * [\"persist\", \"create\", \"Task\", { \"title\": \"@payload.title\" }]\n */\nexport type Effect = TypedEffect;\n\n/**\n * Schema for Effect - validates S-expression format\n */\nexport const EffectSchema = z.array(z.unknown()).min(1).refine(\n (arr) => typeof arr[0] === 'string',\n { message: 'Effect must be an S-expression with a string operator as first element' }\n);\n\nexport type EffectInput = z.input<typeof EffectSchema>;\n\n/**\n * Type guard to check if a value is a valid Effect (S-expression).\n */\nexport function isEffect(value: unknown): value is Effect {\n return Array.isArray(value) && value.length > 0 && typeof value[0] === 'string';\n}\n\n/**\n * Alias for isEffect (for clarity when working with S-expressions)\n */\nexport const isSExprEffect = isEffect;\n\n// ============================================================================\n// Effect Builder Helpers\n// ============================================================================\n\n/**\n * Create a set effect\n * @example [\"set\", \"@entity.health\", 100]\n */\nexport function set(binding: string, value: SExpr): Effect {\n return ['set', binding, value];\n}\n\n/**\n * Create an emit effect\n * @example [\"emit\", \"PLAYER_DIED\", { \"playerId\": \"@entity.id\" }]\n */\nexport function emit(event: string, payload?: Record<string, unknown>): Effect {\n return payload ? ['emit', event, payload] : ['emit', event];\n}\n\n/**\n * Create a navigate effect\n * @example [\"navigate\", \"/tasks\"]\n */\nexport function navigate(path: string): NavigateEffect;\nexport function navigate(path: string, params: Record<string, string>): NavigateEffect;\nexport function navigate(path: string, params?: Record<string, string>): NavigateEffect {\n return params ? ['navigate', path, params] : ['navigate', path];\n}\n\n/**\n * Create a render-ui effect\n * @example [\"render-ui\", \"main\", { \"patternType\": \"entity-table\", \"columns\": [\"name\"] }]\n */\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig\n): RenderUIEffect;\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig,\n props: Record<string, unknown>\n): RenderUIEffect;\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig,\n props?: Record<string, unknown>\n): RenderUIEffect {\n return props\n ? ['render-ui', target, pattern, props]\n : ['render-ui', target, pattern];\n}\n\n/**\n * Create a persist effect\n * @example [\"persist\", \"create\", \"Task\", { \"title\": \"@payload.title\" }]\n */\nexport function persist(\n action: 'create' | 'update',\n entity: string,\n data: Record<string, unknown>\n): PersistEffect;\nexport function persist(\n action: 'delete' | 'clear',\n entity: string,\n data?: Record<string, unknown>\n): PersistEffect;\nexport function persist(\n action: 'create' | 'update' | 'delete' | 'clear',\n entity: string,\n data?: Record<string, unknown>\n): PersistEffect {\n if (action === 'create' || action === 'update') {\n return ['persist', action, entity, data!] as PersistEffect;\n }\n return data\n ? ['persist', action, entity, data] as PersistEffect\n : ['persist', action, entity] as PersistEffect;\n}\n\n/**\n * Create a call-service effect\n * @example [\"call-service\", \"stripe\", { \"service\": \"stripe\", \"action\": \"charge\", \"onSuccess\": \"OK\", \"onError\": \"ERR\" }]\n */\nexport function callService(\n serviceName: string,\n config: CallServiceConfig\n): CallServiceEffect {\n return ['call-service', serviceName, config];\n}\n\n/**\n * Create a spawn effect (games)\n * @example [\"spawn\", \"Bullet\", { \"x\": \"@entity.x\", \"y\": \"@entity.y\" }]\n */\nexport function spawn(entity: string): SpawnEffect;\nexport function spawn(entity: string, initialState: Record<string, unknown>): SpawnEffect;\nexport function spawn(entity: string, initialState?: Record<string, unknown>): SpawnEffect {\n return initialState ? ['spawn', entity, initialState] : ['spawn', entity];\n}\n\n/**\n * Create a despawn effect (games)\n * @example [\"despawn\", \"@entity.id\"]\n */\nexport function despawn(entityId: string): DespawnEffect {\n return ['despawn', entityId];\n}\n\n/**\n * Create a do effect (multiple effects)\n * @example [\"do\", [\"set\", \"@entity.x\", 0], [\"set\", \"@entity.y\", 0]]\n */\nexport function doEffects(...effects: SExpr[]): DoEffect {\n return ['do', ...effects];\n}\n\n/**\n * Create a notify effect\n * @example [\"notify\", \"in_app\", \"Task created successfully\"]\n */\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string\n): NotifyEffect;\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string,\n recipient: string\n): NotifyEffect;\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string,\n recipient?: string\n): NotifyEffect {\n return recipient\n ? ['notify', channel, message, recipient]\n : ['notify', channel, message];\n}\n\n/**\n * Fetch options for entity data retrieval\n */\nexport interface FetchOptions {\n /** Fetch a single entity by ID */\n id?: string;\n /** Filter expression (S-expression) */\n filter?: SExpr;\n /** Maximum number of entities to return */\n limit?: number;\n /** Number of entities to skip */\n offset?: number;\n /** Allow additional properties for flexibility */\n [key: string]: unknown;\n}\n\n/**\n * Create a fetch effect (server-side data retrieval)\n * @example [\"fetch\", \"User\"] - fetch all users\n * @example [\"fetch\", \"User\", { \"id\": \"@payload.userId\" }] - fetch by ID\n * @example [\"fetch\", \"User\", { \"filter\": [\"=\", \"@entity.status\", \"active\"], \"limit\": 10 }]\n */\nexport function fetch(entity: string): FetchEffect;\nexport function fetch(entity: string, options: FetchOptions): FetchEffect;\nexport function fetch(entity: string, options?: FetchOptions): FetchEffect {\n return options ? ['fetch', entity, options as Record<string, unknown>] : ['fetch', entity];\n}\n\n","/**\n * S-Expression Types\n *\n * Defines the S-Expression type system for guards, effects, and computed values.\n * S-expressions are JSON arrays where the first element is an operator string.\n *\n * @example\n * // Guard: health > 0\n * [\">\", \"@entity.health\", 0]\n *\n * // Effect: set x to x + vx\n * [\"set\", \"@entity.x\", [\"+\", \"@entity.x\", \"@entity.vx\"]]\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// S-Expression Type\n// ============================================================================\n\n/**\n * S-Expression type - recursive structure representing expressions.\n *\n * An S-expression is either:\n * - A literal value (string, number, boolean, null)\n * - An object literal (for payload data, props, etc.)\n * - A binding reference (string starting with @)\n * - A call expression (array with operator as first element)\n */\nexport type SExprAtom = string | number | boolean | null | Record<string, unknown>;\nexport type SExpr = SExprAtom | SExpr[];\n\n/**\n * Expression type - S-expressions only.\n * Used for guards, computed values, and effect expressions.\n *\n * NOTE: Legacy string format is no longer supported.\n * All expressions must be S-expression arrays.\n */\nexport type Expression = SExpr;\n\n// ============================================================================\n// S-Expression Schema (Zod)\n// ============================================================================\n\n/**\n * Schema for atomic S-expression values (non-array)\n * Includes objects for payload data, props, etc.\n */\nexport const SExprAtomSchema: z.ZodType<SExprAtom> = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.record(z.unknown()), // Objects for payload data\n]);\n\n/**\n * Recursive schema for S-expressions.\n * Validates that arrays have at least one element and first element is a string (operator).\n */\nexport const SExprSchema: z.ZodType<SExpr> = z.lazy(() =>\n z.union([\n SExprAtomSchema,\n z\n .array(z.lazy(() => SExprSchema))\n .min(1)\n .refine(\n (arr) => typeof arr[0] === 'string',\n { message: 'S-expression array must have a string operator as first element' }\n ),\n ])\n);\n\n/**\n * Schema for Expression type - S-expressions only.\n * S-expressions are arrays with operator as first element.\n *\n * NOTE: Legacy string format is no longer supported.\n */\nexport const ExpressionSchema: z.ZodType<Expression> = SExprSchema;\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard for S-expression detection.\n * 100% reliable - structural check, no regex or keyword matching.\n *\n * @param value - Value to check\n * @returns true if value is an S-expression (array with string operator)\n */\nexport function isSExpr(value: unknown): value is SExpr[] {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n typeof value[0] === 'string'\n );\n}\n\n/**\n * Type guard for S-expression atoms (non-array values).\n * Includes objects (for payload data, props, etc.)\n */\nexport function isSExprAtom(value: unknown): value is SExprAtom {\n if (value === null) return true;\n if (Array.isArray(value)) return false;\n const type = typeof value;\n return type === 'string' || type === 'number' || type === 'boolean' || type === 'object';\n}\n\n/**\n * Check if a value is a binding reference.\n * Bindings start with @ (e.g., @entity.health, @payload.amount, @now)\n */\nexport function isBinding(value: unknown): value is string {\n return typeof value === 'string' && value.startsWith('@');\n}\n\n/**\n * Check if a value is a valid S-expression call (array with operator).\n * Use this to distinguish between S-expression calls and atom values.\n */\nexport function isSExprCall(value: unknown): value is SExpr[] {\n return isSExpr(value);\n}\n\n// ============================================================================\n// Binding Parsing\n// ============================================================================\n\n/**\n * Parsed binding reference\n */\nexport interface ParsedBinding {\n /** Type of binding: core (@entity, @payload, @state, @now) or entity (@EntityName) */\n type: 'core' | 'entity';\n /** The root binding name (entity, payload, state, now, or EntityName) */\n root: string;\n /** Path segments after the root (e.g., ['health'] for @entity.health) */\n path: string[];\n /** Full original binding string */\n original: string;\n}\n\n/**\n * Core bindings that are always available.\n * Phase 4.5 adds: config, computed, trait (for behavior support)\n */\nexport const CORE_BINDINGS = ['entity', 'payload', 'state', 'now', 'config', 'computed', 'trait'] as const;\nexport type CoreBinding = (typeof CORE_BINDINGS)[number];\n\n/**\n * Parse a binding reference into its components.\n * Does NOT use regex - uses structured string operations.\n *\n * @param binding - Binding string starting with @\n * @returns Parsed binding object or null if invalid\n */\nexport function parseBinding(binding: string): ParsedBinding | null {\n if (!binding.startsWith('@')) {\n return null;\n }\n\n // Remove @ prefix\n const withoutPrefix = binding.slice(1);\n\n // Split by dots\n const parts = withoutPrefix.split('.');\n\n if (parts.length === 0 || parts[0] === '') {\n return null;\n }\n\n const root = parts[0];\n const path = parts.slice(1);\n\n // Determine if core binding or entity reference\n const isCore = (CORE_BINDINGS as readonly string[]).includes(root);\n\n return {\n type: isCore ? 'core' : 'entity',\n root,\n path,\n original: binding,\n };\n}\n\n/**\n * Validate a binding reference format.\n *\n * @param binding - Binding string to validate\n * @returns true if valid binding format\n */\nexport function isValidBinding(binding: string): boolean {\n const parsed = parseBinding(binding);\n if (!parsed) return false;\n\n // Core bindings: @entity, @payload, @state, @now (optionally with path)\n // @state and @now don't have paths\n if (parsed.type === 'core') {\n if (parsed.root === 'state' || parsed.root === 'now') {\n return parsed.path.length === 0;\n }\n // @entity and @payload can have paths\n return true;\n }\n\n // Entity bindings: @EntityName.field - must have at least one path segment\n return parsed.path.length > 0;\n}\n\n// ============================================================================\n// S-Expression Utilities\n// ============================================================================\n\n/**\n * Get the operator from an S-expression call.\n *\n * @param expr - S-expression array\n * @returns The operator string or null if not a valid call\n */\nexport function getOperator(expr: SExpr): string | null {\n if (!isSExpr(expr)) return null;\n return expr[0] as string;\n}\n\n/**\n * Get the arguments from an S-expression call.\n *\n * @param expr - S-expression array\n * @returns Array of arguments (empty if not a valid call)\n */\nexport function getArgs(expr: SExpr): SExpr[] {\n if (!isSExpr(expr)) return [];\n return expr.slice(1);\n}\n\n/**\n * Create an S-expression call.\n *\n * @param operator - The operator string\n * @param args - Arguments to the operator\n * @returns S-expression array\n */\nexport function sexpr(operator: string, ...args: SExpr[]): SExpr[] {\n return [operator, ...args];\n}\n\n/**\n * Walk an S-expression tree and apply a visitor function to each node.\n *\n * @param expr - S-expression to walk\n * @param visitor - Function to call on each node\n */\nexport function walkSExpr(\n expr: SExpr,\n visitor: (node: SExpr, parent: SExpr[] | null, index: number) => void,\n parent: SExpr[] | null = null,\n index: number = 0\n): void {\n visitor(expr, parent, index);\n\n if (isSExpr(expr)) {\n for (let i = 0; i < expr.length; i++) {\n walkSExpr(expr[i], visitor, expr, i);\n }\n }\n}\n\n/**\n * Collect all bindings referenced in an S-expression.\n *\n * @param expr - S-expression to analyze\n * @returns Array of binding strings found\n */\nexport function collectBindings(expr: SExpr): string[] {\n const bindings: string[] = [];\n\n walkSExpr(expr, (node) => {\n if (isBinding(node)) {\n bindings.push(node);\n }\n });\n\n return bindings;\n}\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SExprInput = z.input<typeof SExprSchema>;\nexport type ExpressionInput = z.input<typeof ExpressionSchema>;\n","/**\n * State Machine Types (Self-Contained)\n *\n * Defines state machine types for traits.\n * Copied from schema/state-machine.ts to make orbitals/ self-contained.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { Effect } from \"./effect.js\";\nimport { EffectSchema } from \"./effect.js\";\nimport type { Expression } from \"./expression.js\";\nimport { ExpressionSchema } from \"./expression.js\";\n\n// ============================================================================\n// State\n// ============================================================================\n\n/**\n * Represents a state in the state machine\n */\nexport interface State {\n /** State name (unique identifier) */\n name: string;\n /** Whether this is the initial state */\n isInitial?: boolean;\n /** Whether this is a terminal state (no outgoing transitions expected) */\n isTerminal?: boolean;\n /** Whether this is a final state (legacy alias for isTerminal) */\n isFinal?: boolean;\n /** Human-readable description */\n description?: string;\n /** Effect names to run on entry */\n onEntry?: string[];\n /** Effect names to run on exit */\n onExit?: string[];\n}\n\nexport const StateSchema = z.object({\n name: z.string().min(1, \"State name is required\"),\n isInitial: z.boolean().optional(),\n isTerminal: z.boolean().optional(),\n isFinal: z.boolean().optional(),\n description: z.string().optional(),\n onEntry: z.array(z.string()).optional(),\n onExit: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Event\n// ============================================================================\n\n/**\n * Payload field definition for events\n */\nexport interface PayloadField {\n name: string;\n type: \"string\" | \"number\" | \"boolean\" | \"object\" | \"array\";\n required?: boolean;\n}\n\nexport const PayloadFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum([\"string\", \"number\", \"boolean\", \"object\", \"array\"]),\n required: z.boolean().optional(),\n});\n\n/**\n * Represents an event that can trigger transitions\n */\nexport interface Event {\n /** Event key (UPPER_SNAKE_CASE) */\n key: string;\n /** Human-readable name */\n name: string;\n /** Description */\n description?: string;\n /** Expected payload structure */\n payloadSchema?: PayloadField[];\n /** Domain vs System classification (optional, for analysis) */\n classification?: \"domain\" | \"system\";\n /** Semantic role of this event (optional, for analysis) */\n semanticRole?: string;\n}\n\nexport const EventSchema = z.object({\n key: z.string().min(1, \"Event key is required\"),\n name: z.string().min(1, \"Event name is required\"),\n description: z.string().optional(),\n payloadSchema: z.array(PayloadFieldSchema).optional(),\n classification: z.enum([\"domain\", \"system\"]).optional(),\n semanticRole: z.string().optional(),\n});\n\n// ============================================================================\n// Guard\n// ============================================================================\n\n/**\n * Represents a named guard condition.\n * Expression must be an S-expression.\n *\n * @example\n * {\n * name: \"hasHealth\",\n * expression: [\">\", \"@entity.health\", 0],\n * description: \"Check if entity has health remaining\"\n * }\n */\nexport interface Guard {\n name: string;\n /** Guard expression - S-expression array only */\n expression: Expression;\n description?: string;\n}\n\nexport const GuardSchema = z.object({\n name: z.string().min(1, \"Guard name is required\"),\n expression: ExpressionSchema,\n description: z.string().optional(),\n});\n\n// ============================================================================\n// Transition (Effect imported separately to avoid circular deps)\n// ============================================================================\n\n/**\n * Represents a transition between states.\n * Guards and effects must be S-expressions.\n *\n * @example\n * {\n * from: \"idle\",\n * to: \"running\",\n * event: \"START\",\n * guard: [\">\", \"@entity.fuel\", 0],\n * effects: [\n * [\"set\", \"@entity.status\", \"running\"],\n * [\"emit\", \"ENGINE_STARTED\"]\n * ]\n * }\n */\nexport interface Transition {\n /** Source state name */\n from: string;\n /** Target state name */\n to: string;\n /** Event key that triggers this transition */\n event: string;\n /** Guard expression - S-expression array */\n guard?: Expression | null;\n /** Effects to execute - S-expression arrays */\n effects?: Effect[];\n /** Description */\n description?: string | null;\n}\n\nexport const TransitionSchema = z.object({\n from: z.string().min(1, \"Transition source state is required\"),\n to: z.string().min(1, \"Transition target state is required\"),\n event: z.string().min(1, \"Transition event is required\"),\n guard: ExpressionSchema.nullish(),\n effects: z.array(EffectSchema).optional(),\n description: z.string().nullish(),\n});\n\n// ============================================================================\n// State Machine\n// ============================================================================\n\n/**\n * Complete state machine definition\n */\nexport interface StateMachine {\n /** All states in the machine */\n states: State[];\n /** All events that can be triggered */\n events: Event[];\n /** All transitions between states */\n transitions: Transition[];\n /** Named guard definitions */\n guards?: Guard[];\n}\n\nexport const StateMachineSchema = z.object({\n states: z.array(StateSchema).min(1, \"At least one state is required\"),\n events: z.array(EventSchema),\n transitions: z.array(TransitionSchema),\n guards: z.array(GuardSchema).optional(),\n});\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type StateInput = z.input<typeof StateSchema>;\nexport type EventInput = z.input<typeof EventSchema>;\nexport type GuardInput = z.input<typeof GuardSchema>;\nexport type TransitionInput = z.input<typeof TransitionSchema>;\nexport type StateMachineInput = z.input<typeof StateMachineSchema>;\n\n// ============================================================================\n// Event Utilities\n// ============================================================================\n\n/**\n * Check if an event is a circuit event (not internal/system event).\n * Circuit events are user-defined events that participate in the closed circuit pattern.\n * Internal/system events start with underscore (e.g., _INIT, _TICK, _TIMER).\n *\n * @param event - Event name to check\n * @returns true if event is a circuit event (doesn't start with underscore)\n *\n * @example\n * isCircuitEvent('CREATE') // true\n * isCircuitEvent('SAVE') // true\n * isCircuitEvent('_INIT') // false (internal)\n * isCircuitEvent('_TICK') // false (internal)\n */\nexport function isCircuitEvent(event: string): boolean {\n return !event.startsWith('_');\n}\n","/**\n * Trait Types (Self-Contained)\n *\n * Defines trait types for behavioral patterns.\n * Self-contained - imports only from local orbital types.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { StateMachine } from './state-machine.js';\nimport { StateMachineSchema } from './state-machine.js';\nimport type { Effect } from './effect.js';\nimport { EffectSchema } from './effect.js';\nimport type { Expression } from './expression.js';\nimport { ExpressionSchema } from './expression.js';\n\n// ============================================================================\n// Trait Categories\n// ============================================================================\n\n/**\n * Categories for organizing traits\n */\nexport type TraitCategory =\n | 'lifecycle'\n | 'temporal'\n | 'validation'\n | 'notification'\n | 'integration'\n | 'interaction'\n | 'game-core'\n | 'game-character'\n | 'game-ai'\n | 'game-combat'\n | 'game-items'\n | 'game-cards'\n | 'game-board'\n | 'game-puzzle';\n\nexport const TraitCategorySchema = z.enum([\n 'lifecycle',\n 'temporal',\n 'validation',\n 'notification',\n 'integration',\n 'interaction',\n 'game-core',\n 'game-character',\n 'game-ai',\n 'game-combat',\n 'game-items',\n 'game-cards',\n 'game-board',\n 'game-puzzle',\n]);\n\n// ============================================================================\n// Trait Entity Field (simplified)\n// ============================================================================\n\n/**\n * Field types for trait data entities\n */\nexport type TraitFieldType = 'string' | 'number' | 'boolean' | 'date' | 'array' | 'object' | 'timestamp' | 'datetime' | 'enum';\n\n/**\n * Simplified field for trait data entities\n */\nexport interface TraitEntityField {\n name: string;\n type: TraitFieldType;\n required?: boolean;\n default?: unknown;\n values?: string[];\n}\n\nexport const TraitEntityFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum([\n 'string',\n 'number',\n 'boolean',\n 'date',\n 'array',\n 'object',\n 'timestamp',\n 'datetime',\n 'enum',\n ]),\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n values: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Trait Data Entity\n// ============================================================================\n\n/**\n * Simplified data entity for traits\n */\nexport interface TraitDataEntity {\n name: string;\n collection?: string;\n fields: TraitEntityField[];\n timestamps?: boolean;\n description?: string;\n runtime?: boolean;\n singleton?: boolean;\n pages?: string[];\n}\n\nexport const TraitDataEntitySchema = z.object({\n name: z.string().min(1),\n collection: z.string().optional(),\n fields: z.array(TraitEntityFieldSchema).min(1),\n timestamps: z.boolean().optional(),\n description: z.string().optional(),\n runtime: z.boolean().optional(),\n singleton: z.boolean().optional(),\n pages: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Trait Tick\n// ============================================================================\n\n/**\n * Tick rule for traits.\n * Guards can be legacy strings or S-expressions.\n * Effects can be typed Effect objects or S-expressions.\n */\nexport interface TraitTick {\n name: string;\n description?: string;\n priority?: number;\n interval: string | number;\n appliesTo?: string[];\n pages?: string[];\n /** Guard expression - string (legacy) or S-expression array */\n guard?: Expression;\n /** Effects to execute (S-expressions) */\n effects: Effect[];\n /**\n * Events this tick emits.\n * Must reference events defined in trait's emits array.\n * Used for validation and documentation.\n */\n emits?: string[];\n}\n\nexport const TraitTickSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n priority: z.number().optional(),\n interval: z.union([z.literal('frame'), z.number().positive()]),\n appliesTo: z.array(z.string()).optional(),\n pages: z.array(z.string()).optional(),\n guard: ExpressionSchema.optional(),\n effects: z.array(EffectSchema).min(1),\n emits: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Event Scope\n// ============================================================================\n\n/**\n * Event scope determines visibility:\n * - 'internal': Trait-to-trait within same orbital (default)\n * - 'external': Exposed for cross-orbital communication\n */\nexport type EventScope = 'internal' | 'external';\n\nexport const EventScopeSchema = z.enum(['internal', 'external']);\n\n// ============================================================================\n// Event Payload Field\n// ============================================================================\n\n/**\n * Payload field definition for events.\n * Defines the structure of data carried by events.\n */\nexport interface EventPayloadField {\n /** Field name */\n name: string;\n /** Field type */\n type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'entity';\n /** Whether field is required in payload */\n required?: boolean;\n /** Human-readable description */\n description?: string;\n /** For 'entity' type: the entity type name */\n entityType?: string;\n}\n\nexport const EventPayloadFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['string', 'number', 'boolean', 'object', 'array', 'entity']),\n required: z.boolean().optional(),\n description: z.string().optional(),\n entityType: z.string().optional(),\n});\n\n// ============================================================================\n// Trait Event Contract\n// ============================================================================\n\n/**\n * Event contract for events a trait emits.\n * Declares the event name, scope, and payload schema.\n */\nexport interface TraitEventContract {\n /** Event name (UPPER_SNAKE_CASE) */\n event: string;\n /** Human-readable description */\n description?: string;\n /** Payload schema - what data this event carries */\n payload?: EventPayloadField[];\n /**\n * Event scope:\n * - 'internal': Trait-to-trait within same orbital (default)\n * - 'external': Exposed for cross-orbital communication\n */\n scope?: EventScope;\n}\n\nexport const TraitEventContractSchema = z.object({\n event: z.string().min(1).regex(\n /^[A-Z][A-Z0-9_]*$/,\n 'Event name must be UPPER_SNAKE_CASE'\n ),\n description: z.string().optional(),\n payload: z.array(EventPayloadFieldSchema).optional(),\n scope: EventScopeSchema.optional(),\n});\n\n// ============================================================================\n// Trait Event Listener\n// ============================================================================\n\n/**\n * Event listener for trait communication.\n * Guards can be legacy strings or S-expressions.\n * Enhanced with scope and payloadMapping for cross-orbital communication.\n */\nexport interface TraitEventListener {\n /** Event key to listen for (may be namespaced: TraitName.EVENT_NAME) */\n event: string;\n /** State machine event to trigger */\n triggers: string;\n /** Guard expression - string (legacy) or S-expression array */\n guard?: Expression;\n /**\n * Listener scope:\n * - 'internal': Listen to events within same orbital (default)\n * - 'external': Listen to events from other orbitals\n */\n scope?: EventScope;\n /** Map event payload fields to transition payload */\n payloadMapping?: Record<string, string>;\n}\n\nexport const TraitEventListenerSchema = z.object({\n event: z.string().min(1),\n triggers: z.string().min(1),\n guard: ExpressionSchema.optional(),\n scope: EventScopeSchema.optional(),\n payloadMapping: z.record(z.string()).optional(),\n});\n\n// ============================================================================\n// Required Field\n// ============================================================================\n\n/**\n * Field required by a trait from its linkedEntity\n */\nexport interface RequiredField {\n name: string;\n type: 'string' | 'number' | 'boolean' | 'date' | 'array' | 'object' | 'timestamp' | 'datetime' | 'enum';\n description?: string;\n}\n\nexport const RequiredFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['string', 'number', 'boolean', 'date', 'array', 'object', 'timestamp', 'datetime', 'enum']),\n description: z.string().optional(),\n});\n\n// ============================================================================\n// Trait Reference\n// ============================================================================\n\n/**\n * Reference to a trait from an entity or page\n */\nexport interface TraitReference {\n ref: string;\n linkedEntity?: string;\n config?: Record<string, Record<string, unknown>>;\n appliesTo?: string[];\n}\n\nexport const TraitReferenceSchema = z.object({\n ref: z.string().min(1),\n linkedEntity: z.string().optional(),\n config: z.record(z.record(z.unknown())).optional(),\n appliesTo: z.array(z.string()).optional(),\n});\n\n/**\n * Simplified trait reference - supports string, reference object, or inline Trait definition\n * - string: \"TraitName\" - reference to a trait by name\n * - { ref: \"TraitName\" }: reference object with optional config\n * - { name: \"TraitName\", stateMachine: {...} }: inline trait definition\n */\nexport type TraitRef = string | { ref: string; config?: Record<string, unknown>; linkedEntity?: string } | Trait;\n\n// TraitRefSchema is defined after TraitSchema (see below) to avoid forward reference\n\n// ============================================================================\n// Trait UI Binding\n// ============================================================================\n\nexport type PresentationType = 'modal' | 'drawer' | 'popover' | 'inline' | 'confirm-dialog';\n\nexport interface TraitUIBinding {\n [stateName: string]: {\n presentation: PresentationType;\n content: Record<string, unknown> | Record<string, unknown>[];\n props?: {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n position?: 'left' | 'right' | 'top' | 'bottom' | 'center';\n title?: string;\n closable?: boolean;\n width?: string;\n showProgress?: boolean;\n step?: number;\n totalSteps?: number;\n };\n };\n}\n\n// ============================================================================\n// Trait Definition\n// ============================================================================\n\n/**\n * A Trait is a reusable behavioral module with state machine.\n *\n * Traits declare their event contracts via `emits` and `listens`:\n * - `emits`: Events this trait can emit (with scope and payload schema)\n * - `listens`: Events this trait listens for (with optional payloadMapping)\n */\nexport interface Trait {\n name: string;\n description?: string;\n description_visual_prompt?: string;\n category?: TraitCategory;\n /**\n * The entity this trait is linked to.\n * Required for inline trait definitions within an orbital.\n */\n linkedEntity?: string;\n requiredFields?: RequiredField[];\n dataEntities?: TraitDataEntity[];\n stateMachine?: StateMachine;\n initialEffects?: Effect[];\n ticks?: TraitTick[];\n /**\n * Events this trait emits.\n * Each event can be scoped as internal or external.\n * External events are namespaced at orbital level (TraitName.EVENT_NAME).\n */\n emits?: TraitEventContract[];\n /**\n * Events this trait listens for.\n * External listeners reference namespaced events (TraitName.EVENT_NAME).\n */\n listens?: TraitEventListener[];\n ui?: TraitUIBinding;\n}\n\nexport const TraitSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n description_visual_prompt: z.string().optional(),\n category: TraitCategorySchema.optional(),\n linkedEntity: z.string().optional(),\n requiredFields: z.array(RequiredFieldSchema).optional(),\n dataEntities: z.array(TraitDataEntitySchema).optional(),\n stateMachine: StateMachineSchema.optional(),\n initialEffects: z.array(EffectSchema).optional(),\n ticks: z.array(TraitTickSchema).optional(),\n emits: z.array(TraitEventContractSchema).optional(),\n listens: z.array(TraitEventListenerSchema).optional(),\n ui: z.record(z.unknown()).optional(),\n});\n\n// TraitRefSchema defined here after TraitSchema to avoid forward reference\nexport const TraitRefSchema = z.union([\n z.string().min(1),\n z.object({\n ref: z.string().min(1),\n config: z.record(z.unknown()).optional(),\n linkedEntity: z.string().optional(),\n }),\n TraitSchema, // Allow inline trait definitions\n]);\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Check if a trait ref is an inline Trait definition\n */\nexport function isInlineTrait(traitRef: TraitRef): traitRef is Trait {\n return typeof traitRef === 'object' && 'name' in traitRef && !('ref' in traitRef);\n}\n\n/**\n * Get trait name from a trait reference\n */\nexport function getTraitName(traitRef: TraitRef): string {\n if (typeof traitRef === 'string') {\n return traitRef;\n }\n if (isInlineTrait(traitRef)) {\n return traitRef.name;\n }\n return traitRef.ref;\n}\n\n/**\n * Get trait config from a trait reference\n */\nexport function getTraitConfig(traitRef: TraitRef): Record<string, unknown> | undefined {\n if (typeof traitRef === 'string') {\n return undefined;\n }\n if (isInlineTrait(traitRef)) {\n return undefined; // Inline traits don't have config\n }\n return traitRef.config;\n}\n\n/**\n * Normalize trait reference to object form\n */\nexport function normalizeTraitRef(traitRef: TraitRef): { ref: string; config?: Record<string, unknown> } {\n if (typeof traitRef === 'string') {\n return { ref: traitRef };\n }\n if (isInlineTrait(traitRef)) {\n return { ref: traitRef.name };\n }\n return traitRef;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type TraitInput = z.input<typeof TraitSchema>;\nexport type TraitReferenceInput = z.input<typeof TraitReferenceSchema>;\n\n// Backward compatibility aliases\nexport type OrbitalTraitRef = TraitRef;\nexport const OrbitalTraitRefSchema = TraitRefSchema;\n","/**\n * Domain Context Types (Self-Contained)\n *\n * Defines domain classification types for applications.\n * Copied from schema/domain-context.ts to make orbitals/ self-contained.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\n\n// ============================================================================\n// Domain Categories\n// ============================================================================\n\n/**\n * High-level domain categories\n */\nexport type DomainCategory =\n | \"healthcare\"\n | \"education\"\n | \"finance\"\n | \"ecommerce\"\n | \"real-estate\"\n | \"logistics\"\n | \"hospitality\"\n | \"hr-management\"\n | \"project-management\"\n | \"social\"\n | \"content-management\"\n | \"iot\"\n | \"analytics\"\n | \"game\"\n | \"custom\";\n\nexport const DomainCategorySchema = z.enum([\n \"healthcare\",\n \"education\",\n \"finance\",\n \"ecommerce\",\n \"real-estate\",\n \"logistics\",\n \"hospitality\",\n \"hr-management\",\n \"project-management\",\n \"social\",\n \"content-management\",\n \"iot\",\n \"analytics\",\n \"game\",\n \"custom\",\n]);\n\n// ============================================================================\n// Agent Domain Categories (simplified for LLM-based tools)\n// ============================================================================\n\n/**\n * Simplified domain categories used by the agent tools for application classification.\n * All agent tools and skill generators should derive from this constant.\n */\nexport const AGENT_DOMAIN_CATEGORIES = [\n \"game\",\n \"business\",\n \"dashboard\",\n \"form\",\n \"content\",\n \"social\",\n \"ecommerce\",\n \"workflow\",\n] as const;\n\nexport type AgentDomainCategory = (typeof AGENT_DOMAIN_CATEGORIES)[number];\n\nexport const AgentDomainCategorySchema = z.enum([...AGENT_DOMAIN_CATEGORIES]);\n\n// ============================================================================\n// Game Sub-Categories\n// ============================================================================\n\n/**\n * Game genre sub-categories\n */\nexport type GameSubCategory =\n | \"platformer\"\n | \"shooter\"\n | \"puzzle\"\n | \"rpg\"\n | \"board\"\n | \"racing\"\n | \"fighting\"\n | \"tower-defense\"\n | \"endless-runner\"\n | \"simulation\"\n | \"arcade\"\n | \"adventure\";\n\nexport const GameSubCategorySchema = z.enum([\n \"platformer\",\n \"shooter\",\n \"puzzle\",\n \"rpg\",\n \"board\",\n \"racing\",\n \"fighting\",\n \"tower-defense\",\n \"endless-runner\",\n \"simulation\",\n \"arcade\",\n \"adventure\",\n]);\n\n// ============================================================================\n// Node Classification\n// ============================================================================\n\n/**\n * Domain vs System classification\n */\nexport type NodeClassification = \"domain\" | \"system\";\n\nexport const NodeClassificationSchema = z.enum([\"domain\", \"system\"]);\n\n// ============================================================================\n// Semantic Roles\n// ============================================================================\n\nexport type StateSemanticRole =\n | \"pending\"\n | \"active\"\n | \"completed\"\n | \"cancelled\"\n | \"error\"\n | \"suspended\"\n | \"blocked\"\n | \"domain_workflow\"\n | \"domain_status\"\n | \"system_loading\"\n | \"system_error\"\n | \"system_idle\"\n | \"system_editing\"\n | \"system_confirming\";\n\nexport const StateSemanticRoleSchema = z.enum([\n \"pending\",\n \"active\",\n \"completed\",\n \"cancelled\",\n \"error\",\n \"suspended\",\n \"blocked\",\n \"domain_workflow\",\n \"domain_status\",\n \"system_loading\",\n \"system_error\",\n \"system_idle\",\n \"system_editing\",\n \"system_confirming\",\n]);\n\nexport type EventSemanticRole =\n | \"domain_action\"\n | \"domain_trigger\"\n | \"system_crud\"\n | \"system_navigation\"\n | \"system_form\"\n | \"system_ui\";\n\nexport const EventSemanticRoleSchema = z.enum([\n \"domain_action\",\n \"domain_trigger\",\n \"system_crud\",\n \"system_navigation\",\n \"system_form\",\n \"system_ui\",\n]);\n\nexport type EntitySemanticRole =\n | \"domain_core\"\n | \"domain_supporting\"\n | \"domain_reference\"\n | \"system_user\"\n | \"system_config\"\n | \"system_audit\";\n\nexport const EntitySemanticRoleSchema = z.enum([\n \"domain_core\",\n \"domain_supporting\",\n \"domain_reference\",\n \"system_user\",\n \"system_config\",\n \"system_audit\",\n]);\n\n// ============================================================================\n// Domain Vocabulary\n// ============================================================================\n\n/**\n * Domain-specific vocabulary for naming conventions.\n * Maps generic terms to domain-appropriate labels.\n */\nexport interface DomainVocabulary {\n /** Label for items (e.g., \"Task\", \"Cargo\", \"Patient\") */\n item?: string;\n /** Label for collections (e.g., \"Tasks\", \"Inventory\", \"Patients\") */\n collection?: string;\n /** Label for create action (e.g., \"Add\", \"Recruit\", \"Admit\") */\n create?: string;\n /** Label for delete action (e.g., \"Remove\", \"Discharge\", \"Archive\") */\n delete?: string;\n /** Label for container (e.g., \"List\", \"Hold\", \"Ward\") */\n container?: string;\n /** Additional custom vocabulary */\n [key: string]: string | undefined;\n}\n\nexport const DomainVocabularySchema = z\n .record(z.string(), z.string())\n .optional();\n\n// ============================================================================\n// Domain Context (Simplified for Design System)\n// ============================================================================\n\n/**\n * User persona for UX decisions\n */\nexport interface UserPersona {\n /** Persona name */\n name: string;\n /** Role for RBAC */\n role?: string;\n /** Primary device */\n device?: \"mobile\" | \"tablet\" | \"desktop\";\n}\n\nexport const UserPersonaSchema = z.object({\n name: z.string().min(1),\n role: z.string().optional(),\n device: z.enum([\"mobile\", \"tablet\", \"desktop\"]).optional(),\n});\n\n/**\n * Domain context - user request + classification\n */\nexport interface DomainContext {\n /** Original user request - verbatim (typically at schema level) */\n request: string;\n /**\n * The verbatim excerpt or summary of the user request that produced THIS orbital.\n *\n * Purpose: Traceability - know exactly what the user asked for that led to this orbital.\n *\n * Can be:\n * - Exact quote: \"...with a calendar that syncs with Google Calendar...\"\n * - Summarized: \"Calendar integration with Google Calendar sync\"\n *\n * Examples:\n * - Request: \"Build a project management app with tasks, team collaboration, and Gantt charts\"\n * - Task orbital: requestFragment: \"tasks\"\n * - Team orbital: requestFragment: \"team collaboration\"\n * - Timeline orbital: requestFragment: \"Gantt charts\"\n *\n * This enables:\n * - Understanding WHY this orbital exists\n * - Regenerating with original context preserved\n * - Validating the orbital matches user intent\n */\n requestFragment?: string;\n /** Domain category */\n category: AgentDomainCategory;\n /** Sub-domain for more specific classification */\n subDomain?: string;\n /** User personas */\n personas?: UserPersona[];\n /** Domain-specific vocabulary for naming */\n vocabulary?: DomainVocabulary;\n}\n\nexport const DomainContextSchema = z.object({\n request: z.string().min(1, \"Original request is required\"),\n requestFragment: z.string().optional(),\n category: AgentDomainCategorySchema,\n subDomain: z.string().optional(),\n personas: z.array(UserPersonaSchema).optional(),\n vocabulary: DomainVocabularySchema.optional(),\n});\n\n// ============================================================================\n// UX Hints\n// ============================================================================\n\n/**\n * UX hints for guiding UI generation.\n * These inform pattern selection and layout decisions.\n */\n/**\n * UX hints for guiding UI generation.\n * These inform pattern selection and layout decisions.\n *\n * Note: These are HINTS, not strict requirements. LLMs may use any string value\n * including 'dashboard-grid', 'none', etc. The subagent generator interprets these\n * flexibly to produce appropriate render-ui effects.\n */\nexport interface UXHints {\n /** Overall user flow pattern (e.g., 'hub-spoke', 'crud-cycle', 'linear') */\n flowPattern?: string;\n /** Pattern for displaying lists (e.g., 'entity-table', 'entity-cards', 'dashboard-grid', 'none') */\n listPattern?: string;\n /** Pattern for create/edit forms (e.g., 'modal', 'drawer', 'page', 'none') */\n formPattern?: string;\n /** Pattern for entity detail views (e.g., 'drawer', 'page', 'split', 'none') */\n detailPattern?: string;\n /** Cross-orbital navigation links */\n relatedLinks?: RelatedLink[];\n}\n\n// UX hints use flexible string types - they are guidance, not strict validation\nexport const UXHintsSchema = z.object({\n flowPattern: z.string().optional(),\n listPattern: z.string().optional(),\n formPattern: z.string().optional(),\n detailPattern: z.string().optional(),\n relatedLinks: z.array(z.lazy(() => RelatedLinkSchema)).optional(),\n});\n\n/**\n * Related link for cross-orbital navigation.\n */\nexport interface RelatedLink {\n /** Field name of the relation (e.g., \"customerId\") */\n relation: string;\n /** Button/link text (e.g., \"View Customer\") */\n label: string;\n /** Target view type */\n targetView?: \"list\" | \"detail\";\n}\n\nexport const RelatedLinkSchema = z.object({\n relation: z.string().min(1),\n label: z.string().min(1),\n targetView: z.enum([\"list\", \"detail\"]).optional(),\n});\n\n// ============================================================================\n// Suggested Guards (Pre-Generation)\n// ============================================================================\n\n/**\n * Suggested guard - natural language description for decomposition phase.\n * Generator converts these to S-expressions during generation.\n */\nexport interface SuggestedGuard {\n /** Unique identifier */\n id: string;\n /** Natural language description (e.g., \"Weight must be under 1000kg\") */\n description: string;\n /** Events this guard applies to (e.g., [\"Cargo.CREATE\", \"Cargo.UPDATE\"]) */\n appliesTo: string[];\n}\n\nexport const SuggestedGuardSchema = z.object({\n id: z.string().min(1),\n description: z.string().min(1),\n appliesTo: z.array(z.string().min(1)),\n});\n\n// ============================================================================\n// Design Preferences\n// ============================================================================\n\n/**\n * Design preferences for visual styling\n */\nexport interface DesignPreferences {\n /** Design style */\n style?: \"minimal\" | \"modern\" | \"playful\" | \"data-driven\" | \"immersive\";\n /** Primary color (hex) */\n primaryColor?: string;\n /** Target device */\n device?: \"mobile\" | \"tablet\" | \"desktop\" | \"all\";\n /** Dark mode */\n darkMode?: boolean;\n /** UX hints for pattern selection */\n uxHints?: UXHints;\n}\n\nexport const DesignPreferencesSchema = z.object({\n style: z\n .enum([\"minimal\", \"modern\", \"playful\", \"data-driven\", \"immersive\"])\n .optional(),\n primaryColor: z\n .string()\n .regex(/^#[0-9A-Fa-f]{6}$/, \"Must be valid hex color\")\n .optional(),\n device: z.enum([\"mobile\", \"tablet\", \"desktop\", \"all\"]).optional(),\n darkMode: z.boolean().optional(),\n uxHints: UXHintsSchema.optional(),\n});\n\n// ============================================================================\n// Theme Definition\n// ============================================================================\n\n/**\n * Theme tokens - CSS custom properties for design system.\n */\nexport interface ThemeTokens {\n /** Color tokens (e.g., primary, background, foreground) */\n colors?: Record<string, string>;\n /** Border radius tokens */\n radii?: Record<string, string>;\n /** Spacing tokens */\n spacing?: Record<string, string>;\n /** Typography tokens */\n typography?: Record<string, string>;\n /** Shadow tokens */\n shadows?: Record<string, string>;\n}\n\nexport const ThemeTokensSchema = z.object({\n colors: z.record(z.string(), z.string()).optional(),\n radii: z.record(z.string(), z.string()).optional(),\n spacing: z.record(z.string(), z.string()).optional(),\n typography: z.record(z.string(), z.string()).optional(),\n shadows: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Theme variant - overrides for a specific mode (e.g., dark mode).\n */\nexport interface ThemeVariant {\n /** Color overrides */\n colors?: Record<string, string>;\n /** Radius overrides */\n radii?: Record<string, string>;\n /** Spacing overrides */\n spacing?: Record<string, string>;\n /** Typography overrides */\n typography?: Record<string, string>;\n /** Shadow overrides */\n shadows?: Record<string, string>;\n}\n\nexport const ThemeVariantSchema = z.object({\n colors: z.record(z.string(), z.string()).optional(),\n radii: z.record(z.string(), z.string()).optional(),\n spacing: z.record(z.string(), z.string()).optional(),\n typography: z.record(z.string(), z.string()).optional(),\n shadows: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Theme definition - design system for an orbital.\n */\nexport interface ThemeDefinition {\n /** Theme name */\n name: string;\n /** Base tokens */\n tokens: ThemeTokens;\n /** Named variants (e.g., \"dark\", \"high-contrast\") */\n variants?: Record<string, ThemeVariant>;\n}\n\nexport const ThemeDefinitionSchema = z.object({\n name: z.string().min(1, \"Theme name is required\"),\n tokens: ThemeTokensSchema,\n variants: z.record(z.string(), ThemeVariantSchema).optional(),\n});\n\n/**\n * ThemeRef - Theme can be inline definition OR reference to imported theme.\n *\n * Reference format: \"Alias.theme\"\n */\nexport type ThemeRef = ThemeDefinition | string;\n\n/**\n * Check if ThemeRef is a reference string.\n */\nexport function isThemeReference(theme: ThemeRef): theme is string {\n return typeof theme === \"string\";\n}\n\n/**\n * Validate theme reference format: \"Alias.theme\"\n */\nexport const ThemeRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.theme$/,\n 'Theme reference must be in format \"Alias.theme\" (e.g., \"Ocean.theme\")',\n );\n\nexport const ThemeRefSchema = z.union([\n ThemeDefinitionSchema,\n ThemeRefStringSchema,\n]);\n\n// ============================================================================\n// Design Tokens (Legacy)\n// ============================================================================\n\n/**\n * Design tokens - reusable Tailwind class collections.\n * @deprecated Use ThemeDefinition instead for new code.\n *\n * Instead of repeating raw Tailwind classes everywhere, define once and reference by name.\n * Example: `token: \"surfaces.glass\"` resolves to the Tailwind classes defined here.\n */\nexport interface DesignTokens {\n /** Surface styles: backgrounds, borders, shadows */\n surfaces?: Record<string, string>;\n /** Text styles: typography, colors */\n text?: Record<string, string>;\n /** Interactive element styles: buttons, links */\n interactive?: Record<string, string>;\n /** Effect styles: shadows, animations, transitions */\n effects?: Record<string, string>;\n /** Additional custom categories */\n [category: string]: Record<string, string> | undefined;\n}\n\nexport const DesignTokensSchema = z\n .record(z.string(), z.record(z.string(), z.string()))\n .optional();\n\n// ============================================================================\n// Custom Pattern Definitions\n// ============================================================================\n\n/**\n * Allowed HTML elements for custom patterns.\n * These are safe, semantic elements for building custom UIs.\n */\nexport const ALLOWED_CUSTOM_COMPONENTS = [\n \"div\",\n \"span\",\n \"button\",\n \"a\",\n \"p\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"header\",\n \"footer\",\n \"section\",\n \"article\",\n \"nav\",\n \"main\",\n \"aside\",\n \"ul\",\n \"ol\",\n \"li\",\n \"img\",\n \"label\",\n \"input\",\n \"form\",\n] as const;\n\nexport type AllowedCustomComponent = (typeof ALLOWED_CUSTOM_COMPONENTS)[number];\n\n/**\n * Custom pattern definition for app-specific reusable patterns.\n *\n * Register custom designs that can be referenced by name throughout the schema.\n */\nexport interface CustomPatternDefinition {\n /** Always 'custom' for custom patterns */\n type: \"custom\";\n /** HTML element to render */\n component: AllowedCustomComponent;\n /** Base Tailwind classes (can include {prop} placeholders) */\n className: string;\n /** Named content slots for nested content */\n slots?: string[];\n /** Configurable props that can be passed when using the pattern */\n props?: string[];\n}\n\nexport const CustomPatternDefinitionSchema = z.object({\n type: z.literal(\"custom\"),\n component: z.enum(ALLOWED_CUSTOM_COMPONENTS),\n className: z.string(),\n slots: z.array(z.string()).optional(),\n props: z.array(z.string()).optional(),\n});\n\n/**\n * Map of custom pattern names to their definitions.\n */\nexport type CustomPatternMap = Record<string, CustomPatternDefinition>;\n\nexport const CustomPatternMapSchema = z\n .record(z.string(), CustomPatternDefinitionSchema)\n .optional();\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type DomainContextInput = z.input<typeof DomainContextSchema>;\nexport type DesignPreferencesInput = z.input<typeof DesignPreferencesSchema>;\nexport type UserPersonaInput = z.input<typeof UserPersonaSchema>;\nexport type DesignTokensInput = z.input<typeof DesignTokensSchema>;\nexport type CustomPatternDefinitionInput = z.input<\n typeof CustomPatternDefinitionSchema\n>;\nexport type CustomPatternMapInput = z.input<typeof CustomPatternMapSchema>;\n","/**\n * Service Types for Orbital Schema\n *\n * Defines external service integrations (REST APIs, WebSockets, MCP servers)\n * that can be used by orbital units via the `call_service` effect.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\n\n// ============================================================================\n// Service Type Enum\n// ============================================================================\n\n/**\n * Types of external services that can be integrated.\n */\nexport const SERVICE_TYPES = [\"rest\", \"socket\", \"mcp\"] as const;\n\nexport type ServiceType = (typeof SERVICE_TYPES)[number];\n\nexport const ServiceTypeSchema = z.enum(SERVICE_TYPES);\n\n// ============================================================================\n// REST Service Definition\n// ============================================================================\n\n/**\n * Configuration for a REST API service.\n *\n * @example\n * ```typescript\n * const weatherService: RestServiceDef = {\n * name: 'WeatherAPI',\n * type: 'rest',\n * baseUrl: 'https://api.openweathermap.org/data/2.5',\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * auth: {\n * type: 'api-key',\n * keyName: 'appid',\n * location: 'query',\n * },\n * };\n * ```\n */\nexport interface RestServiceDef {\n /** Unique service name (used in call_service effect) */\n name: string;\n\n /** Service type */\n type: \"rest\";\n\n /** Optional description */\n description?: string;\n\n /** Base URL for the API */\n baseUrl: string;\n\n /** Default headers to include in all requests */\n headers?: Record<string, string>;\n\n /** Authentication configuration */\n auth?: RestAuthConfig;\n\n /** Timeout in milliseconds (default: 30000) */\n timeout?: number;\n}\n\n/**\n * Authentication configuration for REST services.\n */\nexport interface RestAuthConfig {\n /** Authentication type */\n type: \"api-key\" | \"bearer\" | \"basic\" | \"oauth2\";\n\n /** For api-key: the query parameter or header name */\n keyName?: string;\n\n /** For api-key: where to place the key */\n location?: \"query\" | \"header\";\n\n /** Environment variable name containing the secret (for secure storage) */\n secretEnv?: string;\n}\n\nexport const RestAuthConfigSchema = z.object({\n type: z.enum([\"api-key\", \"bearer\", \"basic\", \"oauth2\"]),\n keyName: z.string().optional(),\n location: z.enum([\"query\", \"header\"]).optional(),\n secretEnv: z.string().optional(),\n});\n\nexport const RestServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"rest\"),\n description: z.string().optional(),\n baseUrl: z.string().url(\"Base URL must be a valid URL\"),\n headers: z.record(z.string()).optional(),\n auth: RestAuthConfigSchema.optional(),\n timeout: z.number().positive().optional(),\n});\n\n// ============================================================================\n// Socket Service Definition\n// ============================================================================\n\n/**\n * Configuration for a WebSocket service.\n *\n * @example\n * ```typescript\n * const chatService: SocketServiceDef = {\n * name: 'ChatSocket',\n * type: 'socket',\n * url: 'wss://chat.example.com',\n * events: {\n * inbound: ['message_received', 'user_joined', 'user_left'],\n * outbound: ['send_message', 'join_room', 'leave_room'],\n * },\n * };\n * ```\n */\nexport interface SocketServiceDef {\n /** Unique service name */\n name: string;\n\n /** Service type */\n type: \"socket\";\n\n /** Optional description */\n description?: string;\n\n /** WebSocket URL */\n url: string;\n\n /** Event definitions */\n events: SocketEvents;\n\n /** Reconnection configuration */\n reconnect?: {\n /** Enable automatic reconnection */\n enabled: boolean;\n /** Maximum reconnection attempts */\n maxAttempts?: number;\n /** Delay between attempts in ms */\n delayMs?: number;\n };\n}\n\n/**\n * Socket event definitions.\n */\nexport interface SocketEvents {\n /** Events received from server (maps to orbital events) */\n inbound: string[];\n\n /** Events sent to server (triggered by effects) */\n outbound: string[];\n}\n\nexport const SocketEventsSchema = z.object({\n inbound: z.array(z.string()),\n outbound: z.array(z.string()),\n});\n\nexport const SocketServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"socket\"),\n description: z.string().optional(),\n url: z.string().url(\"WebSocket URL must be valid\"),\n events: SocketEventsSchema,\n reconnect: z\n .object({\n enabled: z.boolean(),\n maxAttempts: z.number().positive().optional(),\n delayMs: z.number().positive().optional(),\n })\n .optional(),\n});\n\n// ============================================================================\n// MCP Service Definition\n// ============================================================================\n\n/**\n * Configuration for an MCP (Model Context Protocol) server.\n *\n * @example\n * ```typescript\n * const mcpService: McpServiceDef = {\n * name: 'DatabaseMCP',\n * type: 'mcp',\n * serverPath: './mcp-servers/database',\n * capabilities: ['query', 'insert', 'update'],\n * };\n * ```\n */\nexport interface McpServiceDef {\n /** Unique service name */\n name: string;\n\n /** Service type */\n type: \"mcp\";\n\n /** Optional description */\n description?: string;\n\n /** Path to MCP server executable or module */\n serverPath: string;\n\n /** List of capabilities/tools exposed by the MCP server */\n capabilities: string[];\n\n /** Environment variables to pass to the MCP server */\n env?: Record<string, string>;\n}\n\nexport const McpServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"mcp\"),\n description: z.string().optional(),\n serverPath: z.string().min(1, \"Server path is required\"),\n capabilities: z\n .array(z.string())\n .min(1, \"At least one capability is required\"),\n env: z.record(z.string()).optional(),\n});\n\n// ============================================================================\n// Union Type: ServiceDefinition\n// ============================================================================\n\n/**\n * Union type for all service definitions.\n */\nexport type ServiceDefinition =\n | RestServiceDef\n | SocketServiceDef\n | McpServiceDef;\n\nexport const ServiceDefinitionSchema = z.discriminatedUnion(\"type\", [\n RestServiceDefSchema,\n SocketServiceDefSchema,\n McpServiceDefSchema,\n]);\n\n// ============================================================================\n// Service Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * ServiceRef - Service can be inline definition OR reference to imported service.\n *\n * Reference format: \"Alias.services.ServiceName\"\n */\nexport type ServiceRef = ServiceDefinition | string;\n\n/**\n * Check if ServiceRef is a reference string.\n */\nexport function isServiceReference(service: ServiceRef): service is string {\n return typeof service === \"string\";\n}\n\n/**\n * Validate service reference format: \"Alias.services.ServiceName\"\n */\nexport const ServiceRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.services\\.[a-zA-Z][a-zA-Z0-9]*$/,\n 'Service reference must be in format \"Alias.services.ServiceName\" (e.g., \"Weather.services.openweather\")',\n );\n\nexport const ServiceRefSchema = z.union([\n ServiceDefinitionSchema,\n ServiceRefStringSchema,\n]);\n\n/**\n * Parse a service reference.\n * @returns { alias, serviceName } or null if not a valid reference\n */\nexport function parseServiceRef(\n ref: string,\n): { alias: string; serviceName: string } | null {\n const match = ref.match(\n /^([A-Z][a-zA-Z0-9]*)\\.services\\.([a-zA-Z][a-zA-Z0-9]*)$/,\n );\n if (!match) return null;\n return { alias: match[1], serviceName: match[2] };\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Check if a service definition is a REST service.\n */\nexport function isRestService(\n service: ServiceDefinition,\n): service is RestServiceDef {\n return service.type === \"rest\";\n}\n\n/**\n * Check if a service definition is a Socket service.\n */\nexport function isSocketService(\n service: ServiceDefinition,\n): service is SocketServiceDef {\n return service.type === \"socket\";\n}\n\n/**\n * Check if a service definition is an MCP service.\n */\nexport function isMcpService(\n service: ServiceDefinition,\n): service is McpServiceDef {\n return service.type === \"mcp\";\n}\n\n/**\n * Get all service names from a list of services.\n */\nexport function getServiceNames(services: ServiceDefinition[]): string[] {\n return services.map((s) => s.name);\n}\n\n/**\n * Find a service by name.\n */\nexport function findService(\n services: ServiceDefinition[],\n name: string,\n): ServiceDefinition | undefined {\n return services.find((s) => s.name.toLowerCase() === name.toLowerCase());\n}\n\n/**\n * Check if a service name exists (case-insensitive).\n */\nexport function hasService(\n services: ServiceDefinition[],\n name: string,\n): boolean {\n return services.some((s) => s.name.toLowerCase() === name.toLowerCase());\n}\n","/**\n * Orbital Type (Self-Contained)\n *\n * Defines the Orbital - the atomic building block of applications.\n * Formula: Orbital = Entity × Traits × Pages\n *\n * An Orbital is a module that exports { entity, traits, pages }.\n * Use `uses` to import other Orbitals and access their components via:\n * - Alias.entity\n * - Alias.traits.TraitName\n * - Alias.pages.PageName\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { Entity } from \"./entity.js\";\nimport { EntitySchema } from \"./entity.js\";\nimport type { Page } from \"./page.js\";\nimport { PageSchema } from \"./page.js\";\nimport type {\n TraitRef,\n EventPayloadField,\n EventScope,\n Trait,\n} from \"./trait.js\";\nimport {\n TraitRefSchema,\n EventPayloadFieldSchema,\n EventScopeSchema,\n TraitSchema,\n} from \"./trait.js\";\nimport type {\n DomainContext,\n DesignPreferences,\n SuggestedGuard,\n ThemeRef,\n} from \"./domain.js\";\nimport {\n DomainContextSchema,\n DesignPreferencesSchema,\n SuggestedGuardSchema,\n ThemeRefSchema,\n} from \"./domain.js\";\nimport type { ServiceRef } from \"./service.js\";\nimport { ServiceRefSchema } from \"./service.js\";\nimport type { Expression } from \"./expression.js\";\nimport { ExpressionSchema } from \"./expression.js\";\n\n// ============================================================================\n// Use Declaration (Import System)\n// ============================================================================\n\n/**\n * UseDeclaration - Import an external Orbital as a namespace.\n *\n * After importing, access components via:\n * - Alias.entity - The entity definition\n * - Alias.traits.TraitName - A specific trait\n * - Alias.pages.PageName - A specific page\n *\n * @example\n * ```json\n * {\n * \"uses\": [\n * { \"from\": \"./health.orb\", \"as\": \"Health\" },\n * { \"from\": \"std/behaviors/game-core\", \"as\": \"GameCore\" }\n * ]\n * }\n * ```\n */\nexport interface UseDeclaration {\n /**\n * Import source path:\n * - \"std/behaviors/game-core\" - Standard library\n * - \"./shared/health.orb\" - Local .orb file (relative path)\n * - \"../common/physics.orb\" - Parent directory .orb file\n * - \"@game-lib/enemies.orb\" - Scoped package (configured base)\n */\n from: string;\n\n /**\n * Alias for accessing imported components.\n * Used as namespace: Alias.entity, Alias.traits.X, Alias.pages.X\n */\n as: string;\n}\n\nexport const UseDeclarationSchema = z.object({\n from: z.string().min(1, \"Import source is required\"),\n as: z\n .string()\n .min(1, \"Alias is required\")\n .regex(\n /^[A-Z][a-zA-Z0-9]*$/,\n 'Alias must be PascalCase (e.g., \"Health\", \"GameCore\")',\n ),\n});\n\n// ============================================================================\n// Entity Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * EntityRef - Entity can be inline definition OR reference to imported entity.\n *\n * Reference format: \"Alias.entity\"\n *\n * @example\n * ```json\n * // Inline\n * { \"entity\": { \"name\": \"Player\", \"fields\": [...] } }\n *\n * // Reference\n * { \"entity\": \"Goblin.entity\" }\n * ```\n */\nexport type EntityRef = Entity | string;\n\n/**\n * Check if EntityRef is a reference string.\n */\nexport function isEntityReference(entity: EntityRef): entity is string {\n return typeof entity === \"string\";\n}\n\n/**\n * Validate entity reference format: \"Alias.entity\"\n */\nexport const EntityRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.entity$/,\n 'Entity reference must be in format \"Alias.entity\" (e.g., \"Goblin.entity\")',\n );\n\nexport const EntityRefSchema = z.union([EntitySchema, EntityRefStringSchema]);\n\n// ============================================================================\n// Page Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * PageRefObject - Reference to imported page with optional path override.\n */\nexport interface PageRefObject {\n /**\n * Reference to imported page: \"Alias.pages.PageName\"\n */\n ref: string;\n\n /**\n * Optional path override.\n * If provided, overrides the original page's path.\n */\n path?: string;\n}\n\n/**\n * PageRef - Page can be inline definition OR reference to imported page.\n *\n * Reference formats:\n * - \"Alias.pages.PageName\" - Simple reference (keeps original path)\n * - { ref: \"Alias.pages.PageName\", path: \"/custom\" } - Reference with path override\n *\n * @example\n * ```json\n * // Inline\n * { \"name\": \"Dashboard\", \"path\": \"/\", ... }\n *\n * // Simple reference\n * \"User.pages.Profile\"\n *\n * // Reference with path override\n * { \"ref\": \"User.pages.Profile\", \"path\": \"/my-profile\" }\n * ```\n */\nexport type PageRef = Page | string | PageRefObject;\n\n/**\n * Check if PageRef is a reference string.\n */\nexport function isPageReferenceString(page: PageRef): page is string {\n return typeof page === \"string\";\n}\n\n/**\n * Check if PageRef is a reference object.\n */\nexport function isPageReferenceObject(page: PageRef): page is PageRefObject {\n return typeof page === \"object\" && \"ref\" in page && !(\"name\" in page);\n}\n\n/**\n * Check if PageRef is a reference (string or object).\n */\nexport function isPageReference(page: PageRef): page is string | PageRefObject {\n return isPageReferenceString(page) || isPageReferenceObject(page);\n}\n\n/**\n * Validate page reference format: \"Alias.pages.PageName\"\n */\nexport const PageRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.pages\\.[A-Z][a-zA-Z0-9]*$/,\n 'Page reference must be in format \"Alias.pages.PageName\" (e.g., \"User.pages.Profile\")',\n );\n\nexport const PageRefObjectSchema = z.object({\n ref: PageRefStringSchema,\n path: z.string().startsWith(\"/\").optional(),\n});\n\nexport const PageRefSchema = z.union([\n PageSchema,\n PageRefStringSchema,\n PageRefObjectSchema,\n]);\n\n// ============================================================================\n// Trait Reference Extensions\n// ============================================================================\n\n/**\n * Extended trait reference format for imported traits.\n *\n * Formats:\n * - \"TraitName\" - Local trait (inline or from uses without alias)\n * - \"Alias.traits.TraitName\" - Imported trait with namespace\n *\n * The existing TraitRef type already supports these via string.\n */\n\n/**\n * Validate trait reference format for imported traits.\n */\nexport const ImportedTraitRefStringSchema = z\n .string()\n .regex(\n /^([A-Z][a-zA-Z0-9]*\\.traits\\.)?[A-Z][a-zA-Z0-9]*$/,\n 'Trait reference must be \"TraitName\" or \"Alias.traits.TraitName\"',\n );\n\n/**\n * Check if a trait reference is an imported reference (has Alias.traits. prefix)\n */\nexport function isImportedTraitRef(ref: string): boolean {\n return /^[A-Z][a-zA-Z0-9]*\\.traits\\.[A-Z][a-zA-Z0-9]*$/.test(ref);\n}\n\n/**\n * Parse an imported trait reference.\n * @returns { alias, traitName } or null if not an imported ref\n */\nexport function parseImportedTraitRef(\n ref: string,\n): { alias: string; traitName: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.traits\\.([A-Z][a-zA-Z0-9]*)$/);\n if (!match) return null;\n return { alias: match[1], traitName: match[2] };\n}\n\n/**\n * Parse an entity reference.\n * @returns { alias } or null if not a valid reference\n */\nexport function parseEntityRef(ref: string): { alias: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.entity$/);\n if (!match) return null;\n return { alias: match[1] };\n}\n\n/**\n * Parse a page reference.\n * @returns { alias, pageName } or null if not a valid reference\n */\nexport function parsePageRef(\n ref: string,\n): { alias: string; pageName: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.pages\\.([A-Z][a-zA-Z0-9]*)$/);\n if (!match) return null;\n return { alias: match[1], pageName: match[2] };\n}\n\n// ============================================================================\n// Event Listener (Legacy)\n// ============================================================================\n\n/**\n * Event listener for cross-orbital communication (legacy format).\n * @deprecated Use trait-level listens with scope instead.\n */\nexport interface EventListener {\n /** Event key to listen for */\n event: string;\n /** Action to trigger */\n triggers: string;\n /** Optional guard condition */\n guard?: string;\n}\n\nexport const EventListenerSchema = z.object({\n event: z.string().min(1),\n triggers: z.string().min(1),\n guard: z.string().optional(),\n});\n\n// ============================================================================\n// Computed Event Contract (Trait-Centric Model)\n// ============================================================================\n\n/**\n * Source of an event - which trait/transition/tick emits it.\n */\nexport interface EventSource {\n /** Trait that emits this event */\n trait: string;\n /** Transition that emits this event (if applicable) */\n transition?: string;\n /** Tick that emits this event (if applicable) */\n tick?: string;\n}\n\nexport const EventSourceSchema = z.object({\n trait: z.string().min(1),\n transition: z.string().optional(),\n tick: z.string().optional(),\n});\n\n/**\n * Computed event contract with source tracking.\n * Generated by aggregating trait-level emits with namespacing.\n */\nexport interface ComputedEventContract {\n /** Namespaced event: \"TraitName.EVENT_NAME\" */\n event: string;\n /** Original event name without namespace */\n originalEvent: string;\n /** Source trait that emits this event */\n source: EventSource;\n /** Human-readable description */\n description?: string;\n /** Payload schema */\n payload?: EventPayloadField[];\n}\n\nexport const ComputedEventContractSchema = z.object({\n event: z.string().min(1),\n originalEvent: z.string().min(1),\n source: EventSourceSchema,\n description: z.string().optional(),\n payload: z.array(EventPayloadFieldSchema).optional(),\n});\n\n/**\n * Computed event listener with source tracking.\n * Generated by aggregating trait-level listens.\n */\nexport interface ComputedEventListener {\n /** Event to listen for (may be namespaced) */\n event: string;\n /** Source trait that defines this listener */\n source: EventSource;\n /** State machine event to trigger */\n triggers: string;\n /** Guard expression */\n guard?: Expression;\n /** Payload field mapping */\n payloadMapping?: Record<string, string>;\n}\n\nexport const ComputedEventListenerSchema = z.object({\n event: z.string().min(1),\n source: EventSourceSchema,\n triggers: z.string().min(1),\n guard: ExpressionSchema.optional(),\n payloadMapping: z.record(z.string()).optional(),\n});\n\n// ============================================================================\n// Orbital\n// ============================================================================\n\n/**\n * Orbital - The atomic building block of applications.\n *\n * Formula: Orbital = Entity × Traits × Pages\n *\n * An orbital is a self-contained feature unit that groups:\n * - One entity (the data nucleus) - inline OR referenced via \"Alias.entity\"\n * - Zero or more traits (behavioral patterns) - inline OR referenced via \"Alias.traits.X\"\n * - Zero or more pages (UI entry points) - inline OR referenced via \"Alias.pages.X\"\n *\n * Use `uses` to import other orbitals and access their components.\n */\nexport type Orbital = OrbitalDefinition;\n\nexport interface OrbitalDefinition {\n /** Human-readable name */\n name: string;\n\n /** Optional description */\n description?: string;\n\n /** Visual prompt override */\n visual_prompt?: string;\n\n // ========================================================================\n // Import System (Unified Reference)\n // ========================================================================\n\n /**\n * Import external orbitals as namespaces.\n *\n * After importing, access components via:\n * - Alias.entity - The entity definition\n * - Alias.traits.TraitName - A specific trait\n * - Alias.pages.PageName - A specific page\n * - Alias.theme - The theme definition\n * - Alias.services.ServiceName - A specific service\n *\n * @example\n * ```json\n * \"uses\": [\n * { \"from\": \"./health.orb\", \"as\": \"Health\" },\n * { \"from\": \"std/behaviors/game-core\", \"as\": \"GameCore\" }\n * ]\n * ```\n */\n uses?: UseDeclaration[];\n\n // ========================================================================\n // Theme & Services\n // ========================================================================\n\n /**\n * Theme definition (inline OR reference via \"Alias.theme\").\n *\n * @example\n * ```json\n * // Inline\n * \"theme\": { \"name\": \"ocean\", \"tokens\": { \"colors\": { \"primary\": \"#0ea5e9\" } } }\n *\n * // Reference\n * \"theme\": \"Ocean.theme\"\n * ```\n */\n theme?: ThemeRef;\n\n /**\n * Service definitions (inline OR reference via \"Alias.services.ServiceName\").\n *\n * @example\n * ```json\n * // Inline\n * \"services\": [{ \"name\": \"weather\", \"type\": \"rest\", \"baseUrl\": \"...\" }]\n *\n * // Reference\n * \"services\": [\"Weather.services.openweather\"]\n * ```\n */\n services?: ServiceRef[];\n\n // ========================================================================\n // Components (Inline OR Reference)\n // ========================================================================\n\n /**\n * Entity definition (nucleus).\n *\n * Can be:\n * - Inline: Full entity definition\n * - Reference: \"Alias.entity\" (from uses)\n *\n * Entity sharing depends on persistence type:\n * - persistent: Shared (same DB collection)\n * - runtime: Isolated (each orbital gets own instances)\n * - singleton: Shared (single global instance)\n */\n entity: EntityRef;\n\n /** Trait references (local or imported via \"Alias.traits.TraitName\") */\n traits: TraitRef[];\n\n /**\n * Page definitions.\n *\n * Can be:\n * - Inline: Full page definition\n * - Reference string: \"Alias.pages.PageName\"\n * - Reference object: { ref: \"Alias.pages.PageName\", path: \"/custom\" }\n */\n pages: PageRef[];\n\n // ========================================================================\n // Event Interface (Trait-Centric Model)\n // ========================================================================\n\n /**\n * Events this orbital emits.\n *\n * COMPUTED from trait-level emits:\n * - Aggregated from all traits with `scope: 'external'`\n * - Namespaced as \"TraitName.EVENT_NAME\"\n * - Filtered by `exposes` if present\n *\n * Do not author directly - computed by resolver.\n */\n emits?: ComputedEventContract[];\n\n /**\n * Events this orbital listens for.\n *\n * COMPUTED from trait-level listens:\n * - Aggregated from all traits with `scope: 'external'`\n *\n * Do not author directly - computed by resolver.\n */\n listens?: ComputedEventListener[];\n\n /**\n * Filter which trait events are exposed externally.\n * If omitted, all external-scoped trait events are exposed.\n * Format: [\"TraitName.EVENT_NAME\", ...]\n */\n exposes?: string[];\n\n // ========================================================================\n // Context fields - persisted throughout orbital lifecycle\n // ========================================================================\n\n /** Domain context - category, vocabulary, personas */\n domainContext?: DomainContext;\n\n /** Design preferences - style, colors, UX hints */\n design?: DesignPreferences;\n\n /**\n * Suggested guards (decomposition phase only).\n * Natural language descriptions that generator converts to S-expressions.\n * Removed after generation - guards live in traits.\n */\n suggestedGuards?: SuggestedGuard[];\n}\n\nexport const OrbitalDefinitionSchema = z.object({\n name: z.string().min(1, \"Orbital name is required\"),\n description: z.string().optional(),\n visual_prompt: z.string().optional(),\n // Import system\n uses: z.array(UseDeclarationSchema).optional(),\n // Theme & Services\n theme: ThemeRefSchema.optional(),\n services: z.array(ServiceRefSchema).optional(),\n // Components (inline or reference)\n entity: EntityRefSchema,\n traits: z.array(TraitRefSchema),\n pages: z.array(PageRefSchema),\n // Event interface (trait-centric model) - computed by resolver\n emits: z.array(ComputedEventContractSchema).optional(),\n listens: z.array(ComputedEventListenerSchema).optional(),\n // Filter for exposed events (trait-centric model)\n exposes: z.array(z.string()).optional(),\n // Context fields - persisted throughout orbital lifecycle\n domainContext: DomainContextSchema.optional(),\n design: DesignPreferencesSchema.optional(),\n suggestedGuards: z.array(SuggestedGuardSchema).optional(),\n});\n\nexport const OrbitalSchema = OrbitalDefinitionSchema;\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if an Orbital is a full definition.\n * @deprecated No longer needed since Orbital is always OrbitalDefinition now.\n */\nexport function isOrbitalDefinition(\n orbital: Orbital,\n): orbital is OrbitalDefinition {\n return \"entity\" in orbital;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type OrbitalInput = z.input<typeof OrbitalSchema>;\n\n// Backward compatibility\nexport type OrbitalUnit = Orbital;\nexport const OrbitalUnitSchema = OrbitalSchema;\n","/**\n * Orbital Schema Type (Self-Contained)\n *\n * Defines the OrbitalSchema - the top-level application definition.\n * An application is a composition of orbitals: App = Σ(Orbitals)\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { Orbital } from \"./orbital.js\";\nimport { OrbitalSchema as OrbitalZodSchema } from \"./orbital.js\";\nimport type {\n DomainContext,\n DesignPreferences,\n DesignTokens,\n CustomPatternMap,\n} from \"./domain.js\";\nimport {\n DomainContextSchema,\n DesignPreferencesSchema,\n DesignTokensSchema,\n CustomPatternMapSchema,\n} from \"./domain.js\";\nimport type { ServiceDefinition } from \"./service.js\";\nimport { ServiceDefinitionSchema } from \"./service.js\";\n\n// ============================================================================\n// Orbital Config\n// ============================================================================\n\n/**\n * Global configuration for the application\n */\nexport interface OrbitalConfig {\n /** Theme configuration */\n theme?: {\n primary?: string;\n secondary?: string;\n mode?: \"light\" | \"dark\" | \"system\";\n };\n /** Feature flags */\n features?: Record<string, boolean>;\n /** API configuration */\n api?: {\n baseUrl?: string;\n timeout?: number;\n };\n}\n\nexport const OrbitalConfigSchema = z.object({\n theme: z\n .object({\n primary: z.string().optional(),\n secondary: z.string().optional(),\n mode: z.enum([\"light\", \"dark\", \"system\"]).optional(),\n })\n .optional(),\n features: z.record(z.boolean()).optional(),\n api: z\n .object({\n baseUrl: z.string().optional(),\n timeout: z.number().optional(),\n })\n .optional(),\n});\n\n// ============================================================================\n// Orbital Schema\n// ============================================================================\n\n/**\n * OrbitalSchema - The top-level application definition.\n *\n * An application is a composition of orbitals:\n * App = Σ(Orbitals)\n *\n * Custom traits can be defined at the schema level and referenced\n * by orbitals via TraitRef. This allows LLMs to generate custom\n * traits that aren't in the trait library.\n */\nexport interface OrbitalSchema {\n /** Application name */\n name: string;\n\n /** Description */\n description?: string;\n\n /** Version (semver) */\n version?: string;\n\n /** Domain context - user request + classification */\n domainContext?: DomainContext;\n\n /** Design preferences */\n design?: DesignPreferences;\n\n /**\n * Design tokens - reusable Tailwind class collections.\n * Reference via `token: \"surfaces.glass\"` in patterns.\n */\n designTokens?: DesignTokens;\n\n /**\n * Custom pattern definitions for app-specific reusable patterns.\n * Register custom designs that can be referenced by name.\n */\n customPatterns?: CustomPatternMap;\n\n /** Array of orbitals */\n orbitals: Orbital[];\n\n /** External services */\n services?: ServiceDefinition[];\n\n /** Global config */\n config?: OrbitalConfig;\n}\n\nexport const OrbitalSchemaSchema = z.object({\n name: z.string().min(1, \"Schema name is required\"),\n description: z.string().optional(),\n version: z.string().optional(),\n domainContext: DomainContextSchema.optional(),\n design: DesignPreferencesSchema.optional(),\n designTokens: DesignTokensSchema,\n customPatterns: CustomPatternMapSchema,\n orbitals: z\n .array(OrbitalZodSchema)\n .min(1, \"At least one orbital is required\"),\n services: z.array(ServiceDefinitionSchema).optional(),\n config: OrbitalConfigSchema.optional(),\n});\n\n// ============================================================================\n// Parsing Functions\n// ============================================================================\n\n/**\n * Parse an OrbitalSchema with Zod validation\n */\nexport function parseOrbitalSchema(data: unknown): OrbitalSchema {\n return OrbitalSchemaSchema.parse(data) as OrbitalSchema;\n}\n\n/**\n * Safe parse an OrbitalSchema\n */\nexport function safeParseOrbitalSchema(data: unknown) {\n return OrbitalSchemaSchema.safeParse(data);\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type OrbitalSchemaInput = z.input<typeof OrbitalSchemaSchema>;\nexport type OrbitalConfigInput = z.input<typeof OrbitalConfigSchema>;\n","/**\n * S-Expression Operators\n *\n * Re-exports operator types and data from the canonical @almadar/operators package.\n * This ensures almadar-core stays in sync with the single source of truth.\n *\n * @packageDocumentation\n */\n\n// Re-export everything from the canonical source\nexport {\n // Types\n type OperatorCategory,\n type TargetPlatform,\n type CategoryMeta,\n type OperatorMeta,\n type OperatorsSchema,\n type OperatorStats,\n\n // Data\n OPERATORS_SCHEMA,\n OPERATORS,\n CATEGORIES,\n OPERATOR_NAMES,\n\n // Functions\n getOperatorMeta,\n isKnownOperator,\n isEffectOperator,\n isGuardOperator,\n getOperatorsByCategory,\n getOperatorsForTarget,\n validateOperatorArity,\n getOperatorStats,\n} from '@almadar/operators';\n\n// Legacy alias for backward compatibility with code importing getAllOperators\nimport { OPERATOR_NAMES as _NAMES } from '@almadar/operators';\nexport const getAllOperators = () => _NAMES;\nexport type OperatorName = string;\n","/**\n * S-Expression Bindings\n *\n * Defines binding types and utilities for S-expression context.\n * Bindings are references to values that are resolved at runtime.\n *\n * Core Bindings:\n * - @entity - The linked entity for this trait (e.g., @entity.health)\n * - @payload - Event payload data (e.g., @payload.amount)\n * - @state - Current state machine state\n * - @now - Current timestamp (Date.now())\n *\n * Entity Bindings:\n * - @EntityName.field - Reference to singleton/runtime entity (e.g., @GameConfig.gravity)\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// Re-export core binding utilities from expression.ts\nexport {\n isBinding,\n parseBinding,\n isValidBinding,\n CORE_BINDINGS,\n type CoreBinding,\n type ParsedBinding,\n} from './expression.js';\n\n// ============================================================================\n// Binding Schema\n// ============================================================================\n\n/**\n * Schema for a binding string.\n * Validates that the string starts with @ and has valid format.\n */\nexport const BindingSchema = z.string().refine(\n (val) => {\n if (!val.startsWith('@')) return false;\n const parts = val.slice(1).split('.');\n if (parts.length === 0 || parts[0] === '') return false;\n // All parts must be valid identifiers (alphanumeric + underscore)\n return parts.every((part) => /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(part));\n },\n { message: 'Invalid binding format. Must be @name or @name.path.to.field' }\n);\n\n// ============================================================================\n// Binding Constants\n// ============================================================================\n\n/**\n * Binding documentation for LLM prompts and validation messages.\n */\nexport const BINDING_DOCS = {\n entity: {\n description: 'Reference to the linked entity for this trait',\n examples: ['@entity.health', '@entity.x', '@entity.status'],\n requiresPath: true,\n },\n payload: {\n description: 'Reference to the event payload data',\n examples: ['@payload.amount', '@payload.targetId', '@payload.action'],\n requiresPath: true,\n },\n state: {\n description: 'Current state machine state name',\n examples: ['@state'],\n requiresPath: false,\n },\n now: {\n description: 'Current timestamp in milliseconds',\n examples: ['@now'],\n requiresPath: false,\n },\n} as const;\n\n/**\n * Validation rules for bindings in different contexts.\n */\nexport const BINDING_CONTEXT_RULES = {\n guard: {\n allowed: ['entity', 'payload', 'state', 'now'] as const,\n description: 'Guards can access entity fields, event payload, current state, and time',\n },\n effect: {\n allowed: ['entity', 'payload', 'state', 'now'] as const,\n description: 'Effects can access and modify entity fields, use payload data',\n },\n tick: {\n allowed: ['entity', 'state', 'now'] as const,\n description: 'Ticks can access entity fields, current state, and time (no payload)',\n },\n} as const;\n\nexport type BindingContext = keyof typeof BINDING_CONTEXT_RULES;\n\n// ============================================================================\n// Binding Validation Helpers\n// ============================================================================\n\n/**\n * Check if a binding is valid in a given context.\n *\n * @param binding - Parsed binding\n * @param context - Context where binding is used\n * @returns Error message if invalid, null if valid\n */\nexport function validateBindingInContext(\n binding: { type: 'core' | 'entity'; root: string },\n context: BindingContext\n): string | null {\n const rules = BINDING_CONTEXT_RULES[context];\n\n if (binding.type === 'core') {\n if (!(rules.allowed as readonly string[]).includes(binding.root)) {\n return `Binding @${binding.root} is not allowed in ${context} context. Allowed: ${rules.allowed.join(', ')}`;\n }\n }\n\n // Entity bindings are always allowed (they reference singletons/runtime entities)\n return null;\n}\n\n/**\n * Get all valid binding examples for a context.\n *\n * @param context - Context to get examples for\n * @returns Array of example binding strings\n */\nexport function getBindingExamples(context: BindingContext): string[] {\n const rules = BINDING_CONTEXT_RULES[context];\n const examples: string[] = [];\n\n for (const binding of rules.allowed) {\n const doc = BINDING_DOCS[binding];\n examples.push(...doc.examples);\n }\n\n // Add entity binding example\n examples.push('@GameConfig.gravity', '@Filter.searchTerm');\n\n return examples;\n}\n","/**\n * Interaction Model Types\n *\n * Defines how users interact with entities in the application.\n * Used to drive trait selection and UI slot usage.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Flow Types\n// ============================================================================\n\n/**\n * Create flow - how new items are created\n */\nexport type CreateFlow = 'modal' | 'page' | 'inline' | 'none';\n\n/**\n * Edit flow - how items are edited\n */\nexport type EditFlow = 'modal' | 'page' | 'inline' | 'none';\n\n/**\n * View flow - how item details are viewed\n */\nexport type ViewFlow = 'drawer' | 'page' | 'modal' | 'inline' | 'none';\n\n/**\n * Delete flow - how items are deleted\n */\nexport type DeleteFlow = 'confirm' | 'instant' | 'none';\n\n/**\n * List interaction - what happens when clicking list items\n */\nexport type ListInteraction = 'click-to-view' | 'click-to-edit' | 'inline-edit';\n\n// ============================================================================\n// Interaction Model\n// ============================================================================\n\n/**\n * InteractionModel - defines how users interact with entities.\n *\n * This drives:\n * - Which traits to attach (EntityManagement, ModalEdit, etc.)\n * - How render_ui effects target slots (modal, drawer, page)\n * - What UI patterns to use\n */\nexport interface InteractionModel {\n /** How new items are created */\n createFlow: CreateFlow;\n\n /** How items are edited */\n editFlow: EditFlow;\n\n /** How item details are viewed */\n viewFlow: ViewFlow;\n\n /** How items are deleted */\n deleteFlow: DeleteFlow;\n\n /** What happens when clicking list items */\n listInteraction?: ListInteraction;\n\n /** Enable bulk actions (select multiple, delete all) */\n bulkActions?: boolean;\n\n /** Enable real-time updates */\n realtime?: boolean;\n}\n\nexport const InteractionModelSchema = z.object({\n createFlow: z.enum(['modal', 'page', 'inline', 'none']),\n editFlow: z.enum(['modal', 'page', 'inline', 'none']),\n viewFlow: z.enum(['drawer', 'page', 'modal', 'inline', 'none']),\n deleteFlow: z.enum(['confirm', 'instant', 'none']),\n listInteraction: z.enum(['click-to-view', 'click-to-edit', 'inline-edit']).optional(),\n bulkActions: z.boolean().optional(),\n realtime: z.boolean().optional(),\n});\n\n// ============================================================================\n// Default Models per Domain\n// ============================================================================\n\n/**\n * Default interaction models for each domain type\n */\nexport const DEFAULT_INTERACTION_MODELS: Record<string, InteractionModel> = {\n business: {\n createFlow: 'modal',\n editFlow: 'modal',\n viewFlow: 'drawer',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n bulkActions: true,\n },\n game: {\n createFlow: 'none',\n editFlow: 'none',\n viewFlow: 'none',\n deleteFlow: 'none',\n realtime: true,\n },\n form: {\n createFlow: 'inline',\n editFlow: 'inline',\n viewFlow: 'none',\n deleteFlow: 'none',\n },\n dashboard: {\n createFlow: 'modal',\n editFlow: 'modal',\n viewFlow: 'drawer',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n },\n content: {\n createFlow: 'page',\n editFlow: 'page',\n viewFlow: 'page',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n },\n};\n\n/**\n * Get the default interaction model for a domain\n */\nexport function getInteractionModelForDomain(domain: string): InteractionModel {\n return DEFAULT_INTERACTION_MODELS[domain] ?? DEFAULT_INTERACTION_MODELS.business;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type InteractionModelInput = z.input<typeof InteractionModelSchema>;\n","/**\n * Pattern Type for Orbital Units\n *\n * Re-exports pattern type definitions from @almadar/patterns,\n * which is the single source of truth for all pattern types.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Pattern Type - Re-exported from @almadar/patterns\n// ============================================================================\n\n/**\n * All valid pattern type names, imported from the almadar-patterns registry.\n * The authoritative list is auto-generated from patterns-registry.json.\n */\nexport {\n PATTERN_TYPES,\n isValidPatternType,\n} from '@almadar/patterns';\nexport type { PatternType } from '@almadar/patterns';\n\n/**\n * Zod schema for pattern types.\n * Accepts any string - validation against full registry happens at runtime.\n */\nexport const PatternTypeSchema = z.string();\n\n// Re-export for backward compatibility\nimport { PATTERN_TYPES as _PATTERN_TYPES } from '@almadar/patterns';\n\n/**\n * Get all valid pattern types from the registry.\n * Delegates to @almadar/patterns which is the SSOT.\n */\nexport function getAllPatternTypes(): string[] {\n return [..._PATTERN_TYPES];\n}\n","/**\n * Shared Intermediate Representation Types\n *\n * Unified IR types used by both the compiler and runtime.\n * This is the single source of truth for IR structures.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from './expression.js';\n\n// ============================================================================\n// Transition Types\n// ============================================================================\n\n/**\n * Transition source state specification.\n * - string: Single state name (e.g., 'Idle')\n * - '*': Wildcard - matches any current state\n * - string[]: Array of states - matches any of the listed states\n */\nexport type TransitionFrom = string | '*' | string[];\n\n// ============================================================================\n// Field Types\n// ============================================================================\n\nexport interface ResolvedField {\n name: string;\n type: string;\n tsType: string;\n description?: string;\n default?: unknown;\n required: boolean;\n validation?: unknown;\n /** Enum values for enum or constrained string fields */\n values?: string[];\n /** Enum values (alias for values, for compatibility) */\n enumValues?: string[];\n /** Relation configuration for foreign key references */\n relation?: {\n entity: string;\n cardinality?: string;\n field?: string;\n };\n}\n\n// ============================================================================\n// Entity Types\n// ============================================================================\n\nexport interface ResolvedEntity {\n name: string;\n description?: string;\n icon?: string;\n collection: string;\n fields: ResolvedField[];\n\n /** Whether this entity only exists in runtime (not persisted to Firestore) */\n runtime?: boolean;\n\n /** Whether this is a singleton entity (only one instance exists) */\n singleton?: boolean;\n\n /** Whether this entity has pre-authored instances in the schema */\n hasInstances?: boolean;\n\n /** Pre-authored instances from the schema (seed data or static reference data) */\n instances?: Record<string, unknown>[];\n\n /** Default field values from schema (for spawning singletons) */\n defaults?: Record<string, unknown>;\n\n // Cross-references\n usedByTraits: string[];\n usedByPages: string[];\n}\n\nexport interface ResolvedEntityBinding {\n /** Binding name in code */\n name: string;\n\n /** Entity being bound */\n entity: ResolvedEntity;\n\n /** CRUD operations to generate */\n operations: ('list' | 'get' | 'create' | 'update' | 'delete')[];\n}\n\n// ============================================================================\n// Trait Types\n// ============================================================================\n\nexport interface ResolvedTraitState {\n name: string;\n isInitial: boolean;\n isFinal: boolean;\n}\n\nexport interface ResolvedTraitEvent {\n key: string;\n name: string;\n payload?: Record<string, string>;\n}\n\nexport interface ResolvedTraitTransition {\n /** Source state(s): string, '*' for wildcard, or array of states */\n from: TransitionFrom;\n to: string;\n event: string;\n guard?: SExpr;\n effects: SExpr[];\n}\n\nexport interface ResolvedTraitGuard {\n name: string;\n condition: SExpr;\n}\n\nexport interface ResolvedTraitTick {\n name: string;\n interval: number | 'frame';\n guard?: SExpr;\n effects: SExpr[];\n priority: number;\n appliesTo: string[];\n}\n\nexport interface ResolvedTraitListener {\n event: string;\n triggers: string;\n guard?: SExpr;\n}\n\nexport interface ResolvedTraitDataEntity {\n name: string;\n fields: ResolvedField[];\n runtime: boolean;\n singleton: boolean;\n}\n\n/**\n * UI binding for interaction traits - maps states to presentations\n */\nexport interface ResolvedTraitUIBinding {\n [stateName: string]: {\n /** Presentation type: modal, drawer, popover, inline, confirm-dialog */\n presentation: string;\n /** Content pattern(s) to render */\n content: Record<string, unknown> | Record<string, unknown>[];\n /** Presentation props */\n props?: {\n size?: string;\n position?: string;\n title?: string;\n closable?: boolean;\n width?: string;\n showProgress?: boolean;\n step?: number;\n totalSteps?: number;\n };\n };\n}\n\n/**\n * Fully resolved trait - expanded from schema OR library.\n * The compiler generates code from this structure universally,\n * without knowing which specific trait it is.\n */\nexport interface ResolvedTrait {\n /** Unique trait identifier */\n name: string;\n\n /** Human-readable description */\n description?: string;\n\n /** Where this trait came from */\n source: 'schema' | 'library' | 'inline';\n\n /** Category for organizing traits */\n category?: 'lifecycle' | 'temporal' | 'validation' | 'notification' | 'integration' | 'interaction' |\n 'game-core' | 'game-character' | 'game-ai' | 'game-combat' | 'game-items' | 'game-cards' | 'game-board' | 'game-puzzle';\n\n // State Machine (all optional - not all traits have state machines)\n states: ResolvedTraitState[];\n events: ResolvedTraitEvent[];\n transitions: ResolvedTraitTransition[];\n guards: ResolvedTraitGuard[];\n\n // Behavior\n ticks: ResolvedTraitTick[];\n\n // Communication\n listens: ResolvedTraitListener[];\n\n // Data\n dataEntities: ResolvedTraitDataEntity[];\n\n // Instance configuration (from page binding)\n config?: Record<string, unknown>;\n\n // UI Bindings for interaction traits\n ui?: ResolvedTraitUIBinding;\n}\n\n/**\n * Trait binding on a page - links a resolved trait to the page\n */\nexport interface ResolvedTraitBinding {\n /** Reference name */\n ref?: string;\n\n /** Fully resolved trait */\n trait: ResolvedTrait;\n\n /** Entity this trait operates on (if any) */\n linkedEntity?: string;\n\n /** Instance configuration */\n config?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Pattern & Section Types\n// ============================================================================\n\nexport interface ResolvedPattern {\n /** Pattern type (e.g., 'page-header', 'entity-list', 'game-canvas') */\n type: string;\n\n /** Pattern configuration */\n config: Record<string, unknown>;\n\n /** Shell component to use */\n shellComponent?: string;\n}\n\nexport interface ResolvedSectionEvent {\n event: string;\n action: string;\n target?: string;\n}\n\nexport interface ResolvedSection {\n /** Section identifier */\n id: string;\n\n /** Resolved pattern */\n pattern: ResolvedPattern;\n\n /** Events emitted by this section */\n events: ResolvedSectionEvent[];\n\n /** Position in page layout */\n position?: number;\n\n /** Entity binding for this section */\n binding?: ResolvedEntityBinding;\n}\n\n// ============================================================================\n// Page Types\n// ============================================================================\n\nexport interface ResolvedNavigation {\n event?: string;\n from?: string;\n to: string;\n trigger?: string;\n params?: Record<string, string>;\n label?: string;\n path?: string;\n icon?: string;\n}\n\nexport interface ResolvedPage {\n /** Page identifier */\n name: string;\n\n /** URL path */\n path: string;\n\n /** Feature folder name */\n featureName: string;\n\n /** Layout component */\n layout?: string;\n\n /** View type (dashboard, list, detail, create, edit) */\n viewType?: 'dashboard' | 'list' | 'detail' | 'create' | 'edit';\n\n /** Resolved sections */\n sections: ResolvedSection[];\n\n /** Resolved trait bindings */\n traits: ResolvedTraitBinding[];\n\n /** Entity data bindings */\n entityBindings: ResolvedEntityBinding[];\n\n /** Navigation wiring */\n navigation: ResolvedNavigation[];\n\n /** Singleton entities to spawn on this page (runtime singletons) */\n singletonEntities: ResolvedEntity[];\n}\n\n// ============================================================================\n// IR Types\n// ============================================================================\n\n/**\n * Complete resolved IR - all references expanded\n */\nexport interface ResolvedIR {\n /** App name */\n appName: string;\n\n /** App description */\n description?: string;\n\n /** App version */\n version?: string;\n\n /** All resolved entities (Map for lookup) */\n entities: Map<string, ResolvedEntity>;\n\n /** All resolved traits (Map for lookup) */\n traits: Map<string, ResolvedTrait>;\n\n /** All resolved pages (Map for lookup) */\n pages: Map<string, ResolvedPage>;\n\n /** Entity bindings (used for data hook generation) */\n entityBindings: ResolvedEntityBinding[];\n\n /** Raw data entities (used for instance data generation) */\n rawEntities?: unknown[];\n\n /** Generation timestamp */\n generatedAt: string;\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create an empty resolved trait with defaults\n */\nexport function createEmptyResolvedTrait(name: string, source: 'schema' | 'library' | 'inline'): ResolvedTrait {\n return {\n name,\n source,\n states: [],\n events: [],\n transitions: [],\n guards: [],\n ticks: [],\n listens: [],\n dataEntities: [],\n };\n}\n\n/**\n * Create an empty resolved page with defaults\n */\nexport function createEmptyResolvedPage(name: string): ResolvedPage {\n return {\n name,\n path: `/${name.toLowerCase()}`,\n featureName: name.toLowerCase(),\n sections: [],\n traits: [],\n entityBindings: [],\n navigation: [],\n singletonEntities: [],\n };\n}\n\n/**\n * Infer TypeScript type from schema type\n */\nexport function inferTsType(schemaType: string): string {\n const typeMap: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n date: 'Date',\n datetime: 'Date',\n timestamp: 'number',\n array: 'unknown[]',\n object: 'Record<string, unknown>',\n any: 'unknown',\n };\n\n // Handle array types like \"string[]\"\n if (schemaType.endsWith('[]')) {\n const baseType = schemaType.slice(0, -2);\n return `${typeMap[baseType] || baseType}[]`;\n }\n\n return typeMap[schemaType] || schemaType;\n}\n\n/**\n * Create a resolved field with TypeScript type inference\n */\nexport function createResolvedField(field: {\n name: string;\n type: string;\n description?: string;\n default?: unknown;\n required?: boolean;\n validation?: unknown;\n values?: string[];\n}): ResolvedField {\n return {\n name: field.name,\n type: field.type,\n tsType: inferTsType(field.type),\n description: field.description,\n default: field.default,\n required: field.required ?? false,\n validation: field.validation,\n values: field.values,\n };\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isResolvedIR(ir: unknown): ir is ResolvedIR {\n if (!ir || typeof ir !== 'object') return false;\n const r = ir as ResolvedIR;\n return typeof r.appName === 'string' && r.traits instanceof Map && r.pages instanceof Map;\n}\n","/**\n * Schema Resolver\n *\n * Converts OrbitalSchema to Intermediate Representation (IR).\n * Resolves all entity references, expands traits, and prepares schema for compilation/runtime.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema } from './types/schema.js';\nimport type { Orbital, Trait, Page, PageTraitRef, Entity } from './types/index.js';\nimport type { ResolvedIR, ResolvedPage, ResolvedEntity, ResolvedTrait } from './types/ir.js';\n\n// ============================================================================\n// Cache\n// ============================================================================\n\n/**\n * Cache for resolved schemas (keyed by schema name + version)\n */\nconst schemaCache = new Map<string, ResolvedIR>();\n\n/**\n * Clear the schema resolution cache.\n * Useful for hot-reloading during development.\n */\nexport function clearSchemaCache(): void {\n schemaCache.clear();\n}\n\n/**\n * Get cache statistics (for debugging)\n */\nexport function getSchemaCacheStats() {\n return {\n size: schemaCache.size,\n keys: Array.from(schemaCache.keys()),\n };\n}\n\n// ============================================================================\n// Schema to IR Conversion\n// ============================================================================\n\n/**\n * Convert OrbitalSchema to Intermediate Representation (IR).\n *\n * This function:\n * 1. Resolves all entity references\n * 2. Expands trait definitions (inline or from library)\n * 3. Resolves page bindings\n * 4. Creates the IR structure used by compiler and runtime\n *\n * @param schema - OrbitalSchema to convert\n * @param useCache - Whether to use cached result (default: true)\n * @returns Fully resolved IR\n *\n * @example\n * const schema = { name: 'MyApp', orbitals: [...] };\n * const ir = schemaToIR(schema);\n * console.log(ir.entities.size); // Number of entities\n * console.log(ir.pages.size); // Number of pages\n */\nexport function schemaToIR(schema: OrbitalSchema, useCache: boolean = true): ResolvedIR {\n // Generate cache key\n const cacheKey = `${schema.name}-${schema.version || '1.0.0'}`;\n\n // Check cache\n if (useCache && schemaCache.has(cacheKey)) {\n return schemaCache.get(cacheKey)!;\n }\n\n // Create empty IR structure\n const ir: ResolvedIR = {\n appName: schema.name,\n description: schema.description,\n version: schema.version || '1.0.0',\n entities: new Map<string, ResolvedEntity>(),\n traits: new Map<string, ResolvedTrait>(),\n pages: new Map<string, ResolvedPage>(),\n entityBindings: [],\n generatedAt: new Date().toISOString(),\n };\n\n // Process each orbital\n for (const orbital of schema.orbitals as Orbital[]) {\n // Resolve entity if present\n if (orbital.entity && typeof orbital.entity !== 'string') {\n const entityDef = orbital.entity as Entity;\n const entity: ResolvedEntity = {\n name: entityDef.name,\n description: entityDef.description,\n icon: (entityDef as any).icon, // Optional icon (may not exist on type)\n collection: entityDef.collection || entityDef.name.toLowerCase() + 's',\n fields: (entityDef.fields || []).map((field: any) => ({\n name: field.name,\n type: field.type,\n tsType: inferTsType(field.type),\n description: field.description,\n default: field.default,\n required: field.required ?? false,\n values: field.values,\n enumValues: field.values,\n relation: field.relation,\n })),\n runtime: entityDef.persistence === 'runtime',\n singleton: entityDef.persistence === 'singleton',\n hasInstances: (entityDef.instances?.length ?? 0) > 0,\n instances: entityDef.instances,\n defaults: (entityDef as any).defaults, // Optional defaults (may not exist on type)\n usedByTraits: [],\n usedByPages: [],\n };\n ir.entities.set(entity.name, entity);\n }\n\n // Resolve traits\n for (const trait of (orbital.traits || []) as Trait[]) {\n const resolvedTrait: ResolvedTrait = {\n name: trait.name,\n description: trait.description,\n source: 'schema',\n category: trait.category,\n states: (trait.stateMachine?.states || []).map((s: any) => ({\n name: s.name,\n isInitial: s.isInitial ?? false,\n isFinal: s.isFinal ?? s.isTerminal ?? false,\n })),\n events: (trait.stateMachine?.events || []).map((e: any) => ({\n key: typeof e === 'string' ? e : e.key || e.name,\n name: typeof e === 'string' ? e : e.name,\n payload: typeof e === 'object' && 'payloadSchema' in e ?\n (e.payloadSchema as any) : undefined,\n })),\n transitions: (trait.stateMachine?.transitions || []).map((t: any) => ({\n from: t.from,\n to: t.to,\n event: t.event,\n guard: t.guard,\n effects: t.effects || [],\n })),\n guards: [],\n ticks: [],\n listens: ((trait as any).listens || []).map((l: any) => ({\n event: l.event,\n triggers: l.triggers,\n guard: l.guard,\n })),\n dataEntities: [],\n };\n ir.traits.set(trait.name, resolvedTrait);\n }\n\n // Resolve pages\n for (const page of (orbital.pages || []) as Page[]) {\n const resolvedPage: ResolvedPage = {\n name: page.name,\n path: page.path,\n featureName: page.name.toLowerCase(),\n viewType: page.viewType && ['list', 'detail', 'create', 'edit', 'dashboard'].includes(page.viewType) ?\n page.viewType as ('list' | 'detail' | 'create' | 'edit' | 'dashboard') : undefined,\n sections: [],\n traits: (page.traits || []).map((traitRef: PageTraitRef) => ({\n ref: typeof traitRef === 'string' ? traitRef : traitRef.ref,\n trait: resolveTraitRef(traitRef, ir.traits, orbital.traits as Trait[] || []),\n linkedEntity: typeof traitRef === 'object' && 'linkedEntity' in traitRef ?\n (traitRef as any).linkedEntity :\n (orbital.entity ? (typeof orbital.entity === 'string' ? (orbital.entity as string).replace('.entity', '') : (orbital.entity as Entity).name) : undefined),\n config: typeof traitRef === 'object' && 'config' in traitRef ?\n (traitRef as any).config : undefined,\n })),\n entityBindings: [],\n navigation: [],\n singletonEntities: [],\n };\n ir.pages.set(page.name, resolvedPage);\n }\n }\n\n // Cache result\n if (useCache) {\n schemaCache.set(cacheKey, ir);\n }\n\n return ir;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Infer TypeScript type from schema type\n */\nfunction inferTsType(schemaType: string): string {\n const typeMap: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n date: 'Date',\n datetime: 'Date',\n timestamp: 'number',\n array: 'unknown[]',\n object: 'Record<string, unknown>',\n any: 'unknown',\n };\n\n // Handle array types like \"string[]\"\n if (schemaType.endsWith('[]')) {\n const baseType = schemaType.slice(0, -2);\n return `${typeMap[baseType] || baseType}[]`;\n }\n\n return typeMap[schemaType] || schemaType;\n}\n\n/**\n * Resolve a trait reference to a full trait\n */\nfunction resolveTraitRef(\n traitRef: PageTraitRef,\n traitsMap: Map<string, ResolvedTrait>,\n schemaTraits: Trait[]\n): ResolvedTrait {\n const refName = typeof traitRef === 'string' ? traitRef : traitRef.ref || '';\n\n // Try to find in resolved traits\n if (traitsMap.has(refName)) {\n return traitsMap.get(refName)!;\n }\n\n // Try to find in schema traits\n const schemaTrait = schemaTraits.find((t: Trait) => t.name === refName);\n if (schemaTrait) {\n // This is a simplified inline trait\n return {\n name: refName,\n source: 'inline',\n states: [],\n events: [],\n transitions: [],\n guards: [],\n ticks: [],\n listens: [],\n dataEntities: [],\n };\n }\n\n // Fallback: create empty trait\n return {\n name: refName,\n source: 'schema',\n states: [],\n events: [],\n transitions: [],\n guards: [],\n ticks: [],\n listens: [],\n dataEntities: [],\n };\n}\n\n// ============================================================================\n// Page Helpers\n// ============================================================================\n\n/**\n * Get a specific page from resolved IR by name.\n * If no name is provided, returns the first page.\n *\n * @param ir - Resolved IR\n * @param pageName - Optional page name to find\n * @returns Resolved page or undefined\n *\n * @example\n * const ir = schemaToIR(schema);\n * const homePage = getPage(ir, 'HomePage');\n * const firstPage = getPage(ir); // No name = first page\n */\nexport function getPage(ir: ResolvedIR, pageName?: string): ResolvedPage | undefined {\n if (!pageName) {\n // Return first page if no name specified\n return ir.pages.values().next().value;\n }\n return ir.pages.get(pageName);\n}\n\n/**\n * Get all pages from resolved IR as an array\n *\n * @param ir - Resolved IR\n * @returns Array of resolved pages\n */\nexport function getPages(ir: ResolvedIR): ResolvedPage[] {\n return Array.from(ir.pages.values());\n}\n\n/**\n * Get a specific entity from resolved IR by name\n *\n * @param ir - Resolved IR\n * @param entityName - Entity name to find\n * @returns Resolved entity or undefined\n */\nexport function getEntity(ir: ResolvedIR, entityName: string): ResolvedEntity | undefined {\n return ir.entities.get(entityName);\n}\n\n/**\n * Get a specific trait from resolved IR by name\n *\n * @param ir - Resolved IR\n * @param traitName - Trait name to find\n * @returns Resolved trait or undefined\n */\nexport function getTrait(ir: ResolvedIR, traitName: string): ResolvedTrait | undefined {\n return ir.traits.get(traitName);\n}\n","/**\n * Schema Diffing & Protection\n *\n * Pure functions for comparing OrbitalSchema objects, detecting destructive changes,\n * and categorizing removals. No I/O — operates on in-memory schema objects.\n */\n\nimport type { OrbitalSchema } from './types/schema.js';\nimport type {\n SchemaChange,\n ChangeSetDocument,\n CategorizedRemovals,\n PageContentReduction,\n} from './types/changeset.js';\n\n// ============================================================================\n// Schema Diffing\n// ============================================================================\n\n/**\n * Diff two OrbitalSchema objects and produce a list of changes.\n * Compares orbitals, entities, traits, pages, services, and top-level fields.\n */\nexport function diffSchemas(\n before: OrbitalSchema,\n after: OrbitalSchema,\n): { changes: SchemaChange[] } {\n const changes: SchemaChange[] = [];\n let changeId = 0;\n const nextId = () => `change-${++changeId}`;\n\n // Compare top-level fields\n if (before.name !== after.name) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'schema',\n path: ['name'],\n before: before.name,\n after: after.name,\n description: `Renamed schema from \"${before.name}\" to \"${after.name}\"`,\n });\n }\n\n if (before.description !== after.description) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'schema',\n path: ['description'],\n before: before.description,\n after: after.description,\n description: `Modified schema description`,\n });\n }\n\n // Compare orbitals by name\n const beforeOrbitals = new Map(\n (before.orbitals || []).map((o, i) => [o.name, { orbital: o, index: i }]),\n );\n const afterOrbitals = new Map(\n (after.orbitals || []).map((o, i) => [o.name, { orbital: o, index: i }]),\n );\n\n // Detect removed orbitals\n for (const [name, { index }] of beforeOrbitals) {\n if (!afterOrbitals.has(name)) {\n changes.push({\n id: nextId(),\n operation: 'remove',\n target: 'orbital',\n path: ['orbitals', index],\n before: name,\n description: `Removed orbital: ${name}`,\n });\n }\n }\n\n // Detect added orbitals\n for (const [name, { index }] of afterOrbitals) {\n if (!beforeOrbitals.has(name)) {\n changes.push({\n id: nextId(),\n operation: 'add',\n target: 'orbital',\n path: ['orbitals', index],\n after: name,\n description: `Added orbital: ${name}`,\n });\n }\n }\n\n // Detect modified orbitals (deep compare via JSON)\n for (const [name, { orbital: afterOrbital, index }] of afterOrbitals) {\n const beforeEntry = beforeOrbitals.get(name);\n if (beforeEntry) {\n const beforeJson = JSON.stringify(beforeEntry.orbital);\n const afterJson = JSON.stringify(afterOrbital);\n if (beforeJson !== afterJson) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'orbital',\n path: ['orbitals', index],\n description: `Modified orbital: ${name}`,\n });\n\n // Drill into entity changes\n const beforeEntity = beforeEntry.orbital.entity;\n const afterEntity = afterOrbital.entity;\n if (JSON.stringify(beforeEntity) !== JSON.stringify(afterEntity)) {\n const entityName =\n typeof afterEntity === 'string'\n ? afterEntity\n : afterEntity && typeof afterEntity === 'object' && 'name' in afterEntity\n ? (afterEntity as { name: string }).name\n : 'entity';\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'entity',\n path: ['orbitals', index, 'entity'],\n description: `Modified entity: ${entityName}`,\n });\n }\n\n // Drill into trait changes\n const beforeTraits = beforeEntry.orbital.traits || [];\n const afterTraits = afterOrbital.traits || [];\n if (JSON.stringify(beforeTraits) !== JSON.stringify(afterTraits)) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'traits',\n path: ['orbitals', index, 'traits'],\n description: `Modified traits in orbital: ${name}`,\n });\n }\n\n // Drill into page changes\n const beforePages = beforeEntry.orbital.pages || [];\n const afterPages = afterOrbital.pages || [];\n if (JSON.stringify(beforePages) !== JSON.stringify(afterPages)) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'pages',\n path: ['orbitals', index, 'pages'],\n description: `Modified pages in orbital: ${name}`,\n });\n }\n }\n }\n }\n\n // Compare services\n const beforeServices = JSON.stringify(before.services || []);\n const afterServices = JSON.stringify(after.services || []);\n if (beforeServices !== afterServices) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'services',\n path: ['services'],\n description: 'Modified services',\n });\n }\n\n return { changes };\n}\n\n// ============================================================================\n// Destructive Change Detection\n// ============================================================================\n\n/**\n * Check if a changeset contains any removals.\n */\nexport function isDestructiveChange(changeSet: { changes: SchemaChange[] }): boolean {\n return changeSet.changes.some((c) => c.operation === 'remove');\n}\n\n/**\n * Extract all removal operations from a changeset.\n */\nexport function getRemovals(changeSet: { changes: SchemaChange[] }): SchemaChange[] {\n return changeSet.changes.filter((c) => c.operation === 'remove');\n}\n\n/**\n * Categorize removals by severity.\n *\n * - Critical: orbitals, entities, states, pages (require confirmation)\n * - Standard: fields, actions, traits (auto-snapshotted)\n * - Minor: transitions, guards (tracked)\n */\nexport function categorizeRemovals(changeSet: {\n changes: SchemaChange[];\n}): CategorizedRemovals {\n const critical: SchemaChange[] = [];\n const standard: SchemaChange[] = [];\n const minor: SchemaChange[] = [];\n\n for (const change of changeSet.changes) {\n if (change.operation !== 'remove') continue;\n\n const target = change.target.toLowerCase();\n if (\n target === 'orbital' ||\n target === 'entity' ||\n target === 'state' ||\n target === 'page'\n ) {\n critical.push(change);\n } else if (\n target === 'field' ||\n target === 'action' ||\n target === 'trait' ||\n target === 'traits'\n ) {\n standard.push(change);\n } else {\n minor.push(change);\n }\n }\n\n return { critical, standard, minor, pageContentReductions: [] };\n}\n\n/**\n * Check if critical removals require explicit confirmation.\n */\nexport function requiresConfirmation(removals: CategorizedRemovals): boolean {\n return removals.critical.length > 0;\n}\n\n// ============================================================================\n// Page Content Reduction\n// ============================================================================\n\n/**\n * Detect implicit content reduction within pages.\n * Catches cases where a page 'modify' reduces components/actions/displays\n * without an explicit 'remove' operation.\n */\nexport function detectPageContentReduction(\n beforePages: unknown[],\n afterPages: unknown[],\n): PageContentReduction[] {\n const reductions: PageContentReduction[] = [];\n\n const getPageName = (p: unknown): string | null => {\n if (p && typeof p === 'object' && 'name' in p) {\n return (p as { name: string }).name;\n }\n return null;\n };\n\n const countContent = (\n page: unknown,\n ): { sections: number; actions: number } => {\n if (!page || typeof page !== 'object') return { sections: 0, actions: 0 };\n const p = page as Record<string, unknown>;\n const traits = Array.isArray(p.traits) ? p.traits : [];\n return { sections: traits.length, actions: 0 };\n };\n\n // Build maps by name\n const beforeMap = new Map<string, unknown>();\n for (const p of beforePages) {\n const name = getPageName(p);\n if (name) beforeMap.set(name, p);\n }\n\n for (const afterPage of afterPages) {\n const name = getPageName(afterPage);\n if (!name) continue;\n const beforePage = beforeMap.get(name);\n if (!beforePage) continue;\n\n const beforeContent = countContent(beforePage);\n const afterContent = countContent(afterPage);\n\n const sectionsRemoved = beforeContent.sections - afterContent.sections;\n const actionsRemoved = beforeContent.actions - afterContent.actions;\n\n if (sectionsRemoved > 0 || actionsRemoved > 0) {\n reductions.push({\n pageName: name,\n componentsRemoved: sectionsRemoved,\n actionsRemoved,\n displaysRemoved: 0,\n before: beforeContent,\n after: afterContent,\n isSignificant: sectionsRemoved > 0,\n });\n }\n }\n\n return reductions;\n}\n\n/**\n * Check if page content reductions are significant.\n */\nexport function hasSignificantPageReduction(\n reductions: PageContentReduction[],\n): boolean {\n return reductions.some((r) => r.isSignificant);\n}\n","/**\n * Domain Language Tokens\n *\n * Token definitions for the domain language lexer.\n */\n\nexport enum TokenType {\n // Whitespace & Structure\n NEWLINE = 'NEWLINE',\n INDENT = 'INDENT',\n DEDENT = 'DEDENT',\n\n // Template Variables (e.g., {linkedEntity})\n TEMPLATE_VAR = 'TEMPLATE_VAR',\n\n // Keywords - Entity\n A = 'A',\n AN = 'AN',\n IS = 'IS',\n IT = 'IT',\n HAS = 'HAS',\n BELONGS = 'BELONGS',\n TO = 'TO',\n MANY = 'MANY',\n ONE = 'ONE',\n AS = 'AS',\n CAN = 'CAN',\n BE = 'BE',\n STARTS = 'STARTS',\n\n // Keywords - Page\n THE = 'THE',\n SHOWS = 'SHOWS',\n ENTITY = 'ENTITY', // Explicit entity reference for pages\n PURPOSE = 'PURPOSE',\n URL = 'URL',\n DISPLAYS = 'DISPLAYS',\n USERS = 'USERS',\n WHEN = 'WHEN',\n ACCESSED = 'ACCESSED',\n\n // Keywords - Behavior\n LIFECYCLE = 'LIFECYCLE',\n BEHAVIOR = 'BEHAVIOR',\n STATES = 'STATES',\n INITIAL = 'INITIAL',\n TRANSITIONS = 'TRANSITIONS',\n FROM = 'FROM',\n IF = 'IF',\n THEN = 'THEN',\n RULES = 'RULES',\n EVERY = 'EVERY',\n CHECK = 'CHECK',\n\n // Keywords - Guard\n AND = 'AND',\n OR = 'OR',\n NOT = 'NOT',\n PROVIDED = 'PROVIDED',\n EMPTY = 'EMPTY',\n USER = 'USER',\n OWNS = 'OWNS',\n THIS = 'THIS',\n\n // Field Types\n TEXT = 'TEXT',\n LONG_TEXT = 'LONG_TEXT',\n NUMBER = 'NUMBER',\n CURRENCY = 'CURRENCY',\n DATE = 'DATE',\n TIMESTAMP = 'TIMESTAMP',\n YES_NO = 'YES_NO',\n ENUM = 'ENUM',\n LIST = 'LIST',\n\n // Constraints\n REQUIRED = 'REQUIRED',\n UNIQUE = 'UNIQUE',\n AUTO = 'AUTO',\n DEFAULT = 'DEFAULT',\n\n // Operators\n COLON = 'COLON',\n COMMA = 'COMMA',\n PIPE = 'PIPE',\n DOT = 'DOT',\n DASH = 'DASH',\n LBRACKET = 'LBRACKET',\n RBRACKET = 'RBRACKET',\n LPAREN = 'LPAREN',\n RPAREN = 'RPAREN',\n GREATER_THAN = 'GREATER_THAN',\n LESS_THAN = 'LESS_THAN',\n GREATER_EQUAL = 'GREATER_EQUAL',\n LESS_EQUAL = 'LESS_EQUAL',\n EQUALS = 'EQUALS',\n NOT_EQUALS = 'NOT_EQUALS',\n\n // Literals\n IDENTIFIER = 'IDENTIFIER',\n STRING = 'STRING',\n NUMBER_LITERAL = 'NUMBER_LITERAL',\n BOOLEAN = 'BOOLEAN',\n\n // Special\n EOF = 'EOF',\n ERROR = 'ERROR',\n}\n\nexport interface Token {\n type: TokenType;\n value: string;\n line: number;\n column: number;\n offset: number;\n}\n\n// Keyword mappings (case-insensitive)\nexport const KEYWORDS: Record<string, TokenType> = {\n 'a': TokenType.A,\n 'an': TokenType.AN,\n 'is': TokenType.IS,\n 'it': TokenType.IT,\n 'has': TokenType.HAS,\n 'belongs': TokenType.BELONGS,\n 'to': TokenType.TO,\n 'many': TokenType.MANY,\n 'one': TokenType.ONE,\n 'as': TokenType.AS,\n 'can': TokenType.CAN,\n 'be': TokenType.BE,\n 'starts': TokenType.STARTS,\n 'the': TokenType.THE,\n 'shows': TokenType.SHOWS,\n 'entity': TokenType.ENTITY,\n 'purpose': TokenType.PURPOSE,\n 'url': TokenType.URL,\n 'displays': TokenType.DISPLAYS,\n 'users': TokenType.USERS,\n 'when': TokenType.WHEN,\n 'on': TokenType.WHEN, // \"on EVENT\" is equivalent to \"when EVENT\"\n 'accessed': TokenType.ACCESSED,\n 'lifecycle': TokenType.LIFECYCLE,\n 'behavior': TokenType.BEHAVIOR,\n 'states': TokenType.STATES,\n 'initial': TokenType.INITIAL,\n 'transitions': TokenType.TRANSITIONS,\n 'from': TokenType.FROM,\n 'if': TokenType.IF,\n 'then': TokenType.THEN,\n 'rules': TokenType.RULES,\n 'every': TokenType.EVERY,\n 'check': TokenType.CHECK,\n 'and': TokenType.AND,\n 'or': TokenType.OR,\n 'not': TokenType.NOT,\n 'provided': TokenType.PROVIDED,\n 'empty': TokenType.EMPTY,\n 'user': TokenType.USER,\n 'owns': TokenType.OWNS,\n 'this': TokenType.THIS,\n 'text': TokenType.TEXT,\n 'number': TokenType.NUMBER,\n 'currency': TokenType.CURRENCY,\n 'date': TokenType.DATE,\n 'timestamp': TokenType.TIMESTAMP,\n 'required': TokenType.REQUIRED,\n 'unique': TokenType.UNIQUE,\n 'auto': TokenType.AUTO,\n 'default': TokenType.DEFAULT,\n 'true': TokenType.BOOLEAN,\n 'false': TokenType.BOOLEAN,\n};\n\n// Multi-word keywords\nexport const MULTI_WORD_KEYWORDS: Record<string, TokenType> = {\n 'long text': TokenType.LONG_TEXT,\n 'yes/no': TokenType.YES_NO,\n 'belongs to': TokenType.BELONGS,\n 'has many': TokenType.HAS,\n 'has one': TokenType.HAS,\n 'starts as': TokenType.STARTS,\n 'can be': TokenType.CAN,\n 'it has': TokenType.IT,\n};\n","/**\n * Domain Language Lexer\n *\n * Tokenizes domain language text into tokens for parsing.\n */\n\nimport { Token, TokenType, KEYWORDS } from './tokens.js';\n\nexport class Lexer {\n private input: string;\n private pos: number = 0;\n private line: number = 1;\n private column: number = 1;\n private indentStack: number[] = [0];\n\n constructor(input: string) {\n this.input = input;\n }\n\n /**\n * Tokenize the entire input\n */\n tokenize(): Token[] {\n const tokens: Token[] = [];\n\n while (!this.isAtEnd()) {\n const token = this.nextToken();\n if (token) {\n tokens.push(token);\n }\n }\n\n // Add any remaining DEDENT tokens\n while (this.indentStack.length > 1) {\n this.indentStack.pop();\n tokens.push(this.makeToken(TokenType.DEDENT, ''));\n }\n\n tokens.push(this.makeToken(TokenType.EOF, ''));\n return tokens;\n }\n\n private nextToken(): Token | null {\n // Handle start of line (indentation)\n if (this.column === 1) {\n const indentToken = this.handleIndentation();\n if (indentToken) {\n return indentToken;\n }\n }\n\n this.skipWhitespace();\n\n if (this.isAtEnd()) {\n return null;\n }\n\n const char = this.peek();\n\n // Newline\n if (char === '\\n') {\n return this.consumeNewline();\n }\n\n // Skip comments\n if (char === '#') {\n this.skipToEndOfLine();\n return this.nextToken();\n }\n\n // String literal\n if (char === '\"' || char === \"'\") {\n return this.consumeString(char);\n }\n\n // Number\n if (this.isDigit(char)) {\n return this.consumeNumber();\n }\n\n // Operators and punctuation\n switch (char) {\n case ':':\n return this.consumeChar(TokenType.COLON);\n case ',':\n return this.consumeChar(TokenType.COMMA);\n case '|':\n return this.consumeChar(TokenType.PIPE);\n case '.':\n return this.consumeChar(TokenType.DOT);\n case '-':\n return this.consumeChar(TokenType.DASH);\n case '[':\n return this.consumeChar(TokenType.LBRACKET);\n case ']':\n return this.consumeChar(TokenType.RBRACKET);\n case '(':\n return this.consumeChar(TokenType.LPAREN);\n case ')':\n return this.consumeChar(TokenType.RPAREN);\n case '>':\n if (this.peekNext() === '=') {\n return this.consumeChars(2, TokenType.GREATER_EQUAL);\n }\n return this.consumeChar(TokenType.GREATER_THAN);\n case '<':\n if (this.peekNext() === '=') {\n return this.consumeChars(2, TokenType.LESS_EQUAL);\n }\n return this.consumeChar(TokenType.LESS_THAN);\n case '=':\n if (this.peekNext() === '=') {\n return this.consumeChars(2, TokenType.EQUALS);\n }\n break;\n case '!':\n if (this.peekNext() === '=') {\n return this.consumeChars(2, TokenType.NOT_EQUALS);\n }\n break;\n }\n\n // Template variable: {varName}\n if (char === '{') {\n return this.consumeTemplateVar();\n }\n\n // Identifier or keyword\n if (this.isAlpha(char)) {\n return this.consumeIdentifier();\n }\n\n // Unknown character - skip it\n this.advance();\n return this.nextToken();\n }\n\n private consumeTemplateVar(): Token {\n const start = this.pos;\n this.advance(); // consume '{'\n\n // Track nested braces to handle JSON objects with nested objects/arrays\n let braceDepth = 1;\n\n // Collect characters until matching closing '}'\n while (!this.isAtEnd() && braceDepth > 0 && this.peek() !== '\\n') {\n const ch = this.peek();\n if (ch === '{') {\n braceDepth++;\n } else if (ch === '}') {\n braceDepth--;\n if (braceDepth === 0) {\n this.advance(); // consume final '}'\n break;\n }\n }\n this.advance();\n }\n\n const value = this.input.substring(start, this.pos);\n return this.makeToken(TokenType.TEMPLATE_VAR, value);\n }\n\n private handleIndentation(): Token | null {\n if (this.isAtEnd() || this.peek() === '\\n') {\n return null;\n }\n\n let indent = 0;\n while (this.peek() === ' ' || this.peek() === '\\t') {\n indent += this.peek() === '\\t' ? 4 : 1;\n this.advance();\n }\n\n // Skip blank lines\n if (this.peek() === '\\n' || this.peek() === '#') {\n return null;\n }\n\n const currentIndent = this.indentStack[this.indentStack.length - 1];\n\n if (indent > currentIndent) {\n this.indentStack.push(indent);\n return this.makeToken(TokenType.INDENT, '');\n } else if (indent < currentIndent) {\n // Pop indent levels until we match\n while (this.indentStack.length > 1 &&\n this.indentStack[this.indentStack.length - 1] > indent) {\n this.indentStack.pop();\n }\n return this.makeToken(TokenType.DEDENT, '');\n }\n\n return null;\n }\n\n private consumeNewline(): Token {\n const token = this.makeToken(TokenType.NEWLINE, '\\n');\n this.advance();\n this.line++;\n this.column = 1;\n return token;\n }\n\n private consumeString(quote: string): Token {\n const startLine = this.line;\n const startColumn = this.column;\n const startOffset = this.pos;\n\n this.advance(); // Opening quote\n\n let value = '';\n while (!this.isAtEnd() && this.peek() !== quote) {\n if (this.peek() === '\\\\' && this.peekNext() === quote) {\n this.advance();\n value += quote;\n } else if (this.peek() === '\\n') {\n // Multi-line strings not supported\n break;\n } else {\n value += this.peek();\n }\n this.advance();\n }\n\n if (this.peek() === quote) {\n this.advance(); // Closing quote\n }\n\n return {\n type: TokenType.STRING,\n value,\n line: startLine,\n column: startColumn,\n offset: startOffset,\n };\n }\n\n private consumeNumber(): Token {\n const startLine = this.line;\n const startColumn = this.column;\n const startOffset = this.pos;\n\n let value = '';\n while (this.isDigit(this.peek())) {\n value += this.advance();\n }\n\n // Decimal part\n if (this.peek() === '.' && this.isDigit(this.peekNext())) {\n value += this.advance(); // .\n while (this.isDigit(this.peek())) {\n value += this.advance();\n }\n }\n\n return {\n type: TokenType.NUMBER_LITERAL,\n value,\n line: startLine,\n column: startColumn,\n offset: startOffset,\n };\n }\n\n private consumeIdentifier(): Token {\n const startLine = this.line;\n const startColumn = this.column;\n const startOffset = this.pos;\n\n let value = '';\n while (this.isAlphaNumeric(this.peek()) || this.peek() === '_' || this.peek() === '/') {\n value += this.advance();\n }\n\n // Check for keywords\n const lowerValue = value.toLowerCase();\n const keywordType = KEYWORDS[lowerValue];\n\n return {\n type: keywordType || TokenType.IDENTIFIER,\n value,\n line: startLine,\n column: startColumn,\n offset: startOffset,\n };\n }\n\n private consumeChar(type: TokenType): Token {\n const token = this.makeToken(type, this.peek());\n this.advance();\n return token;\n }\n\n private consumeChars(count: number, type: TokenType): Token {\n let value = '';\n for (let i = 0; i < count; i++) {\n value += this.advance();\n }\n return {\n type,\n value,\n line: this.line,\n column: this.column - count,\n offset: this.pos - count,\n };\n }\n\n private skipWhitespace(): void {\n while (!this.isAtEnd() && (this.peek() === ' ' || this.peek() === '\\t')) {\n this.advance();\n }\n }\n\n private skipToEndOfLine(): void {\n while (!this.isAtEnd() && this.peek() !== '\\n') {\n this.advance();\n }\n }\n\n private makeToken(type: TokenType, value: string): Token {\n return {\n type,\n value,\n line: this.line,\n column: this.column,\n offset: this.pos,\n };\n }\n\n private peek(): string {\n return this.input[this.pos] || '\\0';\n }\n\n private peekNext(): string {\n return this.input[this.pos + 1] || '\\0';\n }\n\n private advance(): string {\n const char = this.peek();\n this.pos++;\n this.column++;\n return char;\n }\n\n private isAtEnd(): boolean {\n return this.pos >= this.input.length;\n }\n\n private isDigit(char: string): boolean {\n return char >= '0' && char <= '9';\n }\n\n private isAlpha(char: string): boolean {\n return (char >= 'a' && char <= 'z') ||\n (char >= 'A' && char <= 'Z') ||\n char === '_';\n }\n\n private isAlphaNumeric(char: string): boolean {\n return this.isAlpha(char) || this.isDigit(char);\n }\n}\n\n/**\n * Convenience function to tokenize a string\n */\nexport function tokenize(input: string): Token[] {\n const lexer = new Lexer(input);\n return lexer.tokenize();\n}\n","/**\n * Entity Parser\n *\n * Parses entity definitions from domain language.\n * All entity references are explicit (e.g., Order, User, Task).\n */\n\nimport type {\n DomainEntity,\n DomainField,\n DomainFieldType,\n DomainRelationship,\n RelationshipType,\n ParseResult,\n ParseError,\n} from '../types.js';\nimport { Lexer } from '../lexer.js';\nimport { TokenType, Token } from '../tokens.js';\n\ninterface EntityParseContext {\n errors: ParseError[];\n warnings: ParseError[];\n}\n\n/**\n * Parse an entity definition from domain text\n *\n * @example\n * parseEntity(`\n * A Order is a customer purchase request\n * It has:\n * - order number: text, required, unique\n * - amount: currency\n * - status: Pending | Confirmed | Shipped\n * It belongs to User\n * It can be: Pending, Confirmed, Shipped, Delivered, Cancelled\n * It starts as Pending\n * `)\n */\nexport function parseEntity(text: string): ParseResult<DomainEntity> {\n const ctx: EntityParseContext = { errors: [], warnings: [] };\n const lexer = new Lexer(text);\n const tokens = lexer.tokenize();\n\n let pos = 0;\n\n // Helper to get current token\n const current = () => tokens[pos] || { type: TokenType.EOF, value: '', line: 0, column: 0, offset: 0 };\n const peek = (offset = 0) => tokens[pos + offset] || { type: TokenType.EOF, value: '', line: 0, column: 0, offset: 0 };\n const advance = () => tokens[pos++];\n const isAtEnd = () => current().type === TokenType.EOF;\n const skip = (type: TokenType) => {\n while (current().type === type) advance();\n };\n\n // Skip leading whitespace\n skip(TokenType.NEWLINE);\n\n // Parse \"A [Name] is [description]\"\n const entityHeader = parseEntityHeader();\n if (!entityHeader) {\n return {\n success: false,\n errors: ctx.errors.length > 0 ? ctx.errors : [{\n message: 'Expected entity definition starting with \"A [Name] is...\"',\n }],\n warnings: [],\n };\n }\n\n const entity: DomainEntity = {\n type: 'entity',\n name: entityHeader.name,\n description: entityHeader.description,\n fields: [],\n relationships: [],\n };\n\n skip(TokenType.NEWLINE);\n\n // Parse remaining sections (fields, relationships, states)\n while (!isAtEnd()) {\n skip(TokenType.NEWLINE);\n if (isAtEnd()) break;\n\n const sectionResult = parseSection(entity);\n if (!sectionResult) {\n // Skip unknown content\n advance();\n }\n }\n\n return {\n success: true,\n data: entity,\n errors: ctx.errors,\n warnings: ctx.warnings,\n };\n\n // === Helper Functions ===\n\n // Check if a token can be used as an entity name\n // Some keywords like \"User\", \"Task\", \"Order\" are valid entity names\n function isEntityName(token: Token): boolean {\n // Identifiers are always valid\n if (token.type === TokenType.IDENTIFIER) return true;\n\n // Certain keywords can also be entity names when capitalized\n const keywordEntityNames = [\n TokenType.USER, // \"User\"\n TokenType.TEXT, // \"Text\" (unlikely but possible)\n TokenType.NUMBER, // \"Number\" (unlikely but possible)\n TokenType.DATE, // \"Date\" (unlikely but possible)\n ];\n return keywordEntityNames.includes(token.type);\n }\n\n function parseEntityHeader(): { name: string; description: string } | null {\n // Expect \"A\" or \"An\"\n if (current().type !== TokenType.A && current().type !== TokenType.AN) {\n ctx.errors.push({ message: 'Expected \"A\" or \"An\" at start of entity definition' });\n return null;\n }\n advance();\n\n // Get entity name (identifier or keyword that can be an entity name)\n if (!isEntityName(current())) {\n ctx.errors.push({ message: 'Expected entity name after \"A\"' });\n return null;\n }\n const name = current().value;\n advance();\n\n // Expect \"is\"\n if (current().type !== TokenType.IS) {\n ctx.errors.push({ message: `Expected \"is\" after entity name \"${name}\"` });\n return null;\n }\n advance();\n\n // Collect description until newline\n const descParts: string[] = [];\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n descParts.push(current().value);\n advance();\n }\n\n return {\n name,\n description: descParts.join(' ').trim(),\n };\n }\n\n function parseSection(entity: DomainEntity): boolean {\n const token = current();\n\n // INDENT followed by \"- has [field] as [type]\" (SKILL.md format)\n if (token.type === TokenType.INDENT) {\n advance();\n parseIndentedFields(entity);\n return true;\n }\n\n // \"It has:\" - fields section (old format)\n if (token.type === TokenType.IT) {\n advance();\n if (current().type === TokenType.HAS) {\n advance();\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n parseFieldsSection(entity);\n return true;\n }\n\n // \"It belongs to [Entity]\"\n if (current().type === TokenType.BELONGS) {\n advance();\n if (current().type === TokenType.TO) {\n advance();\n parseRelationship(entity, 'belongs_to');\n return true;\n }\n }\n\n // \"It can be: [states]\"\n if (current().type === TokenType.CAN) {\n advance();\n if (current().type === TokenType.BE) {\n advance();\n skip(TokenType.COLON);\n parseStates(entity);\n return true;\n }\n }\n\n // \"It starts as [state]\"\n if (current().type === TokenType.STARTS) {\n advance();\n if (current().type === TokenType.AS) {\n advance();\n parseInitialState(entity);\n return true;\n }\n }\n }\n\n // \"has many [Entity]\" - relationship\n if (token.type === TokenType.HAS) {\n advance();\n if (current().type === TokenType.MANY) {\n advance();\n parseRelationship(entity, 'has_many');\n return true;\n }\n if (current().type === TokenType.ONE) {\n advance();\n parseRelationship(entity, 'has_one');\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Parse indented field lines in SKILL.md format:\n * - has [field] as [type] (constraints)\n * - belongs to [Entity]\n * - has many [Entity]s\n */\n function parseIndentedFields(entity: DomainEntity): void {\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Skip leading dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n // \"has [field] as [type]\" pattern\n if (current().type === TokenType.HAS) {\n advance();\n\n // Check for \"has many [Entity]s\" pattern\n if (current().type === TokenType.MANY) {\n advance();\n parseRelationship(entity, 'has_many');\n continue;\n }\n\n // Parse field: \"[name] as [type] (constraints)\"\n const field = parseHasFieldLine();\n if (field) {\n entity.fields.push(field);\n }\n continue;\n }\n\n // \"belongs to [Entity]\" pattern\n if (current().type === TokenType.BELONGS) {\n advance();\n if (current().type === TokenType.TO) {\n advance();\n parseRelationship(entity, 'belongs_to');\n continue;\n }\n }\n\n // Skip unrecognized content to end of line\n while (!isAtEnd() && current().type !== TokenType.NEWLINE && current().type !== TokenType.DEDENT) {\n advance();\n }\n skip(TokenType.NEWLINE);\n }\n\n // Consume DEDENT\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n /**\n * Parse \"has [field] as [type] (constraints)\" pattern\n */\n function parseHasFieldLine(): DomainField | null {\n // Get field name\n if (current().type !== TokenType.IDENTIFIER) {\n return null;\n }\n const fieldName = toCamelCase(current().value);\n advance();\n\n // Expect \"as\"\n if (current().type !== TokenType.AS) {\n // Skip to end of line\n while (!isAtEnd() && current().type !== TokenType.NEWLINE && current().type !== TokenType.DEDENT) {\n advance();\n }\n return null;\n }\n advance();\n\n // Parse field type\n const field: DomainField = {\n type: 'field',\n name: fieldName,\n fieldType: 'text',\n required: false,\n unique: false,\n auto: false,\n };\n\n // Get field type (may be multiple tokens like \"long text\" or \"yes/no\")\n const typeParts: string[] = [];\n while (!isAtEnd() &&\n current().type !== TokenType.NEWLINE &&\n current().type !== TokenType.DEDENT &&\n current().type !== TokenType.LPAREN &&\n current().value !== 'with') {\n typeParts.push(current().value);\n advance();\n }\n const typeText = typeParts.join(' ').trim().toLowerCase();\n\n // Map type text to DomainFieldType\n if (typeText.includes('long text')) {\n field.fieldType = 'long text';\n } else if (typeText === 'text' || typeText === 'string') {\n field.fieldType = 'text';\n } else if (typeText === 'number' || typeText === 'integer') {\n field.fieldType = 'number';\n } else if (typeText === 'currency') {\n field.fieldType = 'currency';\n } else if (typeText === 'yes/no' || typeText === 'boolean') {\n field.fieldType = 'yes/no';\n } else if (typeText === 'date') {\n field.fieldType = 'date';\n } else if (typeText === 'timestamp' || typeText === 'datetime') {\n field.fieldType = 'timestamp';\n } else if (typeText.startsWith('enum')) {\n field.fieldType = 'enum';\n // Extract enum values from \"enum [val1, val2, val3]\"\n const enumMatch = typeText.match(/enum\\s*\\[([^\\]]+)\\]/);\n if (enumMatch) {\n field.enumValues = enumMatch[1].split(',').map(v => v.trim());\n }\n } else if (typeText === 'list' || typeText === 'array') {\n field.fieldType = 'list';\n } else if (typeText === 'object') {\n field.fieldType = 'object';\n } else {\n field.fieldType = 'text';\n }\n\n // Parse constraints in parentheses: (required), (optional), with default [value]\n if (current().type === TokenType.LPAREN) {\n advance();\n while (!isAtEnd() && current().type !== TokenType.RPAREN && current().type !== TokenType.NEWLINE) {\n const constraint = current().value.toLowerCase();\n if (constraint === 'required') {\n field.required = true;\n } else if (constraint === 'optional') {\n field.required = false;\n } else if (constraint === 'unique') {\n field.unique = true;\n }\n advance();\n }\n if (current().type === TokenType.RPAREN) {\n advance();\n }\n }\n\n // Parse \"with default [value]\"\n if (current().type === TokenType.IDENTIFIER && current().value.toLowerCase() === 'with') {\n advance();\n if (current().type === TokenType.DEFAULT) {\n advance();\n // Get default value\n if (current().type === TokenType.STRING) {\n field.default = current().value;\n advance();\n } else if (current().type === TokenType.NUMBER_LITERAL) {\n field.default = parseFloat(current().value);\n advance();\n } else if (current().type === TokenType.BOOLEAN) {\n field.default = current().value === 'true';\n advance();\n } else if (current().type === TokenType.IDENTIFIER) {\n field.default = current().value;\n advance();\n }\n }\n }\n\n return field;\n }\n\n function parseFieldsSection(entity: DomainEntity): void {\n // Expect INDENT\n if (current().type !== TokenType.INDENT) {\n return;\n }\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Parse field line: \"- [name]: [type], [constraints]\"\n const field = parseFieldLine();\n if (field) {\n entity.fields.push(field);\n }\n\n skip(TokenType.NEWLINE);\n }\n\n // Consume DEDENT\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n function parseFieldLine(): DomainField | null {\n // Optional dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n // Field name (may be multiple words)\n const nameParts: string[] = [];\n while (!isAtEnd() &&\n current().type !== TokenType.COLON &&\n current().type !== TokenType.NEWLINE) {\n nameParts.push(current().value);\n advance();\n }\n\n if (nameParts.length === 0) {\n return null;\n }\n\n const fieldName = toCamelCase(nameParts.join(' '));\n\n // Expect colon\n if (current().type !== TokenType.COLON) {\n ctx.errors.push({ message: `Expected \":\" after field name \"${fieldName}\"` });\n return null;\n }\n advance();\n\n // Parse field type and constraints\n return parseFieldTypeAndConstraints(fieldName);\n }\n\n function parseFieldTypeAndConstraints(fieldName: string): DomainField {\n const field: DomainField = {\n type: 'field',\n name: fieldName,\n fieldType: 'text',\n required: false,\n unique: false,\n auto: false,\n };\n\n const parts: string[] = [];\n\n // Collect all tokens until newline\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n parts.push(current().value);\n advance();\n }\n\n // Parse the parts\n const content = parts.join(' ').trim();\n\n // Check for enum (contains |)\n if (content.includes('|')) {\n field.fieldType = 'enum';\n field.enumValues = content.split('|').map(v => v.trim()).filter(v => v);\n return field;\n }\n\n // Split by comma for type and constraints\n const segments = content.split(',').map(s => s.trim().toLowerCase());\n\n for (const segment of segments) {\n // Check for field types (all types from DOMAIN_TO_SCHEMA_FIELD_TYPE)\n if (segment === 'text') field.fieldType = 'text';\n else if (segment === 'long text') field.fieldType = 'long text';\n else if (segment === 'number') field.fieldType = 'number';\n else if (segment === 'currency') field.fieldType = 'currency';\n else if (segment === 'date') field.fieldType = 'date';\n else if (segment === 'timestamp') field.fieldType = 'timestamp';\n else if (segment === 'datetime') field.fieldType = 'datetime';\n else if (segment === 'yes/no' || segment === 'boolean') field.fieldType = 'yes/no';\n else if (segment === 'list') field.fieldType = 'list';\n else if (segment === 'object') field.fieldType = 'object';\n // Check for constraints\n else if (segment === 'required') field.required = true;\n else if (segment === 'unique') field.unique = true;\n else if (segment === 'auto') field.auto = true;\n else if (segment.startsWith('default ')) {\n field.default = parseValue(segment.slice(8));\n }\n }\n\n return field;\n }\n\n function parseRelationship(entity: DomainEntity, relType: RelationshipType): void {\n // Get target entity name\n if (current().type !== TokenType.IDENTIFIER) {\n return;\n }\n const targetEntity = current().value;\n advance();\n\n let alias: string | undefined;\n\n // Check for \"as [Alias]\"\n if (current().type === TokenType.AS) {\n advance();\n if (current().type === TokenType.IDENTIFIER) {\n alias = current().value;\n advance();\n }\n }\n\n entity.relationships.push({\n type: 'relationship',\n relationshipType: relType,\n targetEntity,\n alias,\n });\n }\n\n function parseStates(entity: DomainEntity): void {\n const states: string[] = [];\n\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n if (current().type === TokenType.IDENTIFIER) {\n states.push(current().value);\n }\n advance();\n }\n\n entity.states = states;\n }\n\n function parseInitialState(entity: DomainEntity): void {\n if (current().type === TokenType.IDENTIFIER) {\n entity.initialState = current().value;\n advance();\n }\n }\n}\n\n/**\n * Format an entity AST back to domain text\n */\nexport function formatEntityToDomain(entity: DomainEntity): string {\n const lines: string[] = [];\n\n // Header line\n const article = startsWithVowel(entity.name) ? 'An' : 'A';\n lines.push(`${article} ${entity.name} is ${entity.description}`);\n\n // Fields section\n if (entity.fields.length > 0) {\n lines.push('');\n lines.push('It has:');\n for (const field of entity.fields) {\n lines.push(` - ${toSpaceSeparated(field.name)}: ${formatFieldType(field)}`);\n }\n }\n\n // Relationships\n for (const rel of entity.relationships) {\n lines.push('');\n if (rel.relationshipType === 'belongs_to') {\n const aliasStr = rel.alias ? ` as ${rel.alias}` : '';\n lines.push(`It belongs to ${rel.targetEntity}${aliasStr}`);\n } else if (rel.relationshipType === 'has_many') {\n lines.push(`It has many ${rel.targetEntity}`);\n } else if (rel.relationshipType === 'has_one') {\n lines.push(`It has one ${rel.targetEntity}`);\n }\n }\n\n // States\n if (entity.states && entity.states.length > 0) {\n lines.push('');\n lines.push(`It can be: ${entity.states.join(', ')}`);\n if (entity.initialState) {\n lines.push(`It starts as ${entity.initialState}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format entity AST to KFlow schema\n */\nexport function formatEntityToSchema(entity: DomainEntity): Record<string, unknown> {\n const fields = entity.fields.map(field => ({\n name: field.name,\n type: mapFieldTypeToSchema(field.fieldType),\n required: field.required || undefined,\n unique: field.unique || undefined,\n auto: field.auto || undefined,\n values: field.enumValues, // OrbitalSchema uses 'values' not 'enumValues'\n default: field.default,\n }));\n\n // Add relationship fields\n for (const rel of entity.relationships) {\n if (rel.relationshipType === 'belongs_to') {\n const fieldName = rel.alias\n ? toCamelCase(rel.alias) + 'Id'\n : toCamelCase(rel.targetEntity) + 'Id';\n fields.push({\n name: fieldName,\n type: 'relation',\n required: undefined,\n unique: undefined,\n auto: undefined,\n values: undefined,\n default: undefined,\n relation: {\n entity: rel.targetEntity,\n type: 'many-to-one',\n },\n } as any);\n }\n }\n\n return {\n name: entity.name,\n collection: toKebabCase(entity.name) + 's',\n fields: fields.filter(f => Object.keys(f).length > 0),\n states: entity.states,\n initialState: entity.initialState,\n };\n}\n\n// === Utility Functions ===\n\nfunction toCamelCase(text: string): string {\n return text\n .toLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join('');\n}\n\nfunction toSpaceSeparated(text: string): string {\n return text.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();\n}\n\nfunction toKebabCase(text: string): string {\n return text\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .toLowerCase();\n}\n\n/**\n * Check if a word starts with a vowel SOUND (not just vowel letter)\n * Used for determining \"A\" vs \"An\" article\n */\nfunction startsWithVowel(text: string): boolean {\n const lower = text.toLowerCase();\n\n // Words that start with vowel letter but consonant sound (use \"A\")\n // \"U\" pronounced as \"yoo\": user, unicorn, unique, universal, union, etc.\n // \"Eu\" pronounced as \"yoo\": European, eureka, etc.\n if (/^(u[^aeiou]|uni|euro)/i.test(lower)) {\n return false;\n }\n\n // Words that start with consonant letter but vowel sound (use \"An\")\n // Silent \"H\": hour, honest, honor, heir, etc.\n if (/^(hour|honest|honor|heir)/i.test(lower)) {\n return true;\n }\n\n // Default: check if first letter is a vowel\n return /^[aeiou]/i.test(text);\n}\n\nfunction parseValue(text: string): string | number | boolean {\n text = text.trim();\n if (text.toLowerCase() === 'true') return true;\n if (text.toLowerCase() === 'false') return false;\n const num = parseFloat(text);\n if (!isNaN(num)) return num;\n return text.replace(/^[\"']|[\"']$/g, '');\n}\n\nfunction formatFieldType(field: DomainField): string {\n const parts: string[] = [];\n\n if (field.enumValues && field.enumValues.length > 0) {\n parts.push(field.enumValues.join(' | '));\n } else {\n parts.push(field.fieldType);\n }\n\n if (field.required) parts.push('required');\n if (field.unique) parts.push('unique');\n if (field.auto) parts.push('auto');\n if (field.default !== undefined) {\n parts.push(`default ${field.default}`);\n }\n\n return parts.join(', ');\n}\n\nfunction mapFieldTypeToSchema(fieldType: DomainFieldType): string {\n // Use the centralized DOMAIN_TO_SCHEMA_FIELD_TYPE from types.ts\n const mapping: Record<DomainFieldType, string> = {\n 'text': 'string',\n 'long text': 'string',\n 'number': 'number',\n 'currency': 'number',\n 'date': 'date',\n 'timestamp': 'timestamp',\n 'datetime': 'datetime',\n 'yes/no': 'boolean',\n 'enum': 'enum',\n 'list': 'array',\n 'object': 'object',\n 'relation': 'relation',\n };\n return mapping[fieldType] || 'string';\n}\n","/**\n * Page Parser\n *\n * Parses page definitions from domain language.\n */\n\nimport type {\n DomainPage,\n DomainPageSection,\n DomainPageAction,\n ParseResult,\n ParseError,\n} from '../types.js';\nimport { Lexer } from '../lexer.js';\nimport { TokenType } from '../tokens.js';\n\ninterface PageParseContext {\n errors: ParseError[];\n warnings: ParseError[];\n}\n\n/**\n * Parse a page definition from domain text\n *\n * @example\n * parsePage(`\n * The Dashboard shows an overview of system activity\n * Purpose: Help users monitor their tasks and orders\n * URL: /dashboard\n *\n * It displays:\n * - Summary statistics for today\n * - Recent orders list\n * - Pending tasks requiring attention\n *\n * Users can:\n * - Click a task to view details\n * - Filter orders by status\n * `)\n */\nexport function parsePage(text: string): ParseResult<DomainPage> {\n const ctx: PageParseContext = { errors: [], warnings: [] };\n const lexer = new Lexer(text);\n const tokens = lexer.tokenize();\n\n let pos = 0;\n\n // Helper functions\n const current = () => tokens[pos] || { type: TokenType.EOF, value: '', line: 0, column: 0, offset: 0 };\n const advance = () => tokens[pos++];\n const isAtEnd = () => current().type === TokenType.EOF;\n const skip = (type: TokenType) => {\n while (current().type === type) advance();\n };\n\n // Skip leading whitespace\n skip(TokenType.NEWLINE);\n\n // Parse \"The [PageName] shows [description]\"\n const pageHeader = parsePageHeader();\n if (!pageHeader) {\n return {\n success: false,\n errors: ctx.errors.length > 0 ? ctx.errors : [{\n message: 'Expected page definition starting with \"The [PageName] shows...\"',\n }],\n warnings: [],\n };\n }\n\n const page: DomainPage = {\n type: 'page',\n name: pageHeader.name,\n description: pageHeader.description,\n purpose: '',\n url: pageHeader.url || '',\n primaryEntity: pageHeader.primaryEntity,\n traitName: pageHeader.traitName,\n sections: [],\n actions: [],\n };\n\n skip(TokenType.NEWLINE);\n\n // Parse remaining sections\n while (!isAtEnd()) {\n skip(TokenType.NEWLINE);\n if (isAtEnd()) break;\n\n const parsed = parsePageSection(page);\n if (!parsed) {\n advance();\n }\n }\n\n // Generate URL if not provided\n if (!page.url) {\n page.url = '/' + toKebabCase(page.name.replace(/Page$/i, ''));\n }\n\n return {\n success: true,\n data: page,\n errors: ctx.errors,\n warnings: ctx.warnings,\n };\n\n // === Helper Functions ===\n\n function parsePageHeader(): { name: string; description: string; url?: string; primaryEntity?: string; traitName?: string } | null {\n // Check for alternative format: \"[PageName] at /[path]:\"\n if (current().type === TokenType.IDENTIFIER) {\n const firstToken = current().value;\n advance();\n\n // Check if next token is \"at\" or more identifiers followed by \"at\"\n const nameParts: string[] = [firstToken];\n while (current().type === TokenType.IDENTIFIER && current().value.toLowerCase() !== 'at') {\n nameParts.push(current().value);\n advance();\n }\n\n // Check for \"at\" keyword (which is just an identifier)\n if (current().type === TokenType.IDENTIFIER && current().value.toLowerCase() === 'at') {\n advance();\n\n // Collect URL path\n const pathParts: string[] = [];\n while (!isAtEnd() && current().type !== TokenType.COLON && current().type !== TokenType.NEWLINE) {\n pathParts.push(current().value);\n advance();\n }\n const url = pathParts.join('');\n\n // Skip colon\n if (current().type === TokenType.COLON) {\n advance();\n }\n\n // Normalize page name - preserve PascalCase\n let name = nameParts.map(p => toPascalCase(p)).join('');\n if (!name.toLowerCase().endsWith('page')) {\n name += 'Page';\n }\n\n // Parse the page body for additional info\n skip(TokenType.NEWLINE);\n let primaryEntity: string | undefined;\n let traitName: string | undefined;\n\n // Parse indented lines for \"shows\", \"view type\", \"is initial page\"\n if (current().type === TokenType.INDENT) {\n advance();\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Skip dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n // Check for \"shows [Entity] using [Trait]\"\n if (current().type === TokenType.SHOWS) {\n advance();\n if (current().type === TokenType.IDENTIFIER) {\n primaryEntity = current().value;\n advance();\n }\n // Check for \"using [TraitName]\"\n if (current().type === TokenType.IDENTIFIER && current().value.toLowerCase() === 'using') {\n advance();\n if (current().type === TokenType.IDENTIFIER) {\n traitName = current().value;\n advance();\n }\n }\n }\n\n // Skip to end of line\n while (!isAtEnd() && current().type !== TokenType.NEWLINE && current().type !== TokenType.DEDENT) {\n advance();\n }\n skip(TokenType.NEWLINE);\n }\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n return {\n name,\n description: `Page at ${url}`,\n url,\n primaryEntity,\n traitName,\n };\n }\n\n // Reset position if not \"at\" format - rewind not possible with current design\n // Fall through to old format check\n }\n\n // Original format: \"The [PageName] shows [description]\"\n // Expect \"The\"\n if (current().type !== TokenType.THE) {\n ctx.errors.push({ message: 'Expected \"The\" at start of page definition' });\n return null;\n }\n advance();\n\n // Get page name (may be multiple identifiers like \"Task List Page\")\n const nameParts: string[] = [];\n while (current().type === TokenType.IDENTIFIER) {\n nameParts.push(current().value);\n advance();\n }\n\n if (nameParts.length === 0) {\n ctx.errors.push({ message: 'Expected page name after \"The\"' });\n return null;\n }\n\n // Normalize page name - preserve PascalCase\n let name = nameParts.map(p => toPascalCase(p)).join('');\n if (!name.toLowerCase().endsWith('page')) {\n name += 'Page';\n }\n\n // Expect \"shows\"\n if (current().type !== TokenType.SHOWS) {\n ctx.errors.push({ message: `Expected \"shows\" after page name \"${name}\"` });\n return null;\n }\n advance();\n\n // Collect description until newline\n const descParts: string[] = [];\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n descParts.push(current().value);\n advance();\n }\n\n return {\n name,\n description: descParts.join(' ').trim(),\n };\n }\n\n function parsePageSection(page: DomainPage): boolean {\n const token = current();\n\n // \"Entity: [EntityName]\" - EXPLICIT entity reference (no inference!)\n if (token.type === TokenType.ENTITY) {\n advance();\n skip(TokenType.COLON);\n page.primaryEntity = collectUntilNewline();\n return true;\n }\n\n // \"Purpose: [text]\"\n if (token.type === TokenType.PURPOSE) {\n advance();\n skip(TokenType.COLON);\n page.purpose = collectUntilNewline();\n return true;\n }\n\n // \"URL: [path]\"\n if (token.type === TokenType.URL) {\n advance();\n skip(TokenType.COLON);\n page.url = collectUntilNewline();\n return true;\n }\n\n // \"It displays:\" - sections\n if (token.type === TokenType.IT) {\n advance();\n if (current().type === TokenType.DISPLAYS) {\n advance();\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n parseDisplaysSection(page);\n return true;\n }\n }\n\n // \"Users can:\" or \"Users\" - actions\n if (token.type === TokenType.USERS) {\n advance();\n if (current().type === TokenType.CAN) {\n advance();\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n parseActionsSection(page);\n return true;\n }\n }\n\n // \"When accessed:\" - onAccess\n if (token.type === TokenType.WHEN) {\n advance();\n if (current().type === TokenType.ACCESSED) {\n advance();\n skip(TokenType.COLON);\n page.onAccess = collectUntilNewline();\n return true;\n }\n }\n\n return false;\n }\n\n function parseDisplaysSection(page: DomainPage): void {\n // Expect INDENT\n if (current().type !== TokenType.INDENT) {\n return;\n }\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Parse section line: \"- [description]\"\n const section = parseSectionLine();\n if (section) {\n page.sections.push(section);\n }\n\n skip(TokenType.NEWLINE);\n }\n\n // Consume DEDENT\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n function parseSectionLine(): DomainPageSection | null {\n // Optional dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n const description = collectUntilNewline();\n if (!description) {\n return null;\n }\n\n return {\n type: 'page_section',\n description,\n };\n }\n\n function parseActionsSection(page: DomainPage): void {\n // Expect INDENT\n if (current().type !== TokenType.INDENT) {\n return;\n }\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Parse action line: \"- [trigger] to [action]\"\n const action = parseActionLine();\n if (action) {\n page.actions.push(action);\n }\n\n skip(TokenType.NEWLINE);\n }\n\n // Consume DEDENT\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n function parseActionLine(): DomainPageAction | null {\n // Optional dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n const fullText = collectUntilNewline();\n if (!fullText) {\n return null;\n }\n\n // Split on \" to \" to separate trigger and action\n const toIndex = fullText.toLowerCase().indexOf(' to ');\n if (toIndex === -1) {\n // No \"to\" found, treat whole thing as trigger\n return {\n type: 'page_action',\n trigger: fullText,\n action: '',\n };\n }\n\n return {\n type: 'page_action',\n trigger: fullText.slice(0, toIndex).trim(),\n action: fullText.slice(toIndex + 4).trim(),\n };\n }\n\n function collectUntilNewline(): string {\n const parts: string[] = [];\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n parts.push(current().value);\n advance();\n }\n return parts.join(' ').trim();\n }\n}\n\n/**\n * Format a page AST back to domain text\n */\nexport function formatPageToDomain(page: DomainPage): string {\n const lines: string[] = [];\n\n // Header line\n const displayName = page.name.replace(/Page$/, '');\n lines.push(`The ${displayName} shows ${page.description}`);\n\n // Entity - EXPLICIT reference (no inference on parse!)\n if (page.primaryEntity) {\n lines.push(`Entity: ${page.primaryEntity}`);\n }\n\n // Purpose\n if (page.purpose) {\n lines.push(`Purpose: ${page.purpose}`);\n }\n\n // URL\n if (page.url) {\n lines.push(`URL: ${page.url}`);\n }\n\n // Sections\n if (page.sections.length > 0) {\n lines.push('');\n lines.push('It displays:');\n for (const section of page.sections) {\n lines.push(` - ${section.description}`);\n }\n }\n\n // Actions\n if (page.actions.length > 0) {\n lines.push('');\n lines.push('Users can:');\n for (const action of page.actions) {\n if (action.action) {\n lines.push(` - ${action.trigger} to ${action.action}`);\n } else {\n lines.push(` - ${action.trigger}`);\n }\n }\n }\n\n // On access\n if (page.onAccess) {\n lines.push('');\n lines.push(`When accessed: ${page.onAccess}`);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format page AST to KFlow schema\n */\nexport function formatPageToSchema(page: DomainPage): Record<string, unknown> {\n // Infer viewType from page name (this is acceptable - it's a display hint, not critical data)\n const viewType = inferViewTypeFromPageName(page.name);\n\n // Use EXPLICIT primaryEntity from domain text - NO INFERENCE!\n const primaryEntity = page.primaryEntity;\n\n return {\n name: page.name,\n path: page.url.startsWith('/') ? page.url : `/${page.url}`,\n purpose: page.purpose || page.description,\n sections: page.sections.map((section, index) => {\n const pattern = inferPatternFromDescription(section.description);\n const patternConfig = inferPatternConfigFromDescription(section.description, page.primaryEntity);\n\n return {\n id: `section-${index}`,\n purpose: section.description,\n order: index,\n estimatedSize: 'medium',\n pattern: {\n type: pattern,\n ...patternConfig,\n },\n };\n }),\n traits: [],\n primaryEntity,\n viewType,\n isInitial: page.url === '/' || page.url === '/dashboard',\n };\n}\n\n/**\n * Infer view type from page name\n */\nfunction inferViewTypeFromPageName(name: string): string {\n const lower = name.toLowerCase();\n\n if (lower.includes('list') || lower.includes('index')) {\n return 'list';\n }\n if (lower.includes('detail') || lower.includes('view')) {\n return 'detail';\n }\n if (lower.includes('create') || lower.includes('new')) {\n return 'create';\n }\n if (lower.includes('edit')) {\n return 'edit';\n }\n if (lower.includes('dashboard')) {\n return 'dashboard';\n }\n\n return 'list';\n}\n\n/**\n * Get pattern config from description, using explicit entity when available\n * IMPORTANT: Use primaryEntity from explicit \"Entity:\" line when available.\n * Pattern detection from description is acceptable (e.g., \"list\" → entity-list pattern)\n * but entity association MUST come from explicit data.\n */\nfunction inferPatternConfigFromDescription(description: string, primaryEntity?: string): Record<string, unknown> {\n const lower = description.toLowerCase();\n\n // Use explicit entity when available, otherwise use a placeholder\n // The placeholder indicates the schema needs explicit entity data\n const entityName = primaryEntity || 'Item';\n\n // Header pattern - doesn't need entity\n if (lower.includes('header') || lower.includes('title')) {\n const titleMatch = description.match(/title\\s*[\"']?([^\"']+)[\"']?/i) ||\n description.match(/[\"']([^\"']+)[\"']/);\n return {\n title: titleMatch ? titleMatch[1] : 'Page Title',\n };\n }\n\n // Entity list pattern\n if (lower.includes('list') || lower.includes('table')) {\n return {\n entity: entityName,\n fieldNames: ['id', 'name', 'createdAt'],\n };\n }\n\n // Entity detail pattern\n if (lower.includes('detail')) {\n return {\n entity: entityName,\n fieldNames: ['id', 'name', 'description', 'createdAt'],\n };\n }\n\n // Form pattern\n if (lower.includes('form')) {\n return {\n entity: entityName,\n fields: [\n { field: 'name', label: 'Name', type: 'text', required: true },\n { field: 'description', label: 'Description', type: 'textarea' },\n ],\n };\n }\n\n // Stats/statistics/summary patterns\n if (lower.includes('stats') || lower.includes('statistics') ||\n lower.includes('summary') || lower.includes('overview')) {\n return {\n entity: entityName,\n fieldNames: ['id', 'name', 'value'],\n };\n }\n\n // Default: entity-list needs entity and fieldNames\n return {\n entity: entityName,\n fieldNames: ['id', 'name', 'createdAt'],\n };\n}\n\n// === Utility Functions ===\n\nfunction capitalize(text: string): string {\n return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();\n}\n\n/**\n * Convert text to PascalCase, preserving existing PascalCase words.\n * \"notesPage\" → \"NotesPage\"\n * \"NotesPage\" → \"NotesPage\" (preserved)\n * \"notes page\" → \"NotesPage\"\n */\nfunction toPascalCase(text: string): string {\n // If already PascalCase (starts with uppercase, has lowercase), preserve it\n if (/^[A-Z][a-zA-Z]*$/.test(text)) {\n return text;\n }\n // If it's all lowercase or has spaces, convert to PascalCase\n if (text.includes(' ')) {\n return text.split(' ').map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join('');\n }\n // Single word - capitalize first letter, preserve rest\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\nfunction toKebabCase(text: string): string {\n return text\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/\\s+/g, '-')\n .toLowerCase();\n}\n\n/**\n * Infer a section pattern from its natural language description\n * Valid pattern types: page-header, title-only, entity-list, entity-table, entity-detail, form-section\n */\nfunction inferPatternFromDescription(description: string): string {\n const lower = description.toLowerCase();\n\n // Header patterns - check FIRST to prevent \"Header with title Details\" being matched as detail\n if (lower.includes('header')) {\n return 'page-header';\n }\n\n // List patterns\n if (lower.includes('list') || lower.includes('table')) {\n return 'entity-list';\n }\n\n // Statistics/dashboard - map to entity-list for now\n if (lower.includes('statistics') || lower.includes('stats') ||\n lower.includes('summary') || lower.includes('overview')) {\n return 'entity-list';\n }\n\n // Form patterns\n if (lower.includes('form') || lower.includes('input') || lower.includes('edit')) {\n return 'form-section';\n }\n\n // Detail patterns\n if (lower.includes('detail') || lower.includes('view')) {\n return 'entity-detail';\n }\n\n // Chart patterns - map to entity-list for now\n if (lower.includes('chart') || lower.includes('graph')) {\n return 'entity-list';\n }\n\n // Timeline - map to entity-list for now\n if (lower.includes('timeline') || lower.includes('history') || lower.includes('activity')) {\n return 'entity-list';\n }\n\n // Title-only patterns (without \"header\" keyword)\n if (lower.includes('title')) {\n return 'page-header';\n }\n\n // Default to entity-list\n return 'entity-list';\n}\n","/**\n * Guard Expression Parser\n *\n * Parses guard expressions deterministically from domain language.\n * All entity references are explicit (e.g., Order.amount, CurrentUser.role).\n */\n\nimport type {\n GuardCondition,\n FieldReference,\n FieldCheckCondition,\n ComparisonCondition,\n UserCheckCondition,\n LogicalCondition,\n DomainGuard,\n ParseResult,\n ParseError,\n ComparisonOperator,\n} from '../types.js';\n\ninterface GuardParseContext {\n entityName: string; // Current entity context (e.g., \"Order\")\n errors: ParseError[];\n}\n\n/**\n * Parse a guard expression from domain text\n *\n * @example\n * parseGuard(\"if amount > 1000\", \"Order\")\n * // Returns: { field: { entityName: \"Order\", fieldName: \"amount\" }, operator: \">\", value: 1000 }\n */\nexport function parseGuard(text: string, entityName: string): ParseResult<DomainGuard> {\n const ctx: GuardParseContext = { entityName, errors: [] };\n\n // Remove leading \"if \" if present\n let expression = text.trim();\n if (expression.toLowerCase().startsWith('if ')) {\n expression = expression.slice(3).trim();\n }\n\n const condition = parseCondition(expression, ctx);\n\n if (!condition) {\n return {\n success: false,\n errors: ctx.errors.length > 0 ? ctx.errors : [{\n message: `Failed to parse guard expression: \"${text}\"`,\n }],\n warnings: [],\n };\n }\n\n return {\n success: true,\n data: {\n type: 'guard',\n condition,\n raw: text,\n },\n errors: [],\n warnings: [],\n };\n}\n\n/**\n * Parse a condition (may be simple or compound with AND/OR)\n */\nfunction parseCondition(text: string, ctx: GuardParseContext): GuardCondition | null {\n text = text.trim();\n\n // Check for logical operators (AND/OR) - split at top level\n const andMatch = splitAtTopLevel(text, ' AND ');\n if (andMatch) {\n const left = parseCondition(andMatch.left, ctx);\n const right = parseCondition(andMatch.right, ctx);\n if (left && right) {\n return {\n type: 'logical',\n operator: 'AND',\n left,\n right,\n };\n }\n }\n\n const orMatch = splitAtTopLevel(text, ' OR ');\n if (orMatch) {\n const left = parseCondition(orMatch.left, ctx);\n const right = parseCondition(orMatch.right, ctx);\n if (left && right) {\n return {\n type: 'logical',\n operator: 'OR',\n left,\n right,\n };\n }\n }\n\n // Try each simple condition type\n return parseUserCheck(text, ctx) ||\n parseFieldCheck(text, ctx) ||\n parseComparison(text, ctx);\n}\n\n/**\n * Parse user check conditions\n * - \"user is manager\" → CurrentUser.role == \"manager\"\n * - \"user owns this\" → Order.ownerId == CurrentUser.id\n */\nfunction parseUserCheck(text: string, ctx: GuardParseContext): UserCheckCondition | null {\n const lowerText = text.toLowerCase();\n\n // \"user is [role]\"\n const roleMatch = lowerText.match(/^user\\s+is\\s+(\\w+)$/);\n if (roleMatch) {\n return {\n type: 'user_check',\n check: 'is_role',\n role: roleMatch[1],\n };\n }\n\n // \"user owns this\"\n if (lowerText === 'user owns this') {\n return {\n type: 'user_check',\n check: 'owns_this',\n ownerField: 'ownerId',\n };\n }\n\n return null;\n}\n\n/**\n * Parse field check conditions\n * - \"amount is provided\" → Order.amount != null\n * - \"amount is empty\" → Order.amount == null\n * - \"status is Pending\" → Order.status == \"Pending\"\n * - \"status is not Cancelled\" → Order.status != \"Cancelled\"\n */\nfunction parseFieldCheck(text: string, ctx: GuardParseContext): FieldCheckCondition | null {\n const lowerText = text.toLowerCase();\n\n // \"[field] is provided\"\n const providedMatch = text.match(/^(.+?)\\s+is\\s+provided$/i);\n if (providedMatch) {\n const field = parseFieldReference(providedMatch[1], ctx);\n if (field) {\n return {\n type: 'field_check',\n field,\n check: 'provided',\n };\n }\n }\n\n // \"[field] is empty\"\n const emptyMatch = text.match(/^(.+?)\\s+is\\s+empty$/i);\n if (emptyMatch) {\n const field = parseFieldReference(emptyMatch[1], ctx);\n if (field) {\n return {\n type: 'field_check',\n field,\n check: 'empty',\n };\n }\n }\n\n // \"[field] is not [value]\" (negated equality)\n const notEqualsMatch = text.match(/^(.+?)\\s+is\\s+not\\s+(.+)$/i);\n if (notEqualsMatch) {\n // This should be handled as a comparison with !=\n return null; // Let comparison parser handle it\n }\n\n // \"[field] is [value]\" (equality check)\n const equalsMatch = text.match(/^(.+?)\\s+is\\s+(.+)$/i);\n if (equalsMatch) {\n const fieldName = equalsMatch[1].trim();\n const value = equalsMatch[2].trim();\n\n // Skip if value is a keyword\n if (['provided', 'empty', 'not'].includes(value.toLowerCase())) {\n return null;\n }\n\n const field = parseFieldReference(fieldName, ctx);\n if (field) {\n return {\n type: 'field_check',\n field,\n check: 'equals',\n value: parseValue(value),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Parse comparison conditions\n * - \"amount > 1000\" → Order.amount > 1000\n * - \"amount >= 1000\" → Order.amount >= 1000\n * - \"status != 'Cancelled'\" → Order.status != \"Cancelled\"\n */\nfunction parseComparison(text: string, ctx: GuardParseContext): ComparisonCondition | null {\n // Try each operator\n const operators: { pattern: RegExp; operator: ComparisonOperator }[] = [\n { pattern: /^(.+?)\\s*>=\\s*(.+)$/, operator: '>=' },\n { pattern: /^(.+?)\\s*<=\\s*(.+)$/, operator: '<=' },\n { pattern: /^(.+?)\\s*!=\\s*(.+)$/, operator: '!=' },\n { pattern: /^(.+?)\\s*==\\s*(.+)$/, operator: '==' },\n { pattern: /^(.+?)\\s*>\\s*(.+)$/, operator: '>' },\n { pattern: /^(.+?)\\s*<\\s*(.+)$/, operator: '<' },\n ];\n\n // Also handle \"is not\" as !=\n const isNotMatch = text.match(/^(.+?)\\s+is\\s+not\\s+(.+)$/i);\n if (isNotMatch) {\n const field = parseFieldReference(isNotMatch[1], ctx);\n if (field) {\n return {\n type: 'comparison',\n field,\n operator: '!=',\n value: parseValue(isNotMatch[2]),\n };\n }\n }\n\n for (const { pattern, operator } of operators) {\n const match = text.match(pattern);\n if (match) {\n const field = parseFieldReference(match[1], ctx);\n if (field) {\n return {\n type: 'comparison',\n field,\n operator,\n value: parseValue(match[2]),\n };\n }\n }\n }\n\n return null;\n}\n\n/**\n * Parse a field reference\n * - \"amount\" → { entityName: \"Order\", fieldName: \"amount\" } (uses context)\n * - \"Order.amount\" → { entityName: \"Order\", fieldName: \"amount\" }\n * - \"tracking number\" → { entityName: \"Order\", fieldName: \"trackingNumber\" }\n */\nfunction parseFieldReference(text: string, ctx: GuardParseContext): FieldReference | null {\n text = text.trim();\n\n // Check for explicit entity reference (Entity.field)\n const dotMatch = text.match(/^(\\w+)\\.(\\w+)$/);\n if (dotMatch) {\n return {\n type: 'field_reference',\n entityName: dotMatch[1],\n fieldName: dotMatch[2],\n };\n }\n\n // Convert \"tracking number\" style to \"trackingNumber\"\n const fieldName = toCamelCase(text);\n\n return {\n type: 'field_reference',\n entityName: ctx.entityName,\n fieldName,\n };\n}\n\n/**\n * Parse a value (string, number, or boolean)\n */\nfunction parseValue(text: string): string | number | boolean {\n text = text.trim();\n\n // Remove quotes if present\n if ((text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))) {\n return text.slice(1, -1);\n }\n\n // Boolean\n if (text.toLowerCase() === 'true') return true;\n if (text.toLowerCase() === 'false') return false;\n\n // Number\n const num = parseFloat(text);\n if (!isNaN(num)) return num;\n\n // String (identifier-style value like \"Pending\")\n return text;\n}\n\n/**\n * Convert space-separated words to camelCase\n * \"tracking number\" → \"trackingNumber\"\n */\nfunction toCamelCase(text: string): string {\n return text\n .toLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join('');\n}\n\n/**\n * Split at top-level operator (not inside parentheses)\n */\nfunction splitAtTopLevel(text: string, separator: string): { left: string; right: string } | null {\n const separatorLower = separator.toLowerCase();\n const textLower = text.toLowerCase();\n\n let depth = 0;\n for (let i = 0; i <= textLower.length - separatorLower.length; i++) {\n const char = text[i];\n if (char === '(') depth++;\n else if (char === ')') depth--;\n else if (depth === 0 && textLower.slice(i, i + separatorLower.length) === separatorLower) {\n return {\n left: text.slice(0, i),\n right: text.slice(i + separator.length),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Format a guard condition back to KFlow schema guard string\n */\nexport function formatGuardToSchema(guard: DomainGuard): string {\n return formatConditionToSchema(guard.condition);\n}\n\nfunction formatConditionToSchema(condition: GuardCondition): string {\n switch (condition.type) {\n case 'field_check': {\n const fieldRef = `${condition.field.entityName}.${condition.field.fieldName}`;\n switch (condition.check) {\n case 'provided':\n return `${fieldRef} != null`;\n case 'empty':\n return `${fieldRef} == null`;\n case 'equals':\n const value = typeof condition.value === 'string'\n ? `\"${condition.value}\"`\n : condition.value;\n return `${fieldRef} == ${value}`;\n }\n break;\n }\n\n case 'comparison': {\n const fieldRef = `${condition.field.entityName}.${condition.field.fieldName}`;\n const value = typeof condition.value === 'string'\n ? `\"${condition.value}\"`\n : condition.value;\n return `${fieldRef} ${condition.operator} ${value}`;\n }\n\n case 'user_check': {\n if (condition.check === 'is_role') {\n return `CurrentUser.role == \"${condition.role}\"`;\n } else {\n return `${condition.ownerField} == CurrentUser.id`;\n }\n }\n\n case 'logical': {\n const left = formatConditionToSchema(condition.left);\n const right = formatConditionToSchema(condition.right);\n const op = condition.operator === 'AND' ? '&&' : '||';\n return `(${left}) ${op} (${right})`;\n }\n }\n\n return '';\n}\n\n/**\n * Format a guard condition back to domain language\n */\nexport function formatGuardToDomain(guard: DomainGuard): string {\n return 'if ' + formatConditionToDomain(guard.condition);\n}\n\nfunction formatConditionToDomain(condition: GuardCondition): string {\n switch (condition.type) {\n case 'field_check': {\n const fieldName = toSpaceSeparated(condition.field.fieldName);\n switch (condition.check) {\n case 'provided':\n return `${fieldName} is provided`;\n case 'empty':\n return `${fieldName} is empty`;\n case 'equals':\n return `${fieldName} is ${condition.value}`;\n }\n break;\n }\n\n case 'comparison': {\n const fieldName = toSpaceSeparated(condition.field.fieldName);\n const opMap: Record<string, string> = {\n '==': 'is',\n '!=': 'is not',\n '>': '>',\n '<': '<',\n '>=': '>=',\n '<=': '<=',\n };\n return `${fieldName} ${opMap[condition.operator] || condition.operator} ${condition.value}`;\n }\n\n case 'user_check': {\n if (condition.check === 'is_role') {\n return `user is ${condition.role}`;\n } else {\n return 'user owns this';\n }\n }\n\n case 'logical': {\n const left = formatConditionToDomain(condition.left);\n const right = formatConditionToDomain(condition.right);\n return `${left} ${condition.operator} ${right}`;\n }\n }\n\n return '';\n}\n\n/**\n * Convert camelCase to space-separated words\n * \"trackingNumber\" → \"tracking number\"\n */\nfunction toSpaceSeparated(text: string): string {\n return text.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();\n}\n","/**\n * S-Expression Parser\n *\n * Parses domain language text (guards/effects) back to S-Expression arrays.\n * This is the reverse of what sexpr-formatter.ts does.\n *\n * @example\n * parseDomainGuard(\"health is at least 0\") → [\">=\", \"@entity.health\", 0]\n * parseDomainEffect(\"update status to 'done'\") → [\"set\", \"@entity.status\", \"done\"]\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../../types/index.js';\nimport { getPatternDefinition } from '@almadar/patterns';\n\n// Helper functions for pattern validation\nfunction isKnownPattern(pattern: string): boolean {\n return getPatternDefinition(pattern) !== null;\n}\n\nfunction validatePatternReference(pattern: string): string | null {\n // Simple suggestion logic - could be enhanced\n return null;\n}\n\n// ============================================================================\n// Parse Warnings (collected during parsing)\n// ============================================================================\n\nexport interface ParseWarning {\n message: string;\n type: 'unknown-pattern' | 'invalid-syntax';\n}\n\nlet parseWarnings: ParseWarning[] = [];\n\n/**\n * Get and clear parse warnings from the last parse operation.\n */\nexport function getParseWarnings(): ParseWarning[] {\n const warnings = parseWarnings;\n parseWarnings = [];\n return warnings;\n}\n\n/**\n * Add a parse warning.\n */\nfunction addWarning(message: string, type: ParseWarning['type']): void {\n parseWarnings.push({ message, type });\n}\n\n// ============================================================================\n// Main API\n// ============================================================================\n\n/**\n * Parse a domain guard expression to S-Expression.\n *\n * @param text - Domain language guard (e.g., \"health is at least 0\", \"status is 'active'\")\n * @param entityName - The entity context for unqualified field references\n * @returns S-Expression array\n *\n * @example\n * parseDomainGuard(\"health is at least 0\") → [\">=\", \"@entity.health\", 0]\n * parseDomainGuard(\"status is 'active'\") → [\"=\", \"@entity.status\", \"active\"]\n * parseDomainGuard(\"x > 0 and y < 100\") → [\"and\", [\">\", \"@entity.x\", 0], [\"<\", \"@entity.y\", 100]]\n */\nexport function parseDomainGuard(text: string, entityName?: string): SExpr {\n const ctx: ParseContext = { entityName: entityName || '' };\n let expr = text.trim();\n\n // Remove \"if \" prefix if present\n if (expr.toLowerCase().startsWith('if ')) {\n expr = expr.slice(3).trim();\n }\n\n return parseExpression(expr, ctx);\n}\n\n/**\n * Parse a domain effect expression to S-Expression.\n *\n * @param text - Domain language effect (e.g., \"update status to 'done'\", \"emit ORDER_PLACED\")\n * @param entityName - The entity context for unqualified field references\n * @returns S-Expression array\n *\n * @example\n * parseDomainEffect(\"update status to 'done'\") → [\"set\", \"@entity.status\", \"done\"]\n * parseDomainEffect(\"emit ORDER_PLACED\") → [\"emit\", \"ORDER_PLACED\"]\n * parseDomainEffect(\"render entity-table to main\") → [\"render-ui\", \"main\", { type: \"entity-table\" }]\n */\nexport function parseDomainEffect(text: string, entityName?: string): SExpr {\n const ctx: ParseContext = { entityName: entityName || '' };\n let expr = text.trim();\n\n // Remove \"then \" prefix if present\n if (expr.toLowerCase().startsWith('then ')) {\n expr = expr.slice(5).trim();\n }\n\n return parseEffect(expr, ctx);\n}\n\n/**\n * Parse multiple domain effects (comma or \"then\" separated).\n *\n * @param text - Domain language effects\n * @param entityName - The entity context\n * @returns Array of S-Expressions (wrapped in [\"do\", ...] if multiple)\n */\nexport function parseDomainEffects(text: string, entityName?: string): SExpr[] {\n const ctx: ParseContext = { entityName: entityName || '' };\n let expr = text.trim();\n\n // Remove \"then \" prefix\n if (expr.toLowerCase().startsWith('then ')) {\n expr = expr.slice(5).trim();\n }\n\n // Split by \", then \" or just \"then\"\n const parts = expr.split(/,\\s*then\\s+|\\s+then\\s+/i).filter(p => p.trim());\n\n return parts.map(p => parseEffect(p.trim(), ctx));\n}\n\n// ============================================================================\n// Parse Context\n// ============================================================================\n\ninterface ParseContext {\n entityName: string;\n}\n\n// ============================================================================\n// Inline S-Expression / JSON Parsing\n// ============================================================================\n\n/**\n * Check if text is an inline S-Expression or JSON.\n *\n * Supports:\n * - JSON array: [...]\n * - JSON object: {...}\n * - Lisp S-Expression: (op args...)\n */\nfunction isInlineSExpr(text: string): boolean {\n const trimmed = text.trim();\n return trimmed.startsWith('[') || trimmed.startsWith('{') || trimmed.startsWith('(');\n}\n\n/**\n * Parse inline S-Expression or JSON to SExpr.\n *\n * Supports:\n * - JSON: [\"emit\", \"EVENT\"] or {\"type\": \"stats\"}\n * - Lisp: (emit EVENT) or (render-ui main {type: \"stats\"})\n */\nfunction parseInlineSExpr(text: string): SExpr {\n const trimmed = text.trim();\n\n // JSON array or object\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n try {\n return JSON.parse(trimmed);\n } catch {\n // Try relaxed JSON (single quotes, unquoted keys)\n return parseRelaxedJson(trimmed);\n }\n }\n\n // Lisp-style S-Expression: (op args...)\n if (trimmed.startsWith('(')) {\n return parseLispSExpr(trimmed);\n }\n\n throw new Error(`Invalid inline S-Expression: ${text}`);\n}\n\n/**\n * Parse relaxed JSON (allows single quotes, unquoted keys).\n */\nfunction parseRelaxedJson(text: string): SExpr {\n // Replace single quotes with double quotes (simple approach)\n let normalized = text;\n\n // Handle single-quoted strings\n normalized = normalized.replace(/'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/g, '\"$1\"');\n\n // Handle unquoted keys in objects: {key: value} → {\"key\": value}\n normalized = normalized.replace(/(\\{|,)\\s*(\\w+)\\s*:/g, '$1\"$2\":');\n\n try {\n return JSON.parse(normalized);\n } catch (e) {\n throw new Error(`Failed to parse relaxed JSON: ${text}`);\n }\n}\n\n/**\n * Parse Lisp-style S-Expression: (op arg1 arg2 ...)\n *\n * Examples:\n * - (emit EVENT) → [\"emit\", \"EVENT\"]\n * - (render-ui main {type: \"stats\"}) → [\"render-ui\", \"main\", {type: \"stats\"}]\n * - (and (> x 0) (< x 100)) → [\"and\", [\">\", \"x\", 0], [\"<\", \"x\", 100]]\n */\nfunction parseLispSExpr(text: string): SExpr {\n const trimmed = text.trim();\n\n if (!trimmed.startsWith('(') || !trimmed.endsWith(')')) {\n throw new Error(`Invalid Lisp S-Expression: ${text}`);\n }\n\n const inner = trimmed.slice(1, -1).trim();\n const tokens = tokenizeLisp(inner);\n\n if (tokens.length === 0) {\n return [];\n }\n\n return tokens.map(parseLispToken);\n}\n\n/**\n * Tokenize Lisp expression, respecting nested parens, braces, and quotes.\n */\nfunction tokenizeLisp(text: string): string[] {\n const tokens: string[] = [];\n let current = '';\n let depth = 0;\n let inString = false;\n let stringChar = '';\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n\n if (inString) {\n current += char;\n if (char === stringChar && text[i - 1] !== '\\\\') {\n inString = false;\n }\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n inString = true;\n stringChar = char;\n current += char;\n continue;\n }\n\n if (char === '(' || char === '[' || char === '{') {\n depth++;\n current += char;\n continue;\n }\n\n if (char === ')' || char === ']' || char === '}') {\n depth--;\n current += char;\n continue;\n }\n\n if (char === ' ' || char === '\\t' || char === '\\n') {\n if (depth === 0 && current.trim()) {\n tokens.push(current.trim());\n current = '';\n } else if (depth > 0) {\n current += char;\n }\n continue;\n }\n\n current += char;\n }\n\n if (current.trim()) {\n tokens.push(current.trim());\n }\n\n return tokens;\n}\n\n/**\n * Parse a single Lisp token to SExpr value.\n */\nfunction parseLispToken(token: string): SExpr {\n const trimmed = token.trim();\n\n // Nested S-Expression\n if (trimmed.startsWith('(')) {\n return parseLispSExpr(trimmed);\n }\n\n // JSON object or array\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n return parseRelaxedJson(trimmed);\n }\n\n // Quoted string\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.slice(1, -1);\n }\n\n // Number\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n return parseFloat(trimmed);\n }\n\n // Boolean\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n if (trimmed === 'null') return null;\n\n // Binding (starts with @)\n if (trimmed.startsWith('@')) {\n return trimmed;\n }\n\n // Symbol/identifier\n return trimmed;\n}\n\n// ============================================================================\n// Expression Parsing (Guards)\n// ============================================================================\n\n/**\n * Parse a general expression (guard context).\n */\nfunction parseExpression(text: string, ctx: ParseContext): SExpr {\n text = text.trim();\n\n // Check for inline S-Expression/JSON first\n if (isInlineSExpr(text)) {\n return parseInlineSExpr(text);\n }\n\n // Handle logical operators at top level\n const andMatch = splitAtTopLevel(text, ' and ');\n if (andMatch) {\n const left = parseExpression(andMatch.left, ctx);\n const right = parseExpression(andMatch.right, ctx);\n return ['and', left, right];\n }\n\n const orMatch = splitAtTopLevel(text, ' or ');\n if (orMatch) {\n const left = parseExpression(orMatch.left, ctx);\n const right = parseExpression(orMatch.right, ctx);\n return ['or', left, right];\n }\n\n // Handle \"not X\"\n if (text.toLowerCase().startsWith('not ')) {\n const inner = parseExpression(text.slice(4).trim(), ctx);\n return ['not', inner];\n }\n\n // Handle parentheses\n if (text.startsWith('(') && text.endsWith(')')) {\n return parseExpression(text.slice(1, -1), ctx);\n }\n\n // Parse comparison/condition\n return parseComparison(text, ctx);\n}\n\n/**\n * Parse a comparison expression.\n */\nfunction parseComparison(text: string, ctx: ParseContext): SExpr {\n // \"X is at least Y\" → [\">=\", X, Y]\n const atLeastMatch = text.match(/^(.+?)\\s+is\\s+at\\s+least\\s+(.+)$/i);\n if (atLeastMatch) {\n const field = parseFieldRef(atLeastMatch[1], ctx);\n const value = parseValue(atLeastMatch[2]);\n return ['>=', field, value];\n }\n\n // \"X is at most Y\" → [\"<=\", X, Y]\n const atMostMatch = text.match(/^(.+?)\\s+is\\s+at\\s+most\\s+(.+)$/i);\n if (atMostMatch) {\n const field = parseFieldRef(atMostMatch[1], ctx);\n const value = parseValue(atMostMatch[2]);\n return ['<=', field, value];\n }\n\n // \"X is greater than Y\" → [\">\", X, Y]\n const greaterThanMatch = text.match(/^(.+?)\\s+is\\s+greater\\s+than\\s+(.+)$/i);\n if (greaterThanMatch) {\n const field = parseFieldRef(greaterThanMatch[1], ctx);\n const value = parseValue(greaterThanMatch[2]);\n return ['>', field, value];\n }\n\n // \"X is less than Y\" → [\"<\", X, Y]\n const lessThanMatch = text.match(/^(.+?)\\s+is\\s+less\\s+than\\s+(.+)$/i);\n if (lessThanMatch) {\n const field = parseFieldRef(lessThanMatch[1], ctx);\n const value = parseValue(lessThanMatch[2]);\n return ['<', field, value];\n }\n\n // \"X is not Y\" → [\"!=\", X, Y]\n const isNotMatch = text.match(/^(.+?)\\s+is\\s+not\\s+(.+)$/i);\n if (isNotMatch) {\n const field = parseFieldRef(isNotMatch[1], ctx);\n const value = parseValue(isNotMatch[2]);\n return ['!=', field, value];\n }\n\n // \"X is Y\" → [\"=\", X, Y]\n const isMatch = text.match(/^(.+?)\\s+is\\s+(.+)$/i);\n if (isMatch) {\n const field = parseFieldRef(isMatch[1], ctx);\n const value = parseValue(isMatch[2]);\n return ['=', field, value];\n }\n\n // Operator-based comparisons: >=, <=, !=, ==, >, <\n const opPatterns: { pattern: RegExp; op: string }[] = [\n { pattern: /^(.+?)\\s*>=\\s*(.+)$/, op: '>=' },\n { pattern: /^(.+?)\\s*<=\\s*(.+)$/, op: '<=' },\n { pattern: /^(.+?)\\s*!=\\s*(.+)$/, op: '!=' },\n { pattern: /^(.+?)\\s*==\\s*(.+)$/, op: '=' },\n { pattern: /^(.+?)\\s*>\\s*(.+)$/, op: '>' },\n { pattern: /^(.+?)\\s*<\\s*(.+)$/, op: '<' },\n ];\n\n for (const { pattern, op } of opPatterns) {\n const match = text.match(pattern);\n if (match) {\n const left = parseFieldRef(match[1], ctx);\n const right = parseValue(match[2]);\n return [op, left, right];\n }\n }\n\n // Default: return as binding or literal\n return parseFieldRef(text, ctx);\n}\n\n// ============================================================================\n// Effect Parsing\n// ============================================================================\n\n/**\n * Parse an effect expression.\n *\n * Supports both human-readable syntax and inline S-Expressions:\n * - Human: update status to 'done'\n * - S-Expr: [\"set\", \"@entity.status\", \"done\"]\n * - Lisp: (set @entity.status \"done\")\n * - JSON: {\"type\": \"stats\", \"metrics\": [...]}\n */\nfunction parseEffect(text: string, ctx: ParseContext): SExpr {\n text = text.trim();\n\n // Check for inline S-Expression/JSON first (highest priority)\n if (isInlineSExpr(text)) {\n return parseInlineSExpr(text);\n }\n\n // \"update X to Y\" → [\"set\", \"@entity.X\", Y]\n const updateMatch = text.match(/^update\\s+(.+?)\\s+to\\s+(.+)$/i);\n if (updateMatch) {\n const field = parseFieldRef(updateMatch[1], ctx);\n const value = parseEffectValue(updateMatch[2], ctx);\n return ['set', field, value];\n }\n\n // \"emit EVENT with PAYLOAD\" → [\"emit\", \"EVENT\", PAYLOAD]\n const emitWithMatch = text.match(/^emit\\s+(\\S+)\\s+with\\s+(.+)$/i);\n if (emitWithMatch) {\n const event = emitWithMatch[1];\n const payload = parseEffectValue(emitWithMatch[2], ctx);\n return ['emit', event, payload];\n }\n\n // \"emit EVENT\" → [\"emit\", \"EVENT\"]\n const emitMatch = text.match(/^emit\\s+(\\S+)$/i);\n if (emitMatch) {\n return ['emit', emitMatch[1]];\n }\n\n // \"render null to SLOT\" → [\"render-ui\", \"SLOT\", null]\n const renderNullMatch = text.match(/^render\\s+null\\s+to\\s+(\\S+)$/i);\n if (renderNullMatch) {\n return ['render-ui', renderNullMatch[1], null];\n }\n\n // \"render PATTERN to SLOT for ENTITY with PROPS\" → [\"render-ui\", \"SLOT\", { type, entity, props }]\n const renderFullMatch = text.match(/^render\\s+(\\S+)\\s+to\\s+(\\S+)\\s+for\\s+(\\S+)\\s+with\\s+(.+)$/i);\n if (renderFullMatch) {\n const pattern = renderFullMatch[1];\n const slot = renderFullMatch[2];\n const entity = renderFullMatch[3];\n const propsText = renderFullMatch[4];\n const props = parseRenderProps(propsText);\n // Validate pattern type\n validatePatternType(pattern);\n return ['render-ui', slot, { type: pattern, entity, ...props }];\n }\n\n // \"render PATTERN to SLOT for ENTITY\" → [\"render-ui\", \"SLOT\", { type, entity }]\n const renderEntityMatch = text.match(/^render\\s+(\\S+)\\s+to\\s+(\\S+)\\s+for\\s+(\\S+)$/i);\n if (renderEntityMatch) {\n const pattern = renderEntityMatch[1];\n const slot = renderEntityMatch[2];\n const entity = renderEntityMatch[3];\n // Validate pattern type\n validatePatternType(pattern);\n return ['render-ui', slot, { type: pattern, entity }];\n }\n\n // \"render PATTERN to SLOT with PROPS\" → [\"render-ui\", \"SLOT\", { type, props }]\n const renderPropsMatch = text.match(/^render\\s+(\\S+)\\s+to\\s+(\\S+)\\s+with\\s+(.+)$/i);\n if (renderPropsMatch) {\n const pattern = renderPropsMatch[1];\n const slot = renderPropsMatch[2];\n const propsText = renderPropsMatch[3];\n const props = parseRenderProps(propsText);\n // Validate pattern type\n validatePatternType(pattern);\n return ['render-ui', slot, { type: pattern, ...props }];\n }\n\n // \"render PATTERN to SLOT\" → [\"render-ui\", \"SLOT\", { type: \"PATTERN\" }]\n const renderMatch = text.match(/^render\\s+(\\S+)\\s+to\\s+(\\S+)$/i);\n if (renderMatch) {\n const pattern = renderMatch[1];\n const slot = renderMatch[2];\n // Validate pattern type\n validatePatternType(pattern);\n return ['render-ui', slot, { type: pattern }];\n }\n\n // \"render to SLOT\" → [\"render-ui\", \"SLOT\"]\n const renderSlotMatch = text.match(/^render\\s+to\\s+(\\S+)$/i);\n if (renderSlotMatch) {\n return ['render-ui', renderSlotMatch[1]];\n }\n\n // \"navigate to PATH with PARAMS\" → [\"navigate\", \"PATH\", PARAMS]\n const navWithMatch = text.match(/^navigate\\s+to\\s+(.+?)\\s+with\\s+(.+)$/i);\n if (navWithMatch) {\n const path = navWithMatch[1];\n const params = parseEffectValue(navWithMatch[2], ctx);\n return ['navigate', path, params];\n }\n\n // \"navigate to PATH\" → [\"navigate\", \"PATH\"]\n const navMatch = text.match(/^navigate\\s+to\\s+(.+)$/i);\n if (navMatch) {\n return ['navigate', navMatch[1]];\n }\n\n // \"show TYPE notification MESSAGE\" → [\"notify\", \"MESSAGE\", \"TYPE\"]\n const showNotifyMatch = text.match(/^show\\s+(\\w+)\\s+notification\\s+\"(.+)\"$/i);\n if (showNotifyMatch) {\n return ['notify', showNotifyMatch[2], showNotifyMatch[1]];\n }\n\n // \"notify MESSAGE\" → [\"notify\", \"MESSAGE\"]\n const notifyMatch = text.match(/^notify\\s+\"(.+)\"$/i);\n if (notifyMatch) {\n return ['notify', notifyMatch[1]];\n }\n\n // \"persist ACTION DATA\" → [\"persist\", \"ACTION\", DATA]\n const persistWithMatch = text.match(/^persist\\s+(\\w+)\\s+(.+)$/i);\n if (persistWithMatch) {\n const action = persistWithMatch[1];\n const data = parseFieldRef(persistWithMatch[2], ctx);\n return ['persist', action, data];\n }\n\n // \"persist ACTION\" → [\"persist\", \"ACTION\"]\n const persistMatch = text.match(/^persist\\s+(\\w+)$/i);\n if (persistMatch) {\n return ['persist', persistMatch[1]];\n }\n\n // \"spawn ENTITY with PROPS\" → [\"spawn\", \"ENTITY\", PROPS]\n const spawnWithMatch = text.match(/^spawn\\s+(\\S+)\\s+with\\s+(.+)$/i);\n if (spawnWithMatch) {\n const entityType = spawnWithMatch[1];\n const props = parseEffectValue(spawnWithMatch[2], ctx);\n return ['spawn', entityType, props];\n }\n\n // \"spawn ENTITY\" → [\"spawn\", \"ENTITY\"]\n const spawnMatch = text.match(/^spawn\\s+(\\S+)$/i);\n if (spawnMatch) {\n return ['spawn', spawnMatch[1]];\n }\n\n // \"despawn ID\" → [\"despawn\", ID]\n const despawnIdMatch = text.match(/^despawn\\s+(.+)$/i);\n if (despawnIdMatch && despawnIdMatch[1] !== 'this') {\n return ['despawn', parseFieldRef(despawnIdMatch[1], ctx)];\n }\n\n // \"despawn this\" or \"despawn\" → [\"despawn\"]\n if (text.toLowerCase() === 'despawn' || text.toLowerCase() === 'despawn this') {\n return ['despawn'];\n }\n\n // \"call SERVICE.ACTION\" → [\"call-service\", \"SERVICE\", \"ACTION\"]\n const callServiceMatch = text.match(/^call\\s+(\\w+)\\.(\\w+)$/i);\n if (callServiceMatch) {\n return ['call-service', callServiceMatch[1], callServiceMatch[2]];\n }\n\n // \"call SERVICE\" → [\"call-service\", \"SERVICE\"]\n const callMatch = text.match(/^call\\s+(\\S+)$/i);\n if (callMatch) {\n return ['call-service', callMatch[1]];\n }\n\n // Fallback: return as literal\n return text;\n}\n\n// ============================================================================\n// Field Reference Parsing\n// ============================================================================\n\n/**\n * Parse a field reference to a binding.\n * Converts domain text to @entity.field format.\n */\nfunction parseFieldRef(text: string, ctx: ParseContext): string {\n text = text.trim();\n\n // Already a binding (@entity.field, @payload.field, etc.)\n if (text.startsWith('@')) {\n return text;\n }\n\n // \"current state\" → \"@state\"\n if (text.toLowerCase() === 'current state') {\n return '@state';\n }\n\n // \"current time\" → \"@now\"\n if (text.toLowerCase() === 'current time') {\n return '@now';\n }\n\n // \"entity\" alone → \"@entity\"\n if (text.toLowerCase() === 'entity') {\n return '@entity';\n }\n\n // \"payload\" alone → \"@payload\"\n if (text.toLowerCase() === 'payload') {\n return '@payload';\n }\n\n // \"incoming X\" → \"@payload.X\"\n if (text.toLowerCase().startsWith('incoming ')) {\n const field = toCamelCase(text.slice(9).trim());\n return `@payload.${field}`;\n }\n\n // \"X's Y\" → \"@X.Y\" (singleton binding)\n const possessiveMatch = text.match(/^(\\w+)'s\\s+(.+)$/);\n if (possessiveMatch) {\n const entity = possessiveMatch[1];\n const field = toCamelCase(possessiveMatch[2]);\n return `@${entity}.${field}`;\n }\n\n // \"Entity.field\" → \"@Entity.field\"\n if (text.includes('.')) {\n // Check if first part is capitalized (entity reference)\n const parts = text.split('.');\n if (parts[0] && /^[A-Z]/.test(parts[0])) {\n return `@${text}`;\n }\n // Otherwise it's an entity field\n return `@entity.${text}`;\n }\n\n // Simple field name → \"@entity.fieldName\"\n const fieldName = toCamelCase(text);\n return `@entity.${fieldName}`;\n}\n\n// ============================================================================\n// Value Parsing\n// ============================================================================\n\n/**\n * Parse a value (can be literal or binding).\n */\nfunction parseValue(text: string): SExpr {\n text = text.trim();\n\n // Quoted string\n if ((text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))) {\n return text.slice(1, -1);\n }\n\n // \"nothing\" or \"null\" → null\n if (text.toLowerCase() === 'nothing' || text.toLowerCase() === 'null') {\n return null as unknown as SExpr;\n }\n\n // Boolean\n if (text.toLowerCase() === 'true') return true;\n if (text.toLowerCase() === 'false') return false;\n\n // Number\n const num = parseFloat(text);\n if (!isNaN(num) && text.match(/^-?\\d+(\\.\\d+)?$/)) {\n return num;\n }\n\n // Already a binding\n if (text.startsWith('@')) {\n return text;\n }\n\n // Simple identifier - could be an enum value or string\n if (/^[a-zA-Z_]\\w*$/.test(text)) {\n return text;\n }\n\n // Default: return as string\n return text;\n}\n\n/**\n * Parse a value in effect context (handles nested expressions).\n */\nfunction parseEffectValue(text: string, ctx: ParseContext): SExpr {\n text = text.trim();\n\n // JSON object literal\n if (text.startsWith('{') && text.endsWith('}')) {\n try {\n // Handle binding references in JSON\n const processed = text.replace(/@[\\w.]+/g, (match) => `\"${match}\"`);\n const obj = JSON.parse(processed);\n // Convert quoted bindings back\n return processBindingsInObject(obj);\n } catch {\n // Not valid JSON, return as-is\n return text;\n }\n }\n\n // Arithmetic expression\n const arithmeticMatch = text.match(/^\\((.+?)\\s+(plus|minus|times|divided by)\\s+(.+)\\)$/i);\n if (arithmeticMatch) {\n const left = parseEffectValue(arithmeticMatch[1], ctx);\n const right = parseEffectValue(arithmeticMatch[3], ctx);\n const opMap: Record<string, string> = {\n 'plus': '+',\n 'minus': '-',\n 'times': '*',\n 'divided by': '/',\n };\n return [opMap[arithmeticMatch[2].toLowerCase()] || arithmeticMatch[2], left, right];\n }\n\n // Field reference\n if (text.includes('.') || text.toLowerCase().startsWith('incoming ') ||\n text.match(/^\\w+'s\\s+/) || /^[a-z]/.test(text)) {\n // Looks like a field reference\n return parseFieldRef(text, ctx);\n }\n\n // Delegate to parseValue\n return parseValue(text);\n}\n\n/**\n * Process bindings in a parsed JSON object.\n */\nfunction processBindingsInObject(obj: unknown): SExpr {\n if (obj === null || obj === undefined) {\n return null as unknown as SExpr;\n }\n\n if (typeof obj === 'string') {\n // Convert quoted binding back\n if (obj.startsWith('@')) {\n return obj;\n }\n return obj;\n }\n\n if (typeof obj !== 'object') {\n return obj as SExpr;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(processBindingsInObject) as SExpr;\n }\n\n // Object\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = processBindingsInObject(value);\n }\n return result as SExpr;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Split at top-level separator (not inside parentheses).\n */\nfunction splitAtTopLevel(text: string, separator: string): { left: string; right: string } | null {\n const separatorLower = separator.toLowerCase();\n const textLower = text.toLowerCase();\n\n let depth = 0;\n for (let i = 0; i <= textLower.length - separatorLower.length; i++) {\n const char = text[i];\n if (char === '(' || char === '[' || char === '{') depth++;\n else if (char === ')' || char === ']' || char === '}') depth--;\n else if (depth === 0 && textLower.slice(i, i + separatorLower.length) === separatorLower) {\n return {\n left: text.slice(0, i).trim(),\n right: text.slice(i + separator.length).trim(),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Convert space-separated text to camelCase.\n * Preserves existing camelCase (single word with mixed case).\n */\nfunction toCamelCase(text: string): string {\n const words = text.split(/\\s+/);\n\n // If single word, preserve its casing (e.g., \"isActive\" stays \"isActive\")\n if (words.length === 1) {\n return words[0];\n }\n\n // Multiple words: convert to camelCase\n return words\n .map((word, index) =>\n index === 0\n ? word.toLowerCase()\n : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n )\n .join('');\n}\n\n/**\n * Split array content by commas, respecting quoted strings\n */\nfunction splitArrayItems(content: string): string[] {\n const items: string[] = [];\n let current = '';\n let inQuote = false;\n let quoteChar = '';\n\n for (let i = 0; i < content.length; i++) {\n const char = content[i];\n\n if ((char === \"'\" || char === '\"') && (i === 0 || content[i - 1] !== '\\\\')) {\n if (!inQuote) {\n inQuote = true;\n quoteChar = char;\n } else if (char === quoteChar) {\n inQuote = false;\n }\n current += char;\n } else if (char === ',' && !inQuote) {\n if (current.trim()) {\n items.push(current.trim());\n }\n current = '';\n } else {\n current += char;\n }\n }\n\n if (current.trim()) {\n items.push(current.trim());\n }\n\n return items;\n}\n\n/**\n * Remove quotes from a string value\n */\nfunction unquote(value: string): string {\n const trimmed = value.trim();\n if ((trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) ||\n (trimmed.startsWith('\"') && trimmed.endsWith('\"'))) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\n\n/**\n * Generic syntax patterns detected by markers:\n *\n * 1. \"as\" pattern: field as 'Label' → {field, label}\n * Used for: metrics, columns, any labeled field\n *\n * 2. \"->\" pattern: Label -> EVENT → {label, event}\n * With variant: Label -> EVENT:variant → {label, event, variant}\n * Used for: itemActions, buttons, any action binding\n *\n * 3. \":\" + \"->\" pattern: id: 'Label' -> EVENT → {id, label, event}\n * Used for: tabs, navigation items\n *\n * 4. \"@\" pattern: section @ span → {section, colSpan}\n * With row span: section @ colxrow → {section, colSpan, rowSpan}\n * Used for: cells, grid layouts\n *\n * The parser auto-detects which pattern based on syntax markers,\n * so any prop can use any pattern without hardcoding prop names.\n */\nfunction parseArrayItem(item: string): unknown {\n const trimmed = item.trim();\n\n // Pattern 3: id: 'Label' -> EVENT (has both : and ->)\n const tabMatch = trimmed.match(/^(\\w+):\\s*['\"]([^'\"]+)['\"]\\s*->\\s*(\\w+)$/);\n if (tabMatch) {\n return { id: tabMatch[1], label: tabMatch[2], event: tabMatch[3] };\n }\n\n // Pattern 2 with variant: Label -> EVENT:variant\n const actionVariantMatch = trimmed.match(/^([^->]+)\\s*->\\s*(\\w+):(\\w+)$/);\n if (actionVariantMatch) {\n return {\n label: actionVariantMatch[1].trim(),\n event: actionVariantMatch[2],\n variant: actionVariantMatch[3],\n };\n }\n\n // Pattern 2: Label -> EVENT or 'Label' -> EVENT\n const actionMatch = trimmed.match(/^(['\"]?)([^'\"->]+)\\1\\s*->\\s*(\\w+)$/);\n if (actionMatch) {\n return { label: actionMatch[2].trim(), event: actionMatch[3] };\n }\n\n // Pattern 4 with rowSpan: section @ colxrow\n const cellSpanMatch = trimmed.match(/^(\\w+)\\s*@\\s*(\\d+)x(\\d+)$/);\n if (cellSpanMatch) {\n return {\n section: cellSpanMatch[1],\n colSpan: parseInt(cellSpanMatch[2], 10),\n rowSpan: parseInt(cellSpanMatch[3], 10),\n };\n }\n\n // Pattern 4: section @ span\n const cellMatch = trimmed.match(/^(\\w+)\\s*@\\s*(\\d+)$/);\n if (cellMatch) {\n return {\n section: cellMatch[1],\n colSpan: parseInt(cellMatch[2], 10),\n };\n }\n\n // Pattern 1: field as 'Label' or field as \"Label\"\n const asMatch = trimmed.match(/^(\\w+)\\s+as\\s+['\"]([^'\"]+)['\"]$/);\n if (asMatch) {\n return { field: asMatch[1], label: asMatch[2] };\n }\n\n // No pattern detected - return as simple string\n return unquote(trimmed);\n}\n\n/**\n * Parse array content, auto-detecting complex syntax patterns\n */\nfunction parseArrayProp(content: string): unknown[] {\n const items = splitArrayItems(content);\n return items.map(parseArrayItem);\n}\n\n/**\n * Check if array content contains complex syntax markers\n */\nfunction hasComplexSyntax(content: string): boolean {\n return /\\s+as\\s+['\"]/.test(content) || // \"as\" pattern\n /->\\s*\\w+/.test(content) || // \"->\" pattern\n /\\w+\\s*@\\s*\\d+/.test(content); // \"@\" pattern\n}\n\n/**\n * Parse render props from text like \"title 'Notes'\" or \"columns [title, createdAt]\"\n *\n * Auto-detects complex array syntax based on markers:\n * - \"as\" pattern: field as 'Label' → {field, label}\n * - \"->\" pattern: Label -> EVENT → {label, event}\n * - \":\" + \"->\" pattern: id: 'Label' -> EVENT → {id, label, event}\n * - \"@\" pattern: section @ span → {section, colSpan}\n *\n * Works generically for any prop name - no need to hardcode specific keys.\n */\nfunction parseRenderProps(text: string): Record<string, unknown> {\n const props: Record<string, unknown> = {};\n\n // Match \"key 'value'\" or \"key [array]\" or \"key value\"\n const propsRegex = /(\\w+)\\s+(?:'([^']+)'|\"([^\"]+)\"|\\[([^\\]]+)\\]|(\\S+))/g;\n let match;\n\n while ((match = propsRegex.exec(text)) !== null) {\n const key = match[1];\n const singleQuoted = match[2];\n const doubleQuoted = match[3];\n const arrayContent = match[4];\n const bareValue = match[5];\n\n if (singleQuoted !== undefined) {\n props[key] = singleQuoted;\n } else if (doubleQuoted !== undefined) {\n props[key] = doubleQuoted;\n } else if (arrayContent !== undefined) {\n // Auto-detect complex syntax based on markers, not key names\n if (hasComplexSyntax(arrayContent)) {\n props[key] = parseArrayProp(arrayContent);\n } else {\n // Simple array: \"title, createdAt\" → [\"title\", \"createdAt\"]\n props[key] = arrayContent.split(/\\s*,\\s*/).map(s => s.trim());\n }\n } else if (bareValue !== undefined) {\n // Try to parse as number or boolean\n if (bareValue === 'true') props[key] = true;\n else if (bareValue === 'false') props[key] = false;\n else if (/^\\d+(\\.\\d+)?$/.test(bareValue)) props[key] = parseFloat(bareValue);\n else props[key] = bareValue;\n }\n }\n\n return props;\n}\n\n/**\n * Validate a pattern type against the registry.\n * Adds a warning if the pattern is unknown.\n */\nfunction validatePatternType(pattern: string): void {\n if (!isKnownPattern(pattern)) {\n const suggestion = validatePatternReference(pattern);\n addWarning(\n suggestion || `Unknown pattern type: \"${pattern}\"`,\n 'unknown-pattern'\n );\n }\n}\n","/**\n * Behavior Parser\n *\n * Parses behavior/trait definitions from domain language.\n * Behaviors define state machines with transitions, guards, and effects.\n * All entity references are explicit (e.g., Order.status, CurrentUser.role).\n */\n\nimport type {\n DomainBehavior,\n DomainTransition,\n DomainTick,\n DomainGuard,\n DomainEffect,\n ParseResult,\n ParseError,\n} from '../types.js';\nimport { Lexer } from '../lexer.js';\nimport { TokenType } from '../tokens.js';\nimport { parseGuard } from './guard-parser.js';\nimport { parseDomainEffect, parseDomainGuard } from './sexpr-parser.js';\n\ninterface BehaviorParseContext {\n entityName: string;\n errors: ParseError[];\n warnings: ParseError[];\n}\n\n/**\n * Parse a behavior definition from domain text\n *\n * @example\n * parseBehavior(`\n * Order Lifecycle\n *\n * States: Pending, Confirmed, Shipped, Delivered, Cancelled\n *\n * Transitions:\n * - From Pending to Confirmed when CONFIRM\n * if Order.amount > 0\n * then notify customer\n * - From Confirmed to Shipped when SHIP\n * - From Shipped to Delivered when DELIVER\n * - From any to Cancelled when CANCEL\n * if Order.status is not Delivered\n *\n * Rules:\n * - Orders over $1000 require manager approval\n * - Cancelled orders cannot be reactivated\n * `, \"Order\")\n */\nexport function parseBehavior(text: string, entityName: string): ParseResult<DomainBehavior> {\n const ctx: BehaviorParseContext = { entityName, errors: [], warnings: [] };\n const lexer = new Lexer(text);\n const tokens = lexer.tokenize();\n\n let pos = 0;\n\n // Helper functions\n const current = () => tokens[pos] || { type: TokenType.EOF, value: '', line: 0, column: 0, offset: 0 };\n const advance = () => tokens[pos++];\n const isAtEnd = () => current().type === TokenType.EOF;\n const skip = (type: TokenType) => {\n while (current().type === type) advance();\n };\n\n // Skip leading whitespace\n skip(TokenType.NEWLINE);\n\n // Parse behavior name (first line)\n const behaviorName = parseBehaviorName();\n if (!behaviorName) {\n return {\n success: false,\n errors: ctx.errors.length > 0 ? ctx.errors : [{\n message: 'Expected behavior name at start of definition',\n }],\n warnings: [],\n };\n }\n\n const behavior: DomainBehavior = {\n type: 'behavior',\n name: behaviorName,\n entityName,\n states: [],\n initialState: '',\n transitions: [],\n ticks: [],\n rules: [],\n };\n\n skip(TokenType.NEWLINE);\n\n // Parse remaining sections\n while (!isAtEnd()) {\n skip(TokenType.NEWLINE);\n if (isAtEnd()) break;\n\n const parsed = parseBehaviorSection(behavior);\n if (!parsed) {\n advance();\n }\n }\n\n // Set initial state if not specified\n if (!behavior.initialState && behavior.states.length > 0) {\n behavior.initialState = behavior.states[0];\n }\n\n return {\n success: true,\n data: behavior,\n errors: ctx.errors,\n warnings: ctx.warnings,\n };\n\n // === Helper Functions ===\n\n function parseBehaviorName(): string | null {\n const nameParts: string[] = [];\n\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n // Check for \"Entity:\" section - extract entity name\n if (current().type === TokenType.IDENTIFIER && current().value.toLowerCase() === 'entity') {\n advance(); // skip \"Entity\"\n if (current().type === TokenType.COLON) {\n advance(); // skip \":\"\n // Next identifier is the entity name\n if (current().type === TokenType.IDENTIFIER) {\n ctx.entityName = current().value;\n advance();\n }\n }\n continue;\n }\n\n // Skip parentheses (for syntax like \"behavior (Entity: X)\")\n if (current().type === TokenType.LPAREN || current().type === TokenType.RPAREN) {\n advance();\n continue;\n }\n\n // Collect identifiers, lifecycle keywords, and AUTO keyword (for names like \"Auto Save\")\n // Skip \"behavior\" keyword and colon\n if (current().type === TokenType.IDENTIFIER ||\n current().type === TokenType.LIFECYCLE ||\n current().type === TokenType.AUTO) {\n nameParts.push(current().value);\n }\n // Skip the \"behavior\" keyword (don't include it in the name)\n // Also skip colon\n advance();\n }\n\n if (nameParts.length === 0) {\n return null;\n }\n\n return nameParts.join(' ');\n }\n\n function parseBehaviorSection(behavior: DomainBehavior): boolean {\n const token = current();\n\n // \"Entity: [entityName]\" - explicit entity association\n if (token.type === TokenType.IDENTIFIER && token.value.toLowerCase() === 'entity') {\n advance();\n skip(TokenType.COLON);\n if (current().type === TokenType.IDENTIFIER) {\n ctx.entityName = current().value;\n behavior.entityName = current().value;\n advance();\n }\n return true;\n }\n\n // \"States: [state1], [state2], ...\"\n if (token.type === TokenType.STATES) {\n advance();\n skip(TokenType.COLON);\n parseStatesLine(behavior);\n return true;\n }\n\n // \"Initial: [state]\"\n if (token.type === TokenType.INITIAL) {\n advance();\n skip(TokenType.COLON);\n if (current().type === TokenType.IDENTIFIER) {\n behavior.initialState = current().value;\n advance();\n }\n return true;\n }\n\n // \"Transitions:\"\n if (token.type === TokenType.TRANSITIONS) {\n advance();\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n parseTransitionsSection(behavior);\n return true;\n }\n\n // \"Rules:\"\n if (token.type === TokenType.RULES) {\n advance();\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n parseRulesSection(behavior);\n return true;\n }\n\n // \"Every [interval]:\" - ticks\n if (token.type === TokenType.EVERY) {\n advance();\n parseTick(behavior);\n return true;\n }\n\n // \"Lifecycle\" keyword at section level\n if (token.type === TokenType.LIFECYCLE) {\n advance();\n return true;\n }\n\n return false;\n }\n\n function parseStatesLine(behavior: DomainBehavior): void {\n const states: string[] = [];\n\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n if (current().type === TokenType.IDENTIFIER) {\n states.push(current().value);\n }\n advance();\n }\n\n behavior.states = states;\n }\n\n function parseTransitionsSection(behavior: DomainBehavior): void {\n // Check for INDENT\n if (current().type === TokenType.INDENT) {\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Only try to parse if we see DASH or FROM (transition markers)\n if (current().type === TokenType.DASH ||\n current().type === TokenType.FROM) {\n const transition = parseTransitionLine();\n if (transition) {\n behavior.transitions.push(transition);\n }\n } else {\n // Skip unrecognized content (e.g., \"filter\" effects that aren't standard)\n // Advance to next line to avoid infinite loop\n while (!isAtEnd() &&\n current().type !== TokenType.NEWLINE &&\n current().type !== TokenType.DEDENT) {\n advance();\n }\n }\n }\n\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n } else {\n // Parse inline transitions (non-indented)\n while (!isAtEnd() &&\n current().type !== TokenType.RULES &&\n current().type !== TokenType.EVERY) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.RULES ||\n current().type === TokenType.EVERY ||\n isAtEnd()) break;\n\n if (current().type === TokenType.DASH ||\n current().type === TokenType.FROM) {\n const transition = parseTransitionLine();\n if (transition) {\n behavior.transitions.push(transition);\n }\n } else {\n advance();\n }\n }\n }\n }\n\n function parseTransitionLine(): DomainTransition | null {\n // Skip dash if present\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n // Expect \"From\"\n if (current().type !== TokenType.FROM) {\n return null;\n }\n advance();\n\n // Get \"from\" state\n let fromState = '';\n if (current().type === TokenType.IDENTIFIER) {\n fromState = current().value;\n advance();\n }\n\n // Handle \"any\" as wildcard\n if (fromState.toLowerCase() === 'any') {\n fromState = '*';\n }\n\n // Expect \"to\"\n if (current().type !== TokenType.TO) {\n ctx.errors.push({ message: `Expected \"to\" in transition from \"${fromState}\"` });\n return null;\n }\n advance();\n\n // Get \"to\" state\n let toState = '';\n if (current().type === TokenType.IDENTIFIER) {\n toState = current().value;\n advance();\n }\n\n // Expect \"when\" for event\n let event = '';\n if (current().type === TokenType.WHEN) {\n advance();\n if (current().type === TokenType.IDENTIFIER) {\n event = current().value;\n advance();\n }\n }\n\n const transition: DomainTransition = {\n type: 'transition',\n fromState,\n toState,\n event: event.toUpperCase(),\n guards: [],\n effects: [],\n };\n\n skip(TokenType.NEWLINE);\n\n // Parse optional guard (\"if ...\")\n if (current().type === TokenType.INDENT) {\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // \"if [condition]\"\n if (current().type === TokenType.IF) {\n const guardText = collectLine();\n const guardResult = parseGuard(guardText, entityName);\n if (guardResult.success && guardResult.data) {\n transition.guards.push(guardResult.data);\n }\n continue;\n }\n\n // \"then [effect]\"\n if (current().type === TokenType.THEN) {\n advance();\n const effectText = collectUntilNewline();\n const effect = parseEffectText(effectText);\n if (effect) {\n transition.effects.push(effect);\n }\n continue;\n }\n\n // Skip any other token to prevent infinite loop\n if (current().type !== TokenType.NEWLINE && current().type !== TokenType.DEDENT) {\n advance();\n }\n\n skip(TokenType.NEWLINE);\n }\n\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n } else {\n // Check for inline \"if\" on same line\n if (current().type === TokenType.IF) {\n const guardText = collectLine();\n const guardResult = parseGuard(guardText, entityName);\n if (guardResult.success && guardResult.data) {\n transition.guards.push(guardResult.data);\n }\n }\n }\n\n return transition;\n }\n\n function parseRulesSection(behavior: DomainBehavior): void {\n if (current().type === TokenType.INDENT) {\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Skip dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n const rule = collectUntilNewline();\n if (rule) {\n behavior.rules.push(rule);\n }\n\n skip(TokenType.NEWLINE);\n }\n\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n }\n\n function parseTick(behavior: DomainBehavior): void {\n // Collect interval specification\n const intervalParts: string[] = [];\n while (!isAtEnd() &&\n current().type !== TokenType.COLON &&\n current().type !== TokenType.NEWLINE) {\n intervalParts.push(current().value);\n advance();\n }\n\n const interval = intervalParts.join(' ');\n\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n\n const tick: DomainTick = {\n type: 'tick',\n name: `tick_${interval.replace(/\\s+/g, '_').toLowerCase()}`,\n interval,\n intervalMs: parseInterval(interval),\n effects: [],\n };\n\n // Parse tick body (guard and effects)\n if (current().type === TokenType.INDENT) {\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // \"if [condition]\" - guard\n if (current().type === TokenType.IF) {\n const guardText = collectLine();\n const guardResult = parseGuard(guardText, entityName);\n if (guardResult.success && guardResult.data) {\n tick.guard = guardResult.data;\n }\n }\n\n // \"then [effect]\" or \"[effect]\"\n if (current().type === TokenType.THEN) {\n advance();\n }\n\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n const effectText = collectUntilNewline();\n if (effectText && current().type !== TokenType.IF) {\n const effect = parseEffectText(effectText);\n if (effect) {\n tick.effects.push(effect);\n }\n }\n\n skip(TokenType.NEWLINE);\n }\n\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n behavior.ticks.push(tick);\n }\n\n function collectLine(): string {\n return collectTokensSmartJoin();\n }\n\n function collectUntilNewline(): string {\n return collectTokensSmartJoin();\n }\n\n /**\n * Collect tokens and join them smartly - no spaces around dashes/dots\n * to preserve patterns like \"page-header\" and \"entity.field\"\n *\n * When insideArray is detected (starts with [), STRING tokens are quoted\n * to preserve valid JSON for S-expression parsing.\n */\n function collectTokensSmartJoin(): string {\n const parts: { value: string; type: TokenType }[] = [];\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n parts.push({ value: current().value, type: current().type });\n advance();\n }\n\n // Check if this looks like an S-expression (starts with [)\n // If so, we need to quote STRING tokens to preserve valid JSON\n const startsWithBracket = parts.length > 0 && parts[0].type === TokenType.LBRACKET;\n\n // Smart join: no spaces before/after DASH, DOT, or brackets\n let result = '';\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const prev = parts[i - 1];\n\n // Don't add space before dash, dot, comma, colon, or closing brackets\n const noSpaceBefore = part.type === TokenType.DASH ||\n part.type === TokenType.DOT ||\n part.type === TokenType.COMMA ||\n part.type === TokenType.COLON ||\n part.type === TokenType.RBRACKET ||\n part.type === TokenType.RPAREN;\n\n // Don't add space after dash, dot, or open brackets\n const prevNoSpaceAfter = prev &&\n (prev.type === TokenType.DASH ||\n prev.type === TokenType.DOT ||\n prev.type === TokenType.LBRACKET ||\n prev.type === TokenType.LPAREN);\n\n if (i > 0 && !noSpaceBefore && !prevNoSpaceAfter) {\n result += ' ';\n }\n\n // Quote STRING tokens if we're inside an S-expression to preserve valid JSON\n if (startsWithBracket && part.type === TokenType.STRING) {\n result += `\"${part.value}\"`;\n } else {\n result += part.value;\n }\n }\n\n return result.trim();\n }\n\n function parseEffectText(text: string): DomainEffect | null {\n const trimmed = text.trim();\n const lower = trimmed.toLowerCase();\n\n // First, check if this is a raw S-expression (JSON array like [\"render-ui\", ...])\n // Domain text from LLM may contain S-expressions directly\n if (trimmed.startsWith('[')) {\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed) && parsed.length > 0) {\n const effectOp = String(parsed[0]);\n // Return with effectType from first element\n // Keep the raw JSON in description - formatBehaviorToSchema will handle it\n // Cast to DomainEffect['effectType'] since we're parsing dynamic LLM content\n return {\n type: 'effect',\n effectType: effectOp as DomainEffect['effectType'],\n description: trimmed,\n config: { _rawSExpr: parsed }, // Store parsed S-expression\n };\n }\n } catch {\n // Not valid JSON, fall through to other handlers\n }\n }\n\n // \"persist [action] [entity]\" - persist effect\n const persistMatch = text.match(/^persist\\s+(\\w+)(?:\\s+(\\w+))?$/i);\n if (persistMatch) {\n return {\n type: 'effect',\n effectType: 'persist',\n description: text,\n config: {\n dataAction: persistMatch[1].toLowerCase(),\n entity: persistMatch[2] || undefined,\n },\n };\n }\n\n // \"send_in_app to [userId] title [title] message [message] type [type]\" - notify effect\n const sendInAppMatch = text.match(/^send_in_app\\s+to\\s+(.+?)\\s+title\\s+\"([^\"]+)\"\\s+message\\s+\"([^\"]+)\"(?:\\s+type\\s+(\\w+))?$/i);\n if (sendInAppMatch) {\n return {\n type: 'effect',\n effectType: 'notify',\n description: text,\n config: {\n userId: sendInAppMatch[1],\n title: sendInAppMatch[2],\n message: sendInAppMatch[3],\n type: sendInAppMatch[4] || 'info',\n },\n };\n }\n\n // Generic JSON config format: \"effectType:{...json...}\"\n const jsonMatch = text.match(/^(\\w+):(\\{.+\\})$/);\n if (jsonMatch) {\n try {\n const config = JSON.parse(jsonMatch[2]);\n return {\n type: 'effect',\n effectType: jsonMatch[1] as any,\n description: text,\n config,\n };\n } catch {\n // Fall through to other handlers\n }\n }\n\n // \"notify [recipient] [message]\" - notify with recipient\n const notifyWithRecipientMatch = text.match(/^notify\\s+(\\S+)\\s+\"([^\"]+)\"$/i);\n if (notifyWithRecipientMatch) {\n return {\n type: 'effect',\n effectType: 'notify',\n description: text,\n config: {\n recipient: notifyWithRecipientMatch[1],\n message: notifyWithRecipientMatch[2],\n },\n };\n }\n\n // \"notify [target]\"\n if (lower.startsWith('notify')) {\n const remaining = text.slice(6).trim();\n // Check if it's a quoted message\n const quotedMatch = remaining.match(/^\"([^\"]+)\"$/);\n return {\n type: 'effect',\n effectType: 'notify',\n description: text,\n config: {\n message: quotedMatch ? quotedMatch[1] : remaining,\n },\n };\n }\n\n // \"update [field] to [value]\" - set effect\n const updateMatch = text.match(/^update\\s+(.+?)\\s+to\\s+(.+)$/i);\n if (updateMatch) {\n return {\n type: 'effect',\n effectType: 'set',\n description: text,\n config: {\n field: preserveTemplateVars(updateMatch[1]),\n value: updateMatch[2],\n },\n };\n }\n\n // \"navigate to [path]\"\n const navMatch = text.match(/^navigate\\s+to\\s+(.+)$/i);\n if (navMatch) {\n return {\n type: 'effect',\n effectType: 'navigate',\n description: text,\n config: {\n path: navMatch[1],\n },\n };\n }\n\n // \"emit [event]\" - emit effect\n const emitMatch = text.match(/^emit\\s+(.+)$/i);\n if (emitMatch) {\n return {\n type: 'effect',\n effectType: 'emit',\n description: text,\n config: {\n eventKey: emitMatch[1].toUpperCase().replace(/\\s+/g, '_'),\n },\n };\n }\n\n // \"call [endpoint]\" - call-service effect\n const callMatch = text.match(/^call\\s+(.+)$/i);\n if (callMatch) {\n return {\n type: 'effect',\n effectType: 'call-service',\n description: text,\n config: {\n service: callMatch[1],\n },\n };\n }\n\n // \"render [pattern] to [slot]\" - render-ui effect (delegate to S-expression parser)\n if (lower.startsWith('render ')) {\n // This is a render effect - delegate to sexpr-parser for proper handling\n // Note: the sexpr-parser will validate the pattern type\n try {\n const result = parseDomainEffect(text);\n if (Array.isArray(result) && result[0] === 'render-ui') {\n return {\n type: 'effect',\n effectType: 'render-ui',\n description: text,\n config: {\n slot: result[1] as string,\n pattern: result[2] as Record<string, unknown>,\n },\n };\n }\n } catch {\n // Fall through to unknown effect warning\n }\n }\n\n // Unknown effect - warn and return null instead of silently converting to notify\n // This prevents masking of invalid effects that should be caught during validation\n ctx.warnings.push({\n message: `Unknown effect syntax: \"${text}\". Effect will be ignored. Use a valid effect format like \"update X to Y\", \"emit EVENT\", \"navigate to /path\", \"notify 'message'\", or \"render pattern to slot\".`,\n });\n return null;\n }\n\n function parseInterval(text: string): number {\n const lower = text.toLowerCase();\n\n // Match patterns like \"30 seconds\", \"1 hour\", \"5 minutes\"\n const match = lower.match(/(\\d+)\\s*(second|minute|hour|day|week)s?/);\n if (match) {\n const value = parseInt(match[1], 10);\n const unit = match[2];\n\n switch (unit) {\n case 'second': return value * 1000;\n case 'minute': return value * 60 * 1000;\n case 'hour': return value * 60 * 60 * 1000;\n case 'day': return value * 24 * 60 * 60 * 1000;\n case 'week': return value * 7 * 24 * 60 * 60 * 1000;\n }\n }\n\n // Default to 1 hour\n return 60 * 60 * 1000;\n }\n}\n\n/**\n * Format a behavior AST back to domain text\n */\nexport function formatBehaviorToDomain(behavior: DomainBehavior): string {\n const lines: string[] = [];\n\n // Behavior name\n lines.push(behavior.name);\n lines.push('');\n\n // States\n if (behavior.states.length > 0) {\n lines.push(`States: ${behavior.states.join(', ')}`);\n lines.push('');\n }\n\n // Transitions\n if (behavior.transitions.length > 0) {\n lines.push('Transitions:');\n for (const transition of behavior.transitions) {\n const fromState = transition.fromState === '*' ? 'any' : transition.fromState;\n let line = ` - From ${fromState} to ${transition.toState}`;\n if (transition.event) {\n line += ` when ${transition.event}`;\n }\n lines.push(line);\n\n // Guards\n for (const guard of transition.guards) {\n lines.push(` ${guard.raw || formatGuardForDomain(guard)}`);\n }\n\n // Effects\n for (const effect of transition.effects) {\n lines.push(` then ${effect.description}`);\n }\n }\n lines.push('');\n }\n\n // Ticks\n for (const tick of behavior.ticks) {\n lines.push(`Every ${tick.interval}:`);\n if (tick.guard) {\n lines.push(` ${tick.guard.raw || formatGuardForDomain(tick.guard)}`);\n }\n for (const effect of tick.effects) {\n lines.push(` - ${effect.description}`);\n }\n lines.push('');\n }\n\n // Rules\n if (behavior.rules.length > 0) {\n lines.push('Rules:');\n for (const rule of behavior.rules) {\n lines.push(` - ${rule}`);\n }\n }\n\n return lines.join('\\n').trim();\n}\n\n/**\n * Format behavior AST to KFlow schema trait\n */\nexport function formatBehaviorToSchema(behavior: DomainBehavior): Record<string, unknown> {\n const trait: Record<string, unknown> = {\n // Just remove spaces, preserve the casing from the source\n // Trust the LLM/author to use consistent PascalCase naming\n name: behavior.name.replace(/\\s+/g, ''),\n description: behavior.name,\n };\n\n // Only include stateMachine if there are states\n if (behavior.states.length > 0) {\n trait.stateMachine = {\n states: behavior.states.map((state, index) => ({\n name: state,\n isInitial: state === behavior.initialState || (index === 0 && !behavior.initialState),\n })),\n events: extractEventsFromTransitions(behavior.transitions),\n transitions: behavior.transitions.map(t => {\n const transition: Record<string, unknown> = {\n from: t.fromState,\n to: t.toState,\n event: t.event,\n };\n\n // Only include guard if present - convert to S-Expression\n if (t.guards.length > 0) {\n // Convert guards to S-Expressions\n const guardExprs = t.guards.map(g => {\n // Use the raw text to parse to S-Expression\n if (g.raw) {\n return parseDomainGuard(g.raw, behavior.entityName);\n }\n return parseDomainGuard(formatGuardToCondition(g), behavior.entityName);\n });\n // Combine multiple guards with AND\n transition.guard = guardExprs.length === 1\n ? guardExprs[0]\n : ['and', ...guardExprs];\n }\n\n // Only include effects if present - convert to S-Expressions\n if (t.effects.length > 0) {\n transition.effects = t.effects.map(e => {\n // If effect has pre-parsed S-expression (from raw JSON in domain text), use it directly\n if (e.config && '_rawSExpr' in e.config && Array.isArray(e.config._rawSExpr)) {\n return e.config._rawSExpr;\n }\n // Otherwise, parse the description text to S-Expression\n return parseDomainEffect(e.description, behavior.entityName);\n });\n }\n\n return transition;\n }),\n };\n }\n\n // Only include ticks if there are any - convert to S-Expressions\n if (behavior.ticks.length > 0) {\n trait.ticks = behavior.ticks.map(t => ({\n name: toPascalCase(t.name.replace(/\\s+/g, '')),\n interval: t.intervalMs, // Direct number in ms\n guard: t.guard\n ? parseDomainGuard(t.guard.raw || formatGuardToCondition(t.guard), behavior.entityName)\n : undefined,\n effects: t.effects.map(e => {\n // If effect has pre-parsed S-expression (from raw JSON in domain text), use it directly\n if (e.config && '_rawSExpr' in e.config && Array.isArray(e.config._rawSExpr)) {\n return e.config._rawSExpr;\n }\n // Otherwise, parse the description text to S-Expression\n return parseDomainEffect(e.description, behavior.entityName);\n }),\n }));\n }\n\n return trait;\n}\n\n// === Utility Functions ===\n\nfunction toCamelCase(text: string): string {\n return text\n .toLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join('');\n}\n\nfunction toPascalCase(text: string): string {\n // If no spaces, the text is likely already PascalCase (e.g., \"TraineeManager\")\n // Just ensure first letter is uppercase and preserve the rest\n if (!text.includes(' ')) {\n return text.charAt(0).toUpperCase() + text.slice(1);\n }\n // If has spaces, convert each word: \"trainee manager\" -> \"TraineeManager\"\n return text\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\nfunction extractEventsFromTransitions(transitions: DomainTransition[]): { key: string; name: string }[] {\n const events = new Map<string, string>();\n\n for (const t of transitions) {\n if (t.event && !events.has(t.event)) {\n events.set(t.event, toTitleCase(t.event.replace(/_/g, ' ')));\n }\n }\n\n return Array.from(events.entries()).map(([key, name]) => ({ key, name }));\n}\n\nfunction toTitleCase(text: string): string {\n return text\n .toLowerCase()\n .split(' ')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\nfunction formatGuardForDomain(guard: DomainGuard): string {\n return guard.raw || 'if condition';\n}\n\nfunction formatGuardToCondition(guard: DomainGuard): string {\n // Use the raw text if available, otherwise reconstruct\n if (guard.raw) {\n // Strip \"if \" prefix if present\n return guard.raw.replace(/^if\\s+/i, '');\n }\n return 'true';\n}\n\n/**\n * Preserve template variables like {linkedEntity} while converting the rest to camelCase\n * Input: \"{linkedEntity}.status\" -> \"{linkedEntity}.status\"\n * Input: \"entity . status\" -> \"entity.status\" (preserve dot paths)\n * Input: \"entity status\" -> \"entityStatus\" (convert spaces to camelCase)\n */\nfunction preserveTemplateVars(text: string): string {\n // If it contains template syntax {xxx}, preserve it\n if (text.includes('{') && text.includes('}')) {\n // Just clean up whitespace around dots\n return text.replace(/\\s*\\.\\s*/g, '.');\n }\n\n // Check if this is a dot-separated path (like \"entity . status\" from token reconstruction)\n // Clean up whitespace around dots first\n const cleanedText = text.replace(/\\s*\\.\\s*/g, '.');\n\n // If it's a dot path (like \"entity.status\" or \"entity.fieldName\"), preserve it as-is\n if (cleanedText.includes('.')) {\n return cleanedText;\n }\n\n // Otherwise convert spaces to camelCase\n return toCamelCase(text);\n}\n","/**\n * Entity Formatter\n *\n * Converts KFlow DataEntity schema to domain language text.\n */\n\nimport type { DomainEntity, DomainField, DomainFieldType, DomainRelationship } from '../types.js';\n\n/**\n * Convert a KFlow DataEntity to domain language text\n */\nexport function formatSchemaEntityToDomain(entity: Record<string, unknown>): string {\n const domainEntity = schemaEntityToDomainEntity(entity);\n return formatEntityText(domainEntity);\n}\n\n/**\n * Convert KFlow DataEntity to DomainEntity AST\n */\nexport function schemaEntityToDomainEntity(entity: Record<string, unknown>): DomainEntity {\n const name = entity.name as string;\n const description = (entity.description as string) || `a ${name.toLowerCase()}`;\n const fields: DomainField[] = [];\n const relationships: DomainRelationship[] = [];\n\n // Process fields\n const schemaFields = (entity.fields as Array<Record<string, unknown>>) || [];\n for (const field of schemaFields) {\n const fieldName = field.name as string;\n const fieldType = field.type as string;\n\n // Handle relation fields separately\n if (fieldType === 'relation') {\n const relation = field.relation as Record<string, unknown>;\n if (relation) {\n const relType = relation.type as string;\n const targetEntity = relation.entity as string;\n\n if (relType === 'many-to-one') {\n // Extract alias from field name (e.g., assigneeId -> Assignee)\n let alias: string | undefined;\n if (fieldName.endsWith('Id') && !fieldName.toLowerCase().startsWith(targetEntity.toLowerCase())) {\n alias = fieldName.slice(0, -2); // Remove \"Id\" suffix\n alias = alias.charAt(0).toUpperCase() + alias.slice(1);\n }\n\n relationships.push({\n type: 'relationship',\n relationshipType: 'belongs_to',\n targetEntity,\n alias,\n });\n } else if (relType === 'one-to-many') {\n relationships.push({\n type: 'relationship',\n relationshipType: 'has_many',\n targetEntity,\n });\n } else if (relType === 'one-to-one') {\n relationships.push({\n type: 'relationship',\n relationshipType: 'has_one',\n targetEntity,\n });\n }\n }\n continue;\n }\n\n // Map schema field type to domain field type\n const domainFieldType = mapSchemaTypeToDomain(fieldType);\n\n const domainField: DomainField = {\n type: 'field',\n name: fieldName,\n fieldType: domainFieldType,\n required: (field.required as boolean) || false,\n unique: (field.unique as boolean) || false,\n auto: (field.auto as boolean) || false,\n };\n\n // Handle enum values - check both 'enumValues' and 'values' properties\n if (fieldType === 'enum') {\n const enumValues = (field.enumValues || field.values) as string[] | undefined;\n if (enumValues && enumValues.length > 0) {\n domainField.enumValues = enumValues;\n }\n }\n\n // Handle default value\n if (field.default !== undefined) {\n domainField.default = field.default;\n }\n\n fields.push(domainField);\n }\n\n // Extract states from entity if present\n const states = entity.states as string[] | undefined;\n const initialState = entity.initialState as string | undefined;\n\n return {\n type: 'entity',\n name,\n description,\n fields,\n relationships,\n states,\n initialState,\n };\n}\n\n/**\n * Format DomainEntity AST to domain language text\n */\nfunction formatEntityText(entity: DomainEntity): string {\n const lines: string[] = [];\n\n // Header line\n const article = startsWithVowel(entity.name) ? 'An' : 'A';\n lines.push(`${article} ${entity.name} is ${entity.description}`);\n\n // Fields section\n if (entity.fields.length > 0) {\n lines.push('');\n lines.push('It has:');\n for (const field of entity.fields) {\n lines.push(` - ${toSpaceSeparated(field.name)}: ${formatFieldType(field)}`);\n }\n }\n\n // Relationships\n for (const rel of entity.relationships) {\n lines.push('');\n if (rel.relationshipType === 'belongs_to') {\n const aliasStr = rel.alias ? ` as ${rel.alias}` : '';\n lines.push(`It belongs to ${rel.targetEntity}${aliasStr}`);\n } else if (rel.relationshipType === 'has_many') {\n lines.push(`It has many ${rel.targetEntity}`);\n } else if (rel.relationshipType === 'has_one') {\n lines.push(`It has one ${rel.targetEntity}`);\n }\n }\n\n // States\n if (entity.states && entity.states.length > 0) {\n lines.push('');\n lines.push(`It can be: ${entity.states.join(', ')}`);\n if (entity.initialState) {\n lines.push(`It starts as ${entity.initialState}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Map KFlow schema field type to domain field type\n * Uses the centralized FIELD_TYPE_MAPPING from types.ts\n */\nfunction mapSchemaTypeToDomain(schemaType: string): DomainFieldType {\n const mapping: Record<string, DomainFieldType> = {\n 'string': 'text',\n 'number': 'number',\n 'boolean': 'yes/no',\n 'date': 'date',\n 'timestamp': 'timestamp',\n 'datetime': 'datetime',\n 'enum': 'enum',\n 'array': 'list',\n 'object': 'object',\n 'relation': 'relation',\n };\n return mapping[schemaType] || 'text';\n}\n\n/**\n * Format a field's type and constraints for display\n */\nfunction formatFieldType(field: DomainField): string {\n const parts: string[] = [];\n\n if (field.enumValues && field.enumValues.length > 0) {\n parts.push(field.enumValues.join(' | '));\n } else {\n parts.push(field.fieldType);\n }\n\n if (field.required) parts.push('required');\n if (field.unique) parts.push('unique');\n if (field.auto) parts.push('auto');\n if (field.default !== undefined) {\n const defaultStr = typeof field.default === 'string'\n ? `\"${field.default}\"`\n : String(field.default);\n parts.push(`default ${defaultStr}`);\n }\n\n return parts.join(', ');\n}\n\n/**\n * Convert camelCase to space-separated words\n */\nfunction toSpaceSeparated(text: string): string {\n return text.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();\n}\n\n/**\n * Check if a word starts with a vowel SOUND (not just vowel letter)\n * Used for determining \"A\" vs \"An\" article\n */\nfunction startsWithVowel(text: string): boolean {\n const lower = text.toLowerCase();\n\n // Words that start with vowel letter but consonant sound (use \"A\")\n // \"U\" pronounced as \"yoo\": user, unicorn, unique, universal, union, etc.\n // \"Eu\" pronounced as \"yoo\": European, eureka, etc.\n if (/^(u[^aeiou]|uni|euro)/i.test(lower)) {\n return false;\n }\n\n // Words that start with consonant letter but vowel sound (use \"An\")\n // Silent \"H\": hour, honest, honor, heir, etc.\n if (/^(hour|honest|honor|heir)/i.test(lower)) {\n return true;\n }\n\n // Default: check if first letter is a vowel\n return /^[aeiou]/i.test(text);\n}\n","/**\n * Page Formatter\n *\n * Converts KFlow Page schema to domain language text.\n */\n\nimport type { DomainPage, DomainPageSection, DomainPageAction } from '../types.js';\n\n/**\n * Convert a KFlow Page schema to domain language text\n */\nexport function formatSchemaPageToDomain(page: Record<string, unknown>): string {\n const domainPage = schemaPageToDomainPage(page);\n return formatPageText(domainPage);\n}\n\n/**\n * Convert KFlow Page schema to DomainPage AST\n */\nexport function schemaPageToDomainPage(page: Record<string, unknown>): DomainPage {\n const name = page.name as string;\n const path = (page.path as string) || '';\n const purpose = (page.purpose as string) || (page.description as string) || '';\n const primaryEntity = page.primaryEntity as string | undefined;\n\n // Extract description from purpose or title or generate from name\n const title = page.title as string;\n const viewType = page.viewType as string;\n const description = title || purpose || viewType || generateDescriptionFromName(name);\n\n // Convert sections - can come from 'sections' array or 'traits' array\n const sections: DomainPageSection[] = [];\n const schemaSections = (page.sections as Array<Record<string, unknown>>) || [];\n const schemaTraits = (page.traits as Array<string | Record<string, unknown>>) || [];\n\n // Process legacy sections\n for (const section of schemaSections) {\n const rawPattern = section.pattern;\n let pattern: string;\n let config: Record<string, unknown> = {};\n\n if (typeof rawPattern === 'string') {\n pattern = rawPattern;\n config = (section.config as Record<string, unknown>) || {};\n } else if (rawPattern && typeof rawPattern === 'object') {\n const patternObj = rawPattern as Record<string, unknown>;\n pattern = (patternObj.type as string) || 'custom-section';\n const { type, ...restConfig } = patternObj;\n config = restConfig;\n } else {\n pattern = 'custom-section';\n }\n\n const sectionDescription = generateSectionDescription(pattern, config);\n sections.push({\n type: 'page_section',\n description: sectionDescription,\n });\n }\n\n // Process traits as sections (OrbitalSchema format)\n for (const trait of schemaTraits) {\n let traitName: string;\n let linkedEntity: string | undefined;\n\n if (typeof trait === 'string') {\n traitName = trait;\n } else {\n traitName = (trait.ref as string) || (trait.name as string) || 'Unknown';\n linkedEntity = trait.linkedEntity as string;\n }\n\n // Generate description from trait name\n const traitDescription = linkedEntity\n ? `${formatTraitName(traitName)} for ${linkedEntity}`\n : formatTraitName(traitName);\n\n sections.push({\n type: 'page_section',\n description: traitDescription,\n });\n }\n\n // Convert actions\n const actions: DomainPageAction[] = [];\n const schemaActions = (page.actions as Array<Record<string, unknown>>) || [];\n\n for (const action of schemaActions) {\n actions.push({\n type: 'page_action',\n trigger: (action.trigger as string) || '',\n action: (action.action as string) || '',\n });\n }\n\n return {\n type: 'page',\n name,\n description,\n purpose,\n url: path,\n primaryEntity,\n sections,\n actions,\n };\n}\n\n/**\n * Format trait name to human readable\n */\nfunction formatTraitName(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2');\n}\n\n/**\n * Format DomainPage AST to domain language text\n */\nfunction formatPageText(page: DomainPage): string {\n const lines: string[] = [];\n\n // Header line\n const displayName = page.name.replace(/Page$/, '');\n lines.push(`The ${displayName} shows ${page.description}`);\n\n // Entity - EXPLICIT reference, no inference needed on parse\n if (page.primaryEntity) {\n lines.push(`Entity: ${page.primaryEntity}`);\n }\n\n // Purpose\n if (page.purpose) {\n lines.push(`Purpose: ${page.purpose}`);\n }\n\n // URL\n if (page.url) {\n lines.push(`URL: ${page.url}`);\n }\n\n // Sections\n if (page.sections.length > 0) {\n lines.push('');\n lines.push('It displays:');\n for (const section of page.sections) {\n lines.push(` - ${section.description}`);\n }\n }\n\n // Actions\n if (page.actions.length > 0) {\n lines.push('');\n lines.push('Users can:');\n for (const action of page.actions) {\n if (action.action) {\n lines.push(` - ${action.trigger} to ${action.action}`);\n } else {\n lines.push(` - ${action.trigger}`);\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate a description from a page name\n */\nfunction generateDescriptionFromName(name: string): string {\n // Remove \"Page\" suffix and convert to readable text\n const baseName = name.replace(/Page$/, '');\n\n // Handle common patterns\n if (baseName.endsWith('List')) {\n const entity = baseName.slice(0, -4);\n return `a list of ${pluralize(entity.toLowerCase())}`;\n }\n\n if (baseName.endsWith('Detail') || baseName.endsWith('Details')) {\n const entity = baseName.replace(/Details?$/, '');\n return `details for a ${entity.toLowerCase()}`;\n }\n\n if (baseName.startsWith('Create') || baseName.startsWith('New')) {\n const entity = baseName.replace(/^(Create|New)/, '');\n return `a form to create a new ${entity.toLowerCase()}`;\n }\n\n if (baseName.startsWith('Edit')) {\n const entity = baseName.replace(/^Edit/, '');\n return `a form to edit ${entity ? `a ${entity.toLowerCase()}` : 'content'}`;\n }\n\n if (baseName === 'Dashboard') {\n return 'an overview of system activity';\n }\n\n if (baseName === 'Settings') {\n return 'user settings and preferences';\n }\n\n if (baseName === 'Login') {\n return 'the login form';\n }\n\n if (baseName === 'Register' || baseName === 'Signup') {\n return 'the registration form';\n }\n\n // Default: just format the name\n return toSpaceSeparated(baseName).toLowerCase();\n}\n\n/**\n * Generate a human-readable description from a section pattern and config\n */\nfunction generateSectionDescription(pattern: string, config: Record<string, unknown>): string {\n switch (pattern) {\n case 'page-header':\n const title = config.title as string;\n return title ? `Header with title \"${title}\"` : 'Page header';\n\n case 'entity-list':\n const entity = config.entity as string;\n const presentation = config.presentation as string;\n if (entity) {\n const presentationType = presentation === 'cards' ? 'cards' : 'table';\n return `${entity} list displayed as ${presentationType}`;\n }\n return 'List of items';\n\n case 'entity-detail':\n const detailEntity = config.entity as string;\n return detailEntity ? `${detailEntity} details` : 'Item details';\n\n case 'form-section':\n const formEntity = config.entity as string;\n const mode = config.mode as string;\n if (formEntity) {\n return mode === 'edit'\n ? `Form to edit ${formEntity}`\n : `Form to create ${formEntity}`;\n }\n return 'Data entry form';\n\n case 'dashboard-stats':\n return 'Summary statistics';\n\n case 'chart-section':\n const chartType = config.chartType as string;\n const chartTitle = config.title as string;\n return chartTitle\n ? `${chartTitle} (${chartType || 'chart'})`\n : `${chartType || 'Chart'} visualization`;\n\n case 'timeline-section':\n return 'Activity timeline';\n\n case 'profile-section':\n return 'Profile information';\n\n case 'custom-section':\n const customDesc = config.description as string;\n return customDesc || 'Custom content section';\n\n default:\n // Try to generate from pattern name\n const readable = pattern.replace(/-/g, ' ');\n return readable.charAt(0).toUpperCase() + readable.slice(1);\n }\n}\n\n/**\n * Convert camelCase/PascalCase to space-separated words\n */\nfunction toSpaceSeparated(text: string): string {\n return text\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2');\n}\n\n/**\n * Simple pluralization\n */\nfunction pluralize(word: string): string {\n if (word.endsWith('s') || word.endsWith('x') || word.endsWith('ch') || word.endsWith('sh')) {\n return word + 'es';\n }\n if (word.endsWith('y') && !['a', 'e', 'i', 'o', 'u'].includes(word[word.length - 2])) {\n return word.slice(0, -1) + 'ies';\n }\n return word + 's';\n}\n","/**\n * S-Expression Formatter\n *\n * Converts S-expressions to human-readable domain language text.\n * Used for displaying guards and effects in natural language.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../../types/index.js';\nimport { isSExpr, getOperator, getArgs } from '../../types/index.js';\n\n/**\n * Convert an S-expression to human-readable domain text.\n * This is the main entry point for S-expression formatting.\n */\nexport function formatSExprToDomain(expr: SExpr, context?: FormatContext): string {\n const ctx = context ?? { entityName: '' };\n\n if (!isSExpr(expr)) {\n // Primitive value\n return formatPrimitive(expr);\n }\n\n const op = getOperator(expr);\n const args = getArgs(expr);\n\n // Handle null operator (shouldn't happen with valid S-expressions)\n if (op === null) {\n return formatPrimitive(expr);\n }\n\n // Dispatch to appropriate formatter based on operator\n if (isComparisonOperator(op)) {\n return formatComparison(op, args, ctx);\n }\n\n if (isArithmeticOperator(op)) {\n return formatArithmetic(op, args, ctx);\n }\n\n if (isLogicalOperator(op)) {\n return formatLogical(op, args, ctx);\n }\n\n if (isControlOperator(op)) {\n return formatControl(op, args, ctx);\n }\n\n if (isEffectOperator(op)) {\n return formatEffect(op, args, ctx);\n }\n\n // Check for std library operators\n if (op.includes('/')) {\n return formatStdLibrary(op, args, ctx);\n }\n\n // Unknown operator - format generically\n return formatGenericOperator(op, args, ctx);\n}\n\n/**\n * Format an S-expression guard to domain text with \"if\" prefix.\n */\nexport function formatSExprGuardToDomain(expr: SExpr, entityName?: string): string {\n const text = formatSExprToDomain(expr, { entityName: entityName ?? '' });\n return `if ${text}`;\n}\n\n/**\n * Format an S-expression effect to domain text.\n */\nexport function formatSExprEffectToDomain(expr: SExpr, entityName?: string): string {\n return formatSExprToDomain(expr, { entityName: entityName ?? '' });\n}\n\n/**\n * Check if an expression is an S-expression (array format).\n */\nexport function isArraySExpr(value: unknown): value is SExpr {\n return Array.isArray(value) && value.length > 0 && typeof value[0] === 'string';\n}\n\n// ============================================================================\n// Format Context\n// ============================================================================\n\ninterface FormatContext {\n entityName: string;\n}\n\n// ============================================================================\n// Operator Classification\n// ============================================================================\n\nconst COMPARISON_OPERATORS = ['=', '==', '!=', '>', '<', '>=', '<=', 'eq', 'neq', 'gt', 'lt', 'gte', 'lte'];\nconst ARITHMETIC_OPERATORS = ['+', '-', '*', '/', '%', 'mod'];\nconst LOGICAL_OPERATORS = ['and', 'or', 'not', '&&', '||', '!'];\nconst CONTROL_OPERATORS = ['if', 'cond', 'do', 'let', 'when', 'unless', 'case'];\nconst EFFECT_OPERATORS = ['set', 'emit', 'navigate', 'notify', 'persist', 'spawn', 'despawn', 'call-service', 'render-ui'];\n\nfunction isComparisonOperator(op: string): boolean {\n return COMPARISON_OPERATORS.includes(op);\n}\n\nfunction isArithmeticOperator(op: string): boolean {\n return ARITHMETIC_OPERATORS.includes(op);\n}\n\nfunction isLogicalOperator(op: string): boolean {\n return LOGICAL_OPERATORS.includes(op);\n}\n\nfunction isControlOperator(op: string): boolean {\n return CONTROL_OPERATORS.includes(op);\n}\n\nfunction isEffectOperator(op: string): boolean {\n return EFFECT_OPERATORS.includes(op);\n}\n\n// ============================================================================\n// Primitive Formatting\n// ============================================================================\n\nfunction formatPrimitive(value: unknown): string {\n if (value === null || value === undefined) {\n return 'nothing';\n }\n\n if (typeof value === 'string') {\n // Check for binding references\n if (value.startsWith('@')) {\n return formatBinding(value);\n }\n return `\"${value}\"`;\n }\n\n if (typeof value === 'number') {\n return String(value);\n }\n\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n\n if (Array.isArray(value)) {\n // Non-S-expression array (data array)\n const items = value.map(v => formatPrimitive(v));\n return `[${items.join(', ')}]`;\n }\n\n if (typeof value === 'object') {\n // Object literal\n const entries = Object.entries(value as Record<string, unknown>)\n .map(([k, v]) => `${k}: ${formatPrimitive(v)}`);\n return `{${entries.join(', ')}}`;\n }\n\n return String(value);\n}\n\n/**\n * Format a binding reference like @entity.field\n */\nfunction formatBinding(binding: string): string {\n if (!binding.startsWith('@')) {\n return binding;\n }\n\n const parts = binding.slice(1).split('.');\n const root = parts[0];\n const path = parts.slice(1);\n\n switch (root) {\n case 'entity':\n // @entity.field -> just \"field\" in context\n return path.length > 0 ? path.join('.') : 'entity';\n\n case 'payload':\n // @payload.field -> \"incoming field\" or \"submitted field\"\n return path.length > 0 ? `incoming ${path.join('.')}` : 'payload';\n\n case 'state':\n return 'current state';\n\n case 'now':\n return 'current time';\n\n default:\n // @EntityName.field -> \"EntityName's field\"\n if (path.length > 0) {\n return `${root}'s ${path.join('.')}`;\n }\n return root;\n }\n}\n\n// ============================================================================\n// Comparison Formatting\n// ============================================================================\n\nconst COMPARISON_TEXT: Record<string, string> = {\n '=': 'is',\n '==': 'is',\n 'eq': 'is',\n '!=': 'is not',\n 'neq': 'is not',\n '>': 'is greater than',\n 'gt': 'is greater than',\n '<': 'is less than',\n 'lt': 'is less than',\n '>=': 'is at least',\n 'gte': 'is at least',\n '<=': 'is at most',\n 'lte': 'is at most',\n};\n\nfunction formatComparison(op: string, args: SExpr[], ctx: FormatContext): string {\n const left = formatSExprToDomain(args[0], ctx);\n const right = formatSExprToDomain(args[1], ctx);\n const opText = COMPARISON_TEXT[op] || op;\n\n return `${left} ${opText} ${right}`;\n}\n\n// ============================================================================\n// Arithmetic Formatting\n// ============================================================================\n\nconst ARITHMETIC_TEXT: Record<string, string> = {\n '+': 'plus',\n '-': 'minus',\n '*': 'times',\n '/': 'divided by',\n '%': 'mod',\n 'mod': 'mod',\n};\n\nfunction formatArithmetic(op: string, args: SExpr[], ctx: FormatContext): string {\n if (args.length === 1 && op === '-') {\n // Unary negation\n return `negative ${formatSExprToDomain(args[0], ctx)}`;\n }\n\n const left = formatSExprToDomain(args[0], ctx);\n const right = formatSExprToDomain(args[1], ctx);\n const opText = ARITHMETIC_TEXT[op] || op;\n\n return `(${left} ${opText} ${right})`;\n}\n\n// ============================================================================\n// Logical Formatting\n// ============================================================================\n\nfunction formatLogical(op: string, args: SExpr[], ctx: FormatContext): string {\n switch (op) {\n case 'and':\n case '&&': {\n const parts = args.map(a => formatSExprToDomain(a, ctx));\n return parts.join(' and ');\n }\n\n case 'or':\n case '||': {\n const parts = args.map(a => formatSExprToDomain(a, ctx));\n return parts.join(' or ');\n }\n\n case 'not':\n case '!': {\n const inner = formatSExprToDomain(args[0], ctx);\n return `not ${inner}`;\n }\n\n default:\n return formatGenericOperator(op, args, ctx);\n }\n}\n\n// ============================================================================\n// Control Flow Formatting\n// ============================================================================\n\nfunction formatControl(op: string, args: SExpr[], ctx: FormatContext): string {\n switch (op) {\n case 'if': {\n const condition = formatSExprToDomain(args[0], ctx);\n const thenBranch = formatSExprToDomain(args[1], ctx);\n if (args.length > 2) {\n const elseBranch = formatSExprToDomain(args[2], ctx);\n return `if ${condition} then ${thenBranch} else ${elseBranch}`;\n }\n return `if ${condition} then ${thenBranch}`;\n }\n\n case 'cond': {\n // Multiple conditions\n const parts = args.map(clauseExpr => {\n if (isSExpr(clauseExpr)) {\n const clauseArgs = getArgs(clauseExpr);\n const cond = formatSExprToDomain(clauseArgs[0], ctx);\n const result = formatSExprToDomain(clauseArgs[1], ctx);\n return `when ${cond}: ${result}`;\n }\n return formatSExprToDomain(clauseExpr, ctx);\n });\n return parts.join('; ');\n }\n\n case 'do': {\n // Sequential effects\n const parts = args.map(a => formatSExprToDomain(a, ctx));\n return parts.join(', then ');\n }\n\n case 'let': {\n // Variable binding\n const bindings = args[0];\n const body = args[1];\n if (isSExpr(bindings)) {\n const bindingArgs = getArgs(bindings);\n const bindingText = [];\n for (let i = 0; i < bindingArgs.length; i += 2) {\n const varName = formatBinding(bindingArgs[i] as string);\n const varValue = formatSExprToDomain(bindingArgs[i + 1], ctx);\n bindingText.push(`${varName} = ${varValue}`);\n }\n const bodyText = formatSExprToDomain(body, ctx);\n return `let ${bindingText.join(', ')} in ${bodyText}`;\n }\n return formatGenericOperator(op, args, ctx);\n }\n\n case 'when': {\n const condition = formatSExprToDomain(args[0], ctx);\n const effects = args.slice(1).map(a => formatSExprToDomain(a, ctx));\n return `when ${condition}: ${effects.join(', then ')}`;\n }\n\n case 'unless': {\n const condition = formatSExprToDomain(args[0], ctx);\n const effects = args.slice(1).map(a => formatSExprToDomain(a, ctx));\n return `unless ${condition}: ${effects.join(', then ')}`;\n }\n\n case 'case': {\n const value = formatSExprToDomain(args[0], ctx);\n const cases = args.slice(1).map(clauseExpr => {\n if (isSExpr(clauseExpr)) {\n const clauseArgs = getArgs(clauseExpr);\n const pattern = formatSExprToDomain(clauseArgs[0], ctx);\n const result = formatSExprToDomain(clauseArgs[1], ctx);\n return `${pattern}: ${result}`;\n }\n return formatSExprToDomain(clauseExpr, ctx);\n });\n return `case ${value} of ${cases.join('; ')}`;\n }\n\n default:\n return formatGenericOperator(op, args, ctx);\n }\n}\n\n// ============================================================================\n// Pattern Props Formatting (for render-ui round-trip)\n// ============================================================================\n\n/**\n * Format a single array item based on its object structure.\n *\n * Auto-detects the pattern based on properties:\n * - {field, label} → \"field as 'Label'\"\n * - {label, event, variant?} → \"Label -> EVENT:variant\"\n * - {id, label, event} → \"id: 'Label' -> EVENT\"\n * - {section, colSpan, rowSpan?} → \"section @ colSpan\" or \"section @ colSpanxrowSpan\"\n * - string → \"string\" (unchanged)\n */\nfunction formatArrayItem(item: unknown): string {\n if (typeof item === 'string') {\n return item;\n }\n\n if (typeof item !== 'object' || item === null) {\n return String(item);\n }\n\n const obj = item as Record<string, unknown>;\n\n // Pattern: {id, label, event} → \"id: 'Label' -> EVENT\" (tabs)\n if ('id' in obj && 'label' in obj && 'event' in obj) {\n return `${obj.id}: '${obj.label}' -> ${obj.event}`;\n }\n\n // Pattern: {label, event, variant?} → \"Label -> EVENT:variant\" (actions)\n if ('label' in obj && 'event' in obj) {\n const variant = obj.variant ? `:${obj.variant}` : '';\n return `${obj.label} -> ${obj.event}${variant}`;\n }\n\n // Pattern: {section, colSpan, rowSpan?} → \"section @ span\" (cells)\n if ('section' in obj && 'colSpan' in obj) {\n const span = obj.rowSpan ? `${obj.colSpan}x${obj.rowSpan}` : String(obj.colSpan);\n return `${obj.section} @ ${span}`;\n }\n\n // Pattern: {field, label} → \"field as 'Label'\" (metrics, columns)\n if ('field' in obj && 'label' in obj) {\n if (obj.label !== obj.field) {\n return `${obj.field} as '${obj.label}'`;\n }\n return String(obj.field);\n }\n\n // Fallback: stringify\n return JSON.stringify(item);\n}\n\n/**\n * Format array prop, auto-detecting if it contains complex objects\n */\nfunction formatArrayProp(value: unknown[]): string {\n if (value.length === 0) return '';\n\n // Check if first item is an object (complex) or string (simple)\n const hasObjects = value.some(v => typeof v === 'object' && v !== null);\n\n if (hasObjects) {\n return value.map(formatArrayItem).join(', ');\n }\n\n // Simple string array\n return value.join(', ');\n}\n\n/**\n * Check if a pattern has complex props (arrays of objects).\n * Complex props require inline JSON output.\n */\nfunction hasComplexPatternProps(patternObj: Record<string, unknown>): boolean {\n for (const [key, value] of Object.entries(patternObj)) {\n if (key === 'type' || key === 'entity') continue;\n\n // Array of objects is complex\n if (Array.isArray(value) && value.length > 0) {\n if (typeof value[0] === 'object' && value[0] !== null) {\n return true;\n }\n }\n\n // Nested object is complex\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Format simple pattern props (strings, numbers, booleans, string arrays).\n * Returns empty string if there are no simple props.\n */\nfunction formatSimplePatternProps(patternObj: Record<string, unknown>): string {\n const props: string[] = [];\n\n for (const [key, value] of Object.entries(patternObj)) {\n // Skip type and entity - they're handled separately\n if (key === 'type' || key === 'entity') continue;\n\n if (value === undefined || value === null) continue;\n\n // Only format simple values\n if (Array.isArray(value)) {\n // Only string arrays are simple\n if (value.every(v => typeof v === 'string')) {\n props.push(`${key} [${value.join(', ')}]`);\n }\n // Skip complex arrays - they're handled by inline JSON\n } else if (typeof value === 'string') {\n props.push(`${key} '${value}'`);\n } else if (typeof value === 'number' || typeof value === 'boolean') {\n props.push(`${key} ${value}`);\n }\n // Skip objects - they're complex\n }\n\n return props.join(' ');\n}\n\n/**\n * Format pattern props to domain language (DEPRECATED - use formatSimplePatternProps)\n *\n * Generically handles all props - no hardcoded key names.\n * Detects object structures and formats accordingly.\n */\nfunction formatPatternProps(patternObj: Record<string, unknown>): string {\n const props: string[] = [];\n\n for (const [key, value] of Object.entries(patternObj)) {\n // Skip type and entity - they're handled separately\n if (key === 'type' || key === 'entity') continue;\n\n if (value === undefined || value === null) continue;\n\n if (Array.isArray(value)) {\n const formatted = formatArrayProp(value);\n if (formatted) {\n props.push(`${key} [${formatted}]`);\n }\n } else if (typeof value === 'string') {\n props.push(`${key} '${value}'`);\n } else if (typeof value === 'number' || typeof value === 'boolean') {\n props.push(`${key} ${value}`);\n }\n }\n\n return props.join(' ');\n}\n\n// ============================================================================\n// Effect Formatting\n// ============================================================================\n\nfunction formatEffect(op: string, args: SExpr[], ctx: FormatContext): string {\n switch (op) {\n case 'set': {\n const field = formatBinding(args[0] as string);\n const value = formatSExprToDomain(args[1], ctx);\n return `update ${field} to ${value}`;\n }\n\n case 'emit': {\n const event = args[0] as string;\n if (args.length > 1) {\n const payload = formatSExprToDomain(args[1], ctx);\n return `emit ${event} with ${payload}`;\n }\n return `emit ${event}`;\n }\n\n case 'navigate': {\n const path = args[0] as string;\n if (args.length > 1) {\n const params = formatSExprToDomain(args[1], ctx);\n return `navigate to ${path} with ${params}`;\n }\n return `navigate to ${path}`;\n }\n\n case 'notify': {\n const firstArg = args[0];\n // Handle object format: [\"notify\", {\"message\": \"...\", \"type\": \"...\"}]\n if (typeof firstArg === 'object' && firstArg !== null && !Array.isArray(firstArg)) {\n const obj = firstArg as Record<string, unknown>;\n const message = obj.message || obj.text || 'notification';\n const type = obj.type || obj.variant || 'info';\n return `show ${type} notification \"${message}\"`;\n }\n // Handle string format: [\"notify\", \"message\", \"type?\"]\n const message = typeof firstArg === 'string' ? firstArg : formatPrimitive(firstArg);\n if (args.length > 1) {\n const type = typeof args[1] === 'string' ? args[1] : 'info';\n return `show ${type} notification \"${message}\"`;\n }\n return `notify \"${message}\"`;\n }\n\n case 'persist': {\n const action = args[0] as string;\n if (args.length > 1) {\n const data = formatSExprToDomain(args[1], ctx);\n return `persist ${action} ${data}`;\n }\n return `persist ${action}`;\n }\n\n case 'spawn': {\n const entityType = args[0] as string;\n if (args.length > 1) {\n const props = formatSExprToDomain(args[1], ctx);\n return `spawn ${entityType} with ${props}`;\n }\n return `spawn ${entityType}`;\n }\n\n case 'despawn': {\n if (args.length > 0) {\n const id = formatSExprToDomain(args[0], ctx);\n return `despawn ${id}`;\n }\n return 'despawn this';\n }\n\n case 'call-service': {\n const service = args[0] as string;\n const method = args.length > 1 ? args[1] as string : '';\n if (method) {\n return `call ${service}.${method}`;\n }\n return `call ${service}`;\n }\n\n case 'render-ui': {\n const slot = args[0] as string;\n const patternArg = args.length > 1 ? args[1] : null;\n\n if (patternArg === null) {\n return `render null to ${slot}`;\n }\n\n if (patternArg !== null) {\n // Check if pattern is an object with a type property\n if (typeof patternArg === 'object' && patternArg !== null && !Array.isArray(patternArg)) {\n const patternObj = patternArg as Record<string, unknown>;\n const patternType = patternObj.type as string;\n const entity = patternObj.entity as string | undefined;\n\n // Check if pattern has complex props (arrays of objects)\n const hasComplexProps = hasComplexPatternProps(patternObj);\n\n if (hasComplexProps) {\n // Output inline JSON for complex patterns\n return `[\"render-ui\", \"${slot}\", ${JSON.stringify(patternArg)}]`;\n }\n\n // Simple pattern - use human-readable syntax\n if (patternType) {\n const propsStr = formatSimplePatternProps(patternObj);\n if (entity && propsStr) {\n return `render ${patternType} to ${slot} for ${entity} with ${propsStr}`;\n }\n if (entity) {\n return `render ${patternType} to ${slot} for ${entity}`;\n }\n if (propsStr) {\n return `render ${patternType} to ${slot} with ${propsStr}`;\n }\n return `render ${patternType} to ${slot}`;\n }\n // Fall back to inline JSON\n return `[\"render-ui\", \"${slot}\", ${JSON.stringify(patternArg)}]`;\n }\n // String pattern name or S-expression\n if (isSExpr(patternArg)) {\n return `render ${formatSExprToDomain(patternArg, ctx)} to ${slot}`;\n }\n return `render ${patternArg} to ${slot}`;\n }\n return `render to ${slot}`;\n }\n\n default:\n return formatGenericOperator(op, args, ctx);\n }\n}\n\n// ============================================================================\n// Std Library Formatting\n// ============================================================================\n\nfunction formatStdLibrary(op: string, args: SExpr[], ctx: FormatContext): string {\n const [module, fn] = op.split('/');\n\n switch (module) {\n case 'math':\n return formatMathFunction(fn, args, ctx);\n case 'str':\n return formatStrFunction(fn, args, ctx);\n case 'array':\n return formatArrayFunction(fn, args, ctx);\n case 'object':\n return formatObjectFunction(fn, args, ctx);\n case 'validate':\n return formatValidateFunction(fn, args, ctx);\n case 'time':\n return formatTimeFunction(fn, args, ctx);\n case 'format':\n return formatFormatFunction(fn, args, ctx);\n default:\n return formatGenericOperator(op, args, ctx);\n }\n}\n\nfunction formatMathFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'abs':\n return `absolute value of ${formattedArgs[0]}`;\n case 'min':\n return `minimum of ${formattedArgs.join(', ')}`;\n case 'max':\n return `maximum of ${formattedArgs.join(', ')}`;\n case 'clamp':\n return `${formattedArgs[0]} clamped between ${formattedArgs[1]} and ${formattedArgs[2]}`;\n case 'floor':\n return `floor of ${formattedArgs[0]}`;\n case 'ceil':\n return `ceiling of ${formattedArgs[0]}`;\n case 'round':\n return `${formattedArgs[0]} rounded`;\n case 'sqrt':\n return `square root of ${formattedArgs[0]}`;\n case 'pow':\n return `${formattedArgs[0]} to the power of ${formattedArgs[1]}`;\n case 'lerp':\n return `lerp from ${formattedArgs[0]} to ${formattedArgs[1]} at ${formattedArgs[2]}`;\n case 'random':\n return 'random number';\n case 'randomInt':\n return `random integer between ${formattedArgs[0]} and ${formattedArgs[1]}`;\n default:\n return `math/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatStrFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'len':\n return `length of ${formattedArgs[0]}`;\n case 'upper':\n return `${formattedArgs[0]} uppercase`;\n case 'lower':\n return `${formattedArgs[0]} lowercase`;\n case 'trim':\n return `${formattedArgs[0]} trimmed`;\n case 'split':\n return `${formattedArgs[0]} split by ${formattedArgs[1]}`;\n case 'join':\n return `${formattedArgs[0]} joined with ${formattedArgs[1]}`;\n case 'includes':\n return `${formattedArgs[0]} contains ${formattedArgs[1]}`;\n case 'startsWith':\n return `${formattedArgs[0]} starts with ${formattedArgs[1]}`;\n case 'endsWith':\n return `${formattedArgs[0]} ends with ${formattedArgs[1]}`;\n case 'replace':\n return `${formattedArgs[0]} with ${formattedArgs[1]} replaced by ${formattedArgs[2]}`;\n case 'truncate':\n return `${formattedArgs[0]} truncated to ${formattedArgs[1]} characters`;\n case 'template':\n return `template ${formattedArgs[0]} with ${formattedArgs[1]}`;\n default:\n return `str/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatArrayFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'len':\n return `count of ${formattedArgs[0]}`;\n case 'first':\n return `first item in ${formattedArgs[0]}`;\n case 'last':\n return `last item in ${formattedArgs[0]}`;\n case 'filter':\n return `${formattedArgs[0]} filtered where ${formattedArgs[1]}`;\n case 'map':\n return `${formattedArgs[0]} transformed by ${formattedArgs[1]}`;\n case 'reduce':\n return `${formattedArgs[0]} reduced with ${formattedArgs[1]}`;\n case 'find':\n return `find in ${formattedArgs[0]} where ${formattedArgs[1]}`;\n case 'some':\n return `any in ${formattedArgs[0]} matches ${formattedArgs[1]}`;\n case 'every':\n return `all in ${formattedArgs[0]} match ${formattedArgs[1]}`;\n case 'includes':\n return `${formattedArgs[0]} contains ${formattedArgs[1]}`;\n case 'sort':\n return `${formattedArgs[0]} sorted`;\n case 'sortBy':\n return `${formattedArgs[0]} sorted by ${formattedArgs[1]}`;\n case 'reverse':\n return `${formattedArgs[0]} reversed`;\n case 'unique':\n return `unique items in ${formattedArgs[0]}`;\n case 'flatten':\n return `${formattedArgs[0]} flattened`;\n case 'concat':\n return `${formattedArgs.join(' combined with ')}`;\n case 'slice':\n return `${formattedArgs[0]} from ${formattedArgs[1]} to ${formattedArgs[2]}`;\n case 'take':\n return `first ${formattedArgs[1]} items of ${formattedArgs[0]}`;\n case 'drop':\n return `${formattedArgs[0]} without first ${formattedArgs[1]} items`;\n case 'groupBy':\n return `${formattedArgs[0]} grouped by ${formattedArgs[1]}`;\n case 'sum':\n return `sum of ${formattedArgs[0]}`;\n case 'avg':\n return `average of ${formattedArgs[0]}`;\n default:\n return `array/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatObjectFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'get':\n return `${formattedArgs[1]} of ${formattedArgs[0]}`;\n case 'set':\n return `${formattedArgs[0]} with ${formattedArgs[1]} set to ${formattedArgs[2]}`;\n case 'has':\n return `${formattedArgs[0]} has ${formattedArgs[1]}`;\n case 'keys':\n return `keys of ${formattedArgs[0]}`;\n case 'values':\n return `values of ${formattedArgs[0]}`;\n case 'entries':\n return `entries of ${formattedArgs[0]}`;\n case 'merge':\n return `${formattedArgs.join(' merged with ')}`;\n case 'pick':\n return `${formattedArgs[0]} with only ${formattedArgs[1]}`;\n case 'omit':\n return `${formattedArgs[0]} without ${formattedArgs[1]}`;\n case 'empty?':\n return `${formattedArgs[0]} is empty`;\n default:\n return `object/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatValidateFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'required':\n return `${formattedArgs[0]} is required`;\n case 'email':\n return `${formattedArgs[0]} is valid email`;\n case 'url':\n return `${formattedArgs[0]} is valid URL`;\n case 'phone':\n return `${formattedArgs[0]} is valid phone`;\n case 'minLength':\n return `${formattedArgs[0]} has at least ${formattedArgs[1]} characters`;\n case 'maxLength':\n return `${formattedArgs[0]} has at most ${formattedArgs[1]} characters`;\n case 'min':\n return `${formattedArgs[0]} is at least ${formattedArgs[1]}`;\n case 'max':\n return `${formattedArgs[0]} is at most ${formattedArgs[1]}`;\n case 'range':\n return `${formattedArgs[0]} is between ${formattedArgs[1]} and ${formattedArgs[2]}`;\n case 'pattern':\n return `${formattedArgs[0]} matches pattern ${formattedArgs[1]}`;\n default:\n return `validate/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatTimeFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'now':\n return 'current time';\n case 'today':\n return 'today';\n case 'format':\n return `${formattedArgs[0]} formatted as ${formattedArgs[1]}`;\n case 'add':\n return `${formattedArgs[0]} plus ${formattedArgs[1]} ${formattedArgs[2]}`;\n case 'subtract':\n return `${formattedArgs[0]} minus ${formattedArgs[1]} ${formattedArgs[2]}`;\n case 'diff':\n return `difference between ${formattedArgs[0]} and ${formattedArgs[1]}`;\n case 'isBefore':\n return `${formattedArgs[0]} is before ${formattedArgs[1]}`;\n case 'isAfter':\n return `${formattedArgs[0]} is after ${formattedArgs[1]}`;\n case 'isBetween':\n return `${formattedArgs[0]} is between ${formattedArgs[1]} and ${formattedArgs[2]}`;\n case 'year':\n return `year of ${formattedArgs[0]}`;\n case 'month':\n return `month of ${formattedArgs[0]}`;\n case 'day':\n return `day of ${formattedArgs[0]}`;\n default:\n return `time/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatFormatFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'number':\n return `${formattedArgs[0]} as number`;\n case 'currency':\n return `${formattedArgs[0]} as ${formattedArgs[1]} currency`;\n case 'percent':\n return `${formattedArgs[0]} as percentage`;\n case 'bytes':\n return `${formattedArgs[0]} as file size`;\n case 'ordinal':\n return `${formattedArgs[0]} as ordinal`;\n case 'plural':\n return `${formattedArgs[0]} with ${formattedArgs[1]}/${formattedArgs[2]}`;\n case 'list':\n return `${formattedArgs[0]} as list`;\n case 'phone':\n return `${formattedArgs[0]} as phone number`;\n default:\n return `format/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\n// ============================================================================\n// Generic Operator Formatting\n// ============================================================================\n\nfunction formatGenericOperator(op: string, args: SExpr[], ctx: FormatContext): string {\n if (args.length === 0) {\n return op;\n }\n\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n return `${op}(${formattedArgs.join(', ')})`;\n}\n","/**\n * Behavior Formatter\n *\n * Converts KFlow Trait schema to domain language text.\n * Supports both legacy typed effects and S-expression format.\n */\n\nimport type {\n DomainBehavior,\n DomainTransition,\n DomainTick,\n DomainGuard,\n DomainEffect,\n EffectType,\n} from '../types.js';\nimport { formatSExprToDomain, formatSExprGuardToDomain, isArraySExpr } from './sexpr-formatter.js';\n\n/**\n * Convert a KFlow Trait schema to domain language text\n */\nexport function formatSchemaTraitToDomain(trait: Record<string, unknown>, entityName?: string): string {\n const domainBehavior = schemaTraitToDomainBehavior(trait, entityName);\n return formatBehaviorText(domainBehavior);\n}\n\n/**\n * Convert KFlow Trait schema to DomainBehavior AST\n */\nexport function schemaTraitToDomainBehavior(trait: Record<string, unknown>, entityName?: string): DomainBehavior {\n const name = trait.name as string;\n const description = (trait.description as string) || name;\n\n // Determine entity name from trait or parameter\n let resolvedEntityName = entityName || '';\n const dataEntities = trait.dataEntities as Array<Record<string, unknown>> | undefined;\n if (!resolvedEntityName && dataEntities && dataEntities.length > 0) {\n resolvedEntityName = dataEntities[0].entity as string || '';\n }\n if (!resolvedEntityName) {\n // Try to extract from trait name (e.g., \"OrderLifecycle\" -> \"Order\")\n resolvedEntityName = extractEntityFromName(name);\n }\n\n // Extract state machine\n const stateMachine = trait.stateMachine as Record<string, unknown> | undefined;\n let states: string[] = [];\n let initialState = '';\n const transitions: DomainTransition[] = [];\n\n if (stateMachine) {\n // Extract states\n const schemaStates = (stateMachine.states as Array<Record<string, unknown>>) || [];\n for (const state of schemaStates) {\n const stateName = state.name as string;\n states.push(stateName);\n if (state.isInitial) {\n initialState = stateName;\n }\n }\n\n // Extract transitions\n const schemaTransitions = (stateMachine.transitions as Array<Record<string, unknown>>) || [];\n for (const t of schemaTransitions) {\n const fromState = t.from as string;\n const toState = t.to as string;\n const event = t.event as string;\n\n // Convert guards\n const guards: DomainGuard[] = [];\n const schemaGuards = (t.guards as Array<Record<string, unknown> | unknown[]>) || [];\n for (const g of schemaGuards) {\n // Check for S-expression guard\n if (isArraySExpr(g)) {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(g, resolvedEntityName),\n });\n } else {\n const guardObj = g as unknown as Record<string, unknown>;\n const condition = guardObj.condition;\n // Check if condition is S-expression\n if (isArraySExpr(condition)) {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(condition, resolvedEntityName),\n });\n } else {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition(condition as string, resolvedEntityName),\n raw: `if ${condition}`,\n });\n }\n }\n }\n\n // Single guard from transition\n if (t.guard) {\n // Check for S-expression guard\n if (isArraySExpr(t.guard)) {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(t.guard, resolvedEntityName),\n });\n } else {\n const guardObj = t.guard as Record<string, unknown>;\n const condition = guardObj.condition;\n // Check if condition is S-expression\n if (isArraySExpr(condition)) {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(condition, resolvedEntityName),\n });\n } else {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition(condition as string, resolvedEntityName),\n raw: `if ${condition}`,\n });\n }\n }\n }\n\n // Convert effects\n const effects = convertEffects(t.effects as Array<Record<string, unknown>> | undefined);\n\n transitions.push({\n type: 'transition',\n fromState,\n toState,\n event,\n guards,\n effects,\n });\n }\n }\n\n // Extract ticks\n const ticks: DomainTick[] = [];\n const schemaTicks = (trait.ticks as Array<Record<string, unknown>>) || [];\n for (const t of schemaTicks) {\n // Support both 'name' (new format) and 'id' (old format) for tick identifier\n const tickName = (t.name as string) || (t.id as string) || 'unnamed_tick';\n const intervalValue = t.interval;\n\n // Parse interval - can be a number (ms) or object { ms: number } or { frames: number }\n let intervalStr = 'every hour';\n let intervalMs = 3600000;\n if (typeof intervalValue === 'number') {\n // Direct milliseconds\n intervalMs = intervalValue;\n intervalStr = formatIntervalMs(intervalMs);\n } else if (intervalValue && typeof intervalValue === 'object') {\n const interval = intervalValue as Record<string, unknown>;\n if (interval.ms) {\n intervalMs = interval.ms as number;\n intervalStr = formatIntervalMs(intervalMs);\n } else if (interval.frames) {\n intervalMs = (interval.frames as number) * 1000; // Assuming 1 frame = 1 second\n intervalStr = formatIntervalMs(intervalMs);\n }\n }\n\n // Guard - can be a string, S-expression, or object { condition: string | SExpr }\n let tickGuard: DomainGuard | undefined;\n if (t.guard) {\n // Check for S-expression guard\n if (isArraySExpr(t.guard)) {\n tickGuard = {\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(t.guard, resolvedEntityName),\n };\n } else if (typeof t.guard === 'string') {\n tickGuard = {\n type: 'guard',\n condition: parseGuardCondition(t.guard, resolvedEntityName),\n raw: `if ${t.guard}`,\n };\n } else {\n const guardObj = t.guard as Record<string, unknown>;\n const condition = guardObj.condition;\n // Check if condition is S-expression\n if (isArraySExpr(condition)) {\n tickGuard = {\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(condition, resolvedEntityName),\n };\n } else {\n tickGuard = {\n type: 'guard',\n condition: parseGuardCondition(condition as string, resolvedEntityName),\n raw: `if ${condition}`,\n };\n }\n }\n }\n\n // Effects\n const effects = convertEffects(t.effects as Array<Record<string, unknown>> | undefined);\n\n ticks.push({\n type: 'tick',\n name: tickName,\n interval: intervalStr,\n intervalMs,\n guard: tickGuard,\n effects,\n });\n }\n\n return {\n type: 'behavior',\n name: formatBehaviorName(name),\n entityName: resolvedEntityName,\n states,\n initialState,\n transitions,\n ticks,\n rules: [],\n };\n}\n\n/**\n * Format DomainBehavior AST to domain language text\n */\nfunction formatBehaviorText(behavior: DomainBehavior): string {\n const lines: string[] = [];\n\n // Behavior name\n lines.push(behavior.name);\n lines.push('');\n\n // States\n if (behavior.states.length > 0) {\n lines.push(`States: ${behavior.states.join(', ')}`);\n lines.push('');\n }\n\n // Transitions\n if (behavior.transitions.length > 0) {\n lines.push('Transitions:');\n for (const transition of behavior.transitions) {\n const fromState = transition.fromState === '*' ? 'any' : transition.fromState;\n let line = ` - From ${fromState} to ${transition.toState}`;\n if (transition.event) {\n line += ` when ${transition.event}`;\n }\n lines.push(line);\n\n // Guards\n for (const guard of transition.guards) {\n lines.push(` ${guard.raw || formatGuardForDomain(guard)}`);\n }\n\n // Effects\n for (const effect of transition.effects) {\n lines.push(` then ${effect.description}`);\n }\n }\n lines.push('');\n }\n\n // Ticks\n for (const tick of behavior.ticks) {\n lines.push(`Every ${tick.interval}:`);\n if (tick.guard) {\n lines.push(` ${tick.guard.raw || formatGuardForDomain(tick.guard)}`);\n }\n for (const effect of tick.effects) {\n lines.push(` - ${effect.description}`);\n }\n lines.push('');\n }\n\n // Rules\n if (behavior.rules.length > 0) {\n lines.push('Rules:');\n for (const rule of behavior.rules) {\n lines.push(` - ${rule}`);\n }\n }\n\n return lines.join('\\n').trim();\n}\n\n/**\n * Convert schema effects to domain effects.\n * Handles both legacy typed effects and S-expression format.\n */\nfunction convertEffects(effects: Array<Record<string, unknown> | unknown[]> | undefined): DomainEffect[] {\n if (!effects) return [];\n\n return effects.map(e => {\n // Check for S-expression effect (array format)\n if (isArraySExpr(e)) {\n const description = formatSExprToDomain(e);\n return {\n type: 'effect',\n effectType: 'sexpr' as EffectType,\n description,\n config: { sexpr: e },\n };\n }\n\n // Legacy typed effect\n const effectObj = e as unknown as Record<string, unknown>;\n const effectType = effectObj.type as EffectType;\n const config = (effectObj.config as Record<string, unknown>) || {};\n\n return {\n type: 'effect',\n effectType,\n description: generateEffectDescription(effectType, config),\n config,\n };\n });\n}\n\n/**\n * Generate a human-readable description for an effect\n */\nfunction generateEffectDescription(type: EffectType, config: Record<string, unknown>): string {\n switch (type) {\n case 'notify':\n const message = config.message as string;\n const recipient = config.recipient as string;\n if (recipient) {\n return message ? `notify ${recipient} \"${message}\"` : `notify ${recipient}`;\n }\n return message ? `notify \"${message}\"` : 'send notification';\n\n case 'set':\n const field = config.field as string;\n const value = config.value;\n return `update ${field} to ${value}`;\n\n case 'navigate':\n const path = config.path as string;\n return `navigate to ${path}`;\n\n case 'emit':\n const event = (config.eventKey || config.event) as string;\n return `emit ${event}`;\n\n case 'call-service':\n const endpoint = config.endpoint as string;\n const service = config.service as string;\n return service ? `call ${service}` : `call ${endpoint}`;\n\n case 'persist':\n const dataAction = config.dataAction as string || 'save';\n const entity = config.entity as string;\n return entity ? `persist ${dataAction} ${entity}` : `persist ${dataAction}`;\n\n default:\n // For unknown effect types, serialize the config as JSON\n if (Object.keys(config).length > 0) {\n return `${type}:${JSON.stringify(config)}`;\n }\n return `${type} action`;\n }\n}\n\n/**\n * Format an interval in milliseconds to human readable text\n */\nfunction formatIntervalMs(ms: number): string {\n const seconds = ms / 1000;\n const minutes = seconds / 60;\n const hours = minutes / 60;\n const days = hours / 24;\n\n if (days >= 1 && days === Math.floor(days)) {\n return days === 1 ? '1 day' : `${days} days`;\n }\n if (hours >= 1 && hours === Math.floor(hours)) {\n return hours === 1 ? '1 hour' : `${hours} hours`;\n }\n if (minutes >= 1 && minutes === Math.floor(minutes)) {\n return minutes === 1 ? '1 minute' : `${minutes} minutes`;\n }\n return seconds === 1 ? '1 second' : `${seconds} seconds`;\n}\n\n/**\n * Format behavior name from PascalCase to readable text\n */\nfunction formatBehaviorName(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2');\n}\n\n/**\n * Extract entity name from trait name\n */\nfunction extractEntityFromName(name: string): string {\n // Common patterns: \"OrderLifecycle\" -> \"Order\", \"TaskApproval\" -> \"Task\"\n const suffixes = ['Lifecycle', 'Approval', 'Workflow', 'Status', 'Process', 'Flow'];\n for (const suffix of suffixes) {\n if (name.endsWith(suffix)) {\n return name.slice(0, -suffix.length);\n }\n }\n return name;\n}\n\n/**\n * Parse a guard condition string into a simple AST\n * This is a simplified version that creates a basic guard structure\n */\nfunction parseGuardCondition(condition: string, entityName: string): any {\n // Return a simple comparison condition\n return {\n type: 'comparison',\n field: {\n type: 'field_reference',\n entityName,\n fieldName: 'status',\n },\n operator: '==',\n value: 'valid',\n };\n}\n\n/**\n * Format a guard back to domain language\n */\nfunction formatGuardForDomain(guard: DomainGuard): string {\n return guard.raw || 'if condition';\n}\n","/**\n * Guard Formatter\n *\n * Converts KFlow guard conditions to domain language and vice versa.\n * All entity references are explicit (e.g., Order.amount, CurrentUser.role).\n *\n * Supports both legacy string-based conditions and S-expression format.\n */\n\nimport type {\n DomainGuard,\n GuardCondition,\n FieldCheckCondition,\n ComparisonCondition,\n UserCheckCondition,\n LogicalCondition,\n FieldReference,\n ComparisonOperator,\n} from '../types.js';\nimport { formatSExprGuardToDomain, isArraySExpr } from './sexpr-formatter.js';\n\n/**\n * Convert a KFlow schema guard to domain language text.\n * Handles both legacy string conditions and S-expression format.\n */\nexport function formatSchemaGuardToDomain(guard: Record<string, unknown> | unknown[], entityName: string): string {\n // Check for S-expression format (array with operator)\n if (isArraySExpr(guard)) {\n return formatSExprGuardToDomain(guard, entityName);\n }\n\n // Legacy object format with condition string\n const condition = (guard as unknown as Record<string, unknown>).condition as string;\n if (!condition) {\n return '';\n }\n\n // Check if condition itself is an S-expression\n if (isArraySExpr(condition)) {\n return formatSExprGuardToDomain(condition, entityName);\n }\n\n // Parse the schema guard condition and convert to domain language\n const parsed = parseSchemaCondition(condition, entityName);\n if (!parsed) {\n return `if ${condition}`;\n }\n\n return formatGuardConditionToDomain(parsed);\n}\n\n/**\n * Convert a DomainGuard to KFlow schema guard format\n */\nexport function formatDomainGuardToSchema(guard: DomainGuard): string {\n return formatConditionToSchemaString(guard.condition);\n}\n\n/**\n * Format a guard condition AST to domain-friendly text\n */\nexport function formatGuardConditionToDomain(condition: GuardCondition): string {\n return 'if ' + formatConditionText(condition);\n}\n\n/**\n * Format a condition to readable text (without \"if\" prefix)\n */\nfunction formatConditionText(condition: GuardCondition): string {\n switch (condition.type) {\n case 'field_check': {\n const fieldName = toSpaceSeparated(condition.field.fieldName);\n switch (condition.check) {\n case 'provided':\n return `${fieldName} is provided`;\n case 'empty':\n return `${fieldName} is empty`;\n case 'equals':\n return `${fieldName} is ${condition.value}`;\n }\n break;\n }\n\n case 'comparison': {\n const fieldName = toSpaceSeparated(condition.field.fieldName);\n const opMap: Record<ComparisonOperator, string> = {\n '==': 'is',\n '!=': 'is not',\n '>': '>',\n '<': '<',\n '>=': '>=',\n '<=': '<=',\n };\n const op = opMap[condition.operator] || condition.operator;\n return `${fieldName} ${op} ${condition.value}`;\n }\n\n case 'user_check': {\n if (condition.check === 'is_role') {\n return `user is ${condition.role}`;\n } else {\n return 'user owns this';\n }\n }\n\n case 'logical': {\n const left = formatConditionText(condition.left);\n const right = formatConditionText(condition.right);\n return `${left} ${condition.operator} ${right}`;\n }\n }\n\n return '';\n}\n\n/**\n * Format a condition AST to KFlow schema string format\n */\nfunction formatConditionToSchemaString(condition: GuardCondition): string {\n switch (condition.type) {\n case 'field_check': {\n const fieldRef = `${condition.field.entityName}.${condition.field.fieldName}`;\n switch (condition.check) {\n case 'provided':\n return `${fieldRef} != null`;\n case 'empty':\n return `${fieldRef} == null`;\n case 'equals':\n const value = typeof condition.value === 'string'\n ? `\"${condition.value}\"`\n : condition.value;\n return `${fieldRef} == ${value}`;\n }\n break;\n }\n\n case 'comparison': {\n const fieldRef = `${condition.field.entityName}.${condition.field.fieldName}`;\n const value = typeof condition.value === 'string'\n ? `\"${condition.value}\"`\n : condition.value;\n return `${fieldRef} ${condition.operator} ${value}`;\n }\n\n case 'user_check': {\n if (condition.check === 'is_role') {\n return `CurrentUser.role == \"${condition.role}\"`;\n } else {\n return `${condition.ownerField} == CurrentUser.id`;\n }\n }\n\n case 'logical': {\n const left = formatConditionToSchemaString(condition.left);\n const right = formatConditionToSchemaString(condition.right);\n const op = condition.operator === 'AND' ? '&&' : '||';\n return `(${left}) ${op} (${right})`;\n }\n }\n\n return '';\n}\n\n/**\n * Parse a schema condition string into a GuardCondition AST\n * This handles conditions like \"Order.amount > 1000\" or \"CurrentUser.role == \\\"admin\\\"\"\n */\nfunction parseSchemaCondition(condition: string, defaultEntityName: string): GuardCondition | null {\n condition = condition.trim();\n\n // Handle logical operators\n const andMatch = splitLogicalOperator(condition, '&&');\n if (andMatch) {\n const left = parseSchemaCondition(andMatch.left, defaultEntityName);\n const right = parseSchemaCondition(andMatch.right, defaultEntityName);\n if (left && right) {\n return {\n type: 'logical',\n operator: 'AND',\n left,\n right,\n };\n }\n }\n\n const orMatch = splitLogicalOperator(condition, '||');\n if (orMatch) {\n const left = parseSchemaCondition(orMatch.left, defaultEntityName);\n const right = parseSchemaCondition(orMatch.right, defaultEntityName);\n if (left && right) {\n return {\n type: 'logical',\n operator: 'OR',\n left,\n right,\n };\n }\n }\n\n // Handle CurrentUser checks\n if (condition.includes('CurrentUser.role')) {\n const roleMatch = condition.match(/CurrentUser\\.role\\s*==\\s*[\"']?(\\w+)[\"']?/);\n if (roleMatch) {\n return {\n type: 'user_check',\n check: 'is_role',\n role: roleMatch[1],\n };\n }\n }\n\n if (condition.includes('CurrentUser.id')) {\n const ownerMatch = condition.match(/(\\w+)\\s*==\\s*CurrentUser\\.id/);\n if (ownerMatch) {\n return {\n type: 'user_check',\n check: 'owns_this',\n ownerField: ownerMatch[1],\n };\n }\n }\n\n // Handle null checks\n const nullCheckMatch = condition.match(/^(.+?)\\s*(==|!=)\\s*null$/);\n if (nullCheckMatch) {\n const fieldRef = parseFieldReference(nullCheckMatch[1], defaultEntityName);\n if (fieldRef) {\n return {\n type: 'field_check',\n field: fieldRef,\n check: nullCheckMatch[2] === '!=' ? 'provided' : 'empty',\n };\n }\n }\n\n // Handle comparison operators\n const comparisonMatch = condition.match(/^(.+?)\\s*(>=|<=|!=|==|>|<)\\s*(.+)$/);\n if (comparisonMatch) {\n const fieldRef = parseFieldReference(comparisonMatch[1], defaultEntityName);\n if (fieldRef) {\n return {\n type: 'comparison',\n field: fieldRef,\n operator: comparisonMatch[2] as ComparisonOperator,\n value: parseValue(comparisonMatch[3]),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Parse a field reference like \"Order.amount\" or just \"amount\"\n */\nfunction parseFieldReference(text: string, defaultEntityName: string): FieldReference | null {\n text = text.trim();\n\n // Remove parentheses if present\n if (text.startsWith('(') && text.endsWith(')')) {\n text = text.slice(1, -1).trim();\n }\n\n // Check for Entity.field format\n const dotMatch = text.match(/^(\\w+)\\.(\\w+)$/);\n if (dotMatch) {\n return {\n type: 'field_reference',\n entityName: dotMatch[1],\n fieldName: dotMatch[2],\n };\n }\n\n // Use default entity\n if (/^\\w+$/.test(text)) {\n return {\n type: 'field_reference',\n entityName: defaultEntityName,\n fieldName: text,\n };\n }\n\n return null;\n}\n\n/**\n * Parse a value (string, number, boolean)\n */\nfunction parseValue(text: string): string | number | boolean {\n text = text.trim();\n\n // Remove quotes\n if ((text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))) {\n return text.slice(1, -1);\n }\n\n // Boolean\n if (text.toLowerCase() === 'true') return true;\n if (text.toLowerCase() === 'false') return false;\n\n // Number\n const num = parseFloat(text);\n if (!isNaN(num)) return num;\n\n // String (identifier-style)\n return text;\n}\n\n/**\n * Split condition at logical operator respecting parentheses\n */\nfunction splitLogicalOperator(text: string, operator: string): { left: string; right: string } | null {\n let depth = 0;\n\n for (let i = 0; i < text.length - operator.length; i++) {\n const char = text[i];\n if (char === '(') depth++;\n else if (char === ')') depth--;\n else if (depth === 0 && text.slice(i, i + operator.length) === operator) {\n return {\n left: text.slice(0, i).trim(),\n right: text.slice(i + operator.length).trim(),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Convert camelCase to space-separated words\n */\nfunction toSpaceSeparated(text: string): string {\n return text.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();\n}\n","/**\n * Schema to Domain Converter\n *\n * Converts a complete OrbitalSchema to domain language text.\n * Generates three sections: Entities, Pages, and Behaviors.\n * \n * Updated to read from OrbitalSchema where entities, pages, and traits\n * are grouped into Orbital units. Also supports legacy KFlowSchema format\n * for backward compatibility.\n */\n\nimport type { DomainDocument, SectionMapping } from '../types.js';\nimport { formatSchemaEntityToDomain, schemaEntityToDomainEntity } from '../formatters/entity-formatter.js';\nimport { formatSchemaPageToDomain, schemaPageToDomainPage } from '../formatters/page-formatter.js';\nimport { formatSchemaTraitToDomain, schemaTraitToDomainBehavior } from '../formatters/behavior-formatter.js';\nimport { formatSExprToDomain, formatSExprGuardToDomain, isArraySExpr } from '../formatters/sexpr-formatter.js';\nimport type {\n OrbitalSchema,\n Entity,\n Page,\n Trait,\n TraitRef,\n EntityRef,\n PageRef,\n} from '../../types/index.js';\nimport {\n isOrbitalDefinition,\n getTraitName,\n isEntityReference,\n isPageReferenceString,\n isPageReferenceObject,\n} from '../../types/index.js';\n\n/**\n * Get entity name safely from EntityRef (string or inline Entity)\n */\nfunction getEntityName(entity: EntityRef): string {\n if (isEntityReference(entity)) {\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n/**\n * Get page name safely from PageRef (string, object reference, or inline Page)\n */\nfunction getPageName(page: PageRef): string {\n if (isPageReferenceString(page)) {\n const parts = page.split('.');\n return parts[parts.length - 1];\n }\n if (isPageReferenceObject(page)) {\n const parts = page.ref.split('.');\n return parts[parts.length - 1];\n }\n return page.name;\n}\n\n/**\n * Check if entity is an inline definition (not a reference)\n */\nfunction isInlineEntity(entity: EntityRef): entity is Entity {\n return !isEntityReference(entity);\n}\n\n/**\n * Check if page is an inline definition (not a reference)\n */\nfunction isInlinePage(page: PageRef): page is Page {\n return !isPageReferenceString(page) && !isPageReferenceObject(page);\n}\n\nexport interface SchemaToDomainResult {\n /** The complete domain text document */\n domainText: string;\n\n /** Parsed AST representation */\n document: DomainDocument;\n\n /** Mapping of sections to schema paths */\n mappings: SectionMapping[];\n\n /** Separate section texts for individual editing */\n sections: {\n entities: string[];\n pages: string[];\n behaviors: string[];\n };\n}\n\n/**\n * Legacy KFlowSchema format (for backward compatibility)\n */\ninterface LegacyKFlowSchema {\n name?: string;\n dataEntities?: Array<Record<string, unknown>>;\n ui?: { pages?: Array<Record<string, unknown>> };\n traits?: Array<Record<string, unknown>>;\n ticks?: Array<Record<string, unknown>>;\n}\n\n/**\n * Combined input type for the converter\n */\ntype SchemaInput = OrbitalSchema | LegacyKFlowSchema;\n\n/**\n * Check if schema is in legacy format\n */\nfunction isLegacySchema(schema: SchemaInput): schema is LegacyKFlowSchema {\n return 'dataEntities' in schema || ('ui' in schema && !('orbitals' in schema));\n}\n\n/**\n * Convert a complete OrbitalSchema or legacy KFlowSchema to domain language\n */\nexport function convertSchemaToDomain(schema: SchemaInput): SchemaToDomainResult {\n // Handle legacy format\n if (isLegacySchema(schema)) {\n return convertLegacySchemaToDomain(schema);\n }\n\n // Handle new OrbitalSchema format\n return convertOrbitalSchemaToDomain(schema);\n}\n\n/**\n * Convert legacy KFlowSchema to domain language\n */\nfunction convertLegacySchemaToDomain(schema: LegacyKFlowSchema): SchemaToDomainResult {\n const document: DomainDocument = {\n type: 'document',\n entities: [],\n pages: [],\n behaviors: [],\n };\n\n const mappings: SectionMapping[] = [];\n const sections = {\n entities: [] as string[],\n pages: [] as string[],\n behaviors: [] as string[],\n };\n\n // Convert entities\n const dataEntities = schema.dataEntities || [];\n for (let i = 0; i < dataEntities.length; i++) {\n const entity = dataEntities[i];\n const domainText = formatSchemaEntityToDomain(entity);\n const domainEntity = schemaEntityToDomainEntity(entity);\n\n document.entities.push(domainEntity);\n sections.entities.push(domainText);\n\n mappings.push({\n sectionId: `entity_${entity.name}`,\n sectionType: 'entity',\n schemaPath: `dataEntities[${i}]`,\n domainText,\n });\n }\n\n // Convert pages\n const pages = schema.ui?.pages || [];\n for (let i = 0; i < pages.length; i++) {\n const page = pages[i];\n const domainText = formatSchemaPageToDomain(page);\n const domainPage = schemaPageToDomainPage(page);\n\n document.pages.push(domainPage);\n sections.pages.push(domainText);\n\n mappings.push({\n sectionId: `page_${page.name}`,\n sectionType: 'page',\n schemaPath: `ui.pages[${i}]`,\n domainText,\n });\n }\n\n // Convert traits/behaviors\n const traits = schema.traits || [];\n for (let i = 0; i < traits.length; i++) {\n const trait = traits[i];\n const domainText = formatSchemaTraitToDomain(trait);\n const domainBehavior = schemaTraitToDomainBehavior(trait);\n\n document.behaviors.push(domainBehavior);\n sections.behaviors.push(domainText);\n\n mappings.push({\n sectionId: `behavior_${trait.name}`,\n sectionType: 'behavior',\n schemaPath: `traits[${i}]`,\n domainText,\n });\n }\n\n // Convert ticks to behaviors\n const ticks = schema.ticks || [];\n for (let i = 0; i < ticks.length; i++) {\n const tick = ticks[i];\n const tickBehavior = formatTickToDomain(tick);\n\n sections.behaviors.push(tickBehavior);\n\n mappings.push({\n sectionId: `tick_${tick.id || tick.name}`,\n sectionType: 'tick',\n schemaPath: `ticks[${i}]`,\n domainText: tickBehavior,\n });\n }\n\n // Build complete document text\n const domainText = buildDomainDocument(sections);\n\n return {\n domainText,\n document,\n mappings,\n sections,\n };\n}\n\n/**\n * Convert OrbitalSchema to domain language\n */\nfunction convertOrbitalSchemaToDomain(schema: OrbitalSchema): SchemaToDomainResult {\n const document: DomainDocument = {\n type: 'document',\n entities: [],\n pages: [],\n behaviors: [],\n };\n\n const mappings: SectionMapping[] = [];\n const sections = {\n entities: [] as string[],\n pages: [] as string[],\n behaviors: [] as string[],\n };\n\n // Extract from orbitals\n for (let orbitalIndex = 0; orbitalIndex < schema.orbitals.length; orbitalIndex++) {\n const orbital = schema.orbitals[orbitalIndex];\n\n // Skip orbital references - they don't have inline definitions\n if (!isOrbitalDefinition(orbital)) {\n continue;\n }\n\n // Convert entity (only if inline definition, not a reference)\n const entity = orbital.entity;\n if (isInlineEntity(entity)) {\n const entityRecord = entity as unknown as Record<string, unknown>;\n const domainText = formatSchemaEntityToDomain(entityRecord);\n const domainEntity = schemaEntityToDomainEntity(entityRecord);\n\n document.entities.push(domainEntity);\n sections.entities.push(domainText);\n\n mappings.push({\n sectionId: `entity_${entity.name}`,\n sectionType: 'entity',\n schemaPath: `orbitals[${orbitalIndex}].entity`,\n domainText,\n });\n }\n\n // Convert pages from this orbital (only inline definitions, not references)\n for (let pageIndex = 0; pageIndex < orbital.pages.length; pageIndex++) {\n const page = orbital.pages[pageIndex];\n\n // Skip page references - only convert inline page definitions\n if (!isInlinePage(page)) {\n continue;\n }\n\n const pageRecord = page as unknown as Record<string, unknown>;\n const pageDomainText = formatSchemaPageToDomain(pageRecord);\n const domainPage = schemaPageToDomainPage(pageRecord);\n\n document.pages.push(domainPage);\n sections.pages.push(pageDomainText);\n\n mappings.push({\n sectionId: `page_${page.name}`,\n sectionType: 'page',\n schemaPath: `orbitals[${orbitalIndex}].pages[${pageIndex}]`,\n domainText: pageDomainText,\n });\n }\n\n // Convert traits attached to this orbital (inline definitions)\n const orbitalTraits = orbital.traits || [];\n for (let traitIndex = 0; traitIndex < orbitalTraits.length; traitIndex++) {\n const traitEntry = orbitalTraits[traitIndex];\n\n // Traits are defined inline with full stateMachine objects\n // Check if this is an inline trait definition (has name and optionally stateMachine)\n const inlineTrait = traitEntry as unknown as Record<string, unknown>;\n const traitName = (inlineTrait.name as string) || getTraitName(traitEntry);\n\n // Skip if it's just a reference without inline definition (e.g., { ref: \"SomeTrait\" } without stateMachine)\n if (!inlineTrait.name && !inlineTrait.stateMachine) {\n continue;\n }\n\n // Use the inline trait definition, pass entity name for context\n const entityName = getEntityName(entity);\n const traitDomainText = formatSchemaTraitToDomain(inlineTrait, entityName);\n const domainBehavior = schemaTraitToDomainBehavior(inlineTrait, entityName);\n\n document.behaviors.push(domainBehavior);\n sections.behaviors.push(traitDomainText);\n\n mappings.push({\n sectionId: `behavior_${traitName}`,\n sectionType: 'behavior',\n schemaPath: `orbitals[${orbitalIndex}].traits[${traitIndex}]`,\n domainText: traitDomainText,\n });\n }\n }\n\n // Note: OrbitalSchema no longer has top-level traits\n // All traits are now defined within orbital.traits\n\n // Build complete document text\n const domainText = buildDomainDocument(sections);\n\n return {\n domainText,\n document,\n mappings,\n sections,\n };\n}\n\n/**\n * Format a tick to domain language\n */\nfunction formatTickToDomain(tick: Record<string, unknown>): string {\n const lines: string[] = [];\n\n // Support both 'name' and 'id' for tick identifier\n const tickName = (tick.name as string) || (tick.id as string) || 'unnamed';\n const intervalValue = tick.interval;\n\n // Format interval - can be a number (ms) or object { ms: number }\n let intervalStr = 'every hour';\n if (typeof intervalValue === 'number') {\n // Direct milliseconds\n intervalStr = formatIntervalMs(intervalValue);\n } else if (intervalValue && typeof intervalValue === 'object') {\n const interval = intervalValue as Record<string, unknown>;\n if (interval.ms) {\n intervalStr = formatIntervalMs(interval.ms as number);\n } else if (interval.frames) {\n intervalStr = formatIntervalMs((interval.frames as number) * 1000);\n }\n }\n\n lines.push(`Every ${intervalStr}:`);\n\n // Guard - can be a string, S-expression, or object { condition: string | SExpr }\n if (tick.guard) {\n // Check for S-expression guard\n if (isArraySExpr(tick.guard)) {\n lines.push(` ${formatSExprGuardToDomain(tick.guard)}`);\n } else if (typeof tick.guard === 'string') {\n lines.push(` if ${tick.guard}`);\n } else {\n const guardObj = tick.guard as Record<string, unknown>;\n const condition = guardObj.condition;\n // Check if condition is S-expression\n if (isArraySExpr(condition)) {\n lines.push(` ${formatSExprGuardToDomain(condition)}`);\n } else {\n lines.push(` if ${condition}`);\n }\n }\n }\n\n // Effects - can be typed effects or S-expressions\n const effects = (tick.effects as Array<Record<string, unknown> | unknown[]>) || [];\n for (const effect of effects) {\n // Check for S-expression effect\n if (isArraySExpr(effect)) {\n const desc = formatSExprToDomain(effect);\n lines.push(` - ${desc}`);\n } else {\n const effectObj = effect as unknown as Record<string, unknown>;\n const type = effectObj.type as string;\n const config = (effectObj.config as Record<string, unknown>) || {};\n const desc = formatEffectDescription(type, config);\n lines.push(` - ${desc}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Convert just the entities section\n */\nexport function convertEntitiesToDomain(entities: Entity[]): string {\n return entities.map(e => formatSchemaEntityToDomain(e as unknown as Record<string, unknown>)).join('\\n\\n---\\n\\n');\n}\n\n/**\n * Convert just the pages section\n */\nexport function convertPagesToDomain(pages: Page[]): string {\n return pages.map(p => formatSchemaPageToDomain(p as unknown as Record<string, unknown>)).join('\\n\\n---\\n\\n');\n}\n\n/**\n * Convert just the traits/behaviors section\n */\nexport function convertTraitsToDomain(traits: Trait[]): string {\n return traits.map(t => formatSchemaTraitToDomain(t as unknown as Record<string, unknown>)).join('\\n\\n---\\n\\n');\n}\n\n/**\n * Build the complete domain document from sections\n */\nfunction buildDomainDocument(sections: { entities: string[]; pages: string[]; behaviors: string[] }): string {\n const parts: string[] = [];\n\n if (sections.entities.length > 0) {\n parts.push('# Entities\\n');\n parts.push(sections.entities.join('\\n\\n---\\n\\n'));\n }\n\n if (sections.pages.length > 0) {\n parts.push('\\n\\n# Pages\\n');\n parts.push(sections.pages.join('\\n\\n---\\n\\n'));\n }\n\n if (sections.behaviors.length > 0) {\n parts.push('\\n\\n# Behaviors\\n');\n parts.push(sections.behaviors.join('\\n\\n---\\n\\n'));\n }\n\n return parts.join('');\n}\n\n/**\n * Format interval in milliseconds to human readable\n */\nexport function formatIntervalMs(ms: number): string {\n const seconds = ms / 1000;\n const minutes = seconds / 60;\n const hours = minutes / 60;\n const days = hours / 24;\n\n if (days >= 1 && days === Math.floor(days)) {\n return days === 1 ? '1 day' : `${days} days`;\n }\n if (hours >= 1 && hours === Math.floor(hours)) {\n return hours === 1 ? '1 hour' : `${hours} hours`;\n }\n if (minutes >= 1 && minutes === Math.floor(minutes)) {\n return minutes === 1 ? '1 minute' : `${minutes} minutes`;\n }\n return seconds === 1 ? '1 second' : `${seconds} seconds`;\n}\n\n/**\n * Format an effect to human readable description\n */\nexport function formatEffectDescription(type: string, config: Record<string, unknown>): string {\n switch (type) {\n case 'notify':\n const message = config.message as string;\n const recipient = config.recipient as string;\n if (recipient) {\n return message ? `notify ${recipient} \"${message}\"` : `notify ${recipient}`;\n }\n return message ? `notify \"${message}\"` : 'send notification';\n\n case 'update_field':\n return `update ${config.field} to ${config.value}`;\n\n case 'navigate':\n return `navigate to ${config.path}`;\n\n case 'emit_event':\n const event = (config.eventKey || config.event) as string;\n return `emit ${event}`;\n\n case 'api_call':\n return `call ${config.endpoint}`;\n\n case 'persist_data':\n const dataAction = config.dataAction as string || 'save';\n const entity = config.entity as string;\n return entity ? `persist ${dataAction} ${entity}` : `persist ${dataAction}`;\n\n case 'send_in_app':\n const userId = config.userId as string;\n const title = config.title as string;\n const inAppMessage = config.message as string;\n const msgType = config.type as string || 'info';\n return `send_in_app to ${userId} title \"${title}\" message \"${inAppMessage}\" type ${msgType}`;\n\n default:\n // For unknown effect types, serialize the config as JSON\n if (Object.keys(config).length > 0) {\n return `${type}:${JSON.stringify(config)}`;\n }\n return `${type} action`;\n }\n}\n","/**\n * Domain to Schema Converter\n *\n * Applies domain language text changes to an OrbitalSchema.\n * Supports incremental updates (single section) and full replacement.\n * \n * Updated to use OrbitalSchema where entities, pages, and traits\n * are grouped into Orbital units instead of flat arrays.\n */\n\nimport type { DomainDocument, ParseError, SectionMapping } from '../types.js';\nimport { parseEntity, formatEntityToSchema } from '../parsers/entity-parser.js';\nimport { parsePage, formatPageToSchema } from '../parsers/page-parser.js';\nimport { parseBehavior, formatBehaviorToSchema } from '../parsers/behavior-parser.js';\nimport { parseDomainEffect } from '../parsers/sexpr-parser.js';\nimport type {\n OrbitalSchema,\n Orbital,\n OrbitalDefinition,\n Entity,\n Page,\n TraitRef,\n Trait,\n} from '../../types/index.js';\nimport { isOrbitalDefinition, getTraitName, isEntityReference, isPageReferenceString, isPageReferenceObject, EntityRef, PageRef } from '../../types/index.js';\n\n/**\n * Helper to get entity name from EntityRef (handles string references)\n */\nfunction getEntityName(entity: EntityRef): string {\n if (isEntityReference(entity)) {\n // Reference format: \"Alias.entity\" - extract alias\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n/**\n * Helper to get page name from PageRef\n */\nfunction getPageName(page: PageRef): string {\n if (isPageReferenceString(page)) {\n // \"Alias.pages.PageName\" -> \"PageName\"\n const parts = page.split('.');\n return parts[parts.length - 1];\n }\n if (isPageReferenceObject(page)) {\n const parts = page.ref.split('.');\n return parts[parts.length - 1];\n }\n return page.name;\n}\n\nexport interface DomainToSchemaResult {\n /** Whether the conversion was successful */\n success: boolean;\n\n /** The updated schema */\n schema: OrbitalSchema;\n\n /** Any parse errors encountered */\n errors: ParseError[];\n\n /** Warnings (non-fatal issues) */\n warnings: ParseError[];\n\n /** Updated section mappings */\n mappings: SectionMapping[];\n}\n\n/**\n * Parse a complete domain document and convert to OrbitalSchema\n */\nexport function convertDomainToSchema(domainText: string, baseSchema?: OrbitalSchema): DomainToSchemaResult {\n const errors: ParseError[] = [];\n const warnings: ParseError[] = [];\n const mappings: SectionMapping[] = [];\n\n // Start with base schema or empty\n // Note: OrbitalSchema no longer has top-level traits - they are inside orbitals\n const schema: OrbitalSchema = baseSchema ? {\n ...baseSchema,\n orbitals: [...(baseSchema.orbitals || [])],\n } : {\n name: 'Application',\n orbitals: [],\n };\n\n // Split document into sections\n const sections = splitDomainDocument(domainText);\n\n // Parse entities, pages, and behaviors\n const parsedEntities: Array<{ name: string; entity: Entity; text: string }> = [];\n const parsedPages: Array<{ name: string; page: Page; forEntity?: string; text: string }> = [];\n const parsedTraits: Array<{ name: string; trait: Trait; forEntity?: string; text: string }> = [];\n const parsedTicks: Array<Record<string, unknown>> = [];\n\n // Parse entities\n for (const text of sections.entities) {\n const result = parseEntity(text);\n if (result.success && result.data) {\n const entityRecord = formatEntityToSchema(result.data);\n const entity: Entity = {\n name: entityRecord.name as string,\n fields: (entityRecord.fields || []) as Entity['fields'],\n persistence: 'persistent',\n };\n parsedEntities.push({\n name: result.data.name,\n entity,\n text,\n });\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n }\n\n // Parse pages\n for (const text of sections.pages) {\n const result = parsePage(text);\n if (result.success && result.data) {\n const pageRecord = formatPageToSchema(result.data);\n const page: Page = {\n name: pageRecord.name as string,\n path: (pageRecord.path || '/') as string,\n primaryEntity: pageRecord.primaryEntity as string | undefined,\n };\n\n // Add trait reference if specified in domain text\n if (result.data.traitName) {\n page.traits = [{\n ref: result.data.traitName,\n linkedEntity: result.data.primaryEntity,\n }];\n }\n\n // Use EXPLICIT primaryEntity from domain text - NO INFERENCE!\n // If primaryEntity is not specified, page becomes orphaned (not attached to orbital)\n const forEntity = result.data.primaryEntity || page.primaryEntity;\n parsedPages.push({\n name: result.data.name,\n page,\n forEntity,\n text,\n });\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n }\n\n // Parse behaviors/traits\n for (const text of sections.behaviors) {\n // Check if it's a tick (starts with \"Every\")\n if (text.trim().toLowerCase().startsWith('every')) {\n const tick = parseTickFromDomain(text);\n if (tick) {\n parsedTicks.push(tick);\n }\n continue;\n }\n\n // Parse as behavior/trait\n const result = parseBehavior(text, '');\n if (result.success && result.data) {\n const traitRecord = formatBehaviorToSchema(result.data);\n const trait: Trait = {\n name: traitRecord.name as string,\n stateMachine: traitRecord.stateMachine as Trait['stateMachine'],\n };\n // Use explicit \"Entity: X\" from behavior syntax if present\n // Behaviors without explicit entity go to schema level (assigned via page references or name matching)\n const forEntity = result.data.entityName || undefined;\n parsedTraits.push({\n name: result.data.name,\n trait,\n forEntity,\n text,\n });\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n }\n\n // Log what was parsed\n console.log(`[DomainToSchema] Parsed: ${parsedEntities.length} entities, ${parsedPages.length} pages, ${parsedTraits.length} traits`);\n if (parsedEntities.length > 0) {\n console.log(`[DomainToSchema] Entities: ${parsedEntities.map(e => e.name).join(', ')}`);\n }\n if (parsedTraits.length > 0) {\n console.log(`[DomainToSchema] Traits: ${parsedTraits.map(t => t.name).join(', ')}`);\n }\n\n // Build a map of trait names to their linked entities from page trait references\n // This connects traits to orbitals via the pages that use them\n const traitToEntityMap = new Map<string, string>();\n for (const { page } of parsedPages) {\n if (page.traits && page.primaryEntity) {\n for (const traitRef of page.traits) {\n // PageTraitRef is always an object with ref property\n if (traitRef.ref) {\n // Use linkedEntity if specified, otherwise use page's primaryEntity\n const linkedEntity = traitRef.linkedEntity || page.primaryEntity;\n if (linkedEntity) {\n traitToEntityMap.set(traitRef.ref.toLowerCase(), linkedEntity);\n }\n }\n }\n }\n }\n\n // Log traitToEntityMap for debugging\n if (traitToEntityMap.size > 0) {\n console.log(`[DomainToSchema] Page trait references: ${Array.from(traitToEntityMap.entries()).map(([t, e]) => `${t}→${e}`).join(', ')}`);\n } else {\n console.log(`[DomainToSchema] No page trait references found (pages may be missing primaryEntity or traits)`);\n }\n\n // Group into Orbitals - each entity becomes an Orbital\n const orbitals: OrbitalDefinition[] = [];\n\n for (let i = 0; i < parsedEntities.length; i++) {\n const { name, entity, text } = parsedEntities[i];\n\n // Find pages for this entity\n const entityPages = parsedPages\n .filter(p => p.forEntity === name || p.page.primaryEntity === name)\n .map(p => p.page);\n\n // Find traits for this entity using CONCRETE strategies only:\n // 1. Explicit forEntity from \"Entity: X\" syntax in behavior definition\n // 2. Page trait references via \"shows Entity using Trait\" syntax\n // NO name-based inference - all associations must be explicit\n const entityTraits: TraitRef[] = parsedTraits\n .filter(t => {\n const traitNameLower = t.name.toLowerCase();\n\n // Strategy 1: Explicit forEntity from \"Entity: X\" syntax\n if (t.forEntity === name) {\n console.log(`[DomainToSchema] ✓ Trait \"${t.name}\" → Entity \"${name}\" (explicit Entity: syntax)`);\n return true;\n }\n\n // Strategy 2: Check if trait is linked to this entity via page trait references\n // This uses \"shows Entity using Trait\" syntax in page definitions\n const linkedEntity = traitToEntityMap.get(traitNameLower);\n if (linkedEntity === name) {\n console.log(`[DomainToSchema] ✓ Trait \"${t.name}\" → Entity \"${name}\" (page trait reference)`);\n return true;\n }\n\n return false;\n })\n .map(t => t.trait.name); // TraitRef can be just a string\n\n const orbital: OrbitalDefinition = {\n name,\n entity,\n traits: entityTraits,\n pages: entityPages,\n };\n\n orbitals.push(orbital);\n\n // Add mapping for entity\n mappings.push({\n sectionId: `entity_${name}`,\n sectionType: 'entity',\n schemaPath: `orbitals[${i}].entity`,\n domainText: text,\n });\n }\n\n // Add mappings for pages and traits\n for (const { name, forEntity, text } of parsedPages) {\n const orbitalIndex = parsedEntities.findIndex(e => e.name === forEntity);\n const pageIndex = orbitalIndex >= 0\n ? orbitals[orbitalIndex].pages.findIndex(p => getPageName(p) === name)\n : -1;\n\n mappings.push({\n sectionId: `page_${name}`,\n sectionType: 'page',\n schemaPath: orbitalIndex >= 0 && pageIndex >= 0\n ? `orbitals[${orbitalIndex}].pages[${pageIndex}]`\n : `orphanedPages`,\n domainText: text,\n });\n }\n\n for (const { name, forEntity, text } of parsedTraits) {\n const orbitalIndex = parsedEntities.findIndex(e => e.name === forEntity);\n const traitIndex = orbitalIndex >= 0\n ? orbitals[orbitalIndex].traits.findIndex(t => getTraitName(t) === name)\n : -1;\n\n mappings.push({\n sectionId: `behavior_${name}`,\n sectionType: 'behavior',\n schemaPath: orbitalIndex >= 0 && traitIndex >= 0\n ? `orbitals[${orbitalIndex}].traits[${traitIndex}]`\n : `traits`,\n domainText: text,\n });\n }\n\n // Collect all trait names that were assigned to orbitals\n const assignedTraitNames = new Set<string>();\n for (const orbital of orbitals) {\n for (const traitRef of orbital.traits) {\n const traitName = getTraitName(traitRef);\n assignedTraitNames.add(traitName.toLowerCase());\n }\n }\n\n // Note: OrbitalSchema no longer has top-level traits.\n // Traits are now inline in orbitals. Each orbital's traits array can contain\n // either trait references (strings) or inline trait definitions.\n // The traits are already assigned to orbitals via assignedTraitNames above.\n\n // Log for debugging\n console.log(`[DomainToSchema] ${parsedTraits.length} traits parsed, ${assignedTraitNames.size} assigned to orbitals`);\n for (const orbital of orbitals) {\n if (orbital.traits.length > 0) {\n console.log(`[DomainToSchema] Orbital ${orbital.name}: ${orbital.traits.length} traits - ${orbital.traits.join(', ')}`);\n }\n }\n\n schema.orbitals = orbitals;\n\n return {\n success: errors.length === 0,\n schema,\n errors,\n warnings,\n mappings,\n };\n}\n\n/**\n * Apply a single section update to an OrbitalSchema\n */\nexport function applySectionUpdate(\n schema: OrbitalSchema,\n sectionType: 'entity' | 'page' | 'behavior' | 'tick',\n sectionId: string,\n newDomainText: string,\n): DomainToSchemaResult {\n const errors: ParseError[] = [];\n const warnings: ParseError[] = [];\n const updatedSchema: OrbitalSchema = JSON.parse(JSON.stringify(schema));\n\n // Extract the name from sectionId (e.g., \"entity_Order\" -> \"Order\")\n const name = sectionId.replace(/^(entity|page|behavior|tick)_/, '');\n\n switch (sectionType) {\n case 'entity': {\n const result = parseEntity(newDomainText);\n if (result.success && result.data) {\n const entityRecord = formatEntityToSchema(result.data);\n const entity: Entity = {\n name: entityRecord.name as string,\n fields: (entityRecord.fields || []) as Entity['fields'],\n persistence: 'persistent',\n };\n\n // Find and update existing orbital or create new\n const orbitalIndex = updatedSchema.orbitals.findIndex(\n o => isOrbitalDefinition(o) && getEntityName(o.entity) === name\n );\n\n if (orbitalIndex >= 0) {\n const orbital = updatedSchema.orbitals[orbitalIndex] as OrbitalDefinition;\n orbital.entity = entity;\n } else {\n // Create new orbital for this entity\n updatedSchema.orbitals.push({\n name: result.data.name,\n entity,\n traits: [],\n pages: [],\n });\n }\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n break;\n }\n\n case 'page': {\n const result = parsePage(newDomainText);\n if (result.success && result.data) {\n const pageRecord = formatPageToSchema(result.data);\n const page: Page = {\n name: pageRecord.name as string,\n path: (pageRecord.path || '/') as string,\n primaryEntity: pageRecord.primaryEntity as string | undefined,\n };\n\n // Find orbital that contains this page or matches primary entity\n for (const orbital of updatedSchema.orbitals) {\n if (!isOrbitalDefinition(orbital)) continue;\n\n const pageIndex = orbital.pages.findIndex(p => getPageName(p) === name);\n if (pageIndex >= 0) {\n orbital.pages[pageIndex] = page;\n break;\n }\n\n // Add to matching entity's orbital\n if (page.primaryEntity && getEntityName(orbital.entity) === page.primaryEntity) {\n orbital.pages.push(page);\n break;\n }\n }\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n break;\n }\n\n case 'behavior': {\n const result = parseBehavior(newDomainText, '');\n if (result.success && result.data) {\n const traitRecord = formatBehaviorToSchema(result.data);\n const trait: Trait = {\n name: traitRecord.name as string,\n stateMachine: traitRecord.stateMachine as Trait['stateMachine'],\n };\n const traitRef: TraitRef = trait.name; // Simple string ref\n\n // NO INFERENCE! Traits without explicit entity reference go to schema level.\n // First, try to find existing trait by name in any orbital or schema-level\n let found = false;\n\n // Check if trait already exists in an orbital (update in place)\n for (const orbital of updatedSchema.orbitals) {\n if (!isOrbitalDefinition(orbital)) continue;\n const traitIndex = orbital.traits.findIndex(t => getTraitName(t) === name);\n if (traitIndex >= 0) {\n orbital.traits[traitIndex] = traitRef;\n found = true;\n break;\n }\n }\n\n // If not found in orbitals, add to the first orbital\n // OrbitalSchema no longer has top-level traits - traits must be in orbitals\n if (!found) {\n // Find first orbital definition and add the trait there\n const firstOrbital = updatedSchema.orbitals.find(o => isOrbitalDefinition(o));\n if (firstOrbital && isOrbitalDefinition(firstOrbital)) {\n firstOrbital.traits.push(traitRef);\n } else {\n errors.push({ message: `No orbital found to attach trait \"${name}\" to` });\n }\n }\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n break;\n }\n\n case 'tick': {\n // Ticks are converted to trait ticks - add as schema-level trait\n const tick = parseTickFromDomain(newDomainText);\n if (tick) {\n warnings.push({ message: 'Tick conversion to traits is not fully implemented' });\n } else {\n errors.push({ message: 'Failed to parse tick from domain text' });\n }\n break;\n }\n }\n\n return {\n success: errors.length === 0,\n schema: updatedSchema,\n errors,\n warnings,\n mappings: [],\n };\n}\n\n/**\n * Delete a section from the schema\n */\nexport function deleteSection(\n schema: OrbitalSchema,\n sectionType: 'entity' | 'page' | 'behavior' | 'tick',\n sectionId: string,\n): OrbitalSchema {\n const updatedSchema: OrbitalSchema = JSON.parse(JSON.stringify(schema));\n\n // Extract the name from sectionId\n const name = sectionId.replace(/^(entity|page|behavior|tick)_/, '');\n\n switch (sectionType) {\n case 'entity': {\n // Remove the entire orbital containing this entity\n updatedSchema.orbitals = updatedSchema.orbitals.filter(\n o => !isOrbitalDefinition(o) || getEntityName(o.entity) !== name\n );\n break;\n }\n\n case 'page': {\n // Remove page from its orbital\n for (const orbital of updatedSchema.orbitals) {\n if (!isOrbitalDefinition(orbital)) continue;\n orbital.pages = orbital.pages.filter(p => getPageName(p) !== name);\n }\n break;\n }\n\n case 'behavior': {\n // Remove trait reference from orbitals\n // OrbitalSchema no longer has top-level traits - all traits are in orbitals\n for (const orbital of updatedSchema.orbitals) {\n if (!isOrbitalDefinition(orbital)) continue;\n orbital.traits = orbital.traits.filter(t => getTraitName(t) !== name);\n }\n break;\n }\n\n case 'tick': {\n // Ticks would be in schema.traits - not fully implemented\n break;\n }\n }\n\n return updatedSchema;\n}\n\n/**\n * Split a domain document into its component sections\n */\nfunction splitDomainDocument(text: string): { entities: string[]; pages: string[]; behaviors: string[] } {\n const result = {\n entities: [] as string[],\n pages: [] as string[],\n behaviors: [] as string[],\n };\n\n // Split by major headers\n const normalizedText = text.replace(/\\r\\n/g, '\\n');\n\n // Find section boundaries\n let currentSection: 'entities' | 'pages' | 'behaviors' | null = null;\n let currentContent: string[] = [];\n\n const lines = normalizedText.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim().toLowerCase();\n\n // Check for section headers\n if (trimmed === '# entities' || trimmed === '#entities') {\n flushSection();\n currentSection = 'entities';\n continue;\n }\n if (trimmed === '# pages' || trimmed === '#pages') {\n flushSection();\n currentSection = 'pages';\n continue;\n }\n if (trimmed === '# behaviors' || trimmed === '#behaviors' ||\n trimmed === '# traits' || trimmed === '#traits') {\n flushSection();\n currentSection = 'behaviors';\n continue;\n }\n\n // Add line to current content\n currentContent.push(line);\n }\n\n // Flush final section\n flushSection();\n\n // If no headers were found, try to auto-detect sections\n if (result.entities.length === 0 && result.pages.length === 0 && result.behaviors.length === 0) {\n return autoDetectSections(normalizedText);\n }\n\n return result;\n\n function flushSection() {\n if (!currentSection || currentContent.length === 0) {\n currentContent = [];\n return;\n }\n\n const content = currentContent.join('\\n').trim();\n if (content) {\n // Split by --- separator first\n let items = content.split(/\\n---\\n/).map((s) => s.trim()).filter((s) => s);\n\n // For entities section, also split by \"A/An [Name] is\" patterns\n // This handles cases where LLM doesn't use --- separators\n if (currentSection === 'entities') {\n items = splitEntitiesByPattern(items);\n }\n // For pages section, split by \"[Name] at /\" patterns\n else if (currentSection === 'pages') {\n items = splitPagesByPattern(items);\n }\n // For behaviors section, split by \"[Name] behavior:\" patterns\n else if (currentSection === 'behaviors') {\n items = splitBehaviorsByPattern(items);\n }\n\n result[currentSection].push(...items);\n }\n\n currentContent = [];\n }\n}\n\n/**\n * Split entity content by \"A/An [Name] is\" patterns\n */\nfunction splitEntitiesByPattern(items: string[]): string[] {\n const result: string[] = [];\n\n for (const item of items) {\n // Check if this item contains multiple entities\n const lines = item.split('\\n');\n let currentEntity: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n // Check for entity definition start: \"A X is\" or \"An X is\"\n if (/^an?\\s+\\w+\\s+is\\s/i.test(trimmed) && currentEntity.length > 0) {\n // Flush previous entity\n result.push(currentEntity.join('\\n').trim());\n currentEntity = [line];\n } else {\n currentEntity.push(line);\n }\n }\n\n // Flush last entity\n if (currentEntity.length > 0) {\n result.push(currentEntity.join('\\n').trim());\n }\n }\n\n return result.filter(s => s);\n}\n\n/**\n * Split page content by \"[Name] at /\" patterns\n */\nfunction splitPagesByPattern(items: string[]): string[] {\n const result: string[] = [];\n\n for (const item of items) {\n const lines = item.split('\\n');\n let currentPage: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n // Check for page definition start: \"[Name] at /path\" or \"[Name]Page at /path\"\n if (/^\\w+(?:page)?\\s+at\\s+\\//i.test(trimmed) && currentPage.length > 0) {\n // Flush previous page\n result.push(currentPage.join('\\n').trim());\n currentPage = [line];\n } else {\n currentPage.push(line);\n }\n }\n\n // Flush last page\n if (currentPage.length > 0) {\n result.push(currentPage.join('\\n').trim());\n }\n }\n\n return result.filter(s => s);\n}\n\n/**\n * Split behavior content by \"[Name] behavior:\" patterns\n */\nfunction splitBehaviorsByPattern(items: string[]): string[] {\n const result: string[] = [];\n\n for (const item of items) {\n const lines = item.split('\\n');\n let currentBehavior: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n // Check for behavior definition start: \"[Name] behavior:\" or \"Every X\"\n if ((/^\\w+\\s+behavior:?$/i.test(trimmed) || /^every\\s+/i.test(trimmed)) && currentBehavior.length > 0) {\n // Flush previous behavior\n result.push(currentBehavior.join('\\n').trim());\n currentBehavior = [line];\n } else {\n currentBehavior.push(line);\n }\n }\n\n // Flush last behavior\n if (currentBehavior.length > 0) {\n result.push(currentBehavior.join('\\n').trim());\n }\n }\n\n return result.filter(s => s);\n}\n\n/**\n * Auto-detect sections when no headers are present\n */\nfunction autoDetectSections(text: string): { entities: string[]; pages: string[]; behaviors: string[] } {\n const result = {\n entities: [] as string[],\n pages: [] as string[],\n behaviors: [] as string[],\n };\n\n // Split by --- separator\n const sections = text.split(/\\n---\\n/).map((s) => s.trim()).filter((s) => s);\n\n for (const section of sections) {\n const firstLine = section.split('\\n')[0].toLowerCase();\n\n // Entity: starts with \"A\" or \"An\"\n if (firstLine.match(/^an?\\s+\\w+\\s+is/)) {\n result.entities.push(section);\n }\n // Page: starts with \"The\"\n else if (firstLine.match(/^the\\s+\\w+.*shows/)) {\n result.pages.push(section);\n }\n // Tick: starts with \"Every\"\n else if (firstLine.match(/^every\\s+/)) {\n result.behaviors.push(section);\n }\n // Behavior: Has \"States:\" or \"Transitions:\"\n else if (section.toLowerCase().includes('states:') ||\n section.toLowerCase().includes('transitions:')) {\n result.behaviors.push(section);\n }\n // Default: try to detect based on content\n else if (section.toLowerCase().includes('it has:')) {\n result.entities.push(section);\n }\n else if (section.toLowerCase().includes('it displays:')) {\n result.pages.push(section);\n }\n else {\n // Unknown section - try as entity\n result.entities.push(section);\n }\n }\n\n return result;\n}\n\n/**\n * Parse a tick from domain text\n */\nfunction parseTickFromDomain(text: string): Record<string, unknown> | null {\n const lines = text.trim().split('\\n');\n if (lines.length === 0) return null;\n\n const firstLine = lines[0].trim();\n\n // Parse \"Every [interval]:\"\n const intervalMatch = firstLine.match(/^every\\s+(.+?):?$/i);\n if (!intervalMatch) return null;\n\n const intervalStr = intervalMatch[1];\n const intervalMs = parseIntervalToMs(intervalStr);\n\n // Convert interval to PascalCase name\n const tickName = intervalStr\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n\n const tick: Record<string, unknown> = {\n name: tickName,\n interval: intervalMs,\n effects: [] as Array<unknown[]>, // S-Expression arrays\n };\n\n // Parse remaining lines for guard and effects\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i].trim();\n\n if (line.toLowerCase().startsWith('if ')) {\n tick.guard = line.slice(3).trim();\n } else if (line.startsWith('-')) {\n const effectText = line.slice(1).trim();\n const effect = parseEffectFromText(effectText);\n if (effect) {\n (tick.effects as Array<unknown[]>).push(effect);\n }\n }\n }\n\n return tick;\n}\n\n/**\n * Parse an interval string to milliseconds\n */\nfunction parseIntervalToMs(text: string): number {\n const lower = text.toLowerCase();\n\n const match = lower.match(/(\\d+)\\s*(second|minute|hour|day|week)s?/);\n if (match) {\n const value = parseInt(match[1], 10);\n const unit = match[2];\n\n switch (unit) {\n case 'second': return value * 1000;\n case 'minute': return value * 60 * 1000;\n case 'hour': return value * 60 * 60 * 1000;\n case 'day': return value * 24 * 60 * 60 * 1000;\n case 'week': return value * 7 * 24 * 60 * 60 * 1000;\n }\n }\n\n // Default to 1 hour\n return 60 * 60 * 1000;\n}\n\n/**\n * Parse an effect from text description to S-Expression format.\n * Delegates to the existing parseDomainEffect function from sexpr-parser.\n */\nfunction parseEffectFromText(text: string): unknown[] | null {\n try {\n const result = parseDomainEffect(text);\n // parseDomainEffect returns SExpr which can be a primitive or array\n // We only want arrays for effects\n if (Array.isArray(result)) {\n return result;\n }\n // If it returned a primitive, wrap in array or return null\n return null;\n } catch {\n return null;\n }\n}\n\n","/**\n * Section Mapping\n *\n * Tracks the relationship between domain language sections and KFlow schema paths.\n * Enables bidirectional sync and conflict detection.\n */\n\nimport type { SectionMapping, SourceRange } from '../types.js';\n\nexport interface MappingStore {\n /** All tracked mappings */\n mappings: SectionMapping[];\n\n /** Last sync timestamp */\n lastSync: number;\n\n /** Schema version hash for change detection */\n schemaHash?: string;\n}\n\n/**\n * Create a new mapping store\n */\nexport function createMappingStore(mappings: SectionMapping[] = []): MappingStore {\n return {\n mappings,\n lastSync: Date.now(),\n };\n}\n\n/**\n * Find a mapping by section ID\n */\nexport function findMapping(store: MappingStore, sectionId: string): SectionMapping | undefined {\n return store.mappings.find((m) => m.sectionId === sectionId);\n}\n\n/**\n * Find a mapping by schema path\n */\nexport function findMappingByPath(store: MappingStore, schemaPath: string): SectionMapping | undefined {\n return store.mappings.find((m) => m.schemaPath === schemaPath);\n}\n\n/**\n * Find all mappings of a specific type\n */\nexport function findMappingsByType(\n store: MappingStore,\n sectionType: 'entity' | 'page' | 'behavior' | 'tick',\n): SectionMapping[] {\n return store.mappings.filter((m) => m.sectionType === sectionType);\n}\n\n/**\n * Update or add a mapping\n */\nexport function upsertMapping(store: MappingStore, mapping: SectionMapping): MappingStore {\n const index = store.mappings.findIndex((m) => m.sectionId === mapping.sectionId);\n\n const newMappings = [...store.mappings];\n if (index >= 0) {\n newMappings[index] = { ...mapping, lastModified: Date.now() };\n } else {\n newMappings.push({ ...mapping, lastModified: Date.now() });\n }\n\n return {\n ...store,\n mappings: newMappings,\n lastSync: Date.now(),\n };\n}\n\n/**\n * Remove a mapping\n */\nexport function removeMapping(store: MappingStore, sectionId: string): MappingStore {\n return {\n ...store,\n mappings: store.mappings.filter((m) => m.sectionId !== sectionId),\n lastSync: Date.now(),\n };\n}\n\n/**\n * Detect changes between old and new mappings\n */\nexport function detectChanges(\n oldMappings: SectionMapping[],\n newMappings: SectionMapping[],\n): {\n added: SectionMapping[];\n removed: SectionMapping[];\n modified: SectionMapping[];\n} {\n const oldIds = new Set(oldMappings.map((m) => m.sectionId));\n const newIds = new Set(newMappings.map((m) => m.sectionId));\n\n const added = newMappings.filter((m) => !oldIds.has(m.sectionId));\n const removed = oldMappings.filter((m) => !newIds.has(m.sectionId));\n\n const modified: SectionMapping[] = [];\n for (const newMapping of newMappings) {\n const oldMapping = oldMappings.find((m) => m.sectionId === newMapping.sectionId);\n if (oldMapping && oldMapping.domainText !== newMapping.domainText) {\n modified.push(newMapping);\n }\n }\n\n return { added, removed, modified };\n}\n\n/**\n * Generate a unique section ID\n */\nexport function generateSectionId(\n sectionType: 'entity' | 'page' | 'behavior' | 'tick',\n name: string,\n): string {\n return `${sectionType}_${name}`;\n}\n\n/**\n * Extract section type and name from a section ID\n */\nexport function parseSectionId(sectionId: string): {\n sectionType: 'entity' | 'page' | 'behavior' | 'tick';\n name: string;\n} | null {\n const match = sectionId.match(/^(entity|page|behavior|tick)_(.+)$/);\n if (!match) return null;\n\n return {\n sectionType: match[1] as 'entity' | 'page' | 'behavior' | 'tick',\n name: match[2],\n };\n}\n\n/**\n * Get the schema path for a section\n */\nexport function getSchemaPath(\n sectionType: 'entity' | 'page' | 'behavior' | 'tick',\n index: number,\n): string {\n switch (sectionType) {\n case 'entity':\n return `dataEntities[${index}]`;\n case 'page':\n return `ui.pages[${index}]`;\n case 'behavior':\n return `traits[${index}]`;\n case 'tick':\n return `ticks[${index}]`;\n }\n}\n\n/**\n * Update range information for a mapping based on text position\n */\nexport function updateMappingRange(\n mapping: SectionMapping,\n fullText: string,\n): SectionMapping {\n const start = fullText.indexOf(mapping.domainText);\n if (start === -1) {\n return mapping;\n }\n\n const end = start + mapping.domainText.length;\n\n // Calculate line/column for start\n const textBefore = fullText.slice(0, start);\n const startLine = textBefore.split('\\n').length;\n const lastNewline = textBefore.lastIndexOf('\\n');\n const startColumn = start - lastNewline;\n\n // Calculate line/column for end\n const textToEnd = fullText.slice(0, end);\n const endLine = textToEnd.split('\\n').length;\n const lastNewlineEnd = textToEnd.lastIndexOf('\\n');\n const endColumn = end - lastNewlineEnd;\n\n const range: SourceRange = {\n start: {\n line: startLine,\n column: startColumn,\n offset: start,\n },\n end: {\n line: endLine,\n column: endColumn,\n offset: end,\n },\n };\n\n return {\n ...mapping,\n range,\n };\n}\n\n/**\n * Resolve conflicts between domain changes and schema changes\n */\nexport function resolveConflict(\n domainMapping: SectionMapping,\n schemaMapping: SectionMapping,\n preference: 'domain' | 'schema' | 'newest',\n): SectionMapping {\n if (preference === 'domain') {\n return domainMapping;\n }\n\n if (preference === 'schema') {\n return schemaMapping;\n }\n\n // Use newest\n const domainTime = domainMapping.lastModified || 0;\n const schemaTime = schemaMapping.lastModified || 0;\n\n return domainTime >= schemaTime ? domainMapping : schemaMapping;\n}\n\n/**\n * Compute a simple hash of a schema for change detection\n */\nexport function computeSchemaHash(schema: Record<string, unknown>): string {\n const str = JSON.stringify(schema);\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return hash.toString(36);\n}\n\n/**\n * Check if schema has changed since last sync\n */\nexport function hasSchemaChanged(store: MappingStore, schema: Record<string, unknown>): boolean {\n const currentHash = computeSchemaHash(schema);\n return store.schemaHash !== currentHash;\n}\n\n/**\n * Update the schema hash in the store\n */\nexport function updateSchemaHash(store: MappingStore, schema: Record<string, unknown>): MappingStore {\n return {\n ...store,\n schemaHash: computeSchemaHash(schema),\n lastSync: Date.now(),\n };\n}\n","/**\n * Domain Language Chunk Merging\n *\n * Utilities for merging multiple domain language chunks into a single document.\n * Used by the lean skill to generate orbitals incrementally.\n *\n * @packageDocumentation\n */\n\nexport interface DomainChunk {\n /** The domain language text for this orbital */\n text: string;\n /** Optional name for this orbital (for debugging) */\n name?: string;\n}\n\nexport interface MergeResult {\n /** The merged domain language text */\n text: string;\n /** Number of entities merged */\n entityCount: number;\n /** Number of pages merged */\n pageCount: number;\n /** Number of behaviors merged */\n behaviorCount: number;\n}\n\n/**\n * Extract a section from domain text by header\n */\nfunction extractSection(text: string, header: string): string {\n const headerPattern = new RegExp(`^#\\\\s*${header}\\\\s*$`, 'im');\n const match = text.match(headerPattern);\n if (!match) return '';\n\n const startIndex = match.index! + match[0].length;\n\n // Find the next section header or end of text\n const nextHeaderMatch = text.slice(startIndex).match(/^#\\s*\\w+/m);\n const endIndex = nextHeaderMatch\n ? startIndex + nextHeaderMatch.index!\n : text.length;\n\n return text.slice(startIndex, endIndex).trim();\n}\n\n/**\n * Count items in a section (entities, pages, or behaviors)\n */\nfunction countItems(sectionText: string, type: 'entity' | 'page' | 'behavior'): number {\n if (!sectionText) return 0;\n\n switch (type) {\n case 'entity':\n // Count \"A/An [Name] is\" patterns\n return (sectionText.match(/^A[n]?\\s+\\w+\\s+is\\s/gim) || []).length;\n case 'page':\n // Count \"[Name] at /\" or \"The [Name] shows\" patterns\n return (sectionText.match(/^(The\\s+)?\\w+\\s+(at\\s+\\/|shows\\s)/gim) || []).length;\n case 'behavior':\n // Count \"[Name] behavior:\" patterns\n return (sectionText.match(/^\\w+(\\s+\\w+)*\\s+behavior:/gim) || []).length;\n }\n}\n\n/**\n * Merge multiple domain language chunks into a single document.\n *\n * Each chunk can contain:\n * - `# Entities` section with entity definitions\n * - `# Pages` section with page definitions\n * - `# Behaviors` section with behavior/trait definitions\n *\n * The merge combines all sections, maintaining the standard order:\n * 1. Entities\n * 2. Pages\n * 3. Behaviors\n *\n * @example\n * ```typescript\n * const chunks = [\n * { text: '# Entities\\n\\nA Task is...', name: 'Task' },\n * { text: '# Entities\\n\\nA User is...', name: 'User' },\n * ];\n * const result = mergeDomainChunks(chunks);\n * // result.text contains both entities merged\n * ```\n */\nexport function mergeDomainChunks(chunks: DomainChunk[]): MergeResult {\n const entities: string[] = [];\n const pages: string[] = [];\n const behaviors: string[] = [];\n\n for (const chunk of chunks) {\n const entitySection = extractSection(chunk.text, 'Entities');\n const pageSection = extractSection(chunk.text, 'Pages');\n const behaviorSection = extractSection(chunk.text, 'Behaviors');\n\n if (entitySection) entities.push(entitySection);\n if (pageSection) pages.push(pageSection);\n if (behaviorSection) behaviors.push(behaviorSection);\n }\n\n const sections: string[] = [];\n\n if (entities.length > 0) {\n sections.push(`# Entities\\n\\n${entities.join('\\n\\n---\\n\\n')}`);\n }\n\n if (pages.length > 0) {\n sections.push(`# Pages\\n\\n${pages.join('\\n\\n---\\n\\n')}`);\n }\n\n if (behaviors.length > 0) {\n sections.push(`# Behaviors\\n\\n${behaviors.join('\\n\\n---\\n\\n')}`);\n }\n\n const mergedText = sections.join('\\n\\n');\n\n // Count items for reporting\n const allEntities = entities.join('\\n\\n');\n const allPages = pages.join('\\n\\n');\n const allBehaviors = behaviors.join('\\n\\n');\n\n return {\n text: mergedText,\n entityCount: countItems(allEntities, 'entity'),\n pageCount: countItems(allPages, 'page'),\n behaviorCount: countItems(allBehaviors, 'behavior'),\n };\n}\n\n/**\n * Validate that a domain chunk has the expected structure.\n * Returns errors if the chunk is malformed.\n */\nexport function validateDomainChunk(chunk: DomainChunk): string[] {\n const errors: string[] = [];\n\n if (!chunk.text || chunk.text.trim().length === 0) {\n errors.push('Chunk text is empty');\n return errors;\n }\n\n // Check for at least one section\n const hasEntities = /^#\\s*Entities/im.test(chunk.text);\n const hasPages = /^#\\s*Pages/im.test(chunk.text);\n const hasBehaviors = /^#\\s*Behaviors/im.test(chunk.text);\n\n if (!hasEntities && !hasPages && !hasBehaviors) {\n errors.push('Chunk must have at least one section: # Entities, # Pages, or # Behaviors');\n }\n\n return errors;\n}\n\n/**\n * Format a merged result as a summary string\n */\nexport function formatMergeSummary(result: MergeResult): string {\n const parts: string[] = [];\n if (result.entityCount > 0) parts.push(`${result.entityCount} entities`);\n if (result.pageCount > 0) parts.push(`${result.pageCount} pages`);\n if (result.behaviorCount > 0) parts.push(`${result.behaviorCount} behaviors`);\n return parts.join(', ') || 'empty';\n}\n","/**\n * Domain Language Types\n *\n * AST node types for the domain language that maps to KFlow schema.\n * All entity references use explicit names (e.g., Order, Task, CurrentUser)\n * per GAP-002 - no magic variables like `entity.` or `context.`.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Type Registry (OrbitalSchema ↔ Domain Language Mapping)\n// ============================================================================\n\n/**\n * Field type mapping: OrbitalSchema type → Domain Language keyword\n *\n * This is the single source of truth for type conversion.\n * When adding new field types to OrbitalSchema, add the mapping here.\n */\nexport const FIELD_TYPE_MAPPING = {\n // OrbitalSchema → Domain Language\n 'string': 'text',\n 'number': 'number',\n 'boolean': 'yes/no',\n 'date': 'date',\n 'timestamp': 'timestamp',\n 'datetime': 'datetime',\n 'array': 'list',\n 'object': 'object',\n 'enum': 'enum',\n 'relation': 'relation',\n} as const;\n\n/**\n * Reverse mapping: Domain Language keyword → OrbitalSchema type\n */\nexport const DOMAIN_TO_SCHEMA_FIELD_TYPE = {\n 'text': 'string',\n 'long text': 'string',\n 'number': 'number',\n 'currency': 'number',\n 'yes/no': 'boolean',\n 'date': 'date',\n 'timestamp': 'timestamp',\n 'datetime': 'datetime',\n 'list': 'array',\n 'object': 'object',\n 'enum': 'enum',\n 'relation': 'relation',\n} as const;\n\n/**\n * Effect operator mapping: Both systems use the same operator names\n */\nexport const EFFECT_OPERATORS = [\n 'set',\n 'emit',\n 'navigate',\n 'render-ui',\n 'persist',\n 'call-service',\n 'spawn',\n 'despawn',\n 'do',\n 'notify',\n] as const;\n\n/**\n * Guard/comparison operators: S-Expression syntax only\n */\nexport const COMPARISON_OPERATORS = ['=', '!=', '<', '>', '<=', '>='] as const;\nexport const LOGICAL_OPERATORS = ['and', 'or', 'not'] as const;\nexport const ARITHMETIC_OPERATORS = ['+', '-', '*', '/', '%'] as const;\n\n/**\n * UI Slots: Same in both OrbitalSchema and Domain Language\n */\nexport const UI_SLOTS = [\n 'main',\n 'sidebar',\n 'modal',\n 'drawer',\n 'overlay',\n 'center',\n 'toast',\n 'hud-top',\n 'hud-bottom',\n 'floating',\n 'system',\n] as const;\n\n/**\n * Binding prefixes for S-Expressions\n */\nexport const BINDING_PREFIXES = {\n entity: '@entity',\n payload: '@payload',\n state: '@state',\n now: '@now',\n} as const;\n\n// ============================================================================\n// Effect Type\n// ============================================================================\n\n/**\n * Effect operator names (S-expression first element)\n * These are the operators used in S-expression effects like ['emit', ...]\n */\nexport type EffectType = (typeof EFFECT_OPERATORS)[number];\n\n// ============================================================================\n// Base Types\n// ============================================================================\n\nexport interface SourceLocation {\n line: number;\n column: number;\n offset: number;\n}\n\nexport interface SourceRange {\n start: SourceLocation;\n end: SourceLocation;\n}\n\nexport interface ASTNode {\n type: string;\n range?: SourceRange;\n}\n\n// ============================================================================\n// Field Types\n// ============================================================================\n\n/**\n * Domain Language field types\n *\n * Note: These map to OrbitalSchema types via DOMAIN_TO_SCHEMA_FIELD_TYPE\n */\nexport type DomainFieldType =\n | 'text'\n | 'long text'\n | 'number'\n | 'currency'\n | 'date'\n | 'timestamp'\n | 'datetime'\n | 'yes/no'\n | 'enum'\n | 'list'\n | 'object'\n | 'relation';\n\n/**\n * OrbitalSchema field types (for reference)\n */\nexport type SchemaFieldType = keyof typeof FIELD_TYPE_MAPPING;\n\nexport interface DomainField extends ASTNode {\n type: 'field';\n name: string;\n fieldType: DomainFieldType;\n required: boolean;\n unique: boolean;\n auto: boolean;\n default?: unknown;\n enumValues?: string[]; // For enum types\n}\n\n// ============================================================================\n// Relationship Types\n// ============================================================================\n\nexport type RelationshipType = 'belongs_to' | 'has_many' | 'has_one';\n\nexport interface DomainRelationship extends ASTNode {\n type: 'relationship';\n relationshipType: RelationshipType;\n targetEntity: string;\n alias?: string; // e.g., \"as Assignee\"\n}\n\n// ============================================================================\n// Entity AST\n// ============================================================================\n\nexport interface DomainEntity extends ASTNode {\n type: 'entity';\n name: string;\n description: string;\n fields: DomainField[];\n relationships: DomainRelationship[];\n states?: string[];\n initialState?: string;\n}\n\n// ============================================================================\n// Page AST\n// ============================================================================\n\nexport interface DomainPageSection extends ASTNode {\n type: 'page_section';\n description: string;\n}\n\nexport interface DomainPageAction extends ASTNode {\n type: 'page_action';\n trigger: string; // e.g., \"Click a task\"\n action: string; // e.g., \"Navigate to Task Details\"\n}\n\nexport interface DomainPage extends ASTNode {\n type: 'page';\n name: string;\n description: string;\n purpose: string;\n url: string;\n primaryEntity?: string; // Explicit entity reference (no inference!)\n traitName?: string; // Trait/behavior to use for this page\n sections: DomainPageSection[];\n actions: DomainPageAction[];\n onAccess?: string;\n}\n\n// ============================================================================\n// Guard Expression AST\n// ============================================================================\n\nexport type ComparisonOperator = '==' | '!=' | '>' | '<' | '>=' | '<=';\nexport type LogicalOperator = 'AND' | 'OR';\n\nexport interface FieldReference extends ASTNode {\n type: 'field_reference';\n entityName: string; // Explicit entity name (Order, Task, CurrentUser)\n fieldName: string;\n}\n\nexport interface FieldCheckCondition extends ASTNode {\n type: 'field_check';\n field: FieldReference;\n check: 'provided' | 'empty' | 'equals';\n value?: string | number | boolean;\n}\n\nexport interface ComparisonCondition extends ASTNode {\n type: 'comparison';\n field: FieldReference;\n operator: ComparisonOperator;\n value: string | number | boolean;\n}\n\nexport interface UserCheckCondition extends ASTNode {\n type: 'user_check';\n check: 'is_role' | 'owns_this';\n role?: string;\n ownerField?: string; // Field that contains owner ID\n}\n\nexport interface LogicalCondition extends ASTNode {\n type: 'logical';\n operator: LogicalOperator;\n left: GuardCondition;\n right: GuardCondition;\n}\n\nexport type GuardCondition =\n | FieldCheckCondition\n | ComparisonCondition\n | UserCheckCondition\n | LogicalCondition;\n\nexport interface DomainGuard extends ASTNode {\n type: 'guard';\n condition: GuardCondition;\n raw: string; // Original text for display\n}\n\n// ============================================================================\n// Effect AST\n// ============================================================================\n\n// EffectType is imported from schema/index.js above\n\nexport interface DomainEffect extends ASTNode {\n type: 'effect';\n effectType: EffectType;\n description: string; // Human-readable description\n config: Record<string, unknown>;\n}\n\n// ============================================================================\n// Behavior AST (Traits)\n// ============================================================================\n\nexport interface DomainTransition extends ASTNode {\n type: 'transition';\n fromState: string;\n toState: string;\n event: string;\n guards: DomainGuard[];\n effects: DomainEffect[];\n}\n\nexport interface DomainTick extends ASTNode {\n type: 'tick';\n name: string;\n interval: string; // e.g., \"Every hour\", \"Every day at 9am\"\n intervalMs?: number; // Parsed milliseconds\n guard?: DomainGuard;\n effects: DomainEffect[];\n}\n\nexport interface DomainBehavior extends ASTNode {\n type: 'behavior';\n name: string; // e.g., \"Order Lifecycle\"\n entityName: string; // The entity this behavior applies to\n states: string[];\n initialState: string;\n transitions: DomainTransition[];\n ticks: DomainTick[];\n rules: string[]; // Business rules in natural language\n}\n\n// ============================================================================\n// Full Document AST\n// ============================================================================\n\nexport interface DomainDocument extends ASTNode {\n type: 'document';\n entities: DomainEntity[];\n pages: DomainPage[];\n behaviors: DomainBehavior[];\n}\n\n// ============================================================================\n// Section Mapping (for bidirectional sync)\n// ============================================================================\n\nexport interface SectionMapping {\n sectionId: string;\n sectionType: 'entity' | 'page' | 'behavior' | 'tick';\n schemaPath: string; // JSON path in KFlow schema\n domainText: string; // The domain text for this section\n aiDescription?: string; // AI-generated prose description\n range?: SourceRange; // Location in source text\n lastModified?: number; // Timestamp\n}\n\n// ============================================================================\n// Parse Result\n// ============================================================================\n\nexport interface ParseError {\n message: string;\n range?: SourceRange;\n suggestion?: string;\n}\n\nexport interface ParseResult<T> {\n success: boolean;\n data?: T;\n errors: ParseError[];\n warnings: ParseError[];\n}\n","/**\n * Domain Language Registry\n *\n * Central registry for OrbitalSchema <-> Domain Language mappings.\n * This is the single source of truth for type conversions.\n *\n * When adding a new OrbitalSchema feature:\n * 1. Add type mapping here\n * 2. Formatters/parsers automatically use these mappings\n * 3. Build-time validation ensures coverage\n *\n * @packageDocumentation\n */\n\nimport {\n FIELD_TYPE_MAPPING,\n DOMAIN_TO_SCHEMA_FIELD_TYPE,\n EFFECT_OPERATORS,\n COMPARISON_OPERATORS,\n LOGICAL_OPERATORS,\n ARITHMETIC_OPERATORS,\n UI_SLOTS,\n BINDING_PREFIXES,\n} from './types.js';\n\n// Re-export all mappings from types.ts for centralized access\nexport {\n FIELD_TYPE_MAPPING,\n DOMAIN_TO_SCHEMA_FIELD_TYPE,\n EFFECT_OPERATORS,\n COMPARISON_OPERATORS,\n LOGICAL_OPERATORS,\n ARITHMETIC_OPERATORS,\n UI_SLOTS,\n BINDING_PREFIXES,\n};\n\n// ============================================================================\n// Type Definitions for Registry\n// ============================================================================\n\n/**\n * Field type mapping entry with format/parse functions\n */\nexport interface FieldTypeMapping {\n /** OrbitalSchema type name */\n schemaType: string;\n /** Domain Language keyword(s) - can be array for aliases */\n domainKeywords: string[];\n /** Format schema field to domain text */\n format: (field: { type: string; values?: string[]; relation?: { entity: string } }) => string;\n /** Parse domain keyword to schema type */\n parse: (keyword: string) => string;\n}\n\n/**\n * Effect operator mapping entry\n */\nexport interface EffectMapping {\n /** S-Expression operator name */\n operator: string;\n /** Human-readable domain pattern templates */\n domainPatterns: string[];\n /** Description for documentation */\n description: string;\n}\n\n/**\n * Guard operator mapping entry\n */\nexport interface GuardMapping {\n /** S-Expression operator */\n operator: string;\n /** Human-readable domain patterns */\n domainPatterns: string[];\n /** Description */\n description: string;\n}\n\n// ============================================================================\n// Field Type Registry\n// ============================================================================\n\n/**\n * Complete field type registry with format/parse functions\n */\nexport const FIELD_TYPE_REGISTRY: Record<string, FieldTypeMapping> = {\n string: {\n schemaType: 'string',\n domainKeywords: ['text', 'long text'],\n format: () => 'text',\n parse: () => 'string',\n },\n number: {\n schemaType: 'number',\n domainKeywords: ['number', 'currency'],\n format: () => 'number',\n parse: () => 'number',\n },\n boolean: {\n schemaType: 'boolean',\n domainKeywords: ['yes/no', 'boolean'],\n format: () => 'yes/no',\n parse: () => 'boolean',\n },\n date: {\n schemaType: 'date',\n domainKeywords: ['date'],\n format: () => 'date',\n parse: () => 'date',\n },\n timestamp: {\n schemaType: 'timestamp',\n domainKeywords: ['timestamp'],\n format: () => 'timestamp',\n parse: () => 'timestamp',\n },\n datetime: {\n schemaType: 'datetime',\n domainKeywords: ['datetime'],\n format: () => 'datetime',\n parse: () => 'datetime',\n },\n array: {\n schemaType: 'array',\n domainKeywords: ['list', 'array'],\n format: () => 'list',\n parse: () => 'array',\n },\n object: {\n schemaType: 'object',\n domainKeywords: ['object'],\n format: () => 'object',\n parse: () => 'object',\n },\n enum: {\n schemaType: 'enum',\n domainKeywords: ['enum'],\n format: (field) => {\n if (field.values && field.values.length > 0) {\n return `enum [${field.values.join(', ')}]`;\n }\n return 'enum';\n },\n parse: () => 'enum',\n },\n relation: {\n schemaType: 'relation',\n domainKeywords: ['relation', 'belongs to', 'has many'],\n format: (field) => {\n if (field.relation?.entity) {\n return `belongs to ${field.relation.entity}`;\n }\n return 'relation';\n },\n parse: () => 'relation',\n },\n};\n\n// ============================================================================\n// Effect Registry (Human-Readable Domain Language)\n// ============================================================================\n\n/**\n * Effect operator registry with human-readable patterns\n */\nexport const EFFECT_REGISTRY: Record<string, EffectMapping> = {\n set: {\n operator: 'set',\n domainPatterns: [\n 'update {field} to {value}',\n 'set {field} to {value}',\n ],\n description: 'Update a field value',\n },\n emit: {\n operator: 'emit',\n domainPatterns: [\n 'emit {event}',\n 'emit {event} with {payload}',\n ],\n description: 'Emit an event to the event bus',\n },\n 'render-ui': {\n operator: 'render-ui',\n domainPatterns: [\n 'render {pattern} to {slot}',\n 'render {pattern} to {slot} for {entity}',\n 'render {pattern} to {slot} with {props}',\n 'render null to {slot}',\n ],\n description: 'Render a UI pattern to a slot',\n },\n navigate: {\n operator: 'navigate',\n domainPatterns: [\n 'navigate to {path}',\n 'go to {path}',\n ],\n description: 'Navigate to a route',\n },\n persist: {\n operator: 'persist',\n domainPatterns: [\n 'persist create {entity}',\n 'persist update {entity}',\n 'persist delete {entity}',\n 'save {entity}',\n ],\n description: 'Persist entity to database',\n },\n 'call-service': {\n operator: 'call-service',\n domainPatterns: [\n 'call {service}.{action}',\n 'call {service}.{action} with {params}',\n ],\n description: 'Call an external service',\n },\n spawn: {\n operator: 'spawn',\n domainPatterns: [\n 'spawn {entity}',\n 'spawn {entity} at {position}',\n 'spawn {entity} with {props}',\n ],\n description: 'Create a new runtime entity (games)',\n },\n despawn: {\n operator: 'despawn',\n domainPatterns: [\n 'despawn',\n 'despawn {entity}',\n 'remove {entity}',\n ],\n description: 'Remove a runtime entity (games)',\n },\n notify: {\n operator: 'notify',\n domainPatterns: [\n 'show {type} notification {message}',\n 'notify {message}',\n ],\n description: 'Show a notification',\n },\n do: {\n operator: 'do',\n domainPatterns: [\n 'then {effect1} then {effect2}',\n ],\n description: 'Execute multiple effects',\n },\n};\n\n// ============================================================================\n// Guard Registry (Human-Readable Domain Language)\n// ============================================================================\n\n/**\n * Guard operator registry with human-readable patterns\n */\nexport const GUARD_REGISTRY: Record<string, GuardMapping> = {\n // Comparison operators\n '=': {\n operator: '=',\n domainPatterns: [\n '{field} is {value}',\n '{field} equals {value}',\n ],\n description: 'Equality check',\n },\n '!=': {\n operator: '!=',\n domainPatterns: [\n '{field} is not {value}',\n '{field} != {value}',\n ],\n description: 'Inequality check',\n },\n '>': {\n operator: '>',\n domainPatterns: [\n '{field} > {value}',\n '{field} is greater than {value}',\n ],\n description: 'Greater than',\n },\n '<': {\n operator: '<',\n domainPatterns: [\n '{field} < {value}',\n '{field} is less than {value}',\n ],\n description: 'Less than',\n },\n '>=': {\n operator: '>=',\n domainPatterns: [\n '{field} >= {value}',\n '{field} is at least {value}',\n ],\n description: 'Greater than or equal',\n },\n '<=': {\n operator: '<=',\n domainPatterns: [\n '{field} <= {value}',\n '{field} is at most {value}',\n ],\n description: 'Less than or equal',\n },\n // Logical operators\n and: {\n operator: 'and',\n domainPatterns: [\n '{condition1} and {condition2}',\n ],\n description: 'Logical AND',\n },\n or: {\n operator: 'or',\n domainPatterns: [\n '{condition1} or {condition2}',\n ],\n description: 'Logical OR',\n },\n not: {\n operator: 'not',\n domainPatterns: [\n 'not {condition}',\n '{field} is not {value}',\n ],\n description: 'Logical NOT',\n },\n};\n\n// ============================================================================\n// Registry Utilities\n// ============================================================================\n\n/**\n * Get all registered field types\n */\nexport function getRegisteredFieldTypes(): string[] {\n return Object.keys(FIELD_TYPE_REGISTRY);\n}\n\n/**\n * Get all registered effect operators\n */\nexport function getRegisteredEffects(): string[] {\n return Object.keys(EFFECT_REGISTRY);\n}\n\n/**\n * Get all registered guard operators\n */\nexport function getRegisteredGuards(): string[] {\n return Object.keys(GUARD_REGISTRY);\n}\n\n/**\n * Check if a field type is registered\n */\nexport function isFieldTypeRegistered(type: string): boolean {\n return type in FIELD_TYPE_REGISTRY;\n}\n\n/**\n * Check if an effect operator is registered\n */\nexport function isEffectRegistered(operator: string): boolean {\n return operator in EFFECT_REGISTRY;\n}\n\n/**\n * Check if a guard operator is registered\n */\nexport function isGuardRegistered(operator: string): boolean {\n return operator in GUARD_REGISTRY;\n}\n\n/**\n * Get field type mapping\n */\nexport function getFieldTypeMapping(type: string): FieldTypeMapping | undefined {\n return FIELD_TYPE_REGISTRY[type];\n}\n\n/**\n * Get effect mapping\n */\nexport function getEffectMapping(operator: string): EffectMapping | undefined {\n return EFFECT_REGISTRY[operator];\n}\n\n/**\n * Get guard mapping\n */\nexport function getGuardMapping(operator: string): GuardMapping | undefined {\n return GUARD_REGISTRY[operator];\n}\n\n/**\n * Lookup domain keyword and return schema type\n */\nexport function domainKeywordToSchemaType(keyword: string): string | undefined {\n const normalizedKeyword = keyword.toLowerCase().trim();\n for (const mapping of Object.values(FIELD_TYPE_REGISTRY)) {\n if (mapping.domainKeywords.some(k => k.toLowerCase() === normalizedKeyword)) {\n return mapping.schemaType;\n }\n }\n return undefined;\n}\n\n/**\n * Lookup schema type and return primary domain keyword\n */\nexport function schemaTypeToDomainKeyword(type: string): string | undefined {\n const mapping = FIELD_TYPE_REGISTRY[type];\n return mapping?.domainKeywords[0];\n}\n\n// ============================================================================\n// Registry Statistics\n// ============================================================================\n\n/**\n * Get registry statistics for validation/documentation\n */\nexport function getRegistryStats(): {\n fieldTypes: number;\n effects: number;\n guards: number;\n uiSlots: number;\n} {\n return {\n fieldTypes: Object.keys(FIELD_TYPE_REGISTRY).length,\n effects: Object.keys(EFFECT_REGISTRY).length,\n guards: Object.keys(GUARD_REGISTRY).length,\n uiSlots: UI_SLOTS.length,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/types/field.ts","../src/types/asset.ts","../src/types/entity.ts","../src/types/page.ts","../src/types/effect.ts","../src/types/expression.ts","../src/types/state-machine.ts","../src/types/trait.ts","../src/types/domain.ts","../src/types/service.ts","../src/types/orbital.ts","../src/types/schema.ts","../src/types/operators.ts","../src/types/bindings.ts","../src/types/interaction-model.ts","../src/types/pattern.ts","../src/types/ir.ts","../src/resolver.ts","../src/diff.ts","../src/summarize.ts","../src/domain-language/tokens.ts","../src/domain-language/lexer.ts","../src/domain-language/parsers/entity-parser.ts","../src/domain-language/parsers/page-parser.ts","../src/domain-language/parsers/guard-parser.ts","../src/domain-language/parsers/sexpr-parser.ts","../src/domain-language/parsers/behavior-parser.ts","../src/domain-language/formatters/entity-formatter.ts","../src/domain-language/formatters/page-formatter.ts","../src/domain-language/formatters/sexpr-formatter.ts","../src/domain-language/formatters/behavior-formatter.ts","../src/domain-language/formatters/guard-formatter.ts","../src/domain-language/sync/schema-to-domain.ts","../src/domain-language/sync/domain-to-schema.ts","../src/domain-language/sync/section-mapping.ts","../src/domain-language/sync/merge-chunks.ts","../src/domain-language/types.ts","../src/domain-language/registry.ts","../src/domain-language/domain-language-reference.ts"],"names":["z","_NAMES","_PATTERN_TYPES","inferTsType","getPageName","TokenType","entity","toKebabCase","nameParts","name","page","parseValue","toCamelCase","toSpaceSeparated","splitAtTopLevel","parseComparison","behavior","text","toPascalCase","startsWithVowel","formatFieldType","isEffectOperator","message","formatGuardForDomain","parseFieldReference","domainText","formatIntervalMs","getEntityName","UI_SLOTS"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Field Types for Orbital Units\n *\n * Extracted from schema/data-entities.ts for the orbitals module.\n * These types define the field structure within orbital entities.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Field Types\n// ============================================================================\n\n/**\n * Supported field types for entity fields.\n *\n * @example\n * { name: 'status', type: 'enum', values: ['draft', 'published'] }\n * { name: 'authorId', type: 'relation', relation: { entity: 'User', cardinality: 'one' } }\n */\nexport type FieldType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'date'\n | 'timestamp'\n | 'datetime'\n | 'array'\n | 'object'\n | 'enum'\n | 'relation';\n\nexport const FieldTypeSchema = z.enum([\n 'string',\n 'number',\n 'boolean',\n 'date',\n 'timestamp',\n 'datetime',\n 'array',\n 'object',\n 'enum',\n 'relation',\n]);\n\n// ============================================================================\n// Relation Configuration\n// ============================================================================\n\n/**\n * Cardinality for relation fields.\n * Matches Rust compiler's Cardinality enum.\n */\nexport type RelationCardinality = \n | 'one' \n | 'many' \n | 'one-to-many' \n | 'many-to-one' \n | 'many-to-many';\n\nexport const RelationCardinalitySchema = z.enum([\n 'one',\n 'many',\n 'one-to-many',\n 'many-to-one',\n 'many-to-many',\n]);\n\n/**\n * Configuration for relation fields (foreign keys).\n * Matches Rust compiler's RelationDefinition format.\n */\nexport interface RelationConfig {\n /** Target entity name (e.g., 'User', 'Task') - matches Rust's `entity` field */\n entity: string;\n /** Field on target entity (defaults to 'id') */\n field?: string;\n /** \n * Cardinality: one, many, one-to-many, many-to-one, many-to-many\n * Matches Rust compiler's cardinality format\n */\n cardinality?: RelationCardinality;\n /** Delete behavior */\n onDelete?: 'cascade' | 'nullify' | 'restrict';\n /** \n * Foreign key field name (for legacy compatibility).\n * @deprecated Use field instead\n */\n foreignKey?: string;\n /**\n * Target entity name (for legacy compatibility).\n * @deprecated Use entity instead\n */\n target?: string;\n /**\n * Cardinality type alias (for legacy compatibility).\n * @deprecated Use cardinality instead\n */\n type?: RelationCardinality;\n}\n\nexport const RelationConfigSchema = z.object({\n entity: z.string().min(1, 'Target entity is required'),\n field: z.string().optional(),\n cardinality: RelationCardinalitySchema.optional(),\n onDelete: z.enum(['cascade', 'nullify', 'restrict']).optional(),\n // Legacy compatibility fields\n foreignKey: z.string().optional(),\n target: z.string().optional(),\n type: RelationCardinalitySchema.optional(),\n}).transform((data) => {\n // Normalize legacy format to standard format\n const normalized: RelationConfig = {\n entity: data.entity || data.target || '',\n cardinality: data.cardinality || data.type,\n field: data.field,\n onDelete: data.onDelete,\n };\n return normalized;\n});\n\nexport type RelationConfigInput = z.input<typeof RelationConfigSchema>;\n\n// ============================================================================\n// Field Format\n// ============================================================================\n\n/**\n * Field format validators for string fields.\n */\nexport type FieldFormat = 'email' | 'url' | 'phone' | 'date' | 'datetime' | 'uuid';\n\nexport const FieldFormatSchema = z.enum([\n 'email',\n 'url',\n 'phone',\n 'date',\n 'datetime',\n 'uuid',\n]);\n\n// ============================================================================\n// Entity Field\n// ============================================================================\n\n/**\n * Entity field definition.\n */\nexport interface EntityField {\n /** Field name (camelCase) */\n name: string;\n /** Data type */\n type: FieldType;\n /** Whether the field is required */\n required?: boolean;\n /** Default value */\n default?: unknown;\n /** Allowed values for enum types */\n values?: string[];\n /** @deprecated Use 'values' instead */\n enum?: string[];\n /** Validation format */\n format?: FieldFormat;\n /** Minimum value (for number) or length (for string) */\n min?: number;\n /** Maximum value or length */\n max?: number;\n /** Array item schema (for array type) */\n items?: EntityField;\n /** Relation configuration (required when type is 'relation') */\n relation?: RelationConfig;\n}\n\nexport const EntityFieldSchema: z.ZodType<EntityField> = z.lazy(() =>\n z.object({\n name: z.string().min(1, 'Field name is required'),\n type: FieldTypeSchema,\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n values: z.array(z.string()).optional(),\n enum: z.array(z.string()).optional(),\n format: FieldFormatSchema.optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n items: EntityFieldSchema.optional(),\n relation: RelationConfigSchema.optional(),\n }).refine(\n (field) => field.type !== 'relation' || field.relation !== undefined,\n { message: 'Relation config is required when type is \"relation\"', path: ['relation'] }\n )\n);\n\nexport type EntityFieldInput = z.input<typeof EntityFieldSchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for EntityField - preferred name */\nexport type Field = EntityField;\n\n/** Alias for EntityFieldSchema - preferred name */\nexport const FieldSchema = EntityFieldSchema;\n","/**\n * Asset Types for Semantic Asset References\n *\n * Defines types for abstracting asset paths into semantic references.\n * Assets are resolved from SemanticAssetRef to actual paths at compile time.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Entity Roles\n// ============================================================================\n\n/**\n * Entity roles in game contexts\n */\nexport const ENTITY_ROLES = [\n 'player',\n 'enemy',\n 'npc',\n 'item',\n 'tile',\n 'projectile',\n 'effect',\n 'ui',\n 'decoration',\n 'vehicle',\n] as const;\n\nexport type EntityRole = (typeof ENTITY_ROLES)[number];\n\nexport const EntityRoleSchema = z.enum(ENTITY_ROLES);\n\n// ============================================================================\n// Visual Styles\n// ============================================================================\n\n/**\n * Visual art styles for games\n */\nexport const VISUAL_STYLES = ['pixel', 'vector', 'hd', '1-bit', 'isometric'] as const;\n\nexport type VisualStyle = (typeof VISUAL_STYLES)[number];\n\nexport const VisualStyleSchema = z.enum(VISUAL_STYLES);\n\n// ============================================================================\n// Game Types\n// ============================================================================\n\n/**\n * Game type classifications\n */\nexport const GAME_TYPES = [\n 'platformer',\n 'roguelike',\n 'top-down',\n 'puzzle',\n 'racing',\n 'card',\n 'board',\n 'shooter',\n 'rpg',\n] as const;\n\nexport type GameType = (typeof GAME_TYPES)[number];\n\nexport const GameTypeSchema = z.enum(GAME_TYPES);\n\n// ============================================================================\n// Animation Definition\n// ============================================================================\n\n/**\n * Animation definition for sprites\n */\nexport interface AnimationDef {\n /** Frame indices or file names */\n frames: number[] | string[];\n /** Frames per second */\n fps: number;\n /** Whether animation loops */\n loop: boolean;\n}\n\nexport const AnimationDefSchema = z.object({\n frames: z.union([z.array(z.number()), z.array(z.string())]),\n fps: z.number().positive(),\n loop: z.boolean(),\n});\n\n// ============================================================================\n// Semantic Asset Reference\n// ============================================================================\n\n/**\n * Semantic reference to an asset (not a hardcoded path).\n * Resolved to actual paths at compile time via asset maps.\n */\nexport interface SemanticAssetRef {\n /** Entity role (player, enemy, item, etc.) */\n role: EntityRole;\n /** Sub-category within role (hero, slime, coin, etc.) */\n category: string;\n /** Required animations for this entity */\n animations?: string[];\n /** Visual style preference */\n style?: VisualStyle;\n /** Variant identifier (for multiple versions) */\n variant?: string;\n}\n\nexport const SemanticAssetRefSchema = z.object({\n role: EntityRoleSchema,\n category: z.string().min(1),\n animations: z.array(z.string()).optional(),\n style: VisualStyleSchema.optional(),\n variant: z.string().optional(),\n});\n\n// ============================================================================\n// Resolved Asset\n// ============================================================================\n\n/**\n * Result of resolving a SemanticAssetRef to actual asset paths\n */\nexport interface ResolvedAsset {\n /** Base path to the asset pack */\n basePath: string;\n /** Relative path within the pack */\n path: string;\n /** Tile indices for tilesheet-based assets */\n tiles?: number[];\n /** Size of each tile in pixels */\n tileSize?: number;\n /** List of individual files (for non-tilesheet assets) */\n files?: string[];\n /** Animation definitions by name */\n animations?: Record<string, AnimationDef>;\n}\n\nexport const ResolvedAssetSchema = z.object({\n basePath: z.string(),\n path: z.string(),\n tiles: z.array(z.number()).optional(),\n tileSize: z.number().positive().optional(),\n files: z.array(z.string()).optional(),\n animations: z.record(AnimationDefSchema).optional(),\n});\n\n// ============================================================================\n// Asset Mapping\n// ============================================================================\n\n/**\n * Single asset mapping entry in an asset map\n */\nexport interface AssetMapping {\n /** Relative path to the asset */\n path: string;\n /** Tile indices for tilesheets */\n tiles?: number[];\n /** Tile size in pixels */\n tileSize?: number;\n /** Individual file patterns */\n files?: string[];\n /** Animation definitions */\n animations?: Record<string, AnimationDef>;\n}\n\nexport const AssetMappingSchema = z.object({\n path: z.string(),\n tiles: z.array(z.number()).optional(),\n tileSize: z.number().positive().optional(),\n files: z.array(z.string()).optional(),\n animations: z.record(AnimationDefSchema).optional(),\n});\n\n// ============================================================================\n// Asset Map\n// ============================================================================\n\n/**\n * Asset map for a specific game type and visual style.\n * Maps semantic keys (role:category) to asset paths.\n */\nexport interface AssetMap {\n /** Game type this map is for */\n gameType: GameType;\n /** Visual style this map is for */\n style: VisualStyle;\n /** Base path to the asset pack */\n basePath: string;\n /** Mappings from semantic keys to asset paths */\n mappings: Record<string, AssetMapping>;\n}\n\nexport const AssetMapSchema = z.object({\n gameType: GameTypeSchema,\n style: VisualStyleSchema,\n basePath: z.string(),\n mappings: z.record(AssetMappingSchema),\n});\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SemanticAssetRefInput = z.input<typeof SemanticAssetRefSchema>;\nexport type ResolvedAssetInput = z.input<typeof ResolvedAssetSchema>;\nexport type AssetMappingInput = z.input<typeof AssetMappingSchema>;\nexport type AssetMapInput = z.input<typeof AssetMapSchema>;\nexport type AnimationDefInput = z.input<typeof AnimationDefSchema>;\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create a semantic asset key from role and category\n */\nexport function createAssetKey(role: EntityRole, category: string): string {\n return `${role}:${category}`;\n}\n\n/**\n * Parse an asset key into role and category\n */\nexport function parseAssetKey(key: string): { role: string; category: string } | null {\n const parts = key.split(':');\n if (parts.length !== 2) return null;\n return { role: parts[0], category: parts[1] };\n}\n\n/**\n * Get common animations for an entity role\n */\nexport function getDefaultAnimationsForRole(role: EntityRole): string[] {\n switch (role) {\n case 'player':\n return ['idle', 'run', 'jump', 'fall', 'attack', 'hurt', 'die'];\n case 'enemy':\n return ['idle', 'walk', 'attack', 'hurt', 'die'];\n case 'npc':\n return ['idle', 'walk', 'talk'];\n case 'item':\n return ['idle', 'collected'];\n case 'tile':\n return ['static'];\n case 'projectile':\n return ['fly', 'hit', 'expire'];\n case 'effect':\n return ['play'];\n case 'ui':\n return ['normal', 'hover', 'pressed', 'disabled'];\n case 'decoration':\n return ['idle'];\n case 'vehicle':\n return ['idle', 'move', 'brake'];\n default:\n return ['idle'];\n }\n}\n\n/**\n * Validate that an asset ref has required animations\n */\nexport function validateAssetAnimations(\n assetRef: SemanticAssetRef,\n requiredAnimations: string[]\n): { valid: boolean; missing: string[] } {\n const provided = assetRef.animations || [];\n const missing = requiredAnimations.filter((anim) => !provided.includes(anim));\n return { valid: missing.length === 0, missing };\n}\n","/**\n * Entity Types for Orbital Units\n *\n * Defines the OrbitalEntity type - the nucleus of an Orbital Unit.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport { EntityFieldSchema, type EntityField } from './field.js';\nimport { SemanticAssetRefSchema, type SemanticAssetRef } from './asset.js';\n\n// ============================================================================\n// Entity Persistence\n// ============================================================================\n\n/**\n * Entity persistence types.\n *\n * - persistent: Stored in database (has collection)\n * - runtime: Exists only at runtime (not persisted)\n * - singleton: Single global instance\n * - instance: Static data (read-only instances)\n */\nexport type EntityPersistence = 'persistent' | 'runtime' | 'singleton' | 'instance';\n\nexport const EntityPersistenceSchema = z.enum([\n 'persistent',\n 'runtime',\n 'singleton',\n 'instance',\n]);\n\n// ============================================================================\n// Orbital Entity\n// ============================================================================\n\n/**\n * OrbitalEntity - the nucleus of an Orbital Unit.\n *\n * This is a simplified entity definition optimized for orbital composition.\n * Collection names are derived automatically from persistence type if not provided.\n */\nexport interface OrbitalEntity {\n /** Entity name (PascalCase, e.g., \"Task\", \"User\") */\n name: string;\n\n /** Entity persistence type (defaults to 'persistent' if not specified) */\n persistence?: EntityPersistence;\n\n /** Collection name (auto-derived if not provided for persistent entities) */\n collection?: string;\n\n /** Entity fields */\n fields: EntityField[];\n\n /** Pre-authored instances (seed data or static reference data) */\n instances?: Record<string, unknown>[];\n\n /** Auto-add createdAt/updatedAt timestamps */\n timestamps?: boolean;\n\n /** Soft delete support */\n softDelete?: boolean;\n\n /** Human-readable description */\n description?: string;\n\n /** Visual prompt for AI generation */\n visual_prompt?: string;\n\n /** Semantic asset reference for visual representation (games) */\n assetRef?: SemanticAssetRef;\n}\n\nexport const OrbitalEntitySchema = z.object({\n name: z.string().min(1, 'Entity name is required'),\n persistence: EntityPersistenceSchema.default('persistent'),\n collection: z.string().optional(),\n fields: z.array(EntityFieldSchema).min(1, 'At least one field is required'),\n instances: z.array(z.record(z.unknown())).optional(),\n timestamps: z.boolean().optional(),\n softDelete: z.boolean().optional(),\n description: z.string().optional(),\n visual_prompt: z.string().optional(),\n assetRef: SemanticAssetRefSchema.optional(),\n});\n\nexport type OrbitalEntityInput = z.input<typeof OrbitalEntitySchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for OrbitalEntity - preferred name */\nexport type Entity = OrbitalEntity;\n\n/** Alias for OrbitalEntitySchema - preferred name */\nexport const EntitySchema = OrbitalEntitySchema;\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Derive collection name from entity.\n * Only persistent entities have collections.\n */\nexport function deriveCollection(entity: OrbitalEntity): string | undefined {\n if (entity.persistence !== 'persistent') {\n return undefined;\n }\n // Lowercase + 's' suffix (simple pluralization)\n return entity.name.toLowerCase() + 's';\n}\n\n/**\n * Check if entity is runtime-only (not persisted).\n */\nexport function isRuntimeEntity(entity: OrbitalEntity): boolean {\n return entity.persistence === 'runtime';\n}\n\n/**\n * Check if entity is a singleton.\n */\nexport function isSingletonEntity(entity: OrbitalEntity): boolean {\n return entity.persistence === 'singleton';\n}\n","/**\n * Page Types for Orbital Units\n *\n * Defines OrbitalPage type for pages within an Orbital Unit.\n *\n * IMPORTANT: Trait-driven UI architecture requires pages to have traits.\n * Static sections are NO LONGER SUPPORTED.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// View Type\n// ============================================================================\n\n/**\n * Page view types.\n * Note: viewType may be deprecated in favor of trait-driven UI.\n */\nexport type ViewType = 'list' | 'detail' | 'create' | 'edit' | 'dashboard' | 'custom';\n\nexport const ViewTypeSchema = z.enum([\n 'list',\n 'detail',\n 'create',\n 'edit',\n 'dashboard',\n 'custom',\n]);\n\n// ============================================================================\n// Trait Reference\n// ============================================================================\n\n/**\n * Trait reference on a page.\n */\nexport interface PageTraitRef {\n /** Trait name from library */\n ref: string;\n /** Entity this trait operates on */\n linkedEntity?: string;\n /** Additional trait configuration */\n config?: Record<string, unknown>;\n}\n\nexport const PageTraitRefSchema = z.object({\n ref: z.string().min(1, 'Trait ref is required'),\n linkedEntity: z.string().optional(),\n config: z.record(z.unknown()).optional(),\n});\n\n// ============================================================================\n// Orbital Page\n// ============================================================================\n\n/**\n * OrbitalPage - a page definition within an Orbital Unit.\n *\n * TRAIT-DRIVEN: Pages must have traits array. Sections are NOT supported.\n */\nexport interface OrbitalPage {\n /** Page name (PascalCase, e.g., \"TasksPage\") */\n name: string;\n\n /** URL path (e.g., \"/tasks\", \"/tasks/:id\") */\n path: string;\n\n /** View type (optional in trait-driven mode) */\n viewType?: ViewType;\n\n /** Page title (optional, defaults to derived from name) */\n title?: string;\n\n /** Primary entity for this page */\n primaryEntity?: string;\n\n /**\n * Traits that drive UI for this page.\n * REQUIRED in trait-driven architecture.\n */\n traits?: PageTraitRef[];\n\n /** Is this the initial page for navigation? */\n isInitial?: boolean;\n}\n\n/**\n * Strict Zod schema for trait-driven pages.\n * Rejects unknown properties like 'sections'.\n */\nexport const OrbitalPageStrictSchema = z.object({\n name: z.string().min(1, 'Page name is required'),\n path: z.string().min(1, 'Page path is required').startsWith('/', 'Path must start with /'),\n primaryEntity: z.string().min(1, 'Primary entity is required'),\n traits: z.array(PageTraitRefSchema).min(1, 'Page must have at least one trait'),\n title: z.string().optional(),\n}).strict(); // Reject unknown keys like 'sections'\n\n/**\n * Zod schema for OrbitalPage.\n * Trait-driven: pages have traits instead of static sections/patterns.\n * Uses .strict() to reject unknown keys like 'sections'.\n */\nexport const OrbitalPageSchema = z.object({\n name: z.string().min(1, 'Page name is required'),\n path: z.string().min(1, 'Page path is required').startsWith('/', 'Path must start with /'),\n viewType: ViewTypeSchema.optional(),\n title: z.string().optional(),\n primaryEntity: z.string().optional(),\n traits: z.array(PageTraitRefSchema).optional(),\n isInitial: z.boolean().optional(),\n}).strict(); // Reject unknown keys like 'sections' - use traits with render_ui effects\n\nexport type OrbitalPageInput = z.input<typeof OrbitalPageSchema>;\nexport type OrbitalPageStrictInput = z.input<typeof OrbitalPageStrictSchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for OrbitalPage - preferred name */\nexport type Page = OrbitalPage;\n\n/** Alias for OrbitalPageSchema - preferred name */\nexport const PageSchema = OrbitalPageSchema;\n","/**\n * Effect Types (Self-Contained)\n *\n * Defines effect types for trait transitions and ticks.\n * Effects are S-expressions (arrays) that describe actions to perform.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport { type SExpr, type Expression } from './expression.js';\n\n// ============================================================================\n// UI Slots\n// ============================================================================\n\n/**\n * Known UI slots where content can be rendered\n */\nexport const UI_SLOTS = [\n // App slots\n 'main',\n 'sidebar',\n 'modal',\n 'drawer',\n 'overlay',\n 'center',\n 'toast',\n 'floating',\n 'system', // For invisible system components (InputListener, CollisionDetector)\n 'content',\n 'screen',\n // Game HUD slots\n 'hud',\n 'hud-top',\n 'hud-bottom',\n 'hud.health',\n 'hud.score',\n 'hud.inventory',\n 'hud.stamina',\n // Game overlay slots\n 'overlay.inventory',\n 'overlay.dialogue',\n 'overlay.menu',\n 'overlay.pause',\n] as const;\n\nexport type UISlot = (typeof UI_SLOTS)[number];\n\nexport const UISlotSchema = z.enum(UI_SLOTS);\n\n// ============================================================================\n// Pattern Config (for render-ui effects)\n// ============================================================================\n\n// Import pattern types for local use and re-export for consumers\nimport type {\n PatternType,\n PatternConfig,\n PatternProps,\n PatternPropsMap,\n AnyPatternConfig,\n} from '@almadar/patterns';\n\n/**\n * Type-safe pattern configuration for render-ui effects.\n *\n * Re-exported from @almadar/patterns. Generated from patterns-registry.json.\n *\n * @example\n * // Type-safe with specific pattern type\n * const config: PatternConfig<'entity-table'> = {\n * patternType: 'entity-table',\n * columns: ['name', 'email'], // ✅ Required prop\n * entity: 'User',\n * };\n *\n * // Error: Property 'columns' is missing (required prop)\n * const bad: PatternConfig<'entity-table'> = { patternType: 'entity-table' };\n *\n * // Error: 'fake-pattern' is not assignable to PatternType\n * const invalid: PatternConfig = { patternType: 'fake-pattern' };\n */\nexport type {\n PatternType,\n PatternConfig,\n PatternProps,\n PatternPropsMap,\n AnyPatternConfig,\n};\n\n/**\n * Configuration for render-ui effect.\n * Used in runtime to specify which slot and pattern to render.\n */\nexport interface RenderUIConfig {\n /** Target UI slot */\n slot: UISlot;\n /** Pattern configuration (null clears the slot) */\n pattern: AnyPatternConfig | null;\n /** Target element (trait name or entity ID) */\n target?: string;\n /** Additional props for the pattern */\n props?: Record<string, unknown>;\n /** Optional priority for slot ordering */\n priority?: number;\n}\n\n// ============================================================================\n// Service Config (for call-service effects)\n// ============================================================================\n\n/**\n * Configuration extracted from call-service effects\n */\nexport interface CallServiceConfig {\n service: string;\n action: string;\n endpoint?: string;\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n params?: Record<string, unknown>;\n onSuccess?: string;\n onError?: string;\n}\n\n// ============================================================================\n// Typed Effect Tuples\n// ============================================================================\n\n/**\n * Render UI effect - displays a pattern in a UI slot.\n * @example ['render-ui', 'main', { patternType: 'entity-table', columns: ['name'] }]\n */\nexport type RenderUIEffect =\n | ['render-ui', UISlot, AnyPatternConfig]\n | ['render-ui', UISlot, AnyPatternConfig, Record<string, unknown>]\n | ['render-ui', UISlot, null];\n\n/**\n * Navigate effect - navigates to a path.\n * @example ['navigate', '/tasks'] or ['navigate', '/tasks/:id', { id: '123' }]\n */\nexport type NavigateEffect = ['navigate', string] | ['navigate', string, Record<string, string>];\n\n/**\n * Emit effect - emits an event, optionally with payload.\n * @example ['emit', 'SAVE'] or ['emit', 'PLAYER_DIED', { playerId: '@entity.id' }]\n * @example ['emit', 'FILTER_CHANGED', '@entity.filters']\n */\nexport type EmitEffect = ['emit', string] | ['emit', string, Record<string, unknown> | string];\n\n/**\n * Set effect - sets a binding to a value.\n * @example ['set', '@entity.health', 100]\n */\nexport type SetEffect = ['set', string, unknown];\n\n/**\n * Persist effect - creates, updates, deletes, or clears entities.\n * @example ['persist', 'create', 'Task', { title: '@payload.title' }]\n * @example ['persist', 'update', '@entity.entityType', '@payload.data']\n */\nexport type PersistEffect =\n | ['persist', 'create', string, Record<string, unknown> | string]\n | ['persist', 'update', string, Record<string, unknown> | string]\n | ['persist', 'delete', string]\n | ['persist', 'delete', string, Record<string, unknown> | string]\n | ['persist', 'clear', string]\n | ['persist', 'clear', string, Record<string, unknown> | string];\n\n/**\n * Call service effect - invokes an external service.\n * @example ['call-service', 'WeatherAPI', { service: 'weather', action: 'get', onSuccess: 'OK' }]\n */\nexport type CallServiceEffect = ['call-service', string, CallServiceConfig];\n\n/**\n * Spawn effect - creates a new entity instance (games).\n * @example ['spawn', 'Bullet', { x: '@entity.x', y: '@entity.y' }]\n */\nexport type SpawnEffect = ['spawn', string] | ['spawn', string, Record<string, unknown>];\n\n/**\n * Despawn effect - removes an entity instance (games).\n * @example ['despawn', '@entity.id']\n */\nexport type DespawnEffect = ['despawn', string];\n\n/**\n * Do effect - executes multiple effects in sequence.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['do', ['set', '@entity.x', 0], ['set', '@entity.y', 0]]\n */\nexport type DoEffect = ['do', ...SExpr[]];\n\n/**\n * Notify effect - sends a notification.\n * @example ['notify', 'in_app', 'Task created successfully']\n * @example ['notify', 'in_app', ['str/concat', 'Item: ', '@entity.name']]\n */\nexport type NotifyEffect =\n | ['notify', string, string | SExpr]\n | ['notify', string, string | SExpr, string];\n\n/**\n * Fetch effect - retrieves entity data (server-side).\n * @example ['fetch', 'User'] or ['fetch', 'User', { id: '@payload.userId' }]\n */\nexport type FetchEffect = ['fetch', string] | ['fetch', string, Record<string, unknown>];\n\n/**\n * If effect - conditional effect execution.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['if', ['>', '@entity.health', 0], ['emit', 'ALIVE'], ['emit', 'DEAD']]\n */\nexport type IfEffect = ['if', Expression, SExpr] | ['if', Expression, SExpr, SExpr];\n\n/**\n * When effect - conditional effect similar to if but without else.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['when', ['>', '@entity.health', 0], ['emit', 'ALIVE']]\n */\nexport type WhenEffect = ['when', Expression, SExpr];\n\n/**\n * Let effect - creates local bindings for effects.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['let', ['temp', ['get', '@payload.value']], ['set', '@entity.value', 'temp']]\n */\nexport type LetEffect = ['let', [string, unknown][], ...SExpr[]];\n\n/**\n * Log effect - logs a message for debugging.\n * @example ['log', 'User created:', '@entity.name']\n */\nexport type LogEffect = ['log', ...unknown[]];\n\n/**\n * Wait effect - delays execution.\n * @example ['wait', 1000] - wait 1 second\n */\nexport type WaitEffect = ['wait', number];\n\n// ============================================================================\n// Async Effects (from almadar-std/modules/async)\n// ============================================================================\n\n/**\n * Async delay effect - wait then execute effects.\n * @example ['async/delay', 2000, ['emit', 'TIMEOUT']]\n */\nexport type AsyncDelayEffect = ['async/delay', number | string, ...Effect[]];\n\n/**\n * Async debounce effect - debounce then execute effect.\n * @example ['async/debounce', 300, ['emit', 'SEARCH_COMPLETE']]\n * @example ['async/debounce', '@entity.debounceMs', ['emit', 'SEARCH_COMPLETE']]\n */\nexport type AsyncDebounceEffect = ['async/debounce', number | string, SExpr];\n\n/**\n * Async throttle effect - throttle then execute effect.\n * @example ['async/throttle', 100, ['emit', 'SCROLL_HANDLED']]\n * @example ['async/throttle', '@entity.throttleMs', ['emit', 'SCROLL_HANDLED']]\n */\nexport type AsyncThrottleEffect = ['async/throttle', number | string, SExpr];\n\n/**\n * Async interval effect - execute effect at intervals.\n * @example ['async/interval', 1000, ['emit', 'TICK']]\n * @example ['async/interval', '@entity.intervalMs', ['emit', 'POLL_TICK']]\n */\nexport type AsyncIntervalEffect = ['async/interval', number | string, SExpr];\n\n/**\n * Async race effect - first effect to complete wins.\n * @example ['async/race', ['call', 'api1'], ['call', 'api2']]\n */\nexport type AsyncRaceEffect = ['async/race', ...Effect[]];\n\n/**\n * Async all effect - wait for all effects to complete.\n * @example ['async/all', ['call', 'api1'], ['call', 'api2']]\n */\nexport type AsyncAllEffect = ['async/all', ...Effect[]];\n\n/**\n * Async sequence effect - execute effects in sequence.\n * @example ['async/sequence', ['call', 'validate'], ['call', 'save']]\n */\nexport type AsyncSequenceEffect = ['async/sequence', ...Effect[]];\n\n/**\n * Union of all typed effects.\n * Provides compile-time validation for common effect types.\n */\nexport type TypedEffect =\n | RenderUIEffect\n | NavigateEffect\n | EmitEffect\n | SetEffect\n | PersistEffect\n | CallServiceEffect\n | SpawnEffect\n | DespawnEffect\n | DoEffect\n | NotifyEffect\n | FetchEffect\n | IfEffect\n | WhenEffect\n | LetEffect\n | LogEffect\n | WaitEffect\n | AsyncDelayEffect\n | AsyncDebounceEffect\n | AsyncThrottleEffect\n | AsyncIntervalEffect\n | AsyncRaceEffect\n | AsyncAllEffect\n | AsyncSequenceEffect;\n\n// ============================================================================\n// Effect Type (Strictly Typed)\n// ============================================================================\n\n/**\n * Effect type - typed S-expression format.\n *\n * Effects are strongly typed tuples that enforce:\n * - Valid effect operators (render-ui, emit, set, persist, navigate, call-service)\n * - Valid UISlots for render-ui\n * - Valid PatternTypes and props for render-ui\n * - Correct argument types for each effect\n *\n * Available typed effects:\n * - RenderUIEffect: ['render-ui', UISlot, PatternConfig]\n * - NavigateEffect: ['navigate', path] or ['navigate', path, params]\n * - EmitEffect: ['emit', eventName] or ['emit', eventName, payload]\n * - SetEffect: ['set', binding, value]\n * - PersistEffect: ['persist', operation, entity, data?]\n * - CallServiceEffect: ['call-service', serviceName, config]\n *\n * @example\n * [\"set\", \"@entity.health\", 100]\n * [\"emit\", \"PLAYER_DIED\", { \"playerId\": \"@entity.id\" }]\n * [\"render-ui\", \"main\", { \"patternType\": \"entity-table\", \"columns\": [\"name\"] }]\n * [\"call-service\", \"WeatherAPI\", { \"action\": \"getWeather\", \"onSuccess\": \"OK\" }]\n * [\"navigate\", \"/tasks\"]\n * [\"persist\", \"create\", \"Task\", { \"title\": \"@payload.title\" }]\n */\nexport type Effect = TypedEffect;\n\n/**\n * Schema for Effect - validates S-expression format\n */\nexport const EffectSchema = z.array(z.unknown()).min(1).refine(\n (arr) => typeof arr[0] === 'string',\n { message: 'Effect must be an S-expression with a string operator as first element' }\n);\n\nexport type EffectInput = z.input<typeof EffectSchema>;\n\n/**\n * Type guard to check if a value is a valid Effect (S-expression).\n */\nexport function isEffect(value: unknown): value is Effect {\n return Array.isArray(value) && value.length > 0 && typeof value[0] === 'string';\n}\n\n/**\n * Alias for isEffect (for clarity when working with S-expressions)\n */\nexport const isSExprEffect = isEffect;\n\n// ============================================================================\n// Effect Builder Helpers\n// ============================================================================\n\n/**\n * Create a set effect\n * @example [\"set\", \"@entity.health\", 100]\n */\nexport function set(binding: string, value: SExpr): Effect {\n return ['set', binding, value];\n}\n\n/**\n * Create an emit effect\n * @example [\"emit\", \"PLAYER_DIED\", { \"playerId\": \"@entity.id\" }]\n */\nexport function emit(event: string, payload?: Record<string, unknown>): Effect {\n return payload ? ['emit', event, payload] : ['emit', event];\n}\n\n/**\n * Create a navigate effect\n * @example [\"navigate\", \"/tasks\"]\n */\nexport function navigate(path: string): NavigateEffect;\nexport function navigate(path: string, params: Record<string, string>): NavigateEffect;\nexport function navigate(path: string, params?: Record<string, string>): NavigateEffect {\n return params ? ['navigate', path, params] : ['navigate', path];\n}\n\n/**\n * Create a render-ui effect\n * @example [\"render-ui\", \"main\", { \"patternType\": \"entity-table\", \"columns\": [\"name\"] }]\n */\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig\n): RenderUIEffect;\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig,\n props: Record<string, unknown>\n): RenderUIEffect;\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig,\n props?: Record<string, unknown>\n): RenderUIEffect {\n return props\n ? ['render-ui', target, pattern, props]\n : ['render-ui', target, pattern];\n}\n\n/**\n * Create a persist effect\n * @example [\"persist\", \"create\", \"Task\", { \"title\": \"@payload.title\" }]\n */\nexport function persist(\n action: 'create' | 'update',\n entity: string,\n data: Record<string, unknown>\n): PersistEffect;\nexport function persist(\n action: 'delete' | 'clear',\n entity: string,\n data?: Record<string, unknown>\n): PersistEffect;\nexport function persist(\n action: 'create' | 'update' | 'delete' | 'clear',\n entity: string,\n data?: Record<string, unknown>\n): PersistEffect {\n if (action === 'create' || action === 'update') {\n return ['persist', action, entity, data!] as PersistEffect;\n }\n return data\n ? ['persist', action, entity, data] as PersistEffect\n : ['persist', action, entity] as PersistEffect;\n}\n\n/**\n * Create a call-service effect\n * @example [\"call-service\", \"stripe\", { \"service\": \"stripe\", \"action\": \"charge\", \"onSuccess\": \"OK\", \"onError\": \"ERR\" }]\n */\nexport function callService(\n serviceName: string,\n config: CallServiceConfig\n): CallServiceEffect {\n return ['call-service', serviceName, config];\n}\n\n/**\n * Create a spawn effect (games)\n * @example [\"spawn\", \"Bullet\", { \"x\": \"@entity.x\", \"y\": \"@entity.y\" }]\n */\nexport function spawn(entity: string): SpawnEffect;\nexport function spawn(entity: string, initialState: Record<string, unknown>): SpawnEffect;\nexport function spawn(entity: string, initialState?: Record<string, unknown>): SpawnEffect {\n return initialState ? ['spawn', entity, initialState] : ['spawn', entity];\n}\n\n/**\n * Create a despawn effect (games)\n * @example [\"despawn\", \"@entity.id\"]\n */\nexport function despawn(entityId: string): DespawnEffect {\n return ['despawn', entityId];\n}\n\n/**\n * Create a do effect (multiple effects)\n * @example [\"do\", [\"set\", \"@entity.x\", 0], [\"set\", \"@entity.y\", 0]]\n */\nexport function doEffects(...effects: SExpr[]): DoEffect {\n return ['do', ...effects];\n}\n\n/**\n * Create a notify effect\n * @example [\"notify\", \"in_app\", \"Task created successfully\"]\n */\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string\n): NotifyEffect;\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string,\n recipient: string\n): NotifyEffect;\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string,\n recipient?: string\n): NotifyEffect {\n return recipient\n ? ['notify', channel, message, recipient]\n : ['notify', channel, message];\n}\n\n/**\n * Fetch options for entity data retrieval\n */\nexport interface FetchOptions {\n /** Fetch a single entity by ID */\n id?: string;\n /** Filter expression (S-expression) */\n filter?: SExpr;\n /** Maximum number of entities to return */\n limit?: number;\n /** Number of entities to skip */\n offset?: number;\n /** Allow additional properties for flexibility */\n [key: string]: unknown;\n}\n\n/**\n * Create a fetch effect (server-side data retrieval)\n * @example [\"fetch\", \"User\"] - fetch all users\n * @example [\"fetch\", \"User\", { \"id\": \"@payload.userId\" }] - fetch by ID\n * @example [\"fetch\", \"User\", { \"filter\": [\"=\", \"@entity.status\", \"active\"], \"limit\": 10 }]\n */\nexport function fetch(entity: string): FetchEffect;\nexport function fetch(entity: string, options: FetchOptions): FetchEffect;\nexport function fetch(entity: string, options?: FetchOptions): FetchEffect {\n return options ? ['fetch', entity, options as Record<string, unknown>] : ['fetch', entity];\n}\n\n","/**\n * S-Expression Types\n *\n * Defines the S-Expression type system for guards, effects, and computed values.\n * S-expressions are JSON arrays where the first element is an operator string.\n *\n * @example\n * // Guard: health > 0\n * [\">\", \"@entity.health\", 0]\n *\n * // Effect: set x to x + vx\n * [\"set\", \"@entity.x\", [\"+\", \"@entity.x\", \"@entity.vx\"]]\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// S-Expression Type\n// ============================================================================\n\n/**\n * S-Expression type - recursive structure representing expressions.\n *\n * An S-expression is either:\n * - A literal value (string, number, boolean, null)\n * - An object literal (for payload data, props, etc.)\n * - A binding reference (string starting with @)\n * - A call expression (array with operator as first element)\n */\nexport type SExprAtom = string | number | boolean | null | Record<string, unknown>;\nexport type SExpr = SExprAtom | SExpr[];\n\n/**\n * Expression type - S-expressions only.\n * Used for guards, computed values, and effect expressions.\n *\n * NOTE: Legacy string format is no longer supported.\n * All expressions must be S-expression arrays.\n */\nexport type Expression = SExpr;\n\n// ============================================================================\n// S-Expression Schema (Zod)\n// ============================================================================\n\n/**\n * Schema for atomic S-expression values (non-array)\n * Includes objects for payload data, props, etc.\n */\nexport const SExprAtomSchema: z.ZodType<SExprAtom> = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.record(z.unknown()), // Objects for payload data\n]);\n\n/**\n * Recursive schema for S-expressions.\n * Validates that arrays have at least one element and first element is a string (operator).\n */\nexport const SExprSchema: z.ZodType<SExpr> = z.lazy(() =>\n z.union([\n SExprAtomSchema,\n z\n .array(z.lazy(() => SExprSchema))\n .min(1)\n .refine(\n (arr) => typeof arr[0] === 'string',\n { message: 'S-expression array must have a string operator as first element' }\n ),\n ])\n);\n\n/**\n * Schema for Expression type - S-expressions only.\n * S-expressions are arrays with operator as first element.\n *\n * NOTE: Legacy string format is no longer supported.\n */\nexport const ExpressionSchema: z.ZodType<Expression> = SExprSchema;\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard for S-expression detection.\n * 100% reliable - structural check, no regex or keyword matching.\n *\n * @param value - Value to check\n * @returns true if value is an S-expression (array with string operator)\n */\nexport function isSExpr(value: unknown): value is SExpr[] {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n typeof value[0] === 'string'\n );\n}\n\n/**\n * Type guard for S-expression atoms (non-array values).\n * Includes objects (for payload data, props, etc.)\n */\nexport function isSExprAtom(value: unknown): value is SExprAtom {\n if (value === null) return true;\n if (Array.isArray(value)) return false;\n const type = typeof value;\n return type === 'string' || type === 'number' || type === 'boolean' || type === 'object';\n}\n\n/**\n * Check if a value is a binding reference.\n * Bindings start with @ (e.g., @entity.health, @payload.amount, @now)\n */\nexport function isBinding(value: unknown): value is string {\n return typeof value === 'string' && value.startsWith('@');\n}\n\n/**\n * Check if a value is a valid S-expression call (array with operator).\n * Use this to distinguish between S-expression calls and atom values.\n */\nexport function isSExprCall(value: unknown): value is SExpr[] {\n return isSExpr(value);\n}\n\n// ============================================================================\n// Binding Parsing\n// ============================================================================\n\n/**\n * Parsed binding reference\n */\nexport interface ParsedBinding {\n /** Type of binding: core (@entity, @payload, @state, @now) or entity (@EntityName) */\n type: 'core' | 'entity';\n /** The root binding name (entity, payload, state, now, or EntityName) */\n root: string;\n /** Path segments after the root (e.g., ['health'] for @entity.health) */\n path: string[];\n /** Full original binding string */\n original: string;\n}\n\n/**\n * Core bindings that are always available.\n * Phase 4.5 adds: config, computed, trait (for behavior support)\n */\nexport const CORE_BINDINGS = ['entity', 'payload', 'state', 'now', 'config', 'computed', 'trait'] as const;\nexport type CoreBinding = (typeof CORE_BINDINGS)[number];\n\n/**\n * Parse a binding reference into its components.\n * Does NOT use regex - uses structured string operations.\n *\n * @param binding - Binding string starting with @\n * @returns Parsed binding object or null if invalid\n */\nexport function parseBinding(binding: string): ParsedBinding | null {\n if (!binding.startsWith('@')) {\n return null;\n }\n\n // Remove @ prefix\n const withoutPrefix = binding.slice(1);\n\n // Split by dots\n const parts = withoutPrefix.split('.');\n\n if (parts.length === 0 || parts[0] === '') {\n return null;\n }\n\n const root = parts[0];\n const path = parts.slice(1);\n\n // Determine if core binding or entity reference\n const isCore = (CORE_BINDINGS as readonly string[]).includes(root);\n\n return {\n type: isCore ? 'core' : 'entity',\n root,\n path,\n original: binding,\n };\n}\n\n/**\n * Validate a binding reference format.\n *\n * @param binding - Binding string to validate\n * @returns true if valid binding format\n */\nexport function isValidBinding(binding: string): boolean {\n const parsed = parseBinding(binding);\n if (!parsed) return false;\n\n // Core bindings: @entity, @payload, @state, @now (optionally with path)\n // @state and @now don't have paths\n if (parsed.type === 'core') {\n if (parsed.root === 'state' || parsed.root === 'now') {\n return parsed.path.length === 0;\n }\n // @entity and @payload can have paths\n return true;\n }\n\n // Entity bindings: @EntityName.field - must have at least one path segment\n return parsed.path.length > 0;\n}\n\n// ============================================================================\n// S-Expression Utilities\n// ============================================================================\n\n/**\n * Get the operator from an S-expression call.\n *\n * @param expr - S-expression array\n * @returns The operator string or null if not a valid call\n */\nexport function getOperator(expr: SExpr): string | null {\n if (!isSExpr(expr)) return null;\n return expr[0] as string;\n}\n\n/**\n * Get the arguments from an S-expression call.\n *\n * @param expr - S-expression array\n * @returns Array of arguments (empty if not a valid call)\n */\nexport function getArgs(expr: SExpr): SExpr[] {\n if (!isSExpr(expr)) return [];\n return expr.slice(1);\n}\n\n/**\n * Create an S-expression call.\n *\n * @param operator - The operator string\n * @param args - Arguments to the operator\n * @returns S-expression array\n */\nexport function sexpr(operator: string, ...args: SExpr[]): SExpr[] {\n return [operator, ...args];\n}\n\n/**\n * Walk an S-expression tree and apply a visitor function to each node.\n *\n * @param expr - S-expression to walk\n * @param visitor - Function to call on each node\n */\nexport function walkSExpr(\n expr: SExpr,\n visitor: (node: SExpr, parent: SExpr[] | null, index: number) => void,\n parent: SExpr[] | null = null,\n index: number = 0\n): void {\n visitor(expr, parent, index);\n\n if (isSExpr(expr)) {\n for (let i = 0; i < expr.length; i++) {\n walkSExpr(expr[i], visitor, expr, i);\n }\n }\n}\n\n/**\n * Collect all bindings referenced in an S-expression.\n *\n * @param expr - S-expression to analyze\n * @returns Array of binding strings found\n */\nexport function collectBindings(expr: SExpr): string[] {\n const bindings: string[] = [];\n\n walkSExpr(expr, (node) => {\n if (isBinding(node)) {\n bindings.push(node);\n }\n });\n\n return bindings;\n}\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SExprInput = z.input<typeof SExprSchema>;\nexport type ExpressionInput = z.input<typeof ExpressionSchema>;\n","/**\n * State Machine Types (Self-Contained)\n *\n * Defines state machine types for traits.\n * Copied from schema/state-machine.ts to make orbitals/ self-contained.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { Effect } from \"./effect.js\";\nimport { EffectSchema } from \"./effect.js\";\nimport type { Expression } from \"./expression.js\";\nimport { ExpressionSchema } from \"./expression.js\";\n\n// ============================================================================\n// State\n// ============================================================================\n\n/**\n * Represents a state in the state machine\n */\nexport interface State {\n /** State name (unique identifier) */\n name: string;\n /** Whether this is the initial state */\n isInitial?: boolean;\n /** Whether this is a terminal state (no outgoing transitions expected) */\n isTerminal?: boolean;\n /** Whether this is a final state (legacy alias for isTerminal) */\n isFinal?: boolean;\n /** Human-readable description */\n description?: string;\n /** Effect names to run on entry */\n onEntry?: string[];\n /** Effect names to run on exit */\n onExit?: string[];\n}\n\nexport const StateSchema = z.object({\n name: z.string().min(1, \"State name is required\"),\n isInitial: z.boolean().optional(),\n isTerminal: z.boolean().optional(),\n isFinal: z.boolean().optional(),\n description: z.string().optional(),\n onEntry: z.array(z.string()).optional(),\n onExit: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Event\n// ============================================================================\n\n/**\n * Payload field definition for events\n */\nexport interface PayloadField {\n name: string;\n type: \"string\" | \"number\" | \"boolean\" | \"object\" | \"array\";\n required?: boolean;\n}\n\nexport const PayloadFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum([\"string\", \"number\", \"boolean\", \"object\", \"array\"]),\n required: z.boolean().optional(),\n});\n\n/**\n * Represents an event that can trigger transitions\n */\nexport interface Event {\n /** Event key (UPPER_SNAKE_CASE) */\n key: string;\n /** Human-readable name */\n name: string;\n /** Description */\n description?: string;\n /** Expected payload structure */\n payloadSchema?: PayloadField[];\n /** Domain vs System classification (optional, for analysis) */\n classification?: \"domain\" | \"system\";\n /** Semantic role of this event (optional, for analysis) */\n semanticRole?: string;\n}\n\nexport const EventSchema = z.object({\n key: z.string().min(1, \"Event key is required\"),\n name: z.string().min(1, \"Event name is required\"),\n description: z.string().optional(),\n payloadSchema: z.array(PayloadFieldSchema).optional(),\n classification: z.enum([\"domain\", \"system\"]).optional(),\n semanticRole: z.string().optional(),\n});\n\n// ============================================================================\n// Guard\n// ============================================================================\n\n/**\n * Represents a named guard condition.\n * Expression must be an S-expression.\n *\n * @example\n * {\n * name: \"hasHealth\",\n * expression: [\">\", \"@entity.health\", 0],\n * description: \"Check if entity has health remaining\"\n * }\n */\nexport interface Guard {\n name: string;\n /** Guard expression - S-expression array only */\n expression: Expression;\n description?: string;\n}\n\nexport const GuardSchema = z.object({\n name: z.string().min(1, \"Guard name is required\"),\n expression: ExpressionSchema,\n description: z.string().optional(),\n});\n\n// ============================================================================\n// Transition (Effect imported separately to avoid circular deps)\n// ============================================================================\n\n/**\n * Represents a transition between states.\n * Guards and effects must be S-expressions.\n *\n * @example\n * {\n * from: \"idle\",\n * to: \"running\",\n * event: \"START\",\n * guard: [\">\", \"@entity.fuel\", 0],\n * effects: [\n * [\"set\", \"@entity.status\", \"running\"],\n * [\"emit\", \"ENGINE_STARTED\"]\n * ]\n * }\n */\nexport interface Transition {\n /** Source state name */\n from: string;\n /** Target state name */\n to: string;\n /** Event key that triggers this transition */\n event: string;\n /** Guard expression - S-expression array */\n guard?: Expression | null;\n /** Effects to execute - S-expression arrays */\n effects?: Effect[];\n /** Description */\n description?: string | null;\n}\n\nexport const TransitionSchema = z.object({\n from: z.string().min(1, \"Transition source state is required\"),\n to: z.string().min(1, \"Transition target state is required\"),\n event: z.string().min(1, \"Transition event is required\"),\n guard: ExpressionSchema.nullish(),\n effects: z.array(EffectSchema).optional(),\n description: z.string().nullish(),\n});\n\n// ============================================================================\n// State Machine\n// ============================================================================\n\n/**\n * Complete state machine definition\n */\nexport interface StateMachine {\n /** All states in the machine */\n states: State[];\n /** All events that can be triggered */\n events: Event[];\n /** All transitions between states */\n transitions: Transition[];\n /** Named guard definitions */\n guards?: Guard[];\n}\n\nexport const StateMachineSchema = z.object({\n states: z.array(StateSchema).min(1, \"At least one state is required\"),\n events: z.array(EventSchema),\n transitions: z.array(TransitionSchema),\n guards: z.array(GuardSchema).optional(),\n});\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type StateInput = z.input<typeof StateSchema>;\nexport type EventInput = z.input<typeof EventSchema>;\nexport type GuardInput = z.input<typeof GuardSchema>;\nexport type TransitionInput = z.input<typeof TransitionSchema>;\nexport type StateMachineInput = z.input<typeof StateMachineSchema>;\n\n// ============================================================================\n// Event Utilities\n// ============================================================================\n\n/**\n * Check if an event is a circuit event (not internal/system event).\n * Circuit events are user-defined events that participate in the closed circuit pattern.\n * Internal/system events start with underscore (e.g., _INIT, _TICK, _TIMER).\n *\n * @param event - Event name to check\n * @returns true if event is a circuit event (doesn't start with underscore)\n *\n * @example\n * isCircuitEvent('CREATE') // true\n * isCircuitEvent('SAVE') // true\n * isCircuitEvent('_INIT') // false (internal)\n * isCircuitEvent('_TICK') // false (internal)\n */\nexport function isCircuitEvent(event: string): boolean {\n return !event.startsWith('_');\n}\n","/**\n * Trait Types (Self-Contained)\n *\n * Defines trait types for behavioral patterns.\n * Self-contained - imports only from local orbital types.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { StateMachine } from './state-machine.js';\nimport { StateMachineSchema } from './state-machine.js';\nimport type { Effect } from './effect.js';\nimport { EffectSchema } from './effect.js';\nimport type { Expression } from './expression.js';\nimport { ExpressionSchema } from './expression.js';\n\n// ============================================================================\n// Trait Categories\n// ============================================================================\n\n/**\n * Categories for organizing traits\n */\nexport type TraitCategory =\n | 'lifecycle'\n | 'temporal'\n | 'validation'\n | 'notification'\n | 'integration'\n | 'interaction'\n | 'game-core'\n | 'game-character'\n | 'game-ai'\n | 'game-combat'\n | 'game-items'\n | 'game-cards'\n | 'game-board'\n | 'game-puzzle';\n\nexport const TraitCategorySchema = z.enum([\n 'lifecycle',\n 'temporal',\n 'validation',\n 'notification',\n 'integration',\n 'interaction',\n 'game-core',\n 'game-character',\n 'game-ai',\n 'game-combat',\n 'game-items',\n 'game-cards',\n 'game-board',\n 'game-puzzle',\n]);\n\n// ============================================================================\n// Trait Entity Field (simplified)\n// ============================================================================\n\n/**\n * Field types for trait data entities\n */\nexport type TraitFieldType = 'string' | 'number' | 'boolean' | 'date' | 'array' | 'object' | 'timestamp' | 'datetime' | 'enum';\n\n/**\n * Simplified field for trait data entities\n */\nexport interface TraitEntityField {\n name: string;\n type: TraitFieldType;\n required?: boolean;\n default?: unknown;\n values?: string[];\n}\n\nexport const TraitEntityFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum([\n 'string',\n 'number',\n 'boolean',\n 'date',\n 'array',\n 'object',\n 'timestamp',\n 'datetime',\n 'enum',\n ]),\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n values: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Trait Data Entity\n// ============================================================================\n\n/**\n * Simplified data entity for traits\n */\nexport interface TraitDataEntity {\n name: string;\n collection?: string;\n fields: TraitEntityField[];\n timestamps?: boolean;\n description?: string;\n runtime?: boolean;\n singleton?: boolean;\n pages?: string[];\n}\n\nexport const TraitDataEntitySchema = z.object({\n name: z.string().min(1),\n collection: z.string().optional(),\n fields: z.array(TraitEntityFieldSchema).min(1),\n timestamps: z.boolean().optional(),\n description: z.string().optional(),\n runtime: z.boolean().optional(),\n singleton: z.boolean().optional(),\n pages: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Trait Tick\n// ============================================================================\n\n/**\n * Tick rule for traits.\n * Guards can be legacy strings or S-expressions.\n * Effects can be typed Effect objects or S-expressions.\n */\nexport interface TraitTick {\n name: string;\n description?: string;\n priority?: number;\n interval: string | number;\n appliesTo?: string[];\n pages?: string[];\n /** Guard expression - string (legacy) or S-expression array */\n guard?: Expression;\n /** Effects to execute (S-expressions) */\n effects: Effect[];\n /**\n * Events this tick emits.\n * Must reference events defined in trait's emits array.\n * Used for validation and documentation.\n */\n emits?: string[];\n}\n\nexport const TraitTickSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n priority: z.number().optional(),\n interval: z.union([z.literal('frame'), z.number().positive()]),\n appliesTo: z.array(z.string()).optional(),\n pages: z.array(z.string()).optional(),\n guard: ExpressionSchema.optional(),\n effects: z.array(EffectSchema).min(1),\n emits: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Event Scope\n// ============================================================================\n\n/**\n * Event scope determines visibility:\n * - 'internal': Trait-to-trait within same orbital (default)\n * - 'external': Exposed for cross-orbital communication\n */\nexport type EventScope = 'internal' | 'external';\n\nexport const EventScopeSchema = z.enum(['internal', 'external']);\n\n// ============================================================================\n// Event Payload Field\n// ============================================================================\n\n/**\n * Payload field definition for events.\n * Defines the structure of data carried by events.\n */\nexport interface EventPayloadField {\n /** Field name */\n name: string;\n /** Field type */\n type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'entity';\n /** Whether field is required in payload */\n required?: boolean;\n /** Human-readable description */\n description?: string;\n /** For 'entity' type: the entity type name */\n entityType?: string;\n}\n\nexport const EventPayloadFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['string', 'number', 'boolean', 'object', 'array', 'entity']),\n required: z.boolean().optional(),\n description: z.string().optional(),\n entityType: z.string().optional(),\n});\n\n// ============================================================================\n// Trait Event Contract\n// ============================================================================\n\n/**\n * Event contract for events a trait emits.\n * Declares the event name, scope, and payload schema.\n */\nexport interface TraitEventContract {\n /** Event name (UPPER_SNAKE_CASE) */\n event: string;\n /** Human-readable description */\n description?: string;\n /** Payload schema - what data this event carries */\n payload?: EventPayloadField[];\n /**\n * Event scope:\n * - 'internal': Trait-to-trait within same orbital (default)\n * - 'external': Exposed for cross-orbital communication\n */\n scope?: EventScope;\n}\n\nexport const TraitEventContractSchema = z.object({\n event: z.string().min(1).regex(\n /^[A-Z][A-Z0-9_]*$/,\n 'Event name must be UPPER_SNAKE_CASE'\n ),\n description: z.string().optional(),\n payload: z.array(EventPayloadFieldSchema).optional(),\n scope: EventScopeSchema.optional(),\n});\n\n// ============================================================================\n// Trait Event Listener\n// ============================================================================\n\n/**\n * Event listener for trait communication.\n * Guards can be legacy strings or S-expressions.\n * Enhanced with scope and payloadMapping for cross-orbital communication.\n */\nexport interface TraitEventListener {\n /** Event key to listen for (may be namespaced: TraitName.EVENT_NAME) */\n event: string;\n /** State machine event to trigger */\n triggers: string;\n /** Guard expression - string (legacy) or S-expression array */\n guard?: Expression;\n /**\n * Listener scope:\n * - 'internal': Listen to events within same orbital (default)\n * - 'external': Listen to events from other orbitals\n */\n scope?: EventScope;\n /** Map event payload fields to transition payload */\n payloadMapping?: Record<string, string>;\n}\n\nexport const TraitEventListenerSchema = z.object({\n event: z.string().min(1),\n triggers: z.string().min(1),\n guard: ExpressionSchema.optional(),\n scope: EventScopeSchema.optional(),\n payloadMapping: z.record(z.string()).optional(),\n});\n\n// ============================================================================\n// Required Field\n// ============================================================================\n\n/**\n * Field required by a trait from its linkedEntity\n */\nexport interface RequiredField {\n name: string;\n type: 'string' | 'number' | 'boolean' | 'date' | 'array' | 'object' | 'timestamp' | 'datetime' | 'enum';\n description?: string;\n}\n\nexport const RequiredFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['string', 'number', 'boolean', 'date', 'array', 'object', 'timestamp', 'datetime', 'enum']),\n description: z.string().optional(),\n});\n\n// ============================================================================\n// Trait Reference\n// ============================================================================\n\n/**\n * Reference to a trait from an entity or page\n */\nexport interface TraitReference {\n ref: string;\n linkedEntity?: string;\n config?: Record<string, Record<string, unknown>>;\n appliesTo?: string[];\n}\n\nexport const TraitReferenceSchema = z.object({\n ref: z.string().min(1),\n linkedEntity: z.string().optional(),\n config: z.record(z.record(z.unknown())).optional(),\n appliesTo: z.array(z.string()).optional(),\n});\n\n/**\n * Simplified trait reference - supports string, reference object, or inline Trait definition\n * - string: \"TraitName\" - reference to a trait by name\n * - { ref: \"TraitName\" }: reference object with optional config\n * - { name: \"TraitName\", stateMachine: {...} }: inline trait definition\n */\nexport type TraitRef = string | { ref: string; config?: Record<string, unknown>; linkedEntity?: string } | Trait;\n\n// TraitRefSchema is defined after TraitSchema (see below) to avoid forward reference\n\n// ============================================================================\n// Trait UI Binding\n// ============================================================================\n\nexport type PresentationType = 'modal' | 'drawer' | 'popover' | 'inline' | 'confirm-dialog';\n\nexport interface TraitUIBinding {\n [stateName: string]: {\n presentation: PresentationType;\n content: Record<string, unknown> | Record<string, unknown>[];\n props?: {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n position?: 'left' | 'right' | 'top' | 'bottom' | 'center';\n title?: string;\n closable?: boolean;\n width?: string;\n showProgress?: boolean;\n step?: number;\n totalSteps?: number;\n };\n };\n}\n\n// ============================================================================\n// Trait Definition\n// ============================================================================\n\n/**\n * A Trait is a reusable behavioral module with state machine.\n *\n * Traits declare their event contracts via `emits` and `listens`:\n * - `emits`: Events this trait can emit (with scope and payload schema)\n * - `listens`: Events this trait listens for (with optional payloadMapping)\n */\nexport interface Trait {\n name: string;\n description?: string;\n description_visual_prompt?: string;\n category?: TraitCategory;\n /**\n * The entity this trait is linked to.\n * Required for inline trait definitions within an orbital.\n */\n linkedEntity?: string;\n requiredFields?: RequiredField[];\n dataEntities?: TraitDataEntity[];\n stateMachine?: StateMachine;\n initialEffects?: Effect[];\n ticks?: TraitTick[];\n /**\n * Events this trait emits.\n * Each event can be scoped as internal or external.\n * External events are namespaced at orbital level (TraitName.EVENT_NAME).\n */\n emits?: TraitEventContract[];\n /**\n * Events this trait listens for.\n * External listeners reference namespaced events (TraitName.EVENT_NAME).\n */\n listens?: TraitEventListener[];\n ui?: TraitUIBinding;\n}\n\nexport const TraitSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n description_visual_prompt: z.string().optional(),\n category: TraitCategorySchema.optional(),\n linkedEntity: z.string().optional(),\n requiredFields: z.array(RequiredFieldSchema).optional(),\n dataEntities: z.array(TraitDataEntitySchema).optional(),\n stateMachine: StateMachineSchema.optional(),\n initialEffects: z.array(EffectSchema).optional(),\n ticks: z.array(TraitTickSchema).optional(),\n emits: z.array(TraitEventContractSchema).optional(),\n listens: z.array(TraitEventListenerSchema).optional(),\n ui: z.record(z.unknown()).optional(),\n});\n\n// TraitRefSchema defined here after TraitSchema to avoid forward reference\nexport const TraitRefSchema = z.union([\n z.string().min(1),\n z.object({\n ref: z.string().min(1),\n config: z.record(z.unknown()).optional(),\n linkedEntity: z.string().optional(),\n }),\n TraitSchema, // Allow inline trait definitions\n]);\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Check if a trait ref is an inline Trait definition\n */\nexport function isInlineTrait(traitRef: TraitRef): traitRef is Trait {\n return typeof traitRef === 'object' && 'name' in traitRef && !('ref' in traitRef);\n}\n\n/**\n * Get trait name from a trait reference\n */\nexport function getTraitName(traitRef: TraitRef): string {\n if (typeof traitRef === 'string') {\n return traitRef;\n }\n if (isInlineTrait(traitRef)) {\n return traitRef.name;\n }\n return traitRef.ref;\n}\n\n/**\n * Get trait config from a trait reference\n */\nexport function getTraitConfig(traitRef: TraitRef): Record<string, unknown> | undefined {\n if (typeof traitRef === 'string') {\n return undefined;\n }\n if (isInlineTrait(traitRef)) {\n return undefined; // Inline traits don't have config\n }\n return traitRef.config;\n}\n\n/**\n * Normalize trait reference to object form\n */\nexport function normalizeTraitRef(traitRef: TraitRef): { ref: string; config?: Record<string, unknown> } {\n if (typeof traitRef === 'string') {\n return { ref: traitRef };\n }\n if (isInlineTrait(traitRef)) {\n return { ref: traitRef.name };\n }\n return traitRef;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type TraitInput = z.input<typeof TraitSchema>;\nexport type TraitReferenceInput = z.input<typeof TraitReferenceSchema>;\n\n// Backward compatibility aliases\nexport type OrbitalTraitRef = TraitRef;\nexport const OrbitalTraitRefSchema = TraitRefSchema;\n","/**\n * Domain Context Types (Self-Contained)\n *\n * Defines domain classification types for applications.\n * Copied from schema/domain-context.ts to make orbitals/ self-contained.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\n\n// ============================================================================\n// Domain Categories\n// ============================================================================\n\n/**\n * High-level domain categories\n */\nexport type DomainCategory =\n | \"healthcare\"\n | \"education\"\n | \"finance\"\n | \"ecommerce\"\n | \"real-estate\"\n | \"logistics\"\n | \"hospitality\"\n | \"hr-management\"\n | \"project-management\"\n | \"social\"\n | \"content-management\"\n | \"iot\"\n | \"analytics\"\n | \"game\"\n | \"custom\";\n\nexport const DomainCategorySchema = z.enum([\n \"healthcare\",\n \"education\",\n \"finance\",\n \"ecommerce\",\n \"real-estate\",\n \"logistics\",\n \"hospitality\",\n \"hr-management\",\n \"project-management\",\n \"social\",\n \"content-management\",\n \"iot\",\n \"analytics\",\n \"game\",\n \"custom\",\n]);\n\n// ============================================================================\n// Agent Domain Categories (simplified for LLM-based tools)\n// ============================================================================\n\n/**\n * Simplified domain categories used by the agent tools for application classification.\n * All agent tools and skill generators should derive from this constant.\n */\nexport const AGENT_DOMAIN_CATEGORIES = [\n \"game\",\n \"business\",\n \"dashboard\",\n \"form\",\n \"content\",\n \"social\",\n \"ecommerce\",\n \"workflow\",\n] as const;\n\nexport type AgentDomainCategory = (typeof AGENT_DOMAIN_CATEGORIES)[number];\n\nexport const AgentDomainCategorySchema = z.enum([...AGENT_DOMAIN_CATEGORIES]);\n\n// ============================================================================\n// Game Sub-Categories\n// ============================================================================\n\n/**\n * Game genre sub-categories\n */\nexport type GameSubCategory =\n | \"platformer\"\n | \"shooter\"\n | \"puzzle\"\n | \"rpg\"\n | \"board\"\n | \"racing\"\n | \"fighting\"\n | \"tower-defense\"\n | \"endless-runner\"\n | \"simulation\"\n | \"arcade\"\n | \"adventure\";\n\nexport const GameSubCategorySchema = z.enum([\n \"platformer\",\n \"shooter\",\n \"puzzle\",\n \"rpg\",\n \"board\",\n \"racing\",\n \"fighting\",\n \"tower-defense\",\n \"endless-runner\",\n \"simulation\",\n \"arcade\",\n \"adventure\",\n]);\n\n// ============================================================================\n// Node Classification\n// ============================================================================\n\n/**\n * Domain vs System classification\n */\nexport type NodeClassification = \"domain\" | \"system\";\n\nexport const NodeClassificationSchema = z.enum([\"domain\", \"system\"]);\n\n// ============================================================================\n// Semantic Roles\n// ============================================================================\n\nexport type StateSemanticRole =\n | \"pending\"\n | \"active\"\n | \"completed\"\n | \"cancelled\"\n | \"error\"\n | \"suspended\"\n | \"blocked\"\n | \"domain_workflow\"\n | \"domain_status\"\n | \"system_loading\"\n | \"system_error\"\n | \"system_idle\"\n | \"system_editing\"\n | \"system_confirming\";\n\nexport const StateSemanticRoleSchema = z.enum([\n \"pending\",\n \"active\",\n \"completed\",\n \"cancelled\",\n \"error\",\n \"suspended\",\n \"blocked\",\n \"domain_workflow\",\n \"domain_status\",\n \"system_loading\",\n \"system_error\",\n \"system_idle\",\n \"system_editing\",\n \"system_confirming\",\n]);\n\nexport type EventSemanticRole =\n | \"domain_action\"\n | \"domain_trigger\"\n | \"system_crud\"\n | \"system_navigation\"\n | \"system_form\"\n | \"system_ui\";\n\nexport const EventSemanticRoleSchema = z.enum([\n \"domain_action\",\n \"domain_trigger\",\n \"system_crud\",\n \"system_navigation\",\n \"system_form\",\n \"system_ui\",\n]);\n\nexport type EntitySemanticRole =\n | \"domain_core\"\n | \"domain_supporting\"\n | \"domain_reference\"\n | \"system_user\"\n | \"system_config\"\n | \"system_audit\";\n\nexport const EntitySemanticRoleSchema = z.enum([\n \"domain_core\",\n \"domain_supporting\",\n \"domain_reference\",\n \"system_user\",\n \"system_config\",\n \"system_audit\",\n]);\n\n// ============================================================================\n// Domain Vocabulary\n// ============================================================================\n\n/**\n * Domain-specific vocabulary for naming conventions.\n * Maps generic terms to domain-appropriate labels.\n */\nexport interface DomainVocabulary {\n /** Label for items (e.g., \"Task\", \"Cargo\", \"Patient\") */\n item?: string;\n /** Label for collections (e.g., \"Tasks\", \"Inventory\", \"Patients\") */\n collection?: string;\n /** Label for create action (e.g., \"Add\", \"Recruit\", \"Admit\") */\n create?: string;\n /** Label for delete action (e.g., \"Remove\", \"Discharge\", \"Archive\") */\n delete?: string;\n /** Label for container (e.g., \"List\", \"Hold\", \"Ward\") */\n container?: string;\n /** Additional custom vocabulary */\n [key: string]: string | undefined;\n}\n\nexport const DomainVocabularySchema = z\n .record(z.string(), z.string())\n .optional();\n\n// ============================================================================\n// Domain Context (Simplified for Design System)\n// ============================================================================\n\n/**\n * User persona for UX decisions\n */\nexport interface UserPersona {\n /** Persona name */\n name: string;\n /** Role for RBAC */\n role?: string;\n /** Primary device */\n device?: \"mobile\" | \"tablet\" | \"desktop\";\n}\n\nexport const UserPersonaSchema = z.object({\n name: z.string().min(1),\n role: z.string().optional(),\n device: z.enum([\"mobile\", \"tablet\", \"desktop\"]).optional(),\n});\n\n/**\n * Domain context - user request + classification\n */\nexport interface DomainContext {\n /** Original user request - verbatim (typically at schema level) */\n request: string;\n /**\n * The verbatim excerpt or summary of the user request that produced THIS orbital.\n *\n * Purpose: Traceability - know exactly what the user asked for that led to this orbital.\n *\n * Can be:\n * - Exact quote: \"...with a calendar that syncs with Google Calendar...\"\n * - Summarized: \"Calendar integration with Google Calendar sync\"\n *\n * Examples:\n * - Request: \"Build a project management app with tasks, team collaboration, and Gantt charts\"\n * - Task orbital: requestFragment: \"tasks\"\n * - Team orbital: requestFragment: \"team collaboration\"\n * - Timeline orbital: requestFragment: \"Gantt charts\"\n *\n * This enables:\n * - Understanding WHY this orbital exists\n * - Regenerating with original context preserved\n * - Validating the orbital matches user intent\n */\n requestFragment?: string;\n /** Domain category */\n category: AgentDomainCategory;\n /** Sub-domain for more specific classification */\n subDomain?: string;\n /** User personas */\n personas?: UserPersona[];\n /** Domain-specific vocabulary for naming */\n vocabulary?: DomainVocabulary;\n}\n\nexport const DomainContextSchema = z.object({\n request: z.string().min(1, \"Original request is required\"),\n requestFragment: z.string().optional(),\n category: AgentDomainCategorySchema,\n subDomain: z.string().optional(),\n personas: z.array(UserPersonaSchema).optional(),\n vocabulary: DomainVocabularySchema.optional(),\n});\n\n// ============================================================================\n// UX Hints\n// ============================================================================\n\n/**\n * UX hints for guiding UI generation.\n * These inform pattern selection and layout decisions.\n */\n/**\n * UX hints for guiding UI generation.\n * These inform pattern selection and layout decisions.\n *\n * Note: These are HINTS, not strict requirements. LLMs may use any string value\n * including 'dashboard-grid', 'none', etc. The subagent generator interprets these\n * flexibly to produce appropriate render-ui effects.\n */\nexport interface UXHints {\n /** Overall user flow pattern (e.g., 'hub-spoke', 'crud-cycle', 'linear') */\n flowPattern?: string;\n /** Pattern for displaying lists (e.g., 'entity-table', 'entity-cards', 'dashboard-grid', 'none') */\n listPattern?: string;\n /** Pattern for create/edit forms (e.g., 'modal', 'drawer', 'page', 'none') */\n formPattern?: string;\n /** Pattern for entity detail views (e.g., 'drawer', 'page', 'split', 'none') */\n detailPattern?: string;\n /** Cross-orbital navigation links */\n relatedLinks?: RelatedLink[];\n}\n\n// UX hints use flexible string types - they are guidance, not strict validation\nexport const UXHintsSchema = z.object({\n flowPattern: z.string().optional(),\n listPattern: z.string().optional(),\n formPattern: z.string().optional(),\n detailPattern: z.string().optional(),\n relatedLinks: z.array(z.lazy(() => RelatedLinkSchema)).optional(),\n});\n\n/**\n * Related link for cross-orbital navigation.\n */\nexport interface RelatedLink {\n /** Field name of the relation (e.g., \"customerId\") */\n relation: string;\n /** Button/link text (e.g., \"View Customer\") */\n label: string;\n /** Target view type */\n targetView?: \"list\" | \"detail\";\n}\n\nexport const RelatedLinkSchema = z.object({\n relation: z.string().min(1),\n label: z.string().min(1),\n targetView: z.enum([\"list\", \"detail\"]).optional(),\n});\n\n// ============================================================================\n// Suggested Guards (Pre-Generation)\n// ============================================================================\n\n/**\n * Suggested guard - natural language description for decomposition phase.\n * Generator converts these to S-expressions during generation.\n */\nexport interface SuggestedGuard {\n /** Unique identifier */\n id: string;\n /** Natural language description (e.g., \"Weight must be under 1000kg\") */\n description: string;\n /** Events this guard applies to (e.g., [\"Cargo.CREATE\", \"Cargo.UPDATE\"]) */\n appliesTo: string[];\n}\n\nexport const SuggestedGuardSchema = z.object({\n id: z.string().min(1),\n description: z.string().min(1),\n appliesTo: z.array(z.string().min(1)),\n});\n\n// ============================================================================\n// Design Preferences\n// ============================================================================\n\n/**\n * Design preferences for visual styling\n */\nexport interface DesignPreferences {\n /** Design style */\n style?: \"minimal\" | \"modern\" | \"playful\" | \"data-driven\" | \"immersive\";\n /** Primary color (hex) */\n primaryColor?: string;\n /** Target device */\n device?: \"mobile\" | \"tablet\" | \"desktop\" | \"all\";\n /** Dark mode */\n darkMode?: boolean;\n /** UX hints for pattern selection */\n uxHints?: UXHints;\n}\n\nexport const DesignPreferencesSchema = z.object({\n style: z\n .enum([\"minimal\", \"modern\", \"playful\", \"data-driven\", \"immersive\"])\n .optional(),\n primaryColor: z\n .string()\n .regex(/^#[0-9A-Fa-f]{6}$/, \"Must be valid hex color\")\n .optional(),\n device: z.enum([\"mobile\", \"tablet\", \"desktop\", \"all\"]).optional(),\n darkMode: z.boolean().optional(),\n uxHints: UXHintsSchema.optional(),\n});\n\n// ============================================================================\n// Theme Definition\n// ============================================================================\n\n/**\n * Theme tokens - CSS custom properties for design system.\n */\nexport interface ThemeTokens {\n /** Color tokens (e.g., primary, background, foreground) */\n colors?: Record<string, string>;\n /** Border radius tokens */\n radii?: Record<string, string>;\n /** Spacing tokens */\n spacing?: Record<string, string>;\n /** Typography tokens */\n typography?: Record<string, string>;\n /** Shadow tokens */\n shadows?: Record<string, string>;\n}\n\nexport const ThemeTokensSchema = z.object({\n colors: z.record(z.string(), z.string()).optional(),\n radii: z.record(z.string(), z.string()).optional(),\n spacing: z.record(z.string(), z.string()).optional(),\n typography: z.record(z.string(), z.string()).optional(),\n shadows: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Theme variant - overrides for a specific mode (e.g., dark mode).\n */\nexport interface ThemeVariant {\n /** Color overrides */\n colors?: Record<string, string>;\n /** Radius overrides */\n radii?: Record<string, string>;\n /** Spacing overrides */\n spacing?: Record<string, string>;\n /** Typography overrides */\n typography?: Record<string, string>;\n /** Shadow overrides */\n shadows?: Record<string, string>;\n}\n\nexport const ThemeVariantSchema = z.object({\n colors: z.record(z.string(), z.string()).optional(),\n radii: z.record(z.string(), z.string()).optional(),\n spacing: z.record(z.string(), z.string()).optional(),\n typography: z.record(z.string(), z.string()).optional(),\n shadows: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Theme definition - design system for an orbital.\n */\nexport interface ThemeDefinition {\n /** Theme name */\n name: string;\n /** Base tokens */\n tokens: ThemeTokens;\n /** Named variants (e.g., \"dark\", \"high-contrast\") */\n variants?: Record<string, ThemeVariant>;\n}\n\nexport const ThemeDefinitionSchema = z.object({\n name: z.string().min(1, \"Theme name is required\"),\n tokens: ThemeTokensSchema,\n variants: z.record(z.string(), ThemeVariantSchema).optional(),\n});\n\n/**\n * ThemeRef - Theme can be inline definition OR reference to imported theme.\n *\n * Reference format: \"Alias.theme\"\n */\nexport type ThemeRef = ThemeDefinition | string;\n\n/**\n * Check if ThemeRef is a reference string.\n */\nexport function isThemeReference(theme: ThemeRef): theme is string {\n return typeof theme === \"string\";\n}\n\n/**\n * Validate theme reference format: \"Alias.theme\"\n */\nexport const ThemeRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.theme$/,\n 'Theme reference must be in format \"Alias.theme\" (e.g., \"Ocean.theme\")',\n );\n\nexport const ThemeRefSchema = z.union([\n ThemeDefinitionSchema,\n ThemeRefStringSchema,\n]);\n\n// ============================================================================\n// Design Tokens (Legacy)\n// ============================================================================\n\n/**\n * Design tokens - reusable Tailwind class collections.\n * @deprecated Use ThemeDefinition instead for new code.\n *\n * Instead of repeating raw Tailwind classes everywhere, define once and reference by name.\n * Example: `token: \"surfaces.glass\"` resolves to the Tailwind classes defined here.\n */\nexport interface DesignTokens {\n /** Surface styles: backgrounds, borders, shadows */\n surfaces?: Record<string, string>;\n /** Text styles: typography, colors */\n text?: Record<string, string>;\n /** Interactive element styles: buttons, links */\n interactive?: Record<string, string>;\n /** Effect styles: shadows, animations, transitions */\n effects?: Record<string, string>;\n /** Additional custom categories */\n [category: string]: Record<string, string> | undefined;\n}\n\nexport const DesignTokensSchema = z\n .record(z.string(), z.record(z.string(), z.string()))\n .optional();\n\n// ============================================================================\n// Custom Pattern Definitions\n// ============================================================================\n\n/**\n * Allowed HTML elements for custom patterns.\n * These are safe, semantic elements for building custom UIs.\n */\nexport const ALLOWED_CUSTOM_COMPONENTS = [\n \"div\",\n \"span\",\n \"button\",\n \"a\",\n \"p\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"header\",\n \"footer\",\n \"section\",\n \"article\",\n \"nav\",\n \"main\",\n \"aside\",\n \"ul\",\n \"ol\",\n \"li\",\n \"img\",\n \"label\",\n \"input\",\n \"form\",\n] as const;\n\nexport type AllowedCustomComponent = (typeof ALLOWED_CUSTOM_COMPONENTS)[number];\n\n/**\n * Custom pattern definition for app-specific reusable patterns.\n *\n * Register custom designs that can be referenced by name throughout the schema.\n */\nexport interface CustomPatternDefinition {\n /** Always 'custom' for custom patterns */\n type: \"custom\";\n /** HTML element to render */\n component: AllowedCustomComponent;\n /** Base Tailwind classes (can include {prop} placeholders) */\n className: string;\n /** Named content slots for nested content */\n slots?: string[];\n /** Configurable props that can be passed when using the pattern */\n props?: string[];\n}\n\nexport const CustomPatternDefinitionSchema = z.object({\n type: z.literal(\"custom\"),\n component: z.enum(ALLOWED_CUSTOM_COMPONENTS),\n className: z.string(),\n slots: z.array(z.string()).optional(),\n props: z.array(z.string()).optional(),\n});\n\n/**\n * Map of custom pattern names to their definitions.\n */\nexport type CustomPatternMap = Record<string, CustomPatternDefinition>;\n\nexport const CustomPatternMapSchema = z\n .record(z.string(), CustomPatternDefinitionSchema)\n .optional();\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type DomainContextInput = z.input<typeof DomainContextSchema>;\nexport type DesignPreferencesInput = z.input<typeof DesignPreferencesSchema>;\nexport type UserPersonaInput = z.input<typeof UserPersonaSchema>;\nexport type DesignTokensInput = z.input<typeof DesignTokensSchema>;\nexport type CustomPatternDefinitionInput = z.input<\n typeof CustomPatternDefinitionSchema\n>;\nexport type CustomPatternMapInput = z.input<typeof CustomPatternMapSchema>;\n","/**\n * Service Types for Orbital Schema\n *\n * Defines external service integrations (REST APIs, WebSockets, MCP servers)\n * that can be used by orbital units via the `call_service` effect.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\n\n// ============================================================================\n// Service Type Enum\n// ============================================================================\n\n/**\n * Types of external services that can be integrated.\n */\nexport const SERVICE_TYPES = [\"rest\", \"socket\", \"mcp\"] as const;\n\nexport type ServiceType = (typeof SERVICE_TYPES)[number];\n\nexport const ServiceTypeSchema = z.enum(SERVICE_TYPES);\n\n// ============================================================================\n// REST Service Definition\n// ============================================================================\n\n/**\n * Configuration for a REST API service.\n *\n * @example\n * ```typescript\n * const weatherService: RestServiceDef = {\n * name: 'WeatherAPI',\n * type: 'rest',\n * baseUrl: 'https://api.openweathermap.org/data/2.5',\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * auth: {\n * type: 'api-key',\n * keyName: 'appid',\n * location: 'query',\n * },\n * };\n * ```\n */\nexport interface RestServiceDef {\n /** Unique service name (used in call_service effect) */\n name: string;\n\n /** Service type */\n type: \"rest\";\n\n /** Optional description */\n description?: string;\n\n /** Base URL for the API */\n baseUrl: string;\n\n /** Default headers to include in all requests */\n headers?: Record<string, string>;\n\n /** Authentication configuration */\n auth?: RestAuthConfig;\n\n /** Timeout in milliseconds (default: 30000) */\n timeout?: number;\n}\n\n/**\n * Authentication configuration for REST services.\n */\nexport interface RestAuthConfig {\n /** Authentication type */\n type: \"api-key\" | \"bearer\" | \"basic\" | \"oauth2\";\n\n /** For api-key: the query parameter or header name */\n keyName?: string;\n\n /** For api-key: where to place the key */\n location?: \"query\" | \"header\";\n\n /** Environment variable name containing the secret (for secure storage) */\n secretEnv?: string;\n}\n\nexport const RestAuthConfigSchema = z.object({\n type: z.enum([\"api-key\", \"bearer\", \"basic\", \"oauth2\"]),\n keyName: z.string().optional(),\n location: z.enum([\"query\", \"header\"]).optional(),\n secretEnv: z.string().optional(),\n});\n\nexport const RestServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"rest\"),\n description: z.string().optional(),\n baseUrl: z.string().url(\"Base URL must be a valid URL\"),\n headers: z.record(z.string()).optional(),\n auth: RestAuthConfigSchema.optional(),\n timeout: z.number().positive().optional(),\n});\n\n// ============================================================================\n// Socket Service Definition\n// ============================================================================\n\n/**\n * Configuration for a WebSocket service.\n *\n * @example\n * ```typescript\n * const chatService: SocketServiceDef = {\n * name: 'ChatSocket',\n * type: 'socket',\n * url: 'wss://chat.example.com',\n * events: {\n * inbound: ['message_received', 'user_joined', 'user_left'],\n * outbound: ['send_message', 'join_room', 'leave_room'],\n * },\n * };\n * ```\n */\nexport interface SocketServiceDef {\n /** Unique service name */\n name: string;\n\n /** Service type */\n type: \"socket\";\n\n /** Optional description */\n description?: string;\n\n /** WebSocket URL */\n url: string;\n\n /** Event definitions */\n events: SocketEvents;\n\n /** Reconnection configuration */\n reconnect?: {\n /** Enable automatic reconnection */\n enabled: boolean;\n /** Maximum reconnection attempts */\n maxAttempts?: number;\n /** Delay between attempts in ms */\n delayMs?: number;\n };\n}\n\n/**\n * Socket event definitions.\n */\nexport interface SocketEvents {\n /** Events received from server (maps to orbital events) */\n inbound: string[];\n\n /** Events sent to server (triggered by effects) */\n outbound: string[];\n}\n\nexport const SocketEventsSchema = z.object({\n inbound: z.array(z.string()),\n outbound: z.array(z.string()),\n});\n\nexport const SocketServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"socket\"),\n description: z.string().optional(),\n url: z.string().url(\"WebSocket URL must be valid\"),\n events: SocketEventsSchema,\n reconnect: z\n .object({\n enabled: z.boolean(),\n maxAttempts: z.number().positive().optional(),\n delayMs: z.number().positive().optional(),\n })\n .optional(),\n});\n\n// ============================================================================\n// MCP Service Definition\n// ============================================================================\n\n/**\n * Configuration for an MCP (Model Context Protocol) server.\n *\n * @example\n * ```typescript\n * const mcpService: McpServiceDef = {\n * name: 'DatabaseMCP',\n * type: 'mcp',\n * serverPath: './mcp-servers/database',\n * capabilities: ['query', 'insert', 'update'],\n * };\n * ```\n */\nexport interface McpServiceDef {\n /** Unique service name */\n name: string;\n\n /** Service type */\n type: \"mcp\";\n\n /** Optional description */\n description?: string;\n\n /** Path to MCP server executable or module */\n serverPath: string;\n\n /** List of capabilities/tools exposed by the MCP server */\n capabilities: string[];\n\n /** Environment variables to pass to the MCP server */\n env?: Record<string, string>;\n}\n\nexport const McpServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"mcp\"),\n description: z.string().optional(),\n serverPath: z.string().min(1, \"Server path is required\"),\n capabilities: z\n .array(z.string())\n .min(1, \"At least one capability is required\"),\n env: z.record(z.string()).optional(),\n});\n\n// ============================================================================\n// Union Type: ServiceDefinition\n// ============================================================================\n\n/**\n * Union type for all service definitions.\n */\nexport type ServiceDefinition =\n | RestServiceDef\n | SocketServiceDef\n | McpServiceDef;\n\nexport const ServiceDefinitionSchema = z.discriminatedUnion(\"type\", [\n RestServiceDefSchema,\n SocketServiceDefSchema,\n McpServiceDefSchema,\n]);\n\n// ============================================================================\n// Service Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * ServiceRef - Service can be inline definition OR reference to imported service.\n *\n * Reference format: \"Alias.services.ServiceName\"\n */\nexport type ServiceRef = ServiceDefinition | string;\n\n/**\n * Check if ServiceRef is a reference string.\n */\nexport function isServiceReference(service: ServiceRef): service is string {\n return typeof service === \"string\";\n}\n\n/**\n * Validate service reference format: \"Alias.services.ServiceName\"\n */\nexport const ServiceRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.services\\.[a-zA-Z][a-zA-Z0-9]*$/,\n 'Service reference must be in format \"Alias.services.ServiceName\" (e.g., \"Weather.services.openweather\")',\n );\n\nexport const ServiceRefSchema = z.union([\n ServiceDefinitionSchema,\n ServiceRefStringSchema,\n]);\n\n/**\n * Parse a service reference.\n * @returns { alias, serviceName } or null if not a valid reference\n */\nexport function parseServiceRef(\n ref: string,\n): { alias: string; serviceName: string } | null {\n const match = ref.match(\n /^([A-Z][a-zA-Z0-9]*)\\.services\\.([a-zA-Z][a-zA-Z0-9]*)$/,\n );\n if (!match) return null;\n return { alias: match[1], serviceName: match[2] };\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Check if a service definition is a REST service.\n */\nexport function isRestService(\n service: ServiceDefinition,\n): service is RestServiceDef {\n return service.type === \"rest\";\n}\n\n/**\n * Check if a service definition is a Socket service.\n */\nexport function isSocketService(\n service: ServiceDefinition,\n): service is SocketServiceDef {\n return service.type === \"socket\";\n}\n\n/**\n * Check if a service definition is an MCP service.\n */\nexport function isMcpService(\n service: ServiceDefinition,\n): service is McpServiceDef {\n return service.type === \"mcp\";\n}\n\n/**\n * Get all service names from a list of services.\n */\nexport function getServiceNames(services: ServiceDefinition[]): string[] {\n return services.map((s) => s.name);\n}\n\n/**\n * Find a service by name.\n */\nexport function findService(\n services: ServiceDefinition[],\n name: string,\n): ServiceDefinition | undefined {\n return services.find((s) => s.name.toLowerCase() === name.toLowerCase());\n}\n\n/**\n * Check if a service name exists (case-insensitive).\n */\nexport function hasService(\n services: ServiceDefinition[],\n name: string,\n): boolean {\n return services.some((s) => s.name.toLowerCase() === name.toLowerCase());\n}\n","/**\n * Orbital Type (Self-Contained)\n *\n * Defines the Orbital - the atomic building block of applications.\n * Formula: Orbital = Entity × Traits × Pages\n *\n * An Orbital is a module that exports { entity, traits, pages }.\n * Use `uses` to import other Orbitals and access their components via:\n * - Alias.entity\n * - Alias.traits.TraitName\n * - Alias.pages.PageName\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { Entity } from \"./entity.js\";\nimport { EntitySchema } from \"./entity.js\";\nimport type { Page } from \"./page.js\";\nimport { PageSchema } from \"./page.js\";\nimport type {\n TraitRef,\n EventPayloadField,\n EventScope,\n Trait,\n} from \"./trait.js\";\nimport {\n TraitRefSchema,\n EventPayloadFieldSchema,\n EventScopeSchema,\n TraitSchema,\n} from \"./trait.js\";\nimport type {\n DomainContext,\n DesignPreferences,\n SuggestedGuard,\n ThemeRef,\n} from \"./domain.js\";\nimport {\n DomainContextSchema,\n DesignPreferencesSchema,\n SuggestedGuardSchema,\n ThemeRefSchema,\n} from \"./domain.js\";\nimport type { ServiceRef } from \"./service.js\";\nimport { ServiceRefSchema } from \"./service.js\";\nimport type { Expression } from \"./expression.js\";\nimport { ExpressionSchema } from \"./expression.js\";\n\n// ============================================================================\n// Use Declaration (Import System)\n// ============================================================================\n\n/**\n * UseDeclaration - Import an external Orbital as a namespace.\n *\n * After importing, access components via:\n * - Alias.entity - The entity definition\n * - Alias.traits.TraitName - A specific trait\n * - Alias.pages.PageName - A specific page\n *\n * @example\n * ```json\n * {\n * \"uses\": [\n * { \"from\": \"./health.orb\", \"as\": \"Health\" },\n * { \"from\": \"std/behaviors/game-core\", \"as\": \"GameCore\" }\n * ]\n * }\n * ```\n */\nexport interface UseDeclaration {\n /**\n * Import source path:\n * - \"std/behaviors/game-core\" - Standard library\n * - \"./shared/health.orb\" - Local .orb file (relative path)\n * - \"../common/physics.orb\" - Parent directory .orb file\n * - \"@game-lib/enemies.orb\" - Scoped package (configured base)\n */\n from: string;\n\n /**\n * Alias for accessing imported components.\n * Used as namespace: Alias.entity, Alias.traits.X, Alias.pages.X\n */\n as: string;\n}\n\nexport const UseDeclarationSchema = z.object({\n from: z.string().min(1, \"Import source is required\"),\n as: z\n .string()\n .min(1, \"Alias is required\")\n .regex(\n /^[A-Z][a-zA-Z0-9]*$/,\n 'Alias must be PascalCase (e.g., \"Health\", \"GameCore\")',\n ),\n});\n\n// ============================================================================\n// Entity Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * EntityRef - Entity can be inline definition OR reference to imported entity.\n *\n * Reference format: \"Alias.entity\"\n *\n * @example\n * ```json\n * // Inline\n * { \"entity\": { \"name\": \"Player\", \"fields\": [...] } }\n *\n * // Reference\n * { \"entity\": \"Goblin.entity\" }\n * ```\n */\nexport type EntityRef = Entity | string;\n\n/**\n * Check if EntityRef is a reference string.\n */\nexport function isEntityReference(entity: EntityRef): entity is string {\n return typeof entity === \"string\";\n}\n\n/**\n * Validate entity reference format: \"Alias.entity\"\n */\nexport const EntityRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.entity$/,\n 'Entity reference must be in format \"Alias.entity\" (e.g., \"Goblin.entity\")',\n );\n\nexport const EntityRefSchema = z.union([EntitySchema, EntityRefStringSchema]);\n\n// ============================================================================\n// Page Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * PageRefObject - Reference to imported page with optional path override.\n */\nexport interface PageRefObject {\n /**\n * Reference to imported page: \"Alias.pages.PageName\"\n */\n ref: string;\n\n /**\n * Optional path override.\n * If provided, overrides the original page's path.\n */\n path?: string;\n}\n\n/**\n * PageRef - Page can be inline definition OR reference to imported page.\n *\n * Reference formats:\n * - \"Alias.pages.PageName\" - Simple reference (keeps original path)\n * - { ref: \"Alias.pages.PageName\", path: \"/custom\" } - Reference with path override\n *\n * @example\n * ```json\n * // Inline\n * { \"name\": \"Dashboard\", \"path\": \"/\", ... }\n *\n * // Simple reference\n * \"User.pages.Profile\"\n *\n * // Reference with path override\n * { \"ref\": \"User.pages.Profile\", \"path\": \"/my-profile\" }\n * ```\n */\nexport type PageRef = Page | string | PageRefObject;\n\n/**\n * Check if PageRef is a reference string.\n */\nexport function isPageReferenceString(page: PageRef): page is string {\n return typeof page === \"string\";\n}\n\n/**\n * Check if PageRef is a reference object.\n */\nexport function isPageReferenceObject(page: PageRef): page is PageRefObject {\n return typeof page === \"object\" && \"ref\" in page && !(\"name\" in page);\n}\n\n/**\n * Check if PageRef is a reference (string or object).\n */\nexport function isPageReference(page: PageRef): page is string | PageRefObject {\n return isPageReferenceString(page) || isPageReferenceObject(page);\n}\n\n/**\n * Validate page reference format: \"Alias.pages.PageName\"\n */\nexport const PageRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.pages\\.[A-Z][a-zA-Z0-9]*$/,\n 'Page reference must be in format \"Alias.pages.PageName\" (e.g., \"User.pages.Profile\")',\n );\n\nexport const PageRefObjectSchema = z.object({\n ref: PageRefStringSchema,\n path: z.string().startsWith(\"/\").optional(),\n});\n\nexport const PageRefSchema = z.union([\n PageSchema,\n PageRefStringSchema,\n PageRefObjectSchema,\n]);\n\n// ============================================================================\n// Trait Reference Extensions\n// ============================================================================\n\n/**\n * Extended trait reference format for imported traits.\n *\n * Formats:\n * - \"TraitName\" - Local trait (inline or from uses without alias)\n * - \"Alias.traits.TraitName\" - Imported trait with namespace\n *\n * The existing TraitRef type already supports these via string.\n */\n\n/**\n * Validate trait reference format for imported traits.\n */\nexport const ImportedTraitRefStringSchema = z\n .string()\n .regex(\n /^([A-Z][a-zA-Z0-9]*\\.traits\\.)?[A-Z][a-zA-Z0-9]*$/,\n 'Trait reference must be \"TraitName\" or \"Alias.traits.TraitName\"',\n );\n\n/**\n * Check if a trait reference is an imported reference (has Alias.traits. prefix)\n */\nexport function isImportedTraitRef(ref: string): boolean {\n return /^[A-Z][a-zA-Z0-9]*\\.traits\\.[A-Z][a-zA-Z0-9]*$/.test(ref);\n}\n\n/**\n * Parse an imported trait reference.\n * @returns { alias, traitName } or null if not an imported ref\n */\nexport function parseImportedTraitRef(\n ref: string,\n): { alias: string; traitName: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.traits\\.([A-Z][a-zA-Z0-9]*)$/);\n if (!match) return null;\n return { alias: match[1], traitName: match[2] };\n}\n\n/**\n * Parse an entity reference.\n * @returns { alias } or null if not a valid reference\n */\nexport function parseEntityRef(ref: string): { alias: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.entity$/);\n if (!match) return null;\n return { alias: match[1] };\n}\n\n/**\n * Parse a page reference.\n * @returns { alias, pageName } or null if not a valid reference\n */\nexport function parsePageRef(\n ref: string,\n): { alias: string; pageName: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.pages\\.([A-Z][a-zA-Z0-9]*)$/);\n if (!match) return null;\n return { alias: match[1], pageName: match[2] };\n}\n\n// ============================================================================\n// Event Listener (Legacy)\n// ============================================================================\n\n/**\n * Event listener for cross-orbital communication (legacy format).\n * @deprecated Use trait-level listens with scope instead.\n */\nexport interface EventListener {\n /** Event key to listen for */\n event: string;\n /** Action to trigger */\n triggers: string;\n /** Optional guard condition */\n guard?: string;\n}\n\nexport const EventListenerSchema = z.object({\n event: z.string().min(1),\n triggers: z.string().min(1),\n guard: z.string().optional(),\n});\n\n// ============================================================================\n// Computed Event Contract (Trait-Centric Model)\n// ============================================================================\n\n/**\n * Source of an event - which trait/transition/tick emits it.\n */\nexport interface EventSource {\n /** Trait that emits this event */\n trait: string;\n /** Transition that emits this event (if applicable) */\n transition?: string;\n /** Tick that emits this event (if applicable) */\n tick?: string;\n}\n\nexport const EventSourceSchema = z.object({\n trait: z.string().min(1),\n transition: z.string().optional(),\n tick: z.string().optional(),\n});\n\n/**\n * Computed event contract with source tracking.\n * Generated by aggregating trait-level emits with namespacing.\n */\nexport interface ComputedEventContract {\n /** Namespaced event: \"TraitName.EVENT_NAME\" */\n event: string;\n /** Original event name without namespace */\n originalEvent: string;\n /** Source trait that emits this event */\n source: EventSource;\n /** Human-readable description */\n description?: string;\n /** Payload schema */\n payload?: EventPayloadField[];\n}\n\nexport const ComputedEventContractSchema = z.object({\n event: z.string().min(1),\n originalEvent: z.string().min(1),\n source: EventSourceSchema,\n description: z.string().optional(),\n payload: z.array(EventPayloadFieldSchema).optional(),\n});\n\n/**\n * Computed event listener with source tracking.\n * Generated by aggregating trait-level listens.\n */\nexport interface ComputedEventListener {\n /** Event to listen for (may be namespaced) */\n event: string;\n /** Source trait that defines this listener */\n source: EventSource;\n /** State machine event to trigger */\n triggers: string;\n /** Guard expression */\n guard?: Expression;\n /** Payload field mapping */\n payloadMapping?: Record<string, string>;\n}\n\nexport const ComputedEventListenerSchema = z.object({\n event: z.string().min(1),\n source: EventSourceSchema,\n triggers: z.string().min(1),\n guard: ExpressionSchema.optional(),\n payloadMapping: z.record(z.string()).optional(),\n});\n\n// ============================================================================\n// Orbital\n// ============================================================================\n\n/**\n * Orbital - The atomic building block of applications.\n *\n * Formula: Orbital = Entity × Traits × Pages\n *\n * An orbital is a self-contained feature unit that groups:\n * - One entity (the data nucleus) - inline OR referenced via \"Alias.entity\"\n * - Zero or more traits (behavioral patterns) - inline OR referenced via \"Alias.traits.X\"\n * - Zero or more pages (UI entry points) - inline OR referenced via \"Alias.pages.X\"\n *\n * Use `uses` to import other orbitals and access their components.\n */\nexport type Orbital = OrbitalDefinition;\n\nexport interface OrbitalDefinition {\n /** Human-readable name */\n name: string;\n\n /** Optional description */\n description?: string;\n\n /** Visual prompt override */\n visual_prompt?: string;\n\n // ========================================================================\n // Import System (Unified Reference)\n // ========================================================================\n\n /**\n * Import external orbitals as namespaces.\n *\n * After importing, access components via:\n * - Alias.entity - The entity definition\n * - Alias.traits.TraitName - A specific trait\n * - Alias.pages.PageName - A specific page\n * - Alias.theme - The theme definition\n * - Alias.services.ServiceName - A specific service\n *\n * @example\n * ```json\n * \"uses\": [\n * { \"from\": \"./health.orb\", \"as\": \"Health\" },\n * { \"from\": \"std/behaviors/game-core\", \"as\": \"GameCore\" }\n * ]\n * ```\n */\n uses?: UseDeclaration[];\n\n // ========================================================================\n // Theme & Services\n // ========================================================================\n\n /**\n * Theme definition (inline OR reference via \"Alias.theme\").\n *\n * @example\n * ```json\n * // Inline\n * \"theme\": { \"name\": \"ocean\", \"tokens\": { \"colors\": { \"primary\": \"#0ea5e9\" } } }\n *\n * // Reference\n * \"theme\": \"Ocean.theme\"\n * ```\n */\n theme?: ThemeRef;\n\n /**\n * Service definitions (inline OR reference via \"Alias.services.ServiceName\").\n *\n * @example\n * ```json\n * // Inline\n * \"services\": [{ \"name\": \"weather\", \"type\": \"rest\", \"baseUrl\": \"...\" }]\n *\n * // Reference\n * \"services\": [\"Weather.services.openweather\"]\n * ```\n */\n services?: ServiceRef[];\n\n // ========================================================================\n // Components (Inline OR Reference)\n // ========================================================================\n\n /**\n * Entity definition (nucleus).\n *\n * Can be:\n * - Inline: Full entity definition\n * - Reference: \"Alias.entity\" (from uses)\n *\n * Entity sharing depends on persistence type:\n * - persistent: Shared (same DB collection)\n * - runtime: Isolated (each orbital gets own instances)\n * - singleton: Shared (single global instance)\n */\n entity: EntityRef;\n\n /** Trait references (local or imported via \"Alias.traits.TraitName\") */\n traits: TraitRef[];\n\n /**\n * Page definitions.\n *\n * Can be:\n * - Inline: Full page definition\n * - Reference string: \"Alias.pages.PageName\"\n * - Reference object: { ref: \"Alias.pages.PageName\", path: \"/custom\" }\n */\n pages: PageRef[];\n\n // ========================================================================\n // Event Interface (Trait-Centric Model)\n // ========================================================================\n\n /**\n * Events this orbital emits.\n *\n * COMPUTED from trait-level emits:\n * - Aggregated from all traits with `scope: 'external'`\n * - Namespaced as \"TraitName.EVENT_NAME\"\n * - Filtered by `exposes` if present\n *\n * Do not author directly - computed by resolver.\n */\n emits?: ComputedEventContract[];\n\n /**\n * Events this orbital listens for.\n *\n * COMPUTED from trait-level listens:\n * - Aggregated from all traits with `scope: 'external'`\n *\n * Do not author directly - computed by resolver.\n */\n listens?: ComputedEventListener[];\n\n /**\n * Filter which trait events are exposed externally.\n * If omitted, all external-scoped trait events are exposed.\n * Format: [\"TraitName.EVENT_NAME\", ...]\n */\n exposes?: string[];\n\n // ========================================================================\n // Context fields - persisted throughout orbital lifecycle\n // ========================================================================\n\n /** Domain context - category, vocabulary, personas */\n domainContext?: DomainContext;\n\n /** Design preferences - style, colors, UX hints */\n design?: DesignPreferences;\n\n /**\n * Suggested guards (decomposition phase only).\n * Natural language descriptions that generator converts to S-expressions.\n * Removed after generation - guards live in traits.\n */\n suggestedGuards?: SuggestedGuard[];\n}\n\nexport const OrbitalDefinitionSchema = z.object({\n name: z.string().min(1, \"Orbital name is required\"),\n description: z.string().optional(),\n visual_prompt: z.string().optional(),\n // Import system\n uses: z.array(UseDeclarationSchema).optional(),\n // Theme & Services\n theme: ThemeRefSchema.optional(),\n services: z.array(ServiceRefSchema).optional(),\n // Components (inline or reference)\n entity: EntityRefSchema,\n traits: z.array(TraitRefSchema),\n pages: z.array(PageRefSchema),\n // Event interface (trait-centric model) - computed by resolver\n emits: z.array(ComputedEventContractSchema).optional(),\n listens: z.array(ComputedEventListenerSchema).optional(),\n // Filter for exposed events (trait-centric model)\n exposes: z.array(z.string()).optional(),\n // Context fields - persisted throughout orbital lifecycle\n domainContext: DomainContextSchema.optional(),\n design: DesignPreferencesSchema.optional(),\n suggestedGuards: z.array(SuggestedGuardSchema).optional(),\n});\n\nexport const OrbitalSchema = OrbitalDefinitionSchema;\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if an Orbital is a full definition.\n * @deprecated No longer needed since Orbital is always OrbitalDefinition now.\n */\nexport function isOrbitalDefinition(\n orbital: Orbital,\n): orbital is OrbitalDefinition {\n return \"entity\" in orbital;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type OrbitalInput = z.input<typeof OrbitalSchema>;\n\n// Backward compatibility\nexport type OrbitalUnit = Orbital;\nexport const OrbitalUnitSchema = OrbitalSchema;\n","/**\n * Orbital Schema Type (Self-Contained)\n *\n * Defines the OrbitalSchema - the top-level application definition.\n * An application is a composition of orbitals: App = Σ(Orbitals)\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { Orbital } from \"./orbital.js\";\nimport { OrbitalSchema as OrbitalZodSchema } from \"./orbital.js\";\nimport type {\n DomainContext,\n DesignPreferences,\n DesignTokens,\n CustomPatternMap,\n} from \"./domain.js\";\nimport {\n DomainContextSchema,\n DesignPreferencesSchema,\n DesignTokensSchema,\n CustomPatternMapSchema,\n} from \"./domain.js\";\nimport type { ServiceDefinition } from \"./service.js\";\nimport { ServiceDefinitionSchema } from \"./service.js\";\n\n// ============================================================================\n// Orbital Config\n// ============================================================================\n\n/**\n * Global configuration for the application\n */\nexport interface OrbitalConfig {\n /** Theme configuration */\n theme?: {\n primary?: string;\n secondary?: string;\n mode?: \"light\" | \"dark\" | \"system\";\n };\n /** Feature flags */\n features?: Record<string, boolean>;\n /** API configuration */\n api?: {\n baseUrl?: string;\n timeout?: number;\n };\n}\n\nexport const OrbitalConfigSchema = z.object({\n theme: z\n .object({\n primary: z.string().optional(),\n secondary: z.string().optional(),\n mode: z.enum([\"light\", \"dark\", \"system\"]).optional(),\n })\n .optional(),\n features: z.record(z.boolean()).optional(),\n api: z\n .object({\n baseUrl: z.string().optional(),\n timeout: z.number().optional(),\n })\n .optional(),\n});\n\n// ============================================================================\n// Orbital Schema\n// ============================================================================\n\n/**\n * OrbitalSchema - The top-level application definition.\n *\n * An application is a composition of orbitals:\n * App = Σ(Orbitals)\n *\n * Custom traits can be defined at the schema level and referenced\n * by orbitals via TraitRef. This allows LLMs to generate custom\n * traits that aren't in the trait library.\n */\nexport interface OrbitalSchema {\n /** Application name */\n name: string;\n\n /** Description */\n description?: string;\n\n /** Version (semver) */\n version?: string;\n\n /** Domain context - user request + classification */\n domainContext?: DomainContext;\n\n /** Design preferences */\n design?: DesignPreferences;\n\n /**\n * Design tokens - reusable Tailwind class collections.\n * Reference via `token: \"surfaces.glass\"` in patterns.\n */\n designTokens?: DesignTokens;\n\n /**\n * Custom pattern definitions for app-specific reusable patterns.\n * Register custom designs that can be referenced by name.\n */\n customPatterns?: CustomPatternMap;\n\n /** Array of orbitals */\n orbitals: Orbital[];\n\n /** External services */\n services?: ServiceDefinition[];\n\n /** Global config */\n config?: OrbitalConfig;\n}\n\nexport const OrbitalSchemaSchema = z.object({\n name: z.string().min(1, \"Schema name is required\"),\n description: z.string().optional(),\n version: z.string().optional(),\n domainContext: DomainContextSchema.optional(),\n design: DesignPreferencesSchema.optional(),\n designTokens: DesignTokensSchema,\n customPatterns: CustomPatternMapSchema,\n orbitals: z\n .array(OrbitalZodSchema)\n .min(1, \"At least one orbital is required\"),\n services: z.array(ServiceDefinitionSchema).optional(),\n config: OrbitalConfigSchema.optional(),\n});\n\n// ============================================================================\n// Parsing Functions\n// ============================================================================\n\n/**\n * Parse an OrbitalSchema with Zod validation\n */\nexport function parseOrbitalSchema(data: unknown): OrbitalSchema {\n return OrbitalSchemaSchema.parse(data) as OrbitalSchema;\n}\n\n/**\n * Safe parse an OrbitalSchema\n */\nexport function safeParseOrbitalSchema(data: unknown) {\n return OrbitalSchemaSchema.safeParse(data);\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type OrbitalSchemaInput = z.input<typeof OrbitalSchemaSchema>;\nexport type OrbitalConfigInput = z.input<typeof OrbitalConfigSchema>;\n","/**\n * S-Expression Operators\n *\n * Re-exports operator types and data from the canonical @almadar/operators package.\n * This ensures almadar-core stays in sync with the single source of truth.\n *\n * @packageDocumentation\n */\n\n// Re-export everything from the canonical source\nexport {\n // Types\n type OperatorCategory,\n type TargetPlatform,\n type CategoryMeta,\n type OperatorMeta,\n type OperatorsSchema,\n type OperatorStats,\n\n // Data\n OPERATORS_SCHEMA,\n OPERATORS,\n CATEGORIES,\n OPERATOR_NAMES,\n\n // Functions\n getOperatorMeta,\n isKnownOperator,\n isEffectOperator,\n isGuardOperator,\n getOperatorsByCategory,\n getOperatorsForTarget,\n validateOperatorArity,\n getOperatorStats,\n} from '@almadar/operators';\n\n// Legacy alias for backward compatibility with code importing getAllOperators\nimport { OPERATOR_NAMES as _NAMES } from '@almadar/operators';\nexport const getAllOperators = () => _NAMES;\nexport type OperatorName = string;\n","/**\n * S-Expression Bindings\n *\n * Defines binding types and utilities for S-expression context.\n * Bindings are references to values that are resolved at runtime.\n *\n * Core Bindings:\n * - @entity - The linked entity for this trait (e.g., @entity.health)\n * - @payload - Event payload data (e.g., @payload.amount)\n * - @state - Current state machine state\n * - @now - Current timestamp (Date.now())\n *\n * Entity Bindings:\n * - @EntityName.field - Reference to singleton/runtime entity (e.g., @GameConfig.gravity)\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// Re-export core binding utilities from expression.ts\nexport {\n isBinding,\n parseBinding,\n isValidBinding,\n CORE_BINDINGS,\n type CoreBinding,\n type ParsedBinding,\n} from './expression.js';\n\n// ============================================================================\n// Binding Schema\n// ============================================================================\n\n/**\n * Schema for a binding string.\n * Validates that the string starts with @ and has valid format.\n */\nexport const BindingSchema = z.string().refine(\n (val) => {\n if (!val.startsWith('@')) return false;\n const parts = val.slice(1).split('.');\n if (parts.length === 0 || parts[0] === '') return false;\n // All parts must be valid identifiers (letters, numbers, underscore)\n // supporting unicode characters for i18n\n return parts.every((part) => /^[\\p{L}_][\\p{L}0-9_]*$/u.test(part));\n },\n { message: 'Invalid binding format. Must be @name or @name.path.to.field' }\n);\n\n// ============================================================================\n// Binding Constants\n// ============================================================================\n\n/**\n * Binding documentation for LLM prompts and validation messages.\n * \n * IMPORTANT: Keep synchronized with CORE_BINDINGS in expression.ts\n */\nexport const BINDING_DOCS = {\n entity: {\n description: 'Reference to the linked entity for this trait',\n examples: ['@entity.health', '@entity.x', '@entity.status'],\n requiresPath: true,\n },\n payload: {\n description: 'Reference to the event payload data',\n examples: ['@payload.amount', '@payload.targetId', '@payload.action'],\n requiresPath: true,\n },\n state: {\n description: 'Current state machine state name',\n examples: ['@state'],\n requiresPath: false,\n },\n now: {\n description: 'Current timestamp in milliseconds',\n examples: ['@now'],\n requiresPath: false,\n },\n config: {\n description: 'Trait configuration values',\n examples: ['@config.apiEndpoint', '@config.theme'],\n requiresPath: true,\n },\n computed: {\n description: 'Computed/calculated values',\n examples: ['@computed.total', '@computed.isValid'],\n requiresPath: true,\n },\n trait: {\n description: 'Trait context data',\n examples: ['@trait.name', '@trait.category'],\n requiresPath: true,\n },\n} as const;\n\n/**\n * Validation rules for bindings in different contexts.\n */\nexport const BINDING_CONTEXT_RULES = {\n guard: {\n allowed: ['entity', 'payload', 'state', 'now'] as const,\n description: 'Guards can access entity fields, event payload, current state, and time',\n },\n effect: {\n allowed: ['entity', 'payload', 'state', 'now'] as const,\n description: 'Effects can access and modify entity fields, use payload data',\n },\n tick: {\n allowed: ['entity', 'state', 'now'] as const,\n description: 'Ticks can access entity fields, current state, and time (no payload)',\n },\n} as const;\n\nexport type BindingContext = keyof typeof BINDING_CONTEXT_RULES;\n\n// ============================================================================\n// Binding Validation Helpers\n// ============================================================================\n\n/**\n * Check if a binding is valid in a given context.\n *\n * @param binding - Parsed binding\n * @param context - Context where binding is used\n * @returns Error message if invalid, null if valid\n */\nexport function validateBindingInContext(\n binding: { type: 'core' | 'entity'; root: string },\n context: BindingContext\n): string | null {\n const rules = BINDING_CONTEXT_RULES[context];\n\n if (binding.type === 'core') {\n if (!(rules.allowed as readonly string[]).includes(binding.root)) {\n return `Binding @${binding.root} is not allowed in ${context} context. Allowed: ${rules.allowed.join(', ')}`;\n }\n }\n\n // Entity bindings are always allowed (they reference singletons/runtime entities)\n return null;\n}\n\n/**\n * Get all valid binding examples for a context.\n *\n * @param context - Context to get examples for\n * @returns Array of example binding strings\n */\nexport function getBindingExamples(context: BindingContext): string[] {\n const rules = BINDING_CONTEXT_RULES[context];\n const examples: string[] = [];\n\n for (const binding of rules.allowed) {\n const doc = BINDING_DOCS[binding];\n examples.push(...doc.examples);\n }\n\n // Add entity binding example\n examples.push('@GameConfig.gravity', '@Filter.searchTerm');\n\n return examples;\n}\n","/**\n * Interaction Model Types\n *\n * Defines how users interact with entities in the application.\n * Used to drive trait selection and UI slot usage.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Flow Types\n// ============================================================================\n\n/**\n * Create flow - how new items are created\n */\nexport type CreateFlow = 'modal' | 'page' | 'inline' | 'none';\n\n/**\n * Edit flow - how items are edited\n */\nexport type EditFlow = 'modal' | 'page' | 'inline' | 'none';\n\n/**\n * View flow - how item details are viewed\n */\nexport type ViewFlow = 'drawer' | 'page' | 'modal' | 'inline' | 'none';\n\n/**\n * Delete flow - how items are deleted\n */\nexport type DeleteFlow = 'confirm' | 'instant' | 'none';\n\n/**\n * List interaction - what happens when clicking list items\n */\nexport type ListInteraction = 'click-to-view' | 'click-to-edit' | 'inline-edit';\n\n// ============================================================================\n// Interaction Model\n// ============================================================================\n\n/**\n * InteractionModel - defines how users interact with entities.\n *\n * This drives:\n * - Which traits to attach (EntityManagement, ModalEdit, etc.)\n * - How render_ui effects target slots (modal, drawer, page)\n * - What UI patterns to use\n */\nexport interface InteractionModel {\n /** How new items are created */\n createFlow: CreateFlow;\n\n /** How items are edited */\n editFlow: EditFlow;\n\n /** How item details are viewed */\n viewFlow: ViewFlow;\n\n /** How items are deleted */\n deleteFlow: DeleteFlow;\n\n /** What happens when clicking list items */\n listInteraction?: ListInteraction;\n\n /** Enable bulk actions (select multiple, delete all) */\n bulkActions?: boolean;\n\n /** Enable real-time updates */\n realtime?: boolean;\n}\n\nexport const InteractionModelSchema = z.object({\n createFlow: z.enum(['modal', 'page', 'inline', 'none']),\n editFlow: z.enum(['modal', 'page', 'inline', 'none']),\n viewFlow: z.enum(['drawer', 'page', 'modal', 'inline', 'none']),\n deleteFlow: z.enum(['confirm', 'instant', 'none']),\n listInteraction: z.enum(['click-to-view', 'click-to-edit', 'inline-edit']).optional(),\n bulkActions: z.boolean().optional(),\n realtime: z.boolean().optional(),\n});\n\n// ============================================================================\n// Default Models per Domain\n// ============================================================================\n\n/**\n * Default interaction models for each domain type\n */\nexport const DEFAULT_INTERACTION_MODELS: Record<string, InteractionModel> = {\n business: {\n createFlow: 'modal',\n editFlow: 'modal',\n viewFlow: 'drawer',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n bulkActions: true,\n },\n game: {\n createFlow: 'none',\n editFlow: 'none',\n viewFlow: 'none',\n deleteFlow: 'none',\n realtime: true,\n },\n form: {\n createFlow: 'inline',\n editFlow: 'inline',\n viewFlow: 'none',\n deleteFlow: 'none',\n },\n dashboard: {\n createFlow: 'modal',\n editFlow: 'modal',\n viewFlow: 'drawer',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n },\n content: {\n createFlow: 'page',\n editFlow: 'page',\n viewFlow: 'page',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n },\n};\n\n/**\n * Get the default interaction model for a domain\n */\nexport function getInteractionModelForDomain(domain: string): InteractionModel {\n return DEFAULT_INTERACTION_MODELS[domain] ?? DEFAULT_INTERACTION_MODELS.business;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type InteractionModelInput = z.input<typeof InteractionModelSchema>;\n","/**\n * Pattern Type for Orbital Units\n *\n * Re-exports pattern type definitions from @almadar/patterns,\n * which is the single source of truth for all pattern types.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Pattern Type - Re-exported from @almadar/patterns\n// ============================================================================\n\n/**\n * All valid pattern type names, imported from the almadar-patterns registry.\n * The authoritative list is auto-generated from patterns-registry.json.\n */\nexport {\n PATTERN_TYPES,\n isValidPatternType,\n} from '@almadar/patterns';\nexport type { PatternType } from '@almadar/patterns';\n\n/**\n * Zod schema for pattern types.\n * Accepts any string - validation against full registry happens at runtime.\n */\nexport const PatternTypeSchema = z.string();\n\n// Re-export for backward compatibility\nimport { PATTERN_TYPES as _PATTERN_TYPES } from '@almadar/patterns';\n\n/**\n * Get all valid pattern types from the registry.\n * Delegates to @almadar/patterns which is the SSOT.\n */\nexport function getAllPatternTypes(): string[] {\n return [..._PATTERN_TYPES];\n}\n","/**\n * Shared Intermediate Representation Types\n *\n * Unified IR types used by both the compiler and runtime.\n * This is the single source of truth for IR structures.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from './expression.js';\n\n// ============================================================================\n// Transition Types\n// ============================================================================\n\n/**\n * Transition source state specification.\n * - string: Single state name (e.g., 'Idle')\n * - '*': Wildcard - matches any current state\n * - string[]: Array of states - matches any of the listed states\n */\nexport type TransitionFrom = string | '*' | string[];\n\n// ============================================================================\n// Field Types\n// ============================================================================\n\nexport interface ResolvedField {\n name: string;\n type: string;\n tsType: string;\n description?: string;\n default?: unknown;\n required: boolean;\n validation?: unknown;\n /** Enum values for enum or constrained string fields */\n values?: string[];\n /** Enum values (alias for values, for compatibility) */\n enumValues?: string[];\n /** Relation configuration for foreign key references */\n relation?: {\n entity: string;\n cardinality?: string;\n field?: string;\n };\n}\n\n// ============================================================================\n// Entity Types\n// ============================================================================\n\nexport interface ResolvedEntity {\n name: string;\n description?: string;\n icon?: string;\n collection: string;\n fields: ResolvedField[];\n\n /** Whether this entity only exists in runtime (not persisted to Firestore) */\n runtime?: boolean;\n\n /** Whether this is a singleton entity (only one instance exists) */\n singleton?: boolean;\n\n /** Whether this entity has pre-authored instances in the schema */\n hasInstances?: boolean;\n\n /** Pre-authored instances from the schema (seed data or static reference data) */\n instances?: Record<string, unknown>[];\n\n /** Default field values from schema (for spawning singletons) */\n defaults?: Record<string, unknown>;\n\n // Cross-references\n usedByTraits: string[];\n usedByPages: string[];\n}\n\nexport interface ResolvedEntityBinding {\n /** Binding name in code */\n name: string;\n\n /** Entity being bound */\n entity: ResolvedEntity;\n\n /** CRUD operations to generate */\n operations: ('list' | 'get' | 'create' | 'update' | 'delete')[];\n}\n\n// ============================================================================\n// Trait Types\n// ============================================================================\n\nexport interface ResolvedTraitState {\n name: string;\n isInitial: boolean;\n isFinal: boolean;\n}\n\nexport interface ResolvedTraitEvent {\n key: string;\n name: string;\n payload?: Record<string, string>;\n}\n\nexport interface ResolvedTraitTransition {\n /** Source state(s): string, '*' for wildcard, or array of states */\n from: TransitionFrom;\n to: string;\n event: string;\n guard?: SExpr;\n effects: SExpr[];\n}\n\nexport interface ResolvedTraitGuard {\n name: string;\n condition: SExpr;\n}\n\nexport interface ResolvedTraitTick {\n name: string;\n interval: number | 'frame';\n guard?: SExpr;\n effects: SExpr[];\n priority: number;\n appliesTo: string[];\n}\n\nexport interface ResolvedTraitListener {\n event: string;\n triggers: string;\n guard?: SExpr;\n}\n\nexport interface ResolvedTraitDataEntity {\n name: string;\n fields: ResolvedField[];\n runtime: boolean;\n singleton: boolean;\n}\n\n/**\n * UI binding for interaction traits - maps states to presentations\n */\nexport interface ResolvedTraitUIBinding {\n [stateName: string]: {\n /** Presentation type: modal, drawer, popover, inline, confirm-dialog */\n presentation: string;\n /** Content pattern(s) to render */\n content: Record<string, unknown> | Record<string, unknown>[];\n /** Presentation props */\n props?: {\n size?: string;\n position?: string;\n title?: string;\n closable?: boolean;\n width?: string;\n showProgress?: boolean;\n step?: number;\n totalSteps?: number;\n };\n };\n}\n\n/**\n * Fully resolved trait - expanded from schema OR library.\n * The compiler generates code from this structure universally,\n * without knowing which specific trait it is.\n */\nexport interface ResolvedTrait {\n /** Unique trait identifier */\n name: string;\n\n /** Human-readable description */\n description?: string;\n\n /** Where this trait came from */\n source: 'schema' | 'library' | 'inline';\n\n /** Category for organizing traits */\n category?: 'lifecycle' | 'temporal' | 'validation' | 'notification' | 'integration' | 'interaction' |\n 'game-core' | 'game-character' | 'game-ai' | 'game-combat' | 'game-items' | 'game-cards' | 'game-board' | 'game-puzzle';\n\n // State Machine (all optional - not all traits have state machines)\n states: ResolvedTraitState[];\n events: ResolvedTraitEvent[];\n transitions: ResolvedTraitTransition[];\n guards: ResolvedTraitGuard[];\n\n // Behavior\n ticks: ResolvedTraitTick[];\n\n // Communication\n listens: ResolvedTraitListener[];\n\n // Data\n dataEntities: ResolvedTraitDataEntity[];\n\n // Instance configuration (from page binding)\n config?: Record<string, unknown>;\n\n // UI Bindings for interaction traits\n ui?: ResolvedTraitUIBinding;\n}\n\n/**\n * Trait binding on a page - links a resolved trait to the page\n */\nexport interface ResolvedTraitBinding {\n /** Reference name */\n ref?: string;\n\n /** Fully resolved trait */\n trait: ResolvedTrait;\n\n /** Entity this trait operates on (if any) */\n linkedEntity?: string;\n\n /** Instance configuration */\n config?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Pattern & Section Types\n// ============================================================================\n\nexport interface ResolvedPattern {\n /** Pattern type (e.g., 'page-header', 'entity-list', 'game-canvas') */\n type: string;\n\n /** Pattern configuration */\n config: Record<string, unknown>;\n\n /** Shell component to use */\n shellComponent?: string;\n}\n\nexport interface ResolvedSectionEvent {\n event: string;\n action: string;\n target?: string;\n}\n\nexport interface ResolvedSection {\n /** Section identifier */\n id: string;\n\n /** Resolved pattern */\n pattern: ResolvedPattern;\n\n /** Events emitted by this section */\n events: ResolvedSectionEvent[];\n\n /** Position in page layout */\n position?: number;\n\n /** Entity binding for this section */\n binding?: ResolvedEntityBinding;\n}\n\n// ============================================================================\n// Page Types\n// ============================================================================\n\nexport interface ResolvedNavigation {\n event?: string;\n from?: string;\n to: string;\n trigger?: string;\n params?: Record<string, string>;\n label?: string;\n path?: string;\n icon?: string;\n}\n\nexport interface ResolvedPage {\n /** Page identifier */\n name: string;\n\n /** URL path */\n path: string;\n\n /** Feature folder name */\n featureName: string;\n\n /** Layout component */\n layout?: string;\n\n /** View type (dashboard, list, detail, create, edit) */\n viewType?: 'dashboard' | 'list' | 'detail' | 'create' | 'edit';\n\n /** Resolved sections */\n sections: ResolvedSection[];\n\n /** Resolved trait bindings */\n traits: ResolvedTraitBinding[];\n\n /** Entity data bindings */\n entityBindings: ResolvedEntityBinding[];\n\n /** Navigation wiring */\n navigation: ResolvedNavigation[];\n\n /** Singleton entities to spawn on this page (runtime singletons) */\n singletonEntities: ResolvedEntity[];\n}\n\n// ============================================================================\n// IR Types\n// ============================================================================\n\n/**\n * Complete resolved IR - all references expanded\n */\nexport interface ResolvedIR {\n /** App name */\n appName: string;\n\n /** App description */\n description?: string;\n\n /** App version */\n version?: string;\n\n /** All resolved entities (Map for lookup) */\n entities: Map<string, ResolvedEntity>;\n\n /** All resolved traits (Map for lookup) */\n traits: Map<string, ResolvedTrait>;\n\n /** All resolved pages (Map for lookup) */\n pages: Map<string, ResolvedPage>;\n\n /** Entity bindings (used for data hook generation) */\n entityBindings: ResolvedEntityBinding[];\n\n /** Raw data entities (used for instance data generation) */\n rawEntities?: unknown[];\n\n /** Generation timestamp */\n generatedAt: string;\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create an empty resolved trait with defaults\n */\nexport function createEmptyResolvedTrait(name: string, source: 'schema' | 'library' | 'inline'): ResolvedTrait {\n return {\n name,\n source,\n states: [],\n events: [],\n transitions: [],\n guards: [],\n ticks: [],\n listens: [],\n dataEntities: [],\n };\n}\n\n/**\n * Create an empty resolved page with defaults\n */\nexport function createEmptyResolvedPage(name: string): ResolvedPage {\n return {\n name,\n path: `/${name.toLowerCase()}`,\n featureName: name.toLowerCase(),\n sections: [],\n traits: [],\n entityBindings: [],\n navigation: [],\n singletonEntities: [],\n };\n}\n\n/**\n * Infer TypeScript type from schema type\n */\nexport function inferTsType(schemaType: string): string {\n const typeMap: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n date: 'Date',\n datetime: 'Date',\n timestamp: 'number',\n array: 'unknown[]',\n object: 'Record<string, unknown>',\n any: 'unknown',\n };\n\n // Handle array types like \"string[]\"\n if (schemaType.endsWith('[]')) {\n const baseType = schemaType.slice(0, -2);\n return `${typeMap[baseType] || baseType}[]`;\n }\n\n return typeMap[schemaType] || schemaType;\n}\n\n/**\n * Create a resolved field with TypeScript type inference\n */\nexport function createResolvedField(field: {\n name: string;\n type: string;\n description?: string;\n default?: unknown;\n required?: boolean;\n validation?: unknown;\n values?: string[];\n}): ResolvedField {\n return {\n name: field.name,\n type: field.type,\n tsType: inferTsType(field.type),\n description: field.description,\n default: field.default,\n required: field.required ?? false,\n validation: field.validation,\n values: field.values,\n };\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isResolvedIR(ir: unknown): ir is ResolvedIR {\n if (!ir || typeof ir !== 'object') return false;\n const r = ir as ResolvedIR;\n return typeof r.appName === 'string' && r.traits instanceof Map && r.pages instanceof Map;\n}\n","/**\n * Schema Resolver\n *\n * Converts OrbitalSchema to Intermediate Representation (IR).\n * Resolves all entity references, expands traits, and prepares schema for compilation/runtime.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema } from './types/schema.js';\nimport type { Orbital, Trait, Page, PageTraitRef, Entity } from './types/index.js';\nimport type { ResolvedIR, ResolvedPage, ResolvedEntity, ResolvedTrait } from './types/ir.js';\n\n// ============================================================================\n// Cache\n// ============================================================================\n\n/**\n * Cache for resolved schemas (keyed by schema name + version)\n */\nconst schemaCache = new Map<string, ResolvedIR>();\n\n/**\n * Clear the schema resolution cache.\n * Useful for hot-reloading during development.\n */\nexport function clearSchemaCache(): void {\n schemaCache.clear();\n}\n\n/**\n * Get cache statistics (for debugging)\n */\nexport function getSchemaCacheStats() {\n return {\n size: schemaCache.size,\n keys: Array.from(schemaCache.keys()),\n };\n}\n\n// ============================================================================\n// Schema to IR Conversion\n// ============================================================================\n\n/**\n * Convert OrbitalSchema to Intermediate Representation (IR).\n *\n * This function:\n * 1. Resolves all entity references\n * 2. Expands trait definitions (inline or from library)\n * 3. Resolves page bindings\n * 4. Creates the IR structure used by compiler and runtime\n *\n * @param schema - OrbitalSchema to convert\n * @param useCache - Whether to use cached result (default: true)\n * @returns Fully resolved IR\n *\n * @example\n * const schema = { name: 'MyApp', orbitals: [...] };\n * const ir = schemaToIR(schema);\n * console.log(ir.entities.size); // Number of entities\n * console.log(ir.pages.size); // Number of pages\n */\nexport function schemaToIR(schema: OrbitalSchema, useCache: boolean = true): ResolvedIR {\n // Generate cache key\n const cacheKey = `${schema.name}-${schema.version || '1.0.0'}`;\n\n // Check cache\n if (useCache && schemaCache.has(cacheKey)) {\n return schemaCache.get(cacheKey)!;\n }\n\n // Create empty IR structure\n const ir: ResolvedIR = {\n appName: schema.name,\n description: schema.description,\n version: schema.version || '1.0.0',\n entities: new Map<string, ResolvedEntity>(),\n traits: new Map<string, ResolvedTrait>(),\n pages: new Map<string, ResolvedPage>(),\n entityBindings: [],\n generatedAt: new Date().toISOString(),\n };\n\n // Process each orbital\n for (const orbital of schema.orbitals as Orbital[]) {\n // Resolve entity if present\n if (orbital.entity && typeof orbital.entity !== 'string') {\n const entityDef = orbital.entity as Entity;\n const entity: ResolvedEntity = {\n name: entityDef.name,\n description: entityDef.description,\n icon: (entityDef as any).icon, // Optional icon (may not exist on type)\n collection: entityDef.collection || entityDef.name.toLowerCase() + 's',\n fields: (entityDef.fields || []).map((field: any) => ({\n name: field.name,\n type: field.type,\n tsType: inferTsType(field.type),\n description: field.description,\n default: field.default,\n required: field.required ?? false,\n values: field.values,\n enumValues: field.values,\n relation: field.relation,\n })),\n runtime: entityDef.persistence === 'runtime',\n singleton: entityDef.persistence === 'singleton',\n hasInstances: (entityDef.instances?.length ?? 0) > 0,\n instances: entityDef.instances,\n defaults: (entityDef as any).defaults, // Optional defaults (may not exist on type)\n usedByTraits: [],\n usedByPages: [],\n };\n ir.entities.set(entity.name, entity);\n }\n\n // Resolve traits\n for (const trait of (orbital.traits || []) as Trait[]) {\n const resolvedTrait: ResolvedTrait = {\n name: trait.name,\n description: trait.description,\n source: 'schema',\n category: trait.category,\n states: (trait.stateMachine?.states || []).map((s: any) => ({\n name: s.name,\n isInitial: s.isInitial ?? false,\n isFinal: s.isFinal ?? s.isTerminal ?? false,\n })),\n events: (trait.stateMachine?.events || []).map((e: any) => ({\n key: typeof e === 'string' ? e : e.key || e.name,\n name: typeof e === 'string' ? e : e.name,\n payload: typeof e === 'object' && 'payloadSchema' in e ?\n (e.payloadSchema as any) : undefined,\n })),\n transitions: (trait.stateMachine?.transitions || []).map((t: any) => ({\n from: t.from,\n to: t.to,\n event: t.event,\n guard: t.guard,\n effects: t.effects || [],\n })),\n guards: [],\n ticks: [],\n listens: ((trait as any).listens || []).map((l: any) => ({\n event: l.event,\n triggers: l.triggers,\n guard: l.guard,\n })),\n dataEntities: [],\n };\n ir.traits.set(trait.name, resolvedTrait);\n }\n\n // Resolve pages\n for (const page of (orbital.pages || []) as Page[]) {\n const resolvedPage: ResolvedPage = {\n name: page.name,\n path: page.path,\n featureName: page.name.toLowerCase(),\n viewType: page.viewType && ['list', 'detail', 'create', 'edit', 'dashboard'].includes(page.viewType) ?\n page.viewType as ('list' | 'detail' | 'create' | 'edit' | 'dashboard') : undefined,\n sections: [],\n traits: (page.traits || []).map((traitRef: PageTraitRef) => ({\n ref: typeof traitRef === 'string' ? traitRef : traitRef.ref,\n trait: resolveTraitRef(traitRef, ir.traits, orbital.traits as Trait[] || []),\n linkedEntity: typeof traitRef === 'object' && 'linkedEntity' in traitRef ?\n (traitRef as any).linkedEntity :\n (orbital.entity ? (typeof orbital.entity === 'string' ? (orbital.entity as string).replace('.entity', '') : (orbital.entity as Entity).name) : undefined),\n config: typeof traitRef === 'object' && 'config' in traitRef ?\n (traitRef as any).config : undefined,\n })),\n entityBindings: [],\n navigation: [],\n singletonEntities: [],\n };\n ir.pages.set(page.name, resolvedPage);\n }\n }\n\n // Cache result\n if (useCache) {\n schemaCache.set(cacheKey, ir);\n }\n\n return ir;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Infer TypeScript type from schema type\n */\nfunction inferTsType(schemaType: string): string {\n const typeMap: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n date: 'Date',\n datetime: 'Date',\n timestamp: 'number',\n array: 'unknown[]',\n object: 'Record<string, unknown>',\n any: 'unknown',\n };\n\n // Handle array types like \"string[]\"\n if (schemaType.endsWith('[]')) {\n const baseType = schemaType.slice(0, -2);\n return `${typeMap[baseType] || baseType}[]`;\n }\n\n return typeMap[schemaType] || schemaType;\n}\n\n/**\n * Resolve a trait reference to a full trait\n */\nfunction resolveTraitRef(\n traitRef: PageTraitRef,\n traitsMap: Map<string, ResolvedTrait>,\n schemaTraits: Trait[]\n): ResolvedTrait {\n const refName = typeof traitRef === 'string' ? traitRef : traitRef.ref || '';\n\n // Try to find in resolved traits\n if (traitsMap.has(refName)) {\n return traitsMap.get(refName)!;\n }\n\n // Try to find in schema traits\n const schemaTrait = schemaTraits.find((t: Trait) => t.name === refName);\n if (schemaTrait) {\n // This is a simplified inline trait\n return {\n name: refName,\n source: 'inline',\n states: [],\n events: [],\n transitions: [],\n guards: [],\n ticks: [],\n listens: [],\n dataEntities: [],\n };\n }\n\n // Fallback: create empty trait\n return {\n name: refName,\n source: 'schema',\n states: [],\n events: [],\n transitions: [],\n guards: [],\n ticks: [],\n listens: [],\n dataEntities: [],\n };\n}\n\n// ============================================================================\n// Page Helpers\n// ============================================================================\n\n/**\n * Get a specific page from resolved IR by name.\n * If no name is provided, returns the first page.\n *\n * @param ir - Resolved IR\n * @param pageName - Optional page name to find\n * @returns Resolved page or undefined\n *\n * @example\n * const ir = schemaToIR(schema);\n * const homePage = getPage(ir, 'HomePage');\n * const firstPage = getPage(ir); // No name = first page\n */\nexport function getPage(ir: ResolvedIR, pageName?: string): ResolvedPage | undefined {\n if (!pageName) {\n // Return first page if no name specified\n return ir.pages.values().next().value;\n }\n return ir.pages.get(pageName);\n}\n\n/**\n * Get all pages from resolved IR as an array\n *\n * @param ir - Resolved IR\n * @returns Array of resolved pages\n */\nexport function getPages(ir: ResolvedIR): ResolvedPage[] {\n return Array.from(ir.pages.values());\n}\n\n/**\n * Get a specific entity from resolved IR by name\n *\n * @param ir - Resolved IR\n * @param entityName - Entity name to find\n * @returns Resolved entity or undefined\n */\nexport function getEntity(ir: ResolvedIR, entityName: string): ResolvedEntity | undefined {\n return ir.entities.get(entityName);\n}\n\n/**\n * Get a specific trait from resolved IR by name\n *\n * @param ir - Resolved IR\n * @param traitName - Trait name to find\n * @returns Resolved trait or undefined\n */\nexport function getTrait(ir: ResolvedIR, traitName: string): ResolvedTrait | undefined {\n return ir.traits.get(traitName);\n}\n","/**\n * Schema Diffing & Protection\n *\n * Pure functions for comparing OrbitalSchema objects, detecting destructive changes,\n * and categorizing removals. No I/O — operates on in-memory schema objects.\n */\n\nimport type { OrbitalSchema } from './types/schema.js';\nimport type {\n SchemaChange,\n ChangeSetDocument,\n CategorizedRemovals,\n PageContentReduction,\n} from './types/changeset.js';\n\n// ============================================================================\n// Schema Diffing\n// ============================================================================\n\n/**\n * Diff two OrbitalSchema objects and produce a list of changes.\n * Compares orbitals, entities, traits, pages, services, and top-level fields.\n */\nexport function diffSchemas(\n before: OrbitalSchema,\n after: OrbitalSchema,\n): { changes: SchemaChange[] } {\n const changes: SchemaChange[] = [];\n let changeId = 0;\n const nextId = () => `change-${++changeId}`;\n\n // Compare top-level fields\n if (before.name !== after.name) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'schema',\n path: ['name'],\n before: before.name,\n after: after.name,\n description: `Renamed schema from \"${before.name}\" to \"${after.name}\"`,\n });\n }\n\n if (before.description !== after.description) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'schema',\n path: ['description'],\n before: before.description,\n after: after.description,\n description: `Modified schema description`,\n });\n }\n\n // Compare orbitals by name\n const beforeOrbitals = new Map(\n (before.orbitals || []).map((o, i) => [o.name, { orbital: o, index: i }]),\n );\n const afterOrbitals = new Map(\n (after.orbitals || []).map((o, i) => [o.name, { orbital: o, index: i }]),\n );\n\n // Detect removed orbitals\n for (const [name, { index }] of beforeOrbitals) {\n if (!afterOrbitals.has(name)) {\n changes.push({\n id: nextId(),\n operation: 'remove',\n target: 'orbital',\n path: ['orbitals', index],\n before: name,\n description: `Removed orbital: ${name}`,\n });\n }\n }\n\n // Detect added orbitals\n for (const [name, { index }] of afterOrbitals) {\n if (!beforeOrbitals.has(name)) {\n changes.push({\n id: nextId(),\n operation: 'add',\n target: 'orbital',\n path: ['orbitals', index],\n after: name,\n description: `Added orbital: ${name}`,\n });\n }\n }\n\n // Detect modified orbitals (deep compare via JSON)\n for (const [name, { orbital: afterOrbital, index }] of afterOrbitals) {\n const beforeEntry = beforeOrbitals.get(name);\n if (beforeEntry) {\n const beforeJson = JSON.stringify(beforeEntry.orbital);\n const afterJson = JSON.stringify(afterOrbital);\n if (beforeJson !== afterJson) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'orbital',\n path: ['orbitals', index],\n description: `Modified orbital: ${name}`,\n });\n\n // Drill into entity changes\n const beforeEntity = beforeEntry.orbital.entity;\n const afterEntity = afterOrbital.entity;\n if (JSON.stringify(beforeEntity) !== JSON.stringify(afterEntity)) {\n const entityName =\n typeof afterEntity === 'string'\n ? afterEntity\n : afterEntity && typeof afterEntity === 'object' && 'name' in afterEntity\n ? (afterEntity as { name: string }).name\n : 'entity';\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'entity',\n path: ['orbitals', index, 'entity'],\n description: `Modified entity: ${entityName}`,\n });\n }\n\n // Drill into trait changes\n const beforeTraits = beforeEntry.orbital.traits || [];\n const afterTraits = afterOrbital.traits || [];\n if (JSON.stringify(beforeTraits) !== JSON.stringify(afterTraits)) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'traits',\n path: ['orbitals', index, 'traits'],\n description: `Modified traits in orbital: ${name}`,\n });\n }\n\n // Drill into page changes\n const beforePages = beforeEntry.orbital.pages || [];\n const afterPages = afterOrbital.pages || [];\n if (JSON.stringify(beforePages) !== JSON.stringify(afterPages)) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'pages',\n path: ['orbitals', index, 'pages'],\n description: `Modified pages in orbital: ${name}`,\n });\n }\n }\n }\n }\n\n // Compare services\n const beforeServices = JSON.stringify(before.services || []);\n const afterServices = JSON.stringify(after.services || []);\n if (beforeServices !== afterServices) {\n changes.push({\n id: nextId(),\n operation: 'modify',\n target: 'services',\n path: ['services'],\n description: 'Modified services',\n });\n }\n\n return { changes };\n}\n\n// ============================================================================\n// Destructive Change Detection\n// ============================================================================\n\n/**\n * Check if a changeset contains any removals.\n */\nexport function isDestructiveChange(changeSet: { changes: SchemaChange[] }): boolean {\n return changeSet.changes.some((c) => c.operation === 'remove');\n}\n\n/**\n * Extract all removal operations from a changeset.\n */\nexport function getRemovals(changeSet: { changes: SchemaChange[] }): SchemaChange[] {\n return changeSet.changes.filter((c) => c.operation === 'remove');\n}\n\n/**\n * Categorize removals by severity.\n *\n * - Critical: orbitals, entities, states, pages (require confirmation)\n * - Standard: fields, actions, traits (auto-snapshotted)\n * - Minor: transitions, guards (tracked)\n */\nexport function categorizeRemovals(changeSet: {\n changes: SchemaChange[];\n}): CategorizedRemovals {\n const critical: SchemaChange[] = [];\n const standard: SchemaChange[] = [];\n const minor: SchemaChange[] = [];\n\n for (const change of changeSet.changes) {\n if (change.operation !== 'remove') continue;\n\n const target = change.target.toLowerCase();\n if (\n target === 'orbital' ||\n target === 'entity' ||\n target === 'state' ||\n target === 'page'\n ) {\n critical.push(change);\n } else if (\n target === 'field' ||\n target === 'action' ||\n target === 'trait' ||\n target === 'traits'\n ) {\n standard.push(change);\n } else {\n minor.push(change);\n }\n }\n\n return { critical, standard, minor, pageContentReductions: [] };\n}\n\n/**\n * Check if critical removals require explicit confirmation.\n */\nexport function requiresConfirmation(removals: CategorizedRemovals): boolean {\n return removals.critical.length > 0;\n}\n\n// ============================================================================\n// Page Content Reduction\n// ============================================================================\n\n/**\n * Detect implicit content reduction within pages.\n * Catches cases where a page 'modify' reduces components/actions/displays\n * without an explicit 'remove' operation.\n */\nexport function detectPageContentReduction(\n beforePages: unknown[],\n afterPages: unknown[],\n): PageContentReduction[] {\n const reductions: PageContentReduction[] = [];\n\n const getPageName = (p: unknown): string | null => {\n if (p && typeof p === 'object' && 'name' in p) {\n return (p as { name: string }).name;\n }\n return null;\n };\n\n const countContent = (\n page: unknown,\n ): { sections: number; actions: number } => {\n if (!page || typeof page !== 'object') return { sections: 0, actions: 0 };\n const p = page as Record<string, unknown>;\n const traits = Array.isArray(p.traits) ? p.traits : [];\n return { sections: traits.length, actions: 0 };\n };\n\n // Build maps by name\n const beforeMap = new Map<string, unknown>();\n for (const p of beforePages) {\n const name = getPageName(p);\n if (name) beforeMap.set(name, p);\n }\n\n for (const afterPage of afterPages) {\n const name = getPageName(afterPage);\n if (!name) continue;\n const beforePage = beforeMap.get(name);\n if (!beforePage) continue;\n\n const beforeContent = countContent(beforePage);\n const afterContent = countContent(afterPage);\n\n const sectionsRemoved = beforeContent.sections - afterContent.sections;\n const actionsRemoved = beforeContent.actions - afterContent.actions;\n\n if (sectionsRemoved > 0 || actionsRemoved > 0) {\n reductions.push({\n pageName: name,\n componentsRemoved: sectionsRemoved,\n actionsRemoved,\n displaysRemoved: 0,\n before: beforeContent,\n after: afterContent,\n isSignificant: sectionsRemoved > 0,\n });\n }\n }\n\n return reductions;\n}\n\n/**\n * Check if page content reductions are significant.\n */\nexport function hasSignificantPageReduction(\n reductions: PageContentReduction[],\n): boolean {\n return reductions.some((r) => r.isSignificant);\n}\n","/**\n * Orbital Summarization\n *\n * Deterministic orbital-to-orbital transformation:\n * full schema in → business skeleton out.\n *\n * Input: OrbitalSchema. Output: OrbitalSchema.\n * Same types — just stripped of implementation details.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema } from './types/schema.js';\nimport type { OrbitalDefinition } from './types/orbital.js';\nimport { isEntityReference } from './types/orbital.js';\nimport type { Entity } from './types/entity.js';\nimport type { EntityField } from './types/field.js';\nimport type { Trait } from './types/trait.js';\nimport { isInlineTrait } from './types/trait.js';\nimport type { Page } from './types/page.js';\nimport type { Transition, Event, State } from './types/state-machine.js';\n\n// ============================================================================\n// Workflow Type Detection\n// ============================================================================\n\nconst CRUD_STATES = new Set(['browsing', 'creating', 'editing', 'viewing', 'deleting']);\nconst STEP_PATTERN = /^step\\d+$/i;\n\n/**\n * Classify a workflow from its state machine states.\n *\n * - CRUD: 3+ states match {browsing, creating, editing, viewing, deleting}\n * - Wizard: 2+ states match /^step\\d+$/i, OR linear chain to terminal state\n * - Custom: everything else\n */\nexport function classifyWorkflow(states: State[]): 'crud' | 'wizard' | 'custom' {\n const names = states.map(s => s.name.toLowerCase());\n\n const crudMatch = names.filter(n => CRUD_STATES.has(n)).length;\n if (crudMatch >= 3) return 'crud';\n\n const stepCount = names.filter(n => STEP_PATTERN.test(n)).length;\n if (stepCount >= 2) return 'wizard';\n\n const hasTerminal = states.some(s => s.isTerminal || s.isFinal);\n const hasComplete = names.some(n =>\n n === 'complete' || n === 'completed' || n === 'done' || n === 'finished'\n );\n if ((hasTerminal || hasComplete) && states.length >= 4 && crudMatch <= 1) {\n return 'wizard';\n }\n\n return 'custom';\n}\n\n// ============================================================================\n// Entity Summarization\n// ============================================================================\n\nfunction isPrimaryKey(field: EntityField): boolean {\n return (field as EntityField & { primaryKey?: boolean }).primaryKey === true;\n}\n\nfunction isBusinessField(field: EntityField): boolean {\n if (isPrimaryKey(field)) return false;\n if (field.type === 'enum' || field.type === 'relation') return true;\n if (field.required) return true;\n return false;\n}\n\nfunction summarizeEntity(entity: Entity): Entity {\n const fields: EntityField[] = entity.fields.filter(isBusinessField).map(f => {\n const summary: EntityField = { name: f.name, type: f.type };\n if (f.required) summary.required = true;\n if (f.type === 'enum' && f.values) summary.values = f.values;\n if (f.type === 'relation' && f.relation) summary.relation = f.relation;\n return summary;\n });\n\n return {\n name: entity.name,\n collection: entity.collection,\n fields,\n };\n}\n\n// ============================================================================\n// Transition Summarization\n// ============================================================================\n\n/**\n * Deduplicate transitions that are identical in (from, to, event).\n * Strips effects and guards.\n */\nfunction summarizeTransitions(transitions: Transition[]): Transition[] {\n const seen = new Set<string>();\n const result: Transition[] = [];\n\n for (const t of transitions) {\n const key = `${t.from}::${t.to}::${t.event}`;\n if (!seen.has(key)) {\n seen.add(key);\n result.push({ from: t.from, to: t.to, event: t.event });\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Trait Summarization\n// ============================================================================\n\nfunction summarizeEvents(events: Event[]): Event[] {\n return events.map(e => ({ key: e.key, name: e.key }));\n}\n\nfunction summarizeTrait(trait: Trait): Trait {\n const states = trait.stateMachine?.states ?? [];\n const events = trait.stateMachine?.events ?? [];\n const transitions = trait.stateMachine?.transitions ?? [];\n\n const result: Trait = { name: trait.name };\n if (trait.category) result.category = trait.category;\n if (trait.linkedEntity) result.linkedEntity = trait.linkedEntity;\n\n if (trait.stateMachine) {\n result.stateMachine = {\n states: states.map(s => {\n const st: State = { name: s.name };\n if (s.isInitial) st.isInitial = true;\n if (s.isTerminal) st.isTerminal = true;\n if (s.isFinal) st.isFinal = true;\n return st;\n }),\n events: summarizeEvents(events),\n transitions: summarizeTransitions(transitions),\n };\n }\n\n if (trait.emits && trait.emits.length > 0) {\n result.emits = trait.emits.map(e => ({\n event: e.event,\n ...(e.scope ? { scope: e.scope } : {}),\n }));\n }\n\n if (trait.listens && trait.listens.length > 0) {\n result.listens = trait.listens.map(l => ({\n event: l.event,\n triggers: l.triggers,\n ...(l.scope ? { scope: l.scope } : {}),\n }));\n }\n\n return result;\n}\n\n// ============================================================================\n// Page Summarization\n// ============================================================================\n\nfunction summarizePage(page: Page): Page {\n const result: Page = { name: page.name, path: page.path };\n if (page.traits && page.traits.length > 0) {\n result.traits = page.traits.map(t => ({ ref: t.ref }));\n }\n return result;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Summarize a single orbital into its business skeleton.\n *\n * OrbitalDefinition in → OrbitalDefinition out.\n * Strips effects, guards, payloads, theme, optional fields.\n * Deduplicates transitions on (from, to, event).\n */\nexport function summarizeOrbital(orbital: OrbitalDefinition): OrbitalDefinition {\n let entity: Entity;\n if (isEntityReference(orbital.entity)) {\n entity = { name: orbital.entity, fields: [] };\n } else {\n entity = summarizeEntity(orbital.entity);\n }\n\n const traits = orbital.traits.map(traitRef => {\n if (isInlineTrait(traitRef)) {\n return summarizeTrait(traitRef);\n }\n return traitRef;\n });\n\n const pages = orbital.pages\n .filter((p): p is Page => typeof p === 'object' && 'name' in p && !('ref' in p))\n .map(summarizePage);\n\n return { name: orbital.name, entity, traits, pages };\n}\n\n/**\n * Summarize an entire OrbitalSchema into a business skeleton.\n *\n * OrbitalSchema in → OrbitalSchema out.\n * Strips schema-level metadata (domainContext, design, designTokens, customPatterns).\n */\nexport function summarizeSchema(schema: OrbitalSchema): OrbitalSchema {\n return {\n name: schema.name,\n description: schema.description,\n version: schema.version,\n orbitals: schema.orbitals.map(summarizeOrbital),\n };\n}\n","/**\n * Domain Language Tokens\n *\n * Token definitions for the domain language lexer.\n */\n\nexport enum TokenType {\n // Whitespace & Structure\n NEWLINE = 'NEWLINE',\n INDENT = 'INDENT',\n DEDENT = 'DEDENT',\n\n // Template Variables (e.g., {linkedEntity})\n TEMPLATE_VAR = 'TEMPLATE_VAR',\n\n // Keywords - Entity\n A = 'A',\n AN = 'AN',\n IS = 'IS',\n IT = 'IT',\n HAS = 'HAS',\n BELONGS = 'BELONGS',\n TO = 'TO',\n MANY = 'MANY',\n ONE = 'ONE',\n AS = 'AS',\n CAN = 'CAN',\n BE = 'BE',\n STARTS = 'STARTS',\n\n // Keywords - Page\n THE = 'THE',\n SHOWS = 'SHOWS',\n ENTITY = 'ENTITY', // Explicit entity reference for pages\n PURPOSE = 'PURPOSE',\n URL = 'URL',\n DISPLAYS = 'DISPLAYS',\n USERS = 'USERS',\n WHEN = 'WHEN',\n ACCESSED = 'ACCESSED',\n\n // Keywords - Behavior\n LIFECYCLE = 'LIFECYCLE',\n BEHAVIOR = 'BEHAVIOR',\n STATES = 'STATES',\n INITIAL = 'INITIAL',\n TRANSITIONS = 'TRANSITIONS',\n FROM = 'FROM',\n IF = 'IF',\n THEN = 'THEN',\n RULES = 'RULES',\n EVERY = 'EVERY',\n CHECK = 'CHECK',\n\n // Keywords - Guard\n AND = 'AND',\n OR = 'OR',\n NOT = 'NOT',\n PROVIDED = 'PROVIDED',\n EMPTY = 'EMPTY',\n USER = 'USER',\n OWNS = 'OWNS',\n THIS = 'THIS',\n\n // Field Types\n TEXT = 'TEXT',\n LONG_TEXT = 'LONG_TEXT',\n NUMBER = 'NUMBER',\n CURRENCY = 'CURRENCY',\n DATE = 'DATE',\n TIMESTAMP = 'TIMESTAMP',\n YES_NO = 'YES_NO',\n ENUM = 'ENUM',\n LIST = 'LIST',\n\n // Constraints\n REQUIRED = 'REQUIRED',\n UNIQUE = 'UNIQUE',\n AUTO = 'AUTO',\n DEFAULT = 'DEFAULT',\n\n // Operators\n COLON = 'COLON',\n COMMA = 'COMMA',\n PIPE = 'PIPE',\n DOT = 'DOT',\n DASH = 'DASH',\n LBRACKET = 'LBRACKET',\n RBRACKET = 'RBRACKET',\n LPAREN = 'LPAREN',\n RPAREN = 'RPAREN',\n GREATER_THAN = 'GREATER_THAN',\n LESS_THAN = 'LESS_THAN',\n GREATER_EQUAL = 'GREATER_EQUAL',\n LESS_EQUAL = 'LESS_EQUAL',\n EQUALS = 'EQUALS',\n NOT_EQUALS = 'NOT_EQUALS',\n\n // Literals\n IDENTIFIER = 'IDENTIFIER',\n STRING = 'STRING',\n NUMBER_LITERAL = 'NUMBER_LITERAL',\n BOOLEAN = 'BOOLEAN',\n\n // Special\n EOF = 'EOF',\n ERROR = 'ERROR',\n}\n\nexport interface Token {\n type: TokenType;\n value: string;\n line: number;\n column: number;\n offset: number;\n}\n\n// Keyword mappings (case-insensitive)\nexport const KEYWORDS: Record<string, TokenType> = {\n 'a': TokenType.A,\n 'an': TokenType.AN,\n 'is': TokenType.IS,\n 'it': TokenType.IT,\n 'has': TokenType.HAS,\n 'belongs': TokenType.BELONGS,\n 'to': TokenType.TO,\n 'many': TokenType.MANY,\n 'one': TokenType.ONE,\n 'as': TokenType.AS,\n 'can': TokenType.CAN,\n 'be': TokenType.BE,\n 'starts': TokenType.STARTS,\n 'the': TokenType.THE,\n 'shows': TokenType.SHOWS,\n 'entity': TokenType.ENTITY,\n 'purpose': TokenType.PURPOSE,\n 'url': TokenType.URL,\n 'displays': TokenType.DISPLAYS,\n 'users': TokenType.USERS,\n 'when': TokenType.WHEN,\n 'on': TokenType.WHEN, // \"on EVENT\" is equivalent to \"when EVENT\"\n 'accessed': TokenType.ACCESSED,\n 'lifecycle': TokenType.LIFECYCLE,\n 'behavior': TokenType.BEHAVIOR,\n 'states': TokenType.STATES,\n 'initial': TokenType.INITIAL,\n 'transitions': TokenType.TRANSITIONS,\n 'from': TokenType.FROM,\n 'if': TokenType.IF,\n 'then': TokenType.THEN,\n 'rules': TokenType.RULES,\n 'every': TokenType.EVERY,\n 'check': TokenType.CHECK,\n 'and': TokenType.AND,\n 'or': TokenType.OR,\n 'not': TokenType.NOT,\n 'provided': TokenType.PROVIDED,\n 'empty': TokenType.EMPTY,\n 'user': TokenType.USER,\n 'owns': TokenType.OWNS,\n 'this': TokenType.THIS,\n 'text': TokenType.TEXT,\n 'number': TokenType.NUMBER,\n 'currency': TokenType.CURRENCY,\n 'date': TokenType.DATE,\n 'timestamp': TokenType.TIMESTAMP,\n 'required': TokenType.REQUIRED,\n 'unique': TokenType.UNIQUE,\n 'auto': TokenType.AUTO,\n 'default': TokenType.DEFAULT,\n 'true': TokenType.BOOLEAN,\n 'false': TokenType.BOOLEAN,\n};\n\n// Multi-word keywords\nexport const MULTI_WORD_KEYWORDS: Record<string, TokenType> = {\n 'long text': TokenType.LONG_TEXT,\n 'yes/no': TokenType.YES_NO,\n 'belongs to': TokenType.BELONGS,\n 'has many': TokenType.HAS,\n 'has one': TokenType.HAS,\n 'starts as': TokenType.STARTS,\n 'can be': TokenType.CAN,\n 'it has': TokenType.IT,\n};\n","/**\n * Domain Language Lexer\n *\n * Tokenizes domain language text into tokens for parsing.\n */\n\nimport { Token, TokenType, KEYWORDS } from './tokens.js';\n\nexport class Lexer {\n private input: string;\n private pos: number = 0;\n private line: number = 1;\n private column: number = 1;\n private indentStack: number[] = [0];\n\n constructor(input: string) {\n this.input = input;\n }\n\n /**\n * Tokenize the entire input\n */\n tokenize(): Token[] {\n const tokens: Token[] = [];\n\n while (!this.isAtEnd()) {\n const token = this.nextToken();\n if (token) {\n tokens.push(token);\n }\n }\n\n // Add any remaining DEDENT tokens\n while (this.indentStack.length > 1) {\n this.indentStack.pop();\n tokens.push(this.makeToken(TokenType.DEDENT, ''));\n }\n\n tokens.push(this.makeToken(TokenType.EOF, ''));\n return tokens;\n }\n\n private nextToken(): Token | null {\n // Handle start of line (indentation)\n if (this.column === 1) {\n const indentToken = this.handleIndentation();\n if (indentToken) {\n return indentToken;\n }\n }\n\n this.skipWhitespace();\n\n if (this.isAtEnd()) {\n return null;\n }\n\n const char = this.peek();\n\n // Newline\n if (char === '\\n') {\n return this.consumeNewline();\n }\n\n // Skip comments\n if (char === '#') {\n this.skipToEndOfLine();\n return this.nextToken();\n }\n\n // String literal\n if (char === '\"' || char === \"'\") {\n return this.consumeString(char);\n }\n\n // Number\n if (this.isDigit(char)) {\n return this.consumeNumber();\n }\n\n // Operators and punctuation\n switch (char) {\n case ':':\n return this.consumeChar(TokenType.COLON);\n case ',':\n return this.consumeChar(TokenType.COMMA);\n case '|':\n return this.consumeChar(TokenType.PIPE);\n case '.':\n return this.consumeChar(TokenType.DOT);\n case '-':\n return this.consumeChar(TokenType.DASH);\n case '[':\n return this.consumeChar(TokenType.LBRACKET);\n case ']':\n return this.consumeChar(TokenType.RBRACKET);\n case '(':\n return this.consumeChar(TokenType.LPAREN);\n case ')':\n return this.consumeChar(TokenType.RPAREN);\n case '>':\n if (this.peekNext() === '=') {\n return this.consumeChars(2, TokenType.GREATER_EQUAL);\n }\n return this.consumeChar(TokenType.GREATER_THAN);\n case '<':\n if (this.peekNext() === '=') {\n return this.consumeChars(2, TokenType.LESS_EQUAL);\n }\n return this.consumeChar(TokenType.LESS_THAN);\n case '=':\n if (this.peekNext() === '=') {\n return this.consumeChars(2, TokenType.EQUALS);\n }\n break;\n case '!':\n if (this.peekNext() === '=') {\n return this.consumeChars(2, TokenType.NOT_EQUALS);\n }\n break;\n }\n\n // Template variable: {varName}\n if (char === '{') {\n return this.consumeTemplateVar();\n }\n\n // Identifier or keyword\n if (this.isAlpha(char)) {\n return this.consumeIdentifier();\n }\n\n // Unknown character - skip it\n this.advance();\n return this.nextToken();\n }\n\n private consumeTemplateVar(): Token {\n const start = this.pos;\n this.advance(); // consume '{'\n\n // Track nested braces to handle JSON objects with nested objects/arrays\n let braceDepth = 1;\n\n // Collect characters until matching closing '}'\n while (!this.isAtEnd() && braceDepth > 0 && this.peek() !== '\\n') {\n const ch = this.peek();\n if (ch === '{') {\n braceDepth++;\n } else if (ch === '}') {\n braceDepth--;\n if (braceDepth === 0) {\n this.advance(); // consume final '}'\n break;\n }\n }\n this.advance();\n }\n\n const value = this.input.substring(start, this.pos);\n return this.makeToken(TokenType.TEMPLATE_VAR, value);\n }\n\n private handleIndentation(): Token | null {\n if (this.isAtEnd() || this.peek() === '\\n') {\n return null;\n }\n\n let indent = 0;\n while (this.peek() === ' ' || this.peek() === '\\t') {\n indent += this.peek() === '\\t' ? 4 : 1;\n this.advance();\n }\n\n // Skip blank lines\n if (this.peek() === '\\n' || this.peek() === '#') {\n return null;\n }\n\n const currentIndent = this.indentStack[this.indentStack.length - 1];\n\n if (indent > currentIndent) {\n this.indentStack.push(indent);\n return this.makeToken(TokenType.INDENT, '');\n } else if (indent < currentIndent) {\n // Pop indent levels until we match\n while (this.indentStack.length > 1 &&\n this.indentStack[this.indentStack.length - 1] > indent) {\n this.indentStack.pop();\n }\n return this.makeToken(TokenType.DEDENT, '');\n }\n\n return null;\n }\n\n private consumeNewline(): Token {\n const token = this.makeToken(TokenType.NEWLINE, '\\n');\n this.advance();\n this.line++;\n this.column = 1;\n return token;\n }\n\n private consumeString(quote: string): Token {\n const startLine = this.line;\n const startColumn = this.column;\n const startOffset = this.pos;\n\n this.advance(); // Opening quote\n\n let value = '';\n while (!this.isAtEnd() && this.peek() !== quote) {\n if (this.peek() === '\\\\' && this.peekNext() === quote) {\n this.advance();\n value += quote;\n } else if (this.peek() === '\\n') {\n // Multi-line strings not supported\n break;\n } else {\n value += this.peek();\n }\n this.advance();\n }\n\n if (this.peek() === quote) {\n this.advance(); // Closing quote\n }\n\n return {\n type: TokenType.STRING,\n value,\n line: startLine,\n column: startColumn,\n offset: startOffset,\n };\n }\n\n private consumeNumber(): Token {\n const startLine = this.line;\n const startColumn = this.column;\n const startOffset = this.pos;\n\n let value = '';\n while (this.isDigit(this.peek())) {\n value += this.advance();\n }\n\n // Decimal part\n if (this.peek() === '.' && this.isDigit(this.peekNext())) {\n value += this.advance(); // .\n while (this.isDigit(this.peek())) {\n value += this.advance();\n }\n }\n\n return {\n type: TokenType.NUMBER_LITERAL,\n value,\n line: startLine,\n column: startColumn,\n offset: startOffset,\n };\n }\n\n private consumeIdentifier(): Token {\n const startLine = this.line;\n const startColumn = this.column;\n const startOffset = this.pos;\n\n let value = '';\n while (this.isAlphaNumeric(this.peek()) || this.peek() === '_' || this.peek() === '/') {\n value += this.advance();\n }\n\n // Check for keywords\n const lowerValue = value.toLowerCase();\n const keywordType = KEYWORDS[lowerValue];\n\n return {\n type: keywordType || TokenType.IDENTIFIER,\n value,\n line: startLine,\n column: startColumn,\n offset: startOffset,\n };\n }\n\n private consumeChar(type: TokenType): Token {\n const token = this.makeToken(type, this.peek());\n this.advance();\n return token;\n }\n\n private consumeChars(count: number, type: TokenType): Token {\n let value = '';\n for (let i = 0; i < count; i++) {\n value += this.advance();\n }\n return {\n type,\n value,\n line: this.line,\n column: this.column - count,\n offset: this.pos - count,\n };\n }\n\n private skipWhitespace(): void {\n while (!this.isAtEnd() && (this.peek() === ' ' || this.peek() === '\\t')) {\n this.advance();\n }\n }\n\n private skipToEndOfLine(): void {\n while (!this.isAtEnd() && this.peek() !== '\\n') {\n this.advance();\n }\n }\n\n private makeToken(type: TokenType, value: string): Token {\n return {\n type,\n value,\n line: this.line,\n column: this.column,\n offset: this.pos,\n };\n }\n\n private peek(): string {\n return this.input[this.pos] || '\\0';\n }\n\n private peekNext(): string {\n return this.input[this.pos + 1] || '\\0';\n }\n\n private advance(): string {\n const char = this.peek();\n this.pos++;\n this.column++;\n return char;\n }\n\n private isAtEnd(): boolean {\n return this.pos >= this.input.length;\n }\n\n private isDigit(char: string): boolean {\n return char >= '0' && char <= '9';\n }\n\n private isAlpha(char: string): boolean {\n return (char >= 'a' && char <= 'z') ||\n (char >= 'A' && char <= 'Z') ||\n char === '_';\n }\n\n private isAlphaNumeric(char: string): boolean {\n return this.isAlpha(char) || this.isDigit(char);\n }\n}\n\n/**\n * Convenience function to tokenize a string\n */\nexport function tokenize(input: string): Token[] {\n const lexer = new Lexer(input);\n return lexer.tokenize();\n}\n","/**\n * Entity Parser\n *\n * Parses entity definitions from domain language.\n * All entity references are explicit (e.g., Order, User, Task).\n */\n\nimport type {\n DomainEntity,\n DomainField,\n DomainFieldType,\n DomainRelationship,\n RelationshipType,\n ParseResult,\n ParseError,\n} from '../types.js';\nimport { Lexer } from '../lexer.js';\nimport { TokenType, Token } from '../tokens.js';\n\ninterface EntityParseContext {\n errors: ParseError[];\n warnings: ParseError[];\n}\n\n/**\n * Parse an entity definition from domain text\n *\n * @example\n * parseEntity(`\n * A Order is a customer purchase request\n * It has:\n * - order number: text, required, unique\n * - amount: currency\n * - status: Pending | Confirmed | Shipped\n * It belongs to User\n * It can be: Pending, Confirmed, Shipped, Delivered, Cancelled\n * It starts as Pending\n * `)\n */\nexport function parseEntity(text: string): ParseResult<DomainEntity> {\n const ctx: EntityParseContext = { errors: [], warnings: [] };\n const lexer = new Lexer(text);\n const tokens = lexer.tokenize();\n\n let pos = 0;\n\n // Helper to get current token\n const current = () => tokens[pos] || { type: TokenType.EOF, value: '', line: 0, column: 0, offset: 0 };\n const peek = (offset = 0) => tokens[pos + offset] || { type: TokenType.EOF, value: '', line: 0, column: 0, offset: 0 };\n const advance = () => tokens[pos++];\n const isAtEnd = () => current().type === TokenType.EOF;\n const skip = (type: TokenType) => {\n while (current().type === type) advance();\n };\n\n // Skip leading whitespace\n skip(TokenType.NEWLINE);\n\n // Parse \"A [Name] is [description]\"\n const entityHeader = parseEntityHeader();\n if (!entityHeader) {\n return {\n success: false,\n errors: ctx.errors.length > 0 ? ctx.errors : [{\n message: 'Expected entity definition starting with \"A [Name] is...\"',\n }],\n warnings: [],\n };\n }\n\n const entity: DomainEntity = {\n type: 'entity',\n name: entityHeader.name,\n description: entityHeader.description,\n fields: [],\n relationships: [],\n };\n\n skip(TokenType.NEWLINE);\n\n // Parse remaining sections (fields, relationships, states)\n while (!isAtEnd()) {\n skip(TokenType.NEWLINE);\n if (isAtEnd()) break;\n\n const sectionResult = parseSection(entity);\n if (!sectionResult) {\n // Skip unknown content\n advance();\n }\n }\n\n return {\n success: true,\n data: entity,\n errors: ctx.errors,\n warnings: ctx.warnings,\n };\n\n // === Helper Functions ===\n\n // Check if a token can be used as an entity name\n // Some keywords like \"User\", \"Task\", \"Order\" are valid entity names\n function isEntityName(token: Token): boolean {\n // Identifiers are always valid\n if (token.type === TokenType.IDENTIFIER) return true;\n\n // Certain keywords can also be entity names when capitalized\n const keywordEntityNames = [\n TokenType.USER, // \"User\"\n TokenType.TEXT, // \"Text\" (unlikely but possible)\n TokenType.NUMBER, // \"Number\" (unlikely but possible)\n TokenType.DATE, // \"Date\" (unlikely but possible)\n ];\n return keywordEntityNames.includes(token.type);\n }\n\n function parseEntityHeader(): { name: string; description: string } | null {\n // Expect \"A\" or \"An\"\n if (current().type !== TokenType.A && current().type !== TokenType.AN) {\n ctx.errors.push({ message: 'Expected \"A\" or \"An\" at start of entity definition' });\n return null;\n }\n advance();\n\n // Get entity name (identifier or keyword that can be an entity name)\n if (!isEntityName(current())) {\n ctx.errors.push({ message: 'Expected entity name after \"A\"' });\n return null;\n }\n const name = current().value;\n advance();\n\n // Expect \"is\"\n if (current().type !== TokenType.IS) {\n ctx.errors.push({ message: `Expected \"is\" after entity name \"${name}\"` });\n return null;\n }\n advance();\n\n // Collect description until newline\n const descParts: string[] = [];\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n descParts.push(current().value);\n advance();\n }\n\n return {\n name,\n description: descParts.join(' ').trim(),\n };\n }\n\n function parseSection(entity: DomainEntity): boolean {\n const token = current();\n\n // INDENT followed by \"- has [field] as [type]\" (SKILL.md format)\n if (token.type === TokenType.INDENT) {\n advance();\n parseIndentedFields(entity);\n return true;\n }\n\n // \"It has:\" - fields section (old format)\n if (token.type === TokenType.IT) {\n advance();\n if (current().type === TokenType.HAS) {\n advance();\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n parseFieldsSection(entity);\n return true;\n }\n\n // \"It belongs to [Entity]\"\n if (current().type === TokenType.BELONGS) {\n advance();\n if (current().type === TokenType.TO) {\n advance();\n parseRelationship(entity, 'belongs_to');\n return true;\n }\n }\n\n // \"It can be: [states]\"\n if (current().type === TokenType.CAN) {\n advance();\n if (current().type === TokenType.BE) {\n advance();\n skip(TokenType.COLON);\n parseStates(entity);\n return true;\n }\n }\n\n // \"It starts as [state]\"\n if (current().type === TokenType.STARTS) {\n advance();\n if (current().type === TokenType.AS) {\n advance();\n parseInitialState(entity);\n return true;\n }\n }\n }\n\n // \"has many [Entity]\" - relationship\n if (token.type === TokenType.HAS) {\n advance();\n if (current().type === TokenType.MANY) {\n advance();\n parseRelationship(entity, 'has_many');\n return true;\n }\n if (current().type === TokenType.ONE) {\n advance();\n parseRelationship(entity, 'has_one');\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Parse indented field lines in SKILL.md format:\n * - has [field] as [type] (constraints)\n * - belongs to [Entity]\n * - has many [Entity]s\n */\n function parseIndentedFields(entity: DomainEntity): void {\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Skip leading dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n // \"has [field] as [type]\" pattern\n if (current().type === TokenType.HAS) {\n advance();\n\n // Check for \"has many [Entity]s\" pattern\n if (current().type === TokenType.MANY) {\n advance();\n parseRelationship(entity, 'has_many');\n continue;\n }\n\n // Parse field: \"[name] as [type] (constraints)\"\n const field = parseHasFieldLine();\n if (field) {\n entity.fields.push(field);\n }\n continue;\n }\n\n // \"belongs to [Entity]\" pattern\n if (current().type === TokenType.BELONGS) {\n advance();\n if (current().type === TokenType.TO) {\n advance();\n parseRelationship(entity, 'belongs_to');\n continue;\n }\n }\n\n // Skip unrecognized content to end of line\n while (!isAtEnd() && current().type !== TokenType.NEWLINE && current().type !== TokenType.DEDENT) {\n advance();\n }\n skip(TokenType.NEWLINE);\n }\n\n // Consume DEDENT\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n /**\n * Parse \"has [field] as [type] (constraints)\" pattern\n */\n function parseHasFieldLine(): DomainField | null {\n // Get field name\n if (current().type !== TokenType.IDENTIFIER) {\n return null;\n }\n const fieldName = toCamelCase(current().value);\n advance();\n\n // Expect \"as\"\n if (current().type !== TokenType.AS) {\n // Skip to end of line\n while (!isAtEnd() && current().type !== TokenType.NEWLINE && current().type !== TokenType.DEDENT) {\n advance();\n }\n return null;\n }\n advance();\n\n // Parse field type\n const field: DomainField = {\n type: 'field',\n name: fieldName,\n fieldType: 'text',\n required: false,\n unique: false,\n auto: false,\n };\n\n // Get field type (may be multiple tokens like \"long text\" or \"yes/no\")\n const typeParts: string[] = [];\n while (!isAtEnd() &&\n current().type !== TokenType.NEWLINE &&\n current().type !== TokenType.DEDENT &&\n current().type !== TokenType.LPAREN &&\n current().value !== 'with') {\n typeParts.push(current().value);\n advance();\n }\n const typeText = typeParts.join(' ').trim().toLowerCase();\n\n // Map type text to DomainFieldType\n if (typeText.includes('long text')) {\n field.fieldType = 'long text';\n } else if (typeText === 'text' || typeText === 'string') {\n field.fieldType = 'text';\n } else if (typeText === 'number' || typeText === 'integer') {\n field.fieldType = 'number';\n } else if (typeText === 'currency') {\n field.fieldType = 'currency';\n } else if (typeText === 'yes/no' || typeText === 'boolean') {\n field.fieldType = 'yes/no';\n } else if (typeText === 'date') {\n field.fieldType = 'date';\n } else if (typeText === 'timestamp' || typeText === 'datetime') {\n field.fieldType = 'timestamp';\n } else if (typeText.startsWith('enum')) {\n field.fieldType = 'enum';\n // Extract enum values from \"enum [val1, val2, val3]\"\n const enumMatch = typeText.match(/enum\\s*\\[([^\\]]+)\\]/);\n if (enumMatch) {\n field.enumValues = enumMatch[1].split(',').map(v => v.trim());\n }\n } else if (typeText === 'list' || typeText === 'array') {\n field.fieldType = 'list';\n } else if (typeText === 'object') {\n field.fieldType = 'object';\n } else {\n field.fieldType = 'text';\n }\n\n // Parse constraints in parentheses: (required), (optional), with default [value]\n if (current().type === TokenType.LPAREN) {\n advance();\n while (!isAtEnd() && current().type !== TokenType.RPAREN && current().type !== TokenType.NEWLINE) {\n const constraint = current().value.toLowerCase();\n if (constraint === 'required') {\n field.required = true;\n } else if (constraint === 'optional') {\n field.required = false;\n } else if (constraint === 'unique') {\n field.unique = true;\n }\n advance();\n }\n if (current().type === TokenType.RPAREN) {\n advance();\n }\n }\n\n // Parse \"with default [value]\"\n if (current().type === TokenType.IDENTIFIER && current().value.toLowerCase() === 'with') {\n advance();\n if (current().type === TokenType.DEFAULT) {\n advance();\n // Get default value\n if (current().type === TokenType.STRING) {\n field.default = current().value;\n advance();\n } else if (current().type === TokenType.NUMBER_LITERAL) {\n field.default = parseFloat(current().value);\n advance();\n } else if (current().type === TokenType.BOOLEAN) {\n field.default = current().value === 'true';\n advance();\n } else if (current().type === TokenType.IDENTIFIER) {\n field.default = current().value;\n advance();\n }\n }\n }\n\n return field;\n }\n\n function parseFieldsSection(entity: DomainEntity): void {\n // Expect INDENT\n if (current().type !== TokenType.INDENT) {\n return;\n }\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Parse field line: \"- [name]: [type], [constraints]\"\n const field = parseFieldLine();\n if (field) {\n entity.fields.push(field);\n }\n\n skip(TokenType.NEWLINE);\n }\n\n // Consume DEDENT\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n function parseFieldLine(): DomainField | null {\n // Optional dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n // Field name (may be multiple words)\n const nameParts: string[] = [];\n while (!isAtEnd() &&\n current().type !== TokenType.COLON &&\n current().type !== TokenType.NEWLINE) {\n nameParts.push(current().value);\n advance();\n }\n\n if (nameParts.length === 0) {\n return null;\n }\n\n const fieldName = toCamelCase(nameParts.join(' '));\n\n // Expect colon\n if (current().type !== TokenType.COLON) {\n ctx.errors.push({ message: `Expected \":\" after field name \"${fieldName}\"` });\n return null;\n }\n advance();\n\n // Parse field type and constraints\n return parseFieldTypeAndConstraints(fieldName);\n }\n\n function parseFieldTypeAndConstraints(fieldName: string): DomainField {\n const field: DomainField = {\n type: 'field',\n name: fieldName,\n fieldType: 'text',\n required: false,\n unique: false,\n auto: false,\n };\n\n const parts: string[] = [];\n\n // Collect all tokens until newline\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n parts.push(current().value);\n advance();\n }\n\n // Parse the parts\n const content = parts.join(' ').trim();\n\n // Check for enum (contains |)\n if (content.includes('|')) {\n field.fieldType = 'enum';\n field.enumValues = content.split('|').map(v => v.trim()).filter(v => v);\n return field;\n }\n\n // Split by comma for type and constraints\n const segments = content.split(',').map(s => s.trim().toLowerCase());\n\n for (const segment of segments) {\n // Check for field types (all types from DOMAIN_TO_SCHEMA_FIELD_TYPE)\n if (segment === 'text') field.fieldType = 'text';\n else if (segment === 'long text') field.fieldType = 'long text';\n else if (segment === 'number') field.fieldType = 'number';\n else if (segment === 'currency') field.fieldType = 'currency';\n else if (segment === 'date') field.fieldType = 'date';\n else if (segment === 'timestamp') field.fieldType = 'timestamp';\n else if (segment === 'datetime') field.fieldType = 'datetime';\n else if (segment === 'yes/no' || segment === 'boolean') field.fieldType = 'yes/no';\n else if (segment === 'list') field.fieldType = 'list';\n else if (segment === 'object') field.fieldType = 'object';\n // Check for constraints\n else if (segment === 'required') field.required = true;\n else if (segment === 'unique') field.unique = true;\n else if (segment === 'auto') field.auto = true;\n else if (segment.startsWith('default ')) {\n field.default = parseValue(segment.slice(8));\n }\n }\n\n return field;\n }\n\n function parseRelationship(entity: DomainEntity, relType: RelationshipType): void {\n // Get target entity name\n if (current().type !== TokenType.IDENTIFIER) {\n return;\n }\n const targetEntity = current().value;\n advance();\n\n let alias: string | undefined;\n\n // Check for \"as [Alias]\"\n if (current().type === TokenType.AS) {\n advance();\n if (current().type === TokenType.IDENTIFIER) {\n alias = current().value;\n advance();\n }\n }\n\n entity.relationships.push({\n type: 'relationship',\n relationshipType: relType,\n targetEntity,\n alias,\n });\n }\n\n function parseStates(entity: DomainEntity): void {\n const states: string[] = [];\n\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n if (current().type === TokenType.IDENTIFIER) {\n states.push(current().value);\n }\n advance();\n }\n\n entity.states = states;\n }\n\n function parseInitialState(entity: DomainEntity): void {\n if (current().type === TokenType.IDENTIFIER) {\n entity.initialState = current().value;\n advance();\n }\n }\n}\n\n/**\n * Format an entity AST back to domain text\n */\nexport function formatEntityToDomain(entity: DomainEntity): string {\n const lines: string[] = [];\n\n // Header line\n const article = startsWithVowel(entity.name) ? 'An' : 'A';\n lines.push(`${article} ${entity.name} is ${entity.description}`);\n\n // Fields section\n if (entity.fields.length > 0) {\n lines.push('');\n lines.push('It has:');\n for (const field of entity.fields) {\n lines.push(` - ${toSpaceSeparated(field.name)}: ${formatFieldType(field)}`);\n }\n }\n\n // Relationships\n for (const rel of entity.relationships) {\n lines.push('');\n if (rel.relationshipType === 'belongs_to') {\n const aliasStr = rel.alias ? ` as ${rel.alias}` : '';\n lines.push(`It belongs to ${rel.targetEntity}${aliasStr}`);\n } else if (rel.relationshipType === 'has_many') {\n lines.push(`It has many ${rel.targetEntity}`);\n } else if (rel.relationshipType === 'has_one') {\n lines.push(`It has one ${rel.targetEntity}`);\n }\n }\n\n // States\n if (entity.states && entity.states.length > 0) {\n lines.push('');\n lines.push(`It can be: ${entity.states.join(', ')}`);\n if (entity.initialState) {\n lines.push(`It starts as ${entity.initialState}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format entity AST to KFlow schema\n */\nexport function formatEntityToSchema(entity: DomainEntity): Record<string, unknown> {\n const fields = entity.fields.map(field => ({\n name: field.name,\n type: mapFieldTypeToSchema(field.fieldType),\n required: field.required || undefined,\n unique: field.unique || undefined,\n auto: field.auto || undefined,\n values: field.enumValues, // OrbitalSchema uses 'values' not 'enumValues'\n default: field.default,\n }));\n\n // Add relationship fields\n for (const rel of entity.relationships) {\n if (rel.relationshipType === 'belongs_to') {\n const fieldName = rel.alias\n ? toCamelCase(rel.alias) + 'Id'\n : toCamelCase(rel.targetEntity) + 'Id';\n fields.push({\n name: fieldName,\n type: 'relation',\n required: undefined,\n unique: undefined,\n auto: undefined,\n values: undefined,\n default: undefined,\n relation: {\n entity: rel.targetEntity,\n type: 'many-to-one',\n },\n } as any);\n }\n }\n\n return {\n name: entity.name,\n collection: toKebabCase(entity.name) + 's',\n fields: fields.filter(f => Object.keys(f).length > 0),\n states: entity.states,\n initialState: entity.initialState,\n };\n}\n\n// === Utility Functions ===\n\nfunction toCamelCase(text: string): string {\n return text\n .toLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join('');\n}\n\nfunction toSpaceSeparated(text: string): string {\n return text.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();\n}\n\nfunction toKebabCase(text: string): string {\n return text\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .toLowerCase();\n}\n\n/**\n * Check if a word starts with a vowel SOUND (not just vowel letter)\n * Used for determining \"A\" vs \"An\" article\n */\nfunction startsWithVowel(text: string): boolean {\n const lower = text.toLowerCase();\n\n // Words that start with vowel letter but consonant sound (use \"A\")\n // \"U\" pronounced as \"yoo\": user, unicorn, unique, universal, union, etc.\n // \"Eu\" pronounced as \"yoo\": European, eureka, etc.\n if (/^(u[^aeiou]|uni|euro)/i.test(lower)) {\n return false;\n }\n\n // Words that start with consonant letter but vowel sound (use \"An\")\n // Silent \"H\": hour, honest, honor, heir, etc.\n if (/^(hour|honest|honor|heir)/i.test(lower)) {\n return true;\n }\n\n // Default: check if first letter is a vowel\n return /^[aeiou]/i.test(text);\n}\n\nfunction parseValue(text: string): string | number | boolean {\n text = text.trim();\n if (text.toLowerCase() === 'true') return true;\n if (text.toLowerCase() === 'false') return false;\n const num = parseFloat(text);\n if (!isNaN(num)) return num;\n return text.replace(/^[\"']|[\"']$/g, '');\n}\n\nfunction formatFieldType(field: DomainField): string {\n const parts: string[] = [];\n\n if (field.enumValues && field.enumValues.length > 0) {\n parts.push(field.enumValues.join(' | '));\n } else {\n parts.push(field.fieldType);\n }\n\n if (field.required) parts.push('required');\n if (field.unique) parts.push('unique');\n if (field.auto) parts.push('auto');\n if (field.default !== undefined) {\n parts.push(`default ${field.default}`);\n }\n\n return parts.join(', ');\n}\n\nfunction mapFieldTypeToSchema(fieldType: DomainFieldType): string {\n // Use the centralized DOMAIN_TO_SCHEMA_FIELD_TYPE from types.ts\n const mapping: Record<DomainFieldType, string> = {\n 'text': 'string',\n 'long text': 'string',\n 'number': 'number',\n 'currency': 'number',\n 'date': 'date',\n 'timestamp': 'timestamp',\n 'datetime': 'datetime',\n 'yes/no': 'boolean',\n 'enum': 'enum',\n 'list': 'array',\n 'object': 'object',\n 'relation': 'relation',\n };\n return mapping[fieldType] || 'string';\n}\n","/**\n * Page Parser\n *\n * Parses page definitions from domain language.\n */\n\nimport type {\n DomainPage,\n DomainPageSection,\n DomainPageAction,\n ParseResult,\n ParseError,\n} from '../types.js';\nimport { Lexer } from '../lexer.js';\nimport { TokenType } from '../tokens.js';\n\ninterface PageParseContext {\n errors: ParseError[];\n warnings: ParseError[];\n}\n\n/**\n * Parse a page definition from domain text\n *\n * @example\n * parsePage(`\n * The Dashboard shows an overview of system activity\n * Purpose: Help users monitor their tasks and orders\n * URL: /dashboard\n *\n * It displays:\n * - Summary statistics for today\n * - Recent orders list\n * - Pending tasks requiring attention\n *\n * Users can:\n * - Click a task to view details\n * - Filter orders by status\n * `)\n */\nexport function parsePage(text: string): ParseResult<DomainPage> {\n const ctx: PageParseContext = { errors: [], warnings: [] };\n const lexer = new Lexer(text);\n const tokens = lexer.tokenize();\n\n let pos = 0;\n\n // Helper functions\n const current = () => tokens[pos] || { type: TokenType.EOF, value: '', line: 0, column: 0, offset: 0 };\n const advance = () => tokens[pos++];\n const isAtEnd = () => current().type === TokenType.EOF;\n const skip = (type: TokenType) => {\n while (current().type === type) advance();\n };\n\n // Skip leading whitespace\n skip(TokenType.NEWLINE);\n\n // Parse \"The [PageName] shows [description]\"\n const pageHeader = parsePageHeader();\n if (!pageHeader) {\n return {\n success: false,\n errors: ctx.errors.length > 0 ? ctx.errors : [{\n message: 'Expected page definition starting with \"The [PageName] shows...\"',\n }],\n warnings: [],\n };\n }\n\n const page: DomainPage = {\n type: 'page',\n name: pageHeader.name,\n description: pageHeader.description,\n purpose: '',\n url: pageHeader.url || '',\n primaryEntity: pageHeader.primaryEntity,\n traitName: pageHeader.traitName,\n sections: [],\n actions: [],\n };\n\n skip(TokenType.NEWLINE);\n\n // Parse remaining sections\n while (!isAtEnd()) {\n skip(TokenType.NEWLINE);\n if (isAtEnd()) break;\n\n const parsed = parsePageSection(page);\n if (!parsed) {\n advance();\n }\n }\n\n // Generate URL if not provided\n if (!page.url) {\n page.url = '/' + toKebabCase(page.name.replace(/Page$/i, ''));\n }\n\n return {\n success: true,\n data: page,\n errors: ctx.errors,\n warnings: ctx.warnings,\n };\n\n // === Helper Functions ===\n\n function parsePageHeader(): { name: string; description: string; url?: string; primaryEntity?: string; traitName?: string } | null {\n // Check for alternative format: \"[PageName] at /[path]:\"\n if (current().type === TokenType.IDENTIFIER) {\n const firstToken = current().value;\n advance();\n\n // Check if next token is \"at\" or more identifiers followed by \"at\"\n const nameParts: string[] = [firstToken];\n while (current().type === TokenType.IDENTIFIER && current().value.toLowerCase() !== 'at') {\n nameParts.push(current().value);\n advance();\n }\n\n // Check for \"at\" keyword (which is just an identifier)\n if (current().type === TokenType.IDENTIFIER && current().value.toLowerCase() === 'at') {\n advance();\n\n // Collect URL path\n const pathParts: string[] = [];\n while (!isAtEnd() && current().type !== TokenType.COLON && current().type !== TokenType.NEWLINE) {\n pathParts.push(current().value);\n advance();\n }\n const url = pathParts.join('');\n\n // Skip colon\n if (current().type === TokenType.COLON) {\n advance();\n }\n\n // Normalize page name - preserve PascalCase\n let name = nameParts.map(p => toPascalCase(p)).join('');\n if (!name.toLowerCase().endsWith('page')) {\n name += 'Page';\n }\n\n // Parse the page body for additional info\n skip(TokenType.NEWLINE);\n let primaryEntity: string | undefined;\n let traitName: string | undefined;\n\n // Parse indented lines for \"shows\", \"view type\", \"is initial page\"\n if (current().type === TokenType.INDENT) {\n advance();\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Skip dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n // Check for \"shows [Entity] using [Trait]\"\n if (current().type === TokenType.SHOWS) {\n advance();\n if (current().type === TokenType.IDENTIFIER) {\n primaryEntity = current().value;\n advance();\n }\n // Check for \"using [TraitName]\"\n if (current().type === TokenType.IDENTIFIER && current().value.toLowerCase() === 'using') {\n advance();\n if (current().type === TokenType.IDENTIFIER) {\n traitName = current().value;\n advance();\n }\n }\n }\n\n // Skip to end of line\n while (!isAtEnd() && current().type !== TokenType.NEWLINE && current().type !== TokenType.DEDENT) {\n advance();\n }\n skip(TokenType.NEWLINE);\n }\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n return {\n name,\n description: `Page at ${url}`,\n url,\n primaryEntity,\n traitName,\n };\n }\n\n // Reset position if not \"at\" format - rewind not possible with current design\n // Fall through to old format check\n }\n\n // Original format: \"The [PageName] shows [description]\"\n // Expect \"The\"\n if (current().type !== TokenType.THE) {\n ctx.errors.push({ message: 'Expected \"The\" at start of page definition' });\n return null;\n }\n advance();\n\n // Get page name (may be multiple identifiers like \"Task List Page\")\n const nameParts: string[] = [];\n while (current().type === TokenType.IDENTIFIER) {\n nameParts.push(current().value);\n advance();\n }\n\n if (nameParts.length === 0) {\n ctx.errors.push({ message: 'Expected page name after \"The\"' });\n return null;\n }\n\n // Normalize page name - preserve PascalCase\n let name = nameParts.map(p => toPascalCase(p)).join('');\n if (!name.toLowerCase().endsWith('page')) {\n name += 'Page';\n }\n\n // Expect \"shows\"\n if (current().type !== TokenType.SHOWS) {\n ctx.errors.push({ message: `Expected \"shows\" after page name \"${name}\"` });\n return null;\n }\n advance();\n\n // Collect description until newline\n const descParts: string[] = [];\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n descParts.push(current().value);\n advance();\n }\n\n return {\n name,\n description: descParts.join(' ').trim(),\n };\n }\n\n function parsePageSection(page: DomainPage): boolean {\n const token = current();\n\n // \"Entity: [EntityName]\" - EXPLICIT entity reference (no inference!)\n if (token.type === TokenType.ENTITY) {\n advance();\n skip(TokenType.COLON);\n page.primaryEntity = collectUntilNewline();\n return true;\n }\n\n // \"Purpose: [text]\"\n if (token.type === TokenType.PURPOSE) {\n advance();\n skip(TokenType.COLON);\n page.purpose = collectUntilNewline();\n return true;\n }\n\n // \"URL: [path]\"\n if (token.type === TokenType.URL) {\n advance();\n skip(TokenType.COLON);\n page.url = collectUntilNewline();\n return true;\n }\n\n // \"It displays:\" - sections\n if (token.type === TokenType.IT) {\n advance();\n if (current().type === TokenType.DISPLAYS) {\n advance();\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n parseDisplaysSection(page);\n return true;\n }\n }\n\n // \"Users can:\" or \"Users\" - actions\n if (token.type === TokenType.USERS) {\n advance();\n if (current().type === TokenType.CAN) {\n advance();\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n parseActionsSection(page);\n return true;\n }\n }\n\n // \"When accessed:\" - onAccess\n if (token.type === TokenType.WHEN) {\n advance();\n if (current().type === TokenType.ACCESSED) {\n advance();\n skip(TokenType.COLON);\n page.onAccess = collectUntilNewline();\n return true;\n }\n }\n\n return false;\n }\n\n function parseDisplaysSection(page: DomainPage): void {\n // Expect INDENT\n if (current().type !== TokenType.INDENT) {\n return;\n }\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Parse section line: \"- [description]\"\n const section = parseSectionLine();\n if (section) {\n page.sections.push(section);\n }\n\n skip(TokenType.NEWLINE);\n }\n\n // Consume DEDENT\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n function parseSectionLine(): DomainPageSection | null {\n // Optional dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n const description = collectUntilNewline();\n if (!description) {\n return null;\n }\n\n return {\n type: 'page_section',\n description,\n };\n }\n\n function parseActionsSection(page: DomainPage): void {\n // Expect INDENT\n if (current().type !== TokenType.INDENT) {\n return;\n }\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Parse action line: \"- [trigger] to [action]\"\n const action = parseActionLine();\n if (action) {\n page.actions.push(action);\n }\n\n skip(TokenType.NEWLINE);\n }\n\n // Consume DEDENT\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n function parseActionLine(): DomainPageAction | null {\n // Optional dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n const fullText = collectUntilNewline();\n if (!fullText) {\n return null;\n }\n\n // Split on \" to \" to separate trigger and action\n const toIndex = fullText.toLowerCase().indexOf(' to ');\n if (toIndex === -1) {\n // No \"to\" found, treat whole thing as trigger\n return {\n type: 'page_action',\n trigger: fullText,\n action: '',\n };\n }\n\n return {\n type: 'page_action',\n trigger: fullText.slice(0, toIndex).trim(),\n action: fullText.slice(toIndex + 4).trim(),\n };\n }\n\n function collectUntilNewline(): string {\n const parts: string[] = [];\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n parts.push(current().value);\n advance();\n }\n return parts.join(' ').trim();\n }\n}\n\n/**\n * Format a page AST back to domain text\n */\nexport function formatPageToDomain(page: DomainPage): string {\n const lines: string[] = [];\n\n // Header line\n const displayName = page.name.replace(/Page$/, '');\n lines.push(`The ${displayName} shows ${page.description}`);\n\n // Entity - EXPLICIT reference (no inference on parse!)\n if (page.primaryEntity) {\n lines.push(`Entity: ${page.primaryEntity}`);\n }\n\n // Purpose\n if (page.purpose) {\n lines.push(`Purpose: ${page.purpose}`);\n }\n\n // URL\n if (page.url) {\n lines.push(`URL: ${page.url}`);\n }\n\n // Sections\n if (page.sections.length > 0) {\n lines.push('');\n lines.push('It displays:');\n for (const section of page.sections) {\n lines.push(` - ${section.description}`);\n }\n }\n\n // Actions\n if (page.actions.length > 0) {\n lines.push('');\n lines.push('Users can:');\n for (const action of page.actions) {\n if (action.action) {\n lines.push(` - ${action.trigger} to ${action.action}`);\n } else {\n lines.push(` - ${action.trigger}`);\n }\n }\n }\n\n // On access\n if (page.onAccess) {\n lines.push('');\n lines.push(`When accessed: ${page.onAccess}`);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format page AST to KFlow schema\n */\nexport function formatPageToSchema(page: DomainPage): Record<string, unknown> {\n // Infer viewType from page name (this is acceptable - it's a display hint, not critical data)\n const viewType = inferViewTypeFromPageName(page.name);\n\n // Use EXPLICIT primaryEntity from domain text - NO INFERENCE!\n const primaryEntity = page.primaryEntity;\n\n return {\n name: page.name,\n path: page.url.startsWith('/') ? page.url : `/${page.url}`,\n purpose: page.purpose || page.description,\n sections: page.sections.map((section, index) => {\n const pattern = inferPatternFromDescription(section.description);\n const patternConfig = inferPatternConfigFromDescription(section.description, page.primaryEntity);\n\n return {\n id: `section-${index}`,\n purpose: section.description,\n order: index,\n estimatedSize: 'medium',\n pattern: {\n type: pattern,\n ...patternConfig,\n },\n };\n }),\n traits: [],\n primaryEntity,\n viewType,\n isInitial: page.url === '/' || page.url === '/dashboard',\n };\n}\n\n/**\n * Infer view type from page name\n */\nfunction inferViewTypeFromPageName(name: string): string {\n const lower = name.toLowerCase();\n\n if (lower.includes('list') || lower.includes('index')) {\n return 'list';\n }\n if (lower.includes('detail') || lower.includes('view')) {\n return 'detail';\n }\n if (lower.includes('create') || lower.includes('new')) {\n return 'create';\n }\n if (lower.includes('edit')) {\n return 'edit';\n }\n if (lower.includes('dashboard')) {\n return 'dashboard';\n }\n\n return 'list';\n}\n\n/**\n * Get pattern config from description, using explicit entity when available\n * IMPORTANT: Use primaryEntity from explicit \"Entity:\" line when available.\n * Pattern detection from description is acceptable (e.g., \"list\" → entity-list pattern)\n * but entity association MUST come from explicit data.\n */\nfunction inferPatternConfigFromDescription(description: string, primaryEntity?: string): Record<string, unknown> {\n const lower = description.toLowerCase();\n\n // Use explicit entity when available, otherwise use a placeholder\n // The placeholder indicates the schema needs explicit entity data\n const entityName = primaryEntity || 'Item';\n\n // Header pattern - doesn't need entity\n if (lower.includes('header') || lower.includes('title')) {\n const titleMatch = description.match(/title\\s*[\"']?([^\"']+)[\"']?/i) ||\n description.match(/[\"']([^\"']+)[\"']/);\n return {\n title: titleMatch ? titleMatch[1] : 'Page Title',\n };\n }\n\n // Entity list pattern\n if (lower.includes('list') || lower.includes('table')) {\n return {\n entity: entityName,\n fieldNames: ['id', 'name', 'createdAt'],\n };\n }\n\n // Entity detail pattern\n if (lower.includes('detail')) {\n return {\n entity: entityName,\n fieldNames: ['id', 'name', 'description', 'createdAt'],\n };\n }\n\n // Form pattern\n if (lower.includes('form')) {\n return {\n entity: entityName,\n fields: [\n { field: 'name', label: 'Name', type: 'text', required: true },\n { field: 'description', label: 'Description', type: 'textarea' },\n ],\n };\n }\n\n // Stats/statistics/summary patterns\n if (lower.includes('stats') || lower.includes('statistics') ||\n lower.includes('summary') || lower.includes('overview')) {\n return {\n entity: entityName,\n fieldNames: ['id', 'name', 'value'],\n };\n }\n\n // Default: entity-list needs entity and fieldNames\n return {\n entity: entityName,\n fieldNames: ['id', 'name', 'createdAt'],\n };\n}\n\n// === Utility Functions ===\n\nfunction capitalize(text: string): string {\n return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();\n}\n\n/**\n * Convert text to PascalCase, preserving existing PascalCase words.\n * \"notesPage\" → \"NotesPage\"\n * \"NotesPage\" → \"NotesPage\" (preserved)\n * \"notes page\" → \"NotesPage\"\n */\nfunction toPascalCase(text: string): string {\n // If already PascalCase (starts with uppercase, has lowercase), preserve it\n if (/^[A-Z][a-zA-Z]*$/.test(text)) {\n return text;\n }\n // If it's all lowercase or has spaces, convert to PascalCase\n if (text.includes(' ')) {\n return text.split(' ').map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join('');\n }\n // Single word - capitalize first letter, preserve rest\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\nfunction toKebabCase(text: string): string {\n return text\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/\\s+/g, '-')\n .toLowerCase();\n}\n\n/**\n * Infer a section pattern from its natural language description\n * Valid pattern types: page-header, title-only, entity-list, entity-table, entity-detail, form-section\n */\nfunction inferPatternFromDescription(description: string): string {\n const lower = description.toLowerCase();\n\n // Header patterns - check FIRST to prevent \"Header with title Details\" being matched as detail\n if (lower.includes('header')) {\n return 'page-header';\n }\n\n // List patterns\n if (lower.includes('list') || lower.includes('table')) {\n return 'entity-list';\n }\n\n // Statistics/dashboard - map to entity-list for now\n if (lower.includes('statistics') || lower.includes('stats') ||\n lower.includes('summary') || lower.includes('overview')) {\n return 'entity-list';\n }\n\n // Form patterns\n if (lower.includes('form') || lower.includes('input') || lower.includes('edit')) {\n return 'form-section';\n }\n\n // Detail patterns\n if (lower.includes('detail') || lower.includes('view')) {\n return 'entity-detail';\n }\n\n // Chart patterns - map to entity-list for now\n if (lower.includes('chart') || lower.includes('graph')) {\n return 'entity-list';\n }\n\n // Timeline - map to entity-list for now\n if (lower.includes('timeline') || lower.includes('history') || lower.includes('activity')) {\n return 'entity-list';\n }\n\n // Title-only patterns (without \"header\" keyword)\n if (lower.includes('title')) {\n return 'page-header';\n }\n\n // Default to entity-list\n return 'entity-list';\n}\n","/**\n * Guard Expression Parser\n *\n * Parses guard expressions deterministically from domain language.\n * All entity references are explicit (e.g., Order.amount, CurrentUser.role).\n */\n\nimport type {\n GuardCondition,\n FieldReference,\n FieldCheckCondition,\n ComparisonCondition,\n UserCheckCondition,\n LogicalCondition,\n DomainGuard,\n ParseResult,\n ParseError,\n ComparisonOperator,\n} from '../types.js';\n\ninterface GuardParseContext {\n entityName: string; // Current entity context (e.g., \"Order\")\n errors: ParseError[];\n}\n\n/**\n * Parse a guard expression from domain text\n *\n * @example\n * parseGuard(\"if amount > 1000\", \"Order\")\n * // Returns: { field: { entityName: \"Order\", fieldName: \"amount\" }, operator: \">\", value: 1000 }\n */\nexport function parseGuard(text: string, entityName: string): ParseResult<DomainGuard> {\n const ctx: GuardParseContext = { entityName, errors: [] };\n\n // Remove leading \"if \" if present\n let expression = text.trim();\n if (expression.toLowerCase().startsWith('if ')) {\n expression = expression.slice(3).trim();\n }\n\n const condition = parseCondition(expression, ctx);\n\n if (!condition) {\n return {\n success: false,\n errors: ctx.errors.length > 0 ? ctx.errors : [{\n message: `Failed to parse guard expression: \"${text}\"`,\n }],\n warnings: [],\n };\n }\n\n return {\n success: true,\n data: {\n type: 'guard',\n condition,\n raw: text,\n },\n errors: [],\n warnings: [],\n };\n}\n\n/**\n * Parse a condition (may be simple or compound with AND/OR)\n */\nfunction parseCondition(text: string, ctx: GuardParseContext): GuardCondition | null {\n text = text.trim();\n\n // Check for logical operators (AND/OR) - split at top level\n const andMatch = splitAtTopLevel(text, ' AND ');\n if (andMatch) {\n const left = parseCondition(andMatch.left, ctx);\n const right = parseCondition(andMatch.right, ctx);\n if (left && right) {\n return {\n type: 'logical',\n operator: 'AND',\n left,\n right,\n };\n }\n }\n\n const orMatch = splitAtTopLevel(text, ' OR ');\n if (orMatch) {\n const left = parseCondition(orMatch.left, ctx);\n const right = parseCondition(orMatch.right, ctx);\n if (left && right) {\n return {\n type: 'logical',\n operator: 'OR',\n left,\n right,\n };\n }\n }\n\n // Try each simple condition type\n return parseUserCheck(text, ctx) ||\n parseFieldCheck(text, ctx) ||\n parseComparison(text, ctx);\n}\n\n/**\n * Parse user check conditions\n * - \"user is manager\" → CurrentUser.role == \"manager\"\n * - \"user owns this\" → Order.ownerId == CurrentUser.id\n */\nfunction parseUserCheck(text: string, ctx: GuardParseContext): UserCheckCondition | null {\n const lowerText = text.toLowerCase();\n\n // \"user is [role]\"\n const roleMatch = lowerText.match(/^user\\s+is\\s+(\\w+)$/);\n if (roleMatch) {\n return {\n type: 'user_check',\n check: 'is_role',\n role: roleMatch[1],\n };\n }\n\n // \"user owns this\"\n if (lowerText === 'user owns this') {\n return {\n type: 'user_check',\n check: 'owns_this',\n ownerField: 'ownerId',\n };\n }\n\n return null;\n}\n\n/**\n * Parse field check conditions\n * - \"amount is provided\" → Order.amount != null\n * - \"amount is empty\" → Order.amount == null\n * - \"status is Pending\" → Order.status == \"Pending\"\n * - \"status is not Cancelled\" → Order.status != \"Cancelled\"\n */\nfunction parseFieldCheck(text: string, ctx: GuardParseContext): FieldCheckCondition | null {\n const lowerText = text.toLowerCase();\n\n // \"[field] is provided\"\n const providedMatch = text.match(/^(.+?)\\s+is\\s+provided$/i);\n if (providedMatch) {\n const field = parseFieldReference(providedMatch[1], ctx);\n if (field) {\n return {\n type: 'field_check',\n field,\n check: 'provided',\n };\n }\n }\n\n // \"[field] is empty\"\n const emptyMatch = text.match(/^(.+?)\\s+is\\s+empty$/i);\n if (emptyMatch) {\n const field = parseFieldReference(emptyMatch[1], ctx);\n if (field) {\n return {\n type: 'field_check',\n field,\n check: 'empty',\n };\n }\n }\n\n // \"[field] is not [value]\" (negated equality)\n const notEqualsMatch = text.match(/^(.+?)\\s+is\\s+not\\s+(.+)$/i);\n if (notEqualsMatch) {\n // This should be handled as a comparison with !=\n return null; // Let comparison parser handle it\n }\n\n // \"[field] is [value]\" (equality check)\n const equalsMatch = text.match(/^(.+?)\\s+is\\s+(.+)$/i);\n if (equalsMatch) {\n const fieldName = equalsMatch[1].trim();\n const value = equalsMatch[2].trim();\n\n // Skip if value is a keyword\n if (['provided', 'empty', 'not'].includes(value.toLowerCase())) {\n return null;\n }\n\n const field = parseFieldReference(fieldName, ctx);\n if (field) {\n return {\n type: 'field_check',\n field,\n check: 'equals',\n value: parseValue(value),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Parse comparison conditions\n * - \"amount > 1000\" → Order.amount > 1000\n * - \"amount >= 1000\" → Order.amount >= 1000\n * - \"status != 'Cancelled'\" → Order.status != \"Cancelled\"\n */\nfunction parseComparison(text: string, ctx: GuardParseContext): ComparisonCondition | null {\n // Try each operator\n const operators: { pattern: RegExp; operator: ComparisonOperator }[] = [\n { pattern: /^(.+?)\\s*>=\\s*(.+)$/, operator: '>=' },\n { pattern: /^(.+?)\\s*<=\\s*(.+)$/, operator: '<=' },\n { pattern: /^(.+?)\\s*!=\\s*(.+)$/, operator: '!=' },\n { pattern: /^(.+?)\\s*==\\s*(.+)$/, operator: '==' },\n { pattern: /^(.+?)\\s*>\\s*(.+)$/, operator: '>' },\n { pattern: /^(.+?)\\s*<\\s*(.+)$/, operator: '<' },\n ];\n\n // Also handle \"is not\" as !=\n const isNotMatch = text.match(/^(.+?)\\s+is\\s+not\\s+(.+)$/i);\n if (isNotMatch) {\n const field = parseFieldReference(isNotMatch[1], ctx);\n if (field) {\n return {\n type: 'comparison',\n field,\n operator: '!=',\n value: parseValue(isNotMatch[2]),\n };\n }\n }\n\n for (const { pattern, operator } of operators) {\n const match = text.match(pattern);\n if (match) {\n const field = parseFieldReference(match[1], ctx);\n if (field) {\n return {\n type: 'comparison',\n field,\n operator,\n value: parseValue(match[2]),\n };\n }\n }\n }\n\n return null;\n}\n\n/**\n * Parse a field reference\n * - \"amount\" → { entityName: \"Order\", fieldName: \"amount\" } (uses context)\n * - \"Order.amount\" → { entityName: \"Order\", fieldName: \"amount\" }\n * - \"tracking number\" → { entityName: \"Order\", fieldName: \"trackingNumber\" }\n */\nfunction parseFieldReference(text: string, ctx: GuardParseContext): FieldReference | null {\n text = text.trim();\n\n // Check for explicit entity reference (Entity.field)\n const dotMatch = text.match(/^(\\w+)\\.(\\w+)$/);\n if (dotMatch) {\n return {\n type: 'field_reference',\n entityName: dotMatch[1],\n fieldName: dotMatch[2],\n };\n }\n\n // Convert \"tracking number\" style to \"trackingNumber\"\n const fieldName = toCamelCase(text);\n\n return {\n type: 'field_reference',\n entityName: ctx.entityName,\n fieldName,\n };\n}\n\n/**\n * Parse a value (string, number, or boolean)\n */\nfunction parseValue(text: string): string | number | boolean {\n text = text.trim();\n\n // Remove quotes if present\n if ((text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))) {\n return text.slice(1, -1);\n }\n\n // Boolean\n if (text.toLowerCase() === 'true') return true;\n if (text.toLowerCase() === 'false') return false;\n\n // Number\n const num = parseFloat(text);\n if (!isNaN(num)) return num;\n\n // String (identifier-style value like \"Pending\")\n return text;\n}\n\n/**\n * Convert space-separated words to camelCase\n * \"tracking number\" → \"trackingNumber\"\n */\nfunction toCamelCase(text: string): string {\n return text\n .toLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join('');\n}\n\n/**\n * Split at top-level operator (not inside parentheses)\n */\nfunction splitAtTopLevel(text: string, separator: string): { left: string; right: string } | null {\n const separatorLower = separator.toLowerCase();\n const textLower = text.toLowerCase();\n\n let depth = 0;\n for (let i = 0; i <= textLower.length - separatorLower.length; i++) {\n const char = text[i];\n if (char === '(') depth++;\n else if (char === ')') depth--;\n else if (depth === 0 && textLower.slice(i, i + separatorLower.length) === separatorLower) {\n return {\n left: text.slice(0, i),\n right: text.slice(i + separator.length),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Format a guard condition back to KFlow schema guard string\n */\nexport function formatGuardToSchema(guard: DomainGuard): string {\n return formatConditionToSchema(guard.condition);\n}\n\nfunction formatConditionToSchema(condition: GuardCondition): string {\n switch (condition.type) {\n case 'field_check': {\n const fieldRef = `${condition.field.entityName}.${condition.field.fieldName}`;\n switch (condition.check) {\n case 'provided':\n return `${fieldRef} != null`;\n case 'empty':\n return `${fieldRef} == null`;\n case 'equals':\n const value = typeof condition.value === 'string'\n ? `\"${condition.value}\"`\n : condition.value;\n return `${fieldRef} == ${value}`;\n }\n break;\n }\n\n case 'comparison': {\n const fieldRef = `${condition.field.entityName}.${condition.field.fieldName}`;\n const value = typeof condition.value === 'string'\n ? `\"${condition.value}\"`\n : condition.value;\n return `${fieldRef} ${condition.operator} ${value}`;\n }\n\n case 'user_check': {\n if (condition.check === 'is_role') {\n return `CurrentUser.role == \"${condition.role}\"`;\n } else {\n return `${condition.ownerField} == CurrentUser.id`;\n }\n }\n\n case 'logical': {\n const left = formatConditionToSchema(condition.left);\n const right = formatConditionToSchema(condition.right);\n const op = condition.operator === 'AND' ? '&&' : '||';\n return `(${left}) ${op} (${right})`;\n }\n }\n\n return '';\n}\n\n/**\n * Format a guard condition back to domain language\n */\nexport function formatGuardToDomain(guard: DomainGuard): string {\n return 'if ' + formatConditionToDomain(guard.condition);\n}\n\nfunction formatConditionToDomain(condition: GuardCondition): string {\n switch (condition.type) {\n case 'field_check': {\n const fieldName = toSpaceSeparated(condition.field.fieldName);\n switch (condition.check) {\n case 'provided':\n return `${fieldName} is provided`;\n case 'empty':\n return `${fieldName} is empty`;\n case 'equals':\n return `${fieldName} is ${condition.value}`;\n }\n break;\n }\n\n case 'comparison': {\n const fieldName = toSpaceSeparated(condition.field.fieldName);\n const opMap: Record<string, string> = {\n '==': 'is',\n '!=': 'is not',\n '>': '>',\n '<': '<',\n '>=': '>=',\n '<=': '<=',\n };\n return `${fieldName} ${opMap[condition.operator] || condition.operator} ${condition.value}`;\n }\n\n case 'user_check': {\n if (condition.check === 'is_role') {\n return `user is ${condition.role}`;\n } else {\n return 'user owns this';\n }\n }\n\n case 'logical': {\n const left = formatConditionToDomain(condition.left);\n const right = formatConditionToDomain(condition.right);\n return `${left} ${condition.operator} ${right}`;\n }\n }\n\n return '';\n}\n\n/**\n * Convert camelCase to space-separated words\n * \"trackingNumber\" → \"tracking number\"\n */\nfunction toSpaceSeparated(text: string): string {\n return text.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();\n}\n","/**\n * S-Expression Parser\n *\n * Parses domain language text (guards/effects) back to S-Expression arrays.\n * This is the reverse of what sexpr-formatter.ts does.\n *\n * @example\n * parseDomainGuard(\"health is at least 0\") → [\">=\", \"@entity.health\", 0]\n * parseDomainEffect(\"update status to 'done'\") → [\"set\", \"@entity.status\", \"done\"]\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../../types/index.js';\nimport { getPatternDefinition } from '@almadar/patterns';\n\n// Helper functions for pattern validation\nfunction isKnownPattern(pattern: string): boolean {\n return getPatternDefinition(pattern) !== null;\n}\n\nfunction validatePatternReference(pattern: string): string | null {\n // Simple suggestion logic - could be enhanced\n return null;\n}\n\n// ============================================================================\n// Parse Warnings (collected during parsing)\n// ============================================================================\n\nexport interface ParseWarning {\n message: string;\n type: 'unknown-pattern' | 'invalid-syntax';\n}\n\nlet parseWarnings: ParseWarning[] = [];\n\n/**\n * Get and clear parse warnings from the last parse operation.\n */\nexport function getParseWarnings(): ParseWarning[] {\n const warnings = parseWarnings;\n parseWarnings = [];\n return warnings;\n}\n\n/**\n * Add a parse warning.\n */\nfunction addWarning(message: string, type: ParseWarning['type']): void {\n parseWarnings.push({ message, type });\n}\n\n// ============================================================================\n// Main API\n// ============================================================================\n\n/**\n * Parse a domain guard expression to S-Expression.\n *\n * @param text - Domain language guard (e.g., \"health is at least 0\", \"status is 'active'\")\n * @param entityName - The entity context for unqualified field references\n * @returns S-Expression array\n *\n * @example\n * parseDomainGuard(\"health is at least 0\") → [\">=\", \"@entity.health\", 0]\n * parseDomainGuard(\"status is 'active'\") → [\"=\", \"@entity.status\", \"active\"]\n * parseDomainGuard(\"x > 0 and y < 100\") → [\"and\", [\">\", \"@entity.x\", 0], [\"<\", \"@entity.y\", 100]]\n */\nexport function parseDomainGuard(text: string, entityName?: string): SExpr {\n const ctx: ParseContext = { entityName: entityName || '' };\n let expr = text.trim();\n\n // Remove \"if \" prefix if present\n if (expr.toLowerCase().startsWith('if ')) {\n expr = expr.slice(3).trim();\n }\n\n return parseExpression(expr, ctx);\n}\n\n/**\n * Parse a domain effect expression to S-Expression.\n *\n * @param text - Domain language effect (e.g., \"update status to 'done'\", \"emit ORDER_PLACED\")\n * @param entityName - The entity context for unqualified field references\n * @returns S-Expression array\n *\n * @example\n * parseDomainEffect(\"update status to 'done'\") → [\"set\", \"@entity.status\", \"done\"]\n * parseDomainEffect(\"emit ORDER_PLACED\") → [\"emit\", \"ORDER_PLACED\"]\n * parseDomainEffect(\"render entity-table to main\") → [\"render-ui\", \"main\", { type: \"entity-table\" }]\n */\nexport function parseDomainEffect(text: string, entityName?: string): SExpr {\n const ctx: ParseContext = { entityName: entityName || '' };\n let expr = text.trim();\n\n // Remove \"then \" prefix if present\n if (expr.toLowerCase().startsWith('then ')) {\n expr = expr.slice(5).trim();\n }\n\n return parseEffect(expr, ctx);\n}\n\n/**\n * Parse multiple domain effects (comma or \"then\" separated).\n *\n * @param text - Domain language effects\n * @param entityName - The entity context\n * @returns Array of S-Expressions (wrapped in [\"do\", ...] if multiple)\n */\nexport function parseDomainEffects(text: string, entityName?: string): SExpr[] {\n const ctx: ParseContext = { entityName: entityName || '' };\n let expr = text.trim();\n\n // Remove \"then \" prefix\n if (expr.toLowerCase().startsWith('then ')) {\n expr = expr.slice(5).trim();\n }\n\n // Split by \", then \" or just \"then\"\n const parts = expr.split(/,\\s*then\\s+|\\s+then\\s+/i).filter(p => p.trim());\n\n return parts.map(p => parseEffect(p.trim(), ctx));\n}\n\n// ============================================================================\n// Parse Context\n// ============================================================================\n\ninterface ParseContext {\n entityName: string;\n}\n\n// ============================================================================\n// Inline S-Expression / JSON Parsing\n// ============================================================================\n\n/**\n * Check if text is an inline S-Expression or JSON.\n *\n * Supports:\n * - JSON array: [...]\n * - JSON object: {...}\n * - Lisp S-Expression: (op args...)\n */\nfunction isInlineSExpr(text: string): boolean {\n const trimmed = text.trim();\n return trimmed.startsWith('[') || trimmed.startsWith('{') || trimmed.startsWith('(');\n}\n\n/**\n * Parse inline S-Expression or JSON to SExpr.\n *\n * Supports:\n * - JSON: [\"emit\", \"EVENT\"] or {\"type\": \"stats\"}\n * - Lisp: (emit EVENT) or (render-ui main {type: \"stats\"})\n */\nfunction parseInlineSExpr(text: string): SExpr {\n const trimmed = text.trim();\n\n // JSON array or object\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n try {\n return JSON.parse(trimmed);\n } catch {\n // Try relaxed JSON (single quotes, unquoted keys)\n return parseRelaxedJson(trimmed);\n }\n }\n\n // Lisp-style S-Expression: (op args...)\n if (trimmed.startsWith('(')) {\n return parseLispSExpr(trimmed);\n }\n\n throw new Error(`Invalid inline S-Expression: ${text}`);\n}\n\n/**\n * Parse relaxed JSON (allows single quotes, unquoted keys).\n */\nfunction parseRelaxedJson(text: string): SExpr {\n // Replace single quotes with double quotes (simple approach)\n let normalized = text;\n\n // Handle single-quoted strings\n normalized = normalized.replace(/'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/g, '\"$1\"');\n\n // Handle unquoted keys in objects: {key: value} → {\"key\": value}\n normalized = normalized.replace(/(\\{|,)\\s*(\\w+)\\s*:/g, '$1\"$2\":');\n\n try {\n return JSON.parse(normalized);\n } catch (e) {\n throw new Error(`Failed to parse relaxed JSON: ${text}`);\n }\n}\n\n/**\n * Parse Lisp-style S-Expression: (op arg1 arg2 ...)\n *\n * Examples:\n * - (emit EVENT) → [\"emit\", \"EVENT\"]\n * - (render-ui main {type: \"stats\"}) → [\"render-ui\", \"main\", {type: \"stats\"}]\n * - (and (> x 0) (< x 100)) → [\"and\", [\">\", \"x\", 0], [\"<\", \"x\", 100]]\n */\nfunction parseLispSExpr(text: string): SExpr {\n const trimmed = text.trim();\n\n if (!trimmed.startsWith('(') || !trimmed.endsWith(')')) {\n throw new Error(`Invalid Lisp S-Expression: ${text}`);\n }\n\n const inner = trimmed.slice(1, -1).trim();\n const tokens = tokenizeLisp(inner);\n\n if (tokens.length === 0) {\n return [];\n }\n\n return tokens.map(parseLispToken);\n}\n\n/**\n * Tokenize Lisp expression, respecting nested parens, braces, and quotes.\n */\nfunction tokenizeLisp(text: string): string[] {\n const tokens: string[] = [];\n let current = '';\n let depth = 0;\n let inString = false;\n let stringChar = '';\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n\n if (inString) {\n current += char;\n if (char === stringChar && text[i - 1] !== '\\\\') {\n inString = false;\n }\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n inString = true;\n stringChar = char;\n current += char;\n continue;\n }\n\n if (char === '(' || char === '[' || char === '{') {\n depth++;\n current += char;\n continue;\n }\n\n if (char === ')' || char === ']' || char === '}') {\n depth--;\n current += char;\n continue;\n }\n\n if (char === ' ' || char === '\\t' || char === '\\n') {\n if (depth === 0 && current.trim()) {\n tokens.push(current.trim());\n current = '';\n } else if (depth > 0) {\n current += char;\n }\n continue;\n }\n\n current += char;\n }\n\n if (current.trim()) {\n tokens.push(current.trim());\n }\n\n return tokens;\n}\n\n/**\n * Parse a single Lisp token to SExpr value.\n */\nfunction parseLispToken(token: string): SExpr {\n const trimmed = token.trim();\n\n // Nested S-Expression\n if (trimmed.startsWith('(')) {\n return parseLispSExpr(trimmed);\n }\n\n // JSON object or array\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n return parseRelaxedJson(trimmed);\n }\n\n // Quoted string\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.slice(1, -1);\n }\n\n // Number\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n return parseFloat(trimmed);\n }\n\n // Boolean\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n if (trimmed === 'null') return null;\n\n // Binding (starts with @)\n if (trimmed.startsWith('@')) {\n return trimmed;\n }\n\n // Symbol/identifier\n return trimmed;\n}\n\n// ============================================================================\n// Expression Parsing (Guards)\n// ============================================================================\n\n/**\n * Parse a general expression (guard context).\n */\nfunction parseExpression(text: string, ctx: ParseContext): SExpr {\n text = text.trim();\n\n // Check for inline S-Expression/JSON first\n if (isInlineSExpr(text)) {\n return parseInlineSExpr(text);\n }\n\n // Handle logical operators at top level\n const andMatch = splitAtTopLevel(text, ' and ');\n if (andMatch) {\n const left = parseExpression(andMatch.left, ctx);\n const right = parseExpression(andMatch.right, ctx);\n return ['and', left, right];\n }\n\n const orMatch = splitAtTopLevel(text, ' or ');\n if (orMatch) {\n const left = parseExpression(orMatch.left, ctx);\n const right = parseExpression(orMatch.right, ctx);\n return ['or', left, right];\n }\n\n // Handle \"not X\"\n if (text.toLowerCase().startsWith('not ')) {\n const inner = parseExpression(text.slice(4).trim(), ctx);\n return ['not', inner];\n }\n\n // Handle parentheses\n if (text.startsWith('(') && text.endsWith(')')) {\n return parseExpression(text.slice(1, -1), ctx);\n }\n\n // Parse comparison/condition\n return parseComparison(text, ctx);\n}\n\n/**\n * Parse a comparison expression.\n */\nfunction parseComparison(text: string, ctx: ParseContext): SExpr {\n // \"X is at least Y\" → [\">=\", X, Y]\n const atLeastMatch = text.match(/^(.+?)\\s+is\\s+at\\s+least\\s+(.+)$/i);\n if (atLeastMatch) {\n const field = parseFieldRef(atLeastMatch[1], ctx);\n const value = parseValue(atLeastMatch[2]);\n return ['>=', field, value];\n }\n\n // \"X is at most Y\" → [\"<=\", X, Y]\n const atMostMatch = text.match(/^(.+?)\\s+is\\s+at\\s+most\\s+(.+)$/i);\n if (atMostMatch) {\n const field = parseFieldRef(atMostMatch[1], ctx);\n const value = parseValue(atMostMatch[2]);\n return ['<=', field, value];\n }\n\n // \"X is greater than Y\" → [\">\", X, Y]\n const greaterThanMatch = text.match(/^(.+?)\\s+is\\s+greater\\s+than\\s+(.+)$/i);\n if (greaterThanMatch) {\n const field = parseFieldRef(greaterThanMatch[1], ctx);\n const value = parseValue(greaterThanMatch[2]);\n return ['>', field, value];\n }\n\n // \"X is less than Y\" → [\"<\", X, Y]\n const lessThanMatch = text.match(/^(.+?)\\s+is\\s+less\\s+than\\s+(.+)$/i);\n if (lessThanMatch) {\n const field = parseFieldRef(lessThanMatch[1], ctx);\n const value = parseValue(lessThanMatch[2]);\n return ['<', field, value];\n }\n\n // \"X is not Y\" → [\"!=\", X, Y]\n const isNotMatch = text.match(/^(.+?)\\s+is\\s+not\\s+(.+)$/i);\n if (isNotMatch) {\n const field = parseFieldRef(isNotMatch[1], ctx);\n const value = parseValue(isNotMatch[2]);\n return ['!=', field, value];\n }\n\n // \"X is Y\" → [\"=\", X, Y]\n const isMatch = text.match(/^(.+?)\\s+is\\s+(.+)$/i);\n if (isMatch) {\n const field = parseFieldRef(isMatch[1], ctx);\n const value = parseValue(isMatch[2]);\n return ['=', field, value];\n }\n\n // Operator-based comparisons: >=, <=, !=, ==, >, <\n const opPatterns: { pattern: RegExp; op: string }[] = [\n { pattern: /^(.+?)\\s*>=\\s*(.+)$/, op: '>=' },\n { pattern: /^(.+?)\\s*<=\\s*(.+)$/, op: '<=' },\n { pattern: /^(.+?)\\s*!=\\s*(.+)$/, op: '!=' },\n { pattern: /^(.+?)\\s*==\\s*(.+)$/, op: '=' },\n { pattern: /^(.+?)\\s*>\\s*(.+)$/, op: '>' },\n { pattern: /^(.+?)\\s*<\\s*(.+)$/, op: '<' },\n ];\n\n for (const { pattern, op } of opPatterns) {\n const match = text.match(pattern);\n if (match) {\n const left = parseFieldRef(match[1], ctx);\n const right = parseValue(match[2]);\n return [op, left, right];\n }\n }\n\n // Default: return as binding or literal\n return parseFieldRef(text, ctx);\n}\n\n// ============================================================================\n// Effect Parsing\n// ============================================================================\n\n/**\n * Parse an effect expression.\n *\n * Supports both human-readable syntax and inline S-Expressions:\n * - Human: update status to 'done'\n * - S-Expr: [\"set\", \"@entity.status\", \"done\"]\n * - Lisp: (set @entity.status \"done\")\n * - JSON: {\"type\": \"stats\", \"metrics\": [...]}\n */\nfunction parseEffect(text: string, ctx: ParseContext): SExpr {\n text = text.trim();\n\n // Check for inline S-Expression/JSON first (highest priority)\n if (isInlineSExpr(text)) {\n return parseInlineSExpr(text);\n }\n\n // \"update X to Y\" → [\"set\", \"@entity.X\", Y]\n const updateMatch = text.match(/^update\\s+(.+?)\\s+to\\s+(.+)$/i);\n if (updateMatch) {\n const field = parseFieldRef(updateMatch[1], ctx);\n const value = parseEffectValue(updateMatch[2], ctx);\n return ['set', field, value];\n }\n\n // \"emit EVENT with PAYLOAD\" → [\"emit\", \"EVENT\", PAYLOAD]\n const emitWithMatch = text.match(/^emit\\s+(\\S+)\\s+with\\s+(.+)$/i);\n if (emitWithMatch) {\n const event = emitWithMatch[1];\n const payload = parseEffectValue(emitWithMatch[2], ctx);\n return ['emit', event, payload];\n }\n\n // \"emit EVENT\" → [\"emit\", \"EVENT\"]\n const emitMatch = text.match(/^emit\\s+(\\S+)$/i);\n if (emitMatch) {\n return ['emit', emitMatch[1]];\n }\n\n // \"render null to SLOT\" → [\"render-ui\", \"SLOT\", null]\n const renderNullMatch = text.match(/^render\\s+null\\s+to\\s+(\\S+)$/i);\n if (renderNullMatch) {\n return ['render-ui', renderNullMatch[1], null];\n }\n\n // \"render PATTERN to SLOT for ENTITY with PROPS\" → [\"render-ui\", \"SLOT\", { type, entity, props }]\n const renderFullMatch = text.match(/^render\\s+(\\S+)\\s+to\\s+(\\S+)\\s+for\\s+(\\S+)\\s+with\\s+(.+)$/i);\n if (renderFullMatch) {\n const pattern = renderFullMatch[1];\n const slot = renderFullMatch[2];\n const entity = renderFullMatch[3];\n const propsText = renderFullMatch[4];\n const props = parseRenderProps(propsText);\n // Validate pattern type\n validatePatternType(pattern);\n return ['render-ui', slot, { type: pattern, entity, ...props }];\n }\n\n // \"render PATTERN to SLOT for ENTITY\" → [\"render-ui\", \"SLOT\", { type, entity }]\n const renderEntityMatch = text.match(/^render\\s+(\\S+)\\s+to\\s+(\\S+)\\s+for\\s+(\\S+)$/i);\n if (renderEntityMatch) {\n const pattern = renderEntityMatch[1];\n const slot = renderEntityMatch[2];\n const entity = renderEntityMatch[3];\n // Validate pattern type\n validatePatternType(pattern);\n return ['render-ui', slot, { type: pattern, entity }];\n }\n\n // \"render PATTERN to SLOT with PROPS\" → [\"render-ui\", \"SLOT\", { type, props }]\n const renderPropsMatch = text.match(/^render\\s+(\\S+)\\s+to\\s+(\\S+)\\s+with\\s+(.+)$/i);\n if (renderPropsMatch) {\n const pattern = renderPropsMatch[1];\n const slot = renderPropsMatch[2];\n const propsText = renderPropsMatch[3];\n const props = parseRenderProps(propsText);\n // Validate pattern type\n validatePatternType(pattern);\n return ['render-ui', slot, { type: pattern, ...props }];\n }\n\n // \"render PATTERN to SLOT\" → [\"render-ui\", \"SLOT\", { type: \"PATTERN\" }]\n const renderMatch = text.match(/^render\\s+(\\S+)\\s+to\\s+(\\S+)$/i);\n if (renderMatch) {\n const pattern = renderMatch[1];\n const slot = renderMatch[2];\n // Validate pattern type\n validatePatternType(pattern);\n return ['render-ui', slot, { type: pattern }];\n }\n\n // \"render to SLOT\" → [\"render-ui\", \"SLOT\"]\n const renderSlotMatch = text.match(/^render\\s+to\\s+(\\S+)$/i);\n if (renderSlotMatch) {\n return ['render-ui', renderSlotMatch[1]];\n }\n\n // \"navigate to PATH with PARAMS\" → [\"navigate\", \"PATH\", PARAMS]\n const navWithMatch = text.match(/^navigate\\s+to\\s+(.+?)\\s+with\\s+(.+)$/i);\n if (navWithMatch) {\n const path = navWithMatch[1];\n const params = parseEffectValue(navWithMatch[2], ctx);\n return ['navigate', path, params];\n }\n\n // \"navigate to PATH\" → [\"navigate\", \"PATH\"]\n const navMatch = text.match(/^navigate\\s+to\\s+(.+)$/i);\n if (navMatch) {\n return ['navigate', navMatch[1]];\n }\n\n // \"show TYPE notification MESSAGE\" → [\"notify\", \"MESSAGE\", \"TYPE\"]\n const showNotifyMatch = text.match(/^show\\s+(\\w+)\\s+notification\\s+\"(.+)\"$/i);\n if (showNotifyMatch) {\n return ['notify', showNotifyMatch[2], showNotifyMatch[1]];\n }\n\n // \"notify MESSAGE\" → [\"notify\", \"MESSAGE\"]\n const notifyMatch = text.match(/^notify\\s+\"(.+)\"$/i);\n if (notifyMatch) {\n return ['notify', notifyMatch[1]];\n }\n\n // \"persist ACTION DATA\" → [\"persist\", \"ACTION\", DATA]\n const persistWithMatch = text.match(/^persist\\s+(\\w+)\\s+(.+)$/i);\n if (persistWithMatch) {\n const action = persistWithMatch[1];\n const data = parseFieldRef(persistWithMatch[2], ctx);\n return ['persist', action, data];\n }\n\n // \"persist ACTION\" → [\"persist\", \"ACTION\"]\n const persistMatch = text.match(/^persist\\s+(\\w+)$/i);\n if (persistMatch) {\n return ['persist', persistMatch[1]];\n }\n\n // \"spawn ENTITY with PROPS\" → [\"spawn\", \"ENTITY\", PROPS]\n const spawnWithMatch = text.match(/^spawn\\s+(\\S+)\\s+with\\s+(.+)$/i);\n if (spawnWithMatch) {\n const entityType = spawnWithMatch[1];\n const props = parseEffectValue(spawnWithMatch[2], ctx);\n return ['spawn', entityType, props];\n }\n\n // \"spawn ENTITY\" → [\"spawn\", \"ENTITY\"]\n const spawnMatch = text.match(/^spawn\\s+(\\S+)$/i);\n if (spawnMatch) {\n return ['spawn', spawnMatch[1]];\n }\n\n // \"despawn ID\" → [\"despawn\", ID]\n const despawnIdMatch = text.match(/^despawn\\s+(.+)$/i);\n if (despawnIdMatch && despawnIdMatch[1] !== 'this') {\n return ['despawn', parseFieldRef(despawnIdMatch[1], ctx)];\n }\n\n // \"despawn this\" or \"despawn\" → [\"despawn\"]\n if (text.toLowerCase() === 'despawn' || text.toLowerCase() === 'despawn this') {\n return ['despawn'];\n }\n\n // \"call SERVICE.ACTION\" → [\"call-service\", \"SERVICE\", \"ACTION\"]\n const callServiceMatch = text.match(/^call\\s+(\\w+)\\.(\\w+)$/i);\n if (callServiceMatch) {\n return ['call-service', callServiceMatch[1], callServiceMatch[2]];\n }\n\n // \"call SERVICE\" → [\"call-service\", \"SERVICE\"]\n const callMatch = text.match(/^call\\s+(\\S+)$/i);\n if (callMatch) {\n return ['call-service', callMatch[1]];\n }\n\n // Fallback: return as literal\n return text;\n}\n\n// ============================================================================\n// Field Reference Parsing\n// ============================================================================\n\n/**\n * Parse a field reference to a binding.\n * Converts domain text to @entity.field format.\n */\nfunction parseFieldRef(text: string, ctx: ParseContext): string {\n text = text.trim();\n\n // Already a binding (@entity.field, @payload.field, etc.)\n if (text.startsWith('@')) {\n return text;\n }\n\n // \"current state\" → \"@state\"\n if (text.toLowerCase() === 'current state') {\n return '@state';\n }\n\n // \"current time\" → \"@now\"\n if (text.toLowerCase() === 'current time') {\n return '@now';\n }\n\n // \"entity\" alone → \"@entity\"\n if (text.toLowerCase() === 'entity') {\n return '@entity';\n }\n\n // \"payload\" alone → \"@payload\"\n if (text.toLowerCase() === 'payload') {\n return '@payload';\n }\n\n // \"incoming X\" → \"@payload.X\"\n if (text.toLowerCase().startsWith('incoming ')) {\n const field = toCamelCase(text.slice(9).trim());\n return `@payload.${field}`;\n }\n\n // \"X's Y\" → \"@X.Y\" (singleton binding)\n const possessiveMatch = text.match(/^(\\w+)'s\\s+(.+)$/);\n if (possessiveMatch) {\n const entity = possessiveMatch[1];\n const field = toCamelCase(possessiveMatch[2]);\n return `@${entity}.${field}`;\n }\n\n // \"Entity.field\" → \"@Entity.field\"\n if (text.includes('.')) {\n // Check if first part is capitalized (entity reference)\n const parts = text.split('.');\n if (parts[0] && /^[A-Z]/.test(parts[0])) {\n return `@${text}`;\n }\n // Otherwise it's an entity field\n return `@entity.${text}`;\n }\n\n // Simple field name → \"@entity.fieldName\"\n const fieldName = toCamelCase(text);\n return `@entity.${fieldName}`;\n}\n\n// ============================================================================\n// Value Parsing\n// ============================================================================\n\n/**\n * Parse a value (can be literal or binding).\n */\nfunction parseValue(text: string): SExpr {\n text = text.trim();\n\n // Quoted string\n if ((text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))) {\n return text.slice(1, -1);\n }\n\n // \"nothing\" or \"null\" → null\n if (text.toLowerCase() === 'nothing' || text.toLowerCase() === 'null') {\n return null as unknown as SExpr;\n }\n\n // Boolean\n if (text.toLowerCase() === 'true') return true;\n if (text.toLowerCase() === 'false') return false;\n\n // Number\n const num = parseFloat(text);\n if (!isNaN(num) && text.match(/^-?\\d+(\\.\\d+)?$/)) {\n return num;\n }\n\n // Already a binding\n if (text.startsWith('@')) {\n return text;\n }\n\n // Simple identifier - could be an enum value or string\n if (/^[a-zA-Z_]\\w*$/.test(text)) {\n return text;\n }\n\n // Default: return as string\n return text;\n}\n\n/**\n * Parse a value in effect context (handles nested expressions).\n */\nfunction parseEffectValue(text: string, ctx: ParseContext): SExpr {\n text = text.trim();\n\n // JSON object literal\n if (text.startsWith('{') && text.endsWith('}')) {\n try {\n // Handle binding references in JSON\n const processed = text.replace(/@[\\w.]+/g, (match) => `\"${match}\"`);\n const obj = JSON.parse(processed);\n // Convert quoted bindings back\n return processBindingsInObject(obj);\n } catch {\n // Not valid JSON, return as-is\n return text;\n }\n }\n\n // Arithmetic expression\n const arithmeticMatch = text.match(/^\\((.+?)\\s+(plus|minus|times|divided by)\\s+(.+)\\)$/i);\n if (arithmeticMatch) {\n const left = parseEffectValue(arithmeticMatch[1], ctx);\n const right = parseEffectValue(arithmeticMatch[3], ctx);\n const opMap: Record<string, string> = {\n 'plus': '+',\n 'minus': '-',\n 'times': '*',\n 'divided by': '/',\n };\n return [opMap[arithmeticMatch[2].toLowerCase()] || arithmeticMatch[2], left, right];\n }\n\n // Field reference\n if (text.includes('.') || text.toLowerCase().startsWith('incoming ') ||\n text.match(/^\\w+'s\\s+/) || /^[a-z]/.test(text)) {\n // Looks like a field reference\n return parseFieldRef(text, ctx);\n }\n\n // Delegate to parseValue\n return parseValue(text);\n}\n\n/**\n * Process bindings in a parsed JSON object.\n */\nfunction processBindingsInObject(obj: unknown): SExpr {\n if (obj === null || obj === undefined) {\n return null as unknown as SExpr;\n }\n\n if (typeof obj === 'string') {\n // Convert quoted binding back\n if (obj.startsWith('@')) {\n return obj;\n }\n return obj;\n }\n\n if (typeof obj !== 'object') {\n return obj as SExpr;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(processBindingsInObject) as SExpr;\n }\n\n // Object\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = processBindingsInObject(value);\n }\n return result as SExpr;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Split at top-level separator (not inside parentheses).\n */\nfunction splitAtTopLevel(text: string, separator: string): { left: string; right: string } | null {\n const separatorLower = separator.toLowerCase();\n const textLower = text.toLowerCase();\n\n let depth = 0;\n for (let i = 0; i <= textLower.length - separatorLower.length; i++) {\n const char = text[i];\n if (char === '(' || char === '[' || char === '{') depth++;\n else if (char === ')' || char === ']' || char === '}') depth--;\n else if (depth === 0 && textLower.slice(i, i + separatorLower.length) === separatorLower) {\n return {\n left: text.slice(0, i).trim(),\n right: text.slice(i + separator.length).trim(),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Convert space-separated text to camelCase.\n * Preserves existing camelCase (single word with mixed case).\n */\nfunction toCamelCase(text: string): string {\n const words = text.split(/\\s+/);\n\n // If single word, preserve its casing (e.g., \"isActive\" stays \"isActive\")\n if (words.length === 1) {\n return words[0];\n }\n\n // Multiple words: convert to camelCase\n return words\n .map((word, index) =>\n index === 0\n ? word.toLowerCase()\n : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n )\n .join('');\n}\n\n/**\n * Split array content by commas, respecting quoted strings\n */\nfunction splitArrayItems(content: string): string[] {\n const items: string[] = [];\n let current = '';\n let inQuote = false;\n let quoteChar = '';\n\n for (let i = 0; i < content.length; i++) {\n const char = content[i];\n\n if ((char === \"'\" || char === '\"') && (i === 0 || content[i - 1] !== '\\\\')) {\n if (!inQuote) {\n inQuote = true;\n quoteChar = char;\n } else if (char === quoteChar) {\n inQuote = false;\n }\n current += char;\n } else if (char === ',' && !inQuote) {\n if (current.trim()) {\n items.push(current.trim());\n }\n current = '';\n } else {\n current += char;\n }\n }\n\n if (current.trim()) {\n items.push(current.trim());\n }\n\n return items;\n}\n\n/**\n * Remove quotes from a string value\n */\nfunction unquote(value: string): string {\n const trimmed = value.trim();\n if ((trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) ||\n (trimmed.startsWith('\"') && trimmed.endsWith('\"'))) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\n\n/**\n * Generic syntax patterns detected by markers:\n *\n * 1. \"as\" pattern: field as 'Label' → {field, label}\n * Used for: metrics, columns, any labeled field\n *\n * 2. \"->\" pattern: Label -> EVENT → {label, event}\n * With variant: Label -> EVENT:variant → {label, event, variant}\n * Used for: itemActions, buttons, any action binding\n *\n * 3. \":\" + \"->\" pattern: id: 'Label' -> EVENT → {id, label, event}\n * Used for: tabs, navigation items\n *\n * 4. \"@\" pattern: section @ span → {section, colSpan}\n * With row span: section @ colxrow → {section, colSpan, rowSpan}\n * Used for: cells, grid layouts\n *\n * The parser auto-detects which pattern based on syntax markers,\n * so any prop can use any pattern without hardcoding prop names.\n */\nfunction parseArrayItem(item: string): unknown {\n const trimmed = item.trim();\n\n // Pattern 3: id: 'Label' -> EVENT (has both : and ->)\n const tabMatch = trimmed.match(/^(\\w+):\\s*['\"]([^'\"]+)['\"]\\s*->\\s*(\\w+)$/);\n if (tabMatch) {\n return { id: tabMatch[1], label: tabMatch[2], event: tabMatch[3] };\n }\n\n // Pattern 2 with variant: Label -> EVENT:variant\n const actionVariantMatch = trimmed.match(/^([^->]+)\\s*->\\s*(\\w+):(\\w+)$/);\n if (actionVariantMatch) {\n return {\n label: actionVariantMatch[1].trim(),\n event: actionVariantMatch[2],\n variant: actionVariantMatch[3],\n };\n }\n\n // Pattern 2: Label -> EVENT or 'Label' -> EVENT\n const actionMatch = trimmed.match(/^(['\"]?)([^'\"->]+)\\1\\s*->\\s*(\\w+)$/);\n if (actionMatch) {\n return { label: actionMatch[2].trim(), event: actionMatch[3] };\n }\n\n // Pattern 4 with rowSpan: section @ colxrow\n const cellSpanMatch = trimmed.match(/^(\\w+)\\s*@\\s*(\\d+)x(\\d+)$/);\n if (cellSpanMatch) {\n return {\n section: cellSpanMatch[1],\n colSpan: parseInt(cellSpanMatch[2], 10),\n rowSpan: parseInt(cellSpanMatch[3], 10),\n };\n }\n\n // Pattern 4: section @ span\n const cellMatch = trimmed.match(/^(\\w+)\\s*@\\s*(\\d+)$/);\n if (cellMatch) {\n return {\n section: cellMatch[1],\n colSpan: parseInt(cellMatch[2], 10),\n };\n }\n\n // Pattern 1: field as 'Label' or field as \"Label\"\n const asMatch = trimmed.match(/^(\\w+)\\s+as\\s+['\"]([^'\"]+)['\"]$/);\n if (asMatch) {\n return { field: asMatch[1], label: asMatch[2] };\n }\n\n // No pattern detected - return as simple string\n return unquote(trimmed);\n}\n\n/**\n * Parse array content, auto-detecting complex syntax patterns\n */\nfunction parseArrayProp(content: string): unknown[] {\n const items = splitArrayItems(content);\n return items.map(parseArrayItem);\n}\n\n/**\n * Check if array content contains complex syntax markers\n */\nfunction hasComplexSyntax(content: string): boolean {\n return /\\s+as\\s+['\"]/.test(content) || // \"as\" pattern\n /->\\s*\\w+/.test(content) || // \"->\" pattern\n /\\w+\\s*@\\s*\\d+/.test(content); // \"@\" pattern\n}\n\n/**\n * Parse render props from text like \"title 'Notes'\" or \"columns [title, createdAt]\"\n *\n * Auto-detects complex array syntax based on markers:\n * - \"as\" pattern: field as 'Label' → {field, label}\n * - \"->\" pattern: Label -> EVENT → {label, event}\n * - \":\" + \"->\" pattern: id: 'Label' -> EVENT → {id, label, event}\n * - \"@\" pattern: section @ span → {section, colSpan}\n *\n * Works generically for any prop name - no need to hardcode specific keys.\n */\nfunction parseRenderProps(text: string): Record<string, unknown> {\n const props: Record<string, unknown> = {};\n\n // Match \"key 'value'\" or \"key [array]\" or \"key value\"\n const propsRegex = /(\\w+)\\s+(?:'([^']+)'|\"([^\"]+)\"|\\[([^\\]]+)\\]|(\\S+))/g;\n let match;\n\n while ((match = propsRegex.exec(text)) !== null) {\n const key = match[1];\n const singleQuoted = match[2];\n const doubleQuoted = match[3];\n const arrayContent = match[4];\n const bareValue = match[5];\n\n if (singleQuoted !== undefined) {\n props[key] = singleQuoted;\n } else if (doubleQuoted !== undefined) {\n props[key] = doubleQuoted;\n } else if (arrayContent !== undefined) {\n // Auto-detect complex syntax based on markers, not key names\n if (hasComplexSyntax(arrayContent)) {\n props[key] = parseArrayProp(arrayContent);\n } else {\n // Simple array: \"title, createdAt\" → [\"title\", \"createdAt\"]\n props[key] = arrayContent.split(/\\s*,\\s*/).map(s => s.trim());\n }\n } else if (bareValue !== undefined) {\n // Try to parse as number or boolean\n if (bareValue === 'true') props[key] = true;\n else if (bareValue === 'false') props[key] = false;\n else if (/^\\d+(\\.\\d+)?$/.test(bareValue)) props[key] = parseFloat(bareValue);\n else props[key] = bareValue;\n }\n }\n\n return props;\n}\n\n/**\n * Validate a pattern type against the registry.\n * Adds a warning if the pattern is unknown.\n */\nfunction validatePatternType(pattern: string): void {\n if (!isKnownPattern(pattern)) {\n const suggestion = validatePatternReference(pattern);\n addWarning(\n suggestion || `Unknown pattern type: \"${pattern}\"`,\n 'unknown-pattern'\n );\n }\n}\n","/**\n * Behavior Parser\n *\n * Parses behavior/trait definitions from domain language.\n * Behaviors define state machines with transitions, guards, and effects.\n * All entity references are explicit (e.g., Order.status, CurrentUser.role).\n */\n\nimport type {\n DomainBehavior,\n DomainTransition,\n DomainTick,\n DomainGuard,\n DomainEffect,\n ParseResult,\n ParseError,\n} from '../types.js';\nimport { Lexer } from '../lexer.js';\nimport { TokenType } from '../tokens.js';\nimport { parseGuard } from './guard-parser.js';\nimport { parseDomainEffect, parseDomainGuard } from './sexpr-parser.js';\n\ninterface BehaviorParseContext {\n entityName: string;\n errors: ParseError[];\n warnings: ParseError[];\n}\n\n/**\n * Parse a behavior definition from domain text\n *\n * @example\n * parseBehavior(`\n * Order Lifecycle\n *\n * States: Pending, Confirmed, Shipped, Delivered, Cancelled\n *\n * Transitions:\n * - From Pending to Confirmed when CONFIRM\n * if Order.amount > 0\n * then notify customer\n * - From Confirmed to Shipped when SHIP\n * - From Shipped to Delivered when DELIVER\n * - From any to Cancelled when CANCEL\n * if Order.status is not Delivered\n *\n * Rules:\n * - Orders over $1000 require manager approval\n * - Cancelled orders cannot be reactivated\n * `, \"Order\")\n */\nexport function parseBehavior(text: string, entityName: string): ParseResult<DomainBehavior> {\n const ctx: BehaviorParseContext = { entityName, errors: [], warnings: [] };\n const lexer = new Lexer(text);\n const tokens = lexer.tokenize();\n\n let pos = 0;\n\n // Helper functions\n const current = () => tokens[pos] || { type: TokenType.EOF, value: '', line: 0, column: 0, offset: 0 };\n const advance = () => tokens[pos++];\n const isAtEnd = () => current().type === TokenType.EOF;\n const skip = (type: TokenType) => {\n while (current().type === type) advance();\n };\n\n // Skip leading whitespace\n skip(TokenType.NEWLINE);\n\n // Parse behavior name (first line)\n const behaviorName = parseBehaviorName();\n if (!behaviorName) {\n return {\n success: false,\n errors: ctx.errors.length > 0 ? ctx.errors : [{\n message: 'Expected behavior name at start of definition',\n }],\n warnings: [],\n };\n }\n\n const behavior: DomainBehavior = {\n type: 'behavior',\n name: behaviorName,\n entityName,\n states: [],\n initialState: '',\n transitions: [],\n ticks: [],\n rules: [],\n };\n\n skip(TokenType.NEWLINE);\n\n // Parse remaining sections\n while (!isAtEnd()) {\n skip(TokenType.NEWLINE);\n if (isAtEnd()) break;\n\n const parsed = parseBehaviorSection(behavior);\n if (!parsed) {\n advance();\n }\n }\n\n // Set initial state if not specified\n if (!behavior.initialState && behavior.states.length > 0) {\n behavior.initialState = behavior.states[0];\n }\n\n return {\n success: true,\n data: behavior,\n errors: ctx.errors,\n warnings: ctx.warnings,\n };\n\n // === Helper Functions ===\n\n function parseBehaviorName(): string | null {\n const nameParts: string[] = [];\n\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n // Check for \"Entity:\" section - extract entity name\n if (current().type === TokenType.IDENTIFIER && current().value.toLowerCase() === 'entity') {\n advance(); // skip \"Entity\"\n if (current().type === TokenType.COLON) {\n advance(); // skip \":\"\n // Next identifier is the entity name\n if (current().type === TokenType.IDENTIFIER) {\n ctx.entityName = current().value;\n advance();\n }\n }\n continue;\n }\n\n // Skip parentheses (for syntax like \"behavior (Entity: X)\")\n if (current().type === TokenType.LPAREN || current().type === TokenType.RPAREN) {\n advance();\n continue;\n }\n\n // Collect identifiers, lifecycle keywords, and AUTO keyword (for names like \"Auto Save\")\n // Skip \"behavior\" keyword and colon\n if (current().type === TokenType.IDENTIFIER ||\n current().type === TokenType.LIFECYCLE ||\n current().type === TokenType.AUTO) {\n nameParts.push(current().value);\n }\n // Skip the \"behavior\" keyword (don't include it in the name)\n // Also skip colon\n advance();\n }\n\n if (nameParts.length === 0) {\n return null;\n }\n\n return nameParts.join(' ');\n }\n\n function parseBehaviorSection(behavior: DomainBehavior): boolean {\n const token = current();\n\n // \"Entity: [entityName]\" - explicit entity association\n if (token.type === TokenType.IDENTIFIER && token.value.toLowerCase() === 'entity') {\n advance();\n skip(TokenType.COLON);\n if (current().type === TokenType.IDENTIFIER) {\n ctx.entityName = current().value;\n behavior.entityName = current().value;\n advance();\n }\n return true;\n }\n\n // \"States: [state1], [state2], ...\"\n if (token.type === TokenType.STATES) {\n advance();\n skip(TokenType.COLON);\n parseStatesLine(behavior);\n return true;\n }\n\n // \"Initial: [state]\"\n if (token.type === TokenType.INITIAL) {\n advance();\n skip(TokenType.COLON);\n if (current().type === TokenType.IDENTIFIER) {\n behavior.initialState = current().value;\n advance();\n }\n return true;\n }\n\n // \"Transitions:\"\n if (token.type === TokenType.TRANSITIONS) {\n advance();\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n parseTransitionsSection(behavior);\n return true;\n }\n\n // \"Rules:\"\n if (token.type === TokenType.RULES) {\n advance();\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n parseRulesSection(behavior);\n return true;\n }\n\n // \"Every [interval]:\" - ticks\n if (token.type === TokenType.EVERY) {\n advance();\n parseTick(behavior);\n return true;\n }\n\n // \"Lifecycle\" keyword at section level\n if (token.type === TokenType.LIFECYCLE) {\n advance();\n return true;\n }\n\n return false;\n }\n\n function parseStatesLine(behavior: DomainBehavior): void {\n const states: string[] = [];\n\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n if (current().type === TokenType.IDENTIFIER) {\n states.push(current().value);\n }\n advance();\n }\n\n behavior.states = states;\n }\n\n function parseTransitionsSection(behavior: DomainBehavior): void {\n // Check for INDENT\n if (current().type === TokenType.INDENT) {\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Only try to parse if we see DASH or FROM (transition markers)\n if (current().type === TokenType.DASH ||\n current().type === TokenType.FROM) {\n const transition = parseTransitionLine();\n if (transition) {\n behavior.transitions.push(transition);\n }\n } else {\n // Skip unrecognized content (e.g., \"filter\" effects that aren't standard)\n // Advance to next line to avoid infinite loop\n while (!isAtEnd() &&\n current().type !== TokenType.NEWLINE &&\n current().type !== TokenType.DEDENT) {\n advance();\n }\n }\n }\n\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n } else {\n // Parse inline transitions (non-indented)\n while (!isAtEnd() &&\n current().type !== TokenType.RULES &&\n current().type !== TokenType.EVERY) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.RULES ||\n current().type === TokenType.EVERY ||\n isAtEnd()) break;\n\n if (current().type === TokenType.DASH ||\n current().type === TokenType.FROM) {\n const transition = parseTransitionLine();\n if (transition) {\n behavior.transitions.push(transition);\n }\n } else {\n advance();\n }\n }\n }\n }\n\n function parseTransitionLine(): DomainTransition | null {\n // Skip dash if present\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n // Expect \"From\"\n if (current().type !== TokenType.FROM) {\n return null;\n }\n advance();\n\n // Get \"from\" state\n let fromState = '';\n if (current().type === TokenType.IDENTIFIER) {\n fromState = current().value;\n advance();\n }\n\n // Handle \"any\" as wildcard\n if (fromState.toLowerCase() === 'any') {\n fromState = '*';\n }\n\n // Expect \"to\"\n if (current().type !== TokenType.TO) {\n ctx.errors.push({ message: `Expected \"to\" in transition from \"${fromState}\"` });\n return null;\n }\n advance();\n\n // Get \"to\" state\n let toState = '';\n if (current().type === TokenType.IDENTIFIER) {\n toState = current().value;\n advance();\n }\n\n // Expect \"when\" for event\n let event = '';\n if (current().type === TokenType.WHEN) {\n advance();\n if (current().type === TokenType.IDENTIFIER) {\n event = current().value;\n advance();\n }\n }\n\n const transition: DomainTransition = {\n type: 'transition',\n fromState,\n toState,\n event: event.toUpperCase(),\n guards: [],\n effects: [],\n };\n\n skip(TokenType.NEWLINE);\n\n // Parse optional guard (\"if ...\")\n if (current().type === TokenType.INDENT) {\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // \"if [condition]\"\n if (current().type === TokenType.IF) {\n const guardText = collectLine();\n const guardResult = parseGuard(guardText, entityName);\n if (guardResult.success && guardResult.data) {\n transition.guards.push(guardResult.data);\n }\n continue;\n }\n\n // \"then [effect]\"\n if (current().type === TokenType.THEN) {\n advance();\n const effectText = collectUntilNewline();\n const effect = parseEffectText(effectText);\n if (effect) {\n transition.effects.push(effect);\n }\n continue;\n }\n\n // Skip any other token to prevent infinite loop\n if (current().type !== TokenType.NEWLINE && current().type !== TokenType.DEDENT) {\n advance();\n }\n\n skip(TokenType.NEWLINE);\n }\n\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n } else {\n // Check for inline \"if\" on same line\n if (current().type === TokenType.IF) {\n const guardText = collectLine();\n const guardResult = parseGuard(guardText, entityName);\n if (guardResult.success && guardResult.data) {\n transition.guards.push(guardResult.data);\n }\n }\n }\n\n return transition;\n }\n\n function parseRulesSection(behavior: DomainBehavior): void {\n if (current().type === TokenType.INDENT) {\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // Skip dash\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n const rule = collectUntilNewline();\n if (rule) {\n behavior.rules.push(rule);\n }\n\n skip(TokenType.NEWLINE);\n }\n\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n }\n\n function parseTick(behavior: DomainBehavior): void {\n // Collect interval specification\n const intervalParts: string[] = [];\n while (!isAtEnd() &&\n current().type !== TokenType.COLON &&\n current().type !== TokenType.NEWLINE) {\n intervalParts.push(current().value);\n advance();\n }\n\n const interval = intervalParts.join(' ');\n\n skip(TokenType.COLON);\n skip(TokenType.NEWLINE);\n\n const tick: DomainTick = {\n type: 'tick',\n name: `tick_${interval.replace(/\\s+/g, '_').toLowerCase()}`,\n interval,\n intervalMs: parseInterval(interval),\n effects: [],\n };\n\n // Parse tick body (guard and effects)\n if (current().type === TokenType.INDENT) {\n advance();\n\n while (!isAtEnd() && current().type !== TokenType.DEDENT) {\n skip(TokenType.NEWLINE);\n if (current().type === TokenType.DEDENT) break;\n\n // \"if [condition]\" - guard\n if (current().type === TokenType.IF) {\n const guardText = collectLine();\n const guardResult = parseGuard(guardText, entityName);\n if (guardResult.success && guardResult.data) {\n tick.guard = guardResult.data;\n }\n }\n\n // \"then [effect]\" or \"[effect]\"\n if (current().type === TokenType.THEN) {\n advance();\n }\n\n if (current().type === TokenType.DASH) {\n advance();\n }\n\n const effectText = collectUntilNewline();\n if (effectText && current().type !== TokenType.IF) {\n const effect = parseEffectText(effectText);\n if (effect) {\n tick.effects.push(effect);\n }\n }\n\n skip(TokenType.NEWLINE);\n }\n\n if (current().type === TokenType.DEDENT) {\n advance();\n }\n }\n\n behavior.ticks.push(tick);\n }\n\n function collectLine(): string {\n return collectTokensSmartJoin();\n }\n\n function collectUntilNewline(): string {\n return collectTokensSmartJoin();\n }\n\n /**\n * Collect tokens and join them smartly - no spaces around dashes/dots\n * to preserve patterns like \"page-header\" and \"entity.field\"\n *\n * When insideArray is detected (starts with [), STRING tokens are quoted\n * to preserve valid JSON for S-expression parsing.\n */\n function collectTokensSmartJoin(): string {\n const parts: { value: string; type: TokenType }[] = [];\n while (!isAtEnd() && current().type !== TokenType.NEWLINE) {\n parts.push({ value: current().value, type: current().type });\n advance();\n }\n\n // Check if this looks like an S-expression (starts with [)\n // If so, we need to quote STRING tokens to preserve valid JSON\n const startsWithBracket = parts.length > 0 && parts[0].type === TokenType.LBRACKET;\n\n // Smart join: no spaces before/after DASH, DOT, or brackets\n let result = '';\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const prev = parts[i - 1];\n\n // Don't add space before dash, dot, comma, colon, or closing brackets\n const noSpaceBefore = part.type === TokenType.DASH ||\n part.type === TokenType.DOT ||\n part.type === TokenType.COMMA ||\n part.type === TokenType.COLON ||\n part.type === TokenType.RBRACKET ||\n part.type === TokenType.RPAREN;\n\n // Don't add space after dash, dot, or open brackets\n const prevNoSpaceAfter = prev &&\n (prev.type === TokenType.DASH ||\n prev.type === TokenType.DOT ||\n prev.type === TokenType.LBRACKET ||\n prev.type === TokenType.LPAREN);\n\n if (i > 0 && !noSpaceBefore && !prevNoSpaceAfter) {\n result += ' ';\n }\n\n // Quote STRING tokens if we're inside an S-expression to preserve valid JSON\n if (startsWithBracket && part.type === TokenType.STRING) {\n result += `\"${part.value}\"`;\n } else {\n result += part.value;\n }\n }\n\n return result.trim();\n }\n\n function parseEffectText(text: string): DomainEffect | null {\n const trimmed = text.trim();\n const lower = trimmed.toLowerCase();\n\n // First, check if this is a raw S-expression (JSON array like [\"render-ui\", ...])\n // Domain text from LLM may contain S-expressions directly\n if (trimmed.startsWith('[')) {\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed) && parsed.length > 0) {\n const effectOp = String(parsed[0]);\n // Return with effectType from first element\n // Keep the raw JSON in description - formatBehaviorToSchema will handle it\n // Cast to DomainEffect['effectType'] since we're parsing dynamic LLM content\n return {\n type: 'effect',\n effectType: effectOp as DomainEffect['effectType'],\n description: trimmed,\n config: { _rawSExpr: parsed }, // Store parsed S-expression\n };\n }\n } catch {\n // Not valid JSON, fall through to other handlers\n }\n }\n\n // \"persist [action] [entity]\" - persist effect\n const persistMatch = text.match(/^persist\\s+(\\w+)(?:\\s+(\\w+))?$/i);\n if (persistMatch) {\n return {\n type: 'effect',\n effectType: 'persist',\n description: text,\n config: {\n dataAction: persistMatch[1].toLowerCase(),\n entity: persistMatch[2] || undefined,\n },\n };\n }\n\n // \"send_in_app to [userId] title [title] message [message] type [type]\" - notify effect\n const sendInAppMatch = text.match(/^send_in_app\\s+to\\s+(.+?)\\s+title\\s+\"([^\"]+)\"\\s+message\\s+\"([^\"]+)\"(?:\\s+type\\s+(\\w+))?$/i);\n if (sendInAppMatch) {\n return {\n type: 'effect',\n effectType: 'notify',\n description: text,\n config: {\n userId: sendInAppMatch[1],\n title: sendInAppMatch[2],\n message: sendInAppMatch[3],\n type: sendInAppMatch[4] || 'info',\n },\n };\n }\n\n // Generic JSON config format: \"effectType:{...json...}\"\n const jsonMatch = text.match(/^(\\w+):(\\{.+\\})$/);\n if (jsonMatch) {\n try {\n const config = JSON.parse(jsonMatch[2]);\n return {\n type: 'effect',\n effectType: jsonMatch[1] as any,\n description: text,\n config,\n };\n } catch {\n // Fall through to other handlers\n }\n }\n\n // \"notify [recipient] [message]\" - notify with recipient\n const notifyWithRecipientMatch = text.match(/^notify\\s+(\\S+)\\s+\"([^\"]+)\"$/i);\n if (notifyWithRecipientMatch) {\n return {\n type: 'effect',\n effectType: 'notify',\n description: text,\n config: {\n recipient: notifyWithRecipientMatch[1],\n message: notifyWithRecipientMatch[2],\n },\n };\n }\n\n // \"notify [target]\"\n if (lower.startsWith('notify')) {\n const remaining = text.slice(6).trim();\n // Check if it's a quoted message\n const quotedMatch = remaining.match(/^\"([^\"]+)\"$/);\n return {\n type: 'effect',\n effectType: 'notify',\n description: text,\n config: {\n message: quotedMatch ? quotedMatch[1] : remaining,\n },\n };\n }\n\n // \"update [field] to [value]\" - set effect\n const updateMatch = text.match(/^update\\s+(.+?)\\s+to\\s+(.+)$/i);\n if (updateMatch) {\n return {\n type: 'effect',\n effectType: 'set',\n description: text,\n config: {\n field: preserveTemplateVars(updateMatch[1]),\n value: updateMatch[2],\n },\n };\n }\n\n // \"navigate to [path]\"\n const navMatch = text.match(/^navigate\\s+to\\s+(.+)$/i);\n if (navMatch) {\n return {\n type: 'effect',\n effectType: 'navigate',\n description: text,\n config: {\n path: navMatch[1],\n },\n };\n }\n\n // \"emit [event]\" - emit effect\n const emitMatch = text.match(/^emit\\s+(.+)$/i);\n if (emitMatch) {\n return {\n type: 'effect',\n effectType: 'emit',\n description: text,\n config: {\n eventKey: emitMatch[1].toUpperCase().replace(/\\s+/g, '_'),\n },\n };\n }\n\n // \"call [endpoint]\" - call-service effect\n const callMatch = text.match(/^call\\s+(.+)$/i);\n if (callMatch) {\n return {\n type: 'effect',\n effectType: 'call-service',\n description: text,\n config: {\n service: callMatch[1],\n },\n };\n }\n\n // \"render [pattern] to [slot]\" - render-ui effect (delegate to S-expression parser)\n if (lower.startsWith('render ')) {\n // This is a render effect - delegate to sexpr-parser for proper handling\n // Note: the sexpr-parser will validate the pattern type\n try {\n const result = parseDomainEffect(text);\n if (Array.isArray(result) && result[0] === 'render-ui') {\n return {\n type: 'effect',\n effectType: 'render-ui',\n description: text,\n config: {\n slot: result[1] as string,\n pattern: result[2] as Record<string, unknown>,\n },\n };\n }\n } catch {\n // Fall through to unknown effect warning\n }\n }\n\n // Unknown effect - warn and return null instead of silently converting to notify\n // This prevents masking of invalid effects that should be caught during validation\n ctx.warnings.push({\n message: `Unknown effect syntax: \"${text}\". Effect will be ignored. Use a valid effect format like \"update X to Y\", \"emit EVENT\", \"navigate to /path\", \"notify 'message'\", or \"render pattern to slot\".`,\n });\n return null;\n }\n\n function parseInterval(text: string): number {\n const lower = text.toLowerCase();\n\n // Match patterns like \"30 seconds\", \"1 hour\", \"5 minutes\"\n const match = lower.match(/(\\d+)\\s*(second|minute|hour|day|week)s?/);\n if (match) {\n const value = parseInt(match[1], 10);\n const unit = match[2];\n\n switch (unit) {\n case 'second': return value * 1000;\n case 'minute': return value * 60 * 1000;\n case 'hour': return value * 60 * 60 * 1000;\n case 'day': return value * 24 * 60 * 60 * 1000;\n case 'week': return value * 7 * 24 * 60 * 60 * 1000;\n }\n }\n\n // Default to 1 hour\n return 60 * 60 * 1000;\n }\n}\n\n/**\n * Format a behavior AST back to domain text\n */\nexport function formatBehaviorToDomain(behavior: DomainBehavior): string {\n const lines: string[] = [];\n\n // Behavior name\n lines.push(behavior.name);\n lines.push('');\n\n // States\n if (behavior.states.length > 0) {\n lines.push(`States: ${behavior.states.join(', ')}`);\n lines.push('');\n }\n\n // Transitions\n if (behavior.transitions.length > 0) {\n lines.push('Transitions:');\n for (const transition of behavior.transitions) {\n const fromState = transition.fromState === '*' ? 'any' : transition.fromState;\n let line = ` - From ${fromState} to ${transition.toState}`;\n if (transition.event) {\n line += ` when ${transition.event}`;\n }\n lines.push(line);\n\n // Guards\n for (const guard of transition.guards) {\n lines.push(` ${guard.raw || formatGuardForDomain(guard)}`);\n }\n\n // Effects\n for (const effect of transition.effects) {\n lines.push(` then ${effect.description}`);\n }\n }\n lines.push('');\n }\n\n // Ticks\n for (const tick of behavior.ticks) {\n lines.push(`Every ${tick.interval}:`);\n if (tick.guard) {\n lines.push(` ${tick.guard.raw || formatGuardForDomain(tick.guard)}`);\n }\n for (const effect of tick.effects) {\n lines.push(` - ${effect.description}`);\n }\n lines.push('');\n }\n\n // Rules\n if (behavior.rules.length > 0) {\n lines.push('Rules:');\n for (const rule of behavior.rules) {\n lines.push(` - ${rule}`);\n }\n }\n\n return lines.join('\\n').trim();\n}\n\n/**\n * Format behavior AST to KFlow schema trait\n */\nexport function formatBehaviorToSchema(behavior: DomainBehavior): Record<string, unknown> {\n const trait: Record<string, unknown> = {\n // Just remove spaces, preserve the casing from the source\n // Trust the LLM/author to use consistent PascalCase naming\n name: behavior.name.replace(/\\s+/g, ''),\n description: behavior.name,\n };\n\n // Only include stateMachine if there are states\n if (behavior.states.length > 0) {\n trait.stateMachine = {\n states: behavior.states.map((state, index) => ({\n name: state,\n isInitial: state === behavior.initialState || (index === 0 && !behavior.initialState),\n })),\n events: extractEventsFromTransitions(behavior.transitions),\n transitions: behavior.transitions.map(t => {\n const transition: Record<string, unknown> = {\n from: t.fromState,\n to: t.toState,\n event: t.event,\n };\n\n // Only include guard if present - convert to S-Expression\n if (t.guards.length > 0) {\n // Convert guards to S-Expressions\n const guardExprs = t.guards.map(g => {\n // Use the raw text to parse to S-Expression\n if (g.raw) {\n return parseDomainGuard(g.raw, behavior.entityName);\n }\n return parseDomainGuard(formatGuardToCondition(g), behavior.entityName);\n });\n // Combine multiple guards with AND\n transition.guard = guardExprs.length === 1\n ? guardExprs[0]\n : ['and', ...guardExprs];\n }\n\n // Only include effects if present - convert to S-Expressions\n if (t.effects.length > 0) {\n transition.effects = t.effects.map(e => {\n // If effect has pre-parsed S-expression (from raw JSON in domain text), use it directly\n if (e.config && '_rawSExpr' in e.config && Array.isArray(e.config._rawSExpr)) {\n return e.config._rawSExpr;\n }\n // Otherwise, parse the description text to S-Expression\n return parseDomainEffect(e.description, behavior.entityName);\n });\n }\n\n return transition;\n }),\n };\n }\n\n // Only include ticks if there are any - convert to S-Expressions\n if (behavior.ticks.length > 0) {\n trait.ticks = behavior.ticks.map(t => ({\n name: toPascalCase(t.name.replace(/\\s+/g, '')),\n interval: t.intervalMs, // Direct number in ms\n guard: t.guard\n ? parseDomainGuard(t.guard.raw || formatGuardToCondition(t.guard), behavior.entityName)\n : undefined,\n effects: t.effects.map(e => {\n // If effect has pre-parsed S-expression (from raw JSON in domain text), use it directly\n if (e.config && '_rawSExpr' in e.config && Array.isArray(e.config._rawSExpr)) {\n return e.config._rawSExpr;\n }\n // Otherwise, parse the description text to S-Expression\n return parseDomainEffect(e.description, behavior.entityName);\n }),\n }));\n }\n\n return trait;\n}\n\n// === Utility Functions ===\n\nfunction toCamelCase(text: string): string {\n return text\n .toLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join('');\n}\n\nfunction toPascalCase(text: string): string {\n // If no spaces, the text is likely already PascalCase (e.g., \"TraineeManager\")\n // Just ensure first letter is uppercase and preserve the rest\n if (!text.includes(' ')) {\n return text.charAt(0).toUpperCase() + text.slice(1);\n }\n // If has spaces, convert each word: \"trainee manager\" -> \"TraineeManager\"\n return text\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\nfunction extractEventsFromTransitions(transitions: DomainTransition[]): { key: string; name: string }[] {\n const events = new Map<string, string>();\n\n for (const t of transitions) {\n if (t.event && !events.has(t.event)) {\n events.set(t.event, toTitleCase(t.event.replace(/_/g, ' ')));\n }\n }\n\n return Array.from(events.entries()).map(([key, name]) => ({ key, name }));\n}\n\nfunction toTitleCase(text: string): string {\n return text\n .toLowerCase()\n .split(' ')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\nfunction formatGuardForDomain(guard: DomainGuard): string {\n return guard.raw || 'if condition';\n}\n\nfunction formatGuardToCondition(guard: DomainGuard): string {\n // Use the raw text if available, otherwise reconstruct\n if (guard.raw) {\n // Strip \"if \" prefix if present\n return guard.raw.replace(/^if\\s+/i, '');\n }\n return 'true';\n}\n\n/**\n * Preserve template variables like {linkedEntity} while converting the rest to camelCase\n * Input: \"{linkedEntity}.status\" -> \"{linkedEntity}.status\"\n * Input: \"entity . status\" -> \"entity.status\" (preserve dot paths)\n * Input: \"entity status\" -> \"entityStatus\" (convert spaces to camelCase)\n */\nfunction preserveTemplateVars(text: string): string {\n // If it contains template syntax {xxx}, preserve it\n if (text.includes('{') && text.includes('}')) {\n // Just clean up whitespace around dots\n return text.replace(/\\s*\\.\\s*/g, '.');\n }\n\n // Check if this is a dot-separated path (like \"entity . status\" from token reconstruction)\n // Clean up whitespace around dots first\n const cleanedText = text.replace(/\\s*\\.\\s*/g, '.');\n\n // If it's a dot path (like \"entity.status\" or \"entity.fieldName\"), preserve it as-is\n if (cleanedText.includes('.')) {\n return cleanedText;\n }\n\n // Otherwise convert spaces to camelCase\n return toCamelCase(text);\n}\n","/**\n * Entity Formatter\n *\n * Converts KFlow DataEntity schema to domain language text.\n */\n\nimport type { DomainEntity, DomainField, DomainFieldType, DomainRelationship } from '../types.js';\n\n/**\n * Convert a KFlow DataEntity to domain language text\n */\nexport function formatSchemaEntityToDomain(entity: Record<string, unknown>): string {\n const domainEntity = schemaEntityToDomainEntity(entity);\n return formatEntityText(domainEntity);\n}\n\n/**\n * Convert KFlow DataEntity to DomainEntity AST\n */\nexport function schemaEntityToDomainEntity(entity: Record<string, unknown>): DomainEntity {\n const name = entity.name as string;\n const description = (entity.description as string) || `a ${name.toLowerCase()}`;\n const fields: DomainField[] = [];\n const relationships: DomainRelationship[] = [];\n\n // Process fields\n const schemaFields = (entity.fields as Array<Record<string, unknown>>) || [];\n for (const field of schemaFields) {\n const fieldName = field.name as string;\n const fieldType = field.type as string;\n\n // Handle relation fields separately\n if (fieldType === 'relation') {\n const relation = field.relation as Record<string, unknown>;\n if (relation) {\n const relType = relation.type as string;\n const targetEntity = relation.entity as string;\n\n if (relType === 'many-to-one') {\n // Extract alias from field name (e.g., assigneeId -> Assignee)\n let alias: string | undefined;\n if (fieldName.endsWith('Id') && !fieldName.toLowerCase().startsWith(targetEntity.toLowerCase())) {\n alias = fieldName.slice(0, -2); // Remove \"Id\" suffix\n alias = alias.charAt(0).toUpperCase() + alias.slice(1);\n }\n\n relationships.push({\n type: 'relationship',\n relationshipType: 'belongs_to',\n targetEntity,\n alias,\n });\n } else if (relType === 'one-to-many') {\n relationships.push({\n type: 'relationship',\n relationshipType: 'has_many',\n targetEntity,\n });\n } else if (relType === 'one-to-one') {\n relationships.push({\n type: 'relationship',\n relationshipType: 'has_one',\n targetEntity,\n });\n }\n }\n continue;\n }\n\n // Map schema field type to domain field type\n const domainFieldType = mapSchemaTypeToDomain(fieldType);\n\n const domainField: DomainField = {\n type: 'field',\n name: fieldName,\n fieldType: domainFieldType,\n required: (field.required as boolean) || false,\n unique: (field.unique as boolean) || false,\n auto: (field.auto as boolean) || false,\n };\n\n // Handle enum values - check both 'enumValues' and 'values' properties\n if (fieldType === 'enum') {\n const enumValues = (field.enumValues || field.values) as string[] | undefined;\n if (enumValues && enumValues.length > 0) {\n domainField.enumValues = enumValues;\n }\n }\n\n // Handle default value\n if (field.default !== undefined) {\n domainField.default = field.default;\n }\n\n fields.push(domainField);\n }\n\n // Extract states from entity if present\n const states = entity.states as string[] | undefined;\n const initialState = entity.initialState as string | undefined;\n\n return {\n type: 'entity',\n name,\n description,\n fields,\n relationships,\n states,\n initialState,\n };\n}\n\n/**\n * Format DomainEntity AST to domain language text\n */\nfunction formatEntityText(entity: DomainEntity): string {\n const lines: string[] = [];\n\n // Header line\n const article = startsWithVowel(entity.name) ? 'An' : 'A';\n lines.push(`${article} ${entity.name} is ${entity.description}`);\n\n // Fields section\n if (entity.fields.length > 0) {\n lines.push('');\n lines.push('It has:');\n for (const field of entity.fields) {\n lines.push(` - ${toSpaceSeparated(field.name)}: ${formatFieldType(field)}`);\n }\n }\n\n // Relationships\n for (const rel of entity.relationships) {\n lines.push('');\n if (rel.relationshipType === 'belongs_to') {\n const aliasStr = rel.alias ? ` as ${rel.alias}` : '';\n lines.push(`It belongs to ${rel.targetEntity}${aliasStr}`);\n } else if (rel.relationshipType === 'has_many') {\n lines.push(`It has many ${rel.targetEntity}`);\n } else if (rel.relationshipType === 'has_one') {\n lines.push(`It has one ${rel.targetEntity}`);\n }\n }\n\n // States\n if (entity.states && entity.states.length > 0) {\n lines.push('');\n lines.push(`It can be: ${entity.states.join(', ')}`);\n if (entity.initialState) {\n lines.push(`It starts as ${entity.initialState}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Map KFlow schema field type to domain field type\n * Uses the centralized FIELD_TYPE_MAPPING from types.ts\n */\nfunction mapSchemaTypeToDomain(schemaType: string): DomainFieldType {\n const mapping: Record<string, DomainFieldType> = {\n 'string': 'text',\n 'number': 'number',\n 'boolean': 'yes/no',\n 'date': 'date',\n 'timestamp': 'timestamp',\n 'datetime': 'datetime',\n 'enum': 'enum',\n 'array': 'list',\n 'object': 'object',\n 'relation': 'relation',\n };\n return mapping[schemaType] || 'text';\n}\n\n/**\n * Format a field's type and constraints for display\n */\nfunction formatFieldType(field: DomainField): string {\n const parts: string[] = [];\n\n if (field.enumValues && field.enumValues.length > 0) {\n parts.push(field.enumValues.join(' | '));\n } else {\n parts.push(field.fieldType);\n }\n\n if (field.required) parts.push('required');\n if (field.unique) parts.push('unique');\n if (field.auto) parts.push('auto');\n if (field.default !== undefined) {\n const defaultStr = typeof field.default === 'string'\n ? `\"${field.default}\"`\n : String(field.default);\n parts.push(`default ${defaultStr}`);\n }\n\n return parts.join(', ');\n}\n\n/**\n * Convert camelCase to space-separated words\n */\nfunction toSpaceSeparated(text: string): string {\n return text.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();\n}\n\n/**\n * Check if a word starts with a vowel SOUND (not just vowel letter)\n * Used for determining \"A\" vs \"An\" article\n */\nfunction startsWithVowel(text: string): boolean {\n const lower = text.toLowerCase();\n\n // Words that start with vowel letter but consonant sound (use \"A\")\n // \"U\" pronounced as \"yoo\": user, unicorn, unique, universal, union, etc.\n // \"Eu\" pronounced as \"yoo\": European, eureka, etc.\n if (/^(u[^aeiou]|uni|euro)/i.test(lower)) {\n return false;\n }\n\n // Words that start with consonant letter but vowel sound (use \"An\")\n // Silent \"H\": hour, honest, honor, heir, etc.\n if (/^(hour|honest|honor|heir)/i.test(lower)) {\n return true;\n }\n\n // Default: check if first letter is a vowel\n return /^[aeiou]/i.test(text);\n}\n","/**\n * Page Formatter\n *\n * Converts KFlow Page schema to domain language text.\n */\n\nimport type { DomainPage, DomainPageSection, DomainPageAction } from '../types.js';\n\n/**\n * Convert a KFlow Page schema to domain language text\n */\nexport function formatSchemaPageToDomain(page: Record<string, unknown>): string {\n const domainPage = schemaPageToDomainPage(page);\n return formatPageText(domainPage);\n}\n\n/**\n * Convert KFlow Page schema to DomainPage AST\n */\nexport function schemaPageToDomainPage(page: Record<string, unknown>): DomainPage {\n const name = page.name as string;\n const path = (page.path as string) || '';\n const purpose = (page.purpose as string) || (page.description as string) || '';\n const primaryEntity = page.primaryEntity as string | undefined;\n\n // Extract description from purpose or title or generate from name\n const title = page.title as string;\n const viewType = page.viewType as string;\n const description = title || purpose || viewType || generateDescriptionFromName(name);\n\n // Convert sections - can come from 'sections' array or 'traits' array\n const sections: DomainPageSection[] = [];\n const schemaSections = (page.sections as Array<Record<string, unknown>>) || [];\n const schemaTraits = (page.traits as Array<string | Record<string, unknown>>) || [];\n\n // Process legacy sections\n for (const section of schemaSections) {\n const rawPattern = section.pattern;\n let pattern: string;\n let config: Record<string, unknown> = {};\n\n if (typeof rawPattern === 'string') {\n pattern = rawPattern;\n config = (section.config as Record<string, unknown>) || {};\n } else if (rawPattern && typeof rawPattern === 'object') {\n const patternObj = rawPattern as Record<string, unknown>;\n pattern = (patternObj.type as string) || 'custom-section';\n const { type, ...restConfig } = patternObj;\n config = restConfig;\n } else {\n pattern = 'custom-section';\n }\n\n const sectionDescription = generateSectionDescription(pattern, config);\n sections.push({\n type: 'page_section',\n description: sectionDescription,\n });\n }\n\n // Process traits as sections (OrbitalSchema format)\n for (const trait of schemaTraits) {\n let traitName: string;\n let linkedEntity: string | undefined;\n\n if (typeof trait === 'string') {\n traitName = trait;\n } else {\n traitName = (trait.ref as string) || (trait.name as string) || 'Unknown';\n linkedEntity = trait.linkedEntity as string;\n }\n\n // Generate description from trait name\n const traitDescription = linkedEntity\n ? `${formatTraitName(traitName)} for ${linkedEntity}`\n : formatTraitName(traitName);\n\n sections.push({\n type: 'page_section',\n description: traitDescription,\n });\n }\n\n // Convert actions\n const actions: DomainPageAction[] = [];\n const schemaActions = (page.actions as Array<Record<string, unknown>>) || [];\n\n for (const action of schemaActions) {\n actions.push({\n type: 'page_action',\n trigger: (action.trigger as string) || '',\n action: (action.action as string) || '',\n });\n }\n\n return {\n type: 'page',\n name,\n description,\n purpose,\n url: path,\n primaryEntity,\n sections,\n actions,\n };\n}\n\n/**\n * Format trait name to human readable\n */\nfunction formatTraitName(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2');\n}\n\n/**\n * Format DomainPage AST to domain language text\n */\nfunction formatPageText(page: DomainPage): string {\n const lines: string[] = [];\n\n // Header line\n const displayName = page.name.replace(/Page$/, '');\n lines.push(`The ${displayName} shows ${page.description}`);\n\n // Entity - EXPLICIT reference, no inference needed on parse\n if (page.primaryEntity) {\n lines.push(`Entity: ${page.primaryEntity}`);\n }\n\n // Purpose\n if (page.purpose) {\n lines.push(`Purpose: ${page.purpose}`);\n }\n\n // URL\n if (page.url) {\n lines.push(`URL: ${page.url}`);\n }\n\n // Sections\n if (page.sections.length > 0) {\n lines.push('');\n lines.push('It displays:');\n for (const section of page.sections) {\n lines.push(` - ${section.description}`);\n }\n }\n\n // Actions\n if (page.actions.length > 0) {\n lines.push('');\n lines.push('Users can:');\n for (const action of page.actions) {\n if (action.action) {\n lines.push(` - ${action.trigger} to ${action.action}`);\n } else {\n lines.push(` - ${action.trigger}`);\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate a description from a page name\n */\nfunction generateDescriptionFromName(name: string): string {\n // Remove \"Page\" suffix and convert to readable text\n const baseName = name.replace(/Page$/, '');\n\n // Handle common patterns\n if (baseName.endsWith('List')) {\n const entity = baseName.slice(0, -4);\n return `a list of ${pluralize(entity.toLowerCase())}`;\n }\n\n if (baseName.endsWith('Detail') || baseName.endsWith('Details')) {\n const entity = baseName.replace(/Details?$/, '');\n return `details for a ${entity.toLowerCase()}`;\n }\n\n if (baseName.startsWith('Create') || baseName.startsWith('New')) {\n const entity = baseName.replace(/^(Create|New)/, '');\n return `a form to create a new ${entity.toLowerCase()}`;\n }\n\n if (baseName.startsWith('Edit')) {\n const entity = baseName.replace(/^Edit/, '');\n return `a form to edit ${entity ? `a ${entity.toLowerCase()}` : 'content'}`;\n }\n\n if (baseName === 'Dashboard') {\n return 'an overview of system activity';\n }\n\n if (baseName === 'Settings') {\n return 'user settings and preferences';\n }\n\n if (baseName === 'Login') {\n return 'the login form';\n }\n\n if (baseName === 'Register' || baseName === 'Signup') {\n return 'the registration form';\n }\n\n // Default: just format the name\n return toSpaceSeparated(baseName).toLowerCase();\n}\n\n/**\n * Generate a human-readable description from a section pattern and config\n */\nfunction generateSectionDescription(pattern: string, config: Record<string, unknown>): string {\n switch (pattern) {\n case 'page-header':\n const title = config.title as string;\n return title ? `Header with title \"${title}\"` : 'Page header';\n\n case 'entity-list':\n const entity = config.entity as string;\n const presentation = config.presentation as string;\n if (entity) {\n const presentationType = presentation === 'cards' ? 'cards' : 'table';\n return `${entity} list displayed as ${presentationType}`;\n }\n return 'List of items';\n\n case 'entity-detail':\n const detailEntity = config.entity as string;\n return detailEntity ? `${detailEntity} details` : 'Item details';\n\n case 'form-section':\n const formEntity = config.entity as string;\n const mode = config.mode as string;\n if (formEntity) {\n return mode === 'edit'\n ? `Form to edit ${formEntity}`\n : `Form to create ${formEntity}`;\n }\n return 'Data entry form';\n\n case 'dashboard-stats':\n return 'Summary statistics';\n\n case 'chart-section':\n const chartType = config.chartType as string;\n const chartTitle = config.title as string;\n return chartTitle\n ? `${chartTitle} (${chartType || 'chart'})`\n : `${chartType || 'Chart'} visualization`;\n\n case 'timeline-section':\n return 'Activity timeline';\n\n case 'profile-section':\n return 'Profile information';\n\n case 'custom-section':\n const customDesc = config.description as string;\n return customDesc || 'Custom content section';\n\n default:\n // Try to generate from pattern name\n const readable = pattern.replace(/-/g, ' ');\n return readable.charAt(0).toUpperCase() + readable.slice(1);\n }\n}\n\n/**\n * Convert camelCase/PascalCase to space-separated words\n */\nfunction toSpaceSeparated(text: string): string {\n return text\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2');\n}\n\n/**\n * Simple pluralization\n */\nfunction pluralize(word: string): string {\n if (word.endsWith('s') || word.endsWith('x') || word.endsWith('ch') || word.endsWith('sh')) {\n return word + 'es';\n }\n if (word.endsWith('y') && !['a', 'e', 'i', 'o', 'u'].includes(word[word.length - 2])) {\n return word.slice(0, -1) + 'ies';\n }\n return word + 's';\n}\n","/**\n * S-Expression Formatter\n *\n * Converts S-expressions to human-readable domain language text.\n * Used for displaying guards and effects in natural language.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../../types/index.js';\nimport { isSExpr, getOperator, getArgs } from '../../types/index.js';\n\n/**\n * Convert an S-expression to human-readable domain text.\n * This is the main entry point for S-expression formatting.\n */\nexport function formatSExprToDomain(expr: SExpr, context?: FormatContext): string {\n const ctx = context ?? { entityName: '' };\n\n if (!isSExpr(expr)) {\n // Primitive value\n return formatPrimitive(expr);\n }\n\n const op = getOperator(expr);\n const args = getArgs(expr);\n\n // Handle null operator (shouldn't happen with valid S-expressions)\n if (op === null) {\n return formatPrimitive(expr);\n }\n\n // Dispatch to appropriate formatter based on operator\n if (isComparisonOperator(op)) {\n return formatComparison(op, args, ctx);\n }\n\n if (isArithmeticOperator(op)) {\n return formatArithmetic(op, args, ctx);\n }\n\n if (isLogicalOperator(op)) {\n return formatLogical(op, args, ctx);\n }\n\n if (isControlOperator(op)) {\n return formatControl(op, args, ctx);\n }\n\n if (isEffectOperator(op)) {\n return formatEffect(op, args, ctx);\n }\n\n // Check for std library operators\n if (op.includes('/')) {\n return formatStdLibrary(op, args, ctx);\n }\n\n // Unknown operator - format generically\n return formatGenericOperator(op, args, ctx);\n}\n\n/**\n * Format an S-expression guard to domain text with \"if\" prefix.\n */\nexport function formatSExprGuardToDomain(expr: SExpr, entityName?: string): string {\n const text = formatSExprToDomain(expr, { entityName: entityName ?? '' });\n return `if ${text}`;\n}\n\n/**\n * Format an S-expression effect to domain text.\n */\nexport function formatSExprEffectToDomain(expr: SExpr, entityName?: string): string {\n return formatSExprToDomain(expr, { entityName: entityName ?? '' });\n}\n\n/**\n * Check if an expression is an S-expression (array format).\n */\nexport function isArraySExpr(value: unknown): value is SExpr {\n return Array.isArray(value) && value.length > 0 && typeof value[0] === 'string';\n}\n\n// ============================================================================\n// Format Context\n// ============================================================================\n\ninterface FormatContext {\n entityName: string;\n}\n\n// ============================================================================\n// Operator Classification\n// ============================================================================\n\nconst COMPARISON_OPERATORS = ['=', '==', '!=', '>', '<', '>=', '<=', 'eq', 'neq', 'gt', 'lt', 'gte', 'lte'];\nconst ARITHMETIC_OPERATORS = ['+', '-', '*', '/', '%', 'mod'];\nconst LOGICAL_OPERATORS = ['and', 'or', 'not', '&&', '||', '!'];\nconst CONTROL_OPERATORS = ['if', 'cond', 'do', 'let', 'when', 'unless', 'case'];\nconst EFFECT_OPERATORS = ['set', 'emit', 'navigate', 'notify', 'persist', 'spawn', 'despawn', 'call-service', 'render-ui'];\n\nfunction isComparisonOperator(op: string): boolean {\n return COMPARISON_OPERATORS.includes(op);\n}\n\nfunction isArithmeticOperator(op: string): boolean {\n return ARITHMETIC_OPERATORS.includes(op);\n}\n\nfunction isLogicalOperator(op: string): boolean {\n return LOGICAL_OPERATORS.includes(op);\n}\n\nfunction isControlOperator(op: string): boolean {\n return CONTROL_OPERATORS.includes(op);\n}\n\nfunction isEffectOperator(op: string): boolean {\n return EFFECT_OPERATORS.includes(op);\n}\n\n// ============================================================================\n// Primitive Formatting\n// ============================================================================\n\nfunction formatPrimitive(value: unknown): string {\n if (value === null || value === undefined) {\n return 'nothing';\n }\n\n if (typeof value === 'string') {\n // Check for binding references\n if (value.startsWith('@')) {\n return formatBinding(value);\n }\n return `\"${value}\"`;\n }\n\n if (typeof value === 'number') {\n return String(value);\n }\n\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n\n if (Array.isArray(value)) {\n // Non-S-expression array (data array)\n const items = value.map(v => formatPrimitive(v));\n return `[${items.join(', ')}]`;\n }\n\n if (typeof value === 'object') {\n // Object literal\n const entries = Object.entries(value as Record<string, unknown>)\n .map(([k, v]) => `${k}: ${formatPrimitive(v)}`);\n return `{${entries.join(', ')}}`;\n }\n\n return String(value);\n}\n\n/**\n * Format a binding reference like @entity.field\n */\nfunction formatBinding(binding: string): string {\n if (!binding.startsWith('@')) {\n return binding;\n }\n\n const parts = binding.slice(1).split('.');\n const root = parts[0];\n const path = parts.slice(1);\n\n switch (root) {\n case 'entity':\n // @entity.field -> just \"field\" in context\n return path.length > 0 ? path.join('.') : 'entity';\n\n case 'payload':\n // @payload.field -> \"incoming field\" or \"submitted field\"\n return path.length > 0 ? `incoming ${path.join('.')}` : 'payload';\n\n case 'state':\n return 'current state';\n\n case 'now':\n return 'current time';\n\n default:\n // @EntityName.field -> \"EntityName's field\"\n if (path.length > 0) {\n return `${root}'s ${path.join('.')}`;\n }\n return root;\n }\n}\n\n// ============================================================================\n// Comparison Formatting\n// ============================================================================\n\nconst COMPARISON_TEXT: Record<string, string> = {\n '=': 'is',\n '==': 'is',\n 'eq': 'is',\n '!=': 'is not',\n 'neq': 'is not',\n '>': 'is greater than',\n 'gt': 'is greater than',\n '<': 'is less than',\n 'lt': 'is less than',\n '>=': 'is at least',\n 'gte': 'is at least',\n '<=': 'is at most',\n 'lte': 'is at most',\n};\n\nfunction formatComparison(op: string, args: SExpr[], ctx: FormatContext): string {\n const left = formatSExprToDomain(args[0], ctx);\n const right = formatSExprToDomain(args[1], ctx);\n const opText = COMPARISON_TEXT[op] || op;\n\n return `${left} ${opText} ${right}`;\n}\n\n// ============================================================================\n// Arithmetic Formatting\n// ============================================================================\n\nconst ARITHMETIC_TEXT: Record<string, string> = {\n '+': 'plus',\n '-': 'minus',\n '*': 'times',\n '/': 'divided by',\n '%': 'mod',\n 'mod': 'mod',\n};\n\nfunction formatArithmetic(op: string, args: SExpr[], ctx: FormatContext): string {\n if (args.length === 1 && op === '-') {\n // Unary negation\n return `negative ${formatSExprToDomain(args[0], ctx)}`;\n }\n\n const left = formatSExprToDomain(args[0], ctx);\n const right = formatSExprToDomain(args[1], ctx);\n const opText = ARITHMETIC_TEXT[op] || op;\n\n return `(${left} ${opText} ${right})`;\n}\n\n// ============================================================================\n// Logical Formatting\n// ============================================================================\n\nfunction formatLogical(op: string, args: SExpr[], ctx: FormatContext): string {\n switch (op) {\n case 'and':\n case '&&': {\n const parts = args.map(a => formatSExprToDomain(a, ctx));\n return parts.join(' and ');\n }\n\n case 'or':\n case '||': {\n const parts = args.map(a => formatSExprToDomain(a, ctx));\n return parts.join(' or ');\n }\n\n case 'not':\n case '!': {\n const inner = formatSExprToDomain(args[0], ctx);\n return `not ${inner}`;\n }\n\n default:\n return formatGenericOperator(op, args, ctx);\n }\n}\n\n// ============================================================================\n// Control Flow Formatting\n// ============================================================================\n\nfunction formatControl(op: string, args: SExpr[], ctx: FormatContext): string {\n switch (op) {\n case 'if': {\n const condition = formatSExprToDomain(args[0], ctx);\n const thenBranch = formatSExprToDomain(args[1], ctx);\n if (args.length > 2) {\n const elseBranch = formatSExprToDomain(args[2], ctx);\n return `if ${condition} then ${thenBranch} else ${elseBranch}`;\n }\n return `if ${condition} then ${thenBranch}`;\n }\n\n case 'cond': {\n // Multiple conditions\n const parts = args.map(clauseExpr => {\n if (isSExpr(clauseExpr)) {\n const clauseArgs = getArgs(clauseExpr);\n const cond = formatSExprToDomain(clauseArgs[0], ctx);\n const result = formatSExprToDomain(clauseArgs[1], ctx);\n return `when ${cond}: ${result}`;\n }\n return formatSExprToDomain(clauseExpr, ctx);\n });\n return parts.join('; ');\n }\n\n case 'do': {\n // Sequential effects\n const parts = args.map(a => formatSExprToDomain(a, ctx));\n return parts.join(', then ');\n }\n\n case 'let': {\n // Variable binding\n const bindings = args[0];\n const body = args[1];\n if (isSExpr(bindings)) {\n const bindingArgs = getArgs(bindings);\n const bindingText = [];\n for (let i = 0; i < bindingArgs.length; i += 2) {\n const varName = formatBinding(bindingArgs[i] as string);\n const varValue = formatSExprToDomain(bindingArgs[i + 1], ctx);\n bindingText.push(`${varName} = ${varValue}`);\n }\n const bodyText = formatSExprToDomain(body, ctx);\n return `let ${bindingText.join(', ')} in ${bodyText}`;\n }\n return formatGenericOperator(op, args, ctx);\n }\n\n case 'when': {\n const condition = formatSExprToDomain(args[0], ctx);\n const effects = args.slice(1).map(a => formatSExprToDomain(a, ctx));\n return `when ${condition}: ${effects.join(', then ')}`;\n }\n\n case 'unless': {\n const condition = formatSExprToDomain(args[0], ctx);\n const effects = args.slice(1).map(a => formatSExprToDomain(a, ctx));\n return `unless ${condition}: ${effects.join(', then ')}`;\n }\n\n case 'case': {\n const value = formatSExprToDomain(args[0], ctx);\n const cases = args.slice(1).map(clauseExpr => {\n if (isSExpr(clauseExpr)) {\n const clauseArgs = getArgs(clauseExpr);\n const pattern = formatSExprToDomain(clauseArgs[0], ctx);\n const result = formatSExprToDomain(clauseArgs[1], ctx);\n return `${pattern}: ${result}`;\n }\n return formatSExprToDomain(clauseExpr, ctx);\n });\n return `case ${value} of ${cases.join('; ')}`;\n }\n\n default:\n return formatGenericOperator(op, args, ctx);\n }\n}\n\n// ============================================================================\n// Pattern Props Formatting (for render-ui round-trip)\n// ============================================================================\n\n/**\n * Format a single array item based on its object structure.\n *\n * Auto-detects the pattern based on properties:\n * - {field, label} → \"field as 'Label'\"\n * - {label, event, variant?} → \"Label -> EVENT:variant\"\n * - {id, label, event} → \"id: 'Label' -> EVENT\"\n * - {section, colSpan, rowSpan?} → \"section @ colSpan\" or \"section @ colSpanxrowSpan\"\n * - string → \"string\" (unchanged)\n */\nfunction formatArrayItem(item: unknown): string {\n if (typeof item === 'string') {\n return item;\n }\n\n if (typeof item !== 'object' || item === null) {\n return String(item);\n }\n\n const obj = item as Record<string, unknown>;\n\n // Pattern: {id, label, event} → \"id: 'Label' -> EVENT\" (tabs)\n if ('id' in obj && 'label' in obj && 'event' in obj) {\n return `${obj.id}: '${obj.label}' -> ${obj.event}`;\n }\n\n // Pattern: {label, event, variant?} → \"Label -> EVENT:variant\" (actions)\n if ('label' in obj && 'event' in obj) {\n const variant = obj.variant ? `:${obj.variant}` : '';\n return `${obj.label} -> ${obj.event}${variant}`;\n }\n\n // Pattern: {section, colSpan, rowSpan?} → \"section @ span\" (cells)\n if ('section' in obj && 'colSpan' in obj) {\n const span = obj.rowSpan ? `${obj.colSpan}x${obj.rowSpan}` : String(obj.colSpan);\n return `${obj.section} @ ${span}`;\n }\n\n // Pattern: {field, label} → \"field as 'Label'\" (metrics, columns)\n if ('field' in obj && 'label' in obj) {\n if (obj.label !== obj.field) {\n return `${obj.field} as '${obj.label}'`;\n }\n return String(obj.field);\n }\n\n // Fallback: stringify\n return JSON.stringify(item);\n}\n\n/**\n * Format array prop, auto-detecting if it contains complex objects\n */\nfunction formatArrayProp(value: unknown[]): string {\n if (value.length === 0) return '';\n\n // Check if first item is an object (complex) or string (simple)\n const hasObjects = value.some(v => typeof v === 'object' && v !== null);\n\n if (hasObjects) {\n return value.map(formatArrayItem).join(', ');\n }\n\n // Simple string array\n return value.join(', ');\n}\n\n/**\n * Check if a pattern has complex props (arrays of objects).\n * Complex props require inline JSON output.\n */\nfunction hasComplexPatternProps(patternObj: Record<string, unknown>): boolean {\n for (const [key, value] of Object.entries(patternObj)) {\n if (key === 'type' || key === 'entity') continue;\n\n // Array of objects is complex\n if (Array.isArray(value) && value.length > 0) {\n if (typeof value[0] === 'object' && value[0] !== null) {\n return true;\n }\n }\n\n // Nested object is complex\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Format simple pattern props (strings, numbers, booleans, string arrays).\n * Returns empty string if there are no simple props.\n */\nfunction formatSimplePatternProps(patternObj: Record<string, unknown>): string {\n const props: string[] = [];\n\n for (const [key, value] of Object.entries(patternObj)) {\n // Skip type and entity - they're handled separately\n if (key === 'type' || key === 'entity') continue;\n\n if (value === undefined || value === null) continue;\n\n // Only format simple values\n if (Array.isArray(value)) {\n // Only string arrays are simple\n if (value.every(v => typeof v === 'string')) {\n props.push(`${key} [${value.join(', ')}]`);\n }\n // Skip complex arrays - they're handled by inline JSON\n } else if (typeof value === 'string') {\n props.push(`${key} '${value}'`);\n } else if (typeof value === 'number' || typeof value === 'boolean') {\n props.push(`${key} ${value}`);\n }\n // Skip objects - they're complex\n }\n\n return props.join(' ');\n}\n\n/**\n * Format pattern props to domain language (DEPRECATED - use formatSimplePatternProps)\n *\n * Generically handles all props - no hardcoded key names.\n * Detects object structures and formats accordingly.\n */\nfunction formatPatternProps(patternObj: Record<string, unknown>): string {\n const props: string[] = [];\n\n for (const [key, value] of Object.entries(patternObj)) {\n // Skip type and entity - they're handled separately\n if (key === 'type' || key === 'entity') continue;\n\n if (value === undefined || value === null) continue;\n\n if (Array.isArray(value)) {\n const formatted = formatArrayProp(value);\n if (formatted) {\n props.push(`${key} [${formatted}]`);\n }\n } else if (typeof value === 'string') {\n props.push(`${key} '${value}'`);\n } else if (typeof value === 'number' || typeof value === 'boolean') {\n props.push(`${key} ${value}`);\n }\n }\n\n return props.join(' ');\n}\n\n// ============================================================================\n// Effect Formatting\n// ============================================================================\n\nfunction formatEffect(op: string, args: SExpr[], ctx: FormatContext): string {\n switch (op) {\n case 'set': {\n const field = formatBinding(args[0] as string);\n const value = formatSExprToDomain(args[1], ctx);\n return `update ${field} to ${value}`;\n }\n\n case 'emit': {\n const event = args[0] as string;\n if (args.length > 1) {\n const payload = formatSExprToDomain(args[1], ctx);\n return `emit ${event} with ${payload}`;\n }\n return `emit ${event}`;\n }\n\n case 'navigate': {\n const path = args[0] as string;\n if (args.length > 1) {\n const params = formatSExprToDomain(args[1], ctx);\n return `navigate to ${path} with ${params}`;\n }\n return `navigate to ${path}`;\n }\n\n case 'notify': {\n const firstArg = args[0];\n // Handle object format: [\"notify\", {\"message\": \"...\", \"type\": \"...\"}]\n if (typeof firstArg === 'object' && firstArg !== null && !Array.isArray(firstArg)) {\n const obj = firstArg as Record<string, unknown>;\n const message = obj.message || obj.text || 'notification';\n const type = obj.type || obj.variant || 'info';\n return `show ${type} notification \"${message}\"`;\n }\n // Handle string format: [\"notify\", \"message\", \"type?\"]\n const message = typeof firstArg === 'string' ? firstArg : formatPrimitive(firstArg);\n if (args.length > 1) {\n const type = typeof args[1] === 'string' ? args[1] : 'info';\n return `show ${type} notification \"${message}\"`;\n }\n return `notify \"${message}\"`;\n }\n\n case 'persist': {\n const action = args[0] as string;\n if (args.length > 1) {\n const data = formatSExprToDomain(args[1], ctx);\n return `persist ${action} ${data}`;\n }\n return `persist ${action}`;\n }\n\n case 'spawn': {\n const entityType = args[0] as string;\n if (args.length > 1) {\n const props = formatSExprToDomain(args[1], ctx);\n return `spawn ${entityType} with ${props}`;\n }\n return `spawn ${entityType}`;\n }\n\n case 'despawn': {\n if (args.length > 0) {\n const id = formatSExprToDomain(args[0], ctx);\n return `despawn ${id}`;\n }\n return 'despawn this';\n }\n\n case 'call-service': {\n const service = args[0] as string;\n const method = args.length > 1 ? args[1] as string : '';\n if (method) {\n return `call ${service}.${method}`;\n }\n return `call ${service}`;\n }\n\n case 'render-ui': {\n const slot = args[0] as string;\n const patternArg = args.length > 1 ? args[1] : null;\n\n if (patternArg === null) {\n return `render null to ${slot}`;\n }\n\n if (patternArg !== null) {\n // Check if pattern is an object with a type property\n if (typeof patternArg === 'object' && patternArg !== null && !Array.isArray(patternArg)) {\n const patternObj = patternArg as Record<string, unknown>;\n const patternType = patternObj.type as string;\n const entity = patternObj.entity as string | undefined;\n\n // Check if pattern has complex props (arrays of objects)\n const hasComplexProps = hasComplexPatternProps(patternObj);\n\n if (hasComplexProps) {\n // Output inline JSON for complex patterns\n return `[\"render-ui\", \"${slot}\", ${JSON.stringify(patternArg)}]`;\n }\n\n // Simple pattern - use human-readable syntax\n if (patternType) {\n const propsStr = formatSimplePatternProps(patternObj);\n if (entity && propsStr) {\n return `render ${patternType} to ${slot} for ${entity} with ${propsStr}`;\n }\n if (entity) {\n return `render ${patternType} to ${slot} for ${entity}`;\n }\n if (propsStr) {\n return `render ${patternType} to ${slot} with ${propsStr}`;\n }\n return `render ${patternType} to ${slot}`;\n }\n // Fall back to inline JSON\n return `[\"render-ui\", \"${slot}\", ${JSON.stringify(patternArg)}]`;\n }\n // String pattern name or S-expression\n if (isSExpr(patternArg)) {\n return `render ${formatSExprToDomain(patternArg, ctx)} to ${slot}`;\n }\n return `render ${patternArg} to ${slot}`;\n }\n return `render to ${slot}`;\n }\n\n default:\n return formatGenericOperator(op, args, ctx);\n }\n}\n\n// ============================================================================\n// Std Library Formatting\n// ============================================================================\n\nfunction formatStdLibrary(op: string, args: SExpr[], ctx: FormatContext): string {\n const [module, fn] = op.split('/');\n\n switch (module) {\n case 'math':\n return formatMathFunction(fn, args, ctx);\n case 'str':\n return formatStrFunction(fn, args, ctx);\n case 'array':\n return formatArrayFunction(fn, args, ctx);\n case 'object':\n return formatObjectFunction(fn, args, ctx);\n case 'validate':\n return formatValidateFunction(fn, args, ctx);\n case 'time':\n return formatTimeFunction(fn, args, ctx);\n case 'format':\n return formatFormatFunction(fn, args, ctx);\n default:\n return formatGenericOperator(op, args, ctx);\n }\n}\n\nfunction formatMathFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'abs':\n return `absolute value of ${formattedArgs[0]}`;\n case 'min':\n return `minimum of ${formattedArgs.join(', ')}`;\n case 'max':\n return `maximum of ${formattedArgs.join(', ')}`;\n case 'clamp':\n return `${formattedArgs[0]} clamped between ${formattedArgs[1]} and ${formattedArgs[2]}`;\n case 'floor':\n return `floor of ${formattedArgs[0]}`;\n case 'ceil':\n return `ceiling of ${formattedArgs[0]}`;\n case 'round':\n return `${formattedArgs[0]} rounded`;\n case 'sqrt':\n return `square root of ${formattedArgs[0]}`;\n case 'pow':\n return `${formattedArgs[0]} to the power of ${formattedArgs[1]}`;\n case 'lerp':\n return `lerp from ${formattedArgs[0]} to ${formattedArgs[1]} at ${formattedArgs[2]}`;\n case 'random':\n return 'random number';\n case 'randomInt':\n return `random integer between ${formattedArgs[0]} and ${formattedArgs[1]}`;\n default:\n return `math/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatStrFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'len':\n return `length of ${formattedArgs[0]}`;\n case 'upper':\n return `${formattedArgs[0]} uppercase`;\n case 'lower':\n return `${formattedArgs[0]} lowercase`;\n case 'trim':\n return `${formattedArgs[0]} trimmed`;\n case 'split':\n return `${formattedArgs[0]} split by ${formattedArgs[1]}`;\n case 'join':\n return `${formattedArgs[0]} joined with ${formattedArgs[1]}`;\n case 'includes':\n return `${formattedArgs[0]} contains ${formattedArgs[1]}`;\n case 'startsWith':\n return `${formattedArgs[0]} starts with ${formattedArgs[1]}`;\n case 'endsWith':\n return `${formattedArgs[0]} ends with ${formattedArgs[1]}`;\n case 'replace':\n return `${formattedArgs[0]} with ${formattedArgs[1]} replaced by ${formattedArgs[2]}`;\n case 'truncate':\n return `${formattedArgs[0]} truncated to ${formattedArgs[1]} characters`;\n case 'template':\n return `template ${formattedArgs[0]} with ${formattedArgs[1]}`;\n default:\n return `str/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatArrayFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'len':\n return `count of ${formattedArgs[0]}`;\n case 'first':\n return `first item in ${formattedArgs[0]}`;\n case 'last':\n return `last item in ${formattedArgs[0]}`;\n case 'filter':\n return `${formattedArgs[0]} filtered where ${formattedArgs[1]}`;\n case 'map':\n return `${formattedArgs[0]} transformed by ${formattedArgs[1]}`;\n case 'reduce':\n return `${formattedArgs[0]} reduced with ${formattedArgs[1]}`;\n case 'find':\n return `find in ${formattedArgs[0]} where ${formattedArgs[1]}`;\n case 'some':\n return `any in ${formattedArgs[0]} matches ${formattedArgs[1]}`;\n case 'every':\n return `all in ${formattedArgs[0]} match ${formattedArgs[1]}`;\n case 'includes':\n return `${formattedArgs[0]} contains ${formattedArgs[1]}`;\n case 'sort':\n return `${formattedArgs[0]} sorted`;\n case 'sortBy':\n return `${formattedArgs[0]} sorted by ${formattedArgs[1]}`;\n case 'reverse':\n return `${formattedArgs[0]} reversed`;\n case 'unique':\n return `unique items in ${formattedArgs[0]}`;\n case 'flatten':\n return `${formattedArgs[0]} flattened`;\n case 'concat':\n return `${formattedArgs.join(' combined with ')}`;\n case 'slice':\n return `${formattedArgs[0]} from ${formattedArgs[1]} to ${formattedArgs[2]}`;\n case 'take':\n return `first ${formattedArgs[1]} items of ${formattedArgs[0]}`;\n case 'drop':\n return `${formattedArgs[0]} without first ${formattedArgs[1]} items`;\n case 'groupBy':\n return `${formattedArgs[0]} grouped by ${formattedArgs[1]}`;\n case 'sum':\n return `sum of ${formattedArgs[0]}`;\n case 'avg':\n return `average of ${formattedArgs[0]}`;\n default:\n return `array/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatObjectFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'get':\n return `${formattedArgs[1]} of ${formattedArgs[0]}`;\n case 'set':\n return `${formattedArgs[0]} with ${formattedArgs[1]} set to ${formattedArgs[2]}`;\n case 'has':\n return `${formattedArgs[0]} has ${formattedArgs[1]}`;\n case 'keys':\n return `keys of ${formattedArgs[0]}`;\n case 'values':\n return `values of ${formattedArgs[0]}`;\n case 'entries':\n return `entries of ${formattedArgs[0]}`;\n case 'merge':\n return `${formattedArgs.join(' merged with ')}`;\n case 'pick':\n return `${formattedArgs[0]} with only ${formattedArgs[1]}`;\n case 'omit':\n return `${formattedArgs[0]} without ${formattedArgs[1]}`;\n case 'empty?':\n return `${formattedArgs[0]} is empty`;\n default:\n return `object/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatValidateFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'required':\n return `${formattedArgs[0]} is required`;\n case 'email':\n return `${formattedArgs[0]} is valid email`;\n case 'url':\n return `${formattedArgs[0]} is valid URL`;\n case 'phone':\n return `${formattedArgs[0]} is valid phone`;\n case 'minLength':\n return `${formattedArgs[0]} has at least ${formattedArgs[1]} characters`;\n case 'maxLength':\n return `${formattedArgs[0]} has at most ${formattedArgs[1]} characters`;\n case 'min':\n return `${formattedArgs[0]} is at least ${formattedArgs[1]}`;\n case 'max':\n return `${formattedArgs[0]} is at most ${formattedArgs[1]}`;\n case 'range':\n return `${formattedArgs[0]} is between ${formattedArgs[1]} and ${formattedArgs[2]}`;\n case 'pattern':\n return `${formattedArgs[0]} matches pattern ${formattedArgs[1]}`;\n default:\n return `validate/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatTimeFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'now':\n return 'current time';\n case 'today':\n return 'today';\n case 'format':\n return `${formattedArgs[0]} formatted as ${formattedArgs[1]}`;\n case 'add':\n return `${formattedArgs[0]} plus ${formattedArgs[1]} ${formattedArgs[2]}`;\n case 'subtract':\n return `${formattedArgs[0]} minus ${formattedArgs[1]} ${formattedArgs[2]}`;\n case 'diff':\n return `difference between ${formattedArgs[0]} and ${formattedArgs[1]}`;\n case 'isBefore':\n return `${formattedArgs[0]} is before ${formattedArgs[1]}`;\n case 'isAfter':\n return `${formattedArgs[0]} is after ${formattedArgs[1]}`;\n case 'isBetween':\n return `${formattedArgs[0]} is between ${formattedArgs[1]} and ${formattedArgs[2]}`;\n case 'year':\n return `year of ${formattedArgs[0]}`;\n case 'month':\n return `month of ${formattedArgs[0]}`;\n case 'day':\n return `day of ${formattedArgs[0]}`;\n default:\n return `time/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\nfunction formatFormatFunction(fn: string, args: SExpr[], ctx: FormatContext): string {\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n\n switch (fn) {\n case 'number':\n return `${formattedArgs[0]} as number`;\n case 'currency':\n return `${formattedArgs[0]} as ${formattedArgs[1]} currency`;\n case 'percent':\n return `${formattedArgs[0]} as percentage`;\n case 'bytes':\n return `${formattedArgs[0]} as file size`;\n case 'ordinal':\n return `${formattedArgs[0]} as ordinal`;\n case 'plural':\n return `${formattedArgs[0]} with ${formattedArgs[1]}/${formattedArgs[2]}`;\n case 'list':\n return `${formattedArgs[0]} as list`;\n case 'phone':\n return `${formattedArgs[0]} as phone number`;\n default:\n return `format/${fn}(${formattedArgs.join(', ')})`;\n }\n}\n\n// ============================================================================\n// Generic Operator Formatting\n// ============================================================================\n\nfunction formatGenericOperator(op: string, args: SExpr[], ctx: FormatContext): string {\n if (args.length === 0) {\n return op;\n }\n\n const formattedArgs = args.map(a => formatSExprToDomain(a, ctx));\n return `${op}(${formattedArgs.join(', ')})`;\n}\n","/**\n * Behavior Formatter\n *\n * Converts KFlow Trait schema to domain language text.\n * Supports both legacy typed effects and S-expression format.\n */\n\nimport type {\n DomainBehavior,\n DomainTransition,\n DomainTick,\n DomainGuard,\n DomainEffect,\n EffectType,\n} from '../types.js';\nimport { formatSExprToDomain, formatSExprGuardToDomain, isArraySExpr } from './sexpr-formatter.js';\n\n/**\n * Convert a KFlow Trait schema to domain language text\n */\nexport function formatSchemaTraitToDomain(trait: Record<string, unknown>, entityName?: string): string {\n const domainBehavior = schemaTraitToDomainBehavior(trait, entityName);\n return formatBehaviorText(domainBehavior);\n}\n\n/**\n * Convert KFlow Trait schema to DomainBehavior AST\n */\nexport function schemaTraitToDomainBehavior(trait: Record<string, unknown>, entityName?: string): DomainBehavior {\n const name = trait.name as string;\n const description = (trait.description as string) || name;\n\n // Determine entity name from trait or parameter\n let resolvedEntityName = entityName || '';\n const dataEntities = trait.dataEntities as Array<Record<string, unknown>> | undefined;\n if (!resolvedEntityName && dataEntities && dataEntities.length > 0) {\n resolvedEntityName = dataEntities[0].entity as string || '';\n }\n if (!resolvedEntityName) {\n // Try to extract from trait name (e.g., \"OrderLifecycle\" -> \"Order\")\n resolvedEntityName = extractEntityFromName(name);\n }\n\n // Extract state machine\n const stateMachine = trait.stateMachine as Record<string, unknown> | undefined;\n let states: string[] = [];\n let initialState = '';\n const transitions: DomainTransition[] = [];\n\n if (stateMachine) {\n // Extract states\n const schemaStates = (stateMachine.states as Array<Record<string, unknown>>) || [];\n for (const state of schemaStates) {\n const stateName = state.name as string;\n states.push(stateName);\n if (state.isInitial) {\n initialState = stateName;\n }\n }\n\n // Extract transitions\n const schemaTransitions = (stateMachine.transitions as Array<Record<string, unknown>>) || [];\n for (const t of schemaTransitions) {\n const fromState = t.from as string;\n const toState = t.to as string;\n const event = t.event as string;\n\n // Convert guards\n const guards: DomainGuard[] = [];\n const schemaGuards = (t.guards as Array<Record<string, unknown> | unknown[]>) || [];\n for (const g of schemaGuards) {\n // Check for S-expression guard\n if (isArraySExpr(g)) {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(g, resolvedEntityName),\n });\n } else {\n const guardObj = g as unknown as Record<string, unknown>;\n const condition = guardObj.condition;\n // Check if condition is S-expression\n if (isArraySExpr(condition)) {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(condition, resolvedEntityName),\n });\n } else {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition(condition as string, resolvedEntityName),\n raw: `if ${condition}`,\n });\n }\n }\n }\n\n // Single guard from transition\n if (t.guard) {\n // Check for S-expression guard\n if (isArraySExpr(t.guard)) {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(t.guard, resolvedEntityName),\n });\n } else {\n const guardObj = t.guard as Record<string, unknown>;\n const condition = guardObj.condition;\n // Check if condition is S-expression\n if (isArraySExpr(condition)) {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(condition, resolvedEntityName),\n });\n } else {\n guards.push({\n type: 'guard',\n condition: parseGuardCondition(condition as string, resolvedEntityName),\n raw: `if ${condition}`,\n });\n }\n }\n }\n\n // Convert effects\n const effects = convertEffects(t.effects as Array<Record<string, unknown>> | undefined);\n\n transitions.push({\n type: 'transition',\n fromState,\n toState,\n event,\n guards,\n effects,\n });\n }\n }\n\n // Extract ticks\n const ticks: DomainTick[] = [];\n const schemaTicks = (trait.ticks as Array<Record<string, unknown>>) || [];\n for (const t of schemaTicks) {\n // Support both 'name' (new format) and 'id' (old format) for tick identifier\n const tickName = (t.name as string) || (t.id as string) || 'unnamed_tick';\n const intervalValue = t.interval;\n\n // Parse interval - can be a number (ms) or object { ms: number } or { frames: number }\n let intervalStr = 'every hour';\n let intervalMs = 3600000;\n if (typeof intervalValue === 'number') {\n // Direct milliseconds\n intervalMs = intervalValue;\n intervalStr = formatIntervalMs(intervalMs);\n } else if (intervalValue && typeof intervalValue === 'object') {\n const interval = intervalValue as Record<string, unknown>;\n if (interval.ms) {\n intervalMs = interval.ms as number;\n intervalStr = formatIntervalMs(intervalMs);\n } else if (interval.frames) {\n intervalMs = (interval.frames as number) * 1000; // Assuming 1 frame = 1 second\n intervalStr = formatIntervalMs(intervalMs);\n }\n }\n\n // Guard - can be a string, S-expression, or object { condition: string | SExpr }\n let tickGuard: DomainGuard | undefined;\n if (t.guard) {\n // Check for S-expression guard\n if (isArraySExpr(t.guard)) {\n tickGuard = {\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(t.guard, resolvedEntityName),\n };\n } else if (typeof t.guard === 'string') {\n tickGuard = {\n type: 'guard',\n condition: parseGuardCondition(t.guard, resolvedEntityName),\n raw: `if ${t.guard}`,\n };\n } else {\n const guardObj = t.guard as Record<string, unknown>;\n const condition = guardObj.condition;\n // Check if condition is S-expression\n if (isArraySExpr(condition)) {\n tickGuard = {\n type: 'guard',\n condition: parseGuardCondition('', resolvedEntityName),\n raw: formatSExprGuardToDomain(condition, resolvedEntityName),\n };\n } else {\n tickGuard = {\n type: 'guard',\n condition: parseGuardCondition(condition as string, resolvedEntityName),\n raw: `if ${condition}`,\n };\n }\n }\n }\n\n // Effects\n const effects = convertEffects(t.effects as Array<Record<string, unknown>> | undefined);\n\n ticks.push({\n type: 'tick',\n name: tickName,\n interval: intervalStr,\n intervalMs,\n guard: tickGuard,\n effects,\n });\n }\n\n return {\n type: 'behavior',\n name: formatBehaviorName(name),\n entityName: resolvedEntityName,\n states,\n initialState,\n transitions,\n ticks,\n rules: [],\n };\n}\n\n/**\n * Format DomainBehavior AST to domain language text\n */\nfunction formatBehaviorText(behavior: DomainBehavior): string {\n const lines: string[] = [];\n\n // Behavior name\n lines.push(behavior.name);\n lines.push('');\n\n // States\n if (behavior.states.length > 0) {\n lines.push(`States: ${behavior.states.join(', ')}`);\n lines.push('');\n }\n\n // Transitions\n if (behavior.transitions.length > 0) {\n lines.push('Transitions:');\n for (const transition of behavior.transitions) {\n const fromState = transition.fromState === '*' ? 'any' : transition.fromState;\n let line = ` - From ${fromState} to ${transition.toState}`;\n if (transition.event) {\n line += ` when ${transition.event}`;\n }\n lines.push(line);\n\n // Guards\n for (const guard of transition.guards) {\n lines.push(` ${guard.raw || formatGuardForDomain(guard)}`);\n }\n\n // Effects\n for (const effect of transition.effects) {\n lines.push(` then ${effect.description}`);\n }\n }\n lines.push('');\n }\n\n // Ticks\n for (const tick of behavior.ticks) {\n lines.push(`Every ${tick.interval}:`);\n if (tick.guard) {\n lines.push(` ${tick.guard.raw || formatGuardForDomain(tick.guard)}`);\n }\n for (const effect of tick.effects) {\n lines.push(` - ${effect.description}`);\n }\n lines.push('');\n }\n\n // Rules\n if (behavior.rules.length > 0) {\n lines.push('Rules:');\n for (const rule of behavior.rules) {\n lines.push(` - ${rule}`);\n }\n }\n\n return lines.join('\\n').trim();\n}\n\n/**\n * Convert schema effects to domain effects.\n * Handles both legacy typed effects and S-expression format.\n */\nfunction convertEffects(effects: Array<Record<string, unknown> | unknown[]> | undefined): DomainEffect[] {\n if (!effects) return [];\n\n return effects.map(e => {\n // Check for S-expression effect (array format)\n if (isArraySExpr(e)) {\n const description = formatSExprToDomain(e);\n return {\n type: 'effect',\n effectType: 'sexpr' as EffectType,\n description,\n config: { sexpr: e },\n };\n }\n\n // Legacy typed effect\n const effectObj = e as unknown as Record<string, unknown>;\n const effectType = effectObj.type as EffectType;\n const config = (effectObj.config as Record<string, unknown>) || {};\n\n return {\n type: 'effect',\n effectType,\n description: generateEffectDescription(effectType, config),\n config,\n };\n });\n}\n\n/**\n * Generate a human-readable description for an effect\n */\nfunction generateEffectDescription(type: EffectType, config: Record<string, unknown>): string {\n switch (type) {\n case 'notify':\n const message = config.message as string;\n const recipient = config.recipient as string;\n if (recipient) {\n return message ? `notify ${recipient} \"${message}\"` : `notify ${recipient}`;\n }\n return message ? `notify \"${message}\"` : 'send notification';\n\n case 'set':\n const field = config.field as string;\n const value = config.value;\n return `update ${field} to ${value}`;\n\n case 'navigate':\n const path = config.path as string;\n return `navigate to ${path}`;\n\n case 'emit':\n const event = (config.eventKey || config.event) as string;\n return `emit ${event}`;\n\n case 'call-service':\n const endpoint = config.endpoint as string;\n const service = config.service as string;\n return service ? `call ${service}` : `call ${endpoint}`;\n\n case 'persist':\n const dataAction = config.dataAction as string || 'save';\n const entity = config.entity as string;\n return entity ? `persist ${dataAction} ${entity}` : `persist ${dataAction}`;\n\n default:\n // For unknown effect types, serialize the config as JSON\n if (Object.keys(config).length > 0) {\n return `${type}:${JSON.stringify(config)}`;\n }\n return `${type} action`;\n }\n}\n\n/**\n * Format an interval in milliseconds to human readable text\n */\nfunction formatIntervalMs(ms: number): string {\n const seconds = ms / 1000;\n const minutes = seconds / 60;\n const hours = minutes / 60;\n const days = hours / 24;\n\n if (days >= 1 && days === Math.floor(days)) {\n return days === 1 ? '1 day' : `${days} days`;\n }\n if (hours >= 1 && hours === Math.floor(hours)) {\n return hours === 1 ? '1 hour' : `${hours} hours`;\n }\n if (minutes >= 1 && minutes === Math.floor(minutes)) {\n return minutes === 1 ? '1 minute' : `${minutes} minutes`;\n }\n return seconds === 1 ? '1 second' : `${seconds} seconds`;\n}\n\n/**\n * Format behavior name from PascalCase to readable text\n */\nfunction formatBehaviorName(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2');\n}\n\n/**\n * Extract entity name from trait name\n */\nfunction extractEntityFromName(name: string): string {\n // Common patterns: \"OrderLifecycle\" -> \"Order\", \"TaskApproval\" -> \"Task\"\n const suffixes = ['Lifecycle', 'Approval', 'Workflow', 'Status', 'Process', 'Flow'];\n for (const suffix of suffixes) {\n if (name.endsWith(suffix)) {\n return name.slice(0, -suffix.length);\n }\n }\n return name;\n}\n\n/**\n * Parse a guard condition string into a simple AST\n * This is a simplified version that creates a basic guard structure\n */\nfunction parseGuardCondition(condition: string, entityName: string): any {\n // Return a simple comparison condition\n return {\n type: 'comparison',\n field: {\n type: 'field_reference',\n entityName,\n fieldName: 'status',\n },\n operator: '==',\n value: 'valid',\n };\n}\n\n/**\n * Format a guard back to domain language\n */\nfunction formatGuardForDomain(guard: DomainGuard): string {\n return guard.raw || 'if condition';\n}\n","/**\n * Guard Formatter\n *\n * Converts KFlow guard conditions to domain language and vice versa.\n * All entity references are explicit (e.g., Order.amount, CurrentUser.role).\n *\n * Supports both legacy string-based conditions and S-expression format.\n */\n\nimport type {\n DomainGuard,\n GuardCondition,\n FieldCheckCondition,\n ComparisonCondition,\n UserCheckCondition,\n LogicalCondition,\n FieldReference,\n ComparisonOperator,\n} from '../types.js';\nimport { formatSExprGuardToDomain, isArraySExpr } from './sexpr-formatter.js';\n\n/**\n * Convert a KFlow schema guard to domain language text.\n * Handles both legacy string conditions and S-expression format.\n */\nexport function formatSchemaGuardToDomain(guard: Record<string, unknown> | unknown[], entityName: string): string {\n // Check for S-expression format (array with operator)\n if (isArraySExpr(guard)) {\n return formatSExprGuardToDomain(guard, entityName);\n }\n\n // Legacy object format with condition string\n const condition = (guard as unknown as Record<string, unknown>).condition as string;\n if (!condition) {\n return '';\n }\n\n // Check if condition itself is an S-expression\n if (isArraySExpr(condition)) {\n return formatSExprGuardToDomain(condition, entityName);\n }\n\n // Parse the schema guard condition and convert to domain language\n const parsed = parseSchemaCondition(condition, entityName);\n if (!parsed) {\n return `if ${condition}`;\n }\n\n return formatGuardConditionToDomain(parsed);\n}\n\n/**\n * Convert a DomainGuard to KFlow schema guard format\n */\nexport function formatDomainGuardToSchema(guard: DomainGuard): string {\n return formatConditionToSchemaString(guard.condition);\n}\n\n/**\n * Format a guard condition AST to domain-friendly text\n */\nexport function formatGuardConditionToDomain(condition: GuardCondition): string {\n return 'if ' + formatConditionText(condition);\n}\n\n/**\n * Format a condition to readable text (without \"if\" prefix)\n */\nfunction formatConditionText(condition: GuardCondition): string {\n switch (condition.type) {\n case 'field_check': {\n const fieldName = toSpaceSeparated(condition.field.fieldName);\n switch (condition.check) {\n case 'provided':\n return `${fieldName} is provided`;\n case 'empty':\n return `${fieldName} is empty`;\n case 'equals':\n return `${fieldName} is ${condition.value}`;\n }\n break;\n }\n\n case 'comparison': {\n const fieldName = toSpaceSeparated(condition.field.fieldName);\n const opMap: Record<ComparisonOperator, string> = {\n '==': 'is',\n '!=': 'is not',\n '>': '>',\n '<': '<',\n '>=': '>=',\n '<=': '<=',\n };\n const op = opMap[condition.operator] || condition.operator;\n return `${fieldName} ${op} ${condition.value}`;\n }\n\n case 'user_check': {\n if (condition.check === 'is_role') {\n return `user is ${condition.role}`;\n } else {\n return 'user owns this';\n }\n }\n\n case 'logical': {\n const left = formatConditionText(condition.left);\n const right = formatConditionText(condition.right);\n return `${left} ${condition.operator} ${right}`;\n }\n }\n\n return '';\n}\n\n/**\n * Format a condition AST to KFlow schema string format\n */\nfunction formatConditionToSchemaString(condition: GuardCondition): string {\n switch (condition.type) {\n case 'field_check': {\n const fieldRef = `${condition.field.entityName}.${condition.field.fieldName}`;\n switch (condition.check) {\n case 'provided':\n return `${fieldRef} != null`;\n case 'empty':\n return `${fieldRef} == null`;\n case 'equals':\n const value = typeof condition.value === 'string'\n ? `\"${condition.value}\"`\n : condition.value;\n return `${fieldRef} == ${value}`;\n }\n break;\n }\n\n case 'comparison': {\n const fieldRef = `${condition.field.entityName}.${condition.field.fieldName}`;\n const value = typeof condition.value === 'string'\n ? `\"${condition.value}\"`\n : condition.value;\n return `${fieldRef} ${condition.operator} ${value}`;\n }\n\n case 'user_check': {\n if (condition.check === 'is_role') {\n return `CurrentUser.role == \"${condition.role}\"`;\n } else {\n return `${condition.ownerField} == CurrentUser.id`;\n }\n }\n\n case 'logical': {\n const left = formatConditionToSchemaString(condition.left);\n const right = formatConditionToSchemaString(condition.right);\n const op = condition.operator === 'AND' ? '&&' : '||';\n return `(${left}) ${op} (${right})`;\n }\n }\n\n return '';\n}\n\n/**\n * Parse a schema condition string into a GuardCondition AST\n * This handles conditions like \"Order.amount > 1000\" or \"CurrentUser.role == \\\"admin\\\"\"\n */\nfunction parseSchemaCondition(condition: string, defaultEntityName: string): GuardCondition | null {\n condition = condition.trim();\n\n // Handle logical operators\n const andMatch = splitLogicalOperator(condition, '&&');\n if (andMatch) {\n const left = parseSchemaCondition(andMatch.left, defaultEntityName);\n const right = parseSchemaCondition(andMatch.right, defaultEntityName);\n if (left && right) {\n return {\n type: 'logical',\n operator: 'AND',\n left,\n right,\n };\n }\n }\n\n const orMatch = splitLogicalOperator(condition, '||');\n if (orMatch) {\n const left = parseSchemaCondition(orMatch.left, defaultEntityName);\n const right = parseSchemaCondition(orMatch.right, defaultEntityName);\n if (left && right) {\n return {\n type: 'logical',\n operator: 'OR',\n left,\n right,\n };\n }\n }\n\n // Handle CurrentUser checks\n if (condition.includes('CurrentUser.role')) {\n const roleMatch = condition.match(/CurrentUser\\.role\\s*==\\s*[\"']?(\\w+)[\"']?/);\n if (roleMatch) {\n return {\n type: 'user_check',\n check: 'is_role',\n role: roleMatch[1],\n };\n }\n }\n\n if (condition.includes('CurrentUser.id')) {\n const ownerMatch = condition.match(/(\\w+)\\s*==\\s*CurrentUser\\.id/);\n if (ownerMatch) {\n return {\n type: 'user_check',\n check: 'owns_this',\n ownerField: ownerMatch[1],\n };\n }\n }\n\n // Handle null checks\n const nullCheckMatch = condition.match(/^(.+?)\\s*(==|!=)\\s*null$/);\n if (nullCheckMatch) {\n const fieldRef = parseFieldReference(nullCheckMatch[1], defaultEntityName);\n if (fieldRef) {\n return {\n type: 'field_check',\n field: fieldRef,\n check: nullCheckMatch[2] === '!=' ? 'provided' : 'empty',\n };\n }\n }\n\n // Handle comparison operators\n const comparisonMatch = condition.match(/^(.+?)\\s*(>=|<=|!=|==|>|<)\\s*(.+)$/);\n if (comparisonMatch) {\n const fieldRef = parseFieldReference(comparisonMatch[1], defaultEntityName);\n if (fieldRef) {\n return {\n type: 'comparison',\n field: fieldRef,\n operator: comparisonMatch[2] as ComparisonOperator,\n value: parseValue(comparisonMatch[3]),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Parse a field reference like \"Order.amount\" or just \"amount\"\n */\nfunction parseFieldReference(text: string, defaultEntityName: string): FieldReference | null {\n text = text.trim();\n\n // Remove parentheses if present\n if (text.startsWith('(') && text.endsWith(')')) {\n text = text.slice(1, -1).trim();\n }\n\n // Check for Entity.field format\n const dotMatch = text.match(/^(\\w+)\\.(\\w+)$/);\n if (dotMatch) {\n return {\n type: 'field_reference',\n entityName: dotMatch[1],\n fieldName: dotMatch[2],\n };\n }\n\n // Use default entity\n if (/^\\w+$/.test(text)) {\n return {\n type: 'field_reference',\n entityName: defaultEntityName,\n fieldName: text,\n };\n }\n\n return null;\n}\n\n/**\n * Parse a value (string, number, boolean)\n */\nfunction parseValue(text: string): string | number | boolean {\n text = text.trim();\n\n // Remove quotes\n if ((text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))) {\n return text.slice(1, -1);\n }\n\n // Boolean\n if (text.toLowerCase() === 'true') return true;\n if (text.toLowerCase() === 'false') return false;\n\n // Number\n const num = parseFloat(text);\n if (!isNaN(num)) return num;\n\n // String (identifier-style)\n return text;\n}\n\n/**\n * Split condition at logical operator respecting parentheses\n */\nfunction splitLogicalOperator(text: string, operator: string): { left: string; right: string } | null {\n let depth = 0;\n\n for (let i = 0; i < text.length - operator.length; i++) {\n const char = text[i];\n if (char === '(') depth++;\n else if (char === ')') depth--;\n else if (depth === 0 && text.slice(i, i + operator.length) === operator) {\n return {\n left: text.slice(0, i).trim(),\n right: text.slice(i + operator.length).trim(),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Convert camelCase to space-separated words\n */\nfunction toSpaceSeparated(text: string): string {\n return text.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();\n}\n","/**\n * Schema to Domain Converter\n *\n * Converts a complete OrbitalSchema to domain language text.\n * Generates three sections: Entities, Pages, and Behaviors.\n * \n * Updated to read from OrbitalSchema where entities, pages, and traits\n * are grouped into Orbital units. Also supports legacy KFlowSchema format\n * for backward compatibility.\n */\n\nimport type { DomainDocument, SectionMapping } from '../types.js';\nimport { formatSchemaEntityToDomain, schemaEntityToDomainEntity } from '../formatters/entity-formatter.js';\nimport { formatSchemaPageToDomain, schemaPageToDomainPage } from '../formatters/page-formatter.js';\nimport { formatSchemaTraitToDomain, schemaTraitToDomainBehavior } from '../formatters/behavior-formatter.js';\nimport { formatSExprToDomain, formatSExprGuardToDomain, isArraySExpr } from '../formatters/sexpr-formatter.js';\nimport type {\n OrbitalSchema,\n Entity,\n Page,\n Trait,\n TraitRef,\n EntityRef,\n PageRef,\n} from '../../types/index.js';\nimport {\n isOrbitalDefinition,\n getTraitName,\n isEntityReference,\n isPageReferenceString,\n isPageReferenceObject,\n} from '../../types/index.js';\n\n/**\n * Get entity name safely from EntityRef (string or inline Entity)\n */\nfunction getEntityName(entity: EntityRef): string {\n if (isEntityReference(entity)) {\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n/**\n * Get page name safely from PageRef (string, object reference, or inline Page)\n */\nfunction getPageName(page: PageRef): string {\n if (isPageReferenceString(page)) {\n const parts = page.split('.');\n return parts[parts.length - 1];\n }\n if (isPageReferenceObject(page)) {\n const parts = page.ref.split('.');\n return parts[parts.length - 1];\n }\n return page.name;\n}\n\n/**\n * Check if entity is an inline definition (not a reference)\n */\nfunction isInlineEntity(entity: EntityRef): entity is Entity {\n return !isEntityReference(entity);\n}\n\n/**\n * Check if page is an inline definition (not a reference)\n */\nfunction isInlinePage(page: PageRef): page is Page {\n return !isPageReferenceString(page) && !isPageReferenceObject(page);\n}\n\nexport interface SchemaToDomainResult {\n /** The complete domain text document */\n domainText: string;\n\n /** Parsed AST representation */\n document: DomainDocument;\n\n /** Mapping of sections to schema paths */\n mappings: SectionMapping[];\n\n /** Separate section texts for individual editing */\n sections: {\n entities: string[];\n pages: string[];\n behaviors: string[];\n };\n}\n\n/**\n * Legacy KFlowSchema format (for backward compatibility)\n */\ninterface LegacyKFlowSchema {\n name?: string;\n dataEntities?: Array<Record<string, unknown>>;\n ui?: { pages?: Array<Record<string, unknown>> };\n traits?: Array<Record<string, unknown>>;\n ticks?: Array<Record<string, unknown>>;\n}\n\n/**\n * Combined input type for the converter\n */\ntype SchemaInput = OrbitalSchema | LegacyKFlowSchema;\n\n/**\n * Check if schema is in legacy format\n */\nfunction isLegacySchema(schema: SchemaInput): schema is LegacyKFlowSchema {\n return 'dataEntities' in schema || ('ui' in schema && !('orbitals' in schema));\n}\n\n/**\n * Convert a complete OrbitalSchema or legacy KFlowSchema to domain language\n */\nexport function convertSchemaToDomain(schema: SchemaInput): SchemaToDomainResult {\n // Handle legacy format\n if (isLegacySchema(schema)) {\n return convertLegacySchemaToDomain(schema);\n }\n\n // Handle new OrbitalSchema format\n return convertOrbitalSchemaToDomain(schema);\n}\n\n/**\n * Convert legacy KFlowSchema to domain language\n */\nfunction convertLegacySchemaToDomain(schema: LegacyKFlowSchema): SchemaToDomainResult {\n const document: DomainDocument = {\n type: 'document',\n entities: [],\n pages: [],\n behaviors: [],\n };\n\n const mappings: SectionMapping[] = [];\n const sections = {\n entities: [] as string[],\n pages: [] as string[],\n behaviors: [] as string[],\n };\n\n // Convert entities\n const dataEntities = schema.dataEntities || [];\n for (let i = 0; i < dataEntities.length; i++) {\n const entity = dataEntities[i];\n const domainText = formatSchemaEntityToDomain(entity);\n const domainEntity = schemaEntityToDomainEntity(entity);\n\n document.entities.push(domainEntity);\n sections.entities.push(domainText);\n\n mappings.push({\n sectionId: `entity_${entity.name}`,\n sectionType: 'entity',\n schemaPath: `dataEntities[${i}]`,\n domainText,\n });\n }\n\n // Convert pages\n const pages = schema.ui?.pages || [];\n for (let i = 0; i < pages.length; i++) {\n const page = pages[i];\n const domainText = formatSchemaPageToDomain(page);\n const domainPage = schemaPageToDomainPage(page);\n\n document.pages.push(domainPage);\n sections.pages.push(domainText);\n\n mappings.push({\n sectionId: `page_${page.name}`,\n sectionType: 'page',\n schemaPath: `ui.pages[${i}]`,\n domainText,\n });\n }\n\n // Convert traits/behaviors\n const traits = schema.traits || [];\n for (let i = 0; i < traits.length; i++) {\n const trait = traits[i];\n const domainText = formatSchemaTraitToDomain(trait);\n const domainBehavior = schemaTraitToDomainBehavior(trait);\n\n document.behaviors.push(domainBehavior);\n sections.behaviors.push(domainText);\n\n mappings.push({\n sectionId: `behavior_${trait.name}`,\n sectionType: 'behavior',\n schemaPath: `traits[${i}]`,\n domainText,\n });\n }\n\n // Convert ticks to behaviors\n const ticks = schema.ticks || [];\n for (let i = 0; i < ticks.length; i++) {\n const tick = ticks[i];\n const tickBehavior = formatTickToDomain(tick);\n\n sections.behaviors.push(tickBehavior);\n\n mappings.push({\n sectionId: `tick_${tick.id || tick.name}`,\n sectionType: 'tick',\n schemaPath: `ticks[${i}]`,\n domainText: tickBehavior,\n });\n }\n\n // Build complete document text\n const domainText = buildDomainDocument(sections);\n\n return {\n domainText,\n document,\n mappings,\n sections,\n };\n}\n\n/**\n * Convert OrbitalSchema to domain language\n */\nfunction convertOrbitalSchemaToDomain(schema: OrbitalSchema): SchemaToDomainResult {\n const document: DomainDocument = {\n type: 'document',\n entities: [],\n pages: [],\n behaviors: [],\n };\n\n const mappings: SectionMapping[] = [];\n const sections = {\n entities: [] as string[],\n pages: [] as string[],\n behaviors: [] as string[],\n };\n\n // Extract from orbitals\n for (let orbitalIndex = 0; orbitalIndex < schema.orbitals.length; orbitalIndex++) {\n const orbital = schema.orbitals[orbitalIndex];\n\n // Skip orbital references - they don't have inline definitions\n if (!isOrbitalDefinition(orbital)) {\n continue;\n }\n\n // Convert entity (only if inline definition, not a reference)\n const entity = orbital.entity;\n if (isInlineEntity(entity)) {\n const entityRecord = entity as unknown as Record<string, unknown>;\n const domainText = formatSchemaEntityToDomain(entityRecord);\n const domainEntity = schemaEntityToDomainEntity(entityRecord);\n\n document.entities.push(domainEntity);\n sections.entities.push(domainText);\n\n mappings.push({\n sectionId: `entity_${entity.name}`,\n sectionType: 'entity',\n schemaPath: `orbitals[${orbitalIndex}].entity`,\n domainText,\n });\n }\n\n // Convert pages from this orbital (only inline definitions, not references)\n for (let pageIndex = 0; pageIndex < orbital.pages.length; pageIndex++) {\n const page = orbital.pages[pageIndex];\n\n // Skip page references - only convert inline page definitions\n if (!isInlinePage(page)) {\n continue;\n }\n\n const pageRecord = page as unknown as Record<string, unknown>;\n const pageDomainText = formatSchemaPageToDomain(pageRecord);\n const domainPage = schemaPageToDomainPage(pageRecord);\n\n document.pages.push(domainPage);\n sections.pages.push(pageDomainText);\n\n mappings.push({\n sectionId: `page_${page.name}`,\n sectionType: 'page',\n schemaPath: `orbitals[${orbitalIndex}].pages[${pageIndex}]`,\n domainText: pageDomainText,\n });\n }\n\n // Convert traits attached to this orbital (inline definitions)\n const orbitalTraits = orbital.traits || [];\n for (let traitIndex = 0; traitIndex < orbitalTraits.length; traitIndex++) {\n const traitEntry = orbitalTraits[traitIndex];\n\n // Traits are defined inline with full stateMachine objects\n // Check if this is an inline trait definition (has name and optionally stateMachine)\n const inlineTrait = traitEntry as unknown as Record<string, unknown>;\n const traitName = (inlineTrait.name as string) || getTraitName(traitEntry);\n\n // Skip if it's just a reference without inline definition (e.g., { ref: \"SomeTrait\" } without stateMachine)\n if (!inlineTrait.name && !inlineTrait.stateMachine) {\n continue;\n }\n\n // Use the inline trait definition, pass entity name for context\n const entityName = getEntityName(entity);\n const traitDomainText = formatSchemaTraitToDomain(inlineTrait, entityName);\n const domainBehavior = schemaTraitToDomainBehavior(inlineTrait, entityName);\n\n document.behaviors.push(domainBehavior);\n sections.behaviors.push(traitDomainText);\n\n mappings.push({\n sectionId: `behavior_${traitName}`,\n sectionType: 'behavior',\n schemaPath: `orbitals[${orbitalIndex}].traits[${traitIndex}]`,\n domainText: traitDomainText,\n });\n }\n }\n\n // Note: OrbitalSchema no longer has top-level traits\n // All traits are now defined within orbital.traits\n\n // Build complete document text\n const domainText = buildDomainDocument(sections);\n\n return {\n domainText,\n document,\n mappings,\n sections,\n };\n}\n\n/**\n * Format a tick to domain language\n */\nfunction formatTickToDomain(tick: Record<string, unknown>): string {\n const lines: string[] = [];\n\n // Support both 'name' and 'id' for tick identifier\n const tickName = (tick.name as string) || (tick.id as string) || 'unnamed';\n const intervalValue = tick.interval;\n\n // Format interval - can be a number (ms) or object { ms: number }\n let intervalStr = 'every hour';\n if (typeof intervalValue === 'number') {\n // Direct milliseconds\n intervalStr = formatIntervalMs(intervalValue);\n } else if (intervalValue && typeof intervalValue === 'object') {\n const interval = intervalValue as Record<string, unknown>;\n if (interval.ms) {\n intervalStr = formatIntervalMs(interval.ms as number);\n } else if (interval.frames) {\n intervalStr = formatIntervalMs((interval.frames as number) * 1000);\n }\n }\n\n lines.push(`Every ${intervalStr}:`);\n\n // Guard - can be a string, S-expression, or object { condition: string | SExpr }\n if (tick.guard) {\n // Check for S-expression guard\n if (isArraySExpr(tick.guard)) {\n lines.push(` ${formatSExprGuardToDomain(tick.guard)}`);\n } else if (typeof tick.guard === 'string') {\n lines.push(` if ${tick.guard}`);\n } else {\n const guardObj = tick.guard as Record<string, unknown>;\n const condition = guardObj.condition;\n // Check if condition is S-expression\n if (isArraySExpr(condition)) {\n lines.push(` ${formatSExprGuardToDomain(condition)}`);\n } else {\n lines.push(` if ${condition}`);\n }\n }\n }\n\n // Effects - can be typed effects or S-expressions\n const effects = (tick.effects as Array<Record<string, unknown> | unknown[]>) || [];\n for (const effect of effects) {\n // Check for S-expression effect\n if (isArraySExpr(effect)) {\n const desc = formatSExprToDomain(effect);\n lines.push(` - ${desc}`);\n } else {\n const effectObj = effect as unknown as Record<string, unknown>;\n const type = effectObj.type as string;\n const config = (effectObj.config as Record<string, unknown>) || {};\n const desc = formatEffectDescription(type, config);\n lines.push(` - ${desc}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Convert just the entities section\n */\nexport function convertEntitiesToDomain(entities: Entity[]): string {\n return entities.map(e => formatSchemaEntityToDomain(e as unknown as Record<string, unknown>)).join('\\n\\n---\\n\\n');\n}\n\n/**\n * Convert just the pages section\n */\nexport function convertPagesToDomain(pages: Page[]): string {\n return pages.map(p => formatSchemaPageToDomain(p as unknown as Record<string, unknown>)).join('\\n\\n---\\n\\n');\n}\n\n/**\n * Convert just the traits/behaviors section\n */\nexport function convertTraitsToDomain(traits: Trait[]): string {\n return traits.map(t => formatSchemaTraitToDomain(t as unknown as Record<string, unknown>)).join('\\n\\n---\\n\\n');\n}\n\n/**\n * Build the complete domain document from sections\n */\nfunction buildDomainDocument(sections: { entities: string[]; pages: string[]; behaviors: string[] }): string {\n const parts: string[] = [];\n\n if (sections.entities.length > 0) {\n parts.push('# Entities\\n');\n parts.push(sections.entities.join('\\n\\n---\\n\\n'));\n }\n\n if (sections.pages.length > 0) {\n parts.push('\\n\\n# Pages\\n');\n parts.push(sections.pages.join('\\n\\n---\\n\\n'));\n }\n\n if (sections.behaviors.length > 0) {\n parts.push('\\n\\n# Behaviors\\n');\n parts.push(sections.behaviors.join('\\n\\n---\\n\\n'));\n }\n\n return parts.join('');\n}\n\n/**\n * Format interval in milliseconds to human readable\n */\nexport function formatIntervalMs(ms: number): string {\n const seconds = ms / 1000;\n const minutes = seconds / 60;\n const hours = minutes / 60;\n const days = hours / 24;\n\n if (days >= 1 && days === Math.floor(days)) {\n return days === 1 ? '1 day' : `${days} days`;\n }\n if (hours >= 1 && hours === Math.floor(hours)) {\n return hours === 1 ? '1 hour' : `${hours} hours`;\n }\n if (minutes >= 1 && minutes === Math.floor(minutes)) {\n return minutes === 1 ? '1 minute' : `${minutes} minutes`;\n }\n return seconds === 1 ? '1 second' : `${seconds} seconds`;\n}\n\n/**\n * Format an effect to human readable description\n */\nexport function formatEffectDescription(type: string, config: Record<string, unknown>): string {\n switch (type) {\n case 'notify':\n const message = config.message as string;\n const recipient = config.recipient as string;\n if (recipient) {\n return message ? `notify ${recipient} \"${message}\"` : `notify ${recipient}`;\n }\n return message ? `notify \"${message}\"` : 'send notification';\n\n case 'update_field':\n return `update ${config.field} to ${config.value}`;\n\n case 'navigate':\n return `navigate to ${config.path}`;\n\n case 'emit_event':\n const event = (config.eventKey || config.event) as string;\n return `emit ${event}`;\n\n case 'api_call':\n return `call ${config.endpoint}`;\n\n case 'persist_data':\n const dataAction = config.dataAction as string || 'save';\n const entity = config.entity as string;\n return entity ? `persist ${dataAction} ${entity}` : `persist ${dataAction}`;\n\n case 'send_in_app':\n const userId = config.userId as string;\n const title = config.title as string;\n const inAppMessage = config.message as string;\n const msgType = config.type as string || 'info';\n return `send_in_app to ${userId} title \"${title}\" message \"${inAppMessage}\" type ${msgType}`;\n\n default:\n // For unknown effect types, serialize the config as JSON\n if (Object.keys(config).length > 0) {\n return `${type}:${JSON.stringify(config)}`;\n }\n return `${type} action`;\n }\n}\n","/**\n * Domain to Schema Converter\n *\n * Applies domain language text changes to an OrbitalSchema.\n * Supports incremental updates (single section) and full replacement.\n * \n * Updated to use OrbitalSchema where entities, pages, and traits\n * are grouped into Orbital units instead of flat arrays.\n */\n\nimport type { DomainDocument, ParseError, SectionMapping } from '../types.js';\nimport { parseEntity, formatEntityToSchema } from '../parsers/entity-parser.js';\nimport { parsePage, formatPageToSchema } from '../parsers/page-parser.js';\nimport { parseBehavior, formatBehaviorToSchema } from '../parsers/behavior-parser.js';\nimport { parseDomainEffect } from '../parsers/sexpr-parser.js';\nimport type {\n OrbitalSchema,\n Orbital,\n OrbitalDefinition,\n Entity,\n Page,\n TraitRef,\n Trait,\n} from '../../types/index.js';\nimport { isOrbitalDefinition, getTraitName, isEntityReference, isPageReferenceString, isPageReferenceObject, EntityRef, PageRef } from '../../types/index.js';\n\n/**\n * Helper to get entity name from EntityRef (handles string references)\n */\nfunction getEntityName(entity: EntityRef): string {\n if (isEntityReference(entity)) {\n // Reference format: \"Alias.entity\" - extract alias\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n/**\n * Helper to get page name from PageRef\n */\nfunction getPageName(page: PageRef): string {\n if (isPageReferenceString(page)) {\n // \"Alias.pages.PageName\" -> \"PageName\"\n const parts = page.split('.');\n return parts[parts.length - 1];\n }\n if (isPageReferenceObject(page)) {\n const parts = page.ref.split('.');\n return parts[parts.length - 1];\n }\n return page.name;\n}\n\nexport interface DomainToSchemaResult {\n /** Whether the conversion was successful */\n success: boolean;\n\n /** The updated schema */\n schema: OrbitalSchema;\n\n /** Any parse errors encountered */\n errors: ParseError[];\n\n /** Warnings (non-fatal issues) */\n warnings: ParseError[];\n\n /** Updated section mappings */\n mappings: SectionMapping[];\n}\n\n/**\n * Parse a complete domain document and convert to OrbitalSchema\n */\nexport function convertDomainToSchema(domainText: string, baseSchema?: OrbitalSchema): DomainToSchemaResult {\n const errors: ParseError[] = [];\n const warnings: ParseError[] = [];\n const mappings: SectionMapping[] = [];\n\n // Start with base schema or empty\n // Note: OrbitalSchema no longer has top-level traits - they are inside orbitals\n const schema: OrbitalSchema = baseSchema ? {\n ...baseSchema,\n orbitals: [...(baseSchema.orbitals || [])],\n } : {\n name: 'Application',\n orbitals: [],\n };\n\n // Split document into sections\n const sections = splitDomainDocument(domainText);\n\n // Parse entities, pages, and behaviors\n const parsedEntities: Array<{ name: string; entity: Entity; text: string }> = [];\n const parsedPages: Array<{ name: string; page: Page; forEntity?: string; text: string }> = [];\n const parsedTraits: Array<{ name: string; trait: Trait; forEntity?: string; text: string }> = [];\n const parsedTicks: Array<Record<string, unknown>> = [];\n\n // Parse entities\n for (const text of sections.entities) {\n const result = parseEntity(text);\n if (result.success && result.data) {\n const entityRecord = formatEntityToSchema(result.data);\n const entity: Entity = {\n name: entityRecord.name as string,\n fields: (entityRecord.fields || []) as Entity['fields'],\n persistence: 'persistent',\n };\n parsedEntities.push({\n name: result.data.name,\n entity,\n text,\n });\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n }\n\n // Parse pages\n for (const text of sections.pages) {\n const result = parsePage(text);\n if (result.success && result.data) {\n const pageRecord = formatPageToSchema(result.data);\n const page: Page = {\n name: pageRecord.name as string,\n path: (pageRecord.path || '/') as string,\n primaryEntity: pageRecord.primaryEntity as string | undefined,\n };\n\n // Add trait reference if specified in domain text\n if (result.data.traitName) {\n page.traits = [{\n ref: result.data.traitName,\n linkedEntity: result.data.primaryEntity,\n }];\n }\n\n // Use EXPLICIT primaryEntity from domain text - NO INFERENCE!\n // If primaryEntity is not specified, page becomes orphaned (not attached to orbital)\n const forEntity = result.data.primaryEntity || page.primaryEntity;\n parsedPages.push({\n name: result.data.name,\n page,\n forEntity,\n text,\n });\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n }\n\n // Parse behaviors/traits\n for (const text of sections.behaviors) {\n // Check if it's a tick (starts with \"Every\")\n if (text.trim().toLowerCase().startsWith('every')) {\n const tick = parseTickFromDomain(text);\n if (tick) {\n parsedTicks.push(tick);\n }\n continue;\n }\n\n // Parse as behavior/trait\n const result = parseBehavior(text, '');\n if (result.success && result.data) {\n const traitRecord = formatBehaviorToSchema(result.data);\n const trait: Trait = {\n name: traitRecord.name as string,\n stateMachine: traitRecord.stateMachine as Trait['stateMachine'],\n };\n // Use explicit \"Entity: X\" from behavior syntax if present\n // Behaviors without explicit entity go to schema level (assigned via page references or name matching)\n const forEntity = result.data.entityName || undefined;\n parsedTraits.push({\n name: result.data.name,\n trait,\n forEntity,\n text,\n });\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n }\n\n // Log what was parsed\n console.log(`[DomainToSchema] Parsed: ${parsedEntities.length} entities, ${parsedPages.length} pages, ${parsedTraits.length} traits`);\n if (parsedEntities.length > 0) {\n console.log(`[DomainToSchema] Entities: ${parsedEntities.map(e => e.name).join(', ')}`);\n }\n if (parsedTraits.length > 0) {\n console.log(`[DomainToSchema] Traits: ${parsedTraits.map(t => t.name).join(', ')}`);\n }\n\n // Build a map of trait names to their linked entities from page trait references\n // This connects traits to orbitals via the pages that use them\n const traitToEntityMap = new Map<string, string>();\n for (const { page } of parsedPages) {\n if (page.traits && page.primaryEntity) {\n for (const traitRef of page.traits) {\n // PageTraitRef is always an object with ref property\n if (traitRef.ref) {\n // Use linkedEntity if specified, otherwise use page's primaryEntity\n const linkedEntity = traitRef.linkedEntity || page.primaryEntity;\n if (linkedEntity) {\n traitToEntityMap.set(traitRef.ref.toLowerCase(), linkedEntity);\n }\n }\n }\n }\n }\n\n // Log traitToEntityMap for debugging\n if (traitToEntityMap.size > 0) {\n console.log(`[DomainToSchema] Page trait references: ${Array.from(traitToEntityMap.entries()).map(([t, e]) => `${t}→${e}`).join(', ')}`);\n } else {\n console.log(`[DomainToSchema] No page trait references found (pages may be missing primaryEntity or traits)`);\n }\n\n // Group into Orbitals - each entity becomes an Orbital\n const orbitals: OrbitalDefinition[] = [];\n\n for (let i = 0; i < parsedEntities.length; i++) {\n const { name, entity, text } = parsedEntities[i];\n\n // Find pages for this entity\n const entityPages = parsedPages\n .filter(p => p.forEntity === name || p.page.primaryEntity === name)\n .map(p => p.page);\n\n // Find traits for this entity using CONCRETE strategies only:\n // 1. Explicit forEntity from \"Entity: X\" syntax in behavior definition\n // 2. Page trait references via \"shows Entity using Trait\" syntax\n // NO name-based inference - all associations must be explicit\n const entityTraits: TraitRef[] = parsedTraits\n .filter(t => {\n const traitNameLower = t.name.toLowerCase();\n\n // Strategy 1: Explicit forEntity from \"Entity: X\" syntax\n if (t.forEntity === name) {\n console.log(`[DomainToSchema] ✓ Trait \"${t.name}\" → Entity \"${name}\" (explicit Entity: syntax)`);\n return true;\n }\n\n // Strategy 2: Check if trait is linked to this entity via page trait references\n // This uses \"shows Entity using Trait\" syntax in page definitions\n const linkedEntity = traitToEntityMap.get(traitNameLower);\n if (linkedEntity === name) {\n console.log(`[DomainToSchema] ✓ Trait \"${t.name}\" → Entity \"${name}\" (page trait reference)`);\n return true;\n }\n\n return false;\n })\n .map(t => t.trait.name); // TraitRef can be just a string\n\n const orbital: OrbitalDefinition = {\n name,\n entity,\n traits: entityTraits,\n pages: entityPages,\n };\n\n orbitals.push(orbital);\n\n // Add mapping for entity\n mappings.push({\n sectionId: `entity_${name}`,\n sectionType: 'entity',\n schemaPath: `orbitals[${i}].entity`,\n domainText: text,\n });\n }\n\n // Add mappings for pages and traits\n for (const { name, forEntity, text } of parsedPages) {\n const orbitalIndex = parsedEntities.findIndex(e => e.name === forEntity);\n const pageIndex = orbitalIndex >= 0\n ? orbitals[orbitalIndex].pages.findIndex(p => getPageName(p) === name)\n : -1;\n\n mappings.push({\n sectionId: `page_${name}`,\n sectionType: 'page',\n schemaPath: orbitalIndex >= 0 && pageIndex >= 0\n ? `orbitals[${orbitalIndex}].pages[${pageIndex}]`\n : `orphanedPages`,\n domainText: text,\n });\n }\n\n for (const { name, forEntity, text } of parsedTraits) {\n const orbitalIndex = parsedEntities.findIndex(e => e.name === forEntity);\n const traitIndex = orbitalIndex >= 0\n ? orbitals[orbitalIndex].traits.findIndex(t => getTraitName(t) === name)\n : -1;\n\n mappings.push({\n sectionId: `behavior_${name}`,\n sectionType: 'behavior',\n schemaPath: orbitalIndex >= 0 && traitIndex >= 0\n ? `orbitals[${orbitalIndex}].traits[${traitIndex}]`\n : `traits`,\n domainText: text,\n });\n }\n\n // Collect all trait names that were assigned to orbitals\n const assignedTraitNames = new Set<string>();\n for (const orbital of orbitals) {\n for (const traitRef of orbital.traits) {\n const traitName = getTraitName(traitRef);\n assignedTraitNames.add(traitName.toLowerCase());\n }\n }\n\n // Note: OrbitalSchema no longer has top-level traits.\n // Traits are now inline in orbitals. Each orbital's traits array can contain\n // either trait references (strings) or inline trait definitions.\n // The traits are already assigned to orbitals via assignedTraitNames above.\n\n // Log for debugging\n console.log(`[DomainToSchema] ${parsedTraits.length} traits parsed, ${assignedTraitNames.size} assigned to orbitals`);\n for (const orbital of orbitals) {\n if (orbital.traits.length > 0) {\n console.log(`[DomainToSchema] Orbital ${orbital.name}: ${orbital.traits.length} traits - ${orbital.traits.join(', ')}`);\n }\n }\n\n schema.orbitals = orbitals;\n\n return {\n success: errors.length === 0,\n schema,\n errors,\n warnings,\n mappings,\n };\n}\n\n/**\n * Apply a single section update to an OrbitalSchema\n */\nexport function applySectionUpdate(\n schema: OrbitalSchema,\n sectionType: 'entity' | 'page' | 'behavior' | 'tick',\n sectionId: string,\n newDomainText: string,\n): DomainToSchemaResult {\n const errors: ParseError[] = [];\n const warnings: ParseError[] = [];\n const updatedSchema: OrbitalSchema = JSON.parse(JSON.stringify(schema));\n\n // Extract the name from sectionId (e.g., \"entity_Order\" -> \"Order\")\n const name = sectionId.replace(/^(entity|page|behavior|tick)_/, '');\n\n switch (sectionType) {\n case 'entity': {\n const result = parseEntity(newDomainText);\n if (result.success && result.data) {\n const entityRecord = formatEntityToSchema(result.data);\n const entity: Entity = {\n name: entityRecord.name as string,\n fields: (entityRecord.fields || []) as Entity['fields'],\n persistence: 'persistent',\n };\n\n // Find and update existing orbital or create new\n const orbitalIndex = updatedSchema.orbitals.findIndex(\n o => isOrbitalDefinition(o) && getEntityName(o.entity) === name\n );\n\n if (orbitalIndex >= 0) {\n const orbital = updatedSchema.orbitals[orbitalIndex] as OrbitalDefinition;\n orbital.entity = entity;\n } else {\n // Create new orbital for this entity\n updatedSchema.orbitals.push({\n name: result.data.name,\n entity,\n traits: [],\n pages: [],\n });\n }\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n break;\n }\n\n case 'page': {\n const result = parsePage(newDomainText);\n if (result.success && result.data) {\n const pageRecord = formatPageToSchema(result.data);\n const page: Page = {\n name: pageRecord.name as string,\n path: (pageRecord.path || '/') as string,\n primaryEntity: pageRecord.primaryEntity as string | undefined,\n };\n\n // Find orbital that contains this page or matches primary entity\n for (const orbital of updatedSchema.orbitals) {\n if (!isOrbitalDefinition(orbital)) continue;\n\n const pageIndex = orbital.pages.findIndex(p => getPageName(p) === name);\n if (pageIndex >= 0) {\n orbital.pages[pageIndex] = page;\n break;\n }\n\n // Add to matching entity's orbital\n if (page.primaryEntity && getEntityName(orbital.entity) === page.primaryEntity) {\n orbital.pages.push(page);\n break;\n }\n }\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n break;\n }\n\n case 'behavior': {\n const result = parseBehavior(newDomainText, '');\n if (result.success && result.data) {\n const traitRecord = formatBehaviorToSchema(result.data);\n const trait: Trait = {\n name: traitRecord.name as string,\n stateMachine: traitRecord.stateMachine as Trait['stateMachine'],\n };\n const traitRef: TraitRef = trait.name; // Simple string ref\n\n // NO INFERENCE! Traits without explicit entity reference go to schema level.\n // First, try to find existing trait by name in any orbital or schema-level\n let found = false;\n\n // Check if trait already exists in an orbital (update in place)\n for (const orbital of updatedSchema.orbitals) {\n if (!isOrbitalDefinition(orbital)) continue;\n const traitIndex = orbital.traits.findIndex(t => getTraitName(t) === name);\n if (traitIndex >= 0) {\n orbital.traits[traitIndex] = traitRef;\n found = true;\n break;\n }\n }\n\n // If not found in orbitals, add to the first orbital\n // OrbitalSchema no longer has top-level traits - traits must be in orbitals\n if (!found) {\n // Find first orbital definition and add the trait there\n const firstOrbital = updatedSchema.orbitals.find(o => isOrbitalDefinition(o));\n if (firstOrbital && isOrbitalDefinition(firstOrbital)) {\n firstOrbital.traits.push(traitRef);\n } else {\n errors.push({ message: `No orbital found to attach trait \"${name}\" to` });\n }\n }\n } else {\n errors.push(...result.errors);\n }\n warnings.push(...result.warnings);\n break;\n }\n\n case 'tick': {\n // Ticks are converted to trait ticks - add as schema-level trait\n const tick = parseTickFromDomain(newDomainText);\n if (tick) {\n warnings.push({ message: 'Tick conversion to traits is not fully implemented' });\n } else {\n errors.push({ message: 'Failed to parse tick from domain text' });\n }\n break;\n }\n }\n\n return {\n success: errors.length === 0,\n schema: updatedSchema,\n errors,\n warnings,\n mappings: [],\n };\n}\n\n/**\n * Delete a section from the schema\n */\nexport function deleteSection(\n schema: OrbitalSchema,\n sectionType: 'entity' | 'page' | 'behavior' | 'tick',\n sectionId: string,\n): OrbitalSchema {\n const updatedSchema: OrbitalSchema = JSON.parse(JSON.stringify(schema));\n\n // Extract the name from sectionId\n const name = sectionId.replace(/^(entity|page|behavior|tick)_/, '');\n\n switch (sectionType) {\n case 'entity': {\n // Remove the entire orbital containing this entity\n updatedSchema.orbitals = updatedSchema.orbitals.filter(\n o => !isOrbitalDefinition(o) || getEntityName(o.entity) !== name\n );\n break;\n }\n\n case 'page': {\n // Remove page from its orbital\n for (const orbital of updatedSchema.orbitals) {\n if (!isOrbitalDefinition(orbital)) continue;\n orbital.pages = orbital.pages.filter(p => getPageName(p) !== name);\n }\n break;\n }\n\n case 'behavior': {\n // Remove trait reference from orbitals\n // OrbitalSchema no longer has top-level traits - all traits are in orbitals\n for (const orbital of updatedSchema.orbitals) {\n if (!isOrbitalDefinition(orbital)) continue;\n orbital.traits = orbital.traits.filter(t => getTraitName(t) !== name);\n }\n break;\n }\n\n case 'tick': {\n // Ticks would be in schema.traits - not fully implemented\n break;\n }\n }\n\n return updatedSchema;\n}\n\n/**\n * Split a domain document into its component sections\n */\nfunction splitDomainDocument(text: string): { entities: string[]; pages: string[]; behaviors: string[] } {\n const result = {\n entities: [] as string[],\n pages: [] as string[],\n behaviors: [] as string[],\n };\n\n // Split by major headers\n const normalizedText = text.replace(/\\r\\n/g, '\\n');\n\n // Find section boundaries\n let currentSection: 'entities' | 'pages' | 'behaviors' | null = null;\n let currentContent: string[] = [];\n\n const lines = normalizedText.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim().toLowerCase();\n\n // Check for section headers\n if (trimmed === '# entities' || trimmed === '#entities') {\n flushSection();\n currentSection = 'entities';\n continue;\n }\n if (trimmed === '# pages' || trimmed === '#pages') {\n flushSection();\n currentSection = 'pages';\n continue;\n }\n if (trimmed === '# behaviors' || trimmed === '#behaviors' ||\n trimmed === '# traits' || trimmed === '#traits') {\n flushSection();\n currentSection = 'behaviors';\n continue;\n }\n\n // Add line to current content\n currentContent.push(line);\n }\n\n // Flush final section\n flushSection();\n\n // If no headers were found, try to auto-detect sections\n if (result.entities.length === 0 && result.pages.length === 0 && result.behaviors.length === 0) {\n return autoDetectSections(normalizedText);\n }\n\n return result;\n\n function flushSection() {\n if (!currentSection || currentContent.length === 0) {\n currentContent = [];\n return;\n }\n\n const content = currentContent.join('\\n').trim();\n if (content) {\n // Split by --- separator first\n let items = content.split(/\\n---\\n/).map((s) => s.trim()).filter((s) => s);\n\n // For entities section, also split by \"A/An [Name] is\" patterns\n // This handles cases where LLM doesn't use --- separators\n if (currentSection === 'entities') {\n items = splitEntitiesByPattern(items);\n }\n // For pages section, split by \"[Name] at /\" patterns\n else if (currentSection === 'pages') {\n items = splitPagesByPattern(items);\n }\n // For behaviors section, split by \"[Name] behavior:\" patterns\n else if (currentSection === 'behaviors') {\n items = splitBehaviorsByPattern(items);\n }\n\n result[currentSection].push(...items);\n }\n\n currentContent = [];\n }\n}\n\n/**\n * Split entity content by \"A/An [Name] is\" patterns\n */\nfunction splitEntitiesByPattern(items: string[]): string[] {\n const result: string[] = [];\n\n for (const item of items) {\n // Check if this item contains multiple entities\n const lines = item.split('\\n');\n let currentEntity: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n // Check for entity definition start: \"A X is\" or \"An X is\"\n if (/^an?\\s+\\w+\\s+is\\s/i.test(trimmed) && currentEntity.length > 0) {\n // Flush previous entity\n result.push(currentEntity.join('\\n').trim());\n currentEntity = [line];\n } else {\n currentEntity.push(line);\n }\n }\n\n // Flush last entity\n if (currentEntity.length > 0) {\n result.push(currentEntity.join('\\n').trim());\n }\n }\n\n return result.filter(s => s);\n}\n\n/**\n * Split page content by \"[Name] at /\" patterns\n */\nfunction splitPagesByPattern(items: string[]): string[] {\n const result: string[] = [];\n\n for (const item of items) {\n const lines = item.split('\\n');\n let currentPage: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n // Check for page definition start: \"[Name] at /path\" or \"[Name]Page at /path\"\n if (/^\\w+(?:page)?\\s+at\\s+\\//i.test(trimmed) && currentPage.length > 0) {\n // Flush previous page\n result.push(currentPage.join('\\n').trim());\n currentPage = [line];\n } else {\n currentPage.push(line);\n }\n }\n\n // Flush last page\n if (currentPage.length > 0) {\n result.push(currentPage.join('\\n').trim());\n }\n }\n\n return result.filter(s => s);\n}\n\n/**\n * Split behavior content by \"[Name] behavior:\" patterns\n */\nfunction splitBehaviorsByPattern(items: string[]): string[] {\n const result: string[] = [];\n\n for (const item of items) {\n const lines = item.split('\\n');\n let currentBehavior: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n // Check for behavior definition start: \"[Name] behavior:\" or \"Every X\"\n if ((/^\\w+\\s+behavior:?$/i.test(trimmed) || /^every\\s+/i.test(trimmed)) && currentBehavior.length > 0) {\n // Flush previous behavior\n result.push(currentBehavior.join('\\n').trim());\n currentBehavior = [line];\n } else {\n currentBehavior.push(line);\n }\n }\n\n // Flush last behavior\n if (currentBehavior.length > 0) {\n result.push(currentBehavior.join('\\n').trim());\n }\n }\n\n return result.filter(s => s);\n}\n\n/**\n * Auto-detect sections when no headers are present\n */\nfunction autoDetectSections(text: string): { entities: string[]; pages: string[]; behaviors: string[] } {\n const result = {\n entities: [] as string[],\n pages: [] as string[],\n behaviors: [] as string[],\n };\n\n // Split by --- separator\n const sections = text.split(/\\n---\\n/).map((s) => s.trim()).filter((s) => s);\n\n for (const section of sections) {\n const firstLine = section.split('\\n')[0].toLowerCase();\n\n // Entity: starts with \"A\" or \"An\"\n if (firstLine.match(/^an?\\s+\\w+\\s+is/)) {\n result.entities.push(section);\n }\n // Page: starts with \"The\"\n else if (firstLine.match(/^the\\s+\\w+.*shows/)) {\n result.pages.push(section);\n }\n // Tick: starts with \"Every\"\n else if (firstLine.match(/^every\\s+/)) {\n result.behaviors.push(section);\n }\n // Behavior: Has \"States:\" or \"Transitions:\"\n else if (section.toLowerCase().includes('states:') ||\n section.toLowerCase().includes('transitions:')) {\n result.behaviors.push(section);\n }\n // Default: try to detect based on content\n else if (section.toLowerCase().includes('it has:')) {\n result.entities.push(section);\n }\n else if (section.toLowerCase().includes('it displays:')) {\n result.pages.push(section);\n }\n else {\n // Unknown section - try as entity\n result.entities.push(section);\n }\n }\n\n return result;\n}\n\n/**\n * Parse a tick from domain text\n */\nfunction parseTickFromDomain(text: string): Record<string, unknown> | null {\n const lines = text.trim().split('\\n');\n if (lines.length === 0) return null;\n\n const firstLine = lines[0].trim();\n\n // Parse \"Every [interval]:\"\n const intervalMatch = firstLine.match(/^every\\s+(.+?):?$/i);\n if (!intervalMatch) return null;\n\n const intervalStr = intervalMatch[1];\n const intervalMs = parseIntervalToMs(intervalStr);\n\n // Convert interval to PascalCase name\n const tickName = intervalStr\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n\n const tick: Record<string, unknown> = {\n name: tickName,\n interval: intervalMs,\n effects: [] as Array<unknown[]>, // S-Expression arrays\n };\n\n // Parse remaining lines for guard and effects\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i].trim();\n\n if (line.toLowerCase().startsWith('if ')) {\n tick.guard = line.slice(3).trim();\n } else if (line.startsWith('-')) {\n const effectText = line.slice(1).trim();\n const effect = parseEffectFromText(effectText);\n if (effect) {\n (tick.effects as Array<unknown[]>).push(effect);\n }\n }\n }\n\n return tick;\n}\n\n/**\n * Parse an interval string to milliseconds\n */\nfunction parseIntervalToMs(text: string): number {\n const lower = text.toLowerCase();\n\n const match = lower.match(/(\\d+)\\s*(second|minute|hour|day|week)s?/);\n if (match) {\n const value = parseInt(match[1], 10);\n const unit = match[2];\n\n switch (unit) {\n case 'second': return value * 1000;\n case 'minute': return value * 60 * 1000;\n case 'hour': return value * 60 * 60 * 1000;\n case 'day': return value * 24 * 60 * 60 * 1000;\n case 'week': return value * 7 * 24 * 60 * 60 * 1000;\n }\n }\n\n // Default to 1 hour\n return 60 * 60 * 1000;\n}\n\n/**\n * Parse an effect from text description to S-Expression format.\n * Delegates to the existing parseDomainEffect function from sexpr-parser.\n */\nfunction parseEffectFromText(text: string): unknown[] | null {\n try {\n const result = parseDomainEffect(text);\n // parseDomainEffect returns SExpr which can be a primitive or array\n // We only want arrays for effects\n if (Array.isArray(result)) {\n return result;\n }\n // If it returned a primitive, wrap in array or return null\n return null;\n } catch {\n return null;\n }\n}\n\n","/**\n * Section Mapping\n *\n * Tracks the relationship between domain language sections and KFlow schema paths.\n * Enables bidirectional sync and conflict detection.\n */\n\nimport type { SectionMapping, SourceRange } from '../types.js';\n\nexport interface MappingStore {\n /** All tracked mappings */\n mappings: SectionMapping[];\n\n /** Last sync timestamp */\n lastSync: number;\n\n /** Schema version hash for change detection */\n schemaHash?: string;\n}\n\n/**\n * Create a new mapping store\n */\nexport function createMappingStore(mappings: SectionMapping[] = []): MappingStore {\n return {\n mappings,\n lastSync: Date.now(),\n };\n}\n\n/**\n * Find a mapping by section ID\n */\nexport function findMapping(store: MappingStore, sectionId: string): SectionMapping | undefined {\n return store.mappings.find((m) => m.sectionId === sectionId);\n}\n\n/**\n * Find a mapping by schema path\n */\nexport function findMappingByPath(store: MappingStore, schemaPath: string): SectionMapping | undefined {\n return store.mappings.find((m) => m.schemaPath === schemaPath);\n}\n\n/**\n * Find all mappings of a specific type\n */\nexport function findMappingsByType(\n store: MappingStore,\n sectionType: 'entity' | 'page' | 'behavior' | 'tick',\n): SectionMapping[] {\n return store.mappings.filter((m) => m.sectionType === sectionType);\n}\n\n/**\n * Update or add a mapping\n */\nexport function upsertMapping(store: MappingStore, mapping: SectionMapping): MappingStore {\n const index = store.mappings.findIndex((m) => m.sectionId === mapping.sectionId);\n\n const newMappings = [...store.mappings];\n if (index >= 0) {\n newMappings[index] = { ...mapping, lastModified: Date.now() };\n } else {\n newMappings.push({ ...mapping, lastModified: Date.now() });\n }\n\n return {\n ...store,\n mappings: newMappings,\n lastSync: Date.now(),\n };\n}\n\n/**\n * Remove a mapping\n */\nexport function removeMapping(store: MappingStore, sectionId: string): MappingStore {\n return {\n ...store,\n mappings: store.mappings.filter((m) => m.sectionId !== sectionId),\n lastSync: Date.now(),\n };\n}\n\n/**\n * Detect changes between old and new mappings\n */\nexport function detectChanges(\n oldMappings: SectionMapping[],\n newMappings: SectionMapping[],\n): {\n added: SectionMapping[];\n removed: SectionMapping[];\n modified: SectionMapping[];\n} {\n const oldIds = new Set(oldMappings.map((m) => m.sectionId));\n const newIds = new Set(newMappings.map((m) => m.sectionId));\n\n const added = newMappings.filter((m) => !oldIds.has(m.sectionId));\n const removed = oldMappings.filter((m) => !newIds.has(m.sectionId));\n\n const modified: SectionMapping[] = [];\n for (const newMapping of newMappings) {\n const oldMapping = oldMappings.find((m) => m.sectionId === newMapping.sectionId);\n if (oldMapping && oldMapping.domainText !== newMapping.domainText) {\n modified.push(newMapping);\n }\n }\n\n return { added, removed, modified };\n}\n\n/**\n * Generate a unique section ID\n */\nexport function generateSectionId(\n sectionType: 'entity' | 'page' | 'behavior' | 'tick',\n name: string,\n): string {\n return `${sectionType}_${name}`;\n}\n\n/**\n * Extract section type and name from a section ID\n */\nexport function parseSectionId(sectionId: string): {\n sectionType: 'entity' | 'page' | 'behavior' | 'tick';\n name: string;\n} | null {\n const match = sectionId.match(/^(entity|page|behavior|tick)_(.+)$/);\n if (!match) return null;\n\n return {\n sectionType: match[1] as 'entity' | 'page' | 'behavior' | 'tick',\n name: match[2],\n };\n}\n\n/**\n * Get the schema path for a section\n */\nexport function getSchemaPath(\n sectionType: 'entity' | 'page' | 'behavior' | 'tick',\n index: number,\n): string {\n switch (sectionType) {\n case 'entity':\n return `dataEntities[${index}]`;\n case 'page':\n return `ui.pages[${index}]`;\n case 'behavior':\n return `traits[${index}]`;\n case 'tick':\n return `ticks[${index}]`;\n }\n}\n\n/**\n * Update range information for a mapping based on text position\n */\nexport function updateMappingRange(\n mapping: SectionMapping,\n fullText: string,\n): SectionMapping {\n const start = fullText.indexOf(mapping.domainText);\n if (start === -1) {\n return mapping;\n }\n\n const end = start + mapping.domainText.length;\n\n // Calculate line/column for start\n const textBefore = fullText.slice(0, start);\n const startLine = textBefore.split('\\n').length;\n const lastNewline = textBefore.lastIndexOf('\\n');\n const startColumn = start - lastNewline;\n\n // Calculate line/column for end\n const textToEnd = fullText.slice(0, end);\n const endLine = textToEnd.split('\\n').length;\n const lastNewlineEnd = textToEnd.lastIndexOf('\\n');\n const endColumn = end - lastNewlineEnd;\n\n const range: SourceRange = {\n start: {\n line: startLine,\n column: startColumn,\n offset: start,\n },\n end: {\n line: endLine,\n column: endColumn,\n offset: end,\n },\n };\n\n return {\n ...mapping,\n range,\n };\n}\n\n/**\n * Resolve conflicts between domain changes and schema changes\n */\nexport function resolveConflict(\n domainMapping: SectionMapping,\n schemaMapping: SectionMapping,\n preference: 'domain' | 'schema' | 'newest',\n): SectionMapping {\n if (preference === 'domain') {\n return domainMapping;\n }\n\n if (preference === 'schema') {\n return schemaMapping;\n }\n\n // Use newest\n const domainTime = domainMapping.lastModified || 0;\n const schemaTime = schemaMapping.lastModified || 0;\n\n return domainTime >= schemaTime ? domainMapping : schemaMapping;\n}\n\n/**\n * Compute a simple hash of a schema for change detection\n */\nexport function computeSchemaHash(schema: Record<string, unknown>): string {\n const str = JSON.stringify(schema);\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return hash.toString(36);\n}\n\n/**\n * Check if schema has changed since last sync\n */\nexport function hasSchemaChanged(store: MappingStore, schema: Record<string, unknown>): boolean {\n const currentHash = computeSchemaHash(schema);\n return store.schemaHash !== currentHash;\n}\n\n/**\n * Update the schema hash in the store\n */\nexport function updateSchemaHash(store: MappingStore, schema: Record<string, unknown>): MappingStore {\n return {\n ...store,\n schemaHash: computeSchemaHash(schema),\n lastSync: Date.now(),\n };\n}\n","/**\n * Domain Language Chunk Merging\n *\n * Utilities for merging multiple domain language chunks into a single document.\n * Used by the lean skill to generate orbitals incrementally.\n *\n * @packageDocumentation\n */\n\nexport interface DomainChunk {\n /** The domain language text for this orbital */\n text: string;\n /** Optional name for this orbital (for debugging) */\n name?: string;\n}\n\nexport interface MergeResult {\n /** The merged domain language text */\n text: string;\n /** Number of entities merged */\n entityCount: number;\n /** Number of pages merged */\n pageCount: number;\n /** Number of behaviors merged */\n behaviorCount: number;\n}\n\n/**\n * Extract a section from domain text by header\n */\nfunction extractSection(text: string, header: string): string {\n const headerPattern = new RegExp(`^#\\\\s*${header}\\\\s*$`, 'im');\n const match = text.match(headerPattern);\n if (!match) return '';\n\n const startIndex = match.index! + match[0].length;\n\n // Find the next section header or end of text\n const nextHeaderMatch = text.slice(startIndex).match(/^#\\s*\\w+/m);\n const endIndex = nextHeaderMatch\n ? startIndex + nextHeaderMatch.index!\n : text.length;\n\n return text.slice(startIndex, endIndex).trim();\n}\n\n/**\n * Count items in a section (entities, pages, or behaviors)\n */\nfunction countItems(sectionText: string, type: 'entity' | 'page' | 'behavior'): number {\n if (!sectionText) return 0;\n\n switch (type) {\n case 'entity':\n // Count \"A/An [Name] is\" patterns\n return (sectionText.match(/^A[n]?\\s+\\w+\\s+is\\s/gim) || []).length;\n case 'page':\n // Count \"[Name] at /\" or \"The [Name] shows\" patterns\n return (sectionText.match(/^(The\\s+)?\\w+\\s+(at\\s+\\/|shows\\s)/gim) || []).length;\n case 'behavior':\n // Count \"[Name] behavior:\" patterns\n return (sectionText.match(/^\\w+(\\s+\\w+)*\\s+behavior:/gim) || []).length;\n }\n}\n\n/**\n * Merge multiple domain language chunks into a single document.\n *\n * Each chunk can contain:\n * - `# Entities` section with entity definitions\n * - `# Pages` section with page definitions\n * - `# Behaviors` section with behavior/trait definitions\n *\n * The merge combines all sections, maintaining the standard order:\n * 1. Entities\n * 2. Pages\n * 3. Behaviors\n *\n * @example\n * ```typescript\n * const chunks = [\n * { text: '# Entities\\n\\nA Task is...', name: 'Task' },\n * { text: '# Entities\\n\\nA User is...', name: 'User' },\n * ];\n * const result = mergeDomainChunks(chunks);\n * // result.text contains both entities merged\n * ```\n */\nexport function mergeDomainChunks(chunks: DomainChunk[]): MergeResult {\n const entities: string[] = [];\n const pages: string[] = [];\n const behaviors: string[] = [];\n\n for (const chunk of chunks) {\n const entitySection = extractSection(chunk.text, 'Entities');\n const pageSection = extractSection(chunk.text, 'Pages');\n const behaviorSection = extractSection(chunk.text, 'Behaviors');\n\n if (entitySection) entities.push(entitySection);\n if (pageSection) pages.push(pageSection);\n if (behaviorSection) behaviors.push(behaviorSection);\n }\n\n const sections: string[] = [];\n\n if (entities.length > 0) {\n sections.push(`# Entities\\n\\n${entities.join('\\n\\n---\\n\\n')}`);\n }\n\n if (pages.length > 0) {\n sections.push(`# Pages\\n\\n${pages.join('\\n\\n---\\n\\n')}`);\n }\n\n if (behaviors.length > 0) {\n sections.push(`# Behaviors\\n\\n${behaviors.join('\\n\\n---\\n\\n')}`);\n }\n\n const mergedText = sections.join('\\n\\n');\n\n // Count items for reporting\n const allEntities = entities.join('\\n\\n');\n const allPages = pages.join('\\n\\n');\n const allBehaviors = behaviors.join('\\n\\n');\n\n return {\n text: mergedText,\n entityCount: countItems(allEntities, 'entity'),\n pageCount: countItems(allPages, 'page'),\n behaviorCount: countItems(allBehaviors, 'behavior'),\n };\n}\n\n/**\n * Validate that a domain chunk has the expected structure.\n * Returns errors if the chunk is malformed.\n */\nexport function validateDomainChunk(chunk: DomainChunk): string[] {\n const errors: string[] = [];\n\n if (!chunk.text || chunk.text.trim().length === 0) {\n errors.push('Chunk text is empty');\n return errors;\n }\n\n // Check for at least one section\n const hasEntities = /^#\\s*Entities/im.test(chunk.text);\n const hasPages = /^#\\s*Pages/im.test(chunk.text);\n const hasBehaviors = /^#\\s*Behaviors/im.test(chunk.text);\n\n if (!hasEntities && !hasPages && !hasBehaviors) {\n errors.push('Chunk must have at least one section: # Entities, # Pages, or # Behaviors');\n }\n\n return errors;\n}\n\n/**\n * Format a merged result as a summary string\n */\nexport function formatMergeSummary(result: MergeResult): string {\n const parts: string[] = [];\n if (result.entityCount > 0) parts.push(`${result.entityCount} entities`);\n if (result.pageCount > 0) parts.push(`${result.pageCount} pages`);\n if (result.behaviorCount > 0) parts.push(`${result.behaviorCount} behaviors`);\n return parts.join(', ') || 'empty';\n}\n","/**\n * Domain Language Types\n *\n * AST node types for the domain language that maps to KFlow schema.\n * All entity references use explicit names (e.g., Order, Task, CurrentUser)\n * per GAP-002 - no magic variables like `entity.` or `context.`.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Type Registry (OrbitalSchema ↔ Domain Language Mapping)\n// ============================================================================\n\n/**\n * Field type mapping: OrbitalSchema type → Domain Language keyword\n *\n * This is the single source of truth for type conversion.\n * When adding new field types to OrbitalSchema, add the mapping here.\n */\nexport const FIELD_TYPE_MAPPING = {\n // OrbitalSchema → Domain Language\n 'string': 'text',\n 'number': 'number',\n 'boolean': 'yes/no',\n 'date': 'date',\n 'timestamp': 'timestamp',\n 'datetime': 'datetime',\n 'array': 'list',\n 'object': 'object',\n 'enum': 'enum',\n 'relation': 'relation',\n} as const;\n\n/**\n * Reverse mapping: Domain Language keyword → OrbitalSchema type\n */\nexport const DOMAIN_TO_SCHEMA_FIELD_TYPE = {\n 'text': 'string',\n 'long text': 'string',\n 'number': 'number',\n 'currency': 'number',\n 'yes/no': 'boolean',\n 'date': 'date',\n 'timestamp': 'timestamp',\n 'datetime': 'datetime',\n 'list': 'array',\n 'object': 'object',\n 'enum': 'enum',\n 'relation': 'relation',\n} as const;\n\n/**\n * Effect operator mapping: Both systems use the same operator names\n */\nexport const EFFECT_OPERATORS = [\n 'set',\n 'emit',\n 'navigate',\n 'render-ui',\n 'persist',\n 'call-service',\n 'spawn',\n 'despawn',\n 'do',\n 'notify',\n] as const;\n\n/**\n * Guard/comparison operators: S-Expression syntax only\n */\nexport const COMPARISON_OPERATORS = ['=', '!=', '<', '>', '<=', '>='] as const;\nexport const LOGICAL_OPERATORS = ['and', 'or', 'not'] as const;\nexport const ARITHMETIC_OPERATORS = ['+', '-', '*', '/', '%'] as const;\n\n/**\n * UI Slots: Same in both OrbitalSchema and Domain Language\n */\nexport const UI_SLOTS = [\n 'main',\n 'sidebar',\n 'modal',\n 'drawer',\n 'overlay',\n 'center',\n 'toast',\n 'hud-top',\n 'hud-bottom',\n 'floating',\n 'system',\n] as const;\n\n/**\n * Binding prefixes for S-Expressions\n */\nexport const BINDING_PREFIXES = {\n entity: '@entity',\n payload: '@payload',\n state: '@state',\n now: '@now',\n} as const;\n\n// ============================================================================\n// Effect Type\n// ============================================================================\n\n/**\n * Effect operator names (S-expression first element)\n * These are the operators used in S-expression effects like ['emit', ...]\n */\nexport type EffectType = (typeof EFFECT_OPERATORS)[number];\n\n// ============================================================================\n// Base Types\n// ============================================================================\n\nexport interface SourceLocation {\n line: number;\n column: number;\n offset: number;\n}\n\nexport interface SourceRange {\n start: SourceLocation;\n end: SourceLocation;\n}\n\nexport interface ASTNode {\n type: string;\n range?: SourceRange;\n}\n\n// ============================================================================\n// Field Types\n// ============================================================================\n\n/**\n * Domain Language field types\n *\n * Note: These map to OrbitalSchema types via DOMAIN_TO_SCHEMA_FIELD_TYPE\n */\nexport type DomainFieldType =\n | 'text'\n | 'long text'\n | 'number'\n | 'currency'\n | 'date'\n | 'timestamp'\n | 'datetime'\n | 'yes/no'\n | 'enum'\n | 'list'\n | 'object'\n | 'relation';\n\n/**\n * OrbitalSchema field types (for reference)\n */\nexport type SchemaFieldType = keyof typeof FIELD_TYPE_MAPPING;\n\nexport interface DomainField extends ASTNode {\n type: 'field';\n name: string;\n fieldType: DomainFieldType;\n required: boolean;\n unique: boolean;\n auto: boolean;\n default?: unknown;\n enumValues?: string[]; // For enum types\n}\n\n// ============================================================================\n// Relationship Types\n// ============================================================================\n\nexport type RelationshipType = 'belongs_to' | 'has_many' | 'has_one';\n\nexport interface DomainRelationship extends ASTNode {\n type: 'relationship';\n relationshipType: RelationshipType;\n targetEntity: string;\n alias?: string; // e.g., \"as Assignee\"\n}\n\n// ============================================================================\n// Entity AST\n// ============================================================================\n\nexport interface DomainEntity extends ASTNode {\n type: 'entity';\n name: string;\n description: string;\n fields: DomainField[];\n relationships: DomainRelationship[];\n states?: string[];\n initialState?: string;\n}\n\n// ============================================================================\n// Page AST\n// ============================================================================\n\nexport interface DomainPageSection extends ASTNode {\n type: 'page_section';\n description: string;\n}\n\nexport interface DomainPageAction extends ASTNode {\n type: 'page_action';\n trigger: string; // e.g., \"Click a task\"\n action: string; // e.g., \"Navigate to Task Details\"\n}\n\nexport interface DomainPage extends ASTNode {\n type: 'page';\n name: string;\n description: string;\n purpose: string;\n url: string;\n primaryEntity?: string; // Explicit entity reference (no inference!)\n traitName?: string; // Trait/behavior to use for this page\n sections: DomainPageSection[];\n actions: DomainPageAction[];\n onAccess?: string;\n}\n\n// ============================================================================\n// Guard Expression AST\n// ============================================================================\n\nexport type ComparisonOperator = '==' | '!=' | '>' | '<' | '>=' | '<=';\nexport type LogicalOperator = 'AND' | 'OR';\n\nexport interface FieldReference extends ASTNode {\n type: 'field_reference';\n entityName: string; // Explicit entity name (Order, Task, CurrentUser)\n fieldName: string;\n}\n\nexport interface FieldCheckCondition extends ASTNode {\n type: 'field_check';\n field: FieldReference;\n check: 'provided' | 'empty' | 'equals';\n value?: string | number | boolean;\n}\n\nexport interface ComparisonCondition extends ASTNode {\n type: 'comparison';\n field: FieldReference;\n operator: ComparisonOperator;\n value: string | number | boolean;\n}\n\nexport interface UserCheckCondition extends ASTNode {\n type: 'user_check';\n check: 'is_role' | 'owns_this';\n role?: string;\n ownerField?: string; // Field that contains owner ID\n}\n\nexport interface LogicalCondition extends ASTNode {\n type: 'logical';\n operator: LogicalOperator;\n left: GuardCondition;\n right: GuardCondition;\n}\n\nexport type GuardCondition =\n | FieldCheckCondition\n | ComparisonCondition\n | UserCheckCondition\n | LogicalCondition;\n\nexport interface DomainGuard extends ASTNode {\n type: 'guard';\n condition: GuardCondition;\n raw: string; // Original text for display\n}\n\n// ============================================================================\n// Effect AST\n// ============================================================================\n\n// EffectType is imported from schema/index.js above\n\nexport interface DomainEffect extends ASTNode {\n type: 'effect';\n effectType: EffectType;\n description: string; // Human-readable description\n config: Record<string, unknown>;\n}\n\n// ============================================================================\n// Behavior AST (Traits)\n// ============================================================================\n\nexport interface DomainTransition extends ASTNode {\n type: 'transition';\n fromState: string;\n toState: string;\n event: string;\n guards: DomainGuard[];\n effects: DomainEffect[];\n}\n\nexport interface DomainTick extends ASTNode {\n type: 'tick';\n name: string;\n interval: string; // e.g., \"Every hour\", \"Every day at 9am\"\n intervalMs?: number; // Parsed milliseconds\n guard?: DomainGuard;\n effects: DomainEffect[];\n}\n\nexport interface DomainBehavior extends ASTNode {\n type: 'behavior';\n name: string; // e.g., \"Order Lifecycle\"\n entityName: string; // The entity this behavior applies to\n states: string[];\n initialState: string;\n transitions: DomainTransition[];\n ticks: DomainTick[];\n rules: string[]; // Business rules in natural language\n}\n\n// ============================================================================\n// Full Document AST\n// ============================================================================\n\nexport interface DomainDocument extends ASTNode {\n type: 'document';\n entities: DomainEntity[];\n pages: DomainPage[];\n behaviors: DomainBehavior[];\n}\n\n// ============================================================================\n// Section Mapping (for bidirectional sync)\n// ============================================================================\n\nexport interface SectionMapping {\n sectionId: string;\n sectionType: 'entity' | 'page' | 'behavior' | 'tick';\n schemaPath: string; // JSON path in KFlow schema\n domainText: string; // The domain text for this section\n aiDescription?: string; // AI-generated prose description\n range?: SourceRange; // Location in source text\n lastModified?: number; // Timestamp\n}\n\n// ============================================================================\n// Parse Result\n// ============================================================================\n\nexport interface ParseError {\n message: string;\n range?: SourceRange;\n suggestion?: string;\n}\n\nexport interface ParseResult<T> {\n success: boolean;\n data?: T;\n errors: ParseError[];\n warnings: ParseError[];\n}\n","/**\n * Domain Language Registry\n *\n * Central registry for OrbitalSchema <-> Domain Language mappings.\n * This is the single source of truth for type conversions.\n *\n * When adding a new OrbitalSchema feature:\n * 1. Add type mapping here\n * 2. Formatters/parsers automatically use these mappings\n * 3. Build-time validation ensures coverage\n *\n * @packageDocumentation\n */\n\nimport {\n FIELD_TYPE_MAPPING,\n DOMAIN_TO_SCHEMA_FIELD_TYPE,\n EFFECT_OPERATORS,\n COMPARISON_OPERATORS,\n LOGICAL_OPERATORS,\n ARITHMETIC_OPERATORS,\n UI_SLOTS,\n BINDING_PREFIXES,\n} from './types.js';\n\n// Re-export all mappings from types.ts for centralized access\nexport {\n FIELD_TYPE_MAPPING,\n DOMAIN_TO_SCHEMA_FIELD_TYPE,\n EFFECT_OPERATORS,\n COMPARISON_OPERATORS,\n LOGICAL_OPERATORS,\n ARITHMETIC_OPERATORS,\n UI_SLOTS,\n BINDING_PREFIXES,\n};\n\n// ============================================================================\n// Type Definitions for Registry\n// ============================================================================\n\n/**\n * Field type mapping entry with format/parse functions\n */\nexport interface FieldTypeMapping {\n /** OrbitalSchema type name */\n schemaType: string;\n /** Domain Language keyword(s) - can be array for aliases */\n domainKeywords: string[];\n /** Format schema field to domain text */\n format: (field: { type: string; values?: string[]; relation?: { entity: string } }) => string;\n /** Parse domain keyword to schema type */\n parse: (keyword: string) => string;\n}\n\n/**\n * Effect operator mapping entry\n */\nexport interface EffectMapping {\n /** S-Expression operator name */\n operator: string;\n /** Human-readable domain pattern templates */\n domainPatterns: string[];\n /** Description for documentation */\n description: string;\n}\n\n/**\n * Guard operator mapping entry\n */\nexport interface GuardMapping {\n /** S-Expression operator */\n operator: string;\n /** Human-readable domain patterns */\n domainPatterns: string[];\n /** Description */\n description: string;\n}\n\n// ============================================================================\n// Field Type Registry\n// ============================================================================\n\n/**\n * Complete field type registry with format/parse functions\n */\nexport const FIELD_TYPE_REGISTRY: Record<string, FieldTypeMapping> = {\n string: {\n schemaType: 'string',\n domainKeywords: ['text', 'long text'],\n format: () => 'text',\n parse: () => 'string',\n },\n number: {\n schemaType: 'number',\n domainKeywords: ['number', 'currency'],\n format: () => 'number',\n parse: () => 'number',\n },\n boolean: {\n schemaType: 'boolean',\n domainKeywords: ['yes/no', 'boolean'],\n format: () => 'yes/no',\n parse: () => 'boolean',\n },\n date: {\n schemaType: 'date',\n domainKeywords: ['date'],\n format: () => 'date',\n parse: () => 'date',\n },\n timestamp: {\n schemaType: 'timestamp',\n domainKeywords: ['timestamp'],\n format: () => 'timestamp',\n parse: () => 'timestamp',\n },\n datetime: {\n schemaType: 'datetime',\n domainKeywords: ['datetime'],\n format: () => 'datetime',\n parse: () => 'datetime',\n },\n array: {\n schemaType: 'array',\n domainKeywords: ['list', 'array'],\n format: () => 'list',\n parse: () => 'array',\n },\n object: {\n schemaType: 'object',\n domainKeywords: ['object'],\n format: () => 'object',\n parse: () => 'object',\n },\n enum: {\n schemaType: 'enum',\n domainKeywords: ['enum'],\n format: (field) => {\n if (field.values && field.values.length > 0) {\n return `enum [${field.values.join(', ')}]`;\n }\n return 'enum';\n },\n parse: () => 'enum',\n },\n relation: {\n schemaType: 'relation',\n domainKeywords: ['relation', 'belongs to', 'has many'],\n format: (field) => {\n if (field.relation?.entity) {\n return `belongs to ${field.relation.entity}`;\n }\n return 'relation';\n },\n parse: () => 'relation',\n },\n};\n\n// ============================================================================\n// Effect Registry (Human-Readable Domain Language)\n// ============================================================================\n\n/**\n * Effect operator registry with human-readable patterns\n */\nexport const EFFECT_REGISTRY: Record<string, EffectMapping> = {\n set: {\n operator: 'set',\n domainPatterns: [\n 'update {field} to {value}',\n 'set {field} to {value}',\n ],\n description: 'Update a field value',\n },\n emit: {\n operator: 'emit',\n domainPatterns: [\n 'emit {event}',\n 'emit {event} with {payload}',\n ],\n description: 'Emit an event to the event bus',\n },\n 'render-ui': {\n operator: 'render-ui',\n domainPatterns: [\n 'render {pattern} to {slot}',\n 'render {pattern} to {slot} for {entity}',\n 'render {pattern} to {slot} with {props}',\n 'render null to {slot}',\n ],\n description: 'Render a UI pattern to a slot',\n },\n navigate: {\n operator: 'navigate',\n domainPatterns: [\n 'navigate to {path}',\n 'go to {path}',\n ],\n description: 'Navigate to a route',\n },\n persist: {\n operator: 'persist',\n domainPatterns: [\n 'persist create {entity}',\n 'persist update {entity}',\n 'persist delete {entity}',\n 'save {entity}',\n ],\n description: 'Persist entity to database',\n },\n 'call-service': {\n operator: 'call-service',\n domainPatterns: [\n 'call {service}.{action}',\n 'call {service}.{action} with {params}',\n ],\n description: 'Call an external service',\n },\n spawn: {\n operator: 'spawn',\n domainPatterns: [\n 'spawn {entity}',\n 'spawn {entity} at {position}',\n 'spawn {entity} with {props}',\n ],\n description: 'Create a new runtime entity (games)',\n },\n despawn: {\n operator: 'despawn',\n domainPatterns: [\n 'despawn',\n 'despawn {entity}',\n 'remove {entity}',\n ],\n description: 'Remove a runtime entity (games)',\n },\n notify: {\n operator: 'notify',\n domainPatterns: [\n 'show {type} notification {message}',\n 'notify {message}',\n ],\n description: 'Show a notification',\n },\n do: {\n operator: 'do',\n domainPatterns: [\n 'then {effect1} then {effect2}',\n ],\n description: 'Execute multiple effects',\n },\n};\n\n// ============================================================================\n// Guard Registry (Human-Readable Domain Language)\n// ============================================================================\n\n/**\n * Guard operator registry with human-readable patterns\n */\nexport const GUARD_REGISTRY: Record<string, GuardMapping> = {\n // Comparison operators\n '=': {\n operator: '=',\n domainPatterns: [\n '{field} is {value}',\n '{field} equals {value}',\n ],\n description: 'Equality check',\n },\n '!=': {\n operator: '!=',\n domainPatterns: [\n '{field} is not {value}',\n '{field} != {value}',\n ],\n description: 'Inequality check',\n },\n '>': {\n operator: '>',\n domainPatterns: [\n '{field} > {value}',\n '{field} is greater than {value}',\n ],\n description: 'Greater than',\n },\n '<': {\n operator: '<',\n domainPatterns: [\n '{field} < {value}',\n '{field} is less than {value}',\n ],\n description: 'Less than',\n },\n '>=': {\n operator: '>=',\n domainPatterns: [\n '{field} >= {value}',\n '{field} is at least {value}',\n ],\n description: 'Greater than or equal',\n },\n '<=': {\n operator: '<=',\n domainPatterns: [\n '{field} <= {value}',\n '{field} is at most {value}',\n ],\n description: 'Less than or equal',\n },\n // Logical operators\n and: {\n operator: 'and',\n domainPatterns: [\n '{condition1} and {condition2}',\n ],\n description: 'Logical AND',\n },\n or: {\n operator: 'or',\n domainPatterns: [\n '{condition1} or {condition2}',\n ],\n description: 'Logical OR',\n },\n not: {\n operator: 'not',\n domainPatterns: [\n 'not {condition}',\n '{field} is not {value}',\n ],\n description: 'Logical NOT',\n },\n};\n\n// ============================================================================\n// Registry Utilities\n// ============================================================================\n\n/**\n * Get all registered field types\n */\nexport function getRegisteredFieldTypes(): string[] {\n return Object.keys(FIELD_TYPE_REGISTRY);\n}\n\n/**\n * Get all registered effect operators\n */\nexport function getRegisteredEffects(): string[] {\n return Object.keys(EFFECT_REGISTRY);\n}\n\n/**\n * Get all registered guard operators\n */\nexport function getRegisteredGuards(): string[] {\n return Object.keys(GUARD_REGISTRY);\n}\n\n/**\n * Check if a field type is registered\n */\nexport function isFieldTypeRegistered(type: string): boolean {\n return type in FIELD_TYPE_REGISTRY;\n}\n\n/**\n * Check if an effect operator is registered\n */\nexport function isEffectRegistered(operator: string): boolean {\n return operator in EFFECT_REGISTRY;\n}\n\n/**\n * Check if a guard operator is registered\n */\nexport function isGuardRegistered(operator: string): boolean {\n return operator in GUARD_REGISTRY;\n}\n\n/**\n * Get field type mapping\n */\nexport function getFieldTypeMapping(type: string): FieldTypeMapping | undefined {\n return FIELD_TYPE_REGISTRY[type];\n}\n\n/**\n * Get effect mapping\n */\nexport function getEffectMapping(operator: string): EffectMapping | undefined {\n return EFFECT_REGISTRY[operator];\n}\n\n/**\n * Get guard mapping\n */\nexport function getGuardMapping(operator: string): GuardMapping | undefined {\n return GUARD_REGISTRY[operator];\n}\n\n/**\n * Lookup domain keyword and return schema type\n */\nexport function domainKeywordToSchemaType(keyword: string): string | undefined {\n const normalizedKeyword = keyword.toLowerCase().trim();\n for (const mapping of Object.values(FIELD_TYPE_REGISTRY)) {\n if (mapping.domainKeywords.some(k => k.toLowerCase() === normalizedKeyword)) {\n return mapping.schemaType;\n }\n }\n return undefined;\n}\n\n/**\n * Lookup schema type and return primary domain keyword\n */\nexport function schemaTypeToDomainKeyword(type: string): string | undefined {\n const mapping = FIELD_TYPE_REGISTRY[type];\n return mapping?.domainKeywords[0];\n}\n\n// ============================================================================\n// Registry Statistics\n// ============================================================================\n\n/**\n * Get registry statistics for validation/documentation\n */\nexport function getRegistryStats(): {\n fieldTypes: number;\n effects: number;\n guards: number;\n uiSlots: number;\n} {\n return {\n fieldTypes: Object.keys(FIELD_TYPE_REGISTRY).length,\n effects: Object.keys(EFFECT_REGISTRY).length,\n guards: Object.keys(GUARD_REGISTRY).length,\n uiSlots: UI_SLOTS.length,\n };\n}\n","/**\n * Domain Language Reference — pure function that generates reference docs from the type registry.\n *\n * Separated from generate-docs.ts (CLI script) so it can be compiled and exported.\n */\n\nimport {\n FIELD_TYPE_REGISTRY,\n EFFECT_REGISTRY,\n GUARD_REGISTRY,\n UI_SLOTS,\n getRegistryStats,\n} from './registry.js';\n\n/**\n * Generate the complete Domain Language reference document as a string.\n */\nexport function generateDomainLanguageReference(): string {\n const lines: string[] = [];\n const stats = getRegistryStats();\n\n // Header\n lines.push('# Domain Language Reference');\n lines.push('');\n lines.push('> Auto-generated from type registry');\n lines.push(`> Last updated: ${new Date().toISOString().split('T')[0]}`);\n lines.push('');\n lines.push('This document describes the Domain Language syntax that maps to OrbitalSchema.');\n lines.push('Domain Language is a human-readable format that is converted to/from OrbitalSchema JSON.');\n lines.push('');\n\n // Table of Contents\n lines.push('## Table of Contents');\n lines.push('');\n lines.push('- [Field Types](#field-types)');\n lines.push('- [Effects](#effects)');\n lines.push('- [Guards](#guards)');\n lines.push('- [UI Slots](#ui-slots)');\n lines.push('- [Bindings](#bindings)');\n lines.push('- [Statistics](#statistics)');\n lines.push('');\n\n // Field Types\n lines.push('## Field Types');\n lines.push('');\n lines.push('| Schema Type | Domain Keywords | Description |');\n lines.push('|-------------|-----------------|-------------|');\n for (const [type, mapping] of Object.entries(FIELD_TYPE_REGISTRY)) {\n const keywords = mapping.domainKeywords.map(k => `\\`${k}\\``).join(', ');\n lines.push(`| \\`${type}\\` | ${keywords} | - |`);\n }\n lines.push('');\n\n // Effects\n lines.push('## Effects');\n lines.push('');\n lines.push('Effects are actions that occur during state transitions.');\n lines.push('In Domain Language, they are written as human-readable statements.');\n lines.push('The `domain:to-schema` converter translates them to S-Expression arrays.');\n lines.push('');\n lines.push('| Operator | Domain Patterns | Description |');\n lines.push('|----------|-----------------|-------------|');\n for (const [op, mapping] of Object.entries(EFFECT_REGISTRY)) {\n const patterns = mapping.domainPatterns.map(p => `\\`${p}\\``).join(', ');\n lines.push(`| \\`${op}\\` | ${patterns} | ${mapping.description} |`);\n }\n lines.push('');\n\n // Effect Examples\n lines.push('### Effect Examples');\n lines.push('');\n lines.push('```');\n lines.push('# Update a field');\n lines.push('then update status to \\'done\\'');\n lines.push('');\n lines.push('# Emit an event');\n lines.push('then emit TASK_COMPLETED');\n lines.push('then emit ORDER_PLACED with orderId');\n lines.push('');\n lines.push('# Render UI');\n lines.push('then render entity-table to main for Task');\n lines.push('then render form-section to modal for Order');\n lines.push('then render null to modal');\n lines.push('');\n lines.push('# Navigation');\n lines.push('then navigate to /tasks');\n lines.push('');\n lines.push('# Database');\n lines.push('then persist create Task');\n lines.push('then persist update Order');\n lines.push('then persist delete Item');\n lines.push('');\n lines.push('# External services');\n lines.push('then call stripe.charge with amount');\n lines.push('');\n lines.push('# Game effects');\n lines.push('then spawn Bullet at Player\\'s position');\n lines.push('then despawn');\n lines.push('');\n lines.push('# Notifications');\n lines.push('then show success notification \\'Saved!\\'');\n lines.push('```');\n lines.push('');\n\n // Guards\n lines.push('## Guards');\n lines.push('');\n lines.push('Guards are conditions that must be true for a transition to occur.');\n lines.push('');\n lines.push('| Operator | Domain Patterns | Description |');\n lines.push('|----------|-----------------|-------------|');\n for (const [op, mapping] of Object.entries(GUARD_REGISTRY)) {\n const patterns = mapping.domainPatterns.map(p => `\\`${p}\\``).join(', ');\n lines.push(`| \\`${op}\\` | ${patterns} | ${mapping.description} |`);\n }\n lines.push('');\n\n // Guard Examples\n lines.push('### Guard Examples');\n lines.push('');\n lines.push('```');\n lines.push('# Comparison guards');\n lines.push('if status is \\'active\\'');\n lines.push('if amount > 100');\n lines.push('if health is at least 0');\n lines.push('if priority <= 3');\n lines.push('');\n lines.push('# Compound guards');\n lines.push('if health >= 30 and health < 70');\n lines.push('if status is \\'active\\' or status is \\'pending\\'');\n lines.push('if status is not \\'deleted\\'');\n lines.push('');\n lines.push('# Payload checks');\n lines.push('if incoming amount > 0');\n lines.push('```');\n lines.push('');\n\n // UI Slots\n lines.push('## UI Slots');\n lines.push('');\n lines.push('UI slots are named regions where patterns can be rendered.');\n lines.push('');\n lines.push('| Slot | Description |');\n lines.push('|------|-------------|');\n const slotDescriptions: Record<string, string> = {\n 'main': 'Primary content area',\n 'sidebar': 'Side navigation or secondary content',\n 'modal': 'Modal dialog overlay',\n 'drawer': 'Slide-out panel',\n 'overlay': 'Full-screen overlay',\n 'center': 'Centered content area',\n 'toast': 'Toast notifications',\n 'hud-top': 'Top HUD (games)',\n 'hud-bottom': 'Bottom HUD (games)',\n 'floating': 'Floating elements',\n 'system': 'System components (invisible)',\n };\n for (const slot of UI_SLOTS) {\n const desc = slotDescriptions[slot] || '-';\n lines.push(`| \\`${slot}\\` | ${desc} |`);\n }\n lines.push('');\n\n // Bindings\n lines.push('## Bindings');\n lines.push('');\n lines.push('Bindings reference data in S-Expression context.');\n lines.push('In Domain Language, these are expressed more naturally.');\n lines.push('');\n lines.push('| S-Expression | Domain Language |');\n lines.push('|--------------|-----------------|');\n lines.push('| `@entity.field` | `field` or `Entity\\'s field` |');\n lines.push('| `@payload.field` | `incoming field` |');\n lines.push('| `@state` | `current state` |');\n lines.push('| `@now` | `now` |');\n lines.push('');\n\n // Statistics\n lines.push('## Statistics');\n lines.push('');\n lines.push('| Category | Count |');\n lines.push('|----------|-------|');\n lines.push(`| Field Types | ${stats.fieldTypes} |`);\n lines.push(`| Effects | ${stats.effects} |`);\n lines.push(`| Guards | ${stats.guards} |`);\n lines.push(`| UI Slots | ${stats.uiSlots} |`);\n lines.push('');\n\n return lines.join('\\n');\n}\n"]}