@gitgov/core 2.0.0 → 2.1.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/index.ts","../../src/record_types/common.types.ts","../../src/record_schemas/errors.ts","../../src/record_validations/errors.ts","../../src/record_schemas/generated/actor_record_schema.json","../../src/record_schemas/generated/agent_record_schema.json","../../src/record_schemas/generated/changelog_record_schema.json","../../src/record_schemas/generated/cycle_record_schema.json","../../src/record_schemas/generated/embedded_metadata_schema.json","../../src/record_schemas/generated/execution_record_schema.json","../../src/record_schemas/generated/feedback_record_schema.json","../../src/record_schemas/generated/task_record_schema.json","../../src/record_schemas/generated/workflow_record_schema.json","../../src/record_schemas/generated/index.ts","../../src/record_schemas/schema_cache.ts","../../src/crypto/checksum.ts","../../src/logger/index.ts","../../src/logger/logger.ts","../../src/crypto/signatures.ts","../../src/record_schemas/index.ts","../../src/record_validations/embedded_metadata_validator.ts","../../src/record_validations/agent_validator.ts","../../src/record_factories/agent_factory.ts","../../src/adapters/agent_adapter/agent_adapter.ts","../../src/adapters/backlog_adapter/index.ts","../../src/record_validations/task_validator.ts","../../src/utils/id_generator.ts","../../src/record_factories/task_factory.ts","../../src/record_validations/cycle_validator.ts","../../src/record_factories/cycle_factory.ts","../../src/adapters/identity_adapter/index.ts","../../src/record_validations/actor_validator.ts","../../src/record_factories/actor_factory.ts","../../src/adapters/identity_adapter/identity_adapter.ts","../../src/adapters/feedback_adapter/index.ts","../../src/record_validations/feedback_validator.ts","../../src/record_factories/feedback_factory.ts","../../src/adapters/feedback_adapter/feedback_adapter.ts","../../src/adapters/metrics_adapter/index.ts","../../src/adapters/metrics_adapter/metric_adapter.ts","../../src/session_manager/index.ts","../../src/session_manager/session_manager.ts","../../src/adapters/backlog_adapter/backlog_adapter.ts","../../src/adapters/changelog_adapter/index.ts","../../src/record_validations/changelog_validator.ts","../../src/record_factories/changelog_factory.ts","../../src/adapters/changelog_adapter/changelog_adapter.ts","../../src/adapters/execution_adapter/index.ts","../../src/record_validations/execution_validator.ts","../../src/record_factories/execution_factory.ts","../../src/adapters/execution_adapter/execution_adapter.ts","../../src/adapters/indexer_adapter/index.ts","../../src/utils/signature_utils.ts","../../src/crypto/index.ts","../../src/adapters/indexer_adapter/indexer_adapter.ts","../../src/adapters/project_adapter/index.ts","../../src/adapters/project_adapter/project_adapter.ts","../../src/adapters/workflow_adapter/index.ts","../../src/adapters/workflow_adapter/generated/kanban_workflow.json","../../src/adapters/workflow_adapter/generated/scrum_workflow.json","../../src/config_manager/index.ts","../../src/config_manager/config_manager.ts","../../src/record_factories/index.ts","../../src/record_validations/workflow_validator.ts","../../src/record_factories/workflow_factory.ts","../../src/record_factories/embedded_metadata_factory.ts","../../src/git/index.ts","../../src/git/errors.ts","../../src/key_provider/index.ts","../../src/key_provider/key_provider.ts","../../src/key_provider/fs/fs_key_provider.ts","../../src/key_provider/memory/env_key_provider.ts","../../src/key_provider/memory/mock_key_provider.ts","../../src/file_lister/index.ts","../../src/file_lister/file_lister.errors.ts","../../src/file_lister/fs/fs_file_lister.ts","../../src/file_lister/memory/memory_file_lister.ts","../../src/lint/index.ts","../../src/record_types/type_guards.ts","../../src/lint/lint.ts","../../src/project_initializer/index.ts","../../src/record_store/index.ts","../../src/sync_state/index.ts","../../src/sync_state/pull_scheduler.ts","../../src/sync_state/sync_state.errors.ts","../../src/record_validations/index.ts","../../src/record_types/index.ts","../../src/event_bus/index.ts","../../src/event_bus/event_bus.ts","../../src/diagram_generator/index.ts","../../src/diagram_generator/graph_validator.ts","../../src/diagram_generator/relationship_analyzer.ts","../../src/diagram_generator/mermaid_renderer.ts","../../src/diagram_generator/diagram_generator.ts","../../src/finding_detector/index.ts","../../src/finding_detector/rules/regex_rules.ts","../../src/finding_detector/detectors/regex_detector.ts","../../src/finding_detector/detectors/heuristic_detector.ts","../../src/finding_detector/detectors/http_llm_detector.ts","../../src/finding_detector/finding_detector.ts","../../src/source_auditor/index.ts","../../src/source_auditor/scope_selector.ts","../../src/source_auditor/scoring_engine.ts","../../src/source_auditor/source_auditor.ts","../../src/source_auditor/waiver_reader.ts","../../src/source_auditor/waiver_writer.ts","../../src/agent_runner/index.ts","../../src/agent_runner/agent_runner.errors.ts"],"names":["logger","createHash","path","fs2","path3","fs","MAX_SNIPPET_LENGTH","generateFingerprint","truncateSnippet","getLineNumber","extractSnippet","randomUUID"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAA,gBAAA,GAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;AC6EO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EACrC,WAAA,CAAY,SAAiC,IAAA,EAAc;AACzD,IAAA,KAAA,CAAM,OAAO,CAAA;AAD8B,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAE3C,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAAA,EAC/B;AACF,CAAA;;;ACpEO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EAC/C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF,CAAA;AAKO,IAAM,uBAAA,GAAN,cAAsC,WAAA,CAAY;AAAA,EACvD,WAAA,CACE,YACgB,MAAA,EAKhB;AACA,IAAA,MAAM,YAAA,GAAe,MAAA,CAClB,GAAA,CAAI,CAAA,GAAA,KAAO,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,EAAA,EAAK,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA,CACzC,KAAK,IAAI,CAAA;AAEZ,IAAA,KAAA;AAAA,MACE,CAAA,EAAG,UAAU,CAAA,oBAAA,EAAuB,YAAY,CAAA,CAAA;AAAA,MAChD;AAAA,KACF;AAbgB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAclB;AACF,CAAA;;;AC9BO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EAC/C,WAAA,CAAY,UAAkB,6CAAA,EAA+C;AAC3E,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF,CAAA;AAKO,IAAM,0BAAA,GAAN,cAAyC,KAAA,CAAM;AAAA,EACpD,WAAA,CAAY,UAAkB,gCAAA,EAAkC;AAC9D,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AAAA,EACd;AACF,CAAA;;;AC3BA,IAAA,2BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,0BAAA;AAAA,EACP,KAAA,EAAS,aAAA;AAAA,EACT,WAAA,EAAe,oEAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,+BAAA;AAAA,MACX,WAAA,EAAe,kDAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,cAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,SAAA,EAAa;AAAA,MACX,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW;AAAA,OACb;AAAA,MACA,QAAA,EAAY,CAAA;AAAA,MACZ,WAAA,EAAe,IAAA;AAAA,MACf,WAAA,EAAe,2GAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,sBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,UACE;AAAA;AACF;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW,QAAA;AAAA,MACX,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,YAAA,EAAgB;AAAA,MACd,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,+BAAA;AAAA,MACX,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,2DAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,OAAA,EAAW,OAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AAEJ,CAAA;;;AC5FA,IAAA,2BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,0BAAA;AAAA,EACP,KAAA,EAAS,aAAA;AAAA,EACT,WAAA,EAAe,mDAAA;AAAA,EACf,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,qBAAA;AAAA,MACX,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW;AAAA,KACb;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,OAAA;AAAA,MACR,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe,2RAAA;AAAA,MACf,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,YACN,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,QAAA;AAAA,cACA,SAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,WAAA,EAAe;AAAA;AACjB,SACF;AAAA,QACA,QAAA,EAAY;AAAA,UACV;AAAA,SACF;AAAA,QACA,oBAAA,EAAwB;AAAA;AAC1B,KACF;AAAA,IACA,sBAAA,EAA0B;AAAA,MACxB,IAAA,EAAQ,OAAA;AAAA,MACR,SAAW,EAAC;AAAA,MACZ,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,WAAA,EAAe;AAAA;AACjB,KACF;AAAA,IACA,0BAAA,EAA8B;AAAA,MAC5B,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,mWAAA;AAAA,MACf,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP;AAAA,UACE,QAAA,EAAY;AAAA,YACV;AAAA,WACF;AAAA,UACA,oBAAA,EAAwB,KAAA;AAAA,UACxB,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,aACX;AAAA,YACA,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,QAAA,EAAY;AAAA,cACV,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA;AACjB;AACF,SACF;AAAA,QACA;AAAA,UACE,QAAA,EAAY;AAAA,YACV,MAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,oBAAA,EAAwB,KAAA;AAAA,UACxB,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,aACX;AAAA,YACA,GAAA,EAAO;AAAA,cACL,IAAA,EAAQ,QAAA;AAAA,cACR,MAAA,EAAU,KAAA;AAAA,cACV,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,MAAA,EAAU;AAAA,cACR,IAAA,EAAQ,QAAA;AAAA,cACR,IAAA,EAAQ;AAAA,gBACN,MAAA;AAAA,gBACA,KAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,OAAA,EAAW;AAAA,aACb;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe,+CAAA;AAAA,cACf,oBAAA,EAAwB,IAAA;AAAA,cACxB,UAAA,EAAc;AAAA,gBACZ,IAAA,EAAQ;AAAA,kBACN,IAAA,EAAQ,QAAA;AAAA,kBACR,IAAA,EAAQ;AAAA,oBACN,QAAA;AAAA,oBACA,OAAA;AAAA,oBACA,SAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBACA,WAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ,QAAA;AAAA,kBACR,WAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,KAAA,EAAS;AAAA,kBACP,IAAA,EAAQ,QAAA;AAAA,kBACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,QAAA,EAAY;AAAA,YACV,MAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,oBAAA,EAAwB,KAAA;AAAA,UACxB,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,aACX;AAAA,YACA,GAAA,EAAO;AAAA,cACL,IAAA,EAAQ,QAAA;AAAA,cACR,MAAA,EAAU,KAAA;AAAA,cACV,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe,6CAAA;AAAA,cACf,oBAAA,EAAwB,IAAA;AAAA,cACxB,UAAA,EAAc;AAAA,gBACZ,IAAA,EAAQ;AAAA,kBACN,IAAA,EAAQ,QAAA;AAAA,kBACR,IAAA,EAAQ;AAAA,oBACN,QAAA;AAAA,oBACA,OAAA;AAAA,oBACA,SAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBACA,WAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ,QAAA;AAAA,kBACR,WAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,KAAA,EAAS;AAAA,kBACP,IAAA,EAAQ,QAAA;AAAA,kBACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,QAAA,EAAY;AAAA,YACV;AAAA,WACF;AAAA,UACA,oBAAA,EAAwB,KAAA;AAAA,UACxB,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,aACX;AAAA,YACA,QAAA,EAAY;AAAA,cACV,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,MAAA,EAAU;AAAA,cACR,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,cAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAW,YAAA;AAAA,QACX,UAAA,EAAc,iCAAA;AAAA,QACd,QAAA,EAAY;AAAA,OACd;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,0BAAA;AAAA,QACX,UAAA,EAAc;AAAA,OAChB;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,sBAAA,EAA0B;AAAA,QACxB;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO,iDAAA;AAAA,QACP,MAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,SAAA,EAAa,WAAA;AAAA,QACb,OAAA,EAAW,OAAA;AAAA,QACX,KAAA,EAAS,aAAA;AAAA,QACT,UAAA,EAAc;AAAA,UACZ,QAAA,EAAY,KAAA;AAAA,UACZ,OAAA,EAAW,WAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,mBAAA,EAAuB,IAAA;AAAA,QACvB,QAAA,EAAY;AAAA,OACd;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAS;AAAA;AACX,OACF;AAAA,MACA,sBAAA,EAA0B;AAAA,QACxB;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO,wCAAA;AAAA,QACP,MAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,SAAA,EAAa,YAAA;AAAA,QACb,OAAA,EAAW,OAAA;AAAA,QACX,KAAA,EAAS,YAAA;AAAA,QACT,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW,QAAA;AAAA,UACX,KAAA,EAAS,kCAAA;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,UAAA,EAAc;AAAA,OAChB;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAS;AAAA;AACX;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO,2BAAA;AAAA,QACP,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,GAAA,EAAO,QAAA;AAAA,QACP,IAAA,EAAQ,aAAA;AAAA,QACR,aAAA,EAAiB;AAAA,UACf,QAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,sBAAA,EAA0B;AAAA,QACxB,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAS;AAAA;AACX;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO,oCAAA;AAAA,QACP,MAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ,QAAA;AAAA,UACR,UAAA,EAAc;AAAA;AAChB,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,QAAA,EAAY,OAAA;AAAA,QACZ,mBAAA,EAAuB;AAAA,UACrB,IAAA;AAAA,UACA,IAAA;AAAA,UACA,IAAA;AAAA,UACA,IAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,qBAAA,EAAyB;AAAA,OAC3B;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAY,KAAA;AAAA,QACZ,MAAA,EAAU;AAAA,UACR,QAAA,EAAY,iCAAA;AAAA,UACZ,OAAA,EAAW,eAAA;AAAA,UACX,YAAA,EAAgB;AAAA,YACd,iBAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA;AACF;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,2BAAA;AAAA,QACX,YAAA,EAAgB;AAAA,OAClB;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO;AAAA,OACT;AAAA,MACA,sBAAA,EAA0B;AAAA,QACxB;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAW,YAAA;AAAA,QACX,UAAA,EAAc,wCAAA;AAAA,QACd,QAAA,EAAY;AAAA,OACd;AAAA,MACA,0BAAA,EAA8B;AAAA,QAC5B,KAAA,EAAS;AAAA,UACP,eAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,YAAA;AAAA,UACA,yBAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,sBAAA,EAA0B;AAAA,QACxB,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAS,qBAAA;AAAA,UACT,MAAA,EAAU;AAAA;AACZ;AACF;AACF;AAEJ,CAAA;;;AChcA,IAAA,+BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,8BAAA;AAAA,EACP,KAAA,EAAS,iBAAA;AAAA,EACT,WAAA,EAAe,iFAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,qCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,2CAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,+CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe,oCAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,2CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,WAAA,EAAe;AAAA,MACb,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,YAAA,EAAgB;AAAA,MACd,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW;AAAA,OACb;AAAA,MACA,QAAA,EAAY,CAAA;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,CAAA;AAAA,MACX,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,aAAA,EAAiB;AAAA,MACf,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW;AAAA,OACb;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,iBAAA,EAAqB;AAAA,MACnB,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW;AAAA,OACb;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,sEAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,QAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW;AAAA,OACb;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,+CAAA;AAAA,MACN,KAAA,EAAS,2CAAA;AAAA,MACT,WAAA,EAAe,+NAAA;AAAA,MACf,YAAA,EAAgB;AAAA,QACd,gCAAA;AAAA,QACA,yCAAA;AAAA,QACA,sCAAA;AAAA,QACA,gCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe,UAAA;AAAA,MACf,aAAA,EAAiB;AAAA,QACf;AAAA,OACF;AAAA,MACA,iBAAA,EAAqB;AAAA,QACnB,yCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW,QAAA;AAAA,MACX,IAAA,EAAQ;AAAA,QACN,cAAA;AAAA,QACA,UAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT,WAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,QACP,qBAAA;AAAA,QACA,sBAAA;AAAA,QACA,mCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,6CAAA;AAAA,MACN,KAAA,EAAS,sCAAA;AAAA,MACT,WAAA,EAAe,mKAAA;AAAA,MACf,YAAA,EAAgB;AAAA,QACd,qCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe,UAAA;AAAA,MACf,OAAA,EAAW,QAAA;AAAA,MACX,IAAA,EAAQ;AAAA,QACN,QAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA;AACX;AAEJ,CAAA;;;AClLA,IAAA,2BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,0BAAA;AAAA,EACP,KAAA,EAAS,aAAA;AAAA,EACT,WAAA,EAAe,iEAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,iCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,qGAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,4CAAA;AAAA,QACA,iCAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe,gFAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,6BAAA;AAAA,QACA,4BAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,UAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW,gCAAA;AAAA,QACX,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe,kLAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,2CAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,IACA,aAAA,EAAiB;AAAA,MACf,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW,iCAAA;AAAA,QACX,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe,+MAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,4BAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW,4BAAA;AAAA,QACX,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe,sGAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,YAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,UACE,WAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,UACE,cAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,4CAAA;AAAA,MACN,KAAA,EAAS,6BAAA;AAAA,MACT,MAAA,EAAU,QAAA;AAAA,MACV,OAAA,EAAW;AAAA,QACT,2CAAA;AAAA,QACA,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,WAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,iCAAA;AAAA,MACN,KAAA,EAAS,4BAAA;AAAA,MACT,MAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAW;AAAA,QACT,oCAAA;AAAA,QACA,oCAAA;AAAA,QACA,mCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,cAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,iCAAA;AAAA,MACN,KAAA,EAAS,0BAAA;AAAA,MACT,MAAA,EAAU,QAAA;AAAA,MACV,aAAA,EAAiB;AAAA,QACf,4CAAA;AAAA,QACA,iCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,YAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA;AACX;AAEJ,CAAA;;;AC/JA,IAAA,gCAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,+BAAA;AAAA,EACP,KAAA,EAAS,wBAAA;AAAA,EACT,WAAA,EAAe,0EAAA;AAAA,EACf,IAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAc;AAAA,IACZ,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA;AAAA,YACA,OAAA;AAAA,YACA,MAAA;AAAA,YACA,WAAA;AAAA,YACA,WAAA;AAAA,YACA,UAAA;AAAA,YACA,OAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,cAAA,EAAkB;AAAA,UAChB,IAAA,EAAQ,QAAA;AAAA,UACR,OAAA,EAAW,mBAAA;AAAA,UACX,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,eAAA,EAAmB;AAAA,UACjB,IAAA,EAAQ,QAAA;AAAA,UACR,OAAA,EAAW,mBAAA;AAAA,UACX,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,CAAA;AAAA,UACZ,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,KAAA,EAAS;AAAA,gBACP,IAAA,EAAQ,QAAA;AAAA,gBACR,OAAA,EAAW,+BAAA;AAAA,gBACX,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,IAAA,EAAQ;AAAA,gBACN,IAAA,EAAQ,QAAA;AAAA,gBACR,OAAA,EAAW,+BAAA;AAAA,gBACX,SAAA,EAAa,CAAA;AAAA,gBACb,SAAA,EAAa,EAAA;AAAA,gBACb,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,KAAA,EAAS;AAAA,gBACP,IAAA,EAAQ,QAAA;AAAA,gBACR,SAAA,EAAa,CAAA;AAAA,gBACb,SAAA,EAAa,GAAA;AAAA,gBACb,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,SAAA,EAAa;AAAA,gBACX,IAAA,EAAQ,QAAA;AAAA,gBACR,OAAA,EAAW,uBAAA;AAAA,gBACX,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,SAAA,EAAa;AAAA,gBACX,IAAA,EAAQ,SAAA;AAAA,gBACR,WAAA,EAAe;AAAA;AACjB,aACF;AAAA,YACA,QAAA,EAAY;AAAA,cACV,OAAA;AAAA,cACA,MAAA;AAAA,cACA,OAAA;AAAA,cACA,WAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,oBAAA,EAAwB;AAAA,WAC1B;AAAA,UACA,WAAA,EAAe;AAAA;AACjB,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,SAAA;AAAA,QACA,MAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV,QAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,oBAAA,EAAwB,KAAA;AAAA,EACxB,KAAA,EAAS;AAAA,IACP;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAY;AAAA,cACV,WAAA;AAAA,cACA;AAAA;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA;AACV,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,MAAA,EAAU;AAAA,QACR,OAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAQ,MAAA;AAAA,QACR,eAAA,EAAmB,iBAAA;AAAA,QACnB,UAAA,EAAc;AAAA,UACZ;AAAA,YACE,KAAA,EAAS,gBAAA;AAAA,YACT,IAAA,EAAQ,QAAA;AAAA,YACR,KAAA,EAAS,oDAAA;AAAA,YACT,SAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAa;AAAA;AACf;AACF,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT,EAAA,EAAM,kCAAA;AAAA,QACN,MAAA,EAAU,SAAA;AAAA,QACV,QAAA,EAAY,MAAA;AAAA,QACZ,WAAA,EAAe,yCAAA;AAAA,QACf,IAAA,EAAQ;AAAA,UACN,UAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAU;AAAA,QACR,OAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAQ,WAAA;AAAA,QACR,eAAA,EAAmB,iBAAA;AAAA,QACnB,UAAA,EAAc;AAAA,UACZ;AAAA,YACE,KAAA,EAAS,cAAA;AAAA,YACT,IAAA,EAAQ,QAAA;AAAA,YACR,KAAA,EAAS,2DAAA;AAAA,YACT,SAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,KAAA,EAAS,cAAA;AAAA,YACT,IAAA,EAAQ,UAAA;AAAA,YACR,KAAA,EAAS,oCAAA;AAAA,YACT,SAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAa;AAAA;AACf;AACF,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT,EAAA,EAAM,iCAAA;AAAA,QACN,MAAA,EAAU,iCAAA;AAAA,QACV,IAAA,EAAQ,UAAA;AAAA,QACR,KAAA,EAAS,4BAAA;AAAA,QACT,MAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAU;AAAA,QACR,OAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAQ,OAAA;AAAA,QACR,eAAA,EAAmB,iBAAA;AAAA,QACnB,UAAA,EAAc;AAAA,UACZ;AAAA,YACE,KAAA,EAAS,aAAA;AAAA,YACT,IAAA,EAAQ,QAAA;AAAA,YACR,KAAA,EAAS,iCAAA;AAAA,YACT,SAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,KAAA,EAAS,YAAA;AAAA,YACT,IAAA,EAAQ,SAAA;AAAA,YACR,KAAA,EAAS,mDAAA;AAAA,YACT,SAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAa;AAAA;AACf;AACF,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT,EAAA,EAAM,qBAAA;AAAA,QACN,IAAA,EAAQ,OAAA;AAAA,QACR,WAAA,EAAe,eAAA;AAAA,QACf,SAAA,EAAa,KAAA;AAAA,QACb,KAAA,EAAS;AAAA,UACP;AAAA;AACF;AACF;AACF;AAEJ,CAAA;;;AC7XA,IAAA,+BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,8BAAA;AAAA,EACP,KAAA,EAAS,iBAAA;AAAA,EACT,WAAA,EAAe,yEAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,gCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,kHAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,kCAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,gCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,UAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe,gDAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe,8DAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,yBAAA;AAAA,QACA,sBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,oBAAA,EAAwB,IAAA;AAAA,MACxB,WAAA,EAAe,yYAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,QAAA,EAAY;AAAA,YACV;AAAA,cACE,IAAA,EAAQ,KAAA;AAAA,cACR,IAAA,EAAQ,aAAA;AAAA,cACR,IAAA,EAAQ;AAAA;AACV,WACF;AAAA,UACA,YAAA,EAAgB;AAAA,SAClB;AAAA,QACA;AAAA,UACE,OAAA,EAAW;AAAA,YACT,WAAA,EAAe,IAAA;AAAA,YACf,SAAA,EAAa;AAAA;AACf;AACF;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,kCAAA;AAAA,MACN,MAAA,EAAU,+BAAA;AAAA,MACV,IAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAS,yBAAA;AAAA,MACT,MAAA,EAAU,gGAAA;AAAA,MACV,KAAA,EAAS,yGAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ,gBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,mCAAA;AAAA,MACN,MAAA,EAAU,+BAAA;AAAA,MACV,IAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAS,sBAAA;AAAA,MACT,MAAA,EAAU,iFAAA;AAAA,MACV,KAAA,EAAS,oJAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,2CAAA;AAAA,MACN,MAAA,EAAU,sCAAA;AAAA,MACV,IAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAS,kCAAA;AAAA,MACT,MAAA,EAAU,2GAAA;AAAA,MACV,KAAA,EAAS,+IAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,iCAAA;AAAA,MACN,MAAA,EAAU,sCAAA;AAAA,MACV,IAAA,EAAQ,YAAA;AAAA,MACR,KAAA,EAAS,gCAAA;AAAA,MACT,MAAA,EAAU,wIAAA;AAAA,MACV,KAAA,EAAS,uHAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ,QAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,yCAAA;AAAA,MACN,MAAA,EAAU,sCAAA;AAAA,MACV,IAAA,EAAQ,MAAA;AAAA,MACR,KAAA,EAAS,gDAAA;AAAA,MACT,MAAA,EAAU,oGAAA;AAAA,MACV,KAAA,EAAS,qOAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ,WAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,qCAAA;AAAA,MACN,MAAA,EAAU,+BAAA;AAAA,MACV,IAAA,EAAQ,YAAA;AAAA,MACR,KAAA,EAAS,2CAAA;AAAA,MACT,MAAA,EAAU,oHAAA;AAAA,MACV,KAAA,EAAS,yLAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,mCAAA;AAAA,MACN,MAAA,EAAU,kCAAA;AAAA,MACV,IAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAS,gCAAA;AAAA,MACT,MAAA,EAAU,4HAAA;AAAA,MACV,KAAA,EAAS,iFAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ,uBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,YAAA,EAAgB,GAAA;AAAA,QAChB,YAAA,EAAgB,KAAA;AAAA,QAChB,WAAA,EAAe,IAAA;AAAA,QACf,QAAA,EAAY;AAAA,UACV;AAAA,YACE,EAAA,EAAM,SAAA;AAAA,YACN,QAAA,EAAY,UAAA;AAAA,YACZ,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ,CAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,EAAA,EAAM,SAAA;AAAA,YACN,QAAA,EAAY,UAAA;AAAA,YACZ,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ,CAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,EAAA,EAAM,SAAA;AAAA,YACN,QAAA,EAAY,UAAA;AAAA,YACZ,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ,CAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT,QAAA,EAAY,CAAA;AAAA,UACZ,IAAA,EAAQ,CAAA;AAAA,UACR,MAAA,EAAU,CAAA;AAAA,UACV,GAAA,EAAO;AAAA;AACT;AACF;AACF;AAEJ,CAAA;;;AC9NA,IAAA,8BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,6BAAA;AAAA,EACP,KAAA,EAAS,gBAAA;AAAA,EACT,WAAA,EAAe,4EAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,oCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,0CAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,uCAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,MAAA;AAAA,QACA,WAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe,8TAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,mCAAA;AAAA,QACA,8BAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,UAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe,qCAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,MAAA;AAAA,QACA,cAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,+BAAA;AAAA,MACX,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe,6GAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,aAAA;AAAA,QACA,qBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,kBAAA,EAAsB;AAAA,MACpB,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,oCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,mFAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA;AACF,KACF;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,oBAAA,EAAwB,IAAA;AAAA,MACxB,WAAA,EAAe,uPAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,WAAA,EAAe,cAAA;AAAA,UACf,MAAA,EAAU,SAAA;AAAA,UACV,IAAA,EAAQ,aAAA;AAAA,UACR,IAAA,EAAQ,EAAA;AAAA,UACR,SAAA,EAAa;AAAA;AACf;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,uCAAA;AAAA,MACN,UAAA,EAAc,WAAA;AAAA,MACd,QAAA,EAAY,8BAAA;AAAA,MACZ,IAAA,EAAQ,UAAA;AAAA,MACR,MAAA,EAAU,MAAA;AAAA,MACV,OAAA,EAAW;AAAA,KACb;AAAA,IACA;AAAA,MACE,EAAA,EAAM,oCAAA;AAAA,MACN,UAAA,EAAc,UAAA;AAAA,MACd,QAAA,EAAY,uCAAA;AAAA,MACZ,IAAA,EAAQ,eAAA;AAAA,MACR,MAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAW,oKAAA;AAAA,MACX,kBAAA,EAAsB;AAAA,KACxB;AAAA,IACA;AAAA,MACE,EAAA,EAAM,sCAAA;AAAA,MACN,UAAA,EAAc,MAAA;AAAA,MACd,QAAA,EAAY,mCAAA;AAAA,MACZ,IAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAU,MAAA;AAAA,MACV,OAAA,EAAW,sGAAA;AAAA,MACX,QAAA,EAAY;AAAA,KACd;AAAA,IACA;AAAA,MACE,EAAA,EAAM,4CAAA;AAAA,MACN,UAAA,EAAc,MAAA;AAAA,MACd,QAAA,EAAY,mCAAA;AAAA,MACZ,IAAA,EAAQ,UAAA;AAAA,MACR,MAAA,EAAU,MAAA;AAAA,MACV,OAAA,EAAW;AAAA;AACb;AAEJ,CAAA;;;ACxJA,IAAA,0BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,yBAAA;AAAA,EACP,KAAA,EAAS,YAAA;AAAA,EACT,WAAA,EAAe,kEAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,gCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,mGAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,kCAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa,CAAA;AAAA,QACb,OAAA,EAAW,iCAAA;AAAA,QACX,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,KAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa,CAAA;AAAA,QACb,OAAA,EAAW;AAAA,OACb;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa,CAAA;AAAA,QACb,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,sCAAA;AAAA,MACN,KAAA,EAAS,yCAAA;AAAA,MACT,MAAA,EAAU,OAAA;AAAA,MACV,QAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAe,6JAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,gBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAc;AAAA,QACZ;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,yCAAA;AAAA,MACN,KAAA,EAAS,oCAAA;AAAA,MACT,MAAA,EAAU,QAAA;AAAA,MACV,QAAA,EAAY,UAAA;AAAA,MACZ,WAAA,EAAe,yJAAA;AAAA,MACf,UAAY,EAAC;AAAA,MACb,IAAA,EAAQ;AAAA,QACN,cAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAc;AAAA,QACZ,0DAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,wCAAA;AAAA,MACN,KAAA,EAAS,6CAAA;AAAA,MACT,MAAA,EAAU,MAAA;AAAA,MACV,QAAA,EAAY,QAAA;AAAA,MACZ,WAAA,EAAe,+IAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,kBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAc;AAAA,QACZ,QAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,4CAAA;AAAA,MACN,KAAA,EAAS,wCAAA;AAAA,MACT,MAAA,EAAU,OAAA;AAAA,MACV,QAAA,EAAY,KAAA;AAAA,MACZ,WAAA,EAAe,wKAAA;AAAA,MACf,UAAY,EAAC;AAAA,MACb,IAAA,EAAQ;AAAA,QACN,mBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAc;AAAC;AACjB;AAEJ,CAAA;;;AChLA,IAAA,8BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,sBAAA;AAAA,EACP,KAAA,EAAS,gBAAA;AAAA,EACT,WAAA,EAAe,0HAAA;AAAA,EACf,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,SAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,oBAAA,EAAwB,KAAA;AAAA,EACxB,UAAA,EAAc;AAAA,IACZ,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,sBAAA;AAAA,MACX,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,iBAAA,EAAqB;AAAA,MACnB,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,wDAAA;AAAA,MACf,oBAAA,EAAwB;AAAA,QACtB,IAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAY;AAAA,UACV,MAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,oBAAA,EAAwB,KAAA;AAAA,QACxB,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,YACN,IAAA,EAAQ,OAAA;AAAA,YACR,KAAA,EAAS;AAAA,cACP,IAAA,EAAQ,QAAA;AAAA,cACR,OAAA,EAAW;AAAA,aACb;AAAA,YACA,QAAA,EAAY,CAAA;AAAA,YACZ,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,QAAA,EAAY;AAAA,YACV,IAAA,EAAQ,QAAA;AAAA,YACR,oBAAA,EAAwB,KAAA;AAAA,YACxB,UAAA,EAAc;AAAA,cACZ,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ,QAAA;AAAA,gBACR,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,KAAA,EAAS;AAAA,gBACP,IAAA,EAAQ,QAAA;AAAA,gBACR,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,UAAA,EAAc;AAAA,gBACZ,IAAA,EAAQ,QAAA;AAAA,gBACR,WAAA,EAAe,sFAAA;AAAA,gBACf,oBAAA,EAAwB;AAAA,kBACtB,IAAA,EAAQ,QAAA;AAAA,kBACR,QAAA,EAAY;AAAA,oBACV,MAAA;AAAA,oBACA,kBAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBACA,oBAAA,EAAwB,KAAA;AAAA,kBACxB,UAAA,EAAc;AAAA,oBACZ,IAAA,EAAQ;AAAA,sBACN,IAAA,EAAQ,QAAA;AAAA,sBACR,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,gBAAA,EAAoB;AAAA,sBAClB,IAAA,EAAQ,OAAA;AAAA,sBACR,KAAA,EAAS;AAAA,wBACP,IAAA,EAAQ;AAAA,uBACV;AAAA,sBACA,QAAA,EAAY,CAAA;AAAA,sBACZ,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,aAAA,EAAiB;AAAA,sBACf,IAAA,EAAQ,SAAA;AAAA,sBACR,OAAA,EAAW,CAAA;AAAA,sBACX,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,UAAA,EAAc;AAAA,sBACZ,IAAA,EAAQ,QAAA;AAAA,sBACR,IAAA,EAAQ;AAAA,wBACN,OAAA;AAAA,wBACA;AAAA,uBACF;AAAA,sBACA,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,eAAA,EAAmB;AAAA,sBACjB,IAAA,EAAQ,OAAA;AAAA,sBACR,KAAA,EAAS;AAAA,wBACP,IAAA,EAAQ;AAAA,uBACV;AAAA,sBACA,WAAA,EAAe;AAAA;AACjB;AACF;AACF,eACF;AAAA,cACA,YAAA,EAAgB;AAAA,gBACd,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,IAAA,EAAQ;AAAA,iBACV;AAAA,gBACA,WAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF;AACF,KACF;AAAA,IACA,YAAA,EAAgB;AAAA,MACd,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,yCAAA;AAAA,MACf,oBAAA,EAAwB;AAAA,QACtB,IAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAY;AAAA,UACV,aAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,oBAAA,EAAwB,KAAA;AAAA,QACxB,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,QAAA;AAAA,YACR,SAAA,EAAa,GAAA;AAAA,YACb,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,qBAAA;AAAA,cACA,iBAAA;AAAA,cACA,iBAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF,KACF;AAAA,IACA,YAAA,EAAgB;AAAA,MACd,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,yDAAA;AAAA,MACf,oBAAA,EAAwB;AAAA,QACtB,IAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAY;AAAA,UACV;AAAA,SACF;AAAA,QACA,oBAAA,EAAwB,KAAA;AAAA,QACxB,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe,0DAAA;AAAA,YACf,oBAAA,EAAwB;AAAA,cACtB,IAAA,EAAQ,OAAA;AAAA,cACR,KAAA,EAAS;AAAA,gBACP,IAAA,EAAQ,QAAA;AAAA,gBACR,OAAA,EAAW;AAAA,eACb;AAAA,cACA,QAAA,EAAY;AAAA;AACd,WACF;AAAA,UACA,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF,KACF;AAAA,IACA,iBAAA,EAAqB;AAAA,MACnB,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,yDAAA;AAAA,MACf,oBAAA,EAAwB,KAAA;AAAA,MACxB,UAAA,EAAc;AAAA,QACZ,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,SAAA,EAAa,GAAA;AAAA,UACb,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,eAAA,EAAmB;AAAA,UACjB,IAAA,EAAQ,OAAA;AAAA,UACR,WAAA,EAAe,wHAAA;AAAA,UACf,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAY;AAAA,cACV;AAAA,aACF;AAAA,YACA,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,QAAA,EAAY;AAAA,kBACV;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,QAAA,EAAY;AAAA,kBACV;AAAA;AACF;AACF,aACF;AAAA,YACA,oBAAA,EAAwB,KAAA;AAAA,YACxB,UAAA,EAAc;AAAA,cACZ,EAAA,EAAM;AAAA,gBACJ,IAAA,EAAQ,QAAA;AAAA,gBACR,OAAA,EAAW,qBAAA;AAAA,gBACX,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,cAAA,EAAkB;AAAA,gBAChB,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,IAAA,EAAQ,QAAA;AAAA,kBACR,OAAA,EAAW;AAAA,iBACb;AAAA,gBACA,QAAA,EAAY,CAAA;AAAA,gBACZ,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,QAAA,EAAY;AAAA,gBACV,IAAA,EAAQ,OAAA;AAAA,gBACR,WAAA,EAAe,mDAAA;AAAA,gBACf,KAAA,EAAS;AAAA,kBACP,IAAA,EAAQ,QAAA;AAAA,kBACR,QAAA,EAAY;AAAA,oBACV,OAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBACA,oBAAA,EAAwB,KAAA;AAAA,kBACxB,UAAA,EAAc;AAAA,oBACZ,KAAA,EAAS;AAAA,sBACP,IAAA,EAAQ,QAAA;AAAA,sBACR,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,MAAA,EAAU;AAAA,sBACR,IAAA,EAAQ,QAAA;AAAA,sBACR,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,IAAA,EAAQ;AAAA,sBACN,IAAA,EAAQ,QAAA;AAAA,sBACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF;AACF;AACF;AACF;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,OAAA,EAAW,OAAA;AAAA,MACX,IAAA,EAAQ,eAAA;AAAA,MACR,WAAA,EAAe,gCAAA;AAAA,MACf,iBAAA,EAAqB;AAAA,QACnB,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW;AAAA;AACb,SACF;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW,qBAAA;AAAA,YACX,UAAA,EAAc;AAAA,cACZ,WAAA,EAAe;AAAA,gBACb,IAAA,EAAQ,UAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,KAAA,EAAS;AAAA;AACX,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW;AAAA;AACb;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,OAAA,EAAW,OAAA;AAAA,MACX,IAAA,EAAQ,mCAAA;AAAA,MACR,WAAA,EAAe,4EAAA;AAAA,MACf,iBAAA,EAAqB;AAAA,QACnB,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW,oBAAA;AAAA,YACX,UAAA,EAAc;AAAA,cACZ,WAAA,EAAe;AAAA,gBACb,IAAA,EAAQ,WAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,SACF;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW,qBAAA;AAAA,YACX,UAAA,EAAc;AAAA,cACZ,WAAA,EAAe;AAAA,gBACb,IAAA,EAAQ,UAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA,eACnB;AAAA,cACA,MAAA,EAAU;AAAA,gBACR,IAAA,EAAQ,UAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA,eACnB;AAAA,cACA,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ,UAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,KAAA,EAAS,gCAAA;AAAA,YACT,YAAA,EAAgB;AAAA,cACd;AAAA;AACF;AACF,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW,sBAAA;AAAA,YACX,UAAA,EAAc;AAAA,cACZ,WAAA,EAAe;AAAA,gBACb,IAAA,EAAQ,UAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,SACF;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,KAAA,EAAS;AAAA;AACX,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,QAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,KAAA,EAAS;AAAA;AACX,SACF;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,YACN,OAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW,oBAAA;AAAA,YACX,UAAA,EAAc;AAAA,cACZ,WAAA,EAAe;AAAA,gBACb,IAAA,EAAQ,WAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB,kBAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF;AACF,OACF;AAAA,MACA,YAAA,EAAgB;AAAA,QACd,4CAAA,EAAgD;AAAA,UAC9C,WAAA,EAAe,8DAAA;AAAA,UACf,UAAA,EAAc;AAAA;AAChB;AACF;AACF;AAEJ,CAAA;;;AChbO,IAAM,OAAA,GAAU;AAAA,EACrB,WAAA,EAAa,2BAAA;AAAA,EACb,WAAA,EAAa,2BAAA;AAAA,EACb,eAAA,EAAiB,+BAAA;AAAA,EACjB,WAAA,EAAa,2BAAA;AAAA,EACb,gBAAA,EAAkB,gCAAA;AAAA,EAClB,eAAA,EAAiB,+BAAA;AAAA,EACjB,cAAA,EAAgB,8BAAA;AAAA,EAChB,UAAA,EAAY,0BAAA;AAAA,EACZ,cAAA,EAAgB;AAClB,CAAA;AAmBO,SAAS,UAAU,IAAA,EAAkB;AAC1C,EAAA,OAAO,QAAQ,IAAI,CAAA;AACrB;AAKO,SAAS,cAAA,GAA+B;AAC7C,EAAA,OAAO,MAAA,CAAO,KAAK,OAAO,CAAA;AAC5B;AAKO,SAAS,UAAU,IAAA,EAAkC;AAC1D,EAAA,OAAO,IAAA,IAAQ,OAAA;AACjB;;;ACtDO,IAAM,wBAAN,MAA4B;AAAA,EACjC,OAAe,gBAAA,mBAAmB,IAAI,GAAA,EAA8B;AAAA,EACpE,OAAe,GAAA,GAAkB,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjC,OAAO,uBAAoC,MAAA,EAAqC;AAE9E,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAEvC,IAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,SAAS,CAAA,EAAG;AAEzC,MAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACb,QAAA,IAAA,CAAK,MAAM,IAAI,GAAA,CAAI,EAAE,SAAA,EAAW,MAAM,CAAA;AACtC,QAAA,UAAA,CAAW,KAAK,GAAG,CAAA;AAGnB,QAAA,IAAA,CAAK,cAAA,EAAe;AAAA,MACtB;AAIA,MAAA,MAAM,EAAE,GAAA,EAAK,GAAG,eAAA,EAAgB,GAAI,MAAA;AAGpC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,eAAe,CAAA;AAClD,MAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,SAAA,EAAW,SAAS,CAAA;AAAA,IAChD;AAEA,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,SAAS,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,cAAA,GAAuB;AACpC,IAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AAEf,IAAA,IAAI;AAEF,MAAA,MAAM,YAAA,GAAuC;AAAA,QAC3C,aAAA,EAAe,yBAAA;AAAA,QACf,aAAA,EAAe,yBAAA;AAAA,QACf,iBAAA,EAAmB,6BAAA;AAAA,QACnB,aAAA,EAAe,yBAAA;AAAA,QACf,iBAAA,EAAmB,6BAAA;AAAA,QACnB,gBAAA,EAAkB,4BAAA;AAAA,QAClB,YAAA,EAAc,wBAAA;AAAA,QACd,gBAAA,EAAkB;AAAA,OACpB;AAGA,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AAClD,QAAA,IAAI,IAAA,KAAS,kBAAA,IAAsB,YAAA,CAAa,IAAI,CAAA,EAAG;AACrD,UAAA,MAAM,OAAA,GAAU,aAAa,IAAI,CAAA;AACjC,UAAA,IAAA,CAAK,GAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,QACrC;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAA,GAAmB;AACxB,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAA,GAA2C;AAChD,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,KAAK,gBAAA,CAAiB;AAAA,KACvC;AAAA,EACF;AACF,CAAA;ACrFA,SAAS,SAAS,GAAA,EAAe;AAC/B,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,IAAA,EAAM;AAC3C,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,GAAA,CAAI,IAAI,QAAQ,CAAA;AAAA,EACzB;AACA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AACzC,EAAA,MAAM,SAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,MAAA;AACT;AAOA,SAAS,aAAa,OAAA,EAAyB;AAC7C,EAAA,MAAM,aAAA,GAAgB,SAAS,OAAO,CAAA;AACtC,EAAA,OAAO,IAAA,CAAK,UAAU,aAAa,CAAA;AACrC;AAKO,SAAS,yBAAyB,OAAA,EAAsC;AAC7E,EAAA,MAAM,UAAA,GAAa,aAAa,OAAO,CAAA;AACvC,EAAA,OAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,YAAY,MAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AACrE;;;ACxCA,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,MAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACSA,IAAM,gBAAN,MAAsC;AAAA,EAC5B,KAAA;AAAA,EACA,MAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAAiB,EAAA,EAAI,KAAA,GAAkB,MAAA,EAAQ;AACzD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEQ,UAAU,KAAA,EAA0B;AAC1C,IAAA,MAAM,SAAqB,CAAC,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,SAAS,QAAQ,CAAA;AACtE,IAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AACnD,IAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA;AAE9C,IAAA,OAAO,iBAAA,IAAqB,iBAAA,IAAqB,IAAA,CAAK,KAAA,KAAU,QAAA;AAAA,EAClE;AAAA,EAEA,KAAA,CAAM,YAAoB,IAAA,EAAmB;AAC3C,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,EAAG;AAC3B,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAA,CAAK,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,IAAA,CAAK,YAAoB,IAAA,EAAmB;AAC1C,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA,EAAG;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAA,CAAK,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,IAAA,CAAK,YAAoB,IAAA,EAAmB;AAC1C,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA,EAAG;AAC1B,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,IAAA,CAAK,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,KAAA,CAAM,YAAoB,IAAA,EAAmB;AAC3C,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,EAAG;AAC3B,MAAA,OAAA,CAAQ,KAAA,CAAM,GAAG,IAAA,CAAK,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,SAAS,KAAA,EAAuB;AAC9B,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AACF,CAAA;AAGO,SAAS,YAAA,CAAa,MAAA,GAAiB,EAAA,EAAI,KAAA,EAA0B;AAC1E,EAAA,MAAM,QAAA,GAAW,KAAA,KACd,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,KAAM,MAAA,GAAS,QAAA,GAAW,MAAA,CAAA,IAChD,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,IACxB,MAAA;AAEF,EAAA,OAAO,IAAI,aAAA,CAAc,MAAA,EAAQ,QAAQ,CAAA;AAC3C;AAGO,IAAM,MAAA,GAAS,aAAa,QAAQ,CAAA;;;AC7D3C,IAAMA,OAAAA,GAAS,aAAa,iBAAiB,CAAA;AAC7C,IAAM,oBAAA,GAAuB,UAAU,eAAe,CAAA;AAatD,eAAsB,YAAA,GAAoE;AACxF,EAAA,MAAM,EAAE,SAAA,EAAW,UAAA,EAAW,GAAI,MAAM,qBAAqB,SAAA,EAAW;AAAA,IACtE,iBAAA,EAAmB,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAQ,KAAA,EAAM;AAAA,IACjD,kBAAA,EAAoB,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA;AAAM,GACpD,CAAA;AAGD,EAAA,MAAM,YAAA,GAAe,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA;AAE3C,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,YAAA,CAAa,QAAA,CAAS,QAAQ,CAAA;AAAA;AAAA,IACzC,YAAY,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,QAAQ;AAAA,GACvD;AACF;AAKO,SAAS,WAAA,CACd,OAAA,EACA,UAAA,EACA,KAAA,EACA,MACA,KAAA,EACW;AACX,EAAA,MAAM,eAAA,GAAkB,yBAAyB,OAAO,CAAA;AACxD,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,CAAA,EAAG,eAAe,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAGxE,EAAA,MAAM,aAAaC,UAAAA,CAAW,QAAQ,EAAE,MAAA,CAAO,MAAM,EAAE,MAAA,EAAO;AAE9D,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,EAAM,UAAA,EAAY;AAAA,IACvC,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,UAAA,EAAY,QAAQ,CAAA;AAAA,IACrC,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA;AAAA,IACtC;AAAA,GACF;AACF;AAOA,eAAsB,gBAAA,CACpB,QACA,iBAAA,EACkB;AAClB,EAAA,KAAA,MAAW,SAAA,IAAa,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY;AAChD,IAAA,MAAM,eAAA,GAAkB,MAAM,iBAAA,CAAkB,SAAA,CAAU,KAAK,CAAA;AAC/D,IAAA,IAAI,CAAC,eAAA,EAAiB;AAGpB,MAAAD,OAAAA,CAAO,KAAA,CAAM,CAAA,gCAAA,EAAmC,SAAA,CAAU,KAAK,CAAA,CAAE,CAAA;AACjE,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAS,CAAA,EAAG,MAAA,CAAO,MAAA,CAAO,eAAe,IAAI,SAAA,CAAU,KAAK,CAAA,CAAA,EAAI,SAAA,CAAU,IAAI,CAAA,CAAA,EAAI,SAAA,CAAU,KAAK,CAAA,CAAA,EAAI,UAAU,SAAS,CAAA,CAAA;AAC9H,IAAA,MAAM,aAAaC,UAAAA,CAAW,QAAQ,EAAE,MAAA,CAAO,MAAM,EAAE,MAAA,EAAO;AAI9D,IAAA,MAAM,mBAAA,GAAsB,OAAO,IAAA,CAAK;AAAA,MACtC,EAAA;AAAA,MAAM,EAAA;AAAA,MAAM,EAAA;AAAA,MAAM,CAAA;AAAA,MAAM,CAAA;AAAA,MAAM,CAAA;AAAA,MAAM,EAAA;AAAA,MAAM,GAAA;AAAA,MAC1C,GAAA;AAAA,MAAM,CAAA;AAAA,MAAM,EAAA;AAAA,MAAM;AAAA,KACnB,CAAA;AACD,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,eAAA,EAAiB,QAAQ,CAAA;AAC1D,IAAA,MAAM,gBAAgB,MAAA,CAAO,MAAA,CAAO,CAAC,mBAAA,EAAqB,YAAY,CAAC,CAAA;AAEvE,IAAA,MAAM,OAAA,GAAU,MAAA;AAAA,MACd,IAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,QACE,GAAA,EAAK,aAAA;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,QAAQ;AAAA,KAC3C;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,qBAAA,GAAgC;AAC9C,EAAA,OAAO,WAAA,CAAY,EAAE,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAC1C;;;AC1HA,IAAA,sBAAA,GAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,SAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACaO,SAAS,+BACd,IAAA,EACuC;AACvC,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,gBAAgB,CAAA;AACvF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAI,CAAA;AAE9B,EAAA,OAAO,CAAC,OAAA,EAAS,SAAA,CAAU,MAAM,CAAA;AACnC;AAKO,SAAS,yBAAwD,IAAA,EAAkD;AACxH,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,8BAAA,CAA+B,IAAI,CAAA;AACrD,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,iCAAiC,IAAA,EAAiC;AAChF,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,+BAA+B,IAAI,CAAA;AAEhE,EAAA,MAAM,eAAA,GAAkB,SAAA,EAAW,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,IAC9D,KAAA,EAAO,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,UAAA;AAAA,IACnC,OAAA,EAAS,MAAM,OAAA,IAAW,mBAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,KAAK,EAAC;AAER,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AAKA,eAAsB,kCAAA,CACpB,QACA,iBAAA,EACe;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,MAAM,CAAA,GAAI,+BAA+B,MAAM,CAAA;AACrE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,eAAA,GAAkB,MAAA,EAAQ,GAAA,CAAI,CAAA,KAAA,MAAU;AAAA,MAC5C,KAAA,EAAO,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,UAAA;AAAA,MACnC,OAAA,EAAS,MAAM,OAAA,IAAW,mBAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,KAAK,EAAC;AAER,IAAA,MAAM,IAAI,uBAAA,CAAwB,kBAAA,EAAoB,eAAe,CAAA;AAAA,EACvE;AAGA,EAAA,MAAM,gBAAA,GAAmB,wBAAA,CAAyB,MAAA,CAAO,OAAO,CAAA;AAChE,EAAA,IAAI,gBAAA,KAAqB,MAAA,CAAO,MAAA,CAAO,eAAA,EAAiB;AACtD,IAAA,MAAM,IAAI,qBAAA,EAAsB;AAAA,EAClC;AAGA,EAAA,MAAM,qBAAqB,MAAM,gBAAA;AAAA,IAC/B,MAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,MAAM,IAAI,0BAAA,EAA2B;AAAA,EACvC;AACF;;;ACtEO,SAAS,0BACd,IAAA,EACuC;AACvC,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,WAAW,CAAA;AACvF,EAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,OAAA,EAAS,cAAA,CAAe,MAAM,CAAA;AACxC;AAEO,SAAS,cAAc,IAAA,EAAoC;AAChE,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,WAAW,CAAA;AACvF,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAMO,SAAS,4BAA4B,IAAA,EAAiC;AAC3E,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,0BAA0B,IAAI,CAAA;AAE3D,EAAA,MAAM,eAAA,GAAkB,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,IACzE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,IACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,IAAI,EAAC;AAEP,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AASA,eAAsB,uBAAA,CACpB,QACA,iBAAA,EACe;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,MAAM,CAAA,GAAI,yBAAA,CAA0B,OAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,eAAe,CAAA;AAAA,EAClE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,iBAAiB,CAAA;AACpE;AASA,eAAsB,8BAAA,CACpB,aACA,iBAAA,EACe;AACf,EAAA,MAAM,cAAA,GAAiB,MAAM,iBAAA,CAAkB,WAAA,CAAY,EAAE,CAAA;AAE7D,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,CAAA,4CAAA,EAA+C,YAAY,EAAE,CAAA,iDAAA;AAAA,KAC/D;AAAA,EACF;AAEA,EAAA,IAAI,cAAA,CAAe,SAAS,OAAA,EAAS;AACnC,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,CAAA,YAAA,EAAe,cAAA,CAAe,EAAE,CAAA,gDAAA,EAAmD,YAAY,EAAE,CAAA,CAAA;AAAA,KACnG;AAAA,EACF;AAEA,EAAA,IAAI,cAAA,CAAe,WAAW,QAAA,EAAU;AACtC,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,CAAA,iCAAA,EAAoC,YAAY,EAAE,CAAA,+DAAA,EAAkE,eAAe,EAAE,CAAA,UAAA,EAAa,eAAe,MAAM,CAAA,EAAA;AAAA,KACzK;AAAA,EACF;AACF;;;ACtFO,SAAS,kBACd,OAAA,EACwB;AAExB,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,EAAA,EAAI,QAAQ,EAAA,IAAM,EAAA;AAAA,IAClB,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,EAAE,MAAM,OAAA,EAAiB;AAAA,IACnD,MAAA,EAAQ,QAAQ,MAAA,IAAU,QAAA;AAAA,IAC1B,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,EAAC;AAAA,IAC/B,sBAAA,EAAwB,OAAA,CAAQ,sBAAA,IAA0B,EAAC;AAAA,IAC3D,0BAAA,EAA4B,OAAA,CAAQ,0BAAA,IAA8B,EAAC;AAAA,IACnE,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,UAAA,GAAa,4BAA4B,KAAK,CAAA;AACpD,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,UAAA,CAAW,MAAM,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,KAAA;AACT;AAWO,SAAS,gBAAgB,IAAA,EAAkC;AAEhE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,4BAAA,EAA8B,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC3F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,2BAAA,CAA4B,MAAA,CAAO,OAAO,CAAA;AACpE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,qBAAA,EAAuB,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACnF;AAEA,EAAA,OAAO,MAAA;AACT;;;ACpCO,IAAM,eAAN,MAA4C;AAAA,EACzC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EAER,YAAY,YAAA,EAAwC;AAClD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAC7B,IAAA,IAAA,CAAK,cAAc,YAAA,CAAa,WAAA;AAChC,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,kBAAkB,OAAA,EAAsD;AAE5E,IAAA,IAAI,CAAC,OAAA,CAAQ,EAAA,IAAM,CAAC,QAAQ,MAAA,EAAQ;AAClC,MAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,IACtD;AAGA,IAAA,MAAM,qBAAqB,MAAM,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,QAAQ,EAAE,CAAA;AAClE,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAA,CAAQ,EAAE,CAAA,qEAAA,CAAuE,CAAA;AAAA,IAC1H;AAGA,IAAA,IAAI,kBAAA,CAAmB,SAAS,OAAA,EAAS;AACvC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAA,CAAQ,EAAE,CAAA,+CAAA,CAAiD,CAAA;AAAA,IACpG;AAGA,IAAA,MAAM,eAAA,GAA+B;AAAA,MACnC,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,MAAA,EAAQ,QAAQ,MAAA,IAAU,QAAA;AAAA,MAC1B,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,EAAC;AAAA,MAC/B,sBAAA,EAAwB,OAAA,CAAQ,sBAAA,IAA0B,EAAC;AAAA,MAC3D,0BAAA,EAA4B,OAAA,CAAQ,0BAAA,IAA8B,EAAC;AAAA,MACnE,GAAG;AAAA,KACL;AAGA,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,eAAe,CAAA;AAG1D,IAAA,MAAM,eAAA,GAAkB,yBAAyB,gBAAgB,CAAA;AAGjE,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,QAAQ,EAAE,CAAA;AAC3D,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,MAC3D;AACA,MAAA,UAAA,GAAa,GAAA;AAAA,IACf,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,gCAAA,EAAmC,QAAQ,EAAE,CAAA,+KAAA,EAG1B,iBAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAe,CAAA;AAAA,OAC7E;AAAA,IACF;AAGA,IAAA,MAAM,YAAY,WAAA,CAAY,gBAAA,EAAkB,YAAY,OAAA,CAAQ,EAAA,EAAI,UAAU,oBAAoB,CAAA;AAGtG,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,uBAAA,CAAwB,MAAA,EAAQ,OAAO,KAAA,KAAU;AACrD,MAAA,IAAI,KAAA,KAAU,QAAQ,EAAA,EAAI;AACxB,QAAA,OAAO,kBAAA,CAAmB,SAAA;AAAA,MAC5B;AACA,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,KAAK,CAAA;AACtD,MAAA,OAAO,aAAa,SAAA,IAAa,IAAA;AAAA,IACnC,CAAC,CAAA;AAGD,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,MAAA,CAAO,OAAA,CAAQ,IAAI,MAAM,CAAA;AAGtD,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAM,KAAA,GAA8B;AAAA,QAClC,IAAA,EAAM,2BAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,eAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,SAAS,gBAAA,CAAiB,EAAA;AAAA,UAC1B,QAAQ,gBAAA,CAAiB,MAAA;AAAA,UACzB,sBAAsB,kBAAA,CAAmB;AAAA;AAC3C,OACF;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,OAAA,EAA8C;AACjE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACnD,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,GAA2C;AAC/C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC1C,IAAA,MAAM,SAAwB,EAAC;AAE/B,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAA,CAAkB,OAAA,EAAiB,OAAA,EAAsD;AAE7F,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,UAAA,CAAY,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,kBAAA,GAAqB,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,OAAO,CAAA;AAC/D,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,UAAA,CAAY,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,cAAA,GAA8B;AAAA,MAClC,GAAG,cAAA,CAAe,OAAA;AAAA,MAClB,GAAG,OAAA;AAAA,MACH,EAAA,EAAI;AAAA;AAAA,KACN;AAGA,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,cAAc,CAAA;AAGzD,IAAA,MAAM,eAAA,GAAkB,yBAAyB,gBAAgB,CAAA;AAGjE,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,cAAc,OAAO,CAAA;AACxD,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAE,CAAA;AAAA,MACxD;AACA,MAAA,UAAA,GAAa,GAAA;AAAA,IACf,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,OAAO,CAAA,CAAE,CAAA;AAAA,IAC9D;AAGA,IAAA,MAAM,YAAY,WAAA,CAAY,gBAAA,EAAkB,UAAA,EAAY,OAAA,EAAS,UAAU,cAAc,CAAA;AAG7F,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,MAAA,CAAO,OAAA,CAAQ,IAAI,MAAM,CAAA;AAEtD,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,mBAAmB,OAAA,EAAuC;AAC9D,IAAA,OAAO,KAAK,iBAAA,CAAkB,OAAA,EAAS,EAAE,MAAA,EAAQ,YAAY,CAAA;AAAA,EAC/D;AACF,CAAA;;;AC3OA,IAAA,uBAAA,GAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACYO,SAAS,yBACd,IAAA,EACuC;AACvC,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,UAAU,CAAA;AACtF,EAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,OAAA,EAAS,cAAA,CAAe,MAAM,CAAA;AACxC;AAKO,SAAS,aAAa,IAAA,EAAmC;AAC9D,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,UAAU,CAAA;AACtF,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAMO,SAAS,2BAA2B,IAAA,EAAiC;AAC1E,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,yBAAyB,IAAI,CAAA;AAE1D,EAAA,MAAM,eAAA,GAAkB,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,IACzE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,IACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,IAAI,EAAC;AAEP,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AASA,eAAsB,sBAAA,CACpB,QACA,iBAAA,EACe;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,MAAM,CAAA,GAAI,wBAAA,CAAyB,OAAO,OAAO,CAAA;AACvE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,YAAA,EAAc,eAAe,CAAA;AAAA,EACjE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,iBAAiB,CAAA;AACpE;;;ACnEA,SAAS,cAAc,IAAA,EAAsB;AAC3C,EAAA,OAAO,IAAA,CACJ,WAAA,EAAY,CACZ,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA,CACzB,KAAA,CAAM,GAAG,EAAE,CAAA;AAChB;AAKO,SAAS,eAAA,CAAgB,MAAyB,WAAA,EAA6B;AACpF,EAAA,MAAM,IAAA,GAAO,cAAc,WAAW,CAAA;AACtC,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACxB;AAaO,SAAS,cAAA,CAAe,OAAe,SAAA,EAA2B;AACvE,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA;AAClC;AAKO,SAAS,eAAA,CAAgB,OAAe,SAAA,EAA2B;AACxE,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA;AACnC;AAKO,SAAS,mBAAA,CAAoB,OAAe,SAAA,EAA2B;AAC5E,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA;AAClC;AAWO,SAAS,mBAAA,CAAoB,OAAe,SAAA,EAA2B;AAC5E,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,WAAA,EAAc,IAAI,CAAA,CAAA;AACvC;AAKO,SAAS,kBAAA,CAAmB,OAAe,SAAA,EAA2B;AAC3E,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA;AACtC;;;AC/DO,SAAS,iBACd,OAAA,EACY;AAEZ,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAG9C,EAAA,MAAM,IAAA,GAAmB;AAAA,IACvB,IAAI,OAAA,CAAQ,EAAA,IAAM,eAAe,OAAA,CAAQ,KAAA,IAAS,IAAI,SAAS,CAAA;AAAA,IAC/D,KAAA,EAAO,QAAQ,KAAA,IAAS,EAAA;AAAA,IACxB,MAAA,EAAQ,QAAQ,MAAA,IAAU,OAAA;AAAA,IAC1B,QAAA,EAAU,QAAQ,QAAA,IAAY,QAAA;AAAA,IAC9B,WAAA,EAAa,QAAQ,WAAA,IAAe,EAAA;AAAA,IACpC,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAQ,EAAC;AAAA,IACvB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,UAAA,GAAa,2BAA2B,IAAI,CAAA;AAClD,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,YAAA,EAAc,UAAA,CAAW,MAAM,CAAA;AAAA,EACnE;AAEA,EAAA,OAAO,IAAA;AACT;AAWO,SAAS,eAAe,IAAA,EAAiC;AAE9D,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,2BAAA,EAA6B,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC1F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,0BAAA,CAA2B,MAAA,CAAO,OAAO,CAAA;AACnE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,oBAAA,EAAsB,iBAAA,CAAkB,MAAM,CAAA;AAAA,EAClF;AAEA,EAAA,OAAO,MAAA;AACT;;;ACpDA,IAAM,cAAc,OAAA,CAAQ,WAAA;AAErB,SAAS,0BACd,IAAA,EACuC;AACvC,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,WAAW,CAAA;AAC/E,EAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,OAAA,EAAS,cAAA,CAAe,MAAM,CAAA;AACxC;AAKO,SAAS,cAAc,IAAA,EAAoC;AAChE,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,WAAW,CAAA;AAC/E,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAMO,SAAS,4BAA4B,IAAA,EAAiC;AAC3E,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,0BAA0B,IAAI,CAAA;AAE3D,EAAA,MAAM,eAAA,GAAkB,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,IACzE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,IACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,IAAI,EAAC;AAEP,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AASA,eAAsB,uBAAA,CACpB,QACA,iBAAA,EACe;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,MAAM,CAAA,GAAI,yBAAA,CAA0B,OAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,eAAe,CAAA;AAAA,EAClE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,iBAAiB,CAAA;AACpE;;;AC9DO,SAAS,kBACd,OAAA,EACa;AAEb,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAG9C,EAAA,MAAM,KAAA,GAAqB;AAAA,IACzB,IAAI,OAAA,CAAQ,EAAA,IAAM,gBAAgB,OAAA,CAAQ,KAAA,IAAS,IAAI,SAAS,CAAA;AAAA,IAChE,KAAA,EAAO,QAAQ,KAAA,IAAS,EAAA;AAAA,IACxB,MAAA,EAAQ,QAAQ,MAAA,IAAU,UAAA;AAAA,IAC1B,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,EAAC;AAAA;AAAA,IAC7B,eAAe,OAAA,CAAQ,aAAA;AAAA,IACvB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,UAAA,GAAa,4BAA4B,KAAK,CAAA;AACpD,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,UAAA,CAAW,MAAM,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,KAAA;AACT;AAWO,SAAS,gBAAgB,IAAA,EAAkC;AAEhE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,4BAAA,EAA8B,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC3F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,2BAAA,CAA4B,MAAA,CAAO,OAAO,CAAA;AACpE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,qBAAA,EAAuB,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACnF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC5DA,IAAA,wBAAA,GAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACUA,IAAM,cAAc,OAAA,CAAQ,WAAA;AAErB,SAAS,0BACd,IAAA,EACuC;AACvC,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,WAAW,CAAA;AAC/E,EAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,OAAA,EAAS,cAAA,CAAe,MAAM,CAAA;AACxC;AAEO,SAAS,cAAc,IAAA,EAAoC;AAChE,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,WAAW,CAAA;AAC/E,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAMO,SAAS,4BAA4B,IAAA,EAAiC;AAC3E,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,0BAA0B,IAAI,CAAA;AAE3D,EAAA,MAAM,eAAA,GAAkB,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,IACzE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,IACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,IAAI,EAAC;AAEP,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AASA,eAAsB,uBAAA,CACpB,QACA,iBAAA,EACe;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,MAAM,CAAA,GAAI,yBAAA,CAA0B,OAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,eAAe,CAAA;AAAA,EAClE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,iBAAiB,CAAA;AACpE;;;AC3DO,SAAS,kBACd,OAAA,EACa;AAEb,EAAA,MAAM,KAAA,GAAqB;AAAA,IACzB,EAAA,EAAI,QAAQ,EAAA,IAAM,eAAA,CAAgB,QAAQ,IAAA,IAAQ,OAAA,EAAS,OAAA,CAAQ,WAAA,IAAe,EAAE,CAAA;AAAA,IACpF,IAAA,EAAM,QAAQ,IAAA,IAAQ,OAAA;AAAA,IACtB,WAAA,EAAa,QAAQ,WAAA,IAAe,EAAA;AAAA,IACpC,SAAA,EAAW,QAAQ,SAAA,IAAa,EAAA;AAAA,IAChC,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,CAAC,QAAQ,CAAA;AAAA,IACjC,MAAA,EAAQ,QAAQ,MAAA,IAAU,QAAA;AAAA,IAC1B,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,UAAA,GAAa,4BAA4B,KAAK,CAAA;AACpD,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,UAAA,CAAW,MAAM,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,KAAA;AACT;AAWO,SAAS,gBAAgB,IAAA,EAAkC;AAEhE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,4BAAA,EAA8B,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC3F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,2BAAA,CAA4B,MAAA,CAAO,OAAO,CAAA;AACpE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,qBAAA,EAAuB,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACnF;AAEA,EAAA,OAAO,MAAA;AACT;;;ACjCO,IAAM,kBAAN,MAAkD;AAAA,EAC/C,MAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EAER,YAAY,YAAA,EAA2C;AACrD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,cAAc,YAAA,CAAa,WAAA;AAChC,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AACnC,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,KAAA,EAAuC;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AACvC,MAAA,OAAO,OAAO,SAAA,IAAa,IAAA;AAAA,IAC7B,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,CACJ,OAAA,EACA,SAAA,EACsB;AAEtB,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,IAAQ,CAAC,QAAQ,WAAA,EAAa;AACzC,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC7D;AAGA,IAAA,MAAM,EAAE,SAAA,EAAW,UAAA,EAAW,GAAI,MAAM,YAAA,EAAa;AAGrD,IAAA,MAAM,UAAU,OAAA,CAAQ,EAAA,IAAM,gBAAgB,OAAA,CAAQ,IAAA,EAAM,QAAQ,WAAW,CAAA;AAG/E,IAAA,MAAM,eAAA,GAA+B;AAAA,MACnC,EAAA,EAAI,OAAA;AAAA,MACJ,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,SAAA;AAAA,MACA,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,CAAC,QAAQ,CAAA;AAAA,MACjC,MAAA,EAAQ,QAAQ,MAAA,IAAU,QAAA;AAAA,MAC1B,GAAG;AAAA,KACL;AAGA,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,eAAe,CAAA;AAG1D,IAAA,MAAM,eAAA,GAAkB,yBAAyB,gBAAgB,CAAA;AAGjE,IAAA,MAAM,YAAY,WAAA,CAAY,gBAAA,EAAkB,UAAA,EAAY,OAAA,EAAS,UAAU,oBAAoB,CAAA;AAGnG,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,uBAAA,CAAwB,MAAA,EAAQ,OAAO,KAAA,KAAU;AACrD,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,OAAO,SAAA;AAAA,MACT;AACA,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AAC7C,MAAA,OAAO,aAAa,SAAA,IAAa,IAAA;AAAA,IACnC,CAAC,CAAA;AAGD,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,MAAA,CAAO,OAAA,CAAQ,IAAI,MAAM,CAAA;AAGtD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,OAAA,EAAS,UAAU,CAAA;AAAA,IAC1D,SAAS,KAAA,EAAO;AAGd,MAAA,OAAA,CAAQ,IAAA,CAAK,mDAAyC,OAAO,CAAA,EAAA,EAAK,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAA;AAAA,IAC9H;AAGA,IAAA,IAAI,KAAK,QAAA,EAAU;AAEjB,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAClD,MAAA,MAAM,WAAA,GAAc,YAAY,MAAA,KAAW,CAAA;AAE3C,MAAA,MAAM,KAAA,GAA2B;AAAA,QAC/B,IAAA,EAAM,wBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,kBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,OAAA;AAAA,UACA,MAAM,gBAAA,CAAiB,IAAA;AAAA,UACvB,WAAW,gBAAA,CAAiB,SAAA;AAAA,UAC5B,OAAO,gBAAA,CAAiB,KAAA;AAAA,UACxB;AAAA;AACF,OACF;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,OAAA,EAA8C;AAC3D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACnD,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA,EAEA,MAAM,UAAA,GAAqC;AACzC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC1C,IAAA,MAAM,SAAwB,EAAC;AAE/B,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EACA,MACA,KAAA,EACY;AAEZ,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AACzC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE,CAAA;AAAA,IAC/C;AAGA,IAAA,MAAM,eAAA,GAAkB,wBAAA,CAAyB,MAAA,CAAO,OAAO,CAAA;AAG/D,IAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,IAAA,IAAI;AACF,MAAA,UAAA,GAAa,MAAM,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,OAAO,CAAA;AAAA,IAC3D,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,wCAAA,EAAiC,OAAO,CAAA,sBAAA,CAAwB,CAAA;AAAA,IAC/E;AAGA,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,UAAA,EAAY;AAEd,MAAA,SAAA,GAAY,YAAY,MAAA,CAAO,OAAA,EAAS,UAAA,EAAY,OAAA,EAAS,MAAM,KAAK,CAAA;AAAA,IAC1E,CAAA,MAAO;AAEL,MAAA,SAAA,GAAY;AAAA,QACV,KAAA,EAAO,OAAA;AAAA,QACP,IAAA;AAAA,QACA,KAAA;AAAA,QACA,WAAW,qBAAA,EAAsB;AAAA,QACjC,WAAW,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI;AAAA,OACzC;AAAA,IACF;AAGA,IAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,MAAA,CAAO,UAAA,IAAc,EAAC;AACxD,IAAA,MAAM,iBAAiB,kBAAA,CAAmB,IAAA,CAAK,CAAA,GAAA,KAAO,GAAA,CAAI,cAAc,aAAa,CAAA;AAErF,IAAA,IAAI,eAAA;AACJ,IAAA,IAAI,cAAA,EAAgB;AAElB,MAAA,MAAM,WAAW,kBAAA,CAAmB,GAAA;AAAA,QAAI,CAAA,GAAA,KACtC,GAAA,CAAI,SAAA,KAAc,aAAA,GAAgB,SAAA,GAAY;AAAA,OAChD;AAEA,MAAA,eAAA,GAAkB,QAAA,CAAS,MAAA,GAAS,CAAA,GAChC,QAAA,GACA,CAAC,SAAS,CAAA;AAAA,IAChB,CAAA,MAAO;AAEL,MAAA,eAAA,GAAkB,CAAC,GAAG,kBAAA,EAAoB,SAAS,CAAA;AAAA,IACrD;AAIA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,MAAA;AAAA,MACH,MAAA,EAAQ;AAAA,QACN,GAAG,MAAA,CAAO,MAAA;AAAA,QACV,eAAA;AAAA,QACA,UAAA,EAAY;AAAA;AACd,KACF;AAEA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,sBAAsB,eAAA,EAA0C;AACpE,IAAA,IAAI,SAAA,GAAY,eAAA;AAChB,IAAA,IAAI,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAGzC,IAAA,OAAO,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,SAAA,IAAa,MAAM,YAAA,EAAc;AAChE,MAAA,SAAA,GAAY,KAAA,CAAM,YAAA;AAClB,MAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAAA,IACvC;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eAAA,GAAwC;AAE5C,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,cAAA,CAAe,WAAA,EAAY;AAEtD,IAAA,IAAI,OAAA,EAAS,aAAa,OAAA,EAAS;AAEjC,MAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,qBAAA,CAAsB,OAAA,CAAQ,YAAY,OAAO,CAAA;AACnF,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA;AAChD,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,MAAM,cAAc,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,QAAQ,CAAA;AAC1D,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAO,WAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAI,MAAM,yDAAoD,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,0BAA0B,OAAA,EAA8C;AAC5E,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,qBAAA,CAAsB,OAAO,CAAA;AAC/D,IAAA,OAAO,IAAA,CAAK,SAAS,cAAc,CAAA;AAAA,EACrC;AAAA,EAEA,MAAM,eACJ,OAAA,EAC2D;AAE3D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,UAAA,CAAY,CAAA;AAAA,IAC5D;AAEA,IAAA,IAAI,QAAA,CAAS,WAAW,SAAA,EAAW;AACjC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,OAAO,CAAA,CAAE,CAAA;AAAA,IACnE;AAGA,IAAA,MAAM,EAAE,SAAA,EAAW,YAAA,EAAc,YAAY,aAAA,EAAc,GAAI,MAAM,YAAA,EAAa;AAKlF,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,QAAA,CAAS,IAAA,EAAM,SAAS,WAAW,CAAA;AAClE,IAAA,IAAI,UAAA;AAGJ,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,eAAe,CAAA;AACjD,IAAA,IAAI,gBAAgB,YAAA,CAAa,CAAC,CAAA,IAAK,YAAA,CAAa,CAAC,CAAA,EAAG;AACtD,MAAA,MAAM,kBAAA,GAAqB,aAAa,CAAC,CAAA;AACzC,MAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,YAAA,CAAa,CAAC,GAAG,EAAE,CAAA;AACnD,MAAA,UAAA,GAAa,CAAA,EAAG,kBAAkB,CAAA,EAAA,EAAK,cAAA,GAAiB,CAAC,CAAA,CAAA;AAAA,IAC3D,CAAA,MAAO;AAEL,MAAA,UAAA,GAAa,GAAG,MAAM,CAAA,GAAA,CAAA;AAAA,IACxB;AAGA,IAAA,MAAM,eAAA,GAA+B;AAAA,MACnC,EAAA,EAAI,UAAA;AAAA,MACJ,MAAM,QAAA,CAAS,IAAA;AAAA,MACf,aAAa,QAAA,CAAS,WAAA;AAAA,MACtB,SAAA,EAAW,YAAA;AAAA,MACX,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAGA,IAAA,MAAM,mBAAA,GAAsB,kBAAkB,eAAe,CAAA;AAG7D,IAAA,MAAM,eAAA,GAAkB,yBAAyB,mBAAmB,CAAA;AAGpE,IAAA,MAAM,YAAY,WAAA,CAAY,mBAAA,EAAqB,aAAA,EAAe,UAAA,EAAY,UAAU,cAAc,CAAA;AAGtG,IAAA,MAAM,SAAA,GAA+B;AAAA,MACnC,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,uBAAA,CAAwB,SAAA,EAAW,OAAO,KAAA,KAAU;AACxD,MAAA,IAAI,UAAU,UAAA,EAAY;AACxB,QAAA,OAAO,YAAA;AAAA,MACT;AACA,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AAC7C,MAAA,OAAO,aAAa,SAAA,IAAa,IAAA;AAAA,IACnC,CAAC,CAAA;AAGD,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,SAAA,CAAU,OAAA,CAAQ,IAAI,SAAS,CAAA;AAG5D,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,WAAA;AAAA,MACjC,OAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA;AAAA,KACF;AAGA,IAAA,IAAI;AAEF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,cAAA,CAAe,cAAc,OAAO,CAAA;AAChE,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,UAAA,EAAY,QAAQ,CAAA;AAAA,MACjE,CAAA,MAAO;AAEL,QAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,UAAA,EAAY,EAAE,CAAA;AAAA,MAC3D;AAAA,IACF,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,IAAA,CAAK,8CAAoC,UAAU,CAAA,EAAA,EAAK,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAA;AAAA,IAC5H;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,UAAA,EAAY,aAAa,CAAA;AAAA,IAChE,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,mDAAyC,UAAU,CAAA,EAAA,EAAK,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAA;AAAA,IACjI;AAEA,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,eAAA;AAAA,MACV,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,CAAY,OAAA,EAAiB,YAAoB,QAAA,EAAU,MAAA,GAAgD,UAAU,YAAA,EAA6C;AAEtK,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,UAAA,CAAY,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,cAAA,GAA8B;AAAA,MAClC,GAAG,cAAA,CAAe,OAAA;AAAA,MAClB,MAAA,EAAQ,SAAA;AAAA,MACR,GAAI,YAAA,IAAgB,EAAE,YAAA;AAAa,KACrC;AAGA,IAAA,MAAM,eAAA,GAAkB,yBAAyB,cAAc,CAAA;AAG/D,IAAA,MAAM,aAAA,GAAmC;AAAA,MACvC,GAAG,cAAA;AAAA,MACH,MAAA,EAAQ;AAAA,QACN,GAAG,cAAA,CAAe,MAAA;AAAA,QAClB;AAAA,OACF;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AAGpE,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAM,YAAA,GAA6C;AAAA,QACjD,OAAA;AAAA,QACA,SAAA;AAAA,QACA,gBAAA,EAAkB;AAAA,OACpB;AAEA,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,YAAA,CAAa,YAAA,GAAe,YAAA;AAAA,MAC9B;AAEA,MAAA,MAAM,KAAA,GAA2B;AAAA,QAC/B,IAAA,EAAM,wBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,kBAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACX;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,aAAA,EAAsC;AAEvD,IAAA,OAAA,CAAQ,KAAK,wCAAwC,CAAA;AAAA,EACvD;AACF,CAAA;;;AC7cA,IAAA,wBAAA,GAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACYO,SAAS,6BACd,IAAA,EACuC;AACvC,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,cAAc,CAAA;AACrF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAI,CAAA;AAE9B,EAAA,OAAO,CAAC,OAAA,EAAS,SAAA,CAAU,MAAM,CAAA;AACnC;AAKO,SAAS,iBAAiB,IAAA,EAAuC;AACtE,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,4BAAA,CAA6B,IAAI,CAAA;AACnD,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,+BAA+B,IAAA,EAAiC;AAC9E,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,6BAA6B,IAAI,CAAA;AAE3D,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAC1D,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,QAAQ;AAAC,GACX;AACF;AAKA,eAAsB,0BAAA,CACpB,QACA,YAAA,EACe;AAEf,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,4BAAA,CAA6B,OAAO,OAAO,CAAA;AACrE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,gBAAA,EAAkB,eAAe,CAAA;AAAA,EACrE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,YAAY,CAAA;AAC/D;;;AC5DO,SAAS,qBACd,OAAA,EAC2B;AAC3B,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAE9C,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,IAAI,OAAA,CAAQ,EAAA,IAAM,mBAAmB,OAAA,CAAQ,OAAA,IAAW,YAAY,SAAS,CAAA;AAAA,IAC7E,UAAA,EAAY,QAAQ,UAAA,IAAc,MAAA;AAAA,IAClC,QAAA,EAAU,QAAQ,QAAA,IAAY,EAAA;AAAA,IAC9B,IAAA,EAAM,QAAQ,IAAA,IAAQ,UAAA;AAAA,IACtB,QAAQ,OAAA,CAAQ,MAAA,KAAW,OAAA,CAAQ,IAAA,KAAS,eAAe,UAAA,GAAa,MAAA,CAAA;AAAA,IACxE,OAAA,EAAS,QAAQ,OAAA,IAAW,EAAA;AAAA,IAC5B,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,oBAAoB,OAAA,CAAQ,kBAAA;AAAA,IAC5B,UAAU,OAAA,CAAQ;AAAA,GACpB;AAGA,EAAA,MAAM,UAAA,GAAa,+BAA+B,QAAQ,CAAA;AAC1D,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,gBAAA,EAAkB,UAAA,CAAW,MAAM,CAAA;AAAA,EACvE;AAEA,EAAA,OAAO,QAAA;AACT;AAWO,SAAS,mBAAmB,IAAA,EAAqC;AAEtE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,+BAAA,EAAiC,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC9F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,8BAAA,CAA+B,MAAA,CAAO,OAAO,CAAA;AACvE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,wBAAA,EAA0B,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACtF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC/CO,IAAM,kBAAN,MAAkD;AAAA,EAC/C,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EAER,YAAY,YAAA,EAA2C;AACrD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,MAAA,CAAO,OAAA,EAAkC,OAAA,EAA0C;AAEvF,IAAA,MAAM,mBAAA,GAAsB,OAAA;AAC5B,IAAA,IAAI,CAAC,oBAAoB,QAAA,EAAU;AACjC,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,mBAAA,CAAoB,UAAA,IAAc,CAAC,CAAC,MAAA,EAAQ,WAAA,EAAa,WAAA,EAAa,UAAA,EAAY,OAAO,CAAA,CAAE,QAAA,CAAS,mBAAA,CAAoB,UAAU,CAAA,EAAG;AACvI,MAAA,MAAM,IAAI,MAAM,2FAA2F,CAAA;AAAA,IAC7G;AAKA,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,YAAA,IAAgB,OAAA,CAAQ,QAAA,EAAU;AACrD,MAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,mBAAA,CAAoB,oBAAoB,QAAQ,CAAA;AAGrF,MAAA,MAAM,kBAAkB,iBAAA,CAAkB,MAAA;AAAA,QAAO,CAAA,QAAA,KAC/C,SAAS,IAAA,KAAS,YAAA,IAClB,SAAS,QAAA,KAAa,OAAA,CAAQ,QAAA,IAC9B,QAAA,CAAS,MAAA,KAAW;AAAA,OACtB;AAEA,MAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAI9B,QAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,cAAA,EAAe;AAE/C,QAAA,KAAA,MAAW,cAAc,eAAA,EAAiB;AACxC,UAAA,MAAM,gBAAgB,YAAA,CAAa,IAAA;AAAA,YAAK,CAAA,QAAA,KACtC,SAAS,UAAA,KAAe,UAAA,IACxB,SAAS,kBAAA,KAAuB,UAAA,CAAW,EAAA,IAC3C,QAAA,CAAS,MAAA,KAAW;AAAA,WACtB;AAEA,UAAA,IAAI,CAAC,aAAA,EAAe;AAElB,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,mBAAA,CAAoB,QAAQ,CAAA,wBAAA,EAA2B,OAAA,CAAQ,QAAQ,CAAA,YAAA,EAAe,UAAA,CAAW,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,UAC1J;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,MAAA,EAAQ,MAAA;AAAA,MACR,GAAG;AAAA;AAAA,KACL;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,eAAe,CAAA;AAG7D,MAAA,MAAM,cAAA,GAAuC;AAAA,QAC3C,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,KAAA;AAAA,UACT,IAAA,EAAM,UAAA;AAAA,UACN,eAAA,EAAiB,kCAAA;AAAA,UACjB,YAAY,CAAC;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,IAAA,EAAM,QAAA;AAAA,YACN,KAAA,EAAO,kBAAA;AAAA,YACP,SAAA,EAAW,aAAA;AAAA,YACX,SAAA,EAAW,KAAK,GAAA;AAAI,WACrB;AAAA,SACH;AAAA,QACA,OAAA,EAAS;AAAA,OACX;AAGA,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,OAAA,EAAS,UAAU,yBAAyB,CAAA;AAGhH,MAAA,MAAM,KAAK,MAAA,CAAO,SAAA,CAAU,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGrE,MAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,QACpB,IAAA,EAAM,kBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,kBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,YAAY,gBAAA,CAAiB,EAAA;AAAA,UAC7B,YAAY,gBAAA,CAAiB,UAAA;AAAA,UAC7B,UAAU,gBAAA,CAAiB,QAAA;AAAA,UAC3B,MAAM,gBAAA,CAAiB,IAAA;AAAA,UACvB,QAAQ,gBAAA,CAAiB,MAAA;AAAA,UACzB,SAAS,gBAAA,CAAiB,OAAA;AAAA,UAC1B,WAAA,EAAa,OAAA;AAAA,UACb,UAAU,gBAAA,CAAiB,QAAA;AAAA,UAC3B,oBAAoB,gBAAA,CAAiB;AAAA;AACvC,OACuB,CAAA;AAEzB,MAAA,OAAO,gBAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,yBAAyB,CAAA,EAAG;AAC/E,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,OAAA,CAAQ,UAAA,EAAoB,OAAA,EAAiB,OAAA,EAA2C;AAE5F,IAAA,MAAM,gBAAA,GAAmB,MAAM,IAAA,CAAK,WAAA,CAAY,UAAU,CAAA;AAC1D,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,UAAU,CAAA,CAAE,CAAA;AAAA,IAC1E;AAGA,IAAA,MAAM,cAAA,GAAiB,OAAA,IAAW,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAA;AAIjE,IAAA,OAAO,MAAM,KAAK,MAAA,CAAO;AAAA,MACvB,UAAA,EAAY,UAAA;AAAA,MACZ,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS,cAAA;AAAA,MACT,kBAAA,EAAoB;AAAA,OACnB,OAAO,CAAA;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,YAAY,UAAA,EAAoD;AACpE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,UAAU,CAAA;AACzD,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAAoB,QAAA,EAA6C;AACrE,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAK;AAC7C,IAAA,MAAM,YAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,OAAA,CAAQ,QAAA,KAAa,QAAA,EAAU;AAClD,QAAA,SAAA,CAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,cAAA,GAA4C;AAChD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAK;AAC7C,IAAA,MAAM,YAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,SAAA,CAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,iBAAA,CAAkB,UAAA,EAAoB,QAAA,GAAmB,QAAA,EAAmC;AAChG,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY,UAAU,CAAC,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,WAAA,CACZ,UAAA,EACA,QAAA,EACA,YAAA,EACyB;AAEzB,IAAA,IAAI,gBAAgB,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,QAAQ,CAAA,4BAAA,CAA8B,CAAA;AAAA,IACrE;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,CAAY,UAAU,CAAA;AAClD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,UAAU,CAAA,CAAE,CAAA;AAAA,IAC1E;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,cAAA,EAAe;AAC/C,IAAA,MAAM,YAAY,YAAA,CAAa,MAAA;AAAA,MAC7B,CAAA,CAAA,KAAK,CAAA,CAAE,UAAA,KAAe,UAAA,IAAc,EAAE,QAAA,KAAa;AAAA,KACrD;AAGA,IAAA,MAAM,kBAAoC,EAAC;AAC3C,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,CAAY,SAAS,EAAA,EAAI,QAAA,EAAU,eAAe,CAAC,CAAA;AAC7E,QAAA,eAAA,CAAgB,KAAK,MAAM,CAAA;AAAA,MAC7B,SAAS,KAAA,EAAO;AAEd,QAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACjE,UAAA;AAAA,QACF;AACA,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,QAAA;AAAA,MACA,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AACF,CAAA;;;AC7RA,IAAA,uBAAA,GAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACUO,IAAM,iBAAN,MAAgD;AAAA,EAC7C,MAAA;AAAA,EACA,WAAA;AAAA,EAER,YAAY,YAAA,EAA0C;AACpD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,cAAc,YAAA,CAAa,WAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAA,GAAyC;AAE7C,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAK;AAC7C,IAAA,MAAM,QAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,EAAE,CAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC/C,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IACxC;AAGA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAA;AAGzC,IAAA,MAAM,eAAe,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AACpE,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ;AACtC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,2BAAA,CAA4B,IAAI,CAAA;AACvD,MAAA,OAAO,SAAA,GAAY,CAAA;AAAA,IACrB,CAAC,CAAA,CAAE,MAAA;AAEH,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,QACL,OAAO,KAAA,CAAM,MAAA;AAAA,QACb,QAAA,EAAU,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAA;AAAA,QACvC,UAAA,EAAY,IAAA,CAAK,oBAAA,CAAqB,KAAK;AAAA,OAC7C;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,OAAO,MAAA,CAAO,MAAA;AAAA,QACd,QAAQ,MAAA,CAAO,MAAA,CAAO,OAAK,CAAA,CAAE,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AAAA,QAClD,WAAW,MAAA,CAAO,MAAA,CAAO,OAAK,CAAA,CAAE,MAAA,KAAW,WAAW,CAAA,CAAE;AAAA,OAC1D;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,YAAA,EAAc,MAAA;AAAA,QACd,YAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,MAAA,EAA2C;AAE7D,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AAGxB,IAAA,IAAI,YAA8B,EAAC;AACnC,IAAA,IAAI,eAAiC,EAAC;AACtC,IAAA,IAAI,aAAgC,EAAC;AAGrC,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAK;AACrD,IAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,YAAA,CAAa,IAAA,CAAK,OAAO,OAAO,CAAA;AAChC,QAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,QAAA,KAAa,MAAA,EAAQ;AACtC,UAAA,SAAA,CAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AACvD,IAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAQ;AAC9C,QAAA,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAGA,IAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,2BAAA,CAA4B,IAAI,CAAA;AAChE,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,uBAAA,CAAwB,CAAC,IAAI,CAAC,CAAA;AAI1D,IAAA,MAAM,iBAAA,GAAoB,SAAA,CAAU,MAAA,CAAO,CAAA,CAAA,KAAK;AAC9C,MAAA,IAAI,EAAE,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,MAAA,KAAW,QAAQ,OAAO,KAAA;AAGzD,MAAA,MAAM,gBAAgB,YAAA,CAAa,IAAA;AAAA,QAAK,CAAA,UAAA,KACtC,WAAW,UAAA,KAAe,UAAA,IAC1B,WAAW,kBAAA,KAAuB,CAAA,CAAE,EAAA,IACpC,UAAA,CAAW,MAAA,KAAW;AAAA,OACxB;AAEA,MAAA,OAAO,CAAC,aAAA;AAAA,IACV,CAAC,CAAA,CAAE,MAAA;AACH,IAAA,MAAM,YAAA,GAAe,WAAW,MAAA,GAAS,CAAA,GAAI,KAAK,GAAA,CAAI,GAAG,WAAW,GAAA,CAAI,CAAA,CAAA,KAAK,KAAK,kBAAA,CAAmB,CAAA,CAAE,EAAE,CAAC,CAAC,IAAI,IAAA,CAAK,kBAAA,CAAmB,KAAK,EAAE,CAAA;AAG9I,IAAA,MAAM,kBAA4B,EAAC;AACnC,IAAA,IAAI,kBAAA,GAAqB,CAAA,EAAG,eAAA,CAAgB,IAAA,CAAK,wCAAwC,CAAA;AACzF,IAAA,IAAI,oBAAoB,CAAA,EAAG,eAAA,CAAgB,IAAA,CAAK,CAAA,EAAG,iBAAiB,CAAA,oCAAA,CAAsC,CAAA;AAC1G,IAAA,IAAI,cAAA,GAAiB,CAAA,EAAG,eAAA,CAAgB,IAAA,CAAK,uCAAuC,CAAA;AAGpF,IAAA,IAAI,WAAA,GAAc,GAAA;AAClB,IAAA,IAAI,kBAAA,GAAqB,GAAG,WAAA,IAAe,EAAA;AAC3C,IAAA,IAAI,iBAAA,GAAoB,GAAG,WAAA,IAAe,EAAA;AAC1C,IAAA,IAAI,cAAA,GAAiB,GAAG,WAAA,IAAe,EAAA;AACvC,IAAA,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAA;AAErC,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,WAAA;AAAA,MACA,kBAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAA,GAAuD;AAE3D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAK;AAC7C,IAAA,MAAM,QAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,EAAE,CAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IACvC;AAGA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,mBAAA,CAAoB,KAAK,CAAA;AACjD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,KAAK,CAAA;AAC7C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAA;AAC/C,IAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ;AAC5C,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAQ,OAAO,KAAA;AACnC,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACrD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA,GAAK,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA;AACpE,MAAA,OAAO,aAAA,IAAiB,YAAA;AAAA,IAC1B,CAAC,CAAA,CAAE,MAAA;AAEH,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA;AAAA,MACA,qBAAA,EAAuB;AAAA;AAAA,KACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAA,GAAyD;AAE7D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC/C,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AACvD,IAAA,MAAM,aAAgC,EAAC;AACvC,IAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,EAAQ,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IAC5C;AAGA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,qBAAA,CAAsB,MAAA,EAAQ,UAAU,CAAA;AAClE,IAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,WAAS,KAAA,CAAM,IAAA,KAAS,OAAO,CAAA,CAAE,MAAA;AACnE,IAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,WAAS,KAAA,CAAM,IAAA,KAAS,OAAO,CAAA,CAAE,MAAA;AACnE,IAAA,MAAM,gBAAA,GAAmB,WAAA,GAAc,CAAA,GAAK,YAAA,GAAe,cAAe,GAAA,GAAM,CAAA;AAChF,IAAA,MAAM,eAAA,GAAkB,WAAA,GAAc,CAAA,GAAI,WAAA,GAAc,WAAA,GAAc,CAAA;AACtE,IAAA,MAAM,qBAAqB,IAAA,CAAK,GAAA,CAAI,KAAM,YAAA,GAAe,EAAA,GAAO,mBAAmB,CAAE,CAAA;AAErF,IAAA,OAAO;AAAA,MACL,YAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,4BAA4B,IAAA,EAA0B;AACpD,IAAA,IAAI;AAEF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AAIxD,MAAA,MAAM,eAAA,GAAkB,gBAAA;AAExB,MAAA,MAAM,cAAc,WAAA,GAAc,eAAA;AAClC,MAAA,MAAM,QAAA,GAAW,WAAA,IAAe,EAAA,GAAK,EAAA,GAAK,EAAA,CAAA;AAE1C,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA;AAAA,IAC7B,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kDAAA,EAAqD,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AAAA,IAChF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB,KAAA,EAA6B;AAEnD,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAGF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ;AAClC,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AAChD,QAAA,OAAA,CAAQ,WAAA,GAAc,QAAA,KAAa,EAAA,GAAK,EAAA,GAAK,EAAA,CAAA;AAAA,MAC/C,CAAC,CAAA;AAED,MAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAG,SAAS,CAAC,CAAA;AAAA,IAC3C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,IAC3E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,6BAA6B,QAAA,EAAoC;AAE/D,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAGA,IAAA,MAAM,iBAAA,GAAoB,SAAS,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA;AAG3F,IAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,EAAG;AAClC,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,GAAA,CAAI,CAAA,CAAA,KAAK;AACtC,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,kBAAA,CAAmB,CAAA,CAAE,EAAE,CAAA;AACjD,QAAA,OAAA,CAAQ,WAAA,GAAc,YAAA,KAAiB,EAAA,GAAK,EAAA,GAAK,EAAA,CAAA;AAAA,MACnD,CAAC,CAAA;AAED,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAAA,IACzB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,sEAAsE,CAAA;AAAA,IACxF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,KAAA,EAA6B;AAE3C,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,cAAc,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AACnE,MAAA,MAAM,YAAY,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAC/D,MAAA,MAAM,gBAAgB,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,UAAU,CAAA,CAAE,MAAA;AACvE,MAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AACjE,MAAA,MAAM,cAAc,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AACnE,MAAA,MAAM,cAAc,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AACnE,MAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AAMjE,MAAA,MAAM,YAAA,GAAgB,SAAA,GAAY,GAAA,GAAQ,aAAA,GAAgB,GAAA,GAAQ,WAAA,GAAc,EAAA,GAAO,UAAA,GAAa,EAAA,GAAO,WAAA,GAAc,EAAA,GAAO,UAAA,GAAa,KAAO,WAAA,GAAc,CAAA;AAElK,MAAA,MAAM,gBAAA,GAAmB,MAAM,MAAA,GAAS,GAAA;AAExC,MAAA,IAAI,qBAAqB,CAAA,EAAG;AAC1B,QAAA,OAAO,CAAA;AAAA,MACT;AAEA,MAAA,OAAO,IAAA,CAAK,KAAA,CAAO,YAAA,GAAe,gBAAA,GAAoB,GAAG,CAAA;AAAA,IAC3D,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,6BAA6B,KAAA,EAA6C;AAExE,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,OAAA,EAAS,QAAA,EAAU,SAAS,QAAA,EAAU,MAAA,EAAQ,YAAY,QAAQ,CAAA;AACzF,IAAA,MAAM,eAAuC,EAAC;AAG9C,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,cAAc,QAAA,CAAS,IAAA,CAAK,MAAM,CAAC,CAAA;AAG3E,IAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,KAAA,MAAW,UAAU,aAAA,EAAe;AAClC,MAAA,MAAM,QAAQ,UAAA,CAAW,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAChE,MAAA,YAAA,CAAa,MAAM,CAAA,GAAK,KAAA,GAAQ,UAAA,CAAW,MAAA,GAAU,GAAA;AAAA,IACvD;AAEA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,2BAA2B,KAAA,EAA6B;AAEtD,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,kBAAA,GAAqB,WAAA,GAAe,EAAA,GAAK,EAAA,GAAK,EAAA;AAEpD,MAAA,OAAO,KAAA,CAAM,OAAO,CAAA,IAAA,KAAQ;AAC1B,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACpD,QAAA,OAAO,YAAA,IAAgB,kBAAA;AAAA,MACzB,CAAC,CAAA,CAAE,MAAA;AAAA,IACL,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,IAC1F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,KAAA,EAA6B;AAE/C,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,YAAA,GAAe,WAAA,GAAe,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA;AAElD,MAAA,OAAO,KAAA,CAAM,OAAO,CAAA,IAAA,KAAQ;AAC1B,QAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAQ,OAAO,KAAA;AAEnC,QAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACtD,QAAA,OAAO,cAAA,IAAkB,YAAA;AAAA,MAC3B,CAAC,CAAA,CAAE,MAAA;AAAA,IACL,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,KAAA,EAA6B;AAE7C,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,iBAAiB,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,MAAM,CAAA;AAGlE,IAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAGF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,SAAA,GAAY,cAAA,CAAe,GAAA,CAAI,CAAA,IAAA,KAAQ;AAC3C,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACpD,QAAA,OAAA,CAAQ,WAAA,GAAc,YAAA,KAAiB,EAAA,GAAK,EAAA,GAAK,EAAA,CAAA;AAAA,MACnD,CAAC,CAAA;AAED,MAAA,OAAO,SAAA,CAAU,OAAO,CAAC,GAAA,EAAK,SAAS,GAAA,GAAM,IAAA,EAAM,CAAC,CAAA,GAAI,SAAA,CAAU,MAAA;AAAA,IACpE,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,IAChF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,KAAA,EAA6B;AAE9C,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,cAAc,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,MAAM,CAAA;AAG/D,IAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAGF,MAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,CAAI,CAAA,IAAA,KAAQ;AAEzC,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACpD,QAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,QAAA,MAAM,SAAA,GAAA,CAAa,WAAA,GAAc,YAAA,KAAiB,EAAA,GAAK,EAAA,GAAK,EAAA,CAAA;AAC5D,QAAA,OAAO,SAAA,GAAY,GAAA;AAAA,MACrB,CAAC,CAAA;AAED,MAAA,OAAO,UAAA,CAAW,OAAO,CAAC,GAAA,EAAK,SAAS,GAAA,GAAM,IAAA,EAAM,CAAC,CAAA,GAAI,UAAA,CAAW,MAAA;AAAA,IACtE,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAA,CAAsB,QAAuB,UAAA,EAAuC;AAElF,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAM,KAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AACxD,MAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,IAC1E;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,kBAAA,GAAqB,WAAA,GAAe,EAAA,GAAK,EAAA,GAAK,EAAA;AAGpD,MAAA,MAAM,gBAAA,GAAmB,UAAA,CAAW,MAAA,CAAO,CAAA,SAAA,KAAa;AACtD,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,kBAAA,CAAmB,SAAA,CAAU,EAAE,CAAA;AAC1D,QAAA,OAAO,aAAA,IAAiB,kBAAA;AAAA,MAC1B,CAAC,CAAA;AAGD,MAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AAEvC,MAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAE/B,QAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,CAAA,KAAA,KAAS,KAAA,CAAM,SAAS,OAAO,CAAA;AACjE,QAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAG/B,UAAA,cAAA,CAAe,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,QAC7B;AAAA,MACF;AAEA,MAAA,OAAO,cAAA,CAAe,IAAA;AAAA,IACxB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,IAC/E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,mBAAmB,EAAA,EAAoB;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAC1B,MAAA,MAAM,YAAY,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,IAAK,KAAK,EAAE,CAAA;AAG9C,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,IAAK,SAAA,IAAa,CAAA,EAAG;AACtC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,EAAE,CAAA,CAAE,CAAA;AAAA,MAClD;AAEA,MAAA,OAAO,SAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oDAAA,EAAuD,EAAE,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,KAAA,EAA6C;AACtE,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,MAAA,MAAA,CAAO,MAAM,CAAA,GAAA,CAAK,MAAA,CAAO,MAAM,KAAK,CAAA,IAAK,CAAA;AAAA,IAC3C;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,KAAA,EAA6C;AACxE,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,MAAA,MAAA,CAAO,QAAQ,CAAA,GAAA,CAAK,MAAA,CAAO,QAAQ,KAAK,CAAA,IAAK,CAAA;AAAA,IAC/C;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB,MAAA,EAA8B;AAC7C,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,oBAAoB,MAAA,EAA8B;AAChD,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,wBAAwB,MAAA,EAA8B;AACpD,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,gCAAgC,MAAA,EAA8C;AAC5E,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,2BAA2B,MAAA,EAA8B;AACvD,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,4BAA4B,MAAA,EAA8B;AACxD,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,0BAA0B,MAAA,EAA8B;AACtD,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,iCAAiC,MAAA,EAA8B;AAC7D,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,YAAA,EAA0C;AAC9D,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AAAA,EAEA,0BAA0B,YAAA,EAA0C;AAClE,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AAAA,EAEA,iCAAiC,YAAA,EAA0D;AACzF,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AAAA,EAEA,uBAAA,CAAwB,QAAsB,SAAA,EAAqC;AACjF,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AAAA,EAEA,4BAA4B,WAAA,EAAwC;AAClE,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AACF,CAAA;;;ACjpBA,IAAA,uBAAA,GAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACuCO,IAAM,iBAAN,MAAgD;AAAA,EACpC,YAAA;AAAA,EAEjB,YAAY,YAAA,EAA4B;AACtC,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,GAA6C;AACjD,IAAA,IAAI,OAAA,GAAU,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,EAAY;AAGlD,IAAA,IAAI,OAAA,IAAW,CAAC,OAAA,CAAQ,WAAA,EAAa,OAAA,EAAS;AAC5C,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,uBAAA,EAAwB;AAC3D,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,OAAA,CAAQ,WAAA,GAAc;AAAA,UACpB,OAAA,EAAS,eAAA;AAAA,UACT,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,SACpC;AACA,QAAA,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AAAA,MAC7C;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,uBAAA,EAAwB;AAC3D,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,MAAM,UAAA,GAA4B;AAAA,UAChC,WAAA,EAAa;AAAA,YACX,OAAA,EAAS,eAAA;AAAA,YACT,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACpC;AAAA,UACA,YAAY;AAAC,SACf;AACA,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,UAAU,CAAA;AAC9C,UAAA,OAAO,UAAA;AAAA,QACT,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,UAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAA,GAAkD;AACtD,IAAA,IAAI,IAAA,CAAK,aAAa,uBAAA,EAAyB;AAC7C,MAAA,OAAO,IAAA,CAAK,aAAa,uBAAA,EAAwB;AAAA,IACnD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAA6C;AAC/D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,EAAY;AACvC,IAAA,OAAO,OAAA,EAAS,UAAA,GAAa,OAAO,CAAA,IAAK,IAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CAAiB,OAAA,EAAiB,KAAA,EAA2C;AACjF,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,MAAiB,EAAC;AAC7C,IAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,EAAY,OAAA,CAAQ,aAAa,EAAC;AAE/C,IAAA,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA,GAAI;AAAA,MAC5B,GAAG,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA;AAAA,MAC7B,GAAG,KAAA;AAAA,MACH,QAAA,EAAA,iBAAU,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,KACnC;AAGA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,EAAG;AAChC,MAAA,OAAA,CAAQ,WAAA,GAAc;AAAA,QACpB,OAAA;AAAA,QACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,OACpC;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAA,GAA+C;AACnD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,EAAY;AACvC,IAAA,OAAO,OAAA,EAAS,OAAO,YAAA,IAAgB,IAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,GAAuE;AAC3E,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,EAAY;AACvC,IAAA,OAAO,SAAS,eAAA,IAAmB,IAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,sBAAsB,WAAA,EAAmD;AAC7E,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,MAAiB,EAAC;AAE7C,IAAA,IAAI,CAAC,QAAQ,eAAA,EAAiB;AAC5B,MAAA,OAAA,CAAQ,kBAAkB,EAAC;AAAA,IAC7B;AAEA,IAAA,IAAI,YAAY,aAAA,EAAe;AAC7B,MAAA,OAAA,CAAQ,gBAAgB,aAAA,GAAgB;AAAA,QACtC,GAAG,QAAQ,eAAA,CAAgB,aAAA;AAAA,QAC3B,GAAG,WAAA,CAAY;AAAA,OACjB;AAAA,IACF;AAEA,IAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,MAAA,OAAA,CAAQ,gBAAgB,WAAA,GAAc;AAAA,QACpC,GAAG,QAAQ,eAAA,CAAgB,WAAA;AAAA,QAC3B,GAAG,WAAA,CAAY;AAAA,OACjB;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,GAAyE;AAC7E,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,EAAY;AACvC,IAAA,OAAO,SAAS,WAAA,IAAe,IAAA;AAAA,EACjC;AACF,CAAA;;;ACvJA,IAAM,cAAA,GAAuC;AAAA,EAC3C,gBAAA,EAAkB;AAAA,IAChB,YAAA,EAAc,EAAA;AAAA,IACd,cAAA,EAAgB,CAAA;AAAA,IAChB,cAAA,EAAgB;AAAA;AAEpB,CAAA;AAQO,IAAM,iBAAN,MAAgD;AAAA,EAC7C,MAAA;AAAA,EAEA,eAAA;AAAA,EACA,cAAA;AAAA,EAEA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA;AAAA;AAAA,EAGA,cAAA;AAAA,EACA,MAAA;AAAA,EAGR,YAAY,YAAA,EAA0C;AAEpD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAG3B,IAAA,IAAA,CAAK,kBAAkB,YAAA,CAAa,eAAA;AACpC,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AAGnC,IAAA,IAAA,CAAK,kBAAkB,YAAA,CAAa,eAAA;AACpC,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAE7B,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AAGnC,IAAA,IAAA,CAAK,MAAA,GAAS,aAAa,MAAA,IAAU,cAAA;AAGrC,IAAA,IAAA,CAAK,uBAAA,EAAwB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAA,GAAgC;AACtC,IAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,MAAgC,kBAAA;AAAA,MAAoB,CAAC,KAAA,KACjE,IAAA,CAAK,qBAAA,CAAsB,KAAK;AAAA,KAClC;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,MAAiC,mBAAA;AAAA,MAAqB,CAAC,KAAA,KACnE,IAAA,CAAK,sBAAA,CAAuB,KAAK;AAAA,KACnC;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,MAAiC,mBAAA;AAAA,MAAqB,CAAC,KAAA,KACnE,IAAA,CAAK,sBAAA,CAAuB,KAAK;AAAA,KACnC;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,MAAmC,sBAAA;AAAA,MAAwB,CAAC,KAAA,KACxE,IAAA,CAAK,wBAAA,CAAyB,KAAK;AAAA,KACrC;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,MAAgC,mBAAA;AAAA,MAAqB,CAAC,KAAA,KAClE,IAAA,CAAK,eAAA,CAAgB,KAAK;AAAA,KAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAA,CAAW,OAAA,EAA8B,OAAA,EAAsC;AAEnF,IAAA,MAAM,gBAAA,GAAmB,iBAAiB,OAAO,CAAA;AAGjD,IAAA,MAAM,cAAA,GAAyD;AAAA,MAC7D,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,MAAA;AAAA,QACN,eAAA,EAAiB,kCAAA;AAAA,QACjB,YAAY,CAAC;AAAA,UACX,KAAA,EAAO,OAAA;AAAA,UACP,IAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO,cAAA;AAAA,UACP,SAAA,EAAW,aAAA;AAAA,UACX,SAAA,EAAW,KAAK,GAAA;AAAI,SACrB;AAAA,OACH;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,OAAA,EAAS,UAAU,cAAc,CAAA;AAGrG,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,cAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,QAAQ,gBAAA,CAAiB,EAAA;AAAA,QACzB;AAAA,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,SAAS,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,cAAA,EAAiB,iBAAiB,EAAE,CAAA,CAAA;AAAA,QAC1D,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,aAAA,EAAe;AAAA;AACjB,KACmB,CAAA;AAErB,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,MAAA,EAA4C;AACxD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACjD,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,GAAqC;AACzC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAK;AACzC,IAAA,MAAM,QAAsB,EAAC;AAE7B,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,EAAE,CAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,KAAA,CAAM,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,MAAA,EAAgB,OAAA,EAAsC;AAErE,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AAGxB,IAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,MAAM,CAAA,uBAAA,CAAyB,CAAA;AAAA,IACjF;AAGA,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAGzC,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,eAAA,CAAgB,iBAAA,CAAkB,SAAS,QAAA,EAAU;AAAA,MACrF,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO;AAAA,KAC/B,CAAA;AAED,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0EAAA,EAAwE,MAAM,CAAA,CAAE,CAAA;AAAA,IAClG;AAGA,IAAA,MAAM,cAAA,GAA6B,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAkB;AACxE,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,aAAA,EAAe,OAAA,EAAS,aAAa,2BAA2B,CAAA;AACpH,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,OAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX;AAAA;AACF,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,MAAA,EAAgB,OAAA,EAAsC;AAEtE,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAGzC,IAAA,MAAM,oBAAA,GAAuB,MAAM,IAAA,CAAK,uBAAA,CAAwB,KAAK,MAAM,CAAA;AAC3E,IAAA,MAAM,qBAAqB,oBAAA,CAAqB,IAAA;AAAA,MAAK,CAAA,UAAA,KACnD,UAAA,CAAW,QAAA,EAAU,UAAA,IAAc,MAAA,CAAO,KAAK,UAAA,CAAW,QAAA,CAAS,UAAU,CAAA,CAAE,MAAA,GAAS;AAAA,KAC1F;AAEA,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8DAAA,EAAiE,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,IAChG;AAEA,IAAA,MAAM,cAAc,kBAAA,CAAmB,EAAA;AAGvC,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO,eAAA;AAAA,MACP,SAAA,EAAW,gBAAA;AAAA,MACX,SAAA,EAAW,KAAK,GAAA;AAAI,KACtB;AAGA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAY,CAAC,GAAG,UAAA,CAAW,MAAA,CAAO,YAAY,aAAa,CAAA;AAAA,MAC3D,YAAA,EAAc;AAAA,KAChB;AAGA,IAAA,MAAM,mBAAmB,MAAM,IAAA,CAAK,eAAA,CAAgB,iBAAA,CAAkB,eAAe,OAAO,CAAA;AAC5F,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,MAAM,IAAI,MAAM,CAAA,gEAAA,CAAkE,CAAA;AAAA,IACpF;AAGA,IAAA,MAAM,cAAA,GAA6B,EAAE,GAAG,IAAA,EAAM,QAAQ,WAAA,EAAoC;AAC1F,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAE/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,aAAA,EAAe,OAAA,EAAS,UAAA,EAAY,CAAA,eAAA,EAAkB,IAAA,CAAK,MAAM,CAAA,QAAA,EAAM,WAAW,CAAA,CAAE,CAAA;AACxI,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,WAAW,IAAA,CAAK,MAAA;AAAA,QAChB,SAAA,EAAW,WAAA;AAAA,QACX;AAAA;AACF,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CAAa,MAAA,EAAgB,OAAA,EAAsC;AAEvE,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAGzC,IAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAM,CAAA,yCAAA,CAA2C,CAAA;AAAA,IAC/G;AAGA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO,UAAA;AAAA,MAC9B,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,gBAAgB,iBAAA,CAAkB,OAAA,EAAS,UAAU,OAAO,CAAA;AAC9F,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,CAAA,sEAAA,CAAmE,CAAA;AAAA,IACrF;AAGA,IAAA,MAAM,cAAA,GAA6B,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAS;AAC/D,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,aAAA,EAAe,OAAA,EAAS,YAAY,gBAAgB,CAAA;AACxG,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,MAClD,YAAA,EAAc;AAAA,KACf,CAAA;AAGD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,OAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX;AAAA;AACF,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAU,MAAA,EAAgB,OAAA,EAAiB,MAAA,EAAsC;AAErF,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AAGxB,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAM,CAAA,wCAAA,CAA0C,CAAA;AAAA,IAC9G;AAGA,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAEzC,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO,UAAA;AAAA,MAC9B,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,gBAAgB,iBAAA,CAAkB,QAAA,EAAU,UAAU,OAAO,CAAA;AAC/F,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,yEAAoE,CAAA;AAAA,IACtF;AAGA,IAAA,MAAM,cAAA,GAA6B;AAAA,MACjC,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,QAAA;AAAA;AAAA,MAER,GAAI,MAAA,IAAU;AAAA,QACZ,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,KAAA,IAAS,EAAE;AAAA,SAAA,EAAc,MAAM,sBAAK,IAAI,IAAA,IAAO,WAAA,EAAa,IAAI,IAAA;AAAK;AACtF,KACF;AACA,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,aAAA,EAAe,OAAA,EAAS,QAAA,EAAU,CAAA,aAAA,EAAgB,MAAA,IAAU,oBAAoB,CAAA,CAAE,CAAA;AACtI,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,MAClD,YAAA,EAAc;AAAA,KACf,CAAA;AAGD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX,OAAA;AAAA,QACA,QAAQ,MAAA,IAAU;AAAA;AACpB,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,MAAA,EAAgB,OAAA,EAAiB,QAAiB,KAAA,EAA4B;AAE7F,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AAGxB,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAM,CAAA,yCAAA,CAA2C,CAAA;AAAA,IAC/G;AAGA,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAEzC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,aAAa,MAAM,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,KAAK,EAAE,CAAA;AAClE,MAAA,IAAI,UAAA,CAAW,oBAAoB,CAAA,EAAG;AACpC,QAAA,MAAM,IAAI,MAAM,gGAAgG,CAAA;AAAA,MAClH;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO,UAAA;AAAA,MAC9B,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,gBAAgB,iBAAA,CAAkB,QAAA,EAAU,UAAU,OAAO,CAAA;AAC/F,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,yEAAoE,CAAA;AAAA,IACtF;AAGA,IAAA,MAAM,cAAA,GAA6B,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAS;AAC/D,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,aAAA,EAAe,OAAA,EAAS,WAAW,cAAc,CAAA;AACrG,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,MAClD,YAAA,EAAc;AAAA,KACf,CAAA;AAGD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX;AAAA;AACF,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CAAa,MAAA,EAAgB,OAAA,EAAsC;AAEvE,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAGzC,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAM,CAAA,yCAAA,CAA2C,CAAA;AAAA,IAC/G;AAGA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO,UAAA;AAAA,MAC9B,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,gBAAgB,iBAAA,CAAkB,QAAA,EAAU,QAAQ,OAAO,CAAA;AAC7F,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,CAAA,qEAAA,CAAkE,CAAA;AAAA,IACpF;AAGA,IAAA,MAAM,cAAA,GAA6B,EAAE,GAAG,IAAA,EAAM,QAAQ,MAAA,EAAO;AAC7D,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,aAAA,EAAe,OAAA,EAAS,YAAY,gBAAgB,CAAA;AACxG,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,MAClD,YAAA,EAAc;AAAA,KACf,CAAA;AAGD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW,MAAA;AAAA,QACX;AAAA;AACF,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,CAAY,MAAA,EAAgB,OAAA,EAAiB,MAAA,EAAsC;AAEvF,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAGzC,IAAA,IAAI,CAAC,CAAC,OAAA,EAAS,QAAA,EAAU,QAAQ,CAAA,CAAE,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA,EAAG;AAExD,MAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qFAAA,EAAwF,MAAM,CAAA,wBAAA,CAA0B,CAAA;AAAA,MAC1I;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAM,CAAA,oGAAA,CAAsG,CAAA;AAAA,IAC1K;AAGA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO,UAAA;AAAA,MAC9B,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,eAAA,CAAgB,kBAAkB,IAAA,CAAK,MAAA,EAAQ,aAAa,OAAO,CAAA;AACrG,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0CAAA,EAA6C,IAAA,CAAK,MAAM,CAAA,0BAAA,CAAuB,CAAA;AAAA,IACjG;AAGA,IAAA,MAAM,cAAA,GAA6B;AAAA,MACjC,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,WAAA;AAAA;AAAA,MAER,GAAI,MAAA,IAAU;AAAA,QACZ,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,KAAA,IAAS,EAAE;AAAA,EAAK,IAAA,CAAK,MAAA,KAAW,QAAA,GAAW,YAAA,GAAe,aAAa,CAAA,CAAA,EAAI,MAAM,CAAA,EAAA,EAAA,iBAAK,IAAI,IAAA,EAAK,EAAE,WAAA,EAAa,IAAI,IAAA;AAAK;AACxI,KACF;AACA,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,aAAA,EAAe,OAAA,EAAS,WAAA,EAAa,CAAA,gBAAA,EAAmB,MAAA,IAAU,oBAAoB,CAAA,CAAE,CAAA;AAC5I,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,MAClD,YAAA,EAAc;AAAA,KACf,CAAA;AAGD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,WAAW,IAAA,CAAK,MAAA;AAAA,QAChB,SAAA,EAAW,WAAA;AAAA,QACX,OAAA;AAAA,QACA,MAAA,EAAQ,MAAA,KAAW,IAAA,CAAK,MAAA,KAAW,WAAW,eAAA,GAAkB,gBAAA;AAAA;AAClE,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAA,CAAW,MAAA,EAAgB,OAAA,EAAgC;AAE/D,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AAGxB,IAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAE3B,MAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sFAAA,EAAyF,MAAM,CAAA,gCAAA,CAAkC,CAAA;AAAA,MACnJ,WAAW,IAAA,CAAK,MAAA,KAAW,OAAA,IAAW,IAAA,CAAK,WAAW,QAAA,EAAU;AAC9D,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+CAAA,EAAkD,KAAK,MAAM,CAAA,iCAAA,EAAoC,MAAM,CAAA,4CAAA,CAA8C,CAAA;AAAA,MACvK;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+CAAA,EAAkD,IAAA,CAAK,MAAM,CAAA,yCAAA,CAA2C,CAAA;AAAA,IAC1H;AAGA,IAAA,MAAM,IAAA,CAAK,SAAS,OAAO,CAAA;AAG3B,IAAA,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAGrC,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,OAAA;AAAA,QACX,SAAA,EAAW,SAAA;AAAA,QACX,OAAA;AAAA,QACA,MAAA,EAAQ;AAAA;AACV,KACyB,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAA,CAAW,MAAA,EAAgB,OAAA,EAA8B,OAAA,EAAsC;AACnG,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAGA,IAAA,IAAI,CAAC,UAAU,CAAA,CAAE,SAAS,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,EAAG;AACpD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2DAAA,EAA8D,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,IAC3G;AAGA,IAAA,MAAM,cAAA,GAAiB,iBAAiB,EAAE,GAAG,WAAW,OAAA,EAAS,GAAG,SAAS,CAAA;AAC7E,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,aAAA,EAAe,OAAA,EAAS,UAAU,cAAc,CAAA;AACpG,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAEjE,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,wBAAwB,OAAA,EAAwC;AAEpE,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAK;AACrD,IAAA,MAAM,kBAA4B,EAAC;AAEnC,IAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,MAAA,IACF,OAAO,OAAA,CAAQ,IAAA,KAAS,gBACxB,MAAA,CAAO,OAAA,CAAQ,aAAa,OAAA,EAAS;AACrC,QAAA,eAAA,CAAgB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA;AAAA,MAC9C;AAAA,IACF;AAGA,IAAA,MAAM,gBAAgB,CAAC,GAAG,IAAI,GAAA,CAAI,eAAe,CAAC,CAAA;AAGlD,IAAA,MAAM,gBAA8B,EAAC;AACrC,IAAA,KAAA,MAAW,UAAU,aAAA,EAAe;AAClC,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AACtC,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA,MACzB;AAAA,IACF;AAEA,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,sBAAsB,KAAA,EAA4C;AACtE,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAA0B;AAAA,QAC9B,OAAA,EAAS,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,CAAA,wBAAA,CAAA;AAAA,QACtB,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,WAAA,EAAa,KAAK,GAAA,EAAI;AAAA,QACtB,aAAA,EAAe;AAAA,OACjB;AAGA,MAAA,IAAI,MAAM,OAAA,CAAQ,IAAA,KAAS,cAAc,KAAA,CAAM,OAAA,CAAQ,eAAe,MAAA,EAAQ;AAE5E,QAAA,MAAM,OAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,QAAQ,QAAQ,CAAA;AACtD,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,6BAAA,EAAgC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,CAAE,CAAA;AACrE,UAAA;AAAA,QACF;AAGA,QAAA,IAAI,CAAC,CAAC,QAAA,EAAU,OAAO,EAAE,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA,EAAG;AAC9C,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,WAAA,GAAc,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAkB;AACzD,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,GAAA,CAAI,KAAK,EAAE,CAAA;AACtD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,WAAA,EAAY;AAC5D,UAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AAGnE,UAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,YACpB,IAAA,EAAM,qBAAA;AAAA,YACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,YACpB,MAAA,EAAQ,iBAAA;AAAA,YACR,OAAA,EAAS;AAAA,cACP,QAAQ,IAAA,CAAK,EAAA;AAAA,cACb,WAAW,IAAA,CAAK,MAAA;AAAA,cAChB,SAAA,EAAW,QAAA;AAAA,cACX,OAAA,EAAS;AAAA,aACX;AAAA,YACA;AAAA,WACyB,CAAA;AAAA,QAC7B;AACA,QAAA;AAAA,MACF;AAIA,MAAA,IACE,KAAA,CAAM,OAAA,CAAQ,UAAA,KAAe,UAAA,IAC7B,KAAA,CAAM,QAAQ,MAAA,KAAW,UAAA,IACzB,KAAA,CAAM,OAAA,CAAQ,kBAAA,EACd;AAEA,QAAA,MAAM,mBAAmB,MAAM,IAAA,CAAK,gBAAgB,WAAA,CAAY,KAAA,CAAM,QAAQ,kBAAkB,CAAA;AAChG,QAAA,IAAI,CAAC,gBAAA,IAAoB,gBAAA,CAAiB,IAAA,KAAS,UAAA,EAAY;AAC7D,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,iBAAiB,QAAQ,CAAA;AACzD,QAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,QAAA,EAAU;AACrC,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,KAAK,EAAE,CAAA;AAClE,QAAA,IAAI,UAAA,CAAW,oBAAoB,CAAA,EAAG;AACpC,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,WAAA,GAAc,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAkB;AACzD,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,GAAA,CAAI,KAAK,EAAE,CAAA;AACtD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,WAAA,EAAY;AAC5D,UAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AAEnE,UAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,YACpB,IAAA,EAAM,qBAAA;AAAA,YACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,YACpB,MAAA,EAAQ,iBAAA;AAAA,YACR,OAAA,EAAS;AAAA,cACP,QAAQ,IAAA,CAAK,EAAA;AAAA,cACb,SAAA,EAAW,QAAA;AAAA,cACX,SAAA,EAAW,QAAA;AAAA,cACX,OAAA,EAAS;AAAA,aACX;AAAA,YACA;AAAA,WACyB,CAAA;AAAA,QAC7B;AACA,QAAA;AAAA,MACF;AAAA,IAGF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,mCAAmC,KAAK,CAAA;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,uBAAuB,KAAA,EAA6C;AACxE,IAAA,IAAI;AAEF,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,gBAAA,EAAkB;AACnC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,QAAQ,MAAM,CAAA;AACpD,MAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,OAAA,EAAS;AACpC,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,QAAQ,WAAW,CAAA;AAC3D,MAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,eAAA,CAAgB,iBAAA,CAAkB,SAAS,QAAA,EAAU;AAAA,QACrF,IAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAY;AAAC,OACd,CAAA;AAED,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,wDAAA,EAAsD,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AAC5E,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,WAAA,GAAc,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAkB;AACzD,MAAA,MAAM,aAAa,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,GAAA,CAAI,KAAK,EAAE,CAAA;AACtD,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,WAAA,EAAY;AAC5D,QAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AAEnE,QAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,UACpB,IAAA,EAAM,qBAAA;AAAA,UACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,UACpB,MAAA,EAAQ,iBAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,QAAQ,IAAA,CAAK,EAAA;AAAA,YACb,SAAA,EAAW,OAAA;AAAA,YACX,SAAA,EAAW,QAAA;AAAA,YACX,OAAA,EAAS,MAAM,OAAA,CAAQ;AAAA;AACzB,SACyB,CAAA;AAAA,MAC7B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,IACzD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAuB,KAAA,EAA6C;AACxE,IAAA,IAAI;AAEF,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,GAAA,CAAI,KAAA,CAAM,QAAQ,WAAW,CAAA;AAClF,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qBAAA,EAAwB,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,CAAE,CAAA;AAChE,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,CAAC,gBAAgB,OAAA,CAAQ,YAAA,IAAgB,gBAAgB,OAAA,CAAQ,YAAA,CAAa,WAAW,CAAA,EAAG;AAC9F,QAAA;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,MAAA,IAAU,eAAA,CAAgB,OAAA,CAAQ,YAAA,EAAc;AACzD,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AACtC,QAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,MAAA,EAAQ;AACnC,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,WAAA,GAAc,EAAE,GAAG,IAAA,EAAM,QAAQ,UAAA,EAAoB;AAC3D,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,GAAA,CAAI,KAAK,EAAE,CAAA;AACtD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,WAAA,EAAY;AAC5D,UAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AAEnE,UAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,YACpB,IAAA,EAAM,qBAAA;AAAA,YACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,YACpB,MAAA,EAAQ,iBAAA;AAAA,YACR,OAAA,EAAS;AAAA,cACP,QAAQ,IAAA,CAAK,EAAA;AAAA,cACb,SAAA,EAAW,MAAA;AAAA,cACX,SAAA,EAAW,UAAA;AAAA,cACX,OAAA,EAAS;AAAA;AACX,WACyB,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,IACzD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,MAAA,EAA6C;AACjE,IAAA,IAAI;AAEF,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,cAAA,CAAe,eAAA,EAAgB;AAG/D,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,EAAY;AACxC,MAAA,MAAM,cAAc,QAAA,CAAS,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,QAAQ,CAAA;AAEpE,MAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,KAAK,EAAE,CAAA;AAGlE,QAAA,IAAI,UAAA,CAAW,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,YAAA,IACxD,UAAA,CAAW,kBAAA,GAAqB,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,cAAA,EAAgB;AAE7E,UAAA,MAAM,IAAA,CAAK,gBAAgB,MAAA,CAAO;AAAA,YAChC,UAAA,EAAY,MAAA;AAAA,YACZ,UAAU,IAAA,CAAK,EAAA;AAAA,YACf,IAAA,EAAM,YAAA;AAAA,YACN,OAAA,EAAS,kDAAkD,UAAA,CAAW,WAAW,MAAM,UAAA,CAAW,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,YAC5H,MAAA,EAAQ;AAAA,aACP,QAAQ,CAAA;AAAA,QACb;AAAA,MACF;AAGA,MAAA,IAAI,aAAa,MAAA,CAAO,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,iBAAiB,cAAA,EAAgB;AAClF,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,2BAAA,EAA8B,YAAA,CAAa,MAAA,CAAO,YAAY,CAAA,YAAA,EAAe,YAAA,CAAa,MAAA,CAAO,YAAY,CAAA,SAAA,EAAY,YAAA,CAAa,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAAA,MAGxK;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,KAAK,CAAA;AAAA,IAClD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAyB,KAAA,EAA+C;AAC5E,IAAA,IAAI;AAEF,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAA,KAAc,WAAA,EAAa;AAC3C,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,QAAQ,OAAO,CAAA;AAChE,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,2BAAA,EAA8B,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAClE,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,YAAA,EAAa;AAC1C,MAAA,MAAM,eAAe,SAAA,CAAU,MAAA;AAAA,QAAO,WACpC,KAAA,CAAM,aAAA,EAAe,QAAA,CAAS,KAAA,CAAM,QAAQ,OAAO;AAAA,OACrD;AAEA,MAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AAEtC,QAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,GAAA;AAAA,UAAA,CAC/B,WAAA,CAAY,iBAAiB,EAAC,EAAG,IAAI,CAAA,EAAA,KAAM,IAAA,CAAK,QAAA,CAAS,EAAE,CAAC;AAAA,SAC/D;AAEA,QAAA,MAAM,uBAAuB,WAAA,CAAY,KAAA;AAAA,UAAM,CAAA,KAAA,KAC7C,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW;AAAA,SAC5B;AAEA,QAAA,IAAI,oBAAA,EAAsB;AAExB,UAAA,MAAM,KAAK,WAAA,CAAY,WAAA,CAAY,IAAI,EAAE,MAAA,EAAQ,aAAa,CAAA;AAe9D,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,WAAA,CAAY,EAAE,CAAA,mEAAA,CAAqE,CAAA;AAAA,QACjH;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,KAAK,CAAA;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAA,GAAyC;AAC7C,IAAA,OAAO,MAAM,IAAA,CAAK,cAAA,CAAe,eAAA,EAAgB;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,MAAA,EAA2C;AAC7D,IAAA,OAAO,MAAM,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,MAAM,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,SAAS,OAAA,EAAuC;AAE5D,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,OAAO,CAAA;AAClD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,CAAE,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,wBAAwB,UAAA,EAAgI;AAGpK,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,SAAS,QAAA,EAAU,EAAE,UAAA,EAAY,EAAE,aAAa,EAAE,IAAA,EAAM,UAAA,EAAW,IAAI,EAAE;AAAA,MAC/F,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,QAAQ,QAAA,EAAU,EAAE,UAAA,EAAY,EAAE,aAAa,EAAE,IAAA,EAAM,UAAA,EAAW,IAAI;AAAE,KAChG;AAEA,IAAA,OAAO,WAAA,CAAY,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAA,CAAY,OAAA,EAA+B,OAAA,EAAuC;AAEtF,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,OAAO,CAAA;AAGlD,IAAA,MAAM,cAAA,GAA0D;AAAA,MAC9D,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,eAAA,EAAiB,kCAAA;AAAA,QACjB,YAAY,CAAC;AAAA,UACX,KAAA,EAAO,OAAA;AAAA,UACP,IAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO,eAAA;AAAA,UACP,SAAA,EAAW,aAAA;AAAA,UACX,SAAA,EAAW,KAAK,GAAA;AAAI,SACrB;AAAA,OACH;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,OAAA,EAAS,UAAU,eAAe,CAAA;AAGtG,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGlE,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,eAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,SAAS,gBAAA,CAAiB,EAAA;AAAA,QAC1B;AAAA,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,SAAS,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,eAAA,EAAkB,iBAAiB,EAAE,CAAA,CAAA;AAAA,QAC3D,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,aAAA,EAAe;AAAA;AACjB,KACoB,CAAA;AAEtB,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,OAAA,EAA8C;AAC3D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACnD,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,GAAuC;AAC3C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC1C,IAAA,MAAM,SAAwB,EAAC;AAE/B,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,OAAA,EAAiB,OAAA,EAA+B,OAAA,EAAwC;AACxG,IAAA,MAAM,cAAc,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACxD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,CAAE,CAAA;AAAA,IACpE;AAGA,IAAA,IAAI,CAAC,UAAU,CAAA,CAAE,SAAS,WAAA,CAAY,OAAA,CAAQ,MAAM,CAAA,EAAG;AACrD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4DAAA,EAA+D,WAAA,CAAY,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,IAC7G;AAGA,IAAA,MAAM,cAAA,GAAiB,kBAAkB,EAAE,GAAG,YAAY,OAAA,EAAS,GAAG,SAAS,CAAA;AAC/E,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,WAAA,EAAa,SAAS,cAAA,EAAe;AAGhE,IAAA,IAAI,OAAA,EAAS;AAEX,MAAA,IAAI,eAAe,MAAA,KAAW,QAAA,IAAY,WAAA,CAAY,OAAA,CAAQ,WAAW,QAAA,EAAU;AACjF,QAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,UAClD,aAAA,EAAe;AAAA,SAChB,CAAA;AAAA,MACH,WAES,cAAA,CAAe,MAAA,KAAW,eAAe,WAAA,CAAY,OAAA,CAAQ,WAAW,WAAA,EAAa;AAC5F,QAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,UAClD,aAAA,EAAe;AAAA,SAChB,CAAA;AAAA,MACH;AAAA,IACF;AAGA,IAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,MAAA,KAAW,cAAA,CAAe,MAAA,EAAQ;AACxD,MAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,QACpB,IAAA,EAAM,sBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,iBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,OAAA;AAAA,UACA,SAAA,EAAW,YAAY,OAAA,CAAQ,MAAA;AAAA,UAC/B,WAAW,cAAA,CAAe,MAAA;AAAA,UAC1B,SAAS,OAAA,IAAW;AAAA;AACtB,OAC0B,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AACpE,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CAAe,OAAA,EAAiB,MAAA,EAA+B;AAEnE,IAAA,MAAM,cAAc,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACxD,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AAErD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,CAAE,CAAA;AAAA,IACpE;AACA,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAGA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,WAAA,CAAY,OAAA;AAAA,MACf,OAAA,EAAS,CAAC,GAAI,WAAA,CAAY,QAAQ,OAAA,IAAW,IAAK,MAAM;AAAA,KAC1D;AACA,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,UAAA,CAAW,OAAA;AAAA,MACd,QAAA,EAAU,CAAC,GAAI,UAAA,CAAW,QAAQ,QAAA,IAAY,IAAK,OAAO;AAAA,KAC5D;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,eAAA,EAAgB;AAGzD,IAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA;AAAA,MAC5C,EAAE,GAAG,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,MACxC,YAAA,CAAa,EAAA;AAAA,MACb,QAAA;AAAA,MACA,QAAQ,MAAM,CAAA,eAAA;AAAA,KAChB;AACA,IAAA,MAAM,gBAAA,GAAmB,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA;AAAA,MAC3C,EAAE,GAAG,UAAA,EAAY,OAAA,EAAS,WAAA,EAAY;AAAA,MACtC,YAAA,CAAa,EAAA;AAAA,MACb,QAAA;AAAA,MACA,wBAAwB,OAAO,CAAA;AAAA,KACjC;AAEA,IAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,MAChB,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,iBAAA,CAAkB,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAAA,MACtE,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,gBAAA,CAAiB,OAAA,CAAQ,IAAI,gBAAgB;AAAA,KACpE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBAAA,CAAqB,OAAA,EAAiB,OAAA,EAAkC;AAE5E,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,IACvE;AACA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AACnD,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AAGA,IAAA,MAAM,cAAc,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACxD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,CAAE,CAAA;AAAA,IACpE;AAGA,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,GAAA;AAAA,MAChC,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,KAAW;AAC5B,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,QAClE;AACA,QAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAW;AAAA,MACtC,CAAC;AAAA,KACH;AAGA,IAAA,MAAM,YAAA,GAAe,WAAA,CAAY,OAAA,CAAQ,OAAA,IAAW,EAAC;AACrD,IAAA,MAAM,cAAA,GAAiB,QAAQ,MAAA,CAAO,CAAA,MAAA,KAAU,CAAC,YAAA,CAAa,QAAA,CAAS,MAAM,CAAC,CAAA;AAC9E,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,MAAM,CAAA,2CAAA,EAA8C,OAAO,KAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACvG;AAGA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,WAAA,CAAY,OAAA;AAAA,MACf,OAAA,EAAS,aAAa,MAAA,CAAO,CAAA,EAAA,KAAM,CAAC,OAAA,CAAQ,QAAA,CAAS,EAAE,CAAC;AAAA,KAC1D;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,eAAA,EAAgB;AAGzD,IAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA;AAAA,MAC5C,EAAE,GAAG,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,MACxC,YAAA,CAAa,EAAA;AAAA,MACb,QAAA;AAAA,MACA,CAAA,0BAAA,EAA6B,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACjD;AAGA,IAAA,MAAM,iBAAA,GAAoB,MAAM,OAAA,CAAQ,GAAA;AAAA,MACtC,WAAA,CAAY,GAAA,CAAI,OAAO,EAAE,QAAO,KAAM;AACpC,QAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,QAAA,IAAY,EAAC;AACjD,QAAA,MAAM,WAAA,GAAc;AAAA,UAClB,GAAG,MAAA,CAAO,OAAA;AAAA,UACV,QAAA,EAAU,YAAA,CAAa,MAAA,CAAO,CAAA,EAAA,KAAM,OAAO,OAAO;AAAA,SACpD;AACA,QAAA,OAAO,MAAM,KAAK,QAAA,CAAS,UAAA;AAAA,UACzB,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,WAAA,EAAY;AAAA,UAClC,YAAA,CAAa,EAAA;AAAA,UACb,QAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAC;AAAA,KACH;AAGA,IAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,MAChB,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,iBAAA,CAAkB,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAAA,MACtE,GAAG,iBAAA,CAAkB,GAAA;AAAA,QAAI,CAAA,UAAA,KACvB,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,UAAA,CAAW,OAAA,CAAQ,IAAI,UAAU;AAAA;AACzD,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,sBAAA,CAAuB,aAAA,EAAuB,OAAA,EAAmB,aAAA,EAAsC;AAE3G,IAAA,IAAI,CAAC,aAAA,IAAiB,OAAO,aAAA,KAAkB,QAAA,EAAU;AACvD,MAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,IAC7E;AACA,IAAA,IAAI,CAAC,aAAA,IAAiB,OAAO,aAAA,KAAkB,QAAA,EAAU;AACvD,MAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,IAC7E;AACA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AACnD,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AACA,IAAA,IAAI,kBAAkB,aAAA,EAAe;AACnC,MAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,IAC/E;AAGA,IAAA,MAAM,CAAC,iBAAA,EAAmB,iBAAiB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC/D,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,aAAa,CAAA;AAAA,MACpC,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,aAAa;AAAA,KACrC,CAAA;AAED,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6CAAA,EAAgD,aAAa,CAAA,CAAE,CAAA;AAAA,IACjF;AACA,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6CAAA,EAAgD,aAAa,CAAA,CAAE,CAAA;AAAA,IACjF;AAGA,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,GAAA;AAAA,MAChC,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,KAAW;AAC5B,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,QAClE;AACA,QAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAW;AAAA,MACtC,CAAC;AAAA,KACH;AAGA,IAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,OAAA,CAAQ,OAAA,IAAW,EAAC;AAC5D,IAAA,MAAM,cAAA,GAAiB,QAAQ,MAAA,CAAO,CAAA,MAAA,KAAU,CAAC,aAAA,CAAc,QAAA,CAAS,MAAM,CAAC,CAAA;AAC/E,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,MAAM,CAAA,kDAAA,EAAqD,aAAa,KAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACpH;AAGA,IAAA,MAAM,kBAAA,GAAqB;AAAA,MACzB,GAAG,iBAAA,CAAkB,OAAA;AAAA,MACrB,OAAA,EAAS,cAAc,MAAA,CAAO,CAAA,EAAA,KAAM,CAAC,OAAA,CAAQ,QAAA,CAAS,EAAE,CAAC;AAAA,KAC3D;AACA,IAAA,MAAM,kBAAA,GAAqB;AAAA,MACzB,GAAG,iBAAA,CAAkB,OAAA;AAAA,MACrB,OAAA,EAAS,CAAC,GAAI,iBAAA,CAAkB,QAAQ,OAAA,IAAW,EAAC,EAAI,GAAG,OAAO;AAAA,KACpE;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,eAAA,EAAgB;AAGzD,IAAA,MAAM,CAAC,iBAAA,EAAmB,iBAAiB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC/D,KAAK,QAAA,CAAS,UAAA;AAAA,QACZ,EAAE,GAAG,iBAAA,EAAmB,OAAA,EAAS,kBAAA,EAAmB;AAAA,QACpD,YAAA,CAAa,EAAA;AAAA,QACb,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAK,QAAA,CAAS,UAAA;AAAA,QACZ,EAAE,GAAG,iBAAA,EAAmB,OAAA,EAAS,kBAAA,EAAmB;AAAA,QACpD,YAAA,CAAa,EAAA;AAAA,QACb,QAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAGD,IAAA,MAAM,iBAAA,GAAoB,MAAM,OAAA,CAAQ,GAAA;AAAA,MACtC,WAAA,CAAY,GAAA,CAAI,OAAO,EAAE,QAAO,KAAM;AACpC,QAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,QAAA,IAAY,EAAC;AACjD,QAAA,MAAM,WAAA,GAAc;AAAA,UAClB,GAAG,MAAA,CAAO,OAAA;AAAA,UACV,QAAA,EAAU,aACP,MAAA,CAAO,CAAA,EAAA,KAAM,OAAO,aAAa,CAAA,CACjC,OAAO,aAAa;AAAA;AAAA,SACzB;AACA,QAAA,OAAO,MAAM,KAAK,QAAA,CAAS,UAAA;AAAA,UACzB,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,WAAA,EAAY;AAAA,UAClC,YAAA,CAAa,EAAA;AAAA,UACb,QAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAC;AAAA,KACH;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,QAChB,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,iBAAA,CAAkB,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAAA,QACtE,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,iBAAA,CAAkB,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAAA,QACtE,GAAG,iBAAA,CAAkB,GAAA;AAAA,UAAI,CAAA,UAAA,KACvB,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,UAAA,CAAW,OAAA,CAAQ,IAAI,UAAU;AAAA;AACzD,OACD,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,CAAA,2DAAA,EAA8D,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAA;AAAA,IAC1I;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,IAAA,GAA4B;AAChC,IAAA,MAAM,IAAI,MAAM,+EAA+E,CAAA;AAAA,EACjG;AAAA;AAAA,EAGA,MAAM,KAAA,GAA8B;AAClC,IAAA,MAAM,IAAI,MAAM,iFAAiF,CAAA;AAAA,EACnG;AAAA;AAAA,EAGA,MAAM,eAAe,QAAA,EAAiD;AACpE,IAAA,MAAM,IAAI,MAAM,qGAAqG,CAAA;AAAA,EACvH;AACF,CAAA;;;ACz8CA,IAAA,yBAAA,GAAA;AAAA,QAAA,CAAA,yBAAA,EAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACYO,SAAS,8BACd,IAAA,EACuC;AACvC,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,eAAe,CAAA;AACtF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAI,CAAA;AAE9B,EAAA,OAAO,CAAC,OAAA,EAAS,SAAA,CAAU,MAAM,CAAA;AACnC;AAKO,SAAS,kBAAkB,IAAA,EAAwC;AACxE,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,6BAAA,CAA8B,IAAI,CAAA;AACpD,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,gCAAgC,IAAA,EAAiC;AAC/E,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,8BAA8B,IAAI,CAAA;AAE5D,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAC1D,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,QAAQ;AAAC,GACX;AACF;AAKA,eAAsB,2BAAA,CACpB,QACA,YAAA,EACe;AAEf,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,6BAAA,CAA8B,OAAO,OAAO,CAAA;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,iBAAA,EAAmB,eAAe,CAAA;AAAA,EACtE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,YAAY,CAAA;AAC/D;;;AC/DO,SAAS,sBAAsB,OAAA,EAAoD;AACxF,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAG9C,EAAA,MAAM,SAAA,GAA6B;AAAA;AAAA,IAEjC,EAAA,EAAI,QAAQ,EAAA,IAAM,EAAA;AAAA,IAClB,KAAA,EAAO,QAAQ,KAAA,IAAS,EAAA;AAAA,IACxB,WAAA,EAAa,QAAQ,WAAA,IAAe,EAAA;AAAA,IACpC,YAAA,EAAe,OAAA,CAAQ,YAAA,IAAgB,EAAC;AAAA,IACxC,WAAA,EAAa,QAAQ,WAAA,IAAe,SAAA;AAAA;AAAA,IAGpC,GAAI,OAAA,CAAQ,aAAA,IAAiB,EAAE,aAAA,EAAe,QAAQ,aAAA,EAAc;AAAA,IACpE,GAAI,OAAA,CAAQ,iBAAA,IAAqB,EAAE,iBAAA,EAAmB,QAAQ,iBAAA,EAAkB;AAAA,IAChF,GAAI,OAAA,CAAQ,OAAA,IAAW,EAAE,OAAA,EAAS,QAAQ,OAAA,EAAQ;AAAA,IAClD,GAAI,OAAA,CAAQ,IAAA,IAAQ,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,IACzC,GAAI,OAAA,CAAQ,OAAA,IAAW,EAAE,OAAA,EAAS,QAAQ,OAAA,EAAQ;AAAA,IAClD,GAAI,OAAA,CAAQ,KAAA,IAAS,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAM;AAAA,IAC5C,GAAI,OAAA,CAAQ,KAAA,IAAS,EAAE,KAAA,EAAO,QAAQ,KAAA;AAAM,GAC9C;AAGA,EAAA,MAAM,UAAA,GAAa,gCAAgC,SAAS,CAAA;AAC5D,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,iBAAA,EAAmB,UAAA,CAAW,MAAM,CAAA;AAAA,EACxE;AAEA,EAAA,OAAO,SAAA;AACT;AAWO,SAAS,oBAAoB,IAAA,EAAsC;AAExE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,gCAAA,EAAkC,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC/F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,+BAAA,CAAgC,MAAA,CAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,yBAAA,EAA2B,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC/CO,IAAM,mBAAN,MAAoD;AAAA,EACjD,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EAER,YAAY,YAAA,EAA4C;AACtD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,MAAA,CAAO,OAAA,EAAmC,OAAA,EAA2C;AAEzF,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,SAAS,EAAA,EAAI;AAC/C,MAAA,MAAM,IAAI,MAAM,+EAA+E,CAAA;AAAA,IACjG;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,WAAA,IAAe,OAAA,CAAQ,WAAA,CAAY,SAAS,EAAA,EAAI;AAC3D,MAAA,MAAM,IAAI,MAAM,qFAAqF,CAAA;AAAA,IACvG;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,YAAA,CAAa,WAAW,CAAA,EAAG;AAC9D,MAAA,MAAM,IAAI,MAAM,yFAAyF,CAAA;AAAA,IAC3G;AAGA,IAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,MAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,YAAA,EAAc;AACzC,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,QAClE;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,MAAA,KAAA,MAAW,OAAA,IAAW,QAAQ,aAAA,EAAe;AAC3C,QAAA,MAAM,cAAc,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACxD,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,CAAE,CAAA;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,SAAA,GAAY,QAAQ,WAAA,IAAe,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AACrE,MAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,QAAA,OAAA,CAAQ,EAAA,GAAK,mBAAA,CAAoB,OAAA,CAAQ,KAAA,EAAQ,SAAS,CAAA;AAAA,MAC5D;AAGA,MAAA,MAAM,gBAAA,GAAmB,sBAAsB,OAAO,CAAA;AAGtD,MAAA,MAAM,cAAA,GAA8D;AAAA,QAClE,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,KAAA;AAAA,UACT,IAAA,EAAM,WAAA;AAAA,UACN,eAAA,EAAiB,kCAAA;AAAA,UACjB,YAAY,CAAC;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,IAAA,EAAM,QAAA;AAAA,YACN,KAAA,EAAO,yBAAA;AAAA,YACP,SAAA,EAAW,aAAA;AAAA,YACX,SAAA,EAAW,KAAK,GAAA;AAAI,WACrB;AAAA,SACH;AAAA,QACA,OAAA,EAAS;AAAA,OACX;AAGA,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,OAAA,EAAS,UAAU,0BAA0B,CAAA;AAGjH,MAAA,MAAM,KAAK,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,gBAAA,CAAiB,IAAI,YAA2D,CAAA;AAGjH,MAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,QACpB,IAAA,EAAM,mBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,mBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,aAAa,gBAAA,CAAiB,EAAA;AAAA,UAC9B,cAAc,gBAAA,CAAiB,YAAA;AAAA,UAC/B,OAAO,gBAAA,CAAiB,KAAA;AAAA,UACxB,SAAS,gBAAA,CAAiB;AAAA;AAC5B,OACwB,CAAA;AAE1B,MAAA,OAAO,gBAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,yBAAyB,CAAA,EAAG;AAC/E,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,WAAA,EAAsD;AACvE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,WAAW,CAAA;AAC3D,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,MAAA,EAA4C;AACpE,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AAC9C,IAAA,MAAM,aAAgC,EAAC;AAEvC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,UAAU,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1D,QAAA,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,OAAA,EAA4D;AACjF,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AAC9C,IAAA,IAAI,aAAgC,EAAC;AAGrC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,EAAS,IAAA,IAAQ,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,EAAG;AAC5C,MAAA,UAAA,GAAa,UAAA,CAAW,OAAO,CAAA,SAAA,KAAa;AAC1C,QAAA,IAAI,CAAC,SAAA,CAAU,IAAA,EAAM,OAAO,KAAA;AAE5B,QAAA,OAAO,OAAA,CAAQ,KAAM,IAAA,CAAK,CAAA,GAAA,KAAO,UAAU,IAAA,CAAM,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,MAChE,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,UAAA,GAAa,WAAW,MAAA,CAAO,CAAA,SAAA,KAAa,SAAA,CAAU,OAAA,KAAY,QAAQ,OAAO,CAAA;AAAA,IACnF;AAGA,IAAA,MAAM,MAAA,GAAS,SAAS,MAAA,IAAU,aAAA;AAClC,IAAA,MAAM,SAAA,GAAY,SAAS,SAAA,IAAa,MAAA;AAExC,IAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACxB,MAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,MAAA,IAAI,WAAW,aAAA,EAAe;AAC5B,QAAA,YAAA,GAAe,CAAA,CAAE,cAAc,CAAA,CAAE,WAAA;AAAA,MACnC,CAAA,MAAA,IAAW,WAAW,OAAA,EAAS;AAC7B,QAAA,YAAA,GAAe,CAAA,CAAE,KAAA,CAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAA;AAAA,MAC9C;AAEA,MAAA,OAAO,SAAA,KAAc,KAAA,GAAQ,YAAA,GAAe,CAAC,YAAA;AAAA,IAC/C,CAAC,CAAA;AAGD,IAAA,IAAI,OAAA,EAAS,KAAA,IAAS,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAAG;AACvC,MAAA,UAAA,GAAa,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA;AAAA,IAChD;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,KAAA,EAA2C;AACnE,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,EAAiB;AAGlD,IAAA,MAAM,gBAAA,GAAmB,cAAc,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,WAAW,CAAA;AAGnF,IAAA,OAAO,gBAAA,CAAiB,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,qBAAA,CAAsB,QAAA,EAAkB,WAAA,EAAkD;AAC9F,IAAA,OAAO,IAAA,CAAK,oBAAoB,QAAQ,CAAA;AAAA,EAC1C;AACF,CAAA;;;ACjOA,IAAA,yBAAA,GAAA;AAAA,QAAA,CAAA,yBAAA,EAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACYO,SAAS,8BACd,IAAA,EACuC;AACvC,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,eAAe,CAAA;AACtF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAI,CAAA;AAE9B,EAAA,OAAO,CAAC,OAAA,EAAS,SAAA,CAAU,MAAM,CAAA;AACnC;AAKO,SAAS,kBAAkB,IAAA,EAAwC;AACxE,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,6BAAA,CAA8B,IAAI,CAAA;AACpD,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,gCAAgC,IAAA,EAAiC;AAC/E,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,8BAA8B,IAAI,CAAA;AAE5D,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAC1D,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,QAAQ;AAAC,GACX;AACF;AAKA,eAAsB,2BAAA,CACpB,QACA,YAAA,EACe;AAEf,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,6BAAA,CAA8B,OAAO,OAAO,CAAA;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,iBAAA,EAAmB,eAAe,CAAA;AAAA,EACtE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,YAAY,CAAA;AAC/D;;;ACnDO,SAAS,sBACd,OAAA,EAC4B;AAC5B,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAE9C,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,IAAI,OAAA,CAAQ,EAAA,IAAM,oBAAoB,OAAA,CAAQ,KAAA,IAAS,aAAa,SAAS,CAAA;AAAA,IAC7E,MAAA,EAAQ,QAAQ,MAAA,IAAU,EAAA;AAAA,IAC1B,MAAA,EAAQ,QAAQ,MAAA,IAAU,EAAA;AAAA,IAC1B,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,UAAU,OAAA,CAAQ;AAAA,GACpB;AAGA,EAAA,MAAM,UAAA,GAAa,gCAAgC,SAAS,CAAA;AAC5D,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,iBAAA,EAAmB,UAAA,CAAW,MAAM,CAAA;AAAA,EACxE;AAEA,EAAA,OAAO,SAAA;AACT;AAWO,SAAS,oBAAoB,IAAA,EAAsC;AAExE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,gCAAA,EAAkC,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC/F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,+BAAA,CAAgC,MAAA,CAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,yBAAA,EAA2B,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC3DO,IAAM,mBAAN,MAAoD;AAAA,EACjD,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EAER,YAAY,YAAA,EAA4C;AACtD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,MAAA,CAAO,OAAA,EAAmC,OAAA,EAA2C;AAEzF,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,KAAA,IAAS,OAAA,CAAQ,MAAA,EAAQ;AACvC,MAAA,MAAM,aAAa,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,GAAA,CAAI,QAAQ,MAAM,CAAA;AAC7D,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,MAC1E;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,gBAAA,GAAmB,sBAAsB,OAAO,CAAA;AAGtD,MAAA,MAAM,cAAA,GAAwC;AAAA,QAC5C,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,KAAA;AAAA,UACT,IAAA,EAAM,WAAA;AAAA,UACN,eAAA,EAAiB,kCAAA;AAAA,UACjB,YAAY,CAAC;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,IAAA,EAAM,QAAA;AAAA,YACN,KAAA,EAAO,oBAAA;AAAA,YACP,SAAA,EAAW,aAAA;AAAA,YACX,SAAA,EAAW,KAAK,GAAA;AAAI,WACrB;AAAA,SACH;AAAA,QACA,OAAA,EAAS;AAAA,OACX;AAGA,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,OAAA,EAAS,UAAU,0BAA0B,CAAA;AAGjH,MAAA,MAAM,KAAK,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,gBAAA,CAAiB,IAAI,YAAY,CAAA;AAGlE,MAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,QACpB,IAAA,EAAM,mBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,mBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,aAAa,gBAAA,CAAiB,EAAA;AAAA,UAC9B,QAAQ,gBAAA,CAAiB,MAAA;AAAA,UACzB,OAAA;AAAA,UACA,gBAAA,EAAkB,MAAM,IAAA,CAAK,uBAAA,CAAwB,iBAAiB,MAAM;AAAA;AAC9E,OACwB,CAAA;AAE1B,MAAA,OAAO,gBAAA;AAAA,IACT,SAAS,KAAA,EAAO;AAGd,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,aAAa,WAAA,EAAsD;AACvE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,WAAW,CAAA;AAC3D,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAAoB,MAAA,EAA4C;AACpE,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AAC9C,IAAA,MAAM,aAAgC,EAAC;AAEvC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAQ;AAC9C,QAAA,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,gBAAA,GAA+C;AACnD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AAC9C,IAAA,MAAM,aAAgC,EAAC;AAEvC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,wBAAwB,MAAA,EAAkC;AACtE,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,mBAAA,CAAoB,MAAM,CAAA;AACxD,IAAA,OAAO,WAAW,MAAA,KAAW,CAAA;AAAA,EAC/B;AACF,CAAA;;;AC1JA,IAAA,uBAAA,GAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACuCO,SAAS,cACd,MAAA,EAC2B;AAC3B,EAAA,MAAM,UAAA,GAAa,OAAO,MAAA,CAAO,UAAA;AAGjC,EAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC1C,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiB,WAAW,CAAC,CAAA;AACnC,EAAA,OAAO;AAAA,IACL,SAAS,cAAA,CAAe,KAAA;AAAA,IACxB,WAAW,cAAA,CAAe;AAAA,GAC5B;AACF;AAoBO,SAAS,oBACd,MAAA,EAC2B;AAC3B,EAAA,MAAM,UAAA,GAAa,OAAO,MAAA,CAAO,UAAA;AAGjC,EAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC1C,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA;AACtD,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,SAAS,aAAA,CAAc,KAAA;AAAA,IACvB,WAAW,aAAA,CAAc;AAAA,GAC3B;AACF;;;AC7FA,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACmCO,IAAM,iBAAN,MAAgD;AAAA,EAC7C,cAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EAER,YAAY,YAAA,EAA0C;AACpD,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AACnC,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,aAAa,YAAA,CAAa,UAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,GAAgD;AACpD,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,IAAA,MAAM,mBAAA,GAAsB;AAAA,MAC1B,QAAA,EAAU,CAAA;AAAA,MACV,eAAA,EAAiB,CAAA;AAAA,MACjB,SAAA,EAAW;AAAA,KACb;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAElC,MAAA,MAAM,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QAChD,KAAK,YAAA,EAAa;AAAA,QAClB,KAAK,aAAA,EAAc;AAAA,QACnB,KAAK,aAAA;AAAc,OACpB,CAAA;AAED,MAAA,mBAAA,CAAoB,QAAA,GAAW,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAGnD,MAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAElC,MAAA,MAAM,CAAC,YAAA,EAAc,mBAAA,EAAqB,oBAAoB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QAClF,IAAA,CAAK,eAAe,eAAA,EAAgB;AAAA,QACpC,IAAA,CAAK,eAAe,sBAAA,EAAuB;AAAA,QAC3C,IAAA,CAAK,eAAe,uBAAA;AAAwB,OAC7C,CAAA;AAED,MAAA,mBAAA,CAAoB,eAAA,GAAkB,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAG1D,MAAA,MAAM,UAAA,GAAyB;AAAA,QAC7B,KAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA,EAAU,MAAM,IAAA,CAAK,eAAA,EAAgB;AAAA,QACrC,UAAA,EAAY,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAAA,QACzC,UAAA,EAAY,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAAA,QACzC;AAAA,OACF;AAEA,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,wBAAA,CAAyB,UAAU,CAAA;AAGtE,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,sBAAA,CAAuB,UAAU,CAAA;AAGlE,MAAA,MAAM,gBAAA,GAAqC;AAAA,QACzC,YAAA,EAAc,IAAI,GAAA,CAAI,aAAA,CAAc,YAAY,CAAA;AAAA,QAChD,WAAA,EAAa,IAAI,GAAA,CAAI,aAAA,CAAc,WAAW,CAAA;AAAA,QAC9C,uBAAA,EAAyB,IAAI,GAAA,CAAI,aAAA,CAAc,uBAAuB,CAAA;AAAA,QACtE,wBAAA,EAA0B,IAAI,GAAA,CAAI,aAAA,CAAc,wBAAwB;AAAA,OAC1E;AAGA,MAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,GAAA;AAAA,QAClC,KAAA,CAAM,IAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,iBAAiB,IAAA,EAAM,UAAA,EAAY,gBAAgB,CAAC;AAAA,OAC7E;AAGA,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAGrD,MAAA,MAAM,SAAA,GAAuB;AAAA,QAC3B,QAAA,EAAU;AAAA,UACR,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UACpC,cAAA,EAAgB,MAAM,IAAA,CAAK,gBAAA,EAAiB;AAAA,UAC5C,iBAAiB,eAAA,CAAgB,MAAA;AAAA;AAAA,UACjC,YAAA,EAAc;AAAA,YACZ,OAAO,KAAA,CAAM,MAAA;AAAA,YACb,QAAQ,MAAA,CAAO,MAAA;AAAA,YACf,QAAQ,MAAA,CAAO,MAAA;AAAA,YACf,QAAA,EAAU,WAAW,QAAA,CAAS,MAAA;AAAA,YAC9B,UAAA,EAAY,WAAW,UAAA,CAAW,MAAA;AAAA,YAClC,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA,WACpC;AAAA,UACA,cAAA,EAAgB;AAAA;AAAA,SAClB;AAAA,QACA,SAAS,EAAE,GAAG,cAAc,GAAG,mBAAA,EAAqB,GAAG,oBAAA,EAAqB;AAAA,QAC5E,aAAA;AAAA;AAAA,QACA,eAAA;AAAA;AAAA,QACA,KAAA;AAAA;AAAA,QACA,aAAA;AAAA;AAAA,QACA,MAAA;AAAA;AAAA,QACA,MAAA;AAAA;AAAA,QACA,UAAU,UAAA,CAAW;AAAA;AAAA,OACvB;AAGA,MAAA,MAAM,UAAA,GAAa,YAAY,GAAA,EAAI;AACnC,MAAA,MAAM,IAAA,CAAK,eAAe,SAAS,CAAA;AACnC,MAAA,mBAAA,CAAoB,SAAA,GAAY,WAAA,CAAY,GAAA,EAAI,GAAI,UAAA;AAEpD,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AACtC,MAAA,SAAA,CAAU,SAAS,cAAA,GAAiB,SAAA;AAEpC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,gBAAA,EAAkB,KAAA,CAAM,MAAA,GAAS,MAAA,CAAO,SAAS,MAAA,CAAO,MAAA;AAAA,QACxD,iBAAA,EAAmB,CAAA;AAAA;AAAA,QACnB,oBAAA,EAAsB,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAI,MAAA,EAAQ,CAAC,CAAA;AAAA;AAAA,QAC3F,cAAA,EAAgB,SAAA;AAAA,QAChB,QAAQ,EAAC;AAAA,QACT,WAAA,EAAa;AAAA,OACf;AAAA,IAEF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,gBAAA,EAAkB,CAAA;AAAA,QAClB,iBAAA,EAAmB,CAAA;AAAA,QACnB,oBAAA,EAAsB,CAAA;AAAA,QACtB,cAAA,EAAgB,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAAA,QACpC,MAAA,EAAQ,CAAC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC/D,WAAA,EAAa;AAAA,OACf;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAA,GAA0C;AAC9C,IAAA,IAAI;AAEF,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,UAAA,CAAW,IAAI,OAAO,CAAA;AACnD,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,eAAA,EAAgB;AAC9C,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,SAAA;AAAA,IACT,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,KAAK,CAAA,8EAAA,CAAgF,CAAA;AAC7F,MAAA,OAAA,CAAQ,IAAA,CAAK,YAAY,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AACjF,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,iBAAA,GAA8C;AAClD,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,IAAA,MAAM,SAA2B,EAAC;AAClC,IAAA,MAAM,WAA+B,EAAC;AACtC,IAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,IAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,IAAA,IAAI,iBAAA,GAAoB,CAAA;AAExB,IAAA,IAAI;AAEF,MAAA,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QACxC,KAAK,YAAA,EAAa;AAAA,QAClB,KAAK,aAAA;AAAc,OACpB,CAAA;AAED,MAAA,cAAA,GAAiB,KAAA,CAAM,SAAS,MAAA,CAAO,MAAA;AAGvC,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAC,IAAA,CAAK,QAAQ,WAAA,EAAa;AACjD,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,kBAAA;AAAA,YACN,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,EAAA,IAAM,SAAA;AAAA,YAC7B,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAC,KAAA,CAAM,QAAQ,KAAA,EAAO;AAC7C,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,kBAAA;AAAA,YACN,QAAA,EAAU,KAAA,CAAM,OAAA,CAAQ,EAAA,IAAM,SAAA;AAAA,YAC9B,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,kBAAA,GAAqB,wBAAA,CAAyB,IAAA,CAAK,OAAO,CAAA;AAChE,QAAA,IAAI,kBAAA,KAAuB,IAAA,CAAK,MAAA,CAAO,eAAA,EAAiB;AACtD,UAAA,gBAAA,EAAA;AACA,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,kBAAA;AAAA,YACN,QAAA,EAAU,KAAK,OAAA,CAAQ,EAAA;AAAA,YACvB,SAAS,CAAA,4BAAA,EAA+B,IAAA,CAAK,MAAA,CAAO,eAAe,SAAS,kBAAkB,CAAA;AAAA,WAC/F,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAM,kBAAA,GAAqB,wBAAA,CAAyB,KAAA,CAAM,OAAO,CAAA;AACjE,QAAA,IAAI,kBAAA,KAAuB,KAAA,CAAM,MAAA,CAAO,eAAA,EAAiB;AACvD,UAAA,gBAAA,EAAA;AACA,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,kBAAA;AAAA,YACN,QAAA,EAAU,MAAM,OAAA,CAAQ,EAAA;AAAA,YACxB,SAAS,CAAA,4BAAA,EAA+B,KAAA,CAAM,MAAA,CAAO,eAAe,SAAS,kBAAkB,CAAA;AAAA,WAChG,CAAA;AAAA,QACH;AAAA,MACF;AAIA,MAAA,MAAM,iBAAA,GAAoB,OAAO,KAAA,KAA0C;AACzE,QAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,KAAK,CAAA;AAChD,QAAA,OAAO,KAAA,EAAO,QAAQ,SAAA,IAAa,IAAA;AAAA,MACrC,CAAA;AAGA,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,IAAA,EAAM,iBAAiB,CAAA;AAC9D,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,iBAAA,EAAA;AACA,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,mBAAA;AAAA,YACN,QAAA,EAAU,KAAK,OAAA,CAAQ,EAAA;AAAA,YACvB,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,KAAA,EAAO,iBAAiB,CAAA;AAC/D,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,iBAAA,EAAA;AACA,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,mBAAA;AAAA,YACN,QAAA,EAAU,MAAM,OAAA,CAAQ,EAAA;AAAA,YACxB,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,OAAO,MAAA,GAAS,CAAA,GAAI,WAAW,QAAA,CAAS,MAAA,GAAS,IAAI,UAAA,GAAa,OAAA;AAEjF,MAAA,OAAO;AAAA,QACL,MAAA;AAAA,QACA,cAAA;AAAA,QACA,WAAA,EAAa,MAAA;AAAA,QACb,aAAA,EAAe,QAAA;AAAA,QACf,cAAA,EAAgB,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAAA,QACpC,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,IAEF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,QAAA;AAAA,QACR,cAAA;AAAA,QACA,aAAa,CAAC;AAAA,UACZ,IAAA,EAAM,kBAAA;AAAA,UACN,QAAA,EAAU,QAAA;AAAA,UACV,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC/D,CAAA;AAAA,QACD,aAAA,EAAe,QAAA;AAAA,QACf,cAAA,EAAgB,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAAA,QACpC,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,GAAoC;AACxC,IAAA,IAAI;AAEF,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,UAAA,CAAW,OAAO,OAAO,CAAA;AACxD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,OAAO,KAAA;AAAA,MACT;AAGA,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,UAAA,CAAW,IAAI,OAAO,CAAA;AACnD,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM,YAAY,IAAI,IAAA,CAAK,UAAU,QAAA,CAAS,WAAW,EAAE,OAAA,EAAQ;AAGnE,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAK;AAC7C,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAG/C,MAAA,KAAA,MAAW,MAAM,CAAC,GAAG,OAAA,EAAS,GAAG,QAAQ,CAAA,EAAG;AAC1C,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,kBAAA,CAAmB,EAAE,CAAA;AAC5C,QAAA,IAAI,SAAA,GAAY,MAAO,SAAA,EAAW;AAChC,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,MACF;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,mCAAmC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AACxG,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,GAAiC;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,UAAA,CAAW,OAAO,OAAO,CAAA;AACxD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,OAAO,CAAA;AAAA,MACtC;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACzG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,YAAA,GAA4C;AACxD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAK;AAC7C,IAAA,MAAM,QAA4B,EAAC;AAEnC,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,EAAE,CAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,GAA8C;AAC1D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC/C,IAAA,MAAM,SAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,MACpB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,GAA8C;AAC1D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC/C,IAAA,MAAM,SAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,MACpB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAA,GAAmD;AAC/D,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAK;AACrD,IAAA,MAAM,WAAmC,EAAC;AAE1C,IAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAA,GAAsD;AAClE,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AACvD,IAAA,MAAM,aAAsC,EAAC;AAE7C,IAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAA,GAAsD;AAClE,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AACvD,IAAA,MAAM,aAAsC,EAAC;AAE7C,IAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,eAAe,SAAA,EAAqC;AAEhE,IAAA,MAAM,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,OAAA,EAAS,SAAS,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAA,GAAoC;AAChD,IAAA,IAAI;AAEF,MAAA,OAAO,kBAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,SAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,uBAAuB,UAAA,EAAgD;AAC3E,IAAA,MAAM,aAAA,GAA+B;AAAA,MACnC,cAAc,EAAC;AAAA,MACf,aAAa,EAAC;AAAA,MACd,yBAAyB,EAAC;AAAA,MAC1B,0BAA0B;AAAC,KAC7B;AAEA,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,aAAA,GAAgB,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAEzC,IAAA,IAAI;AACF,MAAA,KAAA,MAAW,IAAA,IAAQ,WAAW,KAAA,EAAO;AACnC,QAAA,MAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,EAAA;AAC5B,QAAA,MAAM,cAAc,IAAA,CAAK,OAAA;AAIzB,QAAA,IAAI,WAAA,CAAY,MAAA,KAAW,QAAA,IAAY,WAAA,CAAY,WAAW,QAAA,EAAU;AACtE,UAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,kBAAA,CAAmB,MAAM,CAAA,GAAI,GAAA;AACxD,UAAA,MAAM,iBAAA,GAAA,CAAqB,GAAA,GAAM,aAAA,KAAkB,EAAA,GAAK,KAAK,EAAA,GAAK,GAAA,CAAA;AAGlE,UAAA,MAAM,kBAAA,GAAqB,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,CAAA,IAAA,KAAQ;AAC5D,YAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAQ;AAClC,cAAA,MAAM,gBAAgB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA,GAAI,GAAA;AACjE,cAAA,OAAQ,MAAM,aAAA,GAAiB,aAAA;AAAA,YACjC;AACA,YAAA,OAAO,KAAA;AAAA,UACT,CAAC,CAAA;AAED,UAAA,MAAM,SAAA,GACH,WAAA,CAAY,MAAA,KAAW,QAAA,IAAY,iBAAA,GAAoB,CAAA,IAAK,CAAC,kBAAA,IAC7D,WAAA,CAAY,MAAA,KAAW,QAAA,IAAY,iBAAA,GAAoB,CAAA;AAE1D,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,aAAA,CAAc,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,UACxC;AAAA,QACF;AAIA,QAAA,MAAM,gBAAA,GAAmB,WAAA,CAAY,QAAA,KAAa,UAAA,IAAc,YAAY,MAAA,KAAW,QAAA;AACvF,QAAA,MAAM,qBAAA,GAAwB,UAAA,CAAW,QAAA,CAAS,MAAA,CAAO,CAAA,QAAA,KAAY;AACnE,UAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,KAAS,UAAA,IAC/B,QAAA,CAAS,QAAQ,MAAA,KAAW,MAAA,IAC5B,QAAA,CAAS,OAAA,CAAQ,QAAA,KAAa,MAAA;AAAA,QAClC,CAAC,CAAA,CAAE,MAAA;AAEH,QAAA,IAAI,gBAAA,IAAoB,yBAAyB,CAAA,EAAG;AAClD,UAAA,aAAA,CAAc,WAAA,CAAY,KAAK,MAAM,CAAA;AAAA,QACvC;AAIA,QAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,CAAA,QAAA,KAAY;AAC3D,UAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,KAAS,UAAA,IAC/B,QAAA,CAAS,QAAQ,MAAA,KAAW,MAAA,IAC5B,QAAA,CAAS,OAAA,CAAQ,QAAA,KAAa,MAAA;AAAA,QAClC,CAAC,CAAA;AAED,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,aAAA,CAAc,uBAAA,CAAwB,KAAK,MAAM,CAAA;AAAA,QACnD;AAIA,QAAA,IAAI,WAAA,CAAY,UAAA,IAAc,WAAA,CAAY,UAAA,CAAW,SAAS,CAAA,EAAG;AAC/D,UAAA,MAAM,qBAAA,GAAwB,WAAA,CAAY,UAAA,CAAW,IAAA,CAAK,CAAA,GAAA,KAAO;AAC/D,YAAA,IAAI,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,cAAA,MAAM,YAAA,GAAe,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAC5C,cAAA,MAAM,cAAA,GAAiB,WAAW,KAAA,CAAM,IAAA,CAAK,OAAK,CAAA,CAAE,OAAA,CAAQ,OAAO,YAAY,CAAA;AAC/E,cAAA,OAAO,kBACL,cAAA,CAAe,OAAA,CAAQ,WAAW,MAAA,IAClC,cAAA,CAAe,QAAQ,MAAA,KAAW,UAAA;AAAA,YACtC;AACA,YAAA,OAAO,KAAA;AAAA,UACT,CAAC,CAAA;AAED,UAAA,IAAI,qBAAA,EAAuB;AACzB,YAAA,aAAA,CAAc,wBAAA,CAAyB,KAAK,MAAM,CAAA;AAAA,UACpD;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,aAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,iCAAiC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAEtG,MAAA,OAAO,aAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAyB,UAAA,EAAkD;AAC/E,IAAA,MAAM,SAA0B,EAAC;AAEjC,IAAA,IAAI;AAEF,MAAA,UAAA,CAAW,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AAC/B,QAAA,MAAM,gBAAgB,IAAA,CAAK,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAClD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,cAAA;AAAA,YACN,QAAA,EAAU,KAAK,OAAA,CAAQ,EAAA;AAAA,YACvB,WAAA,EAAa,KAAK,OAAA,CAAQ,KAAA;AAAA,YAC1B,SAAS,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,CAAC,GAAG,KAAA,IAAS,SAAA;AAAA;AAAA,YAC7C,QAAA,EAAU,EAAE,QAAA,EAAU,IAAA,CAAK,QAAQ,QAAA,EAAU,MAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA;AAAO,WAC1E,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS;AACjC,QAAA,MAAM,gBAAgB,KAAA,CAAM,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACnD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,eAAA;AAAA,YACN,QAAA,EAAU,MAAM,OAAA,CAAQ,EAAA;AAAA,YACxB,WAAA,EAAa,MAAM,OAAA,CAAQ,KAAA;AAAA,YAC3B,SAAS,KAAA,CAAM,MAAA,CAAO,UAAA,CAAW,CAAC,GAAG,KAAA,IAAS,SAAA;AAAA;AAAA,YAC9C,QAAA,EAAU,EAAE,MAAA,EAAQ,KAAA,CAAM,QAAQ,MAAA;AAAO,WAC1C,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,QAAA,KAAY;AACtC,QAAA,MAAM,gBAAgB,QAAA,CAAS,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACtD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAM,QAAA,GAAoE;AAAA,YACxE,IAAA,EAAM,SAAS,OAAA,CAAQ,IAAA;AAAA,YACvB,UAAA,EAAY,SAAS,OAAA,CAAQ;AAAA,WAC/B;AACA,UAAA,IAAI,QAAA,CAAS,QAAQ,QAAA,EAAU;AAC7B,YAAA,QAAA,CAAS,QAAA,GAAW,SAAS,OAAA,CAAQ,QAAA;AAAA,UACvC;AAEA,UAAA,MAAM,KAAA,GAAuB;AAAA,YAC3B,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,kBAAA;AAAA,YACN,QAAA,EAAU,SAAS,OAAA,CAAQ,EAAA;AAAA,YAC3B,WAAA,EAAa,CAAA,EAAG,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,CAAA;AAAA,YAC/E,OAAA,EAAS,SAAS,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA,EAAG,KAAA,IAAS,QAAA,CAAS,OAAA,CAAQ,QAAA,IAAY,SAAA;AAAA,YAC9E;AAAA,WACF;AAEA,UAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,QACnB;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,UAAA,CAAW,QAAQ,CAAA,SAAA,KAAa;AACzC,QAAA,MAAM,gBAAgB,SAAA,CAAU,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACvD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAM,KAAA,GAAuB;AAAA,YAC3B,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,mBAAA;AAAA,YACN,QAAA,EAAU,UAAU,OAAA,CAAQ,EAAA;AAAA,YAC5B,WAAA,EAAa,SAAA,CAAU,OAAA,CAAQ,KAAA,IAAS,eAAA;AAAA,YACxC,SAAS,SAAA,CAAU,MAAA,CAAO,UAAA,CAAW,CAAC,GAAG,KAAA,IAAS;AAAA,WACpD;AACA,UAAA,IAAI,SAAA,CAAU,QAAQ,OAAA,EAAS;AAC7B,YAAA,KAAA,CAAM,QAAA,GAAW,EAAE,OAAA,EAAS,SAAA,CAAU,QAAQ,OAAA,EAAQ;AAAA,UACxD;AACA,UAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,QACnB;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,UAAA,CAAW,QAAQ,CAAA,SAAA,KAAa;AACzC,QAAA,MAAM,gBAAgB,SAAA,CAAU,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACvD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,mBAAA;AAAA,YACN,QAAA,EAAU,UAAU,OAAA,CAAQ,EAAA;AAAA,YAC5B,WAAA,EAAa,SAAA,CAAU,OAAA,CAAQ,KAAA,IAAS,CAAA,WAAA,EAAc,UAAU,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,CAAC,CAAA,CAAA;AAAA,YACxF,SAAS,SAAA,CAAU,MAAA,CAAO,UAAA,CAAW,CAAC,GAAG,KAAA,IAAS,SAAA;AAAA;AAAA,YAClD,QAAA,EAAU;AAAA,cACR,aAAA,EAAe,SAAA,CAAU,OAAA,CAAQ,IAAA,IAAQ,aAAA;AAAA,cACzC,MAAA,EAAQ,UAAU,OAAA,CAAQ;AAAA;AAC5B,WACD,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS;AACjC,QAAA,MAAM,gBAAgB,KAAA,CAAM,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACnD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,eAAA;AAAA,YACN,QAAA,EAAU,MAAM,OAAA,CAAQ,EAAA;AAAA,YACxB,WAAA,EAAa,GAAG,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,SAAA,EAAY,KAAA,CAAM,QAAQ,IAAI,CAAA,CAAA,CAAA;AAAA,YACvE,QAAA,EAAU,EAAE,IAAA,EAAM,KAAA,CAAM,QAAQ,IAAA;AAAK,WACtC,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,OAAO,MAAA,CACJ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAS,CAAA,CACxC,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,IAEhB,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,IAAA,CAAK,uCAAuC,KAAK,CAAA;AACzD,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAA,CACJ,IAAA,EACA,cAAA,EACoH;AACpH,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,IAAA,CAAK,OAAA;AACzB,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,kBAAA,CAAmB,WAAA,CAAY,EAAE,CAAA,GAAI,GAAA;AAC/D,MAAA,IAAI,WAAA,GAAc,YAAA;AAClB,MAAA,IAAI,gBAAA,GAA2D,cAAA;AAC/D,MAAA,IAAI,cAAA,GAAiB,cAAA;AAIrB,MAAA,MAAM,YAAA,GAAe,oBAAoB,IAAI,CAAA;AAC7C,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,aAAA,GAAgB,aAAa,SAAA,GAAY,GAAA;AAC/C,QAAA,MAAM,iBAAiB,aAAA,GAAgB,YAAA;AAGvC,QAAA,IAAI,cAAA,GAAiB,GAAA,IAAS,aAAA,GAAgB,WAAA,EAAa;AACzD,UAAA,WAAA,GAAc,aAAA;AACd,UAAA,gBAAA,GAAmB,eAAA;AACnB,UAAA,cAAA,GAAiB,CAAA,cAAA,EAAiB,IAAA,CAAK,aAAA,CAAc,aAAa,CAAC,CAAA,CAAA;AAAA,QACrE;AAAA,MACF;AAGA,MAAA,MAAM,eAAA,GAAkB,eAAe,QAAA,CAAS,MAAA;AAAA,QAAO,CAAA,CAAA,KACrD,CAAA,CAAE,OAAA,CAAQ,QAAA,KAAa,YAAY,EAAA,IAAO,CAAA,CAAE,OAAA,CAAQ,OAAA,IAAW,CAAA,CAAE,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,YAAY,EAAE;AAAA,OAC1G;AAEA,MAAA,KAAA,MAAW,YAAY,eAAA,EAAiB;AACtC,QAAA,MAAM,eAAe,IAAA,CAAK,kBAAA,CAAmB,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA,GAAI,GAAA;AACpE,QAAA,IAAI,eAAe,WAAA,EAAa;AAC9B,UAAA,WAAA,GAAc,YAAA;AACd,UAAA,gBAAA,GAAmB,mBAAA;AACnB,UAAA,cAAA,GAAiB,CAAA,EAAG,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,WAAA,EAAc,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,CAAA;AAAA,QAC9F;AAAA,MACF;AAGA,MAAA,MAAM,iBAAA,GAAoB,eAAe,UAAA,CAAW,MAAA,CAAO,OAAK,CAAA,CAAE,OAAA,CAAQ,MAAA,KAAW,WAAA,CAAY,EAAE,CAAA;AAEnG,MAAA,KAAA,MAAW,aAAa,iBAAA,EAAmB;AACzC,QAAA,MAAM,gBAAgB,IAAA,CAAK,kBAAA,CAAmB,SAAA,CAAU,OAAA,CAAQ,EAAE,CAAA,GAAI,GAAA;AACtE,QAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,UAAA,WAAA,GAAc,aAAA;AACd,UAAA,gBAAA,GAAmB,iBAAA;AACnB,UAAA,cAAA,GAAiB,CAAA,WAAA,EAAc,SAAA,CAAU,OAAA,CAAQ,KAAA,IAAS,aAAa,CAAA,CAAA;AAAA,QACzE;AAAA,MACF;AAGA,MAAA,MAAM,iBAAA,GAAoB,eAAe,UAAA,CAAW,MAAA;AAAA,QAAO,OACxD,CAAA,CAAE,OAAA,CAAQ,YAAA,IAAgB,CAAA,CAAE,QAAQ,YAAA,CAAa,QAAA,CAAS,WAAA,CAAY,EAAE,KACzE,CAAA,CAAE,OAAA,CAAQ,WAAA,EAAa,QAAA,CAAS,YAAY,EAAE;AAAA,OAChD;AAEA,MAAA,KAAA,MAAW,aAAa,iBAAA,EAAmB;AACzC,QAAA,MAAM,gBAAgB,IAAA,CAAK,kBAAA,CAAmB,SAAA,CAAU,OAAA,CAAQ,EAAE,CAAA,GAAI,GAAA;AACtE,QAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,UAAA,WAAA,GAAc,aAAA;AACd,UAAA,gBAAA,GAAmB,mBAAA;AACnB,UAAA,cAAA,GAAiB,CAAA,WAAA,EAAc,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,QACxD;AAAA,MACF;AAEA,MAAA,OAAO,EAAE,WAAA,EAAa,gBAAA,EAAkB,cAAA,EAAe;AAAA,IAEzD,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,eAAe,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA,GAAI,GAAA;AAChE,MAAA,OAAO;AAAA,QACL,WAAA,EAAa,YAAA;AAAA,QACb,gBAAA,EAAkB,cAAA;AAAA,QAClB,cAAA,EAAgB;AAAA,OAClB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BA,MAAM,gBAAA,CACJ,IAAA,EACA,cAAA,EACA,gBAAA,EAC6B;AAE7B,IAAA,MAAM,EAAE,aAAa,gBAAA,EAAkB,cAAA,KAAmB,MAAM,IAAA,CAAK,oBAAA,CAAqB,IAAA,EAAM,cAAc,CAAA;AAG9G,IAAA,MAAM,MAAA,GAAS,cAAc,IAAI,CAAA;AACjC,IAAA,MAAM,YAAA,GAAe,oBAAoB,IAAI,CAAA;AAG7C,IAAA,MAAM,cAAc,cAAA,CAAe,QAAA,CAChC,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,OAAA,CAAQ,QAAA,KAAa,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,YAAY,CAAA,CACrF,IAAI,CAAA,CAAA,MAAM;AAAA,MACT,OAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,QAAA,IAAY,SAAA;AAAA,MAC/B,YAAY,IAAA,CAAK,kBAAA,CAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA,GAAI;AAAA;AAAA,KACtD,CAAE,CAAA;AAKJ,IAAA,MAAM,iBAAA,GAAoB,CAAC,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAA;AAC1D,IAAA,MAAM,aAAa,IAAA,CAAK,OAAA,CAAQ,cAAc,EAAC,EAC5C,OAAO,CAAA,GAAA,KAAO;AAEb,MAAA,MAAM,iBAAiB,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,IAAK,GAAA,CAAI,WAAW,KAAK,CAAA,IACpE,IAAI,UAAA,CAAW,QAAQ,KAAK,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,IAClD,GAAA,CAAI,WAAW,MAAM,CAAA;AAEvB,MAAA,IAAI,CAAC,gBAAgB,OAAO,KAAA;AAG5B,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,QAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACzC,QAAA,MAAM,OAAA,GAAU,eAAe,KAAA,CAAM,IAAA,CAAK,OAAK,CAAA,CAAE,OAAA,CAAQ,OAAO,SAAS,CAAA;AACzE,QAAA,OAAO,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,OAAA,CAAQ,MAAA,IAAU,CAAC,iBAAA,CAAkB,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA;AAAA,MAClG;AAGA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAEH,IAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,CAC9B,MAAA,CAAO,OAAK,CAAC,iBAAA,CAAkB,QAAA,CAAS,CAAA,CAAE,QAAQ,MAAM,CAAC,CAAA,CACzD,MAAA,CAAO,QAAM,CAAA,CAAE,OAAA,CAAQ,UAAA,IAAc,EAAC,EAAG,QAAA,CAAS,CAAA,KAAA,EAAQ,IAAA,CAAK,QAAQ,EAAE,CAAA,CAAE,CAAC,CAAA,CAC5E,IAAI,CAAA,CAAA,KAAK,CAAA,KAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAGlC,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA,CAAQ,YAAY,EAAC,EACvC,IAAI,CAAA,OAAA,KAAW;AACd,MAAA,MAAM,KAAA,GAAQ,eAAe,MAAA,CAAO,IAAA,CAAK,OAAK,CAAA,CAAE,OAAA,CAAQ,OAAO,OAAO,CAAA;AACtE,MAAA,OAAO,KAAA,GAAQ,EAAE,EAAA,EAAI,OAAA,EAAS,OAAO,KAAA,CAAM,OAAA,CAAQ,OAAM,GAAI,IAAA;AAAA,IAC/D,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,CAAA,KAA0C,MAAM,IAAI,CAAA;AAG/D,IAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,UAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,CAAQ,MAAA,KAAW,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA,CAAE,MAAA;AACnG,IAAA,MAAM,qBAAA,GAAwB,eAAe,QAAA,CAAS,MAAA;AAAA,MACpD,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,CAAQ,QAAA,KAAa,IAAA,CAAK,OAAA,CAAQ,EAAA,IAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,QAAQ,MAAA,KAAW;AAAA,KACvG,CAAE,MAAA;AACF,IAAA,MAAM,iBAAA,GAAoB,eAAe,QAAA,CAAS,MAAA;AAAA,MAChD,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,CAAQ,QAAA,KAAa,IAAA,CAAK,OAAA,CAAQ,EAAA,IAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,QAAQ,MAAA,KAAW;AAAA,KACvG,CAAE,MAAA;AAGF,IAAA,MAAM,gBAAA,GAAuC,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,UAChE,WAAA,GAAc,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,QAAQ,EAAE,CAAA,GAAI,GAAA,KAAS,GAAA,GAAO,KAAK,EAAA,CAAA,GAC/E,MAAA;AAGJ,IAAA,MAAM,iBAAA,GAAoB,eAAe,UAAA,CAAW,MAAA;AAAA,MAAO,QACzD,EAAA,CAAG,OAAA,CAAQ,aAAa,QAAA,CAAS,IAAA,CAAK,QAAQ,EAAE;AAAA,KAClD;AACA,IAAA,MAAM,UAAA,GAAa,kBAAkB,MAAA,GAAS,CAAA;AAC9C,IAAA,MAAM,kBAAA,GAAyC,aAC1C,iBAAA,CAAkB,iBAAA,CAAkB,SAAS,CAAC,CAAA,EAAG,OAAA,CAAQ,OAAA,IAAW,MAAA,GACrE,MAAA;AAIJ,IAAA,MAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,EAAA;AAC5B,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,YAAA,CAAa,GAAA,CAAI,MAAM,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACxD,IAAA,MAAM,kBAAA,GAAqB,gBAAA,CAAiB,uBAAA,CAAwB,GAAA,CAAI,MAAM,CAAA;AAC9E,IAAA,MAAM,qBAAA,GAAwB,gBAAA,CAAiB,wBAAA,CAAyB,GAAA,CAAI,MAAM,CAAA;AAGlF,IAAA,MAAM,uBAAuB,IAAA,CAAK,GAAA,KAAQ,WAAA,KAAgB,GAAA,GAAO,KAAK,EAAA,GAAK,EAAA,CAAA;AAG3E,IAAA,IAAI,WAAA,GAAc,GAAA;AAGlB,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAQ,WAAA,IAAe,CAAA;AAAA,SAAA,IAC1C,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,QAAA,EAAU,WAAA,IAAe,CAAA;AAAA,SAAA,IACjD,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,OAAA,EAAS,WAAA,IAAe,EAAA;AAAA,SAAA,IAChD,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,QAAA,EAAU,WAAA,IAAe,EAAA;AAAA,SAAA,IACjD,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,QAAA,EAAU,WAAA,IAAe,EAAA;AAAA,SACrD,WAAA,IAAe,EAAA;AAGpB,IAAA,WAAA,IAAe,IAAA,CAAK,GAAA,CAAI,qBAAA,GAAwB,EAAA,EAAI,EAAE,CAAA;AAGtD,IAAA,IAAI,mBAAmB,CAAA,IAAK,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,UAAU,WAAA,IAAe,EAAA;AAAA,SAAA,IACpE,cAAA,GAAiB,GAAG,WAAA,IAAe,EAAA;AAG5C,IAAA,IAAI,mBAAA,GAAsB,IAAI,WAAA,IAAe,EAAA;AAAA,SAAA,IACpC,mBAAA,GAAsB,IAAI,WAAA,IAAe,EAAA;AAAA,SAAA,IACzC,mBAAA,GAAsB,GAAG,WAAA,IAAe,EAAA;AAEjD,IAAA,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAK,WAAW,CAAC,CAAA;AAGpD,IAAA,MAAM,kBAAA,GAAqB,mBAAA;AAG3B,IAAA,MAAM,cAAA,GAAqC;AAAA,MACzC,GAAG,IAAA,CAAK,OAAA;AAAA,MACR,YAAA,EAAc;AAAA,QACZ,SAAA;AAAA,QACA,QAAA;AAAA,QACA,kBAAA;AAAA,QACA,qBAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAe;AAAA,QACb,GAAI,MAAA,IAAU,EAAE,MAAA,EAAO;AAAA,QACvB,GAAI,YAAA,IAAgB,EAAE,YAAA,EAAa;AAAA,QACnC,UAAA,EAAY,WAAA;AAAA,QACZ,SAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAS;AAAA,QACP,cAAA;AAAA,QACA,qBAAA;AAAA,QACA,iBAAA;AAAA,QACA,GAAI,gBAAA,KAAqB,MAAA,IAAa,EAAE,gBAAA;AAAiB,OAC3D;AAAA,MACA,OAAA,EAAS;AAAA,QACP,UAAA;AAAA,QACA,GAAI,kBAAA,KAAuB,MAAA,IAAa,EAAE,kBAAA;AAAmB,OAC/D;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,GAAI,cAAA,IAAkB,EAAE,cAAA;AAAe,KACzC;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,SAAA,EAA2B;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,OAAO,GAAA,GAAM,SAAA;AACnB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,MAAO,EAAA,CAAG,CAAA;AAC7C,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,GAAA,GAAO,KAAK,EAAA,CAAG,CAAA;AAChD,IAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,GAAA,GAAO,EAAA,GAAK,KAAK,EAAA,CAAG,CAAA;AAEpD,IAAA,IAAI,OAAA,GAAU,EAAA,EAAI,OAAO,CAAA,EAAG,OAAO,CAAA,KAAA,CAAA;AACnC,IAAA,IAAI,KAAA,GAAQ,EAAA,EAAI,OAAO,CAAA,EAAG,KAAK,CAAA,KAAA,CAAA;AAC/B,IAAA,OAAO,GAAG,IAAI,CAAA,KAAA,CAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,EAAA,EAAoB;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAC1B,MAAA,MAAM,YAAY,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,IAAK,KAAK,EAAE,CAAA;AAE9C,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,IAAK,SAAA,IAAa,CAAA,EAAG;AACtC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,EAAE,CAAA,CAAE,CAAA;AAAA,MAClD;AAEA,MAAA,OAAO,SAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,EAAE,CAAA,CAAE,CAAA;AAAA,IAC3D;AAAA,EACF;AACF,CAAA;;;AC7gCA,IAAA,uBAAA,GAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;AC2CO,IAAM,iBAAN,MAAgD;AAAA,EAC7C,eAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EAER,YAAY,YAAA,EAA0C;AACpD,IAAA,IAAA,CAAK,kBAAkB,YAAA,CAAa,eAAA;AACpC,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AACnC,IAAA,IAAA,CAAK,gBAAgB,YAAA,CAAa,aAAA;AAClC,IAAA,IAAA,CAAK,qBAAqB,YAAA,CAAa,kBAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,kBAAkB,OAAA,EAAyD;AAC/E,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,IAAI;AAEF,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,mBAAA,EAAoB;AACrD,MAAA,IAAI,CAAC,cAAc,OAAA,EAAS;AAC1B,QAAA,MAAM,IAAI,MAAM,CAAA,+BAAA,EAAkC,aAAA,CAAc,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MACvF;AAGA,MAAA,MAAM,IAAA,CAAK,mBAAmB,sBAAA,EAAuB;AAGrD,MAAA,MAAM,IAAA,CAAK,mBAAmB,eAAA,EAAgB;AAG9C,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,eAAA,CAAgB,WAAA;AAAA,QACvC;AAAA,UACE,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EAAa,QAAQ,SAAA,IAAa,eAAA;AAAA,UAClC,KAAA,EAAO;AAAA,YACL,OAAA;AAAA,YACA,QAAA;AAAA,YACA,kBAAA;AAAA,YACA,kBAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAGA,MAAA,MAAM,aAAA,GAAgB,MAAM,iBAAA,CAAkB;AAAA,QAC5C,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,UAAA;AAAA,QACR,SAAS;AAAC,OACX,CAAA;AAED,MAAA,MAAM,YAAY,MAAM,IAAA,CAAK,eAAe,WAAA,CAAY,aAAA,EAAe,MAAM,EAAE,CAAA;AAG/E,MAAA,IAAI,cAAA;AACJ,MAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,QAAA,MAAM,cAAA,GAAiC;AAAA,UACrC,SAAA,EAAW,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,IAAI,CAAA;AAAA,UAC9C,aAAa,OAAA,CAAQ,IAAA;AAAA,UACrB,SAAS,KAAA,CAAM,EAAA;AAAA,UACf,WAAW,SAAA,CAAU;AAAA,SACvB;AACA,QAAA,cAAA,GAAiB,MAAM,IAAA,CAAK,wBAAA,CAAyB,OAAA,CAAQ,UAAU,cAAc,CAAA;AAAA,MACvF;AAGA,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,IAAI,CAAA;AACrD,MAAA,MAAM,MAAA,GAAuB;AAAA,QAC3B,eAAA,EAAiB,OAAA;AAAA,QACjB,SAAA;AAAA,QACA,aAAa,OAAA,CAAQ,IAAA;AAAA,QACrB,WAAW,SAAA,CAAU,EAAA;AAAA,QACrB,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAM;AAAA,YACJ,QAAA,EAAU,QAAA;AAAA,YACV,UAAA,EAAY,CAAA;AAAA,YACZ,mBAAA,EAAqB,EAAA;AAAA,YACrB,oBAAA,EAAsB;AAAA,WACxB;AAAA,UACA,QAAA,EAAU;AAAA,YACR,aAAA,EAAe;AAAA,cACb,sBAAA,EAAwB,EAAA;AAAA,cACxB,cAAA,EAAgB,KAAA;AAAA,cAChB,6BAAA,EAA+B,IAAA;AAAA,cAC/B,qBAAA,EAAuB;AAAA,aACzB;AAAA,YACA,WAAA,EAAa;AAAA,cACX,iBAAA,EAAmB,GAAA;AAAA,cACnB,sBAAA,EAAwB,CAAC,OAAA,EAAS,WAAA,EAAa,OAAO;AAAA;AACxD;AACF;AACF,OACF;AAEA,MAAA,MAAM,IAAA,CAAK,kBAAA,CAAmB,WAAA,CAAY,MAAM,CAAA;AAKhD,MAAA,IAAI,CAAC,aAAA,CAAc,SAAA,IAAa,CAAC,cAAc,UAAA,EAAY;AACzD,QAAA,MAAM,cAAwB,EAAC;AAC/B,QAAA,IAAI,CAAC,cAAc,UAAA,EAAY;AAC7B,UAAA,WAAA,CAAY,KAAK,8BAA8B,CAAA;AAAA,QACjD;AACA,QAAA,IAAI,CAAC,cAAc,SAAA,EAAW;AAC5B,UAAA,WAAA,CAAY,KAAK,+BAA+B,CAAA;AAAA,QAClD;AACA,QAAA,OAAA,CAAQ,KAAK,CAAA,cAAA,EAAO,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7C,QAAA,OAAA,CAAQ,KAAK,CAAA,qFAAA,CAAuF,CAAA;AACpG,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA;AAAA,CAA+E,CAAA;AAAA,MAC9F;AAGA,MAAA,MAAM,IAAA,CAAK,kBAAA,CAAmB,iBAAA,CAAkB,KAAA,CAAM,EAAE,CAAA;AAGxD,MAAA,MAAM,IAAA,CAAK,mBAAmB,mBAAA,EAAoB;AAElD,MAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAExC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,SAAA;AAAA,QACA,aAAa,OAAA,CAAQ,IAAA;AAAA,QACrB,WAAW,SAAA,CAAU,EAAA;AAAA,QACrB,KAAA,EAAO;AAAA,UACL,IAAI,KAAA,CAAM,EAAA;AAAA,UACV,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,aAAA,EAAe,IAAA,CAAK,kBAAA,CAAmB,YAAA,CAAa,MAAM,EAAE;AAAA,SAC9D;AAAA,QACA,UAAU,cAAA,GACN;AAAA,UACE,SAAA,EAAW,IAAA;AAAA,UACX,eAAe,cAAA,CAAe,aAAA;AAAA,UAC9B,cAAc,cAAA,CAAe;AAAA,SAC/B,GACA,KAAA,CAAA;AAAA,QACJ,kBAAA;AAAA,QACA,SAAA,EAAW;AAAA,UACT,kDAAA;AAAA,UACA,iDAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,IAAA,CAAK,mBAAmB,QAAA,EAAS;AACvC,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,mBAAA,GAAsD;AAC1D,IAAA,OAAO,IAAA,CAAK,mBAAmB,mBAAA,EAAoB;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,wBAAA,CACJ,YAAA,EACA,cAAA,EACmC;AACnC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,aAAa,EAAE,MAAA,EAAQ,EAAC,EAAe,KAAA,EAAO,EAAC,EAAc;AAEnE,IAAA,IAAI;AAEF,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,kBAAA,CAAmB,SAAS,YAAY,CAAA;AAC3E,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AAE3C,MAAA,IAAI,CAAC,SAAS,MAAA,IAAU,CAAC,MAAM,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AACvD,QAAA,MAAM,IAAI,wBAAwB,yBAAA,EAA2B;AAAA,UAC3D,EAAE,KAAA,EAAO,QAAA,EAAU,SAAS,kBAAA,EAAoB,KAAA,EAAO,SAAS,MAAA;AAAO,SACxE,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,MAAA,IAAI,YAAA,GAAe,CAAA;AAGnB,MAAA,KAAA,MAAW,aAAA,IAAiB,SAAS,MAAA,EAAQ;AAC3C,QAAA,MAAM,SAAA,GAAY,MAAM,iBAAA,CAAkB;AAAA,UACxC,KAAA,EAAO,cAAc,KAAA,IAAS,gBAAA;AAAA,UAC9B,MAAA,EAAQ,cAAc,MAAA,IAAU,UAAA;AAAA,UAChC,SAAS;AAAC,SACX,CAAA;AAED,QAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,eAAe,WAAA,CAAY,SAAA,EAAW,eAAe,OAAO,CAAA;AACrF,QAAA,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA;AAC/B,QAAA,aAAA,EAAA;AAGA,QAAA,IAAI,cAAc,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,aAAA,CAAc,KAAK,CAAA,EAAG;AAC7D,UAAA,KAAA,MAAW,YAAA,IAAgB,cAAc,KAAA,EAAO;AAC9C,YAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB;AAAA,cACtC,KAAA,EAAO,aAAa,KAAA,IAAS,eAAA;AAAA,cAC7B,QAAA,EAAU,aAAa,QAAA,IAAY,QAAA;AAAA,cACnC,WAAA,EAAa,aAAa,WAAA,IAAe,EAAA;AAAA,cACzC,IAAA,EAAM,YAAA,CAAa,IAAA,IAAQ,EAAC;AAAA,cAC5B,QAAA,EAAU,CAAC,KAAA,CAAM,EAAE;AAAA,aACpB,CAAA;AAED,YAAA,MAAM,OAAO,MAAM,IAAA,CAAK,eAAe,UAAA,CAAW,QAAA,EAAU,eAAe,OAAO,CAAA;AAClF,YAAA,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA;AAC7B,YAAA,YAAA,EAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAEpC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,aAAA;AAAA,QACA,YAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,uBAAA,EAAyB;AAC5C,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,MAAM,IAAI,wBAAwB,4BAAA,EAA8B;AAAA,QAC9D,EAAE,KAAA,EAAO,UAAA,EAAY,OAAA,EAAS,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAA,EAAiB,KAAA,EAAO,YAAA;AAAa,OAC7G,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,qBAAqB,OAAA,EAAgC;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,mBAAmB,QAAA,EAAS;AAAA,IACzC,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAA,GAA8C;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,aAAA,CAAc,UAAA,EAAW;AACnD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO;AAAA,QACL,IAAI,MAAA,CAAO,SAAA;AAAA,QACX,MAAM,MAAA,CAAO,WAAA;AAAA,QACb,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,iBAAiB,MAAA,CAAO;AAAA,OAC1B;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,OAAA,EAA+C;AACvE,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,aAAA,CAAc,UAAA,EAAW;AAC1D,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,MACnD;AAAA,IAEF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,wBAAwB,6BAAA,EAA+B;AAAA,QAC/D,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAA,EAAiB,KAAA,EAAO,OAAA;AAAQ,OACtG,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAA,GAAgD;AACpD,IAAA,MAAM,IAAI,MAAM,gEAAgE,CAAA;AAAA,EAClF;AAAA;AAAA,EAIQ,kBAAkB,IAAA,EAAsB;AAC9C,IAAA,OAAO,IAAA,CACJ,aAAY,CACZ,OAAA,CAAQ,cAAc,GAAG,CAAA,CACzB,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AAAA,EACvB;AACF,CAAA;;;ACjWA,IAAA,wBAAA,GAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,uBAAA,GAAA;AAAA,EACE,OAAA,EAAW,OAAA;AAAA,EACX,IAAA,EAAQ,mCAAA;AAAA,EACR,WAAA,EAAe,4EAAA;AAAA,EACf,iBAAA,EAAqB;AAAA,IACnB,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,oBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,WAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,qBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,UAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA,WACnB;AAAA,UACA,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,UAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA,WACnB;AAAA,UACA,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ,UAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS,gCAAA;AAAA,QACT,YAAA,EAAgB;AAAA,UACd;AAAA;AACF;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,sBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,UAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,KACF;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,SAAA,EAAa;AAAA,MACX,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,oBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,WAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB,kBAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF;AACF,GACF;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,4CAAA,EAAgD;AAAA,MAC9C,WAAA,EAAe,8DAAA;AAAA,MACf,UAAA,EAAc;AAAA,KAChB;AAAA,IACA,6BAAA,EAAiC;AAAA,MAC/B,WAAA,EAAe,4CAAA;AAAA,MACf,UAAA,EAAc;AAAA,KAChB;AAAA,IACA,uBAAA,EAA2B;AAAA,MACzB,WAAA,EAAe,0DAAA;AAAA,MACf,UAAA,EAAc;AAAA;AAChB,GACF;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,aAAA,EAAe;AAAA,MACb,OAAA,EAAW;AAAA,QACT,KAAA,EAAS;AAAA,UACP;AAAA,SACF;AAAA,QACA,aAAA,EAAe;AAAA,UACb,QAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR;AAAA,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN;AAAA,SACF;AAAA,QACA,SAAA,EAAa;AAAA,UACX;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,aAAA,EAAe;AAAA,MACb,OAAA,EAAW;AAAA,QACT,KAAA,EAAS;AAAA,UACP;AAAA,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR;AAAA,SACF;AAAA,QACA,KAAA,EAAS;AAAA,UACP;AAAA,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR;AAAA,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN;AAAA,SACF;AAAA,QACA,QAAA,EAAY;AAAA,UACV;AAAA,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,SACF;AAAA,QACA,SAAA,EAAa;AAAA,UACX;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,WAAA;AAAA,MACT,MAAA,EAAU;AAAA;AACZ;AAEJ,CAAA;;;AC5LA,IAAA,sBAAA,GAAA;AAAA,EACE,OAAA,EAAW,OAAA;AAAA,EACX,IAAA,EAAQ,iBAAA;AAAA,EACR,WAAA,EAAe,sEAAA;AAAA,EACf,iBAAA,EAAqB;AAAA,IACnB,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,oBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,eAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,qBAAA;AAAA,QACX,YAAA,EAAgB;AAAA,UACd;AAAA;AACF;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS,gBAAA;AAAA,QACT,YAAA,EAAgB;AAAA,UACd;AAAA;AACF;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,sBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,cAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,KACF;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS;AAAA;AACX;AACF,GACF;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,4BAAA,EAAgC;AAAA,MAC9B,WAAA,EAAe,6DAAA;AAAA,MACf,UAAA,EAAc;AAAA,KAChB;AAAA,IACA,4BAAA,EAAgC;AAAA,MAC9B,WAAA,EAAe,gDAAA;AAAA,MACf,UAAA,EAAc;AAAA;AAChB,GACF;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,aAAA,EAAe;AAAA,MACb,OAAA,EAAW;AAAA,QACT,iBAAA,EAAmB;AAAA,UACjB;AAAA,SACF;AAAA,QACA,gBAAA,EAAkB;AAAA,UAChB,QAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,aAAA,EAAe;AAAA,UACb;AAAA,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN;AAAA,SACF;AAAA,QACA,aAAA,EAAiB;AAAA,UACf;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,OAAA,EAAW;AAAA,QACT,iBAAA,EAAmB;AAAA,UACjB;AAAA,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,SACF;AAAA,QACA,cAAA,EAAgB;AAAA,UACd;AAAA,SACF;AAAA,QACA,gBAAA,EAAkB;AAAA,UAChB;AAAA,SACF;AAAA,QACA,YAAA,EAAc;AAAA,UACZ;AAAA,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,UACf;AAAA,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,WAAA;AAAA,MACT,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,qBAAA,EAAuB;AAAA,MACrB,OAAA,EAAW;AAAA,QACT,eAAA,EAAiB;AAAA,UACf;AAAA,SACF;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB;AAAA,SACF;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB;AAAA,SACF;AAAA,QACA,gBAAA,EAAkB;AAAA,UAChB;AAAA,SACF;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB;AAAA,SACF;AAAA,QACA,QAAA,EAAY;AAAA,UACV;AAAA,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,QAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,iBAAA,EAAmB;AAAA,MACjB,OAAA,EAAW;AAAA,QACT,OAAA,EAAS;AAAA,UACP;AAAA,SACF;AAAA,QACA,aAAA,EAAe;AAAA,UACb;AAAA,SACF;AAAA,QACA,aAAA,EAAe;AAAA,UACb;AAAA,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN;AAAA,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,MAAA;AAAA,MACT,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,wBAAA,EAA0B;AAAA,MACxB,OAAA,EAAW;AAAA,QACT,iBAAA,EAAmB;AAAA,UACjB,OAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,OAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,UACf;AAAA,SACF;AAAA,QACA,aAAA,EAAiB;AAAA,UACf;AAAA,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,QAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,WAAA;AAAA,MACT,MAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,iBAAA,EAAqB;AAAA,IACnB,WAAA,EAAe,6DAAA;AAAA,IACf,eAAA,EAAmB;AAAA,MACjB;AAAA,QACE,EAAA,EAAM,oBAAA;AAAA,QACN,QAAA,EAAY;AAAA,UACV;AAAA,YACE,KAAA,EAAS,wBAAA;AAAA,YACT,MAAA,EAAU;AAAA,WACZ;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,KAAA,EAAS,oBAAA;AAAA,YACT,MAAA,EAAU;AAAA,WACZ;AAAA,UACA;AAAA,YACE,KAAA,EAAS,qBAAA;AAAA,YACT,MAAA,EAAU;AAAA;AACZ;AACF,OACF;AAAA,MACA;AAAA,QACE,EAAA,EAAM,+BAAA;AAAA,QACN,QAAA,EAAY;AAAA,UACV;AAAA,YACE,KAAA,EAAS,yBAAA;AAAA,YACT,MAAA,EAAU;AAAA,WACZ;AAAA,UACA;AAAA,YACE,KAAA,EAAS,yBAAA;AAAA,YACT,MAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF;AAEJ,CAAA;;;AFpMO,IAAM,eAAA,GAAN,MAAM,gBAAA,CAAqC;AAAA,EACxC,MAAA;AAAA,EAER,YAAY,YAAA,EAA2C;AACrD,IAAA,IAAA,CAAK,eAAe,YAAA,CAAa,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,QAAQ,QAAQ,CAAA;AAC7E,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,OAAO,cAAc,eAAA,EAAoD;AACvE,IAAA,OAAO,IAAI,gBAAA,CAAgB;AAAA,MACzB,MAAA,EAAQ,uBAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,OAAO,YAAY,eAAA,EAAoD;AACrE,IAAA,OAAO,IAAI,gBAAA,CAAgB;AAAA,MACzB,MAAA,EAAQ,sBAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEQ,cAAA,CAAe,QAAwB,UAAA,EAA0B;AACvE,IAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,cAAc,CAAA;AACrF,IAAA,MAAM,OAAA,GAAU,UAAU,MAAM,CAAA;AAEhC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,EAAQ,GAAA,CAAI,SAAO,CAAA,EAAG,GAAA,CAAI,YAAY,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,0BAAA;AACjG,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,UAAU,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAA,GAA4B;AAClC,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,2BAAA,CAA4B,gBAAqC,KAAA,EAA4B;AAEnG,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA,EAAG;AACjE,MAAA,IAAI,cAAc,aAAA,EAAe;AAEjC,MAAA,MAAM,eAAA,GAAkB,MAAM,KAAA,EAAO,IAAA,CAAK,UAAQ,OAAA,CAAQ,gBAAA,EAAkB,QAAA,CAAS,IAAI,CAAC,CAAA;AAC1F,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,OAAO,SAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkB,IAAA,EAAkB,EAAA,EAAgB,QAAA,EAA6D;AACrH,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAG9B,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,iBAAA,GAAoB,EAAE,CAAA;AAEtD,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,YAAY,gBAAA,CAAiB;AAAA,KAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkB,SAAA,EAAsB,OAAA,EAA8C;AAC1F,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAE9B,IAAA,IAAI,CAAC,QAAQ,YAAA,EAAc;AACzB,MAAA,MAAM,IAAI,MAAM,yEAAyE,CAAA;AAAA,IAC3F;AACA,IAAA,MAAM,cAAc,OAAA,CAAQ,YAAA;AAE5B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,iBAAA,GAAoB,WAAW,CAAA;AAC/D,IAAA,IAAI,CAAC,kBAAkB,OAAO,KAAA;AAG9B,IAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,CAAK,SAAS,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,cAAA,GAAiB,iBAAiB,QAAA,CAAS,UAAA;AACjD,IAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAG5B,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,2BAAA,CAA4B,cAAA,EAAgB,KAAK,CAAA;AAC7E,IAAA,MAAM,OAAA,GAAU,eAAe,cAAc,CAAA;AAC7C,IAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAGrB,IAAA,IAAI,SAAA,CAAU,IAAA,KAAS,OAAA,CAAQ,IAAA,EAAM;AACnC,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,qBAAA,GAAwB,MAAM,KAAA,EAAO,IAAA,CAAK,UAAQ,OAAA,CAAQ,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAC,CAAA;AAC/F,IAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,oBAAA,GAAuB,OAAA,CAAQ,UAAA,IAAc,CAAC,SAAS,CAAA;AAC7D,IAAA,MAAM,kBAAA,GAAqB,oBAAA,CAAqB,MAAA,CAAO,CAAA,CAAA,KAAK;AAI1D,MAAA,OAAO,CAAA,CAAE,IAAA,KAAS,OAAA,CAAQ,IAAA,IAAQ,qBAAA;AAAA,IACpC,CAAC,CAAA;AAGD,IAAA,IAAI,kBAAA,CAAmB,MAAA,GAAS,OAAA,CAAQ,aAAA,EAAe;AACrD,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CAAoB,KAAA,EAAiB,OAAA,EAA8C;AACvF,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAE9B,IAAA,KAAA,MAAW,UAAU,KAAA,EAAO;AAC1B,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,YAAA,GAAe,MAAM,CAAA;AAE/C,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qBAAA,EAAwB,MAAM,CAAA,CAAE,CAAA;AAC7C,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAI,WAAA,GAAc,KAAA;AAGlB,MAAA,QAAQ,WAAW,UAAA;AAAY,QAC7B,KAAK,qBAAA;AAEH,UAAA,MAAM,UAAA,GAAa,QAAQ,SAAA,EAAW,IAAA;AAAA,YAAK,CAAA,CAAA,KACzC,CAAA,CAAE,IAAA,KAAS,YAAA,IAAgB,EAAE,MAAA,KAAW;AAAA,WAC1C;AACA,UAAA,WAAA,GAAc,CAAC,CAAC,UAAA;AAChB,UAAA;AAAA,QAEF,KAAK,iBAAA;AAEH,UAAA,IAAI,CAAC,QAAQ,IAAA,CAAK,QAAA,IAAY,QAAQ,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAChE,YAAA,WAAA,GAAc,KAAA;AACd,YAAA;AAAA,UACF;AACA,UAAA,MAAM,eAAe,OAAA,CAAQ,MAAA,EAAQ,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,QAAQ,CAAA;AACtE,UAAA,IAAI,CAAC,YAAA,IAAgB,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG;AAC9C,YAAA,WAAA,GAAc,KAAA;AACd,YAAA;AAAA,UACF;AAEA,UAAA,WAAA,GAAc,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,IAAA,KAAQ,YAAA,CAAa,IAAA,CAAK,CAAA,EAAA,KAAM,EAAA,CAAG,EAAA,KAAO,IAAI,CAAC,CAAA;AACxF,UAAA;AAAA,QAEF,KAAK,iBAAA;AAEH,UAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA,GAAA,KAAO,GAAA,CAAI,UAAA,CAAW,OAAO,CAAC,CAAA;AACrE,UAAA,IAAI,CAAC,MAAA,EAAQ;AACX,YAAA,WAAA,GAAc,IAAA;AACd,YAAA;AAAA,UACF;AAEA,UAAA,WAAA,GAAc,OAAA,CAAQ,KAAK,MAAA,KAAW,QAAA,IAAA,CAAa,QAAQ,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA,IAAK,CAAA;AACzF,UAAA;AAAA,QAEF,KAAK,QAAA;AAGH,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAM,CAAA,UAAA,CAAY,CAAA;AAC9C,UAAA,WAAA,GAAc,IAAA;AACd,UAAA;AAAA,QAEF;AACE,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yBAAA,EAA4B,UAAA,CAAW,UAAU,CAAA,CAAE,CAAA;AAChE,UAAA,WAAA,GAAc,KAAA;AACd,UAAA;AAAA;AAIJ,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAGA,MAAM,wBAAwB,IAAA,EAA6C;AACzE,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,IAAA,IAAI,CAAC,OAAO,iBAAA,EAAmB;AAC7B,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,YAA8B,EAAC;AACrC,IAAA,KAAA,MAAW,OAAA,IAAW,OAAO,iBAAA,EAAmB;AAC9C,MAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,iBAAA,CAAkB,OAAO,CAAA;AACzD,MAAA,IAAI,gBAAA,IAAoB,gBAAA,CAAiB,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AAC5D,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,EAAA,EAAI,OAAA;AAAA,UACJ,YAAY,gBAAA,CAAiB;AAAA,SAC9B,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACF,CAAA;;;AGnSA,IAAA,sBAAA,GAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;AC4CO,IAAM,gBAAN,MAA8C;AAAA,EAClC,WAAA;AAAA,EAEjB,YAAY,WAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,GAA2C;AAC/C,IAAA,OAAO,IAAA,CAAK,YAAY,UAAA,EAAW;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,GAAuC;AAC3C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,OAAO,QAAQ,SAAA,IAAa,IAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,GAA+D;AACnE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,IAAA,OAAO;AAAA,MACL,IAAI,MAAA,CAAO,SAAA;AAAA,MACX,MAAM,MAAA,CAAO;AAAA,KACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAA,GAA4C;AAChD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,IAAI,CAAC,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA;AAEjC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,QAAA,IAAY,QAAA;AAAA,MACxC,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,UAAA,IAAc,CAAA;AAAA,MAC5C,mBAAA,EAAqB,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,mBAAA,IAAuB,EAAA;AAAA,MAC9D,oBAAA,EAAsB,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,oBAAA,IAAwB;AAAA,KAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,GAAyC;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AAErC,IAAA,OAAO;AAAA,MACL,aAAA,EAAe;AAAA,QACb,sBAAA,EAAwB,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,eAAe,sBAAA,IAA0B,EAAA;AAAA,QAC1F,cAAA,EAAgB,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,eAAe,cAAA,IAAkB,KAAA;AAAA,QAC1E,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,eAAe,6BAAA,IAAiC,IAAA;AAAA,QACxG,qBAAA,EAAuB,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,eAAe,qBAAA,IAAyB;AAAA,OAC1F;AAAA,MACA,WAAA,EAAa;AAAA,QACX,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,aAAa,iBAAA,IAAqB,GAAA;AAAA,QAC9E,sBAAA,EAAwB,QAAQ,KAAA,EAAO,QAAA,EAAU,aAAa,sBAAA,IAA0B,CAAC,OAAA,EAAS,WAAA,EAAa,OAAO;AAAA;AACxH,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAA,GAAqC;AACzC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,OAAO;AAAA,MACL,mBAAA,EAAqB,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,mBAAA,IAAuB,IAAA;AAAA,MAClE,sBAAA,EAAwB,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,sBAAA,IAA0B,IAAA;AAAA,MACxE,0BAAA,EAA4B,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,0BAAA,IAA8B;AAAA,KAClF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAiB,UAAA,EAA6C;AAClE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,IACpE;AAEA,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,MAAA,MAAA,CAAO,QAAQ,EAAC;AAAA,IAClB;AAEA,IAAA,MAAA,CAAO,MAAM,KAAA,GAAQ;AAAA,MACnB,qBAAqB,UAAA,CAAW,mBAAA;AAAA,MAChC,wBAAwB,UAAA,CAAW,sBAAA;AAAA,MACnC,4BAA4B,UAAA,CAAW;AAAA,KACzC;AAEA,IAAA,MAAM,IAAA,CAAK,WAAA,CAAY,UAAA,CAAW,MAAM,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,GAAkC;AACtC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,OAAO,MAAA,EAAQ,OAAO,MAAA,IAAU,cAAA;AAAA,EAClC;AACF,CAAA;;;AC/JA,IAAA,wBAAA,GAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,4BAAA,EAAA,MAAA,4BAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACMO,SAAS,6BACd,IAAA,EACuC;AACvC,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,cAAc,CAAA;AAC1F,EAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,OAAA,EAAS,cAAA,CAAe,MAAM,CAAA;AACxC;AAKO,SAAS,iBAAiB,IAAA,EAAuC;AACtE,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,cAAc,CAAA;AAC1F,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAMO,SAAS,+BAA+B,IAAA,EAO7C;AACA,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,6BAA6B,IAAI,CAAA;AAE9D,EAAA,MAAM,eAAA,GAAkB,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,CAAA,KAAA,MAAU;AAAA,IAC1D,KAAA,EAAO,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,UAAA,IAAc,MAAA;AAAA,IACjD,OAAA,EAAS,MAAM,OAAA,IAAW,mBAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,IAAI,EAAC;AAEP,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AAMO,SAAS,oCACd,MAAA,EAQA;AACA,EAAA,MAAM,SAAoE,EAAC;AAG3E,EAAA,MAAM,WAAA,GAAc,CAAC,OAAA,EAAS,QAAA,EAAU,SAAS,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,WAAW,CAAA;AAEpG,EAAA,KAAA,MAAW,CAAC,aAAa,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,iBAAiB,CAAA,EAAG;AAChF,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,WAAW,CAAA,EAAG;AACtC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,KAAA,EAAO,qBAAqB,WAAW,CAAA,CAAA;AAAA,QACvC,OAAA,EAAS,yBAAyB,WAAW,CAAA,CAAA;AAAA,QAC7C,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,KAAA,MAAW,SAAA,IAAa,WAAW,IAAA,EAAM;AACvC,QAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,SAAS,CAAA,EAAG;AACpC,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,KAAA,EAAO,qBAAqB,WAAW,CAAA,KAAA,CAAA;AAAA,YACvC,OAAA,EAAS,yBAAyB,SAAS,CAAA,CAAA;AAAA,YAC3C,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,EAAY,QAAA,EAAU,YAAA,IAAgB,MAAA,CAAO,YAAA,EAAc;AAC7D,MAAA,KAAA,MAAW,MAAA,IAAU,UAAA,CAAW,QAAA,CAAS,YAAA,EAAc;AACrD,QAAA,IAAI,CAAC,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA,EAAG;AAChC,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,KAAA,EAAO,qBAAqB,WAAW,CAAA,sBAAA,CAAA;AAAA,YACvC,OAAA,EAAS,gBAAgB,MAAM,CAAA,qCAAA,CAAA;AAAA,YAC/B,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,YAAA,EAAc;AACvB,IAAA,MAAM,oBAAA,GAAuB,CAAC,qBAAA,EAAuB,iBAAA,EAAmB,mBAAmB,QAAQ,CAAA;AAEnG,IAAA,KAAA,MAAW,CAAC,QAAQ,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA,EAAG;AAChE,MAAA,IAAI,QAAQ,CAAC,oBAAA,CAAqB,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA,EAAG;AAC3D,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,KAAA,EAAO,gBAAgB,MAAM,CAAA,WAAA,CAAA;AAAA,UAC7B,OAAA,EAAS,CAAA,yBAAA,EAA4B,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,UACpD,OAAO,IAAA,CAAK;AAAA,SACb,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAO,MAAA,KAAW,CAAA;AAAA,IAC3B;AAAA,GACF;AACF;;;AC/GO,SAAS,qBACd,OAAA,EACgB;AAGhB,EAAA,MAAM,MAAA,GAAyB;AAAA,IAC7B,OAAA,EAAS,QAAQ,OAAA,IAAW,OAAA;AAAA,IAC5B,IAAA,EAAM,QAAQ,IAAA,IAAQ,oBAAA;AAAA,IACtB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,iBAAA,EAAmB,QAAQ,iBAAA,IAAqB;AAAA,MAC9C,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,QACd,QAAA,EAAU;AAAA,UACR,OAAA,EAAS,oBAAA;AAAA,UACT,UAAA,EAAY;AAAA,YACV,aAAA,EAAe;AAAA,cACb,IAAA,EAAM,WAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,QAAQ,CAAA;AAAA,cAC3B,aAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF,KACF;AAAA,IACA,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,gBAAA,GAAmB,+BAA+B,MAAM,CAAA;AAC9D,EAAA,IAAI,CAAC,iBAAiB,OAAA,EAAS;AAC7B,IAAA,MAAM,IAAI,uBAAA,CAAwB,gBAAA,EAAkB,gBAAA,CAAiB,MAAM,CAAA;AAAA,EAC7E;AAGA,EAAA,MAAM,uBAAA,GAA0B,oCAAoC,MAAM,CAAA;AAC1E,EAAA,IAAI,CAAC,wBAAwB,OAAA,EAAS;AACpC,IAAA,MAAM,IAAI,uBAAA,CAAwB,iCAAA,EAAmC,uBAAA,CAAwB,MAAM,CAAA;AAAA,EACrG;AAEA,EAAA,OAAO,MAAA;AACT;AAKA,eAAsB,2BAAA,GAAuD;AAC3E,EAAA,OAAO,oBAAA,CAAqB;AAAA,IAC1B,OAAA,EAAS,OAAA;AAAA,IACT,IAAA,EAAM,mCAAA;AAAA,IACN,WAAA,EAAa,4EAAA;AAAA,IACb,iBAAA,EAAmB;AAAA,MACjB,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,QACd,QAAA,EAAU;AAAA,UACR,OAAA,EAAS,oBAAA;AAAA,UACT,UAAA,EAAY;AAAA,YACV,aAAA,EAAe;AAAA,cACb,IAAA,EAAM,WAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,QAAQ,CAAA;AAAA,cAC3B,aAAA,EAAe;AAAA;AACjB;AACF;AACF,OACF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,QACf,QAAA,EAAU;AAAA,UACR,OAAA,EAAS,qBAAA;AAAA,UACT,UAAA,EAAY;AAAA,YACV,aAAA,EAAe;AAAA,cACb,IAAA,EAAM,UAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,kBAAkB,CAAA;AAAA,cACrC,aAAA,EAAe;AAAA,aACjB;AAAA,YACA,QAAA,EAAU;AAAA,cACR,IAAA,EAAM,UAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,iBAAiB,CAAA;AAAA,cACpC,aAAA,EAAe;AAAA,aACjB;AAAA,YACA,SAAA,EAAW;AAAA,cACT,IAAA,EAAM,UAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,kBAAkB,CAAA;AAAA,cACrC,aAAA,EAAe;AAAA;AACjB;AACF;AACF,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,QACd,QAAA,EAAU;AAAA,UACR,KAAA,EAAO,gCAAA;AAAA,UACP,YAAA,EAAc,CAAC,8CAA8C;AAAA;AAC/D,OACF;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,QACf,QAAA,EAAU;AAAA,UACR,OAAA,EAAS,sBAAA;AAAA,UACT,UAAA,EAAY;AAAA,YACV,aAAA,EAAe;AAAA,cACb,IAAA,EAAM,UAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,kBAAkB,CAAA;AAAA,cACrC,aAAA,EAAe;AAAA;AACjB;AACF;AACF,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,QACb,QAAA,EAAU;AAAA,UACR,KAAA,EAAO;AAAA;AACT,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,QACzB,QAAA,EAAU;AAAA,UACR,KAAA,EAAO;AAAA;AACT;AACF,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,8CAAA,EAAgD;AAAA,QAC9C,WAAA,EAAa,8DAAA;AAAA,QACb,UAAA,EAAY;AAAA,OACd;AAAA,MACA,+BAAA,EAAiC;AAAA,QAC/B,WAAA,EAAa,4CAAA;AAAA,QACb,UAAA,EAAY;AAAA,OACd;AAAA,MACA,yBAAA,EAA2B;AAAA,QACzB,WAAA,EAAa,0DAAA;AAAA,QACb,UAAA,EAAY;AAAA;AACd;AACF,GACD,CAAA;AACH;;;AC9GO,SAAS,oBACd,KAAA,GAAgB,iBAAA,EAChB,IAAA,GAAe,QAAA,EACf,QAAgB,2BAAA,EACL;AACX,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,0FAAA;AAAA;AAAA,IACX;AAAA,GACF;AACF;AAQA,SAAS,qBAAqB,OAAA,EAAsC;AAElE,EAAA,IAAI,QAAA,IAAY,SAAS,OAAO,OAAA;AAChC,EAAA,IAAI,QAAA,IAAY,OAAA,IAAW,QAAA,IAAY,OAAA,EAAS,OAAO,WAAA;AACvD,EAAA,IAAI,cAAA,IAAkB,OAAA,IAAW,aAAA,IAAiB,OAAA,EAAS,OAAO,WAAA;AAClE,EAAA,IAAI,YAAA,IAAgB,OAAA,IAAW,UAAA,IAAc,OAAA,EAAS,OAAO,UAAA;AAC7D,EAAA,IAAI,QAAA,IAAY,OAAA,IAAW,SAAA,IAAa,OAAA,EAAS,OAAO,OAAA;AACxD,EAAA,IAAI,UAAA,IAAc,OAAA,IAAW,aAAA,IAAiB,OAAA,EAAS,OAAO,MAAA;AAC9D,EAAA,IAAI,aAAA,IAAiB,OAAA,IAAW,WAAA,IAAe,OAAA,EAAS,OAAO,OAAA;AAE/D,EAAA,OAAO,QAAA;AACT;AAuBO,SAAS,4BAAA,CACd,OAAA,EACA,OAAA,GAAyC,EAAC,EACf;AAC3B,EAAA,MAAM,YAAA,GAAe,qBAAqB,OAAO,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,EAAQ,IAAA,IAAQ,YAAA;AAGrC,EAAA,MAAM,eAAA,GAAkB,yBAAyB,OAAO,CAAA;AAGxD,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,QAAQ,UAAA,EAAY;AAEtB,IAAA,UAAA,GAAa,OAAA,CAAQ,UAAA;AAAA,EACvB,CAAA,MAAA,IAAW,OAAA,CAAQ,SAAA,EAAW,UAAA,EAAY;AAExC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,CAAU,KAAA,IAAS,iBAAA;AACzC,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,SAAA,CAAU,IAAA,IAAQ,QAAA;AACvC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,CAAU,KAAA,IAAS,qBAAA;AACzC,IAAA,UAAA,GAAa,CAAC,YAAY,OAAA,EAAS,OAAA,CAAQ,UAAU,UAAA,EAAY,KAAA,EAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EACtF,CAAA,MAAO;AAEL,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,EAAW,KAAA,IAAS,iBAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,SAAA,EAAW,IAAA,IAAQ,QAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,EAAW,KAAA,IAAS,2BAAA;AAC1C,IAAA,UAAA,GAAa,CAAC,mBAAA,CAAoB,KAAA,EAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EACvD;AAGA,EAAA,MAAM,MAAA,GAAkC;AAAA,IACtC,OAAA,EAAS,KAAA;AAAA;AAAA,IACT,IAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAI,SAAS,QAAA,IAAY;AAAA,MACvB,SAAA,EAAW,QAAQ,MAAA,EAAQ,SAAA;AAAA,MAC3B,cAAA,EAAgB,QAAQ,MAAA,EAAQ;AAAA;AAClC,GACF;AAEA,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,MAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,MAAM,UAAA,GAAa,iCAAiC,cAAc,CAAA;AAClE,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,wBAAA,EAA0B,UAAA,CAAW,MAAM,CAAA;AAAA,EAC/E;AAEA,EAAA,OAAO,cAAA;AACT;;;ACjJA,IAAA,WAAA,GAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACUO,IAAM,QAAA,GAAN,MAAM,SAAA,SAAiB,KAAA,CAAM;AAAA,EAClC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,SAAA,CAAS,SAAS,CAAA;AAAA,EAChD;AACF,CAAA;AAKO,IAAM,eAAA,GAAN,MAAM,gBAAA,SAAwB,QAAA,CAAS;AAAA,EAC5B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EAEhB,WAAA,CAAY,OAAA,EAAiB,MAAA,GAAiB,EAAA,EAAI,SAA8B,MAAA,EAAiB;AAC/F,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,gBAAA,CAAgB,SAAS,CAAA;AAAA,EACvD;AACF,CAAA;AAKO,IAAM,mBAAA,GAAN,MAAM,oBAAA,SAA4B,QAAA,CAAS;AAAA,EAChC,UAAA;AAAA,EAEhB,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA,CAAM,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAE,CAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,oBAAA,CAAoB,SAAS,CAAA;AAAA,EAC3D;AACF,CAAA;AAKO,IAAM,iBAAA,GAAN,MAAM,kBAAA,SAA0B,QAAA,CAAS;AAAA,EAC9B,QAAA;AAAA,EACA,UAAA;AAAA,EAEhB,WAAA,CAAY,UAAkB,UAAA,EAAoB;AAChD,IAAA,KAAA,CAAM,CAAA,gBAAA,EAAmB,QAAQ,CAAA,WAAA,EAAc,UAAU,CAAA,CAAE,CAAA;AAC3D,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,kBAAA,CAAkB,SAAS,CAAA;AAAA,EACzD;AACF,CAAA;AAKO,IAAM,kBAAA,GAAN,MAAM,mBAAA,SAA2B,QAAA,CAAS;AAAA,EAC/B,eAAA;AAAA,EAEhB,YAAY,eAAA,EAA2B;AACrC,IAAA,KAAA,CAAM,CAAA,2BAAA,EAA8B,eAAA,CAAgB,MAAM,CAAA,QAAA,CAAU,CAAA;AACpE,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,mBAAA,CAAmB,SAAS,CAAA;AAAA,EAC1D;AACF,CAAA;AAKO,IAAM,mBAAA,GAAN,MAAM,oBAAA,SAA4B,QAAA,CAAS;AAAA,EAChC,eAAA;AAAA,EAEhB,YAAY,eAAA,EAA2B;AACrC,IAAA,KAAA,CAAM,CAAA,4BAAA,EAA+B,eAAA,CAAgB,MAAM,CAAA,QAAA,CAAU,CAAA;AACrE,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AACZ,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,oBAAA,CAAoB,SAAS,CAAA;AAAA,EAC3D;AACF,CAAA;AAKO,IAAM,wBAAA,GAAN,MAAM,yBAAA,SAAiC,QAAA,CAAS;AAAA,EACrD,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,uBAAuB,CAAA;AAC7B,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,yBAAA,CAAyB,SAAS,CAAA;AAAA,EAChE;AACF,CAAA;AAKO,IAAM,wBAAA,GAAN,MAAM,yBAAA,SAAiC,QAAA,CAAS;AAAA,EACrC,UAAA;AAAA,EAEhB,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA,CAAM,CAAA,uBAAA,EAA0B,UAAU,CAAA,CAAE,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,yBAAA,CAAyB,SAAS,CAAA;AAAA,EAChE;AACF,CAAA;;;ACrHA,IAAA,oBAAA,GAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACwBO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EAC1C,WAAA,CACE,OAAA,EACgB,IAAA,EACA,OAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF,CAAA;ACIO,IAAM,gBAAN,MAA2C;AAAA,EAC/B,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EAEjB,YAAY,OAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,YAAY,OAAA,CAAQ,SAAA;AACzB,IAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,MAAA;AACtC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,QAAA,IAAY,GAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAc,OAAA,EAAyC;AAC3D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAS,EAAA,CAAA,QAAA,CAAS,OAAA,EAAS,OAAO,CAAA;AAClD,MAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,EAAK;AAEzB,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,GAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAK,KAAA,CAAgC,SAAS,QAAA,EAAU;AAEtD,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,kCAAkC,IAAA,CAAK,cAAA,CAAe,OAAO,CAAC,CAAA,EAAA,EAAM,MAAgB,OAAO,CAAA,CAAA;AAAA,QAC3F,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAA,CAAc,OAAA,EAAiB,UAAA,EAAmC;AACtE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AAEvC,IAAA,IAAI;AAEF,MAAA,MAAS,SAAM,IAAA,CAAK,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAGlD,MAAA,MAAS,EAAA,CAAA,SAAA,CAAU,OAAA,EAAS,UAAA,EAAY,OAAO,CAAA;AAG/C,MAAA,MAAS,EAAA,CAAA,KAAA,CAAM,OAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAAA,IACvC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,mCAAmC,IAAA,CAAK,cAAA,CAAe,OAAO,CAAC,CAAA,EAAA,EAAM,MAAgB,OAAO,CAAA,CAAA;AAAA,QAC5F,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAAmC;AACrD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAS,UAAO,OAAO,CAAA;AACvB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,OAAA,EAAmC;AACxD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAS,UAAO,OAAO,CAAA;AACvB,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAK,KAAA,CAAgC,SAAS,QAAA,EAAU;AAEtD,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,oCAAoC,IAAA,CAAK,cAAA,CAAe,OAAO,CAAC,CAAA,EAAA,EAAM,MAAgB,OAAO,CAAA,CAAA;AAAA,QAC7F,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,WAAW,OAAA,EAAyB;AAE1C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA;AAC9C,IAAA,OAAYC,KAAA,CAAA,IAAA,CAAK,KAAK,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,CAAE,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,gBAAgB,OAAA,EAAyB;AAE/C,IAAA,IAAI,SAAA,GAAY,QACb,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CACnB,OAAA,CAAQ,UAAU,GAAG,CAAA;AAGxB,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,KAAc,EAAA,EAAI;AAClC,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,2CAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,OAAA,EAAyB;AAE9C,IAAA,IAAI,OAAA,CAAQ,SAAS,EAAA,EAAI;AACvB,MAAA,OAAO,OAAA,CAAQ,SAAA,CAAU,CAAA,EAAG,EAAE,CAAA,GAAI,KAAA;AAAA,IACpC;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AACF,CAAA;;;ACjJO,IAAM,iBAAN,MAA4C;AAAA,EAChC,MAAA;AAAA,EACA,GAAA;AAAA,EACA,WAAA;AAAA,EAEjB,WAAA,CAAY,OAAA,GAAiC,EAAC,EAAG;AAC/C,IAAA,IAAA,CAAK,MAAA,GAAS,QAAQ,MAAA,IAAU,aAAA;AAEhC,IAAA,IAAA,CAAK,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA;AAElC,IAAA,IAAA,CAAK,WAAA,GAAc,OAAA,CAAQ,WAAA,IAAgB,OAAA,CAAQ,GAAA,KAAQ,MAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAc,OAAA,EAAyC;AAC3D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAE9B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACjC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAA,CAAc,OAAA,EAAiB,UAAA,EAAmC;AACtE,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,+HAAA;AAAA,QAEA,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC1C,IAAA,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,GAAI,UAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAAmC;AACrD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAC9B,IAAA,OAAO,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,IAAA,EAAK,KAAM,EAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAiB,OAAA,EAAmC;AACxD,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,wDAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,KAAM,MAAA;AACtC,IAAA,OAAO,IAAA,CAAK,IAAI,OAAO,CAAA;AACvB,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,cAAc,OAAA,EAAyB;AAE7C,IAAA,MAAM,SAAA,GAAY,OAAA,CACf,WAAA,EAAY,CACZ,QAAQ,YAAA,EAAc,GAAG,CAAA,CACzB,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAClB,OAAA,CAAQ,UAAU,EAAE,CAAA;AAGvB,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,2CAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,EACnC;AACF,CAAA;;;AC1GO,IAAM,kBAAN,MAA6C;AAAA,EACjC,IAAA;AAAA,EAEjB,WAAA,CAAY,OAAA,GAAkC,EAAC,EAAG;AAChD,IAAA,IAAI,OAAA,CAAQ,gBAAgB,GAAA,EAAK;AAC/B,MAAA,IAAA,CAAK,IAAA,GAAO,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAAA,IAClC,CAAA,MAAA,IAAW,QAAQ,IAAA,EAAM;AACvB,MAAA,IAAA,CAAK,OAAO,IAAI,GAAA,CAAI,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,IAClD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,IAAA,uBAAW,GAAA,EAAI;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAAyC;AAC3D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,IAAK,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAA,CAAc,OAAA,EAAiB,UAAA,EAAmC;AACtE,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,UAAU,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAAmC;AACrD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,OAAA,EAAmC;AACxD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,GAAe;AACb,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAyB;AACvB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,EACpC;AACF,CAAA;;;ACnGA,IAAA,mBAAA,GAAA;AAAA,QAAA,CAAA,mBAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACYO,IAAM,eAAA,GAAN,cAA8B,KAAA,CAAM;AAAA,EACzC,WAAA,CACE,OAAA,EACgB,IAAA,EACA,QAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF,CAAA;ACKO,IAAM,eAAN,MAAyC;AAAA,EAC7B,GAAA;AAAA,EAEjB,YAAY,OAAA,EAA8B;AACxC,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAA,CAAK,QAAA,EAAoB,OAAA,EAA8C;AAG3E,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,gDAAgD,OAAO,CAAA,CAAA;AAAA,UACvD,cAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,IAAS,KAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC5B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,gDAAgD,OAAO,CAAA,CAAA;AAAA,UACvD,cAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAsC;AAAA,MAC1C,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,MAAA,EAAQ,OAAA,EAAS,MAAA,IAAU,EAAC;AAAA,MAC5B,SAAA,EAAW,SAAS,SAAA,IAAa,IAAA;AAAA,MACjC,QAAA,EAAU,SAAS,QAAA,IAAY,KAAA;AAAA,MAC/B,GAAA,EAAK;AAAA,KACP;AAGA,IAAA,IAAI,OAAA,EAAS,aAAa,MAAA,EAAW;AACnC,MAAA,SAAA,CAAU,OAAO,OAAA,CAAQ,QAAA;AAAA,IAC3B;AAEA,IAAA,OAAO,EAAA,CAAG,UAAU,SAAS,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAA,EAAoC;AAE/C,IAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAE1B,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAC7C,MAAA,MAASC,UAAO,QAAQ,CAAA;AACxB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,QAAA,EAAmC;AAE5C,IAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAE1B,IAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAC7C,IAAA,IAAI;AACF,MAAA,OAAO,MAASA,EAAA,CAAA,QAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAAA,IAC5C,SAAS,GAAA,EAAc;AACrB,MAAA,MAAM,KAAA,GAAQ,GAAA;AACd,MAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,mBAAmB,QAAQ,CAAA,CAAA;AAAA,UAC3B,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,sBAAsB,QAAQ,CAAA,CAAA;AAAA,UAC9B,mBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,YAAA,EAAe,MAAM,OAAO,CAAA,CAAA;AAAA,QAC5B,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,QAAA,EAAsC;AAE/C,IAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAE1B,IAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAASA,EAAA,CAAA,IAAA,CAAK,QAAQ,CAAA;AACpC,MAAA,OAAO;AAAA,QACL,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,OAAO,KAAA,CAAM,OAAA;AAAA,QACb,MAAA,EAAQ,MAAM,MAAA;AAAO,OACvB;AAAA,IACF,SAAS,GAAA,EAAc;AACrB,MAAA,MAAM,KAAA,GAAQ,GAAA;AACd,MAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,mBAAmB,QAAQ,CAAA,CAAA;AAAA,UAC3B,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,YAAA,EAAe,MAAM,OAAO,CAAA,CAAA;AAAA,QAC5B,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAa,QAAA,EAAwB;AAC3C,IAAA,IAAI,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,6CAA6C,QAAQ,CAAA,CAAA;AAAA,QACrD,cAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAS,KAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,6CAA6C,QAAQ,CAAA,CAAA;AAAA,QACrD,cAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AClKA,SAAS,aAAA,CAAc,UAAoB,SAAA,EAA+B;AACxE,EAAA,MAAM,OAAA,GAAU,UAAU,QAAQ,CAAA;AAClC,EAAA,OAAO,SAAA,CAAU,MAAA,CAAO,CAAA,QAAA,KAAY,OAAA,CAAQ,QAAQ,CAAC,CAAA;AACvD;AAKA,SAAS,aAAA,CAAc,WAAqB,cAAA,EAAoC;AAC9E,EAAA,IAAI,CAAC,cAAA,CAAe,MAAA,EAAQ,OAAO,SAAA;AACnC,EAAA,MAAM,SAAA,GAAY,UAAU,cAAc,CAAA;AAC1C,EAAA,OAAO,UAAU,MAAA,CAAO,CAAA,QAAA,KAAY,CAAC,SAAA,CAAU,QAAQ,CAAC,CAAA;AAC1D;AAuBO,IAAM,mBAAN,MAA6C;AAAA,EACjC,KAAA;AAAA,EACA,KAAA;AAAA;AAAA;AAAA;AAAA,EAKjB,WAAA,CAAY,OAAA,GAAmC,EAAC,EAAG;AAEjD,IAAA,IAAI,OAAA,CAAQ,iBAAiB,GAAA,EAAK;AAChC,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAAA,IACpC,CAAA,MAAA,IAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAA,CAAK,QAAQ,IAAI,GAAA,CAAI,OAAO,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IACpD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,uBAAY,GAAA,EAAI;AAAA,IACvB;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA,oBAAS,IAAI,GAAA,EAAI;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAA,CAAK,QAAA,EAAoB,OAAA,EAA8C;AAC3E,IAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAG7C,IAAA,IAAI,OAAA,GAAU,aAAA,CAAc,QAAA,EAAU,QAAQ,CAAA;AAG9C,IAAA,IAAI,OAAA,EAAS,QAAQ,MAAA,EAAQ;AAC3B,MAAA,OAAA,GAAU,aAAA,CAAc,OAAA,EAAS,OAAA,CAAQ,MAAM,CAAA;AAAA,IACjD;AAEA,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAA,EAAoC;AAC/C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAAA,EAAmC;AAC5C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AACvC,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,mBAAmB,QAAQ,CAAA,CAAA;AAAA,QAC3B,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,QAAA,EAAsC;AAC/C,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,mBAAmB,QAAQ,CAAA,CAAA;AAAA,QAC3B,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAGA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AAC7C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAO,aAAA;AAAA,IACT;AAGA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AACvC,IAAA,OAAO;AAAA,MACL,MAAM,OAAA,CAAQ,MAAA;AAAA,MACd,KAAA,EAAO,KAAK,GAAA,EAAI;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAA,CAAQ,UAAkB,OAAA,EAAuB;AAC/C,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,OAAO,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,QAAA,EAA2B;AACpC,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,GAAe;AACb,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAsB;AACpB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAAA,EACrC;AACF,CAAA;;;AClLA,IAAA,YAAA,GAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,UAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;AC6BO,SAAS,cAAc,OAAA,EAAqD;AACjF,EAAA,OAAO,WAAW,OAAA,IAAW,QAAA,IAAY,OAAA,IAAW,UAAA,IAAc,WAAW,aAAA,IAAiB,OAAA;AAChG;AAMO,SAAS,eAAe,OAAA,EAAsD;AACnF,EAAA,OAAO,OAAA,IAAW,OAAA,IAAW,QAAA,IAAY,OAAA,IAAW,EAAE,UAAA,IAAc,OAAA,CAAA;AACtE;AAMO,SAAS,mBAAmB,OAAA,EAA0D;AAC3F,EAAA,OAAO,YAAY,OAAA,IAAW,OAAA,IAAW,OAAA,IAAW,MAAA,IAAU,WAAW,QAAA,IAAY,OAAA;AACvF;;;ACMA,IAAMH,OAAAA,GAAS,aAAa,SAAS,CAAA;AAMrC,IAAM,gBAAA,GAAyD;AAAA,EAC7D,IAAA,EAAM,YAAA;AAAA,EACN,KAAA,EAAO,aAAA;AAAA,EACP,KAAA,EAAO,aAAA;AAAA,EACP,KAAA,EAAO,aAAA;AAAA,EACP,SAAA,EAAW,iBAAA;AAAA,EACX,SAAA,EAAW,iBAAA;AAAA,EACX,QAAA,EAAU;AACZ,CAAA;AAWO,IAAM,aAAN,MAAwC;AAAA,EAC5B,MAAA;AAAA,EACA,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjB,YAAY,YAAA,EAAuC;AACjD,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA,EAAc,MAAA,IAAU,EAAC;AACvC,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAc,cAAA,IAAkB,IAAA;AAEtD,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,MAAAA,OAAAA,CAAO,KAAK,mEAAmE,CAAA;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAA,CAAW,QAAsB,OAAA,EAA0C;AACzE,IAAA,MAAM,UAAwB,EAAC;AAC/B,IAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,WAAW,CAAA,QAAA,EAAW,QAAQ,SAAQ,GAAI,OAAA;AAExE,IAAA,IAAI;AAEF,MAAA,IAAA,CAAK,kBAAA,CAAmB,QAAQ,UAAU,CAAA;AAG1C,MAAA,MAAM,mBAAmB,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,QAAA,EAAU,UAAU,UAAU,CAAA;AACvF,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,gBAAgB,CAAA;AAAA,IAElC,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,uBAAA,EAAyB;AAC5C,QAAA,MAAM,uBAAA,GAA0B,MAAM,MAAA,CAAO,IAAA;AAAA,UAAK,CAAA,CAAA,KAChD,EAAE,OAAA,CAAQ,QAAA,CAAS,qCAAqC,CAAA,IACxD,CAAA,CAAE,OAAA,CAAQ,QAAA,CAAS,qCAAqC;AAAA,SAC1D;AAEA,QAAA,MAAM,cAAA,GAAiB,uBAAA,GACnB,KAAA,CAAM,MAAA,CAAO,MAAA;AAAA,UAAO,OACpB,CAAC,CAAA,CAAE,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,IAC3B,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAS,YAAY,CAAA,IAChC,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAS,yBAAyB;AAAA,YAE7C,KAAA,CAAM,MAAA;AAEV,QAAA,KAAA,MAAW,OAAO,cAAA,EAAgB;AAChC,UAAA,MAAM,YAAY,IAAI,uBAAA,CAAwB,QAAA,EAAU,CAAC,GAAG,CAAC,CAAA;AAC7D,UAAA,SAAA,CAAU,UAAU,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAA;AAChD,UAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,mBAAA,CAAoB,SAAS,CAAA;AACxD,UAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAE1C,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,QAAA;AAAA,YACA,SAAA,EAAW,aAAA;AAAA,YACX,SAAS,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAA;AAAA,YACrC,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,YACzC,OAAA,EAAS,SAAA;AAAA,YACT,GAAI,GAAA,IAAO;AAAA,cACT,OAAA,EAAS;AAAA,gBACP,GAAI,GAAA,CAAI,KAAA,IAAS,EAAE,KAAA,EAAO,IAAI,KAAA,EAAM;AAAA,gBACpC,GAAI,GAAA,CAAI,KAAA,KAAU,UAAa,EAAE,MAAA,EAAQ,IAAI,KAAA,EAAM;AAAA,gBACnD,GAAI,GAAA,CAAI,OAAA,IAAW,EAAE,QAAA,EAAU,IAAI,OAAA;AAAQ;AAC7C;AACF,WACD,CAAA;AAAA,QACH;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,KAAA,EAAO,OAAA;AAAA,UACP,QAAA;AAAA,UACA,SAAA,EAAW,mBAAA;AAAA,UACX,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,UAC9D,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,UACzC,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,KACJ,OAAA,EACqB;AACrB,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,IAAA,GAAoB;AAAA,MACxB,kBAAA,EAAoB,SAAS,kBAAA,IAAsB,KAAA;AAAA,MACnD,cAAA,EAAgB,SAAS,cAAA,IAAkB,KAAA;AAAA,MAC3C,iBAAA,EAAmB,SAAS,iBAAA,IAAqB,IAAA;AAAA,MACjD,kBAAA,EAAoB,SAAS,kBAAA,IAAsB,IAAA;AAAA,MACnD,kBAAA,EAAoB,SAAS,kBAAA,IAAsB,IAAA;AAAA,MACnD,QAAA,EAAU,SAAS,QAAA,IAAY,KAAA;AAAA,MAC/B,UAAA,EAAY,SAAS,UAAA,IAAc,IAAA;AAAA,MACnC,gBAAA,EAAkB,SAAS,gBAAA,IAAoB;AAAA,KACjD;AAEA,IAAA,MAAM,UAAwB,EAAC;AAG/B,IAAA,MAAM,QAAA,GAA2F;AAAA,MAC/F,CAAC,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,MAC1B,CAAC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,MAC5B,CAAC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,MAC5B,CAAC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,MAC5B,CAAC,WAAA,EAAa,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAAA,MACpC,CAAC,UAAA,EAAY,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAAA,MAClC,CAAC,WAAA,EAAa,IAAA,CAAK,MAAA,CAAO,UAAU;AAAA,KACtC;AAEA,IAAA,MAAM,gBAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,QAAA,EAAU;AACpC,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,IAAA,EAAK;AAC7B,MAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,QAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA;AACjC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,aAAA,CAAc,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAM,CAAA;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,MAAA,MAAM,OAAA,GAA6B;AAAA,QACjC,UAAU,KAAA,CAAM,EAAA;AAAA,QAChB,YAAY,KAAA,CAAM,IAAA;AAAA,QAClB,GAAI,KAAA,CAAM,QAAA,KAAa,UAAa,EAAE,QAAA,EAAU,MAAM,QAAA;AAAS,OACjE;AAEA,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAQ,OAAO,CAAA;AAC3D,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,aAAa,CAAA;AAG7B,MAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,QAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,kBAAA;AAAA,UAC5B,KAAA,CAAM,MAAA;AAAA,UAAQ,KAAA,CAAM,EAAA;AAAA,UAAI,KAAA,CAAM,QAAA,IAAY,CAAA,QAAA,EAAW,KAAA,CAAM,EAAE,CAAA,KAAA,CAAA;AAAA,UAAS,KAAA,CAAM;AAAA,SAC9E;AACA,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA,MAC5B;AAGA,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,cAAA;AAAA,UAC9B,KAAA,CAAM,MAAA;AAAA,UAAQ,KAAA,CAAM,EAAA;AAAA,UAAI,KAAA,CAAM,QAAA,IAAY,CAAA,QAAA,EAAW,KAAA,CAAM,EAAE,CAAA,KAAA,CAAA;AAAA,UAAS,KAAA,CAAM;AAAA,SAC9E;AACA,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,YAAY,CAAA;AAAA,MAC9B;AAEA,MAAA,IAAI,IAAA,CAAK,YAAY,aAAA,CAAc,IAAA,CAAK,OAAK,CAAA,CAAE,KAAA,KAAU,OAAO,CAAA,EAAG;AACjE,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AACnC,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,KAAA,KAAU,OAAO,CAAA,CAAE,MAAA;AACxD,IAAA,MAAM,WAAW,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,KAAA,KAAU,SAAS,CAAA,CAAE,MAAA;AAC5D,IAAA,MAAM,UAAU,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,CAAA,CAAE,MAAA;AAE/C,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP,cAAc,aAAA,CAAc,MAAA;AAAA,QAC5B,MAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAU;AAAA,QACR,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,OAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACX,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAAA,CACE,MAAA,EACA,OAAA,EACA,OAAA,EACc;AACd,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,OAAO,CAAA;AAEpD,IAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,IAAI,cAA4B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAEjE,IAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AAEnC,MAAA,IAAI,OAAA,CAAQ,YAAY,CAAC,OAAA,CAAQ,SAAS,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA,EAAG;AACpE,QAAA;AAAA,MACF;AAEA,MAAA,QAAQ,OAAO,SAAA;AAAW,QACxB,KAAK,6BAAA;AACH,UAAA,WAAA,GAAc,IAAA,CAAK,mBAAA,CAAoB,WAAA,EAAa,MAAA,EAAQ,OAAO,CAAA;AACnE,UAAA;AAAA,QAEF,KAAK,uBAAA;AACH,UAAA,WAAA,GAAc,IAAA,CAAK,YAAY,WAAW,CAAA;AAC1C,UAAA;AAAA,QAEF,KAAK,qBAAA;AACH,UAAA,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,WAAA,EAAa,MAAA,EAAQ,OAAO,CAAA;AAC5D,UAAA;AAAA;AAAA;AAAA,QAIF,KAAK,2BAAA;AACH,UAAAA,OAAAA,CAAO,KAAK,qDAAqD,CAAA;AACjE,UAAA;AAAA,QAEF;AACE,UAAAA,OAAAA,CAAO,IAAA,CAAK,CAAA,mCAAA,EAAsC,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAAA;AACxE,IACF;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,kBAAA,CAAmB,QAAsB,UAAA,EAAuD;AAEtG,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAEnD,IAAA,QAAQ,UAAA;AAAY,MAClB,KAAK,MAAA;AACH,QAAA,cAAA,CAAe,SAAS,CAAA;AACxB,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,eAAA,CAAgB,SAAS,CAAA;AACzB,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,eAAA,CAAgB,SAAS,CAAA;AACzB,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,eAAA,CAAgB,SAAS,CAAA;AACzB,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,mBAAA,CAAoB,SAAS,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,mBAAA,CAAoB,SAAS,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,kBAAA,CAAmB,SAAS,CAAA;AAC5B,QAAA;AAAA;AACJ,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,kBAAA,CACN,MAAA,EACA,QAAA,EACA,QAAA,EACA,UAAA,EACc;AACd,IAAA,MAAM,UAAwB,EAAC;AAE/B,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AAOvB,IAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,SAAA,EAAW;AAC1C,MAAA,MAAM,UAAU,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,OAAA,EAAQ;AACpD,MAAA,MAAM,UAAU,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,OAAA,EAAQ;AAEpD,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,KAAA,EAAO,OAAA;AAAA,UACP,QAAA;AAAA,UACA,SAAA,EAAW,sBAAA;AAAA,UACX,OAAA,EAAS,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA,sBAAA,EAAyB,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,UAClG,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,UACzC,OAAA,EAAS,KAAA;AAAA,UACT,OAAA,EAAS;AAAA,YACP,KAAA,EAAO,YAAA;AAAA,YACP,QAAQ,EAAE,SAAA,EAAW,QAAQ,SAAA,EAAW,SAAA,EAAW,QAAQ,SAAA,EAAU;AAAA,YACrE,QAAA,EAAU;AAAA;AACZ,SACD,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,QAAA,MAAM,YAAY,IAAI,IAAA,CAAK,OAAA,CAAQ,WAAW,EAAE,OAAA,EAAQ;AACxD,QAAA,IAAI,YAAY,OAAA,EAAS;AACvB,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,QAAA;AAAA,YACA,SAAA,EAAW,sBAAA;AAAA,YACX,OAAA,EAAS,CAAA,aAAA,EAAgB,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA,uBAAA,EAA0B,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,YACvG,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,YACzC,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,QAAA,MAAM,YAAY,IAAI,IAAA,CAAK,OAAA,CAAQ,WAAW,EAAE,OAAA,EAAQ;AACxD,QAAA,IAAI,YAAY,OAAA,EAAS;AACvB,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,QAAA;AAAA,YACA,SAAA,EAAW,sBAAA;AAAA,YACX,OAAA,EAAS,CAAA,aAAA,EAAgB,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA,uBAAA,EAA0B,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,YACvG,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,YACzC,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,kBAAA,CACZ,MAAA,EACA,QAAA,EACA,UACA,UAAA,EACuB;AACvB,IAAA,MAAM,UAAwB,EAAC;AAC/B,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AAGvB,IAAA,MAAM,SAAA,GAAY,KAAK,MAAA,CAAO,KAAA;AAC9B,IAAA,MAAM,UAAA,GAAa,KAAK,MAAA,CAAO,MAAA;AAG/B,IAAA,IAAI,eAAe,WAAA,IAAe,kBAAA,CAAmB,OAAO,CAAA,IAAK,OAAA,CAAQ,UAAU,SAAA,EAAW;AAC5F,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,MAAM,CAAA;AACrD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,KAAA,EAAO,SAAA;AAAA,YACP,QAAA;AAAA,YACA,SAAA,EAAW,uBAAA;AAAA,YACX,OAAA,EAAS,CAAA,mBAAA,EAAsB,OAAA,CAAQ,MAAM,CAAA,WAAA,CAAA;AAAA,YAC7C,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,YACzC,OAAA,EAAS,KAAA;AAAA,YACT,OAAA,EAAS,EAAE,KAAA,EAAO,QAAA,EAAU,QAAQ,OAAA,CAAQ,MAAA,EAAQ,UAAU,sBAAA;AAAuB,WACtF,CAAA;AAAA,QACH,CAAA,MAAO;AAEL,UAAA,MAAM,cAAc,UAAA,CAAW,OAAA;AAC/B,UAAA,IAAI,WAAA,CAAY,WAAW,WAAA,EAAa;AACtC,YAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,cACX,KAAA,EAAO,SAAA;AAAA,cACP,QAAA;AAAA,cACA,SAAA,EAAW,uBAAA;AAAA,cACX,OAAA,EAAS,CAAA,iBAAA,EAAoB,OAAA,CAAQ,MAAM,CAAA,wBAAA,CAAA;AAAA,cAC3C,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,cACzC,OAAA,EAAS;AAAA,aACV,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAGA,IAAA,IAAI,eAAe,MAAA,IAAU,aAAA,CAAc,OAAO,CAAA,IAAK,OAAA,CAAQ,YAAY,UAAA,EAAY;AACrF,MAAA,KAAA,MAAW,OAAA,IAAW,QAAQ,QAAA,EAAU;AACtC,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,GAAc,MAAM,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AAChD,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,MAAM,eAAe,WAAA,CAAY,OAAA;AACjC,YAAA,IAAI,aAAa,OAAA,IAAW,CAAC,aAAa,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG;AACpE,cAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,gBACX,KAAA,EAAO,SAAA;AAAA,gBACP,QAAA;AAAA,gBACA,SAAA,EAAW,2BAAA;AAAA,gBACX,OAAA,EAAS,0BAA0B,OAAO,CAAA,qCAAA,CAAA;AAAA,gBAC1C,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,gBACzC,OAAA,EAAS,IAAA;AAAA,gBACT,OAAA,EAAS,EAAE,KAAA,EAAO,UAAA,EAAY,QAAQ,OAAA,EAAS,QAAA,EAAU,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAA;AAAG,eAClG,CAAA;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,eAAe,OAAA,IAAW,cAAA,CAAe,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,SAAA,EAAW;AACrF,MAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,OAAA,EAAS;AACpC,QAAA,IAAI;AACF,UAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA;AAC7C,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,MAAM,cAAc,UAAA,CAAW,OAAA;AAC/B,YAAA,IAAI,CAAC,YAAY,QAAA,IAAY,CAAC,YAAY,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,EAAG;AACrE,cAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,gBACX,KAAA,EAAO,SAAA;AAAA,gBACP,QAAA;AAAA,gBACA,SAAA,EAAW,2BAAA;AAAA,gBACX,OAAA,EAAS,wBAAwB,MAAM,CAAA,qCAAA,CAAA;AAAA,gBACvC,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,gBACzC,OAAA,EAAS,IAAA;AAAA,gBACT,OAAA,EAAS,EAAE,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,WAAA,CAAY,QAAA,IAAY,EAAC,EAAG,QAAA,EAAU,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAA;AAAG,eACpH,CAAA;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,cAAA,CACZ,MAAA,EACA,QAAA,EACA,UACA,UAAA,EACuB;AACvB,IAAA,MAAM,UAAwB,EAAC;AAC/B,IAAA,MAAM,UAAA,GAAa,KAAK,MAAA,CAAO,MAAA;AAE/B,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAO,OAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAA,CAAO,QAAQ,UAAA,EAAY;AAC7B,MAAA,KAAA,MAAW,SAAA,IAAa,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY;AAChD,QAAA,IAAI,UAAU,KAAA,EAAO;AACnB,UAAA,IAAI;AACF,YAAA,MAAM,WAAA,GAAc,MAAM,UAAA,CAAW,GAAA,CAAI,UAAU,KAAK,CAAA;AACxD,YAAA,IAAI,CAAC,WAAA,EAAa;AAChB,cAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,gBACX,KAAA,EAAO,SAAA;AAAA,gBACP,QAAA;AAAA,gBACA,SAAA,EAAW,kBAAA;AAAA,gBACX,OAAA,EAAS,CAAA,OAAA,EAAU,SAAA,CAAU,KAAK,CAAA,mCAAA,CAAA;AAAA,gBAClC,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,gBACzC,OAAA,EAAS,KAAA;AAAA,gBACT,OAAA,EAAS,EAAE,KAAA,EAAO,kBAAA,EAAoB,QAAQ,SAAA,CAAU,KAAA,EAAO,UAAU,uBAAA;AAAwB,eAClG,CAAA;AAAA,YACH;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBQ,mBAAA,CACN,MAAA,EACA,MAAA,EACA,OAAA,EACc;AACd,IAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,MAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,IACnE;AAGA,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,IAAU,CAAC,OAAO,OAAA,EAAS;AACrC,MAAA,MAAM,IAAI,MAAM,mFAAmF,CAAA;AAAA,IACrG;AAGA,IAAA,MAAM,iBAAiB,IAAA,CAAK,YAAA,CAAa,OAAO,OAAA,EAAS,MAAA,CAAO,OAAO,IAAI,CAAA;AAG3E,IAAA,MAAM,eAAA,GAAkB,yBAAyB,cAAc,CAAA;AAG/D,IAAA,MAAM,SAAA,GAAY,WAAA;AAAA,MAChB,cAAA;AAAA,MACA,OAAA,CAAQ,UAAA;AAAA,MACR,OAAA,CAAQ,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,EAAA;AAAA,MAC/B,QAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,GAAG,MAAA,CAAO,MAAA;AAAA,QACV,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,oBAAoB,UAAA,EAA8B;AACxD,IAAA,MAAM,UAAA,GAAa,iBAAiB,UAAU,CAAA;AAC9C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAAA,OAAAA,CAAO,IAAA,CAAK,CAAA,qBAAA,EAAwB,UAAU,CAAA,mBAAA,CAAqB,CAAA;AACnE,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,MAAA,GAAS,QAAQ,UAAU,CAAA;AACjC,IAAA,IAAI,CAAC,OAAO,UAAA,EAAY;AACtB,MAAAA,OAAAA,CAAO,IAAA,CAAK,CAAA,QAAA,EAAW,UAAU,CAAA,2BAAA,CAA6B,CAAA;AAC9D,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,YAAA,CAAa,SAA8B,UAAA,EAAyC;AAC1F,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,mBAAA,CAAoB,UAAU,CAAA;AAErD,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAE1B,MAAAA,OAAAA,CAAO,IAAA,CAAK,CAAA,qCAAA,EAAwC,UAAU,CAAA,0BAAA,CAA4B,CAAA;AAC1F,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,MAAM,aAAA,GAAgB,OAAA;AAEtB,IAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,MAAA,IAAI,OAAO,aAAA,EAAe;AACxB,QAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,aAAA,CAAc,GAAG,CAAA;AAAA,MAClC;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,YAAY,MAAA,EAAoC;AACtD,IAAA,MAAM,eAAA,GAAkB,wBAAA,CAAyB,MAAA,CAAO,OAAO,CAAA;AAE/D,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,GAAG,MAAA,CAAO,MAAA;AAAA,QACV;AAAA,OACF;AAAA,MACA,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcQ,YAAA,CACN,MAAA,EACA,MAAA,EACA,OAAA,EACc;AACd,IAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,MAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,IAC3D;AAEA,IAAA,MAAM,eAAA,GAAkB,wBAAA,CAAyB,MAAA,CAAO,OAAO,CAAA;AAI/D,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,EAAQ,UAAA,GAAa,CAAC,CAAA;AACjD,IAAA,MAAM,QAAQ,WAAA,EAAa,KAAA,IAAS,OAAA,CAAQ,KAAA,IAAS,OAAO,MAAA,CAAO,EAAA;AACnE,IAAA,MAAM,IAAA,GAAO,aAAa,IAAA,IAAQ,QAAA;AAClC,IAAA,MAAM,KAAA,GAAQ,aAAa,KAAA,IAAS,mCAAA;AAEpC,IAAA,MAAM,SAAA,GAAuB,WAAA;AAAA,MAC3B,MAAA,CAAO,OAAA;AAAA,MACP,OAAA,CAAQ,UAAA;AAAA,MACR,KAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,GAAG,MAAA,CAAO,MAAA;AAAA,QACV,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,oBAAoB,KAAA,EAA+C;AACzE,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAC/C,IAAA,MAAM,YAAY,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,EAAG,KAAA,EAAO,aAAY,IAAK,EAAA;AAC7D,IAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,MAAA,EAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,EAAS,WAAA,EAAY,IAAK,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,EAAA;AAC7F,IAAA,MAAM,eAAe,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,SAAS,IAAI,gBAAgB,CAAA,CAAA;AAErE,IAAA,IAAI,aAAa,QAAA,CAAS,UAAU,KAAK,SAAA,CAAU,QAAA,CAAS,iBAAiB,CAAA,EAAG;AAC9E,MAAA,OAAO,uBAAA;AAAA,IACT;AACA,IAAA,IAAI,aAAa,QAAA,CAAS,WAAW,KAAK,SAAA,CAAU,QAAA,CAAS,cAAc,CAAA,EAAG;AAC5E,MAAA,OAAO,qBAAA;AAAA,IACT;AACA,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,QAAQ,CAAA,IAAK,YAAA,CAAa,QAAA,CAAS,SAAS,CAAA,IAAK,SAAA,CAAU,QAAA,CAAS,UAAU,CAAA,EAAG;AACzG,MAAA,OAAO,6BAAA;AAAA,IACT;AAEA,IAAA,MAAM,yBAAA,GAA4B;AAAA,MAChC,eAAA;AAAA,MAAiB,YAAA;AAAA,MAAc,UAAA;AAAA,MAAY,gBAAA;AAAA,MAAkB;AAAA,KAC/D;AACA,IAAA,IAAI,yBAAA,CAA0B,IAAA,CAAK,CAAA,CAAA,KAAK,YAAA,CAAa,QAAA,CAAS,CAAC,CAAC,CAAA,IAAK,qBAAA,CAAsB,IAAA,CAAK,YAAY,CAAA,EAAG;AAC7G,MAAA,OAAO,yBAAA;AAAA,IACT;AAEA,IAAA,OAAO,mBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,UAAU,KAAA,EAAyC;AACzD,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAE/C,IAAA,IAAI,aAAa,QAAA,CAAS,QAAQ,KAAK,YAAA,CAAa,QAAA,CAAS,UAAU,CAAA,EAAG;AACxE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,aAAa,QAAA,CAAS,qCAAqC,KAAK,YAAA,CAAa,QAAA,CAAS,qCAAqC,CAAA,EAAG;AAChI,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,UAAU,CAAA,EAAG;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,aAAa,QAAA,CAAS,WAAW,KAAK,YAAA,CAAa,QAAA,CAAS,QAAQ,CAAA,EAAG;AACzE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;;;AC9xBA,IAAA,2BAAA,GAAA;;;ACAA,IAAA,oBAAA,GAAA;;;ACAA,IAAA,kBAAA,GAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,4BAAA,EAAA,MAAA,4BAAA;AAAA,EAAA,6BAAA,EAAA,MAAA,6BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,yBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACiFO,IAAM,gBAAN,MAAoB;AAAA,EACjB,UAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAmB,KAAA;AAAA,EACnB,OAAA,GAAmB,KAAA;AAAA,EAE3B,YAAY,YAAA,EAAyC;AACnD,IAAA,IAAI,CAAC,aAAa,UAAA,EAAY;AAC5B,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AACA,IAAA,IAAI,CAAC,aAAa,aAAA,EAAe;AAC/B,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AACA,IAAA,IAAI,CAAC,aAAa,cAAA,EAAgB;AAChC,MAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,IAChE;AAEA,IAAA,IAAA,CAAK,aAAa,YAAA,CAAa,UAAA;AAC/B,IAAA,IAAA,CAAK,gBAAgB,YAAA,CAAa,aAAA;AAClC,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AAGnC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,OAAA,EAAS,KAAA;AAAA,MACT,mBAAA,EAAqB,EAAA;AAAA,MACrB,sBAAA,EAAwB,IAAA;AAAA,MACxB,cAAA,EAAgB;AAAA,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,UAAA,GAA2C;AACvD,IAAA,IAAI;AAEF,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,aAAA,CAAc,UAAA,EAAW;AAC1D,MAAA,MAAM,eAAA,GAAkB,aAAA,EAAe,KAAA,EAAO,QAAA,EAAU,iBAAiB,EAAC;AAG1E,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,cAAA,CAAe,WAAA,EAAY;AACtD,MAAA,MAAM,gBAAA,GAAmB,OAAA,EAAS,eAAA,EAAiB,aAAA,IAAiB,EAAC;AAGrE,MAAA,OAAO;AAAA,QACL,OAAA,EACE,gBAAA,CAAiB,OAAA,IAAW,eAAA,CAAgB,cAAA,IAAkB,KAAA;AAAA,QAChE,mBAAA,EACE,gBAAA,CAAiB,mBAAA,IACjB,eAAA,CAAgB,sBAAA,IAChB,EAAA;AAAA,QACF,sBAAA,EACE,gBAAA,CAAiB,sBAAA,IACjB,eAAA,CAAgB,6BAAA,IAChB,IAAA;AAAA,QACF,cAAA,EACE,gBAAA,CAAiB,cAAA,IACjB,eAAA,CAAgB,qBAAA,IAChB;AAAA,OACJ;AAAA,IACF,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,mBAAA,EAAqB,EAAA;AAAA,QACrB,sBAAA,EAAwB,IAAA;AAAA,QACxB,cAAA,EAAgB;AAAA,OAClB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,KAAA,GAAuB;AAE3B,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AAGpC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS;AACxB,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,UAAA,GAAa,YAAY,MAAM;AAClC,MAAA,KAAK,KAAK,OAAA,EAAQ;AAAA,IACpB,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,mBAAA,GAAsB,GAAI,CAAA;AAEzC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,IAAA,GAAa;AACX,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,eAAe,MAAA,EAAW;AACjC,MAAA,aAAA,CAAc,KAAK,UAAU,CAAA;AAAA,IAC/B;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,SAAA,GAAqB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,OAAA,GAAwC;AAE5C,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,UAAA,EAAY,KAAA;AAAA,QACZ,gBAAA,EAAkB,KAAA;AAAA,QAClB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAEf,IAAA,IAAI;AAEF,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,UAAA,CAAW,SAAA,EAAU;AAGnD,MAAA,MAAM,UAAA,GAAa,WAAW,SAAA,IAAa,KAAA;AAG3C,MAAA,IAAI,WAAW,gBAAA,EAAkB;AAC/B,QAAA,MAAM,MAAA,GAA8B;AAAA,UAClC,OAAA,EAAS,KAAA;AAAA,UACT,UAAA,EAAY,KAAA;AAAA,UACZ,gBAAA,EAAkB,IAAA;AAAA,UAClB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UAClC,GAAI,UAAA,CAAW,YAAA,IAAgB,EAAE,YAAA,EAAc,WAAW,YAAA;AAAa,SACzE;AAGA,QAAA,IAAI,IAAA,CAAK,OAAO,cAAA,EAAgB;AAC9B,UAAA,IAAA,CAAK,IAAA,EAAK;AAAA,QACZ;AAEA,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,UAAA;AAAA,QACA,gBAAA,EAAkB,KAAA;AAAA,QAClB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,OACpC;AAAA,IACF,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,eAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAC1E,MAAA,MAAM,cAAA,GACJ,YAAA,CAAa,QAAA,CAAS,SAAS,KAC/B,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,IAC7B,aAAa,QAAA,CAAS,SAAS,CAAA,IAC/B,YAAA,CAAa,SAAS,YAAY,CAAA;AAGpC,MAAA,IAAI,cAAA,IAAkB,IAAA,CAAK,MAAA,CAAO,sBAAA,EAAwB;AACxD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,UAAA,EAAY,KAAA;AAAA,UACZ,gBAAA,EAAkB,KAAA;AAAA,UAClB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UAClC,KAAA,EAAO;AAAA,SACT;AAAA,MACF;AAGA,MAAA,MAAM,KAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAAA,IACjB;AAAA,EACF;AACF,CAAA;;;ACjUO,IAAM,cAAA,GAAN,MAAM,eAAA,SAAuB,KAAA,CAAM;AAAA,EACxC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,eAAA,CAAe,SAAS,CAAA;AAAA,EACtD;AACF,CAAA;AAKO,IAAM,wBAAA,GAAN,MAAM,yBAAA,SAAiC,cAAA,CAAe;AAAA,EACpD,MAAA;AAAA,EAEP,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA;AAAA,MACE,oBAAoB,UAAU,CAAA,gEAAA;AAAA,KAEhC;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,UAAA;AACd,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,yBAAA,CAAyB,SAAS,CAAA;AAAA,EAChE;AACF,CAAA;AAKO,IAAM,uBAAA,GAAN,MAAM,wBAAA,SAAgC,cAAA,CAAe;AAAA,EAC1D,YACS,UAAA,EAIP;AACA,IAAA,MAAM,gBAAA,GAAmB,UAAA,CACtB,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CACpC,KAAK,IAAI,CAAA;AACZ,IAAA,KAAA,CAAM,CAAA,+BAAA,EAAkC,gBAAgB,CAAA,CAAE,CAAA;AARnD,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AASP,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,wBAAA,CAAwB,SAAS,CAAA;AAAA,EAC/D;AACF,CAAA;AAKO,IAAM,2BAAA,GAAN,MAAM,4BAAA,SAAoC,cAAA,CAAe;AAAA,EAC9D,YAAmB,gBAAA,EAA4B;AAC7C,IAAA,KAAA;AAAA,MACE,CAAA,kCAAA,EAAqC,iBAAiB,MAAM,CAAA,yDAAA;AAAA,KAE9D;AAJiB,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA;AAKjB,IAAA,IAAA,CAAK,IAAA,GAAO,6BAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,4BAAA,CAA4B,SAAS,CAAA;AAAA,EACnE;AACF,CAAA;AAKO,IAAM,uBAAA,GAAN,MAAM,wBAAA,SAAgC,cAAA,CAAe;AAAA,EAC1D,WAAA,GAAc;AACZ,IAAA,KAAA;AAAA,MACE,CAAA,yIAAA;AAAA,KAEF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,wBAAA,CAAwB,SAAS,CAAA;AAAA,EAC/D;AACF,CAAA;AAKO,IAAM,yBAAA,GAAN,MAAM,0BAAA,SAAkC,cAAA,CAAe;AAAA,EAC5D,YAAY,SAAA,EAAmB;AAC7B,IAAA,KAAA;AAAA,MACE,gCAAgC,SAAS,CAAA,wEAAA;AAAA,KAE3C;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,2BAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,0BAAA,CAA0B,SAAS,CAAA;AAAA,EACjE;AACF,CAAA;AAKO,IAAM,qBAAA,GAAN,MAAM,sBAAA,SAA8B,cAAA,CAAe;AAAA,EACxD,WAAA,CACS,QACA,eAAA,EACP;AACA,IAAA,KAAA,CAAM,CAAA,8BAAA,EAAiC,MAAM,CAAA,CAAE,CAAA;AAHxC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,sBAAA,CAAsB,SAAS,CAAA;AAAA,EAC7D;AACF,CAAA;AAQO,IAAM,0BAAA,GAAN,MAAM,2BAAA,SAAmC,cAAA,CAAe;AAAA,EACtD,gBAAA;AAAA,EACA,oBAAA;AAAA,EAEP,WAAA,CAAY,kBAA0B,oBAAA,EAA8B;AAClE,IAAA,KAAA;AAAA,MACE,CAAA,oCAAA,EAAuC,gBAAgB,CAAA,wBAAA,EAA2B,oBAAoB,CAAA,gEAAA;AAAA,KAExG;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AACZ,IAAA,IAAA,CAAK,gBAAA,GAAmB,gBAAA;AACxB,IAAA,IAAA,CAAK,oBAAA,GAAuB,oBAAA;AAC5B,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,2BAAA,CAA2B,SAAS,CAAA;AAAA,EAClE;AACF,CAAA;AAKO,IAAM,uBAAA,GAAN,MAAM,wBAAA,SAAgC,cAAA,CAAe;AAAA,EACnD,MAAA;AAAA,EAEP,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA;AAAA,MACE,mCAAmC,UAAU,CAAA,sDAAA;AAAA,KAE/C;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,UAAA;AACd,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,wBAAA,CAAwB,SAAS,CAAA;AAAA,EAC/D;AACF,CAAA;AAqBO,SAAS,iBAAiB,KAAA,EAAyC;AACxE,EAAA,OAAO,KAAA,YAAiB,cAAA;AAC1B;AAEO,SAAS,2BACd,KAAA,EACmC;AACnC,EAAA,OAAO,KAAA,YAAiB,wBAAA;AAC1B;AAEO,SAAS,0BACd,KAAA,EACkC;AAClC,EAAA,OAAO,KAAA,YAAiB,uBAAA;AAC1B;AAEO,SAAS,8BACd,KAAA,EACsC;AACtC,EAAA,OAAO,KAAA,YAAiB,2BAAA;AAC1B;AAEO,SAAS,0BACd,KAAA,EACkC;AAClC,EAAA,OAAO,KAAA,YAAiB,uBAAA;AAC1B;AAEO,SAAS,0BACd,KAAA,EACkC;AAClC,EAAA,OAAO,KAAA,YAAiB,uBAAA;AAC1B;AAEO,SAAS,wBACd,KAAA,EACgC;AAChC,EAAA,OAAO,KAAA,YAAiB,qBAAA;AAC1B;AAEO,SAAS,4BACd,KAAA,EACoC;AACpC,EAAA,OAAO,KAAA,YAAiB,yBAAA;AAC1B;AAEO,SAAS,6BACd,KAAA,EACqC;AACrC,EAAA,OAAO,KAAA,YAAiB,0BAAA;AAC1B;;;ACnNA,IAAA,0BAAA,GAAA;AAAA,QAAA,CAAA,0BAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,+BAAA,EAAA,MAAA,+BAAA;AAAA,EAAA,6BAAA,EAAA,MAAA,6BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,gCAAA,EAAA,MAAA,gCAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,+BAAA,EAAA,MAAA,+BAAA;AAAA,EAAA,6BAAA,EAAA,MAAA,6BAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,4BAAA,EAAA,MAAA,4BAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,kCAAA,EAAA,MAAA,kCAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,mCAAA,EAAA,MAAA,mCAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,4BAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,oBAAA,GAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,WAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,iBAAA,GAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;ACUA,SAAS,sBAAA,GAAiC;AACxC,EAAA,OAAO,CAAA,aAAA,EAAgB,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAC9E;AAoDO,IAAM,WAAN,MAAuC;AAAA,EACpC,OAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EAER,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,YAAA,EAAa;AAChC,IAAA,IAAA,CAAK,aAAA,uBAAoB,GAAA,EAAI;AAC7B,IAAA,IAAA,CAAK,eAAA,uBAAsB,GAAA,EAAI;AAG/B,IAAA,IAAA,CAAK,OAAA,CAAQ,gBAAgB,GAAG,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,KAAA,EAAwB;AAE9B,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,IAAQ,OAAO,KAAA,CAAM,SAAS,QAAA,EAAU;AACjD,MAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,SAAA,IAAa,OAAO,KAAA,CAAM,cAAc,QAAA,EAAU;AAC3D,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,MAAA,IAAU,OAAO,KAAA,CAAM,WAAW,QAAA,EAAU;AACrD,MAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,IACzD;AAGA,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AAGnC,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAA,EAAK,KAAK,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAA,CACE,WACA,OAAA,EACmB;AAEnB,IAAA,MAAM,iBAAiB,sBAAA,EAAuB;AAG9C,IAAA,MAAM,cAAA,GAAiB,OAAO,KAAA,KAAa;AAEzC,MAAA,MAAM,kBAAkB,YAAY;AAClC,QAAA,IAAI;AACF,UAAA,MAAM,QAAQ,KAAK,CAAA;AAAA,QACrB,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,2BAAA,EAA8B,SAAS,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,QAEjE;AAAA,MACF,CAAA,GAAG;AAGH,MAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,cAAc,CAAA;AAGvC,MAAA,cAAA,CAAe,QAAQ,MAAM;AAC3B,QAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,cAAc,CAAA;AAAA,MAC5C,CAAC,CAAA;AAAA,IAIH,CAAA;AAGA,IAAA,MAAM,YAAA,GAAkC;AAAA,MACtC,EAAA,EAAI,cAAA;AAAA,MACJ,SAAA;AAAA,MACA,OAAA,EAAS,cAAA;AAAA;AAAA,MACT,QAAA,EAAU;AAAA,QACR,SAAA,EAAW,KAAK,GAAA;AAAI;AACtB,KACF;AAGA,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,SAAA,EAAW,cAAc,CAAA;AAGzC,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,cAAA,EAAgB,YAAY,CAAA;AAEnD,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,cAAA,EAAiC;AAC3C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,cAAc,CAAA;AAC1D,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,YAAA,CAAa,SAAA,EAAW,aAAa,OAAO,CAAA;AAGxE,IAAA,IAAA,CAAK,aAAA,CAAc,OAAO,cAAc,CAAA;AAExC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,GAAwC;AACtC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,GAA2B;AACzB,IAAA,IAAA,CAAK,QAAQ,kBAAA,EAAmB;AAChC,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBAAqB,SAAA,EAA2B;AAC9C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,SAAS,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAA,GAAgC;AAC9B,IAAA,OAAO,IAAA,CAAK,QAAQ,UAAA,EAAW;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe,OAAA,EAAqD;AAClE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAO,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,WAAA,CAAY,OAAA,GAAgC,EAAC,EAAkB;AACnE,IAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,GAAA;AACnC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,GAAO,CAAA,EAAG;AAEpC,MAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,GAAY,OAAA,EAAS;AACpC,QAAA,MAAM,YAAA,GAAe,KAAK,eAAA,CAAgB,IAAA;AAC1C,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qCAAA,EAAwC,OAAO,CAAA,QAAA,EAAW,YAAY,CAAA,uBAAA,CAAyB,CAAA;AAC5G,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,GAAO,CAAA,EAAG;AACjC,QAAA,MAAM,QAAQ,IAAA,CAAK;AAAA,UACjB,QAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,eAAe,CAAC,CAAA;AAAA,UAC5C,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC;AAAA;AAAA,SAC/C,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAKO,IAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAM9B,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,QAAA,CAAS,QAAQ,KAAK,CAAA;AACxB;AAMO,SAAS,gBAAA,CACd,WACA,OAAA,EACmB;AACnB,EAAA,OAAO,QAAA,CAAS,SAAA,CAAU,SAAA,EAAW,OAAO,CAAA;AAC9C;;;ACrSA,IAAA,yBAAA,GAAA;AAAA,QAAA,CAAA,yBAAA,EAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACQO,IAAM,iBAAN,MAAqB;AAAA;AAAA;AAAA;AAAA,EAI1B,OAAO,uBAAA,CAAwB,MAAA,EAAuB,KAAA,EAA2B;AAC/E,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAM,KAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnD,MAAA,MAAM,IAAI,wBAAwB,sBAAA,EAAwB;AAAA,QACxD,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,kBAAA,EAAoB,OAAO,MAAA,EAAO;AAAA,QAC9D,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,kBAAA,EAAoB,OAAO,KAAA;AAAM,OAC7D,CAAA;AAAA,IACH;AAEA,IAAA,IAAA,CAAK,eAAe,MAAM,CAAA;AAC1B,IAAA,IAAA,CAAK,cAAc,KAAK,CAAA;AAAA,EAC1B;AAAA,EAEA,OAAe,eAAe,MAAA,EAA6B;AACzD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAI,wBAAwB,aAAA,EAAe;AAAA,UAC/C,EAAE,OAAO,CAAA,MAAA,EAAS,CAAC,IAAI,OAAA,EAAS,oBAAA,EAAsB,OAAO,KAAA;AAAM,SACpE,CAAA;AAAA,MACH;AAEA,MAAA,IAAI;AACF,QAAA,IAAI,CAAC,KAAA,CAAM,EAAA,IAAM,OAAO,KAAA,CAAM,OAAO,QAAA,EAAU;AAC7C,UAAA,MAAM,IAAI,wBAAwB,aAAA,EAAe;AAAA,YAC/C,EAAE,KAAA,EAAO,IAAA,EAAM,SAAS,4BAAA,EAA8B,KAAA,EAAO,MAAM,EAAA;AAAG,WACvE,CAAA;AAAA,QACH;AAEA,QAAA,IAAI,CAAC,KAAA,CAAM,KAAA,IAAS,OAAO,KAAA,CAAM,UAAU,QAAA,EAAU;AACnD,UAAA,MAAM,IAAI,wBAAwB,aAAA,EAAe;AAAA,YAC/C,EAAE,KAAA,EAAO,OAAA,EAAS,SAAS,4BAAA,EAA8B,KAAA,EAAO,MAAM,KAAA;AAAM,WAC7E,CAAA;AAAA,QACH;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,iBAAiB,uBAAA,EAAyB;AAC5C,UAAA,MAAM,KAAA;AAAA,QACR;AACA,QAAA,MAAM,IAAI,wBAAwB,aAAA,EAAe;AAAA,UAC/C,EAAE,KAAA,EAAO,CAAA,MAAA,EAAS,CAAC,IAAI,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA,EAAG,OAAO,KAAA;AAAM,SACtG,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAe,cAAc,KAAA,EAA2B;AACtD,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,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,wBAAwB,YAAA,EAAc;AAAA,UAC9C,EAAE,OAAO,CAAA,MAAA,EAAS,CAAC,IAAI,OAAA,EAAS,mBAAA,EAAqB,OAAO,IAAA;AAAK,SAClE,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAE1C,MAAA,IAAI;AACF,QAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,OAAO,IAAA,CAAK,OAAO,QAAA,EAAU;AAC3C,UAAA,MAAM,IAAI,wBAAwB,YAAA,EAAc;AAAA,YAC9C,EAAE,KAAA,EAAO,IAAA,EAAM,SAAS,4BAAA,EAA8B,KAAA,EAAO,KAAK,EAAA;AAAG,WACtE,CAAA;AAAA,QACH;AAEA,QAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,OAAO,IAAA,CAAK,UAAU,QAAA,EAAU;AACjD,UAAA,MAAM,IAAI,wBAAwB,YAAA,EAAc;AAAA,YAC9C,EAAE,KAAA,EAAO,OAAA,EAAS,SAAS,4BAAA,EAA8B,KAAA,EAAO,KAAK,KAAA;AAAM,WAC5E,CAAA;AAAA,QACH;AAEA,QAAA,IAAI,CAAC,IAAA,CAAK,WAAA,IAAe,OAAO,IAAA,CAAK,gBAAgB,QAAA,EAAU;AAC7D,UAAA,MAAM,IAAI,wBAAwB,YAAA,EAAc;AAAA,YAC9C,EAAE,KAAA,EAAO,aAAA,EAAe,SAAS,4BAAA,EAA8B,KAAA,EAAO,KAAK,WAAA;AAAY,WACxF,CAAA;AAAA,QACH;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,iBAAiB,uBAAA,EAAyB;AAC5C,UAAA,MAAM,KAAA;AAAA,QACR;AACA,QAAA,MAAM,QAAA,GAAW,eAAe,SAAA,GAAY;AAAA,8BAAA,EAA4B,UAAU,CAAA,CAAA,GAAK,EAAA;AACvF,QAAA,MAAM,IAAI,wBAAwB,YAAA,EAAc;AAAA,UAC9C,EAAE,KAAA,EAAO,CAAA,MAAA,EAAS,CAAC,IAAI,OAAA,EAAS,CAAA,EAAG,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,GAAG,QAAQ;AAAA,mEAAA,CAAA,EAAkE,OAAO,IAAA;AAAK,SACnL,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,cAAc,IAAA,EAA0B;AACrD,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,iBAAiB,IAAA,EAAM;AAC7D,MAAA,MAAM,aAAc,IAAA,CAAgD,WAAA;AACpE,MAAA,OAAO,OAAO,UAAA,KAAe,QAAA,GAAW,UAAA,GAAa,SAAA;AAAA,IACvD;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACF,CAAA;;;AC1EO,IAAM,uBAAA,GAAN,cAAsC,KAAA,CAAM;AAAA,EACjD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,uBAAN,MAA2B;AAAA;AAAA;AAAA;AAAA,EAKhC,oBAAA,CAAqB,QAAuB,KAAA,EAAwC;AAElF,IAAA,cAAA,CAAe,uBAAA,CAAwB,QAAQ,KAAK,CAAA;AAEpD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,KAAK,CAAA;AACjD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,uBAAA,CAAwB,QAAQ,CAAA;AAExD,IAAA,OAAO,IAAA,CAAK,uBAAA,CAAwB,QAAA,EAAU,UAAU,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,CAAc,QAAuB,KAAA,EAAqE;AAChH,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,KAAK,CAAA;AAC9C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,OAAO,QAAQ,CAAA;AACxD,IAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKQ,wBAAwB,QAAA,EAA0G;AAExI,IAAA,IAAA,CAAK,uBAAA,CAAwB,QAAA,CAAS,KAAA,EAAO,QAAA,CAAS,KAAK,CAAA;AAG3D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA;AAClD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA;AAGlD,IAAA,IAAA,CAAK,2BAA2B,KAAK,CAAA;AAErC,IAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAA,CACN,UACA,UAAA,EACmB;AACnB,IAAA,OAAO;AAAA,MACL,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,QAAA,EAAU;AAAA,QACR,SAAA,EAAW,WAAW,KAAA,CAAM,MAAA;AAAA,QAC5B,SAAA,EAAW,WAAW,KAAA,CAAM,MAAA;AAAA,QAC5B,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QACpC,iBAAA,EAAmB;AAAA,UACjB,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,WAAW,KAAA,CAAM,MAAA;AAAA,UAChD,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,WAAW,KAAA,CAAM;AAAA;AAClD;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,MAAA,EAA0C;AACvD,IAAA,OAAO,MAAA,CAAO,GACX,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CACnB,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAOQ,UAAA,CAAW,QAAuB,KAAA,EAAoC;AAC5E,IAAA,MAAM,QAAuB,EAAC;AAG9B,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,IAAA,CAAK,cAAA,CAAe,KAAK,CAAA;AAAA,QAC7B,IAAA,EAAM,OAAA;AAAA,QACN,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,QACrB,YAAY,KAAA,CAAM;AAAA,OACnB,CAAA;AAAA,IACH;AAGA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA;AAGnC,MAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,eAAA;AAE5B,MAAA,MAAM,IAAA,GAAoB;AAAA,QACxB,EAAA,EAAI,IAAA,CAAK,cAAA,CAAe,IAAI,CAAA;AAAA,QAC5B,IAAA,EAAM,SAAS,WAAA,GAAc,MAAA;AAAA,QAC7B,KAAA;AAAA,QACA,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,YAAY,IAAA,CAAK;AAAA,OACnB;AACA,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,MACnB;AACA,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACjB;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,CAAW,MAAA,EAAuB,MAAA,EAAsB,KAAA,EAAqC;AACnG,IAAA,MAAM,QAAuB,EAAC;AAC9B,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,EAAE,CAAC,CAAC,CAAA;AAG5D,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAI,MAAM,aAAA,EAAe;AACvB,QAAA,KAAA,MAAW,OAAA,IAAW,MAAM,aAAA,EAAe;AACzC,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AACnC,UAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AAEhC,UAAA,IAAI,UAAU,IAAA,EAAM;AAClB,YAAA,KAAA,CAAM,IAAA,CAAK;AAAA,cACT,IAAA,EAAM,MAAA;AAAA,cACN,EAAA,EAAI,IAAA;AAAA,cACJ,IAAA,EAAM;AAAA,aACP,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AACnC,UAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AAE/B,UAAA,IAAI,UAAU,IAAA,EAAM;AAClB,YAAA,KAAA,CAAM,IAAA,CAAK;AAAA,cACT,IAAA,EAAM,MAAA;AAAA,cACN,EAAA,EAAI,IAAA;AAAA,cACJ,IAAA,EAAM;AAAA,aACP,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAW,IAAA,EAA2B;AAC5C,IAAA,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,CAAA,GAAA,KAAO,IAAI,UAAA,CAAW,OAAO,CAAC,CAAA,IAAK,KAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKQ,2BAA2B,KAAA,EAA4B;AAC7D,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAsB;AAGxC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AACzB,QAAA,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,EAAE,CAAA;AAAA,MACzB;AACA,MAAA,KAAA,CAAM,IAAI,IAAA,CAAK,IAAI,CAAA,CAAG,IAAA,CAAK,KAAK,EAAE,CAAA;AAAA,IACpC;AAGA,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AACvC,IAAA,MAAME,QAAiB,EAAC;AAExB,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,EAAG;AAC/B,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACtB,QAAA,MAAM,YAAY,IAAA,CAAK,YAAA,CAAa,MAAM,KAAA,EAAO,OAAA,EAAS,gBAAgBA,KAAI,CAAA;AAC9E,QAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,UAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,gBAAA,CAAiB,SAAS,CAAA;AACxD,UAAA,MAAM,IAAI,wBAAwB,gBAAgB,CAAA;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,CACN,IAAA,EACA,KAAA,EACA,OAAA,EACA,gBACAA,KAAAA,EACU;AACV,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,IAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AACvB,IAAAA,KAAAA,CAAK,KAAK,IAAI,CAAA;AAEd,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,GAAA,CAAI,IAAI,KAAK,EAAC;AACtC,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC1B,QAAA,MAAM,YAAY,IAAA,CAAK,YAAA,CAAa,UAAU,KAAA,EAAO,OAAA,EAAS,gBAAgBA,KAAI,CAAA;AAClF,QAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,UAAA,OAAO,SAAA;AAAA,QACT;AAAA,MACF,CAAA,MAAA,IAAW,cAAA,CAAe,GAAA,CAAI,QAAQ,CAAA,EAAG;AAEvC,QAAA,MAAM,eAAA,GAAkBA,KAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAC7C,QAAA,OAAOA,MAAK,KAAA,CAAM,eAAe,EAAE,MAAA,CAAO,CAAC,QAAQ,CAAC,CAAA;AAAA,MACtD;AAAA,IACF;AAEA,IAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAC1B,IAAAA,MAAK,GAAA,EAAI;AACT,IAAA,OAAO,EAAC;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,SAAA,EAA6B;AACpD,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACxC,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,GAAA,CAAI,CAAA,MAAA,KAAU;AAEzC,MAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,iBAAA,EAAmB,EAAE,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AACvE,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,IAAI,OAAA,GAAU,CAAA;;AAAA,CAAA;AACd,IAAA,OAAA,IAAW,CAAA;AAAA,CAAA;AAEX,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,OAAA,GAAU,UAAU,CAAC,CAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,SAAA,CAAA,CAAW,CAAA,GAAI,CAAA,IAAK,UAAU,MAAM,CAAA;AACjD,MAAA,OAAA,IAAW,CAAA,GAAA,EAAM,OAAO,CAAA,QAAA,EAAM,IAAI;AAAA,CAAA;AAAA,IACpC;AAEA,IAAA,OAAA,IAAW;AAAA;AAAA,CAAA;AACX,IAAA,OAAA,IAAW,CAAA;AAAA,CAAA;AACX,IAAA,UAAA,CAAW,QAAQ,CAAA,MAAA,KAAU;AAC3B,MAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC/D,MAAA,OAAA,IAAW,0BAA0B,OAAO,CAAA;AAAA,CAAA;AAAA,IAC9C,CAAC,CAAA;AACD,IAAA,OAAA,IAAW,CAAA;AAAA,CAAA;AACX,IAAA,OAAA,IAAW,CAAA;AAAA,CAAA;AAEX,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAA,CAAwB,OAAsB,KAAA,EAA4B;AAEhF,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAkD;AACxE,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,IAAK,EAAE,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,EAAC,EAAE;AAClE,MAAA,OAAA,CAAQ,KAAA,EAAA;AACR,MAAA,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AACpC,MAAA,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,OAAO,CAAA;AAAA,IAChC;AAEA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA,CAClD,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,IAAI,CAAA,KAAM,IAAA,CAAK,QAAQ,CAAC,CAAA;AAGvC,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,EAAE,CAAA,CAAA;AACxC,MAAA,SAAA,CAAU,IAAI,OAAA,EAAA,CAAU,SAAA,CAAU,IAAI,OAAO,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA,CAClD,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,KAAK,CAAA,KAAM,QAAQ,CAAC,CAAA;AAGnC,IAAA,IAAI,cAAA,CAAe,MAAA,GAAS,CAAA,IAAK,cAAA,CAAe,SAAS,CAAA,EAAG;AAC1D,MAAA,OAAA,CAAQ,KAAK,sDAA4C,CAAA;AAEzD,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,KAAK,uCAAgC,CAAA;AAC7C,QAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,KAAM;AACrC,UAAA,MAAM,eAAe,CAAC,GAAG,IAAI,GAAA,CAAI,IAAA,CAAK,OAAO,CAAC,CAAA;AAC9C,UAAA,OAAA,CAAQ,KAAK,CAAA,UAAA,EAAQ,EAAE,CAAA,UAAA,EAAa,IAAA,CAAK,KAAK,CAAA,OAAA,CAAS,CAAA;AACvD,UAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,YAAA,OAAA,CAAQ,KAAK,CAAA,cAAA,EAAiB,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACvD,YAAA,OAAA,CAAQ,KAAK,CAAA,wEAAA,CAAmE,CAAA;AAAA,UAClF,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,aAAA,EAAgB,YAAA,CAAa,CAAC,CAAC,CAAA,oCAAA,CAAsC,CAAA;AAClF,YAAA,OAAA,CAAQ,KAAK,CAAA,wEAAA,CAAmE,CAAA;AAAA,UAClF;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,KAAK,uCAAgC,CAAA;AAC7C,QAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AACxC,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,UAAA,EAAQ,IAAI,CAAA,UAAA,EAAa,KAAK,CAAA,OAAA,CAAS,CAAA;AAAA,QACtD,CAAC,CAAA;AACD,QAAA,OAAA,CAAQ,KAAK,oFAA6E,CAAA;AAAA,MAC5F;AAEA,MAAA,OAAA,CAAQ,KAAK,2FAAiF,CAAA;AAC9F,MAAA,OAAA,CAAQ,KAAK,uFAAgF,CAAA;AAAA,IAC/F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,KAAA,EAAqC;AAC5D,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAyB;AAG7C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACzB,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,KAAA,EAAqC;AAC5D,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAyB;AAE7C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,EAAE,CAAA,CAAA;AACxC,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACzB,QAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAA,CAAiB,QAAuB,KAAA,EAGtC;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,KAAK,CAAA;AAC9C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAGxD,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAkD;AACxE,IAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,IAAK,EAAE,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,EAAC,EAAE;AAClE,MAAA,OAAA,CAAQ,KAAA,EAAA;AACR,MAAA,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AACpC,MAAA,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,OAAO,CAAA;AAAA,IAChC;AAEA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,CAAA,CAClD,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,IAAI,MAAM,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA,CACpC,GAAA,CAAI,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,MAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,OAAA,EAAS,IAAA,CAAK,SAAQ,CAAE,CAAA;AAGzE,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,IAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,EAAE,CAAA,CAAA;AACxC,MAAA,SAAA,CAAU,IAAI,OAAA,EAAA,CAAU,SAAA,CAAU,IAAI,OAAO,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,CAAA,CAClD,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,KAAK,MAAM,KAAA,GAAQ,CAAC,CAAA,CAChC,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,MAAO,EAAE,IAAA,EAAM,KAAA,EAAM,CAAE,CAAA;AAE3C,IAAA,OAAO,EAAE,gBAAgB,cAAA,EAAe;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,CACE,MAAA,EACA,KAAA,EACA,OAAA,EAKgE;AAChE,IAAA,IAAI,cAAA,GAAiB,CAAC,GAAG,MAAM,CAAA;AAC/B,IAAA,IAAI,aAAA,GAAgB,CAAC,GAAG,KAAK,CAAA;AAG7B,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,cAAc,MAAA,CAAO,IAAA,CAAK,OAAK,CAAA,CAAE,EAAA,KAAO,QAAQ,OAAO,CAAA;AAC7D,MAAA,IAAI,WAAA,EAAa;AAEf,QAAA,MAAM,kCAAkB,IAAI,GAAA,CAAI,CAAC,OAAA,CAAQ,OAAO,CAAC,CAAA;AACjD,QAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AAGvC,QAAA,MAAM,mBAAA,GAAsB,CAAC,OAAA,KAAoB;AAC/C,UAAA,MAAM,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AAC/C,UAAA,IAAI,OAAO,aAAA,EAAe;AACxB,YAAA,KAAA,CAAM,aAAA,CAAc,QAAQ,CAAA,OAAA,KAAW;AACrC,cAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA,EAAG;AACjC,gBAAA,eAAA,CAAgB,IAAI,OAAO,CAAA;AAC3B,gBAAA,mBAAA,CAAoB,OAAO,CAAA;AAAA,cAC7B;AAAA,YACF,CAAC,CAAA;AAAA,UACH;AAAA,QACF,CAAA;AAGA,QAAA,mBAAA,CAAoB,QAAQ,OAAO,CAAA;AAGnC,QAAA,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS;AACtB,UAAA,IAAI,gBAAgB,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,IAAK,MAAM,OAAA,EAAS;AAClD,YAAA,KAAA,CAAM,QAAQ,OAAA,CAAQ,CAAA,MAAA,KAAU,cAAA,CAAe,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,UAC5D;AAAA,QACF,CAAC,CAAA;AAED,QAAA,cAAA,GAAiB,OAAO,MAAA,CAAO,CAAA,CAAA,KAAK,gBAAgB,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AAC7D,QAAA,aAAA,GAAgB,MAAM,MAAA,CAAO,CAAA,CAAA,KAAK,eAAe,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,MAC5D;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,MAAM,aAAa,KAAA,CAAM,IAAA,CAAK,OAAK,CAAA,CAAE,EAAA,KAAO,QAAQ,MAAM,CAAA;AAC1D,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,aAAA,GAAgB,CAAC,UAAU,CAAA;AAG3B,QAAA,cAAA,GAAiB,MAAA,CAAO,MAAA;AAAA,UAAO,OAC7B,CAAA,CAAE,OAAA,IAAW,EAAE,OAAA,CAAQ,QAAA,CAAS,QAAQ,MAAO;AAAA,SACjD;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,MAAA,MAAM,UAAA,GAAa,CAAA,QAAA,EAAW,OAAA,CAAQ,WAAW,CAAA,CAAA;AAEjD,MAAA,cAAA,GAAiB,cAAA,CAAe,MAAA;AAAA,QAAO,OACrC,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,IAAA,CAAK,SAAS,UAAU;AAAA,OACtC;AAEA,MAAA,aAAA,GAAgB,aAAA,CAAc,MAAA;AAAA,QAAO,OACnC,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,IAAA,CAAK,SAAS,UAAU;AAAA,OACtC;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,gBAAgB,aAAA,EAAc;AAAA,EACzC;AACF,CAAA;;;ACnfO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA,EACxC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,kBAAkB,KAAA,EAAuB;AAEvC,IAAA,OAAO,KAAA,CACJ,OAAA,CAAQ,oBAAA,EAAsB,EAAE,CAAA,CAChC,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CACnB,SAAA,CAAU,CAAA,EAAG,GAAG,CAAA;AAAA,EACrB;AAAA,EAEA,eAAe,EAAA,EAAoB;AAEjC,IAAA,OAAO,EAAA,CAAG,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAA;AAAA,EAC1C;AAAA,EAEA,eAAe,MAAA,EAAwB;AACrC,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,SAAA;AAAA,MAAW,aAAA;AAAA,MAAe,MAAA;AAAA,MAAQ,SAAA;AAAA,MAClC,WAAA;AAAA,MAAa,OAAA;AAAA,MAAS,UAAA;AAAA,MAAY,QAAA;AAAA,MAClC,WAAA;AAAA,MAAa,UAAA;AAAA,MAAY,QAAA;AAAA,MAAU,WAAA;AAAA,MACnC,WAAA;AAAA,MAAa,qBAAA;AAAA,MAAuB,oBAAA;AAAA,MACpC,OAAA;AAAA,MAAS,QAAA;AAAA,MAAU;AAAA,KACrB;AACA,IAAA,OAAO,eAAA,CAAgB,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,SAAA;AAAA,EACrD;AAAA,EAEA,cAAc,KAAA,EAA6C;AACzD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ;AAC7B,QAAA,MAAM,aAAA,GAA6B;AAAA,UACjC,EAAA,EAAI,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,EAAE,CAAA;AAAA,UAC/B,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,KAAA,EAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAA;AAAA,UACxC,YAAY,IAAA,CAAK;AAAA,SACnB;AAEA,QAAA,IAAI,KAAK,MAAA,EAAQ;AACf,UAAA,aAAA,CAAc,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAAA,QACxD;AAEA,QAAA,IAAI,KAAK,IAAA,EAAM;AACb,UAAA,aAAA,CAAc,OAAO,IAAA,CAAK,IAAA;AAAA,QAC5B;AAEA,QAAA,OAAO,aAAA;AAAA,MACT,CAAC,CAAA;AAAA,MACD,KAAA,EAAO,MAAM,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,IAAA,IAAQ,KAAK,EAAE,CAAA;AAAA,MACtD,UAAU,KAAA,CAAM;AAAA,KAClB;AAAA,EACF;AACF,CAAA;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,qBAAqB,OAAA,EAA0B;AAE7C,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAGhC,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,CAAA,IAAA,KAAQ,KAAK,IAAA,EAAK,CAAE,UAAA,CAAW,WAAW,CAAC,CAAA;AAC5E,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA;AACjF,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,MAAA,MAAM,gBAAgB,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,IAAK,EAAC,EAAG,MAAA;AAChD,MAAA,MAAM,iBAAiB,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,IAAK,EAAC,EAAG,MAAA;AACjD,MAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEO,IAAM,kBAAN,MAAsB;AAAA,EACV,SAAA;AAAA,EACA,SAAA;AAAA,EAEjB,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,EAAiB;AACtC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,EAAiB;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,CAAY,OAA0B,OAAA,EAAiC;AACrE,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,MAAM,KAAA,IAAS,CAAC,MAAM,KAAA,EAAO;AAC1C,MAAA,MAAM,IAAI,eAAe,yBAAyB,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,SAAA,CAAU,aAAA,CAAc,KAAK,CAAA;AACzD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,sBAAA,CAAuB,cAAA,EAAgB,OAAO,CAAA;AAGnE,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,oBAAA,CAAqB,OAAO,CAAA,EAAG;AACjD,MAAA,MAAM,IAAI,eAAe,kCAAkC,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAA,CAAuB,OAA0B,OAAA,EAAiC;AACxF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,OAAO,CAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,KAAK,eAAA,EAAgB;AACrC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,qBAAA,CAAsB,KAAA,CAAM,KAAK,CAAA;AAE5D,IAAA,OAAO;AAAA,MACL,YAAA;AAAA,MACA,MAAA;AAAA,MACA,EAAA;AAAA,MACA,KAAA;AAAA,MACA,EAAA;AAAA,MACA,KAAA;AAAA,MACA,EAAA;AAAA,MACA,OAAA;AAAA,MACA,EAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,OAAA,EAAiC;AACtD,IAAA,MAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACzC,IAAA,OAAO;AAAA,MACL,CAAA,UAAA,EAAa,QAAQ,MAAM,CAAA,CAAA;AAAA,MAC3B,4BAA4B,SAAS,CAAA,CAAA;AAAA,MACrC,CAAA,gCAAA;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,KAAA,EAA8B;AAClD,IAAA,MAAM,YAAY,KAAA,CAAM,GAAA,CAAI,UAAQ,IAAA,CAAK,kBAAA,CAAmB,IAAI,CAAC,CAAA;AACjE,IAAA,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,KAAA,EAA8B;AAClD,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,+BAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,sDAAA;AAAA,MACA,kEAAA;AAAA,MACA,GAAG,KAAA,CAAM,GAAA,CAAI,UAAQ,IAAA,CAAK,kBAAA,CAAmB,IAAI,CAAC;AAAA,KACpD;AAEA,IAAA,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,SAAA,CAAU,KAAA,EAAe,QAAA,GAAmB,EAAA,EAAY;AAE9D,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,SAAA,CAAU,iBAAA,CAAkB,KAAK,CAAA;AAC7D,IAAA,IAAI,cAAA,CAAe,UAAU,QAAA,EAAU;AACrC,MAAA,OAAO,cAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,KAAA,CAAM,GAAG,CAAA;AACtC,IAAA,MAAM,QAAQ,EAAC;AACf,IAAA,IAAI,WAAA,GAAc,KAAA,CAAM,KAAA,EAAM,IAAK,EAAA;AAEnC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAA,CAAK,WAAA,GAAc,GAAA,GAAM,IAAA,EAAM,MAAA,GAAS,QAAA,EAAU;AAChD,QAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,QAAA,WAAA,GAAc,IAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,WAAA,IAAe,IAAI,IAAI,CAAA,CAAA;AAAA,MACzB;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AAEtB,IAAA,OAAO,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,IAAA,EAA2B;AAC5C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,cAAA,CAAe,KAAK,EAAE,CAAA;AAEzD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAGvC,IAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,MAAA,OAAO,CAAA,IAAA,EAAO,WAAW,CAAA,GAAA,EAAM,IAAI,QAAQ,YAAY,CAAA,GAAA,CAAA;AAAA,IACzD;AAGA,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,WAAW,QAAA,EAAU;AACzD,MAAA,OAAO,CAAA,IAAA,EAAO,WAAW,CAAA,EAAA,EAAK,IAAI,QAAQ,YAAY,CAAA,eAAA,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,CAAA,IAAA,EAAO,WAAW,CAAA,EAAA,EAAK,IAAI,QAAQ,YAAY,CAAA,EAAA,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,IAAA,EAA2B;AAC5C,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,IAAQ,CAAC,KAAK,EAAA,EAAI;AAC1B,MAAA,MAAM,IAAI,eAAe,wCAAwC,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,cAAA,CAAe,KAAK,IAAI,CAAA;AAC7D,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,cAAA,CAAe,KAAK,EAAE,CAAA;AAEzD,IAAA,OAAO,CAAA,IAAA,EAAO,aAAa,CAAA,KAAA,EAAQ,WAAW,CAAA,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,IAAA,EAAsB;AACxC,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,OAAA,EAAS,WAAA;AAAA,MACT,WAAA,EAAa,WAAA;AAAA,MACb,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,OAAO,KAAA,CAAM,IAA0B,CAAA,IAAK,WAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAA,GAA0B;AAChC,IAAA,OAAO;AAAA,MACL,gDAAA;AAAA,MACA,qFAAA;AAAA,MACA,qFAAA;AAAA,MACA,0FAAA;AAAA,MACA,oFAAA;AAAA,MACA,uFAAA;AAAA,MACA,0FAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,KAAA,EAA8B;AAC1D,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAsB;AAG/C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,cAAc,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAA,IAAU,SAAS,IAAI,CAAA;AAGpE,MAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA,EAAG;AAClC,QAAA,YAAA,CAAa,GAAA,CAAI,WAAA,EAAa,EAAE,CAAA;AAAA,MAClC;AACA,MAAA,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA,CAAG,IAAA,CAAK,KAAK,EAAE,CAAA;AAAA,IAC7C;AAGA,IAAA,MAAM,aAAuB,EAAC;AAC9B,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,OAAO,CAAA,IAAK,YAAA,CAAa,SAAQ,EAAG;AAC3D,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,MAAM,YAAA,GAAe,QAAQ,GAAA,CAAI,CAAA,EAAA,KAAM,KAAK,SAAA,CAAU,cAAA,CAAe,EAAE,CAAC,CAAA;AACxE,QAAA,UAAA,CAAW,IAAA,CAAK,aAAa,YAAA,CAAa,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AAAA,MACtE;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,4CAAA;AAAA,MACA,GAAG;AAAA,KACL,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,CAAe,QAAgB,IAAA,EAA4B;AAEjE,IAAA,IAAI,MAAA,KAAW,QAAA,IAAY,IAAA,EAAM,IAAA,KAAS,WAAA,EAAa;AACrD,MAAA,OAAO,kBAAA;AAAA,IACT;AAGA,IAAA,IAAI,IAAA,EAAM,SAAS,OAAA,EAAS;AAC1B,MAAA,MAAM,cAAA,GAAyC;AAAA,QAC7C,UAAA,EAAY,aAAA;AAAA;AAAA,QACZ,QAAA,EAAU,kBAAA;AAAA;AAAA,QACV,WAAA,EAAa,YAAA;AAAA;AAAA,QACb,UAAA,EAAY;AAAA;AAAA,OACd;AACA,MAAA,OAAO,cAAA,CAAe,MAAM,CAAA,IAAK,aAAA;AAAA,IACnC;AAGA,IAAA,MAAM,aAAA,GAAwC;AAAA;AAAA,MAE5C,MAAA,EAAQ,YAAA;AAAA,MACR,WAAA,EAAa,YAAA;AAAA;AAAA,MAGb,QAAA,EAAU,kBAAA;AAAA,MACV,aAAA,EAAe,kBAAA;AAAA;AAAA,MAGf,OAAA,EAAS,aAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA;AAAA,MAGX,OAAA,EAAS,aAAA;AAAA,MACT,QAAA,EAAU,aAAA;AAAA;AAAA,MAGV,SAAA,EAAW,eAAA;AAAA,MACX,QAAA,EAAU,eAAA;AAAA,MACV,WAAA,EAAa,eAAA;AAAA,MACb,WAAA,EAAa,eAAA;AAAA;AAAA,MAGb,UAAA,EAAY,gBAAA;AAAA;AAAA,MAGZ,qBAAA,EAAuB,aAAA;AAAA,MACvB,oBAAA,EAAsB;AAAA,KACxB;AAEA,IAAA,OAAO,aAAA,CAAc,MAAM,CAAA,IAAK,aAAA;AAAA,EAClC;AACF,CAAA;ACzWA,IAAM,2BAAA,GAA8B,GAAA;AAE7B,IAAM,iBAAN,MAAqB;AAAA,EAClB,SAAA,GAAoB,CAAA;AAAA,EACpB,WAAA,GAAsB,CAAA;AAAA,EACtB,kBAA4B,EAAC;AAAA,EAErC,kBAAA,GAA2B;AACzB,IAAA,IAAA,CAAK,SAAA,EAAA;AAAA,EACP;AAAA,EAEA,oBAAA,GAA6B;AAC3B,IAAA,IAAA,CAAK,WAAA,EAAA;AAAA,EACP;AAAA,EAEA,qBAAqB,MAAA,EAAsB;AACzC,IAAA,IAAA,CAAK,eAAA,CAAgB,KAAK,MAAM,CAAA;AAGhC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAA,GAAS,2BAAA,EAA6B;AAC7D,MAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,gBAAA,GAA2B;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,WAAA;AACpC,IAAA,OAAO,KAAA,KAAU,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,EAC5C;AAAA,EAEA,wBAAA,GAAmC;AACjC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAE9C,IAAA,MAAM,GAAA,GAAM,KAAK,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAC1D,IAAA,OAAO,GAAA,GAAM,KAAK,eAAA,CAAgB,MAAA;AAAA,EACpC;AAAA,EAEA,QAAA,GAAW;AACT,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,KAAK,gBAAA,EAAiB;AAAA,MACrC,qBAAA,EAAuB,KAAK,wBAAA,EAAyB;AAAA,MACrD,gBAAA,EAAkB,KAAK,eAAA,CAAgB;AAAA,KACzC;AAAA,EACF;AACF,CAAA;AAEO,IAAM,mBAAN,MAAuB;AAAA,EACX,OAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACD,QAAA;AAAA,EACC,QAAA;AAAA,EAEjB,WAAA,CAAY,OAAA,GAAmC,EAAC,EAAG;AACjD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,MAAA,CAAO;AAAA,MAC3B,MAAA,EAAQ,IAAA;AAAA,MACR,gBAAA,EAAkB,IAAA;AAAA,MAClB,QAAA,EAAU,CAAA;AAAA,MACV,WAAA,EAAa,SAAA;AAAA,MACb,eAAA,EAAiB,KAAA;AAAA,MACjB,GAAG;AAAA,KACc,CAAA;AAEnB,IAAA,IAAA,CAAK,KAAA,uBAAY,GAAA,EAAI;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,cAAA,EAAe;AAClC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,oBAAA,EAAqB;AACzC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,eAAA,EAAgB;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CACJ,MAAA,EACA,KAAA,EACA,OAAA,EAKA,eAAwB,KAAA,EACP;AACjB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,OAAO,YAAY,CAAA;AAElE,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC5B,MAAA,IAAA,CAAK,QAAQ,kBAAA,EAAmB;AAChC,MAAA,OAAO,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AAAA,IACtC;AAEA,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAElC,IAAA,IAAI;AAEF,MAAA,IAAI,WAAA,GAAc,MAAA;AAClB,MAAA,IAAI,UAAA,GAAa,KAAA;AAGjB,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,CAAA,KAAA,KAAS,KAAA,CAAM,WAAW,UAAU,CAAA;AAChE,QAAA,UAAA,GAAa,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,UAAU,CAAA;AAAA,MAC9D;AAEA,MAAA,IAAI,YAAY,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,MAAA,IAAU,QAAQ,WAAA,CAAA,EAAc;AACzE,QAAA,MAAM,WAAW,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,WAAA,EAAa,YAAY,OAAO,CAAA;AAC9E,QAAA,WAAA,GAAc,QAAA,CAAS,cAAA;AACvB,QAAA,UAAA,GAAa,QAAA,CAAS,aAAA;AAAA,MACxB;AAEA,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,oBAAA,CAAqB,aAAa,UAAU,CAAA;AACxE,MAAA,MAAM,SAAS,IAAA,CAAK,QAAA,CAAS,WAAA,CAAY,KAAA,EAAO,KAAK,OAAO,CAAA;AAE5D,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,KAAK,CAAA;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,WAAA,CAAY,GAAA,KAAQ,SAAS,CAAA;AAC/D,MAAA,IAAA,CAAK,QAAQ,oBAAA,EAAqB;AAElC,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,WAAA,CAAY,GAAA,KAAQ,SAAS,CAAA;AAC/D,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CACJ,UAAA,GAAqB,SAAA,EACrB,OAAA,EAKA,eAAwB,KAAA,EACP;AACjB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,gBAAA,CAAiB,UAAU,CAAA;AACrD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA;AAEnD,IAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,KAAA,EAAO,SAAS,YAAY,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,iBAAiB,UAAA,EAA4C;AACxE,IAAA,MAAM,SAAA,GAAiBE,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,QAAQ,CAAA;AAEhD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAMC,QAAAA,CAAG,OAAA,CAAQ,SAAS,CAAA;AACxC,MAAA,MAAM,YAAY,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,QAAA,CAAS,OAAO,CAAC,CAAA;AAE7D,MAAA,MAAM,SAAwB,EAAC;AAE/B,MAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,IAAI,CAAA;AAC1C,UAAA,MAAM,OAAA,GAAU,MAAMC,QAAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AACnD,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAGjC,UAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,CAAQ,EAAA,EAAI;AACvC,YAAA,MAAM,cAAc,MAAA,CAAO,OAAA;AAE3B,YAAC,YAAoB,WAAA,GAAc,IAAA;AACnC,YAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,UACzB,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yBAAA,EAAkB,IAAI,CAAA,8BAAA,CAAgC,CAAA;AAAA,UACrE;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,kCAAA,EAAgC,IAAI,CAAA,CAAA,CAAA,EAAK,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC9G;AAAA,MACF;AAEA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC9D,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0CAAA,EAAmC,SAAS,CAAA,CAAE,CAAA;AAC3D,QAAA,OAAA,CAAQ,KAAK,CAAA,qEAAA,CAAgE,CAAA;AAAA,MAC/E,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK,2CAAsC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MAC3G;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,gBAAgB,UAAA,EAA2C;AACtE,IAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,OAAO,CAAA;AAE9C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAMC,QAAAA,CAAG,OAAA,CAAQ,QAAQ,CAAA;AACvC,MAAA,MAAM,YAAY,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,QAAA,CAAS,OAAO,CAAC,CAAA;AAE7D,MAAA,MAAM,QAAsB,EAAC;AAE7B,MAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,QAAA,EAAU,IAAI,CAAA;AACzC,UAAA,MAAM,OAAA,GAAU,MAAMC,QAAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AACnD,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAGjC,UAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,CAAQ,EAAA,EAAI;AACvC,YAAA,MAAM,aAAa,MAAA,CAAO,OAAA;AAE1B,YAAC,WAAmB,WAAA,GAAc,IAAA;AAGlC,YAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,UACvB,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,wBAAA,EAAiB,IAAI,CAAA,8BAAA,CAAgC,CAAA;AAAA,UACpE;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,iCAAA,EAA+B,IAAI,CAAA,CAAA,CAAA,EAAK,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC7G;AAAA,MACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC9D,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yCAAA,EAAkC,QAAQ,CAAA,CAAE,CAAA;AACzD,QAAA,OAAA,CAAQ,KAAK,CAAA,qEAAA,CAAgE,CAAA;AAAA,MAC/E,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK,0CAAqC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MAC1G;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,QAAA,EAA0B;AAChD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AACrC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,WAAA,CAAY,KAAA,EAAO,KAAK,OAAO,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAA,CAAiB,MAAA,EAAuB,KAAA,EAAqB,YAAA,GAAwB,KAAA,EAAe;AAE1G,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAC,CAAC,EAAE,IAAA,EAAK;AAC1D,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAC,CAAC,EAAE,IAAA,EAAK;AAExD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AACzC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACvC,IAAA,MAAM,cAAc,IAAA,CAAK,UAAA,CAAW,KAAK,SAAA,CAAU,IAAA,CAAK,OAAO,CAAC,CAAA;AAChE,IAAA,MAAM,YAAA,GAAe,eAAe,eAAA,GAAkB,aAAA;AAEtD,IAAA,OAAO,WAAW,SAAS,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,WAAW,IAAI,YAAY,CAAA,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAU,KAAA,EAAyB;AACzC,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAA,GAAA,CAAS,IAAA,IAAQ,CAAA,IAAK,IAAA,GAAQ,IAAA,CAAK,WAAW,IAAI,CAAA;AAClD,MAAA,IAAA,GAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AACA,IAAA,OAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAW,GAAA,EAAqB;AACtC,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC7B,MAAA,IAAA,GAAA,CAAS,IAAA,IAAQ,KAAK,IAAA,GAAQ,IAAA;AAC9B,MAAA,IAAA,GAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAOA,UAAA,GAAa;AACX,IAAA,OAAO,IAAA,CAAK,QAAQ,QAAA,EAAS;AAAA,EAC/B;AACF,CAAA;;;ACrSA,IAAA,wBAAA,GAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,aAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACEO,IAAM,WAAA,GAA2B;AAAA;AAAA,EAEtC;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,iDAAA;AAAA,IACT,QAAA,EAAU,WAAA;AAAA,IACV,QAAA,EAAU,MAAA;AAAA,IACV,OAAA,EAAS,uCAAA;AAAA,IACT,UAAA,EAAY,+CAAA;AAAA,IACZ,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,0DAAA;AAAA,IACT,QAAA,EAAU,WAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,OAAA,EAAS,+BAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,8BAAA;AAAA,IACT,QAAA,EAAU,eAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,uCAAA;AAAA,IACT,UAAA,EAAY,gDAAA;AAAA,IACZ,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,wBAAA;AAAA,IACT,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,4CAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,sCAAA;AAAA,IACT,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,OAAA,EAAS,+BAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA;AAAA,EAGA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EACE,qEAAA;AAAA,IACF,QAAA,EAAU,kBAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,4BAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,mBAAA;AAAA,IACT,QAAA,EAAU,kBAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,4BAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,2CAAA;AAAA,IACT,QAAA,EAAU,kBAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,qCAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA;AAAA,EAGA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EACE,+EAAA;AAAA,IACF,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,MAAA;AAAA,IACV,OAAA,EAAS,4BAAA;AAAA,IACT,UAAA,EAAY,uCAAA;AAAA,IACZ,cAAA,EAAgB;AAAA;AAEpB,CAAA;;;ACjFA,IAAM,kBAAA,GAAqB,GAAA;AAM3B,SAAS,mBAAA,CACP,MAAA,EACA,IAAA,EACA,IAAA,EACQ;AACR,EAAA,OAAOJ,UAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,CAAE,OAAO,KAAK,CAAA;AAC9E;AAKA,SAAS,gBAAgB,OAAA,EAAyB;AAChD,EAAA,IAAI,OAAA,CAAQ,UAAU,kBAAA,EAAoB;AACxC,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,kBAAA,GAAqB,CAAC,CAAA,GAAI,KAAA;AACpD;AAKA,SAAS,aAAA,CAAc,SAAiB,KAAA,EAAuB;AAC7D,EAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA;AAC7C;AAKA,SAAS,cAAA,CAAe,SAAiB,UAAA,EAA4B;AACnE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,OAAA,EAAS,UAAU,CAAA;AACpD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,GAAa,CAAC,CAAA,IAAK,EAAA;AACtC,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAM,CAAA;AACpC;AAOO,IAAM,gBAAN,MAAwC;AAAA,EACpC,IAAA,GAAO,OAAA;AAAA,EACR,KAAA;AAAA,EAER,YAAY,OAAA,EAAoB;AAC9B,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACjC,MAAA,IAAA,CAAK,KAAA,GAAQ,YAAY,MAAA,CAAO,CAAC,MAAM,OAAA,CAAQ,QAAA,CAAS,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,IAC/D,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,GAAQ,WAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,CAAO,OAAA,EAAiB,QAAA,EAAsC;AAClE,IAAA,MAAM,WAAsB,EAAC;AAE7B,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,KAAA,EAAO;AAE7B,MAAA,MAAM,OAAA,GAAU,IAAI,MAAA,CAAO,IAAA,CAAK,QAAQ,MAAA,EAAQ,IAAA,CAAK,QAAQ,KAAK,CAAA;AAElE,MAAA,IAAI,KAAA;AACJ,MAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,QAAA,MAAM,IAAA,GAAO,aAAA,CAAc,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA;AAC/C,QAAA,MAAM,OAAA,GAAU,cAAA,CAAe,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA;AAEnD,QAAA,MAAM,OAAA,GAAmB;AAAA,UACvB,IAAI,UAAA,EAAW;AAAA,UACf,QAAQ,IAAA,CAAK,EAAA;AAAA,UACb,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,IAAA,EAAM,QAAA;AAAA,UACN,IAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,WAAA,EAAa,mBAAA,CAAoB,IAAA,CAAK,EAAA,EAAI,UAAU,IAAI,CAAA;AAAA,UACxD,UAAA,EAAY;AAAA,SACd;AACA,QAAA,IAAI,IAAA,CAAK,UAAA,EAAY,OAAA,CAAQ,UAAA,GAAa,IAAA,CAAK,UAAA;AAC/C,QAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,OAAA,CAAQ,cAAA,GAAiB,IAAA,CAAK,cAAA;AACvD,QAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,MACvB;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AACF,CAAA;AC5FA,IAAMK,mBAAAA,GAAqB,GAAA;AAG3B,IAAM,qBAAA,GACJ,gGAAA;AAGF,IAAM,eAAA,GACJ,sFAAA;AAGF,IAAM,iBAAA,GACJ,gEAAA;AAYF,IAAM,eAAA,GAAmC;AAAA,EACvC;AAAA,IACE,EAAA,EAAI,UAAA;AAAA,IACJ,OAAA,EAAS,qBAAA;AAAA,IACT,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAA,EAAS,kCAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,UAAA;AAAA,IACJ,OAAA,EAAS,eAAA;AAAA,IACT,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAA,EAAS,kDAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,UAAA;AAAA,IACJ,OAAA,EAAS,iBAAA;AAAA,IACT,QAAA,EAAU,sBAAA;AAAA,IACV,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAA,EAAS,oDAAA;AAAA,IACT,UAAA,EAAY;AAAA;AAEhB,CAAA;AAKA,SAASC,oBAAAA,CACP,MAAA,EACA,IAAA,EACA,IAAA,EACQ;AACR,EAAA,OAAON,UAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,CAAE,OAAO,KAAK,CAAA;AAC9E;AAKA,SAASO,iBAAgB,OAAA,EAAyB;AAChD,EAAA,IAAI,OAAA,CAAQ,UAAUF,mBAAAA,EAAoB;AACxC,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAGA,mBAAAA,GAAqB,CAAC,CAAA,GAAI,KAAA;AACpD;AAKA,SAASG,cAAAA,CAAc,SAAiB,KAAA,EAAuB;AAC7D,EAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA;AAC7C;AAKA,SAASC,eAAAA,CAAe,SAAiB,UAAA,EAA4B;AACnE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,UAAA,GAAaD,cAAAA,CAAc,OAAA,EAAS,UAAU,CAAA;AACpD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,GAAa,CAAC,CAAA,IAAK,EAAA;AACtC,EAAA,OAAOD,gBAAAA,CAAgB,IAAA,CAAK,IAAA,EAAM,CAAA;AACpC;AAOO,IAAM,oBAAN,MAA4C;AAAA,EACxC,IAAA,GAAO,WAAA;AAAA,EAEhB,MAAM,MAAA,CAAO,OAAA,EAAiB,QAAA,EAAsC;AAClE,IAAA,MAAM,WAAsB,EAAC;AAE7B,IAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAElC,MAAA,MAAM,OAAA,GAAU,IAAI,MAAA,CAAO,IAAA,CAAK,QAAQ,MAAA,EAAQ,IAAA,CAAK,QAAQ,KAAK,CAAA;AAElE,MAAA,IAAI,KAAA;AACJ,MAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,QAAA,MAAM,IAAA,GAAOC,cAAAA,CAAc,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA;AAC/C,QAAA,MAAM,OAAA,GAAUC,eAAAA,CAAe,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA;AAEnD,QAAA,MAAM,OAAA,GAAmB;AAAA,UACvB,IAAIC,UAAAA,EAAW;AAAA,UACf,QAAQ,IAAA,CAAK,EAAA;AAAA,UACb,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,IAAA,EAAM,QAAA;AAAA,UACN,IAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,WAAA,EAAaJ,oBAAAA,CAAoB,IAAA,CAAK,EAAA,EAAI,UAAU,IAAI,CAAA;AAAA,UACxD,YAAY,IAAA,CAAK;AAAA,SACnB;AACA,QAAA,IAAI,IAAA,CAAK,UAAA,EAAY,OAAA,CAAQ,UAAA,GAAa,IAAA,CAAK,UAAA;AAC/C,QAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,MACvB;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AACF,CAAA;AC9HA,IAAMD,mBAAAA,GAAqB,GAAA;AAM3B,SAASC,oBAAAA,CACP,MAAA,EACA,IAAA,EACA,IAAA,EACQ;AACR,EAAA,OAAON,UAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,CAAE,OAAO,KAAK,CAAA;AAC9E;AAKA,SAASO,iBAAgB,OAAA,EAAyB;AAChD,EAAA,IAAI,OAAA,CAAQ,UAAUF,mBAAAA,EAAoB;AACxC,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAGA,mBAAAA,GAAqB,CAAC,CAAA,GAAI,KAAA;AACpD;AAKA,SAAS,gBAAgB,QAAA,EAA+C;AACtE,EAAA,MAAM,eAAA,GAAqC;AAAA,IACzC,WAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,uBAAA;AAAA,IACA,qBAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,eAAA,CAAgB,SAAS,QAA2B,CAAA;AAC7D;AAUO,IAAM,kBAAN,MAA6C;AAAA,EAC1C,QAAA;AAAA,EACA,MAAA;AAAA,EAER,WAAA,CAAY,UAAkB,MAAA,EAAgB;AAC5C,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAgB,QAAA,EAA6C;AACjE,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,QAAA,EAAU;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,UAAU;AAAA,KAClC,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,MAAM,CAAA,eAAA,EAAkB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC5E;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,WAAA,EAAyC;AACjE,IAAA,OAAO,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC9B,MAAA,MAAM,WAA4B,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,GAC1D,IAAI,QAAA,GACJ,cAAA;AAEJ,MAAA,MAAM,OAAA,GAAmB;AAAA,QACvB,IAAIK,UAAAA,EAAW;AAAA,QACf,MAAA,EAAQ,IAAI,MAAA,IAAU,SAAA;AAAA,QACtB,QAAA;AAAA,QACA,UAAU,GAAA,CAAI,QAAA;AAAA,QACd,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,OAAA,EAASH,gBAAAA,CAAgB,GAAA,CAAI,OAAA,IAAW,EAAE,CAAA;AAAA,QAC1C,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,QAAA,EAAU,KAAA;AAAA,QACV,WAAA,EAAaD,oBAAAA;AAAA,UACX,IAAI,MAAA,IAAU,SAAA;AAAA,UACd,GAAA,CAAI,IAAA;AAAA,UACJ,GAAA,CAAI;AAAA,SACN;AAAA,QACA,UAAA,EAAY,IAAI,UAAA,IAAc;AAAA,OAChC;AAEA,MAAA,IAAI,GAAA,CAAI,UAAA,EAAY,OAAA,CAAQ,UAAA,GAAa,GAAA,CAAI,UAAA;AAC7C,MAAA,IAAI,GAAA,CAAI,cAAA,EAAgB,OAAA,CAAQ,cAAA,GAAiB,GAAA,CAAI,cAAA;AAErD,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AACF,CAAA;;;AC3GO,IAAM,wBAAN,MAA4B;AAAA,EACzB,iBAA6B,EAAC;AAAA,EAC9B,WAAA;AAAA,EACA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR,YAAY,MAAA,EAAgC;AAE1C,IAAA,IAAI,MAAA,EAAQ,KAAA,EAAO,OAAA,KAAY,KAAA,EAAO,CAEtC,MAAO;AACL,MAAA,IAAA,CAAK,eAAe,IAAA,CAAK,IAAI,cAAc,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,IAClE;AAGA,IAAA,IAAI,MAAA,EAAQ,WAAW,OAAA,EAAS;AAC9B,MAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,iBAAA,EAAmB,CAAA;AAAA,IAClD;AAGA,IAAA,IAAI,MAAA,EAAQ,GAAA,EAAK,OAAA,IAAW,MAAA,CAAO,IAAI,QAAA,EAAU;AAC/C,MAAA,IAAA,CAAK,YAAY,MAAA,CAAO,GAAA;AACxB,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,oBAAoB,CAAA;AAC/C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAA,CAAK,cAAc,IAAI,eAAA,CAAgB,MAAA,CAAO,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,MACpE;AAAA,IAEF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,MAAA,CAAO,OAAA,EAAiB,QAAA,EAAsC;AAElE,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,iBAAA,CAAkB,SAAS,QAAQ,CAAA;AAGpE,IAAA,IAAI,cAAyB,EAAC;AAC9B,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,UAAA,EAAW,EAAG;AACzC,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,iBAAA,CAAkB,aAAA,EAAe,SAAS,QAAQ,CAAA;AAC1E,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,IAAI;AACF,UAAA,WAAA,GAAc,MAAM,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,UAAU,CAAA;AAC/D,UAAA,IAAA,CAAK,cAAA,CAAe,WAAW,MAAM,CAAA;AAAA,QACvC,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAGA,IAAA,OAAO,KAAK,wBAAA,CAAyB,CAAC,GAAG,aAAA,EAAe,GAAG,WAAW,CAAC,CAAA;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAA,CACZ,OAAA,EACA,QAAA,EACoB;AACpB,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC5B,IAAA,CAAK,eAAe,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,OAAA,EAAS,QAAQ,CAAC;AAAA,KAC5D;AACA,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,iBAAA,CACN,QAAA,EACA,OAAA,EACA,QAAA,EACe;AACf,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AAEzC,IAAA,OAAO,QAAA,CACJ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,GAAG,CAAA,CAChC,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,WAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,MACjC,SAAS,IAAA,CAAK,GAAA,CAAI,MAAM,MAAA,EAAQ,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,MAC1C,QAAA,EAAU,IAAA;AAAA,MACV,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA,CAAE,IAAA,GAAO,CAAC,GAAG,CAAA,CAAE,IAAA,GAAO,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,MACnE,aAAA,EAAe,CAAC,CAAA,CAAE,QAAA,EAAU,EAAE,QAAQ;AAAA,KACxC,CAAE,CAAA;AAAA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,UAAA,GAAsB;AAC5B,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,KAAA;AAE5B,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,SAAA,KAAc,WAAA,EAAa,OAAO,IAAA;AAErD,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,SAAA,KAAc,OAAA,EAAS;AACxC,MAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC5B,QAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,IAAA,CAAK,UAAU,SAAS,CAAA,uBAAQ,IAAA,EAAK;AAC9D,QAAA,IAAI,SAAS,OAAO,KAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK,SAAA,CAAU,aAAA,IAAiB,CAAA,IAAK,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,KAAA,EAAqB;AAC1C,IAAA,IAAI,IAAA,CAAK,SAAA,EAAW,aAAA,KAAkB,MAAA,EAAW;AAC/C,MAAA,IAAA,CAAK,SAAA,CAAU,gBAAgB,IAAA,CAAK,GAAA;AAAA,QAClC,CAAA;AAAA,QACA,IAAA,CAAK,UAAU,aAAA,GAAgB;AAAA,OACjC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,yBAAyB,QAAA,EAAgC;AAC/D,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM;AAC5B,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,WAAW,GAAG,OAAO,KAAA;AACpC,MAAA,IAAA,CAAK,GAAA,CAAI,EAAE,WAAW,CAAA;AACtB,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,QAAA,EAA0B;AAC/C,IAAA,MAAM,MAAM,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,IAAO,WAAA,EAAY;AACnD,IAAA,MAAM,GAAA,GAA8B;AAAA,MAClC,EAAA,EAAI,YAAA;AAAA,MACJ,GAAA,EAAK,YAAA;AAAA,MACL,EAAA,EAAI,YAAA;AAAA,MACJ,GAAA,EAAK,YAAA;AAAA,MACL,EAAA,EAAI,QAAA;AAAA,MACJ,EAAA,EAAI,IAAA;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,EAAA,EAAI,MAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AACA,IAAA,OAAO,GAAA,CAAI,GAAA,IAAO,EAAE,CAAA,IAAK,SAAA;AAAA,EAC3B;AACF,CAAA;;;AC7LA,IAAA,sBAAA,GAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,YAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACUO,IAAM,gBAAN,MAAoB;AAAA,EACjB,UAAA;AAAA,EACA,SAAA;AAAA,EAER,YAAY,IAAA,EAAiC;AAC3C,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AACvB,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WAAA,CAAY,KAAA,EAAoB,QAAA,EAAqC;AACzE,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC9B,MAAA,OAAO,EAAC;AAAA,IACV;AAGA,IAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,qBAAA,EAAsB;AAG3D,IAAA,MAAM,cAAc,CAAC,GAAG,iBAAA,EAAmB,GAAG,MAAM,OAAO,CAAA;AAG3D,IAAA,IAAI,KAAA,CAAM,YAAA,IAAgB,IAAA,CAAK,SAAA,EAAW;AACxC,MAAA,OAAO,KAAK,kBAAA,CAAmB,KAAA,CAAM,YAAA,EAAc,KAAA,CAAM,SAAS,WAAW,CAAA;AAAA,IAC/E;AAGA,IAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAM,OAAA,EAAS;AAAA,MACtD,MAAA,EAAQ,WAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,kBAAA,CACZ,WAAA,EACA,eAAA,EACA,QAAA,EACmB;AACnB,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AAEnB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AAErC,IAAA,IAAI;AAEF,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO,CAAC,MAAA,EAAQ,aAAA,EAAe,CAAA,EAAG,WAAW,CAAA,MAAA,CAAQ,CAAC,CAAA;AACnG,MAAA,IAAI,UAAA,CAAW,aAAa,CAAA,EAAG;AAC7B,QAAA,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MAClF;AAGA,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,SAAA,CAAU,KAAK,KAAA,EAAO,CAAC,QAAA,EAAU,aAAa,CAAC,CAAA;AAC/E,MAAA,IAAI,YAAA,CAAa,aAAa,CAAA,EAAG;AAC/B,QAAA,YAAA,CAAa,MAAA,CAAO,MAAM,IAAI,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AAEhE,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK;AAChC,UAAA,IAAI,IAAA,EAAM,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AAAA,QACjC,CAAC,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,OAAO,CAAC,UAAA,EAAY,UAAA,EAAY,oBAAoB,CAAC,CAAA;AACvG,MAAA,IAAI,eAAA,CAAgB,aAAa,CAAA,EAAG;AAClC,QAAA,eAAA,CAAgB,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MACvF;AAAA,IACF,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAO,EAAC;AAAA,IACV;AAGA,IAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA;AAC/C,IAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,MAAA,OAAO,EAAC;AAAA,IACV;AAGA,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,UAAA,CAAW,KAAK,eAAA,EAAiB;AAAA,MAChE,MAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AAGD,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,aAAa,CAAA;AACzC,IAAA,MAAM,WAAW,eAAA,CAAgB,MAAA,CAAO,OAAK,WAAA,CAAY,GAAA,CAAI,CAAC,CAAC,CAAA;AAE/D,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,qBAAA,GAA2C;AACvD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAO,YAAY,CAAA;AACxD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,KAAK,YAAY,CAAA;AACvD,MAAA,OAAO,IAAA,CAAK,eAAe,OAAO,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,OAAA,EAA2B;AAChD,IAAA,OAAO,OAAA,CACJ,MAAM,IAAI,CAAA,CACV,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CACzB,OAAO,CAAC,IAAA,KAAS,IAAA,IAAQ,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA,CAC9C,GAAA,CAAI,CAAC,OAAA,KAAY;AAGhB,MAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,QAAA,OAAO,MAAM,OAAO,CAAA,EAAA,CAAA;AAAA,MACtB;AAEA,MAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1B,QAAA,OAAO,MAAM,OAAO,CAAA,CAAA;AAAA,MACtB;AAEA,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACL;AACF,CAAA;;;ACxJO,IAAM,gBAAN,MAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOzB,MAAM,QAAA,EAAgC;AAKpC,IAAA,OAAO,QAAA;AAAA,EACT;AACF,CAAA;;;ACRA,IAAM,UAAA,GAAa,GAAA;AAcZ,IAAM,sBAAN,MAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ/B,YAAoB,IAAA,EAAiC;AAAjC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAElB,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,MAAM,SAAA,GAAuC;AAAA,QAC3C,YAAY,IAAA,CAAK;AAAA,OACnB;AACA,MAAA,IAAI,KAAK,SAAA,EAAW;AAClB,QAAA,SAAA,CAAU,YAAY,IAAA,CAAK,SAAA;AAAA,MAC7B;AACA,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,aAAA,CAAc,SAAS,CAAA;AAAA,IAClD;AACA,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,aAAA,EAAc;AAAA,EACzC;AAAA,EAnBQ,aAAA;AAAA,EACA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BR,MAAM,cAAc,KAAA,EAAiD;AACnE,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC5B,MAAA,OAAO,IAAA,CAAK,kBAAkB,SAAS,CAAA;AAAA,IACzC;AAGA,IAAA,MAAM,EAAE,UAAU,YAAA,EAAc,SAAA,KAAc,MAAM,IAAA,CAAK,sBAAA,CAAuB,KAAA,CAAM,KAAK,CAAA;AAG3F,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,EAAC;AAClC,IAAA,MAAM,EAAE,WAAA,EAAa,iBAAA,KAAsB,IAAA,CAAK,eAAA,CAAgB,UAAU,OAAO,CAAA;AAGjF,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,WAAW,CAAA;AAG3D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE9B,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,cAAA;AAAA,MACV,OAAA,EAAS,IAAA,CAAK,gBAAA,CAAiB,cAAc,CAAA;AAAA,MAC7C,YAAA,EAAc,MAAM,KAAA,CAAM,MAAA;AAAA,MAC1B,YAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAW,CAAC,GAAG,IAAI,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,MACjC,OAAA,EAAS;AAAA,QACP,YAAA,EAAc,iBAAA;AAAA,QACd,KAAK,cAAA,CAAe;AAAA;AACtB,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAM,OAAA,EAA6C;AACvD,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,UAAA,IAAc,CAAC,KAAK,aAAA,EAAe;AAChD,MAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;AAAA,IACzF;AAEA,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,GAAA,EAAI;AAG/C,IAAA,MAAM,YAAY,MAAM,IAAA,CAAK,cAAc,WAAA,CAAY,OAAA,CAAQ,OAAO,OAAO,CAAA;AAE7E,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,IAAA,CAAK,kBAAkB,SAAS,CAAA;AAAA,IACzC;AAGA,IAAA,MAAM,QAAuB,EAAC;AAC9B,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,UAAU,MAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAK,QAAQ,CAAA;AACxD,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA;AAAA,MACxC,CAAA,CAAA,MAAQ;AAEN,QAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,UAA0B,EAAC;AAC/B,IAAA,IAAI,IAAA,CAAK,KAAK,YAAA,EAAc;AAC1B,MAAA,IAAI;AACF,QAAA,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,iBAAA,EAAkB;AAAA,MAC3D,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAGA,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,cAAc,EAAE,KAAA,EAAO,SAAS,CAAA;AAG1D,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,QAAA,EAAU,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,KACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,uBACZ,KAAA,EAKC;AACD,IAAA,MAAM,cAAyB,EAAC;AAChC,IAAA,MAAM,YAA4B,EAAC;AACnC,IAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,IAAA,MAAM,OAAA,GAAU,KAAK,aAAA,CAAc,KAAA,EAAO,MAAM,MAAA,GAAS,GAAA,GAAO,UAAA,GAAa,KAAA,CAAM,MAAM,CAAA;AAEzF,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI;AACF,UAAA,YAAA,IAAgB,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA;AAEzC,UAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,IAAA,CAAK,gBAAgB,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,IAAI,CAAA;AAEnF,UAAA,KAAA,MAAW,WAAW,YAAA,EAAc;AAClC,YAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AACxB,YAAA,IAAI,CAAC,SAAA,CAAU,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACzC,cAAA,SAAA,CAAU,IAAA,CAAK,QAAQ,QAAQ,CAAA;AAAA,YACjC;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAEN,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,QAAA,EAAU,WAAA,EAAa,YAAA,EAAc,SAAA,EAAU;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,CAAiB,OAAY,SAAA,EAA0B;AAC7D,IAAA,MAAM,UAAiB,EAAC;AACxB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,SAAA,EAAW;AAChD,MAAA,OAAA,CAAQ,KAAK,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IAC5C;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAA,CACN,UACA,OAAA,EACuD;AACvD,IAAA,MAAM,kBAAA,GAAqB,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAC,CAAA;AACpE,IAAA,MAAM,cAAc,QAAA,CAAS,MAAA;AAAA,MAC3B,CAAC,CAAA,KAAM,CAAC,kBAAA,CAAmB,GAAA,CAAI,EAAE,WAAW;AAAA,KAC9C;AACA,IAAA,MAAM,iBAAA,GAAoB,QAAA,CAAS,MAAA,GAAS,WAAA,CAAY,MAAA;AACxD,IAAA,OAAO,EAAE,aAAa,iBAAA,EAAkB;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,QAAA,EAAmC;AAC1D,IAAA,MAAM,OAAA,GAAwB;AAAA,MAC5B,OAAO,QAAA,CAAS,MAAA;AAAA,MAChB,UAAA,EAAY,EAAE,QAAA,EAAU,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAAA,MAC/D,YAAY,EAAC;AAAA,MACb,YAAY,EAAE,KAAA,EAAO,GAAG,SAAA,EAAW,CAAA,EAAG,KAAK,CAAA;AAAE,KAC/C;AAEA,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,OAAA,CAAQ,UAAA,CAAW,QAAQ,QAAQ,CAAA,EAAA;AACnC,MAAA,OAAA,CAAQ,UAAA,CAAW,QAAQ,QAAQ,CAAA,GAAA,CAChC,QAAQ,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAA,IAAK,CAAA,IAAK,CAAA;AAChD,MAAA,OAAA,CAAQ,UAAA,CAAW,QAAQ,QAAQ,CAAA,EAAA;AAAA,IACrC;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,SAAA,EAAgC;AACxD,IAAA,OAAO;AAAA,MACL,UAAU,EAAC;AAAA,MACX,OAAA,EAAS;AAAA,QACP,KAAA,EAAO,CAAA;AAAA,QACP,UAAA,EAAY,EAAE,QAAA,EAAU,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAAA,QAC/D,YAAY,EAAC;AAAA,QACb,YAAY,EAAE,KAAA,EAAO,GAAG,SAAA,EAAW,CAAA,EAAG,KAAK,CAAA;AAAE,OAC/C;AAAA,MACA,YAAA,EAAc,CAAA;AAAA,MACd,YAAA,EAAc,CAAA;AAAA,MACd,QAAA,EAAU,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAAA,MACvB,WAAW,EAAC;AAAA,MACZ,OAAA,EAAS,EAAE,YAAA,EAAc,CAAA,EAAG,KAAK,CAAA;AAAE,KACrC;AAAA,EACF;AACF,CAAA;;;ACpPO,IAAM,eAAN,MAA4C;AAAA,EACjD,YAAoB,eAAA,EAAmC;AAAnC,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAAA,EAAoC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxD,MAAM,iBAAA,GAA6C;AACjD,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,eAAA,CAAgB,cAAA,EAAe;AAC9D,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,SAAyB,EAAC;AAEhC,IAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,UAAA,IAAc,CAAC,EAAE,QAAA,EAAU;AAC1C,MAAA,MAAM,OAAO,CAAA,CAAE,QAAA;AACf,MAAA,IAAI,OAAO,IAAA,CAAK,WAAA,KAAgB,QAAA,EAAU;AAC1C,MAAA,IAAI,KAAK,SAAA,IAAa,IAAI,KAAK,IAAA,CAAK,SAAS,KAAK,GAAA,EAAK;AAEvD,MAAA,MAAM,MAAA,GAAuB;AAAA,QAC3B,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AACA,MAAA,IAAI,KAAK,SAAA,EAAW;AAClB,QAAA,MAAA,CAAO,SAAA,GAAY,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,MAC5C;AACA,MAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,IACpB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,WAAA,EAAuC;AAC3D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAC7C,IAAA,OAAO,QAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,WAAW,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAuB,WAAA,EAA8C;AACzE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,eAAA,CAAgB,oBAAoB,WAAW,CAAA;AAC3E,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,SAAyB,EAAC;AAEhC,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,UAAA,IAAc,CAAC,EAAE,QAAA,EAAU;AAC1C,MAAA,MAAM,OAAO,CAAA,CAAE,QAAA;AACf,MAAA,IAAI,OAAO,IAAA,CAAK,WAAA,KAAgB,QAAA,EAAU;AAC1C,MAAA,IAAI,KAAK,SAAA,IAAa,IAAI,KAAK,IAAA,CAAK,SAAS,KAAK,GAAA,EAAK;AAEvD,MAAA,MAAM,MAAA,GAAuB;AAAA,QAC3B,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AACA,MAAA,IAAI,KAAK,SAAA,EAAW;AAClB,QAAA,MAAA,CAAO,SAAA,GAAY,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,MAC5C;AACA,MAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,IACpB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAA;;;ACnEO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAAoB,eAAA,EAAmC;AAAnC,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAAA,EAAqC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzD,MAAM,YAAA,CACJ,OAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,EAAE,OAAA,EAAS,WAAA,EAAa,aAAA,EAAe,SAAA,EAAW,eAAc,GACpE,OAAA;AAEF,IAAA,MAAM,QAAA,GAA2B;AAAA,MAC/B,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,MAAM,OAAA,CAAQ;AAAA,KAChB;AAEA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,QAAA,CAAS,SAAA,GAAY,SAAA;AAAA,IACvB;AAEA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,QAAA,CAAS,aAAA,GAAgB,aAAA;AAAA,IAC3B;AAEA,IAAA,MAAM,KAAK,eAAA,CAAgB,MAAA;AAAA,MACzB;AAAA,QACE,UAAA,EAAY,WAAA;AAAA,QACZ,QAAA,EAAU,WAAA;AAAA,QACV,IAAA,EAAM,UAAA;AAAA,QACN,MAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAS,aAAA;AAAA,QACT;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CACJ,QAAA,EACA,WAAA,EACA,eACA,OAAA,EACe;AACf,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,IAAA,CAAK,YAAA;AAAA,QACT;AAAA,UACE,OAAA;AAAA,UACA,WAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;;;ACtEA,IAAA,oBAAA,GAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,0BAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACUO,IAAM,WAAA,GAAN,MAAM,YAAA,SAAoB,KAAA,CAAM;AAAA,EACrC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,YAAA,CAAY,SAAS,CAAA;AAAA,EACnD;AACF,CAAA;AAKO,IAAM,kBAAA,GAAN,MAAM,mBAAA,SAA2B,WAAA,CAAY;AAAA,EAClC,OAAA;AAAA,EAEhB,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,CAAA,eAAA,EAAkB,OAAO,CAAA,CAAE,CAAA;AACjC,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,mBAAA,CAAmB,SAAS,CAAA;AAAA,EAC1D;AACF,CAAA;AAKO,IAAM,wBAAA,GAAN,MAAM,yBAAA,SAAiC,WAAA,CAAY;AAAA,EACxC,YAAA;AAAA,EACA,UAAA;AAAA,EAEhB,WAAA,CAAY,cAAsB,UAAA,EAAoB;AACpD,IAAA,KAAA,CAAM,CAAA,qBAAA,EAAwB,YAAY,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAE,CAAA;AACvE,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,yBAAA,CAAyB,SAAS,CAAA;AAAA,EAChE;AACF,CAAA;AAKO,IAAM,sBAAA,GAAN,MAAM,uBAAA,SAA+B,WAAA,CAAY;AAAA,EACtD,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,sEAAsE,CAAA;AAC5E,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,uBAAA,CAAuB,SAAS,CAAA;AAAA,EAC9D;AACF,CAAA;AAKO,IAAM,0BAAA,GAAN,MAAM,2BAAA,SAAmC,WAAA,CAAY;AAAA,EAC1C,UAAA;AAAA,EAEhB,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA,CAAM,CAAA,uBAAA,EAA0B,UAAU,CAAA,CAAE,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,2BAAA,CAA2B,SAAS,CAAA;AAAA,EAClE;AACF,CAAA;AAKO,IAAM,iBAAA,GAAN,MAAM,kBAAA,SAA0B,WAAA,CAAY;AAAA,EACjC,UAAA;AAAA,EACA,YAAA;AAAA,EAEhB,WAAA,CAAY,YAAoB,YAAA,EAAsB;AACpD,IAAA,KAAA,CAAM,CAAA,mBAAA,EAAsB,YAAY,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAE,CAAA;AACrE,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,kBAAA,CAAkB,SAAS,CAAA;AAAA,EACzD;AACF,CAAA;AAKO,IAAM,sBAAA,GAAN,MAAM,uBAAA,SAA+B,WAAA,CAAY;AAAA,EACtC,UAAA;AAAA,EACA,MAAA;AAAA,EAEhB,WAAA,CAAY,YAAoB,MAAA,EAAgB;AAC9C,IAAA,KAAA,CAAM,CAAA,mBAAA,EAAsB,UAAU,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AAClD,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,uBAAA,CAAuB,SAAS,CAAA;AAAA,EAC9D;AACF,CAAA;AAKO,IAAM,oBAAA,GAAN,MAAM,qBAAA,SAA6B,WAAA,CAAY;AAAA,EACpC,OAAA;AAAA,EAEhB,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE,CAAA;AACnC,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,qBAAA,CAAqB,SAAS,CAAA;AAAA,EAC5D;AACF,CAAA","file":"index.js","sourcesContent":["export * from \"./agent_adapter\";\nexport * from \"./backlog_adapter\";\nexport * from \"./changelog_adapter\";\nexport * from \"./execution_adapter\";\nexport * from \"./feedback_adapter\";\nexport * from \"./identity_adapter\";\nexport * from \"./indexer_adapter\";\nexport * from \"./metrics_adapter\";\nexport * from \"./project_adapter\";\nexport * from \"./workflow_adapter\";\n","import type { ActorRecord } from \"./\";\nimport type { AgentRecord } from \"./\";\nimport type { CycleRecord } from \"./\";\nimport type { TaskRecord } from \"./\";\nimport type { ExecutionRecord } from \"./\";\nimport type { ChangelogRecord } from \"./\";\nimport type { FeedbackRecord } from \"./\";\nimport type { EmbeddedMetadataRecord } from \"./embedded.types\";\n\n/**\n * A custom record type for testing purposes.\n */\nexport type CustomRecord = {\n type: 'custom';\n data: unknown;\n}\n\n/**\n * Defines the possible 'type' values for any record in the system.\n */\nexport type GitGovRecordType =\n | \"actor\"\n | \"agent\"\n | \"cycle\"\n | \"task\"\n | \"execution\"\n | \"changelog\"\n | \"feedback\"\n | \"custom\";\n\n/**\n * The canonical payload for any GitGovernance record.\n */\nexport type GitGovRecordPayload =\n | ActorRecord\n | AgentRecord\n | CycleRecord\n | TaskRecord\n | ExecutionRecord\n | ChangelogRecord\n | FeedbackRecord\n | CustomRecord;\n\n/**\n * The canonical type for any record in GitGovernance, wrapping a payload with metadata.\n */\nexport type GitGovRecord = EmbeddedMetadataRecord<GitGovRecordPayload>;\n\n/**\n * Specific GitGov record types with full metadata (header + payload).\n * These types provide clean, type-safe access to records with their signatures and checksums.\n * \n * @example\n * const taskRecord: GitGovTaskRecord = await taskStore.read(taskId);\n * const authorId = taskRecord.header.signatures[0].keyId;\n */\nexport type GitGovTaskRecord = EmbeddedMetadataRecord<TaskRecord>;\nexport type GitGovCycleRecord = EmbeddedMetadataRecord<CycleRecord>;\nexport type GitGovFeedbackRecord = EmbeddedMetadataRecord<FeedbackRecord>;\nexport type GitGovExecutionRecord = EmbeddedMetadataRecord<ExecutionRecord>;\nexport type GitGovChangelogRecord = EmbeddedMetadataRecord<ChangelogRecord>;\nexport type GitGovActorRecord = EmbeddedMetadataRecord<ActorRecord>;\nexport type GitGovAgentRecord = EmbeddedMetadataRecord<AgentRecord>;\n\n// Payloads for creating new records\nexport type ActorPayload = Partial<ActorRecord>;\nexport type AgentPayload = Partial<AgentRecord>;\nexport type CyclePayload = Partial<CycleRecord>;\nexport type TaskPayload = Partial<TaskRecord>;\nexport type ExecutionPayload = Partial<ExecutionRecord>;\nexport type ChangelogPayload = Partial<ChangelogRecord>;\nexport type FeedbackPayload = Partial<FeedbackRecord>;\n\n/**\n * Base class for all GitGovernance-specific errors.\n * Centralized here as it's used across multiple modules (schemas, validation, etc.)\n */\nexport class GitGovError extends Error {\n constructor(message: string, public readonly code: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\n","/**\n * Schema-specific error types for GitGovernance core.\n * These errors are thrown during JSON Schema validation and compilation.\n */\n\n// Import GitGovError from models (common types) - no circular dependencies\nimport { GitGovError } from '../record_types/common.types';\n\n// Re-export for backward compatibility\nexport { GitGovError };\n\n/**\n * Custom Error type for failures related to JSON Schema validation.\n */\nexport class SchemaValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SchemaValidationError\";\n }\n}\n\n/**\n * Error for detailed AJV validation failures with multiple field errors.\n */\nexport class DetailedValidationError extends GitGovError {\n constructor(\n recordType: string,\n public readonly errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>\n ) {\n const errorSummary = errors\n .map(err => `${err.field}: ${err.message}`)\n .join(', ');\n\n super(\n `${recordType} validation failed: ${errorSummary}`,\n 'DETAILED_VALIDATION_ERROR'\n );\n }\n}\n","/**\n * Validation and common error types for GitGovernance core.\n * These errors are thrown during record validation, checksum verification, and general operations.\n */\n\n// Import GitGovError from models (common types)\nexport { GitGovError } from '../record_types/common.types';\n\n/**\n * Custom Error type for failures when a payload's checksum does not match\n * the one specified in the header.\n */\nexport class ChecksumMismatchError extends Error {\n constructor(message: string = \"Payload checksum does not match the header.\") {\n super(message);\n this.name = \"ChecksumMismatchError\";\n }\n}\n\n/**\n * Custom Error type for failures during cryptographic signature verification.\n */\nexport class SignatureVerificationError extends Error {\n constructor(message: string = \"Signature verification failed.\") {\n super(message);\n this.name = \"SignatureVerificationError\";\n }\n}\n\n/**\n * Error for when required fields are missing during record creation.\n */\nexport class RequiredFieldError extends Error {\n constructor(recordType: string, missingFields: string[]) {\n super(`${recordType} requires ${missingFields.join(', ')}`);\n this.name = \"RequiredFieldError\";\n }\n}\n\n/**\n * Error for when a record is not found during operations.\n */\nexport class RecordNotFoundError extends Error {\n constructor(recordType: string, recordId: string) {\n super(`${recordType} with id ${recordId} not found`);\n this.name = \"RecordNotFoundError\";\n }\n}\n\n/**\n * Error for when project root cannot be determined.\n */\nexport class ProjectRootError extends Error {\n constructor() {\n super('Could not find project root. Are you in a git repository?');\n this.name = \"ProjectRootError\";\n }\n}\n\n/**\n * Error for when record creation validation fails.\n */\nexport class RecordCreationError extends Error {\n constructor(recordType: string, details: string) {\n super(`Invalid ${recordType} created: ${details}`);\n this.name = \"RecordCreationError\";\n }\n}\n\n/**\n * Error for when operations are not implemented or require external components.\n */\nexport class NotImplementedError extends Error {\n constructor(operation: string, reason: string) {\n super(`${operation} not implemented yet - ${reason}`);\n this.name = \"NotImplementedError\";\n }\n}\n\n/**\n * Error for protocol violations in workflow operations.\n */\nexport class ProtocolViolationError extends Error {\n constructor(message: string, violationType?: string) {\n super(`Protocol violation: ${message}`);\n this.name = \"ProtocolViolationError\";\n if (violationType) {\n this.message += ` (Type: ${violationType})`;\n }\n }\n}\n\n/**\n * Standard validation result interface for all validators.\n * Ensures consistency across all validateXDetailed functions.\n */\nexport interface ValidationResult {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"actor_record_schema.json\",\n \"title\": \"ActorRecord\",\n \"description\": \"Canonical schema for actor records as defined in actor_protocol.md\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"type\",\n \"displayName\",\n \"publicKey\",\n \"roles\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"Unique, human-readable identifier for the actor.\",\n \"examples\": [\n \"human:camilo\",\n \"agent:aion\",\n \"agent:camilo:cursor\"\n ]\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"human\",\n \"agent\"\n ],\n \"description\": \"The type of actor.\"\n },\n \"displayName\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 100,\n \"description\": \"The name of the actor to be used in user interfaces.\"\n },\n \"publicKey\": {\n \"type\": \"string\",\n \"minLength\": 44,\n \"maxLength\": 44,\n \"description\": \"The Ed25519 public key (base64 encoded, 44 characters) for verifying the actor's signatures.\"\n },\n \"roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"minItems\": 1,\n \"uniqueItems\": true,\n \"description\": \"List of capacity roles defining the actor's skills and permissions. Uses hierarchical format with colons.\",\n \"examples\": [\n [\n \"developer:backend:go\",\n \"auditor\"\n ],\n [\n \"planner:ai\"\n ]\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"active\",\n \"revoked\"\n ],\n \"default\": \"active\",\n \"description\": \"Optional. The lifecycle status of the actor. Defaults to 'active' if not specified.\"\n },\n \"supersededBy\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"Optional. The ID of the actor that replaces this one.\"\n },\n \"metadata\": {\n \"type\": \"object\",\n \"description\": \"An optional field for additional, non-canonical metadata.\",\n \"examples\": [\n {\n \"version\": \"1.2.0\",\n \"source\": \"https://github.com/...\"\n },\n {\n \"team\": \"frontend\"\n }\n ]\n }\n }\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"agent_record_schema.json\",\n \"title\": \"AgentRecord\",\n \"description\": \"Canonical schema for agent operational manifests.\",\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"engine\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^agent:[a-z0-9:-]+$\",\n \"description\": \"Unique identifier for the agent, linking to an ActorRecord.\"\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"active\",\n \"archived\"\n ],\n \"default\": \"active\"\n },\n \"triggers\": {\n \"type\": \"array\",\n \"default\": [],\n \"description\": \"Optional list of triggers that activate the agent.\\nAdditional fields are allowed and depend on trigger type:\\n- webhook triggers: 'event' (event identifier), 'filter' (condition)\\n- scheduled triggers: 'cron' (cron expression)\\n- manual triggers: 'command' (example CLI command)\\n\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"manual\",\n \"webhook\",\n \"scheduled\"\n ],\n \"description\": \"Type of trigger that activates the agent\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": true\n }\n },\n \"knowledge_dependencies\": {\n \"type\": \"array\",\n \"default\": [],\n \"items\": {\n \"type\": \"string\",\n \"description\": \"Glob patterns for blueprint files this agent needs access to\"\n }\n },\n \"prompt_engine_requirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"skills\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"metadata\": {\n \"type\": \"object\",\n \"description\": \"Optional framework-specific or deployment-specific metadata for agent extensions.\\nCommon use cases: framework identification (langchain, google-adk), deployment info (provider, image, region),\\ncost tracking (cost_per_invocation, currency), tool capabilities, maintainer info.\\nThis field does NOT affect agent execution - it is purely informational.\\n\",\n \"additionalProperties\": true\n },\n \"engine\": {\n \"type\": \"object\",\n \"oneOf\": [\n {\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"local\"\n },\n \"runtime\": {\n \"type\": \"string\",\n \"description\": \"Runtime environment (typescript, python, etc.)\"\n },\n \"entrypoint\": {\n \"type\": \"string\",\n \"description\": \"Path to the agent entry file\"\n },\n \"function\": {\n \"type\": \"string\",\n \"description\": \"Function name to invoke\"\n }\n }\n },\n {\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"api\"\n },\n \"url\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"HTTP endpoint for the agent\"\n },\n \"method\": {\n \"type\": \"string\",\n \"enum\": [\n \"POST\",\n \"GET\",\n \"PUT\"\n ],\n \"default\": \"POST\"\n },\n \"auth\": {\n \"type\": \"object\",\n \"description\": \"Authentication configuration for API requests\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"bearer\",\n \"oauth\",\n \"api-key\",\n \"actor-signature\"\n ],\n \"description\": \"Authentication type. 'actor-signature' uses the agent's ActorRecord keypair to sign requests.\"\n },\n \"secret_key\": {\n \"type\": \"string\",\n \"description\": \"Reference to secret in Secret Manager (for bearer/api-key/oauth auth types)\"\n },\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Direct token value (not recommended for production, use secret_key instead)\"\n }\n }\n }\n }\n },\n {\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"mcp\"\n },\n \"url\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"MCP server endpoint\"\n },\n \"tool\": {\n \"type\": \"string\",\n \"description\": \"Name of the MCP tool to invoke. If not specified, defaults to agentId without 'agent:' prefix.\"\n },\n \"auth\": {\n \"type\": \"object\",\n \"description\": \"Authentication configuration for MCP server\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"bearer\",\n \"oauth\",\n \"api-key\",\n \"actor-signature\"\n ],\n \"description\": \"Authentication type. 'actor-signature' uses the agent's ActorRecord keypair to sign requests.\"\n },\n \"secret_key\": {\n \"type\": \"string\",\n \"description\": \"Reference to secret in Secret Manager (for bearer/api-key/oauth auth types)\"\n },\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Direct token value (not recommended for production, use secret_key instead)\"\n }\n }\n }\n }\n },\n {\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"custom\"\n },\n \"protocol\": {\n \"type\": \"string\",\n \"description\": \"Custom protocol identifier (e.g., 'a2a', 'grpc')\"\n },\n \"config\": {\n \"type\": \"object\",\n \"description\": \"Protocol-specific configuration\"\n }\n }\n }\n ]\n }\n },\n \"examples\": [\n {\n \"id\": \"agent:scribe\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"local\",\n \"runtime\": \"typescript\",\n \"entrypoint\": \"packages/agents/scribe/index.ts\",\n \"function\": \"runScribe\"\n },\n \"metadata\": {\n \"purpose\": \"documentation-generation\",\n \"maintainer\": \"team:platform\"\n },\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ],\n \"knowledge_dependencies\": [\n \"packages/blueprints/**/*.md\"\n ]\n },\n {\n \"id\": \"agent:langchain-analyzer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"https://langchain-service-xyz.a.run.app/analyze\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"framework\": \"langchain\",\n \"version\": \"0.2.0\",\n \"model\": \"gpt-4-turbo\",\n \"deployment\": {\n \"provider\": \"gcp\",\n \"service\": \"cloud-run\",\n \"region\": \"us-central1\"\n },\n \"cost_per_invocation\": 0.03,\n \"currency\": \"USD\"\n },\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"task.ready\"\n }\n ],\n \"knowledge_dependencies\": [\n \"docs/architecture/**/*.md\"\n ]\n },\n {\n \"id\": \"agent:sentiment-analyzer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"http://sentiment-analyzer:8082/analyze\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"framework\": \"google-adk\",\n \"version\": \"1.0.0\",\n \"model\": \"gemini-pro\",\n \"deployment\": {\n \"runtime\": \"docker\",\n \"image\": \"gitgov/sentiment-analyzer:v1.2.0\",\n \"port\": 8082\n },\n \"max_tokens\": 1024\n },\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"feedback.created\"\n }\n ]\n },\n {\n \"id\": \"agent:cursor-reviewer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"mcp\",\n \"url\": \"http://localhost:8083/mcp\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"ide\": \"cursor\",\n \"tool\": \"code-review\",\n \"accepts_tools\": [\n \"review\",\n \"refactor\",\n \"test\"\n ]\n },\n \"knowledge_dependencies\": [\n \"packages/**/*.ts\",\n \"packages/**/*.tsx\"\n ],\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"task.status.ready\"\n }\n ]\n },\n {\n \"id\": \"agent:deepl-translator\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"https://api.deepl.com/v2/translate\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"bearer\",\n \"secret_key\": \"DEEPL_API_KEY\"\n }\n },\n \"metadata\": {\n \"provider\": \"deepl\",\n \"supported_languages\": [\n \"EN\",\n \"ES\",\n \"FR\",\n \"DE\",\n \"PT\"\n ],\n \"max_chars_per_request\": 5000\n },\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ]\n },\n {\n \"id\": \"agent:coordinator\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"custom\",\n \"protocol\": \"a2a\",\n \"config\": {\n \"endpoint\": \"https://agent-hub.gitgov.io/a2a\",\n \"version\": \"draft-2025-01\",\n \"capabilities\": [\n \"task-delegation\",\n \"status-sync\",\n \"feedback-loop\"\n ]\n }\n },\n \"metadata\": {\n \"purpose\": \"multi-agent-orchestration\",\n \"experimental\": true\n },\n \"triggers\": [\n {\n \"type\": \"scheduled\",\n \"cron\": \"0 */4 * * *\"\n }\n ]\n },\n {\n \"id\": \"agent:minimal-watcher\",\n \"engine\": {\n \"type\": \"local\"\n }\n },\n {\n \"id\": \"agent:local-mcp-server\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"mcp\",\n \"url\": \"http://localhost:9000/mcp\"\n },\n \"knowledge_dependencies\": [\n \"packages/blueprints/**/*.md\"\n ],\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ]\n },\n {\n \"id\": \"agent:code-reviewer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"local\",\n \"runtime\": \"typescript\",\n \"entrypoint\": \"packages/agents/code-reviewer/index.ts\",\n \"function\": \"reviewCode\"\n },\n \"prompt_engine_requirements\": {\n \"roles\": [\n \"code-reviewer\",\n \"security-auditor\"\n ],\n \"skills\": [\n \"typescript\",\n \"security-best-practices\",\n \"code-quality-analysis\"\n ]\n },\n \"knowledge_dependencies\": [\n \"packages/**/*.ts\",\n \"packages/**/*.tsx\"\n ],\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"pull-request.opened\",\n \"filter\": \"branch:main\"\n }\n ]\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"changelog_record_schema.json\",\n \"title\": \"ChangelogRecord\",\n \"description\": \"Canonical schema for changelog records - aggregates N tasks into 1 release note\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"description\",\n \"relatedTasks\",\n \"completedAt\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-changelog-[a-z0-9-]{1,50}$\",\n \"maxLength\": 71,\n \"description\": \"Unique identifier for the changelog entry\",\n \"examples\": [\n \"1752707800-changelog-sistema-autenticacion-v1\",\n \"1752707800-changelog-sprint-24-api-performance\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 150,\n \"description\": \"Executive title of the deliverable\",\n \"examples\": [\n \"Sistema de Autenticación Completo v1.0\",\n \"Sprint 24 - Performance Optimizations\"\n ]\n },\n \"description\": {\n \"type\": \"string\",\n \"minLength\": 20,\n \"maxLength\": 5000,\n \"description\": \"Detailed description of the value delivered, including key decisions and impact\"\n },\n \"relatedTasks\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\"\n },\n \"minItems\": 1,\n \"description\": \"IDs of tasks that compose this deliverable (minimum 1 required)\"\n },\n \"completedAt\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Unix timestamp in seconds when the deliverable was completed\"\n },\n \"relatedCycles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\"\n },\n \"default\": [],\n \"description\": \"Optional IDs of cycles related to this deliverable\"\n },\n \"relatedExecutions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-exec-[a-z0-9-]{1,50}$\"\n },\n \"default\": [],\n \"description\": \"Optional IDs of key execution records related to this work\"\n },\n \"version\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 50,\n \"description\": \"Optional version or release identifier (e.g., 'v1.0.0', 'sprint-24')\",\n \"examples\": [\n \"v1.0.0\",\n \"v2.1.3\",\n \"sprint-24\"\n ]\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"default\": [],\n \"description\": \"Optional tags for categorization (e.g., 'feature:auth', 'bugfix', 'security')\"\n },\n \"commits\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 100\n },\n \"default\": [],\n \"description\": \"Optional list of git commit hashes related to this deliverable\"\n },\n \"files\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Optional list of main files that were created or modified\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"maxLength\": 3000,\n \"description\": \"Optional additional context, decisions, or learnings\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1752707800-changelog-sistema-autenticacion-v1\",\n \"title\": \"Sistema de Autenticación Completo v1.0\",\n \"description\": \"Implementación completa del sistema de autenticación con OAuth2, 2FA via TOTP, recuperación de contraseña, y UI responsive. Incluye tests E2E completos (95% coverage) y documentación técnica actualizada.\",\n \"relatedTasks\": [\n \"1752274500-task-crear-ui-login\",\n \"1752274600-task-integrar-oauth2-backend\",\n \"1752274700-task-implementar-2fa-totp\",\n \"1752274800-task-tests-e2e-auth\",\n \"1752274900-task-documentar-flujo-auth\"\n ],\n \"completedAt\": 1752707800,\n \"relatedCycles\": [\n \"1752200000-cycle-q1-auth-milestone\"\n ],\n \"relatedExecutions\": [\n \"1752274550-exec-analisis-auth-providers\",\n \"1752707750-exec-final-integration-test\"\n ],\n \"version\": \"v1.0.0\",\n \"tags\": [\n \"feature:auth\",\n \"security\",\n \"frontend\",\n \"backend\"\n ],\n \"commits\": [\n \"abc123def\",\n \"456ghi789\",\n \"jkl012mno\"\n ],\n \"files\": [\n \"src/pages/Login.tsx\",\n \"src/services/auth.ts\",\n \"src/components/TwoFactorSetup.tsx\",\n \"e2e/auth.spec.ts\"\n ],\n \"notes\": \"Decisión técnica: Usamos NextAuth.js después de evaluar Passport.js. El 2FA se implementó con TOTP (Google Authenticator compatible) en lugar de SMS por seguridad y costo.\"\n },\n {\n \"id\": \"1752707900-changelog-hotfix-payment-timeout\",\n \"title\": \"Hotfix: Critical Payment Timeout Fix\",\n \"description\": \"Fixed critical payment timeout issue affecting 15% of transactions. Increased timeout from 5s to 30s and added circuit breaker pattern for third-party API calls.\",\n \"relatedTasks\": [\n \"1752707850-task-fix-payment-timeout\",\n \"1752707870-task-add-circuit-breaker\"\n ],\n \"completedAt\": 1752707900,\n \"version\": \"v1.2.1\",\n \"tags\": [\n \"hotfix\",\n \"critical\",\n \"payment\"\n ],\n \"commits\": [\n \"xyz789abc\"\n ],\n \"notes\": \"Emergency response to production incident. Deployed to production within 2 hours.\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"cycle_record_schema.json\",\n \"title\": \"CycleRecord\",\n \"description\": \"Canonical schema for cycle records - strategic grouping of work\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"status\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67,\n \"description\": \"Unique identifier for the cycle (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\",\n \"examples\": [\n \"1754400000-cycle-sprint-24-api-performance\",\n \"1754500000-cycle-auth-system-v2\",\n \"1754600000-cycle-q4-2025-growth\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"Human-readable title for the cycle (e.g., 'Sprint 24', 'Auth v2.0', 'Q4 2025')\",\n \"examples\": [\n \"Sprint 24 - API Performance\",\n \"Authentication System v2.0\",\n \"Q4 2025 - Growth & Scale\"\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"planning\",\n \"active\",\n \"completed\",\n \"archived\"\n ],\n \"description\": \"The lifecycle status of the cycle\"\n },\n \"taskIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66\n },\n \"default\": [],\n \"description\": \"Optional array of Task IDs that belong to this cycle. Can be empty for cycles that only contain child cycles. (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n [\n \"1752274500-task-optimizar-endpoint-search\",\n \"1752360900-task-anadir-cache-a-redis\"\n ]\n ]\n },\n \"childCycleIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67\n },\n \"default\": [],\n \"description\": \"Optional array of Cycle IDs that are children of this cycle, allowing for hierarchies (e.g., Q1 containing Sprint 1, Sprint 2, Sprint 3). (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\",\n \"examples\": [\n [\n \"1754400000-cycle-sprint-24\",\n \"1754500000-cycle-sprint-25\"\n ]\n ]\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\",\n \"maxLength\": 100\n },\n \"default\": [],\n \"description\": \"Optional list of key:value tags for categorization (e.g., 'roadmap:q4', 'team:alpha', 'okr:growth').\",\n \"examples\": [\n [\n \"roadmap:q4\",\n \"team:backend\"\n ],\n [\n \"sprint:24\",\n \"focus:performance\"\n ],\n [\n \"milestone:v2\",\n \"security\"\n ]\n ]\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 0,\n \"maxLength\": 10000,\n \"description\": \"Optional description of the cycle's goals, objectives, and context\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1754400000-cycle-sprint-24-api-performance\",\n \"title\": \"Sprint 24 - API Performance\",\n \"status\": \"active\",\n \"taskIds\": [\n \"1752274500-task-optimizar-endpoint-search\",\n \"1752360900-task-anadir-cache-a-redis\",\n \"1752447300-task-implementar-rate-limiting\"\n ],\n \"tags\": [\n \"sprint:24\",\n \"team:backend\",\n \"focus:performance\"\n ],\n \"notes\": \"Objetivo: Reducir la latencia p95 de la API por debajo de 200ms y preparar infraestructura para Black Friday.\"\n },\n {\n \"id\": \"1754500000-cycle-auth-system-v2\",\n \"title\": \"Authentication System v2.0\",\n \"status\": \"planning\",\n \"taskIds\": [\n \"1752274500-task-oauth2-integration\",\n \"1752360900-task-2fa-implementation\",\n \"1752447300-task-password-recovery\",\n \"1752533700-task-session-management\"\n ],\n \"tags\": [\n \"milestone:v2\",\n \"security\",\n \"feature:auth\"\n ],\n \"notes\": \"Milestone mayor: Sistema completo de autenticación con OAuth2, 2FA, y gestión avanzada de sesiones. Crítico para lanzamiento Q4.\"\n },\n {\n \"id\": \"1754600000-cycle-q4-2025-growth\",\n \"title\": \"Q4 2025 - Growth & Scale\",\n \"status\": \"active\",\n \"childCycleIds\": [\n \"1754400000-cycle-sprint-24-api-performance\",\n \"1754500000-cycle-auth-system-v2\",\n \"1754650000-cycle-mobile-app-launch\"\n ],\n \"tags\": [\n \"roadmap:q4\",\n \"strategy:growth\",\n \"okr:scale-to-1m-users\"\n ],\n \"notes\": \"Objetivo trimestral: Escalar a 1M usuarios activos. Incluye mejoras de performance, nuevo sistema de auth, y lanzamiento de app móvil.\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"embedded_metadata_schema.json\",\n \"title\": \"EmbeddedMetadataRecord\",\n \"description\": \"Canonical schema for the wrapper structure of all GitGovernance records.\",\n \"type\": \"object\",\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"version\": {\n \"type\": \"string\",\n \"enum\": [\n \"1.0\"\n ],\n \"description\": \"Version of the embedded metadata format.\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"actor\",\n \"agent\",\n \"task\",\n \"execution\",\n \"changelog\",\n \"feedback\",\n \"cycle\",\n \"custom\"\n ],\n \"description\": \"The type of the record contained in the payload.\"\n },\n \"schemaUrl\": {\n \"type\": \"string\",\n \"description\": \"Optional URL to a custom schema for the payload.\"\n },\n \"schemaChecksum\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-fA-F0-9]{64}$\",\n \"description\": \"Optional SHA-256 checksum of the custom schema.\"\n },\n \"payloadChecksum\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-fA-F0-9]{64}$\",\n \"description\": \"SHA-256 checksum of the canonically serialized payload.\"\n },\n \"signatures\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"keyId\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"The Actor ID of the signer (must match ActorRecord.id pattern).\"\n },\n \"role\": {\n \"type\": \"string\",\n \"pattern\": \"^([a-z-]+|custom:[a-z0-9-]+)$\",\n \"minLength\": 1,\n \"maxLength\": 50,\n \"description\": \"The context role of the signature (e.g., 'author', 'reviewer', 'auditor', or 'custom:*').\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 1000,\n \"description\": \"Human-readable note from the signer. Part of the signature digest.\"\n },\n \"signature\": {\n \"type\": \"string\",\n \"pattern\": \"^[A-Za-z0-9+/]{86}==$\",\n \"description\": \"The Ed25519 signature (base64 encoded, 88 chars with padding) of the signature digest.\"\n },\n \"timestamp\": {\n \"type\": \"integer\",\n \"description\": \"Unix timestamp of the signature.\"\n }\n },\n \"required\": [\n \"keyId\",\n \"role\",\n \"notes\",\n \"signature\",\n \"timestamp\"\n ],\n \"additionalProperties\": false\n },\n \"description\": \"An array of one or more signature objects.\"\n }\n },\n \"required\": [\n \"version\",\n \"type\",\n \"payloadChecksum\",\n \"signatures\"\n ],\n \"additionalProperties\": false\n },\n \"payload\": {\n \"type\": \"object\",\n \"description\": \"The specific record data, validated against the schema defined by header.type.\"\n }\n },\n \"required\": [\n \"header\",\n \"payload\"\n ],\n \"additionalProperties\": false,\n \"oneOf\": [\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"actor\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:actor_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"agent\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:agent_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"task\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:task_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"execution\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:execution_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"changelog\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:changelog_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"feedback\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:feedback_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"cycle\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:cycle_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"custom\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"required\": [\n \"schemaUrl\",\n \"schemaChecksum\"\n ]\n }\n }\n },\n \"else\": false\n }\n ],\n \"examples\": [\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"task\",\n \"payloadChecksum\": \"a1b2c3d4e5f6...\",\n \"signatures\": [\n {\n \"keyId\": \"human:lead-dev\",\n \"role\": \"author\",\n \"notes\": \"Initial task creation for OAuth 2.0 implementation\",\n \"signature\": \"...\",\n \"timestamp\": 1752274500\n }\n ]\n },\n \"payload\": {\n \"id\": \"1752274500-task-implementar-auth\",\n \"status\": \"pending\",\n \"priority\": \"high\",\n \"description\": \"Implementar autenticación OAuth 2.0.\",\n \"tags\": [\n \"skill:go\",\n \"area:backend\"\n ]\n }\n },\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"execution\",\n \"payloadChecksum\": \"b2c3d4e5f6a1...\",\n \"signatures\": [\n {\n \"keyId\": \"agent:cursor\",\n \"role\": \"author\",\n \"notes\": \"OAuth 2.0 flow completed with GitHub provider integration\",\n \"signature\": \"...\",\n \"timestamp\": 1752274600\n },\n {\n \"keyId\": \"human:camilo\",\n \"role\": \"reviewer\",\n \"notes\": \"Reviewed and tested locally. LGTM.\",\n \"signature\": \"...\",\n \"timestamp\": 1752274650\n }\n ]\n },\n \"payload\": {\n \"id\": \"1752274600-exec-implement-oauth\",\n \"taskId\": \"1752274500-task-implement-oauth\",\n \"type\": \"progress\",\n \"title\": \"OAuth 2.0 flow implemented\",\n \"result\": \"Completed the OAuth 2.0 authentication flow...\"\n }\n },\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"actor\",\n \"payloadChecksum\": \"c3d4e5f6a1b2...\",\n \"signatures\": [\n {\n \"keyId\": \"human:admin\",\n \"role\": \"author\",\n \"notes\": \"New developer onboarded to team\",\n \"signature\": \"...\",\n \"timestamp\": 1752274700\n },\n {\n \"keyId\": \"agent:aion\",\n \"role\": \"auditor\",\n \"notes\": \"Actor verification: 10/10. Credentials validated.\",\n \"signature\": \"...\",\n \"timestamp\": 1752274705\n }\n ]\n },\n \"payload\": {\n \"id\": \"human:new-developer\",\n \"type\": \"human\",\n \"displayName\": \"New Developer\",\n \"publicKey\": \"...\",\n \"roles\": [\n \"developer\"\n ]\n }\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"execution_record_schema.json\",\n \"title\": \"ExecutionRecord\",\n \"description\": \"Canonical schema for execution log records - the universal event stream\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"taskId\",\n \"type\",\n \"title\",\n \"result\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-exec-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"Unique identifier for the execution log entry (10 timestamp + 1 dash + 4 'exec' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n \"1752275000-exec-refactor-queries\",\n \"1752361200-exec-api-externa-caida\"\n ]\n },\n \"taskId\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"ID of the parent task this execution belongs to (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"analysis\",\n \"progress\",\n \"blocker\",\n \"completion\",\n \"info\",\n \"correction\"\n ],\n \"description\": \"Semantic classification of the execution event\",\n \"examples\": [\n \"progress\",\n \"analysis\",\n \"blocker\",\n \"completion\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"Human-readable title for the execution (used to generate ID)\",\n \"examples\": [\n \"Refactor de queries N+1\",\n \"API Externa Caída\",\n \"Plan de implementación OAuth2\"\n ]\n },\n \"result\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 22000,\n \"description\": \"The tangible, verifiable output or result of the execution. \\nThis is the \\\"WHAT\\\" - evidence of work or event summary.\\n\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"maxLength\": 6500,\n \"description\": \"Optional narrative, context and decisions behind the execution.\\nThis is the \\\"HOW\\\" and \\\"WHY\\\" - the story behind the result.\\n\"\n },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Optional list of typed references to relevant commits, files, PRs, or external documents.\\nShould use typed prefixes for clarity and trazabilidad (see execution_protocol_appendix.md):\\n- commit: Git commit SHA\\n- pr: Pull Request number\\n- file: File path (relative to repo root)\\n- url: External URL\\n- issue: GitHub Issue number\\n- task: TaskRecord ID\\n- exec: ExecutionRecord ID (for corrections or dependencies)\\n- changelog: ChangelogRecord ID\\n\"\n },\n \"metadata\": {\n \"type\": \"object\",\n \"additionalProperties\": true,\n \"description\": \"Optional structured data for machine consumption.\\nUse this field for data that needs to be programmatically processed (e.g., audit findings,\\nperformance metrics, scan results). This complements result (human-readable WHAT) and\\nnotes (narrative HOW/WHY) by providing structured, queryable data.\\nCommon use cases: audit findings arrays, performance metrics, tool outputs, scan summaries.\\n\",\n \"examples\": [\n {\n \"findings\": [\n {\n \"type\": \"PII\",\n \"file\": \"src/user.ts\",\n \"line\": 42\n }\n ],\n \"scannedFiles\": 245\n },\n {\n \"metrics\": {\n \"duration_ms\": 1250,\n \"memory_mb\": 512\n }\n }\n ]\n }\n },\n \"examples\": [\n {\n \"id\": \"1752275500-exec-refactor-queries\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"progress\",\n \"title\": \"Refactor de queries N+1\",\n \"result\": \"Refactorizados 3 queries N+1 a un solo JOIN optimizado. Performance mejoró de 2.5s a 200ms.\",\n \"notes\": \"Identificados 3 N+1 queries en el endpoint /api/search. Aplicado eager loading y caching de relaciones.\",\n \"references\": [\n \"commit:b2c3d4e\",\n \"file:src/api/search.ts\"\n ]\n },\n {\n \"id\": \"1752361200-exec-api-externa-caida\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"blocker\",\n \"title\": \"API Externa Caída\",\n \"result\": \"No se puede continuar con testing de integración. API de pagos devuelve 503.\",\n \"notes\": \"La API de pagos de terceros (api.payments.com) está devolviendo errores 503. Contactado soporte del proveedor. ETA de resolución: 2-3 horas.\",\n \"references\": [\n \"url:https://status.payments.com\"\n ]\n },\n {\n \"id\": \"1752188000-exec-plan-oauth-implementation\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"analysis\",\n \"title\": \"Plan de implementación OAuth2\",\n \"result\": \"Documento de diseño técnico completado. 5 sub-tareas identificadas con estimaciones de complejidad.\",\n \"notes\": \"Evaluadas 3 opciones: NextAuth.js (elegida), Passport.js, custom implementation. NextAuth.js por madurez y soporte de múltiples providers.\",\n \"references\": [\n \"file:docs/oauth-design.md\"\n ]\n },\n {\n \"id\": \"1752707800-exec-oauth-completed\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"completion\",\n \"title\": \"OAuth Implementation Completed\",\n \"result\": \"Sistema OAuth2 completamente implementado, testeado y deployado a staging. 95% test coverage. Todos los acceptance criteria cumplidos.\",\n \"notes\": \"Implementación finalizada. Code review aprobado. Tests E2E passing. Ready para changelog y deploy a producción.\",\n \"references\": [\n \"pr:456\",\n \"commit:def789abc\",\n \"url:https://staging.app.com/login\"\n ]\n },\n {\n \"id\": \"1752275600-exec-cambio-estrategia-redis\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"info\",\n \"title\": \"Cambio de estrategia: Usar Redis para sessions\",\n \"result\": \"Decisión: Migrar de JWT stateless a sessions en Redis por requisito de revocación inmediata.\",\n \"notes\": \"Durante code review se identificó requisito crítico: revocar sesiones inmediatamente (ej: compromiso de cuenta). JWT stateless no permite esto sin lista negra compleja. Redis sessions permite revocación instantánea.\",\n \"references\": [\n \"issue:567\",\n \"url:https://redis.io/docs/manual/keyspace-notifications/\"\n ]\n },\n {\n \"id\": \"1752275700-exec-correccion-metricas\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"correction\",\n \"title\": \"Corrección: Métricas de performance\",\n \"result\": \"Corrección de execution 1752275500-exec-refactor-queries: El performance fue 200ms, no 50ms como se reportó.\",\n \"notes\": \"Error de tipeo en execution original. La mejora real fue de 2.5s a 200ms (no 50ms). Sigue siendo significativa (92% mejora) pero números correctos son importantes para métricas.\",\n \"references\": [\n \"exec:1752275500-exec-refactor-queries\"\n ]\n },\n {\n \"id\": \"1752276000-exec-source-audit-scan\",\n \"taskId\": \"1752274500-task-audit-compliance\",\n \"type\": \"analysis\",\n \"title\": \"Source Audit Scan - 2025-01-15\",\n \"result\": \"Escaneados 245 archivos. Encontrados 10 findings (3 critical, 4 high, 3 medium). Ver metadata para detalles estructurados.\",\n \"notes\": \"Scan ejecutado con RegexDetector + HeuristicDetector. LLM calls: 0 (tier free).\",\n \"references\": [\n \"file:src/config/db.ts\",\n \"file:src/auth/keys.ts\"\n ],\n \"metadata\": {\n \"scannedFiles\": 245,\n \"scannedLines\": 18420,\n \"duration_ms\": 1250,\n \"findings\": [\n {\n \"id\": \"SEC-001\",\n \"severity\": \"critical\",\n \"file\": \"src/config/db.ts\",\n \"line\": 5,\n \"type\": \"api_key\"\n },\n {\n \"id\": \"SEC-003\",\n \"severity\": \"critical\",\n \"file\": \"src/auth/keys.ts\",\n \"line\": 2,\n \"type\": \"private_key\"\n },\n {\n \"id\": \"PII-003\",\n \"severity\": \"critical\",\n \"file\": \"src/payments/stripe.ts\",\n \"line\": 8,\n \"type\": \"credit_card\"\n }\n ],\n \"summary\": {\n \"critical\": 3,\n \"high\": 4,\n \"medium\": 3,\n \"low\": 0\n }\n }\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"feedback_record_schema.json\",\n \"title\": \"FeedbackRecord\",\n \"description\": \"Canonical schema for feedback records - structured conversation about work\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"entityType\",\n \"entityId\",\n \"type\",\n \"status\",\n \"content\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\",\n \"maxLength\": 70,\n \"description\": \"Unique identifier for the feedback entry\",\n \"examples\": [\n \"1752788100-feedback-blocking-rest-api\",\n \"1752788200-feedback-question-test-coverage\"\n ]\n },\n \"entityType\": {\n \"type\": \"string\",\n \"enum\": [\n \"task\",\n \"execution\",\n \"changelog\",\n \"feedback\",\n \"cycle\"\n ],\n \"description\": \"The type of entity this feedback refers to\"\n },\n \"entityId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"The ID of the entity this feedback refers to.\\nMust match the pattern for its entityType:\\n- task: ^\\\\d{10}-task-[a-z0-9-]{1,50}$\\n- execution: ^\\\\d{10}-exec-[a-z0-9-]{1,50}$\\n- changelog: ^\\\\d{10}-changelog-[a-z0-9-]{1,50}$\\n- feedback: ^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\\n- cycle: ^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\\n\",\n \"examples\": [\n \"1752274500-task-implementar-oauth\",\n \"1752642000-exec-subtarea-9-4\",\n \"1752788100-feedback-blocking-rest-api\"\n ]\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"blocking\",\n \"suggestion\",\n \"question\",\n \"approval\",\n \"clarification\",\n \"assignment\"\n ],\n \"description\": \"The semantic intent of the feedback\",\n \"examples\": [\n \"blocking\",\n \"question\",\n \"approval\"\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"open\",\n \"acknowledged\",\n \"resolved\",\n \"wontfix\"\n ],\n \"description\": \"The lifecycle status of the feedback. \\nNote: FeedbackRecords are immutable. To change status, create a new feedback \\nthat references this one using entityType: \\\"feedback\\\" and resolvesFeedbackId.\\n\"\n },\n \"content\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"The content of the feedback. Reduced from 10000 to 5000 chars for practical use.\"\n },\n \"assignee\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"maxLength\": 256,\n \"description\": \"Optional. The Actor ID responsible for addressing the feedback (e.g., 'human:maria', 'agent:camilo:cursor')\",\n \"examples\": [\n \"human:maria\",\n \"agent:code-reviewer\",\n \"agent:camilo:cursor\"\n ]\n },\n \"resolvesFeedbackId\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\",\n \"maxLength\": 70,\n \"description\": \"Optional. The ID of another feedback record that this one resolves or responds to\",\n \"examples\": [\n \"1752788100-feedback-blocking-rest-api\"\n ]\n },\n \"metadata\": {\n \"type\": \"object\",\n \"additionalProperties\": true,\n \"description\": \"Optional structured data for machine consumption.\\nUse this field for domain-specific data that needs to be programmatically processed.\\nCommon use cases: waiver details (fingerprint, ruleId, file, line), approval context, assignment metadata.\\n\",\n \"examples\": [\n {\n \"fingerprint\": \"abc123def456\",\n \"ruleId\": \"PII-001\",\n \"file\": \"src/user.ts\",\n \"line\": 42,\n \"expiresAt\": \"2025-12-31T23:59:59Z\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"id\": \"1752788100-feedback-blocking-rest-api\",\n \"entityType\": \"execution\",\n \"entityId\": \"1752642000-exec-subtarea-9-4\",\n \"type\": \"blocking\",\n \"status\": \"open\",\n \"content\": \"Esta implementación no cumple el estándar de rutas REST. Los endpoints deben seguir el patrón /api/v1/{resource}/{id}. Actualmente usa /get-user?id=X que no es RESTful.\"\n },\n {\n \"id\": \"1752788200-feedback-rest-api-fixed\",\n \"entityType\": \"feedback\",\n \"entityId\": \"1752788100-feedback-blocking-rest-api\",\n \"type\": \"clarification\",\n \"status\": \"resolved\",\n \"content\": \"Implementada la corrección. Ahora todos los endpoints siguen el estándar REST: GET /api/v1/users/:id, POST /api/v1/users, etc. Tests actualizados y passing.\",\n \"resolvesFeedbackId\": \"1752788100-feedback-blocking-rest-api\"\n },\n {\n \"id\": \"1752788300-feedback-assign-auth-task\",\n \"entityType\": \"task\",\n \"entityId\": \"1752274500-task-implementar-oauth\",\n \"type\": \"assignment\",\n \"status\": \"open\",\n \"content\": \"Asignando esta tarea a María por su experiencia con OAuth2. Prioridad alta para el sprint actual.\",\n \"assignee\": \"human:maria\"\n },\n {\n \"id\": \"1752788400-feedback-question-test-coverage\",\n \"entityType\": \"task\",\n \"entityId\": \"1752274500-task-implementar-oauth\",\n \"type\": \"question\",\n \"status\": \"open\",\n \"content\": \"¿Cuál es el nivel de test coverage esperado para esta feature? El spec no lo menciona explícitamente. ¿Debemos apuntar a 80% como el resto del proyecto?\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"task_record_schema.json\",\n \"title\": \"TaskRecord\",\n \"description\": \"Canonical schema for task records as defined in task_protocol.md\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"status\",\n \"priority\",\n \"description\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"Unique identifier for the task (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n \"1752274500-task-implementar-auth\",\n \"1752347700-task-fix-logging\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 3,\n \"maxLength\": 150,\n \"description\": \"A brief, human-readable title for the task. Used to generate the ID slug.\"\n },\n \"cycleIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67\n },\n \"default\": [],\n \"description\": \"Optional. The IDs of the strategic cycles this task belongs to. (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\"\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"draft\",\n \"review\",\n \"ready\",\n \"active\",\n \"done\",\n \"archived\",\n \"paused\",\n \"discarded\"\n ],\n \"maxLength\": 40,\n \"description\": \"Current state of the task in the institutional flow\"\n },\n \"priority\": {\n \"type\": \"string\",\n \"enum\": [\n \"low\",\n \"medium\",\n \"high\",\n \"critical\"\n ],\n \"maxLength\": 40,\n \"description\": \"Strategic or tactical priority level\"\n },\n \"description\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 22000,\n \"description\": \"Functional, technical or strategic summary of the objective\"\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-:]+)*$\"\n },\n \"default\": [],\n \"description\": \"Optional. List of key:value tags for categorization and role suggestion (e.g., 'skill:react', 'role:agent:developer').\"\n },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Valid links or files, when mentioned\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 0,\n \"maxLength\": 3000,\n \"description\": \"Additional comments, decisions made or added context\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1752274500-task-implement-oauth-flow\",\n \"title\": \"Implement OAuth 2.0 authentication flow\",\n \"status\": \"draft\",\n \"priority\": \"high\",\n \"description\": \"Implement complete OAuth 2.0 flow with GitHub provider. Include token refresh, session management, and secure storage. Must support both web and CLI flows.\",\n \"cycleIds\": [\n \"1752270000-cycle-auth-mvp\"\n ],\n \"tags\": [\n \"skill:security\",\n \"category:feature\",\n \"package:core\"\n ],\n \"references\": [\n \"url:https://docs.github.com/en/apps/oauth-apps/building-oauth-apps\"\n ],\n \"notes\": \"Consider using proven library like passport.js or implement from scratch for learning.\"\n },\n {\n \"id\": \"1752347700-task-fix-memory-leak-indexer\",\n \"title\": \"Fix memory leak in indexer process\",\n \"status\": \"active\",\n \"priority\": \"critical\",\n \"description\": \"Indexer process consuming >2GB RAM after 24h uptime. Profiling shows EventEmitter listeners not being cleaned up properly. Fix leak and add monitoring.\",\n \"cycleIds\": [],\n \"tags\": [\n \"category:bug\",\n \"skill:performance\",\n \"package:core\"\n ],\n \"references\": [\n \"file:packages/core/src/adapters/indexer_adapter/index.ts\",\n \"commit:a1b2c3d4\",\n \"issue:789\"\n ],\n \"notes\": \"Discovered during production monitoring. Affects long-running processes only.\"\n },\n {\n \"id\": \"1752448900-task-add-typescript-linting\",\n \"title\": \"Add TypeScript strict mode and ESLint rules\",\n \"status\": \"done\",\n \"priority\": \"medium\",\n \"description\": \"Enable TypeScript strict mode across all packages. Configure ESLint with recommended rules. Fix all existing violations. Add pre-commit hook.\",\n \"cycleIds\": [\n \"1752440000-cycle-code-quality-q1\"\n ],\n \"tags\": [\n \"category:tooling\",\n \"skill:typescript\",\n \"epic:code-quality\"\n ],\n \"references\": [\n \"pr:123\",\n \"file:.eslintrc.js\",\n \"file:tsconfig.json\"\n ],\n \"notes\": \"Approved by tech lead. All 47 violations fixed in PR #123.\"\n },\n {\n \"id\": \"1752550000-task-research-graphql-migration\",\n \"title\": \"Research GraphQL migration feasibility\",\n \"status\": \"draft\",\n \"priority\": \"low\",\n \"description\": \"Evaluate feasibility of migrating REST API to GraphQL. Document pros/cons, effort estimation, and recommended approach. Focus on developer experience and performance.\",\n \"cycleIds\": [],\n \"tags\": [\n \"category:research\",\n \"skill:graphql\",\n \"skill:backend\"\n ],\n \"references\": []\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"workflow_schema.json\",\n \"title\": \"WorkflowRecord\",\n \"description\": \"Complete schema for workflow methodology configuration files that define state transitions, signatures, and custom rules\",\n \"type\": \"object\",\n \"required\": [\n \"version\",\n \"name\",\n \"state_transitions\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": \"JSON Schema reference\"\n },\n \"version\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\",\n \"description\": \"Semantic version of the methodology configuration\"\n },\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 100,\n \"description\": \"Human-readable name of the methodology\"\n },\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 500,\n \"description\": \"Brief description of the methodology's purpose and scope\"\n },\n \"state_transitions\": {\n \"type\": \"object\",\n \"description\": \"Defines valid state transitions and their requirements\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"from\",\n \"requires\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"from\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z][a-z0-9_]{0,49}$\"\n },\n \"minItems\": 1,\n \"description\": \"Valid source states for this transition\"\n },\n \"requires\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"command\": {\n \"type\": \"string\",\n \"description\": \"CLI command that triggers this transition\"\n },\n \"event\": {\n \"type\": \"string\",\n \"description\": \"System event that triggers this transition\"\n },\n \"signatures\": {\n \"type\": \"object\",\n \"description\": \"Signature requirements keyed by role (e.g., 'approver:quality', 'developer:backend')\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"role\",\n \"capability_roles\",\n \"min_approvals\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"role\": {\n \"type\": \"string\",\n \"description\": \"Required signature role\"\n },\n \"capability_roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1,\n \"description\": \"Required capability roles in actor record\"\n },\n \"min_approvals\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"Minimum number of required approvals\"\n },\n \"actor_type\": {\n \"type\": \"string\",\n \"enum\": [\n \"human\",\n \"agent\"\n ],\n \"description\": \"Optional: restrict to specific actor type\"\n },\n \"specific_actors\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"Optional: specific actors that can sign\"\n }\n }\n }\n },\n \"custom_rules\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of custom rule identifiers to validate\"\n }\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"type\": \"object\",\n \"description\": \"Definitions for custom validation rules\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"description\",\n \"validation\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 200,\n \"description\": \"Human-readable description of the rule\"\n },\n \"validation\": {\n \"type\": \"string\",\n \"enum\": [\n \"assignment_required\",\n \"sprint_capacity\",\n \"epic_complexity\",\n \"custom\"\n ],\n \"description\": \"Validation type identifier\"\n },\n \"parameters\": {\n \"type\": \"object\",\n \"description\": \"Optional parameters for the validation rule\"\n },\n \"expression\": {\n \"type\": \"string\",\n \"description\": \"Inline validation expression for 'custom' validation type. Implementation determines the runtime and language. Must return boolean or Promise<boolean>.\"\n },\n \"module_path\": {\n \"type\": \"string\",\n \"description\": \"Path to external module for custom validation (alternative to expression)\"\n }\n }\n }\n },\n \"view_configs\": {\n \"type\": \"object\",\n \"description\": \"Optional view configurations for board/kanban rendering\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"columns\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"columns\": {\n \"type\": \"object\",\n \"description\": \"Column definitions mapping display names to state arrays\",\n \"additionalProperties\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z][a-z0-9_]{0,49}$\"\n },\n \"minItems\": 1\n }\n },\n \"theme\": {\n \"type\": \"string\",\n \"description\": \"Visual theme for the board\"\n },\n \"layout\": {\n \"type\": \"string\",\n \"description\": \"Layout orientation for the board\"\n }\n }\n }\n },\n \"agent_integration\": {\n \"type\": \"object\",\n \"description\": \"Optional agent automation configuration for methodology\",\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 200,\n \"description\": \"Brief description of the agent integration\"\n },\n \"required_agents\": {\n \"type\": \"array\",\n \"description\": \"References to agents required for this methodology. Agent details (engine, knowledge, etc.) live in their AgentRecord.\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"triggers\"\n ],\n \"anyOf\": [\n {\n \"required\": [\n \"id\"\n ]\n },\n {\n \"required\": [\n \"required_roles\"\n ]\n }\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^agent:[a-z0-9:-]+$\",\n \"description\": \"Specific agent ID. References an existing AgentRecord.\"\n },\n \"required_roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"minItems\": 1,\n \"description\": \"Required capability roles. Matches any agent with these roles (from ActorRecord).\"\n },\n \"triggers\": {\n \"type\": \"array\",\n \"description\": \"When this agent activates within this methodology\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"event\",\n \"action\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Event that triggers the agent\"\n },\n \"action\": {\n \"type\": \"string\",\n \"description\": \"Action the agent should perform\"\n },\n \"cron\": {\n \"type\": \"string\",\n \"description\": \"Cron expression for scheduled triggers\"\n }\n }\n }\n }\n }\n }\n }\n }\n }\n },\n \"examples\": [\n {\n \"version\": \"1.0.0\",\n \"name\": \"Simple Kanban\",\n \"description\": \"Basic workflow for small teams\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\"\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\"\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\"\n }\n }\n }\n },\n {\n \"version\": \"1.0.0\",\n \"name\": \"GitGovernance Default Methodology\",\n \"description\": \"Standard GitGovernance workflow with quality gates and agent collaboration\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"submitter\",\n \"capability_roles\": [\n \"author\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n },\n \"design\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:design\"\n ],\n \"min_approvals\": 1\n },\n \"quality\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\",\n \"custom_rules\": [\n \"task_must_have_valid_assignment_for_executor\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n },\n \"discarded\": {\n \"from\": [\n \"ready\",\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task cancel\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"canceller\",\n \"capability_roles\": [\n \"approver:product\",\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"task_must_have_valid_assignment_for_executor\": {\n \"description\": \"Task must have a valid assignment before execution can begin\",\n \"validation\": \"assignment_required\"\n }\n }\n }\n ]\n}","/**\n * GitGovernance Protocol Schemas\n * \n * Auto-generated from blueprints. Do not edit manually.\n * Run 'pnpm sync:schemas' to update.\n */\n\nimport actorRecordSchema from \"./actor_record_schema.json\";\nimport agentRecordSchema from \"./agent_record_schema.json\";\nimport changelogRecordSchema from \"./changelog_record_schema.json\";\nimport cycleRecordSchema from \"./cycle_record_schema.json\";\nimport embeddedMetadataSchema from \"./embedded_metadata_schema.json\";\nimport executionRecordSchema from \"./execution_record_schema.json\";\nimport feedbackRecordSchema from \"./feedback_record_schema.json\";\nimport taskRecordSchema from \"./task_record_schema.json\";\nimport workflowRecordSchema from \"./workflow_record_schema.json\";\n\n/**\n * All GitGovernance protocol schemas\n */\nexport const Schemas = {\n ActorRecord: actorRecordSchema,\n AgentRecord: agentRecordSchema,\n ChangelogRecord: changelogRecordSchema,\n CycleRecord: cycleRecordSchema,\n EmbeddedMetadata: embeddedMetadataSchema,\n ExecutionRecord: executionRecordSchema,\n FeedbackRecord: feedbackRecordSchema,\n TaskRecord: taskRecordSchema,\n WorkflowRecord: workflowRecordSchema,\n} as const;\n\n/**\n * Schema names for type safety\n */\nexport type SchemaName = \n | \"ActorRecord\"\n | \"AgentRecord\"\n | \"ChangelogRecord\"\n | \"CycleRecord\"\n | \"EmbeddedMetadata\"\n | \"ExecutionRecord\"\n | \"FeedbackRecord\"\n | \"TaskRecord\"\n | \"WorkflowRecord\";\n\n/**\n * Get a schema by name\n */\nexport function getSchema(name: SchemaName) {\n return Schemas[name];\n}\n\n/**\n * Get all schema names\n */\nexport function getSchemaNames(): SchemaName[] {\n return Object.keys(Schemas) as SchemaName[];\n}\n\n/**\n * Check if a schema exists\n */\nexport function hasSchema(name: string): name is SchemaName {\n return name in Schemas;\n}\n","import Ajv from \"ajv\";\nimport type { ValidateFunction } from \"ajv\";\nimport addFormats from \"ajv-formats\";\n\n// Direct import from generated schemas\nimport { Schemas } from \"./generated\";\n\n/**\n * Singleton cache for schema validators to avoid repeated I/O and AJV compilation.\n * Improves performance by caching compiled validators for schema files.\n */\nexport class SchemaValidationCache {\n private static schemaValidators = new Map<string, ValidateFunction>();\n private static ajv: Ajv | null = null;\n\n /**\n * Gets or creates a cached validator for a schema object.\n * @param schema The schema object (already parsed YAML/JSON)\n * @returns Compiled AJV validator function\n */\n static getValidatorFromSchema<T = unknown>(schema: object): ValidateFunction<T> {\n // Create a stable key from the schema object\n const schemaKey = JSON.stringify(schema);\n\n if (!this.schemaValidators.has(schemaKey)) {\n // Initialize AJV instance if not already done\n if (!this.ajv) {\n this.ajv = new Ajv({ allErrors: true });\n addFormats(this.ajv);\n\n // Pre-load all schemas for reference resolution\n this.preloadSchemas();\n }\n\n // Remove $id temporarily to avoid conflicts with preloaded schemas\n // (This doesn't modify the original schema object)\n const { $id, ...schemaWithoutId } = schema as any;\n\n // Compile schema directly - AJV will resolve $ref using preloaded aliases\n const validator = this.ajv.compile(schemaWithoutId);\n this.schemaValidators.set(schemaKey, validator);\n }\n\n return this.schemaValidators.get(schemaKey)! as ValidateFunction<T>;\n }\n\n /**\n * Pre-loads referenced schema files for $ref resolution.\n * Uses direct imports and dynamic iteration.\n */\n private static preloadSchemas(): void {\n if (!this.ajv) return;\n\n try {\n // Map schema names to their expected ref aliases\n const schemaRefMap: Record<string, string> = {\n 'ActorRecord': 'ref:actor_record_schema',\n 'AgentRecord': 'ref:agent_record_schema',\n 'ChangelogRecord': 'ref:changelog_record_schema',\n 'CycleRecord': 'ref:cycle_record_schema',\n 'ExecutionRecord': 'ref:execution_record_schema',\n 'FeedbackRecord': 'ref:feedback_record_schema',\n 'TaskRecord': 'ref:task_record_schema',\n 'WorkflowRecord': 'ref:workflow_record_schema'\n };\n\n // Register schemas with correct aliases\n Object.entries(Schemas).forEach(([name, schema]) => {\n if (name !== 'EmbeddedMetadata' && schemaRefMap[name]) {\n const refName = schemaRefMap[name];\n this.ajv!.addSchema(schema, refName);\n }\n });\n } catch {\n // If preloading fails, continue without it\n }\n }\n\n /**\n * Clears the cache (useful for testing or schema updates).\n */\n static clearCache(): void {\n this.schemaValidators.clear();\n this.ajv = null;\n }\n\n /**\n * Gets cache statistics for monitoring.\n */\n static getCacheStats(): { cachedSchemas: number } {\n return {\n cachedSchemas: this.schemaValidators.size\n };\n }\n}\n","import { createHash } from \"crypto\";\nimport type { GitGovRecordPayload } from \"../record_types\";\n\n/**\n * Recursively sorts the keys of an object, including nested objects.\n * This is the core of canonical serialization.\n * @param obj The object to sort.\n * @returns A new object with all keys sorted alphabetically.\n */\nfunction sortKeys(obj: any): any {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map(sortKeys);\n }\n const sortedKeys = Object.keys(obj).sort();\n const newObj: Record<string, any> = {};\n for (const key of sortedKeys) {\n newObj[key] = sortKeys(obj[key]);\n }\n return newObj;\n}\n\n/**\n * Canonically serializes a payload object.\n * @param payload The object to serialize.\n * @returns A deterministic JSON string.\n */\nfunction canonicalize(payload: object): string {\n const sortedPayload = sortKeys(payload);\n return JSON.stringify(sortedPayload);\n}\n\n/**\n * Calculates the SHA-256 checksum of a record's payload.\n */\nexport function calculatePayloadChecksum(payload: GitGovRecordPayload): string {\n const jsonString = canonicalize(payload);\n return createHash(\"sha256\").update(jsonString, \"utf8\").digest(\"hex\");\n} ","export * from \"./logger\";","export type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\n\nexport interface Logger {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n}\n\nclass ConsoleLogger implements Logger {\n private level: LogLevel;\n private prefix: string;\n\n constructor(prefix: string = \"\", level: LogLevel = \"info\") {\n this.prefix = prefix;\n this.level = level;\n }\n\n private shouldLog(level: LogLevel): boolean {\n const levels: LogLevel[] = [\"debug\", \"info\", \"warn\", \"error\", \"silent\"];\n const currentLevelIndex = levels.indexOf(this.level);\n const messageLevelIndex = levels.indexOf(level);\n\n return currentLevelIndex <= messageLevelIndex && this.level !== \"silent\";\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.shouldLog(\"debug\")) {\n console.log(`${this.prefix}${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (this.shouldLog(\"info\")) {\n console.log(`${this.prefix}${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (this.shouldLog(\"warn\")) {\n console.warn(`${this.prefix}${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (this.shouldLog(\"error\")) {\n console.error(`${this.prefix}${message}`, ...args);\n }\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n}\n\n// Factory function para crear loggers\nexport function createLogger(prefix: string = \"\", level?: LogLevel): Logger {\n const logLevel = level ||\n (process.env['NODE_ENV'] === \"test\" ? \"silent\" : \"info\") ||\n (process.env['LOG_LEVEL'] as LogLevel) ||\n \"info\";\n\n return new ConsoleLogger(prefix, logLevel);\n}\n\n// Logger global para uso directo\nexport const logger = createLogger(\"[App] \"); ","import { generateKeyPair, sign, verify, createHash, randomBytes } from \"crypto\";\nimport { promisify } from \"util\";\nimport { calculatePayloadChecksum } from \"./checksum\";\nimport type { GitGovRecordPayload, Signature } from \"../record_types\";\nimport { createLogger } from \"../logger\";\nconst logger = createLogger(\"[CryptoModule] \");\nconst generateKeyPairAsync = promisify(generateKeyPair);\n\n/**\n * Generates a new Ed25519 key pair.\n * @returns A promise that resolves to an object with publicKey and privateKey in base64 format.\n * \n * The publicKey is the raw Ed25519 key (32 bytes -> 44 chars in base64).\n * The privateKey is stored in PKCS8 PEM format for compatibility.\n * \n * Note: Node.js crypto does not support 'raw' format directly for Ed25519,\n * so we extract the raw 32-byte key from the SPKI DER encoding (RFC 8410).\n * SPKI DER structure: [algorithm identifier (12 bytes)] + [raw public key (32 bytes)]\n */\nexport async function generateKeys(): Promise<{ publicKey: string; privateKey: string; }> {\n const { publicKey, privateKey } = await generateKeyPairAsync('ed25519', {\n publicKeyEncoding: { type: 'spki', format: 'der' },\n privateKeyEncoding: { type: 'pkcs8', format: 'pem' },\n });\n\n // Extract raw Ed25519 public key (last 32 bytes of SPKI DER format)\n const rawPublicKey = publicKey.subarray(-32);\n\n return {\n publicKey: rawPublicKey.toString('base64'), // 32 bytes -> 44 chars\n privateKey: Buffer.from(privateKey).toString('base64'),\n };\n}\n\n/**\n * Creates a signature for a given payload.\n */\nexport function signPayload(\n payload: GitGovRecordPayload,\n privateKey: string,\n keyId: string,\n role: string,\n notes: string,\n): Signature {\n const payloadChecksum = calculatePayloadChecksum(payload);\n const timestamp = Math.floor(Date.now() / 1000);\n const digest = `${payloadChecksum}:${keyId}:${role}:${notes}:${timestamp}`;\n\n // Per the blueprint, sign the SHA-256 hash of the digest\n const digestHash = createHash('sha256').update(digest).digest();\n\n const signature = sign(null, digestHash, {\n key: Buffer.from(privateKey, 'base64'),\n type: 'pkcs8',\n format: 'pem'\n });\n\n return {\n keyId,\n role,\n notes,\n signature: signature.toString('base64'),\n timestamp,\n };\n}\n\n/**\n * Verifies all signatures on a record.\n * \n * Reconstructs SPKI DER format from raw Ed25519 key for verification.\n */\nexport async function verifySignatures(\n record: { header: { payloadChecksum: string, signatures: Signature[] }, payload: GitGovRecordPayload },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<boolean> {\n for (const signature of record.header.signatures) {\n const publicKeyBase64 = await getActorPublicKey(signature.keyId);\n if (!publicKeyBase64) {\n // Use debug level instead of warn to reduce noise during indexer validation\n // The indexer already captures these errors in its integrity report\n logger.debug(`Public key not found for actor: ${signature.keyId}`);\n return false;\n }\n\n const digest = `${record.header.payloadChecksum}:${signature.keyId}:${signature.role}:${signature.notes}:${signature.timestamp}`;\n const digestHash = createHash('sha256').update(digest).digest();\n\n // Reconstruct SPKI DER from raw Ed25519 public key (RFC 8410)\n // SPKI DER structure: [algorithm identifier (12 bytes)] + [raw key (32 bytes)]\n const algorithmIdentifier = Buffer.from([\n 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65,\n 0x70, 0x03, 0x21, 0x00\n ]);\n const rawPublicKey = Buffer.from(publicKeyBase64, 'base64');\n const spkiPublicKey = Buffer.concat([algorithmIdentifier, rawPublicKey]);\n\n const isValid = verify(\n null,\n digestHash,\n {\n key: spkiPublicKey,\n type: 'spki',\n format: 'der'\n },\n Buffer.from(signature.signature, 'base64')\n );\n\n if (!isValid) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Generates a mock signature with valid Ed25519 format.\n * Used as fallback when private key is not available.\n *\n * [EARS-7] Returns a base64-encoded string of 64 random bytes (86 chars + ==)\n */\nexport function generateMockSignature(): string {\n return randomBytes(64).toString('base64');\n}\n","export * from \"./generated\";\nexport * from \"./schema_cache\";\nexport * from \"./errors\";","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { EmbeddedMetadataRecord } from '../record_types/embedded.types';\nimport type { GitGovRecordPayload } from '../record_types/common.types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../record_schemas/schema_cache';\nimport { calculatePayloadChecksum } from '../crypto/checksum';\nimport { verifySignatures } from '../crypto/signatures';\nimport { DetailedValidationError, ChecksumMismatchError, SignatureVerificationError } from './common';\nimport { Schemas } from '../record_schemas';\n\n/**\n * Schema-based validation for EmbeddedMetadata wrapper\n */\nexport function validateEmbeddedMetadataSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.EmbeddedMetadata);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid EmbeddedMetadataRecord\n */\nexport function isEmbeddedMetadataRecord<T extends GitGovRecordPayload>(data: unknown): data is EmbeddedMetadataRecord<T> {\n const [isValid] = validateEmbeddedMetadataSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation for EmbeddedMetadataRecord with formatted errors\n */\nexport function validateEmbeddedMetadataDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateEmbeddedMetadataSchema(data);\n\n const formattedErrors = ajvErrors?.map((error: ErrorObject) => ({\n field: error.instancePath || error.schemaPath,\n message: error.message || 'Validation failed',\n value: error.data\n })) || [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n/**\n * Full validation for EmbeddedMetadataRecord including schema, checksum, and signatures\n */\nexport async function validateFullEmbeddedMetadataRecord<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>,\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation - validate the entire record structure\n const [isValidSchema, errors] = validateEmbeddedMetadataSchema(record);\n if (!isValidSchema) {\n const formattedErrors = errors?.map(error => ({\n field: error.instancePath || error.schemaPath,\n message: error.message || 'Validation failed',\n value: error.data\n })) || [];\n\n throw new DetailedValidationError('EmbeddedMetadata', formattedErrors);\n }\n\n // 2. Checksum Validation\n const expectedChecksum = calculatePayloadChecksum(record.payload);\n if (expectedChecksum !== record.header.payloadChecksum) {\n throw new ChecksumMismatchError();\n }\n\n // 3. Signature Verification\n const areSignaturesValid = await verifySignatures(\n record,\n getActorPublicKey\n );\n if (!areSignaturesValid) {\n throw new SignatureVerificationError();\n }\n}\n\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { AgentRecord } from \"../record_types\";\nimport type { GitGovRecord } from \"../record_types\";\nimport { DetailedValidationError, SchemaValidationError } from \"./common\";\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from \"../record_schemas/schema_cache\";\nimport { Schemas } from '../record_schemas';\nimport type { ActorRecord } from \"../record_types\";\n\n// --- Schema Validation ---\nexport function validateAgentRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.AgentRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\nexport function isAgentRecord(data: unknown): data is AgentRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.AgentRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates an AgentRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateAgentRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateAgentRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of an AgentRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the agent payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullAgentRecord(\n record: GitGovRecord & { payload: AgentRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateAgentRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('AgentRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n\n/**\n * Validates that an AgentRecord has a valid relationship with its corresponding ActorRecord,\n * including succession chain resolution for key rotation scenarios.\n * \n * @param agentRecord The AgentRecord to validate\n * @param getEffectiveActor Function to get the effective ActorRecord (with succession resolution)\n */\nexport async function validateAgentActorRelationship(\n agentRecord: AgentRecord,\n getEffectiveActor: (agentId: string) => Promise<ActorRecord | null>\n): Promise<void> {\n const effectiveActor = await getEffectiveActor(agentRecord.id);\n\n if (!effectiveActor) {\n throw new SchemaValidationError(\n `No active ActorRecord found for AgentRecord ${agentRecord.id}. AgentRecord requires corresponding ActorRecord.`\n );\n }\n\n if (effectiveActor.type !== 'agent') {\n throw new SchemaValidationError(\n `ActorRecord ${effectiveActor.id} must be of type 'agent' to support AgentRecord ${agentRecord.id}.`\n );\n }\n\n if (effectiveActor.status !== 'active') {\n throw new SchemaValidationError(\n `ActorRecord succession chain for ${agentRecord.id} does not resolve to an active actor. Current effective actor: ${effectiveActor.id} (status: ${effectiveActor.status}).`\n );\n }\n}\n","import type { AgentRecord, GitGovAgentRecord } from \"../record_types\";\nimport { validateAgentRecordDetailed } from \"../record_validations/agent_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../record_validations/embedded_metadata_validator\";\nimport { DetailedValidationError } from \"../record_validations/common\";\n\n/**\n * Creates a new, fully-formed AgentRecord with validation.\n *\n * The factory is generic to preserve the metadata type for compile-time safety.\n *\n * @param payload - Partial AgentRecord payload with optional typed metadata\n * @returns AgentRecord<TMetadata> - The validated AgentRecord with preserved metadata type\n */\nexport function createAgentRecord<TMetadata extends object = object>(\n payload: Partial<AgentRecord<TMetadata>>\n): AgentRecord<TMetadata> {\n // Build agent with defaults for optional fields\n const agent = {\n id: payload.id || '',\n engine: payload.engine || { type: 'local' as const },\n status: payload.status || 'active',\n triggers: payload.triggers || [],\n knowledge_dependencies: payload.knowledge_dependencies || [],\n prompt_engine_requirements: payload.prompt_engine_requirements || {},\n metadata: payload.metadata,\n ...payload,\n } as AgentRecord<TMetadata>;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateAgentRecordDetailed(agent);\n if (!validation.isValid) {\n throw new DetailedValidationError('AgentRecord', validation.errors);\n }\n\n return agent;\n}\n\n/**\n * Loads and validates an existing AgentRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (AgentRecord).\n * \n * @param data - Unknown data to validate as GitGovAgentRecord\n * @returns GitGovAgentRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadAgentRecord(data: unknown): GitGovAgentRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (AgentRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific AgentRecord payload\n const record = data as GitGovAgentRecord;\n const payloadValidation = validateAgentRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('AgentRecord payload', payloadValidation.errors);\n }\n \n return record;\n}\n\n","import type {\n AgentRecord,\n AgentPayload,\n GitGovAgentRecord,\n} from '../../record_types';\nimport type { RecordStores } from '../../record_store';\nimport type { IEventStream, AgentRegisteredEvent } from '../../event_bus';\nimport type { KeyProvider } from '../../key_provider/key_provider';\nimport type { IIdentityAdapter } from '../identity_adapter';\nimport type { IAgentAdapter, AgentAdapterDependencies } from './agent_adapter.types';\n\nimport { createAgentRecord } from '../../record_factories/agent_factory';\nimport { validateFullAgentRecord } from '../../record_validations/agent_validator';\nimport { signPayload } from '../../crypto/signatures';\nimport { calculatePayloadChecksum } from '../../crypto/checksum';\n\n/**\n * AgentAdapter - Manages the lifecycle of AgentRecords\n *\n * Responsibilities:\n * - CRUD operations for AgentRecords\n * - Validation that corresponding ActorRecord exists\n * - Cryptographic signing via KeyProvider\n * - Event emission via EventBus\n */\nexport class AgentAdapter implements IAgentAdapter {\n private stores: Required<Pick<RecordStores, 'agents'>>;\n private identity: IIdentityAdapter;\n private keyProvider: KeyProvider;\n private eventBus: IEventStream | undefined;\n\n constructor(dependencies: AgentAdapterDependencies) {\n this.stores = dependencies.stores;\n this.identity = dependencies.identity;\n this.keyProvider = dependencies.keyProvider;\n this.eventBus = dependencies.eventBus;\n }\n\n /**\n * [EARS-A1] Creates a new AgentRecord.\n * [EARS-A2] Throws if id or engine missing.\n * [EARS-A3] Throws if ActorRecord not found.\n * [EARS-A4] Throws if ActorRecord type is not 'agent'.\n * [EARS-A5] Emits event on success.\n */\n async createAgentRecord(payload: Partial<AgentPayload>): Promise<AgentRecord> {\n // [EARS-A2] Validate required fields\n if (!payload.id || !payload.engine) {\n throw new Error('AgentRecord requires id and engine');\n }\n\n // [EARS-A3] Verify that corresponding ActorRecord exists\n const correspondingActor = await this.identity.getActor(payload.id);\n if (!correspondingActor) {\n throw new Error(`ActorRecord with id ${payload.id} not found. AgentRecord can only be created for existing ActorRecord.`);\n }\n\n // [EARS-A4] Verify ActorRecord is of type 'agent'\n if (correspondingActor.type !== 'agent') {\n throw new Error(`ActorRecord with id ${payload.id} must be of type 'agent' to create AgentRecord.`);\n }\n\n // [EARS-A1] Create complete AgentRecord payload\n const completePayload: AgentRecord = {\n id: payload.id,\n engine: payload.engine,\n status: payload.status || 'active',\n triggers: payload.triggers || [],\n knowledge_dependencies: payload.knowledge_dependencies || [],\n prompt_engine_requirements: payload.prompt_engine_requirements || {},\n ...payload\n };\n\n // Validate the payload using the factory\n const validatedPayload = createAgentRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Load private key via KeyProvider for signing\n let privateKey: string;\n try {\n const key = await this.keyProvider.getPrivateKey(payload.id);\n if (!key) {\n throw new Error(`Private key not found for ${payload.id}`);\n }\n privateKey = key;\n } catch (error) {\n throw new Error(\n `Private key not found for actor ${payload.id}. ` +\n `AgentRecord requires a valid private key for cryptographic signing. ` +\n `If this is a legacy actor, you may need to regenerate the actor with 'gitgov actor new'. ` +\n `Original error: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n\n // Create cryptographic signature\n const signature = signPayload(validatedPayload, privateKey, payload.id, 'author', 'Agent registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovAgentRecord = {\n header: {\n version: '1.0',\n type: 'agent',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedPayload\n };\n\n // Validate the complete record\n await validateFullAgentRecord(record, async (keyId) => {\n if (keyId === payload.id) {\n return correspondingActor.publicKey;\n }\n const signerActor = await this.identity.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the record\n await this.stores.agents.put(record.payload.id, record);\n\n // [EARS-A5] Emit agent registered event\n if (this.eventBus) {\n const event: AgentRegisteredEvent = {\n type: \"identity.agent.registered\",\n timestamp: Date.now(),\n source: \"agent_adapter\",\n payload: {\n agentId: validatedPayload.id,\n engine: validatedPayload.engine,\n correspondingActorId: correspondingActor.id,\n },\n };\n this.eventBus.publish(event);\n }\n\n return validatedPayload;\n }\n\n /**\n * [EARS-B1] Returns AgentRecord if exists.\n * [EARS-B2] Returns null if not found.\n */\n async getAgentRecord(agentId: string): Promise<AgentRecord | null> {\n const record = await this.stores.agents.get(agentId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-C1] Returns all AgentRecords.\n */\n async listAgentRecords(): Promise<AgentRecord[]> {\n const ids = await this.stores.agents.list();\n const agents: AgentRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.agents.get(id);\n if (record) {\n agents.push(record.payload);\n }\n }\n\n return agents;\n }\n\n /**\n * [EARS-D1] Updates AgentRecord fields (except id).\n * [EARS-D2] Throws if AgentRecord not found.\n */\n async updateAgentRecord(agentId: string, updates: Partial<AgentPayload>): Promise<AgentRecord> {\n // [EARS-D2] Verify AgentRecord exists\n const existingRecord = await this.stores.agents.get(agentId);\n if (!existingRecord) {\n throw new Error(`AgentRecord with id ${agentId} not found`);\n }\n\n // Get corresponding ActorRecord for signing\n const correspondingActor = await this.identity.getActor(agentId);\n if (!correspondingActor) {\n throw new Error(`ActorRecord with id ${agentId} not found`);\n }\n\n // [EARS-D1] Merge updates (id cannot be changed)\n const updatedPayload: AgentRecord = {\n ...existingRecord.payload,\n ...updates,\n id: agentId, // Ensure id is not changed\n };\n\n // Validate the updated payload\n const validatedPayload = createAgentRecord(updatedPayload);\n\n // Calculate new checksum\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Load private key for signing\n let privateKey: string;\n try {\n const key = await this.keyProvider.getPrivateKey(agentId);\n if (!key) {\n throw new Error(`Private key not found for ${agentId}`);\n }\n privateKey = key;\n } catch (error) {\n throw new Error(`Private key not found for actor ${agentId}`);\n }\n\n // Create signature for update\n const signature = signPayload(validatedPayload, privateKey, agentId, 'author', 'Agent update');\n\n // Create updated record\n const record: GitGovAgentRecord = {\n header: {\n version: '1.0',\n type: 'agent',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedPayload\n };\n\n // Store the updated record\n await this.stores.agents.put(record.payload.id, record);\n\n return validatedPayload;\n }\n\n /**\n * [EARS-E1] Archives AgentRecord (status='archived').\n * [EARS-E2] Throws if AgentRecord not found.\n */\n async archiveAgentRecord(agentId: string): Promise<AgentRecord> {\n return this.updateAgentRecord(agentId, { status: 'archived' });\n }\n}\n","/**\n * BacklogAdapter - The Facade/Mediator\n *\n * Public exports for the backlog_adapter module.\n */\n\n// Types\nexport type {\n IBacklogAdapter,\n BacklogAdapterDependencies,\n BacklogAdapterConfig,\n LintReport,\n AuditReport,\n} from './backlog_adapter.types';\n\n// Implementation\nexport { BacklogAdapter } from './backlog_adapter';\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { TaskRecord } from \"../record_types\";\nimport type { GitGovRecord } from \"../record_types\";\nimport { SchemaValidationCache } from \"../record_schemas/schema_cache\";\nimport { Schemas } from '../record_schemas';\nimport {\n DetailedValidationError\n} from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\n\n// --- Schema Validation ---\nexport function validateTaskRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.TaskRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid TaskRecord.\n */\nexport function isTaskRecord(data: unknown): data is TaskRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.TaskRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a TaskRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateTaskRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateTaskRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of a TaskRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the task payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullTaskRecord(\n record: GitGovRecord & { payload: TaskRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateTaskRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('TaskRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","/**\n * Sanitizes a string to be used in a GitGovernance ID slug.\n * Converts to lower-case, replaces spaces with hyphens, and removes invalid characters.\n */\nfunction sanitizeForId(name: string): string {\n return name\n .toLowerCase()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"\")\n .slice(0, 50); // Ensure slug is not too long\n}\n\n/**\n * Generates an Actor ID (e.g., 'human:camilo-velandia').\n */\nexport function generateActorId(type: 'human' | 'agent', displayName: string): string {\n const slug = sanitizeForId(displayName);\n return `${type}:${slug}`;\n}\n\n/**\n * Generates an Agent ID (e.g., 'agent:code-reviewer').\n * Convenience wrapper over generateActorId for agent-specific use cases.\n */\nexport function generateAgentId(displayName: string): string {\n return generateActorId('agent', displayName);\n}\n\n/**\n * Generates a Task ID (e.g., '12345-task-implement-auth').\n */\nexport function generateTaskId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-task-${slug}`;\n}\n\n/**\n * Generates a Cycle ID (e.g., '12345-cycle-release-v1').\n */\nexport function generateCycleId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-cycle-${slug}`;\n}\n\n/**\n * Generates an Execution ID (e.g., '12345-exec-commit-changes').\n */\nexport function generateExecutionId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-exec-${slug}`;\n}\n\n/**\n * Generates a Changelog ID from title (Protocol v2.0.0).\n * \n * Pattern: {timestamp}-changelog-{slug}\n * Example: '1752707800-changelog-sistema-autenticacion-v1'\n * \n * This follows the official changelog_record_schema.yaml pattern for\n * Release Notes System that aggregates N tasks into 1 deliverable.\n */\nexport function generateChangelogId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-changelog-${slug}`;\n}\n\n/**\n * Generates a Feedback ID (e.g., '12345-feedback-code-review').\n */\nexport function generateFeedbackId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-feedback-${slug}`;\n}\n","import type { TaskRecord, GitGovTaskRecord } from \"../record_types\";\nimport { validateTaskRecordDetailed } from \"../record_validations/task_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../record_validations/embedded_metadata_validator\";\nimport { DetailedValidationError } from \"../record_validations/common\";\nimport { generateTaskId } from \"../utils/id_generator\";\n\n/**\n * Creates a new, fully-formed TaskRecord with validation.\n */\nexport function createTaskRecord(\n payload: Partial<TaskRecord>\n): TaskRecord {\n // Generate timestamp for ID if not provided\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build task with defaults for optional fields\n const task: TaskRecord = {\n id: payload.id || generateTaskId(payload.title || '', timestamp),\n title: payload.title || '',\n status: payload.status || 'draft',\n priority: payload.priority || 'medium',\n description: payload.description || '',\n tags: payload.tags || [],\n cycleIds: payload.cycleIds,\n references: payload.references,\n notes: payload.notes,\n ...payload,\n } as TaskRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateTaskRecordDetailed(task);\n if (!validation.isValid) {\n throw new DetailedValidationError('TaskRecord', validation.errors);\n }\n\n return task;\n}\n\n/**\n * Loads and validates an existing TaskRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (TaskRecord).\n * \n * @param data - Unknown data to validate as GitGovTaskRecord\n * @returns GitGovTaskRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadTaskRecord(data: unknown): GitGovTaskRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (TaskRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific TaskRecord payload\n const record = data as GitGovTaskRecord;\n const payloadValidation = validateTaskRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('TaskRecord payload', payloadValidation.errors);\n }\n\n return record;\n}\n\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { CycleRecord } from \"../record_types\";\nimport type { GitGovRecord } from \"../record_types\";\nimport { SchemaValidationCache } from \"../record_schemas/schema_cache\";\nimport { DetailedValidationError } from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from \"../record_schemas\";\n\n// --- Schema Validation ---\nconst cycleSchema = Schemas.CycleRecord;\n\nexport function validateCycleRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(cycleSchema);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid CycleRecord.\n */\nexport function isCycleRecord(data: unknown): data is CycleRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(cycleSchema);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a CycleRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateCycleRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateCycleRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of a CycleRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the cycle payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullCycleRecord(\n record: GitGovRecord & { payload: CycleRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateCycleRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('CycleRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","import type { CycleRecord, GitGovCycleRecord } from \"../record_types\";\nimport { validateCycleRecordDetailed } from \"../record_validations/cycle_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../record_validations/embedded_metadata_validator\";\nimport { DetailedValidationError } from \"../record_validations/common\";\nimport { generateCycleId } from \"../utils/id_generator\";\n\n/**\n * Creates a new, fully-formed CycleRecord with validation.\n */\nexport function createCycleRecord(\n payload: Partial<CycleRecord>\n): CycleRecord {\n // Generate timestamp for ID if not provided\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build cycle with defaults for optional fields\n const cycle: CycleRecord = {\n id: payload.id || generateCycleId(payload.title || '', timestamp),\n title: payload.title || '',\n status: payload.status || 'planning',\n taskIds: payload.taskIds || [], // EARS-21: Default empty array\n childCycleIds: payload.childCycleIds,\n tags: payload.tags,\n notes: payload.notes,\n ...payload,\n } as CycleRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateCycleRecordDetailed(cycle);\n if (!validation.isValid) {\n throw new DetailedValidationError('CycleRecord', validation.errors);\n }\n\n return cycle;\n}\n\n/**\n * Loads and validates an existing CycleRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (CycleRecord).\n * \n * @param data - Unknown data to validate as GitGovCycleRecord\n * @returns GitGovCycleRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadCycleRecord(data: unknown): GitGovCycleRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (CycleRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific CycleRecord payload\n const record = data as GitGovCycleRecord;\n const payloadValidation = validateCycleRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('CycleRecord payload', payloadValidation.errors);\n }\n\n return record;\n}\n\n","// Types\nexport type {\n IIdentityAdapter,\n IdentityAdapterDependencies,\n} from './identity_adapter.types';\n\n// Implementation\nexport { IdentityAdapter } from './identity_adapter';\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ActorRecord } from \"../record_types\";\nimport type { GitGovRecord } from \"../record_types\";\nimport { DetailedValidationError } from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from \"../record_schemas/schema_cache\";\nimport { Schemas } from \"../record_schemas\";\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\n\n// --- Schema Validation ---\nconst actorSchema = Schemas.ActorRecord;\n\nexport function validateActorRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(actorSchema);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\nexport function isActorRecord(data: unknown): data is ActorRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(actorSchema);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates an ActorRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateActorRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateActorRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of an ActorRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the actor payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullActorRecord(\n record: GitGovRecord & { payload: ActorRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateActorRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ActorRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","import type { ActorRecord, GitGovActorRecord } from \"../record_types\";\nimport { validateActorRecordDetailed } from \"../record_validations/actor_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../record_validations/embedded_metadata_validator\";\nimport { generateActorId } from \"../utils/id_generator\";\nimport { DetailedValidationError } from \"../record_validations/common\";\n\n/**\n * Creates a new, fully-formed ActorRecord with validation.\n */\nexport function createActorRecord(\n payload: Partial<ActorRecord>\n): ActorRecord {\n // Build actor with defaults for optional fields\n const actor: ActorRecord = {\n id: payload.id || generateActorId(payload.type || 'human', payload.displayName || ''),\n type: payload.type || 'human' as const,\n displayName: payload.displayName || '',\n publicKey: payload.publicKey || '',\n roles: payload.roles || ['author'] as [string, ...string[]],\n status: payload.status || 'active',\n ...payload,\n } as ActorRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateActorRecordDetailed(actor);\n if (!validation.isValid) {\n throw new DetailedValidationError('ActorRecord', validation.errors);\n }\n\n return actor;\n}\n\n/**\n * Loads and validates an existing ActorRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ActorRecord).\n * \n * @param data - Unknown data to validate as GitGovActorRecord\n * @returns GitGovActorRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadActorRecord(data: unknown): GitGovActorRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ActorRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific ActorRecord payload\n const record = data as GitGovActorRecord;\n const payloadValidation = validateActorRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ActorRecord payload', payloadValidation.errors);\n }\n \n return record;\n}\n\n","import type {\n ActorRecord,\n GitGovRecord,\n GitGovActorRecord,\n ActorPayload,\n Signature,\n} from '../../record_types';\nimport type { RecordStores } from '../../record_store';\nimport type {\n IEventStream,\n ActorCreatedEvent,\n ActorRevokedEvent,\n} from '../../event_bus';\nimport type { KeyProvider } from '../../key_provider/key_provider';\nimport type { IIdentityAdapter, IdentityAdapterDependencies } from './identity_adapter.types';\n\nimport { createActorRecord } from '../../record_factories/actor_factory';\nimport { validateFullActorRecord } from '../../record_validations/actor_validator';\nimport { generateKeys, signPayload, generateMockSignature } from '../../crypto/signatures';\nimport { calculatePayloadChecksum } from '../../crypto/checksum';\nimport { generateActorId } from '../../utils/id_generator';\nimport type { ISessionManager } from '../../session_manager';\n\nexport class IdentityAdapter implements IIdentityAdapter {\n private stores: Required<Pick<RecordStores, 'actors'>>;\n private keyProvider: KeyProvider;\n private sessionManager: ISessionManager;\n private eventBus: IEventStream | undefined;\n\n constructor(dependencies: IdentityAdapterDependencies) {\n this.stores = dependencies.stores;\n this.keyProvider = dependencies.keyProvider;\n this.sessionManager = dependencies.sessionManager;\n this.eventBus = dependencies.eventBus; // Optional dependency\n }\n\n /**\n * Get actor public key for validation - used by other adapters\n */\n async getActorPublicKey(keyId: string): Promise<string | null> {\n try {\n const actor = await this.getActor(keyId);\n return actor?.publicKey || null;\n } catch (error) {\n return null;\n }\n }\n\n async createActor(\n payload: ActorPayload,\n _signerId: string\n ): Promise<ActorRecord> {\n // Validate required fields\n if (!payload.type || !payload.displayName) {\n throw new Error('ActorRecord requires type and displayName');\n }\n\n // Generate new keys for the actor\n const { publicKey, privateKey } = await generateKeys();\n\n // Generate ID if not provided\n const actorId = payload.id || generateActorId(payload.type, payload.displayName);\n\n // Create complete ActorRecord payload\n const completePayload: ActorRecord = {\n id: actorId,\n type: payload.type,\n displayName: payload.displayName,\n publicKey,\n roles: payload.roles || ['author'],\n status: payload.status || 'active',\n ...payload\n };\n\n // Validate the payload using the factory\n const validatedPayload = createActorRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Create signature for the record\n const signature = signPayload(validatedPayload, privateKey, actorId, 'author', 'Actor registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovActorRecord = {\n header: {\n version: '1.0',\n type: 'actor',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedPayload\n };\n\n // Validate the complete record\n await validateFullActorRecord(record, async (keyId) => {\n if (keyId === actorId) {\n return publicKey; // Self-referential for bootstrap\n }\n const signerActor = await this.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the record with validation\n await this.stores.actors.put(record.payload.id, record);\n\n // Persist private key via KeyProvider\n try {\n await this.keyProvider.setPrivateKey(actorId, privateKey);\n } catch (error) {\n // Log warning but don't fail actor creation if key persistence fails\n // This allows fallback behavior in environments where file permissions might be restricted\n console.warn(`⚠️ Could not persist private key for ${actorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n // Emit actor created event (skipped if no eventBus)\n if (this.eventBus) {\n // Check if this is the first actor (bootstrap)\n const allActorIds = await this.stores.actors.list();\n const isBootstrap = allActorIds.length === 1; // Only the actor we just created\n\n const event: ActorCreatedEvent = {\n type: \"identity.actor.created\",\n timestamp: Date.now(),\n source: \"identity_adapter\",\n payload: {\n actorId,\n type: validatedPayload.type,\n publicKey: validatedPayload.publicKey,\n roles: validatedPayload.roles,\n isBootstrap,\n },\n };\n this.eventBus.publish(event);\n }\n\n return validatedPayload;\n }\n\n async getActor(actorId: string): Promise<ActorRecord | null> {\n const record = await this.stores.actors.get(actorId);\n return record ? record.payload : null;\n }\n\n async listActors(): Promise<ActorRecord[]> {\n const ids = await this.stores.actors.list();\n const actors: ActorRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.actors.get(id);\n if (record) {\n actors.push(record.payload);\n }\n }\n\n return actors;\n }\n\n async signRecord<T extends GitGovRecord>(\n record: T,\n actorId: string,\n role: string,\n notes: string\n ): Promise<T> {\n // Verify actor exists\n const actor = await this.getActor(actorId);\n if (!actor) {\n throw new Error(`Actor not found: ${actorId}`);\n }\n\n // Calculate payload checksum (real)\n const payloadChecksum = calculatePayloadChecksum(record.payload);\n\n // Try to load private key via KeyProvider for real signing\n let privateKey: string | null = null;\n try {\n privateKey = await this.keyProvider.getPrivateKey(actorId);\n } catch (error) {\n // Private key not found - fallback to mock signature for backward compatibility\n console.warn(`⚠️ Private key not found for ${actorId}, using mock signature`);\n }\n\n // Create signature (real if private key available, mock otherwise)\n let signature: Signature;\n if (privateKey) {\n // Real cryptographic signing\n signature = signPayload(record.payload, privateKey, actorId, role, notes);\n } else {\n // Fallback to mock signature for backward compatibility\n signature = {\n keyId: actorId,\n role: role,\n notes: notes,\n signature: generateMockSignature(),\n timestamp: Math.floor(Date.now() / 1000)\n };\n }\n\n // Replace placeholder signatures or add new signature if no placeholders exist\n const existingSignatures = record.header.signatures || [];\n const hasPlaceholder = existingSignatures.some(sig => sig.signature === 'placeholder');\n\n let finalSignatures: [Signature, ...Signature[]];\n if (hasPlaceholder) {\n // Replace placeholder signatures with the real signature\n const replaced = existingSignatures.map(sig =>\n sig.signature === 'placeholder' ? signature : sig\n );\n // Ensure at least one signature (should always be true after replacement)\n finalSignatures = replaced.length > 0\n ? replaced as [Signature, ...Signature[]]\n : [signature];\n } else {\n // No placeholders: append new signature (multi-signature scenario)\n finalSignatures = [...existingSignatures, signature] as [Signature, ...Signature[]];\n }\n\n // Create signed record with real checksum + signature\n // Type assertion safe: we only modify header, payload type T is preserved\n const signedRecord = {\n ...record,\n header: {\n ...record.header,\n payloadChecksum,\n signatures: finalSignatures\n }\n } as T;\n\n return signedRecord;\n }\n\n /**\n * Resolves the current active ActorRecord ID by following the succession chain.\n * This is critical for AgentRecord operations after key rotation.\n *\n * @param originalActorId - The original actor ID (may be revoked)\n * @returns Promise<string> - The current active actor ID\n */\n async resolveCurrentActorId(originalActorId: string): Promise<string> {\n let currentId = originalActorId;\n let actor = await this.getActor(currentId);\n\n // Follow the succession chain until we find an active actor\n while (actor && actor.status === 'revoked' && actor.supersededBy) {\n currentId = actor.supersededBy;\n actor = await this.getActor(currentId);\n }\n\n return currentId;\n }\n\n /**\n * Gets the current ActorRecord of the system based on active session or fallback.\n * This is critical for CLI commands that need to know \"who is the current user\".\n *\n * @returns Promise<ActorRecord> - The current active ActorRecord\n */\n async getCurrentActor(): Promise<ActorRecord> {\n // 1. Try to get from session\n const session = await this.sessionManager.loadSession();\n\n if (session?.lastSession?.actorId) {\n // Use resolveCurrentActorId to handle succession chain\n const currentActorId = await this.resolveCurrentActorId(session.lastSession.actorId);\n const actor = await this.getActor(currentActorId);\n if (actor) {\n return actor;\n }\n }\n\n // 2. Fallback: first active actor in the system\n const actors = await this.listActors();\n const activeActor = actors.find(a => a.status === 'active');\n if (activeActor) {\n return activeActor;\n }\n\n throw new Error(\"❌ No active actors found. Run 'gitgov init' first.\");\n }\n\n /**\n * Gets the effective (current active) ActorRecord for an AgentRecord.\n * This resolves the succession chain to get the current cryptographic identity.\n *\n * @param agentId - The AgentRecord ID (may reference revoked ActorRecord)\n * @returns Promise<ActorRecord | null> - The current active ActorRecord or null\n */\n async getEffectiveActorForAgent(agentId: string): Promise<ActorRecord | null> {\n const currentActorId = await this.resolveCurrentActorId(agentId);\n return this.getActor(currentActorId);\n }\n\n async rotateActorKey(\n actorId: string\n ): Promise<{ oldActor: ActorRecord; newActor: ActorRecord }> {\n // Read existing actor\n const oldActor = await this.getActor(actorId);\n if (!oldActor) {\n throw new Error(`ActorRecord with id ${actorId} not found`);\n }\n\n if (oldActor.status === 'revoked') {\n throw new Error(`Cannot rotate key for revoked actor: ${actorId}`);\n }\n\n // Generate new keys for the new actor\n const { publicKey: newPublicKey, privateKey: newPrivateKey } = await generateKeys();\n\n // Generate new actor ID following the pattern from actor_protocol_faq.md\n // Pattern: {baseId}-v{N} where N is the version number (using hyphens to match schema pattern)\n // Schema pattern: ^(human|agent)(:[a-z0-9-]+)+$ (only allows hyphens, not underscores)\n const baseId = generateActorId(oldActor.type, oldActor.displayName);\n let newActorId: string;\n\n // Check if baseId already has a version suffix (e.g., human:camilo-v2)\n const versionMatch = baseId.match(/^(.+)-v(\\d+)$/);\n if (versionMatch && versionMatch[1] && versionMatch[2]) {\n const baseWithoutVersion = versionMatch[1];\n const currentVersion = parseInt(versionMatch[2], 10);\n newActorId = `${baseWithoutVersion}-v${currentVersion + 1}`;\n } else {\n // First rotation: add -v2\n newActorId = `${baseId}-v2`;\n }\n\n // Create new actor with same metadata but new keys\n const newActorPayload: ActorRecord = {\n id: newActorId,\n type: oldActor.type,\n displayName: oldActor.displayName,\n publicKey: newPublicKey,\n roles: oldActor.roles,\n status: 'active'\n };\n\n // Validate the new payload\n const validatedNewPayload = createActorRecord(newActorPayload);\n\n // Calculate checksum for the new payload\n const payloadChecksum = calculatePayloadChecksum(validatedNewPayload);\n\n // Create signature for the new record (self-signed for bootstrap)\n const signature = signPayload(validatedNewPayload, newPrivateKey, newActorId, 'author', 'Key rotation');\n\n // Create the complete GitGovRecord structure for new actor\n const newRecord: GitGovActorRecord = {\n header: {\n version: '1.0',\n type: 'actor',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedNewPayload\n };\n\n // Validate the complete new record\n await validateFullActorRecord(newRecord, async (keyId) => {\n if (keyId === newActorId) {\n return newPublicKey; // Self-referential for bootstrap\n }\n const signerActor = await this.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the new actor record\n await this.stores.actors.put(newRecord.payload.id, newRecord);\n\n // Revoke old actor and mark succession\n const revokedOldActor = await this.revokeActor(\n actorId,\n 'system',\n 'rotation',\n newActorId // Mark succession\n );\n\n // Update session to point to the new actor using SessionManager\n try {\n // Migrate actorState from old actor to new actor\n const oldState = await this.sessionManager.getActorState(actorId);\n if (oldState) {\n await this.sessionManager.updateActorState(newActorId, oldState);\n } else {\n // Create initial state for new actor\n await this.sessionManager.updateActorState(newActorId, {});\n }\n } catch (error) {\n // Non-critical: session update failure logged as warning\n console.warn(`⚠️ Could not update session for ${newActorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n // Persist new private key via KeyProvider\n try {\n await this.keyProvider.setPrivateKey(newActorId, newPrivateKey);\n } catch (error) {\n console.warn(`⚠️ Could not persist private key for ${newActorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n return {\n oldActor: revokedOldActor,\n newActor: validatedNewPayload\n };\n }\n\n async revokeActor(actorId: string, revokedBy: string = \"system\", reason: \"compromised\" | \"rotation\" | \"manual\" = \"manual\", supersededBy?: string): Promise<ActorRecord> {\n // Read the existing actor\n const existingRecord = await this.stores.actors.get(actorId);\n if (!existingRecord) {\n throw new Error(`ActorRecord with id ${actorId} not found`);\n }\n\n // Update the status to revoked\n const revokedPayload: ActorRecord = {\n ...existingRecord.payload,\n status: \"revoked\",\n ...(supersededBy && { supersededBy })\n };\n\n // Calculate new checksum for the updated payload\n const payloadChecksum = calculatePayloadChecksum(revokedPayload);\n\n // Create updated record\n const updatedRecord: GitGovActorRecord = {\n ...existingRecord,\n header: {\n ...existingRecord.header,\n payloadChecksum\n },\n payload: revokedPayload\n };\n\n // Store the updated record with validation\n await this.stores.actors.put(updatedRecord.payload.id, updatedRecord);\n\n // Emit actor revoked event (skipped if no eventBus)\n if (this.eventBus) {\n const eventPayload: ActorRevokedEvent[\"payload\"] = {\n actorId,\n revokedBy,\n revocationReason: reason,\n };\n\n if (supersededBy) {\n eventPayload.supersededBy = supersededBy;\n }\n\n const event: ActorRevokedEvent = {\n type: \"identity.actor.revoked\",\n timestamp: Date.now(),\n source: \"identity_adapter\",\n payload: eventPayload,\n };\n this.eventBus.publish(event);\n }\n\n return revokedPayload;\n }\n\n async authenticate(_sessionToken: string): Promise<void> {\n // TODO: Implement session token storage for SaaS mode\n console.warn('authenticate not fully implemented yet');\n }\n}\n","/**\n * FeedbackAdapter - The Communication Facilitator\n *\n * Public exports for the feedback_adapter module.\n */\n\n// Types\nexport type {\n IFeedbackAdapter,\n FeedbackAdapterDependencies,\n FeedbackThread,\n} from './feedback_adapter.types';\n\n// Implementation\nexport { FeedbackAdapter } from './feedback_adapter';\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { FeedbackRecord } from '../record_types';\nimport type { GitGovRecord } from '../record_types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../record_schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../record_schemas';\n\n/**\n * Schema-based validation for FeedbackRecord payload\n */\nexport function validateFeedbackRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.FeedbackRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid FeedbackRecord\n */\nexport function isFeedbackRecord(data: unknown): data is FeedbackRecord {\n const [isValid] = validateFeedbackRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateFeedbackRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateFeedbackRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullFeedbackRecord(\n record: GitGovRecord & { payload: FeedbackRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateFeedbackRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('FeedbackRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { FeedbackRecord, GitGovFeedbackRecord } from '../record_types';\nimport { generateFeedbackId } from '../utils/id_generator';\nimport { validateFeedbackRecordDetailed } from '../record_validations/feedback_validator';\nimport { validateEmbeddedMetadataDetailed } from '../record_validations/embedded_metadata_validator';\nimport { DetailedValidationError } from '../record_validations/common';\n\n/**\n * Creates a complete FeedbackRecord with validation.\n *\n * The factory is generic to preserve the metadata type for compile-time safety.\n *\n * @param payload - Partial FeedbackRecord payload with optional typed metadata\n * @returns FeedbackRecord<TMetadata> - The validated FeedbackRecord with preserved metadata type\n */\nexport function createFeedbackRecord<TMetadata extends object = object>(\n payload: Partial<FeedbackRecord<TMetadata>>\n): FeedbackRecord<TMetadata> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n const feedback = {\n id: payload.id || generateFeedbackId(payload.content || 'feedback', timestamp),\n entityType: payload.entityType || 'task',\n entityId: payload.entityId || '',\n type: payload.type || 'question',\n status: payload.status || (payload.type === 'assignment' ? 'resolved' : 'open'),\n content: payload.content || '',\n assignee: payload.assignee,\n resolvesFeedbackId: payload.resolvesFeedbackId,\n metadata: payload.metadata,\n } as FeedbackRecord<TMetadata>;\n\n // Validate the complete feedback record\n const validation = validateFeedbackRecordDetailed(feedback);\n if (!validation.isValid) {\n throw new DetailedValidationError('FeedbackRecord', validation.errors);\n }\n\n return feedback;\n}\n\n/**\n * Loads and validates an existing FeedbackRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (FeedbackRecord).\n * \n * @param data - Unknown data to validate as GitGovFeedbackRecord\n * @returns GitGovFeedbackRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadFeedbackRecord(data: unknown): GitGovFeedbackRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (FeedbackRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific FeedbackRecord payload\n const record = data as GitGovFeedbackRecord;\n const payloadValidation = validateFeedbackRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('FeedbackRecord payload', payloadValidation.errors);\n }\n\n return record;\n}\n\n","import { createFeedbackRecord } from '../../record_factories/feedback_factory';\nimport type { RecordStores } from '../../record_store/record_store.types';\nimport { IdentityAdapter } from '../identity_adapter';\nimport type { FeedbackRecord, GitGovFeedbackRecord } from '../../record_types';\nimport type { IEventStream, FeedbackCreatedEvent } from '../../event_bus';\nimport type {\n IFeedbackAdapter,\n FeedbackAdapterDependencies,\n FeedbackThread,\n} from './feedback_adapter.types';\n\n/**\n * FeedbackAdapter - The Communication Facilitator\n *\n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between structured communication and data stores.\n */\nexport class FeedbackAdapter implements IFeedbackAdapter {\n private stores: Required<Pick<RecordStores, 'feedbacks'>>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n\n constructor(dependencies: FeedbackAdapterDependencies) {\n this.stores = dependencies.stores;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n }\n\n /**\n * [EARS-A1] Creates a new FeedbackRecord for structured communication between actors.\n *\n * Description: Creates a new FeedbackRecord for structured communication between actors.\n * Implementation: Builds record with status: \"open\", signs with actorId, persists and emits event.\n * Usage: Invoked by `gitgov feedback create` to create feedback, assignments, blocks, responses.\n * Returns: Complete and signed FeedbackRecord.\n */\n async create(payload: Partial<FeedbackRecord>, actorId: string): Promise<FeedbackRecord> {\n // Input validation - Type-safe approach\n const payloadWithEntityId = payload as Partial<FeedbackRecord> & { entityId?: string; entityType?: string };\n if (!payloadWithEntityId.entityId) {\n throw new Error('RecordNotFoundError: entityId is required');\n }\n\n if (payloadWithEntityId.entityType && !['task', 'execution', 'changelog', 'feedback', 'cycle'].includes(payloadWithEntityId.entityType)) {\n throw new Error('InvalidEntityTypeError: entityType must be task, execution, changelog, feedback, or cycle');\n }\n\n // Validate no duplicate assignments: a task can be assigned to multiple actors,\n // but the same task cannot have multiple open assignments to the same actor\n // EARS-36: In immutable pattern, assignments stay 'open' forever. Check for resolution via resolvesFeedbackId\n if (payload.type === 'assignment' && payload.assignee) {\n const existingFeedbacks = await this.getFeedbackByEntity(payloadWithEntityId.entityId);\n\n // Find all open assignments for this actor\n const openAssignments = existingFeedbacks.filter(feedback =>\n feedback.type === 'assignment' &&\n feedback.assignee === payload.assignee &&\n feedback.status === 'open'\n );\n\n if (openAssignments.length > 0) {\n // For each open assignment, check if it has been resolved\n // Resolution feedbacks have entityType='feedback' and resolvesFeedbackId pointing to the assignment\n // They are NOT in the same entity list, so we need to search all feedbacks\n const allFeedbacks = await this.getAllFeedback();\n\n for (const assignment of openAssignments) {\n const hasResolution = allFeedbacks.some(feedback =>\n feedback.entityType === 'feedback' &&\n feedback.resolvesFeedbackId === assignment.id &&\n feedback.status === 'resolved'\n );\n\n if (!hasResolution) {\n // Open assignment WITHOUT resolution = duplicate\n throw new Error(`DuplicateAssignmentError: Task ${payloadWithEntityId.entityId} is already assigned to ${payload.assignee} (feedback: ${assignment.id})`);\n }\n }\n }\n }\n\n // Set default status to \"open\" (can be overridden by payload.status)\n const enrichedPayload = {\n status: 'open' as const,\n ...payload // Allows payload.status to override default\n };\n\n try {\n // 1. Build the record with factory\n const validatedPayload = createFeedbackRecord(enrichedPayload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovFeedbackRecord = {\n header: {\n version: '1.0',\n type: 'feedback',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Feedback created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author', 'Feedback record created');\n\n // 4. Persist the record\n await this.stores.feedbacks.put(signedRecord.payload.id, signedRecord);\n\n // 5. Emit event - responsibility ends here\n this.eventBus.publish({\n type: 'feedback.created',\n timestamp: Date.now(),\n source: 'feedback_adapter',\n payload: {\n feedbackId: validatedPayload.id,\n entityType: validatedPayload.entityType,\n entityId: validatedPayload.entityId,\n type: validatedPayload.type,\n status: validatedPayload.status,\n content: validatedPayload.content,\n triggeredBy: actorId,\n assignee: validatedPayload.assignee,\n resolvesFeedbackId: validatedPayload.resolvesFeedbackId\n },\n } as FeedbackCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n if (error instanceof Error && error.message.includes('DetailedValidationError')) {\n throw error;\n }\n throw error;\n }\n }\n\n /**\n * [EARS-B1] Helper: Creates a new feedback that \"resolves\" another (immutable).\n *\n * Description: Helper method that creates a new feedback documenting resolution of another feedback.\n * Implementation: Verifies original exists, then delegates to create() with immutable pattern.\n * Usage: Ergonomic helper for common case. For advanced cases (wontfix, approval), use create() directly.\n * Returns: New FeedbackRecord that points to the original with resolvesFeedbackId.\n */\n async resolve(feedbackId: string, actorId: string, content?: string): Promise<FeedbackRecord> {\n // 1. Verify the original feedback exists\n const originalFeedback = await this.getFeedback(feedbackId);\n if (!originalFeedback) {\n throw new Error(`RecordNotFoundError: Feedback not found: ${feedbackId}`);\n }\n\n // 2. Generate default content if not provided\n const resolveContent = content || `Feedback resolved by ${actorId}`;\n\n // 3. Create NEW feedback that points to the original (immutable pattern)\n // This maintains full immutability - original feedback is never modified\n return await this.create({\n entityType: 'feedback',\n entityId: feedbackId,\n type: 'clarification',\n status: 'resolved',\n content: resolveContent,\n resolvesFeedbackId: feedbackId\n }, actorId);\n }\n\n /**\n * [EARS-C1] Gets a specific FeedbackRecord by its ID for query.\n *\n * Description: Gets a specific FeedbackRecord by its ID for query.\n * Implementation: Direct read from record store without modifications.\n * Usage: Invoked by `gitgov feedback show` to display feedback details.\n * Returns: FeedbackRecord found or null if it doesn't exist.\n */\n async getFeedback(feedbackId: string): Promise<FeedbackRecord | null> {\n const record = await this.stores.feedbacks.get(feedbackId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-D1] Gets all FeedbackRecords associated with a specific entity.\n *\n * Description: Gets all FeedbackRecords associated with a specific entity.\n * Implementation: Reads all records and filters by matching entityId.\n * Usage: Invoked by `gitgov feedback list` to display feedback for a task/cycle/execution.\n * Returns: Array of FeedbackRecords filtered for the entity.\n */\n async getFeedbackByEntity(entityId: string): Promise<FeedbackRecord[]> {\n const ids = await this.stores.feedbacks.list();\n const feedbacks: FeedbackRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.feedbacks.get(id);\n if (record && record.payload.entityId === entityId) {\n feedbacks.push(record.payload);\n }\n }\n\n return feedbacks;\n }\n\n /**\n * [EARS-E1] Gets all FeedbackRecords in the system for indexation.\n *\n * Description: Gets all FeedbackRecords in the system for complete indexation.\n * Implementation: Complete read from record store without filters.\n * Usage: Invoked by `gitgov feedback list` and by MetricsAdapter for calculations.\n * Returns: Complete array of all FeedbackRecords.\n */\n async getAllFeedback(): Promise<FeedbackRecord[]> {\n const ids = await this.stores.feedbacks.list();\n const feedbacks: FeedbackRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.feedbacks.get(id);\n if (record) {\n feedbacks.push(record.payload);\n }\n }\n\n return feedbacks;\n }\n\n /**\n * [EARS-F1] Builds the complete conversation tree for a feedback.\n *\n * Description: Recursively constructs the conversation tree for a feedback.\n * Implementation: Reads root feedback, finds all responses, builds tree recursively until maxDepth.\n * Usage: Invoked by `gitgov feedback thread` and `gitgov feedback show --thread`.\n * Returns: FeedbackThread object with tree structure.\n */\n async getFeedbackThread(feedbackId: string, maxDepth: number = Infinity): Promise<FeedbackThread> {\n return await this.buildThread(feedbackId, maxDepth, 0);\n }\n\n /**\n * Private helper: Recursively builds conversation thread.\n */\n private async buildThread(\n feedbackId: string,\n maxDepth: number,\n currentDepth: number\n ): Promise<FeedbackThread> {\n // 1. Depth limit reached\n if (currentDepth >= maxDepth) {\n throw new Error(`Max depth ${maxDepth} reached for feedback thread`);\n }\n\n // 2. Get root feedback\n const feedback = await this.getFeedback(feedbackId);\n if (!feedback) {\n throw new Error(`RecordNotFoundError: Feedback not found: ${feedbackId}`);\n }\n\n // 3. Find all responses (feedbacks pointing to this one)\n const allFeedbacks = await this.getAllFeedback();\n const responses = allFeedbacks.filter(\n f => f.entityType === 'feedback' && f.entityId === feedbackId\n );\n\n // 4. Build tree recursively\n const responseThreads: FeedbackThread[] = [];\n for (const response of responses) {\n try {\n const thread = await this.buildThread(response.id, maxDepth, currentDepth + 1);\n responseThreads.push(thread);\n } catch (error) {\n // If depth limit reached, just skip this branch\n if (error instanceof Error && error.message.includes('Max depth')) {\n continue;\n }\n throw error;\n }\n }\n\n return {\n feedback,\n responses: responseThreads\n };\n }\n}\n","// Types\nexport type {\n MetricsAdapterDependencies,\n IPlatformApi,\n TokenConsumption,\n SystemStatus,\n TaskHealthReport,\n ProductivityMetrics,\n CollaborationMetrics,\n IMetricsAdapter,\n} from './metric_adapter.types';\n\n// Implementation\nexport { MetricsAdapter } from './metric_adapter';\n","import type { RecordStores } from '../../record_store';\nimport type { TaskRecord, CycleRecord, FeedbackRecord, ExecutionRecord, ActorRecord } from '../../record_types';\nimport type { CollaborationMetrics, IMetricsAdapter, IPlatformApi, MetricsAdapterDependencies, ProductivityMetrics, SystemStatus, TaskHealthReport, TokenConsumption } from './metric_adapter.types';\n\n/**\n * MetricsAdapter - The System Analyst\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between analytics system and multi-store data sources.\n */\nexport class MetricsAdapter implements IMetricsAdapter {\n private stores: Required<Pick<RecordStores, 'tasks' | 'cycles' | 'feedbacks' | 'executions' | 'actors'>>;\n private platformApi: IPlatformApi | undefined;\n\n constructor(dependencies: MetricsAdapterDependencies) {\n this.stores = dependencies.stores;\n this.platformApi = dependencies.platformApi; // Graceful degradation\n }\n\n // ===== PUBLIC API METHODS =====\n\n /**\n * [EARS-A1] Gets aggregated system status using Tier 1 metrics.\n */\n async getSystemStatus(): Promise<SystemStatus> {\n // Read all tasks and cycles\n const taskIds = await this.stores.tasks.list();\n const tasks: TaskRecord[] = [];\n for (const id of taskIds) {\n const record = await this.stores.tasks.get(id);\n if (record) tasks.push(record.payload);\n }\n\n const cycleIds = await this.stores.cycles.list();\n const cycles: CycleRecord[] = [];\n for (const id of cycleIds) {\n const record = await this.stores.cycles.get(id);\n if (record) cycles.push(record.payload);\n }\n\n // Calculate Tier 1 metrics\n const health = this.calculateHealth(tasks);\n\n // Count blocked and stale tasks\n const blockedTasks = tasks.filter(task => task.status === 'paused').length;\n const staleTasks = tasks.filter(task => {\n const staleness = this.calculateTimeInCurrentStage(task);\n return staleness > 7; // More than 7 days in current stage\n }).length;\n\n return {\n tasks: {\n total: tasks.length,\n byStatus: this.countTasksByStatus(tasks),\n byPriority: this.countTasksByPriority(tasks)\n },\n cycles: {\n total: cycles.length,\n active: cycles.filter(c => c.status === 'active').length,\n completed: cycles.filter(c => c.status === 'completed').length\n },\n health: {\n overallScore: health,\n blockedTasks,\n staleTasks\n }\n };\n }\n\n /**\n * [EARS-A2] Gets task health analysis using Tier 1 metrics.\n */\n async getTaskHealth(taskId: string): Promise<TaskHealthReport> {\n // EARS-A3: Validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // Read related data for analysis\n let feedbacks: FeedbackRecord[] = [];\n let allFeedbacks: FeedbackRecord[] = []; // For checking resolutions (immutable pattern)\n let executions: ExecutionRecord[] = [];\n\n\n const feedbackIds = await this.stores.feedbacks.list();\n for (const id of feedbackIds) {\n const record = await this.stores.feedbacks.get(id);\n if (record) {\n allFeedbacks.push(record.payload);\n if (record.payload.entityId === taskId) {\n feedbacks.push(record.payload);\n }\n }\n }\n\n const executionIds = await this.stores.executions.list();\n for (const id of executionIds) {\n const record = await this.stores.executions.get(id);\n if (record && record.payload.taskId === taskId) {\n executions.push(record.payload);\n }\n }\n\n // Calculate Tier 1 metrics\n const timeInCurrentStage = this.calculateTimeInCurrentStage(task);\n const stalenessIndex = this.calculateStalenessIndex([task]);\n\n // Count only UNRESOLVED blocking feedbacks (immutable pattern)\n // A blocking feedback is unresolved if no resolution feedback exists for it\n const blockingFeedbacks = feedbacks.filter(f => {\n if (f.type !== 'blocking' || f.status !== 'open') return false;\n\n // Check if this blocking feedback has been resolved (via another feedback)\n const hasResolution = allFeedbacks.some(resolution =>\n resolution.entityType === 'feedback' &&\n resolution.resolvesFeedbackId === f.id &&\n resolution.status === 'resolved'\n );\n\n return !hasResolution; // Only count if NOT resolved\n }).length;\n const lastActivity = executions.length > 0 ? Math.max(...executions.map(e => this.getTimestampFromId(e.id))) : this.getTimestampFromId(task.id);\n\n // Generate recommendations\n const recommendations: string[] = [];\n if (timeInCurrentStage > 7) recommendations.push('Task has been stagnant for over 7 days');\n if (blockingFeedbacks > 0) recommendations.push(`${blockingFeedbacks} blocking feedback(s) need attention`);\n if (stalenessIndex > 5) recommendations.push('No recent execution activity detected');\n\n // Calculate health score (0-100)\n let healthScore = 100;\n if (timeInCurrentStage > 7) healthScore -= 30;\n if (blockingFeedbacks > 0) healthScore -= 40;\n if (stalenessIndex > 5) healthScore -= 20;\n healthScore = Math.max(0, healthScore);\n\n return {\n taskId,\n healthScore,\n timeInCurrentStage,\n stalenessIndex,\n blockingFeedbacks,\n lastActivity,\n recommendations\n };\n }\n\n /**\n * [EARS-E1] Gets productivity metrics using Tier 2 calculations.\n */\n async getProductivityMetrics(): Promise<ProductivityMetrics> {\n // Read all tasks\n const taskIds = await this.stores.tasks.list();\n const tasks: TaskRecord[] = [];\n for (const id of taskIds) {\n const record = await this.stores.tasks.get(id);\n if (record) tasks.push(record.payload);\n }\n\n // Calculate Tier 2 metrics\n const throughput = this.calculateThroughput(tasks);\n const leadTime = this.calculateLeadTime(tasks);\n const cycleTime = this.calculateCycleTime(tasks);\n const tasksCompleted7d = tasks.filter(task => {\n if (task.status !== 'done') return false;\n const completedTime = this.getTimestampFromId(task.id);\n const sevenDaysAgo = Math.floor(Date.now() / 1000) - (7 * 24 * 60 * 60);\n return completedTime >= sevenDaysAgo;\n }).length;\n\n return {\n throughput,\n leadTime,\n cycleTime,\n tasksCompleted7d,\n averageCompletionTime: leadTime // Alias for leadTime\n };\n }\n\n /**\n * [EARS-E2] Gets collaboration metrics with agent activity analysis.\n */\n async getCollaborationMetrics(): Promise<CollaborationMetrics> {\n // Read actors and executions\n const actorIds = await this.stores.actors.list();\n const actors: ActorRecord[] = [];\n for (const id of actorIds) {\n const record = await this.stores.actors.get(id);\n if (record) actors.push(record.payload);\n }\n\n const executionIds = await this.stores.executions.list();\n const executions: ExecutionRecord[] = [];\n for (const id of executionIds) {\n const record = await this.stores.executions.get(id);\n if (record) executions.push(record.payload);\n }\n\n // Calculate Tier 2 metrics\n const activeAgents = this.calculateActiveAgents(actors, executions);\n const totalAgents = actors.filter(actor => actor.type === 'agent').length;\n const totalHumans = actors.filter(actor => actor.type === 'human').length;\n const agentUtilization = totalAgents > 0 ? (activeAgents / totalAgents) * 100 : 0;\n const humanAgentRatio = totalHumans > 0 ? totalAgents / totalHumans : 0;\n const collaborationIndex = Math.min(100, (activeAgents * 10) + (agentUtilization / 2));\n\n return {\n activeAgents,\n totalAgents,\n agentUtilization,\n humanAgentRatio,\n collaborationIndex\n };\n }\n\n // ===== TIER 1: PURE CALCULATION FUNCTIONS (MVP CRITICAL) =====\n\n /**\n * [EARS-B1] Calculates exact days since last state change.\n */\n calculateTimeInCurrentStage(task: TaskRecord): number {\n try {\n // EARS-F1: Use creation timestamp as fallback if no signatures\n const currentTime = Math.floor(Date.now() / 1000);\n const taskCreationTime = this.getTimestampFromId(task.id);\n\n // TODO: In a complete implementation, we would look at signatures to find last state change\n // For MVP, we use creation time as approximation\n const lastStateChange = taskCreationTime;\n\n const diffSeconds = currentTime - lastStateChange;\n const diffDays = diffSeconds / (24 * 60 * 60);\n\n return Math.max(0, diffDays);\n } catch (error) {\n // EARS-F4: Validate timestamps\n throw new Error(`InvalidDataError: Invalid timestamp data for task ${task.id}`);\n }\n }\n\n /**\n * [EARS-B2] Calculates days since last ExecutionRecord.\n */\n calculateStalenessIndex(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-C2: Handle empty datasets\n if (tasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, calculate based on task creation time\n // In complete implementation, would check actual ExecutionRecords\n const currentTime = Math.floor(Date.now() / 1000);\n const staleDays = tasks.map(task => {\n const taskTime = this.getTimestampFromId(task.id);\n return (currentTime - taskTime) / (24 * 60 * 60);\n });\n\n return Math.max(0, Math.max(...staleDays));\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in staleness calculation');\n }\n }\n\n /**\n * [EARS-B3] Calculates days of oldest active blocking feedback.\n */\n calculateBlockingFeedbackAge(feedback: FeedbackRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(feedback)) {\n throw new Error('InvalidDataError: feedback must be an array');\n }\n\n // Filter blocking and open feedbacks\n const blockingFeedbacks = feedback.filter(f => f.type === 'blocking' && f.status === 'open');\n\n // EARS-C2: Handle empty datasets\n if (blockingFeedbacks.length === 0) {\n return 0;\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const ages = blockingFeedbacks.map(f => {\n const feedbackTime = this.getTimestampFromId(f.id);\n return (currentTime - feedbackTime) / (24 * 60 * 60);\n });\n\n return Math.max(...ages);\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in blocking feedback calculation');\n }\n }\n\n /**\n * [EARS-B4] Calculates health percentage using improved protocol formula.\n */\n calculateHealth(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-C2: Handle empty datasets\n if (tasks.length === 0) {\n return 0;\n }\n\n try {\n // Count tasks by status\n const activeTasks = tasks.filter(task => task.status === 'active').length;\n const doneTasks = tasks.filter(task => task.status === 'done').length;\n const archivedTasks = tasks.filter(task => task.status === 'archived').length;\n const readyTasks = tasks.filter(task => task.status === 'ready').length;\n const reviewTasks = tasks.filter(task => task.status === 'review').length;\n const pausedTasks = tasks.filter(task => task.status === 'paused').length;\n const draftTasks = tasks.filter(task => task.status === 'draft').length;\n\n // Calculate health based on workflow progress and blockers\n // Healthy tasks: done (100%), archived (100%), active (80%), ready (60%), review (40%)\n // Neutral tasks: draft (20%)\n // Problematic tasks: paused (0%)\n const healthyScore = (doneTasks * 100) + (archivedTasks * 100) + (activeTasks * 80) + (readyTasks * 60) + (reviewTasks * 40) + (draftTasks * 20) + (pausedTasks * 0);\n\n const maxPossibleScore = tasks.length * 100;\n\n if (maxPossibleScore === 0) {\n return 0;\n }\n\n return Math.round((healthyScore / maxPossibleScore) * 100);\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in health calculation');\n }\n }\n\n /**\n * [EARS-B5] Returns status distribution with percentages.\n */\n calculateBacklogDistribution(tasks: TaskRecord[]): Record<string, number> {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-C2: Handle empty datasets\n if (tasks.length === 0) {\n return {};\n }\n\n const validStatuses = ['draft', 'review', 'ready', 'active', 'done', 'archived', 'paused'];\n const distribution: Record<string, number> = {};\n\n // EARS-F5: Ignore tasks with invalid status\n const validTasks = tasks.filter(task => validStatuses.includes(task.status));\n\n // EARS-F6: Handle division by zero\n if (validTasks.length === 0) {\n return {};\n }\n\n for (const status of validStatuses) {\n const count = validTasks.filter(task => task.status === status).length;\n distribution[status] = (count / validTasks.length) * 100;\n }\n\n return distribution;\n }\n\n /**\n * [EARS-B6] Counts tasks created in last 24 hours.\n */\n calculateTasksCreatedToday(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const twentyFourHoursAgo = currentTime - (24 * 60 * 60);\n\n return tasks.filter(task => {\n const creationTime = this.getTimestampFromId(task.id);\n return creationTime >= twentyFourHoursAgo;\n }).length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in tasks created today calculation');\n }\n }\n\n // ===== TIER 2: PURE CALCULATION FUNCTIONS (IMPORTANT) =====\n\n /**\n * [EARS-D1] Counts tasks moved to 'done' in last 7 days.\n */\n calculateThroughput(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const sevenDaysAgo = currentTime - (7 * 24 * 60 * 60);\n\n return tasks.filter(task => {\n if (task.status !== 'done') return false;\n // For MVP, use creation time as approximation of completion time\n const completionTime = this.getTimestampFromId(task.id);\n return completionTime >= sevenDaysAgo;\n }).length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in throughput calculation');\n }\n }\n\n /**\n * [EARS-D2] Calculates average done-draft time for lead time.\n */\n calculateLeadTime(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-F2: Filter only completed tasks\n const completedTasks = tasks.filter(task => task.status === 'done');\n\n // EARS-F6: Handle division by zero\n if (completedTasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, calculate based on creation time\n // In complete implementation, would use actual state change timestamps\n const currentTime = Math.floor(Date.now() / 1000);\n const leadTimes = completedTasks.map(task => {\n const creationTime = this.getTimestampFromId(task.id);\n return (currentTime - creationTime) / (24 * 60 * 60); // Convert to days\n });\n\n return leadTimes.reduce((sum, time) => sum + time, 0) / leadTimes.length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in lead time calculation');\n }\n }\n\n /**\n * [EARS-D3] Calculates average done-active time for cycle time.\n */\n calculateCycleTime(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // Filter completed tasks that were active\n const activeTasks = tasks.filter(task => task.status === 'done');\n\n // EARS-F3: Return 0 for tasks that were never active\n if (activeTasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, use approximation based on creation time\n // In complete implementation, would track actual active → done transitions\n const cycleTimes = activeTasks.map(task => {\n // Approximate cycle time as 30% of total time (active phase)\n const creationTime = this.getTimestampFromId(task.id);\n const currentTime = Math.floor(Date.now() / 1000);\n const totalTime = (currentTime - creationTime) / (24 * 60 * 60);\n return totalTime * 0.3; // Approximate active time\n });\n\n return cycleTimes.reduce((sum, time) => sum + time, 0) / cycleTimes.length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in cycle time calculation');\n }\n }\n\n /**\n * [EARS-D4] Counts unique agents with executions in 24h.\n */\n calculateActiveAgents(actors: ActorRecord[], executions: ExecutionRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(actors) || !Array.isArray(executions)) {\n throw new Error('InvalidDataError: actors and executions must be arrays');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const twentyFourHoursAgo = currentTime - (24 * 60 * 60);\n\n // Get recent executions\n const recentExecutions = executions.filter(execution => {\n const executionTime = this.getTimestampFromId(execution.id);\n return executionTime >= twentyFourHoursAgo;\n });\n\n // Get unique agent IDs from recent executions\n const activeAgentIds = new Set<string>();\n\n if (recentExecutions.length > 0) {\n // Cross-reference executions with agent actors to find active agents\n const agentActors = actors.filter(actor => actor.type === 'agent');\n for (const agent of agentActors) {\n // In a complete implementation, we would track execution authorship\n // For now, if there are recent executions and agent actors, count them as active\n activeAgentIds.add(agent.id);\n }\n }\n\n return activeAgentIds.size;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in active agents calculation');\n }\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Extracts timestamp from ID (format: {timestamp}-{type}-{slug})\n */\n private getTimestampFromId(id: string): number {\n try {\n const parts = id.split('-');\n const timestamp = parseInt(parts[0] || '0', 10);\n\n // EARS-F4: Validate timestamps\n if (isNaN(timestamp) || timestamp <= 0) {\n throw new Error(`Invalid timestamp in ID: ${id}`);\n }\n\n return timestamp;\n } catch (error) {\n throw new Error(`InvalidDataError: Cannot extract timestamp from ID: ${id}`);\n }\n }\n\n /**\n * Counts tasks by status\n */\n private countTasksByStatus(tasks: TaskRecord[]): Record<string, number> {\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n const status = task.status;\n counts[status] = (counts[status] || 0) + 1;\n }\n\n return counts;\n }\n\n /**\n * Counts tasks by priority\n */\n private countTasksByPriority(tasks: TaskRecord[]): Record<string, number> {\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n const priority = task.priority;\n counts[priority] = (counts[priority] || 0) + 1;\n }\n\n return counts;\n }\n\n // ===== TIER 3-4: NOT IMPLEMENTED (FUTURE) =====\n\n /**\n * [EARS-C3] Throws NotImplementedError for Tier 3 functions.\n */\n calculateQuality(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateReworkRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateCompletionRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateAuditScoreDistribution(_tasks: TaskRecord[]): Record<string, number> {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateEpicPromotionRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateTaskRefinementRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculatePlanningAccuracy(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateDependencyDiscoveryRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n /**\n * [EARS-C4] Returns null for Premium metrics without Platform API.\n */\n calculateCostBurnRate(_consumption: TokenConsumption[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateTokenConsumption(_consumption: TokenConsumption[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateTokenConsumptionByAgent(_consumption: TokenConsumption[]): Record<string, number> {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return {};\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateAiAccuracyRate(_tasks: TaskRecord[], _feedback: FeedbackRecord[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateAgentExecutionTime(_executions: ExecutionRecord[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n}\n","/**\n * SessionManager Module\n *\n * Provides typed access to GitGovernance session state (.session.json).\n * Session state is ephemeral, machine-local, and NOT versioned in Git.\n *\n * @see packages/blueprints/03_products/protocol/10_appendices/session_state.md\n */\n\n// Types\nexport type {\n SyncStatus,\n ActorState,\n GitGovSession,\n SyncPreferencesUpdate,\n ISessionManager\n} from './session_manager.types';\n\n// Implementation\nexport { SessionManager } from './session_manager';\n","/**\n * SessionManager - Local Session State Manager\n *\n * Provides typed access to GitGovernance session state (.session.json).\n * Session state is ephemeral, machine-local, and NOT versioned in Git.\n *\n * Uses SessionStore abstraction for backend-agnostic persistence.\n *\n * @see packages/blueprints/03_products/protocol/10_appendices/session_state.md\n */\n\nimport type { SessionStore } from '../session_store/session_store';\nimport type {\n ISessionManager,\n GitGovSession,\n ActorState,\n SyncPreferencesUpdate\n} from './session_manager.types';\n\n/**\n * Session Manager Class\n *\n * Provides typed access to GitGovernance session state.\n * Uses SessionStore abstraction for backend-agnostic persistence.\n *\n * @example\n * ```typescript\n * // Production usage\n * import { FsSessionStore } from '@gitgov/core/fs';\n * const sessionStore = new FsSessionStore('/path/to/project');\n * const sessionManager = new SessionManager(sessionStore);\n *\n * // Test usage\n * import { MemorySessionStore } from '@gitgov/core/memory';\n * const sessionStore = new MemorySessionStore();\n * sessionStore.setSession({ ... });\n * const sessionManager = new SessionManager(sessionStore);\n * ```\n */\nexport class SessionManager implements ISessionManager {\n private readonly sessionStore: SessionStore;\n\n constructor(sessionStore: SessionStore) {\n this.sessionStore = sessionStore;\n }\n\n /**\n * Load GitGovernance session state\n * [EARS-E1] Auto-detects actor from .key files if no session or no actorId exists\n */\n async loadSession(): Promise<GitGovSession | null> {\n let session = await this.sessionStore.loadSession();\n\n // [EARS-E1] If session exists but no lastSession.actorId, try to auto-detect\n if (session && !session.lastSession?.actorId) {\n const detectedActorId = await this.detectActorFromKeyFiles();\n if (detectedActorId) {\n session.lastSession = {\n actorId: detectedActorId,\n timestamp: new Date().toISOString()\n };\n await this.sessionStore.saveSession(session);\n }\n }\n\n // [EARS-E1] If no session, try to create from .key files\n if (!session) {\n const detectedActorId = await this.detectActorFromKeyFiles();\n if (detectedActorId) {\n const newSession: GitGovSession = {\n lastSession: {\n actorId: detectedActorId,\n timestamp: new Date().toISOString()\n },\n actorState: {}\n };\n try {\n await this.sessionStore.saveSession(newSession);\n return newSession;\n } catch {\n return newSession;\n }\n }\n }\n\n return session;\n }\n\n /**\n * [EARS-E1] Detect actor from .key files in .gitgov/actors/\n */\n async detectActorFromKeyFiles(): Promise<string | null> {\n if (this.sessionStore.detectActorFromKeyFiles) {\n return this.sessionStore.detectActorFromKeyFiles();\n }\n return null;\n }\n\n /**\n * Get actor state for a specific actor\n */\n async getActorState(actorId: string): Promise<ActorState | null> {\n const session = await this.loadSession();\n return session?.actorState?.[actorId] || null;\n }\n\n /**\n * Update actor state for a specific actor\n */\n async updateActorState(actorId: string, state: Partial<ActorState>): Promise<void> {\n const session = await this.loadSession() || {};\n if (!session.actorState) session.actorState = {};\n\n session.actorState[actorId] = {\n ...session.actorState[actorId],\n ...state,\n lastSync: new Date().toISOString()\n };\n\n // Update lastSession if the actor is a human (not an agent)\n if (actorId.startsWith('human:')) {\n session.lastSession = {\n actorId,\n timestamp: new Date().toISOString()\n };\n }\n\n await this.sessionStore.saveSession(session);\n }\n\n /**\n * Get cloud session token\n */\n async getCloudSessionToken(): Promise<string | null> {\n const session = await this.loadSession();\n return session?.cloud?.sessionToken || null;\n }\n\n /**\n * Get sync preferences from session\n */\n async getSyncPreferences(): Promise<GitGovSession['syncPreferences'] | null> {\n const session = await this.loadSession();\n return session?.syncPreferences || null;\n }\n\n /**\n * Update sync preferences in .session.json\n * These are local machine preferences that override project defaults\n */\n async updateSyncPreferences(preferences: SyncPreferencesUpdate): Promise<void> {\n const session = await this.loadSession() || {};\n\n if (!session.syncPreferences) {\n session.syncPreferences = {};\n }\n\n if (preferences.pullScheduler) {\n session.syncPreferences.pullScheduler = {\n ...session.syncPreferences.pullScheduler,\n ...preferences.pullScheduler\n };\n }\n\n if (preferences.fileWatcher) {\n session.syncPreferences.fileWatcher = {\n ...session.syncPreferences.fileWatcher,\n ...preferences.fileWatcher\n };\n }\n\n await this.sessionStore.saveSession(session);\n }\n\n /**\n * Get last session info (last human who interacted)\n */\n async getLastSession(): Promise<{ actorId: string; timestamp: string } | null> {\n const session = await this.loadSession();\n return session?.lastSession || null;\n }\n}\n","import { createTaskRecord } from '../../record_factories/task_factory';\nimport { createCycleRecord } from '../../record_factories/cycle_factory';\nimport type { RecordStores } from '../../record_store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport { FeedbackAdapter } from '../feedback_adapter';\nimport { MetricsAdapter, type SystemStatus, type TaskHealthReport } from '../metrics_adapter';\nimport { SessionManager } from '../../session_manager';\nimport type {\n TaskRecord,\n CycleRecord,\n ExecutionRecord,\n ActorRecord,\n GitGovRecord,\n} from '../../record_types';\nimport type { IWorkflow } from '../workflow_adapter';\nimport type {\n IEventStream,\n TaskCreatedEvent,\n TaskStatusChangedEvent,\n CycleCreatedEvent,\n CycleStatusChangedEvent,\n FeedbackCreatedEvent,\n ExecutionCreatedEvent,\n ChangelogCreatedEvent,\n SystemDailyTickEvent,\n EventMetadata\n} from '../../event_bus';\nimport type { AuditReport, BacklogAdapterConfig, BacklogAdapterDependencies, IBacklogAdapter, LintReport } from './backlog_adapter.types';\n\n// Default configuration\nconst DEFAULT_CONFIG: BacklogAdapterConfig = {\n healthThresholds: {\n taskMinScore: 50,\n maxDaysInStage: 7,\n systemMinScore: 60\n }\n};\n\n/**\n * BacklogAdapter - The Facade/Mediator\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between Task/Cycle protocols and Workflow/Planning methodologies.\n */\nexport class BacklogAdapter implements IBacklogAdapter {\n private stores: Required<Pick<RecordStores, 'tasks' | 'cycles' | 'feedbacks' | 'changelogs'>>;\n\n private feedbackAdapter: FeedbackAdapter;\n private metricsAdapter: MetricsAdapter;\n\n private workflowAdapter: IWorkflow;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n // configManager is required in dependencies but not currently used\n // Reserved for future use (project config access)\n private sessionManager: SessionManager;\n private config: BacklogAdapterConfig;\n\n\n constructor(dependencies: BacklogAdapterDependencies) {\n // Data Layer\n this.stores = dependencies.stores;\n\n // Adapter Dependencies\n this.feedbackAdapter = dependencies.feedbackAdapter;\n this.metricsAdapter = dependencies.metricsAdapter;\n\n // Business Rules & Infrastructure\n this.workflowAdapter = dependencies.workflowAdapter;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n // Note: dependencies.configManager is accepted but not stored (reserved for future use)\n this.sessionManager = dependencies.sessionManager;\n\n // Configuration with defaults\n this.config = dependencies.config || DEFAULT_CONFIG;\n\n // Phase 3: Setup event subscriptions\n this.setupEventSubscriptions();\n }\n\n /**\n * Setup event subscriptions for Phase 3 event handlers\n */\n private setupEventSubscriptions(): void {\n this.eventBus.subscribe<FeedbackCreatedEvent>(\"feedback.created\", (event) =>\n this.handleFeedbackCreated(event)\n );\n this.eventBus.subscribe<ExecutionCreatedEvent>(\"execution.created\", (event) =>\n this.handleExecutionCreated(event)\n );\n this.eventBus.subscribe<ChangelogCreatedEvent>(\"changelog.created\", (event) =>\n this.handleChangelogCreated(event)\n );\n this.eventBus.subscribe<CycleStatusChangedEvent>(\"cycle.status.changed\", (event) =>\n this.handleCycleStatusChanged(event)\n );\n this.eventBus.subscribe<SystemDailyTickEvent>(\"system.daily_tick\", (event) =>\n this.handleDailyTick(event)\n );\n }\n\n // ===== PHASE 1: TASK/CYCLE CRUD OPERATIONS (IMPLEMENTED) =====\n\n /**\n * Creates a new task with workflow validation\n */\n async createTask(payload: Partial<TaskRecord>, actorId: string): Promise<TaskRecord> {\n // 1. Build the record with factory\n const validatedPayload = createTaskRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: TaskRecord } = {\n header: {\n version: '1.0',\n type: 'task',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Task created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author', 'Task created');\n\n // 4. Persist the record with validation\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'task.created',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: validatedPayload.id,\n actorId\n },\n metadata: {\n eventId: `${Date.now()}-task-created-${validatedPayload.id}`,\n timestamp: Date.now(),\n sourceAdapter: 'backlog_adapter'\n }\n } as TaskCreatedEvent);\n\n return validatedPayload;\n }\n\n /**\n * Gets a specific task by ID\n */\n async getTask(taskId: string): Promise<TaskRecord | null> {\n const record = await this.stores.tasks.get(taskId);\n return record ? record.payload : null;\n }\n\n /**\n * Gets all tasks in the system\n */\n async getAllTasks(): Promise<TaskRecord[]> {\n const ids = await this.stores.tasks.list();\n const tasks: TaskRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.tasks.get(id);\n if (record) {\n tasks.push(record.payload);\n }\n }\n\n return tasks;\n }\n\n /**\n * Submits a task for review\n */\n async submitTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // Validate current status\n if (task.status !== 'draft') {\n throw new Error(`ProtocolViolationError: Task ${taskId} is not in draft status`);\n }\n\n // Get actor with proper typing\n const actor = await this.getActor(actorId);\n\n // Delegate to workflow methodology for validation\n const transitionRule = await this.workflowAdapter.getTransitionRule('draft', 'review', {\n task,\n actor,\n signatures: taskRecord.header.signatures\n });\n\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Transition draft→review not allowed for task ${taskId}`);\n }\n\n // Update task status\n const updatedPayload: TaskRecord = { ...task, status: 'review' as const };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // Sign and persist\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'submitter', 'Task submitted for review');\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // Emit event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'draft',\n newStatus: 'review',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Approves a task for next stage with complete workflow validation\n */\n async approveTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Determine target transition from available transitions\n const availableTransitions = await this.getAvailableTransitions(task.status);\n const approvalTransition = availableTransitions.find(transition =>\n transition.requires?.signatures && Object.keys(transition.requires.signatures).length > 0\n );\n\n if (!approvalTransition) {\n throw new Error(`ProtocolViolationError: No approval transition available from ${task.status}`);\n }\n\n const targetState = approvalTransition.to;\n\n // 3. Generate temporary signature for validation\n const tempSignature = {\n keyId: actorId,\n role: 'approver',\n notes: 'Task approval',\n signature: 'temp-signature',\n timestamp: Date.now()\n };\n\n // 4. Build complete validation context\n const context = {\n task,\n actor,\n signatures: [...taskRecord.header.signatures, tempSignature],\n transitionTo: targetState as TaskRecord['status']\n };\n\n // 5. Delegate signature validation to methodology\n const isValidSignature = await this.workflowAdapter.validateSignature(tempSignature, context);\n if (!isValidSignature) {\n throw new Error(`ProtocolViolationError: Signature is not valid for this approval`);\n }\n\n // 6. Update, sign and persist if validation successful\n const updatedPayload: TaskRecord = { ...task, status: targetState as TaskRecord['status'] };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'approver', `Task approved: ${task.status} → ${targetState}`);\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 7. Emit event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: task.status,\n newStatus: targetState,\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Activates a task transitioning from ready to active with permission validation\n */\n async activateTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status is 'ready'\n if (task.status !== 'ready') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot activate from this state.`);\n }\n\n // 3. Validate transition with Workflow\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'active' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowAdapter.getTransitionRule('ready', 'active', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow rejected ready→active transition`);\n }\n\n // 4. Update task status to 'active'\n const updatedPayload: TaskRecord = { ...task, status: 'active' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'executor' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'executor', 'Task activated');\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 6. Update activeTaskId in session state\n await this.sessionManager.updateActorState(actorId, {\n activeTaskId: taskId\n });\n\n // 7. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'ready',\n newStatus: 'active',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Pauses a task manually transitioning from active to paused with optional reason\n */\n async pauseTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'active'\n if (task.status !== 'active') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot pause (requires active).`);\n }\n\n // 3. Resolve actor and validate permissions via workflow methodology\n const actor = await this.getActor(actorId);\n\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'paused' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowAdapter.getTransitionRule('active', 'paused', context);\n if (!transitionRule) {\n throw new Error('ProtocolViolationError: Workflow rejected active→paused transition');\n }\n\n // 4. Update task status to 'paused' and add reason to notes if provided\n const updatedPayload: TaskRecord = {\n ...task,\n status: 'paused',\n // Add reason to notes with [PAUSED] prefix if provided\n ...(reason && {\n notes: `${task.notes || ''}\\n[PAUSED] ${reason} (${new Date().toISOString()})`.trim()\n })\n };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign and persist with pauser role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'pauser', `Task paused: ${reason || 'No reason provided'}`);\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 6. Clear activeTaskId in session state (task no longer active)\n await this.sessionManager.updateActorState(actorId, {\n activeTaskId: undefined\n });\n\n // 7. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'active',\n newStatus: 'paused',\n actorId,\n reason: reason || 'Task manually paused'\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Resumes a paused task transitioning back to active with optional force override\n */\n async resumeTask(taskId: string, actorId: string, force: boolean = false): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'paused'\n if (task.status !== 'paused') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot resume (requires paused).`);\n }\n\n // 3. Resolve actor and validate permissions via workflow methodology\n const actor = await this.getActor(actorId);\n\n if (!force) {\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n if (taskHealth.blockingFeedbacks > 0) {\n throw new Error('BlockingFeedbackError: Task has blocking feedbacks. Resolve them before resuming or use force.');\n }\n }\n\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'active' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowAdapter.getTransitionRule('paused', 'active', context);\n if (!transitionRule) {\n throw new Error('ProtocolViolationError: Workflow rejected paused→active transition');\n }\n\n // 4. Update task status back to 'active'\n const updatedPayload: TaskRecord = { ...task, status: 'active' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign and persist with resumer role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'resumer', 'Task resumed');\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 6. Update activeTaskId in session state\n await this.sessionManager.updateActorState(actorId, {\n activeTaskId: taskId\n });\n\n // 7. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'paused',\n newStatus: 'active',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Completes a task transitioning from active to done with signature validation\n */\n async completeTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status is 'active'\n if (task.status !== 'active') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot complete from this state.`);\n }\n\n // 3. Validate transition with Workflow\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'done' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowAdapter.getTransitionRule('active', 'done', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow rejected active→done transition`);\n }\n\n // 4. Update task status to 'done'\n const updatedPayload: TaskRecord = { ...task, status: 'done' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'approver' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'approver', 'Task completed');\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 6. Clear activeTaskId in session state (task completed)\n await this.sessionManager.updateActorState(actorId, {\n activeTaskId: undefined\n });\n\n // 7. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'active',\n newStatus: 'done',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Discards a task transitioning from ready/active/review to discarded\n * Supports both cancellation (ready/active) and rejection (review) operations\n */\n async discardTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status allows cancellation/rejection with educational error messages\n if (!['ready', 'active', 'review'].includes(task.status)) {\n // Educational error messages for semantic clarity\n if (task.status === 'draft') {\n throw new Error(`ProtocolViolationError: Cannot cancel task in 'draft' state. Use 'gitgov task delete ${taskId}' to remove draft tasks.`);\n }\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot cancel from this state. Only 'ready', 'active', and 'review' tasks can be cancelled.`);\n }\n\n // 3. Validate transition with Workflow\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'discarded' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowAdapter.getTransitionRule(task.status, 'discarded', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow rejected ${task.status}→discarded transition`);\n }\n\n // 4. Update task status to 'discarded' and add cancellation/rejection reason\n const updatedPayload: TaskRecord = {\n ...task,\n status: 'discarded',\n // Add reason to notes with appropriate prefix based on current state\n ...(reason && {\n notes: `${task.notes || ''}\\n${task.status === 'review' ? '[REJECTED]' : '[CANCELLED]'} ${reason} (${new Date().toISOString()})`.trim()\n })\n };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'canceller' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'canceller', `Task discarded: ${reason || 'No reason provided'}`);\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 6. Clear activeTaskId in session state (task discarded)\n await this.sessionManager.updateActorState(actorId, {\n activeTaskId: undefined\n });\n\n // 7. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: task.status,\n newStatus: 'discarded',\n actorId,\n reason: reason || (task.status === 'review' ? 'Task rejected' : 'Task cancelled')\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Deletes a draft task completely (no discarded state)\n * Only works for tasks in 'draft' status that never entered formal workflow\n */\n async deleteTask(taskId: string, actorId: string): Promise<void> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'draft' with educational error messages\n if (task.status !== 'draft') {\n // Educational error messages for semantic clarity\n if (task.status === 'review') {\n throw new Error(`ProtocolViolationError: Cannot delete task in 'review' state. Use 'gitgov task reject ${taskId}' to discard tasks under review.`);\n } else if (task.status === 'ready' || task.status === 'active') {\n throw new Error(`ProtocolViolationError: Cannot delete task in '${task.status}' state. Use 'gitgov task cancel ${taskId}' to discard tasks from ready/active states.`);\n }\n throw new Error(`ProtocolViolationError: Cannot delete task in '${task.status}' state. Only draft tasks can be deleted.`);\n }\n\n // 3. Validate actor has permission (simplified for MVP - in production would check permissions)\n await this.getActor(actorId);\n\n // 4. Delete the task file directly (no discarded state needed for draft)\n await this.stores.tasks.delete(taskId);\n\n // 5. Emit task deleted event (not a status change since it's being removed)\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'draft',\n newStatus: 'deleted',\n actorId,\n reason: 'Draft task deleted'\n }\n } as TaskStatusChangedEvent);\n }\n\n /**\n * Updates a task with new payload\n * [EARS-28] Signs the updated record with the editor's signature\n */\n async updateTask(taskId: string, payload: Partial<TaskRecord>, actorId: string): Promise<TaskRecord> {\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n // Validate not in final state\n if (['archived'].includes(taskRecord.payload.status)) {\n throw new Error(`ProtocolViolationError: Cannot update task in final state: ${taskRecord.payload.status}`);\n }\n\n // Merge and validate with factory\n const updatedPayload = createTaskRecord({ ...taskRecord.payload, ...payload });\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // Sign the updated record with editor role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'editor', 'Task updated');\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n return updatedPayload;\n }\n\n // ===== PHASE 2: AGENT NAVIGATION (IMPLEMENTED) =====\n\n /**\n * Gets tasks assigned to a specific actor\n */\n async getTasksAssignedToActor(actorId: string): Promise<TaskRecord[]> {\n // Read all feedbacks to find assignments\n const feedbackIds = await this.stores.feedbacks.list();\n const assignedTaskIds: string[] = [];\n\n for (const id of feedbackIds) {\n const record = await this.stores.feedbacks.get(id);\n if (record &&\n record.payload.type === 'assignment' &&\n record.payload.assignee === actorId) {\n assignedTaskIds.push(record.payload.entityId);\n }\n }\n\n // Deduplicate task IDs (same task may have multiple assignment records)\n const uniqueTaskIds = [...new Set(assignedTaskIds)];\n\n // Read the assigned tasks\n const assignedTasks: TaskRecord[] = [];\n for (const taskId of uniqueTaskIds) {\n const task = await this.getTask(taskId);\n if (task) {\n assignedTasks.push(task);\n }\n }\n\n return assignedTasks;\n }\n\n // ===== PHASE 3: EVENT HANDLERS (NEW IMPLEMENTATION) =====\n\n /**\n * [EARS-31, EARS-33, EARS-34] Handles feedback created events (Immutable Pattern)\n * \n * This handler respects the immutable feedback pattern:\n * - Case 1: Blocking feedback created → pause task if active/ready\n * - Case 2: Feedback resolving another feedback → resume task if no more blocks\n * \n * The immutable pattern means:\n * - Original feedbacks NEVER change status\n * - Resolution is expressed by creating a NEW feedback pointing to the original\n * - We detect resolution via: entityType='feedback' + status='resolved' + resolvesFeedbackId\n */\n async handleFeedbackCreated(event: FeedbackCreatedEvent): Promise<void> {\n try {\n const metadata: EventMetadata = {\n eventId: `${Date.now()}-handle-feedback-created`,\n timestamp: Date.now(),\n processedAt: Date.now(),\n sourceAdapter: 'backlog_adapter'\n };\n\n // === CASE 1: Blocking Feedback Created on Task ===\n if (event.payload.type === 'blocking' && event.payload.entityType === 'task') {\n // Read the associated task\n const task = await this.getTask(event.payload.entityId);\n if (!task) {\n console.warn(`Task not found for feedback: ${event.payload.entityId}`);\n return;\n }\n\n // Only pause if task is in a pausable state\n if (!['active', 'ready'].includes(task.status)) {\n return; // EARS-32: Do nothing if task not pausable\n }\n\n // Update task to paused\n const updatedTask = { ...task, status: 'paused' as const };\n const taskRecord = await this.stores.tasks.get(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.stores.tasks.put(updatedRecord.payload.id, updatedRecord);\n\n // Emit status change event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: task.status,\n newStatus: 'paused',\n actorId: 'system'\n },\n metadata\n } as TaskStatusChangedEvent);\n }\n return;\n }\n\n // === CASE 2: Feedback Resolving Another Feedback (Immutable Pattern) ===\n // Detect: entityType='feedback' + status='resolved' + resolvesFeedbackId present\n if (\n event.payload.entityType === 'feedback' &&\n event.payload.status === 'resolved' &&\n event.payload.resolvesFeedbackId\n ) {\n // 1. Get the ORIGINAL feedback that was resolved\n const originalFeedback = await this.feedbackAdapter.getFeedback(event.payload.resolvesFeedbackId);\n if (!originalFeedback || originalFeedback.type !== 'blocking') {\n return; // Only care about blocking feedbacks\n }\n\n // 2. Get the task associated with the original blocking feedback\n const task = await this.getTask(originalFeedback.entityId);\n if (!task || task.status !== 'paused') {\n return; // Only resume if task is paused\n }\n\n // 3. Check if other blocking feedbacks remain open (EARS-34)\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n if (taskHealth.blockingFeedbacks > 0) {\n return; // Don't resume if other blocks remain\n }\n\n // 4. Resume task automatically\n const updatedTask = { ...task, status: 'active' as const };\n const taskRecord = await this.stores.tasks.get(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.stores.tasks.put(updatedRecord.payload.id, updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'paused',\n newStatus: 'active',\n actorId: 'system'\n },\n metadata\n } as TaskStatusChangedEvent);\n }\n return;\n }\n\n // Other feedback types: do nothing\n } catch (error) {\n console.error('Error in handleFeedbackCreated:', error);\n }\n }\n\n\n /**\n * [EARS-35] Handles execution created events - transitions ready→active on first execution\n */\n async handleExecutionCreated(event: ExecutionCreatedEvent): Promise<void> {\n try {\n // EARS-35: Use ExecutionAdapter isFirstExecution logic\n if (!event.payload.isFirstExecution) {\n return; // EARS-36: Do nothing on subsequent executions\n }\n\n const task = await this.getTask(event.payload.taskId);\n if (!task || task.status !== 'ready') {\n return;\n }\n\n // EARS-36: Validate with Workflow before transition\n const actor = await this.getActor(event.payload.triggeredBy);\n const transitionRule = await this.workflowAdapter.getTransitionRule('ready', 'active', {\n task,\n actor,\n signatures: []\n });\n\n if (!transitionRule) {\n console.warn(`Workflow rejected ready→active transition for task ${task.id}`);\n return;\n }\n\n // Transition to active\n const updatedTask = { ...task, status: 'active' as const };\n const taskRecord = await this.stores.tasks.get(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.stores.tasks.put(updatedRecord.payload.id, updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'ready',\n newStatus: 'active',\n actorId: event.payload.triggeredBy\n }\n } as TaskStatusChangedEvent);\n }\n } catch (error) {\n console.error('Error in handleExecutionCreated:', error);\n }\n }\n\n /**\n * [EARS-37] Handles changelog created events - transitions done→archived\n */\n async handleChangelogCreated(event: ChangelogCreatedEvent): Promise<void> {\n try {\n // Get changelog record to access entityType and entityId\n const changelogRecord = await this.stores.changelogs.get(event.payload.changelogId);\n if (!changelogRecord) {\n console.warn(`Changelog not found: ${event.payload.changelogId}`);\n return;\n }\n\n // EARS-37: Handle changelogs with relatedTasks\n if (!changelogRecord.payload.relatedTasks || changelogRecord.payload.relatedTasks.length === 0) {\n return;\n }\n\n // Archive all related tasks that are in 'done' status\n for (const taskId of changelogRecord.payload.relatedTasks) {\n const task = await this.getTask(taskId);\n if (!task || task.status !== 'done') {\n continue;\n }\n\n // Transition to archived\n const updatedTask = { ...task, status: 'archived' as const };\n const taskRecord = await this.stores.tasks.get(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.stores.tasks.put(updatedRecord.payload.id, updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'done',\n newStatus: 'archived',\n actorId: 'system'\n }\n } as TaskStatusChangedEvent);\n }\n } // Close for loop\n } catch (error) {\n console.error('Error in handleChangelogCreated:', error);\n }\n }\n\n /**\n * [EARS-38] Handles daily tick events - proactive health auditing\n */\n async handleDailyTick(_event: SystemDailyTickEvent): Promise<void> {\n try {\n // EARS-38: Use MetricsAdapter for proactive auditing\n const systemStatus = await this.metricsAdapter.getSystemStatus();\n\n // Get all active tasks for health analysis\n const allTasks = await this.getAllTasks();\n const activeTasks = allTasks.filter(task => task.status === 'active');\n\n for (const task of activeTasks) {\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n\n // Apply configurable health thresholds\n if (taskHealth.healthScore < this.config.healthThresholds.taskMinScore ||\n taskHealth.timeInCurrentStage > this.config.healthThresholds.maxDaysInStage) {\n // Create automated warning feedback\n await this.feedbackAdapter.create({\n entityType: 'task',\n entityId: task.id,\n type: 'suggestion',\n content: `Automated health warning: Task health score is ${taskHealth.healthScore}%. ${taskHealth.recommendations.join('. ')}.`,\n status: 'open'\n }, 'system');\n }\n }\n\n // Log system health alert if critical issues (no custom event needed)\n if (systemStatus.health.overallScore < this.config.healthThresholds.systemMinScore) {\n console.warn(`System health alert: Score ${systemStatus.health.overallScore}%, blocked: ${systemStatus.health.blockedTasks}, stale: ${systemStatus.health.staleTasks}`);\n // Note: Health alerts are logged, not emitted as events. \n // System monitoring should read logs for alerting.\n }\n } catch (error) {\n console.error('Error in handleDailyTick:', error);\n }\n }\n\n /**\n * [EARS-45] Handles cycle status changed events - manages cycle hierarchy completion\n */\n async handleCycleStatusChanged(event: CycleStatusChangedEvent): Promise<void> {\n try {\n // Only handle cycle completion\n if (event.payload.newStatus !== 'completed') {\n return;\n }\n\n const completedCycle = await this.getCycle(event.payload.cycleId);\n if (!completedCycle) {\n console.warn(`Completed cycle not found: ${event.payload.cycleId}`);\n return;\n }\n\n // Find parent cycles that contain this completed cycle\n const allCycles = await this.getAllCycles();\n const parentCycles = allCycles.filter(cycle =>\n cycle.childCycleIds?.includes(event.payload.cycleId)\n );\n\n for (const parentCycle of parentCycles) {\n // Check if ALL child cycles are completed\n const childCycles = await Promise.all(\n (parentCycle.childCycleIds || []).map(id => this.getCycle(id))\n );\n\n const allChildrenCompleted = childCycles.every(child =>\n child && child.status === 'completed'\n );\n\n if (allChildrenCompleted) {\n // Complete the parent cycle\n await this.updateCycle(parentCycle.id, { status: 'completed' });\n\n // TODO: Delegate epic task completion to planning methodology\n // The logic for completing epic tasks based on cycle completion\n // should be handled by planningMethodology, not backlogAdapter\n /*\n if (this.planningMethodology) {\n await this.planningMethodology.handleEpicCompletion({\n completedCycleId: parentCycle.id,\n event\n });\n }\n */\n\n // For now, just log the completion - epic logic will be in planning methodology\n console.log(`Parent cycle ${parentCycle.id} completed - epic task completion delegated to planning methodology`);\n }\n }\n } catch (error) {\n console.error('Error in handleCycleStatusChanged:', error);\n }\n }\n\n // ===== PHASE 4: STUBS AND POLISH (DELEGATE TO ADAPTERS) =====\n\n /**\n * Gets system status by delegating to MetricsAdapter\n */\n async getSystemStatus(): Promise<SystemStatus> {\n return await this.metricsAdapter.getSystemStatus();\n }\n\n /**\n * Gets task health by delegating to MetricsAdapter\n */\n async getTaskHealth(taskId: string): Promise<TaskHealthReport> {\n return await this.metricsAdapter.getTaskHealth(taskId);\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Helper to get actor record\n */\n private async getActor(actorId: string): Promise<ActorRecord> {\n // Use IdentityAdapter to get real actor data\n const actor = await this.identity.getActor(actorId);\n if (!actor) {\n throw new Error(`RecordNotFoundError: Actor not found: ${actorId}`);\n }\n return actor;\n }\n\n /**\n * Helper to get available transitions from current state\n */\n private async getAvailableTransitions(fromStatus: string): Promise<Array<{ from: string; to: string; requires?: { signatures?: Record<string, { role: string }> } }>> {\n // This would normally be implemented using workflow.getAvailableTransitions()\n // For now, implementing basic logic based on canonical workflow\n const transitions = [\n { from: 'review', to: 'ready', requires: { signatures: { __default__: { role: 'approver' } } } },\n { from: 'active', to: 'done', requires: { signatures: { __default__: { role: 'approver' } } } }\n ];\n\n return transitions.filter(t => t.from === fromStatus);\n }\n\n // ===== PHASE 1: CYCLE CRUD OPERATIONS (IMPLEMENTED) =====\n\n /**\n * Creates a new cycle with workflow validation\n */\n async createCycle(payload: Partial<CycleRecord>, actorId: string): Promise<CycleRecord> {\n // 1. Build the record with factory\n const validatedPayload = createCycleRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: CycleRecord } = {\n header: {\n version: '1.0',\n type: 'cycle',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Cycle created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author', 'Cycle created');\n\n // 4. Persist the record\n await this.stores.cycles.put(signedRecord.payload.id, signedRecord);\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'cycle.created',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n cycleId: validatedPayload.id,\n actorId\n },\n metadata: {\n eventId: `${Date.now()}-cycle-created-${validatedPayload.id}`,\n timestamp: Date.now(),\n sourceAdapter: 'backlog_adapter'\n }\n } as CycleCreatedEvent);\n\n return validatedPayload;\n }\n\n /**\n * Gets a specific cycle by ID\n */\n async getCycle(cycleId: string): Promise<CycleRecord | null> {\n const record = await this.stores.cycles.get(cycleId);\n return record ? record.payload : null;\n }\n\n /**\n * Gets all cycles in the system\n */\n async getAllCycles(): Promise<CycleRecord[]> {\n const ids = await this.stores.cycles.list();\n const cycles: CycleRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.cycles.get(id);\n if (record) {\n cycles.push(record.payload);\n }\n }\n\n return cycles;\n }\n\n /**\n * Updates a cycle with new payload\n */\n async updateCycle(cycleId: string, payload: Partial<CycleRecord>, actorId?: string): Promise<CycleRecord> {\n const cycleRecord = await this.stores.cycles.get(cycleId);\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n\n // Validate not in final state\n if (['archived'].includes(cycleRecord.payload.status)) {\n throw new Error(`ProtocolViolationError: Cannot update cycle in final state: ${cycleRecord.payload.status}`);\n }\n\n // Merge and validate with factory\n const updatedPayload = createCycleRecord({ ...cycleRecord.payload, ...payload });\n const updatedRecord = { ...cycleRecord, payload: updatedPayload };\n\n // Update activeCycleId in session state based on cycle status transitions\n if (actorId) {\n // Set activeCycleId when cycle is activated\n if (updatedPayload.status === 'active' && cycleRecord.payload.status !== 'active') {\n await this.sessionManager.updateActorState(actorId, {\n activeCycleId: cycleId\n });\n }\n // Clear activeCycleId when cycle is completed\n else if (updatedPayload.status === 'completed' && cycleRecord.payload.status !== 'completed') {\n await this.sessionManager.updateActorState(actorId, {\n activeCycleId: undefined\n });\n }\n }\n\n // Emit event if status changed\n if (cycleRecord.payload.status !== updatedPayload.status) {\n this.eventBus.publish({\n type: 'cycle.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n cycleId,\n oldStatus: cycleRecord.payload.status,\n newStatus: updatedPayload.status,\n actorId: actorId || 'system'\n }\n } as CycleStatusChangedEvent);\n }\n\n await this.stores.cycles.put(updatedRecord.payload.id, updatedRecord);\n return updatedPayload;\n }\n\n /**\n * Creates bidirectional link between task and cycle\n */\n async addTaskToCycle(cycleId: string, taskId: string): Promise<void> {\n // Read both records\n const cycleRecord = await this.stores.cycles.get(cycleId);\n const taskRecord = await this.stores.tasks.get(taskId);\n\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n // Create bidirectional links\n const updatedCycle = {\n ...cycleRecord.payload,\n taskIds: [...(cycleRecord.payload.taskIds || []), taskId]\n };\n const updatedTask = {\n ...taskRecord.payload,\n cycleIds: [...(taskRecord.payload.cycleIds || []), cycleId]\n };\n\n // Get current actor for signing (MVP mode)\n const currentActor = await this.identity.getCurrentActor();\n\n // Sign and persist both records with current actor\n const signedCycleRecord = await this.identity.signRecord(\n { ...cycleRecord, payload: updatedCycle },\n currentActor.id,\n 'author',\n `Task ${taskId} added to cycle`\n );\n const signedTaskRecord = await this.identity.signRecord(\n { ...taskRecord, payload: updatedTask },\n currentActor.id,\n 'author',\n `Task linked to cycle ${cycleId}`\n );\n\n await Promise.all([\n this.stores.cycles.put(signedCycleRecord.payload.id, signedCycleRecord),\n this.stores.tasks.put(signedTaskRecord.payload.id, signedTaskRecord)\n ]);\n }\n\n /**\n * Removes multiple tasks from a cycle with bidirectional unlinking\n * All business logic and validation happens here in the adapter\n */\n async removeTasksFromCycle(cycleId: string, taskIds: string[]): Promise<void> {\n // 1. Validate inputs\n if (!cycleId || typeof cycleId !== 'string') {\n throw new Error('ValidationError: cycleId must be a non-empty string');\n }\n if (!Array.isArray(taskIds) || taskIds.length === 0) {\n throw new Error('ValidationError: taskIds must be a non-empty array');\n }\n\n // 2. Read cycle record\n const cycleRecord = await this.stores.cycles.get(cycleId);\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n\n // 3. Read all task records and validate they exist\n const taskRecords = await Promise.all(\n taskIds.map(async (taskId) => {\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n return { taskId, record: taskRecord };\n })\n );\n\n // 4. Validate that all tasks are actually linked to this cycle\n const cycleTaskIds = cycleRecord.payload.taskIds || [];\n const notLinkedTasks = taskIds.filter(taskId => !cycleTaskIds.includes(taskId));\n if (notLinkedTasks.length > 0) {\n throw new Error(`ValidationError: Tasks not linked to cycle ${cycleId}: ${notLinkedTasks.join(', ')}`);\n }\n\n // 5. Prepare updated cycle (remove all taskIds)\n const updatedCycle = {\n ...cycleRecord.payload,\n taskIds: cycleTaskIds.filter(id => !taskIds.includes(id))\n };\n\n // 6. Get current actor for signing\n const currentActor = await this.identity.getCurrentActor();\n\n // 7. Sign cycle record\n const signedCycleRecord = await this.identity.signRecord(\n { ...cycleRecord, payload: updatedCycle },\n currentActor.id,\n 'author',\n `Tasks removed from cycle: ${taskIds.join(', ')}`\n );\n\n // 8. Prepare and sign all task records (remove cycleId from each)\n const signedTaskRecords = await Promise.all(\n taskRecords.map(async ({ record }) => {\n const taskCycleIds = record.payload.cycleIds || [];\n const updatedTask = {\n ...record.payload,\n cycleIds: taskCycleIds.filter(id => id !== cycleId)\n };\n return await this.identity.signRecord(\n { ...record, payload: updatedTask },\n currentActor.id,\n 'author',\n 'Task removed from deleted cycle'\n );\n })\n );\n\n // 9. Atomic write - all or nothing\n await Promise.all([\n this.stores.cycles.put(signedCycleRecord.payload.id, signedCycleRecord),\n ...signedTaskRecords.map(signedTask =>\n this.stores.tasks.put(signedTask.payload.id, signedTask)\n )\n ]);\n }\n\n /**\n * Moves multiple tasks from one cycle to another atomically\n * Provides transactional semantics - all tasks move or none do\n * All business logic and validation happens here in the adapter\n */\n async moveTasksBetweenCycles(targetCycleId: string, taskIds: string[], sourceCycleId: string): Promise<void> {\n // 1. Validate inputs\n if (!sourceCycleId || typeof sourceCycleId !== 'string') {\n throw new Error('ValidationError: sourceCycleId must be a non-empty string');\n }\n if (!targetCycleId || typeof targetCycleId !== 'string') {\n throw new Error('ValidationError: targetCycleId must be a non-empty string');\n }\n if (!Array.isArray(taskIds) || taskIds.length === 0) {\n throw new Error('ValidationError: taskIds must be a non-empty array');\n }\n if (sourceCycleId === targetCycleId) {\n throw new Error('ValidationError: Source and target cycles must be different');\n }\n\n // 2. Read all records\n const [sourceCycleRecord, targetCycleRecord] = await Promise.all([\n this.stores.cycles.get(sourceCycleId),\n this.stores.cycles.get(targetCycleId)\n ]);\n\n if (!sourceCycleRecord) {\n throw new Error(`RecordNotFoundError: Source cycle not found: ${sourceCycleId}`);\n }\n if (!targetCycleRecord) {\n throw new Error(`RecordNotFoundError: Target cycle not found: ${targetCycleId}`);\n }\n\n // 3. Read all task records and validate they exist\n const taskRecords = await Promise.all(\n taskIds.map(async (taskId) => {\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n return { taskId, record: taskRecord };\n })\n );\n\n // 4. Validate that all tasks are actually linked to source cycle\n const sourceTaskIds = sourceCycleRecord.payload.taskIds || [];\n const notLinkedTasks = taskIds.filter(taskId => !sourceTaskIds.includes(taskId));\n if (notLinkedTasks.length > 0) {\n throw new Error(`ValidationError: Tasks not linked to source cycle ${sourceCycleId}: ${notLinkedTasks.join(', ')}`);\n }\n\n // 5. Prepare updated cycles\n const updatedSourceCycle = {\n ...sourceCycleRecord.payload,\n taskIds: sourceTaskIds.filter(id => !taskIds.includes(id))\n };\n const updatedTargetCycle = {\n ...targetCycleRecord.payload,\n taskIds: [...(targetCycleRecord.payload.taskIds || []), ...taskIds]\n };\n\n // 6. Get current actor for signing\n const currentActor = await this.identity.getCurrentActor();\n\n // 7. Sign both cycle records\n const [signedSourceCycle, signedTargetCycle] = await Promise.all([\n this.identity.signRecord(\n { ...sourceCycleRecord, payload: updatedSourceCycle },\n currentActor.id,\n 'author',\n 'Tasks moved from cycle'\n ),\n this.identity.signRecord(\n { ...targetCycleRecord, payload: updatedTargetCycle },\n currentActor.id,\n 'author',\n 'Tasks moved to cycle'\n )\n ]);\n\n // 8. Prepare and sign all task records (update cycleIds)\n const signedTaskRecords = await Promise.all(\n taskRecords.map(async ({ record }) => {\n const taskCycleIds = record.payload.cycleIds || [];\n const updatedTask = {\n ...record.payload,\n cycleIds: taskCycleIds\n .filter(id => id !== sourceCycleId) // Remove source\n .concat(targetCycleId) // Add target\n };\n return await this.identity.signRecord(\n { ...record, payload: updatedTask },\n currentActor.id,\n 'author',\n 'Task cycle updated'\n );\n })\n );\n\n // 9. Atomic write - all or nothing\n try {\n await Promise.all([\n this.stores.cycles.put(signedSourceCycle.payload.id, signedSourceCycle),\n this.stores.cycles.put(signedTargetCycle.payload.id, signedTargetCycle),\n ...signedTaskRecords.map(signedTask =>\n this.stores.tasks.put(signedTask.payload.id, signedTask)\n )\n ]);\n } catch (error) {\n throw new Error(`AtomicOperationError: Failed to move tasks between cycles: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n // TODO: Implement when lint_command.md is implemented\n async lint(): Promise<LintReport> {\n throw new Error('NotImplementedError: lint() will be implemented when lint_command.md is ready');\n }\n\n // TODO: Implement when audit_command.md is implemented \n async audit(): Promise<AuditReport> {\n throw new Error('NotImplementedError: audit() will be implemented when audit_command.md is ready');\n }\n\n // TODO: Implement when commit_processor_adapter.md is implemented\n async processChanges(_changes: unknown[]): Promise<ExecutionRecord[]> {\n throw new Error('NotImplementedError: processChanges() will be implemented when commit_processor_adapter.md is ready');\n }\n}\n","/**\n * ChangelogAdapter - Release Notes & Deliverables Historian\n *\n * Public exports for the changelog_adapter module.\n */\n\n// Types\nexport type {\n IChangelogAdapter,\n ChangelogAdapterDependencies,\n ChangelogListOptions,\n} from './changelog_adapter.types';\n\n// Implementation\nexport { ChangelogAdapter } from './changelog_adapter';\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ChangelogRecord } from '../record_types';\nimport type { GitGovRecord } from '../record_types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../record_schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../record_schemas';\n\n/**\n * Schema-based validation for ChangelogRecord payload\n */\nexport function validateChangelogRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.ChangelogRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid ChangelogRecord\n */\nexport function isChangelogRecord(data: unknown): data is ChangelogRecord {\n const [isValid] = validateChangelogRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateChangelogRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateChangelogRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullChangelogRecord(\n record: GitGovRecord & { payload: ChangelogRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateChangelogRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ChangelogRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { ChangelogRecord, GitGovChangelogRecord } from '../record_types';\nimport { validateChangelogRecordDetailed } from '../record_validations/changelog_validator';\nimport { validateEmbeddedMetadataDetailed } from '../record_validations/embedded_metadata_validator';\nimport { DetailedValidationError } from '../record_validations/common';\n\n/**\n * Creates a complete ChangelogRecord with validation (Protocol v2)\n * \n * @param payload - Partial ChangelogRecord payload\n * @returns ChangelogRecord - The validated ChangelogRecord\n */\nexport function createChangelogRecord(payload: Partial<ChangelogRecord>): ChangelogRecord {\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build changelog with required fields\n const changelog: ChangelogRecord = {\n // Required fields\n id: payload.id || '',\n title: payload.title || '',\n description: payload.description || '',\n relatedTasks: (payload.relatedTasks || []) as [string, ...string[]],\n completedAt: payload.completedAt || timestamp,\n\n // Optional fields (only include if provided)\n ...(payload.relatedCycles && { relatedCycles: payload.relatedCycles }),\n ...(payload.relatedExecutions && { relatedExecutions: payload.relatedExecutions }),\n ...(payload.version && { version: payload.version }),\n ...(payload.tags && { tags: payload.tags }),\n ...(payload.commits && { commits: payload.commits }),\n ...(payload.files && { files: payload.files }),\n ...(payload.notes && { notes: payload.notes })\n };\n\n // Validate the complete changelog record\n const validation = validateChangelogRecordDetailed(changelog);\n if (!validation.isValid) {\n throw new DetailedValidationError('ChangelogRecord', validation.errors);\n }\n\n return changelog;\n}\n\n/**\n * Loads and validates an existing ChangelogRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ChangelogRecord).\n * \n * @param data - Unknown data to validate as GitGovChangelogRecord\n * @returns GitGovChangelogRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadChangelogRecord(data: unknown): GitGovChangelogRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ChangelogRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific ChangelogRecord payload\n const record = data as GitGovChangelogRecord;\n const payloadValidation = validateChangelogRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ChangelogRecord payload', payloadValidation.errors);\n }\n\n return record;\n}\n\n","import { createChangelogRecord } from '../../record_factories/changelog_factory';\nimport type { RecordStores } from '../../record_store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport { generateChangelogId } from '../../utils/id_generator';\nimport type { ChangelogRecord } from '../../record_types';\nimport type { IEventStream, ChangelogCreatedEvent } from '../../event_bus';\nimport type { GitGovRecord } from '../../record_types';\nimport type {\n IChangelogAdapter,\n ChangelogAdapterDependencies,\n ChangelogListOptions,\n} from './changelog_adapter.types';\n\n/**\n * ChangelogAdapter - Release Notes & Deliverables Historian\n *\n * Protocol v2: Aggregates N tasks into 1 release note/deliverable.\n * Focus: Executive communication of delivered value.\n */\nexport class ChangelogAdapter implements IChangelogAdapter {\n private stores: Required<Pick<RecordStores, 'changelogs' | 'tasks' | 'cycles'>>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n\n constructor(dependencies: ChangelogAdapterDependencies) {\n this.stores = dependencies.stores;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n }\n\n /**\n * [EARS-A1] Records a deliverable/release note.\n *\n * Description: Aggregates multiple tasks into a single deliverable/release note.\n * Implementation: Validates required fields, builds record with factory, signs, persists and emits event.\n * Usage: Invoked by `gitgov changelog add` to document deliverables.\n * Returns: Complete and signed ChangelogRecord.\n */\n async create(payload: Partial<ChangelogRecord>, actorId: string): Promise<ChangelogRecord> {\n // Input validation\n if (!payload.title || payload.title.length < 10) {\n throw new Error('DetailedValidationError: title is required and must be at least 10 characters');\n }\n\n if (!payload.description || payload.description.length < 20) {\n throw new Error('DetailedValidationError: description is required and must be at least 20 characters');\n }\n\n if (!payload.relatedTasks || payload.relatedTasks.length === 0) {\n throw new Error('DetailedValidationError: relatedTasks is required and must contain at least one task ID');\n }\n\n // [EARS-A5] Validate that related tasks exist\n if (payload.relatedTasks) {\n for (const taskId of payload.relatedTasks) {\n const taskExists = await this.stores.tasks.get(taskId);\n if (!taskExists) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n }\n }\n\n // Validate that related cycles exist\n if (payload.relatedCycles) {\n for (const cycleId of payload.relatedCycles) {\n const cycleExists = await this.stores.cycles.get(cycleId);\n if (!cycleExists) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n }\n }\n\n try {\n // 1. Generate ID if not provided (EARS-A6)\n const timestamp = payload.completedAt || Math.floor(Date.now() / 1000);\n if (!payload.id) {\n payload.id = generateChangelogId(payload.title!, timestamp);\n }\n\n // 2. Build the record with factory\n const validatedPayload = createChangelogRecord(payload);\n\n // 3. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: ChangelogRecord } = {\n header: {\n version: '1.0',\n type: 'changelog',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Changelog entry created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author', 'Changelog record created');\n\n // 4. Persist the record\n await this.stores.changelogs.put(validatedPayload.id, signedRecord as GitGovRecord & { payload: ChangelogRecord });\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'changelog.created',\n timestamp: Date.now(),\n source: 'changelog_adapter',\n payload: {\n changelogId: validatedPayload.id,\n relatedTasks: validatedPayload.relatedTasks,\n title: validatedPayload.title,\n version: validatedPayload.version\n },\n } as ChangelogCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n if (error instanceof Error && error.message.includes('DetailedValidationError')) {\n throw error;\n }\n throw error;\n }\n }\n\n /**\n * [EARS-B1] Gets a specific ChangelogRecord by its ID.\n */\n async getChangelog(changelogId: string): Promise<ChangelogRecord | null> {\n const record = await this.stores.changelogs.get(changelogId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-C1] Gets all ChangelogRecords that include a specific task.\n */\n async getChangelogsByTask(taskId: string): Promise<ChangelogRecord[]> {\n const ids = await this.stores.changelogs.list();\n const changelogs: ChangelogRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.changelogs.get(id);\n if (record && record.payload.relatedTasks.includes(taskId)) {\n changelogs.push(record.payload);\n }\n }\n\n return changelogs;\n }\n\n /**\n * [EARS-D1] Gets all ChangelogRecords with optional filtering and sorting.\n */\n async getAllChangelogs(options?: ChangelogListOptions): Promise<ChangelogRecord[]> {\n const ids = await this.stores.changelogs.list();\n let changelogs: ChangelogRecord[] = [];\n\n // Read all changelogs\n for (const id of ids) {\n const record = await this.stores.changelogs.get(id);\n if (record) {\n changelogs.push(record.payload);\n }\n }\n\n // [EARS-D2] Filter by tags if provided\n if (options?.tags && options.tags.length > 0) {\n changelogs = changelogs.filter(changelog => {\n if (!changelog.tags) return false;\n // Return true if changelog has ANY of the requested tags\n return options.tags!.some(tag => changelog.tags!.includes(tag));\n });\n }\n\n // Filter by version if provided\n if (options?.version) {\n changelogs = changelogs.filter(changelog => changelog.version === options.version);\n }\n\n // [EARS-D3] Sort by specified field (default: completedAt desc)\n const sortBy = options?.sortBy || 'completedAt';\n const sortOrder = options?.sortOrder || 'desc';\n\n changelogs.sort((a, b) => {\n let compareValue = 0;\n\n if (sortBy === 'completedAt') {\n compareValue = a.completedAt - b.completedAt;\n } else if (sortBy === 'title') {\n compareValue = a.title.localeCompare(b.title);\n }\n\n return sortOrder === 'asc' ? compareValue : -compareValue;\n });\n\n // [EARS-D4] Apply limit if provided\n if (options?.limit && options.limit > 0) {\n changelogs = changelogs.slice(0, options.limit);\n }\n\n return changelogs;\n }\n\n /**\n * [EARS-E1] Gets recent ChangelogRecords ordered by completedAt.\n */\n async getRecentChangelogs(limit: number): Promise<ChangelogRecord[]> {\n const allChangelogs = await this.getAllChangelogs();\n\n // Sort by completedAt descending (most recent first)\n const sortedChangelogs = allChangelogs.sort((a, b) => b.completedAt - a.completedAt);\n\n // Apply limit\n return sortedChangelogs.slice(0, limit);\n }\n\n /**\n * Legacy method for backwards compatibility - maps to getChangelogsByTask\n * @deprecated Use getChangelogsByTask instead\n */\n async getChangelogsByEntity(entityId: string, _entityType?: string): Promise<ChangelogRecord[]> {\n return this.getChangelogsByTask(entityId);\n }\n}\n","/**\n * ExecutionAdapter - The Chronicler of the System\n *\n * Public exports for the execution_adapter module.\n */\n\n// Types\nexport type {\n IExecutionAdapter,\n ExecutionAdapterDependencies,\n} from './execution_adapter.types';\n\n// Implementation\nexport { ExecutionAdapter } from './execution_adapter';\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ExecutionRecord } from '../record_types';\nimport type { GitGovRecord } from '../record_types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../record_schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../record_schemas';\n\n/**\n * Schema-based validation for ExecutionRecord payload\n */\nexport function validateExecutionRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.ExecutionRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid ExecutionRecord\n */\nexport function isExecutionRecord(data: unknown): data is ExecutionRecord {\n const [isValid] = validateExecutionRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateExecutionRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateExecutionRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullExecutionRecord(\n record: GitGovRecord & { payload: ExecutionRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateExecutionRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ExecutionRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { ExecutionRecord, GitGovExecutionRecord } from '../record_types';\nimport { generateExecutionId } from '../utils/id_generator';\nimport { validateExecutionRecordDetailed } from '../record_validations/execution_validator';\nimport { validateEmbeddedMetadataDetailed } from '../record_validations/embedded_metadata_validator';\nimport { DetailedValidationError } from '../record_validations/common';\n\n/**\n * Creates a complete ExecutionRecord with validation.\n *\n * The factory is generic to preserve the metadata type for compile-time safety.\n *\n * @param payload - Partial ExecutionRecord payload with optional typed metadata\n * @returns ExecutionRecord<TMetadata> - The validated ExecutionRecord with preserved metadata type\n *\n * @example\n * interface AuditMetadata { scannedFiles: number; }\n * const record = createExecutionRecord<AuditMetadata>({\n * taskId: '1752274500-task-audit',\n * result: 'Audit complete',\n * metadata: { scannedFiles: 245 }\n * });\n * // record.metadata?.scannedFiles is typed as number\n */\nexport function createExecutionRecord<TMetadata extends object = object>(\n payload: Partial<ExecutionRecord<TMetadata>>\n): ExecutionRecord<TMetadata> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n const execution = {\n id: payload.id || generateExecutionId(payload.title || 'execution', timestamp),\n taskId: payload.taskId || '',\n result: payload.result || '',\n type: payload.type,\n title: payload.title,\n notes: payload.notes,\n references: payload.references,\n metadata: payload.metadata,\n } as ExecutionRecord<TMetadata>;\n\n // Validate the complete execution record\n const validation = validateExecutionRecordDetailed(execution);\n if (!validation.isValid) {\n throw new DetailedValidationError('ExecutionRecord', validation.errors);\n }\n\n return execution;\n}\n\n/**\n * Loads and validates an existing ExecutionRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ExecutionRecord).\n * \n * @param data - Unknown data to validate as GitGovExecutionRecord\n * @returns GitGovExecutionRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadExecutionRecord(data: unknown): GitGovExecutionRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ExecutionRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific ExecutionRecord payload\n const record = data as GitGovExecutionRecord;\n const payloadValidation = validateExecutionRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ExecutionRecord payload', payloadValidation.errors);\n }\n\n return record;\n}\n\n","import { createExecutionRecord } from '../../record_factories/execution_factory';\nimport type { RecordStores } from '../../record_store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport type { ExecutionRecord, GitGovExecutionRecord } from '../../record_types';\nimport type { IEventStream, ExecutionCreatedEvent } from '../../event_bus';\nimport type { IExecutionAdapter, ExecutionAdapterDependencies } from './execution_adapter.types';\n\n/**\n * ExecutionAdapter - The Chronicler of the System\n *\n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between execution logging and data stores.\n */\nexport class ExecutionAdapter implements IExecutionAdapter {\n private stores: Required<Pick<RecordStores, 'executions'>> & Pick<RecordStores, 'tasks'>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n\n constructor(dependencies: ExecutionAdapterDependencies) {\n this.stores = dependencies.stores;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n }\n\n /**\n * [EARS-A1] Records a new execution event to create an immutable audit log.\n *\n * Description: Records a new execution event to create an immutable audit log.\n * Implementation: Builds record with factory, signs with actorId, persists and emits event.\n * Usage: Invoked by `gitgov exec add` to register work done by actors/agents.\n * Returns: Complete and signed ExecutionRecord.\n */\n async create(payload: Partial<ExecutionRecord>, actorId: string): Promise<ExecutionRecord> {\n // Optional: Validate taskId exists (graceful degradation)\n if (this.stores.tasks && payload.taskId) {\n const taskExists = await this.stores.tasks.get(payload.taskId);\n if (!taskExists) {\n throw new Error(`RecordNotFoundError: Task not found: ${payload.taskId}`);\n }\n }\n\n try {\n // 1. Build the record with factory (factory validates all required fields)\n const validatedPayload = createExecutionRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovExecutionRecord = {\n header: {\n version: '1.0',\n type: 'execution',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Execution recorded',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author', 'Execution record created');\n\n // 4. Persist the record\n await this.stores.executions.put(validatedPayload.id, signedRecord);\n\n // 5. Emit event - responsibility ends here\n this.eventBus.publish({\n type: 'execution.created',\n timestamp: Date.now(),\n source: 'execution_adapter',\n payload: {\n executionId: validatedPayload.id,\n taskId: validatedPayload.taskId,\n actorId,\n isFirstExecution: await this.isFirstExecutionForTask(validatedPayload.taskId)\n },\n } as ExecutionCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n // Factory will throw DetailedValidationError for schema violations\n // Re-throw as-is to preserve error type and details\n throw error;\n }\n }\n\n /**\n * [EARS-B1] Gets a specific ExecutionRecord by its ID for query.\n *\n * Description: Gets a specific ExecutionRecord by its ID for query.\n * Implementation: Direct read from record store without modifications.\n * Usage: Invoked by `gitgov exec show` to display execution details.\n * Returns: ExecutionRecord found or null if it doesn't exist.\n */\n async getExecution(executionId: string): Promise<ExecutionRecord | null> {\n const record = await this.stores.executions.get(executionId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-C1] Gets all ExecutionRecords associated with a specific Task.\n *\n * Description: Gets all ExecutionRecords associated with a specific Task.\n * Implementation: Reads all records and filters by matching taskId.\n * Usage: Invoked by `gitgov exec list` and MetricsAdapter for staleness calculations.\n * Returns: Array of ExecutionRecords filtered for the task.\n */\n async getExecutionsByTask(taskId: string): Promise<ExecutionRecord[]> {\n const ids = await this.stores.executions.list();\n const executions: ExecutionRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.executions.get(id);\n if (record && record.payload.taskId === taskId) {\n executions.push(record.payload);\n }\n }\n\n return executions;\n }\n\n /**\n * [EARS-D1] Gets all ExecutionRecords in the system for indexation.\n *\n * Description: Gets all ExecutionRecords in the system for complete indexation.\n * Implementation: Complete read from record store without filters.\n * Usage: Invoked by `gitgov exec list --all` and MetricsAdapter for general calculations.\n * Returns: Complete array of all ExecutionRecords.\n */\n async getAllExecutions(): Promise<ExecutionRecord[]> {\n const ids = await this.stores.executions.list();\n const executions: ExecutionRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.executions.get(id);\n if (record) {\n executions.push(record.payload);\n }\n }\n\n return executions;\n }\n\n /**\n * Helper method to determine if this is the first execution for a task\n * Used for BacklogAdapter.handleExecutionCreated logic\n */\n private async isFirstExecutionForTask(taskId: string): Promise<boolean> {\n const executions = await this.getExecutionsByTask(taskId);\n return executions.length === 1; // Including the one we just created\n }\n}\n","// Types\nexport type {\n AllRecords,\n DerivedStates,\n DerivedStateSets,\n EnrichedTaskRecord,\n IndexData,\n IndexerAdapterDependencies,\n IntegrityError,\n IntegrityWarning,\n IntegrityReport,\n IndexGenerationReport,\n IIndexerAdapter,\n} from './indexer_adapter.types';\n\n// Implementation\nexport { IndexerAdapter } from './indexer_adapter';\n","/**\n * Signature Extraction Utilities\n * \n * Generic helpers for extracting metadata from EmbeddedMetadataRecord signatures.\n * These utilities work with any record type and implement graceful degradation\n * for records without signatures.\n * \n * @module signature_utils\n */\n\nimport type { EmbeddedMetadataRecord } from '../record_types/embedded.types';\nimport type { GitGovRecordPayload } from '../record_types/common.types';\n\n/**\n * Result type for author/lastModifier extraction with timestamp.\n */\nexport type SignatureInfo = {\n actorId: string;\n timestamp: number;\n};\n\n/**\n * Extracts the author (first signer) from a record with timestamp.\n * \n * The author is defined as the actor who created the first signature in the record.\n * This represents the original creator of the record.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns SignatureInfo with actorId and timestamp, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const author = extractAuthor(taskRecord);\n * if (author) {\n * console.log(`Created by ${author.actorId} at ${author.timestamp}`);\n * }\n * ```\n */\nexport function extractAuthor<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): SignatureInfo | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const firstSignature = signatures[0];\n return {\n actorId: firstSignature.keyId,\n timestamp: firstSignature.timestamp\n };\n}\n\n/**\n * Extracts the last modifier (last signer) from a record with timestamp.\n * \n * The last modifier is the actor who added the most recent signature.\n * For records with only one signature, this will be the same as the author.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns SignatureInfo with actorId and timestamp, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const lastModifier = extractLastModifier(taskRecord);\n * if (lastModifier) {\n * console.log(`Last modified by ${lastModifier.actorId} at ${lastModifier.timestamp}`);\n * }\n * ```\n */\nexport function extractLastModifier<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): SignatureInfo | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const lastSignature = signatures[signatures.length - 1];\n if (!lastSignature) {\n return undefined;\n }\n\n return {\n actorId: lastSignature.keyId,\n timestamp: lastSignature.timestamp\n };\n}\n\n/**\n * Extracts all unique contributors (signers) from a record.\n * \n * Returns an array of unique actor IDs (keyIds) who have signed the record.\n * Useful for collaboration analysis and determining who has worked on a record.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Array of unique actor IDs (keyIds), empty array if no signatures\n * \n * @example\n * ```typescript\n * const contributors = extractContributors(taskRecord);\n * console.log(`${contributors.length} people worked on this task`);\n * ```\n * \n * @performance O(n) where n = number of signatures (typically 1-3, max ~10)\n */\nexport function extractContributors<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): string[] {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return empty array for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return [];\n }\n\n // Use Set for deduplication, then convert to array\n const uniqueKeyIds = new Set<string>();\n for (const sig of signatures) {\n uniqueKeyIds.add(sig.keyId);\n }\n\n return Array.from(uniqueKeyIds);\n}\n\n/**\n * Extracts the timestamp of the last signature in a record.\n * \n * This represents when the record was last modified. Useful for sorting\n * and determining activity recency.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Unix timestamp of the last signature, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const lastActivity = extractLastSignatureTimestamp(taskRecord);\n * if (lastActivity) {\n * const daysAgo = (Date.now() - lastActivity) / (1000 * 60 * 60 * 24);\n * console.log(`Last activity ${daysAgo} days ago`);\n * }\n * ```\n */\nexport function extractLastSignatureTimestamp<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): number | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const lastSignature = signatures[signatures.length - 1];\n return lastSignature?.timestamp;\n}\n\n/**\n * Gets the total count of signatures in a record.\n * \n * Useful for determining how many times a record has been modified\n * or how many actors have contributed to it.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Number of signatures, or 0 if no signatures\n * \n * @example\n * ```typescript\n * const signatureCount = getSignatureCount(taskRecord);\n * console.log(`Record has been signed ${signatureCount} times`);\n * ```\n */\nexport function getSignatureCount<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): number {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return 0 for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return 0;\n }\n\n return signatures.length;\n}\n\n","export * from \"./checksum\";\nexport * from \"./signatures\";\n","import type { RecordStore, RecordStores } from '../../record_store';\nimport { MetricsAdapter } from '../metrics_adapter';\nimport { extractAuthor, extractLastModifier } from '../../utils/signature_utils';\nimport { calculatePayloadChecksum, verifySignatures } from '../../crypto';\nimport type {\n GitGovTaskRecord,\n GitGovCycleRecord,\n GitGovFeedbackRecord,\n GitGovExecutionRecord,\n GitGovChangelogRecord,\n GitGovActorRecord\n} from '../../record_types';\nimport type { ActivityEvent } from '../../event_bus';\nimport type {\n AllRecords,\n DerivedStates,\n DerivedStateSets,\n EnrichedTaskRecord,\n IndexData,\n IndexerAdapterDependencies,\n IntegrityError,\n IntegrityWarning,\n IntegrityReport,\n IndexGenerationReport,\n IIndexerAdapter,\n} from './indexer_adapter.types';\n\n/**\n * IndexerAdapter - Backend-agnostic cache implementation.\n *\n * Uses RecordStore<IndexData> abstraction for cache operations.\n * Caller chooses implementation: FsRecordStore, MemoryRecordStore, etc.\n *\n * @see indexer_adapter.md Section 2 - Architecture\n */\nexport class IndexerAdapter implements IIndexerAdapter {\n private metricsAdapter: MetricsAdapter;\n private stores: Required<Pick<RecordStores, 'tasks' | 'cycles' | 'feedbacks' | 'executions' | 'changelogs' | 'actors'>>;\n private cacheStore: RecordStore<IndexData>;\n\n constructor(dependencies: IndexerAdapterDependencies) {\n this.metricsAdapter = dependencies.metricsAdapter;\n this.stores = dependencies.stores;\n this.cacheStore = dependencies.cacheStore;\n }\n\n /**\n * [EARS-1] Generates complete index from raw Records with MetricsAdapter integration\n */\n async generateIndex(): Promise<IndexGenerationReport> {\n const startTime = performance.now();\n const performance_metrics = {\n readTime: 0,\n calculationTime: 0,\n writeTime: 0\n };\n\n try {\n // 1. Read all stores (Phase 1: Read everything into memory)\n const readStart = performance.now();\n\n const [tasks, cycles, actors] = await Promise.all([\n this.readAllTasks(),\n this.readAllCycles(),\n this.readAllActors()\n ]);\n\n performance_metrics.readTime = performance.now() - readStart;\n\n // 2. Delegate calculations to MetricsAdapter\n const calcStart = performance.now();\n\n const [systemStatus, productivityMetrics, collaborationMetrics] = await Promise.all([\n this.metricsAdapter.getSystemStatus(),\n this.metricsAdapter.getProductivityMetrics(),\n this.metricsAdapter.getCollaborationMetrics()\n ]);\n\n performance_metrics.calculationTime = performance.now() - calcStart;\n\n // 3. Calculate activity history\n const allRecords: AllRecords = {\n tasks,\n cycles,\n feedback: await this.readAllFeedback(),\n executions: await this.readAllExecutions(),\n changelogs: await this.readAllChangelogs(),\n actors\n };\n\n const activityHistory = await this.calculateActivityHistory(allRecords);\n\n // 3.5. Calculate system-wide derived states (EARS 7-10)\n const derivedStates = await this.calculateDerivedStates(allRecords);\n\n // 3.6. Convert DerivedStates arrays to DerivedStateSets for O(1) lookup performance\n const derivedStateSets: DerivedStateSets = {\n stalledTasks: new Set(derivedStates.stalledTasks),\n atRiskTasks: new Set(derivedStates.atRiskTasks),\n needsClarificationTasks: new Set(derivedStates.needsClarificationTasks),\n blockedByDependencyTasks: new Set(derivedStates.blockedByDependencyTasks)\n };\n\n // 3.7. Enrich tasks with complete intelligence layer (EARS-43: pass pre-calculated derivedStates)\n const enrichedTasks = await Promise.all(\n tasks.map(task => this.enrichTaskRecord(task, allRecords, derivedStateSets))\n );\n\n // 3.8. Validate integrity to populate integrityStatus (EARS-4 integration)\n const integrityReport = await this.validateIntegrity();\n\n // 4. Build IndexData structure\n const indexData: IndexData = {\n metadata: {\n generatedAt: new Date().toISOString(),\n lastCommitHash: await this.getGitCommitHash(),\n integrityStatus: integrityReport.status, // Populated from validateIntegrity() (EARS-4)\n recordCounts: {\n tasks: tasks.length,\n cycles: cycles.length,\n actors: actors.length,\n feedback: allRecords.feedback.length,\n executions: allRecords.executions.length,\n changelogs: allRecords.changelogs.length\n },\n generationTime: 0 // Will be set below\n },\n metrics: { ...systemStatus, ...productivityMetrics, ...collaborationMetrics },\n derivedStates, // System-wide derived states for analytics\n activityHistory, // Activity stream for dashboard\n tasks, // Keep full records with headers (source of truth)\n enrichedTasks, // Tasks with intelligence layer\n cycles, // Keep full records with headers\n actors, // Keep full records with headers\n feedback: allRecords.feedback // Optional - Phase 1B+ raw feedback records\n };\n\n // 4. Write cache using Store abstraction\n const writeStart = performance.now();\n await this.writeCacheFile(indexData);\n performance_metrics.writeTime = performance.now() - writeStart;\n\n const totalTime = performance.now() - startTime;\n indexData.metadata.generationTime = totalTime;\n\n return {\n success: true,\n recordsProcessed: tasks.length + cycles.length + actors.length,\n metricsCalculated: 3, // systemStatus + productivity + collaboration\n derivedStatesApplied: Object.values(derivedStates).reduce((sum, arr) => sum + arr.length, 0), // Total tasks with derived states\n generationTime: totalTime,\n errors: [],\n performance: performance_metrics\n };\n\n } catch (error) {\n return {\n success: false,\n recordsProcessed: 0,\n metricsCalculated: 0,\n derivedStatesApplied: 0,\n generationTime: performance.now() - startTime,\n errors: [error instanceof Error ? error.message : String(error)],\n performance: performance_metrics\n };\n }\n }\n\n /**\n * [EARS-2] Gets data from local cache for fast CLI queries\n * [EARS-13] Returns null and logs warning if cache is corrupted\n */\n async getIndexData(): Promise<IndexData | null> {\n try {\n // Use Store abstraction for backend-agnostic cache access\n const indexData = await this.cacheStore.get('index');\n if (!indexData) {\n return null; // EARS-3: Return null without cache\n }\n\n // Validate freshness using metadata.generatedAt (backend-agnostic)\n const isUpToDate = await this.isIndexUpToDate();\n if (!isUpToDate) {\n return null; // Cache is stale\n }\n\n return indexData;\n } catch (error) {\n // [EARS-13] Cache is corrupted or invalid - log warning and suggest regeneration\n console.warn(`Warning: Cache is corrupted or invalid. Please regenerate with 'gitgov index'.`);\n console.warn(`Details: ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n }\n\n /**\n * [EARS-4, EARS-70 to EARS-76] Validates integrity of Records without regenerating cache\n * \n * PHASE 1A (IMPLEMENTED): Basic schema validation (required fields)\n * PHASE 1B (IMPLEMENTED): Cryptographic validation (checksums + signatures)\n * TODO FUTURE:\n * - Integrate ValidatorModule for comprehensive schema validation\n * - Compare cache consistency with Records\n * - Detect broken references between records\n * - Validate timestamp consistency\n */\n async validateIntegrity(): Promise<IntegrityReport> {\n const startTime = performance.now();\n const errors: IntegrityError[] = [];\n const warnings: IntegrityWarning[] = [];\n let recordsScanned = 0;\n let checksumFailures = 0;\n let signatureFailures = 0;\n\n try {\n // Read all records for validation\n const [tasks, cycles] = await Promise.all([\n this.readAllTasks(),\n this.readAllCycles()\n ]);\n\n recordsScanned = tasks.length + cycles.length;\n\n // PHASE 1A: Schema validation - verify required fields\n for (const task of tasks) {\n if (!task.payload.id || !task.payload.description) {\n errors.push({\n type: 'schema_violation',\n recordId: task.payload.id || 'unknown',\n message: 'Task missing required fields'\n });\n }\n }\n\n for (const cycle of cycles) {\n if (!cycle.payload.id || !cycle.payload.title) {\n errors.push({\n type: 'schema_violation',\n recordId: cycle.payload.id || 'unknown',\n message: 'Cycle missing required fields'\n });\n }\n }\n\n // PHASE 1B: Checksum verification (EARS-70 to EARS-72)\n for (const task of tasks) {\n const calculatedChecksum = calculatePayloadChecksum(task.payload);\n if (calculatedChecksum !== task.header.payloadChecksum) {\n checksumFailures++;\n errors.push({\n type: 'checksum_failure',\n recordId: task.payload.id,\n message: `Checksum mismatch: expected ${task.header.payloadChecksum}, got ${calculatedChecksum}`\n });\n }\n }\n\n for (const cycle of cycles) {\n const calculatedChecksum = calculatePayloadChecksum(cycle.payload);\n if (calculatedChecksum !== cycle.header.payloadChecksum) {\n checksumFailures++;\n errors.push({\n type: 'checksum_failure',\n recordId: cycle.payload.id,\n message: `Checksum mismatch: expected ${cycle.header.payloadChecksum}, got ${calculatedChecksum}`\n });\n }\n }\n\n // PHASE 1B: Signature verification (EARS-73 to EARS-76)\n // Create actor public key lookup function for signature verification\n const getActorPublicKey = async (keyId: string): Promise<string | null> => {\n const actor = await this.stores.actors.get(keyId);\n return actor?.payload.publicKey || null;\n };\n\n // Verify signatures for all tasks\n for (const task of tasks) {\n const isValid = await verifySignatures(task, getActorPublicKey);\n if (!isValid) {\n signatureFailures++;\n errors.push({\n type: 'signature_invalid',\n recordId: task.payload.id,\n message: 'One or more signatures failed verification'\n });\n }\n }\n\n // Verify signatures for all cycles\n for (const cycle of cycles) {\n const isValid = await verifySignatures(cycle, getActorPublicKey);\n if (!isValid) {\n signatureFailures++;\n errors.push({\n type: 'signature_invalid',\n recordId: cycle.payload.id,\n message: 'One or more signatures failed verification'\n });\n }\n }\n\n const status = errors.length > 0 ? \"errors\" : warnings.length > 0 ? \"warnings\" : \"valid\";\n\n return {\n status,\n recordsScanned,\n errorsFound: errors,\n warningsFound: warnings,\n validationTime: performance.now() - startTime,\n checksumFailures,\n signatureFailures\n };\n\n } catch (error) {\n return {\n status: \"errors\",\n recordsScanned,\n errorsFound: [{\n type: 'schema_violation',\n recordId: 'system',\n message: error instanceof Error ? error.message : String(error)\n }],\n warningsFound: warnings,\n validationTime: performance.now() - startTime,\n checksumFailures,\n signatureFailures\n };\n }\n }\n\n /**\n * [EARS-5] Checks if index is up to date by comparing timestamps\n * Uses metadata.generatedAt from cached data (backend-agnostic)\n */\n async isIndexUpToDate(): Promise<boolean> {\n try {\n // Check if cache exists using Store abstraction\n const cacheExists = await this.cacheStore.exists('index');\n if (!cacheExists) {\n return false;\n }\n\n // Get cache generation timestamp from metadata (backend-agnostic)\n const indexData = await this.cacheStore.get('index');\n if (!indexData) {\n return false;\n }\n const cacheTime = new Date(indexData.metadata.generatedAt).getTime();\n\n // Get last modified time of any record (simplified check)\n const taskIds = await this.stores.tasks.list();\n const cycleIds = await this.stores.cycles.list();\n\n // Check if any records are newer than cache\n for (const id of [...taskIds, ...cycleIds]) {\n const timestamp = this.getTimestampFromId(id);\n if (timestamp * 1000 > cacheTime) { // Convert to milliseconds\n return false; // Found newer record\n }\n }\n\n return true;\n } catch (error) {\n console.warn(`Error checking cache freshness: ${error instanceof Error ? error.message : String(error)}`);\n return false;\n }\n }\n\n /**\n * [EARS-6] Invalidates local cache by removing cache\n */\n async invalidateCache(): Promise<void> {\n try {\n const cacheExists = await this.cacheStore.exists('index');\n if (cacheExists) {\n await this.cacheStore.delete('index');\n }\n } catch (error) {\n throw new Error(`Failed to invalidate cache: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Reads all tasks from stores.tasks with full metadata (headers + payloads).\n * Returns complete GitGovTaskRecord objects including signatures for author/lastModifier extraction.\n */\n private async readAllTasks(): Promise<GitGovTaskRecord[]> {\n const taskIds = await this.stores.tasks.list();\n const tasks: GitGovTaskRecord[] = [];\n\n for (const id of taskIds) {\n const record = await this.stores.tasks.get(id);\n if (record) {\n tasks.push(record);\n }\n }\n\n return tasks;\n }\n\n /**\n * Reads all cycles from stores.cycles with full metadata.\n */\n private async readAllCycles(): Promise<GitGovCycleRecord[]> {\n const cycleIds = await this.stores.cycles.list();\n const cycles: GitGovCycleRecord[] = [];\n\n for (const id of cycleIds) {\n const record = await this.stores.cycles.get(id);\n if (record) {\n cycles.push(record);\n }\n }\n\n return cycles;\n }\n\n /**\n * Reads all actors from stores.actors with full metadata.\n */\n private async readAllActors(): Promise<GitGovActorRecord[]> {\n const actorIds = await this.stores.actors.list();\n const actors: GitGovActorRecord[] = [];\n\n for (const id of actorIds) {\n const record = await this.stores.actors.get(id);\n if (record) {\n actors.push(record);\n }\n }\n\n return actors;\n }\n\n /**\n * Reads all feedback from stores.feedbacks with full metadata.\n */\n private async readAllFeedback(): Promise<GitGovFeedbackRecord[]> {\n const feedbackIds = await this.stores.feedbacks.list();\n const feedback: GitGovFeedbackRecord[] = [];\n\n for (const id of feedbackIds) {\n const record = await this.stores.feedbacks.get(id);\n if (record) {\n feedback.push(record);\n }\n }\n\n return feedback;\n }\n\n /**\n * Reads all executions from stores.executions with full metadata.\n */\n private async readAllExecutions(): Promise<GitGovExecutionRecord[]> {\n const executionIds = await this.stores.executions.list();\n const executions: GitGovExecutionRecord[] = [];\n\n for (const id of executionIds) {\n const record = await this.stores.executions.get(id);\n if (record) {\n executions.push(record);\n }\n }\n\n return executions;\n }\n\n /**\n * Reads all changelogs from stores.changelogs with full metadata.\n */\n private async readAllChangelogs(): Promise<GitGovChangelogRecord[]> {\n const changelogIds = await this.stores.changelogs.list();\n const changelogs: GitGovChangelogRecord[] = [];\n\n for (const id of changelogIds) {\n const record = await this.stores.changelogs.get(id);\n if (record) {\n changelogs.push(record);\n }\n }\n\n return changelogs;\n }\n\n /**\n * Writes cache data using Store abstraction\n * [EARS-14] Store implementation handles atomicity internally\n */\n private async writeCacheFile(indexData: IndexData): Promise<void> {\n // Store abstraction handles atomicity internally\n await this.cacheStore.put('index', indexData);\n }\n\n /**\n * Gets current git commit hash (simplified)\n */\n private async getGitCommitHash(): Promise<string> {\n try {\n // Simplified implementation - would use git commands in real implementation\n return \"mock-commit-hash\";\n } catch {\n return \"unknown\";\n }\n }\n\n /**\n * [EARS-7 to EARS-10] Calculates system-wide derived states for analytics and filtering.\n * \n * Applies DerivedDataProtocol algorithms to categorize tasks:\n * - isStalled: Tasks en 'active' sin executions >7 días O en 'review' sin approval >3 días\n * - isAtRisk: Tasks con prioridad 'critical' + 'paused' O 2+ blocking feedbacks\n * - needsClarification: Tasks con feedback tipo 'question' abierto\n * - isBlockedByDependency: Tasks con referencias a tasks no completadas\n * \n * @see derived_data_protocol.md for detailed algorithms\n * @see EARS-7, EARS-8, EARS-9, EARS-10 for requirements\n */\n async calculateDerivedStates(allRecords: AllRecords): Promise<DerivedStates> {\n const derivedStates: DerivedStates = {\n stalledTasks: [],\n atRiskTasks: [],\n needsClarificationTasks: [],\n blockedByDependencyTasks: []\n };\n\n const now = Date.now();\n const SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\n try {\n for (const task of allRecords.tasks) {\n const taskId = task.payload.id;\n const taskPayload = task.payload;\n\n // [EARS-8] Calculate isStalled\n // Tasks en 'active' sin executions por >7 días O en 'review' sin approval por >3 días\n if (taskPayload.status === 'active' || taskPayload.status === 'review') {\n const taskTimestamp = this.getTimestampFromId(taskId) * 1000; // Convert to milliseconds\n const daysSinceCreation = (now - taskTimestamp) / (24 * 60 * 60 * 1000);\n\n // Check executions para tasks activas\n const hasRecentExecution = allRecords.executions.some(exec => {\n if (exec.payload.taskId === taskId) {\n const execTimestamp = this.getTimestampFromId(exec.payload.id) * 1000; // Convert to milliseconds\n return (now - execTimestamp) < SEVEN_DAYS_MS;\n }\n return false;\n });\n\n const isStalled =\n (taskPayload.status === 'active' && daysSinceCreation > 7 && !hasRecentExecution) ||\n (taskPayload.status === 'review' && daysSinceCreation > 3);\n\n if (isStalled) {\n derivedStates.stalledTasks.push(taskId);\n }\n }\n\n // [EARS-9] Calculate isAtRisk\n // Tasks con prioridad 'critical' + 'paused' O 2+ blocking feedbacks abiertos\n const isCriticalPaused = taskPayload.priority === 'critical' && taskPayload.status === 'paused';\n const blockingFeedbackCount = allRecords.feedback.filter(feedback => {\n return feedback.payload.type === 'blocking' &&\n feedback.payload.status === 'open' &&\n feedback.payload.entityId === taskId;\n }).length;\n\n if (isCriticalPaused || blockingFeedbackCount >= 2) {\n derivedStates.atRiskTasks.push(taskId);\n }\n\n // [EARS-9] Calculate needsClarification\n // Tasks con feedback tipo 'question' abierto\n const hasOpenQuestion = allRecords.feedback.some(feedback => {\n return feedback.payload.type === 'question' &&\n feedback.payload.status === 'open' &&\n feedback.payload.entityId === taskId;\n });\n\n if (hasOpenQuestion) {\n derivedStates.needsClarificationTasks.push(taskId);\n }\n\n // [EARS-10] Calculate isBlockedByDependency\n // Tasks con referencias a otras tasks no completadas\n if (taskPayload.references && taskPayload.references.length > 0) {\n const hasBlockingDependency = taskPayload.references.some(ref => {\n if (ref.startsWith('task:')) {\n const dependencyId = ref.replace('task:', '');\n const dependencyTask = allRecords.tasks.find(t => t.payload.id === dependencyId);\n return dependencyTask &&\n dependencyTask.payload.status !== 'done' &&\n dependencyTask.payload.status !== 'archived';\n }\n return false;\n });\n\n if (hasBlockingDependency) {\n derivedStates.blockedByDependencyTasks.push(taskId);\n }\n }\n }\n\n return derivedStates;\n } catch (error) {\n console.warn(`calculateDerivedStates error: ${error instanceof Error ? error.message : String(error)}`);\n // Return empty derived states on error (graceful degradation)\n return derivedStates;\n }\n }\n\n /**\n * [EARS-19] Calculates activity history from Record timestamps for dashboard activity streams\n */\n async calculateActivityHistory(allRecords: AllRecords): Promise<ActivityEvent[]> {\n const events: ActivityEvent[] = [];\n\n try {\n // Tasks creadas (basado en ID timestamp)\n allRecords.tasks.forEach(task => {\n const timestampPart = task.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'task_created',\n entityId: task.payload.id,\n entityTitle: task.payload.title,\n actorId: task.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: { priority: task.payload.priority, status: task.payload.status }\n });\n }\n });\n\n // Cycles creados (basado en ID timestamp)\n allRecords.cycles.forEach(cycle => {\n const timestampPart = cycle.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'cycle_created',\n entityId: cycle.payload.id,\n entityTitle: cycle.payload.title,\n actorId: cycle.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: { status: cycle.payload.status }\n });\n }\n });\n\n // Feedback creado (basado en ID timestamp)\n allRecords.feedback.forEach(feedback => {\n const timestampPart = feedback.payload.id.split('-')[0];\n if (timestampPart) {\n const metadata: { type: string; assignee?: string; resolution: string } = {\n type: feedback.payload.type,\n resolution: feedback.payload.status\n };\n if (feedback.payload.assignee) {\n metadata.assignee = feedback.payload.assignee;\n }\n\n const event: ActivityEvent = {\n timestamp: parseInt(timestampPart),\n type: 'feedback_created',\n entityId: feedback.payload.id,\n entityTitle: `${feedback.payload.type}: ${feedback.payload.content.slice(0, 40)}...`,\n actorId: feedback.header.signatures[0]?.keyId || feedback.payload.assignee || 'unknown',\n metadata\n };\n\n events.push(event);\n }\n });\n\n // Changelogs creados (basado en ID timestamp) \n allRecords.changelogs.forEach(changelog => {\n const timestampPart = changelog.payload.id.split('-')[0];\n if (timestampPart) {\n const event: ActivityEvent = {\n timestamp: parseInt(timestampPart),\n type: 'changelog_created',\n entityId: changelog.payload.id,\n entityTitle: changelog.payload.title || 'Release notes',\n actorId: changelog.header.signatures[0]?.keyId || 'unknown'\n };\n if (changelog.payload.version) {\n event.metadata = { version: changelog.payload.version };\n }\n events.push(event);\n }\n });\n\n // Executions creadas (basado en ID timestamp)\n allRecords.executions.forEach(execution => {\n const timestampPart = execution.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'execution_created',\n entityId: execution.payload.id,\n entityTitle: execution.payload.title || `Working on ${execution.payload.taskId.slice(-8)}`,\n actorId: execution.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: {\n executionType: execution.payload.type || 'development',\n taskId: execution.payload.taskId\n }\n });\n }\n });\n\n // Actors creados (basado en ID timestamp)\n allRecords.actors.forEach(actor => {\n const timestampPart = actor.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'actor_created',\n entityId: actor.payload.id,\n entityTitle: `${actor.payload.displayName} joined (${actor.payload.type})`,\n metadata: { type: actor.payload.type }\n });\n }\n });\n\n // [EARS-20] Ordenar cronológicamente y limitar a últimos 15 eventos\n return events\n .sort((a, b) => b.timestamp - a.timestamp) // Más recientes primero\n .slice(0, 15); // Últimos 15 eventos para performance\n\n } catch (error) {\n // Graceful degradation si hay errores\n console.warn('Error calculating activity history:', error);\n return [];\n }\n }\n\n /**\n * [EARS-19, EARS-22, EARS-24] Calculate lastUpdated timestamp and activity type for a task\n * Uses signature timestamps instead of file mtime (backend-agnostic)\n * @param task - Full GitGovTaskRecord with header.signatures for timestamp extraction\n */\n async calculateLastUpdated(\n task: GitGovTaskRecord,\n relatedRecords: AllRecords\n ): Promise<{ lastUpdated: number; lastActivityType: EnrichedTaskRecord['lastActivityType']; recentActivity: string }> {\n try {\n const taskPayload = task.payload;\n const creationTime = this.getTimestampFromId(taskPayload.id) * 1000; // Convert to milliseconds\n let lastUpdated = creationTime;\n let lastActivityType: EnrichedTaskRecord['lastActivityType'] = 'task_created';\n let recentActivity = 'Task created';\n\n // 1. [EARS-22] Check signature timestamp for task modification (backend-agnostic)\n // Uses extractLastModifier() instead of file mtime\n const lastModifier = extractLastModifier(task);\n if (lastModifier) {\n const signatureTime = lastModifier.timestamp * 1000; // Convert to milliseconds\n const timeDifference = signatureTime - creationTime;\n\n // [EARS-24] Only consider significant modifications (>60s after creation)\n if (timeDifference > 60000 && signatureTime > lastUpdated) {\n lastUpdated = signatureTime;\n lastActivityType = 'task_modified';\n recentActivity = `Task modified ${this.formatTimeAgo(signatureTime)}`;\n }\n }\n\n // 2. Check related feedback records\n const relatedFeedback = relatedRecords.feedback.filter(f =>\n f.payload.entityId === taskPayload.id || (f.payload.content && f.payload.content.includes(taskPayload.id))\n );\n\n for (const feedback of relatedFeedback) {\n const feedbackTime = this.getTimestampFromId(feedback.payload.id) * 1000; // Convert to milliseconds\n if (feedbackTime > lastUpdated) {\n lastUpdated = feedbackTime;\n lastActivityType = 'feedback_received';\n recentActivity = `${feedback.payload.type} feedback: ${feedback.payload.content.slice(0, 30)}...`;\n }\n }\n\n // 3. Check related execution records\n const relatedExecutions = relatedRecords.executions.filter(e => e.payload.taskId === taskPayload.id);\n\n for (const execution of relatedExecutions) {\n const executionTime = this.getTimestampFromId(execution.payload.id) * 1000; // Convert to milliseconds\n if (executionTime > lastUpdated) {\n lastUpdated = executionTime;\n lastActivityType = 'execution_added';\n recentActivity = `Execution: ${execution.payload.title || 'Work logged'}`;\n }\n }\n\n // 4. Check related changelog records\n const relatedChangelogs = relatedRecords.changelogs.filter(c =>\n (c.payload.relatedTasks && c.payload.relatedTasks.includes(taskPayload.id)) ||\n c.payload.description?.includes(taskPayload.id)\n );\n\n for (const changelog of relatedChangelogs) {\n const changelogTime = this.getTimestampFromId(changelog.payload.id) * 1000; // Convert to milliseconds\n if (changelogTime > lastUpdated) {\n lastUpdated = changelogTime;\n lastActivityType = 'changelog_created';\n recentActivity = `Changelog: ${changelog.payload.title}`;\n }\n }\n\n return { lastUpdated, lastActivityType, recentActivity };\n\n } catch (error) {\n // Graceful fallback\n const fallbackTime = this.getTimestampFromId(task.payload.id) * 1000; // Convert to milliseconds\n return {\n lastUpdated: fallbackTime,\n lastActivityType: 'task_created',\n recentActivity: 'Task created'\n };\n }\n }\n\n /**\n * [EARS-22] Enrich a TaskRecord with activity metadata\n * @param task - Full GitGovTaskRecord with header.signatures for author/lastModifier extraction\n * @param relatedRecords - All related records with full metadata\n */\n /**\n * Enriches a task with complete intelligence layer (EARS 25-48)\n * \n * 11-step algorithm:\n * 1. Activity metadata (lastUpdated, lastActivityType, recentActivity)\n * 2. Signatures (author, lastModifier with timestamps)\n * 3. Assignments (assignedTo from feedback)\n * 4. Dependencies (dependsOn, blockedBy with typed references)\n * 5. Cycles (all cycles as array with id+title)\n * 6. Metrics (executionCount, blockingFeedbackCount, openQuestionCount)\n * 7. Time to resolution (for done tasks)\n * 8. Release info (isReleased, lastReleaseVersion from changelogs)\n * 9. Derived states (EARS-43: REUTILIZA pre-calculated derivedStates con O(1) lookup)\n * 10. Health score (0-100 using multi-factor algorithm)\n * 11. Time in current stage (days)\n * \n * @param task - Full GitGovTaskRecord with header.signatures\n * @param relatedRecords - All records for cross-referencing\n * @param derivedStateSets - Pre-calculated system-wide derived states as Sets for O(1) lookup (EARS-43)\n * @returns Promise<EnrichedTaskRecord> - Task with complete intelligence layer\n */\n async enrichTaskRecord(\n task: GitGovTaskRecord,\n relatedRecords: AllRecords,\n derivedStateSets: DerivedStateSets\n ): Promise<EnrichedTaskRecord> {\n // Step 1: Activity metadata (now uses full task for signature timestamps)\n const { lastUpdated, lastActivityType, recentActivity } = await this.calculateLastUpdated(task, relatedRecords);\n\n // Step 2: Signatures (author, lastModifier) using signature_utils helpers\n const author = extractAuthor(task);\n const lastModifier = extractLastModifier(task);\n\n // Step 3: Assignments (assignedTo from feedback)\n const assignments = relatedRecords.feedback\n .filter(f => f.payload.entityId === task.payload.id && f.payload.type === 'assignment')\n .map(f => ({\n actorId: f.payload.assignee || 'unknown',\n assignedAt: this.getTimestampFromId(f.payload.id) * 1000 // ms\n }));\n\n // Step 4: Dependencies (dependsOn, blockedBy with typed references)\n // [EARS-37] Include ALL typed references (task:, pr:, issue:, file:, url:)\n // Filter out completed tasks, but preserve external references always\n const completedStatuses = ['done', 'archived', 'discarded'];\n const dependsOn = (task.payload.references || [])\n .filter(ref => {\n // Include all typed references (task:, pr:, issue:, file:, url:)\n const hasValidPrefix = ref.startsWith('task:') || ref.startsWith('pr:') ||\n ref.startsWith('issue:') || ref.startsWith('file:') ||\n ref.startsWith('url:');\n\n if (!hasValidPrefix) return false;\n\n // For task: references, filter out completed tasks\n if (ref.startsWith('task:')) {\n const refTaskId = ref.replace('task:', '');\n const refTask = relatedRecords.tasks.find(t => t.payload.id === refTaskId);\n return !refTask || !refTask.payload.status || !completedStatuses.includes(refTask.payload.status);\n }\n\n // For external references (pr:, issue:, file:, url:), always include\n return true;\n });\n\n const blockedBy = relatedRecords.tasks\n .filter(t => !completedStatuses.includes(t.payload.status))\n .filter(t => (t.payload.references || []).includes(`task:${task.payload.id}`))\n .map(t => `task:${t.payload.id}`);\n\n // Step 5: Cycles (all cycles as array with id+title)\n const cycles = (task.payload.cycleIds || [])\n .map(cycleId => {\n const cycle = relatedRecords.cycles.find(c => c.payload.id === cycleId);\n return cycle ? { id: cycleId, title: cycle.payload.title } : null;\n })\n .filter((c): c is { id: string; title: string } => c !== null);\n\n // Step 6: Metrics\n const executionCount = relatedRecords.executions.filter(e => e.payload.taskId === task.payload.id).length;\n const blockingFeedbackCount = relatedRecords.feedback.filter(\n f => f.payload.entityId === task.payload.id && f.payload.type === 'blocking' && f.payload.status === 'open'\n ).length;\n const openQuestionCount = relatedRecords.feedback.filter(\n f => f.payload.entityId === task.payload.id && f.payload.type === 'question' && f.payload.status === 'open'\n ).length;\n\n // Step 7: Time to resolution (for done tasks)\n const timeToResolution: number | undefined = task.payload.status === 'done'\n ? (lastUpdated - this.getTimestampFromId(task.payload.id) * 1000) / (1000 * 60 * 60) // horas\n : undefined;\n\n // Step 8: Release info (from changelogs)\n const releaseChangelogs = relatedRecords.changelogs.filter(cl =>\n cl.payload.relatedTasks.includes(task.payload.id)\n );\n const isReleased = releaseChangelogs.length > 0;\n const lastReleaseVersion: string | undefined = isReleased\n ? (releaseChangelogs[releaseChangelogs.length - 1]?.payload.version || undefined)\n : undefined;\n\n // Step 9: Derived states (EARS-43: Usar pre-calculated derivedStates con O(1) lookup)\n // NO recalcular - buscar en los Sets de derivedStateSets pre-calculados\n const taskId = task.payload.id;\n const isStalled = derivedStateSets.stalledTasks.has(taskId);\n const isAtRisk = derivedStateSets.atRiskTasks.has(taskId);\n const needsClarification = derivedStateSets.needsClarificationTasks.has(taskId);\n const isBlockedByDependency = derivedStateSets.blockedByDependencyTasks.has(taskId);\n\n // Calculate daysSinceLastUpdate for health score and timeInCurrentStage\n const daysSinceLastUpdate = (Date.now() - lastUpdated) / (1000 * 60 * 60 * 24);\n\n // Step 10: Health score (0-100)\n let healthScore = 100;\n\n // Status health (30 points)\n if (task.payload.status === 'done') healthScore -= 0; // Perfect\n else if (task.payload.status === 'active') healthScore -= 5;\n else if (task.payload.status === 'ready') healthScore -= 10;\n else if (task.payload.status === 'review') healthScore -= 15;\n else if (task.payload.status === 'paused') healthScore -= 25;\n else healthScore -= 30; // draft, archived, discarded\n\n // Feedback health (30 points)\n healthScore -= Math.min(blockingFeedbackCount * 10, 30);\n\n // Executions health (20 points)\n if (executionCount === 0 && task.payload.status === 'active') healthScore -= 20;\n else if (executionCount < 2) healthScore -= 10;\n\n // Time health (20 points)\n if (daysSinceLastUpdate > 30) healthScore -= 20;\n else if (daysSinceLastUpdate > 14) healthScore -= 15;\n else if (daysSinceLastUpdate > 7) healthScore -= 10;\n\n healthScore = Math.max(0, Math.min(100, healthScore));\n\n // Step 11: Time in current stage (days)\n const timeInCurrentStage = daysSinceLastUpdate;\n\n // Build enriched record with conditional optional properties\n const enrichedRecord: EnrichedTaskRecord = {\n ...task.payload,\n derivedState: {\n isStalled,\n isAtRisk,\n needsClarification,\n isBlockedByDependency,\n healthScore,\n timeInCurrentStage\n },\n relationships: {\n ...(author && { author }),\n ...(lastModifier && { lastModifier }),\n assignedTo: assignments,\n dependsOn,\n blockedBy,\n cycles\n },\n metrics: {\n executionCount,\n blockingFeedbackCount,\n openQuestionCount,\n ...(timeToResolution !== undefined && { timeToResolution })\n },\n release: {\n isReleased,\n ...(lastReleaseVersion !== undefined && { lastReleaseVersion })\n },\n lastUpdated,\n lastActivityType,\n ...(recentActivity && { recentActivity })\n };\n\n return enrichedRecord;\n }\n\n /**\n * Format timestamp as human-readable time ago\n */\n private formatTimeAgo(timestamp: number): string {\n const now = Date.now();\n const diff = now - timestamp;\n const minutes = Math.floor(diff / (1000 * 60));\n const hours = Math.floor(diff / (1000 * 60 * 60));\n const days = Math.floor(diff / (1000 * 60 * 60 * 24));\n\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n return `${days}d ago`;\n }\n\n /**\n * Extracts timestamp from ID (format: {timestamp}-{type}-{slug})\n */\n private getTimestampFromId(id: string): number {\n try {\n const parts = id.split('-');\n const timestamp = parseInt(parts[0] || '0', 10);\n\n if (isNaN(timestamp) || timestamp <= 0) {\n throw new Error(`Invalid timestamp in ID: ${id}`);\n }\n\n return timestamp;\n } catch (error) {\n throw new Error(`Cannot extract timestamp from ID: ${id}`);\n }\n }\n}\n","/**\n * ProjectAdapter Module\n *\n * Re-exports for the Project Initialization Engine.\n */\n\n// Types and Interfaces\nexport type {\n ProjectAdapterDependencies,\n ProjectInitOptions,\n ProjectInitResult,\n ProjectContext,\n TemplateProcessingResult,\n ProjectInfo,\n ProjectReport,\n IProjectAdapter,\n EnvironmentValidation,\n} from './project_adapter.types';\n\n// Implementation\nexport { ProjectAdapter } from './project_adapter';\n","/**\n * ProjectAdapter - Project Initialization Engine\n *\n * Implements Facade + Dependency Injection Pattern for testable and configurable orchestration.\n * Acts as Mediator between project initialization and the ecosystem of adapters.\n *\n * EARS Blocks:\n * - A: Project Bootstrap Core (A1-A10)\n * - B: Multi-Adapter Integration (B1-B6)\n * - C: Error Handling & Type Safety (C1-C4)\n * - D: Graceful Degradation (D1)\n * - E: Future Platform Capabilities (E1-E2)\n * - F: Critical Bug Prevention (F1-F3)\n * - G: Agent Prompt UX (G1)\n */\n\nimport type { GitGovConfig, IConfigManager } from '../../config_manager';\nimport { DetailedValidationError } from '../../record_validations/common';\nimport type { IdentityAdapter } from '../identity_adapter';\nimport type { BacklogAdapter } from '../backlog_adapter';\nimport { createTaskRecord } from '../../record_factories/task_factory';\nimport { createCycleRecord } from '../../record_factories/cycle_factory';\nimport type { IProjectInitializer, EnvironmentValidation } from '../../project_initializer';\nimport type {\n ProjectAdapterDependencies,\n ProjectInitOptions,\n ProjectInitResult,\n ProjectContext,\n TemplateProcessingResult,\n ProjectInfo,\n ProjectReport,\n IProjectAdapter,\n} from './project_adapter.types';\n\n/**\n * ProjectAdapter - The Project Initialization Engine\n *\n * Orchestrates adapters (Identity, Backlog) + ConfigManager + IProjectInitializer\n * for complete GitGovernance project bootstrap with trust root Ed25519.\n *\n * VCS checks (remote, branch, commits) are delegated to IProjectInitializer.validateEnvironment(),\n * keeping ProjectAdapter storage-agnostic.\n */\nexport class ProjectAdapter implements IProjectAdapter {\n private identityAdapter: IdentityAdapter;\n private backlogAdapter: BacklogAdapter;\n private configManager: IConfigManager;\n private projectInitializer: IProjectInitializer;\n\n constructor(dependencies: ProjectAdapterDependencies) {\n this.identityAdapter = dependencies.identityAdapter;\n this.backlogAdapter = dependencies.backlogAdapter;\n this.configManager = dependencies.configManager;\n this.projectInitializer = dependencies.projectInitializer;\n }\n\n // ===== FASE 1: BOOTSTRAP CORE METHODS =====\n\n /**\n * [EARS-A1] Initializes complete GitGovernance project with 3-adapter orchestration\n * and trust root Ed25519.\n */\n async initializeProject(options: ProjectInitOptions): Promise<ProjectInitResult> {\n const startTime = Date.now();\n\n try {\n // 1. Environment Validation (delegates to IProjectInitializer)\n const envValidation = await this.validateEnvironment();\n if (!envValidation.isValid) {\n throw new Error(`Environment validation failed: ${envValidation.warnings.join(', ')}`);\n }\n\n // 2. Directory Structure Creation via ProjectInitializer\n await this.projectInitializer.createProjectStructure();\n\n // 2.5. [EARS-G1] Copy Agent Prompt to project root for IDE access\n await this.projectInitializer.copyAgentPrompt();\n\n // 3. Trust Root Creation via IdentityAdapter [EARS-B1]\n const actor = await this.identityAdapter.createActor(\n {\n type: 'human' as const,\n displayName: options.actorName || 'Project Owner',\n roles: [\n 'admin',\n 'author',\n 'approver:product',\n 'approver:quality',\n 'developer',\n ] as const,\n },\n 'bootstrap'\n );\n\n // 4. Root Cycle Setup via BacklogAdapter [EARS-B2]\n const rootCycleData = await createCycleRecord({\n title: 'root',\n status: 'planning' as const,\n taskIds: [],\n });\n\n const rootCycle = await this.backlogAdapter.createCycle(rootCycleData, actor.id);\n\n // 5. Template Processing (if specified)\n let templateResult: TemplateProcessingResult | undefined;\n if (options.template) {\n const projectContext: ProjectContext = {\n projectId: this.generateProjectId(options.name),\n projectName: options.name,\n actorId: actor.id,\n rootCycle: rootCycle.id,\n };\n templateResult = await this.processBlueprintTemplate(options.template, projectContext);\n }\n\n // 6. Configuration Persistence via ProjectInitializer [EARS-B5]\n const projectId = this.generateProjectId(options.name);\n const config: GitGovConfig = {\n protocolVersion: '1.0.0',\n projectId,\n projectName: options.name,\n rootCycle: rootCycle.id,\n state: {\n branch: 'gitgov-state',\n sync: {\n strategy: 'manual',\n maxRetries: 3,\n pushIntervalSeconds: 30,\n batchIntervalSeconds: 60,\n },\n defaults: {\n pullScheduler: {\n defaultIntervalSeconds: 30,\n defaultEnabled: false,\n defaultContinueOnNetworkError: true,\n defaultStopOnConflict: false,\n },\n fileWatcher: {\n defaultDebounceMs: 300,\n defaultIgnoredPatterns: ['*.tmp', '.DS_Store', '*.swp'],\n },\n },\n },\n };\n\n await this.projectInitializer.writeConfig(config);\n\n // 6.5. Lazy State Branch Setup [EARS-A4, EARS-B3]\n // gitgov-state branch is NOT created here - it will be created lazily on first \"sync push\"\n // VCS status is read from envValidation (populated by IProjectInitializer)\n if (!envValidation.hasRemote || !envValidation.hasCommits) {\n const vcsWarnings: string[] = [];\n if (!envValidation.hasCommits) {\n vcsWarnings.push('No commits in current branch');\n }\n if (!envValidation.hasRemote) {\n vcsWarnings.push(\"No remote 'origin' configured\");\n }\n console.warn(`⚠️ ${vcsWarnings.join(', ')}.`);\n console.warn(` State sync will be available after 'git remote add origin <url>' and first commit.`);\n console.warn(` Run 'gitgov sync push' when ready to enable multi-machine collaboration.\\n`);\n }\n\n // 7. Session Initialization via ProjectInitializer\n await this.projectInitializer.initializeSession(actor.id);\n\n // 8. Git Integration\n await this.projectInitializer.setupGitIntegration();\n\n const initializationTime = Date.now() - startTime;\n\n return {\n success: true,\n projectId,\n projectName: options.name,\n rootCycle: rootCycle.id,\n actor: {\n id: actor.id,\n displayName: actor.displayName,\n publicKeyPath: this.projectInitializer.getActorPath(actor.id),\n },\n template: templateResult\n ? {\n processed: true,\n cyclesCreated: templateResult.cyclesCreated,\n tasksCreated: templateResult.tasksCreated,\n }\n : undefined,\n initializationTime,\n nextSteps: [\n \"Run 'gitgov status' to see your project overview\",\n \"Use 'gitgov task create' to add your first task\",\n \"Ask '@gitgov' for help, guidance, or project planning\",\n ],\n };\n } catch (error) {\n // Error Recovery - Automatic rollback via ProjectInitializer [EARS-A5]\n await this.projectInitializer.rollback();\n throw error;\n }\n }\n\n /**\n * [EARS-A2] Validates environment for GitGovernance initialization.\n * Delegates to IProjectInitializer.validateEnvironment().\n */\n async validateEnvironment(): Promise<EnvironmentValidation> {\n return this.projectInitializer.validateEnvironment();\n }\n\n /**\n * [EARS-A3] Processes blueprint template JSON with schema validation\n * creating cycles and tasks via factories. [EARS-B4]\n */\n async processBlueprintTemplate(\n templatePath: string,\n projectContext: ProjectContext\n ): Promise<TemplateProcessingResult> {\n const startTime = Date.now();\n const createdIds = { cycles: [] as string[], tasks: [] as string[] };\n\n try {\n // Load and validate template JSON\n const templateContent = await this.projectInitializer.readFile(templatePath);\n const template = JSON.parse(templateContent);\n\n if (!template.cycles || !Array.isArray(template.cycles)) {\n throw new DetailedValidationError('Invalid template format', [\n { field: 'cycles', message: 'must be an array', value: template.cycles },\n ]);\n }\n\n let cyclesCreated = 0;\n let tasksCreated = 0;\n\n // Process cycles\n for (const cycleTemplate of template.cycles) {\n const cycleData = await createCycleRecord({\n title: cycleTemplate.title || 'Untitled Cycle',\n status: cycleTemplate.status || 'planning',\n taskIds: [],\n });\n\n const cycle = await this.backlogAdapter.createCycle(cycleData, projectContext.actorId);\n createdIds.cycles.push(cycle.id);\n cyclesCreated++;\n\n // Process tasks for this cycle\n if (cycleTemplate.tasks && Array.isArray(cycleTemplate.tasks)) {\n for (const taskTemplate of cycleTemplate.tasks) {\n const taskData = await createTaskRecord({\n title: taskTemplate.title || 'Untitled Task',\n priority: taskTemplate.priority || 'medium',\n description: taskTemplate.description || '',\n tags: taskTemplate.tags || [],\n cycleIds: [cycle.id],\n });\n\n const task = await this.backlogAdapter.createTask(taskData, projectContext.actorId);\n createdIds.tasks.push(task.id);\n tasksCreated++;\n }\n }\n }\n\n const processingTime = Date.now() - startTime;\n\n return {\n success: true,\n cyclesCreated,\n tasksCreated,\n processingTime,\n createdIds,\n };\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n\n throw new DetailedValidationError('Template processing failed', [\n { field: 'template', message: error instanceof Error ? error.message : 'Unknown error', value: templatePath },\n ]);\n }\n }\n\n /**\n * [EARS-A5/A10] Cleans up partial setup artifacts if initialization fails.\n * Delegates to ProjectInitializer.rollback().\n */\n async rollbackPartialSetup(setupId: string): Promise<void> {\n try {\n await this.projectInitializer.rollback();\n } catch (error) {\n // Log error but don't throw to avoid masking original error\n console.warn(`Rollback failed for setup ${setupId}:`, error);\n }\n }\n\n // ===== FASE 2: FUTURE PLATFORM METHODS =====\n\n /**\n * [EARS-E1] Gets project information from config.json via ConfigManager (Fase 2)\n */\n async getProjectInfo(): Promise<ProjectInfo | null> {\n try {\n const config = await this.configManager.loadConfig();\n if (!config) {\n return null;\n }\n\n return {\n id: config.projectId,\n name: config.projectName,\n rootCycle: config.rootCycle,\n protocolVersion: config.protocolVersion,\n };\n } catch {\n return null;\n }\n }\n\n /**\n * [EARS-E2] Updates project configuration with validation (Fase 2)\n */\n async updateProjectConfig(updates: Partial<GitGovConfig>): Promise<void> {\n try {\n const currentConfig = await this.configManager.loadConfig();\n if (!currentConfig) {\n throw new Error('No existing configuration found');\n }\n // TODO: Implement config update with validation\n } catch (error) {\n throw new DetailedValidationError('Configuration update failed', [\n { field: 'config', message: error instanceof Error ? error.message : 'Unknown error', value: updates },\n ]);\n }\n }\n\n /**\n * Generates project report (Fase 2)\n */\n async generateProjectReport(): Promise<ProjectReport> {\n throw new Error('NotImplementedError: generateProjectReport not implemented yet');\n }\n\n // ===== PRIVATE HELPER METHODS =====\n\n private generateProjectId(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '-')\n .replace(/-+/g, '-');\n }\n}\n","import type { WorkflowRecord } from '../../record_types';\nimport type { TaskRecord } from '../../record_types';\nimport type { ActorRecord } from '../../record_types';\nimport type { FeedbackRecord } from '../../record_types';\nimport type { CycleRecord } from '../../record_types';\nimport type { Signature } from '../../record_types/embedded.types';\nimport { Schemas } from '../../record_schemas';\nimport { SchemaValidationCache } from '../../record_schemas/schema_cache';\nimport type { IFeedbackAdapter } from '../feedback_adapter';\nimport defaultConfig from './generated/kanban_workflow.json';\nimport scrumConfig from './generated/scrum_workflow.json';\n\ntype TaskStatus = TaskRecord['status'];\n\nexport type ValidationContext = {\n task: TaskRecord;\n actor?: ActorRecord;\n signatures?: Signature[];\n // Related records for complex rule validation\n feedbacks?: FeedbackRecord[];\n cycles?: CycleRecord[];\n // The target state for a transition, required for signature validation\n transitionTo?: TaskStatus;\n}\n\ntype TransitionRule = {\n to: TaskStatus;\n conditions: NonNullable<NonNullable<WorkflowRecord['state_transitions']>[string]>['requires'] | undefined;\n}\n\nexport interface IWorkflow {\n getTransitionRule(from: TaskStatus, to: TaskStatus, context: ValidationContext): Promise<TransitionRule | null>;\n validateSignature(signature: Signature, context: ValidationContext): Promise<boolean>;\n validateCustomRules(rules: string[], context: ValidationContext): Promise<boolean>;\n getAvailableTransitions(from: TaskStatus): Promise<TransitionRule[]>;\n}\n\n/**\n * WorkflowAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface WorkflowAdapterDependencies {\n // Configuration Layer\n config: WorkflowRecord; // ✅ Direct config object (validated)\n\n // Required: Cross-adapter dependencies (critical for custom rules)\n feedbackAdapter: IFeedbackAdapter; // Para assignment_required validation\n}\n\n/**\n * WorkflowAdapter - The Configurable Rules Engine\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between business rules and workflow validation.\n */\nexport class WorkflowAdapter implements IWorkflow {\n private config: WorkflowRecord;\n\n constructor(dependencies: WorkflowAdapterDependencies) {\n this.validateConfig(dependencies.config, dependencies.config.name || 'custom');\n this.config = dependencies.config;\n }\n\n // Factory methods para configuraciones predefinidas\n static createDefault(feedbackAdapter: IFeedbackAdapter): WorkflowAdapter {\n return new WorkflowAdapter({\n config: defaultConfig as unknown as WorkflowRecord,\n feedbackAdapter\n });\n }\n\n static createScrum(feedbackAdapter: IFeedbackAdapter): WorkflowAdapter {\n return new WorkflowAdapter({\n config: scrumConfig as unknown as WorkflowRecord,\n feedbackAdapter\n });\n }\n\n private validateConfig(config: WorkflowRecord, configName: string): void {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowRecord);\n const isValid = validator(config);\n\n if (!isValid) {\n const errors = validator.errors?.map(err => `${err.instancePath}: ${err.message}`).join(', ') || 'Unknown validation error';\n throw new Error(`Invalid ${configName} configuration: ${errors}`);\n }\n }\n\n /**\n * Gets the current configuration (already loaded and validated)\n */\n private getConfig(): WorkflowRecord {\n return this.config;\n }\n\n /**\n * Determines which signature group to use for validation.\n * Checks all available signature groups and returns the first one where\n * the actor has matching capability roles.\n */\n private getApplicableSignatureGroup(signatureRules: Record<string, any>, actor: ActorRecord): string {\n // Try to find a signature group where the actor has matching roles\n for (const [groupName, ruleSet] of Object.entries(signatureRules)) {\n if (groupName === '__default__') continue; // Check __default__ last\n\n const hasMatchingRole = actor.roles?.some(role => ruleSet.capability_roles?.includes(role));\n if (hasMatchingRole) {\n return groupName;\n }\n }\n\n // Fallback to __default__\n return '__default__';\n }\n\n /**\n * Determines if a state transition is legal according to the methodology\n */\n async getTransitionRule(from: TaskStatus, to: TaskStatus, _context: ValidationContext): Promise<TransitionRule | null> {\n const config = this.getConfig();\n\n // Look for transition rule in configuration\n const transitionConfig = config.state_transitions?.[to];\n\n if (!transitionConfig) {\n return null;\n }\n\n // Check if 'from' state is valid for this transition\n if (!transitionConfig.from.includes(from)) {\n return null;\n }\n\n return {\n to,\n conditions: transitionConfig.requires\n };\n }\n\n /**\n * Validates if an actor's signature meets the requirements for a transition\n */\n async validateSignature(signature: Signature, context: ValidationContext): Promise<boolean> {\n const config = this.getConfig();\n\n if (!context.transitionTo) {\n throw new Error('ValidationContext must include \"transitionTo\" for signature validation.');\n }\n const targetState = context.transitionTo;\n\n const actor = context.actor;\n if (!actor) {\n return false;\n }\n\n const transitionConfig = config.state_transitions?.[targetState];\n if (!transitionConfig) return false;\n\n // A transition must be possible from the current task state\n if (!transitionConfig.from.includes(context.task.status)) {\n return false;\n }\n\n const signatureRules = transitionConfig.requires.signatures;\n if (!signatureRules) return true; // No signature required for this transition\n\n // Determine which signature group applies based on actor's roles\n const signatureGroup = this.getApplicableSignatureGroup(signatureRules, actor);\n const ruleSet = signatureRules[signatureGroup];\n if (!ruleSet) return false;\n\n // 1. Check if the signature role matches the required role\n if (signature.role !== ruleSet.role) {\n return false;\n }\n\n // 2. Check if the actor has at least one of the required capability roles\n const hasRequiredCapability = actor.roles?.some(role => ruleSet.capability_roles.includes(role));\n if (!hasRequiredCapability) {\n return false;\n }\n\n // 3. Check for min_approvals (requires context.signatures)\n const allSignaturesForGate = context.signatures || [signature];\n const relevantSignatures = allSignaturesForGate.filter(s => {\n // This is a simplified check for actor capability. A real implementation\n // would need to fetch each signing actor's record. Here we assume\n // the provided actor in the context is the one signing.\n return s.role === ruleSet.role && hasRequiredCapability;\n });\n\n\n if (relevantSignatures.length < ruleSet.min_approvals) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Validates custom rules for a given context\n */\n async validateCustomRules(rules: string[], context: ValidationContext): Promise<boolean> {\n const config = this.getConfig();\n\n for (const ruleId of rules) {\n const customRule = config.custom_rules?.[ruleId];\n\n if (!customRule) {\n console.warn(`Unknown custom rule: ${ruleId}`);\n return false;\n }\n\n let isRuleValid = false;\n\n // Validate based on rule type\n switch (customRule.validation) {\n case 'assignment_required':\n // Validate that task has a resolved assignment feedback record\n const assignment = context.feedbacks?.find(f =>\n f.type === 'assignment' && f.status === 'resolved'\n );\n isRuleValid = !!assignment;\n break;\n\n case 'sprint_capacity':\n // Validate that task is in an active sprint (cycle)\n if (!context.task.cycleIds || context.task.cycleIds.length === 0) {\n isRuleValid = false;\n break;\n }\n const activeCycles = context.cycles?.filter(c => c.status === 'active');\n if (!activeCycles || activeCycles.length === 0) {\n isRuleValid = false;\n break;\n }\n // Check if the task's cycles overlap with any active cycles\n isRuleValid = context.task.cycleIds.some(tcId => activeCycles.some(ac => ac.id === tcId));\n break;\n\n case 'epic_complexity':\n // Validate epic promotion requirements\n const isEpic = context.task.tags?.some(tag => tag.startsWith('epic:'));\n if (!isEpic) {\n isRuleValid = true; // Rule doesn't apply to non-epics\n break;\n }\n // Decomposed epics are paused and have child cycles.\n isRuleValid = context.task.status === 'paused' && (context.task.cycleIds?.length || 0) > 0;\n break;\n\n case 'custom':\n // For now, custom rules just log and return true\n // Future: could be extended for specific use cases\n console.log(`Custom rule '${ruleId}' executed`);\n isRuleValid = true;\n break;\n\n default:\n console.warn(`Unknown validation type: ${customRule.validation}`);\n isRuleValid = false;\n break;\n }\n\n // If any rule fails, the entire validation fails\n if (!isRuleValid) {\n return false;\n }\n }\n\n return true; // All rules passed\n }\n\n\n async getAvailableTransitions(from: TaskStatus): Promise<TransitionRule[]> {\n const config = this.getConfig();\n if (!config.state_transitions) {\n return [];\n }\n\n const available: TransitionRule[] = [];\n for (const toState in config.state_transitions) {\n const transitionConfig = config.state_transitions[toState];\n if (transitionConfig && transitionConfig.from.includes(from)) {\n available.push({\n to: toState as TaskStatus,\n conditions: transitionConfig.requires,\n });\n }\n }\n return available;\n }\n}\n\n\n","{\n \"version\": \"1.0.0\",\n \"name\": \"GitGovernance Default Methodology\",\n \"description\": \"Standard GitGovernance workflow with quality gates and agent collaboration\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"submitter\",\n \"capability_roles\": [\n \"author\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n },\n \"design\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:design\"\n ],\n \"min_approvals\": 1\n },\n \"quality\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\",\n \"custom_rules\": [\n \"task_must_have_valid_assignment_for_executor\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n },\n \"discarded\": {\n \"from\": [\n \"ready\",\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task cancel\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"canceller\",\n \"capability_roles\": [\n \"approver:product\",\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"task_must_have_valid_assignment_for_executor\": {\n \"description\": \"Task must have a valid assignment before execution can begin\",\n \"validation\": \"assignment_required\"\n },\n \"task_must_be_in_active_sprint\": {\n \"description\": \"Task must belong to an active sprint cycle\",\n \"validation\": \"sprint_capacity\"\n },\n \"epic_promotion_required\": {\n \"description\": \"Complex tasks must be promoted to epic with child cycles\",\n \"validation\": \"epic_complexity\"\n }\n },\n \"view_configs\": {\n \"kanban-4col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"In Progress\": [\n \"review\",\n \"ready\",\n \"active\"\n ],\n \"Review\": [\n \"done\"\n ],\n \"Done\": [\n \"archived\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"horizontal\"\n },\n \"kanban-7col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"Review\": [\n \"review\"\n ],\n \"Ready\": [\n \"ready\"\n ],\n \"Active\": [\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ],\n \"Archived\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"vertical\"\n }\n }\n}","{\n \"version\": \"1.0.0\",\n \"name\": \"Scrum Framework\",\n \"description\": \"Agile Scrum methodology with sprint-based workflow and defined roles\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"product_owner\",\n \"capability_roles\": [\n \"product:owner\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"custom_rules\": [\n \"task_fits_in_sprint_capacity\"\n ]\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"sprint_started\",\n \"custom_rules\": [\n \"task_assigned_to_team_member\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"scrum_master\",\n \"capability_roles\": [\n \"scrum:master\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n }\n },\n \"custom_rules\": {\n \"task_fits_in_sprint_capacity\": {\n \"description\": \"Task story points must fit within remaining sprint capacity\",\n \"validation\": \"sprint_capacity\"\n },\n \"task_assigned_to_team_member\": {\n \"description\": \"Task must be assigned to an active team member\",\n \"validation\": \"assignment_required\"\n }\n },\n \"view_configs\": {\n \"scrum-board\": {\n \"columns\": {\n \"Product Backlog\": [\n \"draft\"\n ],\n \"Sprint Backlog\": [\n \"review\",\n \"ready\"\n ],\n \"In Progress\": [\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ],\n \"Retrospective\": [\n \"archived\"\n ]\n },\n \"theme\": \"default\",\n \"layout\": \"horizontal\"\n },\n \"scrum-detailed\": {\n \"columns\": {\n \"Product Backlog\": [\n \"draft\"\n ],\n \"Groomed\": [\n \"review\"\n ],\n \"Sprint Ready\": [\n \"ready\"\n ],\n \"In Development\": [\n \"active\"\n ],\n \"Demo Ready\": [\n \"done\"\n ],\n \"Sprint Closed\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"vertical\"\n },\n \"scrum-product-owner\": {\n \"columns\": {\n \"Backlog Items\": [\n \"draft\"\n ],\n \"Ready for Sprint\": [\n \"review\"\n ],\n \"Sprint Committed\": [\n \"ready\"\n ],\n \"In Development\": [\n \"active\"\n ],\n \"Ready for Review\": [\n \"done\"\n ],\n \"Released\": [\n \"archived\"\n ],\n \"Issues\": [\n \"paused\",\n \"discarded\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"grid\"\n },\n \"scrum-developer\": {\n \"columns\": {\n \"To Do\": [\n \"ready\"\n ],\n \"In Progress\": [\n \"active\"\n ],\n \"Code Review\": [\n \"done\"\n ],\n \"Done\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ]\n },\n \"theme\": \"dark\",\n \"layout\": \"horizontal\"\n },\n \"scrum-master-dashboard\": {\n \"columns\": {\n \"Sprint Planning\": [\n \"draft\",\n \"review\"\n ],\n \"Active Sprint\": [\n \"ready\",\n \"active\"\n ],\n \"Sprint Review\": [\n \"done\"\n ],\n \"Retrospective\": [\n \"archived\"\n ],\n \"Impediments\": [\n \"paused\",\n \"discarded\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"grid\"\n }\n },\n \"agent_integration\": {\n \"description\": \"Agent integration proposal for Scrum methodology automation\",\n \"required_agents\": [\n {\n \"id\": \"agent:scrum-master\",\n \"triggers\": [\n {\n \"event\": \"sprint_end_approaching\",\n \"action\": \"create_sprint_review_tasks\"\n },\n {\n \"cron\": \"0 9 * * 1-5\",\n \"event\": \"daily_standup_time\",\n \"action\": \"generate_standup_report\"\n },\n {\n \"event\": \"impediment_detected\",\n \"action\": \"escalate_to_product_owner\"\n }\n ]\n },\n {\n \"id\": \"agent:product-owner-assistant\",\n \"triggers\": [\n {\n \"event\": \"backlog_grooming_needed\",\n \"action\": \"prioritize_product_backlog\"\n },\n {\n \"event\": \"sprint_planning_started\",\n \"action\": \"assist_sprint_planning\"\n }\n ]\n }\n ]\n }\n}","/**\n * ConfigManager Module\n *\n * Provides typed access to GitGovernance project configuration (config.json).\n * Configuration is versioned in Git and shared between collaborators.\n *\n * @see packages/blueprints/03_products/protocol/10_appendices/config_file.md\n */\n\n// Types\nexport type {\n GitGovConfig,\n AuditState,\n SyncConfig,\n SyncDefaults,\n AuditStateUpdate,\n IConfigManager\n} from './config_manager.types';\n\n// Implementation\nexport { ConfigManager } from './config_manager';\n\n// Re-export session types for backward compatibility during migration\n// TODO: Remove these after full migration to SessionManager\nexport type { GitGovSession, ActorState, SyncStatus } from '../session_manager';\n\n// Re-export SessionManager for backward compatibility during migration\n// TODO: Remove after full migration - use direct import from '../session_manager'\nexport { SessionManager } from '../session_manager';\n","/**\n * ConfigManager - Project Configuration Manager\n *\n * Provides typed access to GitGovernance project configuration (config.json).\n * Configuration is versioned in Git and shared between collaborators.\n *\n * Uses ConfigStore abstraction for backend-agnostic persistence.\n *\n * NOTE: Session state (.session.json) is handled by SessionManager, not ConfigManager.\n *\n * @see packages/blueprints/03_products/core/specs/modules/config_session_module.md\n * @see packages/blueprints/03_products/protocol/10_appendices/config_file.md\n */\n\nimport type { ConfigStore } from '../config_store/config_store';\nimport type {\n IConfigManager,\n GitGovConfig,\n AuditState,\n SyncConfig,\n SyncDefaults,\n AuditStateUpdate\n} from './config_manager.types';\n\n/**\n * Configuration Manager Class\n *\n * Provides typed access to GitGovernance project configuration.\n * Uses ConfigStore abstraction for backend-agnostic persistence.\n *\n * @example\n * ```typescript\n * // Production usage\n * import { FsConfigStore } from '@gitgov/core/fs';\n * const configStore = new FsConfigStore('/path/to/project');\n * const configManager = new ConfigManager(configStore);\n *\n * // Test usage\n * import { MemoryConfigStore } from '@gitgov/core/memory';\n * const configStore = new MemoryConfigStore();\n * configStore.setConfig({ ... });\n * const configManager = new ConfigManager(configStore);\n * ```\n */\nexport class ConfigManager implements IConfigManager {\n private readonly configStore: ConfigStore;\n\n constructor(configStore: ConfigStore) {\n this.configStore = configStore;\n }\n\n /**\n * Load GitGovernance configuration\n */\n async loadConfig(): Promise<GitGovConfig | null> {\n return this.configStore.loadConfig();\n }\n\n /**\n * Get root cycle from configuration\n */\n async getRootCycle(): Promise<string | null> {\n const config = await this.loadConfig();\n return config?.rootCycle || null;\n }\n\n /**\n * Get project information from configuration\n */\n async getProjectInfo(): Promise<{ id: string; name: string } | null> {\n const config = await this.loadConfig();\n if (!config) return null;\n\n return {\n id: config.projectId,\n name: config.projectName\n };\n }\n\n /**\n * Get sync configuration from config.json\n * Returns sync strategy and related settings with defaults\n */\n async getSyncConfig(): Promise<SyncConfig | null> {\n const config = await this.loadConfig();\n if (!config?.state?.sync) return null;\n\n return {\n strategy: config.state.sync.strategy || \"manual\",\n maxRetries: config.state.sync.maxRetries || 3,\n pushIntervalSeconds: config.state.sync.pushIntervalSeconds || 30,\n batchIntervalSeconds: config.state.sync.batchIntervalSeconds || 60\n };\n }\n\n /**\n * Get sync defaults from config.json\n * Returns recommended defaults for pullScheduler and fileWatcher\n */\n async getSyncDefaults(): Promise<SyncDefaults> {\n const config = await this.loadConfig();\n\n return {\n pullScheduler: {\n defaultIntervalSeconds: config?.state?.defaults?.pullScheduler?.defaultIntervalSeconds || 30,\n defaultEnabled: config?.state?.defaults?.pullScheduler?.defaultEnabled || false,\n defaultContinueOnNetworkError: config?.state?.defaults?.pullScheduler?.defaultContinueOnNetworkError ?? true,\n defaultStopOnConflict: config?.state?.defaults?.pullScheduler?.defaultStopOnConflict || false\n },\n fileWatcher: {\n defaultDebounceMs: config?.state?.defaults?.fileWatcher?.defaultDebounceMs || 300,\n defaultIgnoredPatterns: config?.state?.defaults?.fileWatcher?.defaultIgnoredPatterns || [\"*.tmp\", \".DS_Store\", \"*.swp\"]\n }\n };\n }\n\n /**\n * Get audit state from config.json\n * Returns last full audit commit and timestamp for incremental mode\n */\n async getAuditState(): Promise<AuditState> {\n const config = await this.loadConfig();\n return {\n lastFullAuditCommit: config?.state?.audit?.lastFullAuditCommit || null,\n lastFullAuditTimestamp: config?.state?.audit?.lastFullAuditTimestamp || null,\n lastFullAuditFindingsCount: config?.state?.audit?.lastFullAuditFindingsCount ?? null\n };\n }\n\n /**\n * Update audit state in config.json after a full audit\n * This is used to enable incremental audits\n */\n async updateAuditState(auditState: AuditStateUpdate): Promise<void> {\n const config = await this.loadConfig();\n if (!config) {\n throw new Error('Cannot update audit state: config.json not found');\n }\n\n if (!config.state) {\n config.state = {};\n }\n\n config.state.audit = {\n lastFullAuditCommit: auditState.lastFullAuditCommit,\n lastFullAuditTimestamp: auditState.lastFullAuditTimestamp,\n lastFullAuditFindingsCount: auditState.lastFullAuditFindingsCount\n };\n\n await this.configStore.saveConfig(config);\n }\n\n /**\n * Get state branch name from configuration\n */\n async getStateBranch(): Promise<string> {\n const config = await this.loadConfig();\n return config?.state?.branch || 'gitgov-state';\n }\n}\n","export * from \"./actor_factory\";\nexport * from \"./agent_factory\";\nexport * from \"./task_factory\";\nexport * from \"./cycle_factory\";\nexport * from \"./execution_factory\";\nexport * from \"./changelog_factory\";\nexport * from \"./feedback_factory\";\nexport * from \"./workflow_factory\";\nexport * from \"./embedded_metadata_factory\";\n","import type { ValidateFunction } from \"ajv\";\nimport type { WorkflowRecord } from \"../record_types\";\nimport { SchemaValidationCache } from \"../record_schemas/schema_cache\";\nimport { Schemas } from '../record_schemas';\n\n// --- Schema Validation ---\nexport function validateWorkflowConfigSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid WorkflowConfig.\n */\nexport function isWorkflowConfig(data: unknown): data is WorkflowRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a WorkflowConfig and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateWorkflowConfigDetailed(data: unknown): {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n} {\n const [isValid, ajvErrors] = validateWorkflowConfigSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map(error => ({\n field: error.instancePath || error.schemaPath || 'root',\n message: error.message || 'Validation failed',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n/**\n * Validates configuration structure and business rules\n * @param config The workflow methodology configuration to validate\n */\nexport function validateWorkflowConfigBusinessRules(\n config: WorkflowRecord\n): {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n} {\n const errors: Array<{ field: string; message: string; value: unknown }> = [];\n\n // Validate state_transitions have valid structure\n const validStates = ['draft', 'review', 'ready', 'active', 'done', 'archived', 'paused', 'discarded'];\n\n for (const [targetState, transition] of Object.entries(config.state_transitions)) {\n if (!validStates.includes(targetState)) {\n errors.push({\n field: `state_transitions.${targetState}`,\n message: `Invalid target state: ${targetState}`,\n value: targetState\n });\n }\n\n // Validate 'from' states are valid\n if (transition?.from) {\n for (const fromState of transition.from) {\n if (!validStates.includes(fromState)) {\n errors.push({\n field: `state_transitions.${targetState}.from`,\n message: `Invalid source state: ${fromState}`,\n value: fromState\n });\n }\n }\n }\n\n // Validate custom_rules reference existing rules\n if (transition?.requires?.custom_rules && config.custom_rules) {\n for (const ruleId of transition.requires.custom_rules) {\n if (!config.custom_rules[ruleId]) {\n errors.push({\n field: `state_transitions.${targetState}.requires.custom_rules`,\n message: `Custom rule '${ruleId}' not defined in custom_rules section`,\n value: ruleId\n });\n }\n }\n }\n }\n\n // Validate custom_rules have valid validation types\n if (config.custom_rules) {\n const validValidationTypes = ['assignment_required', 'sprint_capacity', 'epic_complexity', 'custom'];\n\n for (const [ruleId, rule] of Object.entries(config.custom_rules)) {\n if (rule && !validValidationTypes.includes(rule.validation)) {\n errors.push({\n field: `custom_rules.${ruleId}.validation`,\n message: `Invalid validation type: ${rule.validation}`,\n value: rule.validation\n });\n }\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors\n };\n}\n","import type { WorkflowRecord } from \"../record_types\";\nimport {\n validateWorkflowConfigDetailed,\n validateWorkflowConfigBusinessRules\n} from \"../record_validations/workflow_validator\";\nimport { DetailedValidationError } from \"../record_validations/common\";\n\n/**\n * Creates a new, fully-formed WorkflowConfig with validation.\n * Follows the same pattern as createTaskRecord, createActorRecord, etc.\n */\nexport function createWorkflowConfig(\n payload: Partial<WorkflowRecord>\n): WorkflowRecord {\n\n // Build config with defaults for optional fields\n const config: WorkflowRecord = {\n version: payload.version || '1.0.0',\n name: payload.name || 'Custom Methodology',\n description: payload.description,\n state_transitions: payload.state_transitions || {\n review: {\n from: ['draft'],\n requires: {\n command: 'gitgov task submit',\n signatures: {\n '__default__': {\n role: 'submitter',\n capability_roles: ['author'],\n min_approvals: 1\n }\n }\n }\n }\n },\n custom_rules: payload.custom_rules,\n ...payload,\n } as WorkflowRecord;\n\n // Use validator to check schema compliance with detailed errors\n const schemaValidation = validateWorkflowConfigDetailed(config);\n if (!schemaValidation.isValid) {\n throw new DetailedValidationError('WorkflowConfig', schemaValidation.errors);\n }\n\n // Use business rules validator for additional validation\n const businessRulesValidation = validateWorkflowConfigBusinessRules(config);\n if (!businessRulesValidation.isValid) {\n throw new DetailedValidationError('WorkflowConfig (Business Rules)', businessRulesValidation.errors);\n }\n\n return config;\n}\n\n/**\n * Creates a default GitGovernance workflow methodology configuration\n */\nexport async function createDefaultWorkflowConfig(): Promise<WorkflowRecord> {\n return createWorkflowConfig({\n version: '1.0.0',\n name: 'GitGovernance Default Methodology',\n description: 'Standard GitGovernance workflow with quality gates and agent collaboration',\n state_transitions: {\n review: {\n from: ['draft'],\n requires: {\n command: 'gitgov task submit',\n signatures: {\n '__default__': {\n role: 'submitter',\n capability_roles: ['author'],\n min_approvals: 1\n }\n }\n }\n },\n ready: {\n from: ['review'],\n requires: {\n command: 'gitgov task approve',\n signatures: {\n '__default__': {\n role: 'approver',\n capability_roles: ['approver:product'],\n min_approvals: 1\n },\n 'design': {\n role: 'approver',\n capability_roles: ['approver:design'],\n min_approvals: 1\n },\n 'quality': {\n role: 'approver',\n capability_roles: ['approver:quality'],\n min_approvals: 1\n }\n }\n }\n },\n active: {\n from: ['ready'],\n requires: {\n event: 'first_execution_record_created',\n custom_rules: ['task_must_have_valid_assignment_for_executor']\n }\n },\n done: {\n from: ['active'],\n requires: {\n command: 'gitgov task complete',\n signatures: {\n '__default__': {\n role: 'approver',\n capability_roles: ['approver:quality'],\n min_approvals: 1\n }\n }\n }\n },\n archived: {\n from: ['done'],\n requires: {\n event: 'changelog_record_created'\n }\n },\n paused: {\n from: ['active', 'review'],\n requires: {\n event: 'feedback_blocking_created'\n }\n }\n },\n custom_rules: {\n 'task_must_have_valid_assignment_for_executor': {\n description: 'Task must have a valid assignment before execution can begin',\n validation: 'assignment_required'\n },\n 'task_must_be_in_active_sprint': {\n description: 'Task must belong to an active sprint cycle',\n validation: 'sprint_capacity'\n },\n 'epic_promotion_required': {\n description: 'Complex tasks must be promoted to epic with child cycles',\n validation: 'epic_complexity'\n }\n }\n });\n}\n","import type { EmbeddedMetadataRecord, GitGovRecordPayload } from '../record_types';\nimport type { Signature, EmbeddedMetadataHeader } from '../record_types/embedded.types';\nimport { validateEmbeddedMetadataDetailed } from '../record_validations/embedded_metadata_validator';\nimport { DetailedValidationError } from '../record_validations/common';\nimport { calculatePayloadChecksum } from '../crypto/checksum';\nimport { signPayload } from '../crypto/signatures';\n\n/**\n * Configuration for signature generation\n * Extends Signature with privateKey for signing\n */\nexport type SignatureConfig = Partial<Pick<Signature, 'keyId' | 'role' | 'notes'>> & {\n /** Private key for signing (if not provided, creates unsigned test signature) */\n privateKey?: string;\n};\n\n/**\n * Options for creating an EmbeddedMetadataRecord\n */\nexport type CreateEmbeddedMetadataOptions = {\n /** Header configuration (partial override, excludes auto-generated fields) */\n header?: Partial<Pick<EmbeddedMetadataHeader, 'version' | 'type' | 'schemaUrl' | 'schemaChecksum'>>;\n /** Signature configuration (if not provided, uses default test signature) */\n signature?: SignatureConfig;\n /** Custom signatures array (if provided, overrides signature config) */\n signatures?: Signature[];\n};\n\n/**\n * Creates a test signature for development/testing purposes (unsigned)\n * Use this only for testing when you don't have a real private key\n * \n * @param keyId - The key ID for the signature (default: 'human:test-user')\n * @param role - The role for the signature (default: 'author')\n * @param notes - Notes for the signature (default: 'Test signature - unsigned')\n * @returns Signature object (with dummy signature value)\n */\nexport function createTestSignature(\n keyId: string = 'human:test-user',\n role: string = 'author',\n notes: string = 'Test signature - unsigned'\n): Signature {\n const timestamp = Math.floor(Date.now() / 1000);\n return {\n keyId,\n role,\n notes,\n signature: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==', // Dummy 88-char base64 for testing (86 chars + ==, matches Ed25519 signature format)\n timestamp\n };\n}\n\n/**\n * Infers the header type from the payload structure\n * \n * @param payload - The record payload\n * @returns The inferred type string\n */\nfunction inferTypeFromPayload(payload: GitGovRecordPayload): string {\n // Check for distinctive properties of each record type\n if ('engine' in payload) return 'agent';\n if ('taskId' in payload && 'result' in payload) return 'execution';\n if ('relatedTasks' in payload && 'completedAt' in payload) return 'changelog';\n if ('entityType' in payload && 'entityId' in payload) return 'feedback';\n if ('status' in payload && 'taskIds' in payload) return 'cycle';\n if ('priority' in payload && 'description' in payload) return 'task';\n if ('displayName' in payload && 'publicKey' in payload) return 'actor';\n\n return 'custom';\n}\n\n\n/**\n * Creates a complete EmbeddedMetadataRecord with validation\n * \n * @param payload - The record payload (ActorRecord, TaskRecord, etc.)\n * @param options - Optional configuration for the embedded metadata\n * @returns Promise<EmbeddedMetadataRecord<T>> - The validated embedded metadata record\n * \n * @example\n * ```typescript\n * const actorPayload: ActorRecord = {\n * id: 'human:john-doe',\n * type: 'human',\n * displayName: 'John Doe',\n * publicKey: 'abc123...',\n * roles: ['developer']\n * };\n * \n * const embedded = createEmbeddedMetadataRecord(actorPayload);\n * ```\n */\nexport function createEmbeddedMetadataRecord<T extends GitGovRecordPayload>(\n payload: T,\n options: CreateEmbeddedMetadataOptions = {}\n): EmbeddedMetadataRecord<T> {\n const inferredType = inferTypeFromPayload(payload);\n const type = options.header?.type || inferredType;\n\n // Calculate real payload checksum using crypto module\n const payloadChecksum = calculatePayloadChecksum(payload);\n\n // Generate signature(s)\n let signatures: Signature[];\n if (options.signatures) {\n // Use provided signatures array\n signatures = options.signatures;\n } else if (options.signature?.privateKey) {\n // Sign with provided private key\n const keyId = options.signature.keyId || 'human:test-user';\n const role = options.signature.role || 'author';\n const notes = options.signature.notes || 'Created via factory';\n signatures = [signPayload(payload, options.signature.privateKey, keyId, role, notes)];\n } else {\n // Create unsigned test signature\n const keyId = options.signature?.keyId || 'human:test-user';\n const role = options.signature?.role || 'author';\n const notes = options.signature?.notes || 'Test signature - unsigned';\n signatures = [createTestSignature(keyId, role, notes)];\n }\n\n // Build header (using Record for flexibility, will be validated)\n const header: Record<string, unknown> = {\n version: '1.0', // Always 1.0 (schema enforces this)\n type: type,\n payloadChecksum,\n signatures,\n ...(type === 'custom' && {\n schemaUrl: options.header?.schemaUrl,\n schemaChecksum: options.header?.schemaChecksum\n })\n };\n\n const embeddedRecord = {\n header,\n payload\n } as EmbeddedMetadataRecord<T>;\n\n // Validate the complete embedded metadata record\n const validation = validateEmbeddedMetadataDetailed(embeddedRecord);\n if (!validation.isValid) {\n throw new DetailedValidationError('EmbeddedMetadataRecord', validation.errors);\n }\n\n return embeddedRecord;\n}\n\n","/**\n * GitModule - Low-level Git Operations\n *\n * This module provides backend-agnostic access to Git operations.\n *\n * IMPORTANT: This module only exports the interface and types.\n * For implementations, use:\n * - @gitgov/core/fs for LocalGitModule (CLI-based)\n * - @gitgov/core/memory for MemoryGitModule (testing)\n *\n * @example\n * ```typescript\n * // Import interface and types\n * import type { IGitModule } from '@gitgov/core';\n *\n * // Import CLI implementation from fs entry point\n * import { LocalGitModule } from '@gitgov/core/fs';\n *\n * // Import memory implementation from memory entry point\n * import { MemoryGitModule } from '@gitgov/core/memory';\n * ```\n *\n * @module git\n */\n\nimport type {\n ExecOptions,\n ExecResult,\n GetCommitHistoryOptions,\n CommitInfo,\n ChangedFile,\n CommitAuthor,\n} from './types';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// INTERFACE\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * IGitModule - Interface for Git operations\n *\n * Implementations:\n * - LocalGitModule: Uses execCommand to run git CLI (production)\n * - MemoryGitModule: In-memory mock for unit tests\n * - Future: GitHubGitModule for SaaS API-based operations\n *\n * All methods are async to support both local CLI execution\n * and future API-based implementations (GitHub REST/GraphQL).\n */\nexport interface IGitModule {\n // Command Execution\n exec(command: string, args: string[], options?: ExecOptions): Promise<ExecResult>;\n\n // Initialization\n init(): Promise<void>;\n\n // Read Operations\n getRepoRoot(): Promise<string>;\n getCurrentBranch(): Promise<string>;\n getCommitHash(ref?: string): Promise<string>;\n setConfig(key: string, value: string, scope?: 'local' | 'global' | 'system'): Promise<void>;\n getMergeBase(branchA: string, branchB: string): Promise<string>;\n getChangedFiles(fromCommit: string, toCommit: string, pathFilter: string): Promise<ChangedFile[]>;\n getStagedFiles(): Promise<string[]>;\n getFileContent(commitHash: string, filePath: string): Promise<string>;\n getCommitHistory(branch: string, options?: GetCommitHistoryOptions): Promise<CommitInfo[]>;\n getCommitHistoryRange(fromHash: string, toHash: string, options?: GetCommitHistoryOptions): Promise<CommitInfo[]>;\n getCommitMessage(commitHash: string): Promise<string>;\n hasUncommittedChanges(pathFilter?: string): Promise<boolean>;\n isRebaseInProgress(): Promise<boolean>;\n branchExists(branchName: string): Promise<boolean>;\n listRemoteBranches(remoteName: string): Promise<string[]>;\n isRemoteConfigured(remoteName: string): Promise<boolean>;\n getBranchRemote(branchName: string): Promise<string | null>;\n getConflictedFiles(): Promise<string[]>;\n\n // Write Operations\n checkoutBranch(branchName: string): Promise<void>;\n stash(message?: string): Promise<string | null>;\n stashPop(): Promise<boolean>;\n stashDrop(stashHash?: string): Promise<void>;\n checkoutOrphanBranch(branchName: string): Promise<void>;\n fetch(remote: string): Promise<void>;\n pull(remote: string, branchName: string): Promise<void>;\n pullRebase(remote: string, branchName: string): Promise<void>;\n resetHard(target: string): Promise<void>;\n checkoutFilesFromBranch(sourceBranch: string, filePaths: string[]): Promise<void>;\n add(filePaths: string[], options?: { force?: boolean }): Promise<void>;\n rm(filePaths: string[]): Promise<void>;\n commit(message: string, author?: CommitAuthor): Promise<string>;\n commitAllowEmpty(message: string, author?: CommitAuthor): Promise<string>;\n push(remote: string, branchName: string): Promise<void>;\n pushWithUpstream(remote: string, branchName: string): Promise<void>;\n setUpstream(branchName: string, remote: string, remoteBranch: string): Promise<void>;\n\n // Rebase Operations\n rebaseContinue(): Promise<string>;\n rebaseAbort(): Promise<void>;\n createBranch(branchName: string, startPoint?: string): Promise<void>;\n rebase(targetBranch: string): Promise<void>;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// TYPES\n// ═══════════════════════════════════════════════════════════════════════════\n\nexport type {\n GitModuleDependencies,\n ExecOptions,\n ExecResult,\n GetCommitHistoryOptions,\n CommitInfo,\n ChangedFile,\n CommitAuthor,\n} from './types';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// ERRORS\n// ═══════════════════════════════════════════════════════════════════════════\n\nexport {\n GitError,\n GitCommandError,\n BranchNotFoundError,\n BranchAlreadyExistsError,\n FileNotFoundError,\n MergeConflictError,\n RebaseConflictError,\n RebaseNotInProgressError,\n} from './errors';\n","/**\n * Custom Error Classes for GitModule\n * \n * These errors provide typed exceptions for better error handling\n * and diagnostics in the Git module operations.\n */\n\n/**\n * Base error class for all Git-related errors\n */\nexport class GitError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'GitError';\n Object.setPrototypeOf(this, GitError.prototype);\n }\n}\n\n/**\n * Error thrown when a Git command fails\n */\nexport class GitCommandError extends GitError {\n public readonly stderr: string;\n public readonly stdout?: string | undefined;\n public readonly command?: string | undefined;\n\n constructor(message: string, stderr: string = '', command?: string | undefined, stdout?: string) {\n super(message);\n this.name = 'GitCommandError';\n this.stderr = stderr;\n this.stdout = stdout;\n this.command = command;\n Object.setPrototypeOf(this, GitCommandError.prototype);\n }\n}\n\n/**\n * Error thrown when a branch does not exist\n */\nexport class BranchNotFoundError extends GitError {\n public readonly branchName: string;\n\n constructor(branchName: string) {\n super(`Branch not found: ${branchName}`);\n this.name = 'BranchNotFoundError';\n this.branchName = branchName;\n Object.setPrototypeOf(this, BranchNotFoundError.prototype);\n }\n}\n\n/**\n * Error thrown when a file does not exist in a commit\n */\nexport class FileNotFoundError extends GitError {\n public readonly filePath: string;\n public readonly commitHash: string;\n\n constructor(filePath: string, commitHash: string) {\n super(`File not found: ${filePath} in commit ${commitHash}`);\n this.name = 'FileNotFoundError';\n this.filePath = filePath;\n this.commitHash = commitHash;\n Object.setPrototypeOf(this, FileNotFoundError.prototype);\n }\n}\n\n/**\n * Error thrown when a merge conflict occurs\n */\nexport class MergeConflictError extends GitError {\n public readonly conflictedFiles: string[];\n\n constructor(conflictedFiles: string[]) {\n super(`Merge conflict detected in ${conflictedFiles.length} file(s)`);\n this.name = 'MergeConflictError';\n this.conflictedFiles = conflictedFiles;\n Object.setPrototypeOf(this, MergeConflictError.prototype);\n }\n}\n\n/**\n * Error thrown when a rebase conflict occurs\n */\nexport class RebaseConflictError extends GitError {\n public readonly conflictedFiles: string[];\n\n constructor(conflictedFiles: string[]) {\n super(`Rebase conflict detected in ${conflictedFiles.length} file(s)`);\n this.name = 'RebaseConflictError';\n this.conflictedFiles = conflictedFiles;\n Object.setPrototypeOf(this, RebaseConflictError.prototype);\n }\n}\n\n/**\n * Error thrown when trying to continue/abort a rebase that is not in progress\n */\nexport class RebaseNotInProgressError extends GitError {\n constructor() {\n super('No rebase in progress');\n this.name = 'RebaseNotInProgressError';\n Object.setPrototypeOf(this, RebaseNotInProgressError.prototype);\n }\n}\n\n/**\n * Error thrown when trying to create a branch that already exists\n */\nexport class BranchAlreadyExistsError extends GitError {\n public readonly branchName: string;\n\n constructor(branchName: string) {\n super(`Branch already exists: ${branchName}`);\n this.name = 'BranchAlreadyExistsError';\n this.branchName = branchName;\n Object.setPrototypeOf(this, BranchAlreadyExistsError.prototype);\n }\n}\n\n","export * from './key_provider';\nexport * from './fs';\nexport * from './memory';\n","/**\n * KeyProvider Interface\n *\n * Abstracts private key storage for Actor signing operations.\n * Enables different backends: filesystem (development), environment variables (serverless),\n * or cloud KMS (enterprise).\n *\n * @module key_provider\n */\n\n/**\n * Error codes for KeyProvider operations.\n */\nexport type KeyProviderErrorCode =\n | 'KEY_NOT_FOUND'\n | 'KEY_READ_ERROR'\n | 'KEY_WRITE_ERROR'\n | 'KEY_DELETE_ERROR'\n | 'INVALID_KEY_FORMAT'\n | 'INVALID_ACTOR_ID';\n\n/**\n * Error thrown when key operations fail.\n */\nexport class KeyProviderError extends Error {\n constructor(\n message: string,\n public readonly code: KeyProviderErrorCode,\n public readonly actorId?: string\n ) {\n super(message);\n this.name = 'KeyProviderError';\n }\n}\n\n/**\n * Interface for managing private key storage.\n * Implementations handle the actual persistence mechanism.\n *\n * @example\n * ```typescript\n * // Filesystem backend (development)\n * const provider = new FsKeyProvider({ actorsDir: '.gitgov/actors' });\n *\n * // Environment backend (serverless)\n * const provider = new EnvKeyProvider({ prefix: 'GITGOV_KEY_' });\n *\n * // Usage\n * const privateKey = await provider.getPrivateKey('actor:human:alice');\n * if (privateKey) {\n * const signature = signPayload(payload, privateKey, actorId, role);\n * }\n * ```\n */\nexport interface KeyProvider {\n /**\n * Retrieves the private key for an actor.\n * @param actorId - The actor's ID (e.g., 'actor:human:alice')\n * @returns The base64-encoded private key, or null if not found\n */\n getPrivateKey(actorId: string): Promise<string | null>;\n\n /**\n * Stores a private key for an actor.\n * @param actorId - The actor's ID\n * @param privateKey - The base64-encoded private key\n * @throws KeyProviderError if write fails\n */\n setPrivateKey(actorId: string, privateKey: string): Promise<void>;\n\n /**\n * Checks if a private key exists for an actor.\n * @param actorId - The actor's ID\n * @returns true if key exists, false otherwise\n */\n hasPrivateKey(actorId: string): Promise<boolean>;\n\n /**\n * Deletes the private key for an actor.\n * @param actorId - The actor's ID\n * @returns true if key was deleted, false if it didn't exist\n */\n deletePrivateKey(actorId: string): Promise<boolean>;\n}\n","/**\n * FsKeyProvider - Filesystem-based KeyProvider implementation\n *\n * Stores private keys alongside actor records in .gitgov/actors/{actorId}.key\n * Used in development and CLI environments.\n *\n * @module key_provider/fs/fs_key_provider\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport type { KeyProvider } from '../key_provider';\nimport { KeyProviderError } from '../key_provider';\n\n/**\n * Options for FsKeyProvider.\n */\nexport interface FsKeyProviderOptions {\n /** Directory where key files are stored (same as actors: .gitgov/actors) */\n actorsDir: string;\n /** File extension for key files (default: '.key') */\n extension?: string;\n /** File permissions for key files (default: 0o600 - owner read/write only) */\n fileMode?: number;\n}\n\n/**\n * Filesystem-based KeyProvider implementation.\n * Keys are stored alongside actor records with .key extension.\n *\n * @example\n * ```typescript\n * const provider = new FsKeyProvider({ actorsDir: '.gitgov/actors' });\n * await provider.setPrivateKey('actor:human:alice', 'base64PrivateKey...');\n * const key = await provider.getPrivateKey('actor:human:alice');\n * ```\n */\nexport class FsKeyProvider implements KeyProvider {\n private readonly actorsDir: string;\n private readonly extension: string;\n private readonly fileMode: number;\n\n constructor(options: FsKeyProviderOptions) {\n this.actorsDir = options.actorsDir;\n this.extension = options.extension ?? '.key';\n this.fileMode = options.fileMode ?? 0o600;\n }\n\n /**\n * [EARS-KP01] Retrieves the private key for an actor.\n * [EARS-FKP07] Trims whitespace from content.\n * [EARS-FKP08] Returns null for empty key file.\n */\n async getPrivateKey(actorId: string): Promise<string | null> {\n const keyPath = this.getKeyPath(actorId);\n\n try {\n const content = await fs.readFile(keyPath, 'utf-8');\n const key = content.trim();\n\n if (!key) {\n return null;\n }\n\n return key;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n // [EARS-KP02] File not found - return null\n return null;\n }\n\n throw new KeyProviderError(\n `Failed to read private key for ${this.sanitizeForLog(actorId)}: ${(error as Error).message}`,\n 'KEY_READ_ERROR',\n actorId\n );\n }\n }\n\n /**\n * [EARS-KP03] Stores a private key for an actor.\n * [EARS-FKP01] Creates actorsDir if not exists.\n * [EARS-FKP02] Writes key to {actorsDir}/{actorId}.key.\n * [EARS-FKP03] Sets secure file permissions (0600).\n */\n async setPrivateKey(actorId: string, privateKey: string): Promise<void> {\n const keyPath = this.getKeyPath(actorId);\n\n try {\n // [EARS-FKP01] Ensure directory exists\n await fs.mkdir(this.actorsDir, { recursive: true });\n\n // [EARS-FKP02] Write key to {actorsDir}/{actorId}.key\n await fs.writeFile(keyPath, privateKey, 'utf-8');\n\n // [EARS-FKP03] Set secure file permissions (owner read/write only)\n await fs.chmod(keyPath, this.fileMode);\n } catch (error) {\n throw new KeyProviderError(\n `Failed to write private key for ${this.sanitizeForLog(actorId)}: ${(error as Error).message}`,\n 'KEY_WRITE_ERROR',\n actorId\n );\n }\n }\n\n /**\n * [EARS-FKP06] Checks if a private key exists for an actor.\n */\n async hasPrivateKey(actorId: string): Promise<boolean> {\n const keyPath = this.getKeyPath(actorId);\n\n try {\n await fs.access(keyPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * [EARS-KP04] Deletes the private key for an actor.\n */\n async deletePrivateKey(actorId: string): Promise<boolean> {\n const keyPath = this.getKeyPath(actorId);\n\n try {\n await fs.unlink(keyPath);\n return true;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n // File didn't exist\n return false;\n }\n\n throw new KeyProviderError(\n `Failed to delete private key for ${this.sanitizeForLog(actorId)}: ${(error as Error).message}`,\n 'KEY_DELETE_ERROR',\n actorId\n );\n }\n }\n\n /**\n * [EARS-FKP04] Builds the key file path, sanitizing actorId to prevent path traversal.\n * [EARS-FKP05] Replaces slashes with underscores.\n */\n private getKeyPath(actorId: string): string {\n // Sanitize actorId to prevent path traversal attacks\n const sanitized = this.sanitizeActorId(actorId);\n return path.join(this.actorsDir, `${sanitized}${this.extension}`);\n }\n\n /**\n * [EARS-FKP04] Sanitizes actorId to prevent directory traversal.\n * [EARS-FKP05] Replaces path separators with underscores.\n * [EARS-FKP09] Throws INVALID_ACTOR_ID for empty actorId.\n */\n private sanitizeActorId(actorId: string): string {\n // Remove path traversal attempts\n let sanitized = actorId\n .replace(/\\.\\./g, '') // Remove ..\n .replace(/[/\\\\]/g, '_'); // Replace path separators with underscore\n\n // Validate result is not empty\n if (!sanitized || sanitized === '') {\n throw new KeyProviderError(\n 'Invalid actorId: empty after sanitization',\n 'INVALID_ACTOR_ID',\n actorId\n );\n }\n\n return sanitized;\n }\n\n /**\n * Sanitizes actorId for logging (removes potential secrets).\n */\n private sanitizeForLog(actorId: string): string {\n // Just show first part for privacy\n if (actorId.length > 20) {\n return actorId.substring(0, 20) + '...';\n }\n return actorId;\n }\n}\n","/**\n * EnvKeyProvider - Environment variable-based KeyProvider implementation\n *\n * Reads private keys from environment variables.\n * Used in serverless environments (Atlassian Forge, AWS Lambda, etc.) and CI/CD.\n *\n * @module key_provider/memory/env_key_provider\n */\n\nimport type { KeyProvider } from '../key_provider';\nimport { KeyProviderError } from '../key_provider';\n\n/**\n * Options for EnvKeyProvider.\n */\nexport interface EnvKeyProviderOptions {\n /** Prefix for environment variable names (default: 'GITGOV_KEY_') */\n prefix?: string;\n /** Environment object to read from (default: process.env) */\n env?: Record<string, string | undefined>;\n /** Allow writes to custom env object (default: false for process.env, true otherwise) */\n allowWrites?: boolean;\n}\n\n/**\n * Environment variable-based KeyProvider implementation.\n * Keys are read from environment variables with a configurable prefix.\n *\n * Variable naming: {prefix}{SANITIZED_ACTOR_ID}\n * Example: GITGOV_KEY_ACTOR_HUMAN_ALICE for actorId \"actor:human:alice\"\n *\n * @example\n * ```typescript\n * // Read from process.env (default, read-only)\n * const provider = new EnvKeyProvider({ prefix: 'GITGOV_KEY_' });\n *\n * // Read from custom env object (writable)\n * const customEnv = { GITGOV_KEY_ACTOR_BOT: 'base64key...' };\n * const provider = new EnvKeyProvider({ env: customEnv, allowWrites: true });\n * ```\n */\nexport class EnvKeyProvider implements KeyProvider {\n private readonly prefix: string;\n private readonly env: Record<string, string | undefined>;\n private readonly allowWrites: boolean;\n\n constructor(options: EnvKeyProviderOptions = {}) {\n this.prefix = options.prefix ?? 'GITGOV_KEY_';\n // [EARS-EKP12] Default to process.env, always allows reads\n this.env = options.env ?? process.env;\n // Default: allow writes only if using custom env object\n this.allowWrites = options.allowWrites ?? (options.env !== undefined);\n }\n\n /**\n * [EARS-KP01] Retrieves the private key from environment variable.\n * [EARS-EKP01] Reads from {prefix}{SANITIZED_ACTOR_ID}.\n * [EARS-EKP07] Returns null for empty or whitespace-only value.\n * [EARS-EKP08] Trims whitespace from value.\n */\n async getPrivateKey(actorId: string): Promise<string | null> {\n const varName = this.getEnvVarName(actorId);\n const value = this.env[varName];\n\n if (!value || value.trim() === '') {\n return null;\n }\n\n return value.trim();\n }\n\n /**\n * [EARS-KP03] Stores a private key in the environment object.\n * [EARS-EKP02] Sets env var in custom env object.\n * [EARS-EKP03] Throws KEY_WRITE_ERROR when writing to process.env.\n */\n async setPrivateKey(actorId: string, privateKey: string): Promise<void> {\n if (!this.allowWrites) {\n throw new KeyProviderError(\n 'Cannot write to environment variables in read-only mode. ' +\n 'Use a custom env object with allowWrites: true for writable storage.',\n 'KEY_WRITE_ERROR',\n actorId\n );\n }\n\n const varName = this.getEnvVarName(actorId);\n this.env[varName] = privateKey;\n }\n\n /**\n * Checks if a private key exists in environment variables.\n */\n async hasPrivateKey(actorId: string): Promise<boolean> {\n const varName = this.getEnvVarName(actorId);\n const value = this.env[varName];\n return value !== undefined && value.trim() !== '';\n }\n\n /**\n * [EARS-KP04] Deletes the private key from environment object.\n * [EARS-EKP10] Throws KEY_DELETE_ERROR in read-only mode.\n */\n async deletePrivateKey(actorId: string): Promise<boolean> {\n if (!this.allowWrites) {\n throw new KeyProviderError(\n 'Cannot delete environment variables in read-only mode.',\n 'KEY_DELETE_ERROR',\n actorId\n );\n }\n\n const varName = this.getEnvVarName(actorId);\n const existed = this.env[varName] !== undefined;\n delete this.env[varName];\n return existed;\n }\n\n /**\n * [EARS-EKP04] Builds environment variable name from actorId.\n * [EARS-EKP05] Converts to UPPERCASE.\n * [EARS-EKP06] Collapses multiple underscores.\n * [EARS-EKP11] Throws INVALID_ACTOR_ID if empty after sanitization.\n */\n private getEnvVarName(actorId: string): string {\n // Sanitize: replace non-alphanumeric with underscores, uppercase\n const sanitized = actorId\n .toUpperCase()\n .replace(/[^A-Z0-9]/g, '_')\n .replace(/_+/g, '_') // Collapse multiple underscores\n .replace(/^_|_$/g, ''); // Trim leading/trailing underscores\n\n // [EARS-EKP11] Throw if empty after sanitization\n if (!sanitized) {\n throw new KeyProviderError(\n 'Invalid actorId: empty after sanitization',\n 'INVALID_ACTOR_ID',\n actorId\n );\n }\n\n return `${this.prefix}${sanitized}`;\n }\n}\n","/**\n * MockKeyProvider - In-memory KeyProvider for testing\n *\n * Stores keys in a Map for unit testing without I/O.\n *\n * @module key_provider/memory/mock_key_provider\n */\n\nimport type { KeyProvider } from '../key_provider';\n\n/**\n * Options for MockKeyProvider.\n */\nexport interface MockKeyProviderOptions {\n /** Initial keys to populate (actorId -> privateKey) */\n keys?: Map<string, string> | Record<string, string>;\n}\n\n/**\n * In-memory KeyProvider for testing.\n * All operations use an internal Map, no I/O required.\n *\n * @example\n * ```typescript\n * // Empty provider\n * const provider = new MockKeyProvider();\n *\n * // Pre-populated provider\n * const provider = new MockKeyProvider({\n * keys: { 'actor:human:alice': 'base64key...' }\n * });\n *\n * // Use in tests\n * await provider.setPrivateKey('actor:bot:test', 'testkey');\n * const key = await provider.getPrivateKey('actor:bot:test');\n * ```\n */\nexport class MockKeyProvider implements KeyProvider {\n private readonly keys: Map<string, string>;\n\n constructor(options: MockKeyProviderOptions = {}) {\n if (options.keys instanceof Map) {\n this.keys = new Map(options.keys);\n } else if (options.keys) {\n this.keys = new Map(Object.entries(options.keys));\n } else {\n this.keys = new Map();\n }\n }\n\n /**\n * [EARS-KP01] Retrieves the private key for an actor.\n */\n async getPrivateKey(actorId: string): Promise<string | null> {\n return this.keys.get(actorId) ?? null;\n }\n\n /**\n * [EARS-KP03] Stores a private key for an actor.\n * [EARS-MKP03] Overwrites existing key if present.\n */\n async setPrivateKey(actorId: string, privateKey: string): Promise<void> {\n this.keys.set(actorId, privateKey);\n }\n\n /**\n * [EARS-MKP07] Checks if a private key exists for an actor.\n */\n async hasPrivateKey(actorId: string): Promise<boolean> {\n return this.keys.has(actorId);\n }\n\n /**\n * [EARS-KP04] Deletes the private key for an actor.\n */\n async deletePrivateKey(actorId: string): Promise<boolean> {\n return this.keys.delete(actorId);\n }\n\n /**\n * [EARS-MKP04] Returns the number of stored keys (useful for testing).\n */\n size(): number {\n return this.keys.size;\n }\n\n /**\n * [EARS-MKP05] Clears all stored keys (useful for test cleanup).\n */\n clear(): void {\n this.keys.clear();\n }\n\n /**\n * [EARS-MKP06] Returns all stored actor IDs (useful for testing).\n */\n listActorIds(): string[] {\n return Array.from(this.keys.keys());\n }\n}\n","export * from './file_lister';\nexport * from './fs';\nexport * from './memory';\n","/**\n * Error codes for FileLister operations.\n */\nexport type FileListerErrorCode =\n | 'FILE_NOT_FOUND'\n | 'READ_ERROR'\n | 'PERMISSION_DENIED'\n | 'INVALID_PATH';\n\n/**\n * Error thrown when file operations fail.\n */\nexport class FileListerError extends Error {\n constructor(\n message: string,\n public readonly code: FileListerErrorCode,\n public readonly filePath?: string\n ) {\n super(message);\n this.name = 'FileListerError';\n }\n}\n","/**\n * FsFileLister - Filesystem-based FileLister implementation\n *\n * Uses fast-glob for pattern matching and fs/promises for file operations.\n * Used in CLI and development environments.\n *\n * @module file_lister/fs/fs_file_lister\n */\n\nimport fg from 'fast-glob';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport type { FileLister, FileListOptions, FileStats, FsFileListerOptions } from '../file_lister';\nimport { FileListerError } from '../file_lister';\n\n/**\n * Filesystem-based FileLister implementation.\n * Uses fast-glob for pattern matching and fs/promises for file operations.\n *\n * @example\n * ```typescript\n * const lister = new FsFileLister({ cwd: '/path/to/project' });\n * const files = await lister.list(['**\\/*.ts'], { ignore: ['node_modules/**'] });\n * const content = await lister.read('src/index.ts');\n * ```\n */\nexport class FsFileLister implements FileLister {\n private readonly cwd: string;\n\n constructor(options: FsFileListerOptions) {\n this.cwd = options.cwd;\n }\n\n /**\n * [EARS-FL01] Lists files matching glob patterns.\n * [EARS-FFL01] Excludes files matching ignore patterns.\n */\n async list(patterns: string[], options?: FileListOptions): Promise<string[]> {\n // [EARS-FFL04] Validate patterns don't contain path traversal\n // [EARS-FFL05] Validate patterns are not absolute paths\n for (const pattern of patterns) {\n if (pattern.includes('..')) {\n throw new FileListerError(\n `Invalid pattern: path traversal not allowed: ${pattern}`,\n 'INVALID_PATH',\n pattern\n );\n }\n if (path.isAbsolute(pattern)) {\n throw new FileListerError(\n `Invalid pattern: absolute paths not allowed: ${pattern}`,\n 'INVALID_PATH',\n pattern\n );\n }\n }\n\n const fgOptions: Parameters<typeof fg>[1] = {\n cwd: this.cwd,\n ignore: options?.ignore ?? [],\n onlyFiles: options?.onlyFiles ?? true,\n absolute: options?.absolute ?? false,\n dot: true,\n };\n\n // Only add deep if maxDepth is specified\n if (options?.maxDepth !== undefined) {\n fgOptions.deep = options.maxDepth;\n }\n\n return fg(patterns, fgOptions);\n }\n\n /**\n * [EARS-FL02] Checks if a file exists.\n */\n async exists(filePath: string): Promise<boolean> {\n // [EARS-FFL04] Validate path doesn't contain traversal\n this.validatePath(filePath);\n\n try {\n const fullPath = path.join(this.cwd, filePath);\n await fs.access(fullPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * [EARS-FL03] Reads file content as string.\n * [EARS-FFL03] Throws FILE_NOT_FOUND for missing files.\n */\n async read(filePath: string): Promise<string> {\n // [EARS-FFL04] Validate path doesn't contain traversal\n this.validatePath(filePath);\n\n const fullPath = path.join(this.cwd, filePath);\n try {\n return await fs.readFile(fullPath, 'utf-8');\n } catch (err: unknown) {\n const error = err as NodeJS.ErrnoException;\n if (error.code === 'ENOENT') {\n throw new FileListerError(\n `File not found: ${filePath}`,\n 'FILE_NOT_FOUND',\n filePath\n );\n }\n if (error.code === 'EACCES') {\n throw new FileListerError(\n `Permission denied: ${filePath}`,\n 'PERMISSION_DENIED',\n filePath\n );\n }\n throw new FileListerError(\n `Read error: ${error.message}`,\n 'READ_ERROR',\n filePath\n );\n }\n }\n\n /**\n * [EARS-FL04] Gets file statistics.\n * [EARS-FFL03] Throws FILE_NOT_FOUND for missing files.\n */\n async stat(filePath: string): Promise<FileStats> {\n // [EARS-FFL04] Validate path doesn't contain traversal\n this.validatePath(filePath);\n\n const fullPath = path.join(this.cwd, filePath);\n try {\n const stats = await fs.stat(fullPath);\n return {\n size: stats.size,\n mtime: stats.mtimeMs,\n isFile: stats.isFile(),\n };\n } catch (err: unknown) {\n const error = err as NodeJS.ErrnoException;\n if (error.code === 'ENOENT') {\n throw new FileListerError(\n `File not found: ${filePath}`,\n 'FILE_NOT_FOUND',\n filePath\n );\n }\n throw new FileListerError(\n `Stat error: ${error.message}`,\n 'READ_ERROR',\n filePath\n );\n }\n }\n\n /**\n * [EARS-FFL04] Validates that the path doesn't contain traversal characters.\n * [EARS-FFL05] Validates that the path is not absolute.\n */\n private validatePath(filePath: string): void {\n if (filePath.includes('..')) {\n throw new FileListerError(\n `Invalid path: path traversal not allowed: ${filePath}`,\n 'INVALID_PATH',\n filePath\n );\n }\n // [EARS-FFL05] Prevent absolute paths to avoid escaping cwd\n if (path.isAbsolute(filePath)) {\n throw new FileListerError(\n `Invalid path: absolute paths not allowed: ${filePath}`,\n 'INVALID_PATH',\n filePath\n );\n }\n }\n}\n","/**\n * MemoryFileLister - In-memory FileLister for testing\n *\n * Simulates filesystem operations using a Map.\n * Used for unit testing without actual I/O.\n *\n * @module file_lister/memory/memory_file_lister\n */\n\nimport picomatch from 'picomatch';\nimport type { FileLister, FileListOptions, FileStats, MemoryFileListerOptions } from '../file_lister';\nimport { FileListerError } from '../file_lister';\n\n/**\n * Matches file paths against multiple glob patterns using picomatch.\n */\nfunction matchPatterns(patterns: string[], filePaths: string[]): string[] {\n const isMatch = picomatch(patterns);\n return filePaths.filter(filePath => isMatch(filePath));\n}\n\n/**\n * Filters out files matching ignore patterns.\n */\nfunction filterIgnored(filePaths: string[], ignorePatterns: string[]): string[] {\n if (!ignorePatterns.length) return filePaths;\n const isIgnored = picomatch(ignorePatterns);\n return filePaths.filter(filePath => !isIgnored(filePath));\n}\n\n/**\n * In-memory FileLister for testing.\n * Simulates filesystem operations using a Map.\n *\n * @example\n * ```typescript\n * const lister = new MemoryFileLister({\n * files: new Map([\n * ['src/index.ts', 'export const x = 1;'],\n * ['README.md', '# Project'],\n * ])\n * });\n *\n * // Or with object syntax\n * const lister = new MemoryFileLister({\n * files: { 'src/index.ts': 'code...', 'README.md': '# Project' }\n * });\n *\n * const files = await lister.list(['**\\/*.ts']);\n * ```\n */\nexport class MemoryFileLister implements FileLister {\n private readonly files: Map<string, string>;\n private readonly stats: Map<string, FileStats>;\n\n /**\n * [EARS-MFL01] Constructs MemoryFileLister with provided files.\n */\n constructor(options: MemoryFileListerOptions = {}) {\n // [EARS-MFL01] Accept both Map and Record<string, string>\n if (options.files instanceof Map) {\n this.files = new Map(options.files);\n } else if (options.files) {\n this.files = new Map(Object.entries(options.files));\n } else {\n this.files = new Map();\n }\n this.stats = options.stats ?? new Map();\n }\n\n /**\n * [EARS-FL01] Lists files matching glob patterns.\n * [EARS-MFL02] Filters files using glob patterns.\n */\n async list(patterns: string[], options?: FileListOptions): Promise<string[]> {\n const allPaths = Array.from(this.files.keys());\n\n // [EARS-MFL02] Match patterns\n let matched = matchPatterns(patterns, allPaths);\n\n // Filter ignored patterns\n if (options?.ignore?.length) {\n matched = filterIgnored(matched, options.ignore);\n }\n\n return matched.sort();\n }\n\n /**\n * [EARS-FL02] Checks if a file exists.\n */\n async exists(filePath: string): Promise<boolean> {\n return this.files.has(filePath);\n }\n\n /**\n * [EARS-FL03] Reads file content as string.\n */\n async read(filePath: string): Promise<string> {\n const content = this.files.get(filePath);\n if (content === undefined) {\n throw new FileListerError(\n `File not found: ${filePath}`,\n 'FILE_NOT_FOUND',\n filePath\n );\n }\n return content;\n }\n\n /**\n * [EARS-FL04] Gets file statistics.\n * [EARS-MFL03] Generates stats from content if not explicitly provided.\n */\n async stat(filePath: string): Promise<FileStats> {\n if (!this.files.has(filePath)) {\n throw new FileListerError(\n `File not found: ${filePath}`,\n 'FILE_NOT_FOUND',\n filePath\n );\n }\n\n // Return explicit stats if provided\n const explicitStats = this.stats.get(filePath);\n if (explicitStats) {\n return explicitStats;\n }\n\n // [EARS-MFL03] Generate stats from content\n const content = this.files.get(filePath)!;\n return {\n size: content.length,\n mtime: Date.now(),\n isFile: true,\n };\n }\n\n // ============================================\n // Testing utilities\n // ============================================\n\n /**\n * [EARS-MFL04] Adds a file to the mock filesystem.\n */\n addFile(filePath: string, content: string): void {\n this.files.set(filePath, content);\n }\n\n /**\n * Removes a file from the mock filesystem.\n */\n removeFile(filePath: string): boolean {\n this.stats.delete(filePath);\n return this.files.delete(filePath);\n }\n\n /**\n * Returns the number of files.\n */\n size(): number {\n return this.files.size;\n }\n\n /**\n * Clears all files.\n */\n clear(): void {\n this.files.clear();\n this.stats.clear();\n }\n\n /**\n * Returns all file paths.\n */\n listPaths(): string[] {\n return Array.from(this.files.keys());\n }\n}\n","/**\n * Lint Module - Structural Validation for GitGovernance Records\n *\n * This module provides comprehensive validation capabilities for GitGovernance records,\n * implementing Quality Model Layer 1 (Structural + Referential Integrity).\n *\n * ## Architecture (Store Backends Epic)\n *\n * The lint module is split into two parts:\n * - **LintModule** (pure): Core validation logic without I/O. Works with GitGovRecord objects.\n * - **FsLintModule** (filesystem): Wrapper with I/O for directory scanning, file reading, backups.\n *\n * @module lint\n * @example\n * ```typescript\n * // Pure LintModule (no I/O)\n * import { LintModule, type ILintModule } from '@gitgov/core';\n *\n * const lintModule: ILintModule = new LintModule({ stores });\n * const results = lintModule.lintRecord(record, { recordId, entityType });\n *\n * // FsLintModule (with I/O)\n * import { FsLintModule, type IFsLintModule } from '@gitgov/core';\n *\n * const fsLintModule: IFsLintModule = new FsLintModule({ lintModule, stores });\n * const report = await fsLintModule.lint({ path: '.gitgov/' });\n * ```\n */\n\n/**\n * Lint Module - Pure validation without I/O\n *\n * For filesystem operations, use @gitgov/core/fs which exports FsLintModule.\n */\n\nexport { LintModule } from \"./lint\";\n\nexport type {\n // Pure LintModule interfaces\n ILintModule,\n LintModuleDependencies,\n RecordEntry,\n LintRecordContext,\n RecordStores,\n FixRecordOptions,\n\n // Shared types\n LintOptions,\n LintReport,\n LintSummary,\n LintResult,\n ValidatorType,\n ValidationContext,\n FixReport,\n FixResult,\n} from \"./lint.types\";\n","/**\n * Lightweight Type Guards for GitGov Record Payloads\n *\n * These type guards are for narrowing already-validated GitGovRecordPayload unions.\n * They check structural properties, NOT schema validation.\n *\n * For schema validation (with AJV), use validators in validation/*.ts:\n * - isTaskRecord(unknown) in task_validator.ts\n * - isCycleRecord(unknown) in cycle_validator.ts\n * etc.\n *\n * @module types/type_guards\n */\n\nimport type {\n GitGovRecordPayload,\n TaskRecord,\n CycleRecord,\n ExecutionRecord,\n ActorRecord,\n AgentRecord,\n ChangelogRecord,\n FeedbackRecord\n} from './index';\n\n/**\n * Type guard: checks if payload is a TaskRecord.\n * Verifies presence of task-specific fields: title, status, priority, description.\n */\nexport function isTaskPayload(payload: GitGovRecordPayload): payload is TaskRecord {\n return 'title' in payload && 'status' in payload && 'priority' in payload && 'description' in payload;\n}\n\n/**\n * Type guard: checks if payload is a CycleRecord.\n * Verifies presence of cycle-specific fields: title, status (but NOT priority).\n */\nexport function isCyclePayload(payload: GitGovRecordPayload): payload is CycleRecord {\n return 'title' in payload && 'status' in payload && !('priority' in payload);\n}\n\n/**\n * Type guard: checks if payload is an ExecutionRecord.\n * Verifies presence of execution-specific fields: taskId, title, type, result.\n */\nexport function isExecutionPayload(payload: GitGovRecordPayload): payload is ExecutionRecord {\n return 'taskId' in payload && 'title' in payload && 'type' in payload && 'result' in payload;\n}\n\n/**\n * Type guard: checks if payload is an ActorRecord.\n * Verifies presence of actor-specific fields: displayName, publicKey, roles, type.\n */\nexport function isActorPayload(payload: GitGovRecordPayload): payload is ActorRecord {\n return 'displayName' in payload && 'publicKey' in payload && 'roles' in payload && 'type' in payload;\n}\n\n/**\n * Type guard: checks if payload is an AgentRecord (agent manifest).\n * Verifies presence of agent-specific field: engine.\n * Note: AgentRecord is a manifest, different from ActorRecord with type='agent'.\n */\nexport function isAgentPayload(payload: GitGovRecordPayload): payload is AgentRecord {\n return 'engine' in payload;\n}\n\n/**\n * Type guard: checks if payload is a ChangelogRecord.\n * Verifies presence of changelog-specific fields: title, description, relatedTasks, completedAt.\n */\nexport function isChangelogPayload(payload: GitGovRecordPayload): payload is ChangelogRecord {\n return 'title' in payload && 'description' in payload && 'relatedTasks' in payload && 'completedAt' in payload;\n}\n\n/**\n * Type guard: checks if payload is a FeedbackRecord.\n * Verifies presence of feedback-specific fields: entityType, entityId, type, status, content.\n */\nexport function isFeedbackPayload(payload: GitGovRecordPayload): payload is FeedbackRecord {\n return 'entityType' in payload && 'entityId' in payload && 'type' in payload && 'status' in payload && 'content' in payload;\n}\n","/**\n * Pure LintModule - Structural Validation without I/O\n *\n * This module provides pure validation logic for GitGovernance records.\n * It does NOT perform filesystem operations (no fs/path imports).\n *\n * For filesystem operations (directory scanning, file reading, backups),\n * use FsLintModule from './fs'.\n *\n * @module lint\n */\n\nimport type {\n ILintModule,\n LintModuleDependencies,\n LintOptions,\n LintReport,\n LintResult,\n FixRecordOptions,\n ValidatorType,\n RecordEntry,\n LintRecordContext,\n RecordStores\n} from \"./lint.types\";\nimport type { IIndexerAdapter } from \"../adapters/indexer_adapter\";\nimport type {\n GitGovRecord,\n GitGovRecordPayload,\n TaskRecord,\n CycleRecord,\n GitGovRecordType\n} from \"../record_types\";\nimport {\n isTaskPayload,\n isCyclePayload,\n isExecutionPayload\n} from \"../record_types/type_guards\";\nimport type { Signature } from \"../record_types/embedded.types\";\nimport { DetailedValidationError } from \"../record_validations/common\";\nimport { createLogger } from \"../logger\";\nimport { calculatePayloadChecksum } from \"../crypto/checksum\";\nimport { signPayload } from \"../crypto/signatures\";\nimport {\n loadTaskRecord,\n loadActorRecord,\n loadAgentRecord,\n loadCycleRecord,\n loadExecutionRecord,\n loadChangelogRecord,\n loadFeedbackRecord\n} from \"../record_factories\";\nimport { Schemas } from \"../record_schemas/generated\";\n\nconst logger = createLogger(\"[Lint] \");\n\n/**\n * [EARS-F2] Mapping from entity type to schema name for payload cleaning.\n * Uses Schemas from generated JSON schemas to extract valid properties.\n */\nconst ENTITY_TO_SCHEMA: Record<string, keyof typeof Schemas> = {\n task: 'TaskRecord',\n actor: 'ActorRecord',\n agent: 'AgentRecord',\n cycle: 'CycleRecord',\n execution: 'ExecutionRecord',\n changelog: 'ChangelogRecord',\n feedback: 'FeedbackRecord',\n};\n\n\n/**\n * Pure structural validation module for GitGovernance records.\n *\n * Implements Quality Model Layer 1 (Structural + Referential Integrity).\n * Does NOT perform filesystem operations - works with GitGovRecord objects in memory.\n *\n * @implements {ILintModule}\n */\nexport class LintModule implements ILintModule {\n private readonly stores: RecordStores;\n private readonly indexerAdapter: IIndexerAdapter | null;\n\n /**\n * Constructor for pure LintModule.\n *\n * @param dependencies - Optional module dependencies\n */\n constructor(dependencies?: LintModuleDependencies) {\n this.stores = dependencies?.stores ?? {};\n this.indexerAdapter = dependencies?.indexerAdapter ?? null;\n\n if (!this.indexerAdapter) {\n logger.warn(\"indexerAdapter not provided, reference validation will be limited\");\n }\n }\n\n /**\n * Validates a single record object (pure validation).\n * Does NOT read files - receives pre-loaded record.\n *\n * @param record - The GitGovRecord object to validate\n * @param context - Context with recordId and entityType\n * @returns Array of lint results\n */\n lintRecord(record: GitGovRecord, context: LintRecordContext): LintResult[] {\n const results: LintResult[] = [];\n const { recordId, entityType, filePath = `unknown/${recordId}.json` } = context;\n\n try {\n // Validate with appropriate loader (schema validation)\n this.validateWithLoader(record, entityType);\n\n // [EARS-D1], [EARS-D2] Validate timestamps\n const timestampResults = this.validateTimestamps(record, recordId, filePath, entityType);\n results.push(...timestampResults);\n\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n const hasAdditionalProperties = error.errors.some(e =>\n e.message.includes(\"must NOT have additional properties\") ||\n e.message.includes(\"must not have additional properties\")\n );\n\n const filteredErrors = hasAdditionalProperties\n ? error.errors.filter(e =>\n !e.message.includes(\"oneOf\") &&\n !e.message.includes(\"must match\") &&\n !e.message.includes(\"boolean schema is false\")\n )\n : error.errors;\n\n for (const err of filteredErrors) {\n const tempError = new DetailedValidationError('Record', [err]);\n tempError.message = `${err.field}: ${err.message}`;\n const validatorType = this.detectValidatorType(tempError);\n const isFixable = this.isFixable(tempError);\n\n results.push({\n level: \"error\",\n filePath,\n validator: validatorType,\n message: `${err.field}: ${err.message}`,\n entity: { type: entityType, id: recordId },\n fixable: isFixable,\n ...(err && {\n context: {\n ...(err.field && { field: err.field }),\n ...(err.value !== undefined && { actual: err.value }),\n ...(err.message && { expected: err.message })\n }\n })\n });\n }\n } else {\n results.push({\n level: \"error\",\n filePath,\n validator: \"SCHEMA_VALIDATION\",\n message: error instanceof Error ? error.message : String(error),\n entity: { type: entityType, id: recordId },\n fixable: false\n });\n }\n }\n\n return results;\n }\n\n /**\n * Validates all records from stores.\n * Iterates this.stores to collect records, then validates each one.\n *\n * @param options - Configuration options\n * @returns Consolidated lint report\n */\n async lint(\n options?: Partial<LintOptions>\n ): Promise<LintReport> {\n const startTime = Date.now();\n const opts: LintOptions = {\n validateReferences: options?.validateReferences ?? false,\n validateActors: options?.validateActors ?? false,\n validateChecksums: options?.validateChecksums ?? true,\n validateSignatures: options?.validateSignatures ?? true,\n validateTimestamps: options?.validateTimestamps ?? true,\n failFast: options?.failFast ?? false,\n concurrent: options?.concurrent ?? true,\n concurrencyLimit: options?.concurrencyLimit ?? 10\n };\n\n const results: LintResult[] = [];\n\n // Collect all records from stores\n const storeMap: Array<[Exclude<GitGovRecordType, 'custom'>, RecordStores[keyof RecordStores]]> = [\n ['task', this.stores.tasks],\n ['cycle', this.stores.cycles],\n ['actor', this.stores.actors],\n ['agent', this.stores.agents],\n ['execution', this.stores.executions],\n ['feedback', this.stores.feedbacks],\n ['changelog', this.stores.changelogs],\n ];\n\n const recordEntries: RecordEntry[] = [];\n for (const [type, store] of storeMap) {\n if (!store) continue;\n const ids = await store.list();\n for (const id of ids) {\n const record = await store.get(id);\n if (record) {\n recordEntries.push({ record, id, type });\n }\n }\n }\n\n for (const entry of recordEntries) {\n const context: LintRecordContext = {\n recordId: entry.id,\n entityType: entry.type,\n ...(entry.filePath !== undefined && { filePath: entry.filePath })\n };\n\n const recordResults = this.lintRecord(entry.record, context);\n results.push(...recordResults);\n\n // Reference validation (async - uses stores)\n if (opts.validateReferences) {\n const refResults = await this.validateReferences(\n entry.record, entry.id, entry.filePath || `unknown/${entry.id}.json`, entry.type\n );\n results.push(...refResults);\n }\n\n // Actor validation (async - uses stores)\n if (opts.validateActors) {\n const actorResults = await this.validateActors(\n entry.record, entry.id, entry.filePath || `unknown/${entry.id}.json`, entry.type\n );\n results.push(...actorResults);\n }\n\n if (opts.failFast && recordResults.some(r => r.level === \"error\")) {\n break;\n }\n }\n\n const executionTime = Date.now() - startTime;\n const errors = results.filter(r => r.level === \"error\").length;\n const warnings = results.filter(r => r.level === \"warning\").length;\n const fixable = results.filter(r => r.fixable).length;\n\n return {\n summary: {\n filesChecked: recordEntries.length,\n errors,\n warnings,\n fixable,\n executionTime\n },\n results,\n metadata: {\n timestamp: new Date().toISOString(),\n options: opts,\n version: \"1.0.0\"\n }\n };\n }\n\n /**\n * Applies fixes to a record and returns the fixed version.\n * Does NOT write to disk - returns modified object.\n *\n * @param record - The record to fix\n * @param results - Lint results identifying problems\n * @param options - Fix options including privateKey for signing\n * @returns The fixed record\n */\n fixRecord(\n record: GitGovRecord,\n results: LintResult[],\n options: FixRecordOptions\n ): GitGovRecord {\n const fixableResults = results.filter(r => r.fixable);\n\n if (fixableResults.length === 0) {\n return record;\n }\n\n // Clone the record to avoid mutation\n let fixedRecord: GitGovRecord = JSON.parse(JSON.stringify(record));\n\n for (const result of fixableResults) {\n // Skip if fix type not in allowed list\n if (options.fixTypes && !options.fixTypes.includes(result.validator)) {\n continue;\n }\n\n switch (result.validator) {\n case \"EMBEDDED_METADATA_STRUCTURE\":\n fixedRecord = this.fixEmbeddedMetadata(fixedRecord, result, options);\n break;\n\n case \"CHECKSUM_VERIFICATION\":\n fixedRecord = this.fixChecksum(fixedRecord);\n break;\n\n case \"SIGNATURE_STRUCTURE\":\n fixedRecord = this.fixSignature(fixedRecord, result, options);\n break;\n\n // BIDIRECTIONAL_CONSISTENCY requires modifying OTHER records\n // This must be handled by FsLintModule which can write multiple files\n case \"BIDIRECTIONAL_CONSISTENCY\":\n logger.warn(\"BIDIRECTIONAL_CONSISTENCY fix requires FsLintModule\");\n break;\n\n default:\n logger.warn(`Fix not implemented for validator: ${result.validator}`);\n }\n }\n\n return fixedRecord;\n }\n\n // ==================== Private Validation Methods ====================\n\n /**\n * Validates record with appropriate loader based on entity type.\n * @private\n */\n private validateWithLoader(record: GitGovRecord, entityType: Exclude<GitGovRecordType, 'custom'>): void {\n // Re-validate the record through its loader to ensure schema compliance\n const rawRecord = JSON.parse(JSON.stringify(record));\n\n switch (entityType) {\n case 'task':\n loadTaskRecord(rawRecord);\n break;\n case 'actor':\n loadActorRecord(rawRecord);\n break;\n case 'agent':\n loadAgentRecord(rawRecord);\n break;\n case 'cycle':\n loadCycleRecord(rawRecord);\n break;\n case 'execution':\n loadExecutionRecord(rawRecord);\n break;\n case 'changelog':\n loadChangelogRecord(rawRecord);\n break;\n case 'feedback':\n loadFeedbackRecord(rawRecord);\n break;\n }\n }\n\n /**\n * [EARS-D1], [EARS-D2] Validates timestamp ordering.\n * Pure validation - no I/O.\n * @private\n */\n private validateTimestamps(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): LintResult[] {\n const results: LintResult[] = [];\n\n const payload = record.payload as GitGovRecordPayload & {\n createdAt?: number | string;\n updatedAt?: number | string;\n completedAt?: number | string;\n discardedAt?: number | string;\n };\n\n if (payload.createdAt && payload.updatedAt) {\n const created = new Date(payload.createdAt).getTime();\n const updated = new Date(payload.updatedAt).getTime();\n\n if (created > updated) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `createdAt (${String(payload.createdAt)}) is after updatedAt (${String(payload.updatedAt)})`,\n entity: { type: entityType, id: recordId },\n fixable: false,\n context: {\n field: \"timestamps\",\n actual: { createdAt: payload.createdAt, updatedAt: payload.updatedAt },\n expected: \"createdAt <= updatedAt\"\n }\n });\n }\n\n if (payload.completedAt) {\n const completed = new Date(payload.completedAt).getTime();\n if (completed < created) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `completedAt (${String(payload.completedAt)}) is before createdAt (${String(payload.createdAt)})`,\n entity: { type: entityType, id: recordId },\n fixable: false\n });\n }\n }\n\n if (payload.discardedAt) {\n const discarded = new Date(payload.discardedAt).getTime();\n if (discarded < created) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `discardedAt (${String(payload.discardedAt)}) is before createdAt (${String(payload.createdAt)})`,\n entity: { type: entityType, id: recordId },\n fixable: false\n });\n }\n }\n }\n\n return results;\n }\n\n /**\n * [EARS-E1] through [EARS-E6] Validates references.\n * Uses Store<T> for lookups.\n * @private\n */\n private async validateReferences(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n const payload = record.payload;\n\n // Get appropriate store for lookups\n const taskStore = this.stores.tasks;\n const cycleStore = this.stores.cycles;\n\n // [EARS-E1] Validate ExecutionRecord.taskId exists\n if (entityType === \"execution\" && isExecutionPayload(payload) && payload.taskId && taskStore) {\n try {\n const taskRecord = await taskStore.get(payload.taskId);\n if (!taskRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"REFERENTIAL_INTEGRITY\",\n message: `Referenced taskId '${payload.taskId}' not found`,\n entity: { type: entityType, id: recordId },\n fixable: false,\n context: { field: \"taskId\", actual: payload.taskId, expected: \"existing task record\" }\n });\n } else {\n // [EARS-E6] Check for soft delete\n const taskPayload = taskRecord.payload as TaskRecord;\n if (taskPayload.status === \"discarded\") {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"SOFT_DELETE_DETECTION\",\n message: `Referenced task '${payload.taskId}' has status 'discarded'`,\n entity: { type: entityType, id: recordId },\n fixable: false\n });\n }\n }\n } catch {\n // Store lookup failed, skip\n }\n }\n\n // [EARS-E5] Validate bidirectional consistency (Task ↔ Cycle)\n if (entityType === \"task\" && isTaskPayload(payload) && payload.cycleIds && cycleStore) {\n for (const cycleId of payload.cycleIds) {\n try {\n const cycleRecord = await cycleStore.get(cycleId);\n if (cycleRecord) {\n const cyclePayload = cycleRecord.payload as CycleRecord;\n if (cyclePayload.taskIds && !cyclePayload.taskIds.includes(recordId)) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"BIDIRECTIONAL_CONSISTENCY\",\n message: `Task references cycle '${cycleId}' but cycle doesn't include this task`,\n entity: { type: entityType, id: recordId },\n fixable: true,\n context: { field: \"cycleIds\", actual: cycleId, expected: `cycle should include task ${recordId}` }\n });\n }\n }\n } catch {\n // Store lookup failed, skip\n }\n }\n }\n\n if (entityType === \"cycle\" && isCyclePayload(payload) && payload.taskIds && taskStore) {\n for (const taskId of payload.taskIds) {\n try {\n const taskRecord = await taskStore.get(taskId);\n if (taskRecord) {\n const taskPayload = taskRecord.payload as TaskRecord;\n if (!taskPayload.cycleIds || !taskPayload.cycleIds.includes(recordId)) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"BIDIRECTIONAL_CONSISTENCY\",\n message: `Cycle includes task '${taskId}' but task doesn't include this cycle`,\n entity: { type: entityType, id: recordId },\n fixable: true,\n context: { field: \"taskIds\", actual: taskPayload.cycleIds || [], expected: `task should include cycle ${recordId}` }\n });\n }\n }\n } catch {\n // Store lookup failed, skip\n }\n }\n }\n\n return results;\n }\n\n /**\n * [EARS-E3] Validates actor resolution.\n * Uses Store<T> for lookups.\n * @private\n */\n private async validateActors(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n const actorStore = this.stores.actors;\n\n if (!actorStore) {\n return results;\n }\n\n // Check signatures for actor references\n if (record.header?.signatures) {\n for (const signature of record.header.signatures) {\n if (signature.keyId) {\n try {\n const actorRecord = await actorStore.get(signature.keyId);\n if (!actorRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"ACTOR_RESOLUTION\",\n message: `Actor '${signature.keyId}' referenced in signature not found`,\n entity: { type: entityType, id: recordId },\n fixable: false,\n context: { field: \"signatures.keyId\", actual: signature.keyId, expected: \"existing actor record\" }\n });\n }\n } catch {\n // Store lookup failed, skip\n }\n }\n }\n }\n\n return results;\n }\n\n // ==================== Private Fix Methods ====================\n\n /**\n * [EARS-F2] Fixes embedded metadata structure issues.\n *\n * Steps:\n * 1. Validates EmbeddedMetadataRecord structure (header + payload)\n * 2. Removes additional properties from payload automatically\n * 3. Recalculates payloadChecksum using SHA256 on canonical JSON\n * 4. Regenerates signature with role: \"author\" and keyId from options\n * 5. Returns the fixed record (does not write to disk)\n *\n * @private\n */\n private fixEmbeddedMetadata(\n record: GitGovRecord,\n result: LintResult,\n options: FixRecordOptions\n ): GitGovRecord {\n if (!options.privateKey) {\n throw new Error(\"privateKey is required to fix embedded metadata\");\n }\n\n // [EARS-F2] Step 1: Validate EmbeddedMetadataRecord structure\n if (!record.header || !record.payload) {\n throw new Error(\"Record does not have EmbeddedMetadataRecord structure (missing header or payload)\");\n }\n\n // [EARS-F2] Step 2: Clean payload - remove additional properties automatically\n const cleanedPayload = this.cleanPayload(record.payload, result.entity.type);\n\n // [EARS-F2] Step 3: Recalculate checksum with cleaned payload\n const payloadChecksum = calculatePayloadChecksum(cleanedPayload);\n\n // [EARS-F2] Step 4: Regenerate signature\n const signature = signPayload(\n cleanedPayload,\n options.privateKey,\n options.keyId || result.entity.id,\n 'author',\n 'Signature regenerated by lint fix'\n );\n\n // [EARS-F2] Step 5: Return the fixed record\n return {\n header: {\n ...record.header,\n payloadChecksum,\n signatures: [signature]\n },\n payload: cleanedPayload\n };\n }\n\n /**\n * [EARS-F2] Gets valid payload keys from JSON schema for a given entity type.\n * Derives keys directly from generated schemas to stay in sync.\n * @private\n */\n private getValidPayloadKeys(entityType: string): string[] {\n const schemaName = ENTITY_TO_SCHEMA[entityType];\n if (!schemaName) {\n logger.warn(`Unknown entity type '${entityType}' for schema lookup`);\n return [];\n }\n\n const schema = Schemas[schemaName] as { properties?: Record<string, unknown> };\n if (!schema.properties) {\n logger.warn(`Schema '${schemaName}' has no properties defined`);\n return [];\n }\n\n return Object.keys(schema.properties);\n }\n\n /**\n * [EARS-F2] Cleans payload by removing properties not defined in the schema.\n * Uses JSON schemas as source of truth for valid properties.\n * @private\n */\n private cleanPayload(payload: GitGovRecordPayload, entityType: string): GitGovRecordPayload {\n const validKeys = this.getValidPayloadKeys(entityType);\n\n if (validKeys.length === 0) {\n // Unknown type or no schema - return as-is to avoid data loss\n logger.warn(`No valid keys found for entity type '${entityType}', returning payload as-is`);\n return payload;\n }\n\n const cleaned: Record<string, unknown> = {};\n const payloadRecord = payload as Record<string, unknown>;\n\n for (const key of validKeys) {\n if (key in payloadRecord) {\n cleaned[key] = payloadRecord[key];\n }\n }\n\n return cleaned as GitGovRecordPayload;\n }\n\n /**\n * Fixes checksum issues.\n * @private\n */\n private fixChecksum(record: GitGovRecord): GitGovRecord {\n const payloadChecksum = calculatePayloadChecksum(record.payload);\n\n return {\n header: {\n ...record.header,\n payloadChecksum\n },\n payload: record.payload\n };\n }\n\n /**\n * Fixes signature structure issues.\n * @private\n */\n /**\n * [EARS-F9] Fixes signature structure issues.\n *\n * Preserves valid keyId and role from existing signature if present,\n * only using options.keyId as fallback when no existing signature exists.\n *\n * @private\n */\n private fixSignature(\n record: GitGovRecord,\n result: LintResult,\n options: FixRecordOptions\n ): GitGovRecord {\n if (!options.privateKey) {\n throw new Error(\"privateKey is required to fix signature\");\n }\n\n const payloadChecksum = calculatePayloadChecksum(record.payload);\n\n // [EARS-F9] Preserve existing signature metadata if valid\n // Priority: existing signature > options > fallback\n const existingSig = record.header?.signatures?.[0];\n const keyId = existingSig?.keyId || options.keyId || result.entity.id;\n const role = existingSig?.role || 'author';\n const notes = existingSig?.notes || 'Signature regenerated by lint fix';\n\n const signature: Signature = signPayload(\n record.payload,\n options.privateKey,\n keyId,\n role,\n notes\n );\n\n return {\n header: {\n ...record.header,\n payloadChecksum,\n signatures: [signature]\n },\n payload: record.payload\n };\n }\n\n // ==================== Private Helper Methods ====================\n\n /**\n * Detects the validator type based on the error.\n * @private\n */\n private detectValidatorType(error: DetailedValidationError): ValidatorType {\n const errorMessage = error.message.toLowerCase();\n const fieldPath = error.errors?.[0]?.field?.toLowerCase() || '';\n const allErrorMessages = error.errors?.map(e => e.message?.toLowerCase() || '').join(' ') || '';\n const combinedText = `${errorMessage} ${fieldPath} ${allErrorMessages}`;\n\n if (combinedText.includes(\"checksum\") || fieldPath.includes(\"payloadchecksum\")) {\n return \"CHECKSUM_VERIFICATION\";\n }\n if (combinedText.includes(\"signature\") || fieldPath.includes(\"/signatures/\")) {\n return \"SIGNATURE_STRUCTURE\";\n }\n if (combinedText.includes(\"header\") || combinedText.includes(\"payload\") || fieldPath.includes(\"/header/\")) {\n return \"EMBEDDED_METADATA_STRUCTURE\";\n }\n\n const versionMismatchIndicators = [\n 'required in v', 'deprecated', 'obsolete', 'schema version', 'migration'\n ];\n if (versionMismatchIndicators.some(i => combinedText.includes(i)) || /v\\d+|version\\s+\\d+/i.test(combinedText)) {\n return \"SCHEMA_VERSION_MISMATCH\";\n }\n\n return \"SCHEMA_VALIDATION\";\n }\n\n /**\n * Determines if an error is fixable.\n * @private\n */\n private isFixable(error: DetailedValidationError): boolean {\n const errorMessage = error.message.toLowerCase();\n\n if (errorMessage.includes(\"header\") || errorMessage.includes(\"metadata\")) {\n return true;\n }\n if (errorMessage.includes(\"must not have additional properties\") || errorMessage.includes(\"must NOT have additional properties\")) {\n return true;\n }\n if (errorMessage.includes(\"checksum\")) {\n return true;\n }\n if (errorMessage.includes(\"signature\") && errorMessage.includes(\"format\")) {\n return true;\n }\n\n return false;\n }\n}\n","export type {\n IProjectInitializer,\n EnvironmentValidation,\n} from './project_initializer';\n","// Core interfaces - backend-agnostic\nexport * from './record_store';\nexport * from './record_store.types';\n\n// NOTE: Implementations are exported via subpaths:\n// - @gitgov/core/fs -> FsRecordStore\n// - @gitgov/core/memory -> MemoryRecordStore\n// ConfigStore is now in its own module: @gitgov/core/config_store\n","// ISyncStateModule interface\nexport type { ISyncStateModule } from \"./sync_state\";\n\n// PullScheduler (pure, depends on interface not implementation)\nexport { PullScheduler } from \"./pull_scheduler\";\n\n// Types\nexport type {\n SyncStateModuleDependencies,\n SyncStatePushOptions,\n SyncStatePushResult,\n SyncStatePullOptions,\n SyncStatePullResult,\n SyncStateResolveOptions,\n SyncStateResolveResult,\n ConflictInfo,\n ConflictType,\n IntegrityViolation,\n AuditStateOptions,\n AuditStateReport,\n AuditScope,\n ExpectedFilesScope,\n ConflictDiff,\n ConflictFileDiff,\n StateDeltaFile,\n} from \"./sync_state.types\";\n\nexport type {\n PullSchedulerConfig,\n PullSchedulerDependencies,\n PullSchedulerResult,\n} from \"./pull_scheduler\";\n\n// Errors\nexport {\n SyncStateError,\n PushFromStateBranchError,\n IntegrityViolationError,\n ConflictMarkersPresentError,\n NoRebaseInProgressError,\n StateBranchSetupError,\n UncommittedChangesError,\n CryptoModuleRequiredError,\n ActorIdentityMismatchError,\n // Type guards for error handling\n isSyncStateError,\n isPushFromStateBranchError,\n isIntegrityViolationError,\n isConflictMarkersPresentError,\n isUncommittedChangesError,\n isNoRebaseInProgressError,\n isStateBranchSetupError,\n isCryptoModuleRequiredError,\n isActorIdentityMismatchError,\n} from \"./sync_state.errors\";\n","/**\n * PullScheduler - Periodic State Synchronization\n *\n * Background scheduler that automatically pulls state changes from remote\n * at configured intervals.\n *\n * @module sync_state/pull_scheduler\n */\n\nimport type { ISyncStateModule } from \"./sync_state\";\nimport type { ConfigManager } from \"../config_manager/config_manager\";\nimport type { SessionManager } from \"../session_manager/session_manager\";\n\n/**\n * Result of a pull operation executed by the scheduler\n */\nexport interface PullSchedulerResult {\n /** Whether the operation was successful */\n success: boolean;\n /** Whether new changes were detected */\n hasChanges: boolean;\n /** Whether a conflict was detected */\n conflictDetected: boolean;\n /** Conflict information if applicable */\n conflictInfo?: {\n type: string;\n message: string;\n affectedFiles?: string[];\n };\n /** Timestamp of the operation */\n timestamp: string;\n /** Error if operation failed */\n error?: string;\n}\n\n/**\n * Configuration for the PullScheduler\n */\nexport interface PullSchedulerConfig {\n /** Whether the scheduler is enabled */\n enabled: boolean;\n /** Pull interval in seconds */\n pullIntervalSeconds: number;\n /** Whether to continue after network errors */\n continueOnNetworkError: boolean;\n /** Whether to stop if a conflict is detected */\n stopOnConflict: boolean;\n}\n\n/**\n * Dependencies required by PullScheduler\n */\nexport interface PullSchedulerDependencies {\n /** ISyncStateModule for pull operations */\n syncModule: ISyncStateModule;\n /** ConfigManager for loading project configuration */\n configManager: ConfigManager;\n /** SessionManager for loading session preferences */\n sessionManager: SessionManager;\n}\n\n/**\n * PullScheduler - Automatic background synchronization\n *\n * Periodically pulls state changes from remote to keep local state up-to-date.\n * Useful for collaboration scenarios where multiple actors are working simultaneously.\n *\n * [EARS-F1 to EARS-F8]\n *\n * @example\n * ```typescript\n * const scheduler = new PullScheduler({\n * syncModule,\n * configManager\n * });\n *\n * await scheduler.start(); // Start periodic pulling\n * // ... scheduler runs in background ...\n * scheduler.stop(); // Stop scheduler\n * ```\n */\nexport class PullScheduler {\n private syncModule: ISyncStateModule;\n private configManager: ConfigManager;\n private sessionManager: SessionManager;\n private config: PullSchedulerConfig;\n private intervalId?: NodeJS.Timeout;\n private running: boolean = false;\n private pulling: boolean = false;\n\n constructor(dependencies: PullSchedulerDependencies) {\n if (!dependencies.syncModule) {\n throw new Error(\"ISyncStateModule is required for PullScheduler\");\n }\n if (!dependencies.configManager) {\n throw new Error(\"ConfigManager is required for PullScheduler\");\n }\n if (!dependencies.sessionManager) {\n throw new Error(\"SessionManager is required for PullScheduler\");\n }\n\n this.syncModule = dependencies.syncModule;\n this.configManager = dependencies.configManager;\n this.sessionManager = dependencies.sessionManager;\n\n // Default configuration (will be loaded lazily in start())\n this.config = {\n enabled: false,\n pullIntervalSeconds: 30,\n continueOnNetworkError: true,\n stopOnConflict: false,\n };\n }\n\n /**\n * Loads configuration from ConfigManager with cascade merge:\n * 1. Local preferences in .session.json (highest priority)\n * 2. Project defaults in config.json\n * 3. Hardcoded defaults (fallback)\n */\n private async loadConfig(): Promise<PullSchedulerConfig> {\n try {\n // Load project defaults from config.json\n const projectConfig = await this.configManager.loadConfig();\n const projectDefaults = projectConfig?.state?.defaults?.pullScheduler ?? {};\n\n // Load local preferences from .session.json\n const session = await this.sessionManager.loadSession();\n const localPreferences = session?.syncPreferences?.pullScheduler ?? {};\n\n // Merge with cascade priority\n return {\n enabled:\n localPreferences.enabled ?? projectDefaults.defaultEnabled ?? false,\n pullIntervalSeconds:\n localPreferences.pullIntervalSeconds ??\n projectDefaults.defaultIntervalSeconds ??\n 30,\n continueOnNetworkError:\n localPreferences.continueOnNetworkError ??\n projectDefaults.defaultContinueOnNetworkError ??\n true,\n stopOnConflict:\n localPreferences.stopOnConflict ??\n projectDefaults.defaultStopOnConflict ??\n false,\n };\n } catch {\n // If config loading fails, return defaults\n return {\n enabled: false,\n pullIntervalSeconds: 30,\n continueOnNetworkError: true,\n stopOnConflict: false,\n };\n }\n }\n\n /**\n * Starts the scheduler with configured interval\n *\n * [EARS-F1, EARS-F2]\n *\n * @throws Error if scheduler fails to load configuration\n *\n * @example\n * ```typescript\n * await scheduler.start();\n * // Scheduler now pulls every N seconds\n * ```\n */\n async start(): Promise<void> {\n // [EARS-F2] Idempotent - return if already running\n if (this.running) {\n return;\n }\n\n // Load configuration\n this.config = await this.loadConfig();\n\n // Check if enabled\n if (!this.config.enabled) {\n return;\n }\n\n // [EARS-F1] Start interval\n this.intervalId = setInterval(() => {\n void this.pullNow(); // Fire and forget\n }, this.config.pullIntervalSeconds * 1000);\n\n this.running = true;\n }\n\n /**\n * Stops the scheduler and cleans up resources\n *\n * [EARS-F3]\n *\n * @example\n * ```typescript\n * scheduler.stop();\n * // Scheduler is now stopped\n * ```\n */\n stop(): void {\n if (!this.running) {\n return;\n }\n\n if (this.intervalId !== undefined) {\n clearInterval(this.intervalId);\n }\n\n this.running = false;\n }\n\n /**\n * Checks if the scheduler is currently running\n *\n * [EARS-F4]\n *\n * @returns true if running, false otherwise\n *\n * @example\n * ```typescript\n * if (scheduler.isRunning()) {\n * console.log(\"Scheduler is active\");\n * }\n * ```\n */\n isRunning(): boolean {\n return this.running;\n }\n\n /**\n * Executes a pull operation immediately\n *\n * This method can be called manually or is automatically invoked by the scheduler.\n * Handles conflicts, network errors, and concurrent pull prevention.\n *\n * [EARS-F5, EARS-F6, EARS-F7, EARS-F8]\n *\n * @returns Result of the pull operation\n *\n * @example\n * ```typescript\n * const result = await scheduler.pullNow();\n * if (result.hasChanges) {\n * console.log(\"New changes detected\");\n * }\n * ```\n */\n async pullNow(): Promise<PullSchedulerResult> {\n // [EARS-F8] Prevent concurrent pulls\n if (this.pulling) {\n return {\n success: true,\n hasChanges: false,\n conflictDetected: false,\n timestamp: new Date().toISOString(),\n error: \"Pull already in progress\",\n };\n }\n\n this.pulling = true;\n\n try {\n // Execute pull\n const pullResult = await this.syncModule.pullState();\n\n // [EARS-F5] Detect changes\n const hasChanges = pullResult.reindexed || false;\n\n // [EARS-F6] Detect conflicts\n if (pullResult.conflictDetected) {\n const result: PullSchedulerResult = {\n success: false,\n hasChanges: false,\n conflictDetected: true,\n timestamp: new Date().toISOString(),\n ...(pullResult.conflictInfo && { conflictInfo: pullResult.conflictInfo }),\n };\n\n // Stop scheduler if configured to do so\n if (this.config.stopOnConflict) {\n this.stop();\n }\n\n return result;\n }\n\n // Success\n return {\n success: true,\n hasChanges,\n conflictDetected: false,\n timestamp: new Date().toISOString(),\n };\n } catch (error) {\n // [EARS-F7] Handle network errors\n const errorMessage = error instanceof Error ? error.message : String(error);\n const isNetworkError =\n errorMessage.includes(\"network\") ||\n errorMessage.includes(\"fetch\") ||\n errorMessage.includes(\"timeout\") ||\n errorMessage.includes(\"connection\");\n\n // Continue if configured to do so\n if (isNetworkError && this.config.continueOnNetworkError) {\n return {\n success: false,\n hasChanges: false,\n conflictDetected: false,\n timestamp: new Date().toISOString(),\n error: errorMessage,\n };\n }\n\n // Re-throw non-recoverable errors\n throw error;\n } finally {\n this.pulling = false;\n }\n }\n}\n\n","/**\n * Base error class for all sync-related errors\n */\nexport class SyncStateError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SyncStateError\";\n Object.setPrototypeOf(this, SyncStateError.prototype);\n }\n}\n\n/**\n * Error thrown when attempting to push from gitgov-state branch\n */\nexport class PushFromStateBranchError extends SyncStateError {\n public branch: string;\n\n constructor(branchName: string) {\n super(\n `Cannot push from ${branchName} branch. ` +\n `Please switch to a working branch before pushing state.`\n );\n this.name = \"PushFromStateBranchError\";\n this.branch = branchName;\n Object.setPrototypeOf(this, PushFromStateBranchError.prototype);\n }\n}\n\n/**\n * Error thrown when integrity violations are detected during audit\n */\nexport class IntegrityViolationError extends SyncStateError {\n constructor(\n public violations: Array<{\n type: \"resolution\" | \"signature\" | \"checksum\" | \"missing_file\";\n details: string;\n }>\n ) {\n const violationSummary = violations\n .map((v) => `${v.type}: ${v.details}`)\n .join(\"; \");\n super(`Integrity violations detected: ${violationSummary}`);\n this.name = \"IntegrityViolationError\";\n Object.setPrototypeOf(this, IntegrityViolationError.prototype);\n }\n}\n\n/**\n * Error thrown when conflict markers are still present in files\n */\nexport class ConflictMarkersPresentError extends SyncStateError {\n constructor(public filesWithMarkers: string[]) {\n super(\n `Conflict markers still present in ${filesWithMarkers.length} file(s). ` +\n `Please resolve all conflicts before continuing.`\n );\n this.name = \"ConflictMarkersPresentError\";\n Object.setPrototypeOf(this, ConflictMarkersPresentError.prototype);\n }\n}\n\n/**\n * Error thrown when attempting to resolve conflict without rebase in progress\n */\nexport class NoRebaseInProgressError extends SyncStateError {\n constructor() {\n super(\n `No rebase in progress. Cannot resolve conflict without an active rebase. ` +\n `Use 'pullState' or 'pushState' to trigger synchronization first.`\n );\n this.name = \"NoRebaseInProgressError\";\n Object.setPrototypeOf(this, NoRebaseInProgressError.prototype);\n }\n}\n\n/**\n * Error thrown when CryptoModule is required but not available\n */\nexport class CryptoModuleRequiredError extends SyncStateError {\n constructor(operation: string) {\n super(\n `CryptoModule is required for ${operation} operation. ` +\n `Please provide crypto_module in SyncStateModuleDependencies.`\n );\n this.name = \"CryptoModuleRequiredError\";\n Object.setPrototypeOf(this, CryptoModuleRequiredError.prototype);\n }\n}\n\n/**\n * Error thrown when state branch cannot be created or configured\n */\nexport class StateBranchSetupError extends SyncStateError {\n constructor(\n public reason: string,\n public underlyingError?: Error\n ) {\n super(`Failed to setup state branch: ${reason}`);\n this.name = \"StateBranchSetupError\";\n Object.setPrototypeOf(this, StateBranchSetupError.prototype);\n }\n}\n\n/**\n * Error thrown when the provided actorId doesn't match the authenticated identity.\n *\n * This prevents impersonation: you can only push/resolve as the actor whose\n * private key you hold.\n */\nexport class ActorIdentityMismatchError extends SyncStateError {\n public requestedActorId: string;\n public authenticatedActorId: string;\n\n constructor(requestedActorId: string, authenticatedActorId: string) {\n super(\n `Actor identity mismatch: requested '${requestedActorId}' but authenticated as '${authenticatedActorId}'. ` +\n `You can only operate as the actor whose private key you hold.`\n );\n this.name = \"ActorIdentityMismatchError\";\n this.requestedActorId = requestedActorId;\n this.authenticatedActorId = authenticatedActorId;\n Object.setPrototypeOf(this, ActorIdentityMismatchError.prototype);\n }\n}\n\n/**\n * Error thrown when uncommitted changes exist in state branch\n */\nexport class UncommittedChangesError extends SyncStateError {\n public branch: string;\n\n constructor(branchName: string) {\n super(\n `Uncommitted changes detected in ${branchName}. ` +\n `Please commit or stash changes before synchronizing.`\n );\n this.name = \"UncommittedChangesError\";\n this.branch = branchName;\n Object.setPrototypeOf(this, UncommittedChangesError.prototype);\n }\n}\n\n/**\n * Type guards for error handling\n * \n * These functions enable type-safe error handling by narrowing the error type.\n * They are additive and don't break any existing code.\n * \n * Example usage:\n * ```typescript\n * try {\n * await syncModule.pushState(options);\n * } catch (error) {\n * if (isPushFromStateBranchError(error)) {\n * // TypeScript knows error.branch exists here\n * console.log(`Cannot push from ${error.branch}`);\n * }\n * }\n * ```\n */\n\nexport function isSyncStateError(error: unknown): error is SyncStateError {\n return error instanceof SyncStateError;\n}\n\nexport function isPushFromStateBranchError(\n error: unknown\n): error is PushFromStateBranchError {\n return error instanceof PushFromStateBranchError;\n}\n\nexport function isIntegrityViolationError(\n error: unknown\n): error is IntegrityViolationError {\n return error instanceof IntegrityViolationError;\n}\n\nexport function isConflictMarkersPresentError(\n error: unknown\n): error is ConflictMarkersPresentError {\n return error instanceof ConflictMarkersPresentError;\n}\n\nexport function isUncommittedChangesError(\n error: unknown\n): error is UncommittedChangesError {\n return error instanceof UncommittedChangesError;\n}\n\nexport function isNoRebaseInProgressError(\n error: unknown\n): error is NoRebaseInProgressError {\n return error instanceof NoRebaseInProgressError;\n}\n\nexport function isStateBranchSetupError(\n error: unknown\n): error is StateBranchSetupError {\n return error instanceof StateBranchSetupError;\n}\n\nexport function isCryptoModuleRequiredError(\n error: unknown\n): error is CryptoModuleRequiredError {\n return error instanceof CryptoModuleRequiredError;\n}\n\nexport function isActorIdentityMismatchError(\n error: unknown\n): error is ActorIdentityMismatchError {\n return error instanceof ActorIdentityMismatchError;\n}\n\n","export * from './actor_validator';\nexport * from './agent_validator';\nexport * from './task_validator';\nexport * from './cycle_validator';\nexport * from './execution_validator';\nexport * from './changelog_validator';\nexport * from './feedback_validator';\nexport * from './embedded_metadata_validator';\nexport * from './workflow_validator';\nexport type { ValidationResult } from './errors';\n","export * from \"./generated\";\nexport * from \"./common.types\";\nexport * from \"./embedded.types\";\n","export * from './event_bus';\nexport * from './types';\n","import { EventEmitter } from 'events';\n\nimport type {\n BaseEvent,\n GitGovEvent,\n EventHandler,\n EventSubscription\n} from './types';\n\n// Generate unique subscription IDs\nfunction generateSubscriptionId(): string {\n return `subscription:${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Event Stream interface - Contract for both Local and Global bus implementations\n */\nexport interface IEventStream {\n /**\n * Publish an event to the bus\n */\n publish(event: BaseEvent): void;\n\n /**\n * Subscribe to events of a specific type\n */\n subscribe<T extends BaseEvent = BaseEvent>(\n eventType: string,\n handler: EventHandler<T>\n ): EventSubscription;\n\n /**\n * Unsubscribe from events\n */\n unsubscribe(subscriptionId: string): boolean;\n\n /**\n * Get all active subscriptions\n */\n getSubscriptions(): EventSubscription[];\n\n /**\n * Clear all subscriptions (for testing/cleanup)\n */\n clearSubscriptions(): void;\n\n /**\n * Wait for all pending event handlers to complete (for testing)\n */\n waitForIdle(options?: { timeout?: number }): Promise<void>;\n}\n\n/**\n * Local EventBus implementation using Node.js EventEmitter\n * \n * This is the \"Free Tier\" implementation that operates in-memory\n * and provides synchronous event delivery for local-first usage.\n * \n * Design Principles:\n * - Decoupled Producers: Adapters emit events without knowing consumers\n * - Pluggable Consumers: Event handlers can be added/removed dynamically \n * - Type Safety: Full TypeScript support for all event types\n * - Performance: In-memory delivery with minimal overhead\n */\nexport class EventBus implements IEventStream {\n private emitter: EventEmitter;\n private subscriptions: Map<string, EventSubscription>;\n private pendingHandlers: Set<Promise<void>>;\n\n constructor() {\n this.emitter = new EventEmitter();\n this.subscriptions = new Map();\n this.pendingHandlers = new Set();\n\n // Increase max listeners for high-throughput scenarios\n this.emitter.setMaxListeners(100);\n }\n\n /**\n * Publish an event to all subscribers\n * \n * @param event - The event to publish\n */\n publish(event: BaseEvent): void {\n // Validate event structure\n if (!event.type || typeof event.type !== 'string') {\n throw new Error('Event must have a valid type string');\n }\n\n if (!event.timestamp || typeof event.timestamp !== 'number') {\n throw new Error('Event must have a valid timestamp number');\n }\n\n if (!event.source || typeof event.source !== 'string') {\n throw new Error('Event must have a valid source string');\n }\n\n // Emit the event\n this.emitter.emit(event.type, event);\n\n // Also emit on wildcard for debugging/monitoring\n this.emitter.emit('*', event);\n }\n\n /**\n * Subscribe to events of a specific type\n * \n * @param eventType - The event type to subscribe to\n * @param handler - The handler function to call when event is received\n * @returns EventSubscription object with subscription details\n */\n subscribe<T extends BaseEvent = BaseEvent>(\n eventType: string,\n handler: EventHandler<T>\n ): EventSubscription {\n // Generate unique subscription ID\n const subscriptionId = generateSubscriptionId();\n\n // Wrap handler to catch errors, provide context, AND track pending handlers\n const wrappedHandler = async (event: T) => {\n // Create promise that tracks this handler execution\n const handlerPromise = (async () => {\n try {\n await handler(event);\n } catch (error) {\n console.error(`Error in event handler for ${eventType}:`, error);\n // In production, this could emit an error event or log to monitoring\n }\n })();\n\n // Track this promise\n this.pendingHandlers.add(handlerPromise);\n\n // Remove from tracking when done\n handlerPromise.finally(() => {\n this.pendingHandlers.delete(handlerPromise);\n });\n\n // Don't await - let it run in background (fire-and-forget for publish())\n // But tests can call waitForIdle() to wait for all handlers\n };\n\n // Create subscription object (store wrapped handler for unsubscribing)\n const subscription: EventSubscription = {\n id: subscriptionId,\n eventType,\n handler: wrappedHandler as EventHandler, // Store wrapped handler\n metadata: {\n createdAt: Date.now()\n }\n };\n\n // Register with EventEmitter\n this.emitter.on(eventType, wrappedHandler);\n\n // Store subscription for management\n this.subscriptions.set(subscriptionId, subscription);\n\n return subscription;\n }\n\n /**\n * Unsubscribe from events\n * \n * @param subscriptionId - The subscription ID to remove\n * @returns true if subscription was found and removed, false otherwise\n */\n unsubscribe(subscriptionId: string): boolean {\n const subscription = this.subscriptions.get(subscriptionId);\n if (!subscription) {\n return false;\n }\n\n // Remove from EventEmitter\n this.emitter.removeListener(subscription.eventType, subscription.handler);\n\n // Remove from our tracking\n this.subscriptions.delete(subscriptionId);\n\n return true;\n }\n\n /**\n * Get all active subscriptions\n * \n * @returns Array of all active subscriptions\n */\n getSubscriptions(): EventSubscription[] {\n return Array.from(this.subscriptions.values());\n }\n\n /**\n * Clear all subscriptions (for testing/cleanup)\n */\n clearSubscriptions(): void {\n this.emitter.removeAllListeners();\n this.subscriptions.clear();\n }\n\n /**\n * Get subscription count for a specific event type\n * \n * @param eventType - The event type to count subscribers for\n * @returns Number of active subscriptions for the event type\n */\n getSubscriptionCount(eventType: string): number {\n return this.emitter.listenerCount(eventType);\n }\n\n /**\n * Get all event types that have active subscriptions\n * \n * @returns Array of event types with active subscriptions\n */\n getActiveEventTypes(): string[] {\n return this.emitter.eventNames() as string[];\n }\n\n /**\n * Subscribe to all events (wildcard subscription)\n * Useful for debugging, monitoring, or logging\n * \n * @param handler - Handler that will receive all events\n * @returns EventSubscription object\n */\n subscribeToAll(handler: EventHandler<BaseEvent>): EventSubscription {\n return this.subscribe('*', handler);\n }\n\n /**\n * Wait for all pending event handlers to complete.\n * This is primarily useful for testing to ensure event handlers finish before assertions.\n * \n * In production, events are fire-and-forget for performance.\n * In tests, use this to synchronize and avoid race conditions.\n * \n * @param options - Optional configuration\n * @param options.timeout - Maximum time to wait in ms (default: 5000)\n * @returns Promise that resolves when all handlers complete or timeout occurs\n * \n * @example\n * ```typescript\n * await feedbackAdapter.create(...); // publishes event\n * await eventBus.waitForIdle(); // wait for BacklogAdapter.handleFeedbackCreated()\n * const task = await backlogAdapter.getTask(taskId);\n * expect(task.status).toBe('paused'); // now safe to assert\n * ```\n */\n async waitForIdle(options: { timeout?: number } = {}): Promise<void> {\n const timeout = options.timeout ?? 5000;\n const startTime = Date.now();\n\n while (this.pendingHandlers.size > 0) {\n // Check timeout\n if (Date.now() - startTime > timeout) {\n const pendingCount = this.pendingHandlers.size;\n console.warn(`EventBus.waitForIdle() timeout after ${timeout}ms with ${pendingCount} handlers still pending`);\n break;\n }\n\n // Wait for current batch of handlers\n if (this.pendingHandlers.size > 0) {\n await Promise.race([\n Promise.all(Array.from(this.pendingHandlers)),\n new Promise(resolve => setTimeout(resolve, 10)) // Re-check every 10ms\n ]);\n }\n }\n }\n}\n\n/**\n * Singleton instance for application-wide event bus usage\n */\nexport const eventBus = new EventBus();\n\n/**\n * Type-safe event publisher helper\n * Ensures events conform to GitGovEvent union type\n */\nexport function publishEvent(event: GitGovEvent): void {\n eventBus.publish(event);\n}\n\n/**\n * Type-safe event subscriber helper\n * Provides better TypeScript inference for specific event types\n */\nexport function subscribeToEvent<T extends GitGovEvent>(\n eventType: T['type'],\n handler: EventHandler<T>\n): EventSubscription {\n return eventBus.subscribe(eventType, handler);\n}\n","export { DiagramGenerator, DiagramMetrics } from './diagram_generator';\nexport {\n MermaidRenderer,\n ContentSanitizer,\n MermaidValidator,\n type DiagramOptions,\n RenderingError\n} from './mermaid_renderer';\nexport {\n RelationshipAnalyzer,\n type RelationshipGraph,\n type DiagramNode,\n type DiagramEdge,\n\n CircularDependencyError\n} from './relationship_analyzer';\n","import type { TaskRecord } from '../record_types';\nimport type { CycleRecord } from '../record_types';\nimport { DetailedValidationError } from '../record_validations/common';\n\n/**\n * Specialized module for validating graph input data\n * Follows the Module pattern for technical capabilities\n */\nexport class GraphValidator {\n /**\n * Validates record integrity before processing\n */\n static validateRecordIntegrity(cycles: CycleRecord[], tasks: TaskRecord[]): void {\n if (!Array.isArray(cycles) || !Array.isArray(tasks)) {\n throw new DetailedValidationError('RelationshipAnalyzer', [\n { field: 'cycles', message: 'must be an array', value: cycles },\n { field: 'tasks', message: 'must be an array', value: tasks }\n ]);\n }\n\n this.validateCycles(cycles);\n this.validateTasks(tasks);\n }\n\n private static validateCycles(cycles: CycleRecord[]): void {\n for (let i = 0; i < cycles.length; i++) {\n const cycle = cycles[i];\n if (!cycle) {\n throw new DetailedValidationError('CycleRecord', [\n { field: `index_${i}`, message: 'cycle is undefined', value: cycle }\n ]);\n }\n\n try {\n if (!cycle.id || typeof cycle.id !== 'string') {\n throw new DetailedValidationError('CycleRecord', [\n { field: 'id', message: 'must be a non-empty string', value: cycle.id }\n ]);\n }\n\n if (!cycle.title || typeof cycle.title !== 'string') {\n throw new DetailedValidationError('CycleRecord', [\n { field: 'title', message: 'must be a non-empty string', value: cycle.title }\n ]);\n }\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n throw new DetailedValidationError('CycleRecord', [\n { field: `index_${i}`, message: error instanceof Error ? error.message : String(error), value: cycle }\n ]);\n }\n }\n }\n\n private static validateTasks(tasks: TaskRecord[]): void {\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n if (!task) {\n throw new DetailedValidationError('TaskRecord', [\n { field: `index_${i}`, message: 'task is undefined', value: task }\n ]);\n }\n\n const sourceFile = this.getSourceFile(task);\n\n try {\n if (!task.id || typeof task.id !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'id', message: 'must be a non-empty string', value: task.id }\n ]);\n }\n\n if (!task.title || typeof task.title !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'title', message: 'must be a non-empty string', value: task.title }\n ]);\n }\n\n if (!task.description || typeof task.description !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'description', message: 'must be a non-empty string', value: task.description }\n ]);\n }\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n const fileInfo = sourceFile !== 'unknown' ? `\\n📁 File: .gitgov/tasks/${sourceFile}` : '';\n throw new DetailedValidationError('TaskRecord', [\n { field: `index_${i}`, message: `${error instanceof Error ? error.message : String(error)}${fileInfo}\\n💡 Check this file for missing or invalid fields in payload.`, value: task }\n ]);\n }\n }\n }\n\n /**\n * Safely extracts source file information from task record\n */\n private static getSourceFile(task: TaskRecord): string {\n if (task && typeof task === 'object' && '_sourceFile' in task) {\n const sourceFile = (task as TaskRecord & { _sourceFile?: unknown })._sourceFile;\n return typeof sourceFile === 'string' ? sourceFile : 'unknown';\n }\n return 'unknown';\n }\n}","import type { TaskRecord } from '../record_types';\nimport type { CycleRecord } from '../record_types';\nimport { GraphValidator } from './graph_validator';\n\nexport interface DiagramNode {\n id: string;\n type: 'cycle' | 'epic-task' | 'task';\n title: string;\n status?: string;\n tags?: string[];\n originalId: string;\n}\n\nexport interface DiagramEdge {\n from: string;\n to: string;\n type: 'hierarchy';\n}\n\nexport interface RelationshipGraph {\n nodes: DiagramNode[];\n edges: DiagramEdge[];\n metadata: {\n nodeCount: number;\n edgeCount: number;\n generatedAt: string;\n duplicatesRemoved?: {\n nodes: number;\n edges: number;\n };\n };\n}\n\nexport class CircularDependencyError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CircularDependencyError';\n }\n}\n\nexport class RelationshipAnalyzer {\n\n /**\n * Analyzes relationships between cycles and tasks to build a complete graph\n */\n analyzeRelationships(cycles: CycleRecord[], tasks: TaskRecord[]): RelationshipGraph {\n // Validate record integrity using specialized validator\n GraphValidator.validateRecordIntegrity(cycles, tasks);\n\n const rawGraph = this.buildRawGraph(cycles, tasks);\n const cleanGraph = this.processAndValidateGraph(rawGraph);\n\n return this.createRelationshipGraph(rawGraph, cleanGraph);\n }\n\n /**\n * Builds the initial graph with potential duplicates\n */\n private buildRawGraph(cycles: CycleRecord[], tasks: TaskRecord[]): { nodes: DiagramNode[], edges: DiagramEdge[] } {\n const rawNodes = this.buildNodes(cycles, tasks);\n const rawEdges = this.buildEdges(cycles, tasks, rawNodes);\n return { nodes: rawNodes, edges: rawEdges };\n }\n\n /**\n * Processes raw graph to remove duplicates and validate structure\n */\n private processAndValidateGraph(rawGraph: { nodes: DiagramNode[], edges: DiagramEdge[] }): { nodes: DiagramNode[], edges: DiagramEdge[] } {\n // Detect and report duplicates as warnings\n this.reportDuplicateWarnings(rawGraph.nodes, rawGraph.edges);\n\n // Deduplicate nodes and edges\n const nodes = this.deduplicateNodes(rawGraph.nodes);\n const edges = this.deduplicateEdges(rawGraph.edges);\n\n // Detect circular dependencies\n this.detectCircularDependencies(edges);\n\n return { nodes, edges };\n }\n\n /**\n * Creates the final RelationshipGraph with metadata\n */\n private createRelationshipGraph(\n rawGraph: { nodes: DiagramNode[], edges: DiagramEdge[] },\n cleanGraph: { nodes: DiagramNode[], edges: DiagramEdge[] }\n ): RelationshipGraph {\n return {\n nodes: cleanGraph.nodes,\n edges: cleanGraph.edges,\n metadata: {\n nodeCount: cleanGraph.nodes.length,\n edgeCount: cleanGraph.edges.length,\n generatedAt: new Date().toISOString(),\n duplicatesRemoved: {\n nodes: rawGraph.nodes.length - cleanGraph.nodes.length,\n edges: rawGraph.edges.length - cleanGraph.edges.length,\n },\n },\n };\n }\n\n\n\n /**\n * Generates clean node ID for Mermaid syntax (removes timestamp, converts hyphens)\n */\n generateNodeId(record: CycleRecord | TaskRecord): string {\n return record.id\n .replace(/^\\d+-/, '') // Remove timestamp prefix\n .replace(/-/g, '_'); // Convert hyphens to underscores\n }\n\n\n\n /**\n * Builds all nodes from cycles and tasks\n */\n private buildNodes(cycles: CycleRecord[], tasks: TaskRecord[]): DiagramNode[] {\n const nodes: DiagramNode[] = [];\n\n // Add cycle nodes\n for (const cycle of cycles) {\n nodes.push({\n id: this.generateNodeId(cycle),\n type: 'cycle',\n title: cycle.title,\n status: cycle.status,\n tags: cycle.tags || [],\n originalId: cycle.id,\n });\n }\n\n // Add task nodes (both epic and regular)\n for (const task of tasks) {\n const isEpic = this.isEpicTask(task);\n\n // Use title field for task display\n const title = task.title || 'Untitled Task';\n\n const node: DiagramNode = {\n id: this.generateNodeId(task),\n type: isEpic ? 'epic-task' : 'task',\n title,\n status: task.status,\n originalId: task.id,\n };\n if (task.tags) {\n node.tags = task.tags;\n }\n nodes.push(node);\n }\n\n return nodes;\n }\n\n /**\n * Builds all hierarchical edges from protocol relationships\n */\n private buildEdges(cycles: CycleRecord[], _tasks: TaskRecord[], nodes: DiagramNode[]): DiagramEdge[] {\n const edges: DiagramEdge[] = [];\n const nodeMap = new Map(nodes.map(n => [n.originalId, n.id]));\n\n // Build cycle -> child cycle relationships\n for (const cycle of cycles) {\n if (cycle.childCycleIds) {\n for (const childId of cycle.childCycleIds) {\n const fromId = nodeMap.get(cycle.id);\n const toId = nodeMap.get(childId);\n\n if (fromId && toId) {\n edges.push({\n from: fromId,\n to: toId,\n type: 'hierarchy',\n });\n }\n }\n }\n\n // Build cycle -> task relationships \n if (cycle.taskIds) {\n for (const taskId of cycle.taskIds) {\n const fromId = nodeMap.get(cycle.id);\n const toId = nodeMap.get(taskId);\n\n if (fromId && toId) {\n edges.push({\n from: fromId,\n to: toId,\n type: 'hierarchy',\n });\n }\n }\n }\n }\n\n return edges;\n }\n\n /**\n * Checks if a task is an epic based on tags\n */\n private isEpicTask(task: TaskRecord): boolean {\n return task.tags?.some(tag => tag.startsWith('epic:')) ?? false;\n }\n\n /**\n * Detects circular dependencies in the graph\n */\n private detectCircularDependencies(edges: DiagramEdge[]): void {\n const graph = new Map<string, string[]>();\n\n // Build adjacency list\n for (const edge of edges) {\n if (!graph.has(edge.from)) {\n graph.set(edge.from, []);\n }\n graph.get(edge.from)!.push(edge.to);\n }\n\n // DFS to detect cycles with path tracking\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n for (const node of graph.keys()) {\n if (!visited.has(node)) {\n const cyclePath = this.findCycleDFS(node, graph, visited, recursionStack, path);\n if (cyclePath.length > 0) {\n const cycleDescription = this.formatCycleError(cyclePath);\n throw new CircularDependencyError(cycleDescription);\n }\n }\n }\n }\n\n /**\n * DFS helper for circular dependency detection with path tracking\n */\n private findCycleDFS(\n node: string,\n graph: Map<string, string[]>,\n visited: Set<string>,\n recursionStack: Set<string>,\n path: string[]\n ): string[] {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const neighbors = graph.get(node) || [];\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor)) {\n const cyclePath = this.findCycleDFS(neighbor, graph, visited, recursionStack, path);\n if (cyclePath.length > 0) {\n return cyclePath;\n }\n } else if (recursionStack.has(neighbor)) {\n // Found a cycle - extract the cycle path\n const cycleStartIndex = path.indexOf(neighbor);\n return path.slice(cycleStartIndex).concat([neighbor]);\n }\n }\n\n recursionStack.delete(node);\n path.pop();\n return [];\n }\n\n /**\n * Formats a circular dependency error with helpful context\n */\n private formatCycleError(cyclePath: string[]): string {\n const cycleNodes = cyclePath.slice(0, -1); // Remove duplicate at end\n const nodeNames = cycleNodes.map(nodeId => {\n // Try to extract readable name from node ID\n const cleanId = nodeId.replace(/^(cycle_|task_)/, '').replace(/_/g, '-');\n return cleanId;\n });\n\n let message = `Circular dependency detected in GitGovernance entities:\\n\\n`;\n message += `🔄 Dependency Cycle:\\n`;\n\n for (let i = 0; i < cycleNodes.length; i++) {\n const current = nodeNames[i];\n const next = nodeNames[(i + 1) % nodeNames.length];\n message += ` ${current} → ${next}\\n`;\n }\n\n message += `\\n💡 To fix this issue:\\n`;\n message += ` 1. Review the childCycleIds in these cycle files:\\n`;\n cycleNodes.forEach(nodeId => {\n const cleanId = nodeId.replace(/^cycle_/, '').replace(/_/g, '-');\n message += ` - .gitgov/cycles/${cleanId}.json\\n`;\n });\n message += ` 2. Remove one of the circular references to break the cycle\\n`;\n message += ` 3. Consider if the dependency relationship is actually needed\\n`;\n\n return message;\n }\n\n /**\n * Reports duplicate nodes and edges as console warnings\n */\n private reportDuplicateWarnings(nodes: DiagramNode[], edges: DiagramEdge[]): void {\n // Analyze node duplicates\n const nodeCount = new Map<string, { count: number, sources: string[] }>();\n for (const node of nodes) {\n const current = nodeCount.get(node.id) || { count: 0, sources: [] };\n current.count++;\n current.sources.push(node.originalId);\n nodeCount.set(node.id, current);\n }\n\n const duplicateNodes = Array.from(nodeCount.entries())\n .filter(([_, data]) => data.count > 1);\n\n // Analyze edge duplicates\n const edgeCount = new Map<string, number>();\n for (const edge of edges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n edgeCount.set(edgeKey, (edgeCount.get(edgeKey) || 0) + 1);\n }\n\n const duplicateEdges = Array.from(edgeCount.entries())\n .filter(([_, count]) => count > 1);\n\n // Report warnings if duplicates found\n if (duplicateNodes.length > 0 || duplicateEdges.length > 0) {\n console.warn('\\n⚠️ GitGovernance Data Quality Warnings:');\n\n if (duplicateNodes.length > 0) {\n console.warn('\\n📦 Duplicate Nodes Detected:');\n duplicateNodes.forEach(([id, data]) => {\n const cleanSources = [...new Set(data.sources)]; // Remove duplicate sources\n console.warn(` • ${id} (appears ${data.count} times)`);\n if (cleanSources.length > 1) {\n console.warn(` Sources: ${cleanSources.join(', ')}`);\n console.warn(` 💡 Fix: Check for duplicate cycle/task IDs in .gitgov/ files`);\n } else {\n console.warn(` Source: ${cleanSources[0]} (same ID referenced multiple times)`);\n console.warn(` 💡 Fix: Check for duplicate childCycleIds/taskIds references`);\n }\n });\n }\n\n if (duplicateEdges.length > 0) {\n console.warn('\\n🔗 Duplicate Edges Detected:');\n duplicateEdges.forEach(([edge, count]) => {\n console.warn(` • ${edge} (appears ${count} times)`);\n });\n console.warn(' 💡 Fix: Check for duplicate references in childCycleIds/taskIds arrays');\n }\n\n console.warn('\\n✂️ Auto-deduplication: Duplicates will be removed from the generated diagram');\n console.warn('📋 Recommendation: Run `gitgov lint` to identify and fix data quality issues\\n');\n }\n }\n\n /**\n * Removes duplicate nodes based on their ID (O(n) performance)\n */\n private deduplicateNodes(nodes: DiagramNode[]): DiagramNode[] {\n const nodeMap = new Map<string, DiagramNode>();\n\n // Use Map to automatically handle deduplication while preserving first occurrence\n for (const node of nodes) {\n if (!nodeMap.has(node.id)) {\n nodeMap.set(node.id, node);\n }\n }\n\n return Array.from(nodeMap.values());\n }\n\n /**\n * Removes duplicate edges based on from-to combination (O(n) performance)\n */\n private deduplicateEdges(edges: DiagramEdge[]): DiagramEdge[] {\n const edgeMap = new Map<string, DiagramEdge>();\n\n for (const edge of edges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n if (!edgeMap.has(edgeKey)) {\n edgeMap.set(edgeKey, edge);\n }\n }\n\n return Array.from(edgeMap.values());\n }\n\n /**\n * Detects and reports duplicate nodes/edges for diagnostic purposes\n * Useful for testing and debugging data quality issues\n */\n detectDuplicates(cycles: CycleRecord[], tasks: TaskRecord[]): {\n duplicateNodes: Array<{ id: string, count: number, sources: string[] }>;\n duplicateEdges: Array<{ edge: string, count: number }>;\n } {\n const rawNodes = this.buildNodes(cycles, tasks);\n const rawEdges = this.buildEdges(cycles, tasks, rawNodes);\n\n // Analyze node duplicates\n const nodeCount = new Map<string, { count: number, sources: string[] }>();\n for (const node of rawNodes) {\n const current = nodeCount.get(node.id) || { count: 0, sources: [] };\n current.count++;\n current.sources.push(node.originalId);\n nodeCount.set(node.id, current);\n }\n\n const duplicateNodes = Array.from(nodeCount.entries())\n .filter(([_, data]) => data.count > 1)\n .map(([id, data]) => ({ id, count: data.count, sources: data.sources }));\n\n // Analyze edge duplicates\n const edgeCount = new Map<string, number>();\n for (const edge of rawEdges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n edgeCount.set(edgeKey, (edgeCount.get(edgeKey) || 0) + 1);\n }\n\n const duplicateEdges = Array.from(edgeCount.entries())\n .filter(([_, count]) => count > 1)\n .map(([edge, count]) => ({ edge, count }));\n\n return { duplicateNodes, duplicateEdges };\n }\n\n /**\n * Filters cycles and tasks based on specified criteria\n */\n filterEntities(\n cycles: CycleRecord[],\n tasks: TaskRecord[],\n filters: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n }\n ): { filteredCycles: CycleRecord[], filteredTasks: TaskRecord[] } {\n let filteredCycles = [...cycles];\n let filteredTasks = [...tasks];\n\n // Filter by specific cycle ID\n if (filters.cycleId) {\n const targetCycle = cycles.find(c => c.id === filters.cycleId);\n if (targetCycle) {\n // Include the target cycle and its related entities\n const relatedCycleIds = new Set([filters.cycleId]);\n const relatedTaskIds = new Set<string>();\n\n // Recursively add all descendant cycles\n const addDescendantCycles = (cycleId: string) => {\n const cycle = cycles.find(c => c.id === cycleId);\n if (cycle?.childCycleIds) {\n cycle.childCycleIds.forEach(childId => {\n if (!relatedCycleIds.has(childId)) {\n relatedCycleIds.add(childId);\n addDescendantCycles(childId); // Recursive call\n }\n });\n }\n };\n\n // Start recursive traversal from target cycle\n addDescendantCycles(filters.cycleId);\n\n // Add tasks from all related cycles\n cycles.forEach(cycle => {\n if (relatedCycleIds.has(cycle.id) && cycle.taskIds) {\n cycle.taskIds.forEach(taskId => relatedTaskIds.add(taskId));\n }\n });\n\n filteredCycles = cycles.filter(c => relatedCycleIds.has(c.id));\n filteredTasks = tasks.filter(t => relatedTaskIds.has(t.id));\n }\n }\n\n // Filter by specific task ID\n if (filters.taskId) {\n const targetTask = tasks.find(t => t.id === filters.taskId);\n if (targetTask) {\n filteredTasks = [targetTask];\n\n // Find cycles that contain this task\n filteredCycles = cycles.filter(c =>\n c.taskIds && c.taskIds.includes(filters.taskId!)\n );\n }\n }\n\n // Filter by package name (using tags)\n if (filters.packageName) {\n const packageTag = `package:${filters.packageName}`;\n\n filteredCycles = filteredCycles.filter(c =>\n c.tags && c.tags.includes(packageTag)\n );\n\n filteredTasks = filteredTasks.filter(t =>\n t.tags && t.tags.includes(packageTag)\n );\n }\n\n return { filteredCycles, filteredTasks };\n }\n}\n","import type { RelationshipGraph, DiagramNode, DiagramEdge } from './relationship_analyzer';\n\nexport interface DiagramOptions {\n layout: 'LR' | 'TD' | 'RL' | 'BT';\n includeEpicTasks: boolean;\n maxDepth: number;\n colorScheme: 'default' | 'dark' | 'minimal' | 'corporate';\n showAssignments: boolean;\n filterByStatus?: string[];\n}\n\nexport class RenderingError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'RenderingError';\n }\n}\n\nexport class ContentSanitizer {\n sanitizeNodeTitle(title: string): string {\n // Remove potentially dangerous characters for Mermaid, but preserve <br/> tags\n return title\n .replace(/<(?!br\\/?>)[^>]*>/g, '') // Remove HTML tags except <br/> and <br>\n .replace(/[\"']/g, '') // Remove quotes that could break syntax\n .substring(0, 150); // Increased limit to accommodate line breaks\n }\n\n sanitizeNodeId(id: string): string {\n // Ensure valid Mermaid node ID\n return id.replace(/[^a-zA-Z0-9_-]/g, '_');\n }\n\n sanitizeStatus(status: string): string {\n const allowedStatuses = [\n 'pending', 'in-progress', 'done', 'blocked',\n 'cancelled', 'draft', 'planning', 'active',\n 'completed', 'archived', 'paused', 'discarded',\n 'validated', 'audit_oracle_create', 'audit_oracle_close',\n 'ready', 'review', 'in_progress'\n ];\n return allowedStatuses.includes(status) ? status : 'unknown';\n }\n\n sanitizeGraph(graph: RelationshipGraph): RelationshipGraph {\n return {\n nodes: graph.nodes.map(node => {\n const sanitizedNode: DiagramNode = {\n id: this.sanitizeNodeId(node.id),\n type: node.type,\n title: this.sanitizeNodeTitle(node.title),\n originalId: node.originalId,\n };\n\n if (node.status) {\n sanitizedNode.status = this.sanitizeStatus(node.status);\n }\n\n if (node.tags) {\n sanitizedNode.tags = node.tags;\n }\n\n return sanitizedNode;\n }),\n edges: graph.edges.filter(edge => edge.from && edge.to),\n metadata: graph.metadata,\n };\n }\n}\n\nexport class MermaidValidator {\n isValidMermaidSyntax(content: string): boolean {\n // Basic Mermaid syntax validation\n const lines = content.split('\\n');\n\n // Must start with flowchart declaration\n const flowchartLine = lines.find(line => line.trim().startsWith('flowchart'));\n if (!flowchartLine) {\n return false;\n }\n\n // Check for balanced brackets in node definitions\n const nodeLines = lines.filter(line => line.includes('[\"') && line.includes('\"]'));\n for (const line of nodeLines) {\n const openBrackets = (line.match(/\\[\"/g) || []).length;\n const closeBrackets = (line.match(/\"\\]/g) || []).length;\n if (openBrackets !== closeBrackets) {\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport class MermaidRenderer {\n private readonly sanitizer: ContentSanitizer;\n private readonly validator: MermaidValidator;\n\n constructor() {\n this.sanitizer = new ContentSanitizer();\n this.validator = new MermaidValidator();\n }\n\n /**\n * Main rendering method with input sanitization and output validation\n */\n renderGraph(graph: RelationshipGraph, options: DiagramOptions): string {\n if (!graph || !graph.nodes || !graph.edges) {\n throw new RenderingError('Invalid graph structure');\n }\n\n const sanitizedGraph = this.sanitizer.sanitizeGraph(graph);\n const content = this.generateMermaidContent(sanitizedGraph, options);\n\n // Validate generated Mermaid syntax\n if (!this.validator.isValidMermaidSyntax(content)) {\n throw new RenderingError('Generated invalid Mermaid syntax');\n }\n\n return content;\n }\n\n /**\n * Generates the complete Mermaid diagram content\n */\n private generateMermaidContent(graph: RelationshipGraph, options: DiagramOptions): string {\n const header = this.generateHeader(options);\n const nodes = this.generateNodes(graph.nodes);\n const edges = this.generateEdges(graph.edges);\n const styling = this.generateStyling();\n const statusClasses = this.generateStatusClasses(graph.nodes);\n\n return [\n '```mermaid',\n header,\n '',\n nodes,\n '',\n edges,\n '',\n styling,\n '',\n statusClasses,\n '```'\n ].join('\\n');\n }\n\n /**\n * Generates the diagram header with metadata\n */\n private generateHeader(options: DiagramOptions): string {\n const timestamp = new Date().toISOString();\n return [\n `flowchart ${options.layout}`,\n ` %% Auto-generated on ${timestamp}`,\n ` %% Source: .gitgov/ entities`,\n ].join('\\n');\n }\n\n /**\n * Generates node syntax for all nodes\n */\n private generateNodes(nodes: DiagramNode[]): string {\n const nodeLines = nodes.map(node => this.generateNodeSyntax(node));\n return nodeLines.join('\\n');\n }\n\n /**\n * Generates edge syntax for all relationships\n */\n private generateEdges(edges: DiagramEdge[]): string {\n if (edges.length === 0) {\n return ' %% No relationships found';\n }\n\n const edgeLines = [\n ' %% ONLY hierarchical relationships from protocol',\n ' %% Source: CycleRecord.childCycleIds and CycleRecord.taskIds',\n ...edges.map(edge => this.generateEdgeSyntax(edge))\n ];\n\n return edgeLines.join('\\n');\n }\n\n /**\n * Wraps a title string to a specified max width, using <br/> for line breaks.\n * Also sanitizes the title.\n * @param title The title to wrap.\n * @param maxWidth The maximum width of a line.\n * @returns The wrapped and sanitized title string.\n */\n private wrapTitle(title: string, maxWidth: number = 30): string {\n // The sanitizer already limits total length, so this is for readability.\n const sanitizedTitle = this.sanitizer.sanitizeNodeTitle(title);\n if (sanitizedTitle.length <= maxWidth) {\n return sanitizedTitle;\n }\n\n const words = sanitizedTitle.split(' ');\n const lines = [];\n let currentLine = words.shift() || '';\n\n for (const word of words) {\n if ((currentLine + ' ' + word).length > maxWidth) {\n lines.push(currentLine);\n currentLine = word;\n } else {\n currentLine += ` ${word}`;\n }\n }\n lines.push(currentLine);\n\n return lines.join('<br/>');\n }\n\n /**\n * Node generation with word wrapping for better readability.\n * Uses different shapes for different node types:\n * - Cycles: Hexagonal shape {{text}} for strategic importance\n * - Tasks: Rectangular shape [text] for implementation details\n */\n generateNodeSyntax(node: DiagramNode): string {\n const wrappedTitle = this.wrapTitle(node.title);\n const sanitizedId = this.sanitizer.sanitizeNodeId(node.id);\n\n const icon = this.getNodeIcon(node.type);\n\n // Use hexagonal shape for cycles (strategic level)\n if (node.type === 'cycle') {\n return ` ${sanitizedId}{{\"${icon}<br/>${wrappedTitle}\"}}`;\n }\n\n // Use rectangular shape for tasks (implementation level)\n if (node.type === 'epic-task' && node.status === 'paused') {\n return ` ${sanitizedId}[\"${icon}<br/>${wrappedTitle}<br/>(PAUSED)\"]`;\n }\n\n return ` ${sanitizedId}[\"${icon}<br/>${wrappedTitle}\"]`;\n }\n\n /**\n * Edge generation with relationship validation\n */\n generateEdgeSyntax(edge: DiagramEdge): string {\n if (!edge.from || !edge.to) {\n throw new RenderingError('Edge must have valid from and to nodes');\n }\n\n const sanitizedFrom = this.sanitizer.sanitizeNodeId(edge.from);\n const sanitizedTo = this.sanitizer.sanitizeNodeId(edge.to);\n\n return ` ${sanitizedFrom} --> ${sanitizedTo}`;\n }\n\n /**\n * Gets the appropriate icon for each node type\n */\n private getNodeIcon(type: string): string {\n const icons = {\n 'cycle': '🎯',\n 'epic-task': '📦',\n 'task': '📋',\n };\n return icons[type as keyof typeof icons] || '📋';\n }\n\n /**\n * Generates the mandatory color scheme CSS\n */\n private generateStyling(): string {\n return [\n ' %% Status styling (mandatory color scheme)',\n ' classDef statusDraft fill:#ffffff,stroke:#cccccc,stroke-width:2px,color:#666666',\n ' classDef statusReady fill:#ffffeb,stroke:#cccc00,stroke-width:2px,color:#666600',\n ' classDef statusInProgress fill:#ebf5ff,stroke:#0066cc,stroke-width:2px,color:#003366',\n ' classDef statusDone fill:#ebffeb,stroke:#00cc00,stroke-width:2px,color:#006600',\n ' classDef statusBlocked fill:#ffebeb,stroke:#cc0000,stroke-width:2px,color:#660000',\n ' classDef statusEpicPaused fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px,color:#4a148c',\n ' classDef statusArchived fill:#f5f5f5,stroke:#666666,stroke-width:2px,color:#333333',\n ].join('\\n');\n }\n\n /**\n * Applies status-based CSS classes to nodes\n */\n private generateStatusClasses(nodes: DiagramNode[]): string {\n const statusGroups = new Map<string, string[]>();\n\n // Group nodes by status\n for (const node of nodes) {\n const statusClass = this.getStatusClass(node.status || 'draft', node);\n\n\n if (!statusGroups.has(statusClass)) {\n statusGroups.set(statusClass, []);\n }\n statusGroups.get(statusClass)!.push(node.id);\n }\n\n // Generate class applications\n const classLines: string[] = [];\n for (const [statusClass, nodeIds] of statusGroups.entries()) {\n if (nodeIds.length > 0) {\n const sanitizedIds = nodeIds.map(id => this.sanitizer.sanitizeNodeId(id));\n classLines.push(` class ${sanitizedIds.join(',')} ${statusClass}`);\n }\n }\n\n return [\n ' %% Apply styles based on entity status',\n ...classLines\n ].join('\\n');\n }\n\n /**\n * Maps entity status to CSS class name with cycle and epic task special handling\n */\n private getStatusClass(status: string, node?: DiagramNode): string {\n // Special case: Epic task paused (waiting for parent cycle)\n if (status === 'paused' && node?.type === 'epic-task') {\n return 'statusEpicPaused'; // Purple - not a real blockage\n }\n\n // Handle cycle statuses\n if (node?.type === 'cycle') {\n const cycleStatusMap: Record<string, string> = {\n 'planning': 'statusDraft', // White - being planned\n 'active': 'statusInProgress', // Blue - sprint/milestone running\n 'completed': 'statusDone', // Green - all tasks finished\n 'archived': 'statusArchived', // Gray - historical record\n };\n return cycleStatusMap[status] || 'statusDraft';\n }\n\n // Handle task statuses\n const taskStatusMap: Record<string, string> = {\n // Completed states - Green\n 'done': 'statusDone',\n 'validated': 'statusDone',\n\n // Active states - Blue \n 'active': 'statusInProgress',\n 'in_progress': 'statusInProgress',\n\n // Ready states - Yellow (only for tasks)\n 'ready': 'statusReady',\n 'pending': 'statusReady',\n\n // Preparation states - White\n 'draft': 'statusDraft',\n 'review': 'statusDraft',\n\n // Real blockages - Red (only for NON-epic tasks)\n 'blocked': 'statusBlocked',\n 'paused': 'statusBlocked',\n 'cancelled': 'statusBlocked',\n 'discarded': 'statusBlocked',\n\n // Archived states - Gray\n 'archived': 'statusArchived',\n\n // Legacy oracle states - White (preparation)\n 'audit_oracle_create': 'statusDraft',\n 'audit_oracle_close': 'statusDraft',\n };\n\n return taskStatusMap[status] || 'statusDraft';\n }\n}\n","import { RelationshipAnalyzer, type RelationshipGraph } from './relationship_analyzer';\nimport { MermaidRenderer, type DiagramOptions } from './mermaid_renderer';\nimport type { TaskRecord } from '../record_types';\nimport type { CycleRecord } from '../record_types';\nimport { promises as fs } from \"fs\";\nimport * as path from \"path\";\n\nconst MAX_GENERATION_TIME_HISTORY = 100;\n\nexport class DiagramMetrics {\n private cacheHits: number = 0;\n private cacheMisses: number = 0;\n private generationTimes: number[] = [];\n\n incrementCacheHits(): void {\n this.cacheHits++;\n }\n\n incrementCacheMisses(): void {\n this.cacheMisses++;\n }\n\n recordGenerationTime(timeMs: number): void {\n this.generationTimes.push(timeMs);\n\n // Keep only last N measurements to prevent memory leak\n if (this.generationTimes.length > MAX_GENERATION_TIME_HISTORY) {\n this.generationTimes.shift();\n }\n }\n\n getCacheHitRatio(): number {\n const total = this.cacheHits + this.cacheMisses;\n return total === 0 ? 0 : this.cacheHits / total;\n }\n\n getAverageGenerationTime(): number {\n if (this.generationTimes.length === 0) return 0;\n\n const sum = this.generationTimes.reduce((a, b) => a + b, 0);\n return sum / this.generationTimes.length;\n }\n\n getStats() {\n return {\n cacheHitRatio: this.getCacheHitRatio(),\n averageGenerationTime: this.getAverageGenerationTime(),\n totalGenerations: this.generationTimes.length,\n };\n }\n}\n\nexport class DiagramGenerator {\n private readonly options: DiagramOptions;\n private readonly cache: Map<string, RelationshipGraph>;\n private readonly metrics: DiagramMetrics;\n public readonly analyzer: RelationshipAnalyzer;\n private readonly renderer: MermaidRenderer;\n\n constructor(options: Partial<DiagramOptions> = {}) {\n this.options = Object.freeze({\n layout: 'LR',\n includeEpicTasks: true,\n maxDepth: 4,\n colorScheme: 'default',\n showAssignments: false,\n ...options\n } as DiagramOptions);\n\n this.cache = new Map();\n this.metrics = new DiagramMetrics();\n this.analyzer = new RelationshipAnalyzer();\n this.renderer = new MermaidRenderer();\n }\n\n /**\n * Primary API - Performance optimized with caching\n */\n async generateFromRecords(\n cycles: CycleRecord[],\n tasks: TaskRecord[],\n filters?: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n },\n showArchived: boolean = false\n ): Promise<string> {\n const cacheKey = this.generateCacheKey(cycles, tasks, showArchived);\n\n if (this.cache.has(cacheKey)) {\n this.metrics.incrementCacheHits();\n return this.renderFromCache(cacheKey);\n }\n\n const startTime = performance.now();\n\n try {\n // Apply filters if provided\n let finalCycles = cycles;\n let finalTasks = tasks;\n\n // Filter out archived entities by default (EARS-18)\n if (!showArchived) {\n finalCycles = cycles.filter(cycle => cycle.status !== 'archived');\n finalTasks = tasks.filter(task => task.status !== 'archived');\n }\n\n if (filters && (filters.cycleId || filters.taskId || filters.packageName)) {\n const filtered = this.analyzer.filterEntities(finalCycles, finalTasks, filters);\n finalCycles = filtered.filteredCycles;\n finalTasks = filtered.filteredTasks;\n }\n\n const graph = this.analyzer.analyzeRelationships(finalCycles, finalTasks);\n const result = this.renderer.renderGraph(graph, this.options);\n\n this.cache.set(cacheKey, graph);\n this.metrics.recordGenerationTime(performance.now() - startTime);\n this.metrics.incrementCacheMisses();\n\n return result;\n } catch (error) {\n this.metrics.recordGenerationTime(performance.now() - startTime);\n throw error;\n }\n }\n\n /**\n * Convenience method to generate from .gitgov/ directory\n */\n async generateFromFiles(\n gitgovPath: string = '.gitgov',\n filters?: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n },\n showArchived: boolean = false\n ): Promise<string> {\n const cycles = await this.loadCycleRecords(gitgovPath);\n const tasks = await this.loadTaskRecords(gitgovPath);\n\n return this.generateFromRecords(cycles, tasks, filters, showArchived);\n }\n\n /**\n * Loads all cycle records from the filesystem\n */\n public async loadCycleRecords(gitgovPath: string): Promise<CycleRecord[]> {\n const cyclesDir = path.join(gitgovPath, 'cycles');\n\n try {\n const files = await fs.readdir(cyclesDir);\n const jsonFiles = files.filter(file => file.endsWith('.json'));\n\n const cycles: CycleRecord[] = [];\n\n for (const file of jsonFiles) {\n try {\n const filePath = path.join(cyclesDir, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const record = JSON.parse(content);\n\n // Extract payload from EmbeddedMetadata structure\n if (record.payload && record.payload.id) {\n const cycleRecord = record.payload as CycleRecord;\n // Add file source info for better error reporting\n (cycleRecord as any)._sourceFile = file;\n cycles.push(cycleRecord);\n } else {\n console.warn(`⚠️ Cycle file ${file} missing payload or payload.id`);\n }\n } catch (error) {\n console.warn(`❌ Could not parse cycle file ${file}:`, error instanceof Error ? error.message : String(error));\n }\n }\n\n return cycles;\n } catch (error) {\n if (error instanceof Error && error.message.includes('ENOENT')) {\n console.warn(`⚠️ Cycles directory not found: ${cyclesDir}`);\n console.warn(`💡 Run 'gitgov init' to create the .gitgov directory structure`);\n } else {\n console.warn(`❌ Could not read cycles directory:`, error instanceof Error ? error.message : String(error));\n }\n return [];\n }\n }\n\n /**\n * Loads all task records from the filesystem\n */\n public async loadTaskRecords(gitgovPath: string): Promise<TaskRecord[]> {\n const tasksDir = path.join(gitgovPath, 'tasks');\n\n try {\n const files = await fs.readdir(tasksDir);\n const jsonFiles = files.filter(file => file.endsWith('.json'));\n\n const tasks: TaskRecord[] = [];\n\n for (const file of jsonFiles) {\n try {\n const filePath = path.join(tasksDir, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const record = JSON.parse(content);\n\n // Extract payload from EmbeddedMetadata structure\n if (record.payload && record.payload.id) {\n const taskRecord = record.payload as TaskRecord;\n // Add file source info for better error reporting\n (taskRecord as any)._sourceFile = file;\n\n\n tasks.push(taskRecord);\n } else {\n console.warn(`⚠️ Task file ${file} missing payload or payload.id`);\n }\n } catch (error) {\n console.warn(`❌ Could not parse task file ${file}:`, error instanceof Error ? error.message : String(error));\n }\n }\n\n return tasks;\n } catch (error) {\n if (error instanceof Error && error.message.includes('ENOENT')) {\n console.warn(`⚠️ Tasks directory not found: ${tasksDir}`);\n console.warn(`💡 Run 'gitgov init' to create the .gitgov directory structure`);\n } else {\n console.warn(`❌ Could not read tasks directory:`, error instanceof Error ? error.message : String(error));\n }\n return [];\n }\n }\n\n /**\n * Renders diagram from cached graph\n */\n private renderFromCache(cacheKey: string): string {\n const graph = this.cache.get(cacheKey)!;\n return this.renderer.renderGraph(graph, this.options);\n }\n\n /**\n * Generates cache key for efficient lookups\n */\n private generateCacheKey(cycles: CycleRecord[], tasks: TaskRecord[], showArchived: boolean = false): string {\n // Use Set for O(1) deduplication and consistent ordering\n const cycleIds = [...new Set(cycles.map(c => c.id))].sort();\n const taskIds = [...new Set(tasks.map(t => t.id))].sort();\n\n const cycleHash = this.hashArray(cycleIds);\n const taskHash = this.hashArray(taskIds);\n const optionsHash = this.hashString(JSON.stringify(this.options));\n const archivedFlag = showArchived ? 'with-archived' : 'no-archived';\n\n return `diagram:${cycleHash}-${taskHash}-${optionsHash}-${archivedFlag}`;\n }\n\n /**\n * Efficient hash function for arrays\n */\n private hashArray(items: string[]): string {\n let hash = 0;\n for (const item of items) {\n hash = ((hash << 5) - hash) + this.hashString(item);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash.toString(36);\n }\n\n /**\n * Simple hash function for strings\n */\n private hashString(str: string): number {\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; // Convert to 32bit integer\n }\n return hash;\n }\n\n\n\n /**\n * Get performance metrics\n */\n getMetrics() {\n return this.metrics.getStats();\n }\n}\n","// Types\nexport type {\n CodeSnippet,\n Detector,\n DetectorConfig,\n DetectorName,\n FindingCategory,\n FindingSeverity,\n Finding,\n LlmDetector,\n LlmDetectorConfig,\n LlmRawFinding,\n FindingDetectorConfig,\n QuotaType,\n RegexRule,\n} from \"./types\";\n\n// Module\nexport { FindingDetectorModule } from \"./finding_detector\";\n\n// Detectors\nexport { RegexDetector } from \"./detectors/regex_detector\";\nexport { HeuristicDetector } from \"./detectors/heuristic_detector\";\nexport { HttpLlmDetector } from \"./detectors/http_llm_detector\";\n\n// Rules\nexport { REGEX_RULES } from \"./rules/regex_rules\";\n","import type { RegexRule } from \"../types\";\n\nexport const REGEX_RULES: RegexRule[] = [\n // === PII ===\n {\n id: \"PII-001\",\n pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/g,\n category: \"pii-email\",\n severity: \"high\",\n message: \"Email address detected in source code\",\n suggestion: \"Move to configuration or environment variable\",\n legalReference: \"GDPR Art. 4(1)\",\n },\n {\n id: \"PII-002\",\n pattern: /(\\+?\\d{1,3}[-.\\s]?)?\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}/g,\n category: \"pii-phone\",\n severity: \"medium\",\n message: \"Phone number pattern detected\",\n suggestion: \"Avoid hardcoding personal phone numbers\",\n },\n {\n id: \"PII-003\",\n pattern: /\\b(?:\\d{4}[-\\s]?){3}\\d{4}\\b/g,\n category: \"pii-financial\",\n severity: \"critical\",\n message: \"Potential credit card number detected\",\n suggestion: \"Never store credit card numbers in source code\",\n legalReference: \"PCI-DSS, GDPR Art. 32\",\n },\n {\n id: \"PII-004\",\n pattern: /\\b\\d{3}-\\d{2}-\\d{4}\\b/g,\n category: \"pii-generic\",\n severity: \"critical\",\n message: \"US Social Security Number pattern detected\",\n suggestion: \"SSNs must never be stored in source code\",\n },\n {\n id: \"PII-005\",\n pattern: /\\b(ssn|dni|document_number|iban)\\b/gi,\n category: \"pii-generic\",\n severity: \"medium\",\n message: \"Sensitive field name detected\",\n suggestion: \"Review if real data or structure requiring encryption\",\n },\n\n // === SECRETS ===\n {\n id: \"SEC-001\",\n pattern:\n /(?:api[_-]?key|apikey|secret[_-]?key)\\s*[:=]\\s*['\"][^'\"]{20,}['\"]/gi,\n category: \"hardcoded-secret\",\n severity: \"critical\",\n message: \"Hardcoded API key detected\",\n suggestion: \"Use environment variables or secret management\",\n },\n {\n id: \"SEC-002\",\n pattern: /AKIA[0-9A-Z]{16}/g,\n category: \"hardcoded-secret\",\n severity: \"critical\",\n message: \"AWS Access Key ID detected\",\n suggestion: \"Rotate this key immediately and use IAM roles\",\n },\n {\n id: \"SEC-003\",\n pattern: /-----BEGIN (?:RSA |EC )?PRIVATE KEY-----/g,\n category: \"hardcoded-secret\",\n severity: \"critical\",\n message: \"Private key detected in source code\",\n suggestion: \"Never commit private keys. Use secret management.\",\n },\n\n // === LOGGING PII ===\n {\n id: \"LOG-001\",\n pattern:\n /console\\.(log|info|warn|error)\\s*\\([^)]*(?:email|password|ssn|phone|credit)/gi,\n category: \"logging-pii\",\n severity: \"high\",\n message: \"Potential PII being logged\",\n suggestion: \"Sanitize logs to remove personal data\",\n legalReference: \"GDPR Art. 5(1)(f)\",\n },\n];\n","import { createHash, randomUUID } from \"node:crypto\";\nimport type { Detector, Finding, RegexRule } from \"../types\";\nimport { REGEX_RULES } from \"../rules/regex_rules\";\n\nconst MAX_SNIPPET_LENGTH = 300;\n\n/**\n * Generates SHA256 fingerprint for deduplication.\n * Format: hash(ruleId:file:line)\n */\nfunction generateFingerprint(\n ruleId: string,\n file: string,\n line: number\n): string {\n return createHash(\"sha256\").update(`${ruleId}:${file}:${line}`).digest(\"hex\");\n}\n\n/**\n * Truncates snippet to maximum 300 characters.\n */\nfunction truncateSnippet(snippet: string): string {\n if (snippet.length <= MAX_SNIPPET_LENGTH) {\n return snippet;\n }\n return snippet.slice(0, MAX_SNIPPET_LENGTH - 3) + \"...\";\n}\n\n/**\n * Calculates line number (1-based) given an index in content.\n */\nfunction getLineNumber(content: string, index: number): number {\n return content.slice(0, index).split(\"\\n\").length;\n}\n\n/**\n * Extracts snippet from line where match occurs.\n */\nfunction extractSnippet(content: string, matchIndex: number): string {\n const lines = content.split(\"\\n\");\n const lineNumber = getLineNumber(content, matchIndex);\n const line = lines[lineNumber - 1] || \"\";\n return truncateSnippet(line.trim());\n}\n\n/**\n * Regex-based detector for PII and secrets.\n * Tier: Free (always available)\n * Confidence: 1.0 (deterministic)\n */\nexport class RegexDetector implements Detector {\n readonly name = \"regex\" as const;\n private rules: RegexRule[];\n\n constructor(ruleIds?: string[]) {\n if (ruleIds && ruleIds.length > 0) {\n this.rules = REGEX_RULES.filter((r) => ruleIds.includes(r.id));\n } else {\n this.rules = REGEX_RULES;\n }\n }\n\n async detect(content: string, filePath: string): Promise<Finding[]> {\n const findings: Finding[] = [];\n\n for (const rule of this.rules) {\n // Reset regex lastIndex for global patterns\n const pattern = new RegExp(rule.pattern.source, rule.pattern.flags);\n\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(content)) !== null) {\n const line = getLineNumber(content, match.index);\n const snippet = extractSnippet(content, match.index);\n\n const finding: Finding = {\n id: randomUUID(),\n ruleId: rule.id,\n category: rule.category,\n severity: rule.severity,\n file: filePath,\n line,\n snippet,\n message: rule.message,\n detector: this.name,\n fingerprint: generateFingerprint(rule.id, filePath, line),\n confidence: 1.0,\n };\n if (rule.suggestion) finding.suggestion = rule.suggestion;\n if (rule.legalReference) finding.legalReference = rule.legalReference;\n findings.push(finding);\n }\n }\n\n return findings;\n }\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport type { Detector, FindingCategory, FindingSeverity, Finding } from \"../types\";\n\nconst MAX_SNIPPET_LENGTH = 300;\n\n// Pattern for HEUR-001: Sensitive variable names\nconst SENSITIVE_VAR_PATTERN =\n /\\b(user|customer|client|employee|patient)(_)?(email|phone|ssn|address|creditcard|password)\\b/gi;\n\n// Pattern for HEUR-002: Logging of user/customer objects\nconst LOGGING_PATTERN =\n /console\\.(log|info|debug|warn)\\s*\\([^)]*\\b(user|customer|request\\.body|formData)\\b/gi;\n\n// Pattern for HEUR-003: Serialization of sensitive objects\nconst SERIALIZE_PATTERN =\n /JSON\\.stringify\\s*\\([^)]*\\b(user|customer|profile|account)\\b/gi;\n\ninterface HeuristicRule {\n id: string;\n pattern: RegExp;\n category: FindingCategory;\n severity: FindingSeverity;\n confidence: number;\n message: string;\n suggestion?: string;\n}\n\nconst HEURISTIC_RULES: HeuristicRule[] = [\n {\n id: \"HEUR-001\",\n pattern: SENSITIVE_VAR_PATTERN,\n category: \"pii-generic\",\n severity: \"medium\",\n confidence: 0.7,\n message: \"Sensitive variable name detected\",\n suggestion: \"Consider if this variable contains actual PII\",\n },\n {\n id: \"HEUR-002\",\n pattern: LOGGING_PATTERN,\n category: \"logging-pii\",\n severity: \"medium\",\n confidence: 0.6,\n message: \"Logging of potentially sensitive object detected\",\n suggestion: \"Sanitize logged objects to remove PII\",\n },\n {\n id: \"HEUR-003\",\n pattern: SERIALIZE_PATTERN,\n category: \"third-party-transfer\",\n severity: \"low\",\n confidence: 0.5,\n message: \"JSON serialization of potentially sensitive object\",\n suggestion: \"Ensure sensitive fields are excluded before serialization\",\n },\n];\n\n/**\n * Generates SHA256 fingerprint for deduplication.\n */\nfunction generateFingerprint(\n ruleId: string,\n file: string,\n line: number\n): string {\n return createHash(\"sha256\").update(`${ruleId}:${file}:${line}`).digest(\"hex\");\n}\n\n/**\n * Truncates snippet to maximum 300 characters.\n */\nfunction truncateSnippet(snippet: string): string {\n if (snippet.length <= MAX_SNIPPET_LENGTH) {\n return snippet;\n }\n return snippet.slice(0, MAX_SNIPPET_LENGTH - 3) + \"...\";\n}\n\n/**\n * Calculates line number (1-based) given an index in content.\n */\nfunction getLineNumber(content: string, index: number): number {\n return content.slice(0, index).split(\"\\n\").length;\n}\n\n/**\n * Extracts snippet from line where match occurs.\n */\nfunction extractSnippet(content: string, matchIndex: number): string {\n const lines = content.split(\"\\n\");\n const lineNumber = getLineNumber(content, matchIndex);\n const line = lines[lineNumber - 1] || \"\";\n return truncateSnippet(line.trim());\n}\n\n/**\n * Heuristic detector for complex PII patterns.\n * Tier: Trial+ (requires enablement)\n * Confidence: 0.5-0.7 (probabilistic)\n */\nexport class HeuristicDetector implements Detector {\n readonly name = \"heuristic\" as const;\n\n async detect(content: string, filePath: string): Promise<Finding[]> {\n const findings: Finding[] = [];\n\n for (const rule of HEURISTIC_RULES) {\n // Reset regex lastIndex for global patterns\n const pattern = new RegExp(rule.pattern.source, rule.pattern.flags);\n\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(content)) !== null) {\n const line = getLineNumber(content, match.index);\n const snippet = extractSnippet(content, match.index);\n\n const finding: Finding = {\n id: randomUUID(),\n ruleId: rule.id,\n category: rule.category,\n severity: rule.severity,\n file: filePath,\n line,\n snippet,\n message: rule.message,\n detector: this.name,\n fingerprint: generateFingerprint(rule.id, filePath, line),\n confidence: rule.confidence,\n };\n if (rule.suggestion) finding.suggestion = rule.suggestion;\n findings.push(finding);\n }\n }\n\n return findings;\n }\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport type {\n CodeSnippet,\n FindingCategory,\n Finding,\n LlmDetector,\n LlmRawFinding,\n} from \"../types\";\n\nconst MAX_SNIPPET_LENGTH = 300;\n\n/**\n * Generates SHA256 fingerprint for deduplication.\n * Format: hash(ruleId:file:line)\n */\nfunction generateFingerprint(\n ruleId: string,\n file: string,\n line: number\n): string {\n return createHash(\"sha256\").update(`${ruleId}:${file}:${line}`).digest(\"hex\");\n}\n\n/**\n * Truncates snippet to maximum 300 characters.\n */\nfunction truncateSnippet(snippet: string): string {\n if (snippet.length <= MAX_SNIPPET_LENGTH) {\n return snippet;\n }\n return snippet.slice(0, MAX_SNIPPET_LENGTH - 3) + \"...\";\n}\n\n/**\n * Validates if a category string is a valid FindingCategory.\n */\nfunction isValidCategory(category: string): category is FindingCategory {\n const validCategories: FindingCategory[] = [\n \"pii-email\",\n \"pii-phone\",\n \"pii-financial\",\n \"pii-health\",\n \"pii-generic\",\n \"hardcoded-secret\",\n \"logging-pii\",\n \"tracking-cookie\",\n \"tracking-analytics-id\",\n \"unencrypted-storage\",\n \"third-party-transfer\",\n \"unknown-risk\",\n ];\n return validCategories.includes(category as FindingCategory);\n}\n\n/**\n * HTTP-based LLM detector for semantic PII analysis.\n * Tier: Premium (requires API key and quota)\n * Confidence: 0.9 (LLM-confirmed)\n *\n * Implements EARS-24: Reads API key from GITGOV_LLM_API_KEY env var\n * Implements EARS-25: Uses Bearer token authentication\n */\nexport class HttpLlmDetector implements LlmDetector {\n private endpoint: string;\n private apiKey: string;\n\n constructor(endpoint: string, apiKey: string) {\n this.endpoint = endpoint;\n this.apiKey = apiKey;\n }\n\n /**\n * Analyzes code snippets with LLM for semantic PII detection.\n * Implements EARS-18: Send candidates to LLM when quota available\n * Implements EARS-19: Normalize LLM response to Finding format\n */\n async analyzeSnippets(snippets: CodeSnippet[]): Promise<Finding[]> {\n if (snippets.length === 0) {\n return [];\n }\n\n const response = await fetch(this.endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({ snippets }),\n });\n\n if (!response.ok) {\n throw new Error(`LLM API error: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as { findings: LlmRawFinding[] };\n return this.normalizeFindings(data.findings);\n }\n\n /**\n * Normalizes raw LLM findings to Finding format.\n */\n private normalizeFindings(rawFindings: LlmRawFinding[]): Finding[] {\n return rawFindings.map((raw) => {\n const category: FindingCategory = isValidCategory(raw.category)\n ? raw.category\n : \"unknown-risk\";\n\n const finding: Finding = {\n id: randomUUID(),\n ruleId: raw.ruleId ?? \"LLM-001\",\n category,\n severity: raw.severity,\n file: raw.file,\n line: raw.line,\n snippet: truncateSnippet(raw.snippet ?? \"\"),\n message: raw.message,\n detector: \"llm\",\n fingerprint: generateFingerprint(\n raw.ruleId ?? \"LLM-001\",\n raw.file,\n raw.line\n ),\n confidence: raw.confidence ?? 0.9,\n };\n\n if (raw.suggestion) finding.suggestion = raw.suggestion;\n if (raw.legalReference) finding.legalReference = raw.legalReference;\n\n return finding;\n });\n }\n}\n","import type {\n CodeSnippet,\n Detector,\n Finding,\n LlmDetector,\n LlmDetectorConfig,\n FindingDetectorConfig,\n} from \"./types\";\nimport { RegexDetector } from \"./detectors/regex_detector\";\nimport { HeuristicDetector } from \"./detectors/heuristic_detector\";\nimport { HttpLlmDetector } from \"./detectors/http_llm_detector\";\n\n/**\n * Finding Detector Module - Central component for sensitive data detection.\n *\n * Architecture: Two-phase detection\n * - Phase 1: Local detection (regex + heuristic) - always runs\n * - Phase 2: Remote LLM analysis - only for low-confidence candidates\n *\n * Implements EARS-14: Execute Phase 1 before Phase 2\n * Implements EARS-16: Deduplicate by SHA256 fingerprint\n * Implements EARS-17: Work with local-only detection when no LLM\n * Implements EARS-23: Truncate snippets to 300 chars\n */\nexport class FindingDetectorModule {\n private localDetectors: Detector[] = [];\n private llmDetector?: LlmDetector;\n private llmConfig?: LlmDetectorConfig;\n\n /**\n * Constructs the module with graceful degradation.\n * Without config -> only RegexDetector (Free tier).\n */\n constructor(config?: FindingDetectorConfig) {\n // RegexDetector always available (Free tier)\n if (config?.regex?.enabled === false) {\n // Explicitly disabled\n } else {\n this.localDetectors.push(new RegexDetector(config?.regex?.rules));\n }\n\n // HeuristicDetector if enabled (Trial+ tier)\n if (config?.heuristic?.enabled) {\n this.localDetectors.push(new HeuristicDetector());\n }\n\n // LlmDetector if enabled and configured (Premium tier)\n if (config?.llm?.enabled && config.llm.endpoint) {\n this.llmConfig = config.llm;\n const apiKey = process.env[\"GITGOV_LLM_API_KEY\"];\n if (apiKey) {\n this.llmDetector = new HttpLlmDetector(config.llm.endpoint, apiKey);\n }\n // Graceful degradation: no API key -> local-only detection\n }\n }\n\n /**\n * Detects PII and secrets in file content.\n *\n * Flow:\n * 1. Run all enabled local detectors (Phase 1)\n * 2. Extract candidates with confidence < 0.8\n * 3. If LLM enabled and quota OK, analyze candidates (Phase 2)\n * 4. Merge and deduplicate by fingerprint\n */\n async detect(content: string, filePath: string): Promise<Finding[]> {\n // Phase 1: Local detection\n const localFindings = await this.runLocalDetectors(content, filePath);\n\n // Phase 2: LLM analysis (if available)\n let llmFindings: Finding[] = [];\n if (this.llmDetector && this.checkQuota()) {\n const candidates = this.extractCandidates(localFindings, content, filePath);\n if (candidates.length > 0) {\n try {\n llmFindings = await this.llmDetector.analyzeSnippets(candidates);\n this.decrementQuota(candidates.length);\n } catch {\n // Graceful degradation: LLM error -> continue with local findings\n }\n }\n }\n\n // Merge and deduplicate\n return this.deduplicateByFingerprint([...localFindings, ...llmFindings]);\n }\n\n /**\n * Runs all local detectors and collects findings.\n */\n private async runLocalDetectors(\n content: string,\n filePath: string\n ): Promise<Finding[]> {\n const results = await Promise.all(\n this.localDetectors.map((d) => d.detect(content, filePath))\n );\n return results.flat();\n }\n\n /**\n * Extracts CodeSnippets from low-confidence findings for LLM analysis.\n * Includes 2 lines of context before and after.\n * Implements EARS-15: Extract candidates with confidence < 0.8\n */\n private extractCandidates(\n findings: Finding[],\n content: string,\n filePath: string\n ): CodeSnippet[] {\n const lines = content.split(\"\\n\");\n const lang = this.detectLanguage(filePath);\n\n return findings\n .filter((f) => f.confidence < 0.8)\n .map((f) => ({\n file: filePath,\n lineStart: Math.max(1, f.line - 2),\n lineEnd: Math.min(lines.length, f.line + 2),\n language: lang,\n content: lines.slice(Math.max(0, f.line - 3), f.line + 2).join(\"\\n\"),\n heuristicTags: [f.category, f.detector],\n }));\n }\n\n /**\n * Checks if LLM quota is available.\n * Implements EARS-20: Reject when trial expired\n * Implements EARS-21: Reject when remainingUses is zero\n */\n private checkQuota(): boolean {\n if (!this.llmConfig) return false;\n\n if (this.llmConfig.quotaType === \"unlimited\") return true;\n\n if (this.llmConfig.quotaType === \"trial\") {\n if (this.llmConfig.expiresAt) {\n const expired = new Date(this.llmConfig.expiresAt) < new Date();\n if (expired) return false;\n }\n }\n\n return (this.llmConfig.remainingUses ?? 0) > 0;\n }\n\n /**\n * Decrements quota after successful LLM call.\n * Implements EARS-22: Decrement remainingUses after successful call\n */\n private decrementQuota(count: number): void {\n if (this.llmConfig?.remainingUses !== undefined) {\n this.llmConfig.remainingUses = Math.max(\n 0,\n this.llmConfig.remainingUses - count\n );\n }\n }\n\n /**\n * Deduplicates findings by SHA256 fingerprint.\n */\n private deduplicateByFingerprint(findings: Finding[]): Finding[] {\n const seen = new Set<string>();\n return findings.filter((f) => {\n if (seen.has(f.fingerprint)) return false;\n seen.add(f.fingerprint);\n return true;\n });\n }\n\n /**\n * Detects programming language based on file extension.\n */\n private detectLanguage(filePath: string): string {\n const ext = filePath.split(\".\").pop()?.toLowerCase();\n const map: Record<string, string> = {\n ts: \"typescript\",\n tsx: \"typescript\",\n js: \"javascript\",\n jsx: \"javascript\",\n py: \"python\",\n go: \"go\",\n java: \"java\",\n rs: \"rust\",\n rb: \"ruby\",\n };\n return map[ext ?? \"\"] ?? \"unknown\";\n }\n}\n","// Main module\nexport { SourceAuditorModule } from \"./source_auditor\";\n\n// Internal components (exported for testing/extension)\nexport { ScopeSelector } from \"./scope_selector\";\nexport { ScoringEngine } from \"./scoring_engine\";\nexport { WaiverReader } from \"./waiver_reader\";\nexport { WaiverWriter } from \"./waiver_writer\";\n\n// Types\nexport type {\n // Target and Scope types\n AuditTarget,\n CodeScope,\n JiraScope,\n GitgovScope,\n AuditScope,\n // Output/Display types\n GroupByOption,\n OutputFormat,\n FailOnSeverity,\n // File content types (direct audit mode)\n FileContent,\n AuditContentsInput,\n // Core interfaces\n SourceAuditorDependencies,\n ScopeConfig,\n AuditOptions,\n AuditResult,\n AuditSummary,\n WaiverStatus,\n WaiverMetadata,\n ActiveWaiver,\n CreateWaiverOptions,\n IWaiverReader,\n} from \"./types\";\n","import type { ScopeConfig, ScopeSelectorDependencies } from \"./types\";\nimport type { IGitModule } from \"../git\";\nimport type { FileLister } from \"../file_lister\";\n\n/**\n * Internal component for selecting files based on glob patterns.\n * Instantiated internally by SourceAuditorModule with injected dependencies.\n *\n * Store Backends Epic: Uses FileLister abstraction instead of direct fs access.\n */\nexport class ScopeSelector {\n private fileLister: FileLister;\n private gitModule: IGitModule | undefined;\n\n constructor(deps: ScopeSelectorDependencies) {\n this.fileLister = deps.fileLister;\n if (deps.gitModule) {\n this.gitModule = deps.gitModule;\n }\n }\n\n /**\n * Selects files matching include patterns, excluding those matching exclude patterns.\n * Automatically respects .gitignore patterns from the project root.\n * If scope.changedSince is set and gitModule is available, only returns files changed since that commit.\n * @param scope - Include and exclude glob patterns, optional changedSince commit\n * @param _baseDir - Base directory (unused - FileLister has its own cwd)\n * @returns Array of file paths relative to FileLister's cwd\n */\n async selectFiles(scope: ScopeConfig, _baseDir: string): Promise<string[]> {\n if (scope.include.length === 0) {\n return [];\n }\n\n // Load .gitignore patterns from project root\n const gitignorePatterns = await this.loadGitignorePatterns();\n\n // Merge: gitignore patterns + user-provided excludes\n const allExcludes = [...gitignorePatterns, ...scope.exclude];\n\n // If changedSince is set and gitModule is available, use incremental mode\n if (scope.changedSince && this.gitModule) {\n return this.selectChangedFiles(scope.changedSince, scope.include, allExcludes);\n }\n\n // Full mode: use glob patterns via FileLister\n const files = await this.fileLister.list(scope.include, {\n ignore: allExcludes,\n onlyFiles: true,\n absolute: false,\n });\n\n return files.sort();\n }\n\n /**\n * Selects files changed since a specific commit (incremental mode).\n * Requires gitModule to be available.\n * Includes: git diff, modified files, untracked files.\n */\n private async selectChangedFiles(\n sinceCommit: string,\n includePatterns: string[],\n excludes: string[]\n ): Promise<string[]> {\n if (!this.gitModule) {\n // GitModule not available - fall back to empty\n return [];\n }\n\n const changedFiles = new Set<string>();\n\n try {\n // 1. Files changed between sinceCommit and HEAD\n const diffResult = await this.gitModule.exec('git', ['diff', '--name-only', `${sinceCommit}..HEAD`]);\n if (diffResult.exitCode === 0) {\n diffResult.stdout.split(\"\\n\").filter(Boolean).forEach((f) => changedFiles.add(f));\n }\n\n // 2. Currently modified files (staged and unstaged)\n const statusResult = await this.gitModule.exec('git', ['status', '--porcelain']);\n if (statusResult.exitCode === 0) {\n statusResult.stdout.split(\"\\n\").filter(Boolean).forEach((line) => {\n // Format: \"XY filename\" where X=staged, Y=unstaged\n const file = line.slice(3).trim();\n if (file) changedFiles.add(file);\n });\n }\n\n // 3. Untracked files\n const untrackedResult = await this.gitModule.exec('git', ['ls-files', '--others', '--exclude-standard']);\n if (untrackedResult.exitCode === 0) {\n untrackedResult.stdout.split(\"\\n\").filter(Boolean).forEach((f) => changedFiles.add(f));\n }\n } catch {\n // Git commands failed - fall back to empty\n return [];\n }\n\n // Filter changed files by include patterns and excludes using FileLister\n const allChangedFiles = Array.from(changedFiles);\n if (allChangedFiles.length === 0) {\n return [];\n }\n\n // Use FileLister to filter by patterns - list matching include patterns then intersect\n const matchingFiles = await this.fileLister.list(includePatterns, {\n ignore: excludes,\n onlyFiles: true,\n absolute: false,\n });\n\n // Intersect: only files that are both changed AND match patterns\n const matchingSet = new Set(matchingFiles);\n const filtered = allChangedFiles.filter(f => matchingSet.has(f));\n\n return filtered.sort();\n }\n\n /**\n * Reads .gitignore and converts patterns to glob format.\n * Returns empty array if .gitignore doesn't exist.\n */\n private async loadGitignorePatterns(): Promise<string[]> {\n try {\n const exists = await this.fileLister.exists(\".gitignore\");\n if (!exists) {\n return [];\n }\n const content = await this.fileLister.read(\".gitignore\");\n return this.parseGitignore(content);\n } catch {\n // No .gitignore found or read error - continue without exclusions\n return [];\n }\n }\n\n /**\n * Parses .gitignore content into glob patterns.\n * Handles comments, empty lines, and directory patterns.\n */\n private parseGitignore(content: string): string[] {\n return content\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith(\"#\"))\n .map((pattern) => {\n // Convert gitignore pattern to glob pattern\n // Directory pattern (ends with /) -> match recursively\n if (pattern.endsWith(\"/\")) {\n return `**/${pattern}**`;\n }\n // Pattern without slash -> can match at any level\n if (!pattern.includes(\"/\")) {\n return `**/${pattern}`;\n }\n // Pattern with slash -> relative to root\n return pattern;\n });\n }\n}\n","import type { Finding } from \"../finding_detector/types\";\n\n/**\n * Internal component for applying scoring rules to findings.\n * Not injectable - instantiated internally by SourceAuditorModule.\n *\n * Currently a pass-through; scoring rules will be added in future cycles.\n */\nexport class ScoringEngine {\n /**\n * Applies scoring rules to findings.\n * Currently returns findings unchanged (future enhancement).\n * @param findings - Findings to score\n * @returns Scored findings (same as input for now)\n */\n score(findings: Finding[]): Finding[] {\n // Future: Apply weighted scoring based on:\n // - Severity weights\n // - Category priorities\n // - Context-aware adjustments\n return findings;\n }\n}\n","import type { Finding, DetectorName } from \"../finding_detector/types\";\nimport type {\n SourceAuditorDependencies,\n ScopeSelectorDependencies,\n AuditOptions,\n AuditResult,\n AuditSummary,\n AuditContentsInput,\n FileContent,\n ActiveWaiver,\n} from \"./types\";\nimport { ScopeSelector } from \"./scope_selector\";\nimport { ScoringEngine } from \"./scoring_engine\";\n\nconst BATCH_SIZE = 100;\n\n/**\n * Source Auditor Module - Main audit pipeline for source code.\n *\n * Two entry points:\n * - auditContents(): Pure mode - receives FileContent[] directly (no I/O)\n * - audit(): FileLister mode - discovers and reads files, then delegates to auditContents()\n *\n * Pipeline: Detect -> Filter -> Score -> Output\n *\n * Store Backends Epic: FileLister abstracts file access for serverless compatibility.\n * auditContents() enables direct mode without any FileLister (API, pre-loaded, etc.)\n */\nexport class SourceAuditorModule {\n private scopeSelector?: ScopeSelector;\n private scoringEngine: ScoringEngine;\n\n /**\n * Creates module instance with injected dependencies.\n * Only findingDetector is required. fileLister/waiverReader are needed only for audit().\n */\n constructor(private deps: SourceAuditorDependencies) {\n // Only create ScopeSelector if FileLister is available (needed for audit())\n if (deps.fileLister) {\n const scopeDeps: ScopeSelectorDependencies = {\n fileLister: deps.fileLister,\n };\n if (deps.gitModule) {\n scopeDeps.gitModule = deps.gitModule;\n }\n this.scopeSelector = new ScopeSelector(scopeDeps);\n }\n this.scoringEngine = new ScoringEngine();\n }\n\n /**\n * Pure audit mode - receives pre-loaded file contents directly.\n * No FileLister or I/O needed.\n *\n * Use cases:\n * - API/serverless: files fetched from GitHub API, S3, etc.\n * - Testing: files created in memory\n * - Direct: caller already has file contents\n */\n async auditContents(input: AuditContentsInput): Promise<AuditResult> {\n const startTime = Date.now();\n\n if (input.files.length === 0) {\n return this.createEmptyResult(startTime);\n }\n\n // Step 1: Detection on pre-loaded content\n const { findings, scannedLines, detectors } = await this.runDetectionOnContents(input.files);\n\n // Step 2: Filter by Waivers (if provided)\n const waivers = input.waivers ?? [];\n const { newFindings, acknowledgedCount } = this.filterByWaivers(findings, waivers);\n\n // Step 3: Scoring\n const scoredFindings = this.scoringEngine.score(newFindings);\n\n // Step 4: Generate Result\n const duration = Date.now() - startTime;\n\n return {\n findings: scoredFindings,\n summary: this.calculateSummary(scoredFindings),\n scannedFiles: input.files.length,\n scannedLines,\n duration,\n detectors: [...new Set(detectors)],\n waivers: {\n acknowledged: acknowledgedCount,\n new: scoredFindings.length,\n },\n };\n }\n\n /**\n * FileLister-based audit - discovers files via scope selection, reads them,\n * then delegates to auditContents().\n *\n * Requires fileLister in dependencies. Use auditContents() for direct mode.\n */\n async audit(options: AuditOptions): Promise<AuditResult> {\n if (!this.deps.fileLister || !this.scopeSelector) {\n throw new Error('FileLister required for audit(). Use auditContents() for direct mode.');\n }\n\n const startTime = Date.now();\n const baseDir = options.baseDir || process.cwd();\n\n // Step 1: Scope Selection\n const filePaths = await this.scopeSelector.selectFiles(options.scope, baseDir);\n\n if (filePaths.length === 0) {\n return this.createEmptyResult(startTime);\n }\n\n // Step 2: Read file contents via FileLister\n const files: FileContent[] = [];\n for (const filePath of filePaths) {\n try {\n const content = await this.deps.fileLister.read(filePath);\n files.push({ path: filePath, content });\n } catch {\n // Graceful degradation: skip unreadable files\n continue;\n }\n }\n\n // Step 3: Load Waivers\n let waivers: ActiveWaiver[] = [];\n if (this.deps.waiverReader) {\n try {\n waivers = await this.deps.waiverReader.loadActiveWaivers();\n } catch {\n // Graceful degradation: continue without waivers\n }\n }\n\n // Step 4: Delegate to pure pipeline\n const result = await this.auditContents({ files, waivers });\n\n // Adjust duration to include scope selection + file reading\n return {\n ...result,\n duration: Date.now() - startTime,\n };\n }\n\n /**\n * Runs detection on pre-loaded file contents, processing in batches.\n */\n private async runDetectionOnContents(\n files: FileContent[]\n ): Promise<{\n findings: Finding[];\n scannedLines: number;\n detectors: DetectorName[];\n }> {\n const allFindings: Finding[] = [];\n const detectors: DetectorName[] = [];\n let scannedLines = 0;\n\n const batches = this.createBatches(files, files.length > 1000 ? BATCH_SIZE : files.length);\n\n for (const batch of batches) {\n for (const file of batch) {\n try {\n scannedLines += file.content.split(\"\\n\").length;\n\n const fileFindings = await this.deps.findingDetector.detect(file.content, file.path);\n\n for (const finding of fileFindings) {\n allFindings.push(finding);\n if (!detectors.includes(finding.detector)) {\n detectors.push(finding.detector);\n }\n }\n } catch {\n // Graceful degradation: skip files that fail detection\n continue;\n }\n }\n }\n\n return { findings: allFindings, scannedLines, detectors };\n }\n\n /**\n * Creates batches of files for processing.\n */\n private createBatches<T>(items: T[], batchSize: number): T[][] {\n const batches: T[][] = [];\n for (let i = 0; i < items.length; i += batchSize) {\n batches.push(items.slice(i, i + batchSize));\n }\n return batches;\n }\n\n /**\n * Filters findings that already have active waivers.\n * @returns new findings and count of acknowledged\n */\n private filterByWaivers(\n findings: Finding[],\n waivers: ActiveWaiver[]\n ): { newFindings: Finding[]; acknowledgedCount: number } {\n const waiverFingerprints = new Set(waivers.map((w) => w.fingerprint));\n const newFindings = findings.filter(\n (f) => !waiverFingerprints.has(f.fingerprint)\n );\n const acknowledgedCount = findings.length - newFindings.length;\n return { newFindings, acknowledgedCount };\n }\n\n /**\n * Calculates summary of findings by severity, category, and detector.\n */\n private calculateSummary(findings: Finding[]): AuditSummary {\n const summary: AuditSummary = {\n total: findings.length,\n bySeverity: { critical: 0, high: 0, medium: 0, low: 0, info: 0 },\n byCategory: {},\n byDetector: { regex: 0, heuristic: 0, llm: 0 },\n };\n\n for (const finding of findings) {\n summary.bySeverity[finding.severity]++;\n summary.byCategory[finding.category] =\n (summary.byCategory[finding.category] || 0) + 1;\n summary.byDetector[finding.detector]++;\n }\n\n return summary;\n }\n\n /**\n * Creates empty result for when no files are selected.\n */\n private createEmptyResult(startTime: number): AuditResult {\n return {\n findings: [],\n summary: {\n total: 0,\n bySeverity: { critical: 0, high: 0, medium: 0, low: 0, info: 0 },\n byCategory: {},\n byDetector: { regex: 0, heuristic: 0, llm: 0 },\n },\n scannedFiles: 0,\n scannedLines: 0,\n duration: Date.now() - startTime,\n detectors: [],\n waivers: { acknowledged: 0, new: 0 },\n };\n }\n}\n","import type { IFeedbackAdapter } from \"../adapters/feedback_adapter\";\nimport type { FeedbackRecord } from \"../record_types\";\nimport type { WaiverMetadata, ActiveWaiver, IWaiverReader } from \"./types\";\n\n/**\n * Reads active waivers from FeedbackRecords.\n * Uses FeedbackAdapter for access to feedback data.\n */\nexport class WaiverReader implements IWaiverReader {\n constructor(private feedbackAdapter: IFeedbackAdapter) {}\n\n /**\n * Loads all active waivers (non-expired).\n * Filters by type: \"approval\" and metadata.fingerprint present.\n */\n async loadActiveWaivers(): Promise<ActiveWaiver[]> {\n const allFeedback = await this.feedbackAdapter.getAllFeedback();\n const now = new Date();\n const result: ActiveWaiver[] = [];\n\n for (const f of allFeedback) {\n if (f.type !== \"approval\" || !f.metadata) continue;\n const meta = f.metadata as WaiverMetadata;\n if (typeof meta.fingerprint !== \"string\") continue;\n if (meta.expiresAt && new Date(meta.expiresAt) <= now) continue;\n\n const waiver: ActiveWaiver = {\n fingerprint: meta.fingerprint,\n ruleId: meta.ruleId,\n feedback: f as FeedbackRecord<WaiverMetadata>,\n };\n if (meta.expiresAt) {\n waiver.expiresAt = new Date(meta.expiresAt);\n }\n result.push(waiver);\n }\n\n return result;\n }\n\n /**\n * Checks if a specific finding has an active waiver.\n */\n async hasActiveWaiver(fingerprint: string): Promise<boolean> {\n const waivers = await this.loadActiveWaivers();\n return waivers.some((w) => w.fingerprint === fingerprint);\n }\n\n /**\n * Gets waivers for a specific ExecutionRecord.\n */\n async getWaiversForExecution(executionId: string): Promise<ActiveWaiver[]> {\n const feedback = await this.feedbackAdapter.getFeedbackByEntity(executionId);\n const now = new Date();\n const result: ActiveWaiver[] = [];\n\n for (const f of feedback) {\n if (f.type !== \"approval\" || !f.metadata) continue;\n const meta = f.metadata as WaiverMetadata;\n if (typeof meta.fingerprint !== \"string\") continue;\n if (meta.expiresAt && new Date(meta.expiresAt) <= now) continue;\n\n const waiver: ActiveWaiver = {\n fingerprint: meta.fingerprint,\n ruleId: meta.ruleId,\n feedback: f as FeedbackRecord<WaiverMetadata>,\n };\n if (meta.expiresAt) {\n waiver.expiresAt = new Date(meta.expiresAt);\n }\n result.push(waiver);\n }\n\n return result;\n }\n}\n","import type { IFeedbackAdapter } from \"../adapters/feedback_adapter\";\nimport type { Finding } from \"../finding_detector/types\";\nimport type { WaiverMetadata, CreateWaiverOptions } from \"./types\";\n\n/**\n * Creates waivers as FeedbackRecords with structured metadata.\n * Uses FeedbackAdapter for signature and event handling.\n */\nexport class WaiverWriter {\n constructor(private feedbackAdapter: IFeedbackAdapter) { }\n\n /**\n * Creates a waiver for a specific finding.\n * The waiver is stored as FeedbackRecord with type: \"approval\".\n */\n async createWaiver(\n options: CreateWaiverOptions,\n actorId: string\n ): Promise<void> {\n const { finding, executionId, justification, expiresAt, relatedTaskId } =\n options;\n\n const metadata: WaiverMetadata = {\n fingerprint: finding.fingerprint,\n ruleId: finding.ruleId,\n file: finding.file,\n line: finding.line,\n };\n\n if (expiresAt) {\n metadata.expiresAt = expiresAt;\n }\n\n if (relatedTaskId) {\n metadata.relatedTaskId = relatedTaskId;\n }\n\n await this.feedbackAdapter.create(\n {\n entityType: \"execution\",\n entityId: executionId,\n type: \"approval\",\n status: \"resolved\",\n content: justification,\n metadata,\n },\n actorId\n );\n }\n\n /**\n * Creates waivers in batch for multiple findings.\n */\n async createWaiversBatch(\n findings: Finding[],\n executionId: string,\n justification: string,\n actorId: string\n ): Promise<void> {\n for (const finding of findings) {\n await this.createWaiver(\n {\n finding,\n executionId,\n justification,\n },\n actorId\n );\n }\n }\n}\n","/**\n * AgentRunner - Agent execution abstraction\n *\n * This module provides backend-agnostic agent execution.\n *\n * IMPORTANT: This module only exports the interface and types.\n * For implementations, use:\n * - @gitgov/core/fs for FsAgentRunner\n *\n * @example\n * ```typescript\n * // Import interface and types\n * import type { IAgentRunner, RunOptions, AgentResponse } from '@gitgov/core';\n *\n * // Import filesystem implementation from fs entry point\n * import { FsAgentRunner } from '@gitgov/core/fs';\n * ```\n */\n\n// Interfaces and handler types (from agent_runner.ts)\nexport type {\n IAgentRunner,\n IAgentLoader,\n ProtocolHandlerRegistry,\n ProtocolHandler,\n RuntimeHandlerRegistry,\n RuntimeHandler,\n} from \"./agent_runner\";\n\n// Pure types (from agent_runner.types.ts)\nexport type {\n RunOptions,\n AgentResponse,\n AgentOutput,\n AgentExecutionContext,\n AgentRunnerDependencies,\n AgentRunnerEvent,\n // Engine types (from protocol)\n Engine,\n EngineType,\n LocalEngine,\n ApiEngine,\n McpEngine,\n CustomEngine,\n AuthType,\n AuthConfig,\n} from \"./agent_runner.types\";\n\n// Errors are part of the public contract\nexport {\n RunnerError,\n AgentNotFoundError,\n FunctionNotExportedError,\n LocalEngineConfigError,\n UnsupportedEngineTypeError,\n EngineConfigError,\n MissingDependencyError,\n RuntimeNotFoundError,\n} from \"./agent_runner.errors\";\n","/**\n * Custom Error Classes for AgentRunnerModule\n *\n * These errors provide typed exceptions for better error handling\n * and diagnostics in the agent runner operations.\n */\n\n/**\n * Base error class for all Runner-related errors\n */\nexport class RunnerError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"RunnerError\";\n Object.setPrototypeOf(this, RunnerError.prototype);\n }\n}\n\n/**\n * Error thrown when an agent file is not found in .gitgov/agents/\n */\nexport class AgentNotFoundError extends RunnerError {\n public readonly agentId: string;\n\n constructor(agentId: string) {\n super(`AgentNotFound: ${agentId}`);\n this.name = \"AgentNotFoundError\";\n this.agentId = agentId;\n Object.setPrototypeOf(this, AgentNotFoundError.prototype);\n }\n}\n\n/**\n * Error thrown when the specified function is not exported from entrypoint\n */\nexport class FunctionNotExportedError extends RunnerError {\n public readonly functionName: string;\n public readonly entrypoint: string;\n\n constructor(functionName: string, entrypoint: string) {\n super(`FunctionNotExported: ${functionName} not found in ${entrypoint}`);\n this.name = \"FunctionNotExportedError\";\n this.functionName = functionName;\n this.entrypoint = entrypoint;\n Object.setPrototypeOf(this, FunctionNotExportedError.prototype);\n }\n}\n\n/**\n * Error thrown when local engine has neither entrypoint nor runtime\n */\nexport class LocalEngineConfigError extends RunnerError {\n constructor() {\n super(\"LocalEngineConfigError: entrypoint or runtime required for execution\");\n this.name = \"LocalEngineConfigError\";\n Object.setPrototypeOf(this, LocalEngineConfigError.prototype);\n }\n}\n\n/**\n * Error thrown when engine.type is not supported\n */\nexport class UnsupportedEngineTypeError extends RunnerError {\n public readonly engineType: string;\n\n constructor(engineType: string) {\n super(`UnsupportedEngineType: ${engineType}`);\n this.name = \"UnsupportedEngineTypeError\";\n this.engineType = engineType;\n Object.setPrototypeOf(this, UnsupportedEngineTypeError.prototype);\n }\n}\n\n/**\n * Error thrown when engine configuration is invalid\n */\nexport class EngineConfigError extends RunnerError {\n public readonly engineType: string;\n public readonly missingField: string;\n\n constructor(engineType: string, missingField: string) {\n super(`EngineConfigError: ${missingField} required for ${engineType}`);\n this.name = \"EngineConfigError\";\n this.engineType = engineType;\n this.missingField = missingField;\n Object.setPrototypeOf(this, EngineConfigError.prototype);\n }\n}\n\n/**\n * Error thrown when a required dependency is missing\n */\nexport class MissingDependencyError extends RunnerError {\n public readonly dependency: string;\n public readonly reason: string;\n\n constructor(dependency: string, reason: string) {\n super(`MissingDependency: ${dependency} ${reason}`);\n this.name = \"MissingDependencyError\";\n this.dependency = dependency;\n this.reason = reason;\n Object.setPrototypeOf(this, MissingDependencyError.prototype);\n }\n}\n\n/**\n * Error thrown when runtime handler is not found in registry\n */\nexport class RuntimeNotFoundError extends RunnerError {\n public readonly runtime: string;\n\n constructor(runtime: string) {\n super(`RuntimeNotFound: ${runtime}`);\n this.name = \"RuntimeNotFoundError\";\n this.runtime = runtime;\n Object.setPrototypeOf(this, RuntimeNotFoundError.prototype);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/adapters/index.ts","../../src/record_types/common.types.ts","../../src/record_schemas/errors.ts","../../src/record_validations/errors.ts","../../src/record_schemas/generated/actor_record_schema.json","../../src/record_schemas/generated/agent_record_schema.json","../../src/record_schemas/generated/changelog_record_schema.json","../../src/record_schemas/generated/cycle_record_schema.json","../../src/record_schemas/generated/embedded_metadata_schema.json","../../src/record_schemas/generated/execution_record_schema.json","../../src/record_schemas/generated/feedback_record_schema.json","../../src/record_schemas/generated/task_record_schema.json","../../src/record_schemas/generated/workflow_record_schema.json","../../src/record_schemas/generated/index.ts","../../src/record_schemas/schema_cache.ts","../../src/crypto/checksum.ts","../../src/logger/index.ts","../../src/logger/logger.ts","../../src/crypto/signatures.ts","../../src/record_schemas/index.ts","../../src/record_validations/embedded_metadata_validator.ts","../../src/record_validations/agent_validator.ts","../../src/record_factories/agent_factory.ts","../../src/adapters/agent_adapter/agent_adapter.ts","../../src/adapters/backlog_adapter/index.ts","../../src/record_validations/task_validator.ts","../../src/utils/id_generator.ts","../../src/record_factories/task_factory.ts","../../src/record_validations/cycle_validator.ts","../../src/record_factories/cycle_factory.ts","../../src/adapters/identity_adapter/index.ts","../../src/record_validations/actor_validator.ts","../../src/record_factories/actor_factory.ts","../../src/adapters/identity_adapter/identity_adapter.ts","../../src/adapters/feedback_adapter/index.ts","../../src/record_validations/feedback_validator.ts","../../src/record_factories/feedback_factory.ts","../../src/adapters/feedback_adapter/feedback_adapter.ts","../../src/adapters/metrics_adapter/index.ts","../../src/adapters/metrics_adapter/metric_adapter.ts","../../src/session_manager/index.ts","../../src/session_manager/session_manager.ts","../../src/adapters/backlog_adapter/backlog_adapter.ts","../../src/adapters/changelog_adapter/index.ts","../../src/record_validations/changelog_validator.ts","../../src/record_factories/changelog_factory.ts","../../src/adapters/changelog_adapter/changelog_adapter.ts","../../src/adapters/execution_adapter/index.ts","../../src/record_validations/execution_validator.ts","../../src/record_factories/execution_factory.ts","../../src/adapters/execution_adapter/execution_adapter.ts","../../src/adapters/indexer_adapter/index.ts","../../src/utils/signature_utils.ts","../../src/crypto/index.ts","../../src/adapters/indexer_adapter/indexer_adapter.ts","../../src/adapters/project_adapter/index.ts","../../src/adapters/project_adapter/project_adapter.ts","../../src/adapters/workflow_adapter/index.ts","../../src/adapters/workflow_adapter/generated/kanban_workflow.json","../../src/adapters/workflow_adapter/generated/scrum_workflow.json","../../src/config_manager/index.ts","../../src/config_manager/config_manager.ts","../../src/record_factories/index.ts","../../src/record_validations/workflow_validator.ts","../../src/record_factories/workflow_factory.ts","../../src/record_factories/embedded_metadata_factory.ts","../../src/git/index.ts","../../src/git/errors.ts","../../src/key_provider/index.ts","../../src/key_provider/key_provider.ts","../../src/key_provider/fs/fs_key_provider.ts","../../src/key_provider/memory/env_key_provider.ts","../../src/key_provider/memory/mock_key_provider.ts","../../src/file_lister/index.ts","../../src/file_lister/file_lister.errors.ts","../../src/file_lister/fs/fs_file_lister.ts","../../src/file_lister/memory/memory_file_lister.ts","../../src/lint/index.ts","../../src/record_types/type_guards.ts","../../src/lint/lint.ts","../../src/project_initializer/index.ts","../../src/record_store/index.ts","../../src/sync_state/index.ts","../../src/sync_state/pull_scheduler.ts","../../src/sync_state/sync_state.errors.ts","../../src/record_validations/index.ts","../../src/record_types/index.ts","../../src/event_bus/index.ts","../../src/event_bus/event_bus.ts","../../src/diagram_generator/index.ts","../../src/diagram_generator/graph_validator.ts","../../src/diagram_generator/relationship_analyzer.ts","../../src/diagram_generator/mermaid_renderer.ts","../../src/diagram_generator/diagram_generator.ts","../../src/finding_detector/index.ts","../../src/finding_detector/rules/regex_rules.ts","../../src/finding_detector/detectors/regex_detector.ts","../../src/finding_detector/detectors/heuristic_detector.ts","../../src/finding_detector/detectors/http_llm_detector.ts","../../src/finding_detector/finding_detector.ts","../../src/source_auditor/index.ts","../../src/source_auditor/scope_selector.ts","../../src/source_auditor/scoring_engine.ts","../../src/source_auditor/source_auditor.ts","../../src/source_auditor/waiver_reader.ts","../../src/source_auditor/waiver_writer.ts","../../src/agent_runner/index.ts","../../src/agent_runner/agent_runner.errors.ts"],"names":["logger","createHash","path","fs2","path3","fs","MAX_SNIPPET_LENGTH","generateFingerprint","truncateSnippet","getLineNumber","extractSnippet","randomUUID"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAA,gBAAA,GAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;AC6EO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EACrC,WAAA,CAAY,SAAiC,IAAA,EAAc;AACzD,IAAA,KAAA,CAAM,OAAO,CAAA;AAD8B,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAE3C,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAAA,EAC/B;AACF,CAAA;;;ACpEO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EAC/C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF,CAAA;AAKO,IAAM,uBAAA,GAAN,cAAsC,WAAA,CAAY;AAAA,EACvD,WAAA,CACE,YACgB,MAAA,EAKhB;AACA,IAAA,MAAM,YAAA,GAAe,MAAA,CAClB,GAAA,CAAI,CAAA,GAAA,KAAO,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,EAAA,EAAK,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA,CACzC,KAAK,IAAI,CAAA;AAEZ,IAAA,KAAA;AAAA,MACE,CAAA,EAAG,UAAU,CAAA,oBAAA,EAAuB,YAAY,CAAA,CAAA;AAAA,MAChD;AAAA,KACF;AAbgB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAclB;AACF,CAAA;;;AC9BO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EAC/C,WAAA,CAAY,UAAkB,6CAAA,EAA+C;AAC3E,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF,CAAA;AAKO,IAAM,0BAAA,GAAN,cAAyC,KAAA,CAAM;AAAA,EACpD,WAAA,CAAY,UAAkB,gCAAA,EAAkC;AAC9D,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AAAA,EACd;AACF,CAAA;;;AC3BA,IAAA,2BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,0BAAA;AAAA,EACP,KAAA,EAAS,aAAA;AAAA,EACT,WAAA,EAAe,oEAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,+BAAA;AAAA,MACX,WAAA,EAAe,kDAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,cAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,SAAA,EAAa;AAAA,MACX,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW;AAAA,OACb;AAAA,MACA,QAAA,EAAY,CAAA;AAAA,MACZ,WAAA,EAAe,IAAA;AAAA,MACf,WAAA,EAAe,2GAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,sBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,UACE;AAAA;AACF;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW,QAAA;AAAA,MACX,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,YAAA,EAAgB;AAAA,MACd,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,+BAAA;AAAA,MACX,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,2DAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,OAAA,EAAW,OAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AAEJ,CAAA;;;AC5FA,IAAA,2BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,0BAAA;AAAA,EACP,KAAA,EAAS,aAAA;AAAA,EACT,WAAA,EAAe,mDAAA;AAAA,EACf,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,qBAAA;AAAA,MACX,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW;AAAA,KACb;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,OAAA;AAAA,MACR,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe,2RAAA;AAAA,MACf,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,YACN,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,QAAA;AAAA,cACA,SAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,WAAA,EAAe;AAAA;AACjB,SACF;AAAA,QACA,QAAA,EAAY;AAAA,UACV;AAAA,SACF;AAAA,QACA,oBAAA,EAAwB;AAAA;AAC1B,KACF;AAAA,IACA,sBAAA,EAA0B;AAAA,MACxB,IAAA,EAAQ,OAAA;AAAA,MACR,SAAW,EAAC;AAAA,MACZ,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,WAAA,EAAe;AAAA;AACjB,KACF;AAAA,IACA,0BAAA,EAA8B;AAAA,MAC5B,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,mWAAA;AAAA,MACf,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP;AAAA,UACE,QAAA,EAAY;AAAA,YACV;AAAA,WACF;AAAA,UACA,oBAAA,EAAwB,KAAA;AAAA,UACxB,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,aACX;AAAA,YACA,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,QAAA,EAAY;AAAA,cACV,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA;AACjB;AACF,SACF;AAAA,QACA;AAAA,UACE,QAAA,EAAY;AAAA,YACV,MAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,oBAAA,EAAwB,KAAA;AAAA,UACxB,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,aACX;AAAA,YACA,GAAA,EAAO;AAAA,cACL,IAAA,EAAQ,QAAA;AAAA,cACR,MAAA,EAAU,KAAA;AAAA,cACV,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,MAAA,EAAU;AAAA,cACR,IAAA,EAAQ,QAAA;AAAA,cACR,IAAA,EAAQ;AAAA,gBACN,MAAA;AAAA,gBACA,KAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,OAAA,EAAW;AAAA,aACb;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe,+CAAA;AAAA,cACf,oBAAA,EAAwB,IAAA;AAAA,cACxB,UAAA,EAAc;AAAA,gBACZ,IAAA,EAAQ;AAAA,kBACN,IAAA,EAAQ,QAAA;AAAA,kBACR,IAAA,EAAQ;AAAA,oBACN,QAAA;AAAA,oBACA,OAAA;AAAA,oBACA,SAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBACA,WAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ,QAAA;AAAA,kBACR,WAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,KAAA,EAAS;AAAA,kBACP,IAAA,EAAQ,QAAA;AAAA,kBACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,QAAA,EAAY;AAAA,YACV,MAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,oBAAA,EAAwB,KAAA;AAAA,UACxB,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,aACX;AAAA,YACA,GAAA,EAAO;AAAA,cACL,IAAA,EAAQ,QAAA;AAAA,cACR,MAAA,EAAU,KAAA;AAAA,cACV,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe,6CAAA;AAAA,cACf,oBAAA,EAAwB,IAAA;AAAA,cACxB,UAAA,EAAc;AAAA,gBACZ,IAAA,EAAQ;AAAA,kBACN,IAAA,EAAQ,QAAA;AAAA,kBACR,IAAA,EAAQ;AAAA,oBACN,QAAA;AAAA,oBACA,OAAA;AAAA,oBACA,SAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBACA,WAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ,QAAA;AAAA,kBACR,WAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,KAAA,EAAS;AAAA,kBACP,IAAA,EAAQ,QAAA;AAAA,kBACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,QAAA,EAAY;AAAA,YACV;AAAA,WACF;AAAA,UACA,oBAAA,EAAwB,KAAA;AAAA,UACxB,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,aACX;AAAA,YACA,QAAA,EAAY;AAAA,cACV,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,MAAA,EAAU;AAAA,cACR,IAAA,EAAQ,QAAA;AAAA,cACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,cAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAW,YAAA;AAAA,QACX,UAAA,EAAc,iCAAA;AAAA,QACd,QAAA,EAAY;AAAA,OACd;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,0BAAA;AAAA,QACX,UAAA,EAAc;AAAA,OAChB;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,sBAAA,EAA0B;AAAA,QACxB;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO,iDAAA;AAAA,QACP,MAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,SAAA,EAAa,WAAA;AAAA,QACb,OAAA,EAAW,OAAA;AAAA,QACX,KAAA,EAAS,aAAA;AAAA,QACT,UAAA,EAAc;AAAA,UACZ,QAAA,EAAY,KAAA;AAAA,UACZ,OAAA,EAAW,WAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,mBAAA,EAAuB,IAAA;AAAA,QACvB,QAAA,EAAY;AAAA,OACd;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAS;AAAA;AACX,OACF;AAAA,MACA,sBAAA,EAA0B;AAAA,QACxB;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO,wCAAA;AAAA,QACP,MAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,SAAA,EAAa,YAAA;AAAA,QACb,OAAA,EAAW,OAAA;AAAA,QACX,KAAA,EAAS,YAAA;AAAA,QACT,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW,QAAA;AAAA,UACX,KAAA,EAAS,kCAAA;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,UAAA,EAAc;AAAA,OAChB;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAS;AAAA;AACX;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO,2BAAA;AAAA,QACP,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,GAAA,EAAO,QAAA;AAAA,QACP,IAAA,EAAQ,aAAA;AAAA,QACR,aAAA,EAAiB;AAAA,UACf,QAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,sBAAA,EAA0B;AAAA,QACxB,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAS;AAAA;AACX;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO,oCAAA;AAAA,QACP,MAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ,QAAA;AAAA,UACR,UAAA,EAAc;AAAA;AAChB,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,QAAA,EAAY,OAAA;AAAA,QACZ,mBAAA,EAAuB;AAAA,UACrB,IAAA;AAAA,UACA,IAAA;AAAA,UACA,IAAA;AAAA,UACA,IAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,qBAAA,EAAyB;AAAA,OAC3B;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAY,KAAA;AAAA,QACZ,MAAA,EAAU;AAAA,UACR,QAAA,EAAY,iCAAA;AAAA,UACZ,OAAA,EAAW,eAAA;AAAA,UACX,YAAA,EAAgB;AAAA,YACd,iBAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA;AACF;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,2BAAA;AAAA,QACX,YAAA,EAAgB;AAAA,OAClB;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO;AAAA,OACT;AAAA,MACA,sBAAA,EAA0B;AAAA,QACxB;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAW,YAAA;AAAA,QACX,UAAA,EAAc,wCAAA;AAAA,QACd,QAAA,EAAY;AAAA,OACd;AAAA,MACA,0BAAA,EAA8B;AAAA,QAC5B,KAAA,EAAS;AAAA,UACP,eAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,YAAA;AAAA,UACA,yBAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,sBAAA,EAA0B;AAAA,QACxB,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAS,qBAAA;AAAA,UACT,MAAA,EAAU;AAAA;AACZ;AACF;AACF;AAEJ,CAAA;;;AChcA,IAAA,+BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,8BAAA;AAAA,EACP,KAAA,EAAS,iBAAA;AAAA,EACT,WAAA,EAAe,iFAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,qCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,2CAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,+CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe,oCAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,2CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,WAAA,EAAe;AAAA,MACb,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,YAAA,EAAgB;AAAA,MACd,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW;AAAA,OACb;AAAA,MACA,QAAA,EAAY,CAAA;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,CAAA;AAAA,MACX,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,aAAA,EAAiB;AAAA,MACf,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW;AAAA,OACb;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,iBAAA,EAAqB;AAAA,MACnB,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW;AAAA,OACb;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,sEAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,QAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW;AAAA,OACb;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,+CAAA;AAAA,MACN,KAAA,EAAS,2CAAA;AAAA,MACT,WAAA,EAAe,+NAAA;AAAA,MACf,YAAA,EAAgB;AAAA,QACd,gCAAA;AAAA,QACA,yCAAA;AAAA,QACA,sCAAA;AAAA,QACA,gCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe,UAAA;AAAA,MACf,aAAA,EAAiB;AAAA,QACf;AAAA,OACF;AAAA,MACA,iBAAA,EAAqB;AAAA,QACnB,yCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW,QAAA;AAAA,MACX,IAAA,EAAQ;AAAA,QACN,cAAA;AAAA,QACA,UAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT,WAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,QACP,qBAAA;AAAA,QACA,sBAAA;AAAA,QACA,mCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,6CAAA;AAAA,MACN,KAAA,EAAS,sCAAA;AAAA,MACT,WAAA,EAAe,mKAAA;AAAA,MACf,YAAA,EAAgB;AAAA,QACd,qCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe,UAAA;AAAA,MACf,OAAA,EAAW,QAAA;AAAA,MACX,IAAA,EAAQ;AAAA,QACN,QAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA;AACX;AAEJ,CAAA;;;AClLA,IAAA,2BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,0BAAA;AAAA,EACP,KAAA,EAAS,aAAA;AAAA,EACT,WAAA,EAAe,iEAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,iCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,qGAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,4CAAA;AAAA,QACA,iCAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe,gFAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,6BAAA;AAAA,QACA,4BAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,UAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW,gCAAA;AAAA,QACX,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe,kLAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,2CAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,IACA,aAAA,EAAiB;AAAA,MACf,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW,iCAAA;AAAA,QACX,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe,+MAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,4BAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAW,4BAAA;AAAA,QACX,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe,sGAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,YAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,UACE,WAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,UACE,cAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,4CAAA;AAAA,MACN,KAAA,EAAS,6BAAA;AAAA,MACT,MAAA,EAAU,QAAA;AAAA,MACV,OAAA,EAAW;AAAA,QACT,2CAAA;AAAA,QACA,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,WAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,iCAAA;AAAA,MACN,KAAA,EAAS,4BAAA;AAAA,MACT,MAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAW;AAAA,QACT,oCAAA;AAAA,QACA,oCAAA;AAAA,QACA,mCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,cAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,iCAAA;AAAA,MACN,KAAA,EAAS,0BAAA;AAAA,MACT,MAAA,EAAU,QAAA;AAAA,MACV,aAAA,EAAiB;AAAA,QACf,4CAAA;AAAA,QACA,iCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,YAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA;AACX;AAEJ,CAAA;;;AC/JA,IAAA,gCAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,+BAAA;AAAA,EACP,KAAA,EAAS,wBAAA;AAAA,EACT,WAAA,EAAe,0EAAA;AAAA,EACf,IAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAc;AAAA,IACZ,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA;AAAA,YACA,OAAA;AAAA,YACA,MAAA;AAAA,YACA,WAAA;AAAA,YACA,WAAA;AAAA,YACA,UAAA;AAAA,YACA,OAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,cAAA,EAAkB;AAAA,UAChB,IAAA,EAAQ,QAAA;AAAA,UACR,OAAA,EAAW,mBAAA;AAAA,UACX,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,eAAA,EAAmB;AAAA,UACjB,IAAA,EAAQ,QAAA;AAAA,UACR,OAAA,EAAW,mBAAA;AAAA,UACX,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,CAAA;AAAA,UACZ,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,KAAA,EAAS;AAAA,gBACP,IAAA,EAAQ,QAAA;AAAA,gBACR,OAAA,EAAW,+BAAA;AAAA,gBACX,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,IAAA,EAAQ;AAAA,gBACN,IAAA,EAAQ,QAAA;AAAA,gBACR,OAAA,EAAW,+BAAA;AAAA,gBACX,SAAA,EAAa,CAAA;AAAA,gBACb,SAAA,EAAa,EAAA;AAAA,gBACb,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,KAAA,EAAS;AAAA,gBACP,IAAA,EAAQ,QAAA;AAAA,gBACR,SAAA,EAAa,CAAA;AAAA,gBACb,SAAA,EAAa,GAAA;AAAA,gBACb,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,SAAA,EAAa;AAAA,gBACX,IAAA,EAAQ,QAAA;AAAA,gBACR,OAAA,EAAW,uBAAA;AAAA,gBACX,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,SAAA,EAAa;AAAA,gBACX,IAAA,EAAQ,SAAA;AAAA,gBACR,WAAA,EAAe;AAAA;AACjB,aACF;AAAA,YACA,QAAA,EAAY;AAAA,cACV,OAAA;AAAA,cACA,MAAA;AAAA,cACA,OAAA;AAAA,cACA,WAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,oBAAA,EAAwB;AAAA,WAC1B;AAAA,UACA,WAAA,EAAe;AAAA;AACjB,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,SAAA;AAAA,QACA,MAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV,QAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,oBAAA,EAAwB,KAAA;AAAA,EACxB,KAAA,EAAS;AAAA,IACP;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAM;AAAA,QACJ,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,UAAA,EAAc;AAAA,UACZ,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAY;AAAA,cACV,WAAA;AAAA,cACA;AAAA;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA;AACV,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,MAAA,EAAU;AAAA,QACR,OAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAQ,MAAA;AAAA,QACR,eAAA,EAAmB,iBAAA;AAAA,QACnB,UAAA,EAAc;AAAA,UACZ;AAAA,YACE,KAAA,EAAS,gBAAA;AAAA,YACT,IAAA,EAAQ,QAAA;AAAA,YACR,KAAA,EAAS,oDAAA;AAAA,YACT,SAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAa;AAAA;AACf;AACF,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT,EAAA,EAAM,kCAAA;AAAA,QACN,MAAA,EAAU,SAAA;AAAA,QACV,QAAA,EAAY,MAAA;AAAA,QACZ,WAAA,EAAe,yCAAA;AAAA,QACf,IAAA,EAAQ;AAAA,UACN,UAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAU;AAAA,QACR,OAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAQ,WAAA;AAAA,QACR,eAAA,EAAmB,iBAAA;AAAA,QACnB,UAAA,EAAc;AAAA,UACZ;AAAA,YACE,KAAA,EAAS,cAAA;AAAA,YACT,IAAA,EAAQ,QAAA;AAAA,YACR,KAAA,EAAS,2DAAA;AAAA,YACT,SAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,KAAA,EAAS,cAAA;AAAA,YACT,IAAA,EAAQ,UAAA;AAAA,YACR,KAAA,EAAS,oCAAA;AAAA,YACT,SAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAa;AAAA;AACf;AACF,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT,EAAA,EAAM,iCAAA;AAAA,QACN,MAAA,EAAU,iCAAA;AAAA,QACV,IAAA,EAAQ,UAAA;AAAA,QACR,KAAA,EAAS,4BAAA;AAAA,QACT,MAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAU;AAAA,QACR,OAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAQ,OAAA;AAAA,QACR,eAAA,EAAmB,iBAAA;AAAA,QACnB,UAAA,EAAc;AAAA,UACZ;AAAA,YACE,KAAA,EAAS,aAAA;AAAA,YACT,IAAA,EAAQ,QAAA;AAAA,YACR,KAAA,EAAS,iCAAA;AAAA,YACT,SAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,KAAA,EAAS,YAAA;AAAA,YACT,IAAA,EAAQ,SAAA;AAAA,YACR,KAAA,EAAS,mDAAA;AAAA,YACT,SAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAa;AAAA;AACf;AACF,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT,EAAA,EAAM,qBAAA;AAAA,QACN,IAAA,EAAQ,OAAA;AAAA,QACR,WAAA,EAAe,eAAA;AAAA,QACf,SAAA,EAAa,KAAA;AAAA,QACb,KAAA,EAAS;AAAA,UACP;AAAA;AACF;AACF;AACF;AAEJ,CAAA;;;AC7XA,IAAA,+BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,8BAAA;AAAA,EACP,KAAA,EAAS,iBAAA;AAAA,EACT,WAAA,EAAe,yEAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,gCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,kHAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,kCAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,gCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,UAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe,gDAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe,8DAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,yBAAA;AAAA,QACA,sBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,oBAAA,EAAwB,IAAA;AAAA,MACxB,WAAA,EAAe,yYAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,QAAA,EAAY;AAAA,YACV;AAAA,cACE,IAAA,EAAQ,KAAA;AAAA,cACR,IAAA,EAAQ,aAAA;AAAA,cACR,IAAA,EAAQ;AAAA;AACV,WACF;AAAA,UACA,YAAA,EAAgB;AAAA,SAClB;AAAA,QACA;AAAA,UACE,OAAA,EAAW;AAAA,YACT,WAAA,EAAe,IAAA;AAAA,YACf,SAAA,EAAa;AAAA;AACf;AACF;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,kCAAA;AAAA,MACN,MAAA,EAAU,+BAAA;AAAA,MACV,IAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAS,yBAAA;AAAA,MACT,MAAA,EAAU,gGAAA;AAAA,MACV,KAAA,EAAS,yGAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ,gBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,mCAAA;AAAA,MACN,MAAA,EAAU,+BAAA;AAAA,MACV,IAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAS,sBAAA;AAAA,MACT,MAAA,EAAU,iFAAA;AAAA,MACV,KAAA,EAAS,oJAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,2CAAA;AAAA,MACN,MAAA,EAAU,sCAAA;AAAA,MACV,IAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAS,kCAAA;AAAA,MACT,MAAA,EAAU,2GAAA;AAAA,MACV,KAAA,EAAS,+IAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,iCAAA;AAAA,MACN,MAAA,EAAU,sCAAA;AAAA,MACV,IAAA,EAAQ,YAAA;AAAA,MACR,KAAA,EAAS,gCAAA;AAAA,MACT,MAAA,EAAU,wIAAA;AAAA,MACV,KAAA,EAAS,uHAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ,QAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,yCAAA;AAAA,MACN,MAAA,EAAU,sCAAA;AAAA,MACV,IAAA,EAAQ,MAAA;AAAA,MACR,KAAA,EAAS,gDAAA;AAAA,MACT,MAAA,EAAU,oGAAA;AAAA,MACV,KAAA,EAAS,qOAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ,WAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,qCAAA;AAAA,MACN,MAAA,EAAU,+BAAA;AAAA,MACV,IAAA,EAAQ,YAAA;AAAA,MACR,KAAA,EAAS,2CAAA;AAAA,MACT,MAAA,EAAU,oHAAA;AAAA,MACV,KAAA,EAAS,yLAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAM,mCAAA;AAAA,MACN,MAAA,EAAU,kCAAA;AAAA,MACV,IAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAS,gCAAA;AAAA,MACT,MAAA,EAAU,4HAAA;AAAA,MACV,KAAA,EAAS,iFAAA;AAAA,MACT,UAAA,EAAc;AAAA,QACZ,uBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,YAAA,EAAgB,GAAA;AAAA,QAChB,YAAA,EAAgB,KAAA;AAAA,QAChB,WAAA,EAAe,IAAA;AAAA,QACf,QAAA,EAAY;AAAA,UACV;AAAA,YACE,EAAA,EAAM,SAAA;AAAA,YACN,QAAA,EAAY,UAAA;AAAA,YACZ,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ,CAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,EAAA,EAAM,SAAA;AAAA,YACN,QAAA,EAAY,UAAA;AAAA,YACZ,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ,CAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,EAAA,EAAM,SAAA;AAAA,YACN,QAAA,EAAY,UAAA;AAAA,YACZ,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ,CAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT,QAAA,EAAY,CAAA;AAAA,UACZ,IAAA,EAAQ,CAAA;AAAA,UACR,MAAA,EAAU,CAAA;AAAA,UACV,GAAA,EAAO;AAAA;AACT;AACF;AACF;AAEJ,CAAA;;;AC9NA,IAAA,8BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,6BAAA;AAAA,EACP,KAAA,EAAS,gBAAA;AAAA,EACT,WAAA,EAAe,4EAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,oCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,0CAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,uCAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,MAAA;AAAA,QACA,WAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe,8TAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,mCAAA;AAAA,QACA,8BAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,UAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe,qCAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,MAAA;AAAA,QACA,cAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,+BAAA;AAAA,MACX,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe,6GAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,aAAA;AAAA,QACA,qBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,kBAAA,EAAsB;AAAA,MACpB,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,oCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,mFAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA;AACF,KACF;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,oBAAA,EAAwB,IAAA;AAAA,MACxB,WAAA,EAAe,uPAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,UACE,WAAA,EAAe,cAAA;AAAA,UACf,MAAA,EAAU,SAAA;AAAA,UACV,IAAA,EAAQ,aAAA;AAAA,UACR,IAAA,EAAQ,EAAA;AAAA,UACR,SAAA,EAAa;AAAA;AACf;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,uCAAA;AAAA,MACN,UAAA,EAAc,WAAA;AAAA,MACd,QAAA,EAAY,8BAAA;AAAA,MACZ,IAAA,EAAQ,UAAA;AAAA,MACR,MAAA,EAAU,MAAA;AAAA,MACV,OAAA,EAAW;AAAA,KACb;AAAA,IACA;AAAA,MACE,EAAA,EAAM,oCAAA;AAAA,MACN,UAAA,EAAc,UAAA;AAAA,MACd,QAAA,EAAY,uCAAA;AAAA,MACZ,IAAA,EAAQ,eAAA;AAAA,MACR,MAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAW,oKAAA;AAAA,MACX,kBAAA,EAAsB;AAAA,KACxB;AAAA,IACA;AAAA,MACE,EAAA,EAAM,sCAAA;AAAA,MACN,UAAA,EAAc,MAAA;AAAA,MACd,QAAA,EAAY,mCAAA;AAAA,MACZ,IAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAU,MAAA;AAAA,MACV,OAAA,EAAW,sGAAA;AAAA,MACX,QAAA,EAAY;AAAA,KACd;AAAA,IACA;AAAA,MACE,EAAA,EAAM,4CAAA;AAAA,MACN,UAAA,EAAc,MAAA;AAAA,MACd,QAAA,EAAY,mCAAA;AAAA,MACZ,IAAA,EAAQ,UAAA;AAAA,MACR,MAAA,EAAU,MAAA;AAAA,MACV,OAAA,EAAW;AAAA;AACb;AAEJ,CAAA;;;ACxJA,IAAA,0BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,yBAAA;AAAA,EACP,KAAA,EAAS,YAAA;AAAA,EACT,WAAA,EAAe,kEAAA;AAAA,EACf,oBAAA,EAAwB,KAAA;AAAA,EACxB,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,IAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,EAAA,EAAM;AAAA,MACJ,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,gCAAA;AAAA,MACX,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe,mGAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV,kCAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa,CAAA;AAAA,QACb,OAAA,EAAW,iCAAA;AAAA,QACX,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,KAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa,CAAA;AAAA,QACb,OAAA,EAAW;AAAA,OACb;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,IAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAS;AAAA,QACP,IAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAa,CAAA;AAAA,QACb,SAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAW,EAAC;AAAA,MACZ,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,EAAA,EAAM,sCAAA;AAAA,MACN,KAAA,EAAS,yCAAA;AAAA,MACT,MAAA,EAAU,OAAA;AAAA,MACV,QAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAe,6JAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,gBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAc;AAAA,QACZ;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,yCAAA;AAAA,MACN,KAAA,EAAS,oCAAA;AAAA,MACT,MAAA,EAAU,QAAA;AAAA,MACV,QAAA,EAAY,UAAA;AAAA,MACZ,WAAA,EAAe,yJAAA;AAAA,MACf,UAAY,EAAC;AAAA,MACb,IAAA,EAAQ;AAAA,QACN,cAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAc;AAAA,QACZ,0DAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,wCAAA;AAAA,MACN,KAAA,EAAS,6CAAA;AAAA,MACT,MAAA,EAAU,MAAA;AAAA,MACV,QAAA,EAAY,QAAA;AAAA,MACZ,WAAA,EAAe,+IAAA;AAAA,MACf,QAAA,EAAY;AAAA,QACV;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,kBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAc;AAAA,QACZ,QAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAM,4CAAA;AAAA,MACN,KAAA,EAAS,wCAAA;AAAA,MACT,MAAA,EAAU,OAAA;AAAA,MACV,QAAA,EAAY,KAAA;AAAA,MACZ,WAAA,EAAe,wKAAA;AAAA,MACf,UAAY,EAAC;AAAA,MACb,IAAA,EAAQ;AAAA,QACN,mBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAc;AAAC;AACjB;AAEJ,CAAA;;;AChLA,IAAA,8BAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,sBAAA;AAAA,EACP,KAAA,EAAS,gBAAA;AAAA,EACT,WAAA,EAAe,0HAAA;AAAA,EACf,IAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,SAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,oBAAA,EAAwB,KAAA;AAAA,EACxB,UAAA,EAAc;AAAA,IACZ,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,sBAAA;AAAA,MACX,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,IAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAa,GAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,iBAAA,EAAqB;AAAA,MACnB,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,wDAAA;AAAA,MACf,oBAAA,EAAwB;AAAA,QACtB,IAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAY;AAAA,UACV,MAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,oBAAA,EAAwB,KAAA;AAAA,QACxB,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,YACN,IAAA,EAAQ,OAAA;AAAA,YACR,KAAA,EAAS;AAAA,cACP,IAAA,EAAQ,QAAA;AAAA,cACR,OAAA,EAAW;AAAA,aACb;AAAA,YACA,QAAA,EAAY,CAAA;AAAA,YACZ,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,QAAA,EAAY;AAAA,YACV,IAAA,EAAQ,QAAA;AAAA,YACR,oBAAA,EAAwB,KAAA;AAAA,YACxB,UAAA,EAAc;AAAA,cACZ,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ,QAAA;AAAA,gBACR,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,KAAA,EAAS;AAAA,gBACP,IAAA,EAAQ,QAAA;AAAA,gBACR,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,UAAA,EAAc;AAAA,gBACZ,IAAA,EAAQ,QAAA;AAAA,gBACR,WAAA,EAAe,sFAAA;AAAA,gBACf,oBAAA,EAAwB;AAAA,kBACtB,IAAA,EAAQ,QAAA;AAAA,kBACR,QAAA,EAAY;AAAA,oBACV,MAAA;AAAA,oBACA,kBAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBACA,oBAAA,EAAwB,KAAA;AAAA,kBACxB,UAAA,EAAc;AAAA,oBACZ,IAAA,EAAQ;AAAA,sBACN,IAAA,EAAQ,QAAA;AAAA,sBACR,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,gBAAA,EAAoB;AAAA,sBAClB,IAAA,EAAQ,OAAA;AAAA,sBACR,KAAA,EAAS;AAAA,wBACP,IAAA,EAAQ;AAAA,uBACV;AAAA,sBACA,QAAA,EAAY,CAAA;AAAA,sBACZ,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,aAAA,EAAiB;AAAA,sBACf,IAAA,EAAQ,SAAA;AAAA,sBACR,OAAA,EAAW,CAAA;AAAA,sBACX,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,UAAA,EAAc;AAAA,sBACZ,IAAA,EAAQ,QAAA;AAAA,sBACR,IAAA,EAAQ;AAAA,wBACN,OAAA;AAAA,wBACA;AAAA,uBACF;AAAA,sBACA,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,eAAA,EAAmB;AAAA,sBACjB,IAAA,EAAQ,OAAA;AAAA,sBACR,KAAA,EAAS;AAAA,wBACP,IAAA,EAAQ;AAAA,uBACV;AAAA,sBACA,WAAA,EAAe;AAAA;AACjB;AACF;AACF,eACF;AAAA,cACA,YAAA,EAAgB;AAAA,gBACd,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,IAAA,EAAQ;AAAA,iBACV;AAAA,gBACA,WAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF;AACF,KACF;AAAA,IACA,YAAA,EAAgB;AAAA,MACd,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,yCAAA;AAAA,MACf,oBAAA,EAAwB;AAAA,QACtB,IAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAY;AAAA,UACV,aAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,oBAAA,EAAwB,KAAA;AAAA,QACxB,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,QAAA;AAAA,YACR,SAAA,EAAa,GAAA;AAAA,YACb,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,qBAAA;AAAA,cACA,iBAAA;AAAA,cACA,iBAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,UAAA,EAAc;AAAA,YACZ,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF,KACF;AAAA,IACA,YAAA,EAAgB;AAAA,MACd,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,yDAAA;AAAA,MACf,oBAAA,EAAwB;AAAA,QACtB,IAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAY;AAAA,UACV;AAAA,SACF;AAAA,QACA,oBAAA,EAAwB,KAAA;AAAA,QACxB,UAAA,EAAc;AAAA,UACZ,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe,0DAAA;AAAA,YACf,oBAAA,EAAwB;AAAA,cACtB,IAAA,EAAQ,OAAA;AAAA,cACR,KAAA,EAAS;AAAA,gBACP,IAAA,EAAQ,QAAA;AAAA,gBACR,OAAA,EAAW;AAAA,eACb;AAAA,cACA,QAAA,EAAY;AAAA;AACd,WACF;AAAA,UACA,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe;AAAA,WACjB;AAAA,UACA,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,QAAA;AAAA,YACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF,KACF;AAAA,IACA,iBAAA,EAAqB;AAAA,MACnB,IAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAe,yDAAA;AAAA,MACf,oBAAA,EAAwB,KAAA;AAAA,MACxB,UAAA,EAAc;AAAA,QACZ,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,SAAA,EAAa,GAAA;AAAA,UACb,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,eAAA,EAAmB;AAAA,UACjB,IAAA,EAAQ,OAAA;AAAA,UACR,WAAA,EAAe,wHAAA;AAAA,UACf,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAY;AAAA,cACV;AAAA,aACF;AAAA,YACA,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,QAAA,EAAY;AAAA,kBACV;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,QAAA,EAAY;AAAA,kBACV;AAAA;AACF;AACF,aACF;AAAA,YACA,oBAAA,EAAwB,KAAA;AAAA,YACxB,UAAA,EAAc;AAAA,cACZ,EAAA,EAAM;AAAA,gBACJ,IAAA,EAAQ,QAAA;AAAA,gBACR,OAAA,EAAW,qBAAA;AAAA,gBACX,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,cAAA,EAAkB;AAAA,gBAChB,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,IAAA,EAAQ,QAAA;AAAA,kBACR,OAAA,EAAW;AAAA,iBACb;AAAA,gBACA,QAAA,EAAY,CAAA;AAAA,gBACZ,WAAA,EAAe;AAAA,eACjB;AAAA,cACA,QAAA,EAAY;AAAA,gBACV,IAAA,EAAQ,OAAA;AAAA,gBACR,WAAA,EAAe,mDAAA;AAAA,gBACf,KAAA,EAAS;AAAA,kBACP,IAAA,EAAQ,QAAA;AAAA,kBACR,QAAA,EAAY;AAAA,oBACV,OAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBACA,oBAAA,EAAwB,KAAA;AAAA,kBACxB,UAAA,EAAc;AAAA,oBACZ,KAAA,EAAS;AAAA,sBACP,IAAA,EAAQ,QAAA;AAAA,sBACR,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,MAAA,EAAU;AAAA,sBACR,IAAA,EAAQ,QAAA;AAAA,sBACR,WAAA,EAAe;AAAA,qBACjB;AAAA,oBACA,IAAA,EAAQ;AAAA,sBACN,IAAA,EAAQ,QAAA;AAAA,sBACR,WAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF;AACF;AACF;AACF;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,OAAA,EAAW,OAAA;AAAA,MACX,IAAA,EAAQ,eAAA;AAAA,MACR,WAAA,EAAe,gCAAA;AAAA,MACf,iBAAA,EAAqB;AAAA,QACnB,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW;AAAA;AACb,SACF;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW,qBAAA;AAAA,YACX,UAAA,EAAc;AAAA,cACZ,WAAA,EAAe;AAAA,gBACb,IAAA,EAAQ,UAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,KAAA,EAAS;AAAA;AACX,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW;AAAA;AACb;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,OAAA,EAAW,OAAA;AAAA,MACX,IAAA,EAAQ,mCAAA;AAAA,MACR,WAAA,EAAe,4EAAA;AAAA,MACf,iBAAA,EAAqB;AAAA,QACnB,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW,oBAAA;AAAA,YACX,UAAA,EAAc;AAAA,cACZ,WAAA,EAAe;AAAA,gBACb,IAAA,EAAQ,WAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,SACF;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW,qBAAA;AAAA,YACX,UAAA,EAAc;AAAA,cACZ,WAAA,EAAe;AAAA,gBACb,IAAA,EAAQ,UAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA,eACnB;AAAA,cACA,MAAA,EAAU;AAAA,gBACR,IAAA,EAAQ,UAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA,eACnB;AAAA,cACA,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ,UAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,KAAA,EAAS,gCAAA;AAAA,YACT,YAAA,EAAgB;AAAA,cACd;AAAA;AACF;AACF,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW,sBAAA;AAAA,YACX,UAAA,EAAc;AAAA,cACZ,WAAA,EAAe;AAAA,gBACb,IAAA,EAAQ,UAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,SACF;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,KAAA,EAAS;AAAA;AACX,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,QAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,KAAA,EAAS;AAAA;AACX,SACF;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,YACN,OAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,OAAA,EAAW,oBAAA;AAAA,YACX,UAAA,EAAc;AAAA,cACZ,WAAA,EAAe;AAAA,gBACb,IAAA,EAAQ,WAAA;AAAA,gBACR,gBAAA,EAAoB;AAAA,kBAClB,kBAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF;AACF,OACF;AAAA,MACA,YAAA,EAAgB;AAAA,QACd,4CAAA,EAAgD;AAAA,UAC9C,WAAA,EAAe,8DAAA;AAAA,UACf,UAAA,EAAc;AAAA;AAChB;AACF;AACF;AAEJ,CAAA;;;AChbO,IAAM,OAAA,GAAU;AAAA,EACrB,WAAA,EAAa,2BAAA;AAAA,EACb,WAAA,EAAa,2BAAA;AAAA,EACb,eAAA,EAAiB,+BAAA;AAAA,EACjB,WAAA,EAAa,2BAAA;AAAA,EACb,gBAAA,EAAkB,gCAAA;AAAA,EAClB,eAAA,EAAiB,+BAAA;AAAA,EACjB,cAAA,EAAgB,8BAAA;AAAA,EAChB,UAAA,EAAY,0BAAA;AAAA,EACZ,cAAA,EAAgB;AAClB,CAAA;AAmBO,SAAS,UAAU,IAAA,EAAkB;AAC1C,EAAA,OAAO,QAAQ,IAAI,CAAA;AACrB;AAKO,SAAS,cAAA,GAA+B;AAC7C,EAAA,OAAO,MAAA,CAAO,KAAK,OAAO,CAAA;AAC5B;AAKO,SAAS,UAAU,IAAA,EAAkC;AAC1D,EAAA,OAAO,IAAA,IAAQ,OAAA;AACjB;;;ACtDO,IAAM,wBAAN,MAA4B;AAAA,EACjC,OAAe,gBAAA,mBAAmB,IAAI,GAAA,EAA8B;AAAA,EACpE,OAAe,GAAA,GAAkB,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjC,OAAO,uBAAoC,MAAA,EAAqC;AAE9E,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAEvC,IAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,SAAS,CAAA,EAAG;AAEzC,MAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACb,QAAA,IAAA,CAAK,MAAM,IAAI,GAAA,CAAI,EAAE,SAAA,EAAW,MAAM,CAAA;AACtC,QAAA,UAAA,CAAW,KAAK,GAAG,CAAA;AAGnB,QAAA,IAAA,CAAK,cAAA,EAAe;AAAA,MACtB;AAIA,MAAA,MAAM,EAAE,GAAA,EAAK,GAAG,eAAA,EAAgB,GAAI,MAAA;AAGpC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,eAAe,CAAA;AAClD,MAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,SAAA,EAAW,SAAS,CAAA;AAAA,IAChD;AAEA,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,SAAS,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,cAAA,GAAuB;AACpC,IAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AAEf,IAAA,IAAI;AAEF,MAAA,MAAM,YAAA,GAAuC;AAAA,QAC3C,aAAA,EAAe,yBAAA;AAAA,QACf,aAAA,EAAe,yBAAA;AAAA,QACf,iBAAA,EAAmB,6BAAA;AAAA,QACnB,aAAA,EAAe,yBAAA;AAAA,QACf,iBAAA,EAAmB,6BAAA;AAAA,QACnB,gBAAA,EAAkB,4BAAA;AAAA,QAClB,YAAA,EAAc,wBAAA;AAAA,QACd,gBAAA,EAAkB;AAAA,OACpB;AAGA,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AAClD,QAAA,IAAI,IAAA,KAAS,kBAAA,IAAsB,YAAA,CAAa,IAAI,CAAA,EAAG;AACrD,UAAA,MAAM,OAAA,GAAU,aAAa,IAAI,CAAA;AACjC,UAAA,IAAA,CAAK,GAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,QACrC;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAA,GAAmB;AACxB,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAA,GAA2C;AAChD,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,KAAK,gBAAA,CAAiB;AAAA,KACvC;AAAA,EACF;AACF,CAAA;ACrFA,SAAS,SAAS,GAAA,EAAe;AAC/B,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,IAAA,EAAM;AAC3C,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,GAAA,CAAI,IAAI,QAAQ,CAAA;AAAA,EACzB;AACA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AACzC,EAAA,MAAM,SAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,MAAA;AACT;AAOA,SAAS,aAAa,OAAA,EAAyB;AAC7C,EAAA,MAAM,aAAA,GAAgB,SAAS,OAAO,CAAA;AACtC,EAAA,OAAO,IAAA,CAAK,UAAU,aAAa,CAAA;AACrC;AAKO,SAAS,yBAAyB,OAAA,EAAsC;AAC7E,EAAA,MAAM,UAAA,GAAa,aAAa,OAAO,CAAA;AACvC,EAAA,OAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,YAAY,MAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AACrE;;;ACxCA,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,MAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACSA,IAAM,gBAAN,MAAsC;AAAA,EAC5B,KAAA;AAAA,EACA,MAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAAiB,EAAA,EAAI,KAAA,GAAkB,MAAA,EAAQ;AACzD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEQ,UAAU,KAAA,EAA0B;AAC1C,IAAA,MAAM,SAAqB,CAAC,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,SAAS,QAAQ,CAAA;AACtE,IAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AACnD,IAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA;AAE9C,IAAA,OAAO,iBAAA,IAAqB,iBAAA,IAAqB,IAAA,CAAK,KAAA,KAAU,QAAA;AAAA,EAClE;AAAA,EAEA,KAAA,CAAM,YAAoB,IAAA,EAAmB;AAC3C,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,EAAG;AAC3B,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAA,CAAK,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,IAAA,CAAK,YAAoB,IAAA,EAAmB;AAC1C,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA,EAAG;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAA,CAAK,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,IAAA,CAAK,YAAoB,IAAA,EAAmB;AAC1C,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA,EAAG;AAC1B,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,IAAA,CAAK,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,KAAA,CAAM,YAAoB,IAAA,EAAmB;AAC3C,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,EAAG;AAC3B,MAAA,OAAA,CAAQ,KAAA,CAAM,GAAG,IAAA,CAAK,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,SAAS,KAAA,EAAuB;AAC9B,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AACF,CAAA;AAGO,SAAS,YAAA,CAAa,MAAA,GAAiB,EAAA,EAAI,KAAA,EAA0B;AAC1E,EAAA,MAAM,QAAA,GAAW,KAAA,KACd,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,KAAM,MAAA,GAAS,QAAA,GAAW,MAAA,CAAA,IAChD,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,IACxB,MAAA;AAEF,EAAA,OAAO,IAAI,aAAA,CAAc,MAAA,EAAQ,QAAQ,CAAA;AAC3C;AAGO,IAAM,MAAA,GAAS,aAAa,QAAQ,CAAA;;;AC7D3C,IAAMA,OAAAA,GAAS,aAAa,iBAAiB,CAAA;AAC7C,IAAM,oBAAA,GAAuB,UAAU,eAAe,CAAA;AAatD,eAAsB,YAAA,GAAoE;AACxF,EAAA,MAAM,EAAE,SAAA,EAAW,UAAA,EAAW,GAAI,MAAM,qBAAqB,SAAA,EAAW;AAAA,IACtE,iBAAA,EAAmB,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAQ,KAAA,EAAM;AAAA,IACjD,kBAAA,EAAoB,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA;AAAM,GACpD,CAAA;AAGD,EAAA,MAAM,YAAA,GAAe,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA;AAE3C,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,YAAA,CAAa,QAAA,CAAS,QAAQ,CAAA;AAAA;AAAA,IACzC,YAAY,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,QAAQ;AAAA,GACvD;AACF;AAKO,SAAS,WAAA,CACd,OAAA,EACA,UAAA,EACA,KAAA,EACA,MACA,KAAA,EACW;AACX,EAAA,MAAM,eAAA,GAAkB,yBAAyB,OAAO,CAAA;AACxD,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,CAAA,EAAG,eAAe,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAGxE,EAAA,MAAM,aAAaC,UAAAA,CAAW,QAAQ,EAAE,MAAA,CAAO,MAAM,EAAE,MAAA,EAAO;AAE9D,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,EAAM,UAAA,EAAY;AAAA,IACvC,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,UAAA,EAAY,QAAQ,CAAA;AAAA,IACrC,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA;AAAA,IACtC;AAAA,GACF;AACF;AAOA,eAAsB,gBAAA,CACpB,QACA,iBAAA,EACkB;AAClB,EAAA,KAAA,MAAW,SAAA,IAAa,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY;AAChD,IAAA,MAAM,eAAA,GAAkB,MAAM,iBAAA,CAAkB,SAAA,CAAU,KAAK,CAAA;AAC/D,IAAA,IAAI,CAAC,eAAA,EAAiB;AAGpB,MAAAD,OAAAA,CAAO,KAAA,CAAM,CAAA,gCAAA,EAAmC,SAAA,CAAU,KAAK,CAAA,CAAE,CAAA;AACjE,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAS,CAAA,EAAG,MAAA,CAAO,MAAA,CAAO,eAAe,IAAI,SAAA,CAAU,KAAK,CAAA,CAAA,EAAI,SAAA,CAAU,IAAI,CAAA,CAAA,EAAI,SAAA,CAAU,KAAK,CAAA,CAAA,EAAI,UAAU,SAAS,CAAA,CAAA;AAC9H,IAAA,MAAM,aAAaC,UAAAA,CAAW,QAAQ,EAAE,MAAA,CAAO,MAAM,EAAE,MAAA,EAAO;AAI9D,IAAA,MAAM,mBAAA,GAAsB,OAAO,IAAA,CAAK;AAAA,MACtC,EAAA;AAAA,MAAM,EAAA;AAAA,MAAM,EAAA;AAAA,MAAM,CAAA;AAAA,MAAM,CAAA;AAAA,MAAM,CAAA;AAAA,MAAM,EAAA;AAAA,MAAM,GAAA;AAAA,MAC1C,GAAA;AAAA,MAAM,CAAA;AAAA,MAAM,EAAA;AAAA,MAAM;AAAA,KACnB,CAAA;AACD,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,eAAA,EAAiB,QAAQ,CAAA;AAC1D,IAAA,MAAM,gBAAgB,MAAA,CAAO,MAAA,CAAO,CAAC,mBAAA,EAAqB,YAAY,CAAC,CAAA;AAEvE,IAAA,MAAM,OAAA,GAAU,MAAA;AAAA,MACd,IAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,QACE,GAAA,EAAK,aAAA;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,QAAQ;AAAA,KAC3C;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,qBAAA,GAAgC;AAC9C,EAAA,OAAO,WAAA,CAAY,EAAE,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAC1C;;;AC1HA,IAAA,sBAAA,GAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,SAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACaO,SAAS,+BACd,IAAA,EACuC;AACvC,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,gBAAgB,CAAA;AACvF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAI,CAAA;AAE9B,EAAA,OAAO,CAAC,OAAA,EAAS,SAAA,CAAU,MAAM,CAAA;AACnC;AAKO,SAAS,yBAAwD,IAAA,EAAkD;AACxH,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,8BAAA,CAA+B,IAAI,CAAA;AACrD,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,iCAAiC,IAAA,EAAiC;AAChF,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,+BAA+B,IAAI,CAAA;AAEhE,EAAA,MAAM,eAAA,GAAkB,SAAA,EAAW,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,IAC9D,KAAA,EAAO,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,UAAA;AAAA,IACnC,OAAA,EAAS,MAAM,OAAA,IAAW,mBAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,KAAK,EAAC;AAER,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AAKA,eAAsB,kCAAA,CACpB,QACA,iBAAA,EACe;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,MAAM,CAAA,GAAI,+BAA+B,MAAM,CAAA;AACrE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,eAAA,GAAkB,MAAA,EAAQ,GAAA,CAAI,CAAA,KAAA,MAAU;AAAA,MAC5C,KAAA,EAAO,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,UAAA;AAAA,MACnC,OAAA,EAAS,MAAM,OAAA,IAAW,mBAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,KAAK,EAAC;AAER,IAAA,MAAM,IAAI,uBAAA,CAAwB,kBAAA,EAAoB,eAAe,CAAA;AAAA,EACvE;AAGA,EAAA,MAAM,gBAAA,GAAmB,wBAAA,CAAyB,MAAA,CAAO,OAAO,CAAA;AAChE,EAAA,IAAI,gBAAA,KAAqB,MAAA,CAAO,MAAA,CAAO,eAAA,EAAiB;AACtD,IAAA,MAAM,IAAI,qBAAA,EAAsB;AAAA,EAClC;AAGA,EAAA,MAAM,qBAAqB,MAAM,gBAAA;AAAA,IAC/B,MAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,MAAM,IAAI,0BAAA,EAA2B;AAAA,EACvC;AACF;;;ACtEO,SAAS,0BACd,IAAA,EACuC;AACvC,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,WAAW,CAAA;AACvF,EAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,OAAA,EAAS,cAAA,CAAe,MAAM,CAAA;AACxC;AAEO,SAAS,cAAc,IAAA,EAAoC;AAChE,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,WAAW,CAAA;AACvF,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAMO,SAAS,4BAA4B,IAAA,EAAiC;AAC3E,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,0BAA0B,IAAI,CAAA;AAE3D,EAAA,MAAM,eAAA,GAAkB,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,IACzE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,IACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,IAAI,EAAC;AAEP,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AASA,eAAsB,uBAAA,CACpB,QACA,iBAAA,EACe;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,MAAM,CAAA,GAAI,yBAAA,CAA0B,OAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,eAAe,CAAA;AAAA,EAClE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,iBAAiB,CAAA;AACpE;AASA,eAAsB,8BAAA,CACpB,aACA,iBAAA,EACe;AACf,EAAA,MAAM,cAAA,GAAiB,MAAM,iBAAA,CAAkB,WAAA,CAAY,EAAE,CAAA;AAE7D,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,CAAA,4CAAA,EAA+C,YAAY,EAAE,CAAA,iDAAA;AAAA,KAC/D;AAAA,EACF;AAEA,EAAA,IAAI,cAAA,CAAe,SAAS,OAAA,EAAS;AACnC,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,CAAA,YAAA,EAAe,cAAA,CAAe,EAAE,CAAA,gDAAA,EAAmD,YAAY,EAAE,CAAA,CAAA;AAAA,KACnG;AAAA,EACF;AAEA,EAAA,IAAI,cAAA,CAAe,WAAW,QAAA,EAAU;AACtC,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,CAAA,iCAAA,EAAoC,YAAY,EAAE,CAAA,+DAAA,EAAkE,eAAe,EAAE,CAAA,UAAA,EAAa,eAAe,MAAM,CAAA,EAAA;AAAA,KACzK;AAAA,EACF;AACF;;;ACtFO,SAAS,kBACd,OAAA,EACwB;AAExB,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,EAAA,EAAI,QAAQ,EAAA,IAAM,EAAA;AAAA,IAClB,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,EAAE,MAAM,OAAA,EAAiB;AAAA,IACnD,MAAA,EAAQ,QAAQ,MAAA,IAAU,QAAA;AAAA,IAC1B,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,EAAC;AAAA,IAC/B,sBAAA,EAAwB,OAAA,CAAQ,sBAAA,IAA0B,EAAC;AAAA,IAC3D,0BAAA,EAA4B,OAAA,CAAQ,0BAAA,IAA8B,EAAC;AAAA,IACnE,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,UAAA,GAAa,4BAA4B,KAAK,CAAA;AACpD,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,UAAA,CAAW,MAAM,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,KAAA;AACT;AAWO,SAAS,gBAAgB,IAAA,EAAkC;AAEhE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,4BAAA,EAA8B,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC3F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,2BAAA,CAA4B,MAAA,CAAO,OAAO,CAAA;AACpE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,qBAAA,EAAuB,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACnF;AAEA,EAAA,OAAO,MAAA;AACT;;;ACpCO,IAAM,eAAN,MAA4C;AAAA,EACzC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EAER,YAAY,YAAA,EAAwC;AAClD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAC7B,IAAA,IAAA,CAAK,cAAc,YAAA,CAAa,WAAA;AAChC,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,kBAAkB,OAAA,EAAsD;AAE5E,IAAA,IAAI,CAAC,OAAA,CAAQ,EAAA,IAAM,CAAC,QAAQ,MAAA,EAAQ;AAClC,MAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,IACtD;AAGA,IAAA,MAAM,qBAAqB,MAAM,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,QAAQ,EAAE,CAAA;AAClE,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAA,CAAQ,EAAE,CAAA,qEAAA,CAAuE,CAAA;AAAA,IAC1H;AAGA,IAAA,IAAI,kBAAA,CAAmB,SAAS,OAAA,EAAS;AACvC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAA,CAAQ,EAAE,CAAA,+CAAA,CAAiD,CAAA;AAAA,IACpG;AAGA,IAAA,MAAM,eAAA,GAA+B;AAAA,MACnC,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,MAAA,EAAQ,QAAQ,MAAA,IAAU,QAAA;AAAA,MAC1B,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,EAAC;AAAA,MAC/B,sBAAA,EAAwB,OAAA,CAAQ,sBAAA,IAA0B,EAAC;AAAA,MAC3D,0BAAA,EAA4B,OAAA,CAAQ,0BAAA,IAA8B,EAAC;AAAA,MACnE,GAAG;AAAA,KACL;AAGA,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,eAAe,CAAA;AAG1D,IAAA,MAAM,eAAA,GAAkB,yBAAyB,gBAAgB,CAAA;AAGjE,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,QAAQ,EAAE,CAAA;AAC3D,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,MAC3D;AACA,MAAA,UAAA,GAAa,GAAA;AAAA,IACf,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,gCAAA,EAAmC,QAAQ,EAAE,CAAA,+KAAA,EAG1B,iBAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAe,CAAA;AAAA,OAC7E;AAAA,IACF;AAGA,IAAA,MAAM,YAAY,WAAA,CAAY,gBAAA,EAAkB,YAAY,OAAA,CAAQ,EAAA,EAAI,UAAU,oBAAoB,CAAA;AAGtG,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,uBAAA,CAAwB,MAAA,EAAQ,OAAO,KAAA,KAAU;AACrD,MAAA,IAAI,KAAA,KAAU,QAAQ,EAAA,EAAI;AACxB,QAAA,OAAO,kBAAA,CAAmB,SAAA;AAAA,MAC5B;AACA,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,KAAK,CAAA;AACtD,MAAA,OAAO,aAAa,SAAA,IAAa,IAAA;AAAA,IACnC,CAAC,CAAA;AAGD,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,MAAA,CAAO,OAAA,CAAQ,IAAI,MAAM,CAAA;AAGtD,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAM,KAAA,GAA8B;AAAA,QAClC,IAAA,EAAM,2BAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,eAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,SAAS,gBAAA,CAAiB,EAAA;AAAA,UAC1B,QAAQ,gBAAA,CAAiB,MAAA;AAAA,UACzB,sBAAsB,kBAAA,CAAmB;AAAA;AAC3C,OACF;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,OAAA,EAA8C;AACjE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACnD,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,GAA2C;AAC/C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC1C,IAAA,MAAM,SAAwB,EAAC;AAE/B,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAA,CAAkB,OAAA,EAAiB,OAAA,EAAsD;AAE7F,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,UAAA,CAAY,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,kBAAA,GAAqB,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,OAAO,CAAA;AAC/D,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,UAAA,CAAY,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,cAAA,GAA8B;AAAA,MAClC,GAAG,cAAA,CAAe,OAAA;AAAA,MAClB,GAAG,OAAA;AAAA,MACH,EAAA,EAAI;AAAA;AAAA,KACN;AAGA,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,cAAc,CAAA;AAGzD,IAAA,MAAM,eAAA,GAAkB,yBAAyB,gBAAgB,CAAA;AAGjE,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,cAAc,OAAO,CAAA;AACxD,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAE,CAAA;AAAA,MACxD;AACA,MAAA,UAAA,GAAa,GAAA;AAAA,IACf,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,OAAO,CAAA,CAAE,CAAA;AAAA,IAC9D;AAGA,IAAA,MAAM,YAAY,WAAA,CAAY,gBAAA,EAAkB,UAAA,EAAY,OAAA,EAAS,UAAU,cAAc,CAAA;AAG7F,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,MAAA,CAAO,OAAA,CAAQ,IAAI,MAAM,CAAA;AAEtD,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,mBAAmB,OAAA,EAAuC;AAC9D,IAAA,OAAO,KAAK,iBAAA,CAAkB,OAAA,EAAS,EAAE,MAAA,EAAQ,YAAY,CAAA;AAAA,EAC/D;AACF,CAAA;;;AC3OA,IAAA,uBAAA,GAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACYO,SAAS,yBACd,IAAA,EACuC;AACvC,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,UAAU,CAAA;AACtF,EAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,OAAA,EAAS,cAAA,CAAe,MAAM,CAAA;AACxC;AAKO,SAAS,aAAa,IAAA,EAAmC;AAC9D,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,UAAU,CAAA;AACtF,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAMO,SAAS,2BAA2B,IAAA,EAAiC;AAC1E,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,yBAAyB,IAAI,CAAA;AAE1D,EAAA,MAAM,eAAA,GAAkB,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,IACzE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,IACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,IAAI,EAAC;AAEP,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AASA,eAAsB,sBAAA,CACpB,QACA,iBAAA,EACe;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,MAAM,CAAA,GAAI,wBAAA,CAAyB,OAAO,OAAO,CAAA;AACvE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,YAAA,EAAc,eAAe,CAAA;AAAA,EACjE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,iBAAiB,CAAA;AACpE;;;ACnEA,SAAS,cAAc,IAAA,EAAsB;AAC3C,EAAA,OAAO,IAAA,CACJ,WAAA,EAAY,CACZ,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA,CACzB,KAAA,CAAM,GAAG,EAAE,CAAA;AAChB;AAKO,SAAS,eAAA,CAAgB,MAAyB,WAAA,EAA6B;AACpF,EAAA,MAAM,IAAA,GAAO,cAAc,WAAW,CAAA;AACtC,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACxB;AAaO,SAAS,cAAA,CAAe,OAAe,SAAA,EAA2B;AACvE,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA;AAClC;AAKO,SAAS,eAAA,CAAgB,OAAe,SAAA,EAA2B;AACxE,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA;AACnC;AAKO,SAAS,mBAAA,CAAoB,OAAe,SAAA,EAA2B;AAC5E,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA;AAClC;AAWO,SAAS,mBAAA,CAAoB,OAAe,SAAA,EAA2B;AAC5E,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,WAAA,EAAc,IAAI,CAAA,CAAA;AACvC;AAKO,SAAS,kBAAA,CAAmB,OAAe,SAAA,EAA2B;AAC3E,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA;AACtC;;;AC/DO,SAAS,iBACd,OAAA,EACY;AAEZ,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAG9C,EAAA,MAAM,IAAA,GAAmB;AAAA,IACvB,IAAI,OAAA,CAAQ,EAAA,IAAM,eAAe,OAAA,CAAQ,KAAA,IAAS,IAAI,SAAS,CAAA;AAAA,IAC/D,KAAA,EAAO,QAAQ,KAAA,IAAS,EAAA;AAAA,IACxB,MAAA,EAAQ,QAAQ,MAAA,IAAU,OAAA;AAAA,IAC1B,QAAA,EAAU,QAAQ,QAAA,IAAY,QAAA;AAAA,IAC9B,WAAA,EAAa,QAAQ,WAAA,IAAe,EAAA;AAAA,IACpC,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAQ,EAAC;AAAA,IACvB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,UAAA,GAAa,2BAA2B,IAAI,CAAA;AAClD,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,YAAA,EAAc,UAAA,CAAW,MAAM,CAAA;AAAA,EACnE;AAEA,EAAA,OAAO,IAAA;AACT;AAWO,SAAS,eAAe,IAAA,EAAiC;AAE9D,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,2BAAA,EAA6B,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC1F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,0BAAA,CAA2B,MAAA,CAAO,OAAO,CAAA;AACnE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,oBAAA,EAAsB,iBAAA,CAAkB,MAAM,CAAA;AAAA,EAClF;AAEA,EAAA,OAAO,MAAA;AACT;;;ACpDA,IAAM,cAAc,OAAA,CAAQ,WAAA;AAErB,SAAS,0BACd,IAAA,EACuC;AACvC,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,WAAW,CAAA;AAC/E,EAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,OAAA,EAAS,cAAA,CAAe,MAAM,CAAA;AACxC;AAKO,SAAS,cAAc,IAAA,EAAoC;AAChE,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,WAAW,CAAA;AAC/E,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAMO,SAAS,4BAA4B,IAAA,EAAiC;AAC3E,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,0BAA0B,IAAI,CAAA;AAE3D,EAAA,MAAM,eAAA,GAAkB,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,IACzE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,IACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,IAAI,EAAC;AAEP,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AASA,eAAsB,uBAAA,CACpB,QACA,iBAAA,EACe;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,MAAM,CAAA,GAAI,yBAAA,CAA0B,OAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,eAAe,CAAA;AAAA,EAClE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,iBAAiB,CAAA;AACpE;;;AC9DO,SAAS,kBACd,OAAA,EACa;AAEb,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAG9C,EAAA,MAAM,KAAA,GAAqB;AAAA,IACzB,IAAI,OAAA,CAAQ,EAAA,IAAM,gBAAgB,OAAA,CAAQ,KAAA,IAAS,IAAI,SAAS,CAAA;AAAA,IAChE,KAAA,EAAO,QAAQ,KAAA,IAAS,EAAA;AAAA,IACxB,MAAA,EAAQ,QAAQ,MAAA,IAAU,UAAA;AAAA,IAC1B,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,EAAC;AAAA;AAAA,IAC7B,eAAe,OAAA,CAAQ,aAAA;AAAA,IACvB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,UAAA,GAAa,4BAA4B,KAAK,CAAA;AACpD,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,UAAA,CAAW,MAAM,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,KAAA;AACT;AAWO,SAAS,gBAAgB,IAAA,EAAkC;AAEhE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,4BAAA,EAA8B,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC3F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,2BAAA,CAA4B,MAAA,CAAO,OAAO,CAAA;AACpE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,qBAAA,EAAuB,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACnF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC5DA,IAAA,wBAAA,GAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACUA,IAAM,cAAc,OAAA,CAAQ,WAAA;AAErB,SAAS,0BACd,IAAA,EACuC;AACvC,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,WAAW,CAAA;AAC/E,EAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,OAAA,EAAS,cAAA,CAAe,MAAM,CAAA;AACxC;AAEO,SAAS,cAAc,IAAA,EAAoC;AAChE,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,WAAW,CAAA;AAC/E,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAMO,SAAS,4BAA4B,IAAA,EAAiC;AAC3E,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,0BAA0B,IAAI,CAAA;AAE3D,EAAA,MAAM,eAAA,GAAkB,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,IACzE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,IACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,IAAI,EAAC;AAEP,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AASA,eAAsB,uBAAA,CACpB,QACA,iBAAA,EACe;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,MAAM,CAAA,GAAI,yBAAA,CAA0B,OAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,eAAe,CAAA;AAAA,EAClE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,iBAAiB,CAAA;AACpE;;;AC3DO,SAAS,kBACd,OAAA,EACa;AAEb,EAAA,MAAM,KAAA,GAAqB;AAAA,IACzB,EAAA,EAAI,QAAQ,EAAA,IAAM,eAAA,CAAgB,QAAQ,IAAA,IAAQ,OAAA,EAAS,OAAA,CAAQ,WAAA,IAAe,EAAE,CAAA;AAAA,IACpF,IAAA,EAAM,QAAQ,IAAA,IAAQ,OAAA;AAAA,IACtB,WAAA,EAAa,QAAQ,WAAA,IAAe,EAAA;AAAA,IACpC,SAAA,EAAW,QAAQ,SAAA,IAAa,EAAA;AAAA,IAChC,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,CAAC,QAAQ,CAAA;AAAA,IACjC,MAAA,EAAQ,QAAQ,MAAA,IAAU,QAAA;AAAA,IAC1B,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,UAAA,GAAa,4BAA4B,KAAK,CAAA;AACpD,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,aAAA,EAAe,UAAA,CAAW,MAAM,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,KAAA;AACT;AAWO,SAAS,gBAAgB,IAAA,EAAkC;AAEhE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,4BAAA,EAA8B,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC3F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,2BAAA,CAA4B,MAAA,CAAO,OAAO,CAAA;AACpE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,qBAAA,EAAuB,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACnF;AAEA,EAAA,OAAO,MAAA;AACT;;;ACjCO,IAAM,kBAAN,MAAkD;AAAA,EAC/C,MAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EAER,YAAY,YAAA,EAA2C;AACrD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,cAAc,YAAA,CAAa,WAAA;AAChC,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AACnC,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,KAAA,EAAuC;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AACvC,MAAA,OAAO,OAAO,SAAA,IAAa,IAAA;AAAA,IAC7B,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,CACJ,OAAA,EACA,SAAA,EACsB;AAEtB,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,IAAQ,CAAC,QAAQ,WAAA,EAAa;AACzC,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC7D;AAGA,IAAA,MAAM,EAAE,SAAA,EAAW,UAAA,EAAW,GAAI,MAAM,YAAA,EAAa;AAGrD,IAAA,MAAM,UAAU,OAAA,CAAQ,EAAA,IAAM,gBAAgB,OAAA,CAAQ,IAAA,EAAM,QAAQ,WAAW,CAAA;AAG/E,IAAA,MAAM,eAAA,GAA+B;AAAA,MACnC,EAAA,EAAI,OAAA;AAAA,MACJ,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,SAAA;AAAA,MACA,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,CAAC,QAAQ,CAAA;AAAA,MACjC,MAAA,EAAQ,QAAQ,MAAA,IAAU,QAAA;AAAA,MAC1B,GAAG;AAAA,KACL;AAGA,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,eAAe,CAAA;AAG1D,IAAA,MAAM,eAAA,GAAkB,yBAAyB,gBAAgB,CAAA;AAGjE,IAAA,MAAM,YAAY,WAAA,CAAY,gBAAA,EAAkB,UAAA,EAAY,OAAA,EAAS,UAAU,oBAAoB,CAAA;AAGnG,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,uBAAA,CAAwB,MAAA,EAAQ,OAAO,KAAA,KAAU;AACrD,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,OAAO,SAAA;AAAA,MACT;AACA,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AAC7C,MAAA,OAAO,aAAa,SAAA,IAAa,IAAA;AAAA,IACnC,CAAC,CAAA;AAGD,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,MAAA,CAAO,OAAA,CAAQ,IAAI,MAAM,CAAA;AAGtD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,OAAA,EAAS,UAAU,CAAA;AAAA,IAC1D,SAAS,KAAA,EAAO;AAGd,MAAA,OAAA,CAAQ,IAAA,CAAK,mDAAyC,OAAO,CAAA,EAAA,EAAK,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAA;AAAA,IAC9H;AAGA,IAAA,IAAI,KAAK,QAAA,EAAU;AAEjB,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAClD,MAAA,MAAM,WAAA,GAAc,YAAY,MAAA,KAAW,CAAA;AAE3C,MAAA,MAAM,KAAA,GAA2B;AAAA,QAC/B,IAAA,EAAM,wBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,kBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,OAAA;AAAA,UACA,MAAM,gBAAA,CAAiB,IAAA;AAAA,UACvB,WAAW,gBAAA,CAAiB,SAAA;AAAA,UAC5B,OAAO,gBAAA,CAAiB,KAAA;AAAA,UACxB;AAAA;AACF,OACF;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,OAAA,EAA8C;AAC3D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACnD,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA,EAEA,MAAM,UAAA,GAAqC;AACzC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC1C,IAAA,MAAM,SAAwB,EAAC;AAE/B,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EACA,MACA,KAAA,EACY;AAEZ,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AACzC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE,CAAA;AAAA,IAC/C;AAGA,IAAA,MAAM,eAAA,GAAkB,wBAAA,CAAyB,MAAA,CAAO,OAAO,CAAA;AAG/D,IAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,IAAA,IAAI;AACF,MAAA,UAAA,GAAa,MAAM,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,OAAO,CAAA;AAAA,IAC3D,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,wCAAA,EAAiC,OAAO,CAAA,sBAAA,CAAwB,CAAA;AAAA,IAC/E;AAGA,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,UAAA,EAAY;AAEd,MAAA,SAAA,GAAY,YAAY,MAAA,CAAO,OAAA,EAAS,UAAA,EAAY,OAAA,EAAS,MAAM,KAAK,CAAA;AAAA,IAC1E,CAAA,MAAO;AAEL,MAAA,SAAA,GAAY;AAAA,QACV,KAAA,EAAO,OAAA;AAAA,QACP,IAAA;AAAA,QACA,KAAA;AAAA,QACA,WAAW,qBAAA,EAAsB;AAAA,QACjC,WAAW,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI;AAAA,OACzC;AAAA,IACF;AAGA,IAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,MAAA,CAAO,UAAA,IAAc,EAAC;AACxD,IAAA,MAAM,iBAAiB,kBAAA,CAAmB,IAAA,CAAK,CAAA,GAAA,KAAO,GAAA,CAAI,cAAc,aAAa,CAAA;AAErF,IAAA,IAAI,eAAA;AACJ,IAAA,IAAI,cAAA,EAAgB;AAElB,MAAA,MAAM,WAAW,kBAAA,CAAmB,GAAA;AAAA,QAAI,CAAA,GAAA,KACtC,GAAA,CAAI,SAAA,KAAc,aAAA,GAAgB,SAAA,GAAY;AAAA,OAChD;AAEA,MAAA,eAAA,GAAkB,QAAA,CAAS,MAAA,GAAS,CAAA,GAChC,QAAA,GACA,CAAC,SAAS,CAAA;AAAA,IAChB,CAAA,MAAO;AAEL,MAAA,eAAA,GAAkB,CAAC,GAAG,kBAAA,EAAoB,SAAS,CAAA;AAAA,IACrD;AAIA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,MAAA;AAAA,MACH,MAAA,EAAQ;AAAA,QACN,GAAG,MAAA,CAAO,MAAA;AAAA,QACV,eAAA;AAAA,QACA,UAAA,EAAY;AAAA;AACd,KACF;AAEA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,sBAAsB,eAAA,EAA0C;AACpE,IAAA,IAAI,SAAA,GAAY,eAAA;AAChB,IAAA,IAAI,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAGzC,IAAA,OAAO,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,SAAA,IAAa,MAAM,YAAA,EAAc;AAChE,MAAA,SAAA,GAAY,KAAA,CAAM,YAAA;AAClB,MAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAAA,IACvC;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eAAA,GAAwC;AAE5C,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,cAAA,CAAe,WAAA,EAAY;AAEtD,IAAA,IAAI,OAAA,EAAS,aAAa,OAAA,EAAS;AAEjC,MAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,qBAAA,CAAsB,OAAA,CAAQ,YAAY,OAAO,CAAA;AACnF,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA;AAChD,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,MAAM,cAAc,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,QAAQ,CAAA;AAC1D,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAO,WAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAI,MAAM,yDAAoD,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,0BAA0B,OAAA,EAA8C;AAC5E,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,qBAAA,CAAsB,OAAO,CAAA;AAC/D,IAAA,OAAO,IAAA,CAAK,SAAS,cAAc,CAAA;AAAA,EACrC;AAAA,EAEA,MAAM,eACJ,OAAA,EAC2D;AAE3D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,UAAA,CAAY,CAAA;AAAA,IAC5D;AAEA,IAAA,IAAI,QAAA,CAAS,WAAW,SAAA,EAAW;AACjC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,OAAO,CAAA,CAAE,CAAA;AAAA,IACnE;AAGA,IAAA,MAAM,EAAE,SAAA,EAAW,YAAA,EAAc,YAAY,aAAA,EAAc,GAAI,MAAM,YAAA,EAAa;AAKlF,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,QAAA,CAAS,IAAA,EAAM,SAAS,WAAW,CAAA;AAClE,IAAA,IAAI,UAAA;AAGJ,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,eAAe,CAAA;AACjD,IAAA,IAAI,gBAAgB,YAAA,CAAa,CAAC,CAAA,IAAK,YAAA,CAAa,CAAC,CAAA,EAAG;AACtD,MAAA,MAAM,kBAAA,GAAqB,aAAa,CAAC,CAAA;AACzC,MAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,YAAA,CAAa,CAAC,GAAG,EAAE,CAAA;AACnD,MAAA,UAAA,GAAa,CAAA,EAAG,kBAAkB,CAAA,EAAA,EAAK,cAAA,GAAiB,CAAC,CAAA,CAAA;AAAA,IAC3D,CAAA,MAAO;AAEL,MAAA,UAAA,GAAa,GAAG,MAAM,CAAA,GAAA,CAAA;AAAA,IACxB;AAGA,IAAA,MAAM,eAAA,GAA+B;AAAA,MACnC,EAAA,EAAI,UAAA;AAAA,MACJ,MAAM,QAAA,CAAS,IAAA;AAAA,MACf,aAAa,QAAA,CAAS,WAAA;AAAA,MACtB,SAAA,EAAW,YAAA;AAAA,MACX,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAGA,IAAA,MAAM,mBAAA,GAAsB,kBAAkB,eAAe,CAAA;AAG7D,IAAA,MAAM,eAAA,GAAkB,yBAAyB,mBAAmB,CAAA;AAGpE,IAAA,MAAM,YAAY,WAAA,CAAY,mBAAA,EAAqB,aAAA,EAAe,UAAA,EAAY,UAAU,cAAc,CAAA;AAGtG,IAAA,MAAM,SAAA,GAA+B;AAAA,MACnC,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,uBAAA,CAAwB,SAAA,EAAW,OAAO,KAAA,KAAU;AACxD,MAAA,IAAI,UAAU,UAAA,EAAY;AACxB,QAAA,OAAO,YAAA;AAAA,MACT;AACA,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AAC7C,MAAA,OAAO,aAAa,SAAA,IAAa,IAAA;AAAA,IACnC,CAAC,CAAA;AAGD,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,SAAA,CAAU,OAAA,CAAQ,IAAI,SAAS,CAAA;AAG5D,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,WAAA;AAAA,MACjC,OAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA;AAAA,KACF;AAGA,IAAA,IAAI;AAEF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,cAAA,CAAe,cAAc,OAAO,CAAA;AAChE,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,UAAA,EAAY,QAAQ,CAAA;AAAA,MACjE,CAAA,MAAO;AAEL,QAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,UAAA,EAAY,EAAE,CAAA;AAAA,MAC3D;AAAA,IACF,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,IAAA,CAAK,8CAAoC,UAAU,CAAA,EAAA,EAAK,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAA;AAAA,IAC5H;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,UAAA,EAAY,aAAa,CAAA;AAAA,IAChE,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,mDAAyC,UAAU,CAAA,EAAA,EAAK,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAA;AAAA,IACjI;AAEA,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,eAAA;AAAA,MACV,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,CAAY,OAAA,EAAiB,YAAoB,QAAA,EAAU,MAAA,GAAgD,UAAU,YAAA,EAA6C;AAEtK,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,UAAA,CAAY,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,cAAA,GAA8B;AAAA,MAClC,GAAG,cAAA,CAAe,OAAA;AAAA,MAClB,MAAA,EAAQ,SAAA;AAAA,MACR,GAAI,YAAA,IAAgB,EAAE,YAAA;AAAa,KACrC;AAGA,IAAA,MAAM,eAAA,GAAkB,yBAAyB,cAAc,CAAA;AAG/D,IAAA,MAAM,aAAA,GAAmC;AAAA,MACvC,GAAG,cAAA;AAAA,MACH,MAAA,EAAQ;AAAA,QACN,GAAG,cAAA,CAAe,MAAA;AAAA,QAClB;AAAA,OACF;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AAGpE,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAM,YAAA,GAA6C;AAAA,QACjD,OAAA;AAAA,QACA,SAAA;AAAA,QACA,gBAAA,EAAkB;AAAA,OACpB;AAEA,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,YAAA,CAAa,YAAA,GAAe,YAAA;AAAA,MAC9B;AAEA,MAAA,MAAM,KAAA,GAA2B;AAAA,QAC/B,IAAA,EAAM,wBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,kBAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACX;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,aAAA,EAAsC;AAEvD,IAAA,OAAA,CAAQ,KAAK,wCAAwC,CAAA;AAAA,EACvD;AACF,CAAA;;;AC7cA,IAAA,wBAAA,GAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACYO,SAAS,6BACd,IAAA,EACuC;AACvC,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,cAAc,CAAA;AACrF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAI,CAAA;AAE9B,EAAA,OAAO,CAAC,OAAA,EAAS,SAAA,CAAU,MAAM,CAAA;AACnC;AAKO,SAAS,iBAAiB,IAAA,EAAuC;AACtE,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,4BAAA,CAA6B,IAAI,CAAA;AACnD,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,+BAA+B,IAAA,EAAiC;AAC9E,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,6BAA6B,IAAI,CAAA;AAE3D,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAC1D,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,QAAQ;AAAC,GACX;AACF;AAKA,eAAsB,0BAAA,CACpB,QACA,YAAA,EACe;AAEf,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,4BAAA,CAA6B,OAAO,OAAO,CAAA;AACrE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,gBAAA,EAAkB,eAAe,CAAA;AAAA,EACrE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,YAAY,CAAA;AAC/D;;;AC5DO,SAAS,qBACd,OAAA,EAC2B;AAC3B,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAE9C,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,IAAI,OAAA,CAAQ,EAAA,IAAM,mBAAmB,OAAA,CAAQ,OAAA,IAAW,YAAY,SAAS,CAAA;AAAA,IAC7E,UAAA,EAAY,QAAQ,UAAA,IAAc,MAAA;AAAA,IAClC,QAAA,EAAU,QAAQ,QAAA,IAAY,EAAA;AAAA,IAC9B,IAAA,EAAM,QAAQ,IAAA,IAAQ,UAAA;AAAA,IACtB,QAAQ,OAAA,CAAQ,MAAA,KAAW,OAAA,CAAQ,IAAA,KAAS,eAAe,UAAA,GAAa,MAAA,CAAA;AAAA,IACxE,OAAA,EAAS,QAAQ,OAAA,IAAW,EAAA;AAAA,IAC5B,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,oBAAoB,OAAA,CAAQ,kBAAA;AAAA,IAC5B,UAAU,OAAA,CAAQ;AAAA,GACpB;AAGA,EAAA,MAAM,UAAA,GAAa,+BAA+B,QAAQ,CAAA;AAC1D,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,gBAAA,EAAkB,UAAA,CAAW,MAAM,CAAA;AAAA,EACvE;AAEA,EAAA,OAAO,QAAA;AACT;AAWO,SAAS,mBAAmB,IAAA,EAAqC;AAEtE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,+BAAA,EAAiC,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC9F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,8BAAA,CAA+B,MAAA,CAAO,OAAO,CAAA;AACvE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,wBAAA,EAA0B,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACtF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC/CO,IAAM,kBAAN,MAAkD;AAAA,EAC/C,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EAER,YAAY,YAAA,EAA2C;AACrD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,MAAA,CAAO,OAAA,EAAkC,OAAA,EAA0C;AAEvF,IAAA,MAAM,mBAAA,GAAsB,OAAA;AAC5B,IAAA,IAAI,CAAC,oBAAoB,QAAA,EAAU;AACjC,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,mBAAA,CAAoB,UAAA,IAAc,CAAC,CAAC,MAAA,EAAQ,WAAA,EAAa,WAAA,EAAa,UAAA,EAAY,OAAO,CAAA,CAAE,QAAA,CAAS,mBAAA,CAAoB,UAAU,CAAA,EAAG;AACvI,MAAA,MAAM,IAAI,MAAM,2FAA2F,CAAA;AAAA,IAC7G;AAKA,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,YAAA,IAAgB,OAAA,CAAQ,QAAA,EAAU;AACrD,MAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,mBAAA,CAAoB,oBAAoB,QAAQ,CAAA;AAGrF,MAAA,MAAM,kBAAkB,iBAAA,CAAkB,MAAA;AAAA,QAAO,CAAA,QAAA,KAC/C,SAAS,IAAA,KAAS,YAAA,IAClB,SAAS,QAAA,KAAa,OAAA,CAAQ,QAAA,IAC9B,QAAA,CAAS,MAAA,KAAW;AAAA,OACtB;AAEA,MAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAI9B,QAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,cAAA,EAAe;AAE/C,QAAA,KAAA,MAAW,cAAc,eAAA,EAAiB;AACxC,UAAA,MAAM,gBAAgB,YAAA,CAAa,IAAA;AAAA,YAAK,CAAA,QAAA,KACtC,SAAS,UAAA,KAAe,UAAA,IACxB,SAAS,kBAAA,KAAuB,UAAA,CAAW,EAAA,IAC3C,QAAA,CAAS,MAAA,KAAW;AAAA,WACtB;AAEA,UAAA,IAAI,CAAC,aAAA,EAAe;AAElB,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,mBAAA,CAAoB,QAAQ,CAAA,wBAAA,EAA2B,OAAA,CAAQ,QAAQ,CAAA,YAAA,EAAe,UAAA,CAAW,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,UAC1J;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,MAAA,EAAQ,MAAA;AAAA,MACR,GAAG;AAAA;AAAA,KACL;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,eAAe,CAAA;AAG7D,MAAA,MAAM,cAAA,GAAuC;AAAA,QAC3C,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,KAAA;AAAA,UACT,IAAA,EAAM,UAAA;AAAA,UACN,eAAA,EAAiB,kCAAA;AAAA,UACjB,YAAY,CAAC;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,IAAA,EAAM,QAAA;AAAA,YACN,KAAA,EAAO,kBAAA;AAAA,YACP,SAAA,EAAW,aAAA;AAAA,YACX,SAAA,EAAW,KAAK,GAAA;AAAI,WACrB;AAAA,SACH;AAAA,QACA,OAAA,EAAS;AAAA,OACX;AAGA,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,OAAA,EAAS,UAAU,yBAAyB,CAAA;AAGhH,MAAA,MAAM,KAAK,MAAA,CAAO,SAAA,CAAU,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGrE,MAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,QACpB,IAAA,EAAM,kBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,kBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,YAAY,gBAAA,CAAiB,EAAA;AAAA,UAC7B,YAAY,gBAAA,CAAiB,UAAA;AAAA,UAC7B,UAAU,gBAAA,CAAiB,QAAA;AAAA,UAC3B,MAAM,gBAAA,CAAiB,IAAA;AAAA,UACvB,QAAQ,gBAAA,CAAiB,MAAA;AAAA,UACzB,SAAS,gBAAA,CAAiB,OAAA;AAAA,UAC1B,WAAA,EAAa,OAAA;AAAA,UACb,UAAU,gBAAA,CAAiB,QAAA;AAAA,UAC3B,oBAAoB,gBAAA,CAAiB;AAAA;AACvC,OACuB,CAAA;AAEzB,MAAA,OAAO,gBAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,yBAAyB,CAAA,EAAG;AAC/E,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,OAAA,CAAQ,UAAA,EAAoB,OAAA,EAAiB,OAAA,EAA2C;AAE5F,IAAA,MAAM,gBAAA,GAAmB,MAAM,IAAA,CAAK,WAAA,CAAY,UAAU,CAAA;AAC1D,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,UAAU,CAAA,CAAE,CAAA;AAAA,IAC1E;AAGA,IAAA,MAAM,cAAA,GAAiB,OAAA,IAAW,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAA;AAIjE,IAAA,OAAO,MAAM,KAAK,MAAA,CAAO;AAAA,MACvB,UAAA,EAAY,UAAA;AAAA,MACZ,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS,cAAA;AAAA,MACT,kBAAA,EAAoB;AAAA,OACnB,OAAO,CAAA;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,YAAY,UAAA,EAAoD;AACpE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,UAAU,CAAA;AACzD,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAAoB,QAAA,EAA6C;AACrE,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAK;AAC7C,IAAA,MAAM,YAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,OAAA,CAAQ,QAAA,KAAa,QAAA,EAAU;AAClD,QAAA,SAAA,CAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,cAAA,GAA4C;AAChD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAK;AAC7C,IAAA,MAAM,YAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,SAAA,CAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,iBAAA,CAAkB,UAAA,EAAoB,QAAA,GAAmB,QAAA,EAAmC;AAChG,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY,UAAU,CAAC,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,WAAA,CACZ,UAAA,EACA,QAAA,EACA,YAAA,EACyB;AAEzB,IAAA,IAAI,gBAAgB,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,QAAQ,CAAA,4BAAA,CAA8B,CAAA;AAAA,IACrE;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,CAAY,UAAU,CAAA;AAClD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,UAAU,CAAA,CAAE,CAAA;AAAA,IAC1E;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,cAAA,EAAe;AAC/C,IAAA,MAAM,YAAY,YAAA,CAAa,MAAA;AAAA,MAC7B,CAAA,CAAA,KAAK,CAAA,CAAE,UAAA,KAAe,UAAA,IAAc,EAAE,QAAA,KAAa;AAAA,KACrD;AAGA,IAAA,MAAM,kBAAoC,EAAC;AAC3C,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,CAAY,SAAS,EAAA,EAAI,QAAA,EAAU,eAAe,CAAC,CAAA;AAC7E,QAAA,eAAA,CAAgB,KAAK,MAAM,CAAA;AAAA,MAC7B,SAAS,KAAA,EAAO;AAEd,QAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACjE,UAAA;AAAA,QACF;AACA,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,QAAA;AAAA,MACA,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AACF,CAAA;;;AC7RA,IAAA,uBAAA,GAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACUO,IAAM,iBAAN,MAAgD;AAAA,EAC7C,MAAA;AAAA,EACA,WAAA;AAAA,EAER,YAAY,YAAA,EAA0C;AACpD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,cAAc,YAAA,CAAa,WAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAA,GAAyC;AAE7C,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAK;AAC7C,IAAA,MAAM,QAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,EAAE,CAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC/C,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IACxC;AAGA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAA;AAGzC,IAAA,MAAM,eAAe,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AACpE,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ;AACtC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,2BAAA,CAA4B,IAAI,CAAA;AACvD,MAAA,OAAO,SAAA,GAAY,CAAA;AAAA,IACrB,CAAC,CAAA,CAAE,MAAA;AAEH,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,QACL,OAAO,KAAA,CAAM,MAAA;AAAA,QACb,QAAA,EAAU,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAA;AAAA,QACvC,UAAA,EAAY,IAAA,CAAK,oBAAA,CAAqB,KAAK;AAAA,OAC7C;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,OAAO,MAAA,CAAO,MAAA;AAAA,QACd,QAAQ,MAAA,CAAO,MAAA,CAAO,OAAK,CAAA,CAAE,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AAAA,QAClD,WAAW,MAAA,CAAO,MAAA,CAAO,OAAK,CAAA,CAAE,MAAA,KAAW,WAAW,CAAA,CAAE;AAAA,OAC1D;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,YAAA,EAAc,MAAA;AAAA,QACd,YAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,MAAA,EAA2C;AAE7D,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AAGxB,IAAA,IAAI,YAA8B,EAAC;AACnC,IAAA,IAAI,eAAiC,EAAC;AACtC,IAAA,IAAI,aAAgC,EAAC;AAGrC,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAK;AACrD,IAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,YAAA,CAAa,IAAA,CAAK,OAAO,OAAO,CAAA;AAChC,QAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,QAAA,KAAa,MAAA,EAAQ;AACtC,UAAA,SAAA,CAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AACvD,IAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAQ;AAC9C,QAAA,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAGA,IAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,2BAAA,CAA4B,IAAI,CAAA;AAChE,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,uBAAA,CAAwB,CAAC,IAAI,CAAC,CAAA;AAI1D,IAAA,MAAM,iBAAA,GAAoB,SAAA,CAAU,MAAA,CAAO,CAAA,CAAA,KAAK;AAC9C,MAAA,IAAI,EAAE,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,MAAA,KAAW,QAAQ,OAAO,KAAA;AAGzD,MAAA,MAAM,gBAAgB,YAAA,CAAa,IAAA;AAAA,QAAK,CAAA,UAAA,KACtC,WAAW,UAAA,KAAe,UAAA,IAC1B,WAAW,kBAAA,KAAuB,CAAA,CAAE,EAAA,IACpC,UAAA,CAAW,MAAA,KAAW;AAAA,OACxB;AAEA,MAAA,OAAO,CAAC,aAAA;AAAA,IACV,CAAC,CAAA,CAAE,MAAA;AACH,IAAA,MAAM,YAAA,GAAe,WAAW,MAAA,GAAS,CAAA,GAAI,KAAK,GAAA,CAAI,GAAG,WAAW,GAAA,CAAI,CAAA,CAAA,KAAK,KAAK,kBAAA,CAAmB,CAAA,CAAE,EAAE,CAAC,CAAC,IAAI,IAAA,CAAK,kBAAA,CAAmB,KAAK,EAAE,CAAA;AAG9I,IAAA,MAAM,kBAA4B,EAAC;AACnC,IAAA,IAAI,kBAAA,GAAqB,CAAA,EAAG,eAAA,CAAgB,IAAA,CAAK,wCAAwC,CAAA;AACzF,IAAA,IAAI,oBAAoB,CAAA,EAAG,eAAA,CAAgB,IAAA,CAAK,CAAA,EAAG,iBAAiB,CAAA,oCAAA,CAAsC,CAAA;AAC1G,IAAA,IAAI,cAAA,GAAiB,CAAA,EAAG,eAAA,CAAgB,IAAA,CAAK,uCAAuC,CAAA;AAGpF,IAAA,IAAI,WAAA,GAAc,GAAA;AAClB,IAAA,IAAI,kBAAA,GAAqB,GAAG,WAAA,IAAe,EAAA;AAC3C,IAAA,IAAI,iBAAA,GAAoB,GAAG,WAAA,IAAe,EAAA;AAC1C,IAAA,IAAI,cAAA,GAAiB,GAAG,WAAA,IAAe,EAAA;AACvC,IAAA,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAA;AAErC,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,WAAA;AAAA,MACA,kBAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAA,GAAuD;AAE3D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAK;AAC7C,IAAA,MAAM,QAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,EAAE,CAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IACvC;AAGA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,mBAAA,CAAoB,KAAK,CAAA;AACjD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,KAAK,CAAA;AAC7C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAA;AAC/C,IAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ;AAC5C,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAQ,OAAO,KAAA;AACnC,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACrD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA,GAAK,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA;AACpE,MAAA,OAAO,aAAA,IAAiB,YAAA;AAAA,IAC1B,CAAC,CAAA,CAAE,MAAA;AAEH,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA;AAAA,MACA,qBAAA,EAAuB;AAAA;AAAA,KACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAA,GAAyD;AAE7D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC/C,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AACvD,IAAA,MAAM,aAAgC,EAAC;AACvC,IAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,EAAQ,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IAC5C;AAGA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,qBAAA,CAAsB,MAAA,EAAQ,UAAU,CAAA;AAClE,IAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,WAAS,KAAA,CAAM,IAAA,KAAS,OAAO,CAAA,CAAE,MAAA;AACnE,IAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,WAAS,KAAA,CAAM,IAAA,KAAS,OAAO,CAAA,CAAE,MAAA;AACnE,IAAA,MAAM,gBAAA,GAAmB,WAAA,GAAc,CAAA,GAAK,YAAA,GAAe,cAAe,GAAA,GAAM,CAAA;AAChF,IAAA,MAAM,eAAA,GAAkB,WAAA,GAAc,CAAA,GAAI,WAAA,GAAc,WAAA,GAAc,CAAA;AACtE,IAAA,MAAM,qBAAqB,IAAA,CAAK,GAAA,CAAI,KAAM,YAAA,GAAe,EAAA,GAAO,mBAAmB,CAAE,CAAA;AAErF,IAAA,OAAO;AAAA,MACL,YAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,4BAA4B,IAAA,EAA0B;AACpD,IAAA,IAAI;AAEF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AAIxD,MAAA,MAAM,eAAA,GAAkB,gBAAA;AAExB,MAAA,MAAM,cAAc,WAAA,GAAc,eAAA;AAClC,MAAA,MAAM,QAAA,GAAW,WAAA,IAAe,EAAA,GAAK,EAAA,GAAK,EAAA,CAAA;AAE1C,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA;AAAA,IAC7B,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kDAAA,EAAqD,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AAAA,IAChF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB,KAAA,EAA6B;AAEnD,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAGF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ;AAClC,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AAChD,QAAA,OAAA,CAAQ,WAAA,GAAc,QAAA,KAAa,EAAA,GAAK,EAAA,GAAK,EAAA,CAAA;AAAA,MAC/C,CAAC,CAAA;AAED,MAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAG,SAAS,CAAC,CAAA;AAAA,IAC3C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,IAC3E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,6BAA6B,QAAA,EAAoC;AAE/D,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAGA,IAAA,MAAM,iBAAA,GAAoB,SAAS,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA;AAG3F,IAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,EAAG;AAClC,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,GAAA,CAAI,CAAA,CAAA,KAAK;AACtC,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,kBAAA,CAAmB,CAAA,CAAE,EAAE,CAAA;AACjD,QAAA,OAAA,CAAQ,WAAA,GAAc,YAAA,KAAiB,EAAA,GAAK,EAAA,GAAK,EAAA,CAAA;AAAA,MACnD,CAAC,CAAA;AAED,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAAA,IACzB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,sEAAsE,CAAA;AAAA,IACxF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,KAAA,EAA6B;AAE3C,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,cAAc,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AACnE,MAAA,MAAM,YAAY,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAC/D,MAAA,MAAM,gBAAgB,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,UAAU,CAAA,CAAE,MAAA;AACvE,MAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AACjE,MAAA,MAAM,cAAc,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AACnE,MAAA,MAAM,cAAc,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AACnE,MAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AAMjE,MAAA,MAAM,YAAA,GAAgB,SAAA,GAAY,GAAA,GAAQ,aAAA,GAAgB,GAAA,GAAQ,WAAA,GAAc,EAAA,GAAO,UAAA,GAAa,EAAA,GAAO,WAAA,GAAc,EAAA,GAAO,UAAA,GAAa,KAAO,WAAA,GAAc,CAAA;AAElK,MAAA,MAAM,gBAAA,GAAmB,MAAM,MAAA,GAAS,GAAA;AAExC,MAAA,IAAI,qBAAqB,CAAA,EAAG;AAC1B,QAAA,OAAO,CAAA;AAAA,MACT;AAEA,MAAA,OAAO,IAAA,CAAK,KAAA,CAAO,YAAA,GAAe,gBAAA,GAAoB,GAAG,CAAA;AAAA,IAC3D,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,6BAA6B,KAAA,EAA6C;AAExE,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,OAAA,EAAS,QAAA,EAAU,SAAS,QAAA,EAAU,MAAA,EAAQ,YAAY,QAAQ,CAAA;AACzF,IAAA,MAAM,eAAuC,EAAC;AAG9C,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,cAAc,QAAA,CAAS,IAAA,CAAK,MAAM,CAAC,CAAA;AAG3E,IAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,KAAA,MAAW,UAAU,aAAA,EAAe;AAClC,MAAA,MAAM,QAAQ,UAAA,CAAW,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAChE,MAAA,YAAA,CAAa,MAAM,CAAA,GAAK,KAAA,GAAQ,UAAA,CAAW,MAAA,GAAU,GAAA;AAAA,IACvD;AAEA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,2BAA2B,KAAA,EAA6B;AAEtD,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,kBAAA,GAAqB,WAAA,GAAe,EAAA,GAAK,EAAA,GAAK,EAAA;AAEpD,MAAA,OAAO,KAAA,CAAM,OAAO,CAAA,IAAA,KAAQ;AAC1B,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACpD,QAAA,OAAO,YAAA,IAAgB,kBAAA;AAAA,MACzB,CAAC,CAAA,CAAE,MAAA;AAAA,IACL,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,IAC1F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,KAAA,EAA6B;AAE/C,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,YAAA,GAAe,WAAA,GAAe,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA;AAElD,MAAA,OAAO,KAAA,CAAM,OAAO,CAAA,IAAA,KAAQ;AAC1B,QAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAQ,OAAO,KAAA;AAEnC,QAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACtD,QAAA,OAAO,cAAA,IAAkB,YAAA;AAAA,MAC3B,CAAC,CAAA,CAAE,MAAA;AAAA,IACL,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,KAAA,EAA6B;AAE7C,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,iBAAiB,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,MAAM,CAAA;AAGlE,IAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAGF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,SAAA,GAAY,cAAA,CAAe,GAAA,CAAI,CAAA,IAAA,KAAQ;AAC3C,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACpD,QAAA,OAAA,CAAQ,WAAA,GAAc,YAAA,KAAiB,EAAA,GAAK,EAAA,GAAK,EAAA,CAAA;AAAA,MACnD,CAAC,CAAA;AAED,MAAA,OAAO,SAAA,CAAU,OAAO,CAAC,GAAA,EAAK,SAAS,GAAA,GAAM,IAAA,EAAM,CAAC,CAAA,GAAI,SAAA,CAAU,MAAA;AAAA,IACpE,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,IAChF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,KAAA,EAA6B;AAE9C,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,cAAc,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,MAAM,CAAA;AAG/D,IAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAGF,MAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,CAAI,CAAA,IAAA,KAAQ;AAEzC,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACpD,QAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,QAAA,MAAM,SAAA,GAAA,CAAa,WAAA,GAAc,YAAA,KAAiB,EAAA,GAAK,EAAA,GAAK,EAAA,CAAA;AAC5D,QAAA,OAAO,SAAA,GAAY,GAAA;AAAA,MACrB,CAAC,CAAA;AAED,MAAA,OAAO,UAAA,CAAW,OAAO,CAAC,GAAA,EAAK,SAAS,GAAA,GAAM,IAAA,EAAM,CAAC,CAAA,GAAI,UAAA,CAAW,MAAA;AAAA,IACtE,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAA,CAAsB,QAAuB,UAAA,EAAuC;AAElF,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAM,KAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AACxD,MAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,IAC1E;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChD,MAAA,MAAM,kBAAA,GAAqB,WAAA,GAAe,EAAA,GAAK,EAAA,GAAK,EAAA;AAGpD,MAAA,MAAM,gBAAA,GAAmB,UAAA,CAAW,MAAA,CAAO,CAAA,SAAA,KAAa;AACtD,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,kBAAA,CAAmB,SAAA,CAAU,EAAE,CAAA;AAC1D,QAAA,OAAO,aAAA,IAAiB,kBAAA;AAAA,MAC1B,CAAC,CAAA;AAGD,MAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AAEvC,MAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAE/B,QAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,CAAA,KAAA,KAAS,KAAA,CAAM,SAAS,OAAO,CAAA;AACjE,QAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAG/B,UAAA,cAAA,CAAe,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,QAC7B;AAAA,MACF;AAEA,MAAA,OAAO,cAAA,CAAe,IAAA;AAAA,IACxB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,IAC/E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,mBAAmB,EAAA,EAAoB;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAC1B,MAAA,MAAM,YAAY,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,IAAK,KAAK,EAAE,CAAA;AAG9C,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,IAAK,SAAA,IAAa,CAAA,EAAG;AACtC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,EAAE,CAAA,CAAE,CAAA;AAAA,MAClD;AAEA,MAAA,OAAO,SAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oDAAA,EAAuD,EAAE,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,KAAA,EAA6C;AACtE,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,MAAA,MAAA,CAAO,MAAM,CAAA,GAAA,CAAK,MAAA,CAAO,MAAM,KAAK,CAAA,IAAK,CAAA;AAAA,IAC3C;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,KAAA,EAA6C;AACxE,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,MAAA,MAAA,CAAO,QAAQ,CAAA,GAAA,CAAK,MAAA,CAAO,QAAQ,KAAK,CAAA,IAAK,CAAA;AAAA,IAC/C;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB,MAAA,EAA8B;AAC7C,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,oBAAoB,MAAA,EAA8B;AAChD,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,wBAAwB,MAAA,EAA8B;AACpD,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,gCAAgC,MAAA,EAA8C;AAC5E,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,2BAA2B,MAAA,EAA8B;AACvD,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,4BAA4B,MAAA,EAA8B;AACxD,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,0BAA0B,MAAA,EAA8B;AACtD,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA,EAEA,iCAAiC,MAAA,EAA8B;AAC7D,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,YAAA,EAA0C;AAC9D,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AAAA,EAEA,0BAA0B,YAAA,EAA0C;AAClE,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AAAA,EAEA,iCAAiC,YAAA,EAA0D;AACzF,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AAAA,EAEA,uBAAA,CAAwB,QAAsB,SAAA,EAAqC;AACjF,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AAAA,EAEA,4BAA4B,WAAA,EAAwC;AAClE,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AACF,CAAA;;;ACjpBA,IAAA,uBAAA,GAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACqCO,IAAM,iBAAN,MAAgD;AAAA,EACpC,YAAA;AAAA,EAEjB,YAAY,YAAA,EAA4B;AACtC,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,GAA6C;AACjD,IAAA,IAAI,OAAA,GAAU,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,EAAY;AAGlD,IAAA,IAAI,OAAA,IAAW,CAAC,OAAA,CAAQ,WAAA,EAAa,OAAA,EAAS;AAC5C,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,uBAAA,EAAwB;AAC3D,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,OAAA,CAAQ,WAAA,GAAc;AAAA,UACpB,OAAA,EAAS,eAAA;AAAA,UACT,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,SACpC;AACA,QAAA,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AAAA,MAC7C;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,uBAAA,EAAwB;AAC3D,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,MAAM,UAAA,GAA4B;AAAA,UAChC,WAAA,EAAa;AAAA,YACX,OAAA,EAAS,eAAA;AAAA,YACT,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACpC;AAAA,UACA,YAAY;AAAC,SACf;AACA,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,UAAU,CAAA;AAC9C,UAAA,OAAO,UAAA;AAAA,QACT,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,UAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAA,GAAkD;AACtD,IAAA,IAAI,IAAA,CAAK,aAAa,uBAAA,EAAyB;AAC7C,MAAA,OAAO,IAAA,CAAK,aAAa,uBAAA,EAAwB;AAAA,IACnD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAA6C;AAC/D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,EAAY;AACvC,IAAA,OAAO,OAAA,EAAS,UAAA,GAAa,OAAO,CAAA,IAAK,IAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CAAiB,OAAA,EAAiB,KAAA,EAA2C;AACjF,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,MAAiB,EAAC;AAC7C,IAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,EAAY,OAAA,CAAQ,aAAa,EAAC;AAE/C,IAAA,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA,GAAI;AAAA,MAC5B,GAAG,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA;AAAA,MAC7B,GAAG,KAAA;AAAA,MACH,QAAA,EAAA,iBAAU,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,KACnC;AAGA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,EAAG;AAChC,MAAA,OAAA,CAAQ,WAAA,GAAc;AAAA,QACpB,OAAA;AAAA,QACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,OACpC;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAA,GAA+C;AACnD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,EAAY;AACvC,IAAA,OAAO,OAAA,EAAS,OAAO,YAAA,IAAgB,IAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,GAAuE;AAC3E,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,EAAY;AACvC,IAAA,OAAO,SAAS,eAAA,IAAmB,IAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,sBAAsB,WAAA,EAAmD;AAC7E,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,MAAiB,EAAC;AAE7C,IAAA,IAAI,CAAC,QAAQ,eAAA,EAAiB;AAC5B,MAAA,OAAA,CAAQ,kBAAkB,EAAC;AAAA,IAC7B;AAEA,IAAA,IAAI,YAAY,aAAA,EAAe;AAC7B,MAAA,OAAA,CAAQ,gBAAgB,aAAA,GAAgB;AAAA,QACtC,GAAG,QAAQ,eAAA,CAAgB,aAAA;AAAA,QAC3B,GAAG,WAAA,CAAY;AAAA,OACjB;AAAA,IACF;AAEA,IAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,MAAA,OAAA,CAAQ,gBAAgB,WAAA,GAAc;AAAA,QACpC,GAAG,QAAQ,eAAA,CAAgB,WAAA;AAAA,QAC3B,GAAG,WAAA,CAAY;AAAA,OACjB;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,GAAyE;AAC7E,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,EAAY;AACvC,IAAA,OAAO,SAAS,WAAA,IAAe,IAAA;AAAA,EACjC;AACF,CAAA;;;ACrJA,IAAM,cAAA,GAAuC;AAAA,EAC3C,gBAAA,EAAkB;AAAA,IAChB,YAAA,EAAc,EAAA;AAAA,IACd,cAAA,EAAgB,CAAA;AAAA,IAChB,cAAA,EAAgB;AAAA;AAEpB,CAAA;AAQO,IAAM,iBAAN,MAAgD;AAAA,EAC7C,MAAA;AAAA,EAEA,eAAA;AAAA,EACA,cAAA;AAAA,EAEA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA;AAAA;AAAA,EAGA,cAAA;AAAA,EACA,MAAA;AAAA,EAGR,YAAY,YAAA,EAA0C;AAEpD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAG3B,IAAA,IAAA,CAAK,kBAAkB,YAAA,CAAa,eAAA;AACpC,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AAGnC,IAAA,IAAA,CAAK,kBAAkB,YAAA,CAAa,eAAA;AACpC,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAE7B,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AAGnC,IAAA,IAAA,CAAK,MAAA,GAAS,aAAa,MAAA,IAAU,cAAA;AAGrC,IAAA,IAAA,CAAK,uBAAA,EAAwB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAA,GAAgC;AACtC,IAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,MAAgC,kBAAA;AAAA,MAAoB,CAAC,KAAA,KACjE,IAAA,CAAK,qBAAA,CAAsB,KAAK;AAAA,KAClC;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,MAAiC,mBAAA;AAAA,MAAqB,CAAC,KAAA,KACnE,IAAA,CAAK,sBAAA,CAAuB,KAAK;AAAA,KACnC;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,MAAiC,mBAAA;AAAA,MAAqB,CAAC,KAAA,KACnE,IAAA,CAAK,sBAAA,CAAuB,KAAK;AAAA,KACnC;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,MAAmC,sBAAA;AAAA,MAAwB,CAAC,KAAA,KACxE,IAAA,CAAK,wBAAA,CAAyB,KAAK;AAAA,KACrC;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,MAAgC,mBAAA;AAAA,MAAqB,CAAC,KAAA,KAClE,IAAA,CAAK,eAAA,CAAgB,KAAK;AAAA,KAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAA,CAAW,OAAA,EAA8B,OAAA,EAAsC;AAEnF,IAAA,MAAM,gBAAA,GAAmB,iBAAiB,OAAO,CAAA;AAGjD,IAAA,MAAM,cAAA,GAAyD;AAAA,MAC7D,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,MAAA;AAAA,QACN,eAAA,EAAiB,kCAAA;AAAA,QACjB,YAAY,CAAC;AAAA,UACX,KAAA,EAAO,OAAA;AAAA,UACP,IAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO,cAAA;AAAA,UACP,SAAA,EAAW,aAAA;AAAA,UACX,SAAA,EAAW,KAAK,GAAA;AAAI,SACrB;AAAA,OACH;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,OAAA,EAAS,UAAU,cAAc,CAAA;AAGrG,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,cAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,QAAQ,gBAAA,CAAiB,EAAA;AAAA,QACzB;AAAA,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,SAAS,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,cAAA,EAAiB,iBAAiB,EAAE,CAAA,CAAA;AAAA,QAC1D,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,aAAA,EAAe;AAAA;AACjB,KACmB,CAAA;AAErB,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,MAAA,EAA4C;AACxD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACjD,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,GAAqC;AACzC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAK;AACzC,IAAA,MAAM,QAAsB,EAAC;AAE7B,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,EAAE,CAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,KAAA,CAAM,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,MAAA,EAAgB,OAAA,EAAsC;AAErE,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AAGxB,IAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,MAAM,CAAA,uBAAA,CAAyB,CAAA;AAAA,IACjF;AAGA,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAGzC,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,eAAA,CAAgB,iBAAA,CAAkB,SAAS,QAAA,EAAU;AAAA,MACrF,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO;AAAA,KAC/B,CAAA;AAED,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0EAAA,EAAwE,MAAM,CAAA,CAAE,CAAA;AAAA,IAClG;AAGA,IAAA,MAAM,cAAA,GAA6B,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAkB;AACxE,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,aAAA,EAAe,OAAA,EAAS,aAAa,2BAA2B,CAAA;AACpH,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,OAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX;AAAA;AACF,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,MAAA,EAAgB,OAAA,EAAsC;AAEtE,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAGzC,IAAA,MAAM,oBAAA,GAAuB,MAAM,IAAA,CAAK,uBAAA,CAAwB,KAAK,MAAM,CAAA;AAC3E,IAAA,MAAM,qBAAqB,oBAAA,CAAqB,IAAA;AAAA,MAAK,CAAA,UAAA,KACnD,UAAA,CAAW,QAAA,EAAU,UAAA,IAAc,MAAA,CAAO,KAAK,UAAA,CAAW,QAAA,CAAS,UAAU,CAAA,CAAE,MAAA,GAAS;AAAA,KAC1F;AAEA,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8DAAA,EAAiE,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,IAChG;AAEA,IAAA,MAAM,cAAc,kBAAA,CAAmB,EAAA;AAGvC,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO,eAAA;AAAA,MACP,SAAA,EAAW,gBAAA;AAAA,MACX,SAAA,EAAW,KAAK,GAAA;AAAI,KACtB;AAGA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAY,CAAC,GAAG,UAAA,CAAW,MAAA,CAAO,YAAY,aAAa,CAAA;AAAA,MAC3D,YAAA,EAAc;AAAA,KAChB;AAGA,IAAA,MAAM,mBAAmB,MAAM,IAAA,CAAK,eAAA,CAAgB,iBAAA,CAAkB,eAAe,OAAO,CAAA;AAC5F,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,MAAM,IAAI,MAAM,CAAA,gEAAA,CAAkE,CAAA;AAAA,IACpF;AAGA,IAAA,MAAM,cAAA,GAA6B,EAAE,GAAG,IAAA,EAAM,QAAQ,WAAA,EAAoC;AAC1F,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAE/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,aAAA,EAAe,OAAA,EAAS,UAAA,EAAY,CAAA,eAAA,EAAkB,IAAA,CAAK,MAAM,CAAA,QAAA,EAAM,WAAW,CAAA,CAAE,CAAA;AACxI,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,WAAW,IAAA,CAAK,MAAA;AAAA,QAChB,SAAA,EAAW,WAAA;AAAA,QACX;AAAA;AACF,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CAAa,MAAA,EAAgB,OAAA,EAAsC;AAEvE,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAGzC,IAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAM,CAAA,yCAAA,CAA2C,CAAA;AAAA,IAC/G;AAGA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO,UAAA;AAAA,MAC9B,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,gBAAgB,iBAAA,CAAkB,OAAA,EAAS,UAAU,OAAO,CAAA;AAC9F,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,CAAA,sEAAA,CAAmE,CAAA;AAAA,IACrF;AAGA,IAAA,MAAM,cAAA,GAA6B,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAS;AAC/D,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,aAAA,EAAe,OAAA,EAAS,YAAY,gBAAgB,CAAA;AACxG,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,MAClD,YAAA,EAAc;AAAA,KACf,CAAA;AAGD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,OAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX;AAAA;AACF,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAU,MAAA,EAAgB,OAAA,EAAiB,MAAA,EAAsC;AAErF,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AAGxB,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAM,CAAA,wCAAA,CAA0C,CAAA;AAAA,IAC9G;AAGA,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAEzC,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO,UAAA;AAAA,MAC9B,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,gBAAgB,iBAAA,CAAkB,QAAA,EAAU,UAAU,OAAO,CAAA;AAC/F,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,yEAAoE,CAAA;AAAA,IACtF;AAGA,IAAA,MAAM,cAAA,GAA6B;AAAA,MACjC,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,QAAA;AAAA;AAAA,MAER,GAAI,MAAA,IAAU;AAAA,QACZ,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,KAAA,IAAS,EAAE;AAAA,SAAA,EAAc,MAAM,sBAAK,IAAI,IAAA,IAAO,WAAA,EAAa,IAAI,IAAA;AAAK;AACtF,KACF;AACA,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,aAAA,EAAe,OAAA,EAAS,QAAA,EAAU,CAAA,aAAA,EAAgB,MAAA,IAAU,oBAAoB,CAAA,CAAE,CAAA;AACtI,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,MAClD,YAAA,EAAc;AAAA,KACf,CAAA;AAGD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX,OAAA;AAAA,QACA,QAAQ,MAAA,IAAU;AAAA;AACpB,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,MAAA,EAAgB,OAAA,EAAiB,QAAiB,KAAA,EAA4B;AAE7F,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AAGxB,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAM,CAAA,yCAAA,CAA2C,CAAA;AAAA,IAC/G;AAGA,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAEzC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,aAAa,MAAM,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,KAAK,EAAE,CAAA;AAClE,MAAA,IAAI,UAAA,CAAW,oBAAoB,CAAA,EAAG;AACpC,QAAA,MAAM,IAAI,MAAM,gGAAgG,CAAA;AAAA,MAClH;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO,UAAA;AAAA,MAC9B,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,gBAAgB,iBAAA,CAAkB,QAAA,EAAU,UAAU,OAAO,CAAA;AAC/F,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,yEAAoE,CAAA;AAAA,IACtF;AAGA,IAAA,MAAM,cAAA,GAA6B,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAS;AAC/D,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,aAAA,EAAe,OAAA,EAAS,WAAW,cAAc,CAAA;AACrG,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,MAClD,YAAA,EAAc;AAAA,KACf,CAAA;AAGD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX;AAAA;AACF,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CAAa,MAAA,EAAgB,OAAA,EAAsC;AAEvE,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAGzC,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAM,CAAA,yCAAA,CAA2C,CAAA;AAAA,IAC/G;AAGA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO,UAAA;AAAA,MAC9B,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,gBAAgB,iBAAA,CAAkB,QAAA,EAAU,QAAQ,OAAO,CAAA;AAC7F,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,CAAA,qEAAA,CAAkE,CAAA;AAAA,IACpF;AAGA,IAAA,MAAM,cAAA,GAA6B,EAAE,GAAG,IAAA,EAAM,QAAQ,MAAA,EAAO;AAC7D,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,aAAA,EAAe,OAAA,EAAS,YAAY,gBAAgB,CAAA;AACxG,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,MAClD,YAAA,EAAc;AAAA,KACf,CAAA;AAGD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW,MAAA;AAAA,QACX;AAAA;AACF,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,CAAY,MAAA,EAAgB,OAAA,EAAiB,MAAA,EAAsC;AAEvF,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAGzC,IAAA,IAAI,CAAC,CAAC,OAAA,EAAS,QAAA,EAAU,QAAQ,CAAA,CAAE,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA,EAAG;AAExD,MAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qFAAA,EAAwF,MAAM,CAAA,wBAAA,CAA0B,CAAA;AAAA,MAC1I;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,MAAM,CAAA,oGAAA,CAAsG,CAAA;AAAA,IAC1K;AAGA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA,EAAY,WAAW,MAAA,CAAO,UAAA;AAAA,MAC9B,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,eAAA,CAAgB,kBAAkB,IAAA,CAAK,MAAA,EAAQ,aAAa,OAAO,CAAA;AACrG,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0CAAA,EAA6C,IAAA,CAAK,MAAM,CAAA,0BAAA,CAAuB,CAAA;AAAA,IACjG;AAGA,IAAA,MAAM,cAAA,GAA6B;AAAA,MACjC,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,WAAA;AAAA;AAAA,MAER,GAAI,MAAA,IAAU;AAAA,QACZ,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,KAAA,IAAS,EAAE;AAAA,EAAK,IAAA,CAAK,MAAA,KAAW,QAAA,GAAW,YAAA,GAAe,aAAa,CAAA,CAAA,EAAI,MAAM,CAAA,EAAA,EAAA,iBAAK,IAAI,IAAA,EAAK,EAAE,WAAA,EAAa,IAAI,IAAA;AAAK;AACxI,KACF;AACA,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,aAAA,EAAe,OAAA,EAAS,WAAA,EAAa,CAAA,gBAAA,EAAmB,MAAA,IAAU,oBAAoB,CAAA,CAAE,CAAA;AAC5I,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGjE,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,MAClD,YAAA,EAAc;AAAA,KACf,CAAA;AAGD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,WAAW,IAAA,CAAK,MAAA;AAAA,QAChB,SAAA,EAAW,WAAA;AAAA,QACX,OAAA;AAAA,QACA,MAAA,EAAQ,MAAA,KAAW,IAAA,CAAK,MAAA,KAAW,WAAW,eAAA,GAAkB,gBAAA;AAAA;AAClE,KACyB,CAAA;AAE3B,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAA,CAAW,MAAA,EAAgB,OAAA,EAAgC;AAE/D,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA;AAGxB,IAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAE3B,MAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sFAAA,EAAyF,MAAM,CAAA,gCAAA,CAAkC,CAAA;AAAA,MACnJ,WAAW,IAAA,CAAK,MAAA,KAAW,OAAA,IAAW,IAAA,CAAK,WAAW,QAAA,EAAU;AAC9D,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+CAAA,EAAkD,KAAK,MAAM,CAAA,iCAAA,EAAoC,MAAM,CAAA,4CAAA,CAA8C,CAAA;AAAA,MACvK;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+CAAA,EAAkD,IAAA,CAAK,MAAM,CAAA,yCAAA,CAA2C,CAAA;AAAA,IAC1H;AAGA,IAAA,MAAM,IAAA,CAAK,SAAS,OAAO,CAAA;AAG3B,IAAA,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAGrC,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,qBAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,SAAA,EAAW,OAAA;AAAA,QACX,SAAA,EAAW,SAAA;AAAA,QACX,OAAA;AAAA,QACA,MAAA,EAAQ;AAAA;AACV,KACyB,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAA,CAAW,MAAA,EAAgB,OAAA,EAA8B,OAAA,EAAsC;AACnG,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAGA,IAAA,IAAI,CAAC,UAAU,CAAA,CAAE,SAAS,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,EAAG;AACpD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2DAAA,EAA8D,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,IAC3G;AAGA,IAAA,MAAM,cAAA,GAAiB,iBAAiB,EAAE,GAAG,WAAW,OAAA,EAAS,GAAG,SAAS,CAAA;AAC7E,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,cAAA,EAAe;AAG/D,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,aAAA,EAAe,OAAA,EAAS,UAAU,cAAc,CAAA;AACpG,IAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAEjE,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,wBAAwB,OAAA,EAAwC;AAEpE,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAK;AACrD,IAAA,MAAM,kBAA4B,EAAC;AAEnC,IAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,MAAA,IACF,OAAO,OAAA,CAAQ,IAAA,KAAS,gBACxB,MAAA,CAAO,OAAA,CAAQ,aAAa,OAAA,EAAS;AACrC,QAAA,eAAA,CAAgB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA;AAAA,MAC9C;AAAA,IACF;AAGA,IAAA,MAAM,gBAAgB,CAAC,GAAG,IAAI,GAAA,CAAI,eAAe,CAAC,CAAA;AAGlD,IAAA,MAAM,gBAA8B,EAAC;AACrC,IAAA,KAAA,MAAW,UAAU,aAAA,EAAe;AAClC,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AACtC,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA,MACzB;AAAA,IACF;AAEA,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,sBAAsB,KAAA,EAA4C;AACtE,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAA0B;AAAA,QAC9B,OAAA,EAAS,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,CAAA,wBAAA,CAAA;AAAA,QACtB,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,WAAA,EAAa,KAAK,GAAA,EAAI;AAAA,QACtB,aAAA,EAAe;AAAA,OACjB;AAGA,MAAA,IAAI,MAAM,OAAA,CAAQ,IAAA,KAAS,cAAc,KAAA,CAAM,OAAA,CAAQ,eAAe,MAAA,EAAQ;AAE5E,QAAA,MAAM,OAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,QAAQ,QAAQ,CAAA;AACtD,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,6BAAA,EAAgC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,CAAE,CAAA;AACrE,UAAA;AAAA,QACF;AAGA,QAAA,IAAI,CAAC,CAAC,QAAA,EAAU,OAAO,EAAE,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA,EAAG;AAC9C,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,WAAA,GAAc,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAkB;AACzD,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,GAAA,CAAI,KAAK,EAAE,CAAA;AACtD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,WAAA,EAAY;AAC5D,UAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AAGnE,UAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,YACpB,IAAA,EAAM,qBAAA;AAAA,YACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,YACpB,MAAA,EAAQ,iBAAA;AAAA,YACR,OAAA,EAAS;AAAA,cACP,QAAQ,IAAA,CAAK,EAAA;AAAA,cACb,WAAW,IAAA,CAAK,MAAA;AAAA,cAChB,SAAA,EAAW,QAAA;AAAA,cACX,OAAA,EAAS;AAAA,aACX;AAAA,YACA;AAAA,WACyB,CAAA;AAAA,QAC7B;AACA,QAAA;AAAA,MACF;AAIA,MAAA,IACE,KAAA,CAAM,OAAA,CAAQ,UAAA,KAAe,UAAA,IAC7B,KAAA,CAAM,QAAQ,MAAA,KAAW,UAAA,IACzB,KAAA,CAAM,OAAA,CAAQ,kBAAA,EACd;AAEA,QAAA,MAAM,mBAAmB,MAAM,IAAA,CAAK,gBAAgB,WAAA,CAAY,KAAA,CAAM,QAAQ,kBAAkB,CAAA;AAChG,QAAA,IAAI,CAAC,gBAAA,IAAoB,gBAAA,CAAiB,IAAA,KAAS,UAAA,EAAY;AAC7D,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,iBAAiB,QAAQ,CAAA;AACzD,QAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,QAAA,EAAU;AACrC,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,KAAK,EAAE,CAAA;AAClE,QAAA,IAAI,UAAA,CAAW,oBAAoB,CAAA,EAAG;AACpC,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,WAAA,GAAc,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAkB;AACzD,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,GAAA,CAAI,KAAK,EAAE,CAAA;AACtD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,WAAA,EAAY;AAC5D,UAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AAEnE,UAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,YACpB,IAAA,EAAM,qBAAA;AAAA,YACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,YACpB,MAAA,EAAQ,iBAAA;AAAA,YACR,OAAA,EAAS;AAAA,cACP,QAAQ,IAAA,CAAK,EAAA;AAAA,cACb,SAAA,EAAW,QAAA;AAAA,cACX,SAAA,EAAW,QAAA;AAAA,cACX,OAAA,EAAS;AAAA,aACX;AAAA,YACA;AAAA,WACyB,CAAA;AAAA,QAC7B;AACA,QAAA;AAAA,MACF;AAAA,IAGF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,mCAAmC,KAAK,CAAA;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,uBAAuB,KAAA,EAA6C;AACxE,IAAA,IAAI;AAEF,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,gBAAA,EAAkB;AACnC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,QAAQ,MAAM,CAAA;AACpD,MAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,OAAA,EAAS;AACpC,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,QAAQ,WAAW,CAAA;AAC3D,MAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,eAAA,CAAgB,iBAAA,CAAkB,SAAS,QAAA,EAAU;AAAA,QACrF,IAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAY;AAAC,OACd,CAAA;AAED,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,wDAAA,EAAsD,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AAC5E,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,WAAA,GAAc,EAAE,GAAG,IAAA,EAAM,QAAQ,QAAA,EAAkB;AACzD,MAAA,MAAM,aAAa,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,GAAA,CAAI,KAAK,EAAE,CAAA;AACtD,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,WAAA,EAAY;AAC5D,QAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AAEnE,QAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,UACpB,IAAA,EAAM,qBAAA;AAAA,UACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,UACpB,MAAA,EAAQ,iBAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,QAAQ,IAAA,CAAK,EAAA;AAAA,YACb,SAAA,EAAW,OAAA;AAAA,YACX,SAAA,EAAW,QAAA;AAAA,YACX,OAAA,EAAS,MAAM,OAAA,CAAQ;AAAA;AACzB,SACyB,CAAA;AAAA,MAC7B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,IACzD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAuB,KAAA,EAA6C;AACxE,IAAA,IAAI;AAEF,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,GAAA,CAAI,KAAA,CAAM,QAAQ,WAAW,CAAA;AAClF,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qBAAA,EAAwB,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,CAAE,CAAA;AAChE,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,CAAC,gBAAgB,OAAA,CAAQ,YAAA,IAAgB,gBAAgB,OAAA,CAAQ,YAAA,CAAa,WAAW,CAAA,EAAG;AAC9F,QAAA;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,MAAA,IAAU,eAAA,CAAgB,OAAA,CAAQ,YAAA,EAAc;AACzD,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AACtC,QAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,MAAA,EAAQ;AACnC,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,WAAA,GAAc,EAAE,GAAG,IAAA,EAAM,QAAQ,UAAA,EAAoB;AAC3D,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,GAAA,CAAI,KAAK,EAAE,CAAA;AACtD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,UAAA,EAAY,SAAS,WAAA,EAAY;AAC5D,UAAA,MAAM,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AAEnE,UAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,YACpB,IAAA,EAAM,qBAAA;AAAA,YACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,YACpB,MAAA,EAAQ,iBAAA;AAAA,YACR,OAAA,EAAS;AAAA,cACP,QAAQ,IAAA,CAAK,EAAA;AAAA,cACb,SAAA,EAAW,MAAA;AAAA,cACX,SAAA,EAAW,UAAA;AAAA,cACX,OAAA,EAAS;AAAA;AACX,WACyB,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,IACzD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,MAAA,EAA6C;AACjE,IAAA,IAAI;AAEF,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,cAAA,CAAe,eAAA,EAAgB;AAG/D,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,EAAY;AACxC,MAAA,MAAM,cAAc,QAAA,CAAS,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,QAAQ,CAAA;AAEpE,MAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,KAAK,EAAE,CAAA;AAGlE,QAAA,IAAI,UAAA,CAAW,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,YAAA,IACxD,UAAA,CAAW,kBAAA,GAAqB,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,cAAA,EAAgB;AAE7E,UAAA,MAAM,IAAA,CAAK,gBAAgB,MAAA,CAAO;AAAA,YAChC,UAAA,EAAY,MAAA;AAAA,YACZ,UAAU,IAAA,CAAK,EAAA;AAAA,YACf,IAAA,EAAM,YAAA;AAAA,YACN,OAAA,EAAS,kDAAkD,UAAA,CAAW,WAAW,MAAM,UAAA,CAAW,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,YAC5H,MAAA,EAAQ;AAAA,aACP,QAAQ,CAAA;AAAA,QACb;AAAA,MACF;AAGA,MAAA,IAAI,aAAa,MAAA,CAAO,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,iBAAiB,cAAA,EAAgB;AAClF,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,2BAAA,EAA8B,YAAA,CAAa,MAAA,CAAO,YAAY,CAAA,YAAA,EAAe,YAAA,CAAa,MAAA,CAAO,YAAY,CAAA,SAAA,EAAY,YAAA,CAAa,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAAA,MAGxK;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,KAAK,CAAA;AAAA,IAClD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAyB,KAAA,EAA+C;AAC5E,IAAA,IAAI;AAEF,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAA,KAAc,WAAA,EAAa;AAC3C,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,QAAQ,OAAO,CAAA;AAChE,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,2BAAA,EAA8B,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAClE,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,YAAA,EAAa;AAC1C,MAAA,MAAM,eAAe,SAAA,CAAU,MAAA;AAAA,QAAO,WACpC,KAAA,CAAM,aAAA,EAAe,QAAA,CAAS,KAAA,CAAM,QAAQ,OAAO;AAAA,OACrD;AAEA,MAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AAEtC,QAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,GAAA;AAAA,UAAA,CAC/B,WAAA,CAAY,iBAAiB,EAAC,EAAG,IAAI,CAAA,EAAA,KAAM,IAAA,CAAK,QAAA,CAAS,EAAE,CAAC;AAAA,SAC/D;AAEA,QAAA,MAAM,uBAAuB,WAAA,CAAY,KAAA;AAAA,UAAM,CAAA,KAAA,KAC7C,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW;AAAA,SAC5B;AAEA,QAAA,IAAI,oBAAA,EAAsB;AAExB,UAAA,MAAM,KAAK,WAAA,CAAY,WAAA,CAAY,IAAI,EAAE,MAAA,EAAQ,aAAa,CAAA;AAe9D,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,WAAA,CAAY,EAAE,CAAA,mEAAA,CAAqE,CAAA;AAAA,QACjH;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,KAAK,CAAA;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAA,GAAyC;AAC7C,IAAA,OAAO,MAAM,IAAA,CAAK,cAAA,CAAe,eAAA,EAAgB;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,MAAA,EAA2C;AAC7D,IAAA,OAAO,MAAM,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,MAAM,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,SAAS,OAAA,EAAuC;AAE5D,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,OAAO,CAAA;AAClD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,CAAE,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,wBAAwB,UAAA,EAAgI;AAGpK,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,SAAS,QAAA,EAAU,EAAE,UAAA,EAAY,EAAE,aAAa,EAAE,IAAA,EAAM,UAAA,EAAW,IAAI,EAAE;AAAA,MAC/F,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,QAAQ,QAAA,EAAU,EAAE,UAAA,EAAY,EAAE,aAAa,EAAE,IAAA,EAAM,UAAA,EAAW,IAAI;AAAE,KAChG;AAEA,IAAA,OAAO,WAAA,CAAY,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAA,CAAY,OAAA,EAA+B,OAAA,EAAuC;AAEtF,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,OAAO,CAAA;AAGlD,IAAA,MAAM,cAAA,GAA0D;AAAA,MAC9D,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,eAAA,EAAiB,kCAAA;AAAA,QACjB,YAAY,CAAC;AAAA,UACX,KAAA,EAAO,OAAA;AAAA,UACP,IAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO,eAAA;AAAA,UACP,SAAA,EAAW,aAAA;AAAA,UACX,SAAA,EAAW,KAAK,GAAA;AAAI,SACrB;AAAA,OACH;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,OAAA,EAAS,UAAU,eAAe,CAAA;AAGtG,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,YAAA,CAAa,OAAA,CAAQ,IAAI,YAAY,CAAA;AAGlE,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,MACpB,IAAA,EAAM,eAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,SAAS,gBAAA,CAAiB,EAAA;AAAA,QAC1B;AAAA,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,SAAS,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,eAAA,EAAkB,iBAAiB,EAAE,CAAA,CAAA;AAAA,QAC3D,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,aAAA,EAAe;AAAA;AACjB,KACoB,CAAA;AAEtB,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,OAAA,EAA8C;AAC3D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACnD,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,GAAuC;AAC3C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC1C,IAAA,MAAM,SAAwB,EAAC;AAE/B,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,OAAA,EAAiB,OAAA,EAA+B,OAAA,EAAwC;AACxG,IAAA,MAAM,cAAc,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACxD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,CAAE,CAAA;AAAA,IACpE;AAGA,IAAA,IAAI,CAAC,UAAU,CAAA,CAAE,SAAS,WAAA,CAAY,OAAA,CAAQ,MAAM,CAAA,EAAG;AACrD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4DAAA,EAA+D,WAAA,CAAY,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,IAC7G;AAGA,IAAA,MAAM,cAAA,GAAiB,kBAAkB,EAAE,GAAG,YAAY,OAAA,EAAS,GAAG,SAAS,CAAA;AAC/E,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,WAAA,EAAa,SAAS,cAAA,EAAe;AAGhE,IAAA,IAAI,OAAA,EAAS;AAEX,MAAA,IAAI,eAAe,MAAA,KAAW,QAAA,IAAY,WAAA,CAAY,OAAA,CAAQ,WAAW,QAAA,EAAU;AACjF,QAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,UAClD,aAAA,EAAe;AAAA,SAChB,CAAA;AAAA,MACH,WAES,cAAA,CAAe,MAAA,KAAW,eAAe,WAAA,CAAY,OAAA,CAAQ,WAAW,WAAA,EAAa;AAC5F,QAAA,MAAM,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,OAAA,EAAS;AAAA,UAClD,aAAA,EAAe;AAAA,SAChB,CAAA;AAAA,MACH;AAAA,IACF;AAGA,IAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,MAAA,KAAW,cAAA,CAAe,MAAA,EAAQ;AACxD,MAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,QACpB,IAAA,EAAM,sBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,iBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,OAAA;AAAA,UACA,SAAA,EAAW,YAAY,OAAA,CAAQ,MAAA;AAAA,UAC/B,WAAW,cAAA,CAAe,MAAA;AAAA,UAC1B,SAAS,OAAA,IAAW;AAAA;AACtB,OAC0B,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,aAAA,CAAc,OAAA,CAAQ,IAAI,aAAa,CAAA;AACpE,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CAAe,OAAA,EAAiB,MAAA,EAA+B;AAEnE,IAAA,MAAM,cAAc,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACxD,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AAErD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,CAAE,CAAA;AAAA,IACpE;AACA,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAGA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,WAAA,CAAY,OAAA;AAAA,MACf,OAAA,EAAS,CAAC,GAAI,WAAA,CAAY,QAAQ,OAAA,IAAW,IAAK,MAAM;AAAA,KAC1D;AACA,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,UAAA,CAAW,OAAA;AAAA,MACd,QAAA,EAAU,CAAC,GAAI,UAAA,CAAW,QAAQ,QAAA,IAAY,IAAK,OAAO;AAAA,KAC5D;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,eAAA,EAAgB;AAGzD,IAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA;AAAA,MAC5C,EAAE,GAAG,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,MACxC,YAAA,CAAa,EAAA;AAAA,MACb,QAAA;AAAA,MACA,QAAQ,MAAM,CAAA,eAAA;AAAA,KAChB;AACA,IAAA,MAAM,gBAAA,GAAmB,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA;AAAA,MAC3C,EAAE,GAAG,UAAA,EAAY,OAAA,EAAS,WAAA,EAAY;AAAA,MACtC,YAAA,CAAa,EAAA;AAAA,MACb,QAAA;AAAA,MACA,wBAAwB,OAAO,CAAA;AAAA,KACjC;AAEA,IAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,MAChB,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,iBAAA,CAAkB,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAAA,MACtE,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,gBAAA,CAAiB,OAAA,CAAQ,IAAI,gBAAgB;AAAA,KACpE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBAAA,CAAqB,OAAA,EAAiB,OAAA,EAAkC;AAE5E,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,IACvE;AACA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AACnD,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AAGA,IAAA,MAAM,cAAc,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACxD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,CAAE,CAAA;AAAA,IACpE;AAGA,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,GAAA;AAAA,MAChC,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,KAAW;AAC5B,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,QAClE;AACA,QAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAW;AAAA,MACtC,CAAC;AAAA,KACH;AAGA,IAAA,MAAM,YAAA,GAAe,WAAA,CAAY,OAAA,CAAQ,OAAA,IAAW,EAAC;AACrD,IAAA,MAAM,cAAA,GAAiB,QAAQ,MAAA,CAAO,CAAA,MAAA,KAAU,CAAC,YAAA,CAAa,QAAA,CAAS,MAAM,CAAC,CAAA;AAC9E,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,MAAM,CAAA,2CAAA,EAA8C,OAAO,KAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACvG;AAGA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,WAAA,CAAY,OAAA;AAAA,MACf,OAAA,EAAS,aAAa,MAAA,CAAO,CAAA,EAAA,KAAM,CAAC,OAAA,CAAQ,QAAA,CAAS,EAAE,CAAC;AAAA,KAC1D;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,eAAA,EAAgB;AAGzD,IAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA;AAAA,MAC5C,EAAE,GAAG,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,MACxC,YAAA,CAAa,EAAA;AAAA,MACb,QAAA;AAAA,MACA,CAAA,0BAAA,EAA6B,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACjD;AAGA,IAAA,MAAM,iBAAA,GAAoB,MAAM,OAAA,CAAQ,GAAA;AAAA,MACtC,WAAA,CAAY,GAAA,CAAI,OAAO,EAAE,QAAO,KAAM;AACpC,QAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,QAAA,IAAY,EAAC;AACjD,QAAA,MAAM,WAAA,GAAc;AAAA,UAClB,GAAG,MAAA,CAAO,OAAA;AAAA,UACV,QAAA,EAAU,YAAA,CAAa,MAAA,CAAO,CAAA,EAAA,KAAM,OAAO,OAAO;AAAA,SACpD;AACA,QAAA,OAAO,MAAM,KAAK,QAAA,CAAS,UAAA;AAAA,UACzB,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,WAAA,EAAY;AAAA,UAClC,YAAA,CAAa,EAAA;AAAA,UACb,QAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAC;AAAA,KACH;AAGA,IAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,MAChB,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,iBAAA,CAAkB,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAAA,MACtE,GAAG,iBAAA,CAAkB,GAAA;AAAA,QAAI,CAAA,UAAA,KACvB,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,UAAA,CAAW,OAAA,CAAQ,IAAI,UAAU;AAAA;AACzD,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,sBAAA,CAAuB,aAAA,EAAuB,OAAA,EAAmB,aAAA,EAAsC;AAE3G,IAAA,IAAI,CAAC,aAAA,IAAiB,OAAO,aAAA,KAAkB,QAAA,EAAU;AACvD,MAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,IAC7E;AACA,IAAA,IAAI,CAAC,aAAA,IAAiB,OAAO,aAAA,KAAkB,QAAA,EAAU;AACvD,MAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,IAC7E;AACA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AACnD,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AACA,IAAA,IAAI,kBAAkB,aAAA,EAAe;AACnC,MAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,IAC/E;AAGA,IAAA,MAAM,CAAC,iBAAA,EAAmB,iBAAiB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC/D,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,aAAa,CAAA;AAAA,MACpC,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,aAAa;AAAA,KACrC,CAAA;AAED,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6CAAA,EAAgD,aAAa,CAAA,CAAE,CAAA;AAAA,IACjF;AACA,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6CAAA,EAAgD,aAAa,CAAA,CAAE,CAAA;AAAA,IACjF;AAGA,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,GAAA;AAAA,MAChC,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,KAAW;AAC5B,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,QAClE;AACA,QAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAW;AAAA,MACtC,CAAC;AAAA,KACH;AAGA,IAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,OAAA,CAAQ,OAAA,IAAW,EAAC;AAC5D,IAAA,MAAM,cAAA,GAAiB,QAAQ,MAAA,CAAO,CAAA,MAAA,KAAU,CAAC,aAAA,CAAc,QAAA,CAAS,MAAM,CAAC,CAAA;AAC/E,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,MAAM,CAAA,kDAAA,EAAqD,aAAa,KAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACpH;AAGA,IAAA,MAAM,kBAAA,GAAqB;AAAA,MACzB,GAAG,iBAAA,CAAkB,OAAA;AAAA,MACrB,OAAA,EAAS,cAAc,MAAA,CAAO,CAAA,EAAA,KAAM,CAAC,OAAA,CAAQ,QAAA,CAAS,EAAE,CAAC;AAAA,KAC3D;AACA,IAAA,MAAM,kBAAA,GAAqB;AAAA,MACzB,GAAG,iBAAA,CAAkB,OAAA;AAAA,MACrB,OAAA,EAAS,CAAC,GAAI,iBAAA,CAAkB,QAAQ,OAAA,IAAW,EAAC,EAAI,GAAG,OAAO;AAAA,KACpE;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,eAAA,EAAgB;AAGzD,IAAA,MAAM,CAAC,iBAAA,EAAmB,iBAAiB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC/D,KAAK,QAAA,CAAS,UAAA;AAAA,QACZ,EAAE,GAAG,iBAAA,EAAmB,OAAA,EAAS,kBAAA,EAAmB;AAAA,QACpD,YAAA,CAAa,EAAA;AAAA,QACb,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAK,QAAA,CAAS,UAAA;AAAA,QACZ,EAAE,GAAG,iBAAA,EAAmB,OAAA,EAAS,kBAAA,EAAmB;AAAA,QACpD,YAAA,CAAa,EAAA;AAAA,QACb,QAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAGD,IAAA,MAAM,iBAAA,GAAoB,MAAM,OAAA,CAAQ,GAAA;AAAA,MACtC,WAAA,CAAY,GAAA,CAAI,OAAO,EAAE,QAAO,KAAM;AACpC,QAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,QAAA,IAAY,EAAC;AACjD,QAAA,MAAM,WAAA,GAAc;AAAA,UAClB,GAAG,MAAA,CAAO,OAAA;AAAA,UACV,QAAA,EAAU,aACP,MAAA,CAAO,CAAA,EAAA,KAAM,OAAO,aAAa,CAAA,CACjC,OAAO,aAAa;AAAA;AAAA,SACzB;AACA,QAAA,OAAO,MAAM,KAAK,QAAA,CAAS,UAAA;AAAA,UACzB,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,WAAA,EAAY;AAAA,UAClC,YAAA,CAAa,EAAA;AAAA,UACb,QAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAC;AAAA,KACH;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,QAChB,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,iBAAA,CAAkB,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAAA,QACtE,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,iBAAA,CAAkB,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAAA,QACtE,GAAG,iBAAA,CAAkB,GAAA;AAAA,UAAI,CAAA,UAAA,KACvB,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,UAAA,CAAW,OAAA,CAAQ,IAAI,UAAU;AAAA;AACzD,OACD,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,CAAA,2DAAA,EAA8D,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAA;AAAA,IAC1I;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,IAAA,GAA4B;AAChC,IAAA,MAAM,IAAI,MAAM,+EAA+E,CAAA;AAAA,EACjG;AAAA;AAAA,EAGA,MAAM,KAAA,GAA8B;AAClC,IAAA,MAAM,IAAI,MAAM,iFAAiF,CAAA;AAAA,EACnG;AAAA;AAAA,EAGA,MAAM,eAAe,QAAA,EAAiD;AACpE,IAAA,MAAM,IAAI,MAAM,qGAAqG,CAAA;AAAA,EACvH;AACF,CAAA;;;ACz8CA,IAAA,yBAAA,GAAA;AAAA,QAAA,CAAA,yBAAA,EAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACYO,SAAS,8BACd,IAAA,EACuC;AACvC,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,eAAe,CAAA;AACtF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAI,CAAA;AAE9B,EAAA,OAAO,CAAC,OAAA,EAAS,SAAA,CAAU,MAAM,CAAA;AACnC;AAKO,SAAS,kBAAkB,IAAA,EAAwC;AACxE,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,6BAAA,CAA8B,IAAI,CAAA;AACpD,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,gCAAgC,IAAA,EAAiC;AAC/E,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,8BAA8B,IAAI,CAAA;AAE5D,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAC1D,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,QAAQ;AAAC,GACX;AACF;AAKA,eAAsB,2BAAA,CACpB,QACA,YAAA,EACe;AAEf,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,6BAAA,CAA8B,OAAO,OAAO,CAAA;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,iBAAA,EAAmB,eAAe,CAAA;AAAA,EACtE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,YAAY,CAAA;AAC/D;;;AC/DO,SAAS,sBAAsB,OAAA,EAAoD;AACxF,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAG9C,EAAA,MAAM,SAAA,GAA6B;AAAA;AAAA,IAEjC,EAAA,EAAI,QAAQ,EAAA,IAAM,EAAA;AAAA,IAClB,KAAA,EAAO,QAAQ,KAAA,IAAS,EAAA;AAAA,IACxB,WAAA,EAAa,QAAQ,WAAA,IAAe,EAAA;AAAA,IACpC,YAAA,EAAe,OAAA,CAAQ,YAAA,IAAgB,EAAC;AAAA,IACxC,WAAA,EAAa,QAAQ,WAAA,IAAe,SAAA;AAAA;AAAA,IAGpC,GAAI,OAAA,CAAQ,aAAA,IAAiB,EAAE,aAAA,EAAe,QAAQ,aAAA,EAAc;AAAA,IACpE,GAAI,OAAA,CAAQ,iBAAA,IAAqB,EAAE,iBAAA,EAAmB,QAAQ,iBAAA,EAAkB;AAAA,IAChF,GAAI,OAAA,CAAQ,OAAA,IAAW,EAAE,OAAA,EAAS,QAAQ,OAAA,EAAQ;AAAA,IAClD,GAAI,OAAA,CAAQ,IAAA,IAAQ,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,IACzC,GAAI,OAAA,CAAQ,OAAA,IAAW,EAAE,OAAA,EAAS,QAAQ,OAAA,EAAQ;AAAA,IAClD,GAAI,OAAA,CAAQ,KAAA,IAAS,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAM;AAAA,IAC5C,GAAI,OAAA,CAAQ,KAAA,IAAS,EAAE,KAAA,EAAO,QAAQ,KAAA;AAAM,GAC9C;AAGA,EAAA,MAAM,UAAA,GAAa,gCAAgC,SAAS,CAAA;AAC5D,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,iBAAA,EAAmB,UAAA,CAAW,MAAM,CAAA;AAAA,EACxE;AAEA,EAAA,OAAO,SAAA;AACT;AAWO,SAAS,oBAAoB,IAAA,EAAsC;AAExE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,gCAAA,EAAkC,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC/F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,+BAAA,CAAgC,MAAA,CAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,yBAAA,EAA2B,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC/CO,IAAM,mBAAN,MAAoD;AAAA,EACjD,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EAER,YAAY,YAAA,EAA4C;AACtD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,MAAA,CAAO,OAAA,EAAmC,OAAA,EAA2C;AAEzF,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,SAAS,EAAA,EAAI;AAC/C,MAAA,MAAM,IAAI,MAAM,+EAA+E,CAAA;AAAA,IACjG;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,WAAA,IAAe,OAAA,CAAQ,WAAA,CAAY,SAAS,EAAA,EAAI;AAC3D,MAAA,MAAM,IAAI,MAAM,qFAAqF,CAAA;AAAA,IACvG;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,YAAA,CAAa,WAAW,CAAA,EAAG;AAC9D,MAAA,MAAM,IAAI,MAAM,yFAAyF,CAAA;AAAA,IAC3G;AAGA,IAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,MAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,YAAA,EAAc;AACzC,QAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACrD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAE,CAAA;AAAA,QAClE;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,MAAA,KAAA,MAAW,OAAA,IAAW,QAAQ,aAAA,EAAe;AAC3C,QAAA,MAAM,cAAc,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AACxD,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,CAAE,CAAA;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,SAAA,GAAY,QAAQ,WAAA,IAAe,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AACrE,MAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,QAAA,OAAA,CAAQ,EAAA,GAAK,mBAAA,CAAoB,OAAA,CAAQ,KAAA,EAAQ,SAAS,CAAA;AAAA,MAC5D;AAGA,MAAA,MAAM,gBAAA,GAAmB,sBAAsB,OAAO,CAAA;AAGtD,MAAA,MAAM,cAAA,GAA8D;AAAA,QAClE,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,KAAA;AAAA,UACT,IAAA,EAAM,WAAA;AAAA,UACN,eAAA,EAAiB,kCAAA;AAAA,UACjB,YAAY,CAAC;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,IAAA,EAAM,QAAA;AAAA,YACN,KAAA,EAAO,yBAAA;AAAA,YACP,SAAA,EAAW,aAAA;AAAA,YACX,SAAA,EAAW,KAAK,GAAA;AAAI,WACrB;AAAA,SACH;AAAA,QACA,OAAA,EAAS;AAAA,OACX;AAGA,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,OAAA,EAAS,UAAU,0BAA0B,CAAA;AAGjH,MAAA,MAAM,KAAK,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,gBAAA,CAAiB,IAAI,YAA2D,CAAA;AAGjH,MAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,QACpB,IAAA,EAAM,mBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,mBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,aAAa,gBAAA,CAAiB,EAAA;AAAA,UAC9B,cAAc,gBAAA,CAAiB,YAAA;AAAA,UAC/B,OAAO,gBAAA,CAAiB,KAAA;AAAA,UACxB,SAAS,gBAAA,CAAiB;AAAA;AAC5B,OACwB,CAAA;AAE1B,MAAA,OAAO,gBAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,yBAAyB,CAAA,EAAG;AAC/E,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,WAAA,EAAsD;AACvE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,WAAW,CAAA;AAC3D,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,MAAA,EAA4C;AACpE,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AAC9C,IAAA,MAAM,aAAgC,EAAC;AAEvC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,UAAU,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1D,QAAA,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,OAAA,EAA4D;AACjF,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AAC9C,IAAA,IAAI,aAAgC,EAAC;AAGrC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,EAAS,IAAA,IAAQ,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,EAAG;AAC5C,MAAA,UAAA,GAAa,UAAA,CAAW,OAAO,CAAA,SAAA,KAAa;AAC1C,QAAA,IAAI,CAAC,SAAA,CAAU,IAAA,EAAM,OAAO,KAAA;AAE5B,QAAA,OAAO,OAAA,CAAQ,KAAM,IAAA,CAAK,CAAA,GAAA,KAAO,UAAU,IAAA,CAAM,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,MAChE,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,UAAA,GAAa,WAAW,MAAA,CAAO,CAAA,SAAA,KAAa,SAAA,CAAU,OAAA,KAAY,QAAQ,OAAO,CAAA;AAAA,IACnF;AAGA,IAAA,MAAM,MAAA,GAAS,SAAS,MAAA,IAAU,aAAA;AAClC,IAAA,MAAM,SAAA,GAAY,SAAS,SAAA,IAAa,MAAA;AAExC,IAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACxB,MAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,MAAA,IAAI,WAAW,aAAA,EAAe;AAC5B,QAAA,YAAA,GAAe,CAAA,CAAE,cAAc,CAAA,CAAE,WAAA;AAAA,MACnC,CAAA,MAAA,IAAW,WAAW,OAAA,EAAS;AAC7B,QAAA,YAAA,GAAe,CAAA,CAAE,KAAA,CAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAA;AAAA,MAC9C;AAEA,MAAA,OAAO,SAAA,KAAc,KAAA,GAAQ,YAAA,GAAe,CAAC,YAAA;AAAA,IAC/C,CAAC,CAAA;AAGD,IAAA,IAAI,OAAA,EAAS,KAAA,IAAS,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAAG;AACvC,MAAA,UAAA,GAAa,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA;AAAA,IAChD;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,KAAA,EAA2C;AACnE,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,EAAiB;AAGlD,IAAA,MAAM,gBAAA,GAAmB,cAAc,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,WAAW,CAAA;AAGnF,IAAA,OAAO,gBAAA,CAAiB,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,qBAAA,CAAsB,QAAA,EAAkB,WAAA,EAAkD;AAC9F,IAAA,OAAO,IAAA,CAAK,oBAAoB,QAAQ,CAAA;AAAA,EAC1C;AACF,CAAA;;;ACjOA,IAAA,yBAAA,GAAA;AAAA,QAAA,CAAA,yBAAA,EAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACYO,SAAS,8BACd,IAAA,EACuC;AACvC,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,eAAe,CAAA;AACtF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAI,CAAA;AAE9B,EAAA,OAAO,CAAC,OAAA,EAAS,SAAA,CAAU,MAAM,CAAA;AACnC;AAKO,SAAS,kBAAkB,IAAA,EAAwC;AACxE,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,6BAAA,CAA8B,IAAI,CAAA;AACpD,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,gCAAgC,IAAA,EAAiC;AAC/E,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,8BAA8B,IAAI,CAAA;AAE5D,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAC1D,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,QAAQ;AAAC,GACX;AACF;AAKA,eAAsB,2BAAA,CACpB,QACA,YAAA,EACe;AAEf,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,6BAAA,CAA8B,OAAO,OAAO,CAAA;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,mBAAmB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,MAAwB;AAAA,MAClE,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,iBAAiB,CAAA,IAAK,MAAA;AAAA,MACpF,OAAA,EAAS,MAAM,OAAA,IAAW,0BAAA;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE,CAAA;AACF,IAAA,MAAM,IAAI,uBAAA,CAAwB,iBAAA,EAAmB,eAAe,CAAA;AAAA,EACtE;AAGA,EAAA,MAAM,kCAAA,CAAmC,QAAQ,YAAY,CAAA;AAC/D;;;ACnDO,SAAS,sBACd,OAAA,EAC4B;AAC5B,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAE9C,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,IAAI,OAAA,CAAQ,EAAA,IAAM,oBAAoB,OAAA,CAAQ,KAAA,IAAS,aAAa,SAAS,CAAA;AAAA,IAC7E,MAAA,EAAQ,QAAQ,MAAA,IAAU,EAAA;AAAA,IAC1B,MAAA,EAAQ,QAAQ,MAAA,IAAU,EAAA;AAAA,IAC1B,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,UAAU,OAAA,CAAQ;AAAA,GACpB;AAGA,EAAA,MAAM,UAAA,GAAa,gCAAgC,SAAS,CAAA;AAC5D,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,iBAAA,EAAmB,UAAA,CAAW,MAAM,CAAA;AAAA,EACxE;AAEA,EAAA,OAAO,SAAA;AACT;AAWO,SAAS,oBAAoB,IAAA,EAAsC;AAExE,EAAA,MAAM,kBAAA,GAAqB,iCAAiC,IAAI,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA,MAAM,IAAI,uBAAA,CAAwB,gCAAA,EAAkC,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC/F;AAGA,EAAA,MAAM,MAAA,GAAS,IAAA;AACf,EAAA,MAAM,iBAAA,GAAoB,+BAAA,CAAgC,MAAA,CAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,kBAAkB,OAAA,EAAS;AAC9B,IAAA,MAAM,IAAI,uBAAA,CAAwB,yBAAA,EAA2B,iBAAA,CAAkB,MAAM,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC3DO,IAAM,mBAAN,MAAoD;AAAA,EACjD,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EAER,YAAY,YAAA,EAA4C;AACtD,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa,QAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,MAAA,CAAO,OAAA,EAAmC,OAAA,EAA2C;AAEzF,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,KAAA,IAAS,OAAA,CAAQ,MAAA,EAAQ;AACvC,MAAA,MAAM,aAAa,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,GAAA,CAAI,QAAQ,MAAM,CAAA;AAC7D,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,MAC1E;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,gBAAA,GAAmB,sBAAsB,OAAO,CAAA;AAGtD,MAAA,MAAM,cAAA,GAAwC;AAAA,QAC5C,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,KAAA;AAAA,UACT,IAAA,EAAM,WAAA;AAAA,UACN,eAAA,EAAiB,kCAAA;AAAA,UACjB,YAAY,CAAC;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,IAAA,EAAM,QAAA;AAAA,YACN,KAAA,EAAO,oBAAA;AAAA,YACP,SAAA,EAAW,aAAA;AAAA,YACX,SAAA,EAAW,KAAK,GAAA;AAAI,WACrB;AAAA,SACH;AAAA,QACA,OAAA,EAAS;AAAA,OACX;AAGA,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,OAAA,EAAS,UAAU,0BAA0B,CAAA;AAGjH,MAAA,MAAM,KAAK,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,gBAAA,CAAiB,IAAI,YAAY,CAAA;AAGlE,MAAA,IAAA,CAAK,SAAS,OAAA,CAAQ;AAAA,QACpB,IAAA,EAAM,mBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,MAAA,EAAQ,mBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,aAAa,gBAAA,CAAiB,EAAA;AAAA,UAC9B,QAAQ,gBAAA,CAAiB,MAAA;AAAA,UACzB,OAAA;AAAA,UACA,gBAAA,EAAkB,MAAM,IAAA,CAAK,uBAAA,CAAwB,iBAAiB,MAAM;AAAA;AAC9E,OACwB,CAAA;AAE1B,MAAA,OAAO,gBAAA;AAAA,IACT,SAAS,KAAA,EAAO;AAGd,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,aAAa,WAAA,EAAsD;AACvE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,WAAW,CAAA;AAC3D,IAAA,OAAO,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAAoB,MAAA,EAA4C;AACpE,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AAC9C,IAAA,MAAM,aAAgC,EAAC;AAEvC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAQ;AAC9C,QAAA,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,gBAAA,GAA+C;AACnD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AAC9C,IAAA,MAAM,aAAgC,EAAC;AAEvC,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,wBAAwB,MAAA,EAAkC;AACtE,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,mBAAA,CAAoB,MAAM,CAAA;AACxD,IAAA,OAAO,WAAW,MAAA,KAAW,CAAA;AAAA,EAC/B;AACF,CAAA;;;AC1JA,IAAA,uBAAA,GAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACuCO,SAAS,cACd,MAAA,EAC2B;AAC3B,EAAA,MAAM,UAAA,GAAa,OAAO,MAAA,CAAO,UAAA;AAGjC,EAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC1C,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiB,WAAW,CAAC,CAAA;AACnC,EAAA,OAAO;AAAA,IACL,SAAS,cAAA,CAAe,KAAA;AAAA,IACxB,WAAW,cAAA,CAAe;AAAA,GAC5B;AACF;AAoBO,SAAS,oBACd,MAAA,EAC2B;AAC3B,EAAA,MAAM,UAAA,GAAa,OAAO,MAAA,CAAO,UAAA;AAGjC,EAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC1C,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA;AACtD,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,SAAS,aAAA,CAAc,KAAA;AAAA,IACvB,WAAW,aAAA,CAAc;AAAA,GAC3B;AACF;;;AC7FA,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACmCO,IAAM,iBAAN,MAAgD;AAAA,EAC7C,cAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EAER,YAAY,YAAA,EAA0C;AACpD,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AACnC,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,IAAA,IAAA,CAAK,aAAa,YAAA,CAAa,UAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,GAAgD;AACpD,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,IAAA,MAAM,mBAAA,GAAsB;AAAA,MAC1B,QAAA,EAAU,CAAA;AAAA,MACV,eAAA,EAAiB,CAAA;AAAA,MACjB,SAAA,EAAW;AAAA,KACb;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAElC,MAAA,MAAM,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QAChD,KAAK,YAAA,EAAa;AAAA,QAClB,KAAK,aAAA,EAAc;AAAA,QACnB,KAAK,aAAA;AAAc,OACpB,CAAA;AAED,MAAA,mBAAA,CAAoB,QAAA,GAAW,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAGnD,MAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAElC,MAAA,MAAM,CAAC,YAAA,EAAc,mBAAA,EAAqB,oBAAoB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QAClF,IAAA,CAAK,eAAe,eAAA,EAAgB;AAAA,QACpC,IAAA,CAAK,eAAe,sBAAA,EAAuB;AAAA,QAC3C,IAAA,CAAK,eAAe,uBAAA;AAAwB,OAC7C,CAAA;AAED,MAAA,mBAAA,CAAoB,eAAA,GAAkB,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAG1D,MAAA,MAAM,UAAA,GAAyB;AAAA,QAC7B,KAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA,EAAU,MAAM,IAAA,CAAK,eAAA,EAAgB;AAAA,QACrC,UAAA,EAAY,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAAA,QACzC,UAAA,EAAY,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAAA,QACzC;AAAA,OACF;AAEA,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,wBAAA,CAAyB,UAAU,CAAA;AAGtE,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,sBAAA,CAAuB,UAAU,CAAA;AAGlE,MAAA,MAAM,gBAAA,GAAqC;AAAA,QACzC,YAAA,EAAc,IAAI,GAAA,CAAI,aAAA,CAAc,YAAY,CAAA;AAAA,QAChD,WAAA,EAAa,IAAI,GAAA,CAAI,aAAA,CAAc,WAAW,CAAA;AAAA,QAC9C,uBAAA,EAAyB,IAAI,GAAA,CAAI,aAAA,CAAc,uBAAuB,CAAA;AAAA,QACtE,wBAAA,EAA0B,IAAI,GAAA,CAAI,aAAA,CAAc,wBAAwB;AAAA,OAC1E;AAGA,MAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,GAAA;AAAA,QAClC,KAAA,CAAM,IAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,iBAAiB,IAAA,EAAM,UAAA,EAAY,gBAAgB,CAAC;AAAA,OAC7E;AAGA,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAGrD,MAAA,MAAM,SAAA,GAAuB;AAAA,QAC3B,QAAA,EAAU;AAAA,UACR,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UACpC,cAAA,EAAgB,MAAM,IAAA,CAAK,gBAAA,EAAiB;AAAA,UAC5C,iBAAiB,eAAA,CAAgB,MAAA;AAAA;AAAA,UACjC,YAAA,EAAc;AAAA,YACZ,OAAO,KAAA,CAAM,MAAA;AAAA,YACb,QAAQ,MAAA,CAAO,MAAA;AAAA,YACf,QAAQ,MAAA,CAAO,MAAA;AAAA,YACf,QAAA,EAAU,WAAW,QAAA,CAAS,MAAA;AAAA,YAC9B,UAAA,EAAY,WAAW,UAAA,CAAW,MAAA;AAAA,YAClC,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA,WACpC;AAAA,UACA,cAAA,EAAgB;AAAA;AAAA,SAClB;AAAA,QACA,SAAS,EAAE,GAAG,cAAc,GAAG,mBAAA,EAAqB,GAAG,oBAAA,EAAqB;AAAA,QAC5E,aAAA;AAAA;AAAA,QACA,eAAA;AAAA;AAAA,QACA,KAAA;AAAA;AAAA,QACA,aAAA;AAAA;AAAA,QACA,MAAA;AAAA;AAAA,QACA,MAAA;AAAA;AAAA,QACA,UAAU,UAAA,CAAW;AAAA;AAAA,OACvB;AAGA,MAAA,MAAM,UAAA,GAAa,YAAY,GAAA,EAAI;AACnC,MAAA,MAAM,IAAA,CAAK,eAAe,SAAS,CAAA;AACnC,MAAA,mBAAA,CAAoB,SAAA,GAAY,WAAA,CAAY,GAAA,EAAI,GAAI,UAAA;AAEpD,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AACtC,MAAA,SAAA,CAAU,SAAS,cAAA,GAAiB,SAAA;AAEpC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,gBAAA,EAAkB,KAAA,CAAM,MAAA,GAAS,MAAA,CAAO,SAAS,MAAA,CAAO,MAAA;AAAA,QACxD,iBAAA,EAAmB,CAAA;AAAA;AAAA,QACnB,oBAAA,EAAsB,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAI,MAAA,EAAQ,CAAC,CAAA;AAAA;AAAA,QAC3F,cAAA,EAAgB,SAAA;AAAA,QAChB,QAAQ,EAAC;AAAA,QACT,WAAA,EAAa;AAAA,OACf;AAAA,IAEF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,gBAAA,EAAkB,CAAA;AAAA,QAClB,iBAAA,EAAmB,CAAA;AAAA,QACnB,oBAAA,EAAsB,CAAA;AAAA,QACtB,cAAA,EAAgB,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAAA,QACpC,MAAA,EAAQ,CAAC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC/D,WAAA,EAAa;AAAA,OACf;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAA,GAA0C;AAC9C,IAAA,IAAI;AAEF,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,UAAA,CAAW,IAAI,OAAO,CAAA;AACnD,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,eAAA,EAAgB;AAC9C,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,SAAA;AAAA,IACT,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,KAAK,CAAA,8EAAA,CAAgF,CAAA;AAC7F,MAAA,OAAA,CAAQ,IAAA,CAAK,YAAY,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AACjF,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,iBAAA,GAA8C;AAClD,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,IAAA,MAAM,SAA2B,EAAC;AAClC,IAAA,MAAM,WAA+B,EAAC;AACtC,IAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,IAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,IAAA,IAAI,iBAAA,GAAoB,CAAA;AAExB,IAAA,IAAI;AAEF,MAAA,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QACxC,KAAK,YAAA,EAAa;AAAA,QAClB,KAAK,aAAA;AAAc,OACpB,CAAA;AAED,MAAA,cAAA,GAAiB,KAAA,CAAM,SAAS,MAAA,CAAO,MAAA;AAGvC,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAC,IAAA,CAAK,QAAQ,WAAA,EAAa;AACjD,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,kBAAA;AAAA,YACN,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,EAAA,IAAM,SAAA;AAAA,YAC7B,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAC,KAAA,CAAM,QAAQ,KAAA,EAAO;AAC7C,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,kBAAA;AAAA,YACN,QAAA,EAAU,KAAA,CAAM,OAAA,CAAQ,EAAA,IAAM,SAAA;AAAA,YAC9B,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,kBAAA,GAAqB,wBAAA,CAAyB,IAAA,CAAK,OAAO,CAAA;AAChE,QAAA,IAAI,kBAAA,KAAuB,IAAA,CAAK,MAAA,CAAO,eAAA,EAAiB;AACtD,UAAA,gBAAA,EAAA;AACA,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,kBAAA;AAAA,YACN,QAAA,EAAU,KAAK,OAAA,CAAQ,EAAA;AAAA,YACvB,SAAS,CAAA,4BAAA,EAA+B,IAAA,CAAK,MAAA,CAAO,eAAe,SAAS,kBAAkB,CAAA;AAAA,WAC/F,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAM,kBAAA,GAAqB,wBAAA,CAAyB,KAAA,CAAM,OAAO,CAAA;AACjE,QAAA,IAAI,kBAAA,KAAuB,KAAA,CAAM,MAAA,CAAO,eAAA,EAAiB;AACvD,UAAA,gBAAA,EAAA;AACA,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,kBAAA;AAAA,YACN,QAAA,EAAU,MAAM,OAAA,CAAQ,EAAA;AAAA,YACxB,SAAS,CAAA,4BAAA,EAA+B,KAAA,CAAM,MAAA,CAAO,eAAe,SAAS,kBAAkB,CAAA;AAAA,WAChG,CAAA;AAAA,QACH;AAAA,MACF;AAIA,MAAA,MAAM,iBAAA,GAAoB,OAAO,KAAA,KAA0C;AACzE,QAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,KAAK,CAAA;AAChD,QAAA,OAAO,KAAA,EAAO,QAAQ,SAAA,IAAa,IAAA;AAAA,MACrC,CAAA;AAGA,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,IAAA,EAAM,iBAAiB,CAAA;AAC9D,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,iBAAA,EAAA;AACA,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,mBAAA;AAAA,YACN,QAAA,EAAU,KAAK,OAAA,CAAQ,EAAA;AAAA,YACvB,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,KAAA,EAAO,iBAAiB,CAAA;AAC/D,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,iBAAA,EAAA;AACA,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,mBAAA;AAAA,YACN,QAAA,EAAU,MAAM,OAAA,CAAQ,EAAA;AAAA,YACxB,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,OAAO,MAAA,GAAS,CAAA,GAAI,WAAW,QAAA,CAAS,MAAA,GAAS,IAAI,UAAA,GAAa,OAAA;AAEjF,MAAA,OAAO;AAAA,QACL,MAAA;AAAA,QACA,cAAA;AAAA,QACA,WAAA,EAAa,MAAA;AAAA,QACb,aAAA,EAAe,QAAA;AAAA,QACf,cAAA,EAAgB,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAAA,QACpC,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,IAEF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,QAAA;AAAA,QACR,cAAA;AAAA,QACA,aAAa,CAAC;AAAA,UACZ,IAAA,EAAM,kBAAA;AAAA,UACN,QAAA,EAAU,QAAA;AAAA,UACV,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC/D,CAAA;AAAA,QACD,aAAA,EAAe,QAAA;AAAA,QACf,cAAA,EAAgB,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAAA,QACpC,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,GAAoC;AACxC,IAAA,IAAI;AAEF,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,UAAA,CAAW,OAAO,OAAO,CAAA;AACxD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,OAAO,KAAA;AAAA,MACT;AAGA,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,UAAA,CAAW,IAAI,OAAO,CAAA;AACnD,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM,YAAY,IAAI,IAAA,CAAK,UAAU,QAAA,CAAS,WAAW,EAAE,OAAA,EAAQ;AAGnE,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAK;AAC7C,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAG/C,MAAA,KAAA,MAAW,MAAM,CAAC,GAAG,OAAA,EAAS,GAAG,QAAQ,CAAA,EAAG;AAC1C,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,kBAAA,CAAmB,EAAE,CAAA;AAC5C,QAAA,IAAI,SAAA,GAAY,MAAO,SAAA,EAAW;AAChC,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,MACF;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,mCAAmC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AACxG,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,GAAiC;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,UAAA,CAAW,OAAO,OAAO,CAAA;AACxD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,OAAO,CAAA;AAAA,MACtC;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACzG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,YAAA,GAA4C;AACxD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAK;AAC7C,IAAA,MAAM,QAA4B,EAAC;AAEnC,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,EAAE,CAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,GAA8C;AAC1D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC/C,IAAA,MAAM,SAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,MACpB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,GAA8C;AAC1D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,EAAK;AAC/C,IAAA,MAAM,SAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,MACpB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAA,GAAmD;AAC/D,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,IAAA,EAAK;AACrD,IAAA,MAAM,WAAmC,EAAC;AAE1C,IAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAI,EAAE,CAAA;AACjD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAA,GAAsD;AAClE,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AACvD,IAAA,MAAM,aAAsC,EAAC;AAE7C,IAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAA,GAAsD;AAClE,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,EAAK;AACvD,IAAA,MAAM,aAAsC,EAAC;AAE7C,IAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,eAAe,SAAA,EAAqC;AAEhE,IAAA,MAAM,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,OAAA,EAAS,SAAS,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAA,GAAoC;AAChD,IAAA,IAAI;AAEF,MAAA,OAAO,kBAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,SAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,uBAAuB,UAAA,EAAgD;AAC3E,IAAA,MAAM,aAAA,GAA+B;AAAA,MACnC,cAAc,EAAC;AAAA,MACf,aAAa,EAAC;AAAA,MACd,yBAAyB,EAAC;AAAA,MAC1B,0BAA0B;AAAC,KAC7B;AAEA,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,aAAA,GAAgB,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAEzC,IAAA,IAAI;AACF,MAAA,KAAA,MAAW,IAAA,IAAQ,WAAW,KAAA,EAAO;AACnC,QAAA,MAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,EAAA;AAC5B,QAAA,MAAM,cAAc,IAAA,CAAK,OAAA;AAIzB,QAAA,IAAI,WAAA,CAAY,MAAA,KAAW,QAAA,IAAY,WAAA,CAAY,WAAW,QAAA,EAAU;AACtE,UAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,kBAAA,CAAmB,MAAM,CAAA,GAAI,GAAA;AACxD,UAAA,MAAM,iBAAA,GAAA,CAAqB,GAAA,GAAM,aAAA,KAAkB,EAAA,GAAK,KAAK,EAAA,GAAK,GAAA,CAAA;AAGlE,UAAA,MAAM,kBAAA,GAAqB,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,CAAA,IAAA,KAAQ;AAC5D,YAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAQ;AAClC,cAAA,MAAM,gBAAgB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA,GAAI,GAAA;AACjE,cAAA,OAAQ,MAAM,aAAA,GAAiB,aAAA;AAAA,YACjC;AACA,YAAA,OAAO,KAAA;AAAA,UACT,CAAC,CAAA;AAED,UAAA,MAAM,SAAA,GACH,WAAA,CAAY,MAAA,KAAW,QAAA,IAAY,iBAAA,GAAoB,CAAA,IAAK,CAAC,kBAAA,IAC7D,WAAA,CAAY,MAAA,KAAW,QAAA,IAAY,iBAAA,GAAoB,CAAA;AAE1D,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,aAAA,CAAc,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,UACxC;AAAA,QACF;AAIA,QAAA,MAAM,gBAAA,GAAmB,WAAA,CAAY,QAAA,KAAa,UAAA,IAAc,YAAY,MAAA,KAAW,QAAA;AACvF,QAAA,MAAM,qBAAA,GAAwB,UAAA,CAAW,QAAA,CAAS,MAAA,CAAO,CAAA,QAAA,KAAY;AACnE,UAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,KAAS,UAAA,IAC/B,QAAA,CAAS,QAAQ,MAAA,KAAW,MAAA,IAC5B,QAAA,CAAS,OAAA,CAAQ,QAAA,KAAa,MAAA;AAAA,QAClC,CAAC,CAAA,CAAE,MAAA;AAEH,QAAA,IAAI,gBAAA,IAAoB,yBAAyB,CAAA,EAAG;AAClD,UAAA,aAAA,CAAc,WAAA,CAAY,KAAK,MAAM,CAAA;AAAA,QACvC;AAIA,QAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,CAAA,QAAA,KAAY;AAC3D,UAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,KAAS,UAAA,IAC/B,QAAA,CAAS,QAAQ,MAAA,KAAW,MAAA,IAC5B,QAAA,CAAS,OAAA,CAAQ,QAAA,KAAa,MAAA;AAAA,QAClC,CAAC,CAAA;AAED,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,aAAA,CAAc,uBAAA,CAAwB,KAAK,MAAM,CAAA;AAAA,QACnD;AAIA,QAAA,IAAI,WAAA,CAAY,UAAA,IAAc,WAAA,CAAY,UAAA,CAAW,SAAS,CAAA,EAAG;AAC/D,UAAA,MAAM,qBAAA,GAAwB,WAAA,CAAY,UAAA,CAAW,IAAA,CAAK,CAAA,GAAA,KAAO;AAC/D,YAAA,IAAI,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,cAAA,MAAM,YAAA,GAAe,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAC5C,cAAA,MAAM,cAAA,GAAiB,WAAW,KAAA,CAAM,IAAA,CAAK,OAAK,CAAA,CAAE,OAAA,CAAQ,OAAO,YAAY,CAAA;AAC/E,cAAA,OAAO,kBACL,cAAA,CAAe,OAAA,CAAQ,WAAW,MAAA,IAClC,cAAA,CAAe,QAAQ,MAAA,KAAW,UAAA;AAAA,YACtC;AACA,YAAA,OAAO,KAAA;AAAA,UACT,CAAC,CAAA;AAED,UAAA,IAAI,qBAAA,EAAuB;AACzB,YAAA,aAAA,CAAc,wBAAA,CAAyB,KAAK,MAAM,CAAA;AAAA,UACpD;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,aAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,iCAAiC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAEtG,MAAA,OAAO,aAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAyB,UAAA,EAAkD;AAC/E,IAAA,MAAM,SAA0B,EAAC;AAEjC,IAAA,IAAI;AAEF,MAAA,UAAA,CAAW,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AAC/B,QAAA,MAAM,gBAAgB,IAAA,CAAK,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAClD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,cAAA;AAAA,YACN,QAAA,EAAU,KAAK,OAAA,CAAQ,EAAA;AAAA,YACvB,WAAA,EAAa,KAAK,OAAA,CAAQ,KAAA;AAAA,YAC1B,SAAS,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,CAAC,GAAG,KAAA,IAAS,SAAA;AAAA;AAAA,YAC7C,QAAA,EAAU,EAAE,QAAA,EAAU,IAAA,CAAK,QAAQ,QAAA,EAAU,MAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA;AAAO,WAC1E,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS;AACjC,QAAA,MAAM,gBAAgB,KAAA,CAAM,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACnD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,eAAA;AAAA,YACN,QAAA,EAAU,MAAM,OAAA,CAAQ,EAAA;AAAA,YACxB,WAAA,EAAa,MAAM,OAAA,CAAQ,KAAA;AAAA,YAC3B,SAAS,KAAA,CAAM,MAAA,CAAO,UAAA,CAAW,CAAC,GAAG,KAAA,IAAS,SAAA;AAAA;AAAA,YAC9C,QAAA,EAAU,EAAE,MAAA,EAAQ,KAAA,CAAM,QAAQ,MAAA;AAAO,WAC1C,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,QAAA,KAAY;AACtC,QAAA,MAAM,gBAAgB,QAAA,CAAS,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACtD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAM,QAAA,GAAoE;AAAA,YACxE,IAAA,EAAM,SAAS,OAAA,CAAQ,IAAA;AAAA,YACvB,UAAA,EAAY,SAAS,OAAA,CAAQ;AAAA,WAC/B;AACA,UAAA,IAAI,QAAA,CAAS,QAAQ,QAAA,EAAU;AAC7B,YAAA,QAAA,CAAS,QAAA,GAAW,SAAS,OAAA,CAAQ,QAAA;AAAA,UACvC;AAEA,UAAA,MAAM,KAAA,GAAuB;AAAA,YAC3B,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,kBAAA;AAAA,YACN,QAAA,EAAU,SAAS,OAAA,CAAQ,EAAA;AAAA,YAC3B,WAAA,EAAa,CAAA,EAAG,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,CAAA;AAAA,YAC/E,OAAA,EAAS,SAAS,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA,EAAG,KAAA,IAAS,QAAA,CAAS,OAAA,CAAQ,QAAA,IAAY,SAAA;AAAA,YAC9E;AAAA,WACF;AAEA,UAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,QACnB;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,UAAA,CAAW,QAAQ,CAAA,SAAA,KAAa;AACzC,QAAA,MAAM,gBAAgB,SAAA,CAAU,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACvD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAM,KAAA,GAAuB;AAAA,YAC3B,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,mBAAA;AAAA,YACN,QAAA,EAAU,UAAU,OAAA,CAAQ,EAAA;AAAA,YAC5B,WAAA,EAAa,SAAA,CAAU,OAAA,CAAQ,KAAA,IAAS,eAAA;AAAA,YACxC,SAAS,SAAA,CAAU,MAAA,CAAO,UAAA,CAAW,CAAC,GAAG,KAAA,IAAS;AAAA,WACpD;AACA,UAAA,IAAI,SAAA,CAAU,QAAQ,OAAA,EAAS;AAC7B,YAAA,KAAA,CAAM,QAAA,GAAW,EAAE,OAAA,EAAS,SAAA,CAAU,QAAQ,OAAA,EAAQ;AAAA,UACxD;AACA,UAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,QACnB;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,UAAA,CAAW,QAAQ,CAAA,SAAA,KAAa;AACzC,QAAA,MAAM,gBAAgB,SAAA,CAAU,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACvD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,mBAAA;AAAA,YACN,QAAA,EAAU,UAAU,OAAA,CAAQ,EAAA;AAAA,YAC5B,WAAA,EAAa,SAAA,CAAU,OAAA,CAAQ,KAAA,IAAS,CAAA,WAAA,EAAc,UAAU,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,CAAC,CAAA,CAAA;AAAA,YACxF,SAAS,SAAA,CAAU,MAAA,CAAO,UAAA,CAAW,CAAC,GAAG,KAAA,IAAS,SAAA;AAAA;AAAA,YAClD,QAAA,EAAU;AAAA,cACR,aAAA,EAAe,SAAA,CAAU,OAAA,CAAQ,IAAA,IAAQ,aAAA;AAAA,cACzC,MAAA,EAAQ,UAAU,OAAA,CAAQ;AAAA;AAC5B,WACD,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS;AACjC,QAAA,MAAM,gBAAgB,KAAA,CAAM,OAAA,CAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACnD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,SAAA,EAAW,SAAS,aAAa,CAAA;AAAA,YACjC,IAAA,EAAM,eAAA;AAAA,YACN,QAAA,EAAU,MAAM,OAAA,CAAQ,EAAA;AAAA,YACxB,WAAA,EAAa,GAAG,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,SAAA,EAAY,KAAA,CAAM,QAAQ,IAAI,CAAA,CAAA,CAAA;AAAA,YACvE,QAAA,EAAU,EAAE,IAAA,EAAM,KAAA,CAAM,QAAQ,IAAA;AAAK,WACtC,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,OAAO,MAAA,CACJ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAS,CAAA,CACxC,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,IAEhB,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,IAAA,CAAK,uCAAuC,KAAK,CAAA;AACzD,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAA,CACJ,IAAA,EACA,cAAA,EACoH;AACpH,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,IAAA,CAAK,OAAA;AACzB,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,kBAAA,CAAmB,WAAA,CAAY,EAAE,CAAA,GAAI,GAAA;AAC/D,MAAA,IAAI,WAAA,GAAc,YAAA;AAClB,MAAA,IAAI,gBAAA,GAA2D,cAAA;AAC/D,MAAA,IAAI,cAAA,GAAiB,cAAA;AAIrB,MAAA,MAAM,YAAA,GAAe,oBAAoB,IAAI,CAAA;AAC7C,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,aAAA,GAAgB,aAAa,SAAA,GAAY,GAAA;AAC/C,QAAA,MAAM,iBAAiB,aAAA,GAAgB,YAAA;AAGvC,QAAA,IAAI,cAAA,GAAiB,GAAA,IAAS,aAAA,GAAgB,WAAA,EAAa;AACzD,UAAA,WAAA,GAAc,aAAA;AACd,UAAA,gBAAA,GAAmB,eAAA;AACnB,UAAA,cAAA,GAAiB,CAAA,cAAA,EAAiB,IAAA,CAAK,aAAA,CAAc,aAAa,CAAC,CAAA,CAAA;AAAA,QACrE;AAAA,MACF;AAGA,MAAA,MAAM,eAAA,GAAkB,eAAe,QAAA,CAAS,MAAA;AAAA,QAAO,CAAA,CAAA,KACrD,CAAA,CAAE,OAAA,CAAQ,QAAA,KAAa,YAAY,EAAA,IAAO,CAAA,CAAE,OAAA,CAAQ,OAAA,IAAW,CAAA,CAAE,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,YAAY,EAAE;AAAA,OAC1G;AAEA,MAAA,KAAA,MAAW,YAAY,eAAA,EAAiB;AACtC,QAAA,MAAM,eAAe,IAAA,CAAK,kBAAA,CAAmB,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA,GAAI,GAAA;AACpE,QAAA,IAAI,eAAe,WAAA,EAAa;AAC9B,UAAA,WAAA,GAAc,YAAA;AACd,UAAA,gBAAA,GAAmB,mBAAA;AACnB,UAAA,cAAA,GAAiB,CAAA,EAAG,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,WAAA,EAAc,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,CAAA;AAAA,QAC9F;AAAA,MACF;AAGA,MAAA,MAAM,iBAAA,GAAoB,eAAe,UAAA,CAAW,MAAA,CAAO,OAAK,CAAA,CAAE,OAAA,CAAQ,MAAA,KAAW,WAAA,CAAY,EAAE,CAAA;AAEnG,MAAA,KAAA,MAAW,aAAa,iBAAA,EAAmB;AACzC,QAAA,MAAM,gBAAgB,IAAA,CAAK,kBAAA,CAAmB,SAAA,CAAU,OAAA,CAAQ,EAAE,CAAA,GAAI,GAAA;AACtE,QAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,UAAA,WAAA,GAAc,aAAA;AACd,UAAA,gBAAA,GAAmB,iBAAA;AACnB,UAAA,cAAA,GAAiB,CAAA,WAAA,EAAc,SAAA,CAAU,OAAA,CAAQ,KAAA,IAAS,aAAa,CAAA,CAAA;AAAA,QACzE;AAAA,MACF;AAGA,MAAA,MAAM,iBAAA,GAAoB,eAAe,UAAA,CAAW,MAAA;AAAA,QAAO,OACxD,CAAA,CAAE,OAAA,CAAQ,YAAA,IAAgB,CAAA,CAAE,QAAQ,YAAA,CAAa,QAAA,CAAS,WAAA,CAAY,EAAE,KACzE,CAAA,CAAE,OAAA,CAAQ,WAAA,EAAa,QAAA,CAAS,YAAY,EAAE;AAAA,OAChD;AAEA,MAAA,KAAA,MAAW,aAAa,iBAAA,EAAmB;AACzC,QAAA,MAAM,gBAAgB,IAAA,CAAK,kBAAA,CAAmB,SAAA,CAAU,OAAA,CAAQ,EAAE,CAAA,GAAI,GAAA;AACtE,QAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,UAAA,WAAA,GAAc,aAAA;AACd,UAAA,gBAAA,GAAmB,mBAAA;AACnB,UAAA,cAAA,GAAiB,CAAA,WAAA,EAAc,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,QACxD;AAAA,MACF;AAEA,MAAA,OAAO,EAAE,WAAA,EAAa,gBAAA,EAAkB,cAAA,EAAe;AAAA,IAEzD,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,eAAe,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA,GAAI,GAAA;AAChE,MAAA,OAAO;AAAA,QACL,WAAA,EAAa,YAAA;AAAA,QACb,gBAAA,EAAkB,cAAA;AAAA,QAClB,cAAA,EAAgB;AAAA,OAClB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BA,MAAM,gBAAA,CACJ,IAAA,EACA,cAAA,EACA,gBAAA,EAC6B;AAE7B,IAAA,MAAM,EAAE,aAAa,gBAAA,EAAkB,cAAA,KAAmB,MAAM,IAAA,CAAK,oBAAA,CAAqB,IAAA,EAAM,cAAc,CAAA;AAG9G,IAAA,MAAM,MAAA,GAAS,cAAc,IAAI,CAAA;AACjC,IAAA,MAAM,YAAA,GAAe,oBAAoB,IAAI,CAAA;AAG7C,IAAA,MAAM,cAAc,cAAA,CAAe,QAAA,CAChC,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,OAAA,CAAQ,QAAA,KAAa,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,YAAY,CAAA,CACrF,IAAI,CAAA,CAAA,MAAM;AAAA,MACT,OAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,QAAA,IAAY,SAAA;AAAA,MAC/B,YAAY,IAAA,CAAK,kBAAA,CAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA,GAAI;AAAA;AAAA,KACtD,CAAE,CAAA;AAKJ,IAAA,MAAM,iBAAA,GAAoB,CAAC,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAA;AAC1D,IAAA,MAAM,aAAa,IAAA,CAAK,OAAA,CAAQ,cAAc,EAAC,EAC5C,OAAO,CAAA,GAAA,KAAO;AAEb,MAAA,MAAM,iBAAiB,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,IAAK,GAAA,CAAI,WAAW,KAAK,CAAA,IACpE,IAAI,UAAA,CAAW,QAAQ,KAAK,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,IAClD,GAAA,CAAI,WAAW,MAAM,CAAA;AAEvB,MAAA,IAAI,CAAC,gBAAgB,OAAO,KAAA;AAG5B,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,QAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACzC,QAAA,MAAM,OAAA,GAAU,eAAe,KAAA,CAAM,IAAA,CAAK,OAAK,CAAA,CAAE,OAAA,CAAQ,OAAO,SAAS,CAAA;AACzE,QAAA,OAAO,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,OAAA,CAAQ,MAAA,IAAU,CAAC,iBAAA,CAAkB,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA;AAAA,MAClG;AAGA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAEH,IAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,CAC9B,MAAA,CAAO,OAAK,CAAC,iBAAA,CAAkB,QAAA,CAAS,CAAA,CAAE,QAAQ,MAAM,CAAC,CAAA,CACzD,MAAA,CAAO,QAAM,CAAA,CAAE,OAAA,CAAQ,UAAA,IAAc,EAAC,EAAG,QAAA,CAAS,CAAA,KAAA,EAAQ,IAAA,CAAK,QAAQ,EAAE,CAAA,CAAE,CAAC,CAAA,CAC5E,IAAI,CAAA,CAAA,KAAK,CAAA,KAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAGlC,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA,CAAQ,YAAY,EAAC,EACvC,IAAI,CAAA,OAAA,KAAW;AACd,MAAA,MAAM,KAAA,GAAQ,eAAe,MAAA,CAAO,IAAA,CAAK,OAAK,CAAA,CAAE,OAAA,CAAQ,OAAO,OAAO,CAAA;AACtE,MAAA,OAAO,KAAA,GAAQ,EAAE,EAAA,EAAI,OAAA,EAAS,OAAO,KAAA,CAAM,OAAA,CAAQ,OAAM,GAAI,IAAA;AAAA,IAC/D,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,CAAA,KAA0C,MAAM,IAAI,CAAA;AAG/D,IAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,UAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,CAAQ,MAAA,KAAW,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA,CAAE,MAAA;AACnG,IAAA,MAAM,qBAAA,GAAwB,eAAe,QAAA,CAAS,MAAA;AAAA,MACpD,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,CAAQ,QAAA,KAAa,IAAA,CAAK,OAAA,CAAQ,EAAA,IAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,QAAQ,MAAA,KAAW;AAAA,KACvG,CAAE,MAAA;AACF,IAAA,MAAM,iBAAA,GAAoB,eAAe,QAAA,CAAS,MAAA;AAAA,MAChD,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,CAAQ,QAAA,KAAa,IAAA,CAAK,OAAA,CAAQ,EAAA,IAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,QAAQ,MAAA,KAAW;AAAA,KACvG,CAAE,MAAA;AAGF,IAAA,MAAM,gBAAA,GAAuC,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,UAChE,WAAA,GAAc,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,QAAQ,EAAE,CAAA,GAAI,GAAA,KAAS,GAAA,GAAO,KAAK,EAAA,CAAA,GAC/E,MAAA;AAGJ,IAAA,MAAM,iBAAA,GAAoB,eAAe,UAAA,CAAW,MAAA;AAAA,MAAO,QACzD,EAAA,CAAG,OAAA,CAAQ,aAAa,QAAA,CAAS,IAAA,CAAK,QAAQ,EAAE;AAAA,KAClD;AACA,IAAA,MAAM,UAAA,GAAa,kBAAkB,MAAA,GAAS,CAAA;AAC9C,IAAA,MAAM,kBAAA,GAAyC,aAC1C,iBAAA,CAAkB,iBAAA,CAAkB,SAAS,CAAC,CAAA,EAAG,OAAA,CAAQ,OAAA,IAAW,MAAA,GACrE,MAAA;AAIJ,IAAA,MAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,EAAA;AAC5B,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,YAAA,CAAa,GAAA,CAAI,MAAM,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACxD,IAAA,MAAM,kBAAA,GAAqB,gBAAA,CAAiB,uBAAA,CAAwB,GAAA,CAAI,MAAM,CAAA;AAC9E,IAAA,MAAM,qBAAA,GAAwB,gBAAA,CAAiB,wBAAA,CAAyB,GAAA,CAAI,MAAM,CAAA;AAGlF,IAAA,MAAM,uBAAuB,IAAA,CAAK,GAAA,KAAQ,WAAA,KAAgB,GAAA,GAAO,KAAK,EAAA,GAAK,EAAA,CAAA;AAG3E,IAAA,IAAI,WAAA,GAAc,GAAA;AAGlB,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAQ,WAAA,IAAe,CAAA;AAAA,SAAA,IAC1C,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,QAAA,EAAU,WAAA,IAAe,CAAA;AAAA,SAAA,IACjD,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,OAAA,EAAS,WAAA,IAAe,EAAA;AAAA,SAAA,IAChD,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,QAAA,EAAU,WAAA,IAAe,EAAA;AAAA,SAAA,IACjD,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,QAAA,EAAU,WAAA,IAAe,EAAA;AAAA,SACrD,WAAA,IAAe,EAAA;AAGpB,IAAA,WAAA,IAAe,IAAA,CAAK,GAAA,CAAI,qBAAA,GAAwB,EAAA,EAAI,EAAE,CAAA;AAGtD,IAAA,IAAI,mBAAmB,CAAA,IAAK,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,UAAU,WAAA,IAAe,EAAA;AAAA,SAAA,IACpE,cAAA,GAAiB,GAAG,WAAA,IAAe,EAAA;AAG5C,IAAA,IAAI,mBAAA,GAAsB,IAAI,WAAA,IAAe,EAAA;AAAA,SAAA,IACpC,mBAAA,GAAsB,IAAI,WAAA,IAAe,EAAA;AAAA,SAAA,IACzC,mBAAA,GAAsB,GAAG,WAAA,IAAe,EAAA;AAEjD,IAAA,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAK,WAAW,CAAC,CAAA;AAGpD,IAAA,MAAM,kBAAA,GAAqB,mBAAA;AAG3B,IAAA,MAAM,cAAA,GAAqC;AAAA,MACzC,GAAG,IAAA,CAAK,OAAA;AAAA,MACR,YAAA,EAAc;AAAA,QACZ,SAAA;AAAA,QACA,QAAA;AAAA,QACA,kBAAA;AAAA,QACA,qBAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAe;AAAA,QACb,GAAI,MAAA,IAAU,EAAE,MAAA,EAAO;AAAA,QACvB,GAAI,YAAA,IAAgB,EAAE,YAAA,EAAa;AAAA,QACnC,UAAA,EAAY,WAAA;AAAA,QACZ,SAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAS;AAAA,QACP,cAAA;AAAA,QACA,qBAAA;AAAA,QACA,iBAAA;AAAA,QACA,GAAI,gBAAA,KAAqB,MAAA,IAAa,EAAE,gBAAA;AAAiB,OAC3D;AAAA,MACA,OAAA,EAAS;AAAA,QACP,UAAA;AAAA,QACA,GAAI,kBAAA,KAAuB,MAAA,IAAa,EAAE,kBAAA;AAAmB,OAC/D;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,GAAI,cAAA,IAAkB,EAAE,cAAA;AAAe,KACzC;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,SAAA,EAA2B;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,OAAO,GAAA,GAAM,SAAA;AACnB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,MAAO,EAAA,CAAG,CAAA;AAC7C,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,GAAA,GAAO,KAAK,EAAA,CAAG,CAAA;AAChD,IAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,GAAA,GAAO,EAAA,GAAK,KAAK,EAAA,CAAG,CAAA;AAEpD,IAAA,IAAI,OAAA,GAAU,EAAA,EAAI,OAAO,CAAA,EAAG,OAAO,CAAA,KAAA,CAAA;AACnC,IAAA,IAAI,KAAA,GAAQ,EAAA,EAAI,OAAO,CAAA,EAAG,KAAK,CAAA,KAAA,CAAA;AAC/B,IAAA,OAAO,GAAG,IAAI,CAAA,KAAA,CAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,EAAA,EAAoB;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAC1B,MAAA,MAAM,YAAY,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,IAAK,KAAK,EAAE,CAAA;AAE9C,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,IAAK,SAAA,IAAa,CAAA,EAAG;AACtC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,EAAE,CAAA,CAAE,CAAA;AAAA,MAClD;AAEA,MAAA,OAAO,SAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,EAAE,CAAA,CAAE,CAAA;AAAA,IAC3D;AAAA,EACF;AACF,CAAA;;;AC7gCA,IAAA,uBAAA,GAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;AC2CO,IAAM,iBAAN,MAAgD;AAAA,EAC7C,eAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EAER,YAAY,YAAA,EAA0C;AACpD,IAAA,IAAA,CAAK,kBAAkB,YAAA,CAAa,eAAA;AACpC,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AACnC,IAAA,IAAA,CAAK,gBAAgB,YAAA,CAAa,aAAA;AAClC,IAAA,IAAA,CAAK,qBAAqB,YAAA,CAAa,kBAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,kBAAkB,OAAA,EAAyD;AAC/E,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,IAAI;AAEF,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,mBAAA,EAAoB;AACrD,MAAA,IAAI,CAAC,cAAc,OAAA,EAAS;AAC1B,QAAA,MAAM,IAAI,MAAM,CAAA,+BAAA,EAAkC,aAAA,CAAc,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MACvF;AAGA,MAAA,MAAM,IAAA,CAAK,mBAAmB,sBAAA,EAAuB;AAGrD,MAAA,MAAM,IAAA,CAAK,mBAAmB,eAAA,EAAgB;AAG9C,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,eAAA,CAAgB,WAAA;AAAA,QACvC;AAAA,UACE,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EAAa,QAAQ,SAAA,IAAa,eAAA;AAAA,UAClC,KAAA,EAAO;AAAA,YACL,OAAA;AAAA,YACA,QAAA;AAAA,YACA,kBAAA;AAAA,YACA,kBAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAGA,MAAA,MAAM,aAAA,GAAgB,MAAM,iBAAA,CAAkB;AAAA,QAC5C,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,UAAA;AAAA,QACR,SAAS;AAAC,OACX,CAAA;AAED,MAAA,MAAM,YAAY,MAAM,IAAA,CAAK,eAAe,WAAA,CAAY,aAAA,EAAe,MAAM,EAAE,CAAA;AAG/E,MAAA,IAAI,cAAA;AACJ,MAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,QAAA,MAAM,cAAA,GAAiC;AAAA,UACrC,SAAA,EAAW,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,IAAI,CAAA;AAAA,UAC9C,aAAa,OAAA,CAAQ,IAAA;AAAA,UACrB,SAAS,KAAA,CAAM,EAAA;AAAA,UACf,WAAW,SAAA,CAAU;AAAA,SACvB;AACA,QAAA,cAAA,GAAiB,MAAM,IAAA,CAAK,wBAAA,CAAyB,OAAA,CAAQ,UAAU,cAAc,CAAA;AAAA,MACvF;AAGA,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,IAAI,CAAA;AACrD,MAAA,MAAM,MAAA,GAAuB;AAAA,QAC3B,eAAA,EAAiB,OAAA;AAAA,QACjB,SAAA;AAAA,QACA,aAAa,OAAA,CAAQ,IAAA;AAAA,QACrB,WAAW,SAAA,CAAU,EAAA;AAAA,QACrB,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAM;AAAA,YACJ,QAAA,EAAU,QAAA;AAAA,YACV,UAAA,EAAY,CAAA;AAAA,YACZ,mBAAA,EAAqB,EAAA;AAAA,YACrB,oBAAA,EAAsB;AAAA,WACxB;AAAA,UACA,QAAA,EAAU;AAAA,YACR,aAAA,EAAe;AAAA,cACb,sBAAA,EAAwB,EAAA;AAAA,cACxB,cAAA,EAAgB,KAAA;AAAA,cAChB,6BAAA,EAA+B,IAAA;AAAA,cAC/B,qBAAA,EAAuB;AAAA,aACzB;AAAA,YACA,WAAA,EAAa;AAAA,cACX,iBAAA,EAAmB,GAAA;AAAA,cACnB,sBAAA,EAAwB,CAAC,OAAA,EAAS,WAAA,EAAa,OAAO;AAAA;AACxD;AACF;AACF,OACF;AAEA,MAAA,MAAM,IAAA,CAAK,kBAAA,CAAmB,WAAA,CAAY,MAAM,CAAA;AAKhD,MAAA,IAAI,CAAC,aAAA,CAAc,SAAA,IAAa,CAAC,cAAc,UAAA,EAAY;AACzD,QAAA,MAAM,cAAwB,EAAC;AAC/B,QAAA,IAAI,CAAC,cAAc,UAAA,EAAY;AAC7B,UAAA,WAAA,CAAY,KAAK,8BAA8B,CAAA;AAAA,QACjD;AACA,QAAA,IAAI,CAAC,cAAc,SAAA,EAAW;AAC5B,UAAA,WAAA,CAAY,KAAK,+BAA+B,CAAA;AAAA,QAClD;AACA,QAAA,OAAA,CAAQ,KAAK,CAAA,cAAA,EAAO,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7C,QAAA,OAAA,CAAQ,KAAK,CAAA,qFAAA,CAAuF,CAAA;AACpG,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA;AAAA,CAA+E,CAAA;AAAA,MAC9F;AAGA,MAAA,MAAM,IAAA,CAAK,kBAAA,CAAmB,iBAAA,CAAkB,KAAA,CAAM,EAAE,CAAA;AAGxD,MAAA,MAAM,IAAA,CAAK,mBAAmB,mBAAA,EAAoB;AAElD,MAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAExC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,SAAA;AAAA,QACA,aAAa,OAAA,CAAQ,IAAA;AAAA,QACrB,WAAW,SAAA,CAAU,EAAA;AAAA,QACrB,KAAA,EAAO;AAAA,UACL,IAAI,KAAA,CAAM,EAAA;AAAA,UACV,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,aAAA,EAAe,IAAA,CAAK,kBAAA,CAAmB,YAAA,CAAa,MAAM,EAAE;AAAA,SAC9D;AAAA,QACA,UAAU,cAAA,GACN;AAAA,UACE,SAAA,EAAW,IAAA;AAAA,UACX,eAAe,cAAA,CAAe,aAAA;AAAA,UAC9B,cAAc,cAAA,CAAe;AAAA,SAC/B,GACA,KAAA,CAAA;AAAA,QACJ,kBAAA;AAAA,QACA,SAAA,EAAW;AAAA,UACT,kDAAA;AAAA,UACA,iDAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,IAAA,CAAK,mBAAmB,QAAA,EAAS;AACvC,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,mBAAA,GAAsD;AAC1D,IAAA,OAAO,IAAA,CAAK,mBAAmB,mBAAA,EAAoB;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,wBAAA,CACJ,YAAA,EACA,cAAA,EACmC;AACnC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,aAAa,EAAE,MAAA,EAAQ,EAAC,EAAe,KAAA,EAAO,EAAC,EAAc;AAEnE,IAAA,IAAI;AAEF,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,kBAAA,CAAmB,SAAS,YAAY,CAAA;AAC3E,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AAE3C,MAAA,IAAI,CAAC,SAAS,MAAA,IAAU,CAAC,MAAM,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AACvD,QAAA,MAAM,IAAI,wBAAwB,yBAAA,EAA2B;AAAA,UAC3D,EAAE,KAAA,EAAO,QAAA,EAAU,SAAS,kBAAA,EAAoB,KAAA,EAAO,SAAS,MAAA;AAAO,SACxE,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,MAAA,IAAI,YAAA,GAAe,CAAA;AAGnB,MAAA,KAAA,MAAW,aAAA,IAAiB,SAAS,MAAA,EAAQ;AAC3C,QAAA,MAAM,SAAA,GAAY,MAAM,iBAAA,CAAkB;AAAA,UACxC,KAAA,EAAO,cAAc,KAAA,IAAS,gBAAA;AAAA,UAC9B,MAAA,EAAQ,cAAc,MAAA,IAAU,UAAA;AAAA,UAChC,SAAS;AAAC,SACX,CAAA;AAED,QAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,eAAe,WAAA,CAAY,SAAA,EAAW,eAAe,OAAO,CAAA;AACrF,QAAA,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA;AAC/B,QAAA,aAAA,EAAA;AAGA,QAAA,IAAI,cAAc,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,aAAA,CAAc,KAAK,CAAA,EAAG;AAC7D,UAAA,KAAA,MAAW,YAAA,IAAgB,cAAc,KAAA,EAAO;AAC9C,YAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB;AAAA,cACtC,KAAA,EAAO,aAAa,KAAA,IAAS,eAAA;AAAA,cAC7B,QAAA,EAAU,aAAa,QAAA,IAAY,QAAA;AAAA,cACnC,WAAA,EAAa,aAAa,WAAA,IAAe,EAAA;AAAA,cACzC,IAAA,EAAM,YAAA,CAAa,IAAA,IAAQ,EAAC;AAAA,cAC5B,QAAA,EAAU,CAAC,KAAA,CAAM,EAAE;AAAA,aACpB,CAAA;AAED,YAAA,MAAM,OAAO,MAAM,IAAA,CAAK,eAAe,UAAA,CAAW,QAAA,EAAU,eAAe,OAAO,CAAA;AAClF,YAAA,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA;AAC7B,YAAA,YAAA,EAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAEpC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,aAAA;AAAA,QACA,YAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,uBAAA,EAAyB;AAC5C,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,MAAM,IAAI,wBAAwB,4BAAA,EAA8B;AAAA,QAC9D,EAAE,KAAA,EAAO,UAAA,EAAY,OAAA,EAAS,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAA,EAAiB,KAAA,EAAO,YAAA;AAAa,OAC7G,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,qBAAqB,OAAA,EAAgC;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,mBAAmB,QAAA,EAAS;AAAA,IACzC,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAA,GAA8C;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,aAAA,CAAc,UAAA,EAAW;AACnD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO;AAAA,QACL,IAAI,MAAA,CAAO,SAAA;AAAA,QACX,MAAM,MAAA,CAAO,WAAA;AAAA,QACb,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,iBAAiB,MAAA,CAAO;AAAA,OAC1B;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,OAAA,EAA+C;AACvE,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,aAAA,CAAc,UAAA,EAAW;AAC1D,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,MACnD;AAAA,IAEF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,wBAAwB,6BAAA,EAA+B;AAAA,QAC/D,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAA,EAAiB,KAAA,EAAO,OAAA;AAAQ,OACtG,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAA,GAAgD;AACpD,IAAA,MAAM,IAAI,MAAM,gEAAgE,CAAA;AAAA,EAClF;AAAA;AAAA,EAIQ,kBAAkB,IAAA,EAAsB;AAC9C,IAAA,OAAO,IAAA,CACJ,aAAY,CACZ,OAAA,CAAQ,cAAc,GAAG,CAAA,CACzB,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AAAA,EACvB;AACF,CAAA;;;ACjWA,IAAA,wBAAA,GAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,uBAAA,GAAA;AAAA,EACE,OAAA,EAAW,OAAA;AAAA,EACX,IAAA,EAAQ,mCAAA;AAAA,EACR,WAAA,EAAe,4EAAA;AAAA,EACf,iBAAA,EAAqB;AAAA,IACnB,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,oBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,WAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,qBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,UAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA,WACnB;AAAA,UACA,MAAA,EAAU;AAAA,YACR,IAAA,EAAQ,UAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA,WACnB;AAAA,UACA,OAAA,EAAW;AAAA,YACT,IAAA,EAAQ,UAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS,gCAAA;AAAA,QACT,YAAA,EAAgB;AAAA,UACd;AAAA;AACF;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,sBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,UAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,KACF;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,SAAA,EAAa;AAAA,MACX,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,oBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,WAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB,kBAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF;AACF,GACF;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,4CAAA,EAAgD;AAAA,MAC9C,WAAA,EAAe,8DAAA;AAAA,MACf,UAAA,EAAc;AAAA,KAChB;AAAA,IACA,6BAAA,EAAiC;AAAA,MAC/B,WAAA,EAAe,4CAAA;AAAA,MACf,UAAA,EAAc;AAAA,KAChB;AAAA,IACA,uBAAA,EAA2B;AAAA,MACzB,WAAA,EAAe,0DAAA;AAAA,MACf,UAAA,EAAc;AAAA;AAChB,GACF;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,aAAA,EAAe;AAAA,MACb,OAAA,EAAW;AAAA,QACT,KAAA,EAAS;AAAA,UACP;AAAA,SACF;AAAA,QACA,aAAA,EAAe;AAAA,UACb,QAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR;AAAA,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN;AAAA,SACF;AAAA,QACA,SAAA,EAAa;AAAA,UACX;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,aAAA,EAAe;AAAA,MACb,OAAA,EAAW;AAAA,QACT,KAAA,EAAS;AAAA,UACP;AAAA,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR;AAAA,SACF;AAAA,QACA,KAAA,EAAS;AAAA,UACP;AAAA,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR;AAAA,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN;AAAA,SACF;AAAA,QACA,QAAA,EAAY;AAAA,UACV;AAAA,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,SACF;AAAA,QACA,SAAA,EAAa;AAAA,UACX;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,WAAA;AAAA,MACT,MAAA,EAAU;AAAA;AACZ;AAEJ,CAAA;;;AC5LA,IAAA,sBAAA,GAAA;AAAA,EACE,OAAA,EAAW,OAAA;AAAA,EACX,IAAA,EAAQ,iBAAA;AAAA,EACR,WAAA,EAAe,sEAAA;AAAA,EACf,iBAAA,EAAqB;AAAA,IACnB,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,oBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,eAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,KACF;AAAA,IACA,KAAA,EAAS;AAAA,MACP,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,qBAAA;AAAA,QACX,YAAA,EAAgB;AAAA,UACd;AAAA;AACF;AACF,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS,gBAAA;AAAA,QACT,YAAA,EAAgB;AAAA,UACd;AAAA;AACF;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,OAAA,EAAW,sBAAA;AAAA,QACX,UAAA,EAAc;AAAA,UACZ,WAAA,EAAe;AAAA,YACb,IAAA,EAAQ,cAAA;AAAA,YACR,gBAAA,EAAoB;AAAA,cAClB;AAAA,aACF;AAAA,YACA,aAAA,EAAiB;AAAA;AACnB;AACF;AACF,KACF;AAAA,IACA,QAAA,EAAY;AAAA,MACV,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,MAAA,EAAU;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA,EAAS;AAAA;AACX;AACF,GACF;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,4BAAA,EAAgC;AAAA,MAC9B,WAAA,EAAe,6DAAA;AAAA,MACf,UAAA,EAAc;AAAA,KAChB;AAAA,IACA,4BAAA,EAAgC;AAAA,MAC9B,WAAA,EAAe,gDAAA;AAAA,MACf,UAAA,EAAc;AAAA;AAChB,GACF;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,aAAA,EAAe;AAAA,MACb,OAAA,EAAW;AAAA,QACT,iBAAA,EAAmB;AAAA,UACjB;AAAA,SACF;AAAA,QACA,gBAAA,EAAkB;AAAA,UAChB,QAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,aAAA,EAAe;AAAA,UACb;AAAA,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN;AAAA,SACF;AAAA,QACA,aAAA,EAAiB;AAAA,UACf;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,OAAA,EAAW;AAAA,QACT,iBAAA,EAAmB;AAAA,UACjB;AAAA,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,SACF;AAAA,QACA,cAAA,EAAgB;AAAA,UACd;AAAA,SACF;AAAA,QACA,gBAAA,EAAkB;AAAA,UAChB;AAAA,SACF;AAAA,QACA,YAAA,EAAc;AAAA,UACZ;AAAA,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,UACf;AAAA,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,WAAA;AAAA,MACT,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,qBAAA,EAAuB;AAAA,MACrB,OAAA,EAAW;AAAA,QACT,eAAA,EAAiB;AAAA,UACf;AAAA,SACF;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB;AAAA,SACF;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB;AAAA,SACF;AAAA,QACA,gBAAA,EAAkB;AAAA,UAChB;AAAA,SACF;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB;AAAA,SACF;AAAA,QACA,QAAA,EAAY;AAAA,UACV;AAAA,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,QAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,iBAAA,EAAmB;AAAA,MACjB,OAAA,EAAW;AAAA,QACT,OAAA,EAAS;AAAA,UACP;AAAA,SACF;AAAA,QACA,aAAA,EAAe;AAAA,UACb;AAAA,SACF;AAAA,QACA,aAAA,EAAe;AAAA,UACb;AAAA,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN;AAAA,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,MAAA;AAAA,MACT,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,wBAAA,EAA0B;AAAA,MACxB,OAAA,EAAW;AAAA,QACT,iBAAA,EAAmB;AAAA,UACjB,OAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,OAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,UACf;AAAA,SACF;AAAA,QACA,aAAA,EAAiB;AAAA,UACf;AAAA,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,QAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,KAAA,EAAS,WAAA;AAAA,MACT,MAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,iBAAA,EAAqB;AAAA,IACnB,WAAA,EAAe,6DAAA;AAAA,IACf,eAAA,EAAmB;AAAA,MACjB;AAAA,QACE,EAAA,EAAM,oBAAA;AAAA,QACN,QAAA,EAAY;AAAA,UACV;AAAA,YACE,KAAA,EAAS,wBAAA;AAAA,YACT,MAAA,EAAU;AAAA,WACZ;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,KAAA,EAAS,oBAAA;AAAA,YACT,MAAA,EAAU;AAAA,WACZ;AAAA,UACA;AAAA,YACE,KAAA,EAAS,qBAAA;AAAA,YACT,MAAA,EAAU;AAAA;AACZ;AACF,OACF;AAAA,MACA;AAAA,QACE,EAAA,EAAM,+BAAA;AAAA,QACN,QAAA,EAAY;AAAA,UACV;AAAA,YACE,KAAA,EAAS,yBAAA;AAAA,YACT,MAAA,EAAU;AAAA,WACZ;AAAA,UACA;AAAA,YACE,KAAA,EAAS,yBAAA;AAAA,YACT,MAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF;AAEJ,CAAA;;;AFpMO,IAAM,eAAA,GAAN,MAAM,gBAAA,CAAqC;AAAA,EACxC,MAAA;AAAA,EAER,YAAY,YAAA,EAA2C;AACrD,IAAA,IAAA,CAAK,eAAe,YAAA,CAAa,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,QAAQ,QAAQ,CAAA;AAC7E,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,OAAO,cAAc,eAAA,EAAoD;AACvE,IAAA,OAAO,IAAI,gBAAA,CAAgB;AAAA,MACzB,MAAA,EAAQ,uBAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,OAAO,YAAY,eAAA,EAAoD;AACrE,IAAA,OAAO,IAAI,gBAAA,CAAgB;AAAA,MACzB,MAAA,EAAQ,sBAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEQ,cAAA,CAAe,QAAwB,UAAA,EAA0B;AACvE,IAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,cAAc,CAAA;AACrF,IAAA,MAAM,OAAA,GAAU,UAAU,MAAM,CAAA;AAEhC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,EAAQ,GAAA,CAAI,SAAO,CAAA,EAAG,GAAA,CAAI,YAAY,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,0BAAA;AACjG,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,UAAU,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,CAAA;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAA,GAA4B;AAClC,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,2BAAA,CAA4B,gBAAqC,KAAA,EAA4B;AAEnG,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA,EAAG;AACjE,MAAA,IAAI,cAAc,aAAA,EAAe;AAEjC,MAAA,MAAM,eAAA,GAAkB,MAAM,KAAA,EAAO,IAAA,CAAK,UAAQ,OAAA,CAAQ,gBAAA,EAAkB,QAAA,CAAS,IAAI,CAAC,CAAA;AAC1F,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,OAAO,SAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkB,IAAA,EAAkB,EAAA,EAAgB,QAAA,EAA6D;AACrH,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAG9B,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,iBAAA,GAAoB,EAAE,CAAA;AAEtD,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,YAAY,gBAAA,CAAiB;AAAA,KAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkB,SAAA,EAAsB,OAAA,EAA8C;AAC1F,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAE9B,IAAA,IAAI,CAAC,QAAQ,YAAA,EAAc;AACzB,MAAA,MAAM,IAAI,MAAM,yEAAyE,CAAA;AAAA,IAC3F;AACA,IAAA,MAAM,cAAc,OAAA,CAAQ,YAAA;AAE5B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,iBAAA,GAAoB,WAAW,CAAA;AAC/D,IAAA,IAAI,CAAC,kBAAkB,OAAO,KAAA;AAG9B,IAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,CAAK,SAAS,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,cAAA,GAAiB,iBAAiB,QAAA,CAAS,UAAA;AACjD,IAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAG5B,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,2BAAA,CAA4B,cAAA,EAAgB,KAAK,CAAA;AAC7E,IAAA,MAAM,OAAA,GAAU,eAAe,cAAc,CAAA;AAC7C,IAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAGrB,IAAA,IAAI,SAAA,CAAU,IAAA,KAAS,OAAA,CAAQ,IAAA,EAAM;AACnC,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,qBAAA,GAAwB,MAAM,KAAA,EAAO,IAAA,CAAK,UAAQ,OAAA,CAAQ,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAC,CAAA;AAC/F,IAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,oBAAA,GAAuB,OAAA,CAAQ,UAAA,IAAc,CAAC,SAAS,CAAA;AAC7D,IAAA,MAAM,kBAAA,GAAqB,oBAAA,CAAqB,MAAA,CAAO,CAAA,CAAA,KAAK;AAI1D,MAAA,OAAO,CAAA,CAAE,IAAA,KAAS,OAAA,CAAQ,IAAA,IAAQ,qBAAA;AAAA,IACpC,CAAC,CAAA;AAGD,IAAA,IAAI,kBAAA,CAAmB,MAAA,GAAS,OAAA,CAAQ,aAAA,EAAe;AACrD,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CAAoB,KAAA,EAAiB,OAAA,EAA8C;AACvF,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAE9B,IAAA,KAAA,MAAW,UAAU,KAAA,EAAO;AAC1B,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,YAAA,GAAe,MAAM,CAAA;AAE/C,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qBAAA,EAAwB,MAAM,CAAA,CAAE,CAAA;AAC7C,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAI,WAAA,GAAc,KAAA;AAGlB,MAAA,QAAQ,WAAW,UAAA;AAAY,QAC7B,KAAK,qBAAA;AAEH,UAAA,MAAM,UAAA,GAAa,QAAQ,SAAA,EAAW,IAAA;AAAA,YAAK,CAAA,CAAA,KACzC,CAAA,CAAE,IAAA,KAAS,YAAA,IAAgB,EAAE,MAAA,KAAW;AAAA,WAC1C;AACA,UAAA,WAAA,GAAc,CAAC,CAAC,UAAA;AAChB,UAAA;AAAA,QAEF,KAAK,iBAAA;AAEH,UAAA,IAAI,CAAC,QAAQ,IAAA,CAAK,QAAA,IAAY,QAAQ,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAChE,YAAA,WAAA,GAAc,KAAA;AACd,YAAA;AAAA,UACF;AACA,UAAA,MAAM,eAAe,OAAA,CAAQ,MAAA,EAAQ,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,QAAQ,CAAA;AACtE,UAAA,IAAI,CAAC,YAAA,IAAgB,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG;AAC9C,YAAA,WAAA,GAAc,KAAA;AACd,YAAA;AAAA,UACF;AAEA,UAAA,WAAA,GAAc,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,IAAA,KAAQ,YAAA,CAAa,IAAA,CAAK,CAAA,EAAA,KAAM,EAAA,CAAG,EAAA,KAAO,IAAI,CAAC,CAAA;AACxF,UAAA;AAAA,QAEF,KAAK,iBAAA;AAEH,UAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA,GAAA,KAAO,GAAA,CAAI,UAAA,CAAW,OAAO,CAAC,CAAA;AACrE,UAAA,IAAI,CAAC,MAAA,EAAQ;AACX,YAAA,WAAA,GAAc,IAAA;AACd,YAAA;AAAA,UACF;AAEA,UAAA,WAAA,GAAc,OAAA,CAAQ,KAAK,MAAA,KAAW,QAAA,IAAA,CAAa,QAAQ,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA,IAAK,CAAA;AACzF,UAAA;AAAA,QAEF,KAAK,QAAA;AAGH,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAM,CAAA,UAAA,CAAY,CAAA;AAC9C,UAAA,WAAA,GAAc,IAAA;AACd,UAAA;AAAA,QAEF;AACE,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yBAAA,EAA4B,UAAA,CAAW,UAAU,CAAA,CAAE,CAAA;AAChE,UAAA,WAAA,GAAc,KAAA;AACd,UAAA;AAAA;AAIJ,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAGA,MAAM,wBAAwB,IAAA,EAA6C;AACzE,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,IAAA,IAAI,CAAC,OAAO,iBAAA,EAAmB;AAC7B,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,YAA8B,EAAC;AACrC,IAAA,KAAA,MAAW,OAAA,IAAW,OAAO,iBAAA,EAAmB;AAC9C,MAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,iBAAA,CAAkB,OAAO,CAAA;AACzD,MAAA,IAAI,gBAAA,IAAoB,gBAAA,CAAiB,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AAC5D,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,EAAA,EAAI,OAAA;AAAA,UACJ,YAAY,gBAAA,CAAiB;AAAA,SAC9B,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACF,CAAA;;;AGnSA,IAAA,sBAAA,GAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACyCO,IAAM,gBAAN,MAA8C;AAAA,EAClC,WAAA;AAAA,EAEjB,YAAY,WAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,GAA2C;AAC/C,IAAA,OAAO,IAAA,CAAK,YAAY,UAAA,EAAW;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,GAAuC;AAC3C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,OAAO,QAAQ,SAAA,IAAa,IAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,GAA+D;AACnE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,IAAA,OAAO;AAAA,MACL,IAAI,MAAA,CAAO,SAAA;AAAA,MACX,MAAM,MAAA,CAAO;AAAA,KACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAA,GAA4C;AAChD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,IAAI,CAAC,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA;AAEjC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,QAAA,IAAY,QAAA;AAAA,MACxC,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,UAAA,IAAc,CAAA;AAAA,MAC5C,mBAAA,EAAqB,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,mBAAA,IAAuB,EAAA;AAAA,MAC9D,oBAAA,EAAsB,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,oBAAA,IAAwB;AAAA,KAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,GAAyC;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AAErC,IAAA,OAAO;AAAA,MACL,aAAA,EAAe;AAAA,QACb,sBAAA,EAAwB,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,eAAe,sBAAA,IAA0B,EAAA;AAAA,QAC1F,cAAA,EAAgB,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,eAAe,cAAA,IAAkB,KAAA;AAAA,QAC1E,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,eAAe,6BAAA,IAAiC,IAAA;AAAA,QACxG,qBAAA,EAAuB,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,eAAe,qBAAA,IAAyB;AAAA,OAC1F;AAAA,MACA,WAAA,EAAa;AAAA,QACX,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,aAAa,iBAAA,IAAqB,GAAA;AAAA,QAC9E,sBAAA,EAAwB,QAAQ,KAAA,EAAO,QAAA,EAAU,aAAa,sBAAA,IAA0B,CAAC,OAAA,EAAS,WAAA,EAAa,OAAO;AAAA;AACxH,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAA,GAAqC;AACzC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,OAAO;AAAA,MACL,mBAAA,EAAqB,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,mBAAA,IAAuB,IAAA;AAAA,MAClE,sBAAA,EAAwB,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,sBAAA,IAA0B,IAAA;AAAA,MACxE,0BAAA,EAA4B,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,0BAAA,IAA8B;AAAA,KAClF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAiB,UAAA,EAA6C;AAClE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,IACpE;AAEA,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,MAAA,MAAA,CAAO,QAAQ,EAAC;AAAA,IAClB;AAEA,IAAA,MAAA,CAAO,MAAM,KAAA,GAAQ;AAAA,MACnB,qBAAqB,UAAA,CAAW,mBAAA;AAAA,MAChC,wBAAwB,UAAA,CAAW,sBAAA;AAAA,MACnC,4BAA4B,UAAA,CAAW;AAAA,KACzC;AAEA,IAAA,MAAM,IAAA,CAAK,WAAA,CAAY,UAAA,CAAW,MAAM,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,GAAkC;AACtC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,IAAA,OAAO,MAAA,EAAQ,OAAO,MAAA,IAAU,cAAA;AAAA,EAClC;AACF,CAAA;;;AC5JA,IAAA,wBAAA,GAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,4BAAA,EAAA,MAAA,4BAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACMO,SAAS,6BACd,IAAA,EACuC;AACvC,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,cAAc,CAAA;AAC1F,EAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,OAAA,EAAS,cAAA,CAAe,MAAM,CAAA;AACxC;AAKO,SAAS,iBAAiB,IAAA,EAAuC;AACtE,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,sBAAA,CAAuB,OAAA,CAAQ,cAAc,CAAA;AAC1F,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAMO,SAAS,+BAA+B,IAAA,EAO7C;AACA,EAAA,MAAM,CAAC,OAAA,EAAS,SAAS,CAAA,GAAI,6BAA6B,IAAI,CAAA;AAE9D,EAAA,MAAM,eAAA,GAAkB,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,CAAA,KAAA,MAAU;AAAA,IAC1D,KAAA,EAAO,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,UAAA,IAAc,MAAA;AAAA,IACjD,OAAA,EAAS,MAAM,OAAA,IAAW,mBAAA;AAAA,IAC1B,OAAO,KAAA,CAAM;AAAA,GACf,CAAE,IAAI,EAAC;AAEP,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AAMO,SAAS,oCACd,MAAA,EAQA;AACA,EAAA,MAAM,SAAoE,EAAC;AAG3E,EAAA,MAAM,WAAA,GAAc,CAAC,OAAA,EAAS,QAAA,EAAU,SAAS,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,WAAW,CAAA;AAEpG,EAAA,KAAA,MAAW,CAAC,aAAa,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,iBAAiB,CAAA,EAAG;AAChF,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,WAAW,CAAA,EAAG;AACtC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,KAAA,EAAO,qBAAqB,WAAW,CAAA,CAAA;AAAA,QACvC,OAAA,EAAS,yBAAyB,WAAW,CAAA,CAAA;AAAA,QAC7C,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,KAAA,MAAW,SAAA,IAAa,WAAW,IAAA,EAAM;AACvC,QAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,SAAS,CAAA,EAAG;AACpC,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,KAAA,EAAO,qBAAqB,WAAW,CAAA,KAAA,CAAA;AAAA,YACvC,OAAA,EAAS,yBAAyB,SAAS,CAAA,CAAA;AAAA,YAC3C,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,EAAY,QAAA,EAAU,YAAA,IAAgB,MAAA,CAAO,YAAA,EAAc;AAC7D,MAAA,KAAA,MAAW,MAAA,IAAU,UAAA,CAAW,QAAA,CAAS,YAAA,EAAc;AACrD,QAAA,IAAI,CAAC,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA,EAAG;AAChC,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,KAAA,EAAO,qBAAqB,WAAW,CAAA,sBAAA,CAAA;AAAA,YACvC,OAAA,EAAS,gBAAgB,MAAM,CAAA,qCAAA,CAAA;AAAA,YAC/B,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,YAAA,EAAc;AACvB,IAAA,MAAM,oBAAA,GAAuB,CAAC,qBAAA,EAAuB,iBAAA,EAAmB,mBAAmB,QAAQ,CAAA;AAEnG,IAAA,KAAA,MAAW,CAAC,QAAQ,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA,EAAG;AAChE,MAAA,IAAI,QAAQ,CAAC,oBAAA,CAAqB,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA,EAAG;AAC3D,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,KAAA,EAAO,gBAAgB,MAAM,CAAA,WAAA,CAAA;AAAA,UAC7B,OAAA,EAAS,CAAA,yBAAA,EAA4B,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,UACpD,OAAO,IAAA,CAAK;AAAA,SACb,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAO,MAAA,KAAW,CAAA;AAAA,IAC3B;AAAA,GACF;AACF;;;AC/GO,SAAS,qBACd,OAAA,EACgB;AAGhB,EAAA,MAAM,MAAA,GAAyB;AAAA,IAC7B,OAAA,EAAS,QAAQ,OAAA,IAAW,OAAA;AAAA,IAC5B,IAAA,EAAM,QAAQ,IAAA,IAAQ,oBAAA;AAAA,IACtB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,iBAAA,EAAmB,QAAQ,iBAAA,IAAqB;AAAA,MAC9C,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,QACd,QAAA,EAAU;AAAA,UACR,OAAA,EAAS,oBAAA;AAAA,UACT,UAAA,EAAY;AAAA,YACV,aAAA,EAAe;AAAA,cACb,IAAA,EAAM,WAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,QAAQ,CAAA;AAAA,cAC3B,aAAA,EAAe;AAAA;AACjB;AACF;AACF;AACF,KACF;AAAA,IACA,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,gBAAA,GAAmB,+BAA+B,MAAM,CAAA;AAC9D,EAAA,IAAI,CAAC,iBAAiB,OAAA,EAAS;AAC7B,IAAA,MAAM,IAAI,uBAAA,CAAwB,gBAAA,EAAkB,gBAAA,CAAiB,MAAM,CAAA;AAAA,EAC7E;AAGA,EAAA,MAAM,uBAAA,GAA0B,oCAAoC,MAAM,CAAA;AAC1E,EAAA,IAAI,CAAC,wBAAwB,OAAA,EAAS;AACpC,IAAA,MAAM,IAAI,uBAAA,CAAwB,iCAAA,EAAmC,uBAAA,CAAwB,MAAM,CAAA;AAAA,EACrG;AAEA,EAAA,OAAO,MAAA;AACT;AAKA,eAAsB,2BAAA,GAAuD;AAC3E,EAAA,OAAO,oBAAA,CAAqB;AAAA,IAC1B,OAAA,EAAS,OAAA;AAAA,IACT,IAAA,EAAM,mCAAA;AAAA,IACN,WAAA,EAAa,4EAAA;AAAA,IACb,iBAAA,EAAmB;AAAA,MACjB,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,QACd,QAAA,EAAU;AAAA,UACR,OAAA,EAAS,oBAAA;AAAA,UACT,UAAA,EAAY;AAAA,YACV,aAAA,EAAe;AAAA,cACb,IAAA,EAAM,WAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,QAAQ,CAAA;AAAA,cAC3B,aAAA,EAAe;AAAA;AACjB;AACF;AACF,OACF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,QACf,QAAA,EAAU;AAAA,UACR,OAAA,EAAS,qBAAA;AAAA,UACT,UAAA,EAAY;AAAA,YACV,aAAA,EAAe;AAAA,cACb,IAAA,EAAM,UAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,kBAAkB,CAAA;AAAA,cACrC,aAAA,EAAe;AAAA,aACjB;AAAA,YACA,QAAA,EAAU;AAAA,cACR,IAAA,EAAM,UAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,iBAAiB,CAAA;AAAA,cACpC,aAAA,EAAe;AAAA,aACjB;AAAA,YACA,SAAA,EAAW;AAAA,cACT,IAAA,EAAM,UAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,kBAAkB,CAAA;AAAA,cACrC,aAAA,EAAe;AAAA;AACjB;AACF;AACF,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,QACd,QAAA,EAAU;AAAA,UACR,KAAA,EAAO,gCAAA;AAAA,UACP,YAAA,EAAc,CAAC,8CAA8C;AAAA;AAC/D,OACF;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,QACf,QAAA,EAAU;AAAA,UACR,OAAA,EAAS,sBAAA;AAAA,UACT,UAAA,EAAY;AAAA,YACV,aAAA,EAAe;AAAA,cACb,IAAA,EAAM,UAAA;AAAA,cACN,gBAAA,EAAkB,CAAC,kBAAkB,CAAA;AAAA,cACrC,aAAA,EAAe;AAAA;AACjB;AACF;AACF,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,QACb,QAAA,EAAU;AAAA,UACR,KAAA,EAAO;AAAA;AACT,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,QACzB,QAAA,EAAU;AAAA,UACR,KAAA,EAAO;AAAA;AACT;AACF,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,8CAAA,EAAgD;AAAA,QAC9C,WAAA,EAAa,8DAAA;AAAA,QACb,UAAA,EAAY;AAAA,OACd;AAAA,MACA,+BAAA,EAAiC;AAAA,QAC/B,WAAA,EAAa,4CAAA;AAAA,QACb,UAAA,EAAY;AAAA,OACd;AAAA,MACA,yBAAA,EAA2B;AAAA,QACzB,WAAA,EAAa,0DAAA;AAAA,QACb,UAAA,EAAY;AAAA;AACd;AACF,GACD,CAAA;AACH;;;AC9GO,SAAS,oBACd,KAAA,GAAgB,iBAAA,EAChB,IAAA,GAAe,QAAA,EACf,QAAgB,2BAAA,EACL;AACX,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,0FAAA;AAAA;AAAA,IACX;AAAA,GACF;AACF;AAQA,SAAS,qBAAqB,OAAA,EAAsC;AAElE,EAAA,IAAI,QAAA,IAAY,SAAS,OAAO,OAAA;AAChC,EAAA,IAAI,QAAA,IAAY,OAAA,IAAW,QAAA,IAAY,OAAA,EAAS,OAAO,WAAA;AACvD,EAAA,IAAI,cAAA,IAAkB,OAAA,IAAW,aAAA,IAAiB,OAAA,EAAS,OAAO,WAAA;AAClE,EAAA,IAAI,YAAA,IAAgB,OAAA,IAAW,UAAA,IAAc,OAAA,EAAS,OAAO,UAAA;AAC7D,EAAA,IAAI,QAAA,IAAY,OAAA,IAAW,SAAA,IAAa,OAAA,EAAS,OAAO,OAAA;AACxD,EAAA,IAAI,UAAA,IAAc,OAAA,IAAW,aAAA,IAAiB,OAAA,EAAS,OAAO,MAAA;AAC9D,EAAA,IAAI,aAAA,IAAiB,OAAA,IAAW,WAAA,IAAe,OAAA,EAAS,OAAO,OAAA;AAE/D,EAAA,OAAO,QAAA;AACT;AAuBO,SAAS,4BAAA,CACd,OAAA,EACA,OAAA,GAAyC,EAAC,EACf;AAC3B,EAAA,MAAM,YAAA,GAAe,qBAAqB,OAAO,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,EAAQ,IAAA,IAAQ,YAAA;AAGrC,EAAA,MAAM,eAAA,GAAkB,yBAAyB,OAAO,CAAA;AAGxD,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,QAAQ,UAAA,EAAY;AAEtB,IAAA,UAAA,GAAa,OAAA,CAAQ,UAAA;AAAA,EACvB,CAAA,MAAA,IAAW,OAAA,CAAQ,SAAA,EAAW,UAAA,EAAY;AAExC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,CAAU,KAAA,IAAS,iBAAA;AACzC,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,SAAA,CAAU,IAAA,IAAQ,QAAA;AACvC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,CAAU,KAAA,IAAS,qBAAA;AACzC,IAAA,UAAA,GAAa,CAAC,YAAY,OAAA,EAAS,OAAA,CAAQ,UAAU,UAAA,EAAY,KAAA,EAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EACtF,CAAA,MAAO;AAEL,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,EAAW,KAAA,IAAS,iBAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,SAAA,EAAW,IAAA,IAAQ,QAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,EAAW,KAAA,IAAS,2BAAA;AAC1C,IAAA,UAAA,GAAa,CAAC,mBAAA,CAAoB,KAAA,EAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EACvD;AAGA,EAAA,MAAM,MAAA,GAAkC;AAAA,IACtC,OAAA,EAAS,KAAA;AAAA;AAAA,IACT,IAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAI,SAAS,QAAA,IAAY;AAAA,MACvB,SAAA,EAAW,QAAQ,MAAA,EAAQ,SAAA;AAAA,MAC3B,cAAA,EAAgB,QAAQ,MAAA,EAAQ;AAAA;AAClC,GACF;AAEA,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,MAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,MAAM,UAAA,GAAa,iCAAiC,cAAc,CAAA;AAClE,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,uBAAA,CAAwB,wBAAA,EAA0B,UAAA,CAAW,MAAM,CAAA;AAAA,EAC/E;AAEA,EAAA,OAAO,cAAA;AACT;;;ACjJA,IAAA,WAAA,GAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACUO,IAAM,QAAA,GAAN,MAAM,SAAA,SAAiB,KAAA,CAAM;AAAA,EAClC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,SAAA,CAAS,SAAS,CAAA;AAAA,EAChD;AACF,CAAA;AAKO,IAAM,eAAA,GAAN,MAAM,gBAAA,SAAwB,QAAA,CAAS;AAAA,EAC5B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EAEhB,WAAA,CAAY,OAAA,EAAiB,MAAA,GAAiB,EAAA,EAAI,SAA8B,MAAA,EAAiB;AAC/F,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,gBAAA,CAAgB,SAAS,CAAA;AAAA,EACvD;AACF,CAAA;AAKO,IAAM,mBAAA,GAAN,MAAM,oBAAA,SAA4B,QAAA,CAAS;AAAA,EAChC,UAAA;AAAA,EAEhB,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA,CAAM,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAE,CAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,oBAAA,CAAoB,SAAS,CAAA;AAAA,EAC3D;AACF,CAAA;AAKO,IAAM,iBAAA,GAAN,MAAM,kBAAA,SAA0B,QAAA,CAAS;AAAA,EAC9B,QAAA;AAAA,EACA,UAAA;AAAA,EAEhB,WAAA,CAAY,UAAkB,UAAA,EAAoB;AAChD,IAAA,KAAA,CAAM,CAAA,gBAAA,EAAmB,QAAQ,CAAA,WAAA,EAAc,UAAU,CAAA,CAAE,CAAA;AAC3D,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,kBAAA,CAAkB,SAAS,CAAA;AAAA,EACzD;AACF,CAAA;AAKO,IAAM,kBAAA,GAAN,MAAM,mBAAA,SAA2B,QAAA,CAAS;AAAA,EAC/B,eAAA;AAAA,EAEhB,YAAY,eAAA,EAA2B;AACrC,IAAA,KAAA,CAAM,CAAA,2BAAA,EAA8B,eAAA,CAAgB,MAAM,CAAA,QAAA,CAAU,CAAA;AACpE,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,mBAAA,CAAmB,SAAS,CAAA;AAAA,EAC1D;AACF,CAAA;AAKO,IAAM,mBAAA,GAAN,MAAM,oBAAA,SAA4B,QAAA,CAAS;AAAA,EAChC,eAAA;AAAA,EAEhB,YAAY,eAAA,EAA2B;AACrC,IAAA,KAAA,CAAM,CAAA,4BAAA,EAA+B,eAAA,CAAgB,MAAM,CAAA,QAAA,CAAU,CAAA;AACrE,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AACZ,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,oBAAA,CAAoB,SAAS,CAAA;AAAA,EAC3D;AACF,CAAA;AAKO,IAAM,wBAAA,GAAN,MAAM,yBAAA,SAAiC,QAAA,CAAS;AAAA,EACrD,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,uBAAuB,CAAA;AAC7B,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,yBAAA,CAAyB,SAAS,CAAA;AAAA,EAChE;AACF,CAAA;AAKO,IAAM,wBAAA,GAAN,MAAM,yBAAA,SAAiC,QAAA,CAAS;AAAA,EACrC,UAAA;AAAA,EAEhB,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA,CAAM,CAAA,uBAAA,EAA0B,UAAU,CAAA,CAAE,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,yBAAA,CAAyB,SAAS,CAAA;AAAA,EAChE;AACF,CAAA;;;ACrHA,IAAA,oBAAA,GAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACwBO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EAC1C,WAAA,CACE,OAAA,EACgB,IAAA,EACA,OAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF,CAAA;ACIO,IAAM,gBAAN,MAA2C;AAAA,EAC/B,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EAEjB,YAAY,OAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,YAAY,OAAA,CAAQ,SAAA;AACzB,IAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,MAAA;AACtC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,QAAA,IAAY,GAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAc,OAAA,EAAyC;AAC3D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAS,EAAA,CAAA,QAAA,CAAS,OAAA,EAAS,OAAO,CAAA;AAClD,MAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,EAAK;AAEzB,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,GAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAK,KAAA,CAAgC,SAAS,QAAA,EAAU;AAEtD,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,kCAAkC,IAAA,CAAK,cAAA,CAAe,OAAO,CAAC,CAAA,EAAA,EAAM,MAAgB,OAAO,CAAA,CAAA;AAAA,QAC3F,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAA,CAAc,OAAA,EAAiB,UAAA,EAAmC;AACtE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AAEvC,IAAA,IAAI;AAEF,MAAA,MAAS,SAAM,IAAA,CAAK,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAGlD,MAAA,MAAS,EAAA,CAAA,SAAA,CAAU,OAAA,EAAS,UAAA,EAAY,OAAO,CAAA;AAG/C,MAAA,MAAS,EAAA,CAAA,KAAA,CAAM,OAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAAA,IACvC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,mCAAmC,IAAA,CAAK,cAAA,CAAe,OAAO,CAAC,CAAA,EAAA,EAAM,MAAgB,OAAO,CAAA,CAAA;AAAA,QAC5F,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAAmC;AACrD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAS,UAAO,OAAO,CAAA;AACvB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,OAAA,EAAmC;AACxD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAS,UAAO,OAAO,CAAA;AACvB,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAK,KAAA,CAAgC,SAAS,QAAA,EAAU;AAEtD,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,oCAAoC,IAAA,CAAK,cAAA,CAAe,OAAO,CAAC,CAAA,EAAA,EAAM,MAAgB,OAAO,CAAA,CAAA;AAAA,QAC7F,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,WAAW,OAAA,EAAyB;AAE1C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA;AAC9C,IAAA,OAAYC,KAAA,CAAA,IAAA,CAAK,KAAK,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,CAAE,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,gBAAgB,OAAA,EAAyB;AAE/C,IAAA,IAAI,SAAA,GAAY,QACb,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CACnB,OAAA,CAAQ,UAAU,GAAG,CAAA;AAGxB,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,KAAc,EAAA,EAAI;AAClC,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,2CAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,OAAA,EAAyB;AAE9C,IAAA,IAAI,OAAA,CAAQ,SAAS,EAAA,EAAI;AACvB,MAAA,OAAO,OAAA,CAAQ,SAAA,CAAU,CAAA,EAAG,EAAE,CAAA,GAAI,KAAA;AAAA,IACpC;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AACF,CAAA;;;ACjJO,IAAM,iBAAN,MAA4C;AAAA,EAChC,MAAA;AAAA,EACA,GAAA;AAAA,EACA,WAAA;AAAA,EAEjB,WAAA,CAAY,OAAA,GAAiC,EAAC,EAAG;AAC/C,IAAA,IAAA,CAAK,MAAA,GAAS,QAAQ,MAAA,IAAU,aAAA;AAEhC,IAAA,IAAA,CAAK,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA;AAElC,IAAA,IAAA,CAAK,WAAA,GAAc,OAAA,CAAQ,WAAA,IAAgB,OAAA,CAAQ,GAAA,KAAQ,MAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAc,OAAA,EAAyC;AAC3D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAE9B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACjC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAA,CAAc,OAAA,EAAiB,UAAA,EAAmC;AACtE,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,+HAAA;AAAA,QAEA,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC1C,IAAA,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,GAAI,UAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAAmC;AACrD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAC9B,IAAA,OAAO,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,IAAA,EAAK,KAAM,EAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAiB,OAAA,EAAmC;AACxD,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,wDAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,KAAM,MAAA;AACtC,IAAA,OAAO,IAAA,CAAK,IAAI,OAAO,CAAA;AACvB,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,cAAc,OAAA,EAAyB;AAE7C,IAAA,MAAM,SAAA,GAAY,OAAA,CACf,WAAA,EAAY,CACZ,QAAQ,YAAA,EAAc,GAAG,CAAA,CACzB,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAClB,OAAA,CAAQ,UAAU,EAAE,CAAA;AAGvB,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,2CAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,EACnC;AACF,CAAA;;;AC1GO,IAAM,kBAAN,MAA6C;AAAA,EACjC,IAAA;AAAA,EAEjB,WAAA,CAAY,OAAA,GAAkC,EAAC,EAAG;AAChD,IAAA,IAAI,OAAA,CAAQ,gBAAgB,GAAA,EAAK;AAC/B,MAAA,IAAA,CAAK,IAAA,GAAO,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAAA,IAClC,CAAA,MAAA,IAAW,QAAQ,IAAA,EAAM;AACvB,MAAA,IAAA,CAAK,OAAO,IAAI,GAAA,CAAI,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,IAClD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,IAAA,uBAAW,GAAA,EAAI;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAAyC;AAC3D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,IAAK,IAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAA,CAAc,OAAA,EAAiB,UAAA,EAAmC;AACtE,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,UAAU,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAAmC;AACrD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,OAAA,EAAmC;AACxD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,GAAe;AACb,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAyB;AACvB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,EACpC;AACF,CAAA;;;ACnGA,IAAA,mBAAA,GAAA;AAAA,QAAA,CAAA,mBAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACYO,IAAM,eAAA,GAAN,cAA8B,KAAA,CAAM;AAAA,EACzC,WAAA,CACE,OAAA,EACgB,IAAA,EACA,QAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF,CAAA;ACKO,IAAM,eAAN,MAAyC;AAAA,EAC7B,GAAA;AAAA,EAEjB,YAAY,OAAA,EAA8B;AACxC,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAA,CAAK,QAAA,EAAoB,OAAA,EAA8C;AAG3E,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,gDAAgD,OAAO,CAAA,CAAA;AAAA,UACvD,cAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,IAAS,KAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC5B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,gDAAgD,OAAO,CAAA,CAAA;AAAA,UACvD,cAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAsC;AAAA,MAC1C,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,MAAA,EAAQ,OAAA,EAAS,MAAA,IAAU,EAAC;AAAA,MAC5B,SAAA,EAAW,SAAS,SAAA,IAAa,IAAA;AAAA,MACjC,QAAA,EAAU,SAAS,QAAA,IAAY,KAAA;AAAA,MAC/B,GAAA,EAAK;AAAA,KACP;AAGA,IAAA,IAAI,OAAA,EAAS,aAAa,MAAA,EAAW;AACnC,MAAA,SAAA,CAAU,OAAO,OAAA,CAAQ,QAAA;AAAA,IAC3B;AAEA,IAAA,OAAO,EAAA,CAAG,UAAU,SAAS,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAA,EAAoC;AAE/C,IAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAE1B,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAC7C,MAAA,MAASC,UAAO,QAAQ,CAAA;AACxB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,QAAA,EAAmC;AAE5C,IAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAE1B,IAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAC7C,IAAA,IAAI;AACF,MAAA,OAAO,MAASA,EAAA,CAAA,QAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAAA,IAC5C,SAAS,GAAA,EAAc;AACrB,MAAA,MAAM,KAAA,GAAQ,GAAA;AACd,MAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,mBAAmB,QAAQ,CAAA,CAAA;AAAA,UAC3B,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,sBAAsB,QAAQ,CAAA,CAAA;AAAA,UAC9B,mBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,YAAA,EAAe,MAAM,OAAO,CAAA,CAAA;AAAA,QAC5B,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,QAAA,EAAsC;AAE/C,IAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAE1B,IAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAASA,EAAA,CAAA,IAAA,CAAK,QAAQ,CAAA;AACpC,MAAA,OAAO;AAAA,QACL,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,OAAO,KAAA,CAAM,OAAA;AAAA,QACb,MAAA,EAAQ,MAAM,MAAA;AAAO,OACvB;AAAA,IACF,SAAS,GAAA,EAAc;AACrB,MAAA,MAAM,KAAA,GAAQ,GAAA;AACd,MAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,mBAAmB,QAAQ,CAAA,CAAA;AAAA,UAC3B,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,YAAA,EAAe,MAAM,OAAO,CAAA,CAAA;AAAA,QAC5B,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAa,QAAA,EAAwB;AAC3C,IAAA,IAAI,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,6CAA6C,QAAQ,CAAA,CAAA;AAAA,QACrD,cAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAS,KAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,6CAA6C,QAAQ,CAAA,CAAA;AAAA,QACrD,cAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AClKA,SAAS,aAAA,CAAc,UAAoB,SAAA,EAA+B;AACxE,EAAA,MAAM,OAAA,GAAU,UAAU,QAAQ,CAAA;AAClC,EAAA,OAAO,SAAA,CAAU,MAAA,CAAO,CAAA,QAAA,KAAY,OAAA,CAAQ,QAAQ,CAAC,CAAA;AACvD;AAKA,SAAS,aAAA,CAAc,WAAqB,cAAA,EAAoC;AAC9E,EAAA,IAAI,CAAC,cAAA,CAAe,MAAA,EAAQ,OAAO,SAAA;AACnC,EAAA,MAAM,SAAA,GAAY,UAAU,cAAc,CAAA;AAC1C,EAAA,OAAO,UAAU,MAAA,CAAO,CAAA,QAAA,KAAY,CAAC,SAAA,CAAU,QAAQ,CAAC,CAAA;AAC1D;AAuBO,IAAM,mBAAN,MAA6C;AAAA,EACjC,KAAA;AAAA,EACA,KAAA;AAAA;AAAA;AAAA;AAAA,EAKjB,WAAA,CAAY,OAAA,GAAmC,EAAC,EAAG;AAEjD,IAAA,IAAI,OAAA,CAAQ,iBAAiB,GAAA,EAAK;AAChC,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAAA,IACpC,CAAA,MAAA,IAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAA,CAAK,QAAQ,IAAI,GAAA,CAAI,OAAO,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IACpD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,uBAAY,GAAA,EAAI;AAAA,IACvB;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA,oBAAS,IAAI,GAAA,EAAI;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAA,CAAK,QAAA,EAAoB,OAAA,EAA8C;AAC3E,IAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAG7C,IAAA,IAAI,OAAA,GAAU,aAAA,CAAc,QAAA,EAAU,QAAQ,CAAA;AAG9C,IAAA,IAAI,OAAA,EAAS,QAAQ,MAAA,EAAQ;AAC3B,MAAA,OAAA,GAAU,aAAA,CAAc,OAAA,EAAS,OAAA,CAAQ,MAAM,CAAA;AAAA,IACjD;AAEA,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAA,EAAoC;AAC/C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAAA,EAAmC;AAC5C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AACvC,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,mBAAmB,QAAQ,CAAA,CAAA;AAAA,QAC3B,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,QAAA,EAAsC;AAC/C,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,mBAAmB,QAAQ,CAAA,CAAA;AAAA,QAC3B,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAGA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AAC7C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAO,aAAA;AAAA,IACT;AAGA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AACvC,IAAA,OAAO;AAAA,MACL,MAAM,OAAA,CAAQ,MAAA;AAAA,MACd,KAAA,EAAO,KAAK,GAAA,EAAI;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAA,CAAQ,UAAkB,OAAA,EAAuB;AAC/C,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,OAAO,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,QAAA,EAA2B;AACpC,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,GAAe;AACb,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAsB;AACpB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAAA,EACrC;AACF,CAAA;;;AClLA,IAAA,YAAA,GAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,UAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;AC6BO,SAAS,cAAc,OAAA,EAAqD;AACjF,EAAA,OAAO,WAAW,OAAA,IAAW,QAAA,IAAY,OAAA,IAAW,UAAA,IAAc,WAAW,aAAA,IAAiB,OAAA;AAChG;AAMO,SAAS,eAAe,OAAA,EAAsD;AACnF,EAAA,OAAO,OAAA,IAAW,OAAA,IAAW,QAAA,IAAY,OAAA,IAAW,EAAE,UAAA,IAAc,OAAA,CAAA;AACtE;AAMO,SAAS,mBAAmB,OAAA,EAA0D;AAC3F,EAAA,OAAO,YAAY,OAAA,IAAW,OAAA,IAAW,OAAA,IAAW,MAAA,IAAU,WAAW,QAAA,IAAY,OAAA;AACvF;;;ACMA,IAAMH,OAAAA,GAAS,aAAa,SAAS,CAAA;AAMrC,IAAM,gBAAA,GAAyD;AAAA,EAC7D,IAAA,EAAM,YAAA;AAAA,EACN,KAAA,EAAO,aAAA;AAAA,EACP,KAAA,EAAO,aAAA;AAAA,EACP,KAAA,EAAO,aAAA;AAAA,EACP,SAAA,EAAW,iBAAA;AAAA,EACX,SAAA,EAAW,iBAAA;AAAA,EACX,QAAA,EAAU;AACZ,CAAA;AAWO,IAAM,aAAN,MAAwC;AAAA,EAC5B,MAAA;AAAA,EACA,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjB,YAAY,YAAA,EAAuC;AACjD,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA,EAAc,MAAA,IAAU,EAAC;AACvC,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAc,cAAA,IAAkB,IAAA;AAEtD,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,MAAAA,OAAAA,CAAO,KAAK,mEAAmE,CAAA;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAA,CAAW,QAAsB,OAAA,EAA0C;AACzE,IAAA,MAAM,UAAwB,EAAC;AAC/B,IAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,WAAW,CAAA,QAAA,EAAW,QAAQ,SAAQ,GAAI,OAAA;AAExE,IAAA,IAAI;AAEF,MAAA,IAAA,CAAK,kBAAA,CAAmB,QAAQ,UAAU,CAAA;AAG1C,MAAA,MAAM,mBAAmB,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,QAAA,EAAU,UAAU,UAAU,CAAA;AACvF,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,gBAAgB,CAAA;AAAA,IAElC,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,uBAAA,EAAyB;AAC5C,QAAA,MAAM,uBAAA,GAA0B,MAAM,MAAA,CAAO,IAAA;AAAA,UAAK,CAAA,CAAA,KAChD,EAAE,OAAA,CAAQ,QAAA,CAAS,qCAAqC,CAAA,IACxD,CAAA,CAAE,OAAA,CAAQ,QAAA,CAAS,qCAAqC;AAAA,SAC1D;AAEA,QAAA,MAAM,cAAA,GAAiB,uBAAA,GACnB,KAAA,CAAM,MAAA,CAAO,MAAA;AAAA,UAAO,OACpB,CAAC,CAAA,CAAE,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,IAC3B,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAS,YAAY,CAAA,IAChC,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAS,yBAAyB;AAAA,YAE7C,KAAA,CAAM,MAAA;AAEV,QAAA,KAAA,MAAW,OAAO,cAAA,EAAgB;AAChC,UAAA,MAAM,YAAY,IAAI,uBAAA,CAAwB,QAAA,EAAU,CAAC,GAAG,CAAC,CAAA;AAC7D,UAAA,SAAA,CAAU,UAAU,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAA;AAChD,UAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,mBAAA,CAAoB,SAAS,CAAA;AACxD,UAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAE1C,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,QAAA;AAAA,YACA,SAAA,EAAW,aAAA;AAAA,YACX,SAAS,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAA;AAAA,YACrC,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,YACzC,OAAA,EAAS,SAAA;AAAA,YACT,GAAI,GAAA,IAAO;AAAA,cACT,OAAA,EAAS;AAAA,gBACP,GAAI,GAAA,CAAI,KAAA,IAAS,EAAE,KAAA,EAAO,IAAI,KAAA,EAAM;AAAA,gBACpC,GAAI,GAAA,CAAI,KAAA,KAAU,UAAa,EAAE,MAAA,EAAQ,IAAI,KAAA,EAAM;AAAA,gBACnD,GAAI,GAAA,CAAI,OAAA,IAAW,EAAE,QAAA,EAAU,IAAI,OAAA;AAAQ;AAC7C;AACF,WACD,CAAA;AAAA,QACH;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,KAAA,EAAO,OAAA;AAAA,UACP,QAAA;AAAA,UACA,SAAA,EAAW,mBAAA;AAAA,UACX,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,UAC9D,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,UACzC,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,KACJ,OAAA,EACqB;AACrB,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,IAAA,GAAoB;AAAA,MACxB,kBAAA,EAAoB,SAAS,kBAAA,IAAsB,KAAA;AAAA,MACnD,cAAA,EAAgB,SAAS,cAAA,IAAkB,KAAA;AAAA,MAC3C,iBAAA,EAAmB,SAAS,iBAAA,IAAqB,IAAA;AAAA,MACjD,kBAAA,EAAoB,SAAS,kBAAA,IAAsB,IAAA;AAAA,MACnD,kBAAA,EAAoB,SAAS,kBAAA,IAAsB,IAAA;AAAA,MACnD,QAAA,EAAU,SAAS,QAAA,IAAY,KAAA;AAAA,MAC/B,UAAA,EAAY,SAAS,UAAA,IAAc,IAAA;AAAA,MACnC,gBAAA,EAAkB,SAAS,gBAAA,IAAoB;AAAA,KACjD;AAEA,IAAA,MAAM,UAAwB,EAAC;AAG/B,IAAA,MAAM,QAAA,GAA2F;AAAA,MAC/F,CAAC,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,MAC1B,CAAC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,MAC5B,CAAC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,MAC5B,CAAC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,MAC5B,CAAC,WAAA,EAAa,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAAA,MACpC,CAAC,UAAA,EAAY,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAAA,MAClC,CAAC,WAAA,EAAa,IAAA,CAAK,MAAA,CAAO,UAAU;AAAA,KACtC;AAEA,IAAA,MAAM,gBAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,QAAA,EAAU;AACpC,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,IAAA,EAAK;AAC7B,MAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,QAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA;AACjC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,aAAA,CAAc,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAM,CAAA;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,MAAA,MAAM,OAAA,GAA6B;AAAA,QACjC,UAAU,KAAA,CAAM,EAAA;AAAA,QAChB,YAAY,KAAA,CAAM,IAAA;AAAA,QAClB,GAAI,KAAA,CAAM,QAAA,KAAa,UAAa,EAAE,QAAA,EAAU,MAAM,QAAA;AAAS,OACjE;AAEA,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAQ,OAAO,CAAA;AAC3D,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,aAAa,CAAA;AAG7B,MAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,QAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,kBAAA;AAAA,UAC5B,KAAA,CAAM,MAAA;AAAA,UAAQ,KAAA,CAAM,EAAA;AAAA,UAAI,KAAA,CAAM,QAAA,IAAY,CAAA,QAAA,EAAW,KAAA,CAAM,EAAE,CAAA,KAAA,CAAA;AAAA,UAAS,KAAA,CAAM;AAAA,SAC9E;AACA,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA,MAC5B;AAGA,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,cAAA;AAAA,UAC9B,KAAA,CAAM,MAAA;AAAA,UAAQ,KAAA,CAAM,EAAA;AAAA,UAAI,KAAA,CAAM,QAAA,IAAY,CAAA,QAAA,EAAW,KAAA,CAAM,EAAE,CAAA,KAAA,CAAA;AAAA,UAAS,KAAA,CAAM;AAAA,SAC9E;AACA,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,YAAY,CAAA;AAAA,MAC9B;AAEA,MAAA,IAAI,IAAA,CAAK,YAAY,aAAA,CAAc,IAAA,CAAK,OAAK,CAAA,CAAE,KAAA,KAAU,OAAO,CAAA,EAAG;AACjE,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AACnC,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,KAAA,KAAU,OAAO,CAAA,CAAE,MAAA;AACxD,IAAA,MAAM,WAAW,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,KAAA,KAAU,SAAS,CAAA,CAAE,MAAA;AAC5D,IAAA,MAAM,UAAU,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,CAAA,CAAE,MAAA;AAE/C,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP,cAAc,aAAA,CAAc,MAAA;AAAA,QAC5B,MAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAU;AAAA,QACR,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,OAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACX,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAAA,CACE,MAAA,EACA,OAAA,EACA,OAAA,EACc;AACd,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,OAAO,CAAA;AAEpD,IAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,IAAI,cAA4B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAEjE,IAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AAEnC,MAAA,IAAI,OAAA,CAAQ,YAAY,CAAC,OAAA,CAAQ,SAAS,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA,EAAG;AACpE,QAAA;AAAA,MACF;AAEA,MAAA,QAAQ,OAAO,SAAA;AAAW,QACxB,KAAK,6BAAA;AACH,UAAA,WAAA,GAAc,IAAA,CAAK,mBAAA,CAAoB,WAAA,EAAa,MAAA,EAAQ,OAAO,CAAA;AACnE,UAAA;AAAA,QAEF,KAAK,uBAAA;AACH,UAAA,WAAA,GAAc,IAAA,CAAK,YAAY,WAAW,CAAA;AAC1C,UAAA;AAAA,QAEF,KAAK,qBAAA;AACH,UAAA,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,WAAA,EAAa,MAAA,EAAQ,OAAO,CAAA;AAC5D,UAAA;AAAA;AAAA;AAAA,QAIF,KAAK,2BAAA;AACH,UAAAA,OAAAA,CAAO,KAAK,qDAAqD,CAAA;AACjE,UAAA;AAAA,QAEF;AACE,UAAAA,OAAAA,CAAO,IAAA,CAAK,CAAA,mCAAA,EAAsC,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAAA;AACxE,IACF;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,kBAAA,CAAmB,QAAsB,UAAA,EAAuD;AAEtG,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAEnD,IAAA,QAAQ,UAAA;AAAY,MAClB,KAAK,MAAA;AACH,QAAA,cAAA,CAAe,SAAS,CAAA;AACxB,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,eAAA,CAAgB,SAAS,CAAA;AACzB,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,eAAA,CAAgB,SAAS,CAAA;AACzB,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,eAAA,CAAgB,SAAS,CAAA;AACzB,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,mBAAA,CAAoB,SAAS,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,mBAAA,CAAoB,SAAS,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,kBAAA,CAAmB,SAAS,CAAA;AAC5B,QAAA;AAAA;AACJ,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,kBAAA,CACN,MAAA,EACA,QAAA,EACA,QAAA,EACA,UAAA,EACc;AACd,IAAA,MAAM,UAAwB,EAAC;AAE/B,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AAOvB,IAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,SAAA,EAAW;AAC1C,MAAA,MAAM,UAAU,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,OAAA,EAAQ;AACpD,MAAA,MAAM,UAAU,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,OAAA,EAAQ;AAEpD,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,KAAA,EAAO,OAAA;AAAA,UACP,QAAA;AAAA,UACA,SAAA,EAAW,sBAAA;AAAA,UACX,OAAA,EAAS,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA,sBAAA,EAAyB,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,UAClG,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,UACzC,OAAA,EAAS,KAAA;AAAA,UACT,OAAA,EAAS;AAAA,YACP,KAAA,EAAO,YAAA;AAAA,YACP,QAAQ,EAAE,SAAA,EAAW,QAAQ,SAAA,EAAW,SAAA,EAAW,QAAQ,SAAA,EAAU;AAAA,YACrE,QAAA,EAAU;AAAA;AACZ,SACD,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,QAAA,MAAM,YAAY,IAAI,IAAA,CAAK,OAAA,CAAQ,WAAW,EAAE,OAAA,EAAQ;AACxD,QAAA,IAAI,YAAY,OAAA,EAAS;AACvB,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,QAAA;AAAA,YACA,SAAA,EAAW,sBAAA;AAAA,YACX,OAAA,EAAS,CAAA,aAAA,EAAgB,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA,uBAAA,EAA0B,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,YACvG,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,YACzC,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,QAAA,MAAM,YAAY,IAAI,IAAA,CAAK,OAAA,CAAQ,WAAW,EAAE,OAAA,EAAQ;AACxD,QAAA,IAAI,YAAY,OAAA,EAAS;AACvB,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,KAAA,EAAO,OAAA;AAAA,YACP,QAAA;AAAA,YACA,SAAA,EAAW,sBAAA;AAAA,YACX,OAAA,EAAS,CAAA,aAAA,EAAgB,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA,uBAAA,EAA0B,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,YACvG,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,YACzC,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,kBAAA,CACZ,MAAA,EACA,QAAA,EACA,UACA,UAAA,EACuB;AACvB,IAAA,MAAM,UAAwB,EAAC;AAC/B,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AAGvB,IAAA,MAAM,SAAA,GAAY,KAAK,MAAA,CAAO,KAAA;AAC9B,IAAA,MAAM,UAAA,GAAa,KAAK,MAAA,CAAO,MAAA;AAG/B,IAAA,IAAI,eAAe,WAAA,IAAe,kBAAA,CAAmB,OAAO,CAAA,IAAK,OAAA,CAAQ,UAAU,SAAA,EAAW;AAC5F,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,MAAM,CAAA;AACrD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,KAAA,EAAO,SAAA;AAAA,YACP,QAAA;AAAA,YACA,SAAA,EAAW,uBAAA;AAAA,YACX,OAAA,EAAS,CAAA,mBAAA,EAAsB,OAAA,CAAQ,MAAM,CAAA,WAAA,CAAA;AAAA,YAC7C,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,YACzC,OAAA,EAAS,KAAA;AAAA,YACT,OAAA,EAAS,EAAE,KAAA,EAAO,QAAA,EAAU,QAAQ,OAAA,CAAQ,MAAA,EAAQ,UAAU,sBAAA;AAAuB,WACtF,CAAA;AAAA,QACH,CAAA,MAAO;AAEL,UAAA,MAAM,cAAc,UAAA,CAAW,OAAA;AAC/B,UAAA,IAAI,WAAA,CAAY,WAAW,WAAA,EAAa;AACtC,YAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,cACX,KAAA,EAAO,SAAA;AAAA,cACP,QAAA;AAAA,cACA,SAAA,EAAW,uBAAA;AAAA,cACX,OAAA,EAAS,CAAA,iBAAA,EAAoB,OAAA,CAAQ,MAAM,CAAA,wBAAA,CAAA;AAAA,cAC3C,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,cACzC,OAAA,EAAS;AAAA,aACV,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAGA,IAAA,IAAI,eAAe,MAAA,IAAU,aAAA,CAAc,OAAO,CAAA,IAAK,OAAA,CAAQ,YAAY,UAAA,EAAY;AACrF,MAAA,KAAA,MAAW,OAAA,IAAW,QAAQ,QAAA,EAAU;AACtC,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,GAAc,MAAM,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AAChD,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,MAAM,eAAe,WAAA,CAAY,OAAA;AACjC,YAAA,IAAI,aAAa,OAAA,IAAW,CAAC,aAAa,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG;AACpE,cAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,gBACX,KAAA,EAAO,SAAA;AAAA,gBACP,QAAA;AAAA,gBACA,SAAA,EAAW,2BAAA;AAAA,gBACX,OAAA,EAAS,0BAA0B,OAAO,CAAA,qCAAA,CAAA;AAAA,gBAC1C,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,gBACzC,OAAA,EAAS,IAAA;AAAA,gBACT,OAAA,EAAS,EAAE,KAAA,EAAO,UAAA,EAAY,QAAQ,OAAA,EAAS,QAAA,EAAU,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAA;AAAG,eAClG,CAAA;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,eAAe,OAAA,IAAW,cAAA,CAAe,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,SAAA,EAAW;AACrF,MAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,OAAA,EAAS;AACpC,QAAA,IAAI;AACF,UAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA;AAC7C,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,MAAM,cAAc,UAAA,CAAW,OAAA;AAC/B,YAAA,IAAI,CAAC,YAAY,QAAA,IAAY,CAAC,YAAY,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,EAAG;AACrE,cAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,gBACX,KAAA,EAAO,SAAA;AAAA,gBACP,QAAA;AAAA,gBACA,SAAA,EAAW,2BAAA;AAAA,gBACX,OAAA,EAAS,wBAAwB,MAAM,CAAA,qCAAA,CAAA;AAAA,gBACvC,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,gBACzC,OAAA,EAAS,IAAA;AAAA,gBACT,OAAA,EAAS,EAAE,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,WAAA,CAAY,QAAA,IAAY,EAAC,EAAG,QAAA,EAAU,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAA;AAAG,eACpH,CAAA;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,cAAA,CACZ,MAAA,EACA,QAAA,EACA,UACA,UAAA,EACuB;AACvB,IAAA,MAAM,UAAwB,EAAC;AAC/B,IAAA,MAAM,UAAA,GAAa,KAAK,MAAA,CAAO,MAAA;AAE/B,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAO,OAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAA,CAAO,QAAQ,UAAA,EAAY;AAC7B,MAAA,KAAA,MAAW,SAAA,IAAa,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY;AAChD,QAAA,IAAI,UAAU,KAAA,EAAO;AACnB,UAAA,IAAI;AACF,YAAA,MAAM,WAAA,GAAc,MAAM,UAAA,CAAW,GAAA,CAAI,UAAU,KAAK,CAAA;AACxD,YAAA,IAAI,CAAC,WAAA,EAAa;AAChB,cAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,gBACX,KAAA,EAAO,SAAA;AAAA,gBACP,QAAA;AAAA,gBACA,SAAA,EAAW,kBAAA;AAAA,gBACX,OAAA,EAAS,CAAA,OAAA,EAAU,SAAA,CAAU,KAAK,CAAA,mCAAA,CAAA;AAAA,gBAClC,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,IAAI,QAAA,EAAS;AAAA,gBACzC,OAAA,EAAS,KAAA;AAAA,gBACT,OAAA,EAAS,EAAE,KAAA,EAAO,kBAAA,EAAoB,QAAQ,SAAA,CAAU,KAAA,EAAO,UAAU,uBAAA;AAAwB,eAClG,CAAA;AAAA,YACH;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBQ,mBAAA,CACN,MAAA,EACA,MAAA,EACA,OAAA,EACc;AACd,IAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,MAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,IACnE;AAGA,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,IAAU,CAAC,OAAO,OAAA,EAAS;AACrC,MAAA,MAAM,IAAI,MAAM,mFAAmF,CAAA;AAAA,IACrG;AAGA,IAAA,MAAM,iBAAiB,IAAA,CAAK,YAAA,CAAa,OAAO,OAAA,EAAS,MAAA,CAAO,OAAO,IAAI,CAAA;AAG3E,IAAA,MAAM,eAAA,GAAkB,yBAAyB,cAAc,CAAA;AAG/D,IAAA,MAAM,SAAA,GAAY,WAAA;AAAA,MAChB,cAAA;AAAA,MACA,OAAA,CAAQ,UAAA;AAAA,MACR,OAAA,CAAQ,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,EAAA;AAAA,MAC/B,QAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,GAAG,MAAA,CAAO,MAAA;AAAA,QACV,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,oBAAoB,UAAA,EAA8B;AACxD,IAAA,MAAM,UAAA,GAAa,iBAAiB,UAAU,CAAA;AAC9C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAAA,OAAAA,CAAO,IAAA,CAAK,CAAA,qBAAA,EAAwB,UAAU,CAAA,mBAAA,CAAqB,CAAA;AACnE,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,MAAA,GAAS,QAAQ,UAAU,CAAA;AACjC,IAAA,IAAI,CAAC,OAAO,UAAA,EAAY;AACtB,MAAAA,OAAAA,CAAO,IAAA,CAAK,CAAA,QAAA,EAAW,UAAU,CAAA,2BAAA,CAA6B,CAAA;AAC9D,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,YAAA,CAAa,SAA8B,UAAA,EAAyC;AAC1F,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,mBAAA,CAAoB,UAAU,CAAA;AAErD,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAE1B,MAAAA,OAAAA,CAAO,IAAA,CAAK,CAAA,qCAAA,EAAwC,UAAU,CAAA,0BAAA,CAA4B,CAAA;AAC1F,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,MAAM,aAAA,GAAgB,OAAA;AAEtB,IAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,MAAA,IAAI,OAAO,aAAA,EAAe;AACxB,QAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,aAAA,CAAc,GAAG,CAAA;AAAA,MAClC;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,YAAY,MAAA,EAAoC;AACtD,IAAA,MAAM,eAAA,GAAkB,wBAAA,CAAyB,MAAA,CAAO,OAAO,CAAA;AAE/D,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,GAAG,MAAA,CAAO,MAAA;AAAA,QACV;AAAA,OACF;AAAA,MACA,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcQ,YAAA,CACN,MAAA,EACA,MAAA,EACA,OAAA,EACc;AACd,IAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,MAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,IAC3D;AAEA,IAAA,MAAM,eAAA,GAAkB,wBAAA,CAAyB,MAAA,CAAO,OAAO,CAAA;AAI/D,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,EAAQ,UAAA,GAAa,CAAC,CAAA;AACjD,IAAA,MAAM,QAAQ,WAAA,EAAa,KAAA,IAAS,OAAA,CAAQ,KAAA,IAAS,OAAO,MAAA,CAAO,EAAA;AACnE,IAAA,MAAM,IAAA,GAAO,aAAa,IAAA,IAAQ,QAAA;AAClC,IAAA,MAAM,KAAA,GAAQ,aAAa,KAAA,IAAS,mCAAA;AAEpC,IAAA,MAAM,SAAA,GAAuB,WAAA;AAAA,MAC3B,MAAA,CAAO,OAAA;AAAA,MACP,OAAA,CAAQ,UAAA;AAAA,MACR,KAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,GAAG,MAAA,CAAO,MAAA;AAAA,QACV,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AAAA,MACA,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,oBAAoB,KAAA,EAA+C;AACzE,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAC/C,IAAA,MAAM,YAAY,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,EAAG,KAAA,EAAO,aAAY,IAAK,EAAA;AAC7D,IAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,MAAA,EAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,EAAS,WAAA,EAAY,IAAK,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,EAAA;AAC7F,IAAA,MAAM,eAAe,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,SAAS,IAAI,gBAAgB,CAAA,CAAA;AAErE,IAAA,IAAI,aAAa,QAAA,CAAS,UAAU,KAAK,SAAA,CAAU,QAAA,CAAS,iBAAiB,CAAA,EAAG;AAC9E,MAAA,OAAO,uBAAA;AAAA,IACT;AACA,IAAA,IAAI,aAAa,QAAA,CAAS,WAAW,KAAK,SAAA,CAAU,QAAA,CAAS,cAAc,CAAA,EAAG;AAC5E,MAAA,OAAO,qBAAA;AAAA,IACT;AACA,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,QAAQ,CAAA,IAAK,YAAA,CAAa,QAAA,CAAS,SAAS,CAAA,IAAK,SAAA,CAAU,QAAA,CAAS,UAAU,CAAA,EAAG;AACzG,MAAA,OAAO,6BAAA;AAAA,IACT;AAEA,IAAA,MAAM,yBAAA,GAA4B;AAAA,MAChC,eAAA;AAAA,MAAiB,YAAA;AAAA,MAAc,UAAA;AAAA,MAAY,gBAAA;AAAA,MAAkB;AAAA,KAC/D;AACA,IAAA,IAAI,yBAAA,CAA0B,IAAA,CAAK,CAAA,CAAA,KAAK,YAAA,CAAa,QAAA,CAAS,CAAC,CAAC,CAAA,IAAK,qBAAA,CAAsB,IAAA,CAAK,YAAY,CAAA,EAAG;AAC7G,MAAA,OAAO,yBAAA;AAAA,IACT;AAEA,IAAA,OAAO,mBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,UAAU,KAAA,EAAyC;AACzD,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAE/C,IAAA,IAAI,aAAa,QAAA,CAAS,QAAQ,KAAK,YAAA,CAAa,QAAA,CAAS,UAAU,CAAA,EAAG;AACxE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,aAAa,QAAA,CAAS,qCAAqC,KAAK,YAAA,CAAa,QAAA,CAAS,qCAAqC,CAAA,EAAG;AAChI,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,UAAU,CAAA,EAAG;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,aAAa,QAAA,CAAS,WAAW,KAAK,YAAA,CAAa,QAAA,CAAS,QAAQ,CAAA,EAAG;AACzE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;;;AC9xBA,IAAA,2BAAA,GAAA;;;ACAA,IAAA,oBAAA,GAAA;;;ACAA,IAAA,kBAAA,GAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,4BAAA,EAAA,MAAA,4BAAA;AAAA,EAAA,6BAAA,EAAA,MAAA,6BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,yBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACiFO,IAAM,gBAAN,MAAoB;AAAA,EACjB,UAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAmB,KAAA;AAAA,EACnB,OAAA,GAAmB,KAAA;AAAA,EAE3B,YAAY,YAAA,EAAyC;AACnD,IAAA,IAAI,CAAC,aAAa,UAAA,EAAY;AAC5B,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AACA,IAAA,IAAI,CAAC,aAAa,aAAA,EAAe;AAC/B,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AACA,IAAA,IAAI,CAAC,aAAa,cAAA,EAAgB;AAChC,MAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,IAChE;AAEA,IAAA,IAAA,CAAK,aAAa,YAAA,CAAa,UAAA;AAC/B,IAAA,IAAA,CAAK,gBAAgB,YAAA,CAAa,aAAA;AAClC,IAAA,IAAA,CAAK,iBAAiB,YAAA,CAAa,cAAA;AAGnC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,OAAA,EAAS,KAAA;AAAA,MACT,mBAAA,EAAqB,EAAA;AAAA,MACrB,sBAAA,EAAwB,IAAA;AAAA,MACxB,cAAA,EAAgB;AAAA,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,UAAA,GAA2C;AACvD,IAAA,IAAI;AAEF,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,aAAA,CAAc,UAAA,EAAW;AAC1D,MAAA,MAAM,eAAA,GAAkB,aAAA,EAAe,KAAA,EAAO,QAAA,EAAU,iBAAiB,EAAC;AAG1E,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,cAAA,CAAe,WAAA,EAAY;AACtD,MAAA,MAAM,gBAAA,GAAmB,OAAA,EAAS,eAAA,EAAiB,aAAA,IAAiB,EAAC;AAGrE,MAAA,OAAO;AAAA,QACL,OAAA,EACE,gBAAA,CAAiB,OAAA,IAAW,eAAA,CAAgB,cAAA,IAAkB,KAAA;AAAA,QAChE,mBAAA,EACE,gBAAA,CAAiB,mBAAA,IACjB,eAAA,CAAgB,sBAAA,IAChB,EAAA;AAAA,QACF,sBAAA,EACE,gBAAA,CAAiB,sBAAA,IACjB,eAAA,CAAgB,6BAAA,IAChB,IAAA;AAAA,QACF,cAAA,EACE,gBAAA,CAAiB,cAAA,IACjB,eAAA,CAAgB,qBAAA,IAChB;AAAA,OACJ;AAAA,IACF,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,mBAAA,EAAqB,EAAA;AAAA,QACrB,sBAAA,EAAwB,IAAA;AAAA,QACxB,cAAA,EAAgB;AAAA,OAClB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,KAAA,GAAuB;AAE3B,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AAGpC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS;AACxB,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,UAAA,GAAa,YAAY,MAAM;AAClC,MAAA,KAAK,KAAK,OAAA,EAAQ;AAAA,IACpB,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,mBAAA,GAAsB,GAAI,CAAA;AAEzC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,IAAA,GAAa;AACX,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,eAAe,MAAA,EAAW;AACjC,MAAA,aAAA,CAAc,KAAK,UAAU,CAAA;AAAA,IAC/B;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,SAAA,GAAqB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,OAAA,GAAwC;AAE5C,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,UAAA,EAAY,KAAA;AAAA,QACZ,gBAAA,EAAkB,KAAA;AAAA,QAClB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAEf,IAAA,IAAI;AAEF,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,UAAA,CAAW,SAAA,EAAU;AAGnD,MAAA,MAAM,UAAA,GAAa,WAAW,SAAA,IAAa,KAAA;AAG3C,MAAA,IAAI,WAAW,gBAAA,EAAkB;AAC/B,QAAA,MAAM,MAAA,GAA8B;AAAA,UAClC,OAAA,EAAS,KAAA;AAAA,UACT,UAAA,EAAY,KAAA;AAAA,UACZ,gBAAA,EAAkB,IAAA;AAAA,UAClB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UAClC,GAAI,UAAA,CAAW,YAAA,IAAgB,EAAE,YAAA,EAAc,WAAW,YAAA;AAAa,SACzE;AAGA,QAAA,IAAI,IAAA,CAAK,OAAO,cAAA,EAAgB;AAC9B,UAAA,IAAA,CAAK,IAAA,EAAK;AAAA,QACZ;AAEA,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,UAAA;AAAA,QACA,gBAAA,EAAkB,KAAA;AAAA,QAClB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,OACpC;AAAA,IACF,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,eAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAC1E,MAAA,MAAM,cAAA,GACJ,YAAA,CAAa,QAAA,CAAS,SAAS,KAC/B,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,IAC7B,aAAa,QAAA,CAAS,SAAS,CAAA,IAC/B,YAAA,CAAa,SAAS,YAAY,CAAA;AAGpC,MAAA,IAAI,cAAA,IAAkB,IAAA,CAAK,MAAA,CAAO,sBAAA,EAAwB;AACxD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,UAAA,EAAY,KAAA;AAAA,UACZ,gBAAA,EAAkB,KAAA;AAAA,UAClB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UAClC,KAAA,EAAO;AAAA,SACT;AAAA,MACF;AAGA,MAAA,MAAM,KAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAAA,IACjB;AAAA,EACF;AACF,CAAA;;;ACjUO,IAAM,cAAA,GAAN,MAAM,eAAA,SAAuB,KAAA,CAAM;AAAA,EACxC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,eAAA,CAAe,SAAS,CAAA;AAAA,EACtD;AACF,CAAA;AAKO,IAAM,wBAAA,GAAN,MAAM,yBAAA,SAAiC,cAAA,CAAe;AAAA,EACpD,MAAA;AAAA,EAEP,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA;AAAA,MACE,oBAAoB,UAAU,CAAA,gEAAA;AAAA,KAEhC;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,UAAA;AACd,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,yBAAA,CAAyB,SAAS,CAAA;AAAA,EAChE;AACF,CAAA;AAKO,IAAM,uBAAA,GAAN,MAAM,wBAAA,SAAgC,cAAA,CAAe;AAAA,EAC1D,YACS,UAAA,EAIP;AACA,IAAA,MAAM,gBAAA,GAAmB,UAAA,CACtB,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CACpC,KAAK,IAAI,CAAA;AACZ,IAAA,KAAA,CAAM,CAAA,+BAAA,EAAkC,gBAAgB,CAAA,CAAE,CAAA;AARnD,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AASP,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,wBAAA,CAAwB,SAAS,CAAA;AAAA,EAC/D;AACF,CAAA;AAKO,IAAM,2BAAA,GAAN,MAAM,4BAAA,SAAoC,cAAA,CAAe;AAAA,EAC9D,YAAmB,gBAAA,EAA4B;AAC7C,IAAA,KAAA;AAAA,MACE,CAAA,kCAAA,EAAqC,iBAAiB,MAAM,CAAA,yDAAA;AAAA,KAE9D;AAJiB,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA;AAKjB,IAAA,IAAA,CAAK,IAAA,GAAO,6BAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,4BAAA,CAA4B,SAAS,CAAA;AAAA,EACnE;AACF,CAAA;AAKO,IAAM,uBAAA,GAAN,MAAM,wBAAA,SAAgC,cAAA,CAAe;AAAA,EAC1D,WAAA,GAAc;AACZ,IAAA,KAAA;AAAA,MACE,CAAA,yIAAA;AAAA,KAEF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,wBAAA,CAAwB,SAAS,CAAA;AAAA,EAC/D;AACF,CAAA;AAKO,IAAM,yBAAA,GAAN,MAAM,0BAAA,SAAkC,cAAA,CAAe;AAAA,EAC5D,YAAY,SAAA,EAAmB;AAC7B,IAAA,KAAA;AAAA,MACE,gCAAgC,SAAS,CAAA,wEAAA;AAAA,KAE3C;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,2BAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,0BAAA,CAA0B,SAAS,CAAA;AAAA,EACjE;AACF,CAAA;AAKO,IAAM,qBAAA,GAAN,MAAM,sBAAA,SAA8B,cAAA,CAAe;AAAA,EACxD,WAAA,CACS,QACA,eAAA,EACP;AACA,IAAA,KAAA,CAAM,CAAA,8BAAA,EAAiC,MAAM,CAAA,CAAE,CAAA;AAHxC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,sBAAA,CAAsB,SAAS,CAAA;AAAA,EAC7D;AACF,CAAA;AAQO,IAAM,0BAAA,GAAN,MAAM,2BAAA,SAAmC,cAAA,CAAe;AAAA,EACtD,gBAAA;AAAA,EACA,oBAAA;AAAA,EAEP,WAAA,CAAY,kBAA0B,oBAAA,EAA8B;AAClE,IAAA,KAAA;AAAA,MACE,CAAA,oCAAA,EAAuC,gBAAgB,CAAA,wBAAA,EAA2B,oBAAoB,CAAA,gEAAA;AAAA,KAExG;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AACZ,IAAA,IAAA,CAAK,gBAAA,GAAmB,gBAAA;AACxB,IAAA,IAAA,CAAK,oBAAA,GAAuB,oBAAA;AAC5B,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,2BAAA,CAA2B,SAAS,CAAA;AAAA,EAClE;AACF,CAAA;AAKO,IAAM,uBAAA,GAAN,MAAM,wBAAA,SAAgC,cAAA,CAAe;AAAA,EACnD,MAAA;AAAA,EAEP,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA;AAAA,MACE,mCAAmC,UAAU,CAAA,sDAAA;AAAA,KAE/C;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,UAAA;AACd,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,wBAAA,CAAwB,SAAS,CAAA;AAAA,EAC/D;AACF,CAAA;AAqBO,SAAS,iBAAiB,KAAA,EAAyC;AACxE,EAAA,OAAO,KAAA,YAAiB,cAAA;AAC1B;AAEO,SAAS,2BACd,KAAA,EACmC;AACnC,EAAA,OAAO,KAAA,YAAiB,wBAAA;AAC1B;AAEO,SAAS,0BACd,KAAA,EACkC;AAClC,EAAA,OAAO,KAAA,YAAiB,uBAAA;AAC1B;AAEO,SAAS,8BACd,KAAA,EACsC;AACtC,EAAA,OAAO,KAAA,YAAiB,2BAAA;AAC1B;AAEO,SAAS,0BACd,KAAA,EACkC;AAClC,EAAA,OAAO,KAAA,YAAiB,uBAAA;AAC1B;AAEO,SAAS,0BACd,KAAA,EACkC;AAClC,EAAA,OAAO,KAAA,YAAiB,uBAAA;AAC1B;AAEO,SAAS,wBACd,KAAA,EACgC;AAChC,EAAA,OAAO,KAAA,YAAiB,qBAAA;AAC1B;AAEO,SAAS,4BACd,KAAA,EACoC;AACpC,EAAA,OAAO,KAAA,YAAiB,yBAAA;AAC1B;AAEO,SAAS,6BACd,KAAA,EACqC;AACrC,EAAA,OAAO,KAAA,YAAiB,0BAAA;AAC1B;;;ACnNA,IAAA,0BAAA,GAAA;AAAA,QAAA,CAAA,0BAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,+BAAA,EAAA,MAAA,+BAAA;AAAA,EAAA,6BAAA,EAAA,MAAA,6BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,gCAAA,EAAA,MAAA,gCAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,+BAAA,EAAA,MAAA,+BAAA;AAAA,EAAA,6BAAA,EAAA,MAAA,6BAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,4BAAA,EAAA,MAAA,4BAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,kCAAA,EAAA,MAAA,kCAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,mCAAA,EAAA,MAAA,mCAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,4BAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,oBAAA,GAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,WAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,iBAAA,GAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;ACUA,SAAS,sBAAA,GAAiC;AACxC,EAAA,OAAO,CAAA,aAAA,EAAgB,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAC9E;AAoDO,IAAM,WAAN,MAAuC;AAAA,EACpC,OAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EAER,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,YAAA,EAAa;AAChC,IAAA,IAAA,CAAK,aAAA,uBAAoB,GAAA,EAAI;AAC7B,IAAA,IAAA,CAAK,eAAA,uBAAsB,GAAA,EAAI;AAG/B,IAAA,IAAA,CAAK,OAAA,CAAQ,gBAAgB,GAAG,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,KAAA,EAAwB;AAE9B,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,IAAQ,OAAO,KAAA,CAAM,SAAS,QAAA,EAAU;AACjD,MAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,SAAA,IAAa,OAAO,KAAA,CAAM,cAAc,QAAA,EAAU;AAC3D,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,MAAA,IAAU,OAAO,KAAA,CAAM,WAAW,QAAA,EAAU;AACrD,MAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,IACzD;AAGA,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AAGnC,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAA,EAAK,KAAK,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAA,CACE,WACA,OAAA,EACmB;AAEnB,IAAA,MAAM,iBAAiB,sBAAA,EAAuB;AAG9C,IAAA,MAAM,cAAA,GAAiB,OAAO,KAAA,KAAa;AAEzC,MAAA,MAAM,kBAAkB,YAAY;AAClC,QAAA,IAAI;AACF,UAAA,MAAM,QAAQ,KAAK,CAAA;AAAA,QACrB,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,2BAAA,EAA8B,SAAS,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,QAEjE;AAAA,MACF,CAAA,GAAG;AAGH,MAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,cAAc,CAAA;AAGvC,MAAA,cAAA,CAAe,QAAQ,MAAM;AAC3B,QAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,cAAc,CAAA;AAAA,MAC5C,CAAC,CAAA;AAAA,IAIH,CAAA;AAGA,IAAA,MAAM,YAAA,GAAkC;AAAA,MACtC,EAAA,EAAI,cAAA;AAAA,MACJ,SAAA;AAAA,MACA,OAAA,EAAS,cAAA;AAAA;AAAA,MACT,QAAA,EAAU;AAAA,QACR,SAAA,EAAW,KAAK,GAAA;AAAI;AACtB,KACF;AAGA,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,SAAA,EAAW,cAAc,CAAA;AAGzC,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,cAAA,EAAgB,YAAY,CAAA;AAEnD,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,cAAA,EAAiC;AAC3C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,cAAc,CAAA;AAC1D,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,YAAA,CAAa,SAAA,EAAW,aAAa,OAAO,CAAA;AAGxE,IAAA,IAAA,CAAK,aAAA,CAAc,OAAO,cAAc,CAAA;AAExC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,GAAwC;AACtC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,GAA2B;AACzB,IAAA,IAAA,CAAK,QAAQ,kBAAA,EAAmB;AAChC,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBAAqB,SAAA,EAA2B;AAC9C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,SAAS,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAA,GAAgC;AAC9B,IAAA,OAAO,IAAA,CAAK,QAAQ,UAAA,EAAW;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe,OAAA,EAAqD;AAClE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAO,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,WAAA,CAAY,OAAA,GAAgC,EAAC,EAAkB;AACnE,IAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,GAAA;AACnC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,GAAO,CAAA,EAAG;AAEpC,MAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,GAAY,OAAA,EAAS;AACpC,QAAA,MAAM,YAAA,GAAe,KAAK,eAAA,CAAgB,IAAA;AAC1C,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qCAAA,EAAwC,OAAO,CAAA,QAAA,EAAW,YAAY,CAAA,uBAAA,CAAyB,CAAA;AAC5G,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,GAAO,CAAA,EAAG;AACjC,QAAA,MAAM,QAAQ,IAAA,CAAK;AAAA,UACjB,QAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,eAAe,CAAC,CAAA;AAAA,UAC5C,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC;AAAA;AAAA,SAC/C,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAKO,IAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAM9B,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,QAAA,CAAS,QAAQ,KAAK,CAAA;AACxB;AAMO,SAAS,gBAAA,CACd,WACA,OAAA,EACmB;AACnB,EAAA,OAAO,QAAA,CAAS,SAAA,CAAU,SAAA,EAAW,OAAO,CAAA;AAC9C;;;ACrSA,IAAA,yBAAA,GAAA;AAAA,QAAA,CAAA,yBAAA,EAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACQO,IAAM,iBAAN,MAAqB;AAAA;AAAA;AAAA;AAAA,EAI1B,OAAO,uBAAA,CAAwB,MAAA,EAAuB,KAAA,EAA2B;AAC/E,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAM,KAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnD,MAAA,MAAM,IAAI,wBAAwB,sBAAA,EAAwB;AAAA,QACxD,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,kBAAA,EAAoB,OAAO,MAAA,EAAO;AAAA,QAC9D,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,kBAAA,EAAoB,OAAO,KAAA;AAAM,OAC7D,CAAA;AAAA,IACH;AAEA,IAAA,IAAA,CAAK,eAAe,MAAM,CAAA;AAC1B,IAAA,IAAA,CAAK,cAAc,KAAK,CAAA;AAAA,EAC1B;AAAA,EAEA,OAAe,eAAe,MAAA,EAA6B;AACzD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAI,wBAAwB,aAAA,EAAe;AAAA,UAC/C,EAAE,OAAO,CAAA,MAAA,EAAS,CAAC,IAAI,OAAA,EAAS,oBAAA,EAAsB,OAAO,KAAA;AAAM,SACpE,CAAA;AAAA,MACH;AAEA,MAAA,IAAI;AACF,QAAA,IAAI,CAAC,KAAA,CAAM,EAAA,IAAM,OAAO,KAAA,CAAM,OAAO,QAAA,EAAU;AAC7C,UAAA,MAAM,IAAI,wBAAwB,aAAA,EAAe;AAAA,YAC/C,EAAE,KAAA,EAAO,IAAA,EAAM,SAAS,4BAAA,EAA8B,KAAA,EAAO,MAAM,EAAA;AAAG,WACvE,CAAA;AAAA,QACH;AAEA,QAAA,IAAI,CAAC,KAAA,CAAM,KAAA,IAAS,OAAO,KAAA,CAAM,UAAU,QAAA,EAAU;AACnD,UAAA,MAAM,IAAI,wBAAwB,aAAA,EAAe;AAAA,YAC/C,EAAE,KAAA,EAAO,OAAA,EAAS,SAAS,4BAAA,EAA8B,KAAA,EAAO,MAAM,KAAA;AAAM,WAC7E,CAAA;AAAA,QACH;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,iBAAiB,uBAAA,EAAyB;AAC5C,UAAA,MAAM,KAAA;AAAA,QACR;AACA,QAAA,MAAM,IAAI,wBAAwB,aAAA,EAAe;AAAA,UAC/C,EAAE,KAAA,EAAO,CAAA,MAAA,EAAS,CAAC,IAAI,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA,EAAG,OAAO,KAAA;AAAM,SACtG,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAe,cAAc,KAAA,EAA2B;AACtD,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,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,wBAAwB,YAAA,EAAc;AAAA,UAC9C,EAAE,OAAO,CAAA,MAAA,EAAS,CAAC,IAAI,OAAA,EAAS,mBAAA,EAAqB,OAAO,IAAA;AAAK,SAClE,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAE1C,MAAA,IAAI;AACF,QAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,OAAO,IAAA,CAAK,OAAO,QAAA,EAAU;AAC3C,UAAA,MAAM,IAAI,wBAAwB,YAAA,EAAc;AAAA,YAC9C,EAAE,KAAA,EAAO,IAAA,EAAM,SAAS,4BAAA,EAA8B,KAAA,EAAO,KAAK,EAAA;AAAG,WACtE,CAAA;AAAA,QACH;AAEA,QAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,OAAO,IAAA,CAAK,UAAU,QAAA,EAAU;AACjD,UAAA,MAAM,IAAI,wBAAwB,YAAA,EAAc;AAAA,YAC9C,EAAE,KAAA,EAAO,OAAA,EAAS,SAAS,4BAAA,EAA8B,KAAA,EAAO,KAAK,KAAA;AAAM,WAC5E,CAAA;AAAA,QACH;AAEA,QAAA,IAAI,CAAC,IAAA,CAAK,WAAA,IAAe,OAAO,IAAA,CAAK,gBAAgB,QAAA,EAAU;AAC7D,UAAA,MAAM,IAAI,wBAAwB,YAAA,EAAc;AAAA,YAC9C,EAAE,KAAA,EAAO,aAAA,EAAe,SAAS,4BAAA,EAA8B,KAAA,EAAO,KAAK,WAAA;AAAY,WACxF,CAAA;AAAA,QACH;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,iBAAiB,uBAAA,EAAyB;AAC5C,UAAA,MAAM,KAAA;AAAA,QACR;AACA,QAAA,MAAM,QAAA,GAAW,eAAe,SAAA,GAAY;AAAA,8BAAA,EAA4B,UAAU,CAAA,CAAA,GAAK,EAAA;AACvF,QAAA,MAAM,IAAI,wBAAwB,YAAA,EAAc;AAAA,UAC9C,EAAE,KAAA,EAAO,CAAA,MAAA,EAAS,CAAC,IAAI,OAAA,EAAS,CAAA,EAAG,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,GAAG,QAAQ;AAAA,mEAAA,CAAA,EAAkE,OAAO,IAAA;AAAK,SACnL,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,cAAc,IAAA,EAA0B;AACrD,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,iBAAiB,IAAA,EAAM;AAC7D,MAAA,MAAM,aAAc,IAAA,CAAgD,WAAA;AACpE,MAAA,OAAO,OAAO,UAAA,KAAe,QAAA,GAAW,UAAA,GAAa,SAAA;AAAA,IACvD;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACF,CAAA;;;AC1EO,IAAM,uBAAA,GAAN,cAAsC,KAAA,CAAM;AAAA,EACjD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,uBAAN,MAA2B;AAAA;AAAA;AAAA;AAAA,EAKhC,oBAAA,CAAqB,QAAuB,KAAA,EAAwC;AAElF,IAAA,cAAA,CAAe,uBAAA,CAAwB,QAAQ,KAAK,CAAA;AAEpD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,KAAK,CAAA;AACjD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,uBAAA,CAAwB,QAAQ,CAAA;AAExD,IAAA,OAAO,IAAA,CAAK,uBAAA,CAAwB,QAAA,EAAU,UAAU,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,CAAc,QAAuB,KAAA,EAAqE;AAChH,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,KAAK,CAAA;AAC9C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,OAAO,QAAQ,CAAA;AACxD,IAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKQ,wBAAwB,QAAA,EAA0G;AAExI,IAAA,IAAA,CAAK,uBAAA,CAAwB,QAAA,CAAS,KAAA,EAAO,QAAA,CAAS,KAAK,CAAA;AAG3D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA;AAClD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA;AAGlD,IAAA,IAAA,CAAK,2BAA2B,KAAK,CAAA;AAErC,IAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAA,CACN,UACA,UAAA,EACmB;AACnB,IAAA,OAAO;AAAA,MACL,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,QAAA,EAAU;AAAA,QACR,SAAA,EAAW,WAAW,KAAA,CAAM,MAAA;AAAA,QAC5B,SAAA,EAAW,WAAW,KAAA,CAAM,MAAA;AAAA,QAC5B,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QACpC,iBAAA,EAAmB;AAAA,UACjB,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,WAAW,KAAA,CAAM,MAAA;AAAA,UAChD,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,WAAW,KAAA,CAAM;AAAA;AAClD;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,MAAA,EAA0C;AACvD,IAAA,OAAO,MAAA,CAAO,GACX,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CACnB,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAOQ,UAAA,CAAW,QAAuB,KAAA,EAAoC;AAC5E,IAAA,MAAM,QAAuB,EAAC;AAG9B,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,IAAA,CAAK,cAAA,CAAe,KAAK,CAAA;AAAA,QAC7B,IAAA,EAAM,OAAA;AAAA,QACN,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,QACrB,YAAY,KAAA,CAAM;AAAA,OACnB,CAAA;AAAA,IACH;AAGA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA;AAGnC,MAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,eAAA;AAE5B,MAAA,MAAM,IAAA,GAAoB;AAAA,QACxB,EAAA,EAAI,IAAA,CAAK,cAAA,CAAe,IAAI,CAAA;AAAA,QAC5B,IAAA,EAAM,SAAS,WAAA,GAAc,MAAA;AAAA,QAC7B,KAAA;AAAA,QACA,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,YAAY,IAAA,CAAK;AAAA,OACnB;AACA,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,MACnB;AACA,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACjB;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,CAAW,MAAA,EAAuB,MAAA,EAAsB,KAAA,EAAqC;AACnG,IAAA,MAAM,QAAuB,EAAC;AAC9B,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,EAAE,CAAC,CAAC,CAAA;AAG5D,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAI,MAAM,aAAA,EAAe;AACvB,QAAA,KAAA,MAAW,OAAA,IAAW,MAAM,aAAA,EAAe;AACzC,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AACnC,UAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AAEhC,UAAA,IAAI,UAAU,IAAA,EAAM;AAClB,YAAA,KAAA,CAAM,IAAA,CAAK;AAAA,cACT,IAAA,EAAM,MAAA;AAAA,cACN,EAAA,EAAI,IAAA;AAAA,cACJ,IAAA,EAAM;AAAA,aACP,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AACnC,UAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AAE/B,UAAA,IAAI,UAAU,IAAA,EAAM;AAClB,YAAA,KAAA,CAAM,IAAA,CAAK;AAAA,cACT,IAAA,EAAM,MAAA;AAAA,cACN,EAAA,EAAI,IAAA;AAAA,cACJ,IAAA,EAAM;AAAA,aACP,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAW,IAAA,EAA2B;AAC5C,IAAA,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,CAAA,GAAA,KAAO,IAAI,UAAA,CAAW,OAAO,CAAC,CAAA,IAAK,KAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKQ,2BAA2B,KAAA,EAA4B;AAC7D,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAsB;AAGxC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AACzB,QAAA,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,EAAE,CAAA;AAAA,MACzB;AACA,MAAA,KAAA,CAAM,IAAI,IAAA,CAAK,IAAI,CAAA,CAAG,IAAA,CAAK,KAAK,EAAE,CAAA;AAAA,IACpC;AAGA,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AACvC,IAAA,MAAME,QAAiB,EAAC;AAExB,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,EAAG;AAC/B,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACtB,QAAA,MAAM,YAAY,IAAA,CAAK,YAAA,CAAa,MAAM,KAAA,EAAO,OAAA,EAAS,gBAAgBA,KAAI,CAAA;AAC9E,QAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,UAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,gBAAA,CAAiB,SAAS,CAAA;AACxD,UAAA,MAAM,IAAI,wBAAwB,gBAAgB,CAAA;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,CACN,IAAA,EACA,KAAA,EACA,OAAA,EACA,gBACAA,KAAAA,EACU;AACV,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,IAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AACvB,IAAAA,KAAAA,CAAK,KAAK,IAAI,CAAA;AAEd,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,GAAA,CAAI,IAAI,KAAK,EAAC;AACtC,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC1B,QAAA,MAAM,YAAY,IAAA,CAAK,YAAA,CAAa,UAAU,KAAA,EAAO,OAAA,EAAS,gBAAgBA,KAAI,CAAA;AAClF,QAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,UAAA,OAAO,SAAA;AAAA,QACT;AAAA,MACF,CAAA,MAAA,IAAW,cAAA,CAAe,GAAA,CAAI,QAAQ,CAAA,EAAG;AAEvC,QAAA,MAAM,eAAA,GAAkBA,KAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAC7C,QAAA,OAAOA,MAAK,KAAA,CAAM,eAAe,EAAE,MAAA,CAAO,CAAC,QAAQ,CAAC,CAAA;AAAA,MACtD;AAAA,IACF;AAEA,IAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAC1B,IAAAA,MAAK,GAAA,EAAI;AACT,IAAA,OAAO,EAAC;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,SAAA,EAA6B;AACpD,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACxC,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,GAAA,CAAI,CAAA,MAAA,KAAU;AAEzC,MAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,iBAAA,EAAmB,EAAE,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AACvE,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,IAAI,OAAA,GAAU,CAAA;;AAAA,CAAA;AACd,IAAA,OAAA,IAAW,CAAA;AAAA,CAAA;AAEX,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,OAAA,GAAU,UAAU,CAAC,CAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,SAAA,CAAA,CAAW,CAAA,GAAI,CAAA,IAAK,UAAU,MAAM,CAAA;AACjD,MAAA,OAAA,IAAW,CAAA,GAAA,EAAM,OAAO,CAAA,QAAA,EAAM,IAAI;AAAA,CAAA;AAAA,IACpC;AAEA,IAAA,OAAA,IAAW;AAAA;AAAA,CAAA;AACX,IAAA,OAAA,IAAW,CAAA;AAAA,CAAA;AACX,IAAA,UAAA,CAAW,QAAQ,CAAA,MAAA,KAAU;AAC3B,MAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC/D,MAAA,OAAA,IAAW,0BAA0B,OAAO,CAAA;AAAA,CAAA;AAAA,IAC9C,CAAC,CAAA;AACD,IAAA,OAAA,IAAW,CAAA;AAAA,CAAA;AACX,IAAA,OAAA,IAAW,CAAA;AAAA,CAAA;AAEX,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAA,CAAwB,OAAsB,KAAA,EAA4B;AAEhF,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAkD;AACxE,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,IAAK,EAAE,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,EAAC,EAAE;AAClE,MAAA,OAAA,CAAQ,KAAA,EAAA;AACR,MAAA,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AACpC,MAAA,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,OAAO,CAAA;AAAA,IAChC;AAEA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA,CAClD,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,IAAI,CAAA,KAAM,IAAA,CAAK,QAAQ,CAAC,CAAA;AAGvC,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,EAAE,CAAA,CAAA;AACxC,MAAA,SAAA,CAAU,IAAI,OAAA,EAAA,CAAU,SAAA,CAAU,IAAI,OAAO,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA,CAClD,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,KAAK,CAAA,KAAM,QAAQ,CAAC,CAAA;AAGnC,IAAA,IAAI,cAAA,CAAe,MAAA,GAAS,CAAA,IAAK,cAAA,CAAe,SAAS,CAAA,EAAG;AAC1D,MAAA,OAAA,CAAQ,KAAK,sDAA4C,CAAA;AAEzD,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,KAAK,uCAAgC,CAAA;AAC7C,QAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,KAAM;AACrC,UAAA,MAAM,eAAe,CAAC,GAAG,IAAI,GAAA,CAAI,IAAA,CAAK,OAAO,CAAC,CAAA;AAC9C,UAAA,OAAA,CAAQ,KAAK,CAAA,UAAA,EAAQ,EAAE,CAAA,UAAA,EAAa,IAAA,CAAK,KAAK,CAAA,OAAA,CAAS,CAAA;AACvD,UAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,YAAA,OAAA,CAAQ,KAAK,CAAA,cAAA,EAAiB,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACvD,YAAA,OAAA,CAAQ,KAAK,CAAA,wEAAA,CAAmE,CAAA;AAAA,UAClF,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,aAAA,EAAgB,YAAA,CAAa,CAAC,CAAC,CAAA,oCAAA,CAAsC,CAAA;AAClF,YAAA,OAAA,CAAQ,KAAK,CAAA,wEAAA,CAAmE,CAAA;AAAA,UAClF;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,KAAK,uCAAgC,CAAA;AAC7C,QAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AACxC,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,UAAA,EAAQ,IAAI,CAAA,UAAA,EAAa,KAAK,CAAA,OAAA,CAAS,CAAA;AAAA,QACtD,CAAC,CAAA;AACD,QAAA,OAAA,CAAQ,KAAK,oFAA6E,CAAA;AAAA,MAC5F;AAEA,MAAA,OAAA,CAAQ,KAAK,2FAAiF,CAAA;AAC9F,MAAA,OAAA,CAAQ,KAAK,uFAAgF,CAAA;AAAA,IAC/F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,KAAA,EAAqC;AAC5D,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAyB;AAG7C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACzB,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,KAAA,EAAqC;AAC5D,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAyB;AAE7C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,EAAE,CAAA,CAAA;AACxC,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACzB,QAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAA,CAAiB,QAAuB,KAAA,EAGtC;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,KAAK,CAAA;AAC9C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAGxD,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAkD;AACxE,IAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,IAAK,EAAE,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,EAAC,EAAE;AAClE,MAAA,OAAA,CAAQ,KAAA,EAAA;AACR,MAAA,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AACpC,MAAA,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,OAAO,CAAA;AAAA,IAChC;AAEA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,CAAA,CAClD,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,IAAI,MAAM,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA,CACpC,GAAA,CAAI,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,MAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,OAAA,EAAS,IAAA,CAAK,SAAQ,CAAE,CAAA;AAGzE,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,IAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,EAAE,CAAA,CAAA;AACxC,MAAA,SAAA,CAAU,IAAI,OAAA,EAAA,CAAU,SAAA,CAAU,IAAI,OAAO,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,CAAA,CAClD,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,KAAK,MAAM,KAAA,GAAQ,CAAC,CAAA,CAChC,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,MAAO,EAAE,IAAA,EAAM,KAAA,EAAM,CAAE,CAAA;AAE3C,IAAA,OAAO,EAAE,gBAAgB,cAAA,EAAe;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,CACE,MAAA,EACA,KAAA,EACA,OAAA,EAKgE;AAChE,IAAA,IAAI,cAAA,GAAiB,CAAC,GAAG,MAAM,CAAA;AAC/B,IAAA,IAAI,aAAA,GAAgB,CAAC,GAAG,KAAK,CAAA;AAG7B,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,cAAc,MAAA,CAAO,IAAA,CAAK,OAAK,CAAA,CAAE,EAAA,KAAO,QAAQ,OAAO,CAAA;AAC7D,MAAA,IAAI,WAAA,EAAa;AAEf,QAAA,MAAM,kCAAkB,IAAI,GAAA,CAAI,CAAC,OAAA,CAAQ,OAAO,CAAC,CAAA;AACjD,QAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AAGvC,QAAA,MAAM,mBAAA,GAAsB,CAAC,OAAA,KAAoB;AAC/C,UAAA,MAAM,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AAC/C,UAAA,IAAI,OAAO,aAAA,EAAe;AACxB,YAAA,KAAA,CAAM,aAAA,CAAc,QAAQ,CAAA,OAAA,KAAW;AACrC,cAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA,EAAG;AACjC,gBAAA,eAAA,CAAgB,IAAI,OAAO,CAAA;AAC3B,gBAAA,mBAAA,CAAoB,OAAO,CAAA;AAAA,cAC7B;AAAA,YACF,CAAC,CAAA;AAAA,UACH;AAAA,QACF,CAAA;AAGA,QAAA,mBAAA,CAAoB,QAAQ,OAAO,CAAA;AAGnC,QAAA,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS;AACtB,UAAA,IAAI,gBAAgB,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,IAAK,MAAM,OAAA,EAAS;AAClD,YAAA,KAAA,CAAM,QAAQ,OAAA,CAAQ,CAAA,MAAA,KAAU,cAAA,CAAe,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,UAC5D;AAAA,QACF,CAAC,CAAA;AAED,QAAA,cAAA,GAAiB,OAAO,MAAA,CAAO,CAAA,CAAA,KAAK,gBAAgB,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AAC7D,QAAA,aAAA,GAAgB,MAAM,MAAA,CAAO,CAAA,CAAA,KAAK,eAAe,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,MAC5D;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,MAAM,aAAa,KAAA,CAAM,IAAA,CAAK,OAAK,CAAA,CAAE,EAAA,KAAO,QAAQ,MAAM,CAAA;AAC1D,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,aAAA,GAAgB,CAAC,UAAU,CAAA;AAG3B,QAAA,cAAA,GAAiB,MAAA,CAAO,MAAA;AAAA,UAAO,OAC7B,CAAA,CAAE,OAAA,IAAW,EAAE,OAAA,CAAQ,QAAA,CAAS,QAAQ,MAAO;AAAA,SACjD;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,MAAA,MAAM,UAAA,GAAa,CAAA,QAAA,EAAW,OAAA,CAAQ,WAAW,CAAA,CAAA;AAEjD,MAAA,cAAA,GAAiB,cAAA,CAAe,MAAA;AAAA,QAAO,OACrC,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,IAAA,CAAK,SAAS,UAAU;AAAA,OACtC;AAEA,MAAA,aAAA,GAAgB,aAAA,CAAc,MAAA;AAAA,QAAO,OACnC,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,IAAA,CAAK,SAAS,UAAU;AAAA,OACtC;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,gBAAgB,aAAA,EAAc;AAAA,EACzC;AACF,CAAA;;;ACnfO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA,EACxC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,kBAAkB,KAAA,EAAuB;AAEvC,IAAA,OAAO,KAAA,CACJ,OAAA,CAAQ,oBAAA,EAAsB,EAAE,CAAA,CAChC,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CACnB,SAAA,CAAU,CAAA,EAAG,GAAG,CAAA;AAAA,EACrB;AAAA,EAEA,eAAe,EAAA,EAAoB;AAEjC,IAAA,OAAO,EAAA,CAAG,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAA;AAAA,EAC1C;AAAA,EAEA,eAAe,MAAA,EAAwB;AACrC,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,SAAA;AAAA,MAAW,aAAA;AAAA,MAAe,MAAA;AAAA,MAAQ,SAAA;AAAA,MAClC,WAAA;AAAA,MAAa,OAAA;AAAA,MAAS,UAAA;AAAA,MAAY,QAAA;AAAA,MAClC,WAAA;AAAA,MAAa,UAAA;AAAA,MAAY,QAAA;AAAA,MAAU,WAAA;AAAA,MACnC,WAAA;AAAA,MAAa,qBAAA;AAAA,MAAuB,oBAAA;AAAA,MACpC,OAAA;AAAA,MAAS,QAAA;AAAA,MAAU;AAAA,KACrB;AACA,IAAA,OAAO,eAAA,CAAgB,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,SAAA;AAAA,EACrD;AAAA,EAEA,cAAc,KAAA,EAA6C;AACzD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ;AAC7B,QAAA,MAAM,aAAA,GAA6B;AAAA,UACjC,EAAA,EAAI,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,EAAE,CAAA;AAAA,UAC/B,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,KAAA,EAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAA;AAAA,UACxC,YAAY,IAAA,CAAK;AAAA,SACnB;AAEA,QAAA,IAAI,KAAK,MAAA,EAAQ;AACf,UAAA,aAAA,CAAc,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAAA,QACxD;AAEA,QAAA,IAAI,KAAK,IAAA,EAAM;AACb,UAAA,aAAA,CAAc,OAAO,IAAA,CAAK,IAAA;AAAA,QAC5B;AAEA,QAAA,OAAO,aAAA;AAAA,MACT,CAAC,CAAA;AAAA,MACD,KAAA,EAAO,MAAM,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,IAAA,IAAQ,KAAK,EAAE,CAAA;AAAA,MACtD,UAAU,KAAA,CAAM;AAAA,KAClB;AAAA,EACF;AACF,CAAA;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,qBAAqB,OAAA,EAA0B;AAE7C,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAGhC,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,CAAA,IAAA,KAAQ,KAAK,IAAA,EAAK,CAAE,UAAA,CAAW,WAAW,CAAC,CAAA;AAC5E,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA;AACjF,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,MAAA,MAAM,gBAAgB,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,IAAK,EAAC,EAAG,MAAA;AAChD,MAAA,MAAM,iBAAiB,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,IAAK,EAAC,EAAG,MAAA;AACjD,MAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEO,IAAM,kBAAN,MAAsB;AAAA,EACV,SAAA;AAAA,EACA,SAAA;AAAA,EAEjB,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,EAAiB;AACtC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,EAAiB;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,CAAY,OAA0B,OAAA,EAAiC;AACrE,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,MAAM,KAAA,IAAS,CAAC,MAAM,KAAA,EAAO;AAC1C,MAAA,MAAM,IAAI,eAAe,yBAAyB,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,SAAA,CAAU,aAAA,CAAc,KAAK,CAAA;AACzD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,sBAAA,CAAuB,cAAA,EAAgB,OAAO,CAAA;AAGnE,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,oBAAA,CAAqB,OAAO,CAAA,EAAG;AACjD,MAAA,MAAM,IAAI,eAAe,kCAAkC,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAA,CAAuB,OAA0B,OAAA,EAAiC;AACxF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,OAAO,CAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,KAAK,eAAA,EAAgB;AACrC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,qBAAA,CAAsB,KAAA,CAAM,KAAK,CAAA;AAE5D,IAAA,OAAO;AAAA,MACL,YAAA;AAAA,MACA,MAAA;AAAA,MACA,EAAA;AAAA,MACA,KAAA;AAAA,MACA,EAAA;AAAA,MACA,KAAA;AAAA,MACA,EAAA;AAAA,MACA,OAAA;AAAA,MACA,EAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,OAAA,EAAiC;AACtD,IAAA,MAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACzC,IAAA,OAAO;AAAA,MACL,CAAA,UAAA,EAAa,QAAQ,MAAM,CAAA,CAAA;AAAA,MAC3B,4BAA4B,SAAS,CAAA,CAAA;AAAA,MACrC,CAAA,gCAAA;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,KAAA,EAA8B;AAClD,IAAA,MAAM,YAAY,KAAA,CAAM,GAAA,CAAI,UAAQ,IAAA,CAAK,kBAAA,CAAmB,IAAI,CAAC,CAAA;AACjE,IAAA,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,KAAA,EAA8B;AAClD,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,+BAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,sDAAA;AAAA,MACA,kEAAA;AAAA,MACA,GAAG,KAAA,CAAM,GAAA,CAAI,UAAQ,IAAA,CAAK,kBAAA,CAAmB,IAAI,CAAC;AAAA,KACpD;AAEA,IAAA,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,SAAA,CAAU,KAAA,EAAe,QAAA,GAAmB,EAAA,EAAY;AAE9D,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,SAAA,CAAU,iBAAA,CAAkB,KAAK,CAAA;AAC7D,IAAA,IAAI,cAAA,CAAe,UAAU,QAAA,EAAU;AACrC,MAAA,OAAO,cAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,KAAA,CAAM,GAAG,CAAA;AACtC,IAAA,MAAM,QAAQ,EAAC;AACf,IAAA,IAAI,WAAA,GAAc,KAAA,CAAM,KAAA,EAAM,IAAK,EAAA;AAEnC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAA,CAAK,WAAA,GAAc,GAAA,GAAM,IAAA,EAAM,MAAA,GAAS,QAAA,EAAU;AAChD,QAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,QAAA,WAAA,GAAc,IAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,WAAA,IAAe,IAAI,IAAI,CAAA,CAAA;AAAA,MACzB;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AAEtB,IAAA,OAAO,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,IAAA,EAA2B;AAC5C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,cAAA,CAAe,KAAK,EAAE,CAAA;AAEzD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAGvC,IAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,MAAA,OAAO,CAAA,IAAA,EAAO,WAAW,CAAA,GAAA,EAAM,IAAI,QAAQ,YAAY,CAAA,GAAA,CAAA;AAAA,IACzD;AAGA,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,WAAW,QAAA,EAAU;AACzD,MAAA,OAAO,CAAA,IAAA,EAAO,WAAW,CAAA,EAAA,EAAK,IAAI,QAAQ,YAAY,CAAA,eAAA,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,CAAA,IAAA,EAAO,WAAW,CAAA,EAAA,EAAK,IAAI,QAAQ,YAAY,CAAA,EAAA,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,IAAA,EAA2B;AAC5C,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,IAAQ,CAAC,KAAK,EAAA,EAAI;AAC1B,MAAA,MAAM,IAAI,eAAe,wCAAwC,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,cAAA,CAAe,KAAK,IAAI,CAAA;AAC7D,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,cAAA,CAAe,KAAK,EAAE,CAAA;AAEzD,IAAA,OAAO,CAAA,IAAA,EAAO,aAAa,CAAA,KAAA,EAAQ,WAAW,CAAA,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,IAAA,EAAsB;AACxC,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,OAAA,EAAS,WAAA;AAAA,MACT,WAAA,EAAa,WAAA;AAAA,MACb,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,OAAO,KAAA,CAAM,IAA0B,CAAA,IAAK,WAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAA,GAA0B;AAChC,IAAA,OAAO;AAAA,MACL,gDAAA;AAAA,MACA,qFAAA;AAAA,MACA,qFAAA;AAAA,MACA,0FAAA;AAAA,MACA,oFAAA;AAAA,MACA,uFAAA;AAAA,MACA,0FAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,KAAA,EAA8B;AAC1D,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAsB;AAG/C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,cAAc,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAA,IAAU,SAAS,IAAI,CAAA;AAGpE,MAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA,EAAG;AAClC,QAAA,YAAA,CAAa,GAAA,CAAI,WAAA,EAAa,EAAE,CAAA;AAAA,MAClC;AACA,MAAA,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA,CAAG,IAAA,CAAK,KAAK,EAAE,CAAA;AAAA,IAC7C;AAGA,IAAA,MAAM,aAAuB,EAAC;AAC9B,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,OAAO,CAAA,IAAK,YAAA,CAAa,SAAQ,EAAG;AAC3D,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,MAAM,YAAA,GAAe,QAAQ,GAAA,CAAI,CAAA,EAAA,KAAM,KAAK,SAAA,CAAU,cAAA,CAAe,EAAE,CAAC,CAAA;AACxE,QAAA,UAAA,CAAW,IAAA,CAAK,aAAa,YAAA,CAAa,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AAAA,MACtE;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,4CAAA;AAAA,MACA,GAAG;AAAA,KACL,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,CAAe,QAAgB,IAAA,EAA4B;AAEjE,IAAA,IAAI,MAAA,KAAW,QAAA,IAAY,IAAA,EAAM,IAAA,KAAS,WAAA,EAAa;AACrD,MAAA,OAAO,kBAAA;AAAA,IACT;AAGA,IAAA,IAAI,IAAA,EAAM,SAAS,OAAA,EAAS;AAC1B,MAAA,MAAM,cAAA,GAAyC;AAAA,QAC7C,UAAA,EAAY,aAAA;AAAA;AAAA,QACZ,QAAA,EAAU,kBAAA;AAAA;AAAA,QACV,WAAA,EAAa,YAAA;AAAA;AAAA,QACb,UAAA,EAAY;AAAA;AAAA,OACd;AACA,MAAA,OAAO,cAAA,CAAe,MAAM,CAAA,IAAK,aAAA;AAAA,IACnC;AAGA,IAAA,MAAM,aAAA,GAAwC;AAAA;AAAA,MAE5C,MAAA,EAAQ,YAAA;AAAA,MACR,WAAA,EAAa,YAAA;AAAA;AAAA,MAGb,QAAA,EAAU,kBAAA;AAAA,MACV,aAAA,EAAe,kBAAA;AAAA;AAAA,MAGf,OAAA,EAAS,aAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA;AAAA,MAGX,OAAA,EAAS,aAAA;AAAA,MACT,QAAA,EAAU,aAAA;AAAA;AAAA,MAGV,SAAA,EAAW,eAAA;AAAA,MACX,QAAA,EAAU,eAAA;AAAA,MACV,WAAA,EAAa,eAAA;AAAA,MACb,WAAA,EAAa,eAAA;AAAA;AAAA,MAGb,UAAA,EAAY,gBAAA;AAAA;AAAA,MAGZ,qBAAA,EAAuB,aAAA;AAAA,MACvB,oBAAA,EAAsB;AAAA,KACxB;AAEA,IAAA,OAAO,aAAA,CAAc,MAAM,CAAA,IAAK,aAAA;AAAA,EAClC;AACF,CAAA;ACzWA,IAAM,2BAAA,GAA8B,GAAA;AAE7B,IAAM,iBAAN,MAAqB;AAAA,EAClB,SAAA,GAAoB,CAAA;AAAA,EACpB,WAAA,GAAsB,CAAA;AAAA,EACtB,kBAA4B,EAAC;AAAA,EAErC,kBAAA,GAA2B;AACzB,IAAA,IAAA,CAAK,SAAA,EAAA;AAAA,EACP;AAAA,EAEA,oBAAA,GAA6B;AAC3B,IAAA,IAAA,CAAK,WAAA,EAAA;AAAA,EACP;AAAA,EAEA,qBAAqB,MAAA,EAAsB;AACzC,IAAA,IAAA,CAAK,eAAA,CAAgB,KAAK,MAAM,CAAA;AAGhC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAA,GAAS,2BAAA,EAA6B;AAC7D,MAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,gBAAA,GAA2B;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,WAAA;AACpC,IAAA,OAAO,KAAA,KAAU,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,EAC5C;AAAA,EAEA,wBAAA,GAAmC;AACjC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAE9C,IAAA,MAAM,GAAA,GAAM,KAAK,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAC1D,IAAA,OAAO,GAAA,GAAM,KAAK,eAAA,CAAgB,MAAA;AAAA,EACpC;AAAA,EAEA,QAAA,GAAW;AACT,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,KAAK,gBAAA,EAAiB;AAAA,MACrC,qBAAA,EAAuB,KAAK,wBAAA,EAAyB;AAAA,MACrD,gBAAA,EAAkB,KAAK,eAAA,CAAgB;AAAA,KACzC;AAAA,EACF;AACF,CAAA;AAEO,IAAM,mBAAN,MAAuB;AAAA,EACX,OAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACD,QAAA;AAAA,EACC,QAAA;AAAA,EAEjB,WAAA,CAAY,OAAA,GAAmC,EAAC,EAAG;AACjD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,MAAA,CAAO;AAAA,MAC3B,MAAA,EAAQ,IAAA;AAAA,MACR,gBAAA,EAAkB,IAAA;AAAA,MAClB,QAAA,EAAU,CAAA;AAAA,MACV,WAAA,EAAa,SAAA;AAAA,MACb,eAAA,EAAiB,KAAA;AAAA,MACjB,GAAG;AAAA,KACc,CAAA;AAEnB,IAAA,IAAA,CAAK,KAAA,uBAAY,GAAA,EAAI;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,cAAA,EAAe;AAClC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,oBAAA,EAAqB;AACzC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,eAAA,EAAgB;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CACJ,MAAA,EACA,KAAA,EACA,OAAA,EAKA,eAAwB,KAAA,EACP;AACjB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,OAAO,YAAY,CAAA;AAElE,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC5B,MAAA,IAAA,CAAK,QAAQ,kBAAA,EAAmB;AAChC,MAAA,OAAO,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AAAA,IACtC;AAEA,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAElC,IAAA,IAAI;AAEF,MAAA,IAAI,WAAA,GAAc,MAAA;AAClB,MAAA,IAAI,UAAA,GAAa,KAAA;AAGjB,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,CAAA,KAAA,KAAS,KAAA,CAAM,WAAW,UAAU,CAAA;AAChE,QAAA,UAAA,GAAa,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,UAAU,CAAA;AAAA,MAC9D;AAEA,MAAA,IAAI,YAAY,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,MAAA,IAAU,QAAQ,WAAA,CAAA,EAAc;AACzE,QAAA,MAAM,WAAW,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,WAAA,EAAa,YAAY,OAAO,CAAA;AAC9E,QAAA,WAAA,GAAc,QAAA,CAAS,cAAA;AACvB,QAAA,UAAA,GAAa,QAAA,CAAS,aAAA;AAAA,MACxB;AAEA,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,oBAAA,CAAqB,aAAa,UAAU,CAAA;AACxE,MAAA,MAAM,SAAS,IAAA,CAAK,QAAA,CAAS,WAAA,CAAY,KAAA,EAAO,KAAK,OAAO,CAAA;AAE5D,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,KAAK,CAAA;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,WAAA,CAAY,GAAA,KAAQ,SAAS,CAAA;AAC/D,MAAA,IAAA,CAAK,QAAQ,oBAAA,EAAqB;AAElC,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,WAAA,CAAY,GAAA,KAAQ,SAAS,CAAA;AAC/D,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CACJ,UAAA,GAAqB,SAAA,EACrB,OAAA,EAKA,eAAwB,KAAA,EACP;AACjB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,gBAAA,CAAiB,UAAU,CAAA;AACrD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA;AAEnD,IAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,KAAA,EAAO,SAAS,YAAY,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,iBAAiB,UAAA,EAA4C;AACxE,IAAA,MAAM,SAAA,GAAiBE,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,QAAQ,CAAA;AAEhD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAMC,QAAAA,CAAG,OAAA,CAAQ,SAAS,CAAA;AACxC,MAAA,MAAM,YAAY,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,QAAA,CAAS,OAAO,CAAC,CAAA;AAE7D,MAAA,MAAM,SAAwB,EAAC;AAE/B,MAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,IAAI,CAAA;AAC1C,UAAA,MAAM,OAAA,GAAU,MAAMC,QAAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AACnD,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAGjC,UAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,CAAQ,EAAA,EAAI;AACvC,YAAA,MAAM,cAAc,MAAA,CAAO,OAAA;AAE3B,YAAC,YAAoB,WAAA,GAAc,IAAA;AACnC,YAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,UACzB,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yBAAA,EAAkB,IAAI,CAAA,8BAAA,CAAgC,CAAA;AAAA,UACrE;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,kCAAA,EAAgC,IAAI,CAAA,CAAA,CAAA,EAAK,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC9G;AAAA,MACF;AAEA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC9D,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0CAAA,EAAmC,SAAS,CAAA,CAAE,CAAA;AAC3D,QAAA,OAAA,CAAQ,KAAK,CAAA,qEAAA,CAAgE,CAAA;AAAA,MAC/E,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK,2CAAsC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MAC3G;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,gBAAgB,UAAA,EAA2C;AACtE,IAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,OAAO,CAAA;AAE9C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAMC,QAAAA,CAAG,OAAA,CAAQ,QAAQ,CAAA;AACvC,MAAA,MAAM,YAAY,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,QAAA,CAAS,OAAO,CAAC,CAAA;AAE7D,MAAA,MAAM,QAAsB,EAAC;AAE7B,MAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,QAAA,EAAU,IAAI,CAAA;AACzC,UAAA,MAAM,OAAA,GAAU,MAAMC,QAAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AACnD,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAGjC,UAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,CAAQ,EAAA,EAAI;AACvC,YAAA,MAAM,aAAa,MAAA,CAAO,OAAA;AAE1B,YAAC,WAAmB,WAAA,GAAc,IAAA;AAGlC,YAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,UACvB,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,wBAAA,EAAiB,IAAI,CAAA,8BAAA,CAAgC,CAAA;AAAA,UACpE;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,iCAAA,EAA+B,IAAI,CAAA,CAAA,CAAA,EAAK,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC7G;AAAA,MACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC9D,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yCAAA,EAAkC,QAAQ,CAAA,CAAE,CAAA;AACzD,QAAA,OAAA,CAAQ,KAAK,CAAA,qEAAA,CAAgE,CAAA;AAAA,MAC/E,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK,0CAAqC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MAC1G;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,QAAA,EAA0B;AAChD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AACrC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,WAAA,CAAY,KAAA,EAAO,KAAK,OAAO,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAA,CAAiB,MAAA,EAAuB,KAAA,EAAqB,YAAA,GAAwB,KAAA,EAAe;AAE1G,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAC,CAAC,EAAE,IAAA,EAAK;AAC1D,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAC,CAAC,EAAE,IAAA,EAAK;AAExD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AACzC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACvC,IAAA,MAAM,cAAc,IAAA,CAAK,UAAA,CAAW,KAAK,SAAA,CAAU,IAAA,CAAK,OAAO,CAAC,CAAA;AAChE,IAAA,MAAM,YAAA,GAAe,eAAe,eAAA,GAAkB,aAAA;AAEtD,IAAA,OAAO,WAAW,SAAS,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,WAAW,IAAI,YAAY,CAAA,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAU,KAAA,EAAyB;AACzC,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAA,GAAA,CAAS,IAAA,IAAQ,CAAA,IAAK,IAAA,GAAQ,IAAA,CAAK,WAAW,IAAI,CAAA;AAClD,MAAA,IAAA,GAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AACA,IAAA,OAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAW,GAAA,EAAqB;AACtC,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC7B,MAAA,IAAA,GAAA,CAAS,IAAA,IAAQ,KAAK,IAAA,GAAQ,IAAA;AAC9B,MAAA,IAAA,GAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAOA,UAAA,GAAa;AACX,IAAA,OAAO,IAAA,CAAK,QAAQ,QAAA,EAAS;AAAA,EAC/B;AACF,CAAA;;;ACrSA,IAAA,wBAAA,GAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,aAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACEO,IAAM,WAAA,GAA2B;AAAA;AAAA,EAEtC;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,iDAAA;AAAA,IACT,QAAA,EAAU,WAAA;AAAA,IACV,QAAA,EAAU,MAAA;AAAA,IACV,OAAA,EAAS,uCAAA;AAAA,IACT,UAAA,EAAY,+CAAA;AAAA,IACZ,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,0DAAA;AAAA,IACT,QAAA,EAAU,WAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,OAAA,EAAS,+BAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,8BAAA;AAAA,IACT,QAAA,EAAU,eAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,uCAAA;AAAA,IACT,UAAA,EAAY,gDAAA;AAAA,IACZ,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,wBAAA;AAAA,IACT,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,4CAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,sCAAA;AAAA,IACT,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,OAAA,EAAS,+BAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA;AAAA,EAGA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EACE,qEAAA;AAAA,IACF,QAAA,EAAU,kBAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,4BAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,mBAAA;AAAA,IACT,QAAA,EAAU,kBAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,4BAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EAAS,2CAAA;AAAA,IACT,QAAA,EAAU,kBAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,qCAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA;AAAA,EAGA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,OAAA,EACE,+EAAA;AAAA,IACF,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,MAAA;AAAA,IACV,OAAA,EAAS,4BAAA;AAAA,IACT,UAAA,EAAY,uCAAA;AAAA,IACZ,cAAA,EAAgB;AAAA;AAEpB,CAAA;;;ACjFA,IAAM,kBAAA,GAAqB,GAAA;AAM3B,SAAS,mBAAA,CACP,MAAA,EACA,IAAA,EACA,IAAA,EACQ;AACR,EAAA,OAAOJ,UAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,CAAE,OAAO,KAAK,CAAA;AAC9E;AAKA,SAAS,gBAAgB,OAAA,EAAyB;AAChD,EAAA,IAAI,OAAA,CAAQ,UAAU,kBAAA,EAAoB;AACxC,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,kBAAA,GAAqB,CAAC,CAAA,GAAI,KAAA;AACpD;AAKA,SAAS,aAAA,CAAc,SAAiB,KAAA,EAAuB;AAC7D,EAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA;AAC7C;AAKA,SAAS,cAAA,CAAe,SAAiB,UAAA,EAA4B;AACnE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,OAAA,EAAS,UAAU,CAAA;AACpD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,GAAa,CAAC,CAAA,IAAK,EAAA;AACtC,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAM,CAAA;AACpC;AAOO,IAAM,gBAAN,MAAwC;AAAA,EACpC,IAAA,GAAO,OAAA;AAAA,EACR,KAAA;AAAA,EAER,YAAY,OAAA,EAAoB;AAC9B,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACjC,MAAA,IAAA,CAAK,KAAA,GAAQ,YAAY,MAAA,CAAO,CAAC,MAAM,OAAA,CAAQ,QAAA,CAAS,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,IAC/D,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,GAAQ,WAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,CAAO,OAAA,EAAiB,QAAA,EAAsC;AAClE,IAAA,MAAM,WAAsB,EAAC;AAE7B,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,KAAA,EAAO;AAE7B,MAAA,MAAM,OAAA,GAAU,IAAI,MAAA,CAAO,IAAA,CAAK,QAAQ,MAAA,EAAQ,IAAA,CAAK,QAAQ,KAAK,CAAA;AAElE,MAAA,IAAI,KAAA;AACJ,MAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,QAAA,MAAM,IAAA,GAAO,aAAA,CAAc,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA;AAC/C,QAAA,MAAM,OAAA,GAAU,cAAA,CAAe,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA;AAEnD,QAAA,MAAM,OAAA,GAAmB;AAAA,UACvB,IAAI,UAAA,EAAW;AAAA,UACf,QAAQ,IAAA,CAAK,EAAA;AAAA,UACb,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,IAAA,EAAM,QAAA;AAAA,UACN,IAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,WAAA,EAAa,mBAAA,CAAoB,IAAA,CAAK,EAAA,EAAI,UAAU,IAAI,CAAA;AAAA,UACxD,UAAA,EAAY;AAAA,SACd;AACA,QAAA,IAAI,IAAA,CAAK,UAAA,EAAY,OAAA,CAAQ,UAAA,GAAa,IAAA,CAAK,UAAA;AAC/C,QAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,OAAA,CAAQ,cAAA,GAAiB,IAAA,CAAK,cAAA;AACvD,QAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,MACvB;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AACF,CAAA;AC5FA,IAAMK,mBAAAA,GAAqB,GAAA;AAG3B,IAAM,qBAAA,GACJ,gGAAA;AAGF,IAAM,eAAA,GACJ,sFAAA;AAGF,IAAM,iBAAA,GACJ,gEAAA;AAYF,IAAM,eAAA,GAAmC;AAAA,EACvC;AAAA,IACE,EAAA,EAAI,UAAA;AAAA,IACJ,OAAA,EAAS,qBAAA;AAAA,IACT,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAA,EAAS,kCAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,UAAA;AAAA,IACJ,OAAA,EAAS,eAAA;AAAA,IACT,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAA,EAAS,kDAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,UAAA;AAAA,IACJ,OAAA,EAAS,iBAAA;AAAA,IACT,QAAA,EAAU,sBAAA;AAAA,IACV,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAA,EAAS,oDAAA;AAAA,IACT,UAAA,EAAY;AAAA;AAEhB,CAAA;AAKA,SAASC,oBAAAA,CACP,MAAA,EACA,IAAA,EACA,IAAA,EACQ;AACR,EAAA,OAAON,UAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,CAAE,OAAO,KAAK,CAAA;AAC9E;AAKA,SAASO,iBAAgB,OAAA,EAAyB;AAChD,EAAA,IAAI,OAAA,CAAQ,UAAUF,mBAAAA,EAAoB;AACxC,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAGA,mBAAAA,GAAqB,CAAC,CAAA,GAAI,KAAA;AACpD;AAKA,SAASG,cAAAA,CAAc,SAAiB,KAAA,EAAuB;AAC7D,EAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA;AAC7C;AAKA,SAASC,eAAAA,CAAe,SAAiB,UAAA,EAA4B;AACnE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,UAAA,GAAaD,cAAAA,CAAc,OAAA,EAAS,UAAU,CAAA;AACpD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,GAAa,CAAC,CAAA,IAAK,EAAA;AACtC,EAAA,OAAOD,gBAAAA,CAAgB,IAAA,CAAK,IAAA,EAAM,CAAA;AACpC;AAOO,IAAM,oBAAN,MAA4C;AAAA,EACxC,IAAA,GAAO,WAAA;AAAA,EAEhB,MAAM,MAAA,CAAO,OAAA,EAAiB,QAAA,EAAsC;AAClE,IAAA,MAAM,WAAsB,EAAC;AAE7B,IAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAElC,MAAA,MAAM,OAAA,GAAU,IAAI,MAAA,CAAO,IAAA,CAAK,QAAQ,MAAA,EAAQ,IAAA,CAAK,QAAQ,KAAK,CAAA;AAElE,MAAA,IAAI,KAAA;AACJ,MAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,QAAA,MAAM,IAAA,GAAOC,cAAAA,CAAc,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA;AAC/C,QAAA,MAAM,OAAA,GAAUC,eAAAA,CAAe,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA;AAEnD,QAAA,MAAM,OAAA,GAAmB;AAAA,UACvB,IAAIC,UAAAA,EAAW;AAAA,UACf,QAAQ,IAAA,CAAK,EAAA;AAAA,UACb,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,IAAA,EAAM,QAAA;AAAA,UACN,IAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,WAAA,EAAaJ,oBAAAA,CAAoB,IAAA,CAAK,EAAA,EAAI,UAAU,IAAI,CAAA;AAAA,UACxD,YAAY,IAAA,CAAK;AAAA,SACnB;AACA,QAAA,IAAI,IAAA,CAAK,UAAA,EAAY,OAAA,CAAQ,UAAA,GAAa,IAAA,CAAK,UAAA;AAC/C,QAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,MACvB;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AACF,CAAA;AC9HA,IAAMD,mBAAAA,GAAqB,GAAA;AAM3B,SAASC,oBAAAA,CACP,MAAA,EACA,IAAA,EACA,IAAA,EACQ;AACR,EAAA,OAAON,UAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,CAAE,OAAO,KAAK,CAAA;AAC9E;AAKA,SAASO,iBAAgB,OAAA,EAAyB;AAChD,EAAA,IAAI,OAAA,CAAQ,UAAUF,mBAAAA,EAAoB;AACxC,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAGA,mBAAAA,GAAqB,CAAC,CAAA,GAAI,KAAA;AACpD;AAKA,SAAS,gBAAgB,QAAA,EAA+C;AACtE,EAAA,MAAM,eAAA,GAAqC;AAAA,IACzC,WAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,uBAAA;AAAA,IACA,qBAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,eAAA,CAAgB,SAAS,QAA2B,CAAA;AAC7D;AAUO,IAAM,kBAAN,MAA6C;AAAA,EAC1C,QAAA;AAAA,EACA,MAAA;AAAA,EAER,WAAA,CAAY,UAAkB,MAAA,EAAgB;AAC5C,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAgB,QAAA,EAA6C;AACjE,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,QAAA,EAAU;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,UAAU;AAAA,KAClC,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,MAAM,CAAA,eAAA,EAAkB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC5E;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,WAAA,EAAyC;AACjE,IAAA,OAAO,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC9B,MAAA,MAAM,WAA4B,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,GAC1D,IAAI,QAAA,GACJ,cAAA;AAEJ,MAAA,MAAM,OAAA,GAAmB;AAAA,QACvB,IAAIK,UAAAA,EAAW;AAAA,QACf,MAAA,EAAQ,IAAI,MAAA,IAAU,SAAA;AAAA,QACtB,QAAA;AAAA,QACA,UAAU,GAAA,CAAI,QAAA;AAAA,QACd,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,OAAA,EAASH,gBAAAA,CAAgB,GAAA,CAAI,OAAA,IAAW,EAAE,CAAA;AAAA,QAC1C,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,QAAA,EAAU,KAAA;AAAA,QACV,WAAA,EAAaD,oBAAAA;AAAA,UACX,IAAI,MAAA,IAAU,SAAA;AAAA,UACd,GAAA,CAAI,IAAA;AAAA,UACJ,GAAA,CAAI;AAAA,SACN;AAAA,QACA,UAAA,EAAY,IAAI,UAAA,IAAc;AAAA,OAChC;AAEA,MAAA,IAAI,GAAA,CAAI,UAAA,EAAY,OAAA,CAAQ,UAAA,GAAa,GAAA,CAAI,UAAA;AAC7C,MAAA,IAAI,GAAA,CAAI,cAAA,EAAgB,OAAA,CAAQ,cAAA,GAAiB,GAAA,CAAI,cAAA;AAErD,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AACF,CAAA;;;AC3GO,IAAM,wBAAN,MAA4B;AAAA,EACzB,iBAA6B,EAAC;AAAA,EAC9B,WAAA;AAAA,EACA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR,YAAY,MAAA,EAAgC;AAE1C,IAAA,IAAI,MAAA,EAAQ,KAAA,EAAO,OAAA,KAAY,KAAA,EAAO,CAEtC,MAAO;AACL,MAAA,IAAA,CAAK,eAAe,IAAA,CAAK,IAAI,cAAc,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,IAClE;AAGA,IAAA,IAAI,MAAA,EAAQ,WAAW,OAAA,EAAS;AAC9B,MAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,iBAAA,EAAmB,CAAA;AAAA,IAClD;AAGA,IAAA,IAAI,MAAA,EAAQ,GAAA,EAAK,OAAA,IAAW,MAAA,CAAO,IAAI,QAAA,EAAU;AAC/C,MAAA,IAAA,CAAK,YAAY,MAAA,CAAO,GAAA;AACxB,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,oBAAoB,CAAA;AAC/C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAA,CAAK,cAAc,IAAI,eAAA,CAAgB,MAAA,CAAO,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,MACpE;AAAA,IAEF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,MAAA,CAAO,OAAA,EAAiB,QAAA,EAAsC;AAElE,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,iBAAA,CAAkB,SAAS,QAAQ,CAAA;AAGpE,IAAA,IAAI,cAAyB,EAAC;AAC9B,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,UAAA,EAAW,EAAG;AACzC,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,iBAAA,CAAkB,aAAA,EAAe,SAAS,QAAQ,CAAA;AAC1E,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,IAAI;AACF,UAAA,WAAA,GAAc,MAAM,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,UAAU,CAAA;AAC/D,UAAA,IAAA,CAAK,cAAA,CAAe,WAAW,MAAM,CAAA;AAAA,QACvC,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAGA,IAAA,OAAO,KAAK,wBAAA,CAAyB,CAAC,GAAG,aAAA,EAAe,GAAG,WAAW,CAAC,CAAA;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAA,CACZ,OAAA,EACA,QAAA,EACoB;AACpB,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC5B,IAAA,CAAK,eAAe,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,OAAA,EAAS,QAAQ,CAAC;AAAA,KAC5D;AACA,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,iBAAA,CACN,QAAA,EACA,OAAA,EACA,QAAA,EACe;AACf,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AAEzC,IAAA,OAAO,QAAA,CACJ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,GAAG,CAAA,CAChC,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,WAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,MACjC,SAAS,IAAA,CAAK,GAAA,CAAI,MAAM,MAAA,EAAQ,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,MAC1C,QAAA,EAAU,IAAA;AAAA,MACV,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA,CAAE,IAAA,GAAO,CAAC,GAAG,CAAA,CAAE,IAAA,GAAO,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,MACnE,aAAA,EAAe,CAAC,CAAA,CAAE,QAAA,EAAU,EAAE,QAAQ;AAAA,KACxC,CAAE,CAAA;AAAA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,UAAA,GAAsB;AAC5B,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,KAAA;AAE5B,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,SAAA,KAAc,WAAA,EAAa,OAAO,IAAA;AAErD,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,SAAA,KAAc,OAAA,EAAS;AACxC,MAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC5B,QAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,IAAA,CAAK,UAAU,SAAS,CAAA,uBAAQ,IAAA,EAAK;AAC9D,QAAA,IAAI,SAAS,OAAO,KAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK,SAAA,CAAU,aAAA,IAAiB,CAAA,IAAK,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,KAAA,EAAqB;AAC1C,IAAA,IAAI,IAAA,CAAK,SAAA,EAAW,aAAA,KAAkB,MAAA,EAAW;AAC/C,MAAA,IAAA,CAAK,SAAA,CAAU,gBAAgB,IAAA,CAAK,GAAA;AAAA,QAClC,CAAA;AAAA,QACA,IAAA,CAAK,UAAU,aAAA,GAAgB;AAAA,OACjC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,yBAAyB,QAAA,EAAgC;AAC/D,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM;AAC5B,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,WAAW,GAAG,OAAO,KAAA;AACpC,MAAA,IAAA,CAAK,GAAA,CAAI,EAAE,WAAW,CAAA;AACtB,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,QAAA,EAA0B;AAC/C,IAAA,MAAM,MAAM,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,IAAO,WAAA,EAAY;AACnD,IAAA,MAAM,GAAA,GAA8B;AAAA,MAClC,EAAA,EAAI,YAAA;AAAA,MACJ,GAAA,EAAK,YAAA;AAAA,MACL,EAAA,EAAI,YAAA;AAAA,MACJ,GAAA,EAAK,YAAA;AAAA,MACL,EAAA,EAAI,QAAA;AAAA,MACJ,EAAA,EAAI,IAAA;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,EAAA,EAAI,MAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AACA,IAAA,OAAO,GAAA,CAAI,GAAA,IAAO,EAAE,CAAA,IAAK,SAAA;AAAA,EAC3B;AACF,CAAA;;;AC7LA,IAAA,sBAAA,GAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,YAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACUO,IAAM,gBAAN,MAAoB;AAAA,EACjB,UAAA;AAAA,EACA,SAAA;AAAA,EAER,YAAY,IAAA,EAAiC;AAC3C,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AACvB,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WAAA,CAAY,KAAA,EAAoB,QAAA,EAAqC;AACzE,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC9B,MAAA,OAAO,EAAC;AAAA,IACV;AAGA,IAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,qBAAA,EAAsB;AAG3D,IAAA,MAAM,cAAc,CAAC,GAAG,iBAAA,EAAmB,GAAG,MAAM,OAAO,CAAA;AAG3D,IAAA,IAAI,KAAA,CAAM,YAAA,IAAgB,IAAA,CAAK,SAAA,EAAW;AACxC,MAAA,OAAO,KAAK,kBAAA,CAAmB,KAAA,CAAM,YAAA,EAAc,KAAA,CAAM,SAAS,WAAW,CAAA;AAAA,IAC/E;AAGA,IAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAM,OAAA,EAAS;AAAA,MACtD,MAAA,EAAQ,WAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,kBAAA,CACZ,WAAA,EACA,eAAA,EACA,QAAA,EACmB;AACnB,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AAEnB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AAErC,IAAA,IAAI;AAEF,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO,CAAC,MAAA,EAAQ,aAAA,EAAe,CAAA,EAAG,WAAW,CAAA,MAAA,CAAQ,CAAC,CAAA;AACnG,MAAA,IAAI,UAAA,CAAW,aAAa,CAAA,EAAG;AAC7B,QAAA,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MAClF;AAGA,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,SAAA,CAAU,KAAK,KAAA,EAAO,CAAC,QAAA,EAAU,aAAa,CAAC,CAAA;AAC/E,MAAA,IAAI,YAAA,CAAa,aAAa,CAAA,EAAG;AAC/B,QAAA,YAAA,CAAa,MAAA,CAAO,MAAM,IAAI,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AAEhE,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK;AAChC,UAAA,IAAI,IAAA,EAAM,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AAAA,QACjC,CAAC,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,OAAO,CAAC,UAAA,EAAY,UAAA,EAAY,oBAAoB,CAAC,CAAA;AACvG,MAAA,IAAI,eAAA,CAAgB,aAAa,CAAA,EAAG;AAClC,QAAA,eAAA,CAAgB,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MACvF;AAAA,IACF,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAO,EAAC;AAAA,IACV;AAGA,IAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA;AAC/C,IAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,MAAA,OAAO,EAAC;AAAA,IACV;AAGA,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,UAAA,CAAW,KAAK,eAAA,EAAiB;AAAA,MAChE,MAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AAGD,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,aAAa,CAAA;AACzC,IAAA,MAAM,WAAW,eAAA,CAAgB,MAAA,CAAO,OAAK,WAAA,CAAY,GAAA,CAAI,CAAC,CAAC,CAAA;AAE/D,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,qBAAA,GAA2C;AACvD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAO,YAAY,CAAA;AACxD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,KAAK,YAAY,CAAA;AACvD,MAAA,OAAO,IAAA,CAAK,eAAe,OAAO,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,OAAA,EAA2B;AAChD,IAAA,OAAO,OAAA,CACJ,MAAM,IAAI,CAAA,CACV,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CACzB,OAAO,CAAC,IAAA,KAAS,IAAA,IAAQ,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA,CAC9C,GAAA,CAAI,CAAC,OAAA,KAAY;AAGhB,MAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,QAAA,OAAO,MAAM,OAAO,CAAA,EAAA,CAAA;AAAA,MACtB;AAEA,MAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1B,QAAA,OAAO,MAAM,OAAO,CAAA,CAAA;AAAA,MACtB;AAEA,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACL;AACF,CAAA;;;ACxJO,IAAM,gBAAN,MAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOzB,MAAM,QAAA,EAAgC;AAKpC,IAAA,OAAO,QAAA;AAAA,EACT;AACF,CAAA;;;ACRA,IAAM,UAAA,GAAa,GAAA;AAcZ,IAAM,sBAAN,MAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ/B,YAAoB,IAAA,EAAiC;AAAjC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAElB,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,MAAM,SAAA,GAAuC;AAAA,QAC3C,YAAY,IAAA,CAAK;AAAA,OACnB;AACA,MAAA,IAAI,KAAK,SAAA,EAAW;AAClB,QAAA,SAAA,CAAU,YAAY,IAAA,CAAK,SAAA;AAAA,MAC7B;AACA,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,aAAA,CAAc,SAAS,CAAA;AAAA,IAClD;AACA,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,aAAA,EAAc;AAAA,EACzC;AAAA,EAnBQ,aAAA;AAAA,EACA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BR,MAAM,cAAc,KAAA,EAAiD;AACnE,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC5B,MAAA,OAAO,IAAA,CAAK,kBAAkB,SAAS,CAAA;AAAA,IACzC;AAGA,IAAA,MAAM,EAAE,UAAU,YAAA,EAAc,SAAA,KAAc,MAAM,IAAA,CAAK,sBAAA,CAAuB,KAAA,CAAM,KAAK,CAAA;AAG3F,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,EAAC;AAClC,IAAA,MAAM,EAAE,WAAA,EAAa,iBAAA,KAAsB,IAAA,CAAK,eAAA,CAAgB,UAAU,OAAO,CAAA;AAGjF,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,WAAW,CAAA;AAG3D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE9B,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,cAAA;AAAA,MACV,OAAA,EAAS,IAAA,CAAK,gBAAA,CAAiB,cAAc,CAAA;AAAA,MAC7C,YAAA,EAAc,MAAM,KAAA,CAAM,MAAA;AAAA,MAC1B,YAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAW,CAAC,GAAG,IAAI,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,MACjC,OAAA,EAAS;AAAA,QACP,YAAA,EAAc,iBAAA;AAAA,QACd,KAAK,cAAA,CAAe;AAAA;AACtB,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAM,OAAA,EAA6C;AACvD,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,UAAA,IAAc,CAAC,KAAK,aAAA,EAAe;AAChD,MAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;AAAA,IACzF;AAEA,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,GAAA,EAAI;AAG/C,IAAA,MAAM,YAAY,MAAM,IAAA,CAAK,cAAc,WAAA,CAAY,OAAA,CAAQ,OAAO,OAAO,CAAA;AAE7E,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,IAAA,CAAK,kBAAkB,SAAS,CAAA;AAAA,IACzC;AAGA,IAAA,MAAM,QAAuB,EAAC;AAC9B,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,UAAU,MAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAK,QAAQ,CAAA;AACxD,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA;AAAA,MACxC,CAAA,CAAA,MAAQ;AAEN,QAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,UAA0B,EAAC;AAC/B,IAAA,IAAI,IAAA,CAAK,KAAK,YAAA,EAAc;AAC1B,MAAA,IAAI;AACF,QAAA,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,iBAAA,EAAkB;AAAA,MAC3D,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAGA,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,cAAc,EAAE,KAAA,EAAO,SAAS,CAAA;AAG1D,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,QAAA,EAAU,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,KACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,uBACZ,KAAA,EAKC;AACD,IAAA,MAAM,cAAyB,EAAC;AAChC,IAAA,MAAM,YAA4B,EAAC;AACnC,IAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,IAAA,MAAM,OAAA,GAAU,KAAK,aAAA,CAAc,KAAA,EAAO,MAAM,MAAA,GAAS,GAAA,GAAO,UAAA,GAAa,KAAA,CAAM,MAAM,CAAA;AAEzF,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI;AACF,UAAA,YAAA,IAAgB,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA;AAEzC,UAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,IAAA,CAAK,gBAAgB,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,IAAI,CAAA;AAEnF,UAAA,KAAA,MAAW,WAAW,YAAA,EAAc;AAClC,YAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AACxB,YAAA,IAAI,CAAC,SAAA,CAAU,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACzC,cAAA,SAAA,CAAU,IAAA,CAAK,QAAQ,QAAQ,CAAA;AAAA,YACjC;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAEN,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,QAAA,EAAU,WAAA,EAAa,YAAA,EAAc,SAAA,EAAU;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,CAAiB,OAAY,SAAA,EAA0B;AAC7D,IAAA,MAAM,UAAiB,EAAC;AACxB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,SAAA,EAAW;AAChD,MAAA,OAAA,CAAQ,KAAK,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IAC5C;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAA,CACN,UACA,OAAA,EACuD;AACvD,IAAA,MAAM,kBAAA,GAAqB,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAC,CAAA;AACpE,IAAA,MAAM,cAAc,QAAA,CAAS,MAAA;AAAA,MAC3B,CAAC,CAAA,KAAM,CAAC,kBAAA,CAAmB,GAAA,CAAI,EAAE,WAAW;AAAA,KAC9C;AACA,IAAA,MAAM,iBAAA,GAAoB,QAAA,CAAS,MAAA,GAAS,WAAA,CAAY,MAAA;AACxD,IAAA,OAAO,EAAE,aAAa,iBAAA,EAAkB;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,QAAA,EAAmC;AAC1D,IAAA,MAAM,OAAA,GAAwB;AAAA,MAC5B,OAAO,QAAA,CAAS,MAAA;AAAA,MAChB,UAAA,EAAY,EAAE,QAAA,EAAU,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAAA,MAC/D,YAAY,EAAC;AAAA,MACb,YAAY,EAAE,KAAA,EAAO,GAAG,SAAA,EAAW,CAAA,EAAG,KAAK,CAAA;AAAE,KAC/C;AAEA,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,OAAA,CAAQ,UAAA,CAAW,QAAQ,QAAQ,CAAA,EAAA;AACnC,MAAA,OAAA,CAAQ,UAAA,CAAW,QAAQ,QAAQ,CAAA,GAAA,CAChC,QAAQ,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAA,IAAK,CAAA,IAAK,CAAA;AAChD,MAAA,OAAA,CAAQ,UAAA,CAAW,QAAQ,QAAQ,CAAA,EAAA;AAAA,IACrC;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,SAAA,EAAgC;AACxD,IAAA,OAAO;AAAA,MACL,UAAU,EAAC;AAAA,MACX,OAAA,EAAS;AAAA,QACP,KAAA,EAAO,CAAA;AAAA,QACP,UAAA,EAAY,EAAE,QAAA,EAAU,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAAA,QAC/D,YAAY,EAAC;AAAA,QACb,YAAY,EAAE,KAAA,EAAO,GAAG,SAAA,EAAW,CAAA,EAAG,KAAK,CAAA;AAAE,OAC/C;AAAA,MACA,YAAA,EAAc,CAAA;AAAA,MACd,YAAA,EAAc,CAAA;AAAA,MACd,QAAA,EAAU,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAAA,MACvB,WAAW,EAAC;AAAA,MACZ,OAAA,EAAS,EAAE,YAAA,EAAc,CAAA,EAAG,KAAK,CAAA;AAAE,KACrC;AAAA,EACF;AACF,CAAA;;;ACpPO,IAAM,eAAN,MAA4C;AAAA,EACjD,YAAoB,eAAA,EAAmC;AAAnC,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAAA,EAAoC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxD,MAAM,iBAAA,GAA6C;AACjD,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,eAAA,CAAgB,cAAA,EAAe;AAC9D,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,SAAyB,EAAC;AAEhC,IAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,UAAA,IAAc,CAAC,EAAE,QAAA,EAAU;AAC1C,MAAA,MAAM,OAAO,CAAA,CAAE,QAAA;AACf,MAAA,IAAI,OAAO,IAAA,CAAK,WAAA,KAAgB,QAAA,EAAU;AAC1C,MAAA,IAAI,KAAK,SAAA,IAAa,IAAI,KAAK,IAAA,CAAK,SAAS,KAAK,GAAA,EAAK;AAEvD,MAAA,MAAM,MAAA,GAAuB;AAAA,QAC3B,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AACA,MAAA,IAAI,KAAK,SAAA,EAAW;AAClB,QAAA,MAAA,CAAO,SAAA,GAAY,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,MAC5C;AACA,MAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,IACpB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,WAAA,EAAuC;AAC3D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAC7C,IAAA,OAAO,QAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,WAAW,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAuB,WAAA,EAA8C;AACzE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,eAAA,CAAgB,oBAAoB,WAAW,CAAA;AAC3E,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,SAAyB,EAAC;AAEhC,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,UAAA,IAAc,CAAC,EAAE,QAAA,EAAU;AAC1C,MAAA,MAAM,OAAO,CAAA,CAAE,QAAA;AACf,MAAA,IAAI,OAAO,IAAA,CAAK,WAAA,KAAgB,QAAA,EAAU;AAC1C,MAAA,IAAI,KAAK,SAAA,IAAa,IAAI,KAAK,IAAA,CAAK,SAAS,KAAK,GAAA,EAAK;AAEvD,MAAA,MAAM,MAAA,GAAuB;AAAA,QAC3B,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACZ;AACA,MAAA,IAAI,KAAK,SAAA,EAAW;AAClB,QAAA,MAAA,CAAO,SAAA,GAAY,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,MAC5C;AACA,MAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,IACpB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAA;;;ACnEO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAAoB,eAAA,EAAmC;AAAnC,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAAA,EAAqC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzD,MAAM,YAAA,CACJ,OAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,EAAE,OAAA,EAAS,WAAA,EAAa,aAAA,EAAe,SAAA,EAAW,eAAc,GACpE,OAAA;AAEF,IAAA,MAAM,QAAA,GAA2B;AAAA,MAC/B,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,MAAM,OAAA,CAAQ;AAAA,KAChB;AAEA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,QAAA,CAAS,SAAA,GAAY,SAAA;AAAA,IACvB;AAEA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,QAAA,CAAS,aAAA,GAAgB,aAAA;AAAA,IAC3B;AAEA,IAAA,MAAM,KAAK,eAAA,CAAgB,MAAA;AAAA,MACzB;AAAA,QACE,UAAA,EAAY,WAAA;AAAA,QACZ,QAAA,EAAU,WAAA;AAAA,QACV,IAAA,EAAM,UAAA;AAAA,QACN,MAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAS,aAAA;AAAA,QACT;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CACJ,QAAA,EACA,WAAA,EACA,eACA,OAAA,EACe;AACf,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,IAAA,CAAK,YAAA;AAAA,QACT;AAAA,UACE,OAAA;AAAA,UACA,WAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;;;ACtEA,IAAA,oBAAA,GAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,0BAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACUO,IAAM,WAAA,GAAN,MAAM,YAAA,SAAoB,KAAA,CAAM;AAAA,EACrC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,YAAA,CAAY,SAAS,CAAA;AAAA,EACnD;AACF,CAAA;AAKO,IAAM,kBAAA,GAAN,MAAM,mBAAA,SAA2B,WAAA,CAAY;AAAA,EAClC,OAAA;AAAA,EAEhB,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,CAAA,eAAA,EAAkB,OAAO,CAAA,CAAE,CAAA;AACjC,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,mBAAA,CAAmB,SAAS,CAAA;AAAA,EAC1D;AACF,CAAA;AAKO,IAAM,wBAAA,GAAN,MAAM,yBAAA,SAAiC,WAAA,CAAY;AAAA,EACxC,YAAA;AAAA,EACA,UAAA;AAAA,EAEhB,WAAA,CAAY,cAAsB,UAAA,EAAoB;AACpD,IAAA,KAAA,CAAM,CAAA,qBAAA,EAAwB,YAAY,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAE,CAAA;AACvE,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,yBAAA,CAAyB,SAAS,CAAA;AAAA,EAChE;AACF,CAAA;AAKO,IAAM,sBAAA,GAAN,MAAM,uBAAA,SAA+B,WAAA,CAAY;AAAA,EACtD,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,sEAAsE,CAAA;AAC5E,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,uBAAA,CAAuB,SAAS,CAAA;AAAA,EAC9D;AACF,CAAA;AAKO,IAAM,0BAAA,GAAN,MAAM,2BAAA,SAAmC,WAAA,CAAY;AAAA,EAC1C,UAAA;AAAA,EAEhB,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA,CAAM,CAAA,uBAAA,EAA0B,UAAU,CAAA,CAAE,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,2BAAA,CAA2B,SAAS,CAAA;AAAA,EAClE;AACF,CAAA;AAKO,IAAM,iBAAA,GAAN,MAAM,kBAAA,SAA0B,WAAA,CAAY;AAAA,EACjC,UAAA;AAAA,EACA,YAAA;AAAA,EAEhB,WAAA,CAAY,YAAoB,YAAA,EAAsB;AACpD,IAAA,KAAA,CAAM,CAAA,mBAAA,EAAsB,YAAY,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAE,CAAA;AACrE,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,kBAAA,CAAkB,SAAS,CAAA;AAAA,EACzD;AACF,CAAA;AAKO,IAAM,sBAAA,GAAN,MAAM,uBAAA,SAA+B,WAAA,CAAY;AAAA,EACtC,UAAA;AAAA,EACA,MAAA;AAAA,EAEhB,WAAA,CAAY,YAAoB,MAAA,EAAgB;AAC9C,IAAA,KAAA,CAAM,CAAA,mBAAA,EAAsB,UAAU,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AAClD,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,uBAAA,CAAuB,SAAS,CAAA;AAAA,EAC9D;AACF,CAAA;AAKO,IAAM,oBAAA,GAAN,MAAM,qBAAA,SAA6B,WAAA,CAAY;AAAA,EACpC,OAAA;AAAA,EAEhB,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE,CAAA;AACnC,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,qBAAA,CAAqB,SAAS,CAAA;AAAA,EAC5D;AACF,CAAA","file":"index.js","sourcesContent":["export * from \"./agent_adapter\";\nexport * from \"./backlog_adapter\";\nexport * from \"./changelog_adapter\";\nexport * from \"./execution_adapter\";\nexport * from \"./feedback_adapter\";\nexport * from \"./identity_adapter\";\nexport * from \"./indexer_adapter\";\nexport * from \"./metrics_adapter\";\nexport * from \"./project_adapter\";\nexport * from \"./workflow_adapter\";\n","import type { ActorRecord } from \"./\";\nimport type { AgentRecord } from \"./\";\nimport type { CycleRecord } from \"./\";\nimport type { TaskRecord } from \"./\";\nimport type { ExecutionRecord } from \"./\";\nimport type { ChangelogRecord } from \"./\";\nimport type { FeedbackRecord } from \"./\";\nimport type { EmbeddedMetadataRecord } from \"./embedded.types\";\n\n/**\n * A custom record type for testing purposes.\n */\nexport type CustomRecord = {\n type: 'custom';\n data: unknown;\n}\n\n/**\n * Defines the possible 'type' values for any record in the system.\n */\nexport type GitGovRecordType =\n | \"actor\"\n | \"agent\"\n | \"cycle\"\n | \"task\"\n | \"execution\"\n | \"changelog\"\n | \"feedback\"\n | \"custom\";\n\n/**\n * The canonical payload for any GitGovernance record.\n */\nexport type GitGovRecordPayload =\n | ActorRecord\n | AgentRecord\n | CycleRecord\n | TaskRecord\n | ExecutionRecord\n | ChangelogRecord\n | FeedbackRecord\n | CustomRecord;\n\n/**\n * The canonical type for any record in GitGovernance, wrapping a payload with metadata.\n */\nexport type GitGovRecord = EmbeddedMetadataRecord<GitGovRecordPayload>;\n\n/**\n * Specific GitGov record types with full metadata (header + payload).\n * These types provide clean, type-safe access to records with their signatures and checksums.\n * \n * @example\n * const taskRecord: GitGovTaskRecord = await taskStore.read(taskId);\n * const authorId = taskRecord.header.signatures[0].keyId;\n */\nexport type GitGovTaskRecord = EmbeddedMetadataRecord<TaskRecord>;\nexport type GitGovCycleRecord = EmbeddedMetadataRecord<CycleRecord>;\nexport type GitGovFeedbackRecord = EmbeddedMetadataRecord<FeedbackRecord>;\nexport type GitGovExecutionRecord = EmbeddedMetadataRecord<ExecutionRecord>;\nexport type GitGovChangelogRecord = EmbeddedMetadataRecord<ChangelogRecord>;\nexport type GitGovActorRecord = EmbeddedMetadataRecord<ActorRecord>;\nexport type GitGovAgentRecord = EmbeddedMetadataRecord<AgentRecord>;\n\n// Payloads for creating new records\nexport type ActorPayload = Partial<ActorRecord>;\nexport type AgentPayload = Partial<AgentRecord>;\nexport type CyclePayload = Partial<CycleRecord>;\nexport type TaskPayload = Partial<TaskRecord>;\nexport type ExecutionPayload = Partial<ExecutionRecord>;\nexport type ChangelogPayload = Partial<ChangelogRecord>;\nexport type FeedbackPayload = Partial<FeedbackRecord>;\n\n/**\n * Base class for all GitGovernance-specific errors.\n * Centralized here as it's used across multiple modules (schemas, validation, etc.)\n */\nexport class GitGovError extends Error {\n constructor(message: string, public readonly code: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\n","/**\n * Schema-specific error types for GitGovernance core.\n * These errors are thrown during JSON Schema validation and compilation.\n */\n\n// Import GitGovError from models (common types) - no circular dependencies\nimport { GitGovError } from '../record_types/common.types';\n\n// Re-export for backward compatibility\nexport { GitGovError };\n\n/**\n * Custom Error type for failures related to JSON Schema validation.\n */\nexport class SchemaValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SchemaValidationError\";\n }\n}\n\n/**\n * Error for detailed AJV validation failures with multiple field errors.\n */\nexport class DetailedValidationError extends GitGovError {\n constructor(\n recordType: string,\n public readonly errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>\n ) {\n const errorSummary = errors\n .map(err => `${err.field}: ${err.message}`)\n .join(', ');\n\n super(\n `${recordType} validation failed: ${errorSummary}`,\n 'DETAILED_VALIDATION_ERROR'\n );\n }\n}\n","/**\n * Validation and common error types for GitGovernance core.\n * These errors are thrown during record validation, checksum verification, and general operations.\n */\n\n// Import GitGovError from models (common types)\nexport { GitGovError } from '../record_types/common.types';\n\n/**\n * Custom Error type for failures when a payload's checksum does not match\n * the one specified in the header.\n */\nexport class ChecksumMismatchError extends Error {\n constructor(message: string = \"Payload checksum does not match the header.\") {\n super(message);\n this.name = \"ChecksumMismatchError\";\n }\n}\n\n/**\n * Custom Error type for failures during cryptographic signature verification.\n */\nexport class SignatureVerificationError extends Error {\n constructor(message: string = \"Signature verification failed.\") {\n super(message);\n this.name = \"SignatureVerificationError\";\n }\n}\n\n/**\n * Error for when required fields are missing during record creation.\n */\nexport class RequiredFieldError extends Error {\n constructor(recordType: string, missingFields: string[]) {\n super(`${recordType} requires ${missingFields.join(', ')}`);\n this.name = \"RequiredFieldError\";\n }\n}\n\n/**\n * Error for when a record is not found during operations.\n */\nexport class RecordNotFoundError extends Error {\n constructor(recordType: string, recordId: string) {\n super(`${recordType} with id ${recordId} not found`);\n this.name = \"RecordNotFoundError\";\n }\n}\n\n/**\n * Error for when project root cannot be determined.\n */\nexport class ProjectRootError extends Error {\n constructor() {\n super('Could not find project root. Are you in a git repository?');\n this.name = \"ProjectRootError\";\n }\n}\n\n/**\n * Error for when record creation validation fails.\n */\nexport class RecordCreationError extends Error {\n constructor(recordType: string, details: string) {\n super(`Invalid ${recordType} created: ${details}`);\n this.name = \"RecordCreationError\";\n }\n}\n\n/**\n * Error for when operations are not implemented or require external components.\n */\nexport class NotImplementedError extends Error {\n constructor(operation: string, reason: string) {\n super(`${operation} not implemented yet - ${reason}`);\n this.name = \"NotImplementedError\";\n }\n}\n\n/**\n * Error for protocol violations in workflow operations.\n */\nexport class ProtocolViolationError extends Error {\n constructor(message: string, violationType?: string) {\n super(`Protocol violation: ${message}`);\n this.name = \"ProtocolViolationError\";\n if (violationType) {\n this.message += ` (Type: ${violationType})`;\n }\n }\n}\n\n/**\n * Standard validation result interface for all validators.\n * Ensures consistency across all validateXDetailed functions.\n */\nexport interface ValidationResult {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"actor_record_schema.json\",\n \"title\": \"ActorRecord\",\n \"description\": \"Canonical schema for actor records as defined in actor_protocol.md\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"type\",\n \"displayName\",\n \"publicKey\",\n \"roles\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"Unique, human-readable identifier for the actor.\",\n \"examples\": [\n \"human:camilo\",\n \"agent:aion\",\n \"agent:camilo:cursor\"\n ]\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"human\",\n \"agent\"\n ],\n \"description\": \"The type of actor.\"\n },\n \"displayName\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 100,\n \"description\": \"The name of the actor to be used in user interfaces.\"\n },\n \"publicKey\": {\n \"type\": \"string\",\n \"minLength\": 44,\n \"maxLength\": 44,\n \"description\": \"The Ed25519 public key (base64 encoded, 44 characters) for verifying the actor's signatures.\"\n },\n \"roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"minItems\": 1,\n \"uniqueItems\": true,\n \"description\": \"List of capacity roles defining the actor's skills and permissions. Uses hierarchical format with colons.\",\n \"examples\": [\n [\n \"developer:backend:go\",\n \"auditor\"\n ],\n [\n \"planner:ai\"\n ]\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"active\",\n \"revoked\"\n ],\n \"default\": \"active\",\n \"description\": \"Optional. The lifecycle status of the actor. Defaults to 'active' if not specified.\"\n },\n \"supersededBy\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"Optional. The ID of the actor that replaces this one.\"\n },\n \"metadata\": {\n \"type\": \"object\",\n \"description\": \"An optional field for additional, non-canonical metadata.\",\n \"examples\": [\n {\n \"version\": \"1.2.0\",\n \"source\": \"https://github.com/...\"\n },\n {\n \"team\": \"frontend\"\n }\n ]\n }\n }\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"agent_record_schema.json\",\n \"title\": \"AgentRecord\",\n \"description\": \"Canonical schema for agent operational manifests.\",\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"engine\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^agent:[a-z0-9:-]+$\",\n \"description\": \"Unique identifier for the agent, linking to an ActorRecord.\"\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"active\",\n \"archived\"\n ],\n \"default\": \"active\"\n },\n \"triggers\": {\n \"type\": \"array\",\n \"default\": [],\n \"description\": \"Optional list of triggers that activate the agent.\\nAdditional fields are allowed and depend on trigger type:\\n- webhook triggers: 'event' (event identifier), 'filter' (condition)\\n- scheduled triggers: 'cron' (cron expression)\\n- manual triggers: 'command' (example CLI command)\\n\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"manual\",\n \"webhook\",\n \"scheduled\"\n ],\n \"description\": \"Type of trigger that activates the agent\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": true\n }\n },\n \"knowledge_dependencies\": {\n \"type\": \"array\",\n \"default\": [],\n \"items\": {\n \"type\": \"string\",\n \"description\": \"Glob patterns for blueprint files this agent needs access to\"\n }\n },\n \"prompt_engine_requirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"skills\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"metadata\": {\n \"type\": \"object\",\n \"description\": \"Optional framework-specific or deployment-specific metadata for agent extensions.\\nCommon use cases: framework identification (langchain, google-adk), deployment info (provider, image, region),\\ncost tracking (cost_per_invocation, currency), tool capabilities, maintainer info.\\nThis field does NOT affect agent execution - it is purely informational.\\n\",\n \"additionalProperties\": true\n },\n \"engine\": {\n \"type\": \"object\",\n \"oneOf\": [\n {\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"local\"\n },\n \"runtime\": {\n \"type\": \"string\",\n \"description\": \"Runtime environment (typescript, python, etc.)\"\n },\n \"entrypoint\": {\n \"type\": \"string\",\n \"description\": \"Path to the agent entry file\"\n },\n \"function\": {\n \"type\": \"string\",\n \"description\": \"Function name to invoke\"\n }\n }\n },\n {\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"api\"\n },\n \"url\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"HTTP endpoint for the agent\"\n },\n \"method\": {\n \"type\": \"string\",\n \"enum\": [\n \"POST\",\n \"GET\",\n \"PUT\"\n ],\n \"default\": \"POST\"\n },\n \"auth\": {\n \"type\": \"object\",\n \"description\": \"Authentication configuration for API requests\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"bearer\",\n \"oauth\",\n \"api-key\",\n \"actor-signature\"\n ],\n \"description\": \"Authentication type. 'actor-signature' uses the agent's ActorRecord keypair to sign requests.\"\n },\n \"secret_key\": {\n \"type\": \"string\",\n \"description\": \"Reference to secret in Secret Manager (for bearer/api-key/oauth auth types)\"\n },\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Direct token value (not recommended for production, use secret_key instead)\"\n }\n }\n }\n }\n },\n {\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"mcp\"\n },\n \"url\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"MCP server endpoint\"\n },\n \"tool\": {\n \"type\": \"string\",\n \"description\": \"Name of the MCP tool to invoke. If not specified, defaults to agentId without 'agent:' prefix.\"\n },\n \"auth\": {\n \"type\": \"object\",\n \"description\": \"Authentication configuration for MCP server\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"bearer\",\n \"oauth\",\n \"api-key\",\n \"actor-signature\"\n ],\n \"description\": \"Authentication type. 'actor-signature' uses the agent's ActorRecord keypair to sign requests.\"\n },\n \"secret_key\": {\n \"type\": \"string\",\n \"description\": \"Reference to secret in Secret Manager (for bearer/api-key/oauth auth types)\"\n },\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Direct token value (not recommended for production, use secret_key instead)\"\n }\n }\n }\n }\n },\n {\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"custom\"\n },\n \"protocol\": {\n \"type\": \"string\",\n \"description\": \"Custom protocol identifier (e.g., 'a2a', 'grpc')\"\n },\n \"config\": {\n \"type\": \"object\",\n \"description\": \"Protocol-specific configuration\"\n }\n }\n }\n ]\n }\n },\n \"examples\": [\n {\n \"id\": \"agent:scribe\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"local\",\n \"runtime\": \"typescript\",\n \"entrypoint\": \"packages/agents/scribe/index.ts\",\n \"function\": \"runScribe\"\n },\n \"metadata\": {\n \"purpose\": \"documentation-generation\",\n \"maintainer\": \"team:platform\"\n },\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ],\n \"knowledge_dependencies\": [\n \"packages/blueprints/**/*.md\"\n ]\n },\n {\n \"id\": \"agent:langchain-analyzer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"https://langchain-service-xyz.a.run.app/analyze\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"framework\": \"langchain\",\n \"version\": \"0.2.0\",\n \"model\": \"gpt-4-turbo\",\n \"deployment\": {\n \"provider\": \"gcp\",\n \"service\": \"cloud-run\",\n \"region\": \"us-central1\"\n },\n \"cost_per_invocation\": 0.03,\n \"currency\": \"USD\"\n },\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"task.ready\"\n }\n ],\n \"knowledge_dependencies\": [\n \"docs/architecture/**/*.md\"\n ]\n },\n {\n \"id\": \"agent:sentiment-analyzer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"http://sentiment-analyzer:8082/analyze\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"framework\": \"google-adk\",\n \"version\": \"1.0.0\",\n \"model\": \"gemini-pro\",\n \"deployment\": {\n \"runtime\": \"docker\",\n \"image\": \"gitgov/sentiment-analyzer:v1.2.0\",\n \"port\": 8082\n },\n \"max_tokens\": 1024\n },\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"feedback.created\"\n }\n ]\n },\n {\n \"id\": \"agent:cursor-reviewer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"mcp\",\n \"url\": \"http://localhost:8083/mcp\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"ide\": \"cursor\",\n \"tool\": \"code-review\",\n \"accepts_tools\": [\n \"review\",\n \"refactor\",\n \"test\"\n ]\n },\n \"knowledge_dependencies\": [\n \"packages/**/*.ts\",\n \"packages/**/*.tsx\"\n ],\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"task.status.ready\"\n }\n ]\n },\n {\n \"id\": \"agent:deepl-translator\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"https://api.deepl.com/v2/translate\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"bearer\",\n \"secret_key\": \"DEEPL_API_KEY\"\n }\n },\n \"metadata\": {\n \"provider\": \"deepl\",\n \"supported_languages\": [\n \"EN\",\n \"ES\",\n \"FR\",\n \"DE\",\n \"PT\"\n ],\n \"max_chars_per_request\": 5000\n },\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ]\n },\n {\n \"id\": \"agent:coordinator\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"custom\",\n \"protocol\": \"a2a\",\n \"config\": {\n \"endpoint\": \"https://agent-hub.gitgov.io/a2a\",\n \"version\": \"draft-2025-01\",\n \"capabilities\": [\n \"task-delegation\",\n \"status-sync\",\n \"feedback-loop\"\n ]\n }\n },\n \"metadata\": {\n \"purpose\": \"multi-agent-orchestration\",\n \"experimental\": true\n },\n \"triggers\": [\n {\n \"type\": \"scheduled\",\n \"cron\": \"0 */4 * * *\"\n }\n ]\n },\n {\n \"id\": \"agent:minimal-watcher\",\n \"engine\": {\n \"type\": \"local\"\n }\n },\n {\n \"id\": \"agent:local-mcp-server\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"mcp\",\n \"url\": \"http://localhost:9000/mcp\"\n },\n \"knowledge_dependencies\": [\n \"packages/blueprints/**/*.md\"\n ],\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ]\n },\n {\n \"id\": \"agent:code-reviewer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"local\",\n \"runtime\": \"typescript\",\n \"entrypoint\": \"packages/agents/code-reviewer/index.ts\",\n \"function\": \"reviewCode\"\n },\n \"prompt_engine_requirements\": {\n \"roles\": [\n \"code-reviewer\",\n \"security-auditor\"\n ],\n \"skills\": [\n \"typescript\",\n \"security-best-practices\",\n \"code-quality-analysis\"\n ]\n },\n \"knowledge_dependencies\": [\n \"packages/**/*.ts\",\n \"packages/**/*.tsx\"\n ],\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"pull-request.opened\",\n \"filter\": \"branch:main\"\n }\n ]\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"changelog_record_schema.json\",\n \"title\": \"ChangelogRecord\",\n \"description\": \"Canonical schema for changelog records - aggregates N tasks into 1 release note\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"description\",\n \"relatedTasks\",\n \"completedAt\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-changelog-[a-z0-9-]{1,50}$\",\n \"maxLength\": 71,\n \"description\": \"Unique identifier for the changelog entry\",\n \"examples\": [\n \"1752707800-changelog-sistema-autenticacion-v1\",\n \"1752707800-changelog-sprint-24-api-performance\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 150,\n \"description\": \"Executive title of the deliverable\",\n \"examples\": [\n \"Sistema de Autenticación Completo v1.0\",\n \"Sprint 24 - Performance Optimizations\"\n ]\n },\n \"description\": {\n \"type\": \"string\",\n \"minLength\": 20,\n \"maxLength\": 5000,\n \"description\": \"Detailed description of the value delivered, including key decisions and impact\"\n },\n \"relatedTasks\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\"\n },\n \"minItems\": 1,\n \"description\": \"IDs of tasks that compose this deliverable (minimum 1 required)\"\n },\n \"completedAt\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Unix timestamp in seconds when the deliverable was completed\"\n },\n \"relatedCycles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\"\n },\n \"default\": [],\n \"description\": \"Optional IDs of cycles related to this deliverable\"\n },\n \"relatedExecutions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-exec-[a-z0-9-]{1,50}$\"\n },\n \"default\": [],\n \"description\": \"Optional IDs of key execution records related to this work\"\n },\n \"version\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 50,\n \"description\": \"Optional version or release identifier (e.g., 'v1.0.0', 'sprint-24')\",\n \"examples\": [\n \"v1.0.0\",\n \"v2.1.3\",\n \"sprint-24\"\n ]\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"default\": [],\n \"description\": \"Optional tags for categorization (e.g., 'feature:auth', 'bugfix', 'security')\"\n },\n \"commits\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 100\n },\n \"default\": [],\n \"description\": \"Optional list of git commit hashes related to this deliverable\"\n },\n \"files\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Optional list of main files that were created or modified\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"maxLength\": 3000,\n \"description\": \"Optional additional context, decisions, or learnings\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1752707800-changelog-sistema-autenticacion-v1\",\n \"title\": \"Sistema de Autenticación Completo v1.0\",\n \"description\": \"Implementación completa del sistema de autenticación con OAuth2, 2FA via TOTP, recuperación de contraseña, y UI responsive. Incluye tests E2E completos (95% coverage) y documentación técnica actualizada.\",\n \"relatedTasks\": [\n \"1752274500-task-crear-ui-login\",\n \"1752274600-task-integrar-oauth2-backend\",\n \"1752274700-task-implementar-2fa-totp\",\n \"1752274800-task-tests-e2e-auth\",\n \"1752274900-task-documentar-flujo-auth\"\n ],\n \"completedAt\": 1752707800,\n \"relatedCycles\": [\n \"1752200000-cycle-q1-auth-milestone\"\n ],\n \"relatedExecutions\": [\n \"1752274550-exec-analisis-auth-providers\",\n \"1752707750-exec-final-integration-test\"\n ],\n \"version\": \"v1.0.0\",\n \"tags\": [\n \"feature:auth\",\n \"security\",\n \"frontend\",\n \"backend\"\n ],\n \"commits\": [\n \"abc123def\",\n \"456ghi789\",\n \"jkl012mno\"\n ],\n \"files\": [\n \"src/pages/Login.tsx\",\n \"src/services/auth.ts\",\n \"src/components/TwoFactorSetup.tsx\",\n \"e2e/auth.spec.ts\"\n ],\n \"notes\": \"Decisión técnica: Usamos NextAuth.js después de evaluar Passport.js. El 2FA se implementó con TOTP (Google Authenticator compatible) en lugar de SMS por seguridad y costo.\"\n },\n {\n \"id\": \"1752707900-changelog-hotfix-payment-timeout\",\n \"title\": \"Hotfix: Critical Payment Timeout Fix\",\n \"description\": \"Fixed critical payment timeout issue affecting 15% of transactions. Increased timeout from 5s to 30s and added circuit breaker pattern for third-party API calls.\",\n \"relatedTasks\": [\n \"1752707850-task-fix-payment-timeout\",\n \"1752707870-task-add-circuit-breaker\"\n ],\n \"completedAt\": 1752707900,\n \"version\": \"v1.2.1\",\n \"tags\": [\n \"hotfix\",\n \"critical\",\n \"payment\"\n ],\n \"commits\": [\n \"xyz789abc\"\n ],\n \"notes\": \"Emergency response to production incident. Deployed to production within 2 hours.\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"cycle_record_schema.json\",\n \"title\": \"CycleRecord\",\n \"description\": \"Canonical schema for cycle records - strategic grouping of work\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"status\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67,\n \"description\": \"Unique identifier for the cycle (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\",\n \"examples\": [\n \"1754400000-cycle-sprint-24-api-performance\",\n \"1754500000-cycle-auth-system-v2\",\n \"1754600000-cycle-q4-2025-growth\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"Human-readable title for the cycle (e.g., 'Sprint 24', 'Auth v2.0', 'Q4 2025')\",\n \"examples\": [\n \"Sprint 24 - API Performance\",\n \"Authentication System v2.0\",\n \"Q4 2025 - Growth & Scale\"\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"planning\",\n \"active\",\n \"completed\",\n \"archived\"\n ],\n \"description\": \"The lifecycle status of the cycle\"\n },\n \"taskIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66\n },\n \"default\": [],\n \"description\": \"Optional array of Task IDs that belong to this cycle. Can be empty for cycles that only contain child cycles. (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n [\n \"1752274500-task-optimizar-endpoint-search\",\n \"1752360900-task-anadir-cache-a-redis\"\n ]\n ]\n },\n \"childCycleIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67\n },\n \"default\": [],\n \"description\": \"Optional array of Cycle IDs that are children of this cycle, allowing for hierarchies (e.g., Q1 containing Sprint 1, Sprint 2, Sprint 3). (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\",\n \"examples\": [\n [\n \"1754400000-cycle-sprint-24\",\n \"1754500000-cycle-sprint-25\"\n ]\n ]\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\",\n \"maxLength\": 100\n },\n \"default\": [],\n \"description\": \"Optional list of key:value tags for categorization (e.g., 'roadmap:q4', 'team:alpha', 'okr:growth').\",\n \"examples\": [\n [\n \"roadmap:q4\",\n \"team:backend\"\n ],\n [\n \"sprint:24\",\n \"focus:performance\"\n ],\n [\n \"milestone:v2\",\n \"security\"\n ]\n ]\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 0,\n \"maxLength\": 10000,\n \"description\": \"Optional description of the cycle's goals, objectives, and context\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1754400000-cycle-sprint-24-api-performance\",\n \"title\": \"Sprint 24 - API Performance\",\n \"status\": \"active\",\n \"taskIds\": [\n \"1752274500-task-optimizar-endpoint-search\",\n \"1752360900-task-anadir-cache-a-redis\",\n \"1752447300-task-implementar-rate-limiting\"\n ],\n \"tags\": [\n \"sprint:24\",\n \"team:backend\",\n \"focus:performance\"\n ],\n \"notes\": \"Objetivo: Reducir la latencia p95 de la API por debajo de 200ms y preparar infraestructura para Black Friday.\"\n },\n {\n \"id\": \"1754500000-cycle-auth-system-v2\",\n \"title\": \"Authentication System v2.0\",\n \"status\": \"planning\",\n \"taskIds\": [\n \"1752274500-task-oauth2-integration\",\n \"1752360900-task-2fa-implementation\",\n \"1752447300-task-password-recovery\",\n \"1752533700-task-session-management\"\n ],\n \"tags\": [\n \"milestone:v2\",\n \"security\",\n \"feature:auth\"\n ],\n \"notes\": \"Milestone mayor: Sistema completo de autenticación con OAuth2, 2FA, y gestión avanzada de sesiones. Crítico para lanzamiento Q4.\"\n },\n {\n \"id\": \"1754600000-cycle-q4-2025-growth\",\n \"title\": \"Q4 2025 - Growth & Scale\",\n \"status\": \"active\",\n \"childCycleIds\": [\n \"1754400000-cycle-sprint-24-api-performance\",\n \"1754500000-cycle-auth-system-v2\",\n \"1754650000-cycle-mobile-app-launch\"\n ],\n \"tags\": [\n \"roadmap:q4\",\n \"strategy:growth\",\n \"okr:scale-to-1m-users\"\n ],\n \"notes\": \"Objetivo trimestral: Escalar a 1M usuarios activos. Incluye mejoras de performance, nuevo sistema de auth, y lanzamiento de app móvil.\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"embedded_metadata_schema.json\",\n \"title\": \"EmbeddedMetadataRecord\",\n \"description\": \"Canonical schema for the wrapper structure of all GitGovernance records.\",\n \"type\": \"object\",\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"version\": {\n \"type\": \"string\",\n \"enum\": [\n \"1.0\"\n ],\n \"description\": \"Version of the embedded metadata format.\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"actor\",\n \"agent\",\n \"task\",\n \"execution\",\n \"changelog\",\n \"feedback\",\n \"cycle\",\n \"custom\"\n ],\n \"description\": \"The type of the record contained in the payload.\"\n },\n \"schemaUrl\": {\n \"type\": \"string\",\n \"description\": \"Optional URL to a custom schema for the payload.\"\n },\n \"schemaChecksum\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-fA-F0-9]{64}$\",\n \"description\": \"Optional SHA-256 checksum of the custom schema.\"\n },\n \"payloadChecksum\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-fA-F0-9]{64}$\",\n \"description\": \"SHA-256 checksum of the canonically serialized payload.\"\n },\n \"signatures\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"keyId\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"The Actor ID of the signer (must match ActorRecord.id pattern).\"\n },\n \"role\": {\n \"type\": \"string\",\n \"pattern\": \"^([a-z-]+|custom:[a-z0-9-]+)$\",\n \"minLength\": 1,\n \"maxLength\": 50,\n \"description\": \"The context role of the signature (e.g., 'author', 'reviewer', 'auditor', or 'custom:*').\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 1000,\n \"description\": \"Human-readable note from the signer. Part of the signature digest.\"\n },\n \"signature\": {\n \"type\": \"string\",\n \"pattern\": \"^[A-Za-z0-9+/]{86}==$\",\n \"description\": \"The Ed25519 signature (base64 encoded, 88 chars with padding) of the signature digest.\"\n },\n \"timestamp\": {\n \"type\": \"integer\",\n \"description\": \"Unix timestamp of the signature.\"\n }\n },\n \"required\": [\n \"keyId\",\n \"role\",\n \"notes\",\n \"signature\",\n \"timestamp\"\n ],\n \"additionalProperties\": false\n },\n \"description\": \"An array of one or more signature objects.\"\n }\n },\n \"required\": [\n \"version\",\n \"type\",\n \"payloadChecksum\",\n \"signatures\"\n ],\n \"additionalProperties\": false\n },\n \"payload\": {\n \"type\": \"object\",\n \"description\": \"The specific record data, validated against the schema defined by header.type.\"\n }\n },\n \"required\": [\n \"header\",\n \"payload\"\n ],\n \"additionalProperties\": false,\n \"oneOf\": [\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"actor\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:actor_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"agent\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:agent_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"task\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:task_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"execution\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:execution_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"changelog\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:changelog_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"feedback\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:feedback_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"cycle\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:cycle_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"custom\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"required\": [\n \"schemaUrl\",\n \"schemaChecksum\"\n ]\n }\n }\n },\n \"else\": false\n }\n ],\n \"examples\": [\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"task\",\n \"payloadChecksum\": \"a1b2c3d4e5f6...\",\n \"signatures\": [\n {\n \"keyId\": \"human:lead-dev\",\n \"role\": \"author\",\n \"notes\": \"Initial task creation for OAuth 2.0 implementation\",\n \"signature\": \"...\",\n \"timestamp\": 1752274500\n }\n ]\n },\n \"payload\": {\n \"id\": \"1752274500-task-implementar-auth\",\n \"status\": \"pending\",\n \"priority\": \"high\",\n \"description\": \"Implementar autenticación OAuth 2.0.\",\n \"tags\": [\n \"skill:go\",\n \"area:backend\"\n ]\n }\n },\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"execution\",\n \"payloadChecksum\": \"b2c3d4e5f6a1...\",\n \"signatures\": [\n {\n \"keyId\": \"agent:cursor\",\n \"role\": \"author\",\n \"notes\": \"OAuth 2.0 flow completed with GitHub provider integration\",\n \"signature\": \"...\",\n \"timestamp\": 1752274600\n },\n {\n \"keyId\": \"human:camilo\",\n \"role\": \"reviewer\",\n \"notes\": \"Reviewed and tested locally. LGTM.\",\n \"signature\": \"...\",\n \"timestamp\": 1752274650\n }\n ]\n },\n \"payload\": {\n \"id\": \"1752274600-exec-implement-oauth\",\n \"taskId\": \"1752274500-task-implement-oauth\",\n \"type\": \"progress\",\n \"title\": \"OAuth 2.0 flow implemented\",\n \"result\": \"Completed the OAuth 2.0 authentication flow...\"\n }\n },\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"actor\",\n \"payloadChecksum\": \"c3d4e5f6a1b2...\",\n \"signatures\": [\n {\n \"keyId\": \"human:admin\",\n \"role\": \"author\",\n \"notes\": \"New developer onboarded to team\",\n \"signature\": \"...\",\n \"timestamp\": 1752274700\n },\n {\n \"keyId\": \"agent:aion\",\n \"role\": \"auditor\",\n \"notes\": \"Actor verification: 10/10. Credentials validated.\",\n \"signature\": \"...\",\n \"timestamp\": 1752274705\n }\n ]\n },\n \"payload\": {\n \"id\": \"human:new-developer\",\n \"type\": \"human\",\n \"displayName\": \"New Developer\",\n \"publicKey\": \"...\",\n \"roles\": [\n \"developer\"\n ]\n }\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"execution_record_schema.json\",\n \"title\": \"ExecutionRecord\",\n \"description\": \"Canonical schema for execution log records - the universal event stream\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"taskId\",\n \"type\",\n \"title\",\n \"result\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-exec-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"Unique identifier for the execution log entry (10 timestamp + 1 dash + 4 'exec' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n \"1752275000-exec-refactor-queries\",\n \"1752361200-exec-api-externa-caida\"\n ]\n },\n \"taskId\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"ID of the parent task this execution belongs to (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"analysis\",\n \"progress\",\n \"blocker\",\n \"completion\",\n \"info\",\n \"correction\"\n ],\n \"description\": \"Semantic classification of the execution event\",\n \"examples\": [\n \"progress\",\n \"analysis\",\n \"blocker\",\n \"completion\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"Human-readable title for the execution (used to generate ID)\",\n \"examples\": [\n \"Refactor de queries N+1\",\n \"API Externa Caída\",\n \"Plan de implementación OAuth2\"\n ]\n },\n \"result\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 22000,\n \"description\": \"The tangible, verifiable output or result of the execution. \\nThis is the \\\"WHAT\\\" - evidence of work or event summary.\\n\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"maxLength\": 6500,\n \"description\": \"Optional narrative, context and decisions behind the execution.\\nThis is the \\\"HOW\\\" and \\\"WHY\\\" - the story behind the result.\\n\"\n },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Optional list of typed references to relevant commits, files, PRs, or external documents.\\nShould use typed prefixes for clarity and trazabilidad (see execution_protocol_appendix.md):\\n- commit: Git commit SHA\\n- pr: Pull Request number\\n- file: File path (relative to repo root)\\n- url: External URL\\n- issue: GitHub Issue number\\n- task: TaskRecord ID\\n- exec: ExecutionRecord ID (for corrections or dependencies)\\n- changelog: ChangelogRecord ID\\n\"\n },\n \"metadata\": {\n \"type\": \"object\",\n \"additionalProperties\": true,\n \"description\": \"Optional structured data for machine consumption.\\nUse this field for data that needs to be programmatically processed (e.g., audit findings,\\nperformance metrics, scan results). This complements result (human-readable WHAT) and\\nnotes (narrative HOW/WHY) by providing structured, queryable data.\\nCommon use cases: audit findings arrays, performance metrics, tool outputs, scan summaries.\\n\",\n \"examples\": [\n {\n \"findings\": [\n {\n \"type\": \"PII\",\n \"file\": \"src/user.ts\",\n \"line\": 42\n }\n ],\n \"scannedFiles\": 245\n },\n {\n \"metrics\": {\n \"duration_ms\": 1250,\n \"memory_mb\": 512\n }\n }\n ]\n }\n },\n \"examples\": [\n {\n \"id\": \"1752275500-exec-refactor-queries\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"progress\",\n \"title\": \"Refactor de queries N+1\",\n \"result\": \"Refactorizados 3 queries N+1 a un solo JOIN optimizado. Performance mejoró de 2.5s a 200ms.\",\n \"notes\": \"Identificados 3 N+1 queries en el endpoint /api/search. Aplicado eager loading y caching de relaciones.\",\n \"references\": [\n \"commit:b2c3d4e\",\n \"file:src/api/search.ts\"\n ]\n },\n {\n \"id\": \"1752361200-exec-api-externa-caida\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"blocker\",\n \"title\": \"API Externa Caída\",\n \"result\": \"No se puede continuar con testing de integración. API de pagos devuelve 503.\",\n \"notes\": \"La API de pagos de terceros (api.payments.com) está devolviendo errores 503. Contactado soporte del proveedor. ETA de resolución: 2-3 horas.\",\n \"references\": [\n \"url:https://status.payments.com\"\n ]\n },\n {\n \"id\": \"1752188000-exec-plan-oauth-implementation\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"analysis\",\n \"title\": \"Plan de implementación OAuth2\",\n \"result\": \"Documento de diseño técnico completado. 5 sub-tareas identificadas con estimaciones de complejidad.\",\n \"notes\": \"Evaluadas 3 opciones: NextAuth.js (elegida), Passport.js, custom implementation. NextAuth.js por madurez y soporte de múltiples providers.\",\n \"references\": [\n \"file:docs/oauth-design.md\"\n ]\n },\n {\n \"id\": \"1752707800-exec-oauth-completed\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"completion\",\n \"title\": \"OAuth Implementation Completed\",\n \"result\": \"Sistema OAuth2 completamente implementado, testeado y deployado a staging. 95% test coverage. Todos los acceptance criteria cumplidos.\",\n \"notes\": \"Implementación finalizada. Code review aprobado. Tests E2E passing. Ready para changelog y deploy a producción.\",\n \"references\": [\n \"pr:456\",\n \"commit:def789abc\",\n \"url:https://staging.app.com/login\"\n ]\n },\n {\n \"id\": \"1752275600-exec-cambio-estrategia-redis\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"info\",\n \"title\": \"Cambio de estrategia: Usar Redis para sessions\",\n \"result\": \"Decisión: Migrar de JWT stateless a sessions en Redis por requisito de revocación inmediata.\",\n \"notes\": \"Durante code review se identificó requisito crítico: revocar sesiones inmediatamente (ej: compromiso de cuenta). JWT stateless no permite esto sin lista negra compleja. Redis sessions permite revocación instantánea.\",\n \"references\": [\n \"issue:567\",\n \"url:https://redis.io/docs/manual/keyspace-notifications/\"\n ]\n },\n {\n \"id\": \"1752275700-exec-correccion-metricas\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"correction\",\n \"title\": \"Corrección: Métricas de performance\",\n \"result\": \"Corrección de execution 1752275500-exec-refactor-queries: El performance fue 200ms, no 50ms como se reportó.\",\n \"notes\": \"Error de tipeo en execution original. La mejora real fue de 2.5s a 200ms (no 50ms). Sigue siendo significativa (92% mejora) pero números correctos son importantes para métricas.\",\n \"references\": [\n \"exec:1752275500-exec-refactor-queries\"\n ]\n },\n {\n \"id\": \"1752276000-exec-source-audit-scan\",\n \"taskId\": \"1752274500-task-audit-compliance\",\n \"type\": \"analysis\",\n \"title\": \"Source Audit Scan - 2025-01-15\",\n \"result\": \"Escaneados 245 archivos. Encontrados 10 findings (3 critical, 4 high, 3 medium). Ver metadata para detalles estructurados.\",\n \"notes\": \"Scan ejecutado con RegexDetector + HeuristicDetector. LLM calls: 0 (tier free).\",\n \"references\": [\n \"file:src/config/db.ts\",\n \"file:src/auth/keys.ts\"\n ],\n \"metadata\": {\n \"scannedFiles\": 245,\n \"scannedLines\": 18420,\n \"duration_ms\": 1250,\n \"findings\": [\n {\n \"id\": \"SEC-001\",\n \"severity\": \"critical\",\n \"file\": \"src/config/db.ts\",\n \"line\": 5,\n \"type\": \"api_key\"\n },\n {\n \"id\": \"SEC-003\",\n \"severity\": \"critical\",\n \"file\": \"src/auth/keys.ts\",\n \"line\": 2,\n \"type\": \"private_key\"\n },\n {\n \"id\": \"PII-003\",\n \"severity\": \"critical\",\n \"file\": \"src/payments/stripe.ts\",\n \"line\": 8,\n \"type\": \"credit_card\"\n }\n ],\n \"summary\": {\n \"critical\": 3,\n \"high\": 4,\n \"medium\": 3,\n \"low\": 0\n }\n }\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"feedback_record_schema.json\",\n \"title\": \"FeedbackRecord\",\n \"description\": \"Canonical schema for feedback records - structured conversation about work\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"entityType\",\n \"entityId\",\n \"type\",\n \"status\",\n \"content\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\",\n \"maxLength\": 70,\n \"description\": \"Unique identifier for the feedback entry\",\n \"examples\": [\n \"1752788100-feedback-blocking-rest-api\",\n \"1752788200-feedback-question-test-coverage\"\n ]\n },\n \"entityType\": {\n \"type\": \"string\",\n \"enum\": [\n \"task\",\n \"execution\",\n \"changelog\",\n \"feedback\",\n \"cycle\"\n ],\n \"description\": \"The type of entity this feedback refers to\"\n },\n \"entityId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"The ID of the entity this feedback refers to.\\nMust match the pattern for its entityType:\\n- task: ^\\\\d{10}-task-[a-z0-9-]{1,50}$\\n- execution: ^\\\\d{10}-exec-[a-z0-9-]{1,50}$\\n- changelog: ^\\\\d{10}-changelog-[a-z0-9-]{1,50}$\\n- feedback: ^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\\n- cycle: ^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\\n\",\n \"examples\": [\n \"1752274500-task-implementar-oauth\",\n \"1752642000-exec-subtarea-9-4\",\n \"1752788100-feedback-blocking-rest-api\"\n ]\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"blocking\",\n \"suggestion\",\n \"question\",\n \"approval\",\n \"clarification\",\n \"assignment\"\n ],\n \"description\": \"The semantic intent of the feedback\",\n \"examples\": [\n \"blocking\",\n \"question\",\n \"approval\"\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"open\",\n \"acknowledged\",\n \"resolved\",\n \"wontfix\"\n ],\n \"description\": \"The lifecycle status of the feedback. \\nNote: FeedbackRecords are immutable. To change status, create a new feedback \\nthat references this one using entityType: \\\"feedback\\\" and resolvesFeedbackId.\\n\"\n },\n \"content\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"The content of the feedback. Reduced from 10000 to 5000 chars for practical use.\"\n },\n \"assignee\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"maxLength\": 256,\n \"description\": \"Optional. The Actor ID responsible for addressing the feedback (e.g., 'human:maria', 'agent:camilo:cursor')\",\n \"examples\": [\n \"human:maria\",\n \"agent:code-reviewer\",\n \"agent:camilo:cursor\"\n ]\n },\n \"resolvesFeedbackId\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\",\n \"maxLength\": 70,\n \"description\": \"Optional. The ID of another feedback record that this one resolves or responds to\",\n \"examples\": [\n \"1752788100-feedback-blocking-rest-api\"\n ]\n },\n \"metadata\": {\n \"type\": \"object\",\n \"additionalProperties\": true,\n \"description\": \"Optional structured data for machine consumption.\\nUse this field for domain-specific data that needs to be programmatically processed.\\nCommon use cases: waiver details (fingerprint, ruleId, file, line), approval context, assignment metadata.\\n\",\n \"examples\": [\n {\n \"fingerprint\": \"abc123def456\",\n \"ruleId\": \"PII-001\",\n \"file\": \"src/user.ts\",\n \"line\": 42,\n \"expiresAt\": \"2025-12-31T23:59:59Z\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"id\": \"1752788100-feedback-blocking-rest-api\",\n \"entityType\": \"execution\",\n \"entityId\": \"1752642000-exec-subtarea-9-4\",\n \"type\": \"blocking\",\n \"status\": \"open\",\n \"content\": \"Esta implementación no cumple el estándar de rutas REST. Los endpoints deben seguir el patrón /api/v1/{resource}/{id}. Actualmente usa /get-user?id=X que no es RESTful.\"\n },\n {\n \"id\": \"1752788200-feedback-rest-api-fixed\",\n \"entityType\": \"feedback\",\n \"entityId\": \"1752788100-feedback-blocking-rest-api\",\n \"type\": \"clarification\",\n \"status\": \"resolved\",\n \"content\": \"Implementada la corrección. Ahora todos los endpoints siguen el estándar REST: GET /api/v1/users/:id, POST /api/v1/users, etc. Tests actualizados y passing.\",\n \"resolvesFeedbackId\": \"1752788100-feedback-blocking-rest-api\"\n },\n {\n \"id\": \"1752788300-feedback-assign-auth-task\",\n \"entityType\": \"task\",\n \"entityId\": \"1752274500-task-implementar-oauth\",\n \"type\": \"assignment\",\n \"status\": \"open\",\n \"content\": \"Asignando esta tarea a María por su experiencia con OAuth2. Prioridad alta para el sprint actual.\",\n \"assignee\": \"human:maria\"\n },\n {\n \"id\": \"1752788400-feedback-question-test-coverage\",\n \"entityType\": \"task\",\n \"entityId\": \"1752274500-task-implementar-oauth\",\n \"type\": \"question\",\n \"status\": \"open\",\n \"content\": \"¿Cuál es el nivel de test coverage esperado para esta feature? El spec no lo menciona explícitamente. ¿Debemos apuntar a 80% como el resto del proyecto?\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"task_record_schema.json\",\n \"title\": \"TaskRecord\",\n \"description\": \"Canonical schema for task records as defined in task_protocol.md\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"status\",\n \"priority\",\n \"description\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"Unique identifier for the task (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n \"1752274500-task-implementar-auth\",\n \"1752347700-task-fix-logging\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 3,\n \"maxLength\": 150,\n \"description\": \"A brief, human-readable title for the task. Used to generate the ID slug.\"\n },\n \"cycleIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67\n },\n \"default\": [],\n \"description\": \"Optional. The IDs of the strategic cycles this task belongs to. (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\"\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"draft\",\n \"review\",\n \"ready\",\n \"active\",\n \"done\",\n \"archived\",\n \"paused\",\n \"discarded\"\n ],\n \"maxLength\": 40,\n \"description\": \"Current state of the task in the institutional flow\"\n },\n \"priority\": {\n \"type\": \"string\",\n \"enum\": [\n \"low\",\n \"medium\",\n \"high\",\n \"critical\"\n ],\n \"maxLength\": 40,\n \"description\": \"Strategic or tactical priority level\"\n },\n \"description\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 22000,\n \"description\": \"Functional, technical or strategic summary of the objective\"\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-:]+)*$\"\n },\n \"default\": [],\n \"description\": \"Optional. List of key:value tags for categorization and role suggestion (e.g., 'skill:react', 'role:agent:developer').\"\n },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Valid links or files, when mentioned\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 0,\n \"maxLength\": 3000,\n \"description\": \"Additional comments, decisions made or added context\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1752274500-task-implement-oauth-flow\",\n \"title\": \"Implement OAuth 2.0 authentication flow\",\n \"status\": \"draft\",\n \"priority\": \"high\",\n \"description\": \"Implement complete OAuth 2.0 flow with GitHub provider. Include token refresh, session management, and secure storage. Must support both web and CLI flows.\",\n \"cycleIds\": [\n \"1752270000-cycle-auth-mvp\"\n ],\n \"tags\": [\n \"skill:security\",\n \"category:feature\",\n \"package:core\"\n ],\n \"references\": [\n \"url:https://docs.github.com/en/apps/oauth-apps/building-oauth-apps\"\n ],\n \"notes\": \"Consider using proven library like passport.js or implement from scratch for learning.\"\n },\n {\n \"id\": \"1752347700-task-fix-memory-leak-indexer\",\n \"title\": \"Fix memory leak in indexer process\",\n \"status\": \"active\",\n \"priority\": \"critical\",\n \"description\": \"Indexer process consuming >2GB RAM after 24h uptime. Profiling shows EventEmitter listeners not being cleaned up properly. Fix leak and add monitoring.\",\n \"cycleIds\": [],\n \"tags\": [\n \"category:bug\",\n \"skill:performance\",\n \"package:core\"\n ],\n \"references\": [\n \"file:packages/core/src/adapters/indexer_adapter/index.ts\",\n \"commit:a1b2c3d4\",\n \"issue:789\"\n ],\n \"notes\": \"Discovered during production monitoring. Affects long-running processes only.\"\n },\n {\n \"id\": \"1752448900-task-add-typescript-linting\",\n \"title\": \"Add TypeScript strict mode and ESLint rules\",\n \"status\": \"done\",\n \"priority\": \"medium\",\n \"description\": \"Enable TypeScript strict mode across all packages. Configure ESLint with recommended rules. Fix all existing violations. Add pre-commit hook.\",\n \"cycleIds\": [\n \"1752440000-cycle-code-quality-q1\"\n ],\n \"tags\": [\n \"category:tooling\",\n \"skill:typescript\",\n \"epic:code-quality\"\n ],\n \"references\": [\n \"pr:123\",\n \"file:.eslintrc.js\",\n \"file:tsconfig.json\"\n ],\n \"notes\": \"Approved by tech lead. All 47 violations fixed in PR #123.\"\n },\n {\n \"id\": \"1752550000-task-research-graphql-migration\",\n \"title\": \"Research GraphQL migration feasibility\",\n \"status\": \"draft\",\n \"priority\": \"low\",\n \"description\": \"Evaluate feasibility of migrating REST API to GraphQL. Document pros/cons, effort estimation, and recommended approach. Focus on developer experience and performance.\",\n \"cycleIds\": [],\n \"tags\": [\n \"category:research\",\n \"skill:graphql\",\n \"skill:backend\"\n ],\n \"references\": []\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"workflow_schema.json\",\n \"title\": \"WorkflowRecord\",\n \"description\": \"Complete schema for workflow methodology configuration files that define state transitions, signatures, and custom rules\",\n \"type\": \"object\",\n \"required\": [\n \"version\",\n \"name\",\n \"state_transitions\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": \"JSON Schema reference\"\n },\n \"version\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\",\n \"description\": \"Semantic version of the methodology configuration\"\n },\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 100,\n \"description\": \"Human-readable name of the methodology\"\n },\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 500,\n \"description\": \"Brief description of the methodology's purpose and scope\"\n },\n \"state_transitions\": {\n \"type\": \"object\",\n \"description\": \"Defines valid state transitions and their requirements\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"from\",\n \"requires\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"from\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z][a-z0-9_]{0,49}$\"\n },\n \"minItems\": 1,\n \"description\": \"Valid source states for this transition\"\n },\n \"requires\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"command\": {\n \"type\": \"string\",\n \"description\": \"CLI command that triggers this transition\"\n },\n \"event\": {\n \"type\": \"string\",\n \"description\": \"System event that triggers this transition\"\n },\n \"signatures\": {\n \"type\": \"object\",\n \"description\": \"Signature requirements keyed by role (e.g., 'approver:quality', 'developer:backend')\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"role\",\n \"capability_roles\",\n \"min_approvals\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"role\": {\n \"type\": \"string\",\n \"description\": \"Required signature role\"\n },\n \"capability_roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1,\n \"description\": \"Required capability roles in actor record\"\n },\n \"min_approvals\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"Minimum number of required approvals\"\n },\n \"actor_type\": {\n \"type\": \"string\",\n \"enum\": [\n \"human\",\n \"agent\"\n ],\n \"description\": \"Optional: restrict to specific actor type\"\n },\n \"specific_actors\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"Optional: specific actors that can sign\"\n }\n }\n }\n },\n \"custom_rules\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of custom rule identifiers to validate\"\n }\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"type\": \"object\",\n \"description\": \"Definitions for custom validation rules\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"description\",\n \"validation\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 200,\n \"description\": \"Human-readable description of the rule\"\n },\n \"validation\": {\n \"type\": \"string\",\n \"enum\": [\n \"assignment_required\",\n \"sprint_capacity\",\n \"epic_complexity\",\n \"custom\"\n ],\n \"description\": \"Validation type identifier\"\n },\n \"parameters\": {\n \"type\": \"object\",\n \"description\": \"Optional parameters for the validation rule\"\n },\n \"expression\": {\n \"type\": \"string\",\n \"description\": \"Inline validation expression for 'custom' validation type. Implementation determines the runtime and language. Must return boolean or Promise<boolean>.\"\n },\n \"module_path\": {\n \"type\": \"string\",\n \"description\": \"Path to external module for custom validation (alternative to expression)\"\n }\n }\n }\n },\n \"view_configs\": {\n \"type\": \"object\",\n \"description\": \"Optional view configurations for board/kanban rendering\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"columns\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"columns\": {\n \"type\": \"object\",\n \"description\": \"Column definitions mapping display names to state arrays\",\n \"additionalProperties\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z][a-z0-9_]{0,49}$\"\n },\n \"minItems\": 1\n }\n },\n \"theme\": {\n \"type\": \"string\",\n \"description\": \"Visual theme for the board\"\n },\n \"layout\": {\n \"type\": \"string\",\n \"description\": \"Layout orientation for the board\"\n }\n }\n }\n },\n \"agent_integration\": {\n \"type\": \"object\",\n \"description\": \"Optional agent automation configuration for methodology\",\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 200,\n \"description\": \"Brief description of the agent integration\"\n },\n \"required_agents\": {\n \"type\": \"array\",\n \"description\": \"References to agents required for this methodology. Agent details (engine, knowledge, etc.) live in their AgentRecord.\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"triggers\"\n ],\n \"anyOf\": [\n {\n \"required\": [\n \"id\"\n ]\n },\n {\n \"required\": [\n \"required_roles\"\n ]\n }\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^agent:[a-z0-9:-]+$\",\n \"description\": \"Specific agent ID. References an existing AgentRecord.\"\n },\n \"required_roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"minItems\": 1,\n \"description\": \"Required capability roles. Matches any agent with these roles (from ActorRecord).\"\n },\n \"triggers\": {\n \"type\": \"array\",\n \"description\": \"When this agent activates within this methodology\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"event\",\n \"action\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Event that triggers the agent\"\n },\n \"action\": {\n \"type\": \"string\",\n \"description\": \"Action the agent should perform\"\n },\n \"cron\": {\n \"type\": \"string\",\n \"description\": \"Cron expression for scheduled triggers\"\n }\n }\n }\n }\n }\n }\n }\n }\n }\n },\n \"examples\": [\n {\n \"version\": \"1.0.0\",\n \"name\": \"Simple Kanban\",\n \"description\": \"Basic workflow for small teams\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\"\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\"\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\"\n }\n }\n }\n },\n {\n \"version\": \"1.0.0\",\n \"name\": \"GitGovernance Default Methodology\",\n \"description\": \"Standard GitGovernance workflow with quality gates and agent collaboration\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"submitter\",\n \"capability_roles\": [\n \"author\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n },\n \"design\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:design\"\n ],\n \"min_approvals\": 1\n },\n \"quality\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\",\n \"custom_rules\": [\n \"task_must_have_valid_assignment_for_executor\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n },\n \"discarded\": {\n \"from\": [\n \"ready\",\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task cancel\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"canceller\",\n \"capability_roles\": [\n \"approver:product\",\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"task_must_have_valid_assignment_for_executor\": {\n \"description\": \"Task must have a valid assignment before execution can begin\",\n \"validation\": \"assignment_required\"\n }\n }\n }\n ]\n}","/**\n * GitGovernance Protocol Schemas\n * \n * Auto-generated from blueprints. Do not edit manually.\n * Run 'pnpm sync:schemas' to update.\n */\n\nimport actorRecordSchema from \"./actor_record_schema.json\";\nimport agentRecordSchema from \"./agent_record_schema.json\";\nimport changelogRecordSchema from \"./changelog_record_schema.json\";\nimport cycleRecordSchema from \"./cycle_record_schema.json\";\nimport embeddedMetadataSchema from \"./embedded_metadata_schema.json\";\nimport executionRecordSchema from \"./execution_record_schema.json\";\nimport feedbackRecordSchema from \"./feedback_record_schema.json\";\nimport taskRecordSchema from \"./task_record_schema.json\";\nimport workflowRecordSchema from \"./workflow_record_schema.json\";\n\n/**\n * All GitGovernance protocol schemas\n */\nexport const Schemas = {\n ActorRecord: actorRecordSchema,\n AgentRecord: agentRecordSchema,\n ChangelogRecord: changelogRecordSchema,\n CycleRecord: cycleRecordSchema,\n EmbeddedMetadata: embeddedMetadataSchema,\n ExecutionRecord: executionRecordSchema,\n FeedbackRecord: feedbackRecordSchema,\n TaskRecord: taskRecordSchema,\n WorkflowRecord: workflowRecordSchema,\n} as const;\n\n/**\n * Schema names for type safety\n */\nexport type SchemaName = \n | \"ActorRecord\"\n | \"AgentRecord\"\n | \"ChangelogRecord\"\n | \"CycleRecord\"\n | \"EmbeddedMetadata\"\n | \"ExecutionRecord\"\n | \"FeedbackRecord\"\n | \"TaskRecord\"\n | \"WorkflowRecord\";\n\n/**\n * Get a schema by name\n */\nexport function getSchema(name: SchemaName) {\n return Schemas[name];\n}\n\n/**\n * Get all schema names\n */\nexport function getSchemaNames(): SchemaName[] {\n return Object.keys(Schemas) as SchemaName[];\n}\n\n/**\n * Check if a schema exists\n */\nexport function hasSchema(name: string): name is SchemaName {\n return name in Schemas;\n}\n","import Ajv from \"ajv\";\nimport type { ValidateFunction } from \"ajv\";\nimport addFormats from \"ajv-formats\";\n\n// Direct import from generated schemas\nimport { Schemas } from \"./generated\";\n\n/**\n * Singleton cache for schema validators to avoid repeated I/O and AJV compilation.\n * Improves performance by caching compiled validators for schema files.\n */\nexport class SchemaValidationCache {\n private static schemaValidators = new Map<string, ValidateFunction>();\n private static ajv: Ajv | null = null;\n\n /**\n * Gets or creates a cached validator for a schema object.\n * @param schema The schema object (already parsed YAML/JSON)\n * @returns Compiled AJV validator function\n */\n static getValidatorFromSchema<T = unknown>(schema: object): ValidateFunction<T> {\n // Create a stable key from the schema object\n const schemaKey = JSON.stringify(schema);\n\n if (!this.schemaValidators.has(schemaKey)) {\n // Initialize AJV instance if not already done\n if (!this.ajv) {\n this.ajv = new Ajv({ allErrors: true });\n addFormats(this.ajv);\n\n // Pre-load all schemas for reference resolution\n this.preloadSchemas();\n }\n\n // Remove $id temporarily to avoid conflicts with preloaded schemas\n // (This doesn't modify the original schema object)\n const { $id, ...schemaWithoutId } = schema as any;\n\n // Compile schema directly - AJV will resolve $ref using preloaded aliases\n const validator = this.ajv.compile(schemaWithoutId);\n this.schemaValidators.set(schemaKey, validator);\n }\n\n return this.schemaValidators.get(schemaKey)! as ValidateFunction<T>;\n }\n\n /**\n * Pre-loads referenced schema files for $ref resolution.\n * Uses direct imports and dynamic iteration.\n */\n private static preloadSchemas(): void {\n if (!this.ajv) return;\n\n try {\n // Map schema names to their expected ref aliases\n const schemaRefMap: Record<string, string> = {\n 'ActorRecord': 'ref:actor_record_schema',\n 'AgentRecord': 'ref:agent_record_schema',\n 'ChangelogRecord': 'ref:changelog_record_schema',\n 'CycleRecord': 'ref:cycle_record_schema',\n 'ExecutionRecord': 'ref:execution_record_schema',\n 'FeedbackRecord': 'ref:feedback_record_schema',\n 'TaskRecord': 'ref:task_record_schema',\n 'WorkflowRecord': 'ref:workflow_record_schema'\n };\n\n // Register schemas with correct aliases\n Object.entries(Schemas).forEach(([name, schema]) => {\n if (name !== 'EmbeddedMetadata' && schemaRefMap[name]) {\n const refName = schemaRefMap[name];\n this.ajv!.addSchema(schema, refName);\n }\n });\n } catch {\n // If preloading fails, continue without it\n }\n }\n\n /**\n * Clears the cache (useful for testing or schema updates).\n */\n static clearCache(): void {\n this.schemaValidators.clear();\n this.ajv = null;\n }\n\n /**\n * Gets cache statistics for monitoring.\n */\n static getCacheStats(): { cachedSchemas: number } {\n return {\n cachedSchemas: this.schemaValidators.size\n };\n }\n}\n","import { createHash } from \"crypto\";\nimport type { GitGovRecordPayload } from \"../record_types\";\n\n/**\n * Recursively sorts the keys of an object, including nested objects.\n * This is the core of canonical serialization.\n * @param obj The object to sort.\n * @returns A new object with all keys sorted alphabetically.\n */\nfunction sortKeys(obj: any): any {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map(sortKeys);\n }\n const sortedKeys = Object.keys(obj).sort();\n const newObj: Record<string, any> = {};\n for (const key of sortedKeys) {\n newObj[key] = sortKeys(obj[key]);\n }\n return newObj;\n}\n\n/**\n * Canonically serializes a payload object.\n * @param payload The object to serialize.\n * @returns A deterministic JSON string.\n */\nfunction canonicalize(payload: object): string {\n const sortedPayload = sortKeys(payload);\n return JSON.stringify(sortedPayload);\n}\n\n/**\n * Calculates the SHA-256 checksum of a record's payload.\n */\nexport function calculatePayloadChecksum(payload: GitGovRecordPayload): string {\n const jsonString = canonicalize(payload);\n return createHash(\"sha256\").update(jsonString, \"utf8\").digest(\"hex\");\n} ","export * from \"./logger\";","export type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\n\nexport interface Logger {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n}\n\nclass ConsoleLogger implements Logger {\n private level: LogLevel;\n private prefix: string;\n\n constructor(prefix: string = \"\", level: LogLevel = \"info\") {\n this.prefix = prefix;\n this.level = level;\n }\n\n private shouldLog(level: LogLevel): boolean {\n const levels: LogLevel[] = [\"debug\", \"info\", \"warn\", \"error\", \"silent\"];\n const currentLevelIndex = levels.indexOf(this.level);\n const messageLevelIndex = levels.indexOf(level);\n\n return currentLevelIndex <= messageLevelIndex && this.level !== \"silent\";\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.shouldLog(\"debug\")) {\n console.log(`${this.prefix}${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (this.shouldLog(\"info\")) {\n console.log(`${this.prefix}${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (this.shouldLog(\"warn\")) {\n console.warn(`${this.prefix}${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (this.shouldLog(\"error\")) {\n console.error(`${this.prefix}${message}`, ...args);\n }\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n}\n\n// Factory function para crear loggers\nexport function createLogger(prefix: string = \"\", level?: LogLevel): Logger {\n const logLevel = level ||\n (process.env['NODE_ENV'] === \"test\" ? \"silent\" : \"info\") ||\n (process.env['LOG_LEVEL'] as LogLevel) ||\n \"info\";\n\n return new ConsoleLogger(prefix, logLevel);\n}\n\n// Logger global para uso directo\nexport const logger = createLogger(\"[App] \"); ","import { generateKeyPair, sign, verify, createHash, randomBytes } from \"crypto\";\nimport { promisify } from \"util\";\nimport { calculatePayloadChecksum } from \"./checksum\";\nimport type { GitGovRecordPayload, Signature } from \"../record_types\";\nimport { createLogger } from \"../logger\";\nconst logger = createLogger(\"[CryptoModule] \");\nconst generateKeyPairAsync = promisify(generateKeyPair);\n\n/**\n * Generates a new Ed25519 key pair.\n * @returns A promise that resolves to an object with publicKey and privateKey in base64 format.\n * \n * The publicKey is the raw Ed25519 key (32 bytes -> 44 chars in base64).\n * The privateKey is stored in PKCS8 PEM format for compatibility.\n * \n * Note: Node.js crypto does not support 'raw' format directly for Ed25519,\n * so we extract the raw 32-byte key from the SPKI DER encoding (RFC 8410).\n * SPKI DER structure: [algorithm identifier (12 bytes)] + [raw public key (32 bytes)]\n */\nexport async function generateKeys(): Promise<{ publicKey: string; privateKey: string; }> {\n const { publicKey, privateKey } = await generateKeyPairAsync('ed25519', {\n publicKeyEncoding: { type: 'spki', format: 'der' },\n privateKeyEncoding: { type: 'pkcs8', format: 'pem' },\n });\n\n // Extract raw Ed25519 public key (last 32 bytes of SPKI DER format)\n const rawPublicKey = publicKey.subarray(-32);\n\n return {\n publicKey: rawPublicKey.toString('base64'), // 32 bytes -> 44 chars\n privateKey: Buffer.from(privateKey).toString('base64'),\n };\n}\n\n/**\n * Creates a signature for a given payload.\n */\nexport function signPayload(\n payload: GitGovRecordPayload,\n privateKey: string,\n keyId: string,\n role: string,\n notes: string,\n): Signature {\n const payloadChecksum = calculatePayloadChecksum(payload);\n const timestamp = Math.floor(Date.now() / 1000);\n const digest = `${payloadChecksum}:${keyId}:${role}:${notes}:${timestamp}`;\n\n // Per the blueprint, sign the SHA-256 hash of the digest\n const digestHash = createHash('sha256').update(digest).digest();\n\n const signature = sign(null, digestHash, {\n key: Buffer.from(privateKey, 'base64'),\n type: 'pkcs8',\n format: 'pem'\n });\n\n return {\n keyId,\n role,\n notes,\n signature: signature.toString('base64'),\n timestamp,\n };\n}\n\n/**\n * Verifies all signatures on a record.\n * \n * Reconstructs SPKI DER format from raw Ed25519 key for verification.\n */\nexport async function verifySignatures(\n record: { header: { payloadChecksum: string, signatures: Signature[] }, payload: GitGovRecordPayload },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<boolean> {\n for (const signature of record.header.signatures) {\n const publicKeyBase64 = await getActorPublicKey(signature.keyId);\n if (!publicKeyBase64) {\n // Use debug level instead of warn to reduce noise during indexer validation\n // The indexer already captures these errors in its integrity report\n logger.debug(`Public key not found for actor: ${signature.keyId}`);\n return false;\n }\n\n const digest = `${record.header.payloadChecksum}:${signature.keyId}:${signature.role}:${signature.notes}:${signature.timestamp}`;\n const digestHash = createHash('sha256').update(digest).digest();\n\n // Reconstruct SPKI DER from raw Ed25519 public key (RFC 8410)\n // SPKI DER structure: [algorithm identifier (12 bytes)] + [raw key (32 bytes)]\n const algorithmIdentifier = Buffer.from([\n 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65,\n 0x70, 0x03, 0x21, 0x00\n ]);\n const rawPublicKey = Buffer.from(publicKeyBase64, 'base64');\n const spkiPublicKey = Buffer.concat([algorithmIdentifier, rawPublicKey]);\n\n const isValid = verify(\n null,\n digestHash,\n {\n key: spkiPublicKey,\n type: 'spki',\n format: 'der'\n },\n Buffer.from(signature.signature, 'base64')\n );\n\n if (!isValid) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Generates a mock signature with valid Ed25519 format.\n * Used as fallback when private key is not available.\n *\n * [EARS-7] Returns a base64-encoded string of 64 random bytes (86 chars + ==)\n */\nexport function generateMockSignature(): string {\n return randomBytes(64).toString('base64');\n}\n","export * from \"./generated\";\nexport * from \"./schema_cache\";\nexport * from \"./errors\";","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { EmbeddedMetadataRecord } from '../record_types/embedded.types';\nimport type { GitGovRecordPayload } from '../record_types/common.types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../record_schemas/schema_cache';\nimport { calculatePayloadChecksum } from '../crypto/checksum';\nimport { verifySignatures } from '../crypto/signatures';\nimport { DetailedValidationError, ChecksumMismatchError, SignatureVerificationError } from './common';\nimport { Schemas } from '../record_schemas';\n\n/**\n * Schema-based validation for EmbeddedMetadata wrapper\n */\nexport function validateEmbeddedMetadataSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.EmbeddedMetadata);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid EmbeddedMetadataRecord\n */\nexport function isEmbeddedMetadataRecord<T extends GitGovRecordPayload>(data: unknown): data is EmbeddedMetadataRecord<T> {\n const [isValid] = validateEmbeddedMetadataSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation for EmbeddedMetadataRecord with formatted errors\n */\nexport function validateEmbeddedMetadataDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateEmbeddedMetadataSchema(data);\n\n const formattedErrors = ajvErrors?.map((error: ErrorObject) => ({\n field: error.instancePath || error.schemaPath,\n message: error.message || 'Validation failed',\n value: error.data\n })) || [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n/**\n * Full validation for EmbeddedMetadataRecord including schema, checksum, and signatures\n */\nexport async function validateFullEmbeddedMetadataRecord<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>,\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation - validate the entire record structure\n const [isValidSchema, errors] = validateEmbeddedMetadataSchema(record);\n if (!isValidSchema) {\n const formattedErrors = errors?.map(error => ({\n field: error.instancePath || error.schemaPath,\n message: error.message || 'Validation failed',\n value: error.data\n })) || [];\n\n throw new DetailedValidationError('EmbeddedMetadata', formattedErrors);\n }\n\n // 2. Checksum Validation\n const expectedChecksum = calculatePayloadChecksum(record.payload);\n if (expectedChecksum !== record.header.payloadChecksum) {\n throw new ChecksumMismatchError();\n }\n\n // 3. Signature Verification\n const areSignaturesValid = await verifySignatures(\n record,\n getActorPublicKey\n );\n if (!areSignaturesValid) {\n throw new SignatureVerificationError();\n }\n}\n\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { AgentRecord } from \"../record_types\";\nimport type { GitGovRecord } from \"../record_types\";\nimport { DetailedValidationError, SchemaValidationError } from \"./common\";\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from \"../record_schemas/schema_cache\";\nimport { Schemas } from '../record_schemas';\nimport type { ActorRecord } from \"../record_types\";\n\n// --- Schema Validation ---\nexport function validateAgentRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.AgentRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\nexport function isAgentRecord(data: unknown): data is AgentRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.AgentRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates an AgentRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateAgentRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateAgentRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of an AgentRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the agent payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullAgentRecord(\n record: GitGovRecord & { payload: AgentRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateAgentRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('AgentRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n\n/**\n * Validates that an AgentRecord has a valid relationship with its corresponding ActorRecord,\n * including succession chain resolution for key rotation scenarios.\n * \n * @param agentRecord The AgentRecord to validate\n * @param getEffectiveActor Function to get the effective ActorRecord (with succession resolution)\n */\nexport async function validateAgentActorRelationship(\n agentRecord: AgentRecord,\n getEffectiveActor: (agentId: string) => Promise<ActorRecord | null>\n): Promise<void> {\n const effectiveActor = await getEffectiveActor(agentRecord.id);\n\n if (!effectiveActor) {\n throw new SchemaValidationError(\n `No active ActorRecord found for AgentRecord ${agentRecord.id}. AgentRecord requires corresponding ActorRecord.`\n );\n }\n\n if (effectiveActor.type !== 'agent') {\n throw new SchemaValidationError(\n `ActorRecord ${effectiveActor.id} must be of type 'agent' to support AgentRecord ${agentRecord.id}.`\n );\n }\n\n if (effectiveActor.status !== 'active') {\n throw new SchemaValidationError(\n `ActorRecord succession chain for ${agentRecord.id} does not resolve to an active actor. Current effective actor: ${effectiveActor.id} (status: ${effectiveActor.status}).`\n );\n }\n}\n","import type { AgentRecord, GitGovAgentRecord } from \"../record_types\";\nimport { validateAgentRecordDetailed } from \"../record_validations/agent_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../record_validations/embedded_metadata_validator\";\nimport { DetailedValidationError } from \"../record_validations/common\";\n\n/**\n * Creates a new, fully-formed AgentRecord with validation.\n *\n * The factory is generic to preserve the metadata type for compile-time safety.\n *\n * @param payload - Partial AgentRecord payload with optional typed metadata\n * @returns AgentRecord<TMetadata> - The validated AgentRecord with preserved metadata type\n */\nexport function createAgentRecord<TMetadata extends object = object>(\n payload: Partial<AgentRecord<TMetadata>>\n): AgentRecord<TMetadata> {\n // Build agent with defaults for optional fields\n const agent = {\n id: payload.id || '',\n engine: payload.engine || { type: 'local' as const },\n status: payload.status || 'active',\n triggers: payload.triggers || [],\n knowledge_dependencies: payload.knowledge_dependencies || [],\n prompt_engine_requirements: payload.prompt_engine_requirements || {},\n metadata: payload.metadata,\n ...payload,\n } as AgentRecord<TMetadata>;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateAgentRecordDetailed(agent);\n if (!validation.isValid) {\n throw new DetailedValidationError('AgentRecord', validation.errors);\n }\n\n return agent;\n}\n\n/**\n * Loads and validates an existing AgentRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (AgentRecord).\n * \n * @param data - Unknown data to validate as GitGovAgentRecord\n * @returns GitGovAgentRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadAgentRecord(data: unknown): GitGovAgentRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (AgentRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific AgentRecord payload\n const record = data as GitGovAgentRecord;\n const payloadValidation = validateAgentRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('AgentRecord payload', payloadValidation.errors);\n }\n \n return record;\n}\n\n","import type {\n AgentRecord,\n AgentPayload,\n GitGovAgentRecord,\n} from '../../record_types';\nimport type { RecordStores } from '../../record_store';\nimport type { IEventStream, AgentRegisteredEvent } from '../../event_bus';\nimport type { KeyProvider } from '../../key_provider/key_provider';\nimport type { IIdentityAdapter } from '../identity_adapter';\nimport type { IAgentAdapter, AgentAdapterDependencies } from './agent_adapter.types';\n\nimport { createAgentRecord } from '../../record_factories/agent_factory';\nimport { validateFullAgentRecord } from '../../record_validations/agent_validator';\nimport { signPayload } from '../../crypto/signatures';\nimport { calculatePayloadChecksum } from '../../crypto/checksum';\n\n/**\n * AgentAdapter - Manages the lifecycle of AgentRecords\n *\n * Responsibilities:\n * - CRUD operations for AgentRecords\n * - Validation that corresponding ActorRecord exists\n * - Cryptographic signing via KeyProvider\n * - Event emission via EventBus\n */\nexport class AgentAdapter implements IAgentAdapter {\n private stores: Required<Pick<RecordStores, 'agents'>>;\n private identity: IIdentityAdapter;\n private keyProvider: KeyProvider;\n private eventBus: IEventStream | undefined;\n\n constructor(dependencies: AgentAdapterDependencies) {\n this.stores = dependencies.stores;\n this.identity = dependencies.identity;\n this.keyProvider = dependencies.keyProvider;\n this.eventBus = dependencies.eventBus;\n }\n\n /**\n * [EARS-A1] Creates a new AgentRecord.\n * [EARS-A2] Throws if id or engine missing.\n * [EARS-A3] Throws if ActorRecord not found.\n * [EARS-A4] Throws if ActorRecord type is not 'agent'.\n * [EARS-A5] Emits event on success.\n */\n async createAgentRecord(payload: Partial<AgentPayload>): Promise<AgentRecord> {\n // [EARS-A2] Validate required fields\n if (!payload.id || !payload.engine) {\n throw new Error('AgentRecord requires id and engine');\n }\n\n // [EARS-A3] Verify that corresponding ActorRecord exists\n const correspondingActor = await this.identity.getActor(payload.id);\n if (!correspondingActor) {\n throw new Error(`ActorRecord with id ${payload.id} not found. AgentRecord can only be created for existing ActorRecord.`);\n }\n\n // [EARS-A4] Verify ActorRecord is of type 'agent'\n if (correspondingActor.type !== 'agent') {\n throw new Error(`ActorRecord with id ${payload.id} must be of type 'agent' to create AgentRecord.`);\n }\n\n // [EARS-A1] Create complete AgentRecord payload\n const completePayload: AgentRecord = {\n id: payload.id,\n engine: payload.engine,\n status: payload.status || 'active',\n triggers: payload.triggers || [],\n knowledge_dependencies: payload.knowledge_dependencies || [],\n prompt_engine_requirements: payload.prompt_engine_requirements || {},\n ...payload\n };\n\n // Validate the payload using the factory\n const validatedPayload = createAgentRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Load private key via KeyProvider for signing\n let privateKey: string;\n try {\n const key = await this.keyProvider.getPrivateKey(payload.id);\n if (!key) {\n throw new Error(`Private key not found for ${payload.id}`);\n }\n privateKey = key;\n } catch (error) {\n throw new Error(\n `Private key not found for actor ${payload.id}. ` +\n `AgentRecord requires a valid private key for cryptographic signing. ` +\n `If this is a legacy actor, you may need to regenerate the actor with 'gitgov actor new'. ` +\n `Original error: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n\n // Create cryptographic signature\n const signature = signPayload(validatedPayload, privateKey, payload.id, 'author', 'Agent registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovAgentRecord = {\n header: {\n version: '1.0',\n type: 'agent',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedPayload\n };\n\n // Validate the complete record\n await validateFullAgentRecord(record, async (keyId) => {\n if (keyId === payload.id) {\n return correspondingActor.publicKey;\n }\n const signerActor = await this.identity.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the record\n await this.stores.agents.put(record.payload.id, record);\n\n // [EARS-A5] Emit agent registered event\n if (this.eventBus) {\n const event: AgentRegisteredEvent = {\n type: \"identity.agent.registered\",\n timestamp: Date.now(),\n source: \"agent_adapter\",\n payload: {\n agentId: validatedPayload.id,\n engine: validatedPayload.engine,\n correspondingActorId: correspondingActor.id,\n },\n };\n this.eventBus.publish(event);\n }\n\n return validatedPayload;\n }\n\n /**\n * [EARS-B1] Returns AgentRecord if exists.\n * [EARS-B2] Returns null if not found.\n */\n async getAgentRecord(agentId: string): Promise<AgentRecord | null> {\n const record = await this.stores.agents.get(agentId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-C1] Returns all AgentRecords.\n */\n async listAgentRecords(): Promise<AgentRecord[]> {\n const ids = await this.stores.agents.list();\n const agents: AgentRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.agents.get(id);\n if (record) {\n agents.push(record.payload);\n }\n }\n\n return agents;\n }\n\n /**\n * [EARS-D1] Updates AgentRecord fields (except id).\n * [EARS-D2] Throws if AgentRecord not found.\n */\n async updateAgentRecord(agentId: string, updates: Partial<AgentPayload>): Promise<AgentRecord> {\n // [EARS-D2] Verify AgentRecord exists\n const existingRecord = await this.stores.agents.get(agentId);\n if (!existingRecord) {\n throw new Error(`AgentRecord with id ${agentId} not found`);\n }\n\n // Get corresponding ActorRecord for signing\n const correspondingActor = await this.identity.getActor(agentId);\n if (!correspondingActor) {\n throw new Error(`ActorRecord with id ${agentId} not found`);\n }\n\n // [EARS-D1] Merge updates (id cannot be changed)\n const updatedPayload: AgentRecord = {\n ...existingRecord.payload,\n ...updates,\n id: agentId, // Ensure id is not changed\n };\n\n // Validate the updated payload\n const validatedPayload = createAgentRecord(updatedPayload);\n\n // Calculate new checksum\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Load private key for signing\n let privateKey: string;\n try {\n const key = await this.keyProvider.getPrivateKey(agentId);\n if (!key) {\n throw new Error(`Private key not found for ${agentId}`);\n }\n privateKey = key;\n } catch (error) {\n throw new Error(`Private key not found for actor ${agentId}`);\n }\n\n // Create signature for update\n const signature = signPayload(validatedPayload, privateKey, agentId, 'author', 'Agent update');\n\n // Create updated record\n const record: GitGovAgentRecord = {\n header: {\n version: '1.0',\n type: 'agent',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedPayload\n };\n\n // Store the updated record\n await this.stores.agents.put(record.payload.id, record);\n\n return validatedPayload;\n }\n\n /**\n * [EARS-E1] Archives AgentRecord (status='archived').\n * [EARS-E2] Throws if AgentRecord not found.\n */\n async archiveAgentRecord(agentId: string): Promise<AgentRecord> {\n return this.updateAgentRecord(agentId, { status: 'archived' });\n }\n}\n","/**\n * BacklogAdapter - The Facade/Mediator\n *\n * Public exports for the backlog_adapter module.\n */\n\n// Types\nexport type {\n IBacklogAdapter,\n BacklogAdapterDependencies,\n BacklogAdapterConfig,\n LintReport,\n AuditReport,\n} from './backlog_adapter.types';\n\n// Implementation\nexport { BacklogAdapter } from './backlog_adapter';\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { TaskRecord } from \"../record_types\";\nimport type { GitGovRecord } from \"../record_types\";\nimport { SchemaValidationCache } from \"../record_schemas/schema_cache\";\nimport { Schemas } from '../record_schemas';\nimport {\n DetailedValidationError\n} from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\n\n// --- Schema Validation ---\nexport function validateTaskRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.TaskRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid TaskRecord.\n */\nexport function isTaskRecord(data: unknown): data is TaskRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.TaskRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a TaskRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateTaskRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateTaskRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of a TaskRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the task payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullTaskRecord(\n record: GitGovRecord & { payload: TaskRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateTaskRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('TaskRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","/**\n * Sanitizes a string to be used in a GitGovernance ID slug.\n * Converts to lower-case, replaces spaces with hyphens, and removes invalid characters.\n */\nfunction sanitizeForId(name: string): string {\n return name\n .toLowerCase()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"\")\n .slice(0, 50); // Ensure slug is not too long\n}\n\n/**\n * Generates an Actor ID (e.g., 'human:camilo-velandia').\n */\nexport function generateActorId(type: 'human' | 'agent', displayName: string): string {\n const slug = sanitizeForId(displayName);\n return `${type}:${slug}`;\n}\n\n/**\n * Generates an Agent ID (e.g., 'agent:code-reviewer').\n * Convenience wrapper over generateActorId for agent-specific use cases.\n */\nexport function generateAgentId(displayName: string): string {\n return generateActorId('agent', displayName);\n}\n\n/**\n * Generates a Task ID (e.g., '12345-task-implement-auth').\n */\nexport function generateTaskId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-task-${slug}`;\n}\n\n/**\n * Generates a Cycle ID (e.g., '12345-cycle-release-v1').\n */\nexport function generateCycleId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-cycle-${slug}`;\n}\n\n/**\n * Generates an Execution ID (e.g., '12345-exec-commit-changes').\n */\nexport function generateExecutionId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-exec-${slug}`;\n}\n\n/**\n * Generates a Changelog ID from title (Protocol v2.0.0).\n * \n * Pattern: {timestamp}-changelog-{slug}\n * Example: '1752707800-changelog-sistema-autenticacion-v1'\n * \n * This follows the official changelog_record_schema.yaml pattern for\n * Release Notes System that aggregates N tasks into 1 deliverable.\n */\nexport function generateChangelogId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-changelog-${slug}`;\n}\n\n/**\n * Generates a Feedback ID (e.g., '12345-feedback-code-review').\n */\nexport function generateFeedbackId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-feedback-${slug}`;\n}\n","import type { TaskRecord, GitGovTaskRecord } from \"../record_types\";\nimport { validateTaskRecordDetailed } from \"../record_validations/task_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../record_validations/embedded_metadata_validator\";\nimport { DetailedValidationError } from \"../record_validations/common\";\nimport { generateTaskId } from \"../utils/id_generator\";\n\n/**\n * Creates a new, fully-formed TaskRecord with validation.\n */\nexport function createTaskRecord(\n payload: Partial<TaskRecord>\n): TaskRecord {\n // Generate timestamp for ID if not provided\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build task with defaults for optional fields\n const task: TaskRecord = {\n id: payload.id || generateTaskId(payload.title || '', timestamp),\n title: payload.title || '',\n status: payload.status || 'draft',\n priority: payload.priority || 'medium',\n description: payload.description || '',\n tags: payload.tags || [],\n cycleIds: payload.cycleIds,\n references: payload.references,\n notes: payload.notes,\n ...payload,\n } as TaskRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateTaskRecordDetailed(task);\n if (!validation.isValid) {\n throw new DetailedValidationError('TaskRecord', validation.errors);\n }\n\n return task;\n}\n\n/**\n * Loads and validates an existing TaskRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (TaskRecord).\n * \n * @param data - Unknown data to validate as GitGovTaskRecord\n * @returns GitGovTaskRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadTaskRecord(data: unknown): GitGovTaskRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (TaskRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific TaskRecord payload\n const record = data as GitGovTaskRecord;\n const payloadValidation = validateTaskRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('TaskRecord payload', payloadValidation.errors);\n }\n\n return record;\n}\n\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { CycleRecord } from \"../record_types\";\nimport type { GitGovRecord } from \"../record_types\";\nimport { SchemaValidationCache } from \"../record_schemas/schema_cache\";\nimport { DetailedValidationError } from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from \"../record_schemas\";\n\n// --- Schema Validation ---\nconst cycleSchema = Schemas.CycleRecord;\n\nexport function validateCycleRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(cycleSchema);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid CycleRecord.\n */\nexport function isCycleRecord(data: unknown): data is CycleRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(cycleSchema);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a CycleRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateCycleRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateCycleRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of a CycleRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the cycle payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullCycleRecord(\n record: GitGovRecord & { payload: CycleRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateCycleRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('CycleRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","import type { CycleRecord, GitGovCycleRecord } from \"../record_types\";\nimport { validateCycleRecordDetailed } from \"../record_validations/cycle_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../record_validations/embedded_metadata_validator\";\nimport { DetailedValidationError } from \"../record_validations/common\";\nimport { generateCycleId } from \"../utils/id_generator\";\n\n/**\n * Creates a new, fully-formed CycleRecord with validation.\n */\nexport function createCycleRecord(\n payload: Partial<CycleRecord>\n): CycleRecord {\n // Generate timestamp for ID if not provided\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build cycle with defaults for optional fields\n const cycle: CycleRecord = {\n id: payload.id || generateCycleId(payload.title || '', timestamp),\n title: payload.title || '',\n status: payload.status || 'planning',\n taskIds: payload.taskIds || [], // EARS-21: Default empty array\n childCycleIds: payload.childCycleIds,\n tags: payload.tags,\n notes: payload.notes,\n ...payload,\n } as CycleRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateCycleRecordDetailed(cycle);\n if (!validation.isValid) {\n throw new DetailedValidationError('CycleRecord', validation.errors);\n }\n\n return cycle;\n}\n\n/**\n * Loads and validates an existing CycleRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (CycleRecord).\n * \n * @param data - Unknown data to validate as GitGovCycleRecord\n * @returns GitGovCycleRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadCycleRecord(data: unknown): GitGovCycleRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (CycleRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific CycleRecord payload\n const record = data as GitGovCycleRecord;\n const payloadValidation = validateCycleRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('CycleRecord payload', payloadValidation.errors);\n }\n\n return record;\n}\n\n","// Types\nexport type {\n IIdentityAdapter,\n IdentityAdapterDependencies,\n} from './identity_adapter.types';\n\n// Implementation\nexport { IdentityAdapter } from './identity_adapter';\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ActorRecord } from \"../record_types\";\nimport type { GitGovRecord } from \"../record_types\";\nimport { DetailedValidationError } from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from \"../record_schemas/schema_cache\";\nimport { Schemas } from \"../record_schemas\";\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\n\n// --- Schema Validation ---\nconst actorSchema = Schemas.ActorRecord;\n\nexport function validateActorRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(actorSchema);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\nexport function isActorRecord(data: unknown): data is ActorRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(actorSchema);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates an ActorRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateActorRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateActorRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of an ActorRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the actor payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullActorRecord(\n record: GitGovRecord & { payload: ActorRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateActorRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ActorRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","import type { ActorRecord, GitGovActorRecord } from \"../record_types\";\nimport { validateActorRecordDetailed } from \"../record_validations/actor_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../record_validations/embedded_metadata_validator\";\nimport { generateActorId } from \"../utils/id_generator\";\nimport { DetailedValidationError } from \"../record_validations/common\";\n\n/**\n * Creates a new, fully-formed ActorRecord with validation.\n */\nexport function createActorRecord(\n payload: Partial<ActorRecord>\n): ActorRecord {\n // Build actor with defaults for optional fields\n const actor: ActorRecord = {\n id: payload.id || generateActorId(payload.type || 'human', payload.displayName || ''),\n type: payload.type || 'human' as const,\n displayName: payload.displayName || '',\n publicKey: payload.publicKey || '',\n roles: payload.roles || ['author'] as [string, ...string[]],\n status: payload.status || 'active',\n ...payload,\n } as ActorRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateActorRecordDetailed(actor);\n if (!validation.isValid) {\n throw new DetailedValidationError('ActorRecord', validation.errors);\n }\n\n return actor;\n}\n\n/**\n * Loads and validates an existing ActorRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ActorRecord).\n * \n * @param data - Unknown data to validate as GitGovActorRecord\n * @returns GitGovActorRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadActorRecord(data: unknown): GitGovActorRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ActorRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific ActorRecord payload\n const record = data as GitGovActorRecord;\n const payloadValidation = validateActorRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ActorRecord payload', payloadValidation.errors);\n }\n \n return record;\n}\n\n","import type {\n ActorRecord,\n GitGovRecord,\n GitGovActorRecord,\n ActorPayload,\n Signature,\n} from '../../record_types';\nimport type { RecordStores } from '../../record_store';\nimport type {\n IEventStream,\n ActorCreatedEvent,\n ActorRevokedEvent,\n} from '../../event_bus';\nimport type { KeyProvider } from '../../key_provider/key_provider';\nimport type { IIdentityAdapter, IdentityAdapterDependencies } from './identity_adapter.types';\n\nimport { createActorRecord } from '../../record_factories/actor_factory';\nimport { validateFullActorRecord } from '../../record_validations/actor_validator';\nimport { generateKeys, signPayload, generateMockSignature } from '../../crypto/signatures';\nimport { calculatePayloadChecksum } from '../../crypto/checksum';\nimport { generateActorId } from '../../utils/id_generator';\nimport type { ISessionManager } from '../../session_manager';\n\nexport class IdentityAdapter implements IIdentityAdapter {\n private stores: Required<Pick<RecordStores, 'actors'>>;\n private keyProvider: KeyProvider;\n private sessionManager: ISessionManager;\n private eventBus: IEventStream | undefined;\n\n constructor(dependencies: IdentityAdapterDependencies) {\n this.stores = dependencies.stores;\n this.keyProvider = dependencies.keyProvider;\n this.sessionManager = dependencies.sessionManager;\n this.eventBus = dependencies.eventBus; // Optional dependency\n }\n\n /**\n * Get actor public key for validation - used by other adapters\n */\n async getActorPublicKey(keyId: string): Promise<string | null> {\n try {\n const actor = await this.getActor(keyId);\n return actor?.publicKey || null;\n } catch (error) {\n return null;\n }\n }\n\n async createActor(\n payload: ActorPayload,\n _signerId: string\n ): Promise<ActorRecord> {\n // Validate required fields\n if (!payload.type || !payload.displayName) {\n throw new Error('ActorRecord requires type and displayName');\n }\n\n // Generate new keys for the actor\n const { publicKey, privateKey } = await generateKeys();\n\n // Generate ID if not provided\n const actorId = payload.id || generateActorId(payload.type, payload.displayName);\n\n // Create complete ActorRecord payload\n const completePayload: ActorRecord = {\n id: actorId,\n type: payload.type,\n displayName: payload.displayName,\n publicKey,\n roles: payload.roles || ['author'],\n status: payload.status || 'active',\n ...payload\n };\n\n // Validate the payload using the factory\n const validatedPayload = createActorRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Create signature for the record\n const signature = signPayload(validatedPayload, privateKey, actorId, 'author', 'Actor registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovActorRecord = {\n header: {\n version: '1.0',\n type: 'actor',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedPayload\n };\n\n // Validate the complete record\n await validateFullActorRecord(record, async (keyId) => {\n if (keyId === actorId) {\n return publicKey; // Self-referential for bootstrap\n }\n const signerActor = await this.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the record with validation\n await this.stores.actors.put(record.payload.id, record);\n\n // Persist private key via KeyProvider\n try {\n await this.keyProvider.setPrivateKey(actorId, privateKey);\n } catch (error) {\n // Log warning but don't fail actor creation if key persistence fails\n // This allows fallback behavior in environments where file permissions might be restricted\n console.warn(`⚠️ Could not persist private key for ${actorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n // Emit actor created event (skipped if no eventBus)\n if (this.eventBus) {\n // Check if this is the first actor (bootstrap)\n const allActorIds = await this.stores.actors.list();\n const isBootstrap = allActorIds.length === 1; // Only the actor we just created\n\n const event: ActorCreatedEvent = {\n type: \"identity.actor.created\",\n timestamp: Date.now(),\n source: \"identity_adapter\",\n payload: {\n actorId,\n type: validatedPayload.type,\n publicKey: validatedPayload.publicKey,\n roles: validatedPayload.roles,\n isBootstrap,\n },\n };\n this.eventBus.publish(event);\n }\n\n return validatedPayload;\n }\n\n async getActor(actorId: string): Promise<ActorRecord | null> {\n const record = await this.stores.actors.get(actorId);\n return record ? record.payload : null;\n }\n\n async listActors(): Promise<ActorRecord[]> {\n const ids = await this.stores.actors.list();\n const actors: ActorRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.actors.get(id);\n if (record) {\n actors.push(record.payload);\n }\n }\n\n return actors;\n }\n\n async signRecord<T extends GitGovRecord>(\n record: T,\n actorId: string,\n role: string,\n notes: string\n ): Promise<T> {\n // Verify actor exists\n const actor = await this.getActor(actorId);\n if (!actor) {\n throw new Error(`Actor not found: ${actorId}`);\n }\n\n // Calculate payload checksum (real)\n const payloadChecksum = calculatePayloadChecksum(record.payload);\n\n // Try to load private key via KeyProvider for real signing\n let privateKey: string | null = null;\n try {\n privateKey = await this.keyProvider.getPrivateKey(actorId);\n } catch (error) {\n // Private key not found - fallback to mock signature for backward compatibility\n console.warn(`⚠️ Private key not found for ${actorId}, using mock signature`);\n }\n\n // Create signature (real if private key available, mock otherwise)\n let signature: Signature;\n if (privateKey) {\n // Real cryptographic signing\n signature = signPayload(record.payload, privateKey, actorId, role, notes);\n } else {\n // Fallback to mock signature for backward compatibility\n signature = {\n keyId: actorId,\n role: role,\n notes: notes,\n signature: generateMockSignature(),\n timestamp: Math.floor(Date.now() / 1000)\n };\n }\n\n // Replace placeholder signatures or add new signature if no placeholders exist\n const existingSignatures = record.header.signatures || [];\n const hasPlaceholder = existingSignatures.some(sig => sig.signature === 'placeholder');\n\n let finalSignatures: [Signature, ...Signature[]];\n if (hasPlaceholder) {\n // Replace placeholder signatures with the real signature\n const replaced = existingSignatures.map(sig =>\n sig.signature === 'placeholder' ? signature : sig\n );\n // Ensure at least one signature (should always be true after replacement)\n finalSignatures = replaced.length > 0\n ? replaced as [Signature, ...Signature[]]\n : [signature];\n } else {\n // No placeholders: append new signature (multi-signature scenario)\n finalSignatures = [...existingSignatures, signature] as [Signature, ...Signature[]];\n }\n\n // Create signed record with real checksum + signature\n // Type assertion safe: we only modify header, payload type T is preserved\n const signedRecord = {\n ...record,\n header: {\n ...record.header,\n payloadChecksum,\n signatures: finalSignatures\n }\n } as T;\n\n return signedRecord;\n }\n\n /**\n * Resolves the current active ActorRecord ID by following the succession chain.\n * This is critical for AgentRecord operations after key rotation.\n *\n * @param originalActorId - The original actor ID (may be revoked)\n * @returns Promise<string> - The current active actor ID\n */\n async resolveCurrentActorId(originalActorId: string): Promise<string> {\n let currentId = originalActorId;\n let actor = await this.getActor(currentId);\n\n // Follow the succession chain until we find an active actor\n while (actor && actor.status === 'revoked' && actor.supersededBy) {\n currentId = actor.supersededBy;\n actor = await this.getActor(currentId);\n }\n\n return currentId;\n }\n\n /**\n * Gets the current ActorRecord of the system based on active session or fallback.\n * This is critical for CLI commands that need to know \"who is the current user\".\n *\n * @returns Promise<ActorRecord> - The current active ActorRecord\n */\n async getCurrentActor(): Promise<ActorRecord> {\n // 1. Try to get from session\n const session = await this.sessionManager.loadSession();\n\n if (session?.lastSession?.actorId) {\n // Use resolveCurrentActorId to handle succession chain\n const currentActorId = await this.resolveCurrentActorId(session.lastSession.actorId);\n const actor = await this.getActor(currentActorId);\n if (actor) {\n return actor;\n }\n }\n\n // 2. Fallback: first active actor in the system\n const actors = await this.listActors();\n const activeActor = actors.find(a => a.status === 'active');\n if (activeActor) {\n return activeActor;\n }\n\n throw new Error(\"❌ No active actors found. Run 'gitgov init' first.\");\n }\n\n /**\n * Gets the effective (current active) ActorRecord for an AgentRecord.\n * This resolves the succession chain to get the current cryptographic identity.\n *\n * @param agentId - The AgentRecord ID (may reference revoked ActorRecord)\n * @returns Promise<ActorRecord | null> - The current active ActorRecord or null\n */\n async getEffectiveActorForAgent(agentId: string): Promise<ActorRecord | null> {\n const currentActorId = await this.resolveCurrentActorId(agentId);\n return this.getActor(currentActorId);\n }\n\n async rotateActorKey(\n actorId: string\n ): Promise<{ oldActor: ActorRecord; newActor: ActorRecord }> {\n // Read existing actor\n const oldActor = await this.getActor(actorId);\n if (!oldActor) {\n throw new Error(`ActorRecord with id ${actorId} not found`);\n }\n\n if (oldActor.status === 'revoked') {\n throw new Error(`Cannot rotate key for revoked actor: ${actorId}`);\n }\n\n // Generate new keys for the new actor\n const { publicKey: newPublicKey, privateKey: newPrivateKey } = await generateKeys();\n\n // Generate new actor ID following the pattern from actor_protocol_faq.md\n // Pattern: {baseId}-v{N} where N is the version number (using hyphens to match schema pattern)\n // Schema pattern: ^(human|agent)(:[a-z0-9-]+)+$ (only allows hyphens, not underscores)\n const baseId = generateActorId(oldActor.type, oldActor.displayName);\n let newActorId: string;\n\n // Check if baseId already has a version suffix (e.g., human:camilo-v2)\n const versionMatch = baseId.match(/^(.+)-v(\\d+)$/);\n if (versionMatch && versionMatch[1] && versionMatch[2]) {\n const baseWithoutVersion = versionMatch[1];\n const currentVersion = parseInt(versionMatch[2], 10);\n newActorId = `${baseWithoutVersion}-v${currentVersion + 1}`;\n } else {\n // First rotation: add -v2\n newActorId = `${baseId}-v2`;\n }\n\n // Create new actor with same metadata but new keys\n const newActorPayload: ActorRecord = {\n id: newActorId,\n type: oldActor.type,\n displayName: oldActor.displayName,\n publicKey: newPublicKey,\n roles: oldActor.roles,\n status: 'active'\n };\n\n // Validate the new payload\n const validatedNewPayload = createActorRecord(newActorPayload);\n\n // Calculate checksum for the new payload\n const payloadChecksum = calculatePayloadChecksum(validatedNewPayload);\n\n // Create signature for the new record (self-signed for bootstrap)\n const signature = signPayload(validatedNewPayload, newPrivateKey, newActorId, 'author', 'Key rotation');\n\n // Create the complete GitGovRecord structure for new actor\n const newRecord: GitGovActorRecord = {\n header: {\n version: '1.0',\n type: 'actor',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedNewPayload\n };\n\n // Validate the complete new record\n await validateFullActorRecord(newRecord, async (keyId) => {\n if (keyId === newActorId) {\n return newPublicKey; // Self-referential for bootstrap\n }\n const signerActor = await this.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the new actor record\n await this.stores.actors.put(newRecord.payload.id, newRecord);\n\n // Revoke old actor and mark succession\n const revokedOldActor = await this.revokeActor(\n actorId,\n 'system',\n 'rotation',\n newActorId // Mark succession\n );\n\n // Update session to point to the new actor using SessionManager\n try {\n // Migrate actorState from old actor to new actor\n const oldState = await this.sessionManager.getActorState(actorId);\n if (oldState) {\n await this.sessionManager.updateActorState(newActorId, oldState);\n } else {\n // Create initial state for new actor\n await this.sessionManager.updateActorState(newActorId, {});\n }\n } catch (error) {\n // Non-critical: session update failure logged as warning\n console.warn(`⚠️ Could not update session for ${newActorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n // Persist new private key via KeyProvider\n try {\n await this.keyProvider.setPrivateKey(newActorId, newPrivateKey);\n } catch (error) {\n console.warn(`⚠️ Could not persist private key for ${newActorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n return {\n oldActor: revokedOldActor,\n newActor: validatedNewPayload\n };\n }\n\n async revokeActor(actorId: string, revokedBy: string = \"system\", reason: \"compromised\" | \"rotation\" | \"manual\" = \"manual\", supersededBy?: string): Promise<ActorRecord> {\n // Read the existing actor\n const existingRecord = await this.stores.actors.get(actorId);\n if (!existingRecord) {\n throw new Error(`ActorRecord with id ${actorId} not found`);\n }\n\n // Update the status to revoked\n const revokedPayload: ActorRecord = {\n ...existingRecord.payload,\n status: \"revoked\",\n ...(supersededBy && { supersededBy })\n };\n\n // Calculate new checksum for the updated payload\n const payloadChecksum = calculatePayloadChecksum(revokedPayload);\n\n // Create updated record\n const updatedRecord: GitGovActorRecord = {\n ...existingRecord,\n header: {\n ...existingRecord.header,\n payloadChecksum\n },\n payload: revokedPayload\n };\n\n // Store the updated record with validation\n await this.stores.actors.put(updatedRecord.payload.id, updatedRecord);\n\n // Emit actor revoked event (skipped if no eventBus)\n if (this.eventBus) {\n const eventPayload: ActorRevokedEvent[\"payload\"] = {\n actorId,\n revokedBy,\n revocationReason: reason,\n };\n\n if (supersededBy) {\n eventPayload.supersededBy = supersededBy;\n }\n\n const event: ActorRevokedEvent = {\n type: \"identity.actor.revoked\",\n timestamp: Date.now(),\n source: \"identity_adapter\",\n payload: eventPayload,\n };\n this.eventBus.publish(event);\n }\n\n return revokedPayload;\n }\n\n async authenticate(_sessionToken: string): Promise<void> {\n // TODO: Implement session token storage for SaaS mode\n console.warn('authenticate not fully implemented yet');\n }\n}\n","/**\n * FeedbackAdapter - The Communication Facilitator\n *\n * Public exports for the feedback_adapter module.\n */\n\n// Types\nexport type {\n IFeedbackAdapter,\n FeedbackAdapterDependencies,\n FeedbackThread,\n} from './feedback_adapter.types';\n\n// Implementation\nexport { FeedbackAdapter } from './feedback_adapter';\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { FeedbackRecord } from '../record_types';\nimport type { GitGovRecord } from '../record_types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../record_schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../record_schemas';\n\n/**\n * Schema-based validation for FeedbackRecord payload\n */\nexport function validateFeedbackRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.FeedbackRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid FeedbackRecord\n */\nexport function isFeedbackRecord(data: unknown): data is FeedbackRecord {\n const [isValid] = validateFeedbackRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateFeedbackRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateFeedbackRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullFeedbackRecord(\n record: GitGovRecord & { payload: FeedbackRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateFeedbackRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('FeedbackRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { FeedbackRecord, GitGovFeedbackRecord } from '../record_types';\nimport { generateFeedbackId } from '../utils/id_generator';\nimport { validateFeedbackRecordDetailed } from '../record_validations/feedback_validator';\nimport { validateEmbeddedMetadataDetailed } from '../record_validations/embedded_metadata_validator';\nimport { DetailedValidationError } from '../record_validations/common';\n\n/**\n * Creates a complete FeedbackRecord with validation.\n *\n * The factory is generic to preserve the metadata type for compile-time safety.\n *\n * @param payload - Partial FeedbackRecord payload with optional typed metadata\n * @returns FeedbackRecord<TMetadata> - The validated FeedbackRecord with preserved metadata type\n */\nexport function createFeedbackRecord<TMetadata extends object = object>(\n payload: Partial<FeedbackRecord<TMetadata>>\n): FeedbackRecord<TMetadata> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n const feedback = {\n id: payload.id || generateFeedbackId(payload.content || 'feedback', timestamp),\n entityType: payload.entityType || 'task',\n entityId: payload.entityId || '',\n type: payload.type || 'question',\n status: payload.status || (payload.type === 'assignment' ? 'resolved' : 'open'),\n content: payload.content || '',\n assignee: payload.assignee,\n resolvesFeedbackId: payload.resolvesFeedbackId,\n metadata: payload.metadata,\n } as FeedbackRecord<TMetadata>;\n\n // Validate the complete feedback record\n const validation = validateFeedbackRecordDetailed(feedback);\n if (!validation.isValid) {\n throw new DetailedValidationError('FeedbackRecord', validation.errors);\n }\n\n return feedback;\n}\n\n/**\n * Loads and validates an existing FeedbackRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (FeedbackRecord).\n * \n * @param data - Unknown data to validate as GitGovFeedbackRecord\n * @returns GitGovFeedbackRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadFeedbackRecord(data: unknown): GitGovFeedbackRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (FeedbackRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific FeedbackRecord payload\n const record = data as GitGovFeedbackRecord;\n const payloadValidation = validateFeedbackRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('FeedbackRecord payload', payloadValidation.errors);\n }\n\n return record;\n}\n\n","import { createFeedbackRecord } from '../../record_factories/feedback_factory';\nimport type { RecordStores } from '../../record_store/record_store.types';\nimport { IdentityAdapter } from '../identity_adapter';\nimport type { FeedbackRecord, GitGovFeedbackRecord } from '../../record_types';\nimport type { IEventStream, FeedbackCreatedEvent } from '../../event_bus';\nimport type {\n IFeedbackAdapter,\n FeedbackAdapterDependencies,\n FeedbackThread,\n} from './feedback_adapter.types';\n\n/**\n * FeedbackAdapter - The Communication Facilitator\n *\n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between structured communication and data stores.\n */\nexport class FeedbackAdapter implements IFeedbackAdapter {\n private stores: Required<Pick<RecordStores, 'feedbacks'>>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n\n constructor(dependencies: FeedbackAdapterDependencies) {\n this.stores = dependencies.stores;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n }\n\n /**\n * [EARS-A1] Creates a new FeedbackRecord for structured communication between actors.\n *\n * Description: Creates a new FeedbackRecord for structured communication between actors.\n * Implementation: Builds record with status: \"open\", signs with actorId, persists and emits event.\n * Usage: Invoked by `gitgov feedback create` to create feedback, assignments, blocks, responses.\n * Returns: Complete and signed FeedbackRecord.\n */\n async create(payload: Partial<FeedbackRecord>, actorId: string): Promise<FeedbackRecord> {\n // Input validation - Type-safe approach\n const payloadWithEntityId = payload as Partial<FeedbackRecord> & { entityId?: string; entityType?: string };\n if (!payloadWithEntityId.entityId) {\n throw new Error('RecordNotFoundError: entityId is required');\n }\n\n if (payloadWithEntityId.entityType && !['task', 'execution', 'changelog', 'feedback', 'cycle'].includes(payloadWithEntityId.entityType)) {\n throw new Error('InvalidEntityTypeError: entityType must be task, execution, changelog, feedback, or cycle');\n }\n\n // Validate no duplicate assignments: a task can be assigned to multiple actors,\n // but the same task cannot have multiple open assignments to the same actor\n // EARS-36: In immutable pattern, assignments stay 'open' forever. Check for resolution via resolvesFeedbackId\n if (payload.type === 'assignment' && payload.assignee) {\n const existingFeedbacks = await this.getFeedbackByEntity(payloadWithEntityId.entityId);\n\n // Find all open assignments for this actor\n const openAssignments = existingFeedbacks.filter(feedback =>\n feedback.type === 'assignment' &&\n feedback.assignee === payload.assignee &&\n feedback.status === 'open'\n );\n\n if (openAssignments.length > 0) {\n // For each open assignment, check if it has been resolved\n // Resolution feedbacks have entityType='feedback' and resolvesFeedbackId pointing to the assignment\n // They are NOT in the same entity list, so we need to search all feedbacks\n const allFeedbacks = await this.getAllFeedback();\n\n for (const assignment of openAssignments) {\n const hasResolution = allFeedbacks.some(feedback =>\n feedback.entityType === 'feedback' &&\n feedback.resolvesFeedbackId === assignment.id &&\n feedback.status === 'resolved'\n );\n\n if (!hasResolution) {\n // Open assignment WITHOUT resolution = duplicate\n throw new Error(`DuplicateAssignmentError: Task ${payloadWithEntityId.entityId} is already assigned to ${payload.assignee} (feedback: ${assignment.id})`);\n }\n }\n }\n }\n\n // Set default status to \"open\" (can be overridden by payload.status)\n const enrichedPayload = {\n status: 'open' as const,\n ...payload // Allows payload.status to override default\n };\n\n try {\n // 1. Build the record with factory\n const validatedPayload = createFeedbackRecord(enrichedPayload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovFeedbackRecord = {\n header: {\n version: '1.0',\n type: 'feedback',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Feedback created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author', 'Feedback record created');\n\n // 4. Persist the record\n await this.stores.feedbacks.put(signedRecord.payload.id, signedRecord);\n\n // 5. Emit event - responsibility ends here\n this.eventBus.publish({\n type: 'feedback.created',\n timestamp: Date.now(),\n source: 'feedback_adapter',\n payload: {\n feedbackId: validatedPayload.id,\n entityType: validatedPayload.entityType,\n entityId: validatedPayload.entityId,\n type: validatedPayload.type,\n status: validatedPayload.status,\n content: validatedPayload.content,\n triggeredBy: actorId,\n assignee: validatedPayload.assignee,\n resolvesFeedbackId: validatedPayload.resolvesFeedbackId\n },\n } as FeedbackCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n if (error instanceof Error && error.message.includes('DetailedValidationError')) {\n throw error;\n }\n throw error;\n }\n }\n\n /**\n * [EARS-B1] Helper: Creates a new feedback that \"resolves\" another (immutable).\n *\n * Description: Helper method that creates a new feedback documenting resolution of another feedback.\n * Implementation: Verifies original exists, then delegates to create() with immutable pattern.\n * Usage: Ergonomic helper for common case. For advanced cases (wontfix, approval), use create() directly.\n * Returns: New FeedbackRecord that points to the original with resolvesFeedbackId.\n */\n async resolve(feedbackId: string, actorId: string, content?: string): Promise<FeedbackRecord> {\n // 1. Verify the original feedback exists\n const originalFeedback = await this.getFeedback(feedbackId);\n if (!originalFeedback) {\n throw new Error(`RecordNotFoundError: Feedback not found: ${feedbackId}`);\n }\n\n // 2. Generate default content if not provided\n const resolveContent = content || `Feedback resolved by ${actorId}`;\n\n // 3. Create NEW feedback that points to the original (immutable pattern)\n // This maintains full immutability - original feedback is never modified\n return await this.create({\n entityType: 'feedback',\n entityId: feedbackId,\n type: 'clarification',\n status: 'resolved',\n content: resolveContent,\n resolvesFeedbackId: feedbackId\n }, actorId);\n }\n\n /**\n * [EARS-C1] Gets a specific FeedbackRecord by its ID for query.\n *\n * Description: Gets a specific FeedbackRecord by its ID for query.\n * Implementation: Direct read from record store without modifications.\n * Usage: Invoked by `gitgov feedback show` to display feedback details.\n * Returns: FeedbackRecord found or null if it doesn't exist.\n */\n async getFeedback(feedbackId: string): Promise<FeedbackRecord | null> {\n const record = await this.stores.feedbacks.get(feedbackId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-D1] Gets all FeedbackRecords associated with a specific entity.\n *\n * Description: Gets all FeedbackRecords associated with a specific entity.\n * Implementation: Reads all records and filters by matching entityId.\n * Usage: Invoked by `gitgov feedback list` to display feedback for a task/cycle/execution.\n * Returns: Array of FeedbackRecords filtered for the entity.\n */\n async getFeedbackByEntity(entityId: string): Promise<FeedbackRecord[]> {\n const ids = await this.stores.feedbacks.list();\n const feedbacks: FeedbackRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.feedbacks.get(id);\n if (record && record.payload.entityId === entityId) {\n feedbacks.push(record.payload);\n }\n }\n\n return feedbacks;\n }\n\n /**\n * [EARS-E1] Gets all FeedbackRecords in the system for indexation.\n *\n * Description: Gets all FeedbackRecords in the system for complete indexation.\n * Implementation: Complete read from record store without filters.\n * Usage: Invoked by `gitgov feedback list` and by MetricsAdapter for calculations.\n * Returns: Complete array of all FeedbackRecords.\n */\n async getAllFeedback(): Promise<FeedbackRecord[]> {\n const ids = await this.stores.feedbacks.list();\n const feedbacks: FeedbackRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.feedbacks.get(id);\n if (record) {\n feedbacks.push(record.payload);\n }\n }\n\n return feedbacks;\n }\n\n /**\n * [EARS-F1] Builds the complete conversation tree for a feedback.\n *\n * Description: Recursively constructs the conversation tree for a feedback.\n * Implementation: Reads root feedback, finds all responses, builds tree recursively until maxDepth.\n * Usage: Invoked by `gitgov feedback thread` and `gitgov feedback show --thread`.\n * Returns: FeedbackThread object with tree structure.\n */\n async getFeedbackThread(feedbackId: string, maxDepth: number = Infinity): Promise<FeedbackThread> {\n return await this.buildThread(feedbackId, maxDepth, 0);\n }\n\n /**\n * Private helper: Recursively builds conversation thread.\n */\n private async buildThread(\n feedbackId: string,\n maxDepth: number,\n currentDepth: number\n ): Promise<FeedbackThread> {\n // 1. Depth limit reached\n if (currentDepth >= maxDepth) {\n throw new Error(`Max depth ${maxDepth} reached for feedback thread`);\n }\n\n // 2. Get root feedback\n const feedback = await this.getFeedback(feedbackId);\n if (!feedback) {\n throw new Error(`RecordNotFoundError: Feedback not found: ${feedbackId}`);\n }\n\n // 3. Find all responses (feedbacks pointing to this one)\n const allFeedbacks = await this.getAllFeedback();\n const responses = allFeedbacks.filter(\n f => f.entityType === 'feedback' && f.entityId === feedbackId\n );\n\n // 4. Build tree recursively\n const responseThreads: FeedbackThread[] = [];\n for (const response of responses) {\n try {\n const thread = await this.buildThread(response.id, maxDepth, currentDepth + 1);\n responseThreads.push(thread);\n } catch (error) {\n // If depth limit reached, just skip this branch\n if (error instanceof Error && error.message.includes('Max depth')) {\n continue;\n }\n throw error;\n }\n }\n\n return {\n feedback,\n responses: responseThreads\n };\n }\n}\n","// Types\nexport type {\n MetricsAdapterDependencies,\n IPlatformApi,\n TokenConsumption,\n SystemStatus,\n TaskHealthReport,\n ProductivityMetrics,\n CollaborationMetrics,\n IMetricsAdapter,\n} from './metric_adapter.types';\n\n// Implementation\nexport { MetricsAdapter } from './metric_adapter';\n","import type { RecordStores } from '../../record_store';\nimport type { TaskRecord, CycleRecord, FeedbackRecord, ExecutionRecord, ActorRecord } from '../../record_types';\nimport type { CollaborationMetrics, IMetricsAdapter, IPlatformApi, MetricsAdapterDependencies, ProductivityMetrics, SystemStatus, TaskHealthReport, TokenConsumption } from './metric_adapter.types';\n\n/**\n * MetricsAdapter - The System Analyst\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between analytics system and multi-store data sources.\n */\nexport class MetricsAdapter implements IMetricsAdapter {\n private stores: Required<Pick<RecordStores, 'tasks' | 'cycles' | 'feedbacks' | 'executions' | 'actors'>>;\n private platformApi: IPlatformApi | undefined;\n\n constructor(dependencies: MetricsAdapterDependencies) {\n this.stores = dependencies.stores;\n this.platformApi = dependencies.platformApi; // Graceful degradation\n }\n\n // ===== PUBLIC API METHODS =====\n\n /**\n * [EARS-A1] Gets aggregated system status using Tier 1 metrics.\n */\n async getSystemStatus(): Promise<SystemStatus> {\n // Read all tasks and cycles\n const taskIds = await this.stores.tasks.list();\n const tasks: TaskRecord[] = [];\n for (const id of taskIds) {\n const record = await this.stores.tasks.get(id);\n if (record) tasks.push(record.payload);\n }\n\n const cycleIds = await this.stores.cycles.list();\n const cycles: CycleRecord[] = [];\n for (const id of cycleIds) {\n const record = await this.stores.cycles.get(id);\n if (record) cycles.push(record.payload);\n }\n\n // Calculate Tier 1 metrics\n const health = this.calculateHealth(tasks);\n\n // Count blocked and stale tasks\n const blockedTasks = tasks.filter(task => task.status === 'paused').length;\n const staleTasks = tasks.filter(task => {\n const staleness = this.calculateTimeInCurrentStage(task);\n return staleness > 7; // More than 7 days in current stage\n }).length;\n\n return {\n tasks: {\n total: tasks.length,\n byStatus: this.countTasksByStatus(tasks),\n byPriority: this.countTasksByPriority(tasks)\n },\n cycles: {\n total: cycles.length,\n active: cycles.filter(c => c.status === 'active').length,\n completed: cycles.filter(c => c.status === 'completed').length\n },\n health: {\n overallScore: health,\n blockedTasks,\n staleTasks\n }\n };\n }\n\n /**\n * [EARS-A2] Gets task health analysis using Tier 1 metrics.\n */\n async getTaskHealth(taskId: string): Promise<TaskHealthReport> {\n // EARS-A3: Validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // Read related data for analysis\n let feedbacks: FeedbackRecord[] = [];\n let allFeedbacks: FeedbackRecord[] = []; // For checking resolutions (immutable pattern)\n let executions: ExecutionRecord[] = [];\n\n\n const feedbackIds = await this.stores.feedbacks.list();\n for (const id of feedbackIds) {\n const record = await this.stores.feedbacks.get(id);\n if (record) {\n allFeedbacks.push(record.payload);\n if (record.payload.entityId === taskId) {\n feedbacks.push(record.payload);\n }\n }\n }\n\n const executionIds = await this.stores.executions.list();\n for (const id of executionIds) {\n const record = await this.stores.executions.get(id);\n if (record && record.payload.taskId === taskId) {\n executions.push(record.payload);\n }\n }\n\n // Calculate Tier 1 metrics\n const timeInCurrentStage = this.calculateTimeInCurrentStage(task);\n const stalenessIndex = this.calculateStalenessIndex([task]);\n\n // Count only UNRESOLVED blocking feedbacks (immutable pattern)\n // A blocking feedback is unresolved if no resolution feedback exists for it\n const blockingFeedbacks = feedbacks.filter(f => {\n if (f.type !== 'blocking' || f.status !== 'open') return false;\n\n // Check if this blocking feedback has been resolved (via another feedback)\n const hasResolution = allFeedbacks.some(resolution =>\n resolution.entityType === 'feedback' &&\n resolution.resolvesFeedbackId === f.id &&\n resolution.status === 'resolved'\n );\n\n return !hasResolution; // Only count if NOT resolved\n }).length;\n const lastActivity = executions.length > 0 ? Math.max(...executions.map(e => this.getTimestampFromId(e.id))) : this.getTimestampFromId(task.id);\n\n // Generate recommendations\n const recommendations: string[] = [];\n if (timeInCurrentStage > 7) recommendations.push('Task has been stagnant for over 7 days');\n if (blockingFeedbacks > 0) recommendations.push(`${blockingFeedbacks} blocking feedback(s) need attention`);\n if (stalenessIndex > 5) recommendations.push('No recent execution activity detected');\n\n // Calculate health score (0-100)\n let healthScore = 100;\n if (timeInCurrentStage > 7) healthScore -= 30;\n if (blockingFeedbacks > 0) healthScore -= 40;\n if (stalenessIndex > 5) healthScore -= 20;\n healthScore = Math.max(0, healthScore);\n\n return {\n taskId,\n healthScore,\n timeInCurrentStage,\n stalenessIndex,\n blockingFeedbacks,\n lastActivity,\n recommendations\n };\n }\n\n /**\n * [EARS-E1] Gets productivity metrics using Tier 2 calculations.\n */\n async getProductivityMetrics(): Promise<ProductivityMetrics> {\n // Read all tasks\n const taskIds = await this.stores.tasks.list();\n const tasks: TaskRecord[] = [];\n for (const id of taskIds) {\n const record = await this.stores.tasks.get(id);\n if (record) tasks.push(record.payload);\n }\n\n // Calculate Tier 2 metrics\n const throughput = this.calculateThroughput(tasks);\n const leadTime = this.calculateLeadTime(tasks);\n const cycleTime = this.calculateCycleTime(tasks);\n const tasksCompleted7d = tasks.filter(task => {\n if (task.status !== 'done') return false;\n const completedTime = this.getTimestampFromId(task.id);\n const sevenDaysAgo = Math.floor(Date.now() / 1000) - (7 * 24 * 60 * 60);\n return completedTime >= sevenDaysAgo;\n }).length;\n\n return {\n throughput,\n leadTime,\n cycleTime,\n tasksCompleted7d,\n averageCompletionTime: leadTime // Alias for leadTime\n };\n }\n\n /**\n * [EARS-E2] Gets collaboration metrics with agent activity analysis.\n */\n async getCollaborationMetrics(): Promise<CollaborationMetrics> {\n // Read actors and executions\n const actorIds = await this.stores.actors.list();\n const actors: ActorRecord[] = [];\n for (const id of actorIds) {\n const record = await this.stores.actors.get(id);\n if (record) actors.push(record.payload);\n }\n\n const executionIds = await this.stores.executions.list();\n const executions: ExecutionRecord[] = [];\n for (const id of executionIds) {\n const record = await this.stores.executions.get(id);\n if (record) executions.push(record.payload);\n }\n\n // Calculate Tier 2 metrics\n const activeAgents = this.calculateActiveAgents(actors, executions);\n const totalAgents = actors.filter(actor => actor.type === 'agent').length;\n const totalHumans = actors.filter(actor => actor.type === 'human').length;\n const agentUtilization = totalAgents > 0 ? (activeAgents / totalAgents) * 100 : 0;\n const humanAgentRatio = totalHumans > 0 ? totalAgents / totalHumans : 0;\n const collaborationIndex = Math.min(100, (activeAgents * 10) + (agentUtilization / 2));\n\n return {\n activeAgents,\n totalAgents,\n agentUtilization,\n humanAgentRatio,\n collaborationIndex\n };\n }\n\n // ===== TIER 1: PURE CALCULATION FUNCTIONS (MVP CRITICAL) =====\n\n /**\n * [EARS-B1] Calculates exact days since last state change.\n */\n calculateTimeInCurrentStage(task: TaskRecord): number {\n try {\n // EARS-F1: Use creation timestamp as fallback if no signatures\n const currentTime = Math.floor(Date.now() / 1000);\n const taskCreationTime = this.getTimestampFromId(task.id);\n\n // TODO: In a complete implementation, we would look at signatures to find last state change\n // For MVP, we use creation time as approximation\n const lastStateChange = taskCreationTime;\n\n const diffSeconds = currentTime - lastStateChange;\n const diffDays = diffSeconds / (24 * 60 * 60);\n\n return Math.max(0, diffDays);\n } catch (error) {\n // EARS-F4: Validate timestamps\n throw new Error(`InvalidDataError: Invalid timestamp data for task ${task.id}`);\n }\n }\n\n /**\n * [EARS-B2] Calculates days since last ExecutionRecord.\n */\n calculateStalenessIndex(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-C2: Handle empty datasets\n if (tasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, calculate based on task creation time\n // In complete implementation, would check actual ExecutionRecords\n const currentTime = Math.floor(Date.now() / 1000);\n const staleDays = tasks.map(task => {\n const taskTime = this.getTimestampFromId(task.id);\n return (currentTime - taskTime) / (24 * 60 * 60);\n });\n\n return Math.max(0, Math.max(...staleDays));\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in staleness calculation');\n }\n }\n\n /**\n * [EARS-B3] Calculates days of oldest active blocking feedback.\n */\n calculateBlockingFeedbackAge(feedback: FeedbackRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(feedback)) {\n throw new Error('InvalidDataError: feedback must be an array');\n }\n\n // Filter blocking and open feedbacks\n const blockingFeedbacks = feedback.filter(f => f.type === 'blocking' && f.status === 'open');\n\n // EARS-C2: Handle empty datasets\n if (blockingFeedbacks.length === 0) {\n return 0;\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const ages = blockingFeedbacks.map(f => {\n const feedbackTime = this.getTimestampFromId(f.id);\n return (currentTime - feedbackTime) / (24 * 60 * 60);\n });\n\n return Math.max(...ages);\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in blocking feedback calculation');\n }\n }\n\n /**\n * [EARS-B4] Calculates health percentage using improved protocol formula.\n */\n calculateHealth(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-C2: Handle empty datasets\n if (tasks.length === 0) {\n return 0;\n }\n\n try {\n // Count tasks by status\n const activeTasks = tasks.filter(task => task.status === 'active').length;\n const doneTasks = tasks.filter(task => task.status === 'done').length;\n const archivedTasks = tasks.filter(task => task.status === 'archived').length;\n const readyTasks = tasks.filter(task => task.status === 'ready').length;\n const reviewTasks = tasks.filter(task => task.status === 'review').length;\n const pausedTasks = tasks.filter(task => task.status === 'paused').length;\n const draftTasks = tasks.filter(task => task.status === 'draft').length;\n\n // Calculate health based on workflow progress and blockers\n // Healthy tasks: done (100%), archived (100%), active (80%), ready (60%), review (40%)\n // Neutral tasks: draft (20%)\n // Problematic tasks: paused (0%)\n const healthyScore = (doneTasks * 100) + (archivedTasks * 100) + (activeTasks * 80) + (readyTasks * 60) + (reviewTasks * 40) + (draftTasks * 20) + (pausedTasks * 0);\n\n const maxPossibleScore = tasks.length * 100;\n\n if (maxPossibleScore === 0) {\n return 0;\n }\n\n return Math.round((healthyScore / maxPossibleScore) * 100);\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in health calculation');\n }\n }\n\n /**\n * [EARS-B5] Returns status distribution with percentages.\n */\n calculateBacklogDistribution(tasks: TaskRecord[]): Record<string, number> {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-C2: Handle empty datasets\n if (tasks.length === 0) {\n return {};\n }\n\n const validStatuses = ['draft', 'review', 'ready', 'active', 'done', 'archived', 'paused'];\n const distribution: Record<string, number> = {};\n\n // EARS-F5: Ignore tasks with invalid status\n const validTasks = tasks.filter(task => validStatuses.includes(task.status));\n\n // EARS-F6: Handle division by zero\n if (validTasks.length === 0) {\n return {};\n }\n\n for (const status of validStatuses) {\n const count = validTasks.filter(task => task.status === status).length;\n distribution[status] = (count / validTasks.length) * 100;\n }\n\n return distribution;\n }\n\n /**\n * [EARS-B6] Counts tasks created in last 24 hours.\n */\n calculateTasksCreatedToday(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const twentyFourHoursAgo = currentTime - (24 * 60 * 60);\n\n return tasks.filter(task => {\n const creationTime = this.getTimestampFromId(task.id);\n return creationTime >= twentyFourHoursAgo;\n }).length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in tasks created today calculation');\n }\n }\n\n // ===== TIER 2: PURE CALCULATION FUNCTIONS (IMPORTANT) =====\n\n /**\n * [EARS-D1] Counts tasks moved to 'done' in last 7 days.\n */\n calculateThroughput(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const sevenDaysAgo = currentTime - (7 * 24 * 60 * 60);\n\n return tasks.filter(task => {\n if (task.status !== 'done') return false;\n // For MVP, use creation time as approximation of completion time\n const completionTime = this.getTimestampFromId(task.id);\n return completionTime >= sevenDaysAgo;\n }).length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in throughput calculation');\n }\n }\n\n /**\n * [EARS-D2] Calculates average done-draft time for lead time.\n */\n calculateLeadTime(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-F2: Filter only completed tasks\n const completedTasks = tasks.filter(task => task.status === 'done');\n\n // EARS-F6: Handle division by zero\n if (completedTasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, calculate based on creation time\n // In complete implementation, would use actual state change timestamps\n const currentTime = Math.floor(Date.now() / 1000);\n const leadTimes = completedTasks.map(task => {\n const creationTime = this.getTimestampFromId(task.id);\n return (currentTime - creationTime) / (24 * 60 * 60); // Convert to days\n });\n\n return leadTimes.reduce((sum, time) => sum + time, 0) / leadTimes.length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in lead time calculation');\n }\n }\n\n /**\n * [EARS-D3] Calculates average done-active time for cycle time.\n */\n calculateCycleTime(tasks: TaskRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // Filter completed tasks that were active\n const activeTasks = tasks.filter(task => task.status === 'done');\n\n // EARS-F3: Return 0 for tasks that were never active\n if (activeTasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, use approximation based on creation time\n // In complete implementation, would track actual active → done transitions\n const cycleTimes = activeTasks.map(task => {\n // Approximate cycle time as 30% of total time (active phase)\n const creationTime = this.getTimestampFromId(task.id);\n const currentTime = Math.floor(Date.now() / 1000);\n const totalTime = (currentTime - creationTime) / (24 * 60 * 60);\n return totalTime * 0.3; // Approximate active time\n });\n\n return cycleTimes.reduce((sum, time) => sum + time, 0) / cycleTimes.length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in cycle time calculation');\n }\n }\n\n /**\n * [EARS-D4] Counts unique agents with executions in 24h.\n */\n calculateActiveAgents(actors: ActorRecord[], executions: ExecutionRecord[]): number {\n // EARS-C1: Validate input\n if (!Array.isArray(actors) || !Array.isArray(executions)) {\n throw new Error('InvalidDataError: actors and executions must be arrays');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const twentyFourHoursAgo = currentTime - (24 * 60 * 60);\n\n // Get recent executions\n const recentExecutions = executions.filter(execution => {\n const executionTime = this.getTimestampFromId(execution.id);\n return executionTime >= twentyFourHoursAgo;\n });\n\n // Get unique agent IDs from recent executions\n const activeAgentIds = new Set<string>();\n\n if (recentExecutions.length > 0) {\n // Cross-reference executions with agent actors to find active agents\n const agentActors = actors.filter(actor => actor.type === 'agent');\n for (const agent of agentActors) {\n // In a complete implementation, we would track execution authorship\n // For now, if there are recent executions and agent actors, count them as active\n activeAgentIds.add(agent.id);\n }\n }\n\n return activeAgentIds.size;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in active agents calculation');\n }\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Extracts timestamp from ID (format: {timestamp}-{type}-{slug})\n */\n private getTimestampFromId(id: string): number {\n try {\n const parts = id.split('-');\n const timestamp = parseInt(parts[0] || '0', 10);\n\n // EARS-F4: Validate timestamps\n if (isNaN(timestamp) || timestamp <= 0) {\n throw new Error(`Invalid timestamp in ID: ${id}`);\n }\n\n return timestamp;\n } catch (error) {\n throw new Error(`InvalidDataError: Cannot extract timestamp from ID: ${id}`);\n }\n }\n\n /**\n * Counts tasks by status\n */\n private countTasksByStatus(tasks: TaskRecord[]): Record<string, number> {\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n const status = task.status;\n counts[status] = (counts[status] || 0) + 1;\n }\n\n return counts;\n }\n\n /**\n * Counts tasks by priority\n */\n private countTasksByPriority(tasks: TaskRecord[]): Record<string, number> {\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n const priority = task.priority;\n counts[priority] = (counts[priority] || 0) + 1;\n }\n\n return counts;\n }\n\n // ===== TIER 3-4: NOT IMPLEMENTED (FUTURE) =====\n\n /**\n * [EARS-C3] Throws NotImplementedError for Tier 3 functions.\n */\n calculateQuality(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateReworkRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateCompletionRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateAuditScoreDistribution(_tasks: TaskRecord[]): Record<string, number> {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateEpicPromotionRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateTaskRefinementRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculatePlanningAccuracy(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateDependencyDiscoveryRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n /**\n * [EARS-C4] Returns null for Premium metrics without Platform API.\n */\n calculateCostBurnRate(_consumption: TokenConsumption[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateTokenConsumption(_consumption: TokenConsumption[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateTokenConsumptionByAgent(_consumption: TokenConsumption[]): Record<string, number> {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return {};\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateAiAccuracyRate(_tasks: TaskRecord[], _feedback: FeedbackRecord[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateAgentExecutionTime(_executions: ExecutionRecord[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n}\n","/**\n * SessionManager Module\n *\n * Provides typed access to GitGovernance session state (.session.json).\n * Session state is ephemeral, machine-local, and NOT versioned in Git.\n */\n\n// Types\nexport type {\n SyncStatus,\n ActorState,\n GitGovSession,\n SyncPreferencesUpdate,\n ISessionManager\n} from './session_manager.types';\n\n// Implementation\nexport { SessionManager } from './session_manager';\n","/**\n * SessionManager - Local Session State Manager\n *\n * Provides typed access to GitGovernance session state (.session.json).\n * Session state is ephemeral, machine-local, and NOT versioned in Git.\n *\n * Uses SessionStore abstraction for backend-agnostic persistence.\n */\n\nimport type { SessionStore } from '../session_store/session_store';\nimport type {\n ISessionManager,\n GitGovSession,\n ActorState,\n SyncPreferencesUpdate\n} from './session_manager.types';\n\n/**\n * Session Manager Class\n *\n * Provides typed access to GitGovernance session state.\n * Uses SessionStore abstraction for backend-agnostic persistence.\n *\n * @example\n * ```typescript\n * // Production usage\n * import { FsSessionStore } from '@gitgov/core/fs';\n * const sessionStore = new FsSessionStore('/path/to/project');\n * const sessionManager = new SessionManager(sessionStore);\n *\n * // Test usage\n * import { MemorySessionStore } from '@gitgov/core/memory';\n * const sessionStore = new MemorySessionStore();\n * sessionStore.setSession({ ... });\n * const sessionManager = new SessionManager(sessionStore);\n * ```\n */\nexport class SessionManager implements ISessionManager {\n private readonly sessionStore: SessionStore;\n\n constructor(sessionStore: SessionStore) {\n this.sessionStore = sessionStore;\n }\n\n /**\n * Load GitGovernance session state\n * [EARS-E1] Auto-detects actor from .key files if no session or no actorId exists\n */\n async loadSession(): Promise<GitGovSession | null> {\n let session = await this.sessionStore.loadSession();\n\n // [EARS-E1] If session exists but no lastSession.actorId, try to auto-detect\n if (session && !session.lastSession?.actorId) {\n const detectedActorId = await this.detectActorFromKeyFiles();\n if (detectedActorId) {\n session.lastSession = {\n actorId: detectedActorId,\n timestamp: new Date().toISOString()\n };\n await this.sessionStore.saveSession(session);\n }\n }\n\n // [EARS-E1] If no session, try to create from .key files\n if (!session) {\n const detectedActorId = await this.detectActorFromKeyFiles();\n if (detectedActorId) {\n const newSession: GitGovSession = {\n lastSession: {\n actorId: detectedActorId,\n timestamp: new Date().toISOString()\n },\n actorState: {}\n };\n try {\n await this.sessionStore.saveSession(newSession);\n return newSession;\n } catch {\n return newSession;\n }\n }\n }\n\n return session;\n }\n\n /**\n * [EARS-E1] Detect actor from .key files in .gitgov/actors/\n */\n async detectActorFromKeyFiles(): Promise<string | null> {\n if (this.sessionStore.detectActorFromKeyFiles) {\n return this.sessionStore.detectActorFromKeyFiles();\n }\n return null;\n }\n\n /**\n * Get actor state for a specific actor\n */\n async getActorState(actorId: string): Promise<ActorState | null> {\n const session = await this.loadSession();\n return session?.actorState?.[actorId] || null;\n }\n\n /**\n * Update actor state for a specific actor\n */\n async updateActorState(actorId: string, state: Partial<ActorState>): Promise<void> {\n const session = await this.loadSession() || {};\n if (!session.actorState) session.actorState = {};\n\n session.actorState[actorId] = {\n ...session.actorState[actorId],\n ...state,\n lastSync: new Date().toISOString()\n };\n\n // Update lastSession if the actor is a human (not an agent)\n if (actorId.startsWith('human:')) {\n session.lastSession = {\n actorId,\n timestamp: new Date().toISOString()\n };\n }\n\n await this.sessionStore.saveSession(session);\n }\n\n /**\n * Get cloud session token\n */\n async getCloudSessionToken(): Promise<string | null> {\n const session = await this.loadSession();\n return session?.cloud?.sessionToken || null;\n }\n\n /**\n * Get sync preferences from session\n */\n async getSyncPreferences(): Promise<GitGovSession['syncPreferences'] | null> {\n const session = await this.loadSession();\n return session?.syncPreferences || null;\n }\n\n /**\n * Update sync preferences in .session.json\n * These are local machine preferences that override project defaults\n */\n async updateSyncPreferences(preferences: SyncPreferencesUpdate): Promise<void> {\n const session = await this.loadSession() || {};\n\n if (!session.syncPreferences) {\n session.syncPreferences = {};\n }\n\n if (preferences.pullScheduler) {\n session.syncPreferences.pullScheduler = {\n ...session.syncPreferences.pullScheduler,\n ...preferences.pullScheduler\n };\n }\n\n if (preferences.fileWatcher) {\n session.syncPreferences.fileWatcher = {\n ...session.syncPreferences.fileWatcher,\n ...preferences.fileWatcher\n };\n }\n\n await this.sessionStore.saveSession(session);\n }\n\n /**\n * Get last session info (last human who interacted)\n */\n async getLastSession(): Promise<{ actorId: string; timestamp: string } | null> {\n const session = await this.loadSession();\n return session?.lastSession || null;\n }\n}\n","import { createTaskRecord } from '../../record_factories/task_factory';\nimport { createCycleRecord } from '../../record_factories/cycle_factory';\nimport type { RecordStores } from '../../record_store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport { FeedbackAdapter } from '../feedback_adapter';\nimport { MetricsAdapter, type SystemStatus, type TaskHealthReport } from '../metrics_adapter';\nimport { SessionManager } from '../../session_manager';\nimport type {\n TaskRecord,\n CycleRecord,\n ExecutionRecord,\n ActorRecord,\n GitGovRecord,\n} from '../../record_types';\nimport type { IWorkflow } from '../workflow_adapter';\nimport type {\n IEventStream,\n TaskCreatedEvent,\n TaskStatusChangedEvent,\n CycleCreatedEvent,\n CycleStatusChangedEvent,\n FeedbackCreatedEvent,\n ExecutionCreatedEvent,\n ChangelogCreatedEvent,\n SystemDailyTickEvent,\n EventMetadata\n} from '../../event_bus';\nimport type { AuditReport, BacklogAdapterConfig, BacklogAdapterDependencies, IBacklogAdapter, LintReport } from './backlog_adapter.types';\n\n// Default configuration\nconst DEFAULT_CONFIG: BacklogAdapterConfig = {\n healthThresholds: {\n taskMinScore: 50,\n maxDaysInStage: 7,\n systemMinScore: 60\n }\n};\n\n/**\n * BacklogAdapter - The Facade/Mediator\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between Task/Cycle protocols and Workflow/Planning methodologies.\n */\nexport class BacklogAdapter implements IBacklogAdapter {\n private stores: Required<Pick<RecordStores, 'tasks' | 'cycles' | 'feedbacks' | 'changelogs'>>;\n\n private feedbackAdapter: FeedbackAdapter;\n private metricsAdapter: MetricsAdapter;\n\n private workflowAdapter: IWorkflow;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n // configManager is required in dependencies but not currently used\n // Reserved for future use (project config access)\n private sessionManager: SessionManager;\n private config: BacklogAdapterConfig;\n\n\n constructor(dependencies: BacklogAdapterDependencies) {\n // Data Layer\n this.stores = dependencies.stores;\n\n // Adapter Dependencies\n this.feedbackAdapter = dependencies.feedbackAdapter;\n this.metricsAdapter = dependencies.metricsAdapter;\n\n // Business Rules & Infrastructure\n this.workflowAdapter = dependencies.workflowAdapter;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n // Note: dependencies.configManager is accepted but not stored (reserved for future use)\n this.sessionManager = dependencies.sessionManager;\n\n // Configuration with defaults\n this.config = dependencies.config || DEFAULT_CONFIG;\n\n // Phase 3: Setup event subscriptions\n this.setupEventSubscriptions();\n }\n\n /**\n * Setup event subscriptions for Phase 3 event handlers\n */\n private setupEventSubscriptions(): void {\n this.eventBus.subscribe<FeedbackCreatedEvent>(\"feedback.created\", (event) =>\n this.handleFeedbackCreated(event)\n );\n this.eventBus.subscribe<ExecutionCreatedEvent>(\"execution.created\", (event) =>\n this.handleExecutionCreated(event)\n );\n this.eventBus.subscribe<ChangelogCreatedEvent>(\"changelog.created\", (event) =>\n this.handleChangelogCreated(event)\n );\n this.eventBus.subscribe<CycleStatusChangedEvent>(\"cycle.status.changed\", (event) =>\n this.handleCycleStatusChanged(event)\n );\n this.eventBus.subscribe<SystemDailyTickEvent>(\"system.daily_tick\", (event) =>\n this.handleDailyTick(event)\n );\n }\n\n // ===== PHASE 1: TASK/CYCLE CRUD OPERATIONS (IMPLEMENTED) =====\n\n /**\n * Creates a new task with workflow validation\n */\n async createTask(payload: Partial<TaskRecord>, actorId: string): Promise<TaskRecord> {\n // 1. Build the record with factory\n const validatedPayload = createTaskRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: TaskRecord } = {\n header: {\n version: '1.0',\n type: 'task',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Task created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author', 'Task created');\n\n // 4. Persist the record with validation\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'task.created',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: validatedPayload.id,\n actorId\n },\n metadata: {\n eventId: `${Date.now()}-task-created-${validatedPayload.id}`,\n timestamp: Date.now(),\n sourceAdapter: 'backlog_adapter'\n }\n } as TaskCreatedEvent);\n\n return validatedPayload;\n }\n\n /**\n * Gets a specific task by ID\n */\n async getTask(taskId: string): Promise<TaskRecord | null> {\n const record = await this.stores.tasks.get(taskId);\n return record ? record.payload : null;\n }\n\n /**\n * Gets all tasks in the system\n */\n async getAllTasks(): Promise<TaskRecord[]> {\n const ids = await this.stores.tasks.list();\n const tasks: TaskRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.tasks.get(id);\n if (record) {\n tasks.push(record.payload);\n }\n }\n\n return tasks;\n }\n\n /**\n * Submits a task for review\n */\n async submitTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // Validate current status\n if (task.status !== 'draft') {\n throw new Error(`ProtocolViolationError: Task ${taskId} is not in draft status`);\n }\n\n // Get actor with proper typing\n const actor = await this.getActor(actorId);\n\n // Delegate to workflow methodology for validation\n const transitionRule = await this.workflowAdapter.getTransitionRule('draft', 'review', {\n task,\n actor,\n signatures: taskRecord.header.signatures\n });\n\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Transition draft→review not allowed for task ${taskId}`);\n }\n\n // Update task status\n const updatedPayload: TaskRecord = { ...task, status: 'review' as const };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // Sign and persist\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'submitter', 'Task submitted for review');\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // Emit event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'draft',\n newStatus: 'review',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Approves a task for next stage with complete workflow validation\n */\n async approveTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Determine target transition from available transitions\n const availableTransitions = await this.getAvailableTransitions(task.status);\n const approvalTransition = availableTransitions.find(transition =>\n transition.requires?.signatures && Object.keys(transition.requires.signatures).length > 0\n );\n\n if (!approvalTransition) {\n throw new Error(`ProtocolViolationError: No approval transition available from ${task.status}`);\n }\n\n const targetState = approvalTransition.to;\n\n // 3. Generate temporary signature for validation\n const tempSignature = {\n keyId: actorId,\n role: 'approver',\n notes: 'Task approval',\n signature: 'temp-signature',\n timestamp: Date.now()\n };\n\n // 4. Build complete validation context\n const context = {\n task,\n actor,\n signatures: [...taskRecord.header.signatures, tempSignature],\n transitionTo: targetState as TaskRecord['status']\n };\n\n // 5. Delegate signature validation to methodology\n const isValidSignature = await this.workflowAdapter.validateSignature(tempSignature, context);\n if (!isValidSignature) {\n throw new Error(`ProtocolViolationError: Signature is not valid for this approval`);\n }\n\n // 6. Update, sign and persist if validation successful\n const updatedPayload: TaskRecord = { ...task, status: targetState as TaskRecord['status'] };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'approver', `Task approved: ${task.status} → ${targetState}`);\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 7. Emit event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: task.status,\n newStatus: targetState,\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Activates a task transitioning from ready to active with permission validation\n */\n async activateTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status is 'ready'\n if (task.status !== 'ready') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot activate from this state.`);\n }\n\n // 3. Validate transition with Workflow\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'active' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowAdapter.getTransitionRule('ready', 'active', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow rejected ready→active transition`);\n }\n\n // 4. Update task status to 'active'\n const updatedPayload: TaskRecord = { ...task, status: 'active' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'executor' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'executor', 'Task activated');\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 6. Update activeTaskId in session state\n await this.sessionManager.updateActorState(actorId, {\n activeTaskId: taskId\n });\n\n // 7. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'ready',\n newStatus: 'active',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Pauses a task manually transitioning from active to paused with optional reason\n */\n async pauseTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'active'\n if (task.status !== 'active') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot pause (requires active).`);\n }\n\n // 3. Resolve actor and validate permissions via workflow methodology\n const actor = await this.getActor(actorId);\n\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'paused' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowAdapter.getTransitionRule('active', 'paused', context);\n if (!transitionRule) {\n throw new Error('ProtocolViolationError: Workflow rejected active→paused transition');\n }\n\n // 4. Update task status to 'paused' and add reason to notes if provided\n const updatedPayload: TaskRecord = {\n ...task,\n status: 'paused',\n // Add reason to notes with [PAUSED] prefix if provided\n ...(reason && {\n notes: `${task.notes || ''}\\n[PAUSED] ${reason} (${new Date().toISOString()})`.trim()\n })\n };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign and persist with pauser role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'pauser', `Task paused: ${reason || 'No reason provided'}`);\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 6. Clear activeTaskId in session state (task no longer active)\n await this.sessionManager.updateActorState(actorId, {\n activeTaskId: undefined\n });\n\n // 7. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'active',\n newStatus: 'paused',\n actorId,\n reason: reason || 'Task manually paused'\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Resumes a paused task transitioning back to active with optional force override\n */\n async resumeTask(taskId: string, actorId: string, force: boolean = false): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'paused'\n if (task.status !== 'paused') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot resume (requires paused).`);\n }\n\n // 3. Resolve actor and validate permissions via workflow methodology\n const actor = await this.getActor(actorId);\n\n if (!force) {\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n if (taskHealth.blockingFeedbacks > 0) {\n throw new Error('BlockingFeedbackError: Task has blocking feedbacks. Resolve them before resuming or use force.');\n }\n }\n\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'active' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowAdapter.getTransitionRule('paused', 'active', context);\n if (!transitionRule) {\n throw new Error('ProtocolViolationError: Workflow rejected paused→active transition');\n }\n\n // 4. Update task status back to 'active'\n const updatedPayload: TaskRecord = { ...task, status: 'active' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign and persist with resumer role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'resumer', 'Task resumed');\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 6. Update activeTaskId in session state\n await this.sessionManager.updateActorState(actorId, {\n activeTaskId: taskId\n });\n\n // 7. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'paused',\n newStatus: 'active',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Completes a task transitioning from active to done with signature validation\n */\n async completeTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status is 'active'\n if (task.status !== 'active') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot complete from this state.`);\n }\n\n // 3. Validate transition with Workflow\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'done' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowAdapter.getTransitionRule('active', 'done', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow rejected active→done transition`);\n }\n\n // 4. Update task status to 'done'\n const updatedPayload: TaskRecord = { ...task, status: 'done' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'approver' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'approver', 'Task completed');\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 6. Clear activeTaskId in session state (task completed)\n await this.sessionManager.updateActorState(actorId, {\n activeTaskId: undefined\n });\n\n // 7. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'active',\n newStatus: 'done',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Discards a task transitioning from ready/active/review to discarded\n * Supports both cancellation (ready/active) and rejection (review) operations\n */\n async discardTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status allows cancellation/rejection with educational error messages\n if (!['ready', 'active', 'review'].includes(task.status)) {\n // Educational error messages for semantic clarity\n if (task.status === 'draft') {\n throw new Error(`ProtocolViolationError: Cannot cancel task in 'draft' state. Use 'gitgov task delete ${taskId}' to remove draft tasks.`);\n }\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot cancel from this state. Only 'ready', 'active', and 'review' tasks can be cancelled.`);\n }\n\n // 3. Validate transition with Workflow\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'discarded' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowAdapter.getTransitionRule(task.status, 'discarded', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow rejected ${task.status}→discarded transition`);\n }\n\n // 4. Update task status to 'discarded' and add cancellation/rejection reason\n const updatedPayload: TaskRecord = {\n ...task,\n status: 'discarded',\n // Add reason to notes with appropriate prefix based on current state\n ...(reason && {\n notes: `${task.notes || ''}\\n${task.status === 'review' ? '[REJECTED]' : '[CANCELLED]'} ${reason} (${new Date().toISOString()})`.trim()\n })\n };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'canceller' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'canceller', `Task discarded: ${reason || 'No reason provided'}`);\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n // 6. Clear activeTaskId in session state (task discarded)\n await this.sessionManager.updateActorState(actorId, {\n activeTaskId: undefined\n });\n\n // 7. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: task.status,\n newStatus: 'discarded',\n actorId,\n reason: reason || (task.status === 'review' ? 'Task rejected' : 'Task cancelled')\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Deletes a draft task completely (no discarded state)\n * Only works for tasks in 'draft' status that never entered formal workflow\n */\n async deleteTask(taskId: string, actorId: string): Promise<void> {\n // 1. Read and validate task exists\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'draft' with educational error messages\n if (task.status !== 'draft') {\n // Educational error messages for semantic clarity\n if (task.status === 'review') {\n throw new Error(`ProtocolViolationError: Cannot delete task in 'review' state. Use 'gitgov task reject ${taskId}' to discard tasks under review.`);\n } else if (task.status === 'ready' || task.status === 'active') {\n throw new Error(`ProtocolViolationError: Cannot delete task in '${task.status}' state. Use 'gitgov task cancel ${taskId}' to discard tasks from ready/active states.`);\n }\n throw new Error(`ProtocolViolationError: Cannot delete task in '${task.status}' state. Only draft tasks can be deleted.`);\n }\n\n // 3. Validate actor has permission (simplified for MVP - in production would check permissions)\n await this.getActor(actorId);\n\n // 4. Delete the task file directly (no discarded state needed for draft)\n await this.stores.tasks.delete(taskId);\n\n // 5. Emit task deleted event (not a status change since it's being removed)\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'draft',\n newStatus: 'deleted',\n actorId,\n reason: 'Draft task deleted'\n }\n } as TaskStatusChangedEvent);\n }\n\n /**\n * Updates a task with new payload\n * [EARS-28] Signs the updated record with the editor's signature\n */\n async updateTask(taskId: string, payload: Partial<TaskRecord>, actorId: string): Promise<TaskRecord> {\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n // Validate not in final state\n if (['archived'].includes(taskRecord.payload.status)) {\n throw new Error(`ProtocolViolationError: Cannot update task in final state: ${taskRecord.payload.status}`);\n }\n\n // Merge and validate with factory\n const updatedPayload = createTaskRecord({ ...taskRecord.payload, ...payload });\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // Sign the updated record with editor role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'editor', 'Task updated');\n await this.stores.tasks.put(signedRecord.payload.id, signedRecord);\n\n return updatedPayload;\n }\n\n // ===== PHASE 2: AGENT NAVIGATION (IMPLEMENTED) =====\n\n /**\n * Gets tasks assigned to a specific actor\n */\n async getTasksAssignedToActor(actorId: string): Promise<TaskRecord[]> {\n // Read all feedbacks to find assignments\n const feedbackIds = await this.stores.feedbacks.list();\n const assignedTaskIds: string[] = [];\n\n for (const id of feedbackIds) {\n const record = await this.stores.feedbacks.get(id);\n if (record &&\n record.payload.type === 'assignment' &&\n record.payload.assignee === actorId) {\n assignedTaskIds.push(record.payload.entityId);\n }\n }\n\n // Deduplicate task IDs (same task may have multiple assignment records)\n const uniqueTaskIds = [...new Set(assignedTaskIds)];\n\n // Read the assigned tasks\n const assignedTasks: TaskRecord[] = [];\n for (const taskId of uniqueTaskIds) {\n const task = await this.getTask(taskId);\n if (task) {\n assignedTasks.push(task);\n }\n }\n\n return assignedTasks;\n }\n\n // ===== PHASE 3: EVENT HANDLERS (NEW IMPLEMENTATION) =====\n\n /**\n * [EARS-31, EARS-33, EARS-34] Handles feedback created events (Immutable Pattern)\n * \n * This handler respects the immutable feedback pattern:\n * - Case 1: Blocking feedback created → pause task if active/ready\n * - Case 2: Feedback resolving another feedback → resume task if no more blocks\n * \n * The immutable pattern means:\n * - Original feedbacks NEVER change status\n * - Resolution is expressed by creating a NEW feedback pointing to the original\n * - We detect resolution via: entityType='feedback' + status='resolved' + resolvesFeedbackId\n */\n async handleFeedbackCreated(event: FeedbackCreatedEvent): Promise<void> {\n try {\n const metadata: EventMetadata = {\n eventId: `${Date.now()}-handle-feedback-created`,\n timestamp: Date.now(),\n processedAt: Date.now(),\n sourceAdapter: 'backlog_adapter'\n };\n\n // === CASE 1: Blocking Feedback Created on Task ===\n if (event.payload.type === 'blocking' && event.payload.entityType === 'task') {\n // Read the associated task\n const task = await this.getTask(event.payload.entityId);\n if (!task) {\n console.warn(`Task not found for feedback: ${event.payload.entityId}`);\n return;\n }\n\n // Only pause if task is in a pausable state\n if (!['active', 'ready'].includes(task.status)) {\n return; // EARS-32: Do nothing if task not pausable\n }\n\n // Update task to paused\n const updatedTask = { ...task, status: 'paused' as const };\n const taskRecord = await this.stores.tasks.get(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.stores.tasks.put(updatedRecord.payload.id, updatedRecord);\n\n // Emit status change event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: task.status,\n newStatus: 'paused',\n actorId: 'system'\n },\n metadata\n } as TaskStatusChangedEvent);\n }\n return;\n }\n\n // === CASE 2: Feedback Resolving Another Feedback (Immutable Pattern) ===\n // Detect: entityType='feedback' + status='resolved' + resolvesFeedbackId present\n if (\n event.payload.entityType === 'feedback' &&\n event.payload.status === 'resolved' &&\n event.payload.resolvesFeedbackId\n ) {\n // 1. Get the ORIGINAL feedback that was resolved\n const originalFeedback = await this.feedbackAdapter.getFeedback(event.payload.resolvesFeedbackId);\n if (!originalFeedback || originalFeedback.type !== 'blocking') {\n return; // Only care about blocking feedbacks\n }\n\n // 2. Get the task associated with the original blocking feedback\n const task = await this.getTask(originalFeedback.entityId);\n if (!task || task.status !== 'paused') {\n return; // Only resume if task is paused\n }\n\n // 3. Check if other blocking feedbacks remain open (EARS-34)\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n if (taskHealth.blockingFeedbacks > 0) {\n return; // Don't resume if other blocks remain\n }\n\n // 4. Resume task automatically\n const updatedTask = { ...task, status: 'active' as const };\n const taskRecord = await this.stores.tasks.get(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.stores.tasks.put(updatedRecord.payload.id, updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'paused',\n newStatus: 'active',\n actorId: 'system'\n },\n metadata\n } as TaskStatusChangedEvent);\n }\n return;\n }\n\n // Other feedback types: do nothing\n } catch (error) {\n console.error('Error in handleFeedbackCreated:', error);\n }\n }\n\n\n /**\n * [EARS-35] Handles execution created events - transitions ready→active on first execution\n */\n async handleExecutionCreated(event: ExecutionCreatedEvent): Promise<void> {\n try {\n // EARS-35: Use ExecutionAdapter isFirstExecution logic\n if (!event.payload.isFirstExecution) {\n return; // EARS-36: Do nothing on subsequent executions\n }\n\n const task = await this.getTask(event.payload.taskId);\n if (!task || task.status !== 'ready') {\n return;\n }\n\n // EARS-36: Validate with Workflow before transition\n const actor = await this.getActor(event.payload.triggeredBy);\n const transitionRule = await this.workflowAdapter.getTransitionRule('ready', 'active', {\n task,\n actor,\n signatures: []\n });\n\n if (!transitionRule) {\n console.warn(`Workflow rejected ready→active transition for task ${task.id}`);\n return;\n }\n\n // Transition to active\n const updatedTask = { ...task, status: 'active' as const };\n const taskRecord = await this.stores.tasks.get(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.stores.tasks.put(updatedRecord.payload.id, updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'ready',\n newStatus: 'active',\n actorId: event.payload.triggeredBy\n }\n } as TaskStatusChangedEvent);\n }\n } catch (error) {\n console.error('Error in handleExecutionCreated:', error);\n }\n }\n\n /**\n * [EARS-37] Handles changelog created events - transitions done→archived\n */\n async handleChangelogCreated(event: ChangelogCreatedEvent): Promise<void> {\n try {\n // Get changelog record to access entityType and entityId\n const changelogRecord = await this.stores.changelogs.get(event.payload.changelogId);\n if (!changelogRecord) {\n console.warn(`Changelog not found: ${event.payload.changelogId}`);\n return;\n }\n\n // EARS-37: Handle changelogs with relatedTasks\n if (!changelogRecord.payload.relatedTasks || changelogRecord.payload.relatedTasks.length === 0) {\n return;\n }\n\n // Archive all related tasks that are in 'done' status\n for (const taskId of changelogRecord.payload.relatedTasks) {\n const task = await this.getTask(taskId);\n if (!task || task.status !== 'done') {\n continue;\n }\n\n // Transition to archived\n const updatedTask = { ...task, status: 'archived' as const };\n const taskRecord = await this.stores.tasks.get(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.stores.tasks.put(updatedRecord.payload.id, updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'done',\n newStatus: 'archived',\n actorId: 'system'\n }\n } as TaskStatusChangedEvent);\n }\n } // Close for loop\n } catch (error) {\n console.error('Error in handleChangelogCreated:', error);\n }\n }\n\n /**\n * [EARS-38] Handles daily tick events - proactive health auditing\n */\n async handleDailyTick(_event: SystemDailyTickEvent): Promise<void> {\n try {\n // EARS-38: Use MetricsAdapter for proactive auditing\n const systemStatus = await this.metricsAdapter.getSystemStatus();\n\n // Get all active tasks for health analysis\n const allTasks = await this.getAllTasks();\n const activeTasks = allTasks.filter(task => task.status === 'active');\n\n for (const task of activeTasks) {\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n\n // Apply configurable health thresholds\n if (taskHealth.healthScore < this.config.healthThresholds.taskMinScore ||\n taskHealth.timeInCurrentStage > this.config.healthThresholds.maxDaysInStage) {\n // Create automated warning feedback\n await this.feedbackAdapter.create({\n entityType: 'task',\n entityId: task.id,\n type: 'suggestion',\n content: `Automated health warning: Task health score is ${taskHealth.healthScore}%. ${taskHealth.recommendations.join('. ')}.`,\n status: 'open'\n }, 'system');\n }\n }\n\n // Log system health alert if critical issues (no custom event needed)\n if (systemStatus.health.overallScore < this.config.healthThresholds.systemMinScore) {\n console.warn(`System health alert: Score ${systemStatus.health.overallScore}%, blocked: ${systemStatus.health.blockedTasks}, stale: ${systemStatus.health.staleTasks}`);\n // Note: Health alerts are logged, not emitted as events. \n // System monitoring should read logs for alerting.\n }\n } catch (error) {\n console.error('Error in handleDailyTick:', error);\n }\n }\n\n /**\n * [EARS-45] Handles cycle status changed events - manages cycle hierarchy completion\n */\n async handleCycleStatusChanged(event: CycleStatusChangedEvent): Promise<void> {\n try {\n // Only handle cycle completion\n if (event.payload.newStatus !== 'completed') {\n return;\n }\n\n const completedCycle = await this.getCycle(event.payload.cycleId);\n if (!completedCycle) {\n console.warn(`Completed cycle not found: ${event.payload.cycleId}`);\n return;\n }\n\n // Find parent cycles that contain this completed cycle\n const allCycles = await this.getAllCycles();\n const parentCycles = allCycles.filter(cycle =>\n cycle.childCycleIds?.includes(event.payload.cycleId)\n );\n\n for (const parentCycle of parentCycles) {\n // Check if ALL child cycles are completed\n const childCycles = await Promise.all(\n (parentCycle.childCycleIds || []).map(id => this.getCycle(id))\n );\n\n const allChildrenCompleted = childCycles.every(child =>\n child && child.status === 'completed'\n );\n\n if (allChildrenCompleted) {\n // Complete the parent cycle\n await this.updateCycle(parentCycle.id, { status: 'completed' });\n\n // TODO: Delegate epic task completion to planning methodology\n // The logic for completing epic tasks based on cycle completion\n // should be handled by planningMethodology, not backlogAdapter\n /*\n if (this.planningMethodology) {\n await this.planningMethodology.handleEpicCompletion({\n completedCycleId: parentCycle.id,\n event\n });\n }\n */\n\n // For now, just log the completion - epic logic will be in planning methodology\n console.log(`Parent cycle ${parentCycle.id} completed - epic task completion delegated to planning methodology`);\n }\n }\n } catch (error) {\n console.error('Error in handleCycleStatusChanged:', error);\n }\n }\n\n // ===== PHASE 4: STUBS AND POLISH (DELEGATE TO ADAPTERS) =====\n\n /**\n * Gets system status by delegating to MetricsAdapter\n */\n async getSystemStatus(): Promise<SystemStatus> {\n return await this.metricsAdapter.getSystemStatus();\n }\n\n /**\n * Gets task health by delegating to MetricsAdapter\n */\n async getTaskHealth(taskId: string): Promise<TaskHealthReport> {\n return await this.metricsAdapter.getTaskHealth(taskId);\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Helper to get actor record\n */\n private async getActor(actorId: string): Promise<ActorRecord> {\n // Use IdentityAdapter to get real actor data\n const actor = await this.identity.getActor(actorId);\n if (!actor) {\n throw new Error(`RecordNotFoundError: Actor not found: ${actorId}`);\n }\n return actor;\n }\n\n /**\n * Helper to get available transitions from current state\n */\n private async getAvailableTransitions(fromStatus: string): Promise<Array<{ from: string; to: string; requires?: { signatures?: Record<string, { role: string }> } }>> {\n // This would normally be implemented using workflow.getAvailableTransitions()\n // For now, implementing basic logic based on canonical workflow\n const transitions = [\n { from: 'review', to: 'ready', requires: { signatures: { __default__: { role: 'approver' } } } },\n { from: 'active', to: 'done', requires: { signatures: { __default__: { role: 'approver' } } } }\n ];\n\n return transitions.filter(t => t.from === fromStatus);\n }\n\n // ===== PHASE 1: CYCLE CRUD OPERATIONS (IMPLEMENTED) =====\n\n /**\n * Creates a new cycle with workflow validation\n */\n async createCycle(payload: Partial<CycleRecord>, actorId: string): Promise<CycleRecord> {\n // 1. Build the record with factory\n const validatedPayload = createCycleRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: CycleRecord } = {\n header: {\n version: '1.0',\n type: 'cycle',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Cycle created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author', 'Cycle created');\n\n // 4. Persist the record\n await this.stores.cycles.put(signedRecord.payload.id, signedRecord);\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'cycle.created',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n cycleId: validatedPayload.id,\n actorId\n },\n metadata: {\n eventId: `${Date.now()}-cycle-created-${validatedPayload.id}`,\n timestamp: Date.now(),\n sourceAdapter: 'backlog_adapter'\n }\n } as CycleCreatedEvent);\n\n return validatedPayload;\n }\n\n /**\n * Gets a specific cycle by ID\n */\n async getCycle(cycleId: string): Promise<CycleRecord | null> {\n const record = await this.stores.cycles.get(cycleId);\n return record ? record.payload : null;\n }\n\n /**\n * Gets all cycles in the system\n */\n async getAllCycles(): Promise<CycleRecord[]> {\n const ids = await this.stores.cycles.list();\n const cycles: CycleRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.cycles.get(id);\n if (record) {\n cycles.push(record.payload);\n }\n }\n\n return cycles;\n }\n\n /**\n * Updates a cycle with new payload\n */\n async updateCycle(cycleId: string, payload: Partial<CycleRecord>, actorId?: string): Promise<CycleRecord> {\n const cycleRecord = await this.stores.cycles.get(cycleId);\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n\n // Validate not in final state\n if (['archived'].includes(cycleRecord.payload.status)) {\n throw new Error(`ProtocolViolationError: Cannot update cycle in final state: ${cycleRecord.payload.status}`);\n }\n\n // Merge and validate with factory\n const updatedPayload = createCycleRecord({ ...cycleRecord.payload, ...payload });\n const updatedRecord = { ...cycleRecord, payload: updatedPayload };\n\n // Update activeCycleId in session state based on cycle status transitions\n if (actorId) {\n // Set activeCycleId when cycle is activated\n if (updatedPayload.status === 'active' && cycleRecord.payload.status !== 'active') {\n await this.sessionManager.updateActorState(actorId, {\n activeCycleId: cycleId\n });\n }\n // Clear activeCycleId when cycle is completed\n else if (updatedPayload.status === 'completed' && cycleRecord.payload.status !== 'completed') {\n await this.sessionManager.updateActorState(actorId, {\n activeCycleId: undefined\n });\n }\n }\n\n // Emit event if status changed\n if (cycleRecord.payload.status !== updatedPayload.status) {\n this.eventBus.publish({\n type: 'cycle.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n cycleId,\n oldStatus: cycleRecord.payload.status,\n newStatus: updatedPayload.status,\n actorId: actorId || 'system'\n }\n } as CycleStatusChangedEvent);\n }\n\n await this.stores.cycles.put(updatedRecord.payload.id, updatedRecord);\n return updatedPayload;\n }\n\n /**\n * Creates bidirectional link between task and cycle\n */\n async addTaskToCycle(cycleId: string, taskId: string): Promise<void> {\n // Read both records\n const cycleRecord = await this.stores.cycles.get(cycleId);\n const taskRecord = await this.stores.tasks.get(taskId);\n\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n // Create bidirectional links\n const updatedCycle = {\n ...cycleRecord.payload,\n taskIds: [...(cycleRecord.payload.taskIds || []), taskId]\n };\n const updatedTask = {\n ...taskRecord.payload,\n cycleIds: [...(taskRecord.payload.cycleIds || []), cycleId]\n };\n\n // Get current actor for signing (MVP mode)\n const currentActor = await this.identity.getCurrentActor();\n\n // Sign and persist both records with current actor\n const signedCycleRecord = await this.identity.signRecord(\n { ...cycleRecord, payload: updatedCycle },\n currentActor.id,\n 'author',\n `Task ${taskId} added to cycle`\n );\n const signedTaskRecord = await this.identity.signRecord(\n { ...taskRecord, payload: updatedTask },\n currentActor.id,\n 'author',\n `Task linked to cycle ${cycleId}`\n );\n\n await Promise.all([\n this.stores.cycles.put(signedCycleRecord.payload.id, signedCycleRecord),\n this.stores.tasks.put(signedTaskRecord.payload.id, signedTaskRecord)\n ]);\n }\n\n /**\n * Removes multiple tasks from a cycle with bidirectional unlinking\n * All business logic and validation happens here in the adapter\n */\n async removeTasksFromCycle(cycleId: string, taskIds: string[]): Promise<void> {\n // 1. Validate inputs\n if (!cycleId || typeof cycleId !== 'string') {\n throw new Error('ValidationError: cycleId must be a non-empty string');\n }\n if (!Array.isArray(taskIds) || taskIds.length === 0) {\n throw new Error('ValidationError: taskIds must be a non-empty array');\n }\n\n // 2. Read cycle record\n const cycleRecord = await this.stores.cycles.get(cycleId);\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n\n // 3. Read all task records and validate they exist\n const taskRecords = await Promise.all(\n taskIds.map(async (taskId) => {\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n return { taskId, record: taskRecord };\n })\n );\n\n // 4. Validate that all tasks are actually linked to this cycle\n const cycleTaskIds = cycleRecord.payload.taskIds || [];\n const notLinkedTasks = taskIds.filter(taskId => !cycleTaskIds.includes(taskId));\n if (notLinkedTasks.length > 0) {\n throw new Error(`ValidationError: Tasks not linked to cycle ${cycleId}: ${notLinkedTasks.join(', ')}`);\n }\n\n // 5. Prepare updated cycle (remove all taskIds)\n const updatedCycle = {\n ...cycleRecord.payload,\n taskIds: cycleTaskIds.filter(id => !taskIds.includes(id))\n };\n\n // 6. Get current actor for signing\n const currentActor = await this.identity.getCurrentActor();\n\n // 7. Sign cycle record\n const signedCycleRecord = await this.identity.signRecord(\n { ...cycleRecord, payload: updatedCycle },\n currentActor.id,\n 'author',\n `Tasks removed from cycle: ${taskIds.join(', ')}`\n );\n\n // 8. Prepare and sign all task records (remove cycleId from each)\n const signedTaskRecords = await Promise.all(\n taskRecords.map(async ({ record }) => {\n const taskCycleIds = record.payload.cycleIds || [];\n const updatedTask = {\n ...record.payload,\n cycleIds: taskCycleIds.filter(id => id !== cycleId)\n };\n return await this.identity.signRecord(\n { ...record, payload: updatedTask },\n currentActor.id,\n 'author',\n 'Task removed from deleted cycle'\n );\n })\n );\n\n // 9. Atomic write - all or nothing\n await Promise.all([\n this.stores.cycles.put(signedCycleRecord.payload.id, signedCycleRecord),\n ...signedTaskRecords.map(signedTask =>\n this.stores.tasks.put(signedTask.payload.id, signedTask)\n )\n ]);\n }\n\n /**\n * Moves multiple tasks from one cycle to another atomically\n * Provides transactional semantics - all tasks move or none do\n * All business logic and validation happens here in the adapter\n */\n async moveTasksBetweenCycles(targetCycleId: string, taskIds: string[], sourceCycleId: string): Promise<void> {\n // 1. Validate inputs\n if (!sourceCycleId || typeof sourceCycleId !== 'string') {\n throw new Error('ValidationError: sourceCycleId must be a non-empty string');\n }\n if (!targetCycleId || typeof targetCycleId !== 'string') {\n throw new Error('ValidationError: targetCycleId must be a non-empty string');\n }\n if (!Array.isArray(taskIds) || taskIds.length === 0) {\n throw new Error('ValidationError: taskIds must be a non-empty array');\n }\n if (sourceCycleId === targetCycleId) {\n throw new Error('ValidationError: Source and target cycles must be different');\n }\n\n // 2. Read all records\n const [sourceCycleRecord, targetCycleRecord] = await Promise.all([\n this.stores.cycles.get(sourceCycleId),\n this.stores.cycles.get(targetCycleId)\n ]);\n\n if (!sourceCycleRecord) {\n throw new Error(`RecordNotFoundError: Source cycle not found: ${sourceCycleId}`);\n }\n if (!targetCycleRecord) {\n throw new Error(`RecordNotFoundError: Target cycle not found: ${targetCycleId}`);\n }\n\n // 3. Read all task records and validate they exist\n const taskRecords = await Promise.all(\n taskIds.map(async (taskId) => {\n const taskRecord = await this.stores.tasks.get(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n return { taskId, record: taskRecord };\n })\n );\n\n // 4. Validate that all tasks are actually linked to source cycle\n const sourceTaskIds = sourceCycleRecord.payload.taskIds || [];\n const notLinkedTasks = taskIds.filter(taskId => !sourceTaskIds.includes(taskId));\n if (notLinkedTasks.length > 0) {\n throw new Error(`ValidationError: Tasks not linked to source cycle ${sourceCycleId}: ${notLinkedTasks.join(', ')}`);\n }\n\n // 5. Prepare updated cycles\n const updatedSourceCycle = {\n ...sourceCycleRecord.payload,\n taskIds: sourceTaskIds.filter(id => !taskIds.includes(id))\n };\n const updatedTargetCycle = {\n ...targetCycleRecord.payload,\n taskIds: [...(targetCycleRecord.payload.taskIds || []), ...taskIds]\n };\n\n // 6. Get current actor for signing\n const currentActor = await this.identity.getCurrentActor();\n\n // 7. Sign both cycle records\n const [signedSourceCycle, signedTargetCycle] = await Promise.all([\n this.identity.signRecord(\n { ...sourceCycleRecord, payload: updatedSourceCycle },\n currentActor.id,\n 'author',\n 'Tasks moved from cycle'\n ),\n this.identity.signRecord(\n { ...targetCycleRecord, payload: updatedTargetCycle },\n currentActor.id,\n 'author',\n 'Tasks moved to cycle'\n )\n ]);\n\n // 8. Prepare and sign all task records (update cycleIds)\n const signedTaskRecords = await Promise.all(\n taskRecords.map(async ({ record }) => {\n const taskCycleIds = record.payload.cycleIds || [];\n const updatedTask = {\n ...record.payload,\n cycleIds: taskCycleIds\n .filter(id => id !== sourceCycleId) // Remove source\n .concat(targetCycleId) // Add target\n };\n return await this.identity.signRecord(\n { ...record, payload: updatedTask },\n currentActor.id,\n 'author',\n 'Task cycle updated'\n );\n })\n );\n\n // 9. Atomic write - all or nothing\n try {\n await Promise.all([\n this.stores.cycles.put(signedSourceCycle.payload.id, signedSourceCycle),\n this.stores.cycles.put(signedTargetCycle.payload.id, signedTargetCycle),\n ...signedTaskRecords.map(signedTask =>\n this.stores.tasks.put(signedTask.payload.id, signedTask)\n )\n ]);\n } catch (error) {\n throw new Error(`AtomicOperationError: Failed to move tasks between cycles: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n // TODO: Implement when lint_command.md is implemented\n async lint(): Promise<LintReport> {\n throw new Error('NotImplementedError: lint() will be implemented when lint_command.md is ready');\n }\n\n // TODO: Implement when audit_command.md is implemented \n async audit(): Promise<AuditReport> {\n throw new Error('NotImplementedError: audit() will be implemented when audit_command.md is ready');\n }\n\n // TODO: Implement when commit_processor_adapter.md is implemented\n async processChanges(_changes: unknown[]): Promise<ExecutionRecord[]> {\n throw new Error('NotImplementedError: processChanges() will be implemented when commit_processor_adapter.md is ready');\n }\n}\n","/**\n * ChangelogAdapter - Release Notes & Deliverables Historian\n *\n * Public exports for the changelog_adapter module.\n */\n\n// Types\nexport type {\n IChangelogAdapter,\n ChangelogAdapterDependencies,\n ChangelogListOptions,\n} from './changelog_adapter.types';\n\n// Implementation\nexport { ChangelogAdapter } from './changelog_adapter';\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ChangelogRecord } from '../record_types';\nimport type { GitGovRecord } from '../record_types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../record_schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../record_schemas';\n\n/**\n * Schema-based validation for ChangelogRecord payload\n */\nexport function validateChangelogRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.ChangelogRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid ChangelogRecord\n */\nexport function isChangelogRecord(data: unknown): data is ChangelogRecord {\n const [isValid] = validateChangelogRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateChangelogRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateChangelogRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullChangelogRecord(\n record: GitGovRecord & { payload: ChangelogRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateChangelogRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ChangelogRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { ChangelogRecord, GitGovChangelogRecord } from '../record_types';\nimport { validateChangelogRecordDetailed } from '../record_validations/changelog_validator';\nimport { validateEmbeddedMetadataDetailed } from '../record_validations/embedded_metadata_validator';\nimport { DetailedValidationError } from '../record_validations/common';\n\n/**\n * Creates a complete ChangelogRecord with validation (Protocol v2)\n * \n * @param payload - Partial ChangelogRecord payload\n * @returns ChangelogRecord - The validated ChangelogRecord\n */\nexport function createChangelogRecord(payload: Partial<ChangelogRecord>): ChangelogRecord {\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build changelog with required fields\n const changelog: ChangelogRecord = {\n // Required fields\n id: payload.id || '',\n title: payload.title || '',\n description: payload.description || '',\n relatedTasks: (payload.relatedTasks || []) as [string, ...string[]],\n completedAt: payload.completedAt || timestamp,\n\n // Optional fields (only include if provided)\n ...(payload.relatedCycles && { relatedCycles: payload.relatedCycles }),\n ...(payload.relatedExecutions && { relatedExecutions: payload.relatedExecutions }),\n ...(payload.version && { version: payload.version }),\n ...(payload.tags && { tags: payload.tags }),\n ...(payload.commits && { commits: payload.commits }),\n ...(payload.files && { files: payload.files }),\n ...(payload.notes && { notes: payload.notes })\n };\n\n // Validate the complete changelog record\n const validation = validateChangelogRecordDetailed(changelog);\n if (!validation.isValid) {\n throw new DetailedValidationError('ChangelogRecord', validation.errors);\n }\n\n return changelog;\n}\n\n/**\n * Loads and validates an existing ChangelogRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ChangelogRecord).\n * \n * @param data - Unknown data to validate as GitGovChangelogRecord\n * @returns GitGovChangelogRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadChangelogRecord(data: unknown): GitGovChangelogRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ChangelogRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific ChangelogRecord payload\n const record = data as GitGovChangelogRecord;\n const payloadValidation = validateChangelogRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ChangelogRecord payload', payloadValidation.errors);\n }\n\n return record;\n}\n\n","import { createChangelogRecord } from '../../record_factories/changelog_factory';\nimport type { RecordStores } from '../../record_store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport { generateChangelogId } from '../../utils/id_generator';\nimport type { ChangelogRecord } from '../../record_types';\nimport type { IEventStream, ChangelogCreatedEvent } from '../../event_bus';\nimport type { GitGovRecord } from '../../record_types';\nimport type {\n IChangelogAdapter,\n ChangelogAdapterDependencies,\n ChangelogListOptions,\n} from './changelog_adapter.types';\n\n/**\n * ChangelogAdapter - Release Notes & Deliverables Historian\n *\n * Protocol v2: Aggregates N tasks into 1 release note/deliverable.\n * Focus: Executive communication of delivered value.\n */\nexport class ChangelogAdapter implements IChangelogAdapter {\n private stores: Required<Pick<RecordStores, 'changelogs' | 'tasks' | 'cycles'>>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n\n constructor(dependencies: ChangelogAdapterDependencies) {\n this.stores = dependencies.stores;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n }\n\n /**\n * [EARS-A1] Records a deliverable/release note.\n *\n * Description: Aggregates multiple tasks into a single deliverable/release note.\n * Implementation: Validates required fields, builds record with factory, signs, persists and emits event.\n * Usage: Invoked by `gitgov changelog add` to document deliverables.\n * Returns: Complete and signed ChangelogRecord.\n */\n async create(payload: Partial<ChangelogRecord>, actorId: string): Promise<ChangelogRecord> {\n // Input validation\n if (!payload.title || payload.title.length < 10) {\n throw new Error('DetailedValidationError: title is required and must be at least 10 characters');\n }\n\n if (!payload.description || payload.description.length < 20) {\n throw new Error('DetailedValidationError: description is required and must be at least 20 characters');\n }\n\n if (!payload.relatedTasks || payload.relatedTasks.length === 0) {\n throw new Error('DetailedValidationError: relatedTasks is required and must contain at least one task ID');\n }\n\n // [EARS-A5] Validate that related tasks exist\n if (payload.relatedTasks) {\n for (const taskId of payload.relatedTasks) {\n const taskExists = await this.stores.tasks.get(taskId);\n if (!taskExists) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n }\n }\n\n // Validate that related cycles exist\n if (payload.relatedCycles) {\n for (const cycleId of payload.relatedCycles) {\n const cycleExists = await this.stores.cycles.get(cycleId);\n if (!cycleExists) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n }\n }\n\n try {\n // 1. Generate ID if not provided (EARS-A6)\n const timestamp = payload.completedAt || Math.floor(Date.now() / 1000);\n if (!payload.id) {\n payload.id = generateChangelogId(payload.title!, timestamp);\n }\n\n // 2. Build the record with factory\n const validatedPayload = createChangelogRecord(payload);\n\n // 3. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: ChangelogRecord } = {\n header: {\n version: '1.0',\n type: 'changelog',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Changelog entry created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author', 'Changelog record created');\n\n // 4. Persist the record\n await this.stores.changelogs.put(validatedPayload.id, signedRecord as GitGovRecord & { payload: ChangelogRecord });\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'changelog.created',\n timestamp: Date.now(),\n source: 'changelog_adapter',\n payload: {\n changelogId: validatedPayload.id,\n relatedTasks: validatedPayload.relatedTasks,\n title: validatedPayload.title,\n version: validatedPayload.version\n },\n } as ChangelogCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n if (error instanceof Error && error.message.includes('DetailedValidationError')) {\n throw error;\n }\n throw error;\n }\n }\n\n /**\n * [EARS-B1] Gets a specific ChangelogRecord by its ID.\n */\n async getChangelog(changelogId: string): Promise<ChangelogRecord | null> {\n const record = await this.stores.changelogs.get(changelogId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-C1] Gets all ChangelogRecords that include a specific task.\n */\n async getChangelogsByTask(taskId: string): Promise<ChangelogRecord[]> {\n const ids = await this.stores.changelogs.list();\n const changelogs: ChangelogRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.changelogs.get(id);\n if (record && record.payload.relatedTasks.includes(taskId)) {\n changelogs.push(record.payload);\n }\n }\n\n return changelogs;\n }\n\n /**\n * [EARS-D1] Gets all ChangelogRecords with optional filtering and sorting.\n */\n async getAllChangelogs(options?: ChangelogListOptions): Promise<ChangelogRecord[]> {\n const ids = await this.stores.changelogs.list();\n let changelogs: ChangelogRecord[] = [];\n\n // Read all changelogs\n for (const id of ids) {\n const record = await this.stores.changelogs.get(id);\n if (record) {\n changelogs.push(record.payload);\n }\n }\n\n // [EARS-D2] Filter by tags if provided\n if (options?.tags && options.tags.length > 0) {\n changelogs = changelogs.filter(changelog => {\n if (!changelog.tags) return false;\n // Return true if changelog has ANY of the requested tags\n return options.tags!.some(tag => changelog.tags!.includes(tag));\n });\n }\n\n // Filter by version if provided\n if (options?.version) {\n changelogs = changelogs.filter(changelog => changelog.version === options.version);\n }\n\n // [EARS-D3] Sort by specified field (default: completedAt desc)\n const sortBy = options?.sortBy || 'completedAt';\n const sortOrder = options?.sortOrder || 'desc';\n\n changelogs.sort((a, b) => {\n let compareValue = 0;\n\n if (sortBy === 'completedAt') {\n compareValue = a.completedAt - b.completedAt;\n } else if (sortBy === 'title') {\n compareValue = a.title.localeCompare(b.title);\n }\n\n return sortOrder === 'asc' ? compareValue : -compareValue;\n });\n\n // [EARS-D4] Apply limit if provided\n if (options?.limit && options.limit > 0) {\n changelogs = changelogs.slice(0, options.limit);\n }\n\n return changelogs;\n }\n\n /**\n * [EARS-E1] Gets recent ChangelogRecords ordered by completedAt.\n */\n async getRecentChangelogs(limit: number): Promise<ChangelogRecord[]> {\n const allChangelogs = await this.getAllChangelogs();\n\n // Sort by completedAt descending (most recent first)\n const sortedChangelogs = allChangelogs.sort((a, b) => b.completedAt - a.completedAt);\n\n // Apply limit\n return sortedChangelogs.slice(0, limit);\n }\n\n /**\n * Legacy method for backwards compatibility - maps to getChangelogsByTask\n * @deprecated Use getChangelogsByTask instead\n */\n async getChangelogsByEntity(entityId: string, _entityType?: string): Promise<ChangelogRecord[]> {\n return this.getChangelogsByTask(entityId);\n }\n}\n","/**\n * ExecutionAdapter - The Chronicler of the System\n *\n * Public exports for the execution_adapter module.\n */\n\n// Types\nexport type {\n IExecutionAdapter,\n ExecutionAdapterDependencies,\n} from './execution_adapter.types';\n\n// Implementation\nexport { ExecutionAdapter } from './execution_adapter';\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ExecutionRecord } from '../record_types';\nimport type { GitGovRecord } from '../record_types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../record_schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../record_schemas';\n\n/**\n * Schema-based validation for ExecutionRecord payload\n */\nexport function validateExecutionRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.ExecutionRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid ExecutionRecord\n */\nexport function isExecutionRecord(data: unknown): data is ExecutionRecord {\n const [isValid] = validateExecutionRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateExecutionRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateExecutionRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullExecutionRecord(\n record: GitGovRecord & { payload: ExecutionRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateExecutionRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ExecutionRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { ExecutionRecord, GitGovExecutionRecord } from '../record_types';\nimport { generateExecutionId } from '../utils/id_generator';\nimport { validateExecutionRecordDetailed } from '../record_validations/execution_validator';\nimport { validateEmbeddedMetadataDetailed } from '../record_validations/embedded_metadata_validator';\nimport { DetailedValidationError } from '../record_validations/common';\n\n/**\n * Creates a complete ExecutionRecord with validation.\n *\n * The factory is generic to preserve the metadata type for compile-time safety.\n *\n * @param payload - Partial ExecutionRecord payload with optional typed metadata\n * @returns ExecutionRecord<TMetadata> - The validated ExecutionRecord with preserved metadata type\n *\n * @example\n * interface AuditMetadata { scannedFiles: number; }\n * const record = createExecutionRecord<AuditMetadata>({\n * taskId: '1752274500-task-audit',\n * result: 'Audit complete',\n * metadata: { scannedFiles: 245 }\n * });\n * // record.metadata?.scannedFiles is typed as number\n */\nexport function createExecutionRecord<TMetadata extends object = object>(\n payload: Partial<ExecutionRecord<TMetadata>>\n): ExecutionRecord<TMetadata> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n const execution = {\n id: payload.id || generateExecutionId(payload.title || 'execution', timestamp),\n taskId: payload.taskId || '',\n result: payload.result || '',\n type: payload.type,\n title: payload.title,\n notes: payload.notes,\n references: payload.references,\n metadata: payload.metadata,\n } as ExecutionRecord<TMetadata>;\n\n // Validate the complete execution record\n const validation = validateExecutionRecordDetailed(execution);\n if (!validation.isValid) {\n throw new DetailedValidationError('ExecutionRecord', validation.errors);\n }\n\n return execution;\n}\n\n/**\n * Loads and validates an existing ExecutionRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ExecutionRecord).\n * \n * @param data - Unknown data to validate as GitGovExecutionRecord\n * @returns GitGovExecutionRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadExecutionRecord(data: unknown): GitGovExecutionRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ExecutionRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific ExecutionRecord payload\n const record = data as GitGovExecutionRecord;\n const payloadValidation = validateExecutionRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ExecutionRecord payload', payloadValidation.errors);\n }\n\n return record;\n}\n\n","import { createExecutionRecord } from '../../record_factories/execution_factory';\nimport type { RecordStores } from '../../record_store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport type { ExecutionRecord, GitGovExecutionRecord } from '../../record_types';\nimport type { IEventStream, ExecutionCreatedEvent } from '../../event_bus';\nimport type { IExecutionAdapter, ExecutionAdapterDependencies } from './execution_adapter.types';\n\n/**\n * ExecutionAdapter - The Chronicler of the System\n *\n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between execution logging and data stores.\n */\nexport class ExecutionAdapter implements IExecutionAdapter {\n private stores: Required<Pick<RecordStores, 'executions'>> & Pick<RecordStores, 'tasks'>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n\n constructor(dependencies: ExecutionAdapterDependencies) {\n this.stores = dependencies.stores;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n }\n\n /**\n * [EARS-A1] Records a new execution event to create an immutable audit log.\n *\n * Description: Records a new execution event to create an immutable audit log.\n * Implementation: Builds record with factory, signs with actorId, persists and emits event.\n * Usage: Invoked by `gitgov exec add` to register work done by actors/agents.\n * Returns: Complete and signed ExecutionRecord.\n */\n async create(payload: Partial<ExecutionRecord>, actorId: string): Promise<ExecutionRecord> {\n // Optional: Validate taskId exists (graceful degradation)\n if (this.stores.tasks && payload.taskId) {\n const taskExists = await this.stores.tasks.get(payload.taskId);\n if (!taskExists) {\n throw new Error(`RecordNotFoundError: Task not found: ${payload.taskId}`);\n }\n }\n\n try {\n // 1. Build the record with factory (factory validates all required fields)\n const validatedPayload = createExecutionRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovExecutionRecord = {\n header: {\n version: '1.0',\n type: 'execution',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Execution recorded',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author', 'Execution record created');\n\n // 4. Persist the record\n await this.stores.executions.put(validatedPayload.id, signedRecord);\n\n // 5. Emit event - responsibility ends here\n this.eventBus.publish({\n type: 'execution.created',\n timestamp: Date.now(),\n source: 'execution_adapter',\n payload: {\n executionId: validatedPayload.id,\n taskId: validatedPayload.taskId,\n actorId,\n isFirstExecution: await this.isFirstExecutionForTask(validatedPayload.taskId)\n },\n } as ExecutionCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n // Factory will throw DetailedValidationError for schema violations\n // Re-throw as-is to preserve error type and details\n throw error;\n }\n }\n\n /**\n * [EARS-B1] Gets a specific ExecutionRecord by its ID for query.\n *\n * Description: Gets a specific ExecutionRecord by its ID for query.\n * Implementation: Direct read from record store without modifications.\n * Usage: Invoked by `gitgov exec show` to display execution details.\n * Returns: ExecutionRecord found or null if it doesn't exist.\n */\n async getExecution(executionId: string): Promise<ExecutionRecord | null> {\n const record = await this.stores.executions.get(executionId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-C1] Gets all ExecutionRecords associated with a specific Task.\n *\n * Description: Gets all ExecutionRecords associated with a specific Task.\n * Implementation: Reads all records and filters by matching taskId.\n * Usage: Invoked by `gitgov exec list` and MetricsAdapter for staleness calculations.\n * Returns: Array of ExecutionRecords filtered for the task.\n */\n async getExecutionsByTask(taskId: string): Promise<ExecutionRecord[]> {\n const ids = await this.stores.executions.list();\n const executions: ExecutionRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.executions.get(id);\n if (record && record.payload.taskId === taskId) {\n executions.push(record.payload);\n }\n }\n\n return executions;\n }\n\n /**\n * [EARS-D1] Gets all ExecutionRecords in the system for indexation.\n *\n * Description: Gets all ExecutionRecords in the system for complete indexation.\n * Implementation: Complete read from record store without filters.\n * Usage: Invoked by `gitgov exec list --all` and MetricsAdapter for general calculations.\n * Returns: Complete array of all ExecutionRecords.\n */\n async getAllExecutions(): Promise<ExecutionRecord[]> {\n const ids = await this.stores.executions.list();\n const executions: ExecutionRecord[] = [];\n\n for (const id of ids) {\n const record = await this.stores.executions.get(id);\n if (record) {\n executions.push(record.payload);\n }\n }\n\n return executions;\n }\n\n /**\n * Helper method to determine if this is the first execution for a task\n * Used for BacklogAdapter.handleExecutionCreated logic\n */\n private async isFirstExecutionForTask(taskId: string): Promise<boolean> {\n const executions = await this.getExecutionsByTask(taskId);\n return executions.length === 1; // Including the one we just created\n }\n}\n","// Types\nexport type {\n AllRecords,\n DerivedStates,\n DerivedStateSets,\n EnrichedTaskRecord,\n IndexData,\n IndexerAdapterDependencies,\n IntegrityError,\n IntegrityWarning,\n IntegrityReport,\n IndexGenerationReport,\n IIndexerAdapter,\n} from './indexer_adapter.types';\n\n// Implementation\nexport { IndexerAdapter } from './indexer_adapter';\n","/**\n * Signature Extraction Utilities\n * \n * Generic helpers for extracting metadata from EmbeddedMetadataRecord signatures.\n * These utilities work with any record type and implement graceful degradation\n * for records without signatures.\n * \n * @module signature_utils\n */\n\nimport type { EmbeddedMetadataRecord } from '../record_types/embedded.types';\nimport type { GitGovRecordPayload } from '../record_types/common.types';\n\n/**\n * Result type for author/lastModifier extraction with timestamp.\n */\nexport type SignatureInfo = {\n actorId: string;\n timestamp: number;\n};\n\n/**\n * Extracts the author (first signer) from a record with timestamp.\n * \n * The author is defined as the actor who created the first signature in the record.\n * This represents the original creator of the record.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns SignatureInfo with actorId and timestamp, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const author = extractAuthor(taskRecord);\n * if (author) {\n * console.log(`Created by ${author.actorId} at ${author.timestamp}`);\n * }\n * ```\n */\nexport function extractAuthor<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): SignatureInfo | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const firstSignature = signatures[0];\n return {\n actorId: firstSignature.keyId,\n timestamp: firstSignature.timestamp\n };\n}\n\n/**\n * Extracts the last modifier (last signer) from a record with timestamp.\n * \n * The last modifier is the actor who added the most recent signature.\n * For records with only one signature, this will be the same as the author.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns SignatureInfo with actorId and timestamp, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const lastModifier = extractLastModifier(taskRecord);\n * if (lastModifier) {\n * console.log(`Last modified by ${lastModifier.actorId} at ${lastModifier.timestamp}`);\n * }\n * ```\n */\nexport function extractLastModifier<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): SignatureInfo | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const lastSignature = signatures[signatures.length - 1];\n if (!lastSignature) {\n return undefined;\n }\n\n return {\n actorId: lastSignature.keyId,\n timestamp: lastSignature.timestamp\n };\n}\n\n/**\n * Extracts all unique contributors (signers) from a record.\n * \n * Returns an array of unique actor IDs (keyIds) who have signed the record.\n * Useful for collaboration analysis and determining who has worked on a record.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Array of unique actor IDs (keyIds), empty array if no signatures\n * \n * @example\n * ```typescript\n * const contributors = extractContributors(taskRecord);\n * console.log(`${contributors.length} people worked on this task`);\n * ```\n * \n * @performance O(n) where n = number of signatures (typically 1-3, max ~10)\n */\nexport function extractContributors<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): string[] {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return empty array for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return [];\n }\n\n // Use Set for deduplication, then convert to array\n const uniqueKeyIds = new Set<string>();\n for (const sig of signatures) {\n uniqueKeyIds.add(sig.keyId);\n }\n\n return Array.from(uniqueKeyIds);\n}\n\n/**\n * Extracts the timestamp of the last signature in a record.\n * \n * This represents when the record was last modified. Useful for sorting\n * and determining activity recency.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Unix timestamp of the last signature, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const lastActivity = extractLastSignatureTimestamp(taskRecord);\n * if (lastActivity) {\n * const daysAgo = (Date.now() - lastActivity) / (1000 * 60 * 60 * 24);\n * console.log(`Last activity ${daysAgo} days ago`);\n * }\n * ```\n */\nexport function extractLastSignatureTimestamp<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): number | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const lastSignature = signatures[signatures.length - 1];\n return lastSignature?.timestamp;\n}\n\n/**\n * Gets the total count of signatures in a record.\n * \n * Useful for determining how many times a record has been modified\n * or how many actors have contributed to it.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Number of signatures, or 0 if no signatures\n * \n * @example\n * ```typescript\n * const signatureCount = getSignatureCount(taskRecord);\n * console.log(`Record has been signed ${signatureCount} times`);\n * ```\n */\nexport function getSignatureCount<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): number {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return 0 for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return 0;\n }\n\n return signatures.length;\n}\n\n","export * from \"./checksum\";\nexport * from \"./signatures\";\n","import type { RecordStore, RecordStores } from '../../record_store';\nimport { MetricsAdapter } from '../metrics_adapter';\nimport { extractAuthor, extractLastModifier } from '../../utils/signature_utils';\nimport { calculatePayloadChecksum, verifySignatures } from '../../crypto';\nimport type {\n GitGovTaskRecord,\n GitGovCycleRecord,\n GitGovFeedbackRecord,\n GitGovExecutionRecord,\n GitGovChangelogRecord,\n GitGovActorRecord\n} from '../../record_types';\nimport type { ActivityEvent } from '../../event_bus';\nimport type {\n AllRecords,\n DerivedStates,\n DerivedStateSets,\n EnrichedTaskRecord,\n IndexData,\n IndexerAdapterDependencies,\n IntegrityError,\n IntegrityWarning,\n IntegrityReport,\n IndexGenerationReport,\n IIndexerAdapter,\n} from './indexer_adapter.types';\n\n/**\n * IndexerAdapter - Backend-agnostic cache implementation.\n *\n * Uses RecordStore<IndexData> abstraction for cache operations.\n * Caller chooses implementation: FsRecordStore, MemoryRecordStore, etc.\n *\n * @see indexer_adapter.md Section 2 - Architecture\n */\nexport class IndexerAdapter implements IIndexerAdapter {\n private metricsAdapter: MetricsAdapter;\n private stores: Required<Pick<RecordStores, 'tasks' | 'cycles' | 'feedbacks' | 'executions' | 'changelogs' | 'actors'>>;\n private cacheStore: RecordStore<IndexData>;\n\n constructor(dependencies: IndexerAdapterDependencies) {\n this.metricsAdapter = dependencies.metricsAdapter;\n this.stores = dependencies.stores;\n this.cacheStore = dependencies.cacheStore;\n }\n\n /**\n * [EARS-1] Generates complete index from raw Records with MetricsAdapter integration\n */\n async generateIndex(): Promise<IndexGenerationReport> {\n const startTime = performance.now();\n const performance_metrics = {\n readTime: 0,\n calculationTime: 0,\n writeTime: 0\n };\n\n try {\n // 1. Read all stores (Phase 1: Read everything into memory)\n const readStart = performance.now();\n\n const [tasks, cycles, actors] = await Promise.all([\n this.readAllTasks(),\n this.readAllCycles(),\n this.readAllActors()\n ]);\n\n performance_metrics.readTime = performance.now() - readStart;\n\n // 2. Delegate calculations to MetricsAdapter\n const calcStart = performance.now();\n\n const [systemStatus, productivityMetrics, collaborationMetrics] = await Promise.all([\n this.metricsAdapter.getSystemStatus(),\n this.metricsAdapter.getProductivityMetrics(),\n this.metricsAdapter.getCollaborationMetrics()\n ]);\n\n performance_metrics.calculationTime = performance.now() - calcStart;\n\n // 3. Calculate activity history\n const allRecords: AllRecords = {\n tasks,\n cycles,\n feedback: await this.readAllFeedback(),\n executions: await this.readAllExecutions(),\n changelogs: await this.readAllChangelogs(),\n actors\n };\n\n const activityHistory = await this.calculateActivityHistory(allRecords);\n\n // 3.5. Calculate system-wide derived states (EARS 7-10)\n const derivedStates = await this.calculateDerivedStates(allRecords);\n\n // 3.6. Convert DerivedStates arrays to DerivedStateSets for O(1) lookup performance\n const derivedStateSets: DerivedStateSets = {\n stalledTasks: new Set(derivedStates.stalledTasks),\n atRiskTasks: new Set(derivedStates.atRiskTasks),\n needsClarificationTasks: new Set(derivedStates.needsClarificationTasks),\n blockedByDependencyTasks: new Set(derivedStates.blockedByDependencyTasks)\n };\n\n // 3.7. Enrich tasks with complete intelligence layer (EARS-43: pass pre-calculated derivedStates)\n const enrichedTasks = await Promise.all(\n tasks.map(task => this.enrichTaskRecord(task, allRecords, derivedStateSets))\n );\n\n // 3.8. Validate integrity to populate integrityStatus (EARS-4 integration)\n const integrityReport = await this.validateIntegrity();\n\n // 4. Build IndexData structure\n const indexData: IndexData = {\n metadata: {\n generatedAt: new Date().toISOString(),\n lastCommitHash: await this.getGitCommitHash(),\n integrityStatus: integrityReport.status, // Populated from validateIntegrity() (EARS-4)\n recordCounts: {\n tasks: tasks.length,\n cycles: cycles.length,\n actors: actors.length,\n feedback: allRecords.feedback.length,\n executions: allRecords.executions.length,\n changelogs: allRecords.changelogs.length\n },\n generationTime: 0 // Will be set below\n },\n metrics: { ...systemStatus, ...productivityMetrics, ...collaborationMetrics },\n derivedStates, // System-wide derived states for analytics\n activityHistory, // Activity stream for dashboard\n tasks, // Keep full records with headers (source of truth)\n enrichedTasks, // Tasks with intelligence layer\n cycles, // Keep full records with headers\n actors, // Keep full records with headers\n feedback: allRecords.feedback // Optional - Phase 1B+ raw feedback records\n };\n\n // 4. Write cache using Store abstraction\n const writeStart = performance.now();\n await this.writeCacheFile(indexData);\n performance_metrics.writeTime = performance.now() - writeStart;\n\n const totalTime = performance.now() - startTime;\n indexData.metadata.generationTime = totalTime;\n\n return {\n success: true,\n recordsProcessed: tasks.length + cycles.length + actors.length,\n metricsCalculated: 3, // systemStatus + productivity + collaboration\n derivedStatesApplied: Object.values(derivedStates).reduce((sum, arr) => sum + arr.length, 0), // Total tasks with derived states\n generationTime: totalTime,\n errors: [],\n performance: performance_metrics\n };\n\n } catch (error) {\n return {\n success: false,\n recordsProcessed: 0,\n metricsCalculated: 0,\n derivedStatesApplied: 0,\n generationTime: performance.now() - startTime,\n errors: [error instanceof Error ? error.message : String(error)],\n performance: performance_metrics\n };\n }\n }\n\n /**\n * [EARS-2] Gets data from local cache for fast CLI queries\n * [EARS-13] Returns null and logs warning if cache is corrupted\n */\n async getIndexData(): Promise<IndexData | null> {\n try {\n // Use Store abstraction for backend-agnostic cache access\n const indexData = await this.cacheStore.get('index');\n if (!indexData) {\n return null; // EARS-3: Return null without cache\n }\n\n // Validate freshness using metadata.generatedAt (backend-agnostic)\n const isUpToDate = await this.isIndexUpToDate();\n if (!isUpToDate) {\n return null; // Cache is stale\n }\n\n return indexData;\n } catch (error) {\n // [EARS-13] Cache is corrupted or invalid - log warning and suggest regeneration\n console.warn(`Warning: Cache is corrupted or invalid. Please regenerate with 'gitgov index'.`);\n console.warn(`Details: ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n }\n\n /**\n * [EARS-4, EARS-70 to EARS-76] Validates integrity of Records without regenerating cache\n * \n * PHASE 1A (IMPLEMENTED): Basic schema validation (required fields)\n * PHASE 1B (IMPLEMENTED): Cryptographic validation (checksums + signatures)\n * TODO FUTURE:\n * - Integrate ValidatorModule for comprehensive schema validation\n * - Compare cache consistency with Records\n * - Detect broken references between records\n * - Validate timestamp consistency\n */\n async validateIntegrity(): Promise<IntegrityReport> {\n const startTime = performance.now();\n const errors: IntegrityError[] = [];\n const warnings: IntegrityWarning[] = [];\n let recordsScanned = 0;\n let checksumFailures = 0;\n let signatureFailures = 0;\n\n try {\n // Read all records for validation\n const [tasks, cycles] = await Promise.all([\n this.readAllTasks(),\n this.readAllCycles()\n ]);\n\n recordsScanned = tasks.length + cycles.length;\n\n // PHASE 1A: Schema validation - verify required fields\n for (const task of tasks) {\n if (!task.payload.id || !task.payload.description) {\n errors.push({\n type: 'schema_violation',\n recordId: task.payload.id || 'unknown',\n message: 'Task missing required fields'\n });\n }\n }\n\n for (const cycle of cycles) {\n if (!cycle.payload.id || !cycle.payload.title) {\n errors.push({\n type: 'schema_violation',\n recordId: cycle.payload.id || 'unknown',\n message: 'Cycle missing required fields'\n });\n }\n }\n\n // PHASE 1B: Checksum verification (EARS-70 to EARS-72)\n for (const task of tasks) {\n const calculatedChecksum = calculatePayloadChecksum(task.payload);\n if (calculatedChecksum !== task.header.payloadChecksum) {\n checksumFailures++;\n errors.push({\n type: 'checksum_failure',\n recordId: task.payload.id,\n message: `Checksum mismatch: expected ${task.header.payloadChecksum}, got ${calculatedChecksum}`\n });\n }\n }\n\n for (const cycle of cycles) {\n const calculatedChecksum = calculatePayloadChecksum(cycle.payload);\n if (calculatedChecksum !== cycle.header.payloadChecksum) {\n checksumFailures++;\n errors.push({\n type: 'checksum_failure',\n recordId: cycle.payload.id,\n message: `Checksum mismatch: expected ${cycle.header.payloadChecksum}, got ${calculatedChecksum}`\n });\n }\n }\n\n // PHASE 1B: Signature verification (EARS-73 to EARS-76)\n // Create actor public key lookup function for signature verification\n const getActorPublicKey = async (keyId: string): Promise<string | null> => {\n const actor = await this.stores.actors.get(keyId);\n return actor?.payload.publicKey || null;\n };\n\n // Verify signatures for all tasks\n for (const task of tasks) {\n const isValid = await verifySignatures(task, getActorPublicKey);\n if (!isValid) {\n signatureFailures++;\n errors.push({\n type: 'signature_invalid',\n recordId: task.payload.id,\n message: 'One or more signatures failed verification'\n });\n }\n }\n\n // Verify signatures for all cycles\n for (const cycle of cycles) {\n const isValid = await verifySignatures(cycle, getActorPublicKey);\n if (!isValid) {\n signatureFailures++;\n errors.push({\n type: 'signature_invalid',\n recordId: cycle.payload.id,\n message: 'One or more signatures failed verification'\n });\n }\n }\n\n const status = errors.length > 0 ? \"errors\" : warnings.length > 0 ? \"warnings\" : \"valid\";\n\n return {\n status,\n recordsScanned,\n errorsFound: errors,\n warningsFound: warnings,\n validationTime: performance.now() - startTime,\n checksumFailures,\n signatureFailures\n };\n\n } catch (error) {\n return {\n status: \"errors\",\n recordsScanned,\n errorsFound: [{\n type: 'schema_violation',\n recordId: 'system',\n message: error instanceof Error ? error.message : String(error)\n }],\n warningsFound: warnings,\n validationTime: performance.now() - startTime,\n checksumFailures,\n signatureFailures\n };\n }\n }\n\n /**\n * [EARS-5] Checks if index is up to date by comparing timestamps\n * Uses metadata.generatedAt from cached data (backend-agnostic)\n */\n async isIndexUpToDate(): Promise<boolean> {\n try {\n // Check if cache exists using Store abstraction\n const cacheExists = await this.cacheStore.exists('index');\n if (!cacheExists) {\n return false;\n }\n\n // Get cache generation timestamp from metadata (backend-agnostic)\n const indexData = await this.cacheStore.get('index');\n if (!indexData) {\n return false;\n }\n const cacheTime = new Date(indexData.metadata.generatedAt).getTime();\n\n // Get last modified time of any record (simplified check)\n const taskIds = await this.stores.tasks.list();\n const cycleIds = await this.stores.cycles.list();\n\n // Check if any records are newer than cache\n for (const id of [...taskIds, ...cycleIds]) {\n const timestamp = this.getTimestampFromId(id);\n if (timestamp * 1000 > cacheTime) { // Convert to milliseconds\n return false; // Found newer record\n }\n }\n\n return true;\n } catch (error) {\n console.warn(`Error checking cache freshness: ${error instanceof Error ? error.message : String(error)}`);\n return false;\n }\n }\n\n /**\n * [EARS-6] Invalidates local cache by removing cache\n */\n async invalidateCache(): Promise<void> {\n try {\n const cacheExists = await this.cacheStore.exists('index');\n if (cacheExists) {\n await this.cacheStore.delete('index');\n }\n } catch (error) {\n throw new Error(`Failed to invalidate cache: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Reads all tasks from stores.tasks with full metadata (headers + payloads).\n * Returns complete GitGovTaskRecord objects including signatures for author/lastModifier extraction.\n */\n private async readAllTasks(): Promise<GitGovTaskRecord[]> {\n const taskIds = await this.stores.tasks.list();\n const tasks: GitGovTaskRecord[] = [];\n\n for (const id of taskIds) {\n const record = await this.stores.tasks.get(id);\n if (record) {\n tasks.push(record);\n }\n }\n\n return tasks;\n }\n\n /**\n * Reads all cycles from stores.cycles with full metadata.\n */\n private async readAllCycles(): Promise<GitGovCycleRecord[]> {\n const cycleIds = await this.stores.cycles.list();\n const cycles: GitGovCycleRecord[] = [];\n\n for (const id of cycleIds) {\n const record = await this.stores.cycles.get(id);\n if (record) {\n cycles.push(record);\n }\n }\n\n return cycles;\n }\n\n /**\n * Reads all actors from stores.actors with full metadata.\n */\n private async readAllActors(): Promise<GitGovActorRecord[]> {\n const actorIds = await this.stores.actors.list();\n const actors: GitGovActorRecord[] = [];\n\n for (const id of actorIds) {\n const record = await this.stores.actors.get(id);\n if (record) {\n actors.push(record);\n }\n }\n\n return actors;\n }\n\n /**\n * Reads all feedback from stores.feedbacks with full metadata.\n */\n private async readAllFeedback(): Promise<GitGovFeedbackRecord[]> {\n const feedbackIds = await this.stores.feedbacks.list();\n const feedback: GitGovFeedbackRecord[] = [];\n\n for (const id of feedbackIds) {\n const record = await this.stores.feedbacks.get(id);\n if (record) {\n feedback.push(record);\n }\n }\n\n return feedback;\n }\n\n /**\n * Reads all executions from stores.executions with full metadata.\n */\n private async readAllExecutions(): Promise<GitGovExecutionRecord[]> {\n const executionIds = await this.stores.executions.list();\n const executions: GitGovExecutionRecord[] = [];\n\n for (const id of executionIds) {\n const record = await this.stores.executions.get(id);\n if (record) {\n executions.push(record);\n }\n }\n\n return executions;\n }\n\n /**\n * Reads all changelogs from stores.changelogs with full metadata.\n */\n private async readAllChangelogs(): Promise<GitGovChangelogRecord[]> {\n const changelogIds = await this.stores.changelogs.list();\n const changelogs: GitGovChangelogRecord[] = [];\n\n for (const id of changelogIds) {\n const record = await this.stores.changelogs.get(id);\n if (record) {\n changelogs.push(record);\n }\n }\n\n return changelogs;\n }\n\n /**\n * Writes cache data using Store abstraction\n * [EARS-14] Store implementation handles atomicity internally\n */\n private async writeCacheFile(indexData: IndexData): Promise<void> {\n // Store abstraction handles atomicity internally\n await this.cacheStore.put('index', indexData);\n }\n\n /**\n * Gets current git commit hash (simplified)\n */\n private async getGitCommitHash(): Promise<string> {\n try {\n // Simplified implementation - would use git commands in real implementation\n return \"mock-commit-hash\";\n } catch {\n return \"unknown\";\n }\n }\n\n /**\n * [EARS-7 to EARS-10] Calculates system-wide derived states for analytics and filtering.\n * \n * Applies DerivedDataProtocol algorithms to categorize tasks:\n * - isStalled: Tasks en 'active' sin executions >7 días O en 'review' sin approval >3 días\n * - isAtRisk: Tasks con prioridad 'critical' + 'paused' O 2+ blocking feedbacks\n * - needsClarification: Tasks con feedback tipo 'question' abierto\n * - isBlockedByDependency: Tasks con referencias a tasks no completadas\n * \n * @see derived_data_protocol.md for detailed algorithms\n * @see EARS-7, EARS-8, EARS-9, EARS-10 for requirements\n */\n async calculateDerivedStates(allRecords: AllRecords): Promise<DerivedStates> {\n const derivedStates: DerivedStates = {\n stalledTasks: [],\n atRiskTasks: [],\n needsClarificationTasks: [],\n blockedByDependencyTasks: []\n };\n\n const now = Date.now();\n const SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\n try {\n for (const task of allRecords.tasks) {\n const taskId = task.payload.id;\n const taskPayload = task.payload;\n\n // [EARS-8] Calculate isStalled\n // Tasks en 'active' sin executions por >7 días O en 'review' sin approval por >3 días\n if (taskPayload.status === 'active' || taskPayload.status === 'review') {\n const taskTimestamp = this.getTimestampFromId(taskId) * 1000; // Convert to milliseconds\n const daysSinceCreation = (now - taskTimestamp) / (24 * 60 * 60 * 1000);\n\n // Check executions para tasks activas\n const hasRecentExecution = allRecords.executions.some(exec => {\n if (exec.payload.taskId === taskId) {\n const execTimestamp = this.getTimestampFromId(exec.payload.id) * 1000; // Convert to milliseconds\n return (now - execTimestamp) < SEVEN_DAYS_MS;\n }\n return false;\n });\n\n const isStalled =\n (taskPayload.status === 'active' && daysSinceCreation > 7 && !hasRecentExecution) ||\n (taskPayload.status === 'review' && daysSinceCreation > 3);\n\n if (isStalled) {\n derivedStates.stalledTasks.push(taskId);\n }\n }\n\n // [EARS-9] Calculate isAtRisk\n // Tasks con prioridad 'critical' + 'paused' O 2+ blocking feedbacks abiertos\n const isCriticalPaused = taskPayload.priority === 'critical' && taskPayload.status === 'paused';\n const blockingFeedbackCount = allRecords.feedback.filter(feedback => {\n return feedback.payload.type === 'blocking' &&\n feedback.payload.status === 'open' &&\n feedback.payload.entityId === taskId;\n }).length;\n\n if (isCriticalPaused || blockingFeedbackCount >= 2) {\n derivedStates.atRiskTasks.push(taskId);\n }\n\n // [EARS-9] Calculate needsClarification\n // Tasks con feedback tipo 'question' abierto\n const hasOpenQuestion = allRecords.feedback.some(feedback => {\n return feedback.payload.type === 'question' &&\n feedback.payload.status === 'open' &&\n feedback.payload.entityId === taskId;\n });\n\n if (hasOpenQuestion) {\n derivedStates.needsClarificationTasks.push(taskId);\n }\n\n // [EARS-10] Calculate isBlockedByDependency\n // Tasks con referencias a otras tasks no completadas\n if (taskPayload.references && taskPayload.references.length > 0) {\n const hasBlockingDependency = taskPayload.references.some(ref => {\n if (ref.startsWith('task:')) {\n const dependencyId = ref.replace('task:', '');\n const dependencyTask = allRecords.tasks.find(t => t.payload.id === dependencyId);\n return dependencyTask &&\n dependencyTask.payload.status !== 'done' &&\n dependencyTask.payload.status !== 'archived';\n }\n return false;\n });\n\n if (hasBlockingDependency) {\n derivedStates.blockedByDependencyTasks.push(taskId);\n }\n }\n }\n\n return derivedStates;\n } catch (error) {\n console.warn(`calculateDerivedStates error: ${error instanceof Error ? error.message : String(error)}`);\n // Return empty derived states on error (graceful degradation)\n return derivedStates;\n }\n }\n\n /**\n * [EARS-19] Calculates activity history from Record timestamps for dashboard activity streams\n */\n async calculateActivityHistory(allRecords: AllRecords): Promise<ActivityEvent[]> {\n const events: ActivityEvent[] = [];\n\n try {\n // Tasks creadas (basado en ID timestamp)\n allRecords.tasks.forEach(task => {\n const timestampPart = task.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'task_created',\n entityId: task.payload.id,\n entityTitle: task.payload.title,\n actorId: task.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: { priority: task.payload.priority, status: task.payload.status }\n });\n }\n });\n\n // Cycles creados (basado en ID timestamp)\n allRecords.cycles.forEach(cycle => {\n const timestampPart = cycle.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'cycle_created',\n entityId: cycle.payload.id,\n entityTitle: cycle.payload.title,\n actorId: cycle.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: { status: cycle.payload.status }\n });\n }\n });\n\n // Feedback creado (basado en ID timestamp)\n allRecords.feedback.forEach(feedback => {\n const timestampPart = feedback.payload.id.split('-')[0];\n if (timestampPart) {\n const metadata: { type: string; assignee?: string; resolution: string } = {\n type: feedback.payload.type,\n resolution: feedback.payload.status\n };\n if (feedback.payload.assignee) {\n metadata.assignee = feedback.payload.assignee;\n }\n\n const event: ActivityEvent = {\n timestamp: parseInt(timestampPart),\n type: 'feedback_created',\n entityId: feedback.payload.id,\n entityTitle: `${feedback.payload.type}: ${feedback.payload.content.slice(0, 40)}...`,\n actorId: feedback.header.signatures[0]?.keyId || feedback.payload.assignee || 'unknown',\n metadata\n };\n\n events.push(event);\n }\n });\n\n // Changelogs creados (basado en ID timestamp) \n allRecords.changelogs.forEach(changelog => {\n const timestampPart = changelog.payload.id.split('-')[0];\n if (timestampPart) {\n const event: ActivityEvent = {\n timestamp: parseInt(timestampPart),\n type: 'changelog_created',\n entityId: changelog.payload.id,\n entityTitle: changelog.payload.title || 'Release notes',\n actorId: changelog.header.signatures[0]?.keyId || 'unknown'\n };\n if (changelog.payload.version) {\n event.metadata = { version: changelog.payload.version };\n }\n events.push(event);\n }\n });\n\n // Executions creadas (basado en ID timestamp)\n allRecords.executions.forEach(execution => {\n const timestampPart = execution.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'execution_created',\n entityId: execution.payload.id,\n entityTitle: execution.payload.title || `Working on ${execution.payload.taskId.slice(-8)}`,\n actorId: execution.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: {\n executionType: execution.payload.type || 'development',\n taskId: execution.payload.taskId\n }\n });\n }\n });\n\n // Actors creados (basado en ID timestamp)\n allRecords.actors.forEach(actor => {\n const timestampPart = actor.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'actor_created',\n entityId: actor.payload.id,\n entityTitle: `${actor.payload.displayName} joined (${actor.payload.type})`,\n metadata: { type: actor.payload.type }\n });\n }\n });\n\n // [EARS-20] Ordenar cronológicamente y limitar a últimos 15 eventos\n return events\n .sort((a, b) => b.timestamp - a.timestamp) // Más recientes primero\n .slice(0, 15); // Últimos 15 eventos para performance\n\n } catch (error) {\n // Graceful degradation si hay errores\n console.warn('Error calculating activity history:', error);\n return [];\n }\n }\n\n /**\n * [EARS-19, EARS-22, EARS-24] Calculate lastUpdated timestamp and activity type for a task\n * Uses signature timestamps instead of file mtime (backend-agnostic)\n * @param task - Full GitGovTaskRecord with header.signatures for timestamp extraction\n */\n async calculateLastUpdated(\n task: GitGovTaskRecord,\n relatedRecords: AllRecords\n ): Promise<{ lastUpdated: number; lastActivityType: EnrichedTaskRecord['lastActivityType']; recentActivity: string }> {\n try {\n const taskPayload = task.payload;\n const creationTime = this.getTimestampFromId(taskPayload.id) * 1000; // Convert to milliseconds\n let lastUpdated = creationTime;\n let lastActivityType: EnrichedTaskRecord['lastActivityType'] = 'task_created';\n let recentActivity = 'Task created';\n\n // 1. [EARS-22] Check signature timestamp for task modification (backend-agnostic)\n // Uses extractLastModifier() instead of file mtime\n const lastModifier = extractLastModifier(task);\n if (lastModifier) {\n const signatureTime = lastModifier.timestamp * 1000; // Convert to milliseconds\n const timeDifference = signatureTime - creationTime;\n\n // [EARS-24] Only consider significant modifications (>60s after creation)\n if (timeDifference > 60000 && signatureTime > lastUpdated) {\n lastUpdated = signatureTime;\n lastActivityType = 'task_modified';\n recentActivity = `Task modified ${this.formatTimeAgo(signatureTime)}`;\n }\n }\n\n // 2. Check related feedback records\n const relatedFeedback = relatedRecords.feedback.filter(f =>\n f.payload.entityId === taskPayload.id || (f.payload.content && f.payload.content.includes(taskPayload.id))\n );\n\n for (const feedback of relatedFeedback) {\n const feedbackTime = this.getTimestampFromId(feedback.payload.id) * 1000; // Convert to milliseconds\n if (feedbackTime > lastUpdated) {\n lastUpdated = feedbackTime;\n lastActivityType = 'feedback_received';\n recentActivity = `${feedback.payload.type} feedback: ${feedback.payload.content.slice(0, 30)}...`;\n }\n }\n\n // 3. Check related execution records\n const relatedExecutions = relatedRecords.executions.filter(e => e.payload.taskId === taskPayload.id);\n\n for (const execution of relatedExecutions) {\n const executionTime = this.getTimestampFromId(execution.payload.id) * 1000; // Convert to milliseconds\n if (executionTime > lastUpdated) {\n lastUpdated = executionTime;\n lastActivityType = 'execution_added';\n recentActivity = `Execution: ${execution.payload.title || 'Work logged'}`;\n }\n }\n\n // 4. Check related changelog records\n const relatedChangelogs = relatedRecords.changelogs.filter(c =>\n (c.payload.relatedTasks && c.payload.relatedTasks.includes(taskPayload.id)) ||\n c.payload.description?.includes(taskPayload.id)\n );\n\n for (const changelog of relatedChangelogs) {\n const changelogTime = this.getTimestampFromId(changelog.payload.id) * 1000; // Convert to milliseconds\n if (changelogTime > lastUpdated) {\n lastUpdated = changelogTime;\n lastActivityType = 'changelog_created';\n recentActivity = `Changelog: ${changelog.payload.title}`;\n }\n }\n\n return { lastUpdated, lastActivityType, recentActivity };\n\n } catch (error) {\n // Graceful fallback\n const fallbackTime = this.getTimestampFromId(task.payload.id) * 1000; // Convert to milliseconds\n return {\n lastUpdated: fallbackTime,\n lastActivityType: 'task_created',\n recentActivity: 'Task created'\n };\n }\n }\n\n /**\n * [EARS-22] Enrich a TaskRecord with activity metadata\n * @param task - Full GitGovTaskRecord with header.signatures for author/lastModifier extraction\n * @param relatedRecords - All related records with full metadata\n */\n /**\n * Enriches a task with complete intelligence layer (EARS 25-48)\n * \n * 11-step algorithm:\n * 1. Activity metadata (lastUpdated, lastActivityType, recentActivity)\n * 2. Signatures (author, lastModifier with timestamps)\n * 3. Assignments (assignedTo from feedback)\n * 4. Dependencies (dependsOn, blockedBy with typed references)\n * 5. Cycles (all cycles as array with id+title)\n * 6. Metrics (executionCount, blockingFeedbackCount, openQuestionCount)\n * 7. Time to resolution (for done tasks)\n * 8. Release info (isReleased, lastReleaseVersion from changelogs)\n * 9. Derived states (EARS-43: REUTILIZA pre-calculated derivedStates con O(1) lookup)\n * 10. Health score (0-100 using multi-factor algorithm)\n * 11. Time in current stage (days)\n * \n * @param task - Full GitGovTaskRecord with header.signatures\n * @param relatedRecords - All records for cross-referencing\n * @param derivedStateSets - Pre-calculated system-wide derived states as Sets for O(1) lookup (EARS-43)\n * @returns Promise<EnrichedTaskRecord> - Task with complete intelligence layer\n */\n async enrichTaskRecord(\n task: GitGovTaskRecord,\n relatedRecords: AllRecords,\n derivedStateSets: DerivedStateSets\n ): Promise<EnrichedTaskRecord> {\n // Step 1: Activity metadata (now uses full task for signature timestamps)\n const { lastUpdated, lastActivityType, recentActivity } = await this.calculateLastUpdated(task, relatedRecords);\n\n // Step 2: Signatures (author, lastModifier) using signature_utils helpers\n const author = extractAuthor(task);\n const lastModifier = extractLastModifier(task);\n\n // Step 3: Assignments (assignedTo from feedback)\n const assignments = relatedRecords.feedback\n .filter(f => f.payload.entityId === task.payload.id && f.payload.type === 'assignment')\n .map(f => ({\n actorId: f.payload.assignee || 'unknown',\n assignedAt: this.getTimestampFromId(f.payload.id) * 1000 // ms\n }));\n\n // Step 4: Dependencies (dependsOn, blockedBy with typed references)\n // [EARS-37] Include ALL typed references (task:, pr:, issue:, file:, url:)\n // Filter out completed tasks, but preserve external references always\n const completedStatuses = ['done', 'archived', 'discarded'];\n const dependsOn = (task.payload.references || [])\n .filter(ref => {\n // Include all typed references (task:, pr:, issue:, file:, url:)\n const hasValidPrefix = ref.startsWith('task:') || ref.startsWith('pr:') ||\n ref.startsWith('issue:') || ref.startsWith('file:') ||\n ref.startsWith('url:');\n\n if (!hasValidPrefix) return false;\n\n // For task: references, filter out completed tasks\n if (ref.startsWith('task:')) {\n const refTaskId = ref.replace('task:', '');\n const refTask = relatedRecords.tasks.find(t => t.payload.id === refTaskId);\n return !refTask || !refTask.payload.status || !completedStatuses.includes(refTask.payload.status);\n }\n\n // For external references (pr:, issue:, file:, url:), always include\n return true;\n });\n\n const blockedBy = relatedRecords.tasks\n .filter(t => !completedStatuses.includes(t.payload.status))\n .filter(t => (t.payload.references || []).includes(`task:${task.payload.id}`))\n .map(t => `task:${t.payload.id}`);\n\n // Step 5: Cycles (all cycles as array with id+title)\n const cycles = (task.payload.cycleIds || [])\n .map(cycleId => {\n const cycle = relatedRecords.cycles.find(c => c.payload.id === cycleId);\n return cycle ? { id: cycleId, title: cycle.payload.title } : null;\n })\n .filter((c): c is { id: string; title: string } => c !== null);\n\n // Step 6: Metrics\n const executionCount = relatedRecords.executions.filter(e => e.payload.taskId === task.payload.id).length;\n const blockingFeedbackCount = relatedRecords.feedback.filter(\n f => f.payload.entityId === task.payload.id && f.payload.type === 'blocking' && f.payload.status === 'open'\n ).length;\n const openQuestionCount = relatedRecords.feedback.filter(\n f => f.payload.entityId === task.payload.id && f.payload.type === 'question' && f.payload.status === 'open'\n ).length;\n\n // Step 7: Time to resolution (for done tasks)\n const timeToResolution: number | undefined = task.payload.status === 'done'\n ? (lastUpdated - this.getTimestampFromId(task.payload.id) * 1000) / (1000 * 60 * 60) // horas\n : undefined;\n\n // Step 8: Release info (from changelogs)\n const releaseChangelogs = relatedRecords.changelogs.filter(cl =>\n cl.payload.relatedTasks.includes(task.payload.id)\n );\n const isReleased = releaseChangelogs.length > 0;\n const lastReleaseVersion: string | undefined = isReleased\n ? (releaseChangelogs[releaseChangelogs.length - 1]?.payload.version || undefined)\n : undefined;\n\n // Step 9: Derived states (EARS-43: Usar pre-calculated derivedStates con O(1) lookup)\n // NO recalcular - buscar en los Sets de derivedStateSets pre-calculados\n const taskId = task.payload.id;\n const isStalled = derivedStateSets.stalledTasks.has(taskId);\n const isAtRisk = derivedStateSets.atRiskTasks.has(taskId);\n const needsClarification = derivedStateSets.needsClarificationTasks.has(taskId);\n const isBlockedByDependency = derivedStateSets.blockedByDependencyTasks.has(taskId);\n\n // Calculate daysSinceLastUpdate for health score and timeInCurrentStage\n const daysSinceLastUpdate = (Date.now() - lastUpdated) / (1000 * 60 * 60 * 24);\n\n // Step 10: Health score (0-100)\n let healthScore = 100;\n\n // Status health (30 points)\n if (task.payload.status === 'done') healthScore -= 0; // Perfect\n else if (task.payload.status === 'active') healthScore -= 5;\n else if (task.payload.status === 'ready') healthScore -= 10;\n else if (task.payload.status === 'review') healthScore -= 15;\n else if (task.payload.status === 'paused') healthScore -= 25;\n else healthScore -= 30; // draft, archived, discarded\n\n // Feedback health (30 points)\n healthScore -= Math.min(blockingFeedbackCount * 10, 30);\n\n // Executions health (20 points)\n if (executionCount === 0 && task.payload.status === 'active') healthScore -= 20;\n else if (executionCount < 2) healthScore -= 10;\n\n // Time health (20 points)\n if (daysSinceLastUpdate > 30) healthScore -= 20;\n else if (daysSinceLastUpdate > 14) healthScore -= 15;\n else if (daysSinceLastUpdate > 7) healthScore -= 10;\n\n healthScore = Math.max(0, Math.min(100, healthScore));\n\n // Step 11: Time in current stage (days)\n const timeInCurrentStage = daysSinceLastUpdate;\n\n // Build enriched record with conditional optional properties\n const enrichedRecord: EnrichedTaskRecord = {\n ...task.payload,\n derivedState: {\n isStalled,\n isAtRisk,\n needsClarification,\n isBlockedByDependency,\n healthScore,\n timeInCurrentStage\n },\n relationships: {\n ...(author && { author }),\n ...(lastModifier && { lastModifier }),\n assignedTo: assignments,\n dependsOn,\n blockedBy,\n cycles\n },\n metrics: {\n executionCount,\n blockingFeedbackCount,\n openQuestionCount,\n ...(timeToResolution !== undefined && { timeToResolution })\n },\n release: {\n isReleased,\n ...(lastReleaseVersion !== undefined && { lastReleaseVersion })\n },\n lastUpdated,\n lastActivityType,\n ...(recentActivity && { recentActivity })\n };\n\n return enrichedRecord;\n }\n\n /**\n * Format timestamp as human-readable time ago\n */\n private formatTimeAgo(timestamp: number): string {\n const now = Date.now();\n const diff = now - timestamp;\n const minutes = Math.floor(diff / (1000 * 60));\n const hours = Math.floor(diff / (1000 * 60 * 60));\n const days = Math.floor(diff / (1000 * 60 * 60 * 24));\n\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n return `${days}d ago`;\n }\n\n /**\n * Extracts timestamp from ID (format: {timestamp}-{type}-{slug})\n */\n private getTimestampFromId(id: string): number {\n try {\n const parts = id.split('-');\n const timestamp = parseInt(parts[0] || '0', 10);\n\n if (isNaN(timestamp) || timestamp <= 0) {\n throw new Error(`Invalid timestamp in ID: ${id}`);\n }\n\n return timestamp;\n } catch (error) {\n throw new Error(`Cannot extract timestamp from ID: ${id}`);\n }\n }\n}\n","/**\n * ProjectAdapter Module\n *\n * Re-exports for the Project Initialization Engine.\n */\n\n// Types and Interfaces\nexport type {\n ProjectAdapterDependencies,\n ProjectInitOptions,\n ProjectInitResult,\n ProjectContext,\n TemplateProcessingResult,\n ProjectInfo,\n ProjectReport,\n IProjectAdapter,\n EnvironmentValidation,\n} from './project_adapter.types';\n\n// Implementation\nexport { ProjectAdapter } from './project_adapter';\n","/**\n * ProjectAdapter - Project Initialization Engine\n *\n * Implements Facade + Dependency Injection Pattern for testable and configurable orchestration.\n * Acts as Mediator between project initialization and the ecosystem of adapters.\n *\n * EARS Blocks:\n * - A: Project Bootstrap Core (A1-A10)\n * - B: Multi-Adapter Integration (B1-B6)\n * - C: Error Handling & Type Safety (C1-C4)\n * - D: Graceful Degradation (D1)\n * - E: Future Platform Capabilities (E1-E2)\n * - F: Critical Bug Prevention (F1-F3)\n * - G: Agent Prompt UX (G1)\n */\n\nimport type { GitGovConfig, IConfigManager } from '../../config_manager';\nimport { DetailedValidationError } from '../../record_validations/common';\nimport type { IdentityAdapter } from '../identity_adapter';\nimport type { BacklogAdapter } from '../backlog_adapter';\nimport { createTaskRecord } from '../../record_factories/task_factory';\nimport { createCycleRecord } from '../../record_factories/cycle_factory';\nimport type { IProjectInitializer, EnvironmentValidation } from '../../project_initializer';\nimport type {\n ProjectAdapterDependencies,\n ProjectInitOptions,\n ProjectInitResult,\n ProjectContext,\n TemplateProcessingResult,\n ProjectInfo,\n ProjectReport,\n IProjectAdapter,\n} from './project_adapter.types';\n\n/**\n * ProjectAdapter - The Project Initialization Engine\n *\n * Orchestrates adapters (Identity, Backlog) + ConfigManager + IProjectInitializer\n * for complete GitGovernance project bootstrap with trust root Ed25519.\n *\n * VCS checks (remote, branch, commits) are delegated to IProjectInitializer.validateEnvironment(),\n * keeping ProjectAdapter storage-agnostic.\n */\nexport class ProjectAdapter implements IProjectAdapter {\n private identityAdapter: IdentityAdapter;\n private backlogAdapter: BacklogAdapter;\n private configManager: IConfigManager;\n private projectInitializer: IProjectInitializer;\n\n constructor(dependencies: ProjectAdapterDependencies) {\n this.identityAdapter = dependencies.identityAdapter;\n this.backlogAdapter = dependencies.backlogAdapter;\n this.configManager = dependencies.configManager;\n this.projectInitializer = dependencies.projectInitializer;\n }\n\n // ===== FASE 1: BOOTSTRAP CORE METHODS =====\n\n /**\n * [EARS-A1] Initializes complete GitGovernance project with 3-adapter orchestration\n * and trust root Ed25519.\n */\n async initializeProject(options: ProjectInitOptions): Promise<ProjectInitResult> {\n const startTime = Date.now();\n\n try {\n // 1. Environment Validation (delegates to IProjectInitializer)\n const envValidation = await this.validateEnvironment();\n if (!envValidation.isValid) {\n throw new Error(`Environment validation failed: ${envValidation.warnings.join(', ')}`);\n }\n\n // 2. Directory Structure Creation via ProjectInitializer\n await this.projectInitializer.createProjectStructure();\n\n // 2.5. [EARS-G1] Copy Agent Prompt to project root for IDE access\n await this.projectInitializer.copyAgentPrompt();\n\n // 3. Trust Root Creation via IdentityAdapter [EARS-B1]\n const actor = await this.identityAdapter.createActor(\n {\n type: 'human' as const,\n displayName: options.actorName || 'Project Owner',\n roles: [\n 'admin',\n 'author',\n 'approver:product',\n 'approver:quality',\n 'developer',\n ] as const,\n },\n 'bootstrap'\n );\n\n // 4. Root Cycle Setup via BacklogAdapter [EARS-B2]\n const rootCycleData = await createCycleRecord({\n title: 'root',\n status: 'planning' as const,\n taskIds: [],\n });\n\n const rootCycle = await this.backlogAdapter.createCycle(rootCycleData, actor.id);\n\n // 5. Template Processing (if specified)\n let templateResult: TemplateProcessingResult | undefined;\n if (options.template) {\n const projectContext: ProjectContext = {\n projectId: this.generateProjectId(options.name),\n projectName: options.name,\n actorId: actor.id,\n rootCycle: rootCycle.id,\n };\n templateResult = await this.processBlueprintTemplate(options.template, projectContext);\n }\n\n // 6. Configuration Persistence via ProjectInitializer [EARS-B5]\n const projectId = this.generateProjectId(options.name);\n const config: GitGovConfig = {\n protocolVersion: '1.0.0',\n projectId,\n projectName: options.name,\n rootCycle: rootCycle.id,\n state: {\n branch: 'gitgov-state',\n sync: {\n strategy: 'manual',\n maxRetries: 3,\n pushIntervalSeconds: 30,\n batchIntervalSeconds: 60,\n },\n defaults: {\n pullScheduler: {\n defaultIntervalSeconds: 30,\n defaultEnabled: false,\n defaultContinueOnNetworkError: true,\n defaultStopOnConflict: false,\n },\n fileWatcher: {\n defaultDebounceMs: 300,\n defaultIgnoredPatterns: ['*.tmp', '.DS_Store', '*.swp'],\n },\n },\n },\n };\n\n await this.projectInitializer.writeConfig(config);\n\n // 6.5. Lazy State Branch Setup [EARS-A4, EARS-B3]\n // gitgov-state branch is NOT created here - it will be created lazily on first \"sync push\"\n // VCS status is read from envValidation (populated by IProjectInitializer)\n if (!envValidation.hasRemote || !envValidation.hasCommits) {\n const vcsWarnings: string[] = [];\n if (!envValidation.hasCommits) {\n vcsWarnings.push('No commits in current branch');\n }\n if (!envValidation.hasRemote) {\n vcsWarnings.push(\"No remote 'origin' configured\");\n }\n console.warn(`⚠️ ${vcsWarnings.join(', ')}.`);\n console.warn(` State sync will be available after 'git remote add origin <url>' and first commit.`);\n console.warn(` Run 'gitgov sync push' when ready to enable multi-machine collaboration.\\n`);\n }\n\n // 7. Session Initialization via ProjectInitializer\n await this.projectInitializer.initializeSession(actor.id);\n\n // 8. Git Integration\n await this.projectInitializer.setupGitIntegration();\n\n const initializationTime = Date.now() - startTime;\n\n return {\n success: true,\n projectId,\n projectName: options.name,\n rootCycle: rootCycle.id,\n actor: {\n id: actor.id,\n displayName: actor.displayName,\n publicKeyPath: this.projectInitializer.getActorPath(actor.id),\n },\n template: templateResult\n ? {\n processed: true,\n cyclesCreated: templateResult.cyclesCreated,\n tasksCreated: templateResult.tasksCreated,\n }\n : undefined,\n initializationTime,\n nextSteps: [\n \"Run 'gitgov status' to see your project overview\",\n \"Use 'gitgov task create' to add your first task\",\n \"Ask '@gitgov' for help, guidance, or project planning\",\n ],\n };\n } catch (error) {\n // Error Recovery - Automatic rollback via ProjectInitializer [EARS-A5]\n await this.projectInitializer.rollback();\n throw error;\n }\n }\n\n /**\n * [EARS-A2] Validates environment for GitGovernance initialization.\n * Delegates to IProjectInitializer.validateEnvironment().\n */\n async validateEnvironment(): Promise<EnvironmentValidation> {\n return this.projectInitializer.validateEnvironment();\n }\n\n /**\n * [EARS-A3] Processes blueprint template JSON with schema validation\n * creating cycles and tasks via factories. [EARS-B4]\n */\n async processBlueprintTemplate(\n templatePath: string,\n projectContext: ProjectContext\n ): Promise<TemplateProcessingResult> {\n const startTime = Date.now();\n const createdIds = { cycles: [] as string[], tasks: [] as string[] };\n\n try {\n // Load and validate template JSON\n const templateContent = await this.projectInitializer.readFile(templatePath);\n const template = JSON.parse(templateContent);\n\n if (!template.cycles || !Array.isArray(template.cycles)) {\n throw new DetailedValidationError('Invalid template format', [\n { field: 'cycles', message: 'must be an array', value: template.cycles },\n ]);\n }\n\n let cyclesCreated = 0;\n let tasksCreated = 0;\n\n // Process cycles\n for (const cycleTemplate of template.cycles) {\n const cycleData = await createCycleRecord({\n title: cycleTemplate.title || 'Untitled Cycle',\n status: cycleTemplate.status || 'planning',\n taskIds: [],\n });\n\n const cycle = await this.backlogAdapter.createCycle(cycleData, projectContext.actorId);\n createdIds.cycles.push(cycle.id);\n cyclesCreated++;\n\n // Process tasks for this cycle\n if (cycleTemplate.tasks && Array.isArray(cycleTemplate.tasks)) {\n for (const taskTemplate of cycleTemplate.tasks) {\n const taskData = await createTaskRecord({\n title: taskTemplate.title || 'Untitled Task',\n priority: taskTemplate.priority || 'medium',\n description: taskTemplate.description || '',\n tags: taskTemplate.tags || [],\n cycleIds: [cycle.id],\n });\n\n const task = await this.backlogAdapter.createTask(taskData, projectContext.actorId);\n createdIds.tasks.push(task.id);\n tasksCreated++;\n }\n }\n }\n\n const processingTime = Date.now() - startTime;\n\n return {\n success: true,\n cyclesCreated,\n tasksCreated,\n processingTime,\n createdIds,\n };\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n\n throw new DetailedValidationError('Template processing failed', [\n { field: 'template', message: error instanceof Error ? error.message : 'Unknown error', value: templatePath },\n ]);\n }\n }\n\n /**\n * [EARS-A5/A10] Cleans up partial setup artifacts if initialization fails.\n * Delegates to ProjectInitializer.rollback().\n */\n async rollbackPartialSetup(setupId: string): Promise<void> {\n try {\n await this.projectInitializer.rollback();\n } catch (error) {\n // Log error but don't throw to avoid masking original error\n console.warn(`Rollback failed for setup ${setupId}:`, error);\n }\n }\n\n // ===== FASE 2: FUTURE PLATFORM METHODS =====\n\n /**\n * [EARS-E1] Gets project information from config.json via ConfigManager (Fase 2)\n */\n async getProjectInfo(): Promise<ProjectInfo | null> {\n try {\n const config = await this.configManager.loadConfig();\n if (!config) {\n return null;\n }\n\n return {\n id: config.projectId,\n name: config.projectName,\n rootCycle: config.rootCycle,\n protocolVersion: config.protocolVersion,\n };\n } catch {\n return null;\n }\n }\n\n /**\n * [EARS-E2] Updates project configuration with validation (Fase 2)\n */\n async updateProjectConfig(updates: Partial<GitGovConfig>): Promise<void> {\n try {\n const currentConfig = await this.configManager.loadConfig();\n if (!currentConfig) {\n throw new Error('No existing configuration found');\n }\n // TODO: Implement config update with validation\n } catch (error) {\n throw new DetailedValidationError('Configuration update failed', [\n { field: 'config', message: error instanceof Error ? error.message : 'Unknown error', value: updates },\n ]);\n }\n }\n\n /**\n * Generates project report (Fase 2)\n */\n async generateProjectReport(): Promise<ProjectReport> {\n throw new Error('NotImplementedError: generateProjectReport not implemented yet');\n }\n\n // ===== PRIVATE HELPER METHODS =====\n\n private generateProjectId(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '-')\n .replace(/-+/g, '-');\n }\n}\n","import type { WorkflowRecord } from '../../record_types';\nimport type { TaskRecord } from '../../record_types';\nimport type { ActorRecord } from '../../record_types';\nimport type { FeedbackRecord } from '../../record_types';\nimport type { CycleRecord } from '../../record_types';\nimport type { Signature } from '../../record_types/embedded.types';\nimport { Schemas } from '../../record_schemas';\nimport { SchemaValidationCache } from '../../record_schemas/schema_cache';\nimport type { IFeedbackAdapter } from '../feedback_adapter';\nimport defaultConfig from './generated/kanban_workflow.json';\nimport scrumConfig from './generated/scrum_workflow.json';\n\ntype TaskStatus = TaskRecord['status'];\n\nexport type ValidationContext = {\n task: TaskRecord;\n actor?: ActorRecord;\n signatures?: Signature[];\n // Related records for complex rule validation\n feedbacks?: FeedbackRecord[];\n cycles?: CycleRecord[];\n // The target state for a transition, required for signature validation\n transitionTo?: TaskStatus;\n}\n\ntype TransitionRule = {\n to: TaskStatus;\n conditions: NonNullable<NonNullable<WorkflowRecord['state_transitions']>[string]>['requires'] | undefined;\n}\n\nexport interface IWorkflow {\n getTransitionRule(from: TaskStatus, to: TaskStatus, context: ValidationContext): Promise<TransitionRule | null>;\n validateSignature(signature: Signature, context: ValidationContext): Promise<boolean>;\n validateCustomRules(rules: string[], context: ValidationContext): Promise<boolean>;\n getAvailableTransitions(from: TaskStatus): Promise<TransitionRule[]>;\n}\n\n/**\n * WorkflowAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface WorkflowAdapterDependencies {\n // Configuration Layer\n config: WorkflowRecord; // ✅ Direct config object (validated)\n\n // Required: Cross-adapter dependencies (critical for custom rules)\n feedbackAdapter: IFeedbackAdapter; // Para assignment_required validation\n}\n\n/**\n * WorkflowAdapter - The Configurable Rules Engine\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between business rules and workflow validation.\n */\nexport class WorkflowAdapter implements IWorkflow {\n private config: WorkflowRecord;\n\n constructor(dependencies: WorkflowAdapterDependencies) {\n this.validateConfig(dependencies.config, dependencies.config.name || 'custom');\n this.config = dependencies.config;\n }\n\n // Factory methods para configuraciones predefinidas\n static createDefault(feedbackAdapter: IFeedbackAdapter): WorkflowAdapter {\n return new WorkflowAdapter({\n config: defaultConfig as unknown as WorkflowRecord,\n feedbackAdapter\n });\n }\n\n static createScrum(feedbackAdapter: IFeedbackAdapter): WorkflowAdapter {\n return new WorkflowAdapter({\n config: scrumConfig as unknown as WorkflowRecord,\n feedbackAdapter\n });\n }\n\n private validateConfig(config: WorkflowRecord, configName: string): void {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowRecord);\n const isValid = validator(config);\n\n if (!isValid) {\n const errors = validator.errors?.map(err => `${err.instancePath}: ${err.message}`).join(', ') || 'Unknown validation error';\n throw new Error(`Invalid ${configName} configuration: ${errors}`);\n }\n }\n\n /**\n * Gets the current configuration (already loaded and validated)\n */\n private getConfig(): WorkflowRecord {\n return this.config;\n }\n\n /**\n * Determines which signature group to use for validation.\n * Checks all available signature groups and returns the first one where\n * the actor has matching capability roles.\n */\n private getApplicableSignatureGroup(signatureRules: Record<string, any>, actor: ActorRecord): string {\n // Try to find a signature group where the actor has matching roles\n for (const [groupName, ruleSet] of Object.entries(signatureRules)) {\n if (groupName === '__default__') continue; // Check __default__ last\n\n const hasMatchingRole = actor.roles?.some(role => ruleSet.capability_roles?.includes(role));\n if (hasMatchingRole) {\n return groupName;\n }\n }\n\n // Fallback to __default__\n return '__default__';\n }\n\n /**\n * Determines if a state transition is legal according to the methodology\n */\n async getTransitionRule(from: TaskStatus, to: TaskStatus, _context: ValidationContext): Promise<TransitionRule | null> {\n const config = this.getConfig();\n\n // Look for transition rule in configuration\n const transitionConfig = config.state_transitions?.[to];\n\n if (!transitionConfig) {\n return null;\n }\n\n // Check if 'from' state is valid for this transition\n if (!transitionConfig.from.includes(from)) {\n return null;\n }\n\n return {\n to,\n conditions: transitionConfig.requires\n };\n }\n\n /**\n * Validates if an actor's signature meets the requirements for a transition\n */\n async validateSignature(signature: Signature, context: ValidationContext): Promise<boolean> {\n const config = this.getConfig();\n\n if (!context.transitionTo) {\n throw new Error('ValidationContext must include \"transitionTo\" for signature validation.');\n }\n const targetState = context.transitionTo;\n\n const actor = context.actor;\n if (!actor) {\n return false;\n }\n\n const transitionConfig = config.state_transitions?.[targetState];\n if (!transitionConfig) return false;\n\n // A transition must be possible from the current task state\n if (!transitionConfig.from.includes(context.task.status)) {\n return false;\n }\n\n const signatureRules = transitionConfig.requires.signatures;\n if (!signatureRules) return true; // No signature required for this transition\n\n // Determine which signature group applies based on actor's roles\n const signatureGroup = this.getApplicableSignatureGroup(signatureRules, actor);\n const ruleSet = signatureRules[signatureGroup];\n if (!ruleSet) return false;\n\n // 1. Check if the signature role matches the required role\n if (signature.role !== ruleSet.role) {\n return false;\n }\n\n // 2. Check if the actor has at least one of the required capability roles\n const hasRequiredCapability = actor.roles?.some(role => ruleSet.capability_roles.includes(role));\n if (!hasRequiredCapability) {\n return false;\n }\n\n // 3. Check for min_approvals (requires context.signatures)\n const allSignaturesForGate = context.signatures || [signature];\n const relevantSignatures = allSignaturesForGate.filter(s => {\n // This is a simplified check for actor capability. A real implementation\n // would need to fetch each signing actor's record. Here we assume\n // the provided actor in the context is the one signing.\n return s.role === ruleSet.role && hasRequiredCapability;\n });\n\n\n if (relevantSignatures.length < ruleSet.min_approvals) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Validates custom rules for a given context\n */\n async validateCustomRules(rules: string[], context: ValidationContext): Promise<boolean> {\n const config = this.getConfig();\n\n for (const ruleId of rules) {\n const customRule = config.custom_rules?.[ruleId];\n\n if (!customRule) {\n console.warn(`Unknown custom rule: ${ruleId}`);\n return false;\n }\n\n let isRuleValid = false;\n\n // Validate based on rule type\n switch (customRule.validation) {\n case 'assignment_required':\n // Validate that task has a resolved assignment feedback record\n const assignment = context.feedbacks?.find(f =>\n f.type === 'assignment' && f.status === 'resolved'\n );\n isRuleValid = !!assignment;\n break;\n\n case 'sprint_capacity':\n // Validate that task is in an active sprint (cycle)\n if (!context.task.cycleIds || context.task.cycleIds.length === 0) {\n isRuleValid = false;\n break;\n }\n const activeCycles = context.cycles?.filter(c => c.status === 'active');\n if (!activeCycles || activeCycles.length === 0) {\n isRuleValid = false;\n break;\n }\n // Check if the task's cycles overlap with any active cycles\n isRuleValid = context.task.cycleIds.some(tcId => activeCycles.some(ac => ac.id === tcId));\n break;\n\n case 'epic_complexity':\n // Validate epic promotion requirements\n const isEpic = context.task.tags?.some(tag => tag.startsWith('epic:'));\n if (!isEpic) {\n isRuleValid = true; // Rule doesn't apply to non-epics\n break;\n }\n // Decomposed epics are paused and have child cycles.\n isRuleValid = context.task.status === 'paused' && (context.task.cycleIds?.length || 0) > 0;\n break;\n\n case 'custom':\n // For now, custom rules just log and return true\n // Future: could be extended for specific use cases\n console.log(`Custom rule '${ruleId}' executed`);\n isRuleValid = true;\n break;\n\n default:\n console.warn(`Unknown validation type: ${customRule.validation}`);\n isRuleValid = false;\n break;\n }\n\n // If any rule fails, the entire validation fails\n if (!isRuleValid) {\n return false;\n }\n }\n\n return true; // All rules passed\n }\n\n\n async getAvailableTransitions(from: TaskStatus): Promise<TransitionRule[]> {\n const config = this.getConfig();\n if (!config.state_transitions) {\n return [];\n }\n\n const available: TransitionRule[] = [];\n for (const toState in config.state_transitions) {\n const transitionConfig = config.state_transitions[toState];\n if (transitionConfig && transitionConfig.from.includes(from)) {\n available.push({\n to: toState as TaskStatus,\n conditions: transitionConfig.requires,\n });\n }\n }\n return available;\n }\n}\n\n\n","{\n \"version\": \"1.0.0\",\n \"name\": \"GitGovernance Default Methodology\",\n \"description\": \"Standard GitGovernance workflow with quality gates and agent collaboration\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"submitter\",\n \"capability_roles\": [\n \"author\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n },\n \"design\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:design\"\n ],\n \"min_approvals\": 1\n },\n \"quality\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\",\n \"custom_rules\": [\n \"task_must_have_valid_assignment_for_executor\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n },\n \"discarded\": {\n \"from\": [\n \"ready\",\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task cancel\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"canceller\",\n \"capability_roles\": [\n \"approver:product\",\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"task_must_have_valid_assignment_for_executor\": {\n \"description\": \"Task must have a valid assignment before execution can begin\",\n \"validation\": \"assignment_required\"\n },\n \"task_must_be_in_active_sprint\": {\n \"description\": \"Task must belong to an active sprint cycle\",\n \"validation\": \"sprint_capacity\"\n },\n \"epic_promotion_required\": {\n \"description\": \"Complex tasks must be promoted to epic with child cycles\",\n \"validation\": \"epic_complexity\"\n }\n },\n \"view_configs\": {\n \"kanban-4col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"In Progress\": [\n \"review\",\n \"ready\",\n \"active\"\n ],\n \"Review\": [\n \"done\"\n ],\n \"Done\": [\n \"archived\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"horizontal\"\n },\n \"kanban-7col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"Review\": [\n \"review\"\n ],\n \"Ready\": [\n \"ready\"\n ],\n \"Active\": [\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ],\n \"Archived\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"vertical\"\n }\n }\n}","{\n \"version\": \"1.0.0\",\n \"name\": \"Scrum Framework\",\n \"description\": \"Agile Scrum methodology with sprint-based workflow and defined roles\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"product_owner\",\n \"capability_roles\": [\n \"product:owner\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"custom_rules\": [\n \"task_fits_in_sprint_capacity\"\n ]\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"sprint_started\",\n \"custom_rules\": [\n \"task_assigned_to_team_member\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"scrum_master\",\n \"capability_roles\": [\n \"scrum:master\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n }\n },\n \"custom_rules\": {\n \"task_fits_in_sprint_capacity\": {\n \"description\": \"Task story points must fit within remaining sprint capacity\",\n \"validation\": \"sprint_capacity\"\n },\n \"task_assigned_to_team_member\": {\n \"description\": \"Task must be assigned to an active team member\",\n \"validation\": \"assignment_required\"\n }\n },\n \"view_configs\": {\n \"scrum-board\": {\n \"columns\": {\n \"Product Backlog\": [\n \"draft\"\n ],\n \"Sprint Backlog\": [\n \"review\",\n \"ready\"\n ],\n \"In Progress\": [\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ],\n \"Retrospective\": [\n \"archived\"\n ]\n },\n \"theme\": \"default\",\n \"layout\": \"horizontal\"\n },\n \"scrum-detailed\": {\n \"columns\": {\n \"Product Backlog\": [\n \"draft\"\n ],\n \"Groomed\": [\n \"review\"\n ],\n \"Sprint Ready\": [\n \"ready\"\n ],\n \"In Development\": [\n \"active\"\n ],\n \"Demo Ready\": [\n \"done\"\n ],\n \"Sprint Closed\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"vertical\"\n },\n \"scrum-product-owner\": {\n \"columns\": {\n \"Backlog Items\": [\n \"draft\"\n ],\n \"Ready for Sprint\": [\n \"review\"\n ],\n \"Sprint Committed\": [\n \"ready\"\n ],\n \"In Development\": [\n \"active\"\n ],\n \"Ready for Review\": [\n \"done\"\n ],\n \"Released\": [\n \"archived\"\n ],\n \"Issues\": [\n \"paused\",\n \"discarded\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"grid\"\n },\n \"scrum-developer\": {\n \"columns\": {\n \"To Do\": [\n \"ready\"\n ],\n \"In Progress\": [\n \"active\"\n ],\n \"Code Review\": [\n \"done\"\n ],\n \"Done\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ]\n },\n \"theme\": \"dark\",\n \"layout\": \"horizontal\"\n },\n \"scrum-master-dashboard\": {\n \"columns\": {\n \"Sprint Planning\": [\n \"draft\",\n \"review\"\n ],\n \"Active Sprint\": [\n \"ready\",\n \"active\"\n ],\n \"Sprint Review\": [\n \"done\"\n ],\n \"Retrospective\": [\n \"archived\"\n ],\n \"Impediments\": [\n \"paused\",\n \"discarded\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"grid\"\n }\n },\n \"agent_integration\": {\n \"description\": \"Agent integration proposal for Scrum methodology automation\",\n \"required_agents\": [\n {\n \"id\": \"agent:scrum-master\",\n \"triggers\": [\n {\n \"event\": \"sprint_end_approaching\",\n \"action\": \"create_sprint_review_tasks\"\n },\n {\n \"cron\": \"0 9 * * 1-5\",\n \"event\": \"daily_standup_time\",\n \"action\": \"generate_standup_report\"\n },\n {\n \"event\": \"impediment_detected\",\n \"action\": \"escalate_to_product_owner\"\n }\n ]\n },\n {\n \"id\": \"agent:product-owner-assistant\",\n \"triggers\": [\n {\n \"event\": \"backlog_grooming_needed\",\n \"action\": \"prioritize_product_backlog\"\n },\n {\n \"event\": \"sprint_planning_started\",\n \"action\": \"assist_sprint_planning\"\n }\n ]\n }\n ]\n }\n}","/**\n * ConfigManager Module\n *\n * Provides typed access to GitGovernance project configuration (config.json).\n * Configuration is versioned in Git and shared between collaborators.\n */\n\n// Types\nexport type {\n GitGovConfig,\n AuditState,\n SyncConfig,\n SyncDefaults,\n AuditStateUpdate,\n IConfigManager\n} from './config_manager.types';\n\n// Implementation\nexport { ConfigManager } from './config_manager';\n\n// Re-export session types for backward compatibility during migration\n// TODO: Remove these after full migration to SessionManager\nexport type { GitGovSession, ActorState, SyncStatus } from '../session_manager';\n\n// Re-export SessionManager for backward compatibility during migration\n// TODO: Remove after full migration - use direct import from '../session_manager'\nexport { SessionManager } from '../session_manager';\n","/**\n * ConfigManager - Project Configuration Manager\n *\n * Provides typed access to GitGovernance project configuration (config.json).\n * Configuration is versioned in Git and shared between collaborators.\n *\n * Uses ConfigStore abstraction for backend-agnostic persistence.\n *\n * NOTE: Session state (.session.json) is handled by SessionManager, not ConfigManager.\n */\n\nimport type { ConfigStore } from '../config_store/config_store';\nimport type {\n IConfigManager,\n GitGovConfig,\n AuditState,\n SyncConfig,\n SyncDefaults,\n AuditStateUpdate\n} from './config_manager.types';\n\n/**\n * Configuration Manager Class\n *\n * Provides typed access to GitGovernance project configuration.\n * Uses ConfigStore abstraction for backend-agnostic persistence.\n *\n * @example\n * ```typescript\n * // Production usage\n * import { FsConfigStore } from '@gitgov/core/fs';\n * const configStore = new FsConfigStore('/path/to/project');\n * const configManager = new ConfigManager(configStore);\n *\n * // Test usage\n * import { MemoryConfigStore } from '@gitgov/core/memory';\n * const configStore = new MemoryConfigStore();\n * configStore.setConfig({ ... });\n * const configManager = new ConfigManager(configStore);\n * ```\n */\nexport class ConfigManager implements IConfigManager {\n private readonly configStore: ConfigStore;\n\n constructor(configStore: ConfigStore) {\n this.configStore = configStore;\n }\n\n /**\n * Load GitGovernance configuration\n */\n async loadConfig(): Promise<GitGovConfig | null> {\n return this.configStore.loadConfig();\n }\n\n /**\n * Get root cycle from configuration\n */\n async getRootCycle(): Promise<string | null> {\n const config = await this.loadConfig();\n return config?.rootCycle || null;\n }\n\n /**\n * Get project information from configuration\n */\n async getProjectInfo(): Promise<{ id: string; name: string } | null> {\n const config = await this.loadConfig();\n if (!config) return null;\n\n return {\n id: config.projectId,\n name: config.projectName\n };\n }\n\n /**\n * Get sync configuration from config.json\n * Returns sync strategy and related settings with defaults\n */\n async getSyncConfig(): Promise<SyncConfig | null> {\n const config = await this.loadConfig();\n if (!config?.state?.sync) return null;\n\n return {\n strategy: config.state.sync.strategy || \"manual\",\n maxRetries: config.state.sync.maxRetries || 3,\n pushIntervalSeconds: config.state.sync.pushIntervalSeconds || 30,\n batchIntervalSeconds: config.state.sync.batchIntervalSeconds || 60\n };\n }\n\n /**\n * Get sync defaults from config.json\n * Returns recommended defaults for pullScheduler and fileWatcher\n */\n async getSyncDefaults(): Promise<SyncDefaults> {\n const config = await this.loadConfig();\n\n return {\n pullScheduler: {\n defaultIntervalSeconds: config?.state?.defaults?.pullScheduler?.defaultIntervalSeconds || 30,\n defaultEnabled: config?.state?.defaults?.pullScheduler?.defaultEnabled || false,\n defaultContinueOnNetworkError: config?.state?.defaults?.pullScheduler?.defaultContinueOnNetworkError ?? true,\n defaultStopOnConflict: config?.state?.defaults?.pullScheduler?.defaultStopOnConflict || false\n },\n fileWatcher: {\n defaultDebounceMs: config?.state?.defaults?.fileWatcher?.defaultDebounceMs || 300,\n defaultIgnoredPatterns: config?.state?.defaults?.fileWatcher?.defaultIgnoredPatterns || [\"*.tmp\", \".DS_Store\", \"*.swp\"]\n }\n };\n }\n\n /**\n * Get audit state from config.json\n * Returns last full audit commit and timestamp for incremental mode\n */\n async getAuditState(): Promise<AuditState> {\n const config = await this.loadConfig();\n return {\n lastFullAuditCommit: config?.state?.audit?.lastFullAuditCommit || null,\n lastFullAuditTimestamp: config?.state?.audit?.lastFullAuditTimestamp || null,\n lastFullAuditFindingsCount: config?.state?.audit?.lastFullAuditFindingsCount ?? null\n };\n }\n\n /**\n * Update audit state in config.json after a full audit\n * This is used to enable incremental audits\n */\n async updateAuditState(auditState: AuditStateUpdate): Promise<void> {\n const config = await this.loadConfig();\n if (!config) {\n throw new Error('Cannot update audit state: config.json not found');\n }\n\n if (!config.state) {\n config.state = {};\n }\n\n config.state.audit = {\n lastFullAuditCommit: auditState.lastFullAuditCommit,\n lastFullAuditTimestamp: auditState.lastFullAuditTimestamp,\n lastFullAuditFindingsCount: auditState.lastFullAuditFindingsCount\n };\n\n await this.configStore.saveConfig(config);\n }\n\n /**\n * Get state branch name from configuration\n */\n async getStateBranch(): Promise<string> {\n const config = await this.loadConfig();\n return config?.state?.branch || 'gitgov-state';\n }\n}\n","export * from \"./actor_factory\";\nexport * from \"./agent_factory\";\nexport * from \"./task_factory\";\nexport * from \"./cycle_factory\";\nexport * from \"./execution_factory\";\nexport * from \"./changelog_factory\";\nexport * from \"./feedback_factory\";\nexport * from \"./workflow_factory\";\nexport * from \"./embedded_metadata_factory\";\n","import type { ValidateFunction } from \"ajv\";\nimport type { WorkflowRecord } from \"../record_types\";\nimport { SchemaValidationCache } from \"../record_schemas/schema_cache\";\nimport { Schemas } from '../record_schemas';\n\n// --- Schema Validation ---\nexport function validateWorkflowConfigSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid WorkflowConfig.\n */\nexport function isWorkflowConfig(data: unknown): data is WorkflowRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a WorkflowConfig and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateWorkflowConfigDetailed(data: unknown): {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n} {\n const [isValid, ajvErrors] = validateWorkflowConfigSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map(error => ({\n field: error.instancePath || error.schemaPath || 'root',\n message: error.message || 'Validation failed',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n/**\n * Validates configuration structure and business rules\n * @param config The workflow methodology configuration to validate\n */\nexport function validateWorkflowConfigBusinessRules(\n config: WorkflowRecord\n): {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n} {\n const errors: Array<{ field: string; message: string; value: unknown }> = [];\n\n // Validate state_transitions have valid structure\n const validStates = ['draft', 'review', 'ready', 'active', 'done', 'archived', 'paused', 'discarded'];\n\n for (const [targetState, transition] of Object.entries(config.state_transitions)) {\n if (!validStates.includes(targetState)) {\n errors.push({\n field: `state_transitions.${targetState}`,\n message: `Invalid target state: ${targetState}`,\n value: targetState\n });\n }\n\n // Validate 'from' states are valid\n if (transition?.from) {\n for (const fromState of transition.from) {\n if (!validStates.includes(fromState)) {\n errors.push({\n field: `state_transitions.${targetState}.from`,\n message: `Invalid source state: ${fromState}`,\n value: fromState\n });\n }\n }\n }\n\n // Validate custom_rules reference existing rules\n if (transition?.requires?.custom_rules && config.custom_rules) {\n for (const ruleId of transition.requires.custom_rules) {\n if (!config.custom_rules[ruleId]) {\n errors.push({\n field: `state_transitions.${targetState}.requires.custom_rules`,\n message: `Custom rule '${ruleId}' not defined in custom_rules section`,\n value: ruleId\n });\n }\n }\n }\n }\n\n // Validate custom_rules have valid validation types\n if (config.custom_rules) {\n const validValidationTypes = ['assignment_required', 'sprint_capacity', 'epic_complexity', 'custom'];\n\n for (const [ruleId, rule] of Object.entries(config.custom_rules)) {\n if (rule && !validValidationTypes.includes(rule.validation)) {\n errors.push({\n field: `custom_rules.${ruleId}.validation`,\n message: `Invalid validation type: ${rule.validation}`,\n value: rule.validation\n });\n }\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors\n };\n}\n","import type { WorkflowRecord } from \"../record_types\";\nimport {\n validateWorkflowConfigDetailed,\n validateWorkflowConfigBusinessRules\n} from \"../record_validations/workflow_validator\";\nimport { DetailedValidationError } from \"../record_validations/common\";\n\n/**\n * Creates a new, fully-formed WorkflowConfig with validation.\n * Follows the same pattern as createTaskRecord, createActorRecord, etc.\n */\nexport function createWorkflowConfig(\n payload: Partial<WorkflowRecord>\n): WorkflowRecord {\n\n // Build config with defaults for optional fields\n const config: WorkflowRecord = {\n version: payload.version || '1.0.0',\n name: payload.name || 'Custom Methodology',\n description: payload.description,\n state_transitions: payload.state_transitions || {\n review: {\n from: ['draft'],\n requires: {\n command: 'gitgov task submit',\n signatures: {\n '__default__': {\n role: 'submitter',\n capability_roles: ['author'],\n min_approvals: 1\n }\n }\n }\n }\n },\n custom_rules: payload.custom_rules,\n ...payload,\n } as WorkflowRecord;\n\n // Use validator to check schema compliance with detailed errors\n const schemaValidation = validateWorkflowConfigDetailed(config);\n if (!schemaValidation.isValid) {\n throw new DetailedValidationError('WorkflowConfig', schemaValidation.errors);\n }\n\n // Use business rules validator for additional validation\n const businessRulesValidation = validateWorkflowConfigBusinessRules(config);\n if (!businessRulesValidation.isValid) {\n throw new DetailedValidationError('WorkflowConfig (Business Rules)', businessRulesValidation.errors);\n }\n\n return config;\n}\n\n/**\n * Creates a default GitGovernance workflow methodology configuration\n */\nexport async function createDefaultWorkflowConfig(): Promise<WorkflowRecord> {\n return createWorkflowConfig({\n version: '1.0.0',\n name: 'GitGovernance Default Methodology',\n description: 'Standard GitGovernance workflow with quality gates and agent collaboration',\n state_transitions: {\n review: {\n from: ['draft'],\n requires: {\n command: 'gitgov task submit',\n signatures: {\n '__default__': {\n role: 'submitter',\n capability_roles: ['author'],\n min_approvals: 1\n }\n }\n }\n },\n ready: {\n from: ['review'],\n requires: {\n command: 'gitgov task approve',\n signatures: {\n '__default__': {\n role: 'approver',\n capability_roles: ['approver:product'],\n min_approvals: 1\n },\n 'design': {\n role: 'approver',\n capability_roles: ['approver:design'],\n min_approvals: 1\n },\n 'quality': {\n role: 'approver',\n capability_roles: ['approver:quality'],\n min_approvals: 1\n }\n }\n }\n },\n active: {\n from: ['ready'],\n requires: {\n event: 'first_execution_record_created',\n custom_rules: ['task_must_have_valid_assignment_for_executor']\n }\n },\n done: {\n from: ['active'],\n requires: {\n command: 'gitgov task complete',\n signatures: {\n '__default__': {\n role: 'approver',\n capability_roles: ['approver:quality'],\n min_approvals: 1\n }\n }\n }\n },\n archived: {\n from: ['done'],\n requires: {\n event: 'changelog_record_created'\n }\n },\n paused: {\n from: ['active', 'review'],\n requires: {\n event: 'feedback_blocking_created'\n }\n }\n },\n custom_rules: {\n 'task_must_have_valid_assignment_for_executor': {\n description: 'Task must have a valid assignment before execution can begin',\n validation: 'assignment_required'\n },\n 'task_must_be_in_active_sprint': {\n description: 'Task must belong to an active sprint cycle',\n validation: 'sprint_capacity'\n },\n 'epic_promotion_required': {\n description: 'Complex tasks must be promoted to epic with child cycles',\n validation: 'epic_complexity'\n }\n }\n });\n}\n","import type { EmbeddedMetadataRecord, GitGovRecordPayload } from '../record_types';\nimport type { Signature, EmbeddedMetadataHeader } from '../record_types/embedded.types';\nimport { validateEmbeddedMetadataDetailed } from '../record_validations/embedded_metadata_validator';\nimport { DetailedValidationError } from '../record_validations/common';\nimport { calculatePayloadChecksum } from '../crypto/checksum';\nimport { signPayload } from '../crypto/signatures';\n\n/**\n * Configuration for signature generation\n * Extends Signature with privateKey for signing\n */\nexport type SignatureConfig = Partial<Pick<Signature, 'keyId' | 'role' | 'notes'>> & {\n /** Private key for signing (if not provided, creates unsigned test signature) */\n privateKey?: string;\n};\n\n/**\n * Options for creating an EmbeddedMetadataRecord\n */\nexport type CreateEmbeddedMetadataOptions = {\n /** Header configuration (partial override, excludes auto-generated fields) */\n header?: Partial<Pick<EmbeddedMetadataHeader, 'version' | 'type' | 'schemaUrl' | 'schemaChecksum'>>;\n /** Signature configuration (if not provided, uses default test signature) */\n signature?: SignatureConfig;\n /** Custom signatures array (if provided, overrides signature config) */\n signatures?: Signature[];\n};\n\n/**\n * Creates a test signature for development/testing purposes (unsigned)\n * Use this only for testing when you don't have a real private key\n * \n * @param keyId - The key ID for the signature (default: 'human:test-user')\n * @param role - The role for the signature (default: 'author')\n * @param notes - Notes for the signature (default: 'Test signature - unsigned')\n * @returns Signature object (with dummy signature value)\n */\nexport function createTestSignature(\n keyId: string = 'human:test-user',\n role: string = 'author',\n notes: string = 'Test signature - unsigned'\n): Signature {\n const timestamp = Math.floor(Date.now() / 1000);\n return {\n keyId,\n role,\n notes,\n signature: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==', // Dummy 88-char base64 for testing (86 chars + ==, matches Ed25519 signature format)\n timestamp\n };\n}\n\n/**\n * Infers the header type from the payload structure\n * \n * @param payload - The record payload\n * @returns The inferred type string\n */\nfunction inferTypeFromPayload(payload: GitGovRecordPayload): string {\n // Check for distinctive properties of each record type\n if ('engine' in payload) return 'agent';\n if ('taskId' in payload && 'result' in payload) return 'execution';\n if ('relatedTasks' in payload && 'completedAt' in payload) return 'changelog';\n if ('entityType' in payload && 'entityId' in payload) return 'feedback';\n if ('status' in payload && 'taskIds' in payload) return 'cycle';\n if ('priority' in payload && 'description' in payload) return 'task';\n if ('displayName' in payload && 'publicKey' in payload) return 'actor';\n\n return 'custom';\n}\n\n\n/**\n * Creates a complete EmbeddedMetadataRecord with validation\n * \n * @param payload - The record payload (ActorRecord, TaskRecord, etc.)\n * @param options - Optional configuration for the embedded metadata\n * @returns Promise<EmbeddedMetadataRecord<T>> - The validated embedded metadata record\n * \n * @example\n * ```typescript\n * const actorPayload: ActorRecord = {\n * id: 'human:john-doe',\n * type: 'human',\n * displayName: 'John Doe',\n * publicKey: 'abc123...',\n * roles: ['developer']\n * };\n * \n * const embedded = createEmbeddedMetadataRecord(actorPayload);\n * ```\n */\nexport function createEmbeddedMetadataRecord<T extends GitGovRecordPayload>(\n payload: T,\n options: CreateEmbeddedMetadataOptions = {}\n): EmbeddedMetadataRecord<T> {\n const inferredType = inferTypeFromPayload(payload);\n const type = options.header?.type || inferredType;\n\n // Calculate real payload checksum using crypto module\n const payloadChecksum = calculatePayloadChecksum(payload);\n\n // Generate signature(s)\n let signatures: Signature[];\n if (options.signatures) {\n // Use provided signatures array\n signatures = options.signatures;\n } else if (options.signature?.privateKey) {\n // Sign with provided private key\n const keyId = options.signature.keyId || 'human:test-user';\n const role = options.signature.role || 'author';\n const notes = options.signature.notes || 'Created via factory';\n signatures = [signPayload(payload, options.signature.privateKey, keyId, role, notes)];\n } else {\n // Create unsigned test signature\n const keyId = options.signature?.keyId || 'human:test-user';\n const role = options.signature?.role || 'author';\n const notes = options.signature?.notes || 'Test signature - unsigned';\n signatures = [createTestSignature(keyId, role, notes)];\n }\n\n // Build header (using Record for flexibility, will be validated)\n const header: Record<string, unknown> = {\n version: '1.0', // Always 1.0 (schema enforces this)\n type: type,\n payloadChecksum,\n signatures,\n ...(type === 'custom' && {\n schemaUrl: options.header?.schemaUrl,\n schemaChecksum: options.header?.schemaChecksum\n })\n };\n\n const embeddedRecord = {\n header,\n payload\n } as EmbeddedMetadataRecord<T>;\n\n // Validate the complete embedded metadata record\n const validation = validateEmbeddedMetadataDetailed(embeddedRecord);\n if (!validation.isValid) {\n throw new DetailedValidationError('EmbeddedMetadataRecord', validation.errors);\n }\n\n return embeddedRecord;\n}\n\n","/**\n * GitModule - Low-level Git Operations\n *\n * This module provides backend-agnostic access to Git operations.\n *\n * IMPORTANT: This module only exports the interface and types.\n * For implementations, use:\n * - @gitgov/core/fs for LocalGitModule (CLI-based)\n * - @gitgov/core/memory for MemoryGitModule (testing)\n *\n * @example\n * ```typescript\n * // Import interface and types\n * import type { IGitModule } from '@gitgov/core';\n *\n * // Import CLI implementation from fs entry point\n * import { LocalGitModule } from '@gitgov/core/fs';\n *\n * // Import memory implementation from memory entry point\n * import { MemoryGitModule } from '@gitgov/core/memory';\n * ```\n *\n * @module git\n */\n\nimport type {\n ExecOptions,\n ExecResult,\n GetCommitHistoryOptions,\n CommitInfo,\n ChangedFile,\n CommitAuthor,\n} from './types';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// INTERFACE\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * IGitModule - Interface for Git operations\n *\n * Implementations:\n * - LocalGitModule: Uses execCommand to run git CLI (production)\n * - MemoryGitModule: In-memory mock for unit tests\n * - Future: GitHubGitModule for SaaS API-based operations\n *\n * All methods are async to support both local CLI execution\n * and future API-based implementations (GitHub REST/GraphQL).\n */\nexport interface IGitModule {\n // Command Execution\n exec(command: string, args: string[], options?: ExecOptions): Promise<ExecResult>;\n\n // Initialization\n init(): Promise<void>;\n\n // Read Operations\n getRepoRoot(): Promise<string>;\n getCurrentBranch(): Promise<string>;\n getCommitHash(ref?: string): Promise<string>;\n setConfig(key: string, value: string, scope?: 'local' | 'global' | 'system'): Promise<void>;\n getMergeBase(branchA: string, branchB: string): Promise<string>;\n getChangedFiles(fromCommit: string, toCommit: string, pathFilter: string): Promise<ChangedFile[]>;\n getStagedFiles(): Promise<string[]>;\n getFileContent(commitHash: string, filePath: string): Promise<string>;\n getCommitHistory(branch: string, options?: GetCommitHistoryOptions): Promise<CommitInfo[]>;\n getCommitHistoryRange(fromHash: string, toHash: string, options?: GetCommitHistoryOptions): Promise<CommitInfo[]>;\n getCommitMessage(commitHash: string): Promise<string>;\n hasUncommittedChanges(pathFilter?: string): Promise<boolean>;\n isRebaseInProgress(): Promise<boolean>;\n branchExists(branchName: string): Promise<boolean>;\n listRemoteBranches(remoteName: string): Promise<string[]>;\n isRemoteConfigured(remoteName: string): Promise<boolean>;\n getBranchRemote(branchName: string): Promise<string | null>;\n getConflictedFiles(): Promise<string[]>;\n\n // Write Operations\n checkoutBranch(branchName: string): Promise<void>;\n stash(message?: string): Promise<string | null>;\n stashPop(): Promise<boolean>;\n stashDrop(stashHash?: string): Promise<void>;\n checkoutOrphanBranch(branchName: string): Promise<void>;\n fetch(remote: string): Promise<void>;\n pull(remote: string, branchName: string): Promise<void>;\n pullRebase(remote: string, branchName: string): Promise<void>;\n resetHard(target: string): Promise<void>;\n checkoutFilesFromBranch(sourceBranch: string, filePaths: string[]): Promise<void>;\n add(filePaths: string[], options?: { force?: boolean }): Promise<void>;\n rm(filePaths: string[]): Promise<void>;\n commit(message: string, author?: CommitAuthor): Promise<string>;\n commitAllowEmpty(message: string, author?: CommitAuthor): Promise<string>;\n push(remote: string, branchName: string): Promise<void>;\n pushWithUpstream(remote: string, branchName: string): Promise<void>;\n setUpstream(branchName: string, remote: string, remoteBranch: string): Promise<void>;\n\n // Rebase Operations\n rebaseContinue(): Promise<string>;\n rebaseAbort(): Promise<void>;\n createBranch(branchName: string, startPoint?: string): Promise<void>;\n rebase(targetBranch: string): Promise<void>;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// TYPES\n// ═══════════════════════════════════════════════════════════════════════════\n\nexport type {\n GitModuleDependencies,\n ExecOptions,\n ExecResult,\n GetCommitHistoryOptions,\n CommitInfo,\n ChangedFile,\n CommitAuthor,\n} from './types';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// ERRORS\n// ═══════════════════════════════════════════════════════════════════════════\n\nexport {\n GitError,\n GitCommandError,\n BranchNotFoundError,\n BranchAlreadyExistsError,\n FileNotFoundError,\n MergeConflictError,\n RebaseConflictError,\n RebaseNotInProgressError,\n} from './errors';\n","/**\n * Custom Error Classes for GitModule\n * \n * These errors provide typed exceptions for better error handling\n * and diagnostics in the Git module operations.\n */\n\n/**\n * Base error class for all Git-related errors\n */\nexport class GitError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'GitError';\n Object.setPrototypeOf(this, GitError.prototype);\n }\n}\n\n/**\n * Error thrown when a Git command fails\n */\nexport class GitCommandError extends GitError {\n public readonly stderr: string;\n public readonly stdout?: string | undefined;\n public readonly command?: string | undefined;\n\n constructor(message: string, stderr: string = '', command?: string | undefined, stdout?: string) {\n super(message);\n this.name = 'GitCommandError';\n this.stderr = stderr;\n this.stdout = stdout;\n this.command = command;\n Object.setPrototypeOf(this, GitCommandError.prototype);\n }\n}\n\n/**\n * Error thrown when a branch does not exist\n */\nexport class BranchNotFoundError extends GitError {\n public readonly branchName: string;\n\n constructor(branchName: string) {\n super(`Branch not found: ${branchName}`);\n this.name = 'BranchNotFoundError';\n this.branchName = branchName;\n Object.setPrototypeOf(this, BranchNotFoundError.prototype);\n }\n}\n\n/**\n * Error thrown when a file does not exist in a commit\n */\nexport class FileNotFoundError extends GitError {\n public readonly filePath: string;\n public readonly commitHash: string;\n\n constructor(filePath: string, commitHash: string) {\n super(`File not found: ${filePath} in commit ${commitHash}`);\n this.name = 'FileNotFoundError';\n this.filePath = filePath;\n this.commitHash = commitHash;\n Object.setPrototypeOf(this, FileNotFoundError.prototype);\n }\n}\n\n/**\n * Error thrown when a merge conflict occurs\n */\nexport class MergeConflictError extends GitError {\n public readonly conflictedFiles: string[];\n\n constructor(conflictedFiles: string[]) {\n super(`Merge conflict detected in ${conflictedFiles.length} file(s)`);\n this.name = 'MergeConflictError';\n this.conflictedFiles = conflictedFiles;\n Object.setPrototypeOf(this, MergeConflictError.prototype);\n }\n}\n\n/**\n * Error thrown when a rebase conflict occurs\n */\nexport class RebaseConflictError extends GitError {\n public readonly conflictedFiles: string[];\n\n constructor(conflictedFiles: string[]) {\n super(`Rebase conflict detected in ${conflictedFiles.length} file(s)`);\n this.name = 'RebaseConflictError';\n this.conflictedFiles = conflictedFiles;\n Object.setPrototypeOf(this, RebaseConflictError.prototype);\n }\n}\n\n/**\n * Error thrown when trying to continue/abort a rebase that is not in progress\n */\nexport class RebaseNotInProgressError extends GitError {\n constructor() {\n super('No rebase in progress');\n this.name = 'RebaseNotInProgressError';\n Object.setPrototypeOf(this, RebaseNotInProgressError.prototype);\n }\n}\n\n/**\n * Error thrown when trying to create a branch that already exists\n */\nexport class BranchAlreadyExistsError extends GitError {\n public readonly branchName: string;\n\n constructor(branchName: string) {\n super(`Branch already exists: ${branchName}`);\n this.name = 'BranchAlreadyExistsError';\n this.branchName = branchName;\n Object.setPrototypeOf(this, BranchAlreadyExistsError.prototype);\n }\n}\n\n","export * from './key_provider';\nexport * from './fs';\nexport * from './memory';\n","/**\n * KeyProvider Interface\n *\n * Abstracts private key storage for Actor signing operations.\n * Enables different backends: filesystem (development), environment variables (serverless),\n * or cloud KMS (enterprise).\n *\n * @module key_provider\n */\n\n/**\n * Error codes for KeyProvider operations.\n */\nexport type KeyProviderErrorCode =\n | 'KEY_NOT_FOUND'\n | 'KEY_READ_ERROR'\n | 'KEY_WRITE_ERROR'\n | 'KEY_DELETE_ERROR'\n | 'INVALID_KEY_FORMAT'\n | 'INVALID_ACTOR_ID';\n\n/**\n * Error thrown when key operations fail.\n */\nexport class KeyProviderError extends Error {\n constructor(\n message: string,\n public readonly code: KeyProviderErrorCode,\n public readonly actorId?: string\n ) {\n super(message);\n this.name = 'KeyProviderError';\n }\n}\n\n/**\n * Interface for managing private key storage.\n * Implementations handle the actual persistence mechanism.\n *\n * @example\n * ```typescript\n * // Filesystem backend (development)\n * const provider = new FsKeyProvider({ actorsDir: '.gitgov/actors' });\n *\n * // Environment backend (serverless)\n * const provider = new EnvKeyProvider({ prefix: 'GITGOV_KEY_' });\n *\n * // Usage\n * const privateKey = await provider.getPrivateKey('actor:human:alice');\n * if (privateKey) {\n * const signature = signPayload(payload, privateKey, actorId, role);\n * }\n * ```\n */\nexport interface KeyProvider {\n /**\n * Retrieves the private key for an actor.\n * @param actorId - The actor's ID (e.g., 'actor:human:alice')\n * @returns The base64-encoded private key, or null if not found\n */\n getPrivateKey(actorId: string): Promise<string | null>;\n\n /**\n * Stores a private key for an actor.\n * @param actorId - The actor's ID\n * @param privateKey - The base64-encoded private key\n * @throws KeyProviderError if write fails\n */\n setPrivateKey(actorId: string, privateKey: string): Promise<void>;\n\n /**\n * Checks if a private key exists for an actor.\n * @param actorId - The actor's ID\n * @returns true if key exists, false otherwise\n */\n hasPrivateKey(actorId: string): Promise<boolean>;\n\n /**\n * Deletes the private key for an actor.\n * @param actorId - The actor's ID\n * @returns true if key was deleted, false if it didn't exist\n */\n deletePrivateKey(actorId: string): Promise<boolean>;\n}\n","/**\n * FsKeyProvider - Filesystem-based KeyProvider implementation\n *\n * Stores private keys alongside actor records in .gitgov/actors/{actorId}.key\n * Used in development and CLI environments.\n *\n * @module key_provider/fs/fs_key_provider\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport type { KeyProvider } from '../key_provider';\nimport { KeyProviderError } from '../key_provider';\n\n/**\n * Options for FsKeyProvider.\n */\nexport interface FsKeyProviderOptions {\n /** Directory where key files are stored (same as actors: .gitgov/actors) */\n actorsDir: string;\n /** File extension for key files (default: '.key') */\n extension?: string;\n /** File permissions for key files (default: 0o600 - owner read/write only) */\n fileMode?: number;\n}\n\n/**\n * Filesystem-based KeyProvider implementation.\n * Keys are stored alongside actor records with .key extension.\n *\n * @example\n * ```typescript\n * const provider = new FsKeyProvider({ actorsDir: '.gitgov/actors' });\n * await provider.setPrivateKey('actor:human:alice', 'base64PrivateKey...');\n * const key = await provider.getPrivateKey('actor:human:alice');\n * ```\n */\nexport class FsKeyProvider implements KeyProvider {\n private readonly actorsDir: string;\n private readonly extension: string;\n private readonly fileMode: number;\n\n constructor(options: FsKeyProviderOptions) {\n this.actorsDir = options.actorsDir;\n this.extension = options.extension ?? '.key';\n this.fileMode = options.fileMode ?? 0o600;\n }\n\n /**\n * [EARS-KP01] Retrieves the private key for an actor.\n * [EARS-FKP07] Trims whitespace from content.\n * [EARS-FKP08] Returns null for empty key file.\n */\n async getPrivateKey(actorId: string): Promise<string | null> {\n const keyPath = this.getKeyPath(actorId);\n\n try {\n const content = await fs.readFile(keyPath, 'utf-8');\n const key = content.trim();\n\n if (!key) {\n return null;\n }\n\n return key;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n // [EARS-KP02] File not found - return null\n return null;\n }\n\n throw new KeyProviderError(\n `Failed to read private key for ${this.sanitizeForLog(actorId)}: ${(error as Error).message}`,\n 'KEY_READ_ERROR',\n actorId\n );\n }\n }\n\n /**\n * [EARS-KP03] Stores a private key for an actor.\n * [EARS-FKP01] Creates actorsDir if not exists.\n * [EARS-FKP02] Writes key to {actorsDir}/{actorId}.key.\n * [EARS-FKP03] Sets secure file permissions (0600).\n */\n async setPrivateKey(actorId: string, privateKey: string): Promise<void> {\n const keyPath = this.getKeyPath(actorId);\n\n try {\n // [EARS-FKP01] Ensure directory exists\n await fs.mkdir(this.actorsDir, { recursive: true });\n\n // [EARS-FKP02] Write key to {actorsDir}/{actorId}.key\n await fs.writeFile(keyPath, privateKey, 'utf-8');\n\n // [EARS-FKP03] Set secure file permissions (owner read/write only)\n await fs.chmod(keyPath, this.fileMode);\n } catch (error) {\n throw new KeyProviderError(\n `Failed to write private key for ${this.sanitizeForLog(actorId)}: ${(error as Error).message}`,\n 'KEY_WRITE_ERROR',\n actorId\n );\n }\n }\n\n /**\n * [EARS-FKP06] Checks if a private key exists for an actor.\n */\n async hasPrivateKey(actorId: string): Promise<boolean> {\n const keyPath = this.getKeyPath(actorId);\n\n try {\n await fs.access(keyPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * [EARS-KP04] Deletes the private key for an actor.\n */\n async deletePrivateKey(actorId: string): Promise<boolean> {\n const keyPath = this.getKeyPath(actorId);\n\n try {\n await fs.unlink(keyPath);\n return true;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n // File didn't exist\n return false;\n }\n\n throw new KeyProviderError(\n `Failed to delete private key for ${this.sanitizeForLog(actorId)}: ${(error as Error).message}`,\n 'KEY_DELETE_ERROR',\n actorId\n );\n }\n }\n\n /**\n * [EARS-FKP04] Builds the key file path, sanitizing actorId to prevent path traversal.\n * [EARS-FKP05] Replaces slashes with underscores.\n */\n private getKeyPath(actorId: string): string {\n // Sanitize actorId to prevent path traversal attacks\n const sanitized = this.sanitizeActorId(actorId);\n return path.join(this.actorsDir, `${sanitized}${this.extension}`);\n }\n\n /**\n * [EARS-FKP04] Sanitizes actorId to prevent directory traversal.\n * [EARS-FKP05] Replaces path separators with underscores.\n * [EARS-FKP09] Throws INVALID_ACTOR_ID for empty actorId.\n */\n private sanitizeActorId(actorId: string): string {\n // Remove path traversal attempts\n let sanitized = actorId\n .replace(/\\.\\./g, '') // Remove ..\n .replace(/[/\\\\]/g, '_'); // Replace path separators with underscore\n\n // Validate result is not empty\n if (!sanitized || sanitized === '') {\n throw new KeyProviderError(\n 'Invalid actorId: empty after sanitization',\n 'INVALID_ACTOR_ID',\n actorId\n );\n }\n\n return sanitized;\n }\n\n /**\n * Sanitizes actorId for logging (removes potential secrets).\n */\n private sanitizeForLog(actorId: string): string {\n // Just show first part for privacy\n if (actorId.length > 20) {\n return actorId.substring(0, 20) + '...';\n }\n return actorId;\n }\n}\n","/**\n * EnvKeyProvider - Environment variable-based KeyProvider implementation\n *\n * Reads private keys from environment variables.\n * Used in serverless environments (Atlassian Forge, AWS Lambda, etc.) and CI/CD.\n *\n * @module key_provider/memory/env_key_provider\n */\n\nimport type { KeyProvider } from '../key_provider';\nimport { KeyProviderError } from '../key_provider';\n\n/**\n * Options for EnvKeyProvider.\n */\nexport interface EnvKeyProviderOptions {\n /** Prefix for environment variable names (default: 'GITGOV_KEY_') */\n prefix?: string;\n /** Environment object to read from (default: process.env) */\n env?: Record<string, string | undefined>;\n /** Allow writes to custom env object (default: false for process.env, true otherwise) */\n allowWrites?: boolean;\n}\n\n/**\n * Environment variable-based KeyProvider implementation.\n * Keys are read from environment variables with a configurable prefix.\n *\n * Variable naming: {prefix}{SANITIZED_ACTOR_ID}\n * Example: GITGOV_KEY_ACTOR_HUMAN_ALICE for actorId \"actor:human:alice\"\n *\n * @example\n * ```typescript\n * // Read from process.env (default, read-only)\n * const provider = new EnvKeyProvider({ prefix: 'GITGOV_KEY_' });\n *\n * // Read from custom env object (writable)\n * const customEnv = { GITGOV_KEY_ACTOR_BOT: 'base64key...' };\n * const provider = new EnvKeyProvider({ env: customEnv, allowWrites: true });\n * ```\n */\nexport class EnvKeyProvider implements KeyProvider {\n private readonly prefix: string;\n private readonly env: Record<string, string | undefined>;\n private readonly allowWrites: boolean;\n\n constructor(options: EnvKeyProviderOptions = {}) {\n this.prefix = options.prefix ?? 'GITGOV_KEY_';\n // [EARS-EKP12] Default to process.env, always allows reads\n this.env = options.env ?? process.env;\n // Default: allow writes only if using custom env object\n this.allowWrites = options.allowWrites ?? (options.env !== undefined);\n }\n\n /**\n * [EARS-KP01] Retrieves the private key from environment variable.\n * [EARS-EKP01] Reads from {prefix}{SANITIZED_ACTOR_ID}.\n * [EARS-EKP07] Returns null for empty or whitespace-only value.\n * [EARS-EKP08] Trims whitespace from value.\n */\n async getPrivateKey(actorId: string): Promise<string | null> {\n const varName = this.getEnvVarName(actorId);\n const value = this.env[varName];\n\n if (!value || value.trim() === '') {\n return null;\n }\n\n return value.trim();\n }\n\n /**\n * [EARS-KP03] Stores a private key in the environment object.\n * [EARS-EKP02] Sets env var in custom env object.\n * [EARS-EKP03] Throws KEY_WRITE_ERROR when writing to process.env.\n */\n async setPrivateKey(actorId: string, privateKey: string): Promise<void> {\n if (!this.allowWrites) {\n throw new KeyProviderError(\n 'Cannot write to environment variables in read-only mode. ' +\n 'Use a custom env object with allowWrites: true for writable storage.',\n 'KEY_WRITE_ERROR',\n actorId\n );\n }\n\n const varName = this.getEnvVarName(actorId);\n this.env[varName] = privateKey;\n }\n\n /**\n * Checks if a private key exists in environment variables.\n */\n async hasPrivateKey(actorId: string): Promise<boolean> {\n const varName = this.getEnvVarName(actorId);\n const value = this.env[varName];\n return value !== undefined && value.trim() !== '';\n }\n\n /**\n * [EARS-KP04] Deletes the private key from environment object.\n * [EARS-EKP10] Throws KEY_DELETE_ERROR in read-only mode.\n */\n async deletePrivateKey(actorId: string): Promise<boolean> {\n if (!this.allowWrites) {\n throw new KeyProviderError(\n 'Cannot delete environment variables in read-only mode.',\n 'KEY_DELETE_ERROR',\n actorId\n );\n }\n\n const varName = this.getEnvVarName(actorId);\n const existed = this.env[varName] !== undefined;\n delete this.env[varName];\n return existed;\n }\n\n /**\n * [EARS-EKP04] Builds environment variable name from actorId.\n * [EARS-EKP05] Converts to UPPERCASE.\n * [EARS-EKP06] Collapses multiple underscores.\n * [EARS-EKP11] Throws INVALID_ACTOR_ID if empty after sanitization.\n */\n private getEnvVarName(actorId: string): string {\n // Sanitize: replace non-alphanumeric with underscores, uppercase\n const sanitized = actorId\n .toUpperCase()\n .replace(/[^A-Z0-9]/g, '_')\n .replace(/_+/g, '_') // Collapse multiple underscores\n .replace(/^_|_$/g, ''); // Trim leading/trailing underscores\n\n // [EARS-EKP11] Throw if empty after sanitization\n if (!sanitized) {\n throw new KeyProviderError(\n 'Invalid actorId: empty after sanitization',\n 'INVALID_ACTOR_ID',\n actorId\n );\n }\n\n return `${this.prefix}${sanitized}`;\n }\n}\n","/**\n * MockKeyProvider - In-memory KeyProvider for testing\n *\n * Stores keys in a Map for unit testing without I/O.\n *\n * @module key_provider/memory/mock_key_provider\n */\n\nimport type { KeyProvider } from '../key_provider';\n\n/**\n * Options for MockKeyProvider.\n */\nexport interface MockKeyProviderOptions {\n /** Initial keys to populate (actorId -> privateKey) */\n keys?: Map<string, string> | Record<string, string>;\n}\n\n/**\n * In-memory KeyProvider for testing.\n * All operations use an internal Map, no I/O required.\n *\n * @example\n * ```typescript\n * // Empty provider\n * const provider = new MockKeyProvider();\n *\n * // Pre-populated provider\n * const provider = new MockKeyProvider({\n * keys: { 'actor:human:alice': 'base64key...' }\n * });\n *\n * // Use in tests\n * await provider.setPrivateKey('actor:bot:test', 'testkey');\n * const key = await provider.getPrivateKey('actor:bot:test');\n * ```\n */\nexport class MockKeyProvider implements KeyProvider {\n private readonly keys: Map<string, string>;\n\n constructor(options: MockKeyProviderOptions = {}) {\n if (options.keys instanceof Map) {\n this.keys = new Map(options.keys);\n } else if (options.keys) {\n this.keys = new Map(Object.entries(options.keys));\n } else {\n this.keys = new Map();\n }\n }\n\n /**\n * [EARS-KP01] Retrieves the private key for an actor.\n */\n async getPrivateKey(actorId: string): Promise<string | null> {\n return this.keys.get(actorId) ?? null;\n }\n\n /**\n * [EARS-KP03] Stores a private key for an actor.\n * [EARS-MKP03] Overwrites existing key if present.\n */\n async setPrivateKey(actorId: string, privateKey: string): Promise<void> {\n this.keys.set(actorId, privateKey);\n }\n\n /**\n * [EARS-MKP07] Checks if a private key exists for an actor.\n */\n async hasPrivateKey(actorId: string): Promise<boolean> {\n return this.keys.has(actorId);\n }\n\n /**\n * [EARS-KP04] Deletes the private key for an actor.\n */\n async deletePrivateKey(actorId: string): Promise<boolean> {\n return this.keys.delete(actorId);\n }\n\n /**\n * [EARS-MKP04] Returns the number of stored keys (useful for testing).\n */\n size(): number {\n return this.keys.size;\n }\n\n /**\n * [EARS-MKP05] Clears all stored keys (useful for test cleanup).\n */\n clear(): void {\n this.keys.clear();\n }\n\n /**\n * [EARS-MKP06] Returns all stored actor IDs (useful for testing).\n */\n listActorIds(): string[] {\n return Array.from(this.keys.keys());\n }\n}\n","export * from './file_lister';\nexport * from './fs';\nexport * from './memory';\n","/**\n * Error codes for FileLister operations.\n */\nexport type FileListerErrorCode =\n | 'FILE_NOT_FOUND'\n | 'READ_ERROR'\n | 'PERMISSION_DENIED'\n | 'INVALID_PATH';\n\n/**\n * Error thrown when file operations fail.\n */\nexport class FileListerError extends Error {\n constructor(\n message: string,\n public readonly code: FileListerErrorCode,\n public readonly filePath?: string\n ) {\n super(message);\n this.name = 'FileListerError';\n }\n}\n","/**\n * FsFileLister - Filesystem-based FileLister implementation\n *\n * Uses fast-glob for pattern matching and fs/promises for file operations.\n * Used in CLI and development environments.\n *\n * @module file_lister/fs/fs_file_lister\n */\n\nimport fg from 'fast-glob';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport type { FileLister, FileListOptions, FileStats, FsFileListerOptions } from '../file_lister';\nimport { FileListerError } from '../file_lister';\n\n/**\n * Filesystem-based FileLister implementation.\n * Uses fast-glob for pattern matching and fs/promises for file operations.\n *\n * @example\n * ```typescript\n * const lister = new FsFileLister({ cwd: '/path/to/project' });\n * const files = await lister.list(['**\\/*.ts'], { ignore: ['node_modules/**'] });\n * const content = await lister.read('src/index.ts');\n * ```\n */\nexport class FsFileLister implements FileLister {\n private readonly cwd: string;\n\n constructor(options: FsFileListerOptions) {\n this.cwd = options.cwd;\n }\n\n /**\n * [EARS-FL01] Lists files matching glob patterns.\n * [EARS-FFL01] Excludes files matching ignore patterns.\n */\n async list(patterns: string[], options?: FileListOptions): Promise<string[]> {\n // [EARS-FFL04] Validate patterns don't contain path traversal\n // [EARS-FFL05] Validate patterns are not absolute paths\n for (const pattern of patterns) {\n if (pattern.includes('..')) {\n throw new FileListerError(\n `Invalid pattern: path traversal not allowed: ${pattern}`,\n 'INVALID_PATH',\n pattern\n );\n }\n if (path.isAbsolute(pattern)) {\n throw new FileListerError(\n `Invalid pattern: absolute paths not allowed: ${pattern}`,\n 'INVALID_PATH',\n pattern\n );\n }\n }\n\n const fgOptions: Parameters<typeof fg>[1] = {\n cwd: this.cwd,\n ignore: options?.ignore ?? [],\n onlyFiles: options?.onlyFiles ?? true,\n absolute: options?.absolute ?? false,\n dot: true,\n };\n\n // Only add deep if maxDepth is specified\n if (options?.maxDepth !== undefined) {\n fgOptions.deep = options.maxDepth;\n }\n\n return fg(patterns, fgOptions);\n }\n\n /**\n * [EARS-FL02] Checks if a file exists.\n */\n async exists(filePath: string): Promise<boolean> {\n // [EARS-FFL04] Validate path doesn't contain traversal\n this.validatePath(filePath);\n\n try {\n const fullPath = path.join(this.cwd, filePath);\n await fs.access(fullPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * [EARS-FL03] Reads file content as string.\n * [EARS-FFL03] Throws FILE_NOT_FOUND for missing files.\n */\n async read(filePath: string): Promise<string> {\n // [EARS-FFL04] Validate path doesn't contain traversal\n this.validatePath(filePath);\n\n const fullPath = path.join(this.cwd, filePath);\n try {\n return await fs.readFile(fullPath, 'utf-8');\n } catch (err: unknown) {\n const error = err as NodeJS.ErrnoException;\n if (error.code === 'ENOENT') {\n throw new FileListerError(\n `File not found: ${filePath}`,\n 'FILE_NOT_FOUND',\n filePath\n );\n }\n if (error.code === 'EACCES') {\n throw new FileListerError(\n `Permission denied: ${filePath}`,\n 'PERMISSION_DENIED',\n filePath\n );\n }\n throw new FileListerError(\n `Read error: ${error.message}`,\n 'READ_ERROR',\n filePath\n );\n }\n }\n\n /**\n * [EARS-FL04] Gets file statistics.\n * [EARS-FFL03] Throws FILE_NOT_FOUND for missing files.\n */\n async stat(filePath: string): Promise<FileStats> {\n // [EARS-FFL04] Validate path doesn't contain traversal\n this.validatePath(filePath);\n\n const fullPath = path.join(this.cwd, filePath);\n try {\n const stats = await fs.stat(fullPath);\n return {\n size: stats.size,\n mtime: stats.mtimeMs,\n isFile: stats.isFile(),\n };\n } catch (err: unknown) {\n const error = err as NodeJS.ErrnoException;\n if (error.code === 'ENOENT') {\n throw new FileListerError(\n `File not found: ${filePath}`,\n 'FILE_NOT_FOUND',\n filePath\n );\n }\n throw new FileListerError(\n `Stat error: ${error.message}`,\n 'READ_ERROR',\n filePath\n );\n }\n }\n\n /**\n * [EARS-FFL04] Validates that the path doesn't contain traversal characters.\n * [EARS-FFL05] Validates that the path is not absolute.\n */\n private validatePath(filePath: string): void {\n if (filePath.includes('..')) {\n throw new FileListerError(\n `Invalid path: path traversal not allowed: ${filePath}`,\n 'INVALID_PATH',\n filePath\n );\n }\n // [EARS-FFL05] Prevent absolute paths to avoid escaping cwd\n if (path.isAbsolute(filePath)) {\n throw new FileListerError(\n `Invalid path: absolute paths not allowed: ${filePath}`,\n 'INVALID_PATH',\n filePath\n );\n }\n }\n}\n","/**\n * MemoryFileLister - In-memory FileLister for testing\n *\n * Simulates filesystem operations using a Map.\n * Used for unit testing without actual I/O.\n *\n * @module file_lister/memory/memory_file_lister\n */\n\nimport picomatch from 'picomatch';\nimport type { FileLister, FileListOptions, FileStats, MemoryFileListerOptions } from '../file_lister';\nimport { FileListerError } from '../file_lister';\n\n/**\n * Matches file paths against multiple glob patterns using picomatch.\n */\nfunction matchPatterns(patterns: string[], filePaths: string[]): string[] {\n const isMatch = picomatch(patterns);\n return filePaths.filter(filePath => isMatch(filePath));\n}\n\n/**\n * Filters out files matching ignore patterns.\n */\nfunction filterIgnored(filePaths: string[], ignorePatterns: string[]): string[] {\n if (!ignorePatterns.length) return filePaths;\n const isIgnored = picomatch(ignorePatterns);\n return filePaths.filter(filePath => !isIgnored(filePath));\n}\n\n/**\n * In-memory FileLister for testing.\n * Simulates filesystem operations using a Map.\n *\n * @example\n * ```typescript\n * const lister = new MemoryFileLister({\n * files: new Map([\n * ['src/index.ts', 'export const x = 1;'],\n * ['README.md', '# Project'],\n * ])\n * });\n *\n * // Or with object syntax\n * const lister = new MemoryFileLister({\n * files: { 'src/index.ts': 'code...', 'README.md': '# Project' }\n * });\n *\n * const files = await lister.list(['**\\/*.ts']);\n * ```\n */\nexport class MemoryFileLister implements FileLister {\n private readonly files: Map<string, string>;\n private readonly stats: Map<string, FileStats>;\n\n /**\n * [EARS-MFL01] Constructs MemoryFileLister with provided files.\n */\n constructor(options: MemoryFileListerOptions = {}) {\n // [EARS-MFL01] Accept both Map and Record<string, string>\n if (options.files instanceof Map) {\n this.files = new Map(options.files);\n } else if (options.files) {\n this.files = new Map(Object.entries(options.files));\n } else {\n this.files = new Map();\n }\n this.stats = options.stats ?? new Map();\n }\n\n /**\n * [EARS-FL01] Lists files matching glob patterns.\n * [EARS-MFL02] Filters files using glob patterns.\n */\n async list(patterns: string[], options?: FileListOptions): Promise<string[]> {\n const allPaths = Array.from(this.files.keys());\n\n // [EARS-MFL02] Match patterns\n let matched = matchPatterns(patterns, allPaths);\n\n // Filter ignored patterns\n if (options?.ignore?.length) {\n matched = filterIgnored(matched, options.ignore);\n }\n\n return matched.sort();\n }\n\n /**\n * [EARS-FL02] Checks if a file exists.\n */\n async exists(filePath: string): Promise<boolean> {\n return this.files.has(filePath);\n }\n\n /**\n * [EARS-FL03] Reads file content as string.\n */\n async read(filePath: string): Promise<string> {\n const content = this.files.get(filePath);\n if (content === undefined) {\n throw new FileListerError(\n `File not found: ${filePath}`,\n 'FILE_NOT_FOUND',\n filePath\n );\n }\n return content;\n }\n\n /**\n * [EARS-FL04] Gets file statistics.\n * [EARS-MFL03] Generates stats from content if not explicitly provided.\n */\n async stat(filePath: string): Promise<FileStats> {\n if (!this.files.has(filePath)) {\n throw new FileListerError(\n `File not found: ${filePath}`,\n 'FILE_NOT_FOUND',\n filePath\n );\n }\n\n // Return explicit stats if provided\n const explicitStats = this.stats.get(filePath);\n if (explicitStats) {\n return explicitStats;\n }\n\n // [EARS-MFL03] Generate stats from content\n const content = this.files.get(filePath)!;\n return {\n size: content.length,\n mtime: Date.now(),\n isFile: true,\n };\n }\n\n // ============================================\n // Testing utilities\n // ============================================\n\n /**\n * [EARS-MFL04] Adds a file to the mock filesystem.\n */\n addFile(filePath: string, content: string): void {\n this.files.set(filePath, content);\n }\n\n /**\n * Removes a file from the mock filesystem.\n */\n removeFile(filePath: string): boolean {\n this.stats.delete(filePath);\n return this.files.delete(filePath);\n }\n\n /**\n * Returns the number of files.\n */\n size(): number {\n return this.files.size;\n }\n\n /**\n * Clears all files.\n */\n clear(): void {\n this.files.clear();\n this.stats.clear();\n }\n\n /**\n * Returns all file paths.\n */\n listPaths(): string[] {\n return Array.from(this.files.keys());\n }\n}\n","/**\n * Lint Module - Structural Validation for GitGovernance Records\n *\n * This module provides comprehensive validation capabilities for GitGovernance records,\n * implementing Quality Model Layer 1 (Structural + Referential Integrity).\n *\n * ## Architecture (Store Backends Epic)\n *\n * The lint module is split into two parts:\n * - **LintModule** (pure): Core validation logic without I/O. Works with GitGovRecord objects.\n * - **FsLintModule** (filesystem): Wrapper with I/O for directory scanning, file reading, backups.\n *\n * @module lint\n * @example\n * ```typescript\n * // Pure LintModule (no I/O)\n * import { LintModule, type ILintModule } from '@gitgov/core';\n *\n * const lintModule: ILintModule = new LintModule({ stores });\n * const results = lintModule.lintRecord(record, { recordId, entityType });\n *\n * // FsLintModule (with I/O)\n * import { FsLintModule, type IFsLintModule } from '@gitgov/core';\n *\n * const fsLintModule: IFsLintModule = new FsLintModule({ lintModule, stores });\n * const report = await fsLintModule.lint({ path: '.gitgov/' });\n * ```\n */\n\n/**\n * Lint Module - Pure validation without I/O\n *\n * For filesystem operations, use @gitgov/core/fs which exports FsLintModule.\n */\n\nexport { LintModule } from \"./lint\";\n\nexport type {\n // Pure LintModule interfaces\n ILintModule,\n LintModuleDependencies,\n RecordEntry,\n LintRecordContext,\n RecordStores,\n FixRecordOptions,\n\n // Shared types\n LintOptions,\n LintReport,\n LintSummary,\n LintResult,\n ValidatorType,\n ValidationContext,\n FixReport,\n FixResult,\n} from \"./lint.types\";\n","/**\n * Lightweight Type Guards for GitGov Record Payloads\n *\n * These type guards are for narrowing already-validated GitGovRecordPayload unions.\n * They check structural properties, NOT schema validation.\n *\n * For schema validation (with AJV), use validators in validation/*.ts:\n * - isTaskRecord(unknown) in task_validator.ts\n * - isCycleRecord(unknown) in cycle_validator.ts\n * etc.\n *\n * @module types/type_guards\n */\n\nimport type {\n GitGovRecordPayload,\n TaskRecord,\n CycleRecord,\n ExecutionRecord,\n ActorRecord,\n AgentRecord,\n ChangelogRecord,\n FeedbackRecord\n} from './index';\n\n/**\n * Type guard: checks if payload is a TaskRecord.\n * Verifies presence of task-specific fields: title, status, priority, description.\n */\nexport function isTaskPayload(payload: GitGovRecordPayload): payload is TaskRecord {\n return 'title' in payload && 'status' in payload && 'priority' in payload && 'description' in payload;\n}\n\n/**\n * Type guard: checks if payload is a CycleRecord.\n * Verifies presence of cycle-specific fields: title, status (but NOT priority).\n */\nexport function isCyclePayload(payload: GitGovRecordPayload): payload is CycleRecord {\n return 'title' in payload && 'status' in payload && !('priority' in payload);\n}\n\n/**\n * Type guard: checks if payload is an ExecutionRecord.\n * Verifies presence of execution-specific fields: taskId, title, type, result.\n */\nexport function isExecutionPayload(payload: GitGovRecordPayload): payload is ExecutionRecord {\n return 'taskId' in payload && 'title' in payload && 'type' in payload && 'result' in payload;\n}\n\n/**\n * Type guard: checks if payload is an ActorRecord.\n * Verifies presence of actor-specific fields: displayName, publicKey, roles, type.\n */\nexport function isActorPayload(payload: GitGovRecordPayload): payload is ActorRecord {\n return 'displayName' in payload && 'publicKey' in payload && 'roles' in payload && 'type' in payload;\n}\n\n/**\n * Type guard: checks if payload is an AgentRecord (agent manifest).\n * Verifies presence of agent-specific field: engine.\n * Note: AgentRecord is a manifest, different from ActorRecord with type='agent'.\n */\nexport function isAgentPayload(payload: GitGovRecordPayload): payload is AgentRecord {\n return 'engine' in payload;\n}\n\n/**\n * Type guard: checks if payload is a ChangelogRecord.\n * Verifies presence of changelog-specific fields: title, description, relatedTasks, completedAt.\n */\nexport function isChangelogPayload(payload: GitGovRecordPayload): payload is ChangelogRecord {\n return 'title' in payload && 'description' in payload && 'relatedTasks' in payload && 'completedAt' in payload;\n}\n\n/**\n * Type guard: checks if payload is a FeedbackRecord.\n * Verifies presence of feedback-specific fields: entityType, entityId, type, status, content.\n */\nexport function isFeedbackPayload(payload: GitGovRecordPayload): payload is FeedbackRecord {\n return 'entityType' in payload && 'entityId' in payload && 'type' in payload && 'status' in payload && 'content' in payload;\n}\n","/**\n * Pure LintModule - Structural Validation without I/O\n *\n * This module provides pure validation logic for GitGovernance records.\n * It does NOT perform filesystem operations (no fs/path imports).\n *\n * For filesystem operations (directory scanning, file reading, backups),\n * use FsLintModule from './fs'.\n *\n * @module lint\n */\n\nimport type {\n ILintModule,\n LintModuleDependencies,\n LintOptions,\n LintReport,\n LintResult,\n FixRecordOptions,\n ValidatorType,\n RecordEntry,\n LintRecordContext,\n RecordStores\n} from \"./lint.types\";\nimport type { IIndexerAdapter } from \"../adapters/indexer_adapter\";\nimport type {\n GitGovRecord,\n GitGovRecordPayload,\n TaskRecord,\n CycleRecord,\n GitGovRecordType\n} from \"../record_types\";\nimport {\n isTaskPayload,\n isCyclePayload,\n isExecutionPayload\n} from \"../record_types/type_guards\";\nimport type { Signature } from \"../record_types/embedded.types\";\nimport { DetailedValidationError } from \"../record_validations/common\";\nimport { createLogger } from \"../logger\";\nimport { calculatePayloadChecksum } from \"../crypto/checksum\";\nimport { signPayload } from \"../crypto/signatures\";\nimport {\n loadTaskRecord,\n loadActorRecord,\n loadAgentRecord,\n loadCycleRecord,\n loadExecutionRecord,\n loadChangelogRecord,\n loadFeedbackRecord\n} from \"../record_factories\";\nimport { Schemas } from \"../record_schemas/generated\";\n\nconst logger = createLogger(\"[Lint] \");\n\n/**\n * [EARS-F2] Mapping from entity type to schema name for payload cleaning.\n * Uses Schemas from generated JSON schemas to extract valid properties.\n */\nconst ENTITY_TO_SCHEMA: Record<string, keyof typeof Schemas> = {\n task: 'TaskRecord',\n actor: 'ActorRecord',\n agent: 'AgentRecord',\n cycle: 'CycleRecord',\n execution: 'ExecutionRecord',\n changelog: 'ChangelogRecord',\n feedback: 'FeedbackRecord',\n};\n\n\n/**\n * Pure structural validation module for GitGovernance records.\n *\n * Implements Quality Model Layer 1 (Structural + Referential Integrity).\n * Does NOT perform filesystem operations - works with GitGovRecord objects in memory.\n *\n * @implements {ILintModule}\n */\nexport class LintModule implements ILintModule {\n private readonly stores: RecordStores;\n private readonly indexerAdapter: IIndexerAdapter | null;\n\n /**\n * Constructor for pure LintModule.\n *\n * @param dependencies - Optional module dependencies\n */\n constructor(dependencies?: LintModuleDependencies) {\n this.stores = dependencies?.stores ?? {};\n this.indexerAdapter = dependencies?.indexerAdapter ?? null;\n\n if (!this.indexerAdapter) {\n logger.warn(\"indexerAdapter not provided, reference validation will be limited\");\n }\n }\n\n /**\n * Validates a single record object (pure validation).\n * Does NOT read files - receives pre-loaded record.\n *\n * @param record - The GitGovRecord object to validate\n * @param context - Context with recordId and entityType\n * @returns Array of lint results\n */\n lintRecord(record: GitGovRecord, context: LintRecordContext): LintResult[] {\n const results: LintResult[] = [];\n const { recordId, entityType, filePath = `unknown/${recordId}.json` } = context;\n\n try {\n // Validate with appropriate loader (schema validation)\n this.validateWithLoader(record, entityType);\n\n // [EARS-D1], [EARS-D2] Validate timestamps\n const timestampResults = this.validateTimestamps(record, recordId, filePath, entityType);\n results.push(...timestampResults);\n\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n const hasAdditionalProperties = error.errors.some(e =>\n e.message.includes(\"must NOT have additional properties\") ||\n e.message.includes(\"must not have additional properties\")\n );\n\n const filteredErrors = hasAdditionalProperties\n ? error.errors.filter(e =>\n !e.message.includes(\"oneOf\") &&\n !e.message.includes(\"must match\") &&\n !e.message.includes(\"boolean schema is false\")\n )\n : error.errors;\n\n for (const err of filteredErrors) {\n const tempError = new DetailedValidationError('Record', [err]);\n tempError.message = `${err.field}: ${err.message}`;\n const validatorType = this.detectValidatorType(tempError);\n const isFixable = this.isFixable(tempError);\n\n results.push({\n level: \"error\",\n filePath,\n validator: validatorType,\n message: `${err.field}: ${err.message}`,\n entity: { type: entityType, id: recordId },\n fixable: isFixable,\n ...(err && {\n context: {\n ...(err.field && { field: err.field }),\n ...(err.value !== undefined && { actual: err.value }),\n ...(err.message && { expected: err.message })\n }\n })\n });\n }\n } else {\n results.push({\n level: \"error\",\n filePath,\n validator: \"SCHEMA_VALIDATION\",\n message: error instanceof Error ? error.message : String(error),\n entity: { type: entityType, id: recordId },\n fixable: false\n });\n }\n }\n\n return results;\n }\n\n /**\n * Validates all records from stores.\n * Iterates this.stores to collect records, then validates each one.\n *\n * @param options - Configuration options\n * @returns Consolidated lint report\n */\n async lint(\n options?: Partial<LintOptions>\n ): Promise<LintReport> {\n const startTime = Date.now();\n const opts: LintOptions = {\n validateReferences: options?.validateReferences ?? false,\n validateActors: options?.validateActors ?? false,\n validateChecksums: options?.validateChecksums ?? true,\n validateSignatures: options?.validateSignatures ?? true,\n validateTimestamps: options?.validateTimestamps ?? true,\n failFast: options?.failFast ?? false,\n concurrent: options?.concurrent ?? true,\n concurrencyLimit: options?.concurrencyLimit ?? 10\n };\n\n const results: LintResult[] = [];\n\n // Collect all records from stores\n const storeMap: Array<[Exclude<GitGovRecordType, 'custom'>, RecordStores[keyof RecordStores]]> = [\n ['task', this.stores.tasks],\n ['cycle', this.stores.cycles],\n ['actor', this.stores.actors],\n ['agent', this.stores.agents],\n ['execution', this.stores.executions],\n ['feedback', this.stores.feedbacks],\n ['changelog', this.stores.changelogs],\n ];\n\n const recordEntries: RecordEntry[] = [];\n for (const [type, store] of storeMap) {\n if (!store) continue;\n const ids = await store.list();\n for (const id of ids) {\n const record = await store.get(id);\n if (record) {\n recordEntries.push({ record, id, type });\n }\n }\n }\n\n for (const entry of recordEntries) {\n const context: LintRecordContext = {\n recordId: entry.id,\n entityType: entry.type,\n ...(entry.filePath !== undefined && { filePath: entry.filePath })\n };\n\n const recordResults = this.lintRecord(entry.record, context);\n results.push(...recordResults);\n\n // Reference validation (async - uses stores)\n if (opts.validateReferences) {\n const refResults = await this.validateReferences(\n entry.record, entry.id, entry.filePath || `unknown/${entry.id}.json`, entry.type\n );\n results.push(...refResults);\n }\n\n // Actor validation (async - uses stores)\n if (opts.validateActors) {\n const actorResults = await this.validateActors(\n entry.record, entry.id, entry.filePath || `unknown/${entry.id}.json`, entry.type\n );\n results.push(...actorResults);\n }\n\n if (opts.failFast && recordResults.some(r => r.level === \"error\")) {\n break;\n }\n }\n\n const executionTime = Date.now() - startTime;\n const errors = results.filter(r => r.level === \"error\").length;\n const warnings = results.filter(r => r.level === \"warning\").length;\n const fixable = results.filter(r => r.fixable).length;\n\n return {\n summary: {\n filesChecked: recordEntries.length,\n errors,\n warnings,\n fixable,\n executionTime\n },\n results,\n metadata: {\n timestamp: new Date().toISOString(),\n options: opts,\n version: \"1.0.0\"\n }\n };\n }\n\n /**\n * Applies fixes to a record and returns the fixed version.\n * Does NOT write to disk - returns modified object.\n *\n * @param record - The record to fix\n * @param results - Lint results identifying problems\n * @param options - Fix options including privateKey for signing\n * @returns The fixed record\n */\n fixRecord(\n record: GitGovRecord,\n results: LintResult[],\n options: FixRecordOptions\n ): GitGovRecord {\n const fixableResults = results.filter(r => r.fixable);\n\n if (fixableResults.length === 0) {\n return record;\n }\n\n // Clone the record to avoid mutation\n let fixedRecord: GitGovRecord = JSON.parse(JSON.stringify(record));\n\n for (const result of fixableResults) {\n // Skip if fix type not in allowed list\n if (options.fixTypes && !options.fixTypes.includes(result.validator)) {\n continue;\n }\n\n switch (result.validator) {\n case \"EMBEDDED_METADATA_STRUCTURE\":\n fixedRecord = this.fixEmbeddedMetadata(fixedRecord, result, options);\n break;\n\n case \"CHECKSUM_VERIFICATION\":\n fixedRecord = this.fixChecksum(fixedRecord);\n break;\n\n case \"SIGNATURE_STRUCTURE\":\n fixedRecord = this.fixSignature(fixedRecord, result, options);\n break;\n\n // BIDIRECTIONAL_CONSISTENCY requires modifying OTHER records\n // This must be handled by FsLintModule which can write multiple files\n case \"BIDIRECTIONAL_CONSISTENCY\":\n logger.warn(\"BIDIRECTIONAL_CONSISTENCY fix requires FsLintModule\");\n break;\n\n default:\n logger.warn(`Fix not implemented for validator: ${result.validator}`);\n }\n }\n\n return fixedRecord;\n }\n\n // ==================== Private Validation Methods ====================\n\n /**\n * Validates record with appropriate loader based on entity type.\n * @private\n */\n private validateWithLoader(record: GitGovRecord, entityType: Exclude<GitGovRecordType, 'custom'>): void {\n // Re-validate the record through its loader to ensure schema compliance\n const rawRecord = JSON.parse(JSON.stringify(record));\n\n switch (entityType) {\n case 'task':\n loadTaskRecord(rawRecord);\n break;\n case 'actor':\n loadActorRecord(rawRecord);\n break;\n case 'agent':\n loadAgentRecord(rawRecord);\n break;\n case 'cycle':\n loadCycleRecord(rawRecord);\n break;\n case 'execution':\n loadExecutionRecord(rawRecord);\n break;\n case 'changelog':\n loadChangelogRecord(rawRecord);\n break;\n case 'feedback':\n loadFeedbackRecord(rawRecord);\n break;\n }\n }\n\n /**\n * [EARS-D1], [EARS-D2] Validates timestamp ordering.\n * Pure validation - no I/O.\n * @private\n */\n private validateTimestamps(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): LintResult[] {\n const results: LintResult[] = [];\n\n const payload = record.payload as GitGovRecordPayload & {\n createdAt?: number | string;\n updatedAt?: number | string;\n completedAt?: number | string;\n discardedAt?: number | string;\n };\n\n if (payload.createdAt && payload.updatedAt) {\n const created = new Date(payload.createdAt).getTime();\n const updated = new Date(payload.updatedAt).getTime();\n\n if (created > updated) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `createdAt (${String(payload.createdAt)}) is after updatedAt (${String(payload.updatedAt)})`,\n entity: { type: entityType, id: recordId },\n fixable: false,\n context: {\n field: \"timestamps\",\n actual: { createdAt: payload.createdAt, updatedAt: payload.updatedAt },\n expected: \"createdAt <= updatedAt\"\n }\n });\n }\n\n if (payload.completedAt) {\n const completed = new Date(payload.completedAt).getTime();\n if (completed < created) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `completedAt (${String(payload.completedAt)}) is before createdAt (${String(payload.createdAt)})`,\n entity: { type: entityType, id: recordId },\n fixable: false\n });\n }\n }\n\n if (payload.discardedAt) {\n const discarded = new Date(payload.discardedAt).getTime();\n if (discarded < created) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `discardedAt (${String(payload.discardedAt)}) is before createdAt (${String(payload.createdAt)})`,\n entity: { type: entityType, id: recordId },\n fixable: false\n });\n }\n }\n }\n\n return results;\n }\n\n /**\n * [EARS-E1] through [EARS-E6] Validates references.\n * Uses Store<T> for lookups.\n * @private\n */\n private async validateReferences(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n const payload = record.payload;\n\n // Get appropriate store for lookups\n const taskStore = this.stores.tasks;\n const cycleStore = this.stores.cycles;\n\n // [EARS-E1] Validate ExecutionRecord.taskId exists\n if (entityType === \"execution\" && isExecutionPayload(payload) && payload.taskId && taskStore) {\n try {\n const taskRecord = await taskStore.get(payload.taskId);\n if (!taskRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"REFERENTIAL_INTEGRITY\",\n message: `Referenced taskId '${payload.taskId}' not found`,\n entity: { type: entityType, id: recordId },\n fixable: false,\n context: { field: \"taskId\", actual: payload.taskId, expected: \"existing task record\" }\n });\n } else {\n // [EARS-E6] Check for soft delete\n const taskPayload = taskRecord.payload as TaskRecord;\n if (taskPayload.status === \"discarded\") {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"SOFT_DELETE_DETECTION\",\n message: `Referenced task '${payload.taskId}' has status 'discarded'`,\n entity: { type: entityType, id: recordId },\n fixable: false\n });\n }\n }\n } catch {\n // Store lookup failed, skip\n }\n }\n\n // [EARS-E5] Validate bidirectional consistency (Task ↔ Cycle)\n if (entityType === \"task\" && isTaskPayload(payload) && payload.cycleIds && cycleStore) {\n for (const cycleId of payload.cycleIds) {\n try {\n const cycleRecord = await cycleStore.get(cycleId);\n if (cycleRecord) {\n const cyclePayload = cycleRecord.payload as CycleRecord;\n if (cyclePayload.taskIds && !cyclePayload.taskIds.includes(recordId)) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"BIDIRECTIONAL_CONSISTENCY\",\n message: `Task references cycle '${cycleId}' but cycle doesn't include this task`,\n entity: { type: entityType, id: recordId },\n fixable: true,\n context: { field: \"cycleIds\", actual: cycleId, expected: `cycle should include task ${recordId}` }\n });\n }\n }\n } catch {\n // Store lookup failed, skip\n }\n }\n }\n\n if (entityType === \"cycle\" && isCyclePayload(payload) && payload.taskIds && taskStore) {\n for (const taskId of payload.taskIds) {\n try {\n const taskRecord = await taskStore.get(taskId);\n if (taskRecord) {\n const taskPayload = taskRecord.payload as TaskRecord;\n if (!taskPayload.cycleIds || !taskPayload.cycleIds.includes(recordId)) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"BIDIRECTIONAL_CONSISTENCY\",\n message: `Cycle includes task '${taskId}' but task doesn't include this cycle`,\n entity: { type: entityType, id: recordId },\n fixable: true,\n context: { field: \"taskIds\", actual: taskPayload.cycleIds || [], expected: `task should include cycle ${recordId}` }\n });\n }\n }\n } catch {\n // Store lookup failed, skip\n }\n }\n }\n\n return results;\n }\n\n /**\n * [EARS-E3] Validates actor resolution.\n * Uses Store<T> for lookups.\n * @private\n */\n private async validateActors(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n const actorStore = this.stores.actors;\n\n if (!actorStore) {\n return results;\n }\n\n // Check signatures for actor references\n if (record.header?.signatures) {\n for (const signature of record.header.signatures) {\n if (signature.keyId) {\n try {\n const actorRecord = await actorStore.get(signature.keyId);\n if (!actorRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"ACTOR_RESOLUTION\",\n message: `Actor '${signature.keyId}' referenced in signature not found`,\n entity: { type: entityType, id: recordId },\n fixable: false,\n context: { field: \"signatures.keyId\", actual: signature.keyId, expected: \"existing actor record\" }\n });\n }\n } catch {\n // Store lookup failed, skip\n }\n }\n }\n }\n\n return results;\n }\n\n // ==================== Private Fix Methods ====================\n\n /**\n * [EARS-F2] Fixes embedded metadata structure issues.\n *\n * Steps:\n * 1. Validates EmbeddedMetadataRecord structure (header + payload)\n * 2. Removes additional properties from payload automatically\n * 3. Recalculates payloadChecksum using SHA256 on canonical JSON\n * 4. Regenerates signature with role: \"author\" and keyId from options\n * 5. Returns the fixed record (does not write to disk)\n *\n * @private\n */\n private fixEmbeddedMetadata(\n record: GitGovRecord,\n result: LintResult,\n options: FixRecordOptions\n ): GitGovRecord {\n if (!options.privateKey) {\n throw new Error(\"privateKey is required to fix embedded metadata\");\n }\n\n // [EARS-F2] Step 1: Validate EmbeddedMetadataRecord structure\n if (!record.header || !record.payload) {\n throw new Error(\"Record does not have EmbeddedMetadataRecord structure (missing header or payload)\");\n }\n\n // [EARS-F2] Step 2: Clean payload - remove additional properties automatically\n const cleanedPayload = this.cleanPayload(record.payload, result.entity.type);\n\n // [EARS-F2] Step 3: Recalculate checksum with cleaned payload\n const payloadChecksum = calculatePayloadChecksum(cleanedPayload);\n\n // [EARS-F2] Step 4: Regenerate signature\n const signature = signPayload(\n cleanedPayload,\n options.privateKey,\n options.keyId || result.entity.id,\n 'author',\n 'Signature regenerated by lint fix'\n );\n\n // [EARS-F2] Step 5: Return the fixed record\n return {\n header: {\n ...record.header,\n payloadChecksum,\n signatures: [signature]\n },\n payload: cleanedPayload\n };\n }\n\n /**\n * [EARS-F2] Gets valid payload keys from JSON schema for a given entity type.\n * Derives keys directly from generated schemas to stay in sync.\n * @private\n */\n private getValidPayloadKeys(entityType: string): string[] {\n const schemaName = ENTITY_TO_SCHEMA[entityType];\n if (!schemaName) {\n logger.warn(`Unknown entity type '${entityType}' for schema lookup`);\n return [];\n }\n\n const schema = Schemas[schemaName] as { properties?: Record<string, unknown> };\n if (!schema.properties) {\n logger.warn(`Schema '${schemaName}' has no properties defined`);\n return [];\n }\n\n return Object.keys(schema.properties);\n }\n\n /**\n * [EARS-F2] Cleans payload by removing properties not defined in the schema.\n * Uses JSON schemas as source of truth for valid properties.\n * @private\n */\n private cleanPayload(payload: GitGovRecordPayload, entityType: string): GitGovRecordPayload {\n const validKeys = this.getValidPayloadKeys(entityType);\n\n if (validKeys.length === 0) {\n // Unknown type or no schema - return as-is to avoid data loss\n logger.warn(`No valid keys found for entity type '${entityType}', returning payload as-is`);\n return payload;\n }\n\n const cleaned: Record<string, unknown> = {};\n const payloadRecord = payload as Record<string, unknown>;\n\n for (const key of validKeys) {\n if (key in payloadRecord) {\n cleaned[key] = payloadRecord[key];\n }\n }\n\n return cleaned as GitGovRecordPayload;\n }\n\n /**\n * Fixes checksum issues.\n * @private\n */\n private fixChecksum(record: GitGovRecord): GitGovRecord {\n const payloadChecksum = calculatePayloadChecksum(record.payload);\n\n return {\n header: {\n ...record.header,\n payloadChecksum\n },\n payload: record.payload\n };\n }\n\n /**\n * Fixes signature structure issues.\n * @private\n */\n /**\n * [EARS-F9] Fixes signature structure issues.\n *\n * Preserves valid keyId and role from existing signature if present,\n * only using options.keyId as fallback when no existing signature exists.\n *\n * @private\n */\n private fixSignature(\n record: GitGovRecord,\n result: LintResult,\n options: FixRecordOptions\n ): GitGovRecord {\n if (!options.privateKey) {\n throw new Error(\"privateKey is required to fix signature\");\n }\n\n const payloadChecksum = calculatePayloadChecksum(record.payload);\n\n // [EARS-F9] Preserve existing signature metadata if valid\n // Priority: existing signature > options > fallback\n const existingSig = record.header?.signatures?.[0];\n const keyId = existingSig?.keyId || options.keyId || result.entity.id;\n const role = existingSig?.role || 'author';\n const notes = existingSig?.notes || 'Signature regenerated by lint fix';\n\n const signature: Signature = signPayload(\n record.payload,\n options.privateKey,\n keyId,\n role,\n notes\n );\n\n return {\n header: {\n ...record.header,\n payloadChecksum,\n signatures: [signature]\n },\n payload: record.payload\n };\n }\n\n // ==================== Private Helper Methods ====================\n\n /**\n * Detects the validator type based on the error.\n * @private\n */\n private detectValidatorType(error: DetailedValidationError): ValidatorType {\n const errorMessage = error.message.toLowerCase();\n const fieldPath = error.errors?.[0]?.field?.toLowerCase() || '';\n const allErrorMessages = error.errors?.map(e => e.message?.toLowerCase() || '').join(' ') || '';\n const combinedText = `${errorMessage} ${fieldPath} ${allErrorMessages}`;\n\n if (combinedText.includes(\"checksum\") || fieldPath.includes(\"payloadchecksum\")) {\n return \"CHECKSUM_VERIFICATION\";\n }\n if (combinedText.includes(\"signature\") || fieldPath.includes(\"/signatures/\")) {\n return \"SIGNATURE_STRUCTURE\";\n }\n if (combinedText.includes(\"header\") || combinedText.includes(\"payload\") || fieldPath.includes(\"/header/\")) {\n return \"EMBEDDED_METADATA_STRUCTURE\";\n }\n\n const versionMismatchIndicators = [\n 'required in v', 'deprecated', 'obsolete', 'schema version', 'migration'\n ];\n if (versionMismatchIndicators.some(i => combinedText.includes(i)) || /v\\d+|version\\s+\\d+/i.test(combinedText)) {\n return \"SCHEMA_VERSION_MISMATCH\";\n }\n\n return \"SCHEMA_VALIDATION\";\n }\n\n /**\n * Determines if an error is fixable.\n * @private\n */\n private isFixable(error: DetailedValidationError): boolean {\n const errorMessage = error.message.toLowerCase();\n\n if (errorMessage.includes(\"header\") || errorMessage.includes(\"metadata\")) {\n return true;\n }\n if (errorMessage.includes(\"must not have additional properties\") || errorMessage.includes(\"must NOT have additional properties\")) {\n return true;\n }\n if (errorMessage.includes(\"checksum\")) {\n return true;\n }\n if (errorMessage.includes(\"signature\") && errorMessage.includes(\"format\")) {\n return true;\n }\n\n return false;\n }\n}\n","export type {\n IProjectInitializer,\n EnvironmentValidation,\n} from './project_initializer';\n","// Core interfaces - backend-agnostic\nexport * from './record_store';\nexport * from './record_store.types';\n\n// NOTE: Implementations are exported via subpaths:\n// - @gitgov/core/fs -> FsRecordStore\n// - @gitgov/core/memory -> MemoryRecordStore\n// ConfigStore is now in its own module: @gitgov/core/config_store\n","// ISyncStateModule interface\nexport type { ISyncStateModule } from \"./sync_state\";\n\n// PullScheduler (pure, depends on interface not implementation)\nexport { PullScheduler } from \"./pull_scheduler\";\n\n// Types\nexport type {\n SyncStateModuleDependencies,\n SyncStatePushOptions,\n SyncStatePushResult,\n SyncStatePullOptions,\n SyncStatePullResult,\n SyncStateResolveOptions,\n SyncStateResolveResult,\n ConflictInfo,\n ConflictType,\n IntegrityViolation,\n AuditStateOptions,\n AuditStateReport,\n AuditScope,\n ExpectedFilesScope,\n ConflictDiff,\n ConflictFileDiff,\n StateDeltaFile,\n} from \"./sync_state.types\";\n\nexport type {\n PullSchedulerConfig,\n PullSchedulerDependencies,\n PullSchedulerResult,\n} from \"./pull_scheduler\";\n\n// Errors\nexport {\n SyncStateError,\n PushFromStateBranchError,\n IntegrityViolationError,\n ConflictMarkersPresentError,\n NoRebaseInProgressError,\n StateBranchSetupError,\n UncommittedChangesError,\n CryptoModuleRequiredError,\n ActorIdentityMismatchError,\n // Type guards for error handling\n isSyncStateError,\n isPushFromStateBranchError,\n isIntegrityViolationError,\n isConflictMarkersPresentError,\n isUncommittedChangesError,\n isNoRebaseInProgressError,\n isStateBranchSetupError,\n isCryptoModuleRequiredError,\n isActorIdentityMismatchError,\n} from \"./sync_state.errors\";\n","/**\n * PullScheduler - Periodic State Synchronization\n *\n * Background scheduler that automatically pulls state changes from remote\n * at configured intervals.\n *\n * @module sync_state/pull_scheduler\n */\n\nimport type { ISyncStateModule } from \"./sync_state\";\nimport type { ConfigManager } from \"../config_manager/config_manager\";\nimport type { SessionManager } from \"../session_manager/session_manager\";\n\n/**\n * Result of a pull operation executed by the scheduler\n */\nexport interface PullSchedulerResult {\n /** Whether the operation was successful */\n success: boolean;\n /** Whether new changes were detected */\n hasChanges: boolean;\n /** Whether a conflict was detected */\n conflictDetected: boolean;\n /** Conflict information if applicable */\n conflictInfo?: {\n type: string;\n message: string;\n affectedFiles?: string[];\n };\n /** Timestamp of the operation */\n timestamp: string;\n /** Error if operation failed */\n error?: string;\n}\n\n/**\n * Configuration for the PullScheduler\n */\nexport interface PullSchedulerConfig {\n /** Whether the scheduler is enabled */\n enabled: boolean;\n /** Pull interval in seconds */\n pullIntervalSeconds: number;\n /** Whether to continue after network errors */\n continueOnNetworkError: boolean;\n /** Whether to stop if a conflict is detected */\n stopOnConflict: boolean;\n}\n\n/**\n * Dependencies required by PullScheduler\n */\nexport interface PullSchedulerDependencies {\n /** ISyncStateModule for pull operations */\n syncModule: ISyncStateModule;\n /** ConfigManager for loading project configuration */\n configManager: ConfigManager;\n /** SessionManager for loading session preferences */\n sessionManager: SessionManager;\n}\n\n/**\n * PullScheduler - Automatic background synchronization\n *\n * Periodically pulls state changes from remote to keep local state up-to-date.\n * Useful for collaboration scenarios where multiple actors are working simultaneously.\n *\n * [EARS-F1 to EARS-F8]\n *\n * @example\n * ```typescript\n * const scheduler = new PullScheduler({\n * syncModule,\n * configManager\n * });\n *\n * await scheduler.start(); // Start periodic pulling\n * // ... scheduler runs in background ...\n * scheduler.stop(); // Stop scheduler\n * ```\n */\nexport class PullScheduler {\n private syncModule: ISyncStateModule;\n private configManager: ConfigManager;\n private sessionManager: SessionManager;\n private config: PullSchedulerConfig;\n private intervalId?: NodeJS.Timeout;\n private running: boolean = false;\n private pulling: boolean = false;\n\n constructor(dependencies: PullSchedulerDependencies) {\n if (!dependencies.syncModule) {\n throw new Error(\"ISyncStateModule is required for PullScheduler\");\n }\n if (!dependencies.configManager) {\n throw new Error(\"ConfigManager is required for PullScheduler\");\n }\n if (!dependencies.sessionManager) {\n throw new Error(\"SessionManager is required for PullScheduler\");\n }\n\n this.syncModule = dependencies.syncModule;\n this.configManager = dependencies.configManager;\n this.sessionManager = dependencies.sessionManager;\n\n // Default configuration (will be loaded lazily in start())\n this.config = {\n enabled: false,\n pullIntervalSeconds: 30,\n continueOnNetworkError: true,\n stopOnConflict: false,\n };\n }\n\n /**\n * Loads configuration from ConfigManager with cascade merge:\n * 1. Local preferences in .session.json (highest priority)\n * 2. Project defaults in config.json\n * 3. Hardcoded defaults (fallback)\n */\n private async loadConfig(): Promise<PullSchedulerConfig> {\n try {\n // Load project defaults from config.json\n const projectConfig = await this.configManager.loadConfig();\n const projectDefaults = projectConfig?.state?.defaults?.pullScheduler ?? {};\n\n // Load local preferences from .session.json\n const session = await this.sessionManager.loadSession();\n const localPreferences = session?.syncPreferences?.pullScheduler ?? {};\n\n // Merge with cascade priority\n return {\n enabled:\n localPreferences.enabled ?? projectDefaults.defaultEnabled ?? false,\n pullIntervalSeconds:\n localPreferences.pullIntervalSeconds ??\n projectDefaults.defaultIntervalSeconds ??\n 30,\n continueOnNetworkError:\n localPreferences.continueOnNetworkError ??\n projectDefaults.defaultContinueOnNetworkError ??\n true,\n stopOnConflict:\n localPreferences.stopOnConflict ??\n projectDefaults.defaultStopOnConflict ??\n false,\n };\n } catch {\n // If config loading fails, return defaults\n return {\n enabled: false,\n pullIntervalSeconds: 30,\n continueOnNetworkError: true,\n stopOnConflict: false,\n };\n }\n }\n\n /**\n * Starts the scheduler with configured interval\n *\n * [EARS-F1, EARS-F2]\n *\n * @throws Error if scheduler fails to load configuration\n *\n * @example\n * ```typescript\n * await scheduler.start();\n * // Scheduler now pulls every N seconds\n * ```\n */\n async start(): Promise<void> {\n // [EARS-F2] Idempotent - return if already running\n if (this.running) {\n return;\n }\n\n // Load configuration\n this.config = await this.loadConfig();\n\n // Check if enabled\n if (!this.config.enabled) {\n return;\n }\n\n // [EARS-F1] Start interval\n this.intervalId = setInterval(() => {\n void this.pullNow(); // Fire and forget\n }, this.config.pullIntervalSeconds * 1000);\n\n this.running = true;\n }\n\n /**\n * Stops the scheduler and cleans up resources\n *\n * [EARS-F3]\n *\n * @example\n * ```typescript\n * scheduler.stop();\n * // Scheduler is now stopped\n * ```\n */\n stop(): void {\n if (!this.running) {\n return;\n }\n\n if (this.intervalId !== undefined) {\n clearInterval(this.intervalId);\n }\n\n this.running = false;\n }\n\n /**\n * Checks if the scheduler is currently running\n *\n * [EARS-F4]\n *\n * @returns true if running, false otherwise\n *\n * @example\n * ```typescript\n * if (scheduler.isRunning()) {\n * console.log(\"Scheduler is active\");\n * }\n * ```\n */\n isRunning(): boolean {\n return this.running;\n }\n\n /**\n * Executes a pull operation immediately\n *\n * This method can be called manually or is automatically invoked by the scheduler.\n * Handles conflicts, network errors, and concurrent pull prevention.\n *\n * [EARS-F5, EARS-F6, EARS-F7, EARS-F8]\n *\n * @returns Result of the pull operation\n *\n * @example\n * ```typescript\n * const result = await scheduler.pullNow();\n * if (result.hasChanges) {\n * console.log(\"New changes detected\");\n * }\n * ```\n */\n async pullNow(): Promise<PullSchedulerResult> {\n // [EARS-F8] Prevent concurrent pulls\n if (this.pulling) {\n return {\n success: true,\n hasChanges: false,\n conflictDetected: false,\n timestamp: new Date().toISOString(),\n error: \"Pull already in progress\",\n };\n }\n\n this.pulling = true;\n\n try {\n // Execute pull\n const pullResult = await this.syncModule.pullState();\n\n // [EARS-F5] Detect changes\n const hasChanges = pullResult.reindexed || false;\n\n // [EARS-F6] Detect conflicts\n if (pullResult.conflictDetected) {\n const result: PullSchedulerResult = {\n success: false,\n hasChanges: false,\n conflictDetected: true,\n timestamp: new Date().toISOString(),\n ...(pullResult.conflictInfo && { conflictInfo: pullResult.conflictInfo }),\n };\n\n // Stop scheduler if configured to do so\n if (this.config.stopOnConflict) {\n this.stop();\n }\n\n return result;\n }\n\n // Success\n return {\n success: true,\n hasChanges,\n conflictDetected: false,\n timestamp: new Date().toISOString(),\n };\n } catch (error) {\n // [EARS-F7] Handle network errors\n const errorMessage = error instanceof Error ? error.message : String(error);\n const isNetworkError =\n errorMessage.includes(\"network\") ||\n errorMessage.includes(\"fetch\") ||\n errorMessage.includes(\"timeout\") ||\n errorMessage.includes(\"connection\");\n\n // Continue if configured to do so\n if (isNetworkError && this.config.continueOnNetworkError) {\n return {\n success: false,\n hasChanges: false,\n conflictDetected: false,\n timestamp: new Date().toISOString(),\n error: errorMessage,\n };\n }\n\n // Re-throw non-recoverable errors\n throw error;\n } finally {\n this.pulling = false;\n }\n }\n}\n\n","/**\n * Base error class for all sync-related errors\n */\nexport class SyncStateError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SyncStateError\";\n Object.setPrototypeOf(this, SyncStateError.prototype);\n }\n}\n\n/**\n * Error thrown when attempting to push from gitgov-state branch\n */\nexport class PushFromStateBranchError extends SyncStateError {\n public branch: string;\n\n constructor(branchName: string) {\n super(\n `Cannot push from ${branchName} branch. ` +\n `Please switch to a working branch before pushing state.`\n );\n this.name = \"PushFromStateBranchError\";\n this.branch = branchName;\n Object.setPrototypeOf(this, PushFromStateBranchError.prototype);\n }\n}\n\n/**\n * Error thrown when integrity violations are detected during audit\n */\nexport class IntegrityViolationError extends SyncStateError {\n constructor(\n public violations: Array<{\n type: \"resolution\" | \"signature\" | \"checksum\" | \"missing_file\";\n details: string;\n }>\n ) {\n const violationSummary = violations\n .map((v) => `${v.type}: ${v.details}`)\n .join(\"; \");\n super(`Integrity violations detected: ${violationSummary}`);\n this.name = \"IntegrityViolationError\";\n Object.setPrototypeOf(this, IntegrityViolationError.prototype);\n }\n}\n\n/**\n * Error thrown when conflict markers are still present in files\n */\nexport class ConflictMarkersPresentError extends SyncStateError {\n constructor(public filesWithMarkers: string[]) {\n super(\n `Conflict markers still present in ${filesWithMarkers.length} file(s). ` +\n `Please resolve all conflicts before continuing.`\n );\n this.name = \"ConflictMarkersPresentError\";\n Object.setPrototypeOf(this, ConflictMarkersPresentError.prototype);\n }\n}\n\n/**\n * Error thrown when attempting to resolve conflict without rebase in progress\n */\nexport class NoRebaseInProgressError extends SyncStateError {\n constructor() {\n super(\n `No rebase in progress. Cannot resolve conflict without an active rebase. ` +\n `Use 'pullState' or 'pushState' to trigger synchronization first.`\n );\n this.name = \"NoRebaseInProgressError\";\n Object.setPrototypeOf(this, NoRebaseInProgressError.prototype);\n }\n}\n\n/**\n * Error thrown when CryptoModule is required but not available\n */\nexport class CryptoModuleRequiredError extends SyncStateError {\n constructor(operation: string) {\n super(\n `CryptoModule is required for ${operation} operation. ` +\n `Please provide crypto_module in SyncStateModuleDependencies.`\n );\n this.name = \"CryptoModuleRequiredError\";\n Object.setPrototypeOf(this, CryptoModuleRequiredError.prototype);\n }\n}\n\n/**\n * Error thrown when state branch cannot be created or configured\n */\nexport class StateBranchSetupError extends SyncStateError {\n constructor(\n public reason: string,\n public underlyingError?: Error\n ) {\n super(`Failed to setup state branch: ${reason}`);\n this.name = \"StateBranchSetupError\";\n Object.setPrototypeOf(this, StateBranchSetupError.prototype);\n }\n}\n\n/**\n * Error thrown when the provided actorId doesn't match the authenticated identity.\n *\n * This prevents impersonation: you can only push/resolve as the actor whose\n * private key you hold.\n */\nexport class ActorIdentityMismatchError extends SyncStateError {\n public requestedActorId: string;\n public authenticatedActorId: string;\n\n constructor(requestedActorId: string, authenticatedActorId: string) {\n super(\n `Actor identity mismatch: requested '${requestedActorId}' but authenticated as '${authenticatedActorId}'. ` +\n `You can only operate as the actor whose private key you hold.`\n );\n this.name = \"ActorIdentityMismatchError\";\n this.requestedActorId = requestedActorId;\n this.authenticatedActorId = authenticatedActorId;\n Object.setPrototypeOf(this, ActorIdentityMismatchError.prototype);\n }\n}\n\n/**\n * Error thrown when uncommitted changes exist in state branch\n */\nexport class UncommittedChangesError extends SyncStateError {\n public branch: string;\n\n constructor(branchName: string) {\n super(\n `Uncommitted changes detected in ${branchName}. ` +\n `Please commit or stash changes before synchronizing.`\n );\n this.name = \"UncommittedChangesError\";\n this.branch = branchName;\n Object.setPrototypeOf(this, UncommittedChangesError.prototype);\n }\n}\n\n/**\n * Type guards for error handling\n * \n * These functions enable type-safe error handling by narrowing the error type.\n * They are additive and don't break any existing code.\n * \n * Example usage:\n * ```typescript\n * try {\n * await syncModule.pushState(options);\n * } catch (error) {\n * if (isPushFromStateBranchError(error)) {\n * // TypeScript knows error.branch exists here\n * console.log(`Cannot push from ${error.branch}`);\n * }\n * }\n * ```\n */\n\nexport function isSyncStateError(error: unknown): error is SyncStateError {\n return error instanceof SyncStateError;\n}\n\nexport function isPushFromStateBranchError(\n error: unknown\n): error is PushFromStateBranchError {\n return error instanceof PushFromStateBranchError;\n}\n\nexport function isIntegrityViolationError(\n error: unknown\n): error is IntegrityViolationError {\n return error instanceof IntegrityViolationError;\n}\n\nexport function isConflictMarkersPresentError(\n error: unknown\n): error is ConflictMarkersPresentError {\n return error instanceof ConflictMarkersPresentError;\n}\n\nexport function isUncommittedChangesError(\n error: unknown\n): error is UncommittedChangesError {\n return error instanceof UncommittedChangesError;\n}\n\nexport function isNoRebaseInProgressError(\n error: unknown\n): error is NoRebaseInProgressError {\n return error instanceof NoRebaseInProgressError;\n}\n\nexport function isStateBranchSetupError(\n error: unknown\n): error is StateBranchSetupError {\n return error instanceof StateBranchSetupError;\n}\n\nexport function isCryptoModuleRequiredError(\n error: unknown\n): error is CryptoModuleRequiredError {\n return error instanceof CryptoModuleRequiredError;\n}\n\nexport function isActorIdentityMismatchError(\n error: unknown\n): error is ActorIdentityMismatchError {\n return error instanceof ActorIdentityMismatchError;\n}\n\n","export * from './actor_validator';\nexport * from './agent_validator';\nexport * from './task_validator';\nexport * from './cycle_validator';\nexport * from './execution_validator';\nexport * from './changelog_validator';\nexport * from './feedback_validator';\nexport * from './embedded_metadata_validator';\nexport * from './workflow_validator';\nexport type { ValidationResult } from './errors';\n","export * from \"./generated\";\nexport * from \"./common.types\";\nexport * from \"./embedded.types\";\n","export * from './event_bus';\nexport * from './types';\n","import { EventEmitter } from 'events';\n\nimport type {\n BaseEvent,\n GitGovEvent,\n EventHandler,\n EventSubscription\n} from './types';\n\n// Generate unique subscription IDs\nfunction generateSubscriptionId(): string {\n return `subscription:${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Event Stream interface - Contract for both Local and Global bus implementations\n */\nexport interface IEventStream {\n /**\n * Publish an event to the bus\n */\n publish(event: BaseEvent): void;\n\n /**\n * Subscribe to events of a specific type\n */\n subscribe<T extends BaseEvent = BaseEvent>(\n eventType: string,\n handler: EventHandler<T>\n ): EventSubscription;\n\n /**\n * Unsubscribe from events\n */\n unsubscribe(subscriptionId: string): boolean;\n\n /**\n * Get all active subscriptions\n */\n getSubscriptions(): EventSubscription[];\n\n /**\n * Clear all subscriptions (for testing/cleanup)\n */\n clearSubscriptions(): void;\n\n /**\n * Wait for all pending event handlers to complete (for testing)\n */\n waitForIdle(options?: { timeout?: number }): Promise<void>;\n}\n\n/**\n * Local EventBus implementation using Node.js EventEmitter\n * \n * This is the \"Free Tier\" implementation that operates in-memory\n * and provides synchronous event delivery for local-first usage.\n * \n * Design Principles:\n * - Decoupled Producers: Adapters emit events without knowing consumers\n * - Pluggable Consumers: Event handlers can be added/removed dynamically \n * - Type Safety: Full TypeScript support for all event types\n * - Performance: In-memory delivery with minimal overhead\n */\nexport class EventBus implements IEventStream {\n private emitter: EventEmitter;\n private subscriptions: Map<string, EventSubscription>;\n private pendingHandlers: Set<Promise<void>>;\n\n constructor() {\n this.emitter = new EventEmitter();\n this.subscriptions = new Map();\n this.pendingHandlers = new Set();\n\n // Increase max listeners for high-throughput scenarios\n this.emitter.setMaxListeners(100);\n }\n\n /**\n * Publish an event to all subscribers\n * \n * @param event - The event to publish\n */\n publish(event: BaseEvent): void {\n // Validate event structure\n if (!event.type || typeof event.type !== 'string') {\n throw new Error('Event must have a valid type string');\n }\n\n if (!event.timestamp || typeof event.timestamp !== 'number') {\n throw new Error('Event must have a valid timestamp number');\n }\n\n if (!event.source || typeof event.source !== 'string') {\n throw new Error('Event must have a valid source string');\n }\n\n // Emit the event\n this.emitter.emit(event.type, event);\n\n // Also emit on wildcard for debugging/monitoring\n this.emitter.emit('*', event);\n }\n\n /**\n * Subscribe to events of a specific type\n * \n * @param eventType - The event type to subscribe to\n * @param handler - The handler function to call when event is received\n * @returns EventSubscription object with subscription details\n */\n subscribe<T extends BaseEvent = BaseEvent>(\n eventType: string,\n handler: EventHandler<T>\n ): EventSubscription {\n // Generate unique subscription ID\n const subscriptionId = generateSubscriptionId();\n\n // Wrap handler to catch errors, provide context, AND track pending handlers\n const wrappedHandler = async (event: T) => {\n // Create promise that tracks this handler execution\n const handlerPromise = (async () => {\n try {\n await handler(event);\n } catch (error) {\n console.error(`Error in event handler for ${eventType}:`, error);\n // In production, this could emit an error event or log to monitoring\n }\n })();\n\n // Track this promise\n this.pendingHandlers.add(handlerPromise);\n\n // Remove from tracking when done\n handlerPromise.finally(() => {\n this.pendingHandlers.delete(handlerPromise);\n });\n\n // Don't await - let it run in background (fire-and-forget for publish())\n // But tests can call waitForIdle() to wait for all handlers\n };\n\n // Create subscription object (store wrapped handler for unsubscribing)\n const subscription: EventSubscription = {\n id: subscriptionId,\n eventType,\n handler: wrappedHandler as EventHandler, // Store wrapped handler\n metadata: {\n createdAt: Date.now()\n }\n };\n\n // Register with EventEmitter\n this.emitter.on(eventType, wrappedHandler);\n\n // Store subscription for management\n this.subscriptions.set(subscriptionId, subscription);\n\n return subscription;\n }\n\n /**\n * Unsubscribe from events\n * \n * @param subscriptionId - The subscription ID to remove\n * @returns true if subscription was found and removed, false otherwise\n */\n unsubscribe(subscriptionId: string): boolean {\n const subscription = this.subscriptions.get(subscriptionId);\n if (!subscription) {\n return false;\n }\n\n // Remove from EventEmitter\n this.emitter.removeListener(subscription.eventType, subscription.handler);\n\n // Remove from our tracking\n this.subscriptions.delete(subscriptionId);\n\n return true;\n }\n\n /**\n * Get all active subscriptions\n * \n * @returns Array of all active subscriptions\n */\n getSubscriptions(): EventSubscription[] {\n return Array.from(this.subscriptions.values());\n }\n\n /**\n * Clear all subscriptions (for testing/cleanup)\n */\n clearSubscriptions(): void {\n this.emitter.removeAllListeners();\n this.subscriptions.clear();\n }\n\n /**\n * Get subscription count for a specific event type\n * \n * @param eventType - The event type to count subscribers for\n * @returns Number of active subscriptions for the event type\n */\n getSubscriptionCount(eventType: string): number {\n return this.emitter.listenerCount(eventType);\n }\n\n /**\n * Get all event types that have active subscriptions\n * \n * @returns Array of event types with active subscriptions\n */\n getActiveEventTypes(): string[] {\n return this.emitter.eventNames() as string[];\n }\n\n /**\n * Subscribe to all events (wildcard subscription)\n * Useful for debugging, monitoring, or logging\n * \n * @param handler - Handler that will receive all events\n * @returns EventSubscription object\n */\n subscribeToAll(handler: EventHandler<BaseEvent>): EventSubscription {\n return this.subscribe('*', handler);\n }\n\n /**\n * Wait for all pending event handlers to complete.\n * This is primarily useful for testing to ensure event handlers finish before assertions.\n * \n * In production, events are fire-and-forget for performance.\n * In tests, use this to synchronize and avoid race conditions.\n * \n * @param options - Optional configuration\n * @param options.timeout - Maximum time to wait in ms (default: 5000)\n * @returns Promise that resolves when all handlers complete or timeout occurs\n * \n * @example\n * ```typescript\n * await feedbackAdapter.create(...); // publishes event\n * await eventBus.waitForIdle(); // wait for BacklogAdapter.handleFeedbackCreated()\n * const task = await backlogAdapter.getTask(taskId);\n * expect(task.status).toBe('paused'); // now safe to assert\n * ```\n */\n async waitForIdle(options: { timeout?: number } = {}): Promise<void> {\n const timeout = options.timeout ?? 5000;\n const startTime = Date.now();\n\n while (this.pendingHandlers.size > 0) {\n // Check timeout\n if (Date.now() - startTime > timeout) {\n const pendingCount = this.pendingHandlers.size;\n console.warn(`EventBus.waitForIdle() timeout after ${timeout}ms with ${pendingCount} handlers still pending`);\n break;\n }\n\n // Wait for current batch of handlers\n if (this.pendingHandlers.size > 0) {\n await Promise.race([\n Promise.all(Array.from(this.pendingHandlers)),\n new Promise(resolve => setTimeout(resolve, 10)) // Re-check every 10ms\n ]);\n }\n }\n }\n}\n\n/**\n * Singleton instance for application-wide event bus usage\n */\nexport const eventBus = new EventBus();\n\n/**\n * Type-safe event publisher helper\n * Ensures events conform to GitGovEvent union type\n */\nexport function publishEvent(event: GitGovEvent): void {\n eventBus.publish(event);\n}\n\n/**\n * Type-safe event subscriber helper\n * Provides better TypeScript inference for specific event types\n */\nexport function subscribeToEvent<T extends GitGovEvent>(\n eventType: T['type'],\n handler: EventHandler<T>\n): EventSubscription {\n return eventBus.subscribe(eventType, handler);\n}\n","export { DiagramGenerator, DiagramMetrics } from './diagram_generator';\nexport {\n MermaidRenderer,\n ContentSanitizer,\n MermaidValidator,\n type DiagramOptions,\n RenderingError\n} from './mermaid_renderer';\nexport {\n RelationshipAnalyzer,\n type RelationshipGraph,\n type DiagramNode,\n type DiagramEdge,\n\n CircularDependencyError\n} from './relationship_analyzer';\n","import type { TaskRecord } from '../record_types';\nimport type { CycleRecord } from '../record_types';\nimport { DetailedValidationError } from '../record_validations/common';\n\n/**\n * Specialized module for validating graph input data\n * Follows the Module pattern for technical capabilities\n */\nexport class GraphValidator {\n /**\n * Validates record integrity before processing\n */\n static validateRecordIntegrity(cycles: CycleRecord[], tasks: TaskRecord[]): void {\n if (!Array.isArray(cycles) || !Array.isArray(tasks)) {\n throw new DetailedValidationError('RelationshipAnalyzer', [\n { field: 'cycles', message: 'must be an array', value: cycles },\n { field: 'tasks', message: 'must be an array', value: tasks }\n ]);\n }\n\n this.validateCycles(cycles);\n this.validateTasks(tasks);\n }\n\n private static validateCycles(cycles: CycleRecord[]): void {\n for (let i = 0; i < cycles.length; i++) {\n const cycle = cycles[i];\n if (!cycle) {\n throw new DetailedValidationError('CycleRecord', [\n { field: `index_${i}`, message: 'cycle is undefined', value: cycle }\n ]);\n }\n\n try {\n if (!cycle.id || typeof cycle.id !== 'string') {\n throw new DetailedValidationError('CycleRecord', [\n { field: 'id', message: 'must be a non-empty string', value: cycle.id }\n ]);\n }\n\n if (!cycle.title || typeof cycle.title !== 'string') {\n throw new DetailedValidationError('CycleRecord', [\n { field: 'title', message: 'must be a non-empty string', value: cycle.title }\n ]);\n }\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n throw new DetailedValidationError('CycleRecord', [\n { field: `index_${i}`, message: error instanceof Error ? error.message : String(error), value: cycle }\n ]);\n }\n }\n }\n\n private static validateTasks(tasks: TaskRecord[]): void {\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n if (!task) {\n throw new DetailedValidationError('TaskRecord', [\n { field: `index_${i}`, message: 'task is undefined', value: task }\n ]);\n }\n\n const sourceFile = this.getSourceFile(task);\n\n try {\n if (!task.id || typeof task.id !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'id', message: 'must be a non-empty string', value: task.id }\n ]);\n }\n\n if (!task.title || typeof task.title !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'title', message: 'must be a non-empty string', value: task.title }\n ]);\n }\n\n if (!task.description || typeof task.description !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'description', message: 'must be a non-empty string', value: task.description }\n ]);\n }\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n const fileInfo = sourceFile !== 'unknown' ? `\\n📁 File: .gitgov/tasks/${sourceFile}` : '';\n throw new DetailedValidationError('TaskRecord', [\n { field: `index_${i}`, message: `${error instanceof Error ? error.message : String(error)}${fileInfo}\\n💡 Check this file for missing or invalid fields in payload.`, value: task }\n ]);\n }\n }\n }\n\n /**\n * Safely extracts source file information from task record\n */\n private static getSourceFile(task: TaskRecord): string {\n if (task && typeof task === 'object' && '_sourceFile' in task) {\n const sourceFile = (task as TaskRecord & { _sourceFile?: unknown })._sourceFile;\n return typeof sourceFile === 'string' ? sourceFile : 'unknown';\n }\n return 'unknown';\n }\n}","import type { TaskRecord } from '../record_types';\nimport type { CycleRecord } from '../record_types';\nimport { GraphValidator } from './graph_validator';\n\nexport interface DiagramNode {\n id: string;\n type: 'cycle' | 'epic-task' | 'task';\n title: string;\n status?: string;\n tags?: string[];\n originalId: string;\n}\n\nexport interface DiagramEdge {\n from: string;\n to: string;\n type: 'hierarchy';\n}\n\nexport interface RelationshipGraph {\n nodes: DiagramNode[];\n edges: DiagramEdge[];\n metadata: {\n nodeCount: number;\n edgeCount: number;\n generatedAt: string;\n duplicatesRemoved?: {\n nodes: number;\n edges: number;\n };\n };\n}\n\nexport class CircularDependencyError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CircularDependencyError';\n }\n}\n\nexport class RelationshipAnalyzer {\n\n /**\n * Analyzes relationships between cycles and tasks to build a complete graph\n */\n analyzeRelationships(cycles: CycleRecord[], tasks: TaskRecord[]): RelationshipGraph {\n // Validate record integrity using specialized validator\n GraphValidator.validateRecordIntegrity(cycles, tasks);\n\n const rawGraph = this.buildRawGraph(cycles, tasks);\n const cleanGraph = this.processAndValidateGraph(rawGraph);\n\n return this.createRelationshipGraph(rawGraph, cleanGraph);\n }\n\n /**\n * Builds the initial graph with potential duplicates\n */\n private buildRawGraph(cycles: CycleRecord[], tasks: TaskRecord[]): { nodes: DiagramNode[], edges: DiagramEdge[] } {\n const rawNodes = this.buildNodes(cycles, tasks);\n const rawEdges = this.buildEdges(cycles, tasks, rawNodes);\n return { nodes: rawNodes, edges: rawEdges };\n }\n\n /**\n * Processes raw graph to remove duplicates and validate structure\n */\n private processAndValidateGraph(rawGraph: { nodes: DiagramNode[], edges: DiagramEdge[] }): { nodes: DiagramNode[], edges: DiagramEdge[] } {\n // Detect and report duplicates as warnings\n this.reportDuplicateWarnings(rawGraph.nodes, rawGraph.edges);\n\n // Deduplicate nodes and edges\n const nodes = this.deduplicateNodes(rawGraph.nodes);\n const edges = this.deduplicateEdges(rawGraph.edges);\n\n // Detect circular dependencies\n this.detectCircularDependencies(edges);\n\n return { nodes, edges };\n }\n\n /**\n * Creates the final RelationshipGraph with metadata\n */\n private createRelationshipGraph(\n rawGraph: { nodes: DiagramNode[], edges: DiagramEdge[] },\n cleanGraph: { nodes: DiagramNode[], edges: DiagramEdge[] }\n ): RelationshipGraph {\n return {\n nodes: cleanGraph.nodes,\n edges: cleanGraph.edges,\n metadata: {\n nodeCount: cleanGraph.nodes.length,\n edgeCount: cleanGraph.edges.length,\n generatedAt: new Date().toISOString(),\n duplicatesRemoved: {\n nodes: rawGraph.nodes.length - cleanGraph.nodes.length,\n edges: rawGraph.edges.length - cleanGraph.edges.length,\n },\n },\n };\n }\n\n\n\n /**\n * Generates clean node ID for Mermaid syntax (removes timestamp, converts hyphens)\n */\n generateNodeId(record: CycleRecord | TaskRecord): string {\n return record.id\n .replace(/^\\d+-/, '') // Remove timestamp prefix\n .replace(/-/g, '_'); // Convert hyphens to underscores\n }\n\n\n\n /**\n * Builds all nodes from cycles and tasks\n */\n private buildNodes(cycles: CycleRecord[], tasks: TaskRecord[]): DiagramNode[] {\n const nodes: DiagramNode[] = [];\n\n // Add cycle nodes\n for (const cycle of cycles) {\n nodes.push({\n id: this.generateNodeId(cycle),\n type: 'cycle',\n title: cycle.title,\n status: cycle.status,\n tags: cycle.tags || [],\n originalId: cycle.id,\n });\n }\n\n // Add task nodes (both epic and regular)\n for (const task of tasks) {\n const isEpic = this.isEpicTask(task);\n\n // Use title field for task display\n const title = task.title || 'Untitled Task';\n\n const node: DiagramNode = {\n id: this.generateNodeId(task),\n type: isEpic ? 'epic-task' : 'task',\n title,\n status: task.status,\n originalId: task.id,\n };\n if (task.tags) {\n node.tags = task.tags;\n }\n nodes.push(node);\n }\n\n return nodes;\n }\n\n /**\n * Builds all hierarchical edges from protocol relationships\n */\n private buildEdges(cycles: CycleRecord[], _tasks: TaskRecord[], nodes: DiagramNode[]): DiagramEdge[] {\n const edges: DiagramEdge[] = [];\n const nodeMap = new Map(nodes.map(n => [n.originalId, n.id]));\n\n // Build cycle -> child cycle relationships\n for (const cycle of cycles) {\n if (cycle.childCycleIds) {\n for (const childId of cycle.childCycleIds) {\n const fromId = nodeMap.get(cycle.id);\n const toId = nodeMap.get(childId);\n\n if (fromId && toId) {\n edges.push({\n from: fromId,\n to: toId,\n type: 'hierarchy',\n });\n }\n }\n }\n\n // Build cycle -> task relationships \n if (cycle.taskIds) {\n for (const taskId of cycle.taskIds) {\n const fromId = nodeMap.get(cycle.id);\n const toId = nodeMap.get(taskId);\n\n if (fromId && toId) {\n edges.push({\n from: fromId,\n to: toId,\n type: 'hierarchy',\n });\n }\n }\n }\n }\n\n return edges;\n }\n\n /**\n * Checks if a task is an epic based on tags\n */\n private isEpicTask(task: TaskRecord): boolean {\n return task.tags?.some(tag => tag.startsWith('epic:')) ?? false;\n }\n\n /**\n * Detects circular dependencies in the graph\n */\n private detectCircularDependencies(edges: DiagramEdge[]): void {\n const graph = new Map<string, string[]>();\n\n // Build adjacency list\n for (const edge of edges) {\n if (!graph.has(edge.from)) {\n graph.set(edge.from, []);\n }\n graph.get(edge.from)!.push(edge.to);\n }\n\n // DFS to detect cycles with path tracking\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n for (const node of graph.keys()) {\n if (!visited.has(node)) {\n const cyclePath = this.findCycleDFS(node, graph, visited, recursionStack, path);\n if (cyclePath.length > 0) {\n const cycleDescription = this.formatCycleError(cyclePath);\n throw new CircularDependencyError(cycleDescription);\n }\n }\n }\n }\n\n /**\n * DFS helper for circular dependency detection with path tracking\n */\n private findCycleDFS(\n node: string,\n graph: Map<string, string[]>,\n visited: Set<string>,\n recursionStack: Set<string>,\n path: string[]\n ): string[] {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const neighbors = graph.get(node) || [];\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor)) {\n const cyclePath = this.findCycleDFS(neighbor, graph, visited, recursionStack, path);\n if (cyclePath.length > 0) {\n return cyclePath;\n }\n } else if (recursionStack.has(neighbor)) {\n // Found a cycle - extract the cycle path\n const cycleStartIndex = path.indexOf(neighbor);\n return path.slice(cycleStartIndex).concat([neighbor]);\n }\n }\n\n recursionStack.delete(node);\n path.pop();\n return [];\n }\n\n /**\n * Formats a circular dependency error with helpful context\n */\n private formatCycleError(cyclePath: string[]): string {\n const cycleNodes = cyclePath.slice(0, -1); // Remove duplicate at end\n const nodeNames = cycleNodes.map(nodeId => {\n // Try to extract readable name from node ID\n const cleanId = nodeId.replace(/^(cycle_|task_)/, '').replace(/_/g, '-');\n return cleanId;\n });\n\n let message = `Circular dependency detected in GitGovernance entities:\\n\\n`;\n message += `🔄 Dependency Cycle:\\n`;\n\n for (let i = 0; i < cycleNodes.length; i++) {\n const current = nodeNames[i];\n const next = nodeNames[(i + 1) % nodeNames.length];\n message += ` ${current} → ${next}\\n`;\n }\n\n message += `\\n💡 To fix this issue:\\n`;\n message += ` 1. Review the childCycleIds in these cycle files:\\n`;\n cycleNodes.forEach(nodeId => {\n const cleanId = nodeId.replace(/^cycle_/, '').replace(/_/g, '-');\n message += ` - .gitgov/cycles/${cleanId}.json\\n`;\n });\n message += ` 2. Remove one of the circular references to break the cycle\\n`;\n message += ` 3. Consider if the dependency relationship is actually needed\\n`;\n\n return message;\n }\n\n /**\n * Reports duplicate nodes and edges as console warnings\n */\n private reportDuplicateWarnings(nodes: DiagramNode[], edges: DiagramEdge[]): void {\n // Analyze node duplicates\n const nodeCount = new Map<string, { count: number, sources: string[] }>();\n for (const node of nodes) {\n const current = nodeCount.get(node.id) || { count: 0, sources: [] };\n current.count++;\n current.sources.push(node.originalId);\n nodeCount.set(node.id, current);\n }\n\n const duplicateNodes = Array.from(nodeCount.entries())\n .filter(([_, data]) => data.count > 1);\n\n // Analyze edge duplicates\n const edgeCount = new Map<string, number>();\n for (const edge of edges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n edgeCount.set(edgeKey, (edgeCount.get(edgeKey) || 0) + 1);\n }\n\n const duplicateEdges = Array.from(edgeCount.entries())\n .filter(([_, count]) => count > 1);\n\n // Report warnings if duplicates found\n if (duplicateNodes.length > 0 || duplicateEdges.length > 0) {\n console.warn('\\n⚠️ GitGovernance Data Quality Warnings:');\n\n if (duplicateNodes.length > 0) {\n console.warn('\\n📦 Duplicate Nodes Detected:');\n duplicateNodes.forEach(([id, data]) => {\n const cleanSources = [...new Set(data.sources)]; // Remove duplicate sources\n console.warn(` • ${id} (appears ${data.count} times)`);\n if (cleanSources.length > 1) {\n console.warn(` Sources: ${cleanSources.join(', ')}`);\n console.warn(` 💡 Fix: Check for duplicate cycle/task IDs in .gitgov/ files`);\n } else {\n console.warn(` Source: ${cleanSources[0]} (same ID referenced multiple times)`);\n console.warn(` 💡 Fix: Check for duplicate childCycleIds/taskIds references`);\n }\n });\n }\n\n if (duplicateEdges.length > 0) {\n console.warn('\\n🔗 Duplicate Edges Detected:');\n duplicateEdges.forEach(([edge, count]) => {\n console.warn(` • ${edge} (appears ${count} times)`);\n });\n console.warn(' 💡 Fix: Check for duplicate references in childCycleIds/taskIds arrays');\n }\n\n console.warn('\\n✂️ Auto-deduplication: Duplicates will be removed from the generated diagram');\n console.warn('📋 Recommendation: Run `gitgov lint` to identify and fix data quality issues\\n');\n }\n }\n\n /**\n * Removes duplicate nodes based on their ID (O(n) performance)\n */\n private deduplicateNodes(nodes: DiagramNode[]): DiagramNode[] {\n const nodeMap = new Map<string, DiagramNode>();\n\n // Use Map to automatically handle deduplication while preserving first occurrence\n for (const node of nodes) {\n if (!nodeMap.has(node.id)) {\n nodeMap.set(node.id, node);\n }\n }\n\n return Array.from(nodeMap.values());\n }\n\n /**\n * Removes duplicate edges based on from-to combination (O(n) performance)\n */\n private deduplicateEdges(edges: DiagramEdge[]): DiagramEdge[] {\n const edgeMap = new Map<string, DiagramEdge>();\n\n for (const edge of edges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n if (!edgeMap.has(edgeKey)) {\n edgeMap.set(edgeKey, edge);\n }\n }\n\n return Array.from(edgeMap.values());\n }\n\n /**\n * Detects and reports duplicate nodes/edges for diagnostic purposes\n * Useful for testing and debugging data quality issues\n */\n detectDuplicates(cycles: CycleRecord[], tasks: TaskRecord[]): {\n duplicateNodes: Array<{ id: string, count: number, sources: string[] }>;\n duplicateEdges: Array<{ edge: string, count: number }>;\n } {\n const rawNodes = this.buildNodes(cycles, tasks);\n const rawEdges = this.buildEdges(cycles, tasks, rawNodes);\n\n // Analyze node duplicates\n const nodeCount = new Map<string, { count: number, sources: string[] }>();\n for (const node of rawNodes) {\n const current = nodeCount.get(node.id) || { count: 0, sources: [] };\n current.count++;\n current.sources.push(node.originalId);\n nodeCount.set(node.id, current);\n }\n\n const duplicateNodes = Array.from(nodeCount.entries())\n .filter(([_, data]) => data.count > 1)\n .map(([id, data]) => ({ id, count: data.count, sources: data.sources }));\n\n // Analyze edge duplicates\n const edgeCount = new Map<string, number>();\n for (const edge of rawEdges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n edgeCount.set(edgeKey, (edgeCount.get(edgeKey) || 0) + 1);\n }\n\n const duplicateEdges = Array.from(edgeCount.entries())\n .filter(([_, count]) => count > 1)\n .map(([edge, count]) => ({ edge, count }));\n\n return { duplicateNodes, duplicateEdges };\n }\n\n /**\n * Filters cycles and tasks based on specified criteria\n */\n filterEntities(\n cycles: CycleRecord[],\n tasks: TaskRecord[],\n filters: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n }\n ): { filteredCycles: CycleRecord[], filteredTasks: TaskRecord[] } {\n let filteredCycles = [...cycles];\n let filteredTasks = [...tasks];\n\n // Filter by specific cycle ID\n if (filters.cycleId) {\n const targetCycle = cycles.find(c => c.id === filters.cycleId);\n if (targetCycle) {\n // Include the target cycle and its related entities\n const relatedCycleIds = new Set([filters.cycleId]);\n const relatedTaskIds = new Set<string>();\n\n // Recursively add all descendant cycles\n const addDescendantCycles = (cycleId: string) => {\n const cycle = cycles.find(c => c.id === cycleId);\n if (cycle?.childCycleIds) {\n cycle.childCycleIds.forEach(childId => {\n if (!relatedCycleIds.has(childId)) {\n relatedCycleIds.add(childId);\n addDescendantCycles(childId); // Recursive call\n }\n });\n }\n };\n\n // Start recursive traversal from target cycle\n addDescendantCycles(filters.cycleId);\n\n // Add tasks from all related cycles\n cycles.forEach(cycle => {\n if (relatedCycleIds.has(cycle.id) && cycle.taskIds) {\n cycle.taskIds.forEach(taskId => relatedTaskIds.add(taskId));\n }\n });\n\n filteredCycles = cycles.filter(c => relatedCycleIds.has(c.id));\n filteredTasks = tasks.filter(t => relatedTaskIds.has(t.id));\n }\n }\n\n // Filter by specific task ID\n if (filters.taskId) {\n const targetTask = tasks.find(t => t.id === filters.taskId);\n if (targetTask) {\n filteredTasks = [targetTask];\n\n // Find cycles that contain this task\n filteredCycles = cycles.filter(c =>\n c.taskIds && c.taskIds.includes(filters.taskId!)\n );\n }\n }\n\n // Filter by package name (using tags)\n if (filters.packageName) {\n const packageTag = `package:${filters.packageName}`;\n\n filteredCycles = filteredCycles.filter(c =>\n c.tags && c.tags.includes(packageTag)\n );\n\n filteredTasks = filteredTasks.filter(t =>\n t.tags && t.tags.includes(packageTag)\n );\n }\n\n return { filteredCycles, filteredTasks };\n }\n}\n","import type { RelationshipGraph, DiagramNode, DiagramEdge } from './relationship_analyzer';\n\nexport interface DiagramOptions {\n layout: 'LR' | 'TD' | 'RL' | 'BT';\n includeEpicTasks: boolean;\n maxDepth: number;\n colorScheme: 'default' | 'dark' | 'minimal' | 'corporate';\n showAssignments: boolean;\n filterByStatus?: string[];\n}\n\nexport class RenderingError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'RenderingError';\n }\n}\n\nexport class ContentSanitizer {\n sanitizeNodeTitle(title: string): string {\n // Remove potentially dangerous characters for Mermaid, but preserve <br/> tags\n return title\n .replace(/<(?!br\\/?>)[^>]*>/g, '') // Remove HTML tags except <br/> and <br>\n .replace(/[\"']/g, '') // Remove quotes that could break syntax\n .substring(0, 150); // Increased limit to accommodate line breaks\n }\n\n sanitizeNodeId(id: string): string {\n // Ensure valid Mermaid node ID\n return id.replace(/[^a-zA-Z0-9_-]/g, '_');\n }\n\n sanitizeStatus(status: string): string {\n const allowedStatuses = [\n 'pending', 'in-progress', 'done', 'blocked',\n 'cancelled', 'draft', 'planning', 'active',\n 'completed', 'archived', 'paused', 'discarded',\n 'validated', 'audit_oracle_create', 'audit_oracle_close',\n 'ready', 'review', 'in_progress'\n ];\n return allowedStatuses.includes(status) ? status : 'unknown';\n }\n\n sanitizeGraph(graph: RelationshipGraph): RelationshipGraph {\n return {\n nodes: graph.nodes.map(node => {\n const sanitizedNode: DiagramNode = {\n id: this.sanitizeNodeId(node.id),\n type: node.type,\n title: this.sanitizeNodeTitle(node.title),\n originalId: node.originalId,\n };\n\n if (node.status) {\n sanitizedNode.status = this.sanitizeStatus(node.status);\n }\n\n if (node.tags) {\n sanitizedNode.tags = node.tags;\n }\n\n return sanitizedNode;\n }),\n edges: graph.edges.filter(edge => edge.from && edge.to),\n metadata: graph.metadata,\n };\n }\n}\n\nexport class MermaidValidator {\n isValidMermaidSyntax(content: string): boolean {\n // Basic Mermaid syntax validation\n const lines = content.split('\\n');\n\n // Must start with flowchart declaration\n const flowchartLine = lines.find(line => line.trim().startsWith('flowchart'));\n if (!flowchartLine) {\n return false;\n }\n\n // Check for balanced brackets in node definitions\n const nodeLines = lines.filter(line => line.includes('[\"') && line.includes('\"]'));\n for (const line of nodeLines) {\n const openBrackets = (line.match(/\\[\"/g) || []).length;\n const closeBrackets = (line.match(/\"\\]/g) || []).length;\n if (openBrackets !== closeBrackets) {\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport class MermaidRenderer {\n private readonly sanitizer: ContentSanitizer;\n private readonly validator: MermaidValidator;\n\n constructor() {\n this.sanitizer = new ContentSanitizer();\n this.validator = new MermaidValidator();\n }\n\n /**\n * Main rendering method with input sanitization and output validation\n */\n renderGraph(graph: RelationshipGraph, options: DiagramOptions): string {\n if (!graph || !graph.nodes || !graph.edges) {\n throw new RenderingError('Invalid graph structure');\n }\n\n const sanitizedGraph = this.sanitizer.sanitizeGraph(graph);\n const content = this.generateMermaidContent(sanitizedGraph, options);\n\n // Validate generated Mermaid syntax\n if (!this.validator.isValidMermaidSyntax(content)) {\n throw new RenderingError('Generated invalid Mermaid syntax');\n }\n\n return content;\n }\n\n /**\n * Generates the complete Mermaid diagram content\n */\n private generateMermaidContent(graph: RelationshipGraph, options: DiagramOptions): string {\n const header = this.generateHeader(options);\n const nodes = this.generateNodes(graph.nodes);\n const edges = this.generateEdges(graph.edges);\n const styling = this.generateStyling();\n const statusClasses = this.generateStatusClasses(graph.nodes);\n\n return [\n '```mermaid',\n header,\n '',\n nodes,\n '',\n edges,\n '',\n styling,\n '',\n statusClasses,\n '```'\n ].join('\\n');\n }\n\n /**\n * Generates the diagram header with metadata\n */\n private generateHeader(options: DiagramOptions): string {\n const timestamp = new Date().toISOString();\n return [\n `flowchart ${options.layout}`,\n ` %% Auto-generated on ${timestamp}`,\n ` %% Source: .gitgov/ entities`,\n ].join('\\n');\n }\n\n /**\n * Generates node syntax for all nodes\n */\n private generateNodes(nodes: DiagramNode[]): string {\n const nodeLines = nodes.map(node => this.generateNodeSyntax(node));\n return nodeLines.join('\\n');\n }\n\n /**\n * Generates edge syntax for all relationships\n */\n private generateEdges(edges: DiagramEdge[]): string {\n if (edges.length === 0) {\n return ' %% No relationships found';\n }\n\n const edgeLines = [\n ' %% ONLY hierarchical relationships from protocol',\n ' %% Source: CycleRecord.childCycleIds and CycleRecord.taskIds',\n ...edges.map(edge => this.generateEdgeSyntax(edge))\n ];\n\n return edgeLines.join('\\n');\n }\n\n /**\n * Wraps a title string to a specified max width, using <br/> for line breaks.\n * Also sanitizes the title.\n * @param title The title to wrap.\n * @param maxWidth The maximum width of a line.\n * @returns The wrapped and sanitized title string.\n */\n private wrapTitle(title: string, maxWidth: number = 30): string {\n // The sanitizer already limits total length, so this is for readability.\n const sanitizedTitle = this.sanitizer.sanitizeNodeTitle(title);\n if (sanitizedTitle.length <= maxWidth) {\n return sanitizedTitle;\n }\n\n const words = sanitizedTitle.split(' ');\n const lines = [];\n let currentLine = words.shift() || '';\n\n for (const word of words) {\n if ((currentLine + ' ' + word).length > maxWidth) {\n lines.push(currentLine);\n currentLine = word;\n } else {\n currentLine += ` ${word}`;\n }\n }\n lines.push(currentLine);\n\n return lines.join('<br/>');\n }\n\n /**\n * Node generation with word wrapping for better readability.\n * Uses different shapes for different node types:\n * - Cycles: Hexagonal shape {{text}} for strategic importance\n * - Tasks: Rectangular shape [text] for implementation details\n */\n generateNodeSyntax(node: DiagramNode): string {\n const wrappedTitle = this.wrapTitle(node.title);\n const sanitizedId = this.sanitizer.sanitizeNodeId(node.id);\n\n const icon = this.getNodeIcon(node.type);\n\n // Use hexagonal shape for cycles (strategic level)\n if (node.type === 'cycle') {\n return ` ${sanitizedId}{{\"${icon}<br/>${wrappedTitle}\"}}`;\n }\n\n // Use rectangular shape for tasks (implementation level)\n if (node.type === 'epic-task' && node.status === 'paused') {\n return ` ${sanitizedId}[\"${icon}<br/>${wrappedTitle}<br/>(PAUSED)\"]`;\n }\n\n return ` ${sanitizedId}[\"${icon}<br/>${wrappedTitle}\"]`;\n }\n\n /**\n * Edge generation with relationship validation\n */\n generateEdgeSyntax(edge: DiagramEdge): string {\n if (!edge.from || !edge.to) {\n throw new RenderingError('Edge must have valid from and to nodes');\n }\n\n const sanitizedFrom = this.sanitizer.sanitizeNodeId(edge.from);\n const sanitizedTo = this.sanitizer.sanitizeNodeId(edge.to);\n\n return ` ${sanitizedFrom} --> ${sanitizedTo}`;\n }\n\n /**\n * Gets the appropriate icon for each node type\n */\n private getNodeIcon(type: string): string {\n const icons = {\n 'cycle': '🎯',\n 'epic-task': '📦',\n 'task': '📋',\n };\n return icons[type as keyof typeof icons] || '📋';\n }\n\n /**\n * Generates the mandatory color scheme CSS\n */\n private generateStyling(): string {\n return [\n ' %% Status styling (mandatory color scheme)',\n ' classDef statusDraft fill:#ffffff,stroke:#cccccc,stroke-width:2px,color:#666666',\n ' classDef statusReady fill:#ffffeb,stroke:#cccc00,stroke-width:2px,color:#666600',\n ' classDef statusInProgress fill:#ebf5ff,stroke:#0066cc,stroke-width:2px,color:#003366',\n ' classDef statusDone fill:#ebffeb,stroke:#00cc00,stroke-width:2px,color:#006600',\n ' classDef statusBlocked fill:#ffebeb,stroke:#cc0000,stroke-width:2px,color:#660000',\n ' classDef statusEpicPaused fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px,color:#4a148c',\n ' classDef statusArchived fill:#f5f5f5,stroke:#666666,stroke-width:2px,color:#333333',\n ].join('\\n');\n }\n\n /**\n * Applies status-based CSS classes to nodes\n */\n private generateStatusClasses(nodes: DiagramNode[]): string {\n const statusGroups = new Map<string, string[]>();\n\n // Group nodes by status\n for (const node of nodes) {\n const statusClass = this.getStatusClass(node.status || 'draft', node);\n\n\n if (!statusGroups.has(statusClass)) {\n statusGroups.set(statusClass, []);\n }\n statusGroups.get(statusClass)!.push(node.id);\n }\n\n // Generate class applications\n const classLines: string[] = [];\n for (const [statusClass, nodeIds] of statusGroups.entries()) {\n if (nodeIds.length > 0) {\n const sanitizedIds = nodeIds.map(id => this.sanitizer.sanitizeNodeId(id));\n classLines.push(` class ${sanitizedIds.join(',')} ${statusClass}`);\n }\n }\n\n return [\n ' %% Apply styles based on entity status',\n ...classLines\n ].join('\\n');\n }\n\n /**\n * Maps entity status to CSS class name with cycle and epic task special handling\n */\n private getStatusClass(status: string, node?: DiagramNode): string {\n // Special case: Epic task paused (waiting for parent cycle)\n if (status === 'paused' && node?.type === 'epic-task') {\n return 'statusEpicPaused'; // Purple - not a real blockage\n }\n\n // Handle cycle statuses\n if (node?.type === 'cycle') {\n const cycleStatusMap: Record<string, string> = {\n 'planning': 'statusDraft', // White - being planned\n 'active': 'statusInProgress', // Blue - sprint/milestone running\n 'completed': 'statusDone', // Green - all tasks finished\n 'archived': 'statusArchived', // Gray - historical record\n };\n return cycleStatusMap[status] || 'statusDraft';\n }\n\n // Handle task statuses\n const taskStatusMap: Record<string, string> = {\n // Completed states - Green\n 'done': 'statusDone',\n 'validated': 'statusDone',\n\n // Active states - Blue \n 'active': 'statusInProgress',\n 'in_progress': 'statusInProgress',\n\n // Ready states - Yellow (only for tasks)\n 'ready': 'statusReady',\n 'pending': 'statusReady',\n\n // Preparation states - White\n 'draft': 'statusDraft',\n 'review': 'statusDraft',\n\n // Real blockages - Red (only for NON-epic tasks)\n 'blocked': 'statusBlocked',\n 'paused': 'statusBlocked',\n 'cancelled': 'statusBlocked',\n 'discarded': 'statusBlocked',\n\n // Archived states - Gray\n 'archived': 'statusArchived',\n\n // Legacy oracle states - White (preparation)\n 'audit_oracle_create': 'statusDraft',\n 'audit_oracle_close': 'statusDraft',\n };\n\n return taskStatusMap[status] || 'statusDraft';\n }\n}\n","import { RelationshipAnalyzer, type RelationshipGraph } from './relationship_analyzer';\nimport { MermaidRenderer, type DiagramOptions } from './mermaid_renderer';\nimport type { TaskRecord } from '../record_types';\nimport type { CycleRecord } from '../record_types';\nimport { promises as fs } from \"fs\";\nimport * as path from \"path\";\n\nconst MAX_GENERATION_TIME_HISTORY = 100;\n\nexport class DiagramMetrics {\n private cacheHits: number = 0;\n private cacheMisses: number = 0;\n private generationTimes: number[] = [];\n\n incrementCacheHits(): void {\n this.cacheHits++;\n }\n\n incrementCacheMisses(): void {\n this.cacheMisses++;\n }\n\n recordGenerationTime(timeMs: number): void {\n this.generationTimes.push(timeMs);\n\n // Keep only last N measurements to prevent memory leak\n if (this.generationTimes.length > MAX_GENERATION_TIME_HISTORY) {\n this.generationTimes.shift();\n }\n }\n\n getCacheHitRatio(): number {\n const total = this.cacheHits + this.cacheMisses;\n return total === 0 ? 0 : this.cacheHits / total;\n }\n\n getAverageGenerationTime(): number {\n if (this.generationTimes.length === 0) return 0;\n\n const sum = this.generationTimes.reduce((a, b) => a + b, 0);\n return sum / this.generationTimes.length;\n }\n\n getStats() {\n return {\n cacheHitRatio: this.getCacheHitRatio(),\n averageGenerationTime: this.getAverageGenerationTime(),\n totalGenerations: this.generationTimes.length,\n };\n }\n}\n\nexport class DiagramGenerator {\n private readonly options: DiagramOptions;\n private readonly cache: Map<string, RelationshipGraph>;\n private readonly metrics: DiagramMetrics;\n public readonly analyzer: RelationshipAnalyzer;\n private readonly renderer: MermaidRenderer;\n\n constructor(options: Partial<DiagramOptions> = {}) {\n this.options = Object.freeze({\n layout: 'LR',\n includeEpicTasks: true,\n maxDepth: 4,\n colorScheme: 'default',\n showAssignments: false,\n ...options\n } as DiagramOptions);\n\n this.cache = new Map();\n this.metrics = new DiagramMetrics();\n this.analyzer = new RelationshipAnalyzer();\n this.renderer = new MermaidRenderer();\n }\n\n /**\n * Primary API - Performance optimized with caching\n */\n async generateFromRecords(\n cycles: CycleRecord[],\n tasks: TaskRecord[],\n filters?: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n },\n showArchived: boolean = false\n ): Promise<string> {\n const cacheKey = this.generateCacheKey(cycles, tasks, showArchived);\n\n if (this.cache.has(cacheKey)) {\n this.metrics.incrementCacheHits();\n return this.renderFromCache(cacheKey);\n }\n\n const startTime = performance.now();\n\n try {\n // Apply filters if provided\n let finalCycles = cycles;\n let finalTasks = tasks;\n\n // Filter out archived entities by default (EARS-18)\n if (!showArchived) {\n finalCycles = cycles.filter(cycle => cycle.status !== 'archived');\n finalTasks = tasks.filter(task => task.status !== 'archived');\n }\n\n if (filters && (filters.cycleId || filters.taskId || filters.packageName)) {\n const filtered = this.analyzer.filterEntities(finalCycles, finalTasks, filters);\n finalCycles = filtered.filteredCycles;\n finalTasks = filtered.filteredTasks;\n }\n\n const graph = this.analyzer.analyzeRelationships(finalCycles, finalTasks);\n const result = this.renderer.renderGraph(graph, this.options);\n\n this.cache.set(cacheKey, graph);\n this.metrics.recordGenerationTime(performance.now() - startTime);\n this.metrics.incrementCacheMisses();\n\n return result;\n } catch (error) {\n this.metrics.recordGenerationTime(performance.now() - startTime);\n throw error;\n }\n }\n\n /**\n * Convenience method to generate from .gitgov/ directory\n */\n async generateFromFiles(\n gitgovPath: string = '.gitgov',\n filters?: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n },\n showArchived: boolean = false\n ): Promise<string> {\n const cycles = await this.loadCycleRecords(gitgovPath);\n const tasks = await this.loadTaskRecords(gitgovPath);\n\n return this.generateFromRecords(cycles, tasks, filters, showArchived);\n }\n\n /**\n * Loads all cycle records from the filesystem\n */\n public async loadCycleRecords(gitgovPath: string): Promise<CycleRecord[]> {\n const cyclesDir = path.join(gitgovPath, 'cycles');\n\n try {\n const files = await fs.readdir(cyclesDir);\n const jsonFiles = files.filter(file => file.endsWith('.json'));\n\n const cycles: CycleRecord[] = [];\n\n for (const file of jsonFiles) {\n try {\n const filePath = path.join(cyclesDir, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const record = JSON.parse(content);\n\n // Extract payload from EmbeddedMetadata structure\n if (record.payload && record.payload.id) {\n const cycleRecord = record.payload as CycleRecord;\n // Add file source info for better error reporting\n (cycleRecord as any)._sourceFile = file;\n cycles.push(cycleRecord);\n } else {\n console.warn(`⚠️ Cycle file ${file} missing payload or payload.id`);\n }\n } catch (error) {\n console.warn(`❌ Could not parse cycle file ${file}:`, error instanceof Error ? error.message : String(error));\n }\n }\n\n return cycles;\n } catch (error) {\n if (error instanceof Error && error.message.includes('ENOENT')) {\n console.warn(`⚠️ Cycles directory not found: ${cyclesDir}`);\n console.warn(`💡 Run 'gitgov init' to create the .gitgov directory structure`);\n } else {\n console.warn(`❌ Could not read cycles directory:`, error instanceof Error ? error.message : String(error));\n }\n return [];\n }\n }\n\n /**\n * Loads all task records from the filesystem\n */\n public async loadTaskRecords(gitgovPath: string): Promise<TaskRecord[]> {\n const tasksDir = path.join(gitgovPath, 'tasks');\n\n try {\n const files = await fs.readdir(tasksDir);\n const jsonFiles = files.filter(file => file.endsWith('.json'));\n\n const tasks: TaskRecord[] = [];\n\n for (const file of jsonFiles) {\n try {\n const filePath = path.join(tasksDir, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const record = JSON.parse(content);\n\n // Extract payload from EmbeddedMetadata structure\n if (record.payload && record.payload.id) {\n const taskRecord = record.payload as TaskRecord;\n // Add file source info for better error reporting\n (taskRecord as any)._sourceFile = file;\n\n\n tasks.push(taskRecord);\n } else {\n console.warn(`⚠️ Task file ${file} missing payload or payload.id`);\n }\n } catch (error) {\n console.warn(`❌ Could not parse task file ${file}:`, error instanceof Error ? error.message : String(error));\n }\n }\n\n return tasks;\n } catch (error) {\n if (error instanceof Error && error.message.includes('ENOENT')) {\n console.warn(`⚠️ Tasks directory not found: ${tasksDir}`);\n console.warn(`💡 Run 'gitgov init' to create the .gitgov directory structure`);\n } else {\n console.warn(`❌ Could not read tasks directory:`, error instanceof Error ? error.message : String(error));\n }\n return [];\n }\n }\n\n /**\n * Renders diagram from cached graph\n */\n private renderFromCache(cacheKey: string): string {\n const graph = this.cache.get(cacheKey)!;\n return this.renderer.renderGraph(graph, this.options);\n }\n\n /**\n * Generates cache key for efficient lookups\n */\n private generateCacheKey(cycles: CycleRecord[], tasks: TaskRecord[], showArchived: boolean = false): string {\n // Use Set for O(1) deduplication and consistent ordering\n const cycleIds = [...new Set(cycles.map(c => c.id))].sort();\n const taskIds = [...new Set(tasks.map(t => t.id))].sort();\n\n const cycleHash = this.hashArray(cycleIds);\n const taskHash = this.hashArray(taskIds);\n const optionsHash = this.hashString(JSON.stringify(this.options));\n const archivedFlag = showArchived ? 'with-archived' : 'no-archived';\n\n return `diagram:${cycleHash}-${taskHash}-${optionsHash}-${archivedFlag}`;\n }\n\n /**\n * Efficient hash function for arrays\n */\n private hashArray(items: string[]): string {\n let hash = 0;\n for (const item of items) {\n hash = ((hash << 5) - hash) + this.hashString(item);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash.toString(36);\n }\n\n /**\n * Simple hash function for strings\n */\n private hashString(str: string): number {\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; // Convert to 32bit integer\n }\n return hash;\n }\n\n\n\n /**\n * Get performance metrics\n */\n getMetrics() {\n return this.metrics.getStats();\n }\n}\n","// Types\nexport type {\n CodeSnippet,\n Detector,\n DetectorConfig,\n DetectorName,\n FindingCategory,\n FindingSeverity,\n Finding,\n LlmDetector,\n LlmDetectorConfig,\n LlmRawFinding,\n FindingDetectorConfig,\n QuotaType,\n RegexRule,\n} from \"./types\";\n\n// Module\nexport { FindingDetectorModule } from \"./finding_detector\";\n\n// Detectors\nexport { RegexDetector } from \"./detectors/regex_detector\";\nexport { HeuristicDetector } from \"./detectors/heuristic_detector\";\nexport { HttpLlmDetector } from \"./detectors/http_llm_detector\";\n\n// Rules\nexport { REGEX_RULES } from \"./rules/regex_rules\";\n","import type { RegexRule } from \"../types\";\n\nexport const REGEX_RULES: RegexRule[] = [\n // === PII ===\n {\n id: \"PII-001\",\n pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/g,\n category: \"pii-email\",\n severity: \"high\",\n message: \"Email address detected in source code\",\n suggestion: \"Move to configuration or environment variable\",\n legalReference: \"GDPR Art. 4(1)\",\n },\n {\n id: \"PII-002\",\n pattern: /(\\+?\\d{1,3}[-.\\s]?)?\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}/g,\n category: \"pii-phone\",\n severity: \"medium\",\n message: \"Phone number pattern detected\",\n suggestion: \"Avoid hardcoding personal phone numbers\",\n },\n {\n id: \"PII-003\",\n pattern: /\\b(?:\\d{4}[-\\s]?){3}\\d{4}\\b/g,\n category: \"pii-financial\",\n severity: \"critical\",\n message: \"Potential credit card number detected\",\n suggestion: \"Never store credit card numbers in source code\",\n legalReference: \"PCI-DSS, GDPR Art. 32\",\n },\n {\n id: \"PII-004\",\n pattern: /\\b\\d{3}-\\d{2}-\\d{4}\\b/g,\n category: \"pii-generic\",\n severity: \"critical\",\n message: \"US Social Security Number pattern detected\",\n suggestion: \"SSNs must never be stored in source code\",\n },\n {\n id: \"PII-005\",\n pattern: /\\b(ssn|dni|document_number|iban)\\b/gi,\n category: \"pii-generic\",\n severity: \"medium\",\n message: \"Sensitive field name detected\",\n suggestion: \"Review if real data or structure requiring encryption\",\n },\n\n // === SECRETS ===\n {\n id: \"SEC-001\",\n pattern:\n /(?:api[_-]?key|apikey|secret[_-]?key)\\s*[:=]\\s*['\"][^'\"]{20,}['\"]/gi,\n category: \"hardcoded-secret\",\n severity: \"critical\",\n message: \"Hardcoded API key detected\",\n suggestion: \"Use environment variables or secret management\",\n },\n {\n id: \"SEC-002\",\n pattern: /AKIA[0-9A-Z]{16}/g,\n category: \"hardcoded-secret\",\n severity: \"critical\",\n message: \"AWS Access Key ID detected\",\n suggestion: \"Rotate this key immediately and use IAM roles\",\n },\n {\n id: \"SEC-003\",\n pattern: /-----BEGIN (?:RSA |EC )?PRIVATE KEY-----/g,\n category: \"hardcoded-secret\",\n severity: \"critical\",\n message: \"Private key detected in source code\",\n suggestion: \"Never commit private keys. Use secret management.\",\n },\n\n // === LOGGING PII ===\n {\n id: \"LOG-001\",\n pattern:\n /console\\.(log|info|warn|error)\\s*\\([^)]*(?:email|password|ssn|phone|credit)/gi,\n category: \"logging-pii\",\n severity: \"high\",\n message: \"Potential PII being logged\",\n suggestion: \"Sanitize logs to remove personal data\",\n legalReference: \"GDPR Art. 5(1)(f)\",\n },\n];\n","import { createHash, randomUUID } from \"node:crypto\";\nimport type { Detector, Finding, RegexRule } from \"../types\";\nimport { REGEX_RULES } from \"../rules/regex_rules\";\n\nconst MAX_SNIPPET_LENGTH = 300;\n\n/**\n * Generates SHA256 fingerprint for deduplication.\n * Format: hash(ruleId:file:line)\n */\nfunction generateFingerprint(\n ruleId: string,\n file: string,\n line: number\n): string {\n return createHash(\"sha256\").update(`${ruleId}:${file}:${line}`).digest(\"hex\");\n}\n\n/**\n * Truncates snippet to maximum 300 characters.\n */\nfunction truncateSnippet(snippet: string): string {\n if (snippet.length <= MAX_SNIPPET_LENGTH) {\n return snippet;\n }\n return snippet.slice(0, MAX_SNIPPET_LENGTH - 3) + \"...\";\n}\n\n/**\n * Calculates line number (1-based) given an index in content.\n */\nfunction getLineNumber(content: string, index: number): number {\n return content.slice(0, index).split(\"\\n\").length;\n}\n\n/**\n * Extracts snippet from line where match occurs.\n */\nfunction extractSnippet(content: string, matchIndex: number): string {\n const lines = content.split(\"\\n\");\n const lineNumber = getLineNumber(content, matchIndex);\n const line = lines[lineNumber - 1] || \"\";\n return truncateSnippet(line.trim());\n}\n\n/**\n * Regex-based detector for PII and secrets.\n * Tier: Free (always available)\n * Confidence: 1.0 (deterministic)\n */\nexport class RegexDetector implements Detector {\n readonly name = \"regex\" as const;\n private rules: RegexRule[];\n\n constructor(ruleIds?: string[]) {\n if (ruleIds && ruleIds.length > 0) {\n this.rules = REGEX_RULES.filter((r) => ruleIds.includes(r.id));\n } else {\n this.rules = REGEX_RULES;\n }\n }\n\n async detect(content: string, filePath: string): Promise<Finding[]> {\n const findings: Finding[] = [];\n\n for (const rule of this.rules) {\n // Reset regex lastIndex for global patterns\n const pattern = new RegExp(rule.pattern.source, rule.pattern.flags);\n\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(content)) !== null) {\n const line = getLineNumber(content, match.index);\n const snippet = extractSnippet(content, match.index);\n\n const finding: Finding = {\n id: randomUUID(),\n ruleId: rule.id,\n category: rule.category,\n severity: rule.severity,\n file: filePath,\n line,\n snippet,\n message: rule.message,\n detector: this.name,\n fingerprint: generateFingerprint(rule.id, filePath, line),\n confidence: 1.0,\n };\n if (rule.suggestion) finding.suggestion = rule.suggestion;\n if (rule.legalReference) finding.legalReference = rule.legalReference;\n findings.push(finding);\n }\n }\n\n return findings;\n }\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport type { Detector, FindingCategory, FindingSeverity, Finding } from \"../types\";\n\nconst MAX_SNIPPET_LENGTH = 300;\n\n// Pattern for HEUR-001: Sensitive variable names\nconst SENSITIVE_VAR_PATTERN =\n /\\b(user|customer|client|employee|patient)(_)?(email|phone|ssn|address|creditcard|password)\\b/gi;\n\n// Pattern for HEUR-002: Logging of user/customer objects\nconst LOGGING_PATTERN =\n /console\\.(log|info|debug|warn)\\s*\\([^)]*\\b(user|customer|request\\.body|formData)\\b/gi;\n\n// Pattern for HEUR-003: Serialization of sensitive objects\nconst SERIALIZE_PATTERN =\n /JSON\\.stringify\\s*\\([^)]*\\b(user|customer|profile|account)\\b/gi;\n\ninterface HeuristicRule {\n id: string;\n pattern: RegExp;\n category: FindingCategory;\n severity: FindingSeverity;\n confidence: number;\n message: string;\n suggestion?: string;\n}\n\nconst HEURISTIC_RULES: HeuristicRule[] = [\n {\n id: \"HEUR-001\",\n pattern: SENSITIVE_VAR_PATTERN,\n category: \"pii-generic\",\n severity: \"medium\",\n confidence: 0.7,\n message: \"Sensitive variable name detected\",\n suggestion: \"Consider if this variable contains actual PII\",\n },\n {\n id: \"HEUR-002\",\n pattern: LOGGING_PATTERN,\n category: \"logging-pii\",\n severity: \"medium\",\n confidence: 0.6,\n message: \"Logging of potentially sensitive object detected\",\n suggestion: \"Sanitize logged objects to remove PII\",\n },\n {\n id: \"HEUR-003\",\n pattern: SERIALIZE_PATTERN,\n category: \"third-party-transfer\",\n severity: \"low\",\n confidence: 0.5,\n message: \"JSON serialization of potentially sensitive object\",\n suggestion: \"Ensure sensitive fields are excluded before serialization\",\n },\n];\n\n/**\n * Generates SHA256 fingerprint for deduplication.\n */\nfunction generateFingerprint(\n ruleId: string,\n file: string,\n line: number\n): string {\n return createHash(\"sha256\").update(`${ruleId}:${file}:${line}`).digest(\"hex\");\n}\n\n/**\n * Truncates snippet to maximum 300 characters.\n */\nfunction truncateSnippet(snippet: string): string {\n if (snippet.length <= MAX_SNIPPET_LENGTH) {\n return snippet;\n }\n return snippet.slice(0, MAX_SNIPPET_LENGTH - 3) + \"...\";\n}\n\n/**\n * Calculates line number (1-based) given an index in content.\n */\nfunction getLineNumber(content: string, index: number): number {\n return content.slice(0, index).split(\"\\n\").length;\n}\n\n/**\n * Extracts snippet from line where match occurs.\n */\nfunction extractSnippet(content: string, matchIndex: number): string {\n const lines = content.split(\"\\n\");\n const lineNumber = getLineNumber(content, matchIndex);\n const line = lines[lineNumber - 1] || \"\";\n return truncateSnippet(line.trim());\n}\n\n/**\n * Heuristic detector for complex PII patterns.\n * Tier: Trial+ (requires enablement)\n * Confidence: 0.5-0.7 (probabilistic)\n */\nexport class HeuristicDetector implements Detector {\n readonly name = \"heuristic\" as const;\n\n async detect(content: string, filePath: string): Promise<Finding[]> {\n const findings: Finding[] = [];\n\n for (const rule of HEURISTIC_RULES) {\n // Reset regex lastIndex for global patterns\n const pattern = new RegExp(rule.pattern.source, rule.pattern.flags);\n\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(content)) !== null) {\n const line = getLineNumber(content, match.index);\n const snippet = extractSnippet(content, match.index);\n\n const finding: Finding = {\n id: randomUUID(),\n ruleId: rule.id,\n category: rule.category,\n severity: rule.severity,\n file: filePath,\n line,\n snippet,\n message: rule.message,\n detector: this.name,\n fingerprint: generateFingerprint(rule.id, filePath, line),\n confidence: rule.confidence,\n };\n if (rule.suggestion) finding.suggestion = rule.suggestion;\n findings.push(finding);\n }\n }\n\n return findings;\n }\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport type {\n CodeSnippet,\n FindingCategory,\n Finding,\n LlmDetector,\n LlmRawFinding,\n} from \"../types\";\n\nconst MAX_SNIPPET_LENGTH = 300;\n\n/**\n * Generates SHA256 fingerprint for deduplication.\n * Format: hash(ruleId:file:line)\n */\nfunction generateFingerprint(\n ruleId: string,\n file: string,\n line: number\n): string {\n return createHash(\"sha256\").update(`${ruleId}:${file}:${line}`).digest(\"hex\");\n}\n\n/**\n * Truncates snippet to maximum 300 characters.\n */\nfunction truncateSnippet(snippet: string): string {\n if (snippet.length <= MAX_SNIPPET_LENGTH) {\n return snippet;\n }\n return snippet.slice(0, MAX_SNIPPET_LENGTH - 3) + \"...\";\n}\n\n/**\n * Validates if a category string is a valid FindingCategory.\n */\nfunction isValidCategory(category: string): category is FindingCategory {\n const validCategories: FindingCategory[] = [\n \"pii-email\",\n \"pii-phone\",\n \"pii-financial\",\n \"pii-health\",\n \"pii-generic\",\n \"hardcoded-secret\",\n \"logging-pii\",\n \"tracking-cookie\",\n \"tracking-analytics-id\",\n \"unencrypted-storage\",\n \"third-party-transfer\",\n \"unknown-risk\",\n ];\n return validCategories.includes(category as FindingCategory);\n}\n\n/**\n * HTTP-based LLM detector for semantic PII analysis.\n * Tier: Premium (requires API key and quota)\n * Confidence: 0.9 (LLM-confirmed)\n *\n * Implements EARS-24: Reads API key from GITGOV_LLM_API_KEY env var\n * Implements EARS-25: Uses Bearer token authentication\n */\nexport class HttpLlmDetector implements LlmDetector {\n private endpoint: string;\n private apiKey: string;\n\n constructor(endpoint: string, apiKey: string) {\n this.endpoint = endpoint;\n this.apiKey = apiKey;\n }\n\n /**\n * Analyzes code snippets with LLM for semantic PII detection.\n * Implements EARS-18: Send candidates to LLM when quota available\n * Implements EARS-19: Normalize LLM response to Finding format\n */\n async analyzeSnippets(snippets: CodeSnippet[]): Promise<Finding[]> {\n if (snippets.length === 0) {\n return [];\n }\n\n const response = await fetch(this.endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({ snippets }),\n });\n\n if (!response.ok) {\n throw new Error(`LLM API error: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as { findings: LlmRawFinding[] };\n return this.normalizeFindings(data.findings);\n }\n\n /**\n * Normalizes raw LLM findings to Finding format.\n */\n private normalizeFindings(rawFindings: LlmRawFinding[]): Finding[] {\n return rawFindings.map((raw) => {\n const category: FindingCategory = isValidCategory(raw.category)\n ? raw.category\n : \"unknown-risk\";\n\n const finding: Finding = {\n id: randomUUID(),\n ruleId: raw.ruleId ?? \"LLM-001\",\n category,\n severity: raw.severity,\n file: raw.file,\n line: raw.line,\n snippet: truncateSnippet(raw.snippet ?? \"\"),\n message: raw.message,\n detector: \"llm\",\n fingerprint: generateFingerprint(\n raw.ruleId ?? \"LLM-001\",\n raw.file,\n raw.line\n ),\n confidence: raw.confidence ?? 0.9,\n };\n\n if (raw.suggestion) finding.suggestion = raw.suggestion;\n if (raw.legalReference) finding.legalReference = raw.legalReference;\n\n return finding;\n });\n }\n}\n","import type {\n CodeSnippet,\n Detector,\n Finding,\n LlmDetector,\n LlmDetectorConfig,\n FindingDetectorConfig,\n} from \"./types\";\nimport { RegexDetector } from \"./detectors/regex_detector\";\nimport { HeuristicDetector } from \"./detectors/heuristic_detector\";\nimport { HttpLlmDetector } from \"./detectors/http_llm_detector\";\n\n/**\n * Finding Detector Module - Central component for sensitive data detection.\n *\n * Architecture: Two-phase detection\n * - Phase 1: Local detection (regex + heuristic) - always runs\n * - Phase 2: Remote LLM analysis - only for low-confidence candidates\n *\n * Implements EARS-14: Execute Phase 1 before Phase 2\n * Implements EARS-16: Deduplicate by SHA256 fingerprint\n * Implements EARS-17: Work with local-only detection when no LLM\n * Implements EARS-23: Truncate snippets to 300 chars\n */\nexport class FindingDetectorModule {\n private localDetectors: Detector[] = [];\n private llmDetector?: LlmDetector;\n private llmConfig?: LlmDetectorConfig;\n\n /**\n * Constructs the module with graceful degradation.\n * Without config -> only RegexDetector (Free tier).\n */\n constructor(config?: FindingDetectorConfig) {\n // RegexDetector always available (Free tier)\n if (config?.regex?.enabled === false) {\n // Explicitly disabled\n } else {\n this.localDetectors.push(new RegexDetector(config?.regex?.rules));\n }\n\n // HeuristicDetector if enabled (Trial+ tier)\n if (config?.heuristic?.enabled) {\n this.localDetectors.push(new HeuristicDetector());\n }\n\n // LlmDetector if enabled and configured (Premium tier)\n if (config?.llm?.enabled && config.llm.endpoint) {\n this.llmConfig = config.llm;\n const apiKey = process.env[\"GITGOV_LLM_API_KEY\"];\n if (apiKey) {\n this.llmDetector = new HttpLlmDetector(config.llm.endpoint, apiKey);\n }\n // Graceful degradation: no API key -> local-only detection\n }\n }\n\n /**\n * Detects PII and secrets in file content.\n *\n * Flow:\n * 1. Run all enabled local detectors (Phase 1)\n * 2. Extract candidates with confidence < 0.8\n * 3. If LLM enabled and quota OK, analyze candidates (Phase 2)\n * 4. Merge and deduplicate by fingerprint\n */\n async detect(content: string, filePath: string): Promise<Finding[]> {\n // Phase 1: Local detection\n const localFindings = await this.runLocalDetectors(content, filePath);\n\n // Phase 2: LLM analysis (if available)\n let llmFindings: Finding[] = [];\n if (this.llmDetector && this.checkQuota()) {\n const candidates = this.extractCandidates(localFindings, content, filePath);\n if (candidates.length > 0) {\n try {\n llmFindings = await this.llmDetector.analyzeSnippets(candidates);\n this.decrementQuota(candidates.length);\n } catch {\n // Graceful degradation: LLM error -> continue with local findings\n }\n }\n }\n\n // Merge and deduplicate\n return this.deduplicateByFingerprint([...localFindings, ...llmFindings]);\n }\n\n /**\n * Runs all local detectors and collects findings.\n */\n private async runLocalDetectors(\n content: string,\n filePath: string\n ): Promise<Finding[]> {\n const results = await Promise.all(\n this.localDetectors.map((d) => d.detect(content, filePath))\n );\n return results.flat();\n }\n\n /**\n * Extracts CodeSnippets from low-confidence findings for LLM analysis.\n * Includes 2 lines of context before and after.\n * Implements EARS-15: Extract candidates with confidence < 0.8\n */\n private extractCandidates(\n findings: Finding[],\n content: string,\n filePath: string\n ): CodeSnippet[] {\n const lines = content.split(\"\\n\");\n const lang = this.detectLanguage(filePath);\n\n return findings\n .filter((f) => f.confidence < 0.8)\n .map((f) => ({\n file: filePath,\n lineStart: Math.max(1, f.line - 2),\n lineEnd: Math.min(lines.length, f.line + 2),\n language: lang,\n content: lines.slice(Math.max(0, f.line - 3), f.line + 2).join(\"\\n\"),\n heuristicTags: [f.category, f.detector],\n }));\n }\n\n /**\n * Checks if LLM quota is available.\n * Implements EARS-20: Reject when trial expired\n * Implements EARS-21: Reject when remainingUses is zero\n */\n private checkQuota(): boolean {\n if (!this.llmConfig) return false;\n\n if (this.llmConfig.quotaType === \"unlimited\") return true;\n\n if (this.llmConfig.quotaType === \"trial\") {\n if (this.llmConfig.expiresAt) {\n const expired = new Date(this.llmConfig.expiresAt) < new Date();\n if (expired) return false;\n }\n }\n\n return (this.llmConfig.remainingUses ?? 0) > 0;\n }\n\n /**\n * Decrements quota after successful LLM call.\n * Implements EARS-22: Decrement remainingUses after successful call\n */\n private decrementQuota(count: number): void {\n if (this.llmConfig?.remainingUses !== undefined) {\n this.llmConfig.remainingUses = Math.max(\n 0,\n this.llmConfig.remainingUses - count\n );\n }\n }\n\n /**\n * Deduplicates findings by SHA256 fingerprint.\n */\n private deduplicateByFingerprint(findings: Finding[]): Finding[] {\n const seen = new Set<string>();\n return findings.filter((f) => {\n if (seen.has(f.fingerprint)) return false;\n seen.add(f.fingerprint);\n return true;\n });\n }\n\n /**\n * Detects programming language based on file extension.\n */\n private detectLanguage(filePath: string): string {\n const ext = filePath.split(\".\").pop()?.toLowerCase();\n const map: Record<string, string> = {\n ts: \"typescript\",\n tsx: \"typescript\",\n js: \"javascript\",\n jsx: \"javascript\",\n py: \"python\",\n go: \"go\",\n java: \"java\",\n rs: \"rust\",\n rb: \"ruby\",\n };\n return map[ext ?? \"\"] ?? \"unknown\";\n }\n}\n","// Main module\nexport { SourceAuditorModule } from \"./source_auditor\";\n\n// Internal components (exported for testing/extension)\nexport { ScopeSelector } from \"./scope_selector\";\nexport { ScoringEngine } from \"./scoring_engine\";\nexport { WaiverReader } from \"./waiver_reader\";\nexport { WaiverWriter } from \"./waiver_writer\";\n\n// Types\nexport type {\n // Target and Scope types\n AuditTarget,\n CodeScope,\n JiraScope,\n GitgovScope,\n AuditScope,\n // Output/Display types\n GroupByOption,\n OutputFormat,\n FailOnSeverity,\n // File content types (direct audit mode)\n FileContent,\n AuditContentsInput,\n // Core interfaces\n SourceAuditorDependencies,\n ScopeConfig,\n AuditOptions,\n AuditResult,\n AuditSummary,\n WaiverStatus,\n WaiverMetadata,\n ActiveWaiver,\n CreateWaiverOptions,\n IWaiverReader,\n} from \"./types\";\n","import type { ScopeConfig, ScopeSelectorDependencies } from \"./types\";\nimport type { IGitModule } from \"../git\";\nimport type { FileLister } from \"../file_lister\";\n\n/**\n * Internal component for selecting files based on glob patterns.\n * Instantiated internally by SourceAuditorModule with injected dependencies.\n *\n * Store Backends Epic: Uses FileLister abstraction instead of direct fs access.\n */\nexport class ScopeSelector {\n private fileLister: FileLister;\n private gitModule: IGitModule | undefined;\n\n constructor(deps: ScopeSelectorDependencies) {\n this.fileLister = deps.fileLister;\n if (deps.gitModule) {\n this.gitModule = deps.gitModule;\n }\n }\n\n /**\n * Selects files matching include patterns, excluding those matching exclude patterns.\n * Automatically respects .gitignore patterns from the project root.\n * If scope.changedSince is set and gitModule is available, only returns files changed since that commit.\n * @param scope - Include and exclude glob patterns, optional changedSince commit\n * @param _baseDir - Base directory (unused - FileLister has its own cwd)\n * @returns Array of file paths relative to FileLister's cwd\n */\n async selectFiles(scope: ScopeConfig, _baseDir: string): Promise<string[]> {\n if (scope.include.length === 0) {\n return [];\n }\n\n // Load .gitignore patterns from project root\n const gitignorePatterns = await this.loadGitignorePatterns();\n\n // Merge: gitignore patterns + user-provided excludes\n const allExcludes = [...gitignorePatterns, ...scope.exclude];\n\n // If changedSince is set and gitModule is available, use incremental mode\n if (scope.changedSince && this.gitModule) {\n return this.selectChangedFiles(scope.changedSince, scope.include, allExcludes);\n }\n\n // Full mode: use glob patterns via FileLister\n const files = await this.fileLister.list(scope.include, {\n ignore: allExcludes,\n onlyFiles: true,\n absolute: false,\n });\n\n return files.sort();\n }\n\n /**\n * Selects files changed since a specific commit (incremental mode).\n * Requires gitModule to be available.\n * Includes: git diff, modified files, untracked files.\n */\n private async selectChangedFiles(\n sinceCommit: string,\n includePatterns: string[],\n excludes: string[]\n ): Promise<string[]> {\n if (!this.gitModule) {\n // GitModule not available - fall back to empty\n return [];\n }\n\n const changedFiles = new Set<string>();\n\n try {\n // 1. Files changed between sinceCommit and HEAD\n const diffResult = await this.gitModule.exec('git', ['diff', '--name-only', `${sinceCommit}..HEAD`]);\n if (diffResult.exitCode === 0) {\n diffResult.stdout.split(\"\\n\").filter(Boolean).forEach((f) => changedFiles.add(f));\n }\n\n // 2. Currently modified files (staged and unstaged)\n const statusResult = await this.gitModule.exec('git', ['status', '--porcelain']);\n if (statusResult.exitCode === 0) {\n statusResult.stdout.split(\"\\n\").filter(Boolean).forEach((line) => {\n // Format: \"XY filename\" where X=staged, Y=unstaged\n const file = line.slice(3).trim();\n if (file) changedFiles.add(file);\n });\n }\n\n // 3. Untracked files\n const untrackedResult = await this.gitModule.exec('git', ['ls-files', '--others', '--exclude-standard']);\n if (untrackedResult.exitCode === 0) {\n untrackedResult.stdout.split(\"\\n\").filter(Boolean).forEach((f) => changedFiles.add(f));\n }\n } catch {\n // Git commands failed - fall back to empty\n return [];\n }\n\n // Filter changed files by include patterns and excludes using FileLister\n const allChangedFiles = Array.from(changedFiles);\n if (allChangedFiles.length === 0) {\n return [];\n }\n\n // Use FileLister to filter by patterns - list matching include patterns then intersect\n const matchingFiles = await this.fileLister.list(includePatterns, {\n ignore: excludes,\n onlyFiles: true,\n absolute: false,\n });\n\n // Intersect: only files that are both changed AND match patterns\n const matchingSet = new Set(matchingFiles);\n const filtered = allChangedFiles.filter(f => matchingSet.has(f));\n\n return filtered.sort();\n }\n\n /**\n * Reads .gitignore and converts patterns to glob format.\n * Returns empty array if .gitignore doesn't exist.\n */\n private async loadGitignorePatterns(): Promise<string[]> {\n try {\n const exists = await this.fileLister.exists(\".gitignore\");\n if (!exists) {\n return [];\n }\n const content = await this.fileLister.read(\".gitignore\");\n return this.parseGitignore(content);\n } catch {\n // No .gitignore found or read error - continue without exclusions\n return [];\n }\n }\n\n /**\n * Parses .gitignore content into glob patterns.\n * Handles comments, empty lines, and directory patterns.\n */\n private parseGitignore(content: string): string[] {\n return content\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith(\"#\"))\n .map((pattern) => {\n // Convert gitignore pattern to glob pattern\n // Directory pattern (ends with /) -> match recursively\n if (pattern.endsWith(\"/\")) {\n return `**/${pattern}**`;\n }\n // Pattern without slash -> can match at any level\n if (!pattern.includes(\"/\")) {\n return `**/${pattern}`;\n }\n // Pattern with slash -> relative to root\n return pattern;\n });\n }\n}\n","import type { Finding } from \"../finding_detector/types\";\n\n/**\n * Internal component for applying scoring rules to findings.\n * Not injectable - instantiated internally by SourceAuditorModule.\n *\n * Currently a pass-through; scoring rules will be added in future cycles.\n */\nexport class ScoringEngine {\n /**\n * Applies scoring rules to findings.\n * Currently returns findings unchanged (future enhancement).\n * @param findings - Findings to score\n * @returns Scored findings (same as input for now)\n */\n score(findings: Finding[]): Finding[] {\n // Future: Apply weighted scoring based on:\n // - Severity weights\n // - Category priorities\n // - Context-aware adjustments\n return findings;\n }\n}\n","import type { Finding, DetectorName } from \"../finding_detector/types\";\nimport type {\n SourceAuditorDependencies,\n ScopeSelectorDependencies,\n AuditOptions,\n AuditResult,\n AuditSummary,\n AuditContentsInput,\n FileContent,\n ActiveWaiver,\n} from \"./types\";\nimport { ScopeSelector } from \"./scope_selector\";\nimport { ScoringEngine } from \"./scoring_engine\";\n\nconst BATCH_SIZE = 100;\n\n/**\n * Source Auditor Module - Main audit pipeline for source code.\n *\n * Two entry points:\n * - auditContents(): Pure mode - receives FileContent[] directly (no I/O)\n * - audit(): FileLister mode - discovers and reads files, then delegates to auditContents()\n *\n * Pipeline: Detect -> Filter -> Score -> Output\n *\n * Store Backends Epic: FileLister abstracts file access for serverless compatibility.\n * auditContents() enables direct mode without any FileLister (API, pre-loaded, etc.)\n */\nexport class SourceAuditorModule {\n private scopeSelector?: ScopeSelector;\n private scoringEngine: ScoringEngine;\n\n /**\n * Creates module instance with injected dependencies.\n * Only findingDetector is required. fileLister/waiverReader are needed only for audit().\n */\n constructor(private deps: SourceAuditorDependencies) {\n // Only create ScopeSelector if FileLister is available (needed for audit())\n if (deps.fileLister) {\n const scopeDeps: ScopeSelectorDependencies = {\n fileLister: deps.fileLister,\n };\n if (deps.gitModule) {\n scopeDeps.gitModule = deps.gitModule;\n }\n this.scopeSelector = new ScopeSelector(scopeDeps);\n }\n this.scoringEngine = new ScoringEngine();\n }\n\n /**\n * Pure audit mode - receives pre-loaded file contents directly.\n * No FileLister or I/O needed.\n *\n * Use cases:\n * - API/serverless: files fetched from GitHub API, S3, etc.\n * - Testing: files created in memory\n * - Direct: caller already has file contents\n */\n async auditContents(input: AuditContentsInput): Promise<AuditResult> {\n const startTime = Date.now();\n\n if (input.files.length === 0) {\n return this.createEmptyResult(startTime);\n }\n\n // Step 1: Detection on pre-loaded content\n const { findings, scannedLines, detectors } = await this.runDetectionOnContents(input.files);\n\n // Step 2: Filter by Waivers (if provided)\n const waivers = input.waivers ?? [];\n const { newFindings, acknowledgedCount } = this.filterByWaivers(findings, waivers);\n\n // Step 3: Scoring\n const scoredFindings = this.scoringEngine.score(newFindings);\n\n // Step 4: Generate Result\n const duration = Date.now() - startTime;\n\n return {\n findings: scoredFindings,\n summary: this.calculateSummary(scoredFindings),\n scannedFiles: input.files.length,\n scannedLines,\n duration,\n detectors: [...new Set(detectors)],\n waivers: {\n acknowledged: acknowledgedCount,\n new: scoredFindings.length,\n },\n };\n }\n\n /**\n * FileLister-based audit - discovers files via scope selection, reads them,\n * then delegates to auditContents().\n *\n * Requires fileLister in dependencies. Use auditContents() for direct mode.\n */\n async audit(options: AuditOptions): Promise<AuditResult> {\n if (!this.deps.fileLister || !this.scopeSelector) {\n throw new Error('FileLister required for audit(). Use auditContents() for direct mode.');\n }\n\n const startTime = Date.now();\n const baseDir = options.baseDir || process.cwd();\n\n // Step 1: Scope Selection\n const filePaths = await this.scopeSelector.selectFiles(options.scope, baseDir);\n\n if (filePaths.length === 0) {\n return this.createEmptyResult(startTime);\n }\n\n // Step 2: Read file contents via FileLister\n const files: FileContent[] = [];\n for (const filePath of filePaths) {\n try {\n const content = await this.deps.fileLister.read(filePath);\n files.push({ path: filePath, content });\n } catch {\n // Graceful degradation: skip unreadable files\n continue;\n }\n }\n\n // Step 3: Load Waivers\n let waivers: ActiveWaiver[] = [];\n if (this.deps.waiverReader) {\n try {\n waivers = await this.deps.waiverReader.loadActiveWaivers();\n } catch {\n // Graceful degradation: continue without waivers\n }\n }\n\n // Step 4: Delegate to pure pipeline\n const result = await this.auditContents({ files, waivers });\n\n // Adjust duration to include scope selection + file reading\n return {\n ...result,\n duration: Date.now() - startTime,\n };\n }\n\n /**\n * Runs detection on pre-loaded file contents, processing in batches.\n */\n private async runDetectionOnContents(\n files: FileContent[]\n ): Promise<{\n findings: Finding[];\n scannedLines: number;\n detectors: DetectorName[];\n }> {\n const allFindings: Finding[] = [];\n const detectors: DetectorName[] = [];\n let scannedLines = 0;\n\n const batches = this.createBatches(files, files.length > 1000 ? BATCH_SIZE : files.length);\n\n for (const batch of batches) {\n for (const file of batch) {\n try {\n scannedLines += file.content.split(\"\\n\").length;\n\n const fileFindings = await this.deps.findingDetector.detect(file.content, file.path);\n\n for (const finding of fileFindings) {\n allFindings.push(finding);\n if (!detectors.includes(finding.detector)) {\n detectors.push(finding.detector);\n }\n }\n } catch {\n // Graceful degradation: skip files that fail detection\n continue;\n }\n }\n }\n\n return { findings: allFindings, scannedLines, detectors };\n }\n\n /**\n * Creates batches of files for processing.\n */\n private createBatches<T>(items: T[], batchSize: number): T[][] {\n const batches: T[][] = [];\n for (let i = 0; i < items.length; i += batchSize) {\n batches.push(items.slice(i, i + batchSize));\n }\n return batches;\n }\n\n /**\n * Filters findings that already have active waivers.\n * @returns new findings and count of acknowledged\n */\n private filterByWaivers(\n findings: Finding[],\n waivers: ActiveWaiver[]\n ): { newFindings: Finding[]; acknowledgedCount: number } {\n const waiverFingerprints = new Set(waivers.map((w) => w.fingerprint));\n const newFindings = findings.filter(\n (f) => !waiverFingerprints.has(f.fingerprint)\n );\n const acknowledgedCount = findings.length - newFindings.length;\n return { newFindings, acknowledgedCount };\n }\n\n /**\n * Calculates summary of findings by severity, category, and detector.\n */\n private calculateSummary(findings: Finding[]): AuditSummary {\n const summary: AuditSummary = {\n total: findings.length,\n bySeverity: { critical: 0, high: 0, medium: 0, low: 0, info: 0 },\n byCategory: {},\n byDetector: { regex: 0, heuristic: 0, llm: 0 },\n };\n\n for (const finding of findings) {\n summary.bySeverity[finding.severity]++;\n summary.byCategory[finding.category] =\n (summary.byCategory[finding.category] || 0) + 1;\n summary.byDetector[finding.detector]++;\n }\n\n return summary;\n }\n\n /**\n * Creates empty result for when no files are selected.\n */\n private createEmptyResult(startTime: number): AuditResult {\n return {\n findings: [],\n summary: {\n total: 0,\n bySeverity: { critical: 0, high: 0, medium: 0, low: 0, info: 0 },\n byCategory: {},\n byDetector: { regex: 0, heuristic: 0, llm: 0 },\n },\n scannedFiles: 0,\n scannedLines: 0,\n duration: Date.now() - startTime,\n detectors: [],\n waivers: { acknowledged: 0, new: 0 },\n };\n }\n}\n","import type { IFeedbackAdapter } from \"../adapters/feedback_adapter\";\nimport type { FeedbackRecord } from \"../record_types\";\nimport type { WaiverMetadata, ActiveWaiver, IWaiverReader } from \"./types\";\n\n/**\n * Reads active waivers from FeedbackRecords.\n * Uses FeedbackAdapter for access to feedback data.\n */\nexport class WaiverReader implements IWaiverReader {\n constructor(private feedbackAdapter: IFeedbackAdapter) {}\n\n /**\n * Loads all active waivers (non-expired).\n * Filters by type: \"approval\" and metadata.fingerprint present.\n */\n async loadActiveWaivers(): Promise<ActiveWaiver[]> {\n const allFeedback = await this.feedbackAdapter.getAllFeedback();\n const now = new Date();\n const result: ActiveWaiver[] = [];\n\n for (const f of allFeedback) {\n if (f.type !== \"approval\" || !f.metadata) continue;\n const meta = f.metadata as WaiverMetadata;\n if (typeof meta.fingerprint !== \"string\") continue;\n if (meta.expiresAt && new Date(meta.expiresAt) <= now) continue;\n\n const waiver: ActiveWaiver = {\n fingerprint: meta.fingerprint,\n ruleId: meta.ruleId,\n feedback: f as FeedbackRecord<WaiverMetadata>,\n };\n if (meta.expiresAt) {\n waiver.expiresAt = new Date(meta.expiresAt);\n }\n result.push(waiver);\n }\n\n return result;\n }\n\n /**\n * Checks if a specific finding has an active waiver.\n */\n async hasActiveWaiver(fingerprint: string): Promise<boolean> {\n const waivers = await this.loadActiveWaivers();\n return waivers.some((w) => w.fingerprint === fingerprint);\n }\n\n /**\n * Gets waivers for a specific ExecutionRecord.\n */\n async getWaiversForExecution(executionId: string): Promise<ActiveWaiver[]> {\n const feedback = await this.feedbackAdapter.getFeedbackByEntity(executionId);\n const now = new Date();\n const result: ActiveWaiver[] = [];\n\n for (const f of feedback) {\n if (f.type !== \"approval\" || !f.metadata) continue;\n const meta = f.metadata as WaiverMetadata;\n if (typeof meta.fingerprint !== \"string\") continue;\n if (meta.expiresAt && new Date(meta.expiresAt) <= now) continue;\n\n const waiver: ActiveWaiver = {\n fingerprint: meta.fingerprint,\n ruleId: meta.ruleId,\n feedback: f as FeedbackRecord<WaiverMetadata>,\n };\n if (meta.expiresAt) {\n waiver.expiresAt = new Date(meta.expiresAt);\n }\n result.push(waiver);\n }\n\n return result;\n }\n}\n","import type { IFeedbackAdapter } from \"../adapters/feedback_adapter\";\nimport type { Finding } from \"../finding_detector/types\";\nimport type { WaiverMetadata, CreateWaiverOptions } from \"./types\";\n\n/**\n * Creates waivers as FeedbackRecords with structured metadata.\n * Uses FeedbackAdapter for signature and event handling.\n */\nexport class WaiverWriter {\n constructor(private feedbackAdapter: IFeedbackAdapter) { }\n\n /**\n * Creates a waiver for a specific finding.\n * The waiver is stored as FeedbackRecord with type: \"approval\".\n */\n async createWaiver(\n options: CreateWaiverOptions,\n actorId: string\n ): Promise<void> {\n const { finding, executionId, justification, expiresAt, relatedTaskId } =\n options;\n\n const metadata: WaiverMetadata = {\n fingerprint: finding.fingerprint,\n ruleId: finding.ruleId,\n file: finding.file,\n line: finding.line,\n };\n\n if (expiresAt) {\n metadata.expiresAt = expiresAt;\n }\n\n if (relatedTaskId) {\n metadata.relatedTaskId = relatedTaskId;\n }\n\n await this.feedbackAdapter.create(\n {\n entityType: \"execution\",\n entityId: executionId,\n type: \"approval\",\n status: \"resolved\",\n content: justification,\n metadata,\n },\n actorId\n );\n }\n\n /**\n * Creates waivers in batch for multiple findings.\n */\n async createWaiversBatch(\n findings: Finding[],\n executionId: string,\n justification: string,\n actorId: string\n ): Promise<void> {\n for (const finding of findings) {\n await this.createWaiver(\n {\n finding,\n executionId,\n justification,\n },\n actorId\n );\n }\n }\n}\n","/**\n * AgentRunner - Agent execution abstraction\n *\n * This module provides backend-agnostic agent execution.\n *\n * IMPORTANT: This module only exports the interface and types.\n * For implementations, use:\n * - @gitgov/core/fs for FsAgentRunner\n *\n * @example\n * ```typescript\n * // Import interface and types\n * import type { IAgentRunner, RunOptions, AgentResponse } from '@gitgov/core';\n *\n * // Import filesystem implementation from fs entry point\n * import { FsAgentRunner } from '@gitgov/core/fs';\n * ```\n */\n\n// Interfaces and handler types (from agent_runner.ts)\nexport type {\n IAgentRunner,\n IAgentLoader,\n ProtocolHandlerRegistry,\n ProtocolHandler,\n RuntimeHandlerRegistry,\n RuntimeHandler,\n} from \"./agent_runner\";\n\n// Pure types (from agent_runner.types.ts)\nexport type {\n RunOptions,\n AgentResponse,\n AgentOutput,\n AgentExecutionContext,\n AgentRunnerDependencies,\n AgentRunnerEvent,\n // Engine types (from protocol)\n Engine,\n EngineType,\n LocalEngine,\n ApiEngine,\n McpEngine,\n CustomEngine,\n AuthType,\n AuthConfig,\n} from \"./agent_runner.types\";\n\n// Errors are part of the public contract\nexport {\n RunnerError,\n AgentNotFoundError,\n FunctionNotExportedError,\n LocalEngineConfigError,\n UnsupportedEngineTypeError,\n EngineConfigError,\n MissingDependencyError,\n RuntimeNotFoundError,\n} from \"./agent_runner.errors\";\n","/**\n * Custom Error Classes for AgentRunnerModule\n *\n * These errors provide typed exceptions for better error handling\n * and diagnostics in the agent runner operations.\n */\n\n/**\n * Base error class for all Runner-related errors\n */\nexport class RunnerError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"RunnerError\";\n Object.setPrototypeOf(this, RunnerError.prototype);\n }\n}\n\n/**\n * Error thrown when an agent file is not found in .gitgov/agents/\n */\nexport class AgentNotFoundError extends RunnerError {\n public readonly agentId: string;\n\n constructor(agentId: string) {\n super(`AgentNotFound: ${agentId}`);\n this.name = \"AgentNotFoundError\";\n this.agentId = agentId;\n Object.setPrototypeOf(this, AgentNotFoundError.prototype);\n }\n}\n\n/**\n * Error thrown when the specified function is not exported from entrypoint\n */\nexport class FunctionNotExportedError extends RunnerError {\n public readonly functionName: string;\n public readonly entrypoint: string;\n\n constructor(functionName: string, entrypoint: string) {\n super(`FunctionNotExported: ${functionName} not found in ${entrypoint}`);\n this.name = \"FunctionNotExportedError\";\n this.functionName = functionName;\n this.entrypoint = entrypoint;\n Object.setPrototypeOf(this, FunctionNotExportedError.prototype);\n }\n}\n\n/**\n * Error thrown when local engine has neither entrypoint nor runtime\n */\nexport class LocalEngineConfigError extends RunnerError {\n constructor() {\n super(\"LocalEngineConfigError: entrypoint or runtime required for execution\");\n this.name = \"LocalEngineConfigError\";\n Object.setPrototypeOf(this, LocalEngineConfigError.prototype);\n }\n}\n\n/**\n * Error thrown when engine.type is not supported\n */\nexport class UnsupportedEngineTypeError extends RunnerError {\n public readonly engineType: string;\n\n constructor(engineType: string) {\n super(`UnsupportedEngineType: ${engineType}`);\n this.name = \"UnsupportedEngineTypeError\";\n this.engineType = engineType;\n Object.setPrototypeOf(this, UnsupportedEngineTypeError.prototype);\n }\n}\n\n/**\n * Error thrown when engine configuration is invalid\n */\nexport class EngineConfigError extends RunnerError {\n public readonly engineType: string;\n public readonly missingField: string;\n\n constructor(engineType: string, missingField: string) {\n super(`EngineConfigError: ${missingField} required for ${engineType}`);\n this.name = \"EngineConfigError\";\n this.engineType = engineType;\n this.missingField = missingField;\n Object.setPrototypeOf(this, EngineConfigError.prototype);\n }\n}\n\n/**\n * Error thrown when a required dependency is missing\n */\nexport class MissingDependencyError extends RunnerError {\n public readonly dependency: string;\n public readonly reason: string;\n\n constructor(dependency: string, reason: string) {\n super(`MissingDependency: ${dependency} ${reason}`);\n this.name = \"MissingDependencyError\";\n this.dependency = dependency;\n this.reason = reason;\n Object.setPrototypeOf(this, MissingDependencyError.prototype);\n }\n}\n\n/**\n * Error thrown when runtime handler is not found in registry\n */\nexport class RuntimeNotFoundError extends RunnerError {\n public readonly runtime: string;\n\n constructor(runtime: string) {\n super(`RuntimeNotFound: ${runtime}`);\n this.name = \"RuntimeNotFoundError\";\n this.runtime = runtime;\n Object.setPrototypeOf(this, RuntimeNotFoundError.prototype);\n }\n}\n"]}