@undefineds.co/xpod 0.3.29 → 0.3.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/authorization/PodAuthorizationResources.d.ts +1 -0
- package/dist/authorization/PodAuthorizationResources.js +36 -4
- package/dist/authorization/PodAuthorizationResources.js.map +1 -1
- package/dist/provision/LocalPodProvisioningService.js +2 -0
- package/dist/provision/LocalPodProvisioningService.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.js +16 -0
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/rdf/PostgresRdfEngine.d.ts +12 -15
- package/dist/storage/rdf/PostgresRdfEngine.js +1040 -150
- package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
- package/dist/storage/rdf/PostgresRdfEngine.jsonld +40 -52
- package/dist/storage/rdf/{RdfLocalQueryEngine.d.ts → RdfQueryExecutor.d.ts} +3 -3
- package/dist/storage/rdf/{RdfLocalQueryEngine.js → RdfQueryExecutor.js} +9 -9
- package/dist/storage/rdf/RdfQueryExecutor.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +5 -5
- package/dist/storage/rdf/RdfSparqlAdapter.js +27 -27
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.d.ts +2 -5
- package/dist/storage/rdf/SolidRdfEngine.js +6 -38
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.jsonld +0 -12
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
- package/dist/storage/rdf/index.d.ts +3 -3
- package/dist/storage/rdf/index.js +6 -6
- package/dist/storage/rdf/index.js.map +1 -1
- package/dist/storage/rdf/models-benchmark.d.ts +9 -9
- package/dist/storage/rdf/models-benchmark.js +23 -23
- package/dist/storage/rdf/models-benchmark.js.map +1 -1
- package/dist/storage/rdf/types.d.ts +5 -5
- package/dist/storage/rdf/types.js.map +1 -1
- package/package.json +1 -1
- package/templates/pod/acp/profile/.acr +21 -0
- package/templates/pod/wac/profile/.acl.hbs +18 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RdfLocalQueryEngine.js","sourceRoot":"","sources":["../../../src/storage/rdf/RdfLocalQueryEngine.ts"],"names":[],"mappings":";;;AAuvFA,4BAEC;AAzvFD,2BAA2C;AAG3C,0CAAwC;AAKxC,yDAA+F;AAyC/F,MAAM,SAAS,GAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACpF,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,WAAW,GAAG,0CAA0C,CAAC;AAC/D,MAAM,WAAW,GAAG,0CAA0C,CAAC;AAyF/D,MAAa,mBAAmB;IAC9B,YACmB,KAAmB,EACnB,SAAwB,EACxB,WAA4B,EAC5B,iBAA8B;QAH9B,UAAK,GAAL,KAAK,CAAc;QACnB,cAAS,GAAT,SAAS,CAAe;QACxB,gBAAW,GAAX,WAAW,CAAiB;QAC5B,sBAAiB,GAAjB,iBAAiB,CAAa;IAC9C,CAAC;IAEG,KAAK,CAAC,KAAoB;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,OAAO,GAAyB;YACpC,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,EAAE;YACR,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,EAAE;YAChB,oBAAoB,EAAE,CAAC;YACvB,4BAA4B,EAAE,CAAC;YAC/B,0BAA0B,EAAE,CAAC;YAC7B,cAAc,EAAE,CAAC;YACjB,iBAAiB,EAAE,CAAC;SACrB,CAAC;QAEF,MAAM,mBAAmB,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACtD,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACnC,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAChD,CAAC,CAAC,KAAK,CAAC,QAAQ;YAChB,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,mBAAmB;gBAC7C,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACT,IAAI,QAAQ,GAAoB,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAC7F,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;QACnF,MAAM,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QACjH,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QACvG,MAAM,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QACzH,IAAI,sBAAsB,GAAG,KAAK,CAAC;QAEnC,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,IAAI,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5E,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7E,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACjG,IAAI,UAA+D,CAAC;YACpE,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,YAAY,GAAG,oBAAoB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACjE,IAAI,WAAW,EAAE,CAAC;oBAChB,UAAU,GAAG,IAAI,CAAC,iBAAkB,CAAC,aAAa,CAChD,YAAY,EACZ,WAA8B,CAC/B,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;oBAChF,UAAU,GAAG;wBACX,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,WAAW;wBACzC,OAAO,EAAE,cAAc,CAAC,OAAO;qBAChC,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,aAAa,GAAG,CAAC,eAAe,IAAI,iBAAiB;gBACzD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAAC;gBACzE,CAAC,CAAC,CAAC,eAAe,IAAI,WAAW;oBACjC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC;oBAC9D,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,aAAa,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAClG,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACnC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;YAC5B,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;YAC3B,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;YACzB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YACxC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,UAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACvF,OAAO,CAAC,iBAAiB,IAAI,aAAa,CAAC,iBAAiB,CAAC;YAC7D,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;gBACvE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,mBAAmB,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC;YAChH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACzE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;YAC9J,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC1C,KAAK;gBACL,OAAO;aACR,CAAC;QACJ,CAAC;QAED,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAChF,MAAM,IAAI,GAAG,eAAe;gBAC1B,CAAC,CAAC,IAAI,CAAC,iBAAkB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,EAAE;oBACtE,UAAU;iBACX,CAAC;gBACF,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,EAAE;oBAC3D,UAAU;iBACX,CAAC,CAAC;YACH,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAC/C,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YACxC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACpD,OAAO,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,iBAAiB,CAAC;YACjE,IAAI,CAAC,eAAe,IAAI,iBAAiB,CAAC,WAAW,EAAE,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,gBAAgB,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7K,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAClE,CAAC,CAAC,sCAAsC;gBACxC,CAAC,CAAC,6BAA6B,CAAC,CAAC;YACnC,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,UAAU;gBACjB,OAAO;aACR,CAAC;QACJ,CAAC;QAED,IAAI,0BAA0B,EAAE,CAAC;YAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YACzF,MAAM,IAAI,GAAG,eAAe;gBAC1B,CAAC,CAAC,IAAI,CAAC,iBAAkB,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,QAAQ,EAAE;oBACnF,UAAU;iBACX,CAAC;gBACF,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,QAAQ,EAAE;oBACxE,UAAU;iBACX,CAAC,CAAC;YACH,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAC/C,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YACxC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACpD,OAAO,CAAC,iBAAiB,IAAI,0BAA0B,CAAC,iBAAiB,CAAC;YAC1E,IAAI,CAAC,eAAe,IAAI,0BAA0B,CAAC,WAAW,EAAE,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,oBAAoB,IAAI,0BAA0B,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9L,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBACrC,CAAC,CAAC,mCAAmC;gBACrC,CAAC,CAAC,6BAA6B,CAAC,CAAC;YACnC,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO;aACR,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAC/F,IAAI,sBAAsB,EAAE,CAAC;YAC3B,MAAM,2BAA2B,GAAG,sBAAsB,CAAC,SAAS;gBAClE,CAAC,CAAC,sBAAsB,CAAC,QAAQ;gBACjC,CAAC,CAAC,gCAAgC,CAAC,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAClF,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,2BAA2B,CAAC,CAAC;YACjF,MAAM,YAAY,GAAG;gBACnB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;gBAC5B,UAAU;gBACV,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,GAAG,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,GAAG,CAAC,sBAAsB,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpH,GAAG,CAAC,sBAAsB,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxH,CAAC;YACF,MAAM,IAAI,GAAG,sBAAsB,CAAC,SAAS;gBAC3C,CAAC,CAAC,eAAe;oBACf,CAAC,CAAC,IAAI,CAAC,iBAAkB,CAAC,sBAAsB,CAAC,2BAA2B,EAAE,YAAY,CAAC;oBAC3F,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC;gBACpF,CAAC,CAAC,eAAe;oBACf,CAAC,CAAC,IAAI,CAAC,iBAAkB,CAAC,0BAA0B,CAAC,2BAA2B,EAAE,YAAY,CAAC;oBAC/F,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAC3F,MAAM,eAAe,GAAG,eAAe;gBACrC,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,4BAA4B;gBAC5F,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC;YACjF,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAChD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACpD,OAAO,CAAC,iBAAiB,IAAI,sBAAsB,CAAC,iBAAiB,CAAC;YACtE,OAAO,CAAC,iBAAiB,IAAI,sBAAsB,CAAC,gBAAgB,CAAC;YACrE,IAAI,CAAC,eAAe,IAAI,sBAAsB,CAAC,WAAW,EAAE,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtH,IAAI,sBAAsB,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,UAAU,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvG,CAAC;YACD,IAAI,sBAAsB,CAAC,WAAW,EAAE,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,SAAS,kBAAkB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;YAC3F,CAAC;YACD,IAAI,sBAAsB,CAAC,gBAAgB,EAAE,CAAC;gBAC5C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,OAAO,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS;gBAChD,CAAC,CAAC,8BAA8B;gBAChC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;oBACrB,CAAC,CAAC,oCAAoC;oBACtC,CAAC,CAAC,8BAA8B,CAAC,CAAC;YACtC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpD,sBAAsB,GAAG,IAAI,CAAC;QAChC,CAAC;aAAM,IAAI,mBAAmB,EAAE,CAAC;YAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAClF,MAAM,WAAW,GAAG;gBAClB,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjH,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpH,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7E,CAAC;YACF,MAAM,IAAI,GAAG,eAAe;gBAC1B,CAAC,CAAC,IAAI,CAAC,iBAAkB,CAAC,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC;gBACjF,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YACvE,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAChD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACpD,OAAO,CAAC,iBAAiB,IAAI,mBAAmB,CAAC,iBAAiB,CAAC;YACnE,IAAI,CAAC,eAAe,IAAI,mBAAmB,CAAC,WAAW,EAAE,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,IAAI,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrK,IAAI,mBAAmB,CAAC,WAAW,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;YACnI,CAAC;YACD,IAAI,mBAAmB,CAAC,cAAc,EAAE,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,mBAAmB,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzL,CAAC;YACD,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAClF,CAAC;YACD,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YACzG,MAAM,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACzD,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAChC,QAAQ,EACR,MAAM,EACN,eAAe,EACf,OAAO,EACP,kBAAkB,CACnB,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChF,CAAC;QAED,KAAK,MAAM,gBAAgB,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACpD,MAAM,aAAa,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YAC/D,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9F,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC5C,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7H,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM;YACR,CAAC;QACH,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YAC3C,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM;YACR,CAAC;QACH,CAAC;QAED,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC7C,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,+BAA+B,CAC9D,KAAK,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,CACpB,CAAC;QACF,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9D,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,cAAc,IAAI,mBAAmB,CAAC,MAAM,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,mBAAmB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,sBAAsB,IAAI,sBAAsB,EAAE,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,sBAAsB,CAAC,gBAAgB,EAAE,CAAC;gBAC1E,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1F,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;aAAM,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACrE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;YACnC,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAClF,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1F,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;aAAM,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC/F,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC;gBACxE,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACrC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;gBACzB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACxC,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrE,OAAO;oBACL,QAAQ,EAAE,EAAE;oBACZ,KAAK,EAAE,UAAU;oBACjB,OAAO;iBACR,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;YACrC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;YACzB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YACpD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvE,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,CAAC,gBAAgB,CAAC;gBAC5B,KAAK,EAAE,UAAU;gBACjB,OAAO;aACR,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,CAAC;YACvC,CAAC,CAAC,OAAO,CAAC,UAAU;YACpB,CAAC,CAAC,kBAAkB,EAAE,gBAAgB;mBACjC,mBAAmB,EAAE,gBAAgB;gBAC1C,CAAC,CAAC,OAAO,CAAC,WAAW;gBACrB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEpB,IACE,KAAK,CAAC,OAAO;eACV,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;eACxB,CAAC,kBAAkB,EAAE,WAAW;eAChC,CAAC,mBAAmB,EAAE,WAAW;eACjC,CAAC,sBAAsB,EAAE,WAAW,EACvC,CAAC;YACD,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YAClG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACrD,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACxE,CAAC,CAAC,QAAQ,CAAC;QAEb,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,mBAAmB,EAAE,cAAc,EAAE,CAAC;YAC3D,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QAED,IACE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC;eACtD,CAAC,kBAAkB,EAAE,gBAAgB;eACrC,CAAC,mBAAmB,EAAE,gBAAgB;eACtC,CAAC,sBAAsB,EAAE,gBAAgB,EAC5C,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS;gBACzC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;QAChC,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;QACxC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACxC,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,OAAO;SACR,CAAC;IACJ,CAAC;IAEO,yBAAyB,CAC/B,OAAyB,EACzB,QAAyB,EACzB,OAAyB,EACzB,OAA6B;QAE7B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,iBAAiB,GAAG,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC5C,MAAM,eAAe,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,KAAK,CAAC;mBACzC,eAAe,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACzE,OAAO;gBACL,KAAK;gBACL,mBAAmB,EAAE,iBAAiB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5D,aAAa,EAAE,QAAQ,CAAC,IAAI;gBAC5B,iBAAiB,EAAE,QAAQ,CAAC,QAAQ;gBACpC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC;aAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,mBAAmB;eAC/C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB;eAChD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa;eACxC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;eACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAC9B,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAChC,CAAC;IAEO,mBAAmB,CACzB,OAAwB,EACxB,QAAyB,EACzB,OAAyB,EACzB,OAA6B;QAE7B,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;QACzF,MAAM,cAAc,GAAG,IAAI,CAAC,mCAAmC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACnG,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YACD,OAAO,CAAC,oBAAoB,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACvE,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;gBAClE,OAAO,CAAC,4BAA4B,GAAG,CAAC,OAAO,CAAC,4BAA4B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACnF,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,IAAI,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,mCAAmC,CACzC,OAAwB,EACxB,MAAuB,EACvB,OAAyB,EACzB,OAA6B;QAE7B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACrG,OAAO,CAAC,oBAAoB,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACnF,OAAO,CAAC,4BAA4B,GAAG,CAAC,OAAO,CAAC,4BAA4B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACvF,IAAI,QAAQ,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAEO,iBAAiB,CACvB,OAAwB,EACxB,MAAuB;QAEvB,OAAO,SAAS;aACb,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAC5C,MAAM,CAAC,CAAC,IAAI,EAAgE,EAAE;YAC7E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YACzC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAEO,cAAc,CACpB,MAAsB,EACtB,QAAyB,EACzB,OAAyB,EACzB,OAA6B;QAE7B,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW;gBAC7B,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;gBACnE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACzE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;QACzF,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7C,MAAM,mBAAmB,GAAG,cAAc,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC;YACxG,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;YAC/D,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC/D,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBACpE,CAAC,CAAC,mBAAmB,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClC,CAAC;QAED,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM;YACpC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM;oBACjC,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAA6B,CAAC;oBAC9E,CAAC,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAA+B,CAAC,CAAC;gBACrF,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,EAAE,CAAC;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1E,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAC1D,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAClC,CAAC;IAEO,2BAA2B,CACjC,MAAiD,EACjD,QAAyB,EACzB,OAA6B;QAE7B,OAAO,CAAC,0BAA0B,GAAG,CAAC,OAAO,CAAC,0BAA0B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM;YACjC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,IAAI,GAAG,YAAY,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAC1D,CAAC;QAED,OAAO,CAAC,0BAA0B,GAAG,CAAC,OAAO,CAAC,0BAA0B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM;YAC1C,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC;YACvD,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,IAAI,GAAG,YAAY,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,aAAa,GAAG,aAAa;SACxC,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAC9B,MAA6B,EAC7B,QAAyB,EACzB,OAAyB,EACzB,OAA6B;QAE7B,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;QACzF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;gBACjD,MAAM,YAAY,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;gBAChG,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,SAAS;gBACX,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;gBAC5E,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,oBAAoB,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACvE,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;oBAClE,OAAO,CAAC,4BAA4B,GAAG,CAAC,OAAO,CAAC,4BAA4B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACzF,CAAC;gBACD,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,6BAA6B,CACnC,MAAiD,EACjD,MAAuB;QAEvB,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,CAAC;IAEO,+BAA+B,CACrC,MAAiD,EACjD,MAAuB,EACvB,OAA6B;QAE7B,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7C,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,cAAc,GAAG,IAAI,CAAC;YACtB,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAClC,SAAS;YACX,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,0BAA0B,GAAG,CAAC,OAAO,CAAC,0BAA0B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnF,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,MAAM;oBAC9C,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;oBACjD,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3C,CAAC;IAEO,sBAAsB,CAAC,MAA0B,EAAE,WAAoB,EAAE,aAAa,GAAG,IAAI;QACnG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QACnF,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAEO,wBAAwB,CAAC,MAA4B,EAAE,WAAoB,EAAE,aAAa,GAAG,IAAI;QACvG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QACrF,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IAEO,cAAc,CAAC,QAAyB;QAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,EAAE,CAAC;YACjE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,WAAW,CAAC,OAAwB,EAAE,OAAsB;QAClE,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,IAAI,IAAI,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACN,IAAI,IAAI,CAAC,CAAC;gBACZ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,MAAsB,EAAE,OAAsB;QAC/D,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAEO,kBAAkB,CACxB,KAAsB,EACtB,MAAsB,EACtB,OAAyB,EACzB,OAA6B,EAC7B,kBAAuC;QAEvC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAC7B,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,KAAK,EACL,kBAAkB,EAAE,OAAO,CAC5B,CAAC;gBACF,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACrE,IAAI,kBAAkB,EAAE,WAAW,EAAE,CAAC;oBACpC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpG,CAAC;gBACD,IAAI,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBACD,OAAO,MAAM,CAAC,QAAQ,CAAC;YACzB,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACvE,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3E,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxD,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5G,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,UAAU,GAAU,MAAM,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,KAAsB,EACtB,aAAoC,EACpC,OAA6B;QAE7B,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC;QACpD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/B,IAAI,OAAO,GAAoB,CAAC,OAAO,CAAC,CAAC;YACzC,KAAK,MAAM,MAAM,IAAI,aAAa,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBAChD,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC5C,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7G,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;gBACvD,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;gBAC7F,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;oBAC7C,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC;oBAC9H,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,OAAO,CAAC,OAAO,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,MAAM,UAAU,IAAI,aAAa,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACpD,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;gBACtF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,KAAK,MAAM,sBAAsB,IAAI,aAAa,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAClE,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,CAAC;gBAC3E,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;gBACxE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,KAAK,MAAM,UAAU,IAAI,aAAa,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACnD,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC1F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,KAAK,MAAM,WAAW,IAAI,aAAa,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACrD,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChG,CAAC;YACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;gBACjF,OAAO,CAAC,cAAc,IAAI,eAAe,CAAC,MAAM,CAAC;gBACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CACpB,KAAsB,EACtB,QAA+B,EAC/B,YAA8B,EAC9B,OAA6B;QAE7B,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC9B,IAAI,OAAO,GAAoB,CAAC,OAAO,CAAC,CAAC;gBACzC,MAAM,aAAa,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;gBACnE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oBACzC,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC5C,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;oBAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC1G,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,SAAS;gBACX,CAAC;gBACD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;oBAChD,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC;oBACrF,CAAC,CAAC,SAAS,CAAC;gBACd,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACtC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC;wBAC7H,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BACzB,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,SAAS;gBACX,CAAC;gBACD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oBAC7C,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;oBACpF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC/I,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;oBACvD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtF,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,SAAS;gBACX,CAAC;gBACD,KAAK,MAAM,gBAAgB,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBACrD,MAAM,aAAa,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;oBAC/D,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;oBAClE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,SAAS;gBACX,CAAC;gBACD,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;oBAC3B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;oBACtF,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;oBAChD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpF,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,oBAAoB,CAC1B,KAAsB,EACtB,OAA6C,EAC7C,OAA6B,EAC7B,KAAyB;QAEzB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,MAAM,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;YACnC,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5C,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7G,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,eAAe,CACrB,KAAsB,EACtB,UAA8B,EAC9B,OAA6B;QAE7B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;QACzC,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,IAAI,OAAO,GAAoB,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAClF,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;gBACnF,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;oBAC1C,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC;oBACvH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oBACjD,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC9E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAClI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,MAAM,gBAAgB,IAAI,UAAU,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBACzD,MAAM,aAAa,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;gBAC/D,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;gBAClE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnG,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;gBACzE,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gBAAgB,CACtB,KAAsB,EACtB,WAAgC,EAChC,OAA6B;QAE7B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,IAAI,OAAO,GAAoB,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpF,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;gBACpF,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;oBAC3C,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC;oBACvH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oBAClD,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC9E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACnI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,MAAM,gBAAgB,IAAI,WAAW,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC1D,MAAM,aAAa,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;gBAC/D,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;gBAClE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpG,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5F,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;gBACzE,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9E,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,qBAAqB,CAC3B,KAAsB,EACtB,QAA2B,EAC3B,OAAyB,EACzB,OAA6B,EAC7B,QAAiB;QAEjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACzG,OAAO;gBACL,OAAO;gBACP,QAAQ,EAAE,QAAQ;aACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACpC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC;eACrC,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,QAAiC,CAAC,CAC3E,CAAC,EAAE,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAiC,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC3D,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAChD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACpD,OAAO,CAAC,iBAAiB,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC;YAC1H,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YACjE,MAAM,gBAAgB,GAAG,qBAAqB,CAC5C,OAAO,EACP,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CACtF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAClD,IAAI,IAAI,IAAI,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC;oBACjF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,OAAO;SACrB,CAAC;IACJ,CAAC;IAEO,4BAA4B,CAClC,OAAwB,EACxB,OAAsB,EACtB,OAAyB;QAEzB,MAAM,SAAS,GAAgD,EAAE,CAAC;QAClE,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClD,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAEO,WAAW,CACjB,KAAsB,EACtB,MAA6B,EAC7B,OAAyB,EACzB,OAA6B,EAC7B,QAAiB,EACjB,WAAgC;QAEhC,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiD,CAAC;QAC1E,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAE3B,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAC1E,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACxE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAChD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACpD,OAAO,CAAC,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YAEjE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBACnD,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;gBAC1F,IAAI,IAAI,IAAI,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC;oBAC3E,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC;gBAC9B,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;oBACnB,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC,CAAC,OAAO;SACd,CAAC;IACJ,CAAC;IAEO,mBAAmB,CACzB,QAAyB,EACzB,WAAqD,EACrD,WAAgC;QAEhC,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACpD,OAAO,WAAW;gBAChB,CAAC,CAAC,IAAI,CAAC,iBAAkB,CAAC,wBAAwB,CAAC,YAAY,EAAE,WAAW,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;gBAC9G,CAAC,CAAC,IAAI,CAAC,iBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,WAAW;YAChB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;YACzE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC;IAEO,sBAAsB,CAC5B,OAAqB,EACrB,WAAgC;QAEhC,OAAO,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;eACjC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAEO,mBAAmB,CACzB,KAAoB,EACpB,gBAAmC,EACnC,OAAyB;QAEzB,IACE,gBAAgB,CAAC,MAAM,GAAG,CAAC;eACxB,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACnC,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACrC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC9B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACjC,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC9B,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EACpC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC;YAC/D,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM;YACjC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC;YAChE,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ;YACpC,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC;YACnE,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YACxF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,eAAe,GAAG,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;QACxE,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9D,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9F,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAiC,CAAC,EAAE,CAAC;YAC9E,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,QAAiC,EAAE,OAAO,CAAC,CAAC;QACzG,OAAO;YACL,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,WAAW;YACX,gBAAgB,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YACzE,cAAc,EAAE,OAAO,CAAC,eAAe,CAAC;YACxC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,iBAAiB,EAAE,OAAO,CAAC,MAAM;SAClC,CAAC;IACJ,CAAC;IAEO,yBAAyB,CAC/B,MAAgC,EAChC,gBAAmC;QAEnC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrG,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBAChG,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;gBACjF,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3F,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,0BAA0B,CAChC,KAAoB,EACpB,gBAAmC,EACnC,OAAyB;QAEzB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrG,MAAM,kBAAkB,GAAG,aAAa,CACtC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,KAAK,CAAC,MAAM;YACd,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAC1B,CAAC;QACF,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACnF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzF,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACxC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC/F,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAEO,yBAAyB,CAC/B,gBAAmC,EACnC,OAAyB;QAEzB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9F,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC/B,CAAC,MAAM,CAAC,SAAS;eACd,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;eAC9B,gBAAgB,CAAC,MAAM,CAAC;eACxB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAClE,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB,CAC7B,gBAAmC,EACnC,OAA8C;QAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9F,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,mBAAmB,CACzB,gBAAmC,EACnC,gBAAuC,EACvC,OAAyB;QAEzB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QACxC,CAAC;QAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAC3D,OAAO;gBACL,KAAK;gBACL,SAAS,EAAE,IAAI,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAC/C,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB;aAClG,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE5C,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC;YACxD,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC7B,MAAM,aAAa,GAAG,CAAC,oBAAoB,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;gBACpG,MAAM,cAAc,GAAG,CAAC,oBAAoB,IAAI,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;gBACtG,OAAO,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC;uBAChD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa;uBACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAChC,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;YACzD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QACxC,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACvD,WAAW,EAAE,eAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;SAC/C,CAAC;IACJ,CAAC;IAEO,kBAAkB,CACxB,OAAwB,EACxB,OAAyB;QAEzB,MAAM,SAAS,GAAgD,EAAE,CAAC;QAClE,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAEO,sBAAsB,CAAC,QAA+B;QAC5D,OAAO,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;eACjC,QAAQ,CAAC,MAAM,GAAG,CAAC;eACnB,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;IAEO,qBAAqB,CAC3B,MAA6B,EAC7B,OAAsB;QAEtB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACnD,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,EAAE;YACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;YAChC,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC,CAAC,CACH,CAAC,CAAC;QACH,OAAO,+BAA+B,CAAC,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1F,CAAC;IAEO,cAAc,CACpB,KAAsB,EACtB,MAA0B,EAC1B,OAA6B;QAE7B,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7C,IAAI,cAAc,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;YAClF,OAAO,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;QAEtC,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACnE,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gBAAgB,CACtB,KAAsB,EACtB,MAA4B,EAC5B,OAA6B;QAE7B,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7C,IAAI,cAAc,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;YAClF,OAAO,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;QAEtC,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACrE,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,2BAA2B,CACjC,KAAsB,EACtB,MAA0B,EAC1B,cAAsB,EACtB,OAA6B;QAE7B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiC,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,IAAI,aAAgD,CAAC;QACrD,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,MAAM,MAAM,GAAoB,EAAE,CAAC;QAEnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YACrC,IAAI,OAA8B,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACjD,OAAO,GAAG,aAAa,CAAC;gBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;oBACtC,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACzC,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpE,CAAC;gBACD,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;oBACtC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACnE,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,6BAA6B,CACnC,KAAsB,EACtB,MAA4B,EAC5B,cAAsB,EACtB,OAA6B;QAE7B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmC,CAAC;QACzD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,IAAI,aAAkD,CAAC;QACvD,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,MAAM,MAAM,GAAoB,EAAE,CAAC;QAEnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YACrC,IAAI,OAAgC,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,aAAa,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACnD,OAAO,GAAG,aAAa,CAAC;gBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;oBACtC,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACzC,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtE,CAAC;gBACD,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;oBACtC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACrE,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,uBAAuB,CAC7B,KAAsB,EACtB,MAAiD,EACjD,cAAsB;QAEtB,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YAED,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAClC,SAAS;YACX,CAAC;YAED,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,QAAQ,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;IAC3C,CAAC;IAEO,iBAAiB,CAAC,MAA0B,EAAE,WAAoB;QACxE,IAAI,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,mBAAmB,CAAC,MAA4B,EAAE,WAAoB;QAC5E,IAAI,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,iBAAiB,CAAC,OAA6B,EAAE,WAAoB,EAAE,aAAa,GAAG,IAAI;QACjG,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,WAAW;YACnB,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS;YACnC,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY;YACzC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAChD,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAClD,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,OAA+B,EAAE,WAAoB,EAAE,aAAa,GAAG,IAAI;QACrG,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,WAAW;YAC1B,MAAM,EAAE,WAAW;YACnB,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS;YACnC,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY;YACzC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAChD,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAClD,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;IACJ,CAAC;IAEO,UAAU,CAAC,KAAsB,EAAE,KAAqB;QAC9D,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACpE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACtE,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,sBAAsB,CAAC,UAA6B,EAAE,OAAsB;QAClF,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,MAAM;gBACT,OAAO,UAAU,CAAC,IAAI,CAAC;YACzB,KAAK,UAAU;gBACb,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACtC,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC3C,OAAO,KAAK,CAAC,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC3C,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9D,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC1E,OAAO,KAAK,CAAC,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACjG,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC1E,OAAO,KAAK,CAAC,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACjG,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;oBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACzD,IAAI,KAAK,EAAE,CAAC;wBACV,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC;oBACvD,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;oBACvD,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5D,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACzE,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC3G,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1E,IAAI,CAAC,KAAK,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,WAAW,KAAK,SAAS,CAAC,EAAE,CAAC;oBAC3F,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC5F,OAAO,gBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAS,CAAC;YAClH,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChG,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAiB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC3D,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAS;oBAC1E,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,IAAI,CAAC;oBACH,OAAO,gBAAW,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAS,CAAC;gBACnF,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC3E,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;oBAC/D,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,OAAO,gBAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAS,CAAC;YAC3F,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC3E,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC1B,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,OAAO,gBAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAS,CAAC;YACpE,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,UAAU,GAAU,UAAU,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC;IAEO,kBAAkB,CACxB,KAAoB,EACpB,gBAAmC,EACnC,OAAyB;QAEzB,IACE,gBAAgB,CAAC,MAAM,KAAK,CAAC;eAC1B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACnC,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACrC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC9B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACjC,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EACpC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,mBAAmB,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;QACpF,MAAM,gBAAgB,GAAG,mBAAmB;eACvC,CAAC,KAAK,CAAC,QAAQ;eACf,CAAC,CAAC,cAAc,IAAI,WAAW,CAAC;eAChC,CAAC,2BAA2B,CAAC,OAAO,CAAC;eACrC,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAExD,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBAChB,GAAG,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7F,GAAG,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjG;YACD,WAAW;YACX,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAEO,aAAa,CACnB,KAAoB,EACpB,gBAAmC,EACnC,OAAyB;QAEzB,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1C,IACE,UAAU,CAAC,MAAM,KAAK,CAAC;eACpB,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO;eAC9B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,gBAAgB,CAAC,MAAM,KAAK,CAAC;eAC7B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACnC,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACrC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC9B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACjC,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAChC,KAAK,CAAC,OAAO,EAAE,MAAM;eACrB,KAAK,CAAC,KAAK,KAAK,SAAS;eACzB,KAAK,CAAC,MAAM,KAAK,SAAS,EAC7B,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,2BAA2B,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,SAAS,CAAC,QAAQ,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ;YACrC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,iBAAiB,CAAC;YAClF,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YACvE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACxD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,QAAQ;YACb,CAAC,CAAC;gBACE,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,OAAO,EAAE,QAAQ;gBACjB,YAAY;gBACZ,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;aAC9C;YACH,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAEO,iBAAiB,CACvB,KAAoB,EACpB,gBAAmC,EACnC,OAAyB,EACzB,UAA+B;QAE/B,IACE,UAAU,CAAC,MAAM,KAAK,CAAC;eACpB,gBAAgB,CAAC,MAAM,GAAG,CAAC;eAC3B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAChC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACnC,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACrC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC9B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACjC,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC9B,KAAK,CAAC,OAAO,EAAE,MAAM;eACrB,KAAK,CAAC,KAAK,KAAK,SAAS;eACzB,KAAK,CAAC,MAAM,KAAK,SAAS;eAC1B,KAAK,CAAC,QAAQ,EACjB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;YAC/D,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC;YAC/D,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACpG,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,eAAe,GAAG,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;QACxE,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9F,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,QAAiC,EAAE,OAAO,CAAC,CAAC;QACzG,OAAO;YACL,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,iBAAiB,EAAE,OAAO,CAAC,MAAM;SAClC,CAAC;IACJ,CAAC;IAEO,0BAA0B,CAChC,KAAoB,EACpB,gBAAmC,EACnC,OAAyB,EACzB,UAA+B;QAE/B,IACE,UAAU,CAAC,MAAM,KAAK,CAAC;eACpB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC;eAC3D,gBAAgB,CAAC,MAAM,KAAK,CAAC;eAC7B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAChC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACnC,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACrC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC9B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACjC,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC9B,KAAK,CAAC,OAAO,EAAE,MAAM;eACrB,KAAK,CAAC,KAAK,KAAK,SAAS;eACzB,KAAK,CAAC,MAAM,KAAK,SAAS;eAC1B,KAAK,CAAC,QAAQ,EACjB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5G,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACpG,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,UAAU;aACjD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC;aACjD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;aACtC,MAAM,CAAC,CAAC,YAAY,EAA0B,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,OAAO,EAAE,yBAAyB,CAAC,EAAE,CAAC;YACxF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,eAAe,GAAG,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;QACxE,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9D,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9F,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,QAAiC,EAAE,OAAO,CAAC,CAAC;QACzG,OAAO;YACL,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,iBAAiB,EAAE,OAAO,CAAC,MAAM;SAClC,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAC7B,gBAAmC,EACnC,OAAyB,EACzB,yBAAsC;QAEtC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9F,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,oBAAoB,CAAC,MAAM,CAAC,IAAI,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;QACpG,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,yBAAyB,CAC/B,OAAyB,EACzB,yBAAsC;QAEtC,OAAO,CAAC,GAAG,yBAAyB,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,YAAY,CAAC,CAC3F,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAC5B,KAAoB,EACpB,gBAAmC,EACnC,OAAyB,EACzB,UAA+B;QAE/B,IACE,UAAU,CAAC,MAAM,KAAK,CAAC;eACpB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;eAClC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACnC,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACrC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC9B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC/B,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACjC,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eAC9B,KAAK,CAAC,QAAQ,EACjB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CACjC,SAAS,CAAC,IAAI,KAAK,OAAO;eACrB,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,CACjD,CAAC,EAAE,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,UAAU;aACjD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC;aACjD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;aACtC,MAAM,CAAC,CAAC,YAAY,EAA0B,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5E,IACE,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,yBAAyB,CAAC;eAChE,CAAC,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,OAAO,EAAE,yBAAyB,CAAC,EACtF,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACpG,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,SAAS,GAAG,yBAAyB,CAAC,IAAI,KAAK,CAAC,CAAC;QACvD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACxC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC3F,CAAC,EAAE,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACjG,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,cAAc,KAAK,SAAS,CAAC;QACvF,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,YAAY,CAAC;QAEnG,MAAM,eAAe,GAAG,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;QACxE,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9D,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9F,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,QAAiC,EAAE,OAAO,CAAC,CAAC;QACzG,OAAO;YACL,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,iBAAiB,EAAE,OAAO,CAAC,MAAM;YACjC,gBAAgB,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;YAC7C,WAAW;YACX,gBAAgB;YAChB,SAAS;SACV,CAAC;IACJ,CAAC;IAEO,4BAA4B,CAClC,MAAwB,EACxB,kBAA+B;QAE/B,MAAM,QAAQ,GAAsC,EAAE,CAAC;QACvD,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,IACE,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;mBACrC,MAAM,CAAC,OAAO;mBACd,MAAM,CAAC,SAAS;mBAChB,MAAM,CAAC,KAAK,KAAK,SAAS;mBAC1B,CAAC,8BAA8B,CAAC,MAAM,CAAC,QAAQ,CAAC,EACnD,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,MAAM,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,iBAAiB,CACvB,OAAwB,EACxB,YAAqB,EACrB,iBAA4B;QAE5B,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;gBACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3B,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,CAAC;YAC9D,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9C,CAAC;QACD,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,IAAI,GAAyB,EAAE,CAAC;YACtC,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;gBACjD,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;gBAC1D,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEO,mBAAmB,CACzB,OAAwB,EACxB,OAA8C;QAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC;YAC3C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC;QAEzF,OAAO;YACL,KAAK,EAAE,KAA6B;YACpC,GAAG,CAAC,aAAa;gBACf,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,KAAK,MAAM,IAAI,SAAS,EAAE;gBACrD,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;SACzB,CAAC;IACJ,CAAC;IAEO,2BAA2B,CAAC,OAAwB,EAAE,OAAyB;QACrF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC/B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;eACzB,gBAAgB,CAAC,MAAM,CAAC;eACxB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CACpE,CAAC,CAAC;IACL,CAAC;IAEO,+BAA+B,CACrC,KAAoB,EACpB,gBAAmC,EACnC,OAAyB,EACzB,mBAAyC;QAEzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACzE,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtG,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CACjC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;eACnC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAClE,CAAC,CAAC;IACL,CAAC;IAEO,qCAAqC,CAC3C,KAAoB,EACpB,gBAAmC;QAEnC,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC;eAC7B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;eACjC,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;eACrC,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;eACvC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;eACjC,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;eAChC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;eACjC,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;eACnC,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;eAChC,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAC3C,CAAC;IAEO,cAAc,CACpB,OAAwB,EACxB,OAAsB,EACtB,OAAyB;QAEzB,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAClC,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACtC,IAAI,KAAK,EAAE,CAAC;oBACV,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,MAAM,QAAQ,GAAG,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAChF,IAAI,QAAQ,EAAE,CAAC;wBACb,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;wBACjC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;oBAChF,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;QACD,OAAO,mBAAmB,CAAC,QAAQ,CAAC;YAClC,CAAC,CAAC;gBACE,GAAG,QAAQ;gBACX,iBAAiB,EAAE,uBAAuB,CAAC,IAAI;gBAC/C,uBAAuB,EAAE,CAAC,GAAG,uBAAuB,CAAC;aACtD;YACH,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAEO,QAAQ,CAAC,OAAwB,EAAE,OAAsB,EAAE,IAAS;QAC1E,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,SAAS;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAS,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,aAAa,CACnB,QAAyB,EACzB,QAAiB,EACjB,QAAkB,EAClB,iBAA4B;QAE5B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACzF,CAAC;QACD,OAAO,IAAI,GAAG,CACZ,QAAQ;aACL,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;aACnC,MAAM,CAAC,CAAC,IAAI,EAAgB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAC7C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,aAAQ,EAAC,IAAW,CAAC,CAAC,CACxC,CAAC,IAAI,CAAC;IACT,CAAC;IAEO,iBAAiB,CACvB,QAAyB,EACzB,UAA+B;QAE/B,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,KAAK,OAAO;gBACtC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,iBAAiB,CAAC;gBACnG,CAAC,CAAC,CAAC,CAAC;YACN,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACxD,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACjC,CAAC;IAEO,sBAAsB,CAC5B,QAAyB,EACzB,OAAiB,EACjB,UAA+B;QAE/B,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;QAClD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;gBAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;gBACnC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAA,aAAQ,EAAC,IAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YACtD,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;YAChD,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAkB,EAAE,CAAC;YAClC,KAAK,MAAM,YAAY,IAAI,OAAO,EAAE,CAAC;gBACnC,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;gBAC7D,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBAC/B,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,QAAyB,EAAE,SAA4B;QAC9E,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,YAAY,CAAC,IAAI,CAAC,aAAa,CACpC,QAAQ,EACR,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,iBAAiB,CAC5B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,CAAC;QACD,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,KAAK;gBACR,OAAO,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3E,KAAK,KAAK;gBACR,OAAO,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3F,KAAK,KAAK;gBACR,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YAC7C,KAAK,KAAK;gBACR,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,UAAU,GAAU,SAAS,CAAC,IAAI,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,yCAAyC,UAAU,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,QAAyB,EAAE,QAAiB,EAAE,QAAkB;QAC7F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,IAAA,aAAQ,EAAC,IAAW,CAAC,CAAC;gBAClC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAA,kCAAe,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,qBAAqB,CAAC,YAAoB,EAAE,OAAyB;QAC3E,OAAO,IAAI,CAAC,gCAAgC,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;IACvF,CAAC;IAEO,gCAAgC,CACtC,YAAoB,EACpB,OAAyB;QAEzB,MAAM,QAAQ,GAAG,OAAO;aACrB,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;aAC3C,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CACtB,MAAM,CAAC,QAAQ,KAAK,YAAY;eAC3B,gBAAgB,CAAC,MAAM,CAAC,CAC9B,CAAC,CAAC;QACL,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,QAAQ,EAAE,CAAC;YACzC,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC1B,KAAK,KAAK,CAAC;gBACX,KAAK,KAAK;oBACR,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;wBAAE,OAAO,IAAI,CAAC;oBAC5C,IAAI,CAAC,IAAA,cAAM,EAAC,MAAM,CAAC,KAAY,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAC9C,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC1C,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,KAAK,CAAC;gBACX,KAAK,MAAM,CAAC;gBACZ,KAAK,KAAK,CAAC;gBACX,KAAK,MAAM;oBACT,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;wBAAE,OAAO,IAAI,CAAC;oBAC5C,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC1C,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,KAAK,CAAC;gBACX,KAAK,QAAQ;oBACX,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAC9D,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACtE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;oBAC3C,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,WAAW;oBACd,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;wBAAE,OAAO,IAAI,CAAC;oBAChE,IAAI,CAAC,IAAA,cAAM,EAAC,MAAM,CAAC,KAAY,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAC9C,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC7B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,WAAW;oBACd,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;wBAAE,OAAO,IAAI,CAAC;oBAClD,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAChF,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;oBACnC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;wBAAE,OAAO,IAAI,CAAC;oBAClD,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;oBACnC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,UAAU;oBACb,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;wBAAE,OAAO,IAAI,CAAC;oBAClD,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;oBACtC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,cAAc;oBACjB,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;wBAAE,OAAO,IAAI,CAAC;oBAClD,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;oBACtC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,WAAW;oBACd,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAA,cAAM,EAAC,MAAM,CAAC,KAAY,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAC5E,IAAK,MAAM,CAAC,KAAc,CAAC,QAAQ,KAAK,WAAW;wBAAE,OAAO,IAAI,CAAC;oBACjE,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;oBACnC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,cAAc;oBACjB,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAA,cAAM,EAAC,MAAM,CAAC,KAAY,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAC5E,IAAK,MAAM,CAAC,KAAc,CAAC,QAAQ,KAAK,WAAW;wBAAE,OAAO,IAAI,CAAC;oBACjE,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;oBACtC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,aAAa;oBAChB,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;wBAAE,OAAO,IAAI,CAAC;oBAClD,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;oBACrC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,WAAW,CAAC;gBACjB,KAAK,WAAW;oBACd,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;wBAAE,OAAO,IAAI,CAAC;oBAClD,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC1C,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;wBAAE,OAAO,IAAI,CAAC;oBAClD,IAAI,MAAM,CAAC,KAAK;wBAAE,OAAO,IAAI,CAAC;oBAC9B,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;oBAChC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACR;oBACE,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;YACtC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAgB,EAAE,aAAa,EAAE;YAC9C,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAEO,wBAAwB,CAC9B,OAAsB,EACtB,eAA8B,EAC9B,OAAyB;QAEzB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;mBAC1D,SAAS,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAEO,cAAc,CAAC,OAAsB,EAAE,OAAyB;QACtE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC;IAEO,aAAa,CAAC,OAAsB,EAAE,MAAsB;QAClE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAElE,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxB,KAAK,KAAK;gBACR,IAAI,MAAM,CAAC,SAAS;oBAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC;gBAC5H,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,iBAAiB,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACxF,KAAK,KAAK;gBACR,IAAI,MAAM,CAAC,SAAS;oBAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC;gBAC5H,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACzF,KAAK,KAAK;gBACR,IAAI,MAAM,CAAC,SAAS;oBAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBAC1H,OAAO,qBAAqB,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClE,KAAK,MAAM;gBACT,IAAI,MAAM,CAAC,SAAS;oBAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;gBAC3H,OAAO,qBAAqB,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnE,KAAK,KAAK;gBACR,IAAI,MAAM,CAAC,SAAS;oBAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBAC1H,OAAO,qBAAqB,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClE,KAAK,MAAM;gBACT,IAAI,MAAM,CAAC,SAAS;oBAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;gBAC3H,OAAO,qBAAqB,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnE,KAAK,KAAK;gBACR,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;YAClG,KAAK,QAAQ;gBACX,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;YACnG,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACvD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3E,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACvD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACvD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzE,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACvD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1E,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACvD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzE,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACvD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1E,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACvD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/F,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACvD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChG,CAAC;YACD,KAAK,WAAW;gBACd,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAClF,KAAK,cAAc;gBACjB,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACnF,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC1E,OAAO,OAAO,CAAC,KAAK,IAAI,IAAA,cAAM,EAAC,KAAY,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAa,CAAC,CAAC,CAAC;YAClF,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC1E,OAAO,OAAO,CAAC,KAAK,IAAI,IAAA,cAAM,EAAC,KAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAa,CAAC,CAAC,CAAC;YACnF,CAAC;YACD,KAAK,OAAO;gBACV,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;uBAClC,KAAK,CAAC,QAAQ,KAAK,SAAS;uBAC5B,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC;YACvC,KAAK,UAAU;gBACb,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;uBAClC,KAAK,CAAC,QAAQ,KAAK,SAAS;uBAC5B,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC;YACvC,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;uBAC9B,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;YAChH,KAAK,YAAY;gBACf,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;uBAC9B,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;YACjH,KAAK,cAAc;gBACjB,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;uBAClC,KAAK,CAAC,QAAQ,KAAK,SAAS;uBAC5B,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACjD,KAAK,iBAAiB;gBACpB,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;uBAClC,KAAK,CAAC,QAAQ,KAAK,SAAS;uBAC5B,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAClD,KAAK,WAAW;gBACd,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS;uBAC5B,KAAK,CAAC,QAAQ,KAAK,SAAS;uBAC5B,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACvD,KAAK,cAAc;gBACjB,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS;uBAC5B,KAAK,CAAC,QAAQ,KAAK,SAAS;uBAC5B,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACxD,KAAK,aAAa;gBAChB,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;uBAC9B,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;YAC/F,KAAK,gBAAgB;gBACnB,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;uBAC9B,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;YAChG,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,UAAU,GAAU,MAAM,CAAC,QAAQ,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;IACH,CAAC;IAEO,qBAAqB,CAC3B,OAAsB,EACtB,eAAuC,EACvC,MAAsB,EACtB,SAA0C;QAE1C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,SAAS,CAAC,mBAAmB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC;IACrE,CAAC;CACF;AAxmFD,kDAwmFC;AAED,SAAgB,QAAQ,CAAC,YAAoB;IAC3C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,KAAsC;IACxD,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAwB;IAClD,OAAO,SAAS;SACb,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SAC1B,MAAM,CAAC,UAAU,CAAC;SAClB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAwB;IAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,YAAY,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,6BAA6B,CAAC,QAA2B;IAChE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,YAAY,IAAI,IAAI,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;SACjC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAiB,EAAE,KAAkB;IAC9D,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,MAAsB;IAC7C,OAAO,MAAM,CAAC,SAAS;QACrB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC;QACrC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,oBAAoB,CAAC,QAA2B,EAAE,KAAoB;IAC7E,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,EAAyB,EAAE,CAAC,CAAC;QACpF,IAAI,EAAE,SAAS;QACf,OAAO;QACP,aAAa;KACd,CAAC,CAAC,CAAC;IACN,MAAM,eAAe,GAAqB,EAAE,CAAC;IAE7C,KAAK,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACrE,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CACvD,CAAC,SAAS,CAAC,WAAW,IAAI,6BAA6B,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CACnF,CAAC,CAAC;QACH,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,WAAW,GAAG,MAAM,CAAC;YACnC,SAAS;QACX,CAAC;QACD,eAAe,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,QAAQ;YACd,MAAM;YACN,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,GAAG,eAAe;QAClB,GAAG,cAAc;QACjB,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,EAAkB,EAAE,CAAC,CAAC;YAC3E,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,aAAa;SACd,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,EAAkB,EAAE,CAAC,CAAC;YAC7E,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,aAAa;SACd,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAsB;IACvD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC;YACnB,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC;YACrC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,IAAI,EAAE,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;IACjC,CAAC;IAED,OAAO;QACL,MAAM,CAAC,OAAO,CAAC,MAAM;QACrB,MAAM,CAAC,OAAO,CAAC,KAAK;QACpB,MAAM,CAAC,OAAO,CAAC,OAAO;QACtB,MAAM,CAAC,OAAO,CAAC,OAAO;QACtB,MAAM,CAAC,OAAO,CAAC,KAAK;QACpB,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC9D,MAAM,CAAC,OAAO,CAAC,SAAS;QACxB,MAAM,CAAC,OAAO,CAAC,SAAS;QACxB,MAAM,CAAC,OAAO,CAAC,WAAW;QAC1B,MAAM,CAAC,OAAO,CAAC,OAAO;QACtB,MAAM,CAAC,OAAO,CAAC,KAAK;QACpB,MAAM,CAAC,OAAO,CAAC,WAAW;QAC1B,MAAM,CAAC,OAAO,CAAC,SAAS;QACxB,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,MAAgB;IACrC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,aAAa,CAAC,MAAgB;IACrC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAyB,EAAE,OAAiB;IACzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAsB,EAAE,MAA8B;IAC9E,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACrE,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAmB,EAAE,KAAoB;IACjE,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAsB,EACtB,SAAmB,EACnB,GAAkB;IAElB,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5B,KAAK,MAAM,YAAY,IAAI,SAAS,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,6BAA6B,CAAC,MAA8B,EAAE,OAAwB;IAC7F,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM;WACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,+BAA+B,CACtC,MAA8B,EAC9B,OAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;QACpD,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,kDAAkD,YAAY,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAiD,EAAE,CAAC;YACpE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE;gBAC/C,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YACH,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAgD;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5D,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAqB;IAC/C,OAAO,SAAS;SACb,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;SACpD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAmD;IACvE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,IAAA,cAAM,EAAC,KAAY,CAAC,EAAE,CAAC;QACzB,OAAO,IAAA,aAAQ,EAAC,KAAY,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC,CAAC,IAAA,aAAQ,EAAC,KAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAwB,EAAE,YAAoB;IACxE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAqB;IAChD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,IAAA,cAAM,EAAC,KAAkB,CAAC,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,IAAU,EAAE,KAAW;IACvC,OAAO,IAAA,aAAQ,EAAC,IAAW,CAAC,KAAK,IAAA,aAAQ,EAAC,KAAY,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAW,EAAE,OAAkC;IACzE,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5B,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,KAAK,CAAC;QACrB,KAAK,kBAAkB;YACrB,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACnC,KAAK,kBAAkB;YACrB,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACnC;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAW,EAAE,eAAuC;IAC7E,OAAO,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB,CAAC,IAA4B,EAAE,KAA0B;IACjF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,KAAK,IAAA,kCAAe,EAAC,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC,CAAE,KAAc,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAChG,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,KAAK,CAAC,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC,CAAE,KAAc,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,qBAAqB,CAAC,IAA4B,EAAE,KAAsC;IACjG,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,mBAAmB,CAAC,IAAI,EAAE,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC,CAAC,KAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA4B,EAAE,KAAuC;IAChG,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,GAAG,IAAA,kCAAe,EAAC,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC,CAAE,KAAc,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC,CAAE,KAAc,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,IAAA,kCAAe,EAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAA,kCAAe,EAAC,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC,CAAE,KAAc,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrH,CAAC;IACD,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC,CAAE,KAAc,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,eAAe,CAAC,IAAU,EAAE,QAAgB;IACnD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,KAAK;YACR,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC;QACvC,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC;QACvC,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;QACrC,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7B;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,WAAmB,EAAE,aAAqB;IAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,aAAa,KAAK,GAAG,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,eAAe,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IACpD,OAAO,aAAa,KAAK,eAAe;WACnC,aAAa,CAAC,UAAU,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA0B;IACtD,OAAO,IAAA,cAAM,EAAC,KAAY,CAAC;QACzB,CAAC,CAAC,aAAa,CAAC,KAAa,CAAC;QAC9B,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAA,yCAAsB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,aAAa,CAAC,IAAU;IAC/B,OAAO,IAAA,mCAAgB,EAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAsB;IAC9C,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,kBAAkB,IAAI,MAAM,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;QACnF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,QAAQ,KAAK,aAAa;eACnC,MAAM,CAAC,QAAQ,KAAK,WAAW;eAC/B,MAAM,CAAC,QAAQ,KAAK,WAAW;eAC/B,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,KAAK,KAAK;WAC3B,MAAM,CAAC,QAAQ,KAAK,KAAK;WACzB,MAAM,CAAC,QAAQ,KAAK,KAAK;WACzB,MAAM,CAAC,QAAQ,KAAK,MAAM;WAC1B,MAAM,CAAC,QAAQ,KAAK,KAAK;WACzB,MAAM,CAAC,QAAQ,KAAK,MAAM;WAC1B,MAAM,CAAC,QAAQ,KAAK,KAAK;WACzB,MAAM,CAAC,QAAQ,KAAK,QAAQ;WAC5B,MAAM,CAAC,QAAQ,KAAK,aAAa;WACjC,MAAM,CAAC,QAAQ,KAAK,WAAW;WAC/B,MAAM,CAAC,QAAQ,KAAK,WAAW;WAC/B,MAAM,CAAC,QAAQ,KAAK,QAAQ;WAC5B,MAAM,CAAC,QAAQ,KAAK,WAAW;WAC/B,MAAM,CAAC,QAAQ,KAAK,WAAW;WAC/B,MAAM,CAAC,QAAQ,KAAK,OAAO;WAC3B,MAAM,CAAC,QAAQ,KAAK,UAAU;WAC9B,MAAM,CAAC,QAAQ,KAAK,cAAc;WAClC,MAAM,CAAC,QAAQ,KAAK,WAAW;WAC/B,MAAM,CAAC,QAAQ,KAAK,cAAc,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAsB;IAClD,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW;WACjC,MAAM,CAAC,KAAK,KAAK,SAAS;WAC1B,CAAC,MAAM,CAAC,SAAS;WACjB,CAAC,MAAM,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,SAAS,8BAA8B,CACrC,QAAoC;IAEpC,OAAO,QAAQ,KAAK,KAAK;WACpB,QAAQ,KAAK,KAAK;WAClB,QAAQ,KAAK,KAAK;WAClB,QAAQ,KAAK,MAAM;WACnB,QAAQ,KAAK,KAAK;WAClB,QAAQ,KAAK,MAAM,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA0B;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAA,yCAAsB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAA,kCAAe,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,CAAC;IACD,IAAI,IAAA,cAAM,EAAC,KAAY,CAAC,IAAI,aAAa,CAAC,KAAa,CAAC,EAAE,CAAC;QACzD,OAAO,IAAA,kCAAe,EAAE,KAAc,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,OAAsB,EAAE,MAAgB;IAC9D,MAAM,SAAS,GAAkB,EAAE,CAAC;IACpC,KAAK,MAAM,YAAY,IAAI,MAAM,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,SAAS,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CACtB,IAAmB,EACnB,KAAoB,EACpB,OAA8C;IAE9C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAA,aAAQ,EAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAA,aAAQ,EAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,OAAsB,EAAE,SAAoB;IAC9D,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;SAC5C,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAA,aAAQ,EAAC,IAAW,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAClE,CAAC,CAAC;SACD,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAyB;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,gBAAW,CAAC,OAAO,CACxB,MAAM,CAAC,KAAK,CAAC,EACb,gBAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAC3B,CAAC;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAU;IAClC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,gBAAW,CAAC,OAAO,CACxB,MAAM,CAAC,KAAK,CAAC,EACb,gBAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAC3B,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,OAAwB;IAC/C,OAAO,SAAS;SACb,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SAC7B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;SAC5D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAyF;IACtH,OAAO,SAAS;SACb,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,GAAG,GAAG,KAAK,YAAY,EAAE,CAAC;QACnC,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAsC;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IACvB,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnD,IAAI,IAAA,cAAM,EAAC,KAAkB,CAAC;QAAE,OAAO,IAAA,aAAQ,EAAC,KAAY,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,MAAsB;IAC5C,OAAO,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC9F,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA6B;IACvD,MAAM,QAAQ,GAAG;QACf,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;QACxD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;QACrD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3D,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;KACtD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,SAAS;QACpC,CAAC,CAAC,aAAa,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;QACxC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY;YAC7B,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE;YACxC,CAAC,CAAC,GAAG,CAAC;IACR,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC;AACvG,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA+B;IAC3D,MAAM,QAAQ,GAAG;QACf,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;QACxD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;QACrD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3D,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;QACrD,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;KAC/D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,SAAS;QACpC,CAAC,CAAC,aAAa,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;QACxC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY;YAC7B,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE;YACxC,CAAC,CAAC,GAAG,CAAC;IACR,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC1C,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC;AAC7G,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,MAAe;IAC3D,MAAM,KAAK,GAAG;QACZ,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;QAC/D,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;KACnE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,eAAe,CAAC,MAAiD;IACxE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC;AACnF,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAyE;IACpG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,UAAU,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACpG,CAAC;AAED,SAAS,YAAY,CAAC,IAAkB;IACtC,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,sBAAsB,CAAC,UAA6B;IAC3D,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,MAAM;YACT,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAA,yCAAsB,EAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5F,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAC/B,CAAC;YACD,OAAO,IAAA,aAAQ,EAAC,UAAU,CAAC,IAAW,CAAC,CAAC;QAC1C,KAAK,UAAU;YACb,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACnC,KAAK,aAAa;YAChB,OAAO,QAAQ,UAAU,CAAC,QAAQ,GAAG,CAAC;QACxC,KAAK,cAAc;YACjB,OAAO,WAAW,UAAU,CAAC,QAAQ,GAAG,CAAC;QAC3C,KAAK,WAAW;YACd,OAAO,SAAS,sBAAsB,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QACnE,KAAK,WAAW;YACd,OAAO,SAAS,sBAAsB,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QACnE,KAAK,UAAU;YACb,OAAO,YAAY,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACrF,KAAK,IAAI;YACP,OAAO,MAAM,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3J,KAAK,WAAW;YACd,OAAO,UAAU;gBACf,sBAAsB,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC7C,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC;gBACxC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,MAAM,CAAC;aACxF,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,UAAU,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACnF,KAAK,KAAK;YACR,OAAO,OAAO,sBAAsB,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QACjE,KAAK,OAAO;YACV,OAAO,SAAS,sBAAsB,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC/G,KAAK,SAAS;YACZ,OAAO,WAAW,sBAAsB,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;QACjH,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,UAAU,GAAU,UAAU,CAAC;YACrC,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA2B;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClG,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;IAC9C,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC;IACpF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,GAAG,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA8C;IACxE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,kBAAkB,CAAC,SAA+B;IACzD,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACzC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;WAC1B,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;WACzB,KAAK,KAAK,uBAAuB;WACjC,KAAK,KAAK,6BAA6B;WACvC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;WACjC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;WACjC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;WAChC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;WAC3B,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;WAC9B,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;WAC7B,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;WAC7B,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;WAC7B,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC;WACpC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;WAC5B,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;WAC9B,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;WACjC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;WAC7B,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC;WACzC,KAAK,CAAC,UAAU,CAAC,2BAA2B,CAAC;WAC7C,KAAK,CAAC,UAAU,CAAC,4BAA4B,CAAC,CACpD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,OAA2B;IACzD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,kBAAkB,CAAC;QAC5B,KAAK,OAAO;YACV,OAAO,WAAW,CAAC;QACrB,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,UAAU,GAAU,OAAO,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,iDAAiD,UAAU,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAA+C;IACpE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,kBAAkB;YACrB,OAAO,mBAAmB,CAAC;QAC7B,KAAK,WAAW;YACd,OAAO,YAAY,CAAC;QACtB,KAAK,WAAW;YACd,OAAO,YAAY,CAAC;QACtB,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,UAAU,GAAU,IAAI,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,+CAA+C,UAAU,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAA+C;IACpE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,kBAAkB;YACrB,OAAO,mBAAmB,CAAC;QAC7B,KAAK,WAAW;YACd,OAAO,YAAY,CAAC;QACtB,KAAK,WAAW;YACd,OAAO,YAAY,CAAC;QACtB,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,UAAU,GAAU,IAAI,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,+CAA+C,UAAU,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA4B;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAqB;IACjD,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,IAAA,cAAM,EAAC,KAAY,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAa,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpB,SAAS;QACX,CAAC;QACD,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpB,SAAS;QACX,CAAC;QACD,IAAI,gCAAgC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAuC,CAAC;YACtD,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,UAAU,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gCAAgC,CACvC,QAA+B,EAC/B,UAA+B;IAE/B,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,UAAU;SACxC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC;SACjD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;SACtC,MAAM,CAAC,CAAC,YAAY,EAA0B,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAoB;YAC/B,GAAG,KAAK,CAAC,OAAO;YAChB,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB;YAClD,uBAAuB,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC;SACpE,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzD,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,IAAI,IAAA,cAAM,EAAC,KAAY,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAChE,SAAS;YACX,CAAC;YACD,IAAK,KAAiC,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC/D,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,EAAE,GAAI,KAAiC,EAAE,CAAC;YAC3D,OAAO,QAAQ,CAAC,SAAS,CAAC;YAC1B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,QAAqB,CAAC;YACvC,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAqB;IACrD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,IAAA,cAAM,EAAC,KAAY,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,gCAAgC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,KAAK,KAAK,IAAI;WAChB,OAAO,KAAK,KAAK,QAAQ;WACzB,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC;WACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;WAC/B,KAAK,CAAC,OAAO,CAAE,KAA2B,CAAC,GAAG,CAAC;WAC/C,CAAE,KAA4B,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;WAC9C,CAAE,KAA4B,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,KAAK,KAAK,IAAI;WAChB,OAAO,KAAK,KAAK,QAAQ;WACzB,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC;WACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;WAC/B,KAAK,CAAC,OAAO,CAAE,KAA8B,CAAC,MAAM,CAAC;WACrD,CAAE,KAA+B,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;WACpD,CAAE,KAA+B,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,cAAM,EAAC,KAAY,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,gCAAgC,CACvC,GAAoB,EACpB,KAAc;IAEd,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS;QAC9B,KAAK;QACL,QAAQ;QACR,WAAW;QACX,WAAW;QACX,cAAc;QACd,cAAc;QACd,WAAW;QACX,cAAc;QACd,GAAG,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACtF,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACrG,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/F,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3G,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACnG,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IACvI,KAAK,MAAM,gBAAgB,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;QAC7E,IAAI,SAAS,CAAC,gBAAgB,CAAC,KAAK,SAAS,IAAI,OAAO,SAAS,CAAC,gBAAgB,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;IACjH,CAAC;IACD,KAAK,MAAM,gBAAgB,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,IAAA,cAAM,EAAC,QAAe,CAAC,IAAK,QAAiB,CAAC,QAAQ,KAAK,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;IACxH,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,KAAK,MAAM,aAAa,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;YAC3D,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;YAC5C,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;gBAAE,OAAO,KAAK,CAAC;QACrF,CAAC;QACD,KAAK,MAAM,YAAY,IAAI,CAAC,WAAW,EAAE,WAAW,CAAqD,EAAE,CAAC;YAC1G,IAAI,SAAS,CAAC,YAAY,CAAC,KAAK,SAAS,IAAI,OAAO,SAAS,CAAC,YAAY,CAAC,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;QACzG,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAA,cAAM,EAAC,KAAY,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAsB,EACtB,OAA6B,EAC7B,MAA2B;IAE3B,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5B,MAAM,aAAa,GAAG,GAAG,MAAM,CAAC,MAAM,UAAU,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtF,MAAM,UAAU,GAAkD;QAChE,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAS,CAAC;QAC9D,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAW,CAAC,SAAS,CAAC,aAAa,CAAS,CAAC;QAC7D,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAS,CAAC;QAC9D,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAS,CAAC;QACpE,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACvG,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzD,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;KACtD,CAAC;IAEF,KAAK,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QAC9C,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAsB,EACtB,OAA+B,EAC/B,MAA6B;IAE7B,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5B,MAAM,aAAa,GAAG,GAAG,MAAM,CAAC,MAAM,UAAU,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtF,MAAM,UAAU,GAAkD;QAChE,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAS,CAAC;QAC9D,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAW,CAAC,SAAS,CAAC,aAAa,CAAS,CAAC;QAC7D,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAS,CAAC;QAC9D,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAS,CAAC;QACpE,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACvG,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzD,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrD,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAS,CAAC,CAAC,CAAC,SAAS,CAAC;KACtF,CAAC;IAEF,KAAK,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QAC9C,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,KAAoB;IAC3C,OAAO,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,aAAa,CAAC,UAA+B,EAAE,OAAgB;IACtE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,aAAa,MAAM,QAAQ,MAAM,GAAG,CAAC;IAC9C,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAC3F,CAAC;QACD,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC/E,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;YACvD,CAAC,CAAC,uCAAuC;YACzC,CAAC,CAAC,8BAA8B,CAAC;IACrC,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;QACvD,CAAC,CAAC,iCAAiC;QACnC,CAAC,CAAC,wBAAwB,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA4B;IACrD,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC","sourcesContent":["import { DataFactory, termToId } from 'n3';\nimport type { Term } from '@rdfjs/types';\nimport type { QuintPattern, TermMatch } from '../quint/types';\nimport { isTerm } from '../quint/types';\nimport { RdfQuadIndex } from './RdfQuadIndex';\nimport { Rdf3xIndex } from './Rdf3xIndex';\nimport type { RdfTextIndex } from './RdfTextIndex';\nimport type { RdfVectorIndex } from './RdfVectorIndex';\nimport { isFiniteNumericLexical, isRdfNumericTerm, rdfNumericValue } from './RdfTermSemantics';\nimport type {\n RdfBindExpression,\n RdfBindingRow,\n RdfLocalQuery,\n RdfLocalQueryMetrics,\n RdfLocalQueryResult,\n RdfQueryBind,\n RdfQueryAggregate,\n RdfQueryFilter,\n RdfQueryFilterValue,\n RdfOptionalQueryGroup,\n RdfQueryPattern,\n RdfQueryPatternKey,\n RdfQueryTermPattern,\n RdfQuadTupleConstraintSource,\n RdfValuesBindingSource,\n RdfTextSearchPattern,\n RdfTextSearchOptions,\n RdfTextSearchResult,\n RdfUnionQueryBranch,\n RdfVectorSearchPattern,\n RdfVectorSearchOptions,\n RdfVectorSearchResult,\n RdfMinusQueryGroup,\n RdfExistsQueryGroup,\n RdfQueryVariable,\n RdfQuadJoinGroupAggregateHaving,\n RdfQuadIndexScanResult,\n RdfQuadScanOptions,\n Rdf3xPatternKey,\n Rdf3xObjectOperatorPattern,\n Rdf3xObjectTextSearchPattern,\n Rdf3xTermInPattern,\n Rdf3xTermMetadataPattern,\n Rdf3xTermNotInPattern,\n Rdf3xTriplePattern,\n Rdf3xTripleScanOptions,\n Rdf3xTripleScanResult,\n} from './types';\n\nconst TERM_KEYS: RdfQueryPatternKey[] = ['graph', 'subject', 'predicate', 'object'];\nconst PLANNER_SAMPLE_BINDINGS = 16;\nconst XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal';\nconst XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer';\n\ninterface SingleScanPushdown {\n options: RdfQuadScanOptions;\n orderPushed: boolean;\n paginationPushed: boolean;\n}\n\ntype CompiledPattern = QuintPattern & {\n pushedDownFilters: number;\n pushedDownFilterIndexes: number[];\n};\n\ntype CompiledJoinPattern = { pattern: CompiledPattern; variables: Partial<Record<RdfQueryPatternKey, string>> };\n\ninterface RequiredBgpPushdown {\n patterns: CompiledJoinPattern[];\n values?: RdfValuesBindingSource[];\n reorderPlan?: string;\n orderPushed: boolean;\n paginationPushed: boolean;\n distinctPushed: boolean;\n project?: string[];\n pushedDownFilters: number;\n}\n\ninterface GroupAggregatePushdown {\n patterns: CompiledJoinPattern[];\n reorderPlan?: string;\n having?: RdfQuadJoinGroupAggregateHaving[];\n pushedDownFilters: number;\n pushedDownHaving: number;\n orderPushed: boolean;\n paginationPushed: boolean;\n countOnly: boolean;\n}\n\ninterface JoinCountPushdown {\n patterns: CompiledJoinPattern[];\n reorderPlan?: string;\n pushedDownFilters: number;\n}\n\ninterface JoinBasicAggregatePushdown {\n patterns: CompiledJoinPattern[];\n reorderPlan?: string;\n pushedDownFilters: number;\n}\n\ninterface PatternRequiredSource {\n kind: 'pattern';\n pattern: RdfQueryPattern;\n originalIndex: number;\n tupleValues?: RdfValuesBindingSource;\n}\n\ninterface TextRequiredSource {\n kind: 'text';\n pattern: RdfTextSearchPattern;\n originalIndex: number;\n results?: RdfTextSearchResult[];\n}\n\ninterface VectorRequiredSource {\n kind: 'vector';\n pattern: RdfVectorSearchPattern;\n originalIndex: number;\n results?: RdfVectorSearchResult[];\n}\n\ninterface ValuesRequiredSource {\n kind: 'values';\n source: RdfValuesBindingSource;\n originalIndex: number;\n}\n\ntype RequiredSource = PatternRequiredSource | TextRequiredSource | VectorRequiredSource | ValuesRequiredSource;\ntype PatternScanBackend = 'index' | 'rdf3x' | 'mixed' | 'none';\n\ninterface PatternJoinResult {\n bindings: RdfBindingRow[];\n scanBackend: PatternScanBackend;\n}\n\ninterface RequiredSourceEstimate {\n rows: number;\n costRows: number;\n}\n\nexport class RdfLocalQueryEngine {\n public constructor(\n private readonly index: RdfQuadIndex,\n private readonly textIndex?: RdfTextIndex,\n private readonly vectorIndex?: RdfVectorIndex,\n private readonly rdf3xPrimaryIndex?: Rdf3xIndex,\n ) {}\n\n public query(query: RdfLocalQuery): RdfLocalQueryResult {\n const start = Date.now();\n const metrics: RdfLocalQueryMetrics = {\n engine: 'solid-rdf',\n plan: [],\n scannedRows: 0,\n joinedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n indexChoices: [],\n cardinalityEstimates: 0,\n distinctCardinalityEstimates: 0,\n searchCardinalityEstimates: 0,\n filtersApplied: 0,\n filtersPushedDown: 0,\n };\n\n const hasNonPatternSource = (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0;\n const requiredPatterns = query.patterns.length > 0\n ? query.patterns\n : query.unions?.length || hasNonPatternSource\n ? []\n : [{}];\n let bindings: RdfBindingRow[] = [{}];\n const requiredFilters = query.filters ?? [];\n const aggregates = queryAggregates(query);\n const singleScanPushdown = this.singleScanPushdown(query, requiredPatterns, requiredFilters);\n const countPushdown = this.countPushdown(query, requiredPatterns, requiredFilters);\n const groupAggregatePushdown = this.groupAggregatePushdown(query, requiredPatterns, requiredFilters, aggregates);\n const joinCountPushdown = this.joinCountPushdown(query, requiredPatterns, requiredFilters, aggregates);\n const joinBasicAggregatePushdown = this.joinBasicAggregatePushdown(query, requiredPatterns, requiredFilters, aggregates);\n let groupedAggregatePushed = false;\n\n if (countPushdown) {\n const distinctKeys = countPushdown.distinctKeys ?? [];\n const distinctKey = distinctKeys.length === 1 ? distinctKeys[0] : undefined;\n const distinctTupleKeys = distinctKeys.length > 1 ? distinctKeys : undefined;\n const useRdf3xPrimary = this.canUseRdf3xPrimaryScan(countPushdown.pattern) && !distinctTupleKeys;\n let rdf3xCount: ReturnType<Rdf3xIndex['countDistinct']> | undefined;\n if (useRdf3xPrimary) {\n const rdf3xPattern = toRdf3xTriplePattern(countPushdown.pattern);\n if (distinctKey) {\n rdf3xCount = this.rdf3xPrimaryIndex!.countDistinct(\n rdf3xPattern,\n distinctKey as Rdf3xPatternKey,\n );\n } else {\n const rdf3xCountScan = this.rdf3xPrimaryIndex!.scan(rdf3xPattern, { limit: 0 });\n rdf3xCount = {\n count: rdf3xCountScan.metrics.matchedRows,\n metrics: rdf3xCountScan.metrics,\n };\n }\n }\n const countEstimate = !useRdf3xPrimary && distinctTupleKeys\n ? this.index.countDistinctTuple(countPushdown.pattern, distinctTupleKeys)\n : !useRdf3xPrimary && distinctKey\n ? this.index.countDistinct(countPushdown.pattern, distinctKey)\n : undefined;\n const count = rdf3xCount?.count ?? countEstimate?.rows ?? this.index.count(countPushdown.pattern);\n const result = countLiteral(count);\n metrics.scannedRows = count;\n metrics.joinedRows = count;\n metrics.returnedRows = 1;\n metrics.durationMs = Date.now() - start;\n metrics.indexChoices.push(useRdf3xPrimary ? rdf3xCount!.metrics.indexChoice : 'count');\n metrics.filtersPushedDown += countPushdown.pushedDownFilters;\n if (rdf3xCount) {\n metrics.plan.push(...storagePlanMarkers(rdf3xCount.metrics.queryPlan));\n metrics.plan.push(`${distinctKey ? 'Rdf3xPrimaryCountDistinct' : 'Rdf3xPrimaryCount'}(${describePattern(requiredPatterns[0])})`);\n metrics.plan.push(distinctKey ? 'Aggregate(count-distinct-rdf3x-primary)' : 'Aggregate(count-rdf3x-primary)');\n } else {\n metrics.plan.push(`IndexCount(${describePattern(requiredPatterns[0])})`);\n metrics.plan.push(distinctTupleKeys ? 'Aggregate(count-distinct-tuple-index)' : distinctKey ? 'Aggregate(count-distinct-index)' : 'Aggregate(count-index)');\n }\n return {\n bindings: [{ [countPushdown.as]: result }],\n count,\n metrics,\n };\n }\n\n if (joinCountPushdown) {\n const useRdf3xPrimary = this.canUseRdf3xPrimaryJoin(joinCountPushdown.patterns);\n const scan = useRdf3xPrimary\n ? this.rdf3xPrimaryIndex!.countJoinPatterns(joinCountPushdown.patterns, {\n aggregates,\n })\n : this.index.countJoinPatterns(joinCountPushdown.patterns, {\n aggregates,\n });\n const firstAggregate = aggregates[0];\n const firstCount = firstAggregate ? Number(scan.bindings[0]?.[firstAggregate.as]?.value ?? 0) : 0;\n metrics.scannedRows = scan.metrics.matchedRows;\n metrics.joinedRows = scan.metrics.matchedRows;\n metrics.returnedRows = scan.bindings.length;\n metrics.durationMs = Date.now() - start;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += joinCountPushdown.pushedDownFilters;\n if (!useRdf3xPrimary && joinCountPushdown.reorderPlan) {\n metrics.plan.push(joinCountPushdown.reorderPlan);\n }\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n metrics.plan.push(`${useRdf3xPrimary ? 'Rdf3xPrimaryJoinCount' : 'IndexJoinCount'}(${joinCountPushdown.patterns.map((source) => describePatternSource(source)).join('|')})`);\n metrics.plan.push(aggregatePlan(aggregates, false));\n metrics.plan.push(aggregates.some((aggregate) => aggregate.distinct)\n ? 'Aggregate(join-count-distinct-index)'\n : 'Aggregate(join-count-index)');\n return {\n bindings: scan.bindings,\n count: firstCount,\n metrics,\n };\n }\n\n if (joinBasicAggregatePushdown) {\n const useRdf3xPrimary = this.canUseRdf3xPrimaryJoin(joinBasicAggregatePushdown.patterns);\n const scan = useRdf3xPrimary\n ? this.rdf3xPrimaryIndex!.aggregateJoinPatterns(joinBasicAggregatePushdown.patterns, {\n aggregates,\n })\n : this.index.aggregateJoinPatterns(joinBasicAggregatePushdown.patterns, {\n aggregates,\n });\n metrics.scannedRows = scan.metrics.matchedRows;\n metrics.joinedRows = scan.metrics.matchedRows;\n metrics.returnedRows = scan.bindings.length;\n metrics.durationMs = Date.now() - start;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += joinBasicAggregatePushdown.pushedDownFilters;\n if (!useRdf3xPrimary && joinBasicAggregatePushdown.reorderPlan) {\n metrics.plan.push(joinBasicAggregatePushdown.reorderPlan);\n }\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n metrics.plan.push(`${useRdf3xPrimary ? 'Rdf3xPrimaryJoinAggregate' : 'IndexJoinAggregate'}(${joinBasicAggregatePushdown.patterns.map((source) => describePatternSource(source)).join('|')})`);\n metrics.plan.push(aggregatePlan(aggregates, false));\n metrics.plan.push(aggregates.length > 1\n ? 'Aggregate(join-basic-multi-index)'\n : 'Aggregate(join-basic-index)');\n return {\n bindings: scan.bindings,\n metrics,\n };\n }\n\n const remainingSources = buildRequiredSources(requiredPatterns, query);\n const requiredBgpPushdown = this.requiredBgpPushdown(query, requiredPatterns, requiredFilters);\n if (groupAggregatePushdown) {\n const rdf3xGroupAggregatePatterns = groupAggregatePushdown.countOnly\n ? groupAggregatePushdown.patterns\n : stripRdf3xNumericAggregateGuards(groupAggregatePushdown.patterns, aggregates);\n const useRdf3xPrimary = this.canUseRdf3xPrimaryJoin(rdf3xGroupAggregatePatterns);\n const groupOptions = {\n groupBy: query.groupBy ?? [],\n aggregates,\n ...(groupAggregatePushdown.having ? { having: groupAggregatePushdown.having } : {}),\n ...(groupAggregatePushdown.orderPushed ? { orderBy: query.orderBy } : {}),\n ...(groupAggregatePushdown.paginationPushed && query.limit !== undefined ? { limit: Math.max(0, query.limit) } : {}),\n ...(groupAggregatePushdown.paginationPushed && query.offset !== undefined ? { offset: Math.max(0, query.offset) } : {}),\n };\n const scan = groupAggregatePushdown.countOnly\n ? useRdf3xPrimary\n ? this.rdf3xPrimaryIndex!.groupCountJoinPatterns(rdf3xGroupAggregatePatterns, groupOptions)\n : this.index.groupCountJoinPatterns(groupAggregatePushdown.patterns, groupOptions)\n : useRdf3xPrimary\n ? this.rdf3xPrimaryIndex!.groupAggregateJoinPatterns(rdf3xGroupAggregatePatterns, groupOptions)\n : this.index.groupAggregateJoinPatterns(groupAggregatePushdown.patterns, groupOptions);\n const groupPlanPrefix = useRdf3xPrimary\n ? groupAggregatePushdown.countOnly ? 'Rdf3xPrimaryGroupCount' : 'Rdf3xPrimaryGroupAggregate'\n : groupAggregatePushdown.countOnly ? 'IndexGroupCount' : 'IndexGroupAggregate';\n bindings = scan.bindings;\n metrics.scannedRows += scan.metrics.matchedRows;\n metrics.joinedRows = scan.metrics.matchedRows;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += groupAggregatePushdown.pushedDownFilters;\n metrics.filtersPushedDown += groupAggregatePushdown.pushedDownHaving;\n if (!useRdf3xPrimary && groupAggregatePushdown.reorderPlan) {\n metrics.plan.push(groupAggregatePushdown.reorderPlan);\n }\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n metrics.plan.push(`${groupPlanPrefix}(${(query.groupBy ?? []).map((variableName) => `?${variableName}`).join(',')})`);\n if (groupAggregatePushdown.pushedDownHaving > 0) {\n metrics.plan.push(`${groupPlanPrefix}Having(${(query.having ?? []).map(describeFilter).join(',')})`);\n }\n if (groupAggregatePushdown.orderPushed) {\n metrics.plan.push(`${groupPlanPrefix}Order(${describeQueryOrder(query.orderBy ?? [])})`);\n }\n if (groupAggregatePushdown.paginationPushed) {\n metrics.plan.push(`${groupPlanPrefix}Limit`);\n }\n metrics.plan.push(aggregatePlan(aggregates, true));\n metrics.plan.push(groupAggregatePushdown.countOnly\n ? 'Aggregate(group-count-index)'\n : aggregates.length > 1\n ? 'Aggregate(group-basic-multi-index)'\n : 'Aggregate(group-basic-index)');\n remainingSources.splice(0, remainingSources.length);\n groupedAggregatePushed = true;\n } else if (requiredBgpPushdown) {\n const useRdf3xPrimary = this.canUseRdf3xPrimaryJoin(requiredBgpPushdown.patterns);\n const scanOptions = {\n ...(requiredBgpPushdown.project ? { project: requiredBgpPushdown.project } : {}),\n ...(requiredBgpPushdown.distinctPushed ? { distinct: true } : {}),\n ...(requiredBgpPushdown.values ? { values: requiredBgpPushdown.values } : {}),\n ...(requiredBgpPushdown.orderPushed ? { orderBy: query.orderBy } : {}),\n ...(requiredBgpPushdown.paginationPushed && query.limit !== undefined ? { limit: Math.max(0, query.limit) } : {}),\n ...(requiredBgpPushdown.paginationPushed && query.offset !== undefined ? { offset: Math.max(0, query.offset) } : {}),\n ...(requiredBgpPushdown.paginationPushed ? { countMatchedRows: false } : {}),\n };\n const scan = useRdf3xPrimary\n ? this.rdf3xPrimaryIndex!.joinPatterns(requiredBgpPushdown.patterns, scanOptions)\n : this.index.joinPatterns(requiredBgpPushdown.patterns, scanOptions);\n bindings = scan.bindings;\n metrics.scannedRows += scan.metrics.matchedRows;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += requiredBgpPushdown.pushedDownFilters;\n if (!useRdf3xPrimary && requiredBgpPushdown.reorderPlan) {\n metrics.plan.push(requiredBgpPushdown.reorderPlan);\n }\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n metrics.plan.push(`${useRdf3xPrimary ? 'Rdf3xPrimaryJoin' : 'IndexJoin'}(${requiredBgpPushdown.patterns.map((source) => describePatternSource(source)).join('|')})`);\n if (requiredBgpPushdown.orderPushed) {\n metrics.plan.push(`${useRdf3xPrimary ? 'Rdf3xPrimaryJoinOrder' : 'IndexJoinOrder'}(${describeQueryOrder(query.orderBy ?? [])})`);\n }\n if (requiredBgpPushdown.distinctPushed) {\n metrics.plan.push(`${useRdf3xPrimary ? 'Rdf3xPrimaryJoinDistinct' : 'IndexJoinDistinct'}(${(requiredBgpPushdown.project ?? []).map((variableName) => `?${variableName}`).join(',')})`);\n }\n if (requiredBgpPushdown.paginationPushed) {\n metrics.plan.push(useRdf3xPrimary ? 'Rdf3xPrimaryJoinLimit' : 'IndexJoinLimit');\n }\n remainingSources.splice(0, remainingSources.length);\n }\n\n while (remainingSources.length > 0) {\n const sourceIndex = this.chooseRequiredSourceIndex(remainingSources, bindings, requiredFilters, metrics);\n const [source] = remainingSources.splice(sourceIndex, 1);\n bindings = this.joinRequiredSource(\n bindings,\n source,\n requiredFilters,\n metrics,\n singleScanPushdown,\n );\n if (bindings.length === 0) {\n break;\n }\n }\n\n if ((query.binds?.length ?? 0) > 0) {\n bindings = this.applyBinds(bindings, query.binds ?? []);\n metrics.plan.push(`Bind(${(query.binds ?? []).map(describeBind).join(',')})`);\n }\n\n for (const rawOptionalGroup of query.optional ?? []) {\n const optionalGroup = normalizeOptionalGroup(rawOptionalGroup);\n bindings = this.joinOptionalGroup(bindings, optionalGroup, metrics);\n metrics.plan.push(`OptionalJoin(${optionalGroup.patterns.map(describePattern).join(',')})`);\n }\n\n for (const unionGroup of query.unions ?? []) {\n bindings = this.joinUnionGroup(bindings, unionGroup.branches, requiredFilters, metrics);\n metrics.plan.push(`Union(${unionGroup.branches.map((branch) => branch.patterns.map(describePattern).join(',')).join('|')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n for (const minusGroup of query.minus ?? []) {\n bindings = this.applyMinusGroup(bindings, minusGroup, metrics);\n metrics.plan.push(`Minus(${minusGroup.patterns.map(describePattern).join(',')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n for (const existsGroup of query.exists ?? []) {\n bindings = this.applyExistsGroup(bindings, existsGroup, metrics);\n metrics.plan.push(`Exists(${existsGroup.patterns.map(describePattern).join(',')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n const postRequiredFilters = this.requiredFiltersNeedingPostApply(\n query,\n requiredPatterns,\n requiredFilters,\n requiredBgpPushdown,\n );\n if (postRequiredFilters.length > 0 && !groupedAggregatePushed) {\n bindings = bindings.filter((binding) => this.matchesFilters(binding, postRequiredFilters));\n metrics.filtersApplied += postRequiredFilters.length;\n metrics.plan.push(`Filter(${postRequiredFilters.map(describeFilter).join(',')})`);\n }\n\n if (groupedAggregatePushed && groupAggregatePushdown) {\n if ((query.having?.length ?? 0) > groupAggregatePushdown.pushedDownHaving) {\n bindings = bindings.filter((binding) => this.matchesFilters(binding, query.having ?? []));\n metrics.filtersApplied += query.having?.length ?? 0;\n metrics.plan.push(`Having(${(query.having ?? []).map(describeFilter).join(',')})`);\n }\n } else if (aggregates.length > 0 && (query.groupBy?.length ?? 0) > 0) {\n const joinedRows = bindings.length;\n bindings = this.groupAggregateBindings(bindings, query.groupBy ?? [], aggregates);\n metrics.joinedRows = joinedRows;\n metrics.plan.push(aggregatePlan(aggregates, true));\n if ((query.having?.length ?? 0) > 0) {\n bindings = bindings.filter((binding) => this.matchesFilters(binding, query.having ?? []));\n metrics.filtersApplied += query.having?.length ?? 0;\n metrics.plan.push(`Having(${(query.having ?? []).map(describeFilter).join(',')})`);\n }\n } else if (aggregates.length > 0) {\n const { binding: aggregateBinding, firstCount } = this.aggregateBindings(bindings, aggregates);\n const having = query.having ?? [];\n if (having.length > 0 && !this.matchesFilters(aggregateBinding, having)) {\n metrics.joinedRows = bindings.length;\n metrics.returnedRows = 0;\n metrics.durationMs = Date.now() - start;\n metrics.filtersApplied += having.length;\n metrics.plan.push(aggregatePlan(aggregates, false));\n metrics.plan.push(`Having(${having.map(describeFilter).join(',')})`);\n return {\n bindings: [],\n count: firstCount,\n metrics,\n };\n }\n metrics.joinedRows = bindings.length;\n metrics.returnedRows = 1;\n metrics.durationMs = Date.now() - start;\n metrics.plan.push(aggregatePlan(aggregates, false));\n if (having.length > 0) {\n metrics.filtersApplied += having.length;\n metrics.plan.push(`Having(${having.map(describeFilter).join(',')})`);\n }\n return {\n bindings: [aggregateBinding],\n count: firstCount,\n metrics,\n };\n }\n\n const joinedRows = metrics.joinedRows > 0\n ? metrics.joinedRows\n : singleScanPushdown?.paginationPushed\n || requiredBgpPushdown?.paginationPushed\n ? metrics.scannedRows\n : bindings.length;\n\n if (\n query.orderBy\n && query.orderBy.length > 0\n && !singleScanPushdown?.orderPushed\n && !requiredBgpPushdown?.orderPushed\n && !groupAggregatePushdown?.orderPushed\n ) {\n bindings = [...bindings].sort((left, right) => compareBindings(left, right, query.orderBy ?? []));\n metrics.plan.push('Sort');\n }\n\n let projected = query.select && query.select.length > 0\n ? bindings.map((binding) => projectBinding(binding, query.select ?? []))\n : bindings;\n\n if (query.distinct && !requiredBgpPushdown?.distinctPushed) {\n projected = distinctBindings(projected);\n metrics.plan.push('Distinct');\n }\n\n if (\n (query.offset !== undefined || query.limit !== undefined)\n && !singleScanPushdown?.paginationPushed\n && !requiredBgpPushdown?.paginationPushed\n && !groupAggregatePushdown?.paginationPushed\n ) {\n const startOffset = Math.max(0, query.offset ?? 0);\n const endOffset = query.limit === undefined\n ? undefined\n : startOffset + Math.max(0, query.limit);\n projected = projected.slice(startOffset, endOffset);\n metrics.plan.push('Limit');\n }\n\n metrics.joinedRows = joinedRows;\n metrics.returnedRows = projected.length;\n metrics.durationMs = Date.now() - start;\n return {\n bindings: projected,\n metrics,\n };\n }\n\n private chooseRequiredSourceIndex(\n sources: RequiredSource[],\n bindings: RdfBindingRow[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): number {\n const boundVariables = this.boundVariables(bindings);\n const hasBoundVariables = boundVariables.size > 0;\n const sampleBinding = bindings[0] ?? {};\n const choices = sources.map((source, index) => {\n const sourceVariables = variablesInRequiredSource(source);\n const connected = sourceVariables.length === 0\n || sourceVariables.some((variableName) => boundVariables.has(variableName));\n const estimate = this.estimateSource(source, bindings, filters, metrics);\n return {\n index,\n disconnectedPenalty: hasBoundVariables && !connected ? 1 : 0,\n estimatedRows: estimate.rows,\n estimatedCostRows: estimate.costRows,\n rank: this.sourceRank(source, sampleBinding),\n };\n });\n\n choices.sort((left, right) => (\n left.disconnectedPenalty - right.disconnectedPenalty\n || left.estimatedCostRows - right.estimatedCostRows\n || left.estimatedRows - right.estimatedRows\n || left.rank - right.rank\n || left.index - right.index\n ));\n return choices[0]?.index ?? 0;\n }\n\n private estimatePatternRows(\n pattern: RdfQueryPattern,\n bindings: RdfBindingRow[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): number {\n const sample = (bindings.length > 0 ? bindings : [{}]).slice(0, PLANNER_SAMPLE_BINDINGS);\n const fanoutEstimate = this.estimatePatternRowsByDistinctFanout(pattern, sample, filters, metrics);\n if (fanoutEstimate !== undefined) {\n if (bindings.length > sample.length && sample.length > 0) {\n return Math.ceil(fanoutEstimate * (bindings.length / sample.length));\n }\n return fanoutEstimate;\n }\n\n const estimates = new Map<string, number>();\n for (const binding of sample) {\n const compiled = this.compilePattern(pattern, binding, filters);\n if (!compiled) {\n continue;\n }\n metrics.cardinalityEstimates = (metrics.cardinalityEstimates ?? 0) + 1;\n const key = compiledPatternKey(compiled);\n if (!estimates.has(key)) {\n estimates.set(key, this.index.estimateCardinality(compiled).rows);\n metrics.distinctCardinalityEstimates = (metrics.distinctCardinalityEstimates ?? 0) + 1;\n }\n }\n const rows = sample.reduce((sum, binding) => {\n const compiled = this.compilePattern(pattern, binding, filters);\n return compiled ? sum + (estimates.get(compiledPatternKey(compiled)) ?? 0) : sum;\n }, 0);\n if (bindings.length > sample.length && sample.length > 0) {\n return Math.ceil(rows * (bindings.length / sample.length));\n }\n return rows;\n }\n\n private estimatePatternRowsByDistinctFanout(\n pattern: RdfQueryPattern,\n sample: RdfBindingRow[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): number | undefined {\n if (sample.length < 2) {\n return undefined;\n }\n const boundSlots = this.boundPatternSlots(pattern, sample);\n if (boundSlots.length === 0) {\n return undefined;\n }\n const boundVariables = new Set(boundSlots.map((slot) => slot.variable));\n if (filters.some((filter) => boundVariables.has(filter.variable))) {\n return undefined;\n }\n\n const generalized = this.compilePattern(pattern, {}, filters);\n if (!generalized) {\n return undefined;\n }\n\n const total = this.index.estimateCardinality(generalized).rows;\n const distinct = this.index.countDistinctTuple(generalized, boundSlots.map((slot) => slot.key)).rows;\n metrics.cardinalityEstimates = (metrics.cardinalityEstimates ?? 0) + sample.length;\n metrics.distinctCardinalityEstimates = (metrics.distinctCardinalityEstimates ?? 0) + 2;\n if (distinct === 0 || total === 0) {\n return 0;\n }\n return Math.ceil((total / distinct) * sample.length);\n }\n\n private boundPatternSlots(\n pattern: RdfQueryPattern,\n sample: RdfBindingRow[],\n ): Array<{ key: RdfQueryPatternKey; variable: string }> {\n return TERM_KEYS\n .map((key) => ({ key, value: pattern[key] }))\n .filter((slot): slot is { key: RdfQueryPatternKey; value: RdfQueryVariable } => {\n if (!isVariable(slot.value)) {\n return false;\n }\n const variableName = slot.value.variable;\n return sample.every((binding) => Boolean(binding[variableName]));\n })\n .map((slot) => ({ key: slot.key, variable: slot.value.variable }));\n }\n\n private estimateSource(\n source: RequiredSource,\n bindings: RdfBindingRow[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): RequiredSourceEstimate {\n if (source.kind === 'pattern') {\n const rows = source.tupleValues\n ? this.estimateTuplePatternRows(source, bindings, filters, metrics)\n : this.estimatePatternRows(source.pattern, bindings, filters, metrics);\n return { rows, costRows: rows };\n }\n if (source.kind === 'values') {\n const rows = source.source.rows.length * Math.max(1, bindings.length);\n return { rows, costRows: rows };\n }\n\n const sample = (bindings.length > 0 ? bindings : [{}]).slice(0, PLANNER_SAMPLE_BINDINGS);\n if (!this.searchSourceHasBoundVariables(source, sample)) {\n return this.estimateUnboundSearchSource(source, bindings, metrics);\n }\n\n const sourceVariable = source.pattern.source;\n const boundSourceEstimate = sourceVariable && this.canUseBoundSourceSearch(sample, source, sourceVariable)\n ? this.estimateSearchRowsByBoundSource(source, sample, metrics)\n : undefined;\n if (boundSourceEstimate !== undefined) {\n const rows = bindings.length > sample.length && sample.length > 0\n ? Math.ceil(boundSourceEstimate * (bindings.length / sample.length))\n : boundSourceEstimate;\n return { rows, costRows: rows };\n }\n\n if (hasSearchWindow(source)) {\n return this.estimateUnboundSearchSource(source, bindings, metrics);\n }\n\n const results = source.kind === 'text'\n ? this.textSearchResults(source)\n : this.vectorSearchResults(source);\n let rows = 0;\n\n for (const binding of sample) {\n for (const result of results) {\n const next = source.kind === 'text'\n ? bindTextSearchResult(binding, source.pattern, result as RdfTextSearchResult)\n : bindVectorSearchResult(binding, source.pattern, result as RdfVectorSearchResult);\n if (next) {\n rows++;\n }\n }\n }\n\n if (bindings.length > sample.length && sample.length > 0) {\n const estimatedRows = Math.ceil(rows * (bindings.length / sample.length));\n return { rows: estimatedRows, costRows: estimatedRows };\n }\n return { rows, costRows: rows };\n }\n\n private estimateUnboundSearchSource(\n source: TextRequiredSource | VectorRequiredSource,\n bindings: RdfBindingRow[],\n metrics: RdfLocalQueryMetrics,\n ): RequiredSourceEstimate {\n metrics.searchCardinalityEstimates = (metrics.searchCardinalityEstimates ?? 0) + 1;\n const rows = source.kind === 'text'\n ? this.estimateTextSearchRows(source)\n : this.estimateVectorSearchRows(source);\n const bindingCount = Math.max(1, bindings.length);\n if (!hasSearchWindow(source)) {\n const estimatedRows = rows * bindingCount;\n return { rows: estimatedRows, costRows: estimatedRows };\n }\n\n metrics.searchCardinalityEstimates = (metrics.searchCardinalityEstimates ?? 0) + 1;\n const candidateRows = source.kind === 'text'\n ? this.estimateTextSearchRows(source, undefined, false)\n : this.estimateVectorSearchRows(source, undefined, false);\n const estimatedRows = rows * bindingCount;\n return {\n rows: estimatedRows,\n costRows: candidateRows + estimatedRows,\n };\n }\n\n private estimateTuplePatternRows(\n source: PatternRequiredSource,\n bindings: RdfBindingRow[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): number {\n const sample = (bindings.length > 0 ? bindings : [{}]).slice(0, PLANNER_SAMPLE_BINDINGS);\n const estimates = new Map<string, number>();\n let rows = 0;\n\n for (const binding of sample) {\n for (const row of source.tupleValues?.rows ?? []) {\n const tupleBinding = mergeTupleValuesBinding(binding, source.tupleValues?.variables ?? [], row);\n if (!tupleBinding) {\n continue;\n }\n const compiled = this.compilePattern(source.pattern, tupleBinding, filters);\n if (!compiled) {\n continue;\n }\n metrics.cardinalityEstimates = (metrics.cardinalityEstimates ?? 0) + 1;\n const key = compiledPatternKey(compiled);\n if (!estimates.has(key)) {\n estimates.set(key, this.index.estimateCardinality(compiled).rows);\n metrics.distinctCardinalityEstimates = (metrics.distinctCardinalityEstimates ?? 0) + 1;\n }\n rows += estimates.get(key) ?? 0;\n }\n }\n\n if (bindings.length > sample.length && sample.length > 0) {\n return Math.ceil(rows * (bindings.length / sample.length));\n }\n return rows;\n }\n\n private searchSourceHasBoundVariables(\n source: TextRequiredSource | VectorRequiredSource,\n sample: RdfBindingRow[],\n ): boolean {\n const variables = variablesInRequiredSource(source);\n return variables.some((variableName) => sample.some((binding) => Boolean(binding[variableName])));\n }\n\n private estimateSearchRowsByBoundSource(\n source: TextRequiredSource | VectorRequiredSource,\n sample: RdfBindingRow[],\n metrics: RdfLocalQueryMetrics,\n ): number | undefined {\n const sourceVariable = source.pattern.source;\n if (!sourceVariable) {\n return undefined;\n }\n\n const estimates = new Map<string, number>();\n let rows = 0;\n let sawBoundSource = false;\n for (const binding of sample) {\n const term = binding[sourceVariable];\n if (!term) {\n return undefined;\n }\n\n sawBoundSource = true;\n if (term.termType !== 'NamedNode') {\n continue;\n }\n\n if (!estimates.has(term.value)) {\n metrics.searchCardinalityEstimates = (metrics.searchCardinalityEstimates ?? 0) + 1;\n estimates.set(term.value, source.kind === 'text'\n ? this.estimateTextSearchRows(source, term.value)\n : this.estimateVectorSearchRows(source, term.value));\n }\n rows += estimates.get(term.value) ?? 0;\n }\n\n return sawBoundSource ? rows : undefined;\n }\n\n private estimateTextSearchRows(source: TextRequiredSource, exactSource?: string, includeWindow = true): number {\n if (!this.textIndex) {\n throw new Error('RdfLocalQuery textSearch requires a configured RdfTextIndex');\n }\n const options = this.textSearchOptions(source.pattern, exactSource, includeWindow);\n return options ? this.textIndex.estimateSearchCardinality(options).rows : 0;\n }\n\n private estimateVectorSearchRows(source: VectorRequiredSource, exactSource?: string, includeWindow = true): number {\n if (!this.vectorIndex) {\n throw new Error('RdfLocalQuery vectorSearch requires a configured RdfVectorIndex');\n }\n const options = this.vectorSearchOptions(source.pattern, exactSource, includeWindow);\n return options ? this.vectorIndex.estimateSearchCardinality(options).rows : 0;\n }\n\n private boundVariables(bindings: RdfBindingRow[]): Set<string> {\n const names = new Set<string>();\n for (const binding of bindings.slice(0, PLANNER_SAMPLE_BINDINGS)) {\n for (const name of Object.keys(binding)) {\n names.add(name);\n }\n }\n return names;\n }\n\n private patternRank(pattern: RdfQueryPattern, binding: RdfBindingRow): number {\n let rank = 0;\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (!value) continue;\n if (isVariable(value)) {\n if (binding[value.variable]) {\n rank += key === 'graph' ? 0 : 1;\n } else {\n rank += 8;\n }\n } else {\n rank += key === 'graph' ? 0 : 1;\n }\n }\n return rank;\n }\n\n private sourceRank(source: RequiredSource, binding: RdfBindingRow): number {\n if (source.kind === 'pattern') {\n return this.patternRank(source.pattern, binding);\n }\n if (source.kind === 'values') {\n return 0;\n }\n\n const variables = variablesInRequiredSource(source);\n if (variables.some((variableName) => binding[variableName])) {\n return 0;\n }\n return source.kind === 'text' ? 4 : 5;\n }\n\n private joinRequiredSource(\n input: RdfBindingRow[],\n source: RequiredSource,\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n singleScanPushdown?: SingleScanPushdown,\n ): RdfBindingRow[] {\n switch (source.kind) {\n case 'pattern': {\n const result = this.joinPattern(\n input,\n source,\n filters,\n metrics,\n false,\n singleScanPushdown?.options,\n );\n const scanPlan = requiredSourceScanPlan(result.scanBackend);\n metrics.plan.push(`${scanPlan}(${describePattern(source.pattern)})`);\n if (singleScanPushdown?.orderPushed) {\n metrics.plan.push(`${scanPlanOrder(scanPlan)}(${describeScanOrder(singleScanPushdown.options)})`);\n }\n if (singleScanPushdown?.paginationPushed) {\n metrics.plan.push(scanPlanLimit(scanPlan));\n }\n return result.bindings;\n }\n case 'text': {\n const bindings = this.joinTextSearch(input, source, metrics);\n metrics.plan.push(`TextSearch(${describeTextSearch(source.pattern)})`);\n return bindings;\n }\n case 'vector': {\n const bindings = this.joinVectorSearch(input, source, metrics);\n metrics.plan.push(`VectorSearch(${describeVectorSearch(source.pattern)})`);\n return bindings;\n }\n case 'values': {\n const bindings = joinValuesSource(input, source.source);\n metrics.scannedRows += source.source.rows.length;\n metrics.plan.push(`Values(${source.source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n return bindings;\n }\n default: {\n const exhaustive: never = source;\n throw new Error(`Unsupported RDF required source: ${JSON.stringify(exhaustive)}`);\n }\n }\n }\n\n private joinOptionalGroup(\n input: RdfBindingRow[],\n optionalGroup: RdfOptionalQueryGroup,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const optionalFilters = optionalGroup.filters ?? [];\n if (optionalFilters.length > 0) {\n metrics.plan.push(`OptionalFilter(${optionalFilters.map(describeFilter).join(',')})`);\n }\n return input.flatMap((binding) => {\n let matches: RdfBindingRow[] = [binding];\n for (const source of optionalGroup.values ?? []) {\n matches = joinValuesSource(matches, source);\n metrics.scannedRows += source.rows.length;\n metrics.plan.push(`OptionalValues(${source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n if (matches.length === 0) {\n return [binding];\n }\n }\n const grouped = (optionalGroup.values?.length ?? 0) === 0\n ? this.joinPatternGroupRdf3x(matches, optionalGroup.patterns, optionalFilters, metrics, true)\n : undefined;\n if (grouped) {\n matches = grouped.bindings;\n } else {\n for (const pattern of optionalGroup.patterns) {\n matches = this.joinPattern(matches, { kind: 'pattern', pattern, originalIndex: -1 }, optionalFilters, metrics, true).bindings;\n if (matches.length === 0) {\n return [binding];\n }\n }\n }\n for (const unionGroup of optionalGroup.unions ?? []) {\n matches = this.joinUnionGroup(matches, unionGroup.branches, optionalFilters, metrics);\n metrics.plan.push(`OptionalUnion(${unionGroup.branches.map((branch) => branch.patterns.map(describePattern).join(',')).join('|')})`);\n if (matches.length === 0) {\n return [binding];\n }\n }\n for (const rawNestedOptionalGroup of optionalGroup.optional ?? []) {\n const nestedOptionalGroup = normalizeOptionalGroup(rawNestedOptionalGroup);\n matches = this.joinOptionalGroup(matches, nestedOptionalGroup, metrics);\n metrics.plan.push(`OptionalNestedJoin(${nestedOptionalGroup.patterns.map(describePattern).join(',')})`);\n if (matches.length === 0) {\n return [binding];\n }\n }\n for (const minusGroup of optionalGroup.minus ?? []) {\n matches = this.applyMinusGroup(matches, minusGroup, metrics);\n metrics.plan.push(`OptionalMinus(${minusGroup.patterns.map(describePattern).join(',')})`);\n if (matches.length === 0) {\n return [binding];\n }\n }\n for (const existsGroup of optionalGroup.exists ?? []) {\n matches = this.applyExistsGroup(matches, existsGroup, metrics);\n metrics.plan.push(`OptionalExists(${existsGroup.patterns.map(describePattern).join(',')})`);\n if (matches.length === 0) {\n return [binding];\n }\n }\n if ((optionalGroup.binds?.length ?? 0) > 0) {\n matches = this.applyBinds(matches, optionalGroup.binds ?? []);\n metrics.plan.push(`OptionalBind(${(optionalGroup.binds ?? []).map(describeBind).join(',')})`);\n }\n if (optionalFilters.length > 0) {\n matches = matches.filter((match) => this.matchesFilters(match, optionalFilters));\n metrics.filtersApplied += optionalFilters.length;\n if (matches.length === 0) {\n return [binding];\n }\n }\n return matches;\n });\n }\n\n private joinUnionGroup(\n input: RdfBindingRow[],\n branches: RdfUnionQueryBranch[],\n outerFilters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const branch of branches) {\n let matches: RdfBindingRow[] = [binding];\n const branchFilters = [...outerFilters, ...(branch.filters ?? [])];\n for (const source of branch.values ?? []) {\n matches = joinValuesSource(matches, source);\n metrics.scannedRows += source.rows.length;\n metrics.plan.push(`UnionValues(${source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length === 0) {\n continue;\n }\n const grouped = (branch.values?.length ?? 0) === 0\n ? this.joinPatternGroupRdf3x(matches, branch.patterns, branchFilters, metrics, false)\n : undefined;\n if (grouped) {\n matches = grouped.bindings;\n } else {\n for (const pattern of branch.patterns) {\n matches = this.joinPattern(matches, { kind: 'pattern', pattern, originalIndex: -1 }, branchFilters, metrics, false).bindings;\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length === 0) {\n continue;\n }\n for (const unionGroup of branch.unions ?? []) {\n matches = this.joinUnionGroup(matches, unionGroup.branches, branchFilters, metrics);\n metrics.plan.push(`UnionNested(${unionGroup.branches.map((nestedBranch) => nestedBranch.patterns.map(describePattern).join(',')).join('|')})`);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length === 0) {\n continue;\n }\n if ((branch.binds?.length ?? 0) > 0) {\n matches = this.applyBinds(matches, branch.binds ?? []);\n metrics.plan.push(`UnionBind(${(branch.binds ?? []).map(describeBind).join(',')})`);\n }\n if (matches.length === 0) {\n continue;\n }\n for (const rawOptionalGroup of branch.optional ?? []) {\n const optionalGroup = normalizeOptionalGroup(rawOptionalGroup);\n matches = this.joinOptionalGroup(matches, optionalGroup, metrics);\n metrics.plan.push(`UnionOptionalJoin(${optionalGroup.patterns.map(describePattern).join(',')})`);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length === 0) {\n continue;\n }\n if (branch.filters?.length) {\n matches = matches.filter((match) => this.matchesFilters(match, branch.filters ?? []));\n metrics.filtersApplied += branch.filters.length;\n metrics.plan.push(`UnionFilter(${branch.filters.map(describeFilter).join(',')})`);\n }\n output.push(...matches);\n }\n }\n return output;\n }\n\n private applyDependentValues(\n input: RdfBindingRow[],\n sources: RdfValuesBindingSource[] | undefined,\n metrics: RdfLocalQueryMetrics,\n label: 'Minus' | 'Exists',\n ): RdfBindingRow[] {\n let matches = input;\n for (const source of sources ?? []) {\n matches = joinValuesSource(matches, source);\n metrics.scannedRows += source.rows.length;\n metrics.plan.push(`${label}Values(${source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n if (matches.length === 0) {\n break;\n }\n }\n return matches;\n }\n\n private applyMinusGroup(\n input: RdfBindingRow[],\n minusGroup: RdfMinusQueryGroup,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const filters = minusGroup.filters ?? [];\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n let matches: RdfBindingRow[] = [binding];\n matches = this.applyDependentValues(matches, minusGroup.values, metrics, 'Minus');\n const grouped = (minusGroup.values?.length ?? 0) === 0\n ? this.joinPatternGroupRdf3x(matches, minusGroup.patterns, filters, metrics, false)\n : undefined;\n if (grouped) {\n matches = grouped.bindings;\n } else {\n for (const pattern of minusGroup.patterns) {\n matches = this.joinPattern(matches, { kind: 'pattern', pattern, originalIndex: -1 }, filters, metrics, false).bindings;\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length > 0) {\n for (const unionGroup of minusGroup.unions ?? []) {\n matches = this.joinUnionGroup(matches, unionGroup.branches, filters, metrics);\n metrics.plan.push(`MinusUnion(${unionGroup.branches.map((branch) => branch.patterns.map(describePattern).join(',')).join('|')})`);\n if (matches.length === 0) {\n break;\n }\n }\n }\n for (const rawOptionalGroup of minusGroup.optional ?? []) {\n const optionalGroup = normalizeOptionalGroup(rawOptionalGroup);\n matches = this.joinOptionalGroup(matches, optionalGroup, metrics);\n metrics.plan.push(`MinusOptionalJoin(${optionalGroup.patterns.map(describePattern).join(',')})`);\n }\n if ((minusGroup.binds?.length ?? 0) > 0) {\n matches = this.applyBinds(matches, minusGroup.binds ?? []);\n metrics.plan.push(`MinusBind(${(minusGroup.binds ?? []).map(describeBind).join(',')})`);\n }\n if (filters.length > 0) {\n matches = matches.filter((match) => this.matchesFilters(match, filters));\n metrics.filtersApplied += filters.length;\n metrics.plan.push(`MinusFilter(${filters.map(describeFilter).join(',')})`);\n }\n if (matches.length === 0) {\n output.push(binding);\n }\n }\n return output;\n }\n\n private applyExistsGroup(\n input: RdfBindingRow[],\n existsGroup: RdfExistsQueryGroup,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const filters = existsGroup.filters ?? [];\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n let matches: RdfBindingRow[] = [binding];\n matches = this.applyDependentValues(matches, existsGroup.values, metrics, 'Exists');\n const grouped = (existsGroup.values?.length ?? 0) === 0\n ? this.joinPatternGroupRdf3x(matches, existsGroup.patterns, filters, metrics, false)\n : undefined;\n if (grouped) {\n matches = grouped.bindings;\n } else {\n for (const pattern of existsGroup.patterns) {\n matches = this.joinPattern(matches, { kind: 'pattern', pattern, originalIndex: -1 }, filters, metrics, false).bindings;\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length > 0) {\n for (const unionGroup of existsGroup.unions ?? []) {\n matches = this.joinUnionGroup(matches, unionGroup.branches, filters, metrics);\n metrics.plan.push(`ExistsUnion(${unionGroup.branches.map((branch) => branch.patterns.map(describePattern).join(',')).join('|')})`);\n if (matches.length === 0) {\n break;\n }\n }\n }\n for (const rawOptionalGroup of existsGroup.optional ?? []) {\n const optionalGroup = normalizeOptionalGroup(rawOptionalGroup);\n matches = this.joinOptionalGroup(matches, optionalGroup, metrics);\n metrics.plan.push(`ExistsOptionalJoin(${optionalGroup.patterns.map(describePattern).join(',')})`);\n }\n if ((existsGroup.binds?.length ?? 0) > 0) {\n matches = this.applyBinds(matches, existsGroup.binds ?? []);\n metrics.plan.push(`ExistsBind(${(existsGroup.binds ?? []).map(describeBind).join(',')})`);\n }\n if (filters.length > 0) {\n matches = matches.filter((match) => this.matchesFilters(match, filters));\n metrics.filtersApplied += filters.length;\n metrics.plan.push(`ExistsFilter(${filters.map(describeFilter).join(',')})`);\n }\n if (matches.length > 0) {\n output.push(binding);\n }\n }\n return output;\n }\n\n private joinPatternGroupRdf3x(\n input: RdfBindingRow[],\n patterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n optional: boolean,\n ): PatternJoinResult | undefined {\n if (!this.rdf3xPrimaryIndex || patterns.length < 2) {\n return undefined;\n }\n\n const compiledByBinding = input.map((binding) => {\n const compiled = patterns.map((pattern) => this.compileJoinPatternForBinding(pattern, binding, filters));\n return {\n binding,\n patterns: compiled,\n };\n });\n if (compiledByBinding.some((entry) => (\n entry.patterns.some((pattern) => !pattern)\n || !this.canUseRdf3xPrimaryJoin(entry.patterns as CompiledJoinPattern[])\n ))) {\n return undefined;\n }\n\n const output: RdfBindingRow[] = [];\n for (const entry of compiledByBinding) {\n const compiled = entry.patterns as CompiledJoinPattern[];\n const scan = this.rdf3xPrimaryIndex.joinPatterns(compiled);\n metrics.scannedRows += scan.metrics.matchedRows;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += uniqueNumbers(compiled.flatMap((pattern) => pattern.pattern.pushedDownFilterIndexes)).length;\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n const remainingFilters = filtersWithoutIndexes(\n filters,\n uniqueNumbers(compiled.flatMap((pattern) => pattern.pattern.pushedDownFilterIndexes)),\n );\n const before = output.length;\n for (const row of scan.bindings) {\n const next = mergeBindingRows(entry.binding, row);\n if (next && this.matchesNewlyBoundFilters(next, entry.binding, remainingFilters)) {\n output.push(next);\n }\n }\n if (optional && output.length === before) {\n output.push(entry.binding);\n }\n }\n\n return {\n bindings: output,\n scanBackend: 'rdf3x',\n };\n }\n\n private compileJoinPatternForBinding(\n pattern: RdfQueryPattern,\n binding: RdfBindingRow,\n filters: RdfQueryFilter[],\n ): CompiledJoinPattern | undefined {\n const variables: Partial<Record<RdfQueryPatternKey, string>> = {};\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (isVariable(value) && !binding[value.variable]) {\n variables[key] = value.variable;\n }\n }\n\n const compiled = this.compilePattern(pattern, binding, filters);\n return compiled ? { pattern: compiled, variables } : undefined;\n }\n\n private joinPattern(\n input: RdfBindingRow[],\n source: PatternRequiredSource,\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n optional: boolean,\n scanOptions?: RdfQuadScanOptions,\n ): PatternJoinResult {\n const output: RdfBindingRow[] = [];\n const backends = new Set<Exclude<PatternScanBackend, 'mixed' | 'none'>>();\n const { pattern } = source;\n\n for (const binding of input) {\n const compiled = this.compilePattern(pattern, binding, filters);\n if (!compiled) {\n if (optional) {\n output.push(binding);\n }\n continue;\n }\n const tupleValues = this.tupleValuesForBinding(source, binding);\n const scan = this.scanCompiledPattern(compiled, tupleValues, scanOptions);\n backends.add(scan.metrics.engine === 'solid-rdf3x' ? 'rdf3x' : 'index');\n metrics.scannedRows += scan.metrics.matchedRows;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += compiled.pushedDownFilters;\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n\n for (const quad of scan.quads) {\n const next = this.bindQuad(pattern, binding, quad);\n const remainingFilters = filtersWithoutIndexes(filters, compiled.pushedDownFilterIndexes);\n if (next && this.matchesNewlyBoundFilters(next, binding, remainingFilters)) {\n output.push(next);\n }\n }\n }\n\n return {\n bindings: output,\n scanBackend: backends.size === 0\n ? 'none'\n : backends.size === 1\n ? [...backends][0]\n : 'mixed',\n };\n }\n\n private scanCompiledPattern(\n compiled: CompiledPattern,\n tupleValues: RdfQuadTupleConstraintSource | undefined,\n scanOptions?: RdfQuadScanOptions,\n ): RdfQuadIndexScanResult | Rdf3xTripleScanResult {\n if (this.canUseRdf3xPrimaryScan(compiled, scanOptions)) {\n const rdf3xPattern = toRdf3xTriplePattern(compiled);\n return tupleValues\n ? this.rdf3xPrimaryIndex!.scanWithTupleConstraints(rdf3xPattern, tupleValues, toRdf3xScanOptions(scanOptions))\n : this.rdf3xPrimaryIndex!.scan(rdf3xPattern, toRdf3xScanOptions(scanOptions));\n }\n return tupleValues\n ? this.index.scanWithTupleConstraints(compiled, tupleValues, scanOptions)\n : this.index.scan(compiled, scanOptions);\n }\n\n private canUseRdf3xPrimaryScan(\n pattern: QuintPattern,\n scanOptions?: RdfQuadScanOptions,\n ): boolean {\n return Boolean(this.rdf3xPrimaryIndex)\n && isRdf3xCompatiblePattern(pattern);\n }\n\n private requiredBgpPushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): RequiredBgpPushdown | undefined {\n if (\n requiredPatterns.length < 1\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || (query.binds?.length ?? 0) > 0\n || queryAggregates(query).length > 0\n ) {\n return undefined;\n }\n if (requiredPatterns.length === 1 && !query.distinct) {\n return undefined;\n }\n\n if (!this.canPushRequiredBgpFilters(requiredPatterns, filters)) {\n return undefined;\n }\n const values = query.values?.length\n ? this.requiredBgpValuesPushdown(query.values, requiredPatterns)\n : undefined;\n if ((query.values?.length ?? 0) > 0 && !values) {\n return undefined;\n }\n\n const distinctProject = query.distinct\n ? this.requiredBgpDistinctProject(query, requiredPatterns, filters)\n : undefined;\n if (query.distinct && !distinctProject) {\n return undefined;\n }\n\n const orderPushed = (query.orderBy?.length ?? 0) > 0;\n if (orderPushed && !this.canPushRequiredBgpOrder(requiredPatterns, query.orderBy ?? [])) {\n return undefined;\n }\n\n const sharedVariables = variablesSharedAcrossPatterns(requiredPatterns);\n if (requiredPatterns.length > 1 && sharedVariables.size === 0) {\n return undefined;\n }\n\n const compiled = requiredPatterns.map((pattern) => this.compileJoinPattern(pattern, filters));\n if (compiled.some((entry) => !entry)) {\n return undefined;\n }\n if (values && !this.canUseRdf3xPrimaryJoin(compiled as CompiledJoinPattern[])) {\n return undefined;\n }\n const reordered = this.reorderJoinPatterns(requiredPatterns, compiled as CompiledJoinPattern[], filters);\n return {\n patterns: reordered.patterns,\n ...(values ? { values } : {}),\n ...(reordered.reorderPlan ? { reorderPlan: reordered.reorderPlan } : {}),\n orderPushed,\n paginationPushed: query.limit !== undefined || query.offset !== undefined,\n distinctPushed: Boolean(distinctProject),\n ...(distinctProject ? { project: distinctProject } : {}),\n pushedDownFilters: filters.length,\n };\n }\n\n private requiredBgpValuesPushdown(\n values: RdfValuesBindingSource[],\n requiredPatterns: RdfQueryPattern[],\n ): RdfValuesBindingSource[] | undefined {\n const visibleVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n for (const source of values) {\n if (source.variables.length === 0 || new Set(source.variables).size !== source.variables.length) {\n return undefined;\n }\n if (source.variables.some((variableName) => !visibleVariables.has(variableName))) {\n return undefined;\n }\n if (source.rows.some((row) => source.variables.some((variableName) => !row[variableName]))) {\n return undefined;\n }\n }\n return values;\n }\n\n private requiredBgpDistinctProject(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): string[] | undefined {\n const visibleVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n const projectedVariables = uniqueStrings(\n query.select && query.select.length > 0\n ? query.select\n : [...visibleVariables],\n );\n if (projectedVariables.some((variableName) => !visibleVariables.has(variableName))) {\n return undefined;\n }\n\n const requiredForRecheck = new Set(filters.flatMap((filter) => filterVariables(filter)));\n for (const order of query.orderBy ?? []) {\n requiredForRecheck.add(order.variable);\n }\n if ([...requiredForRecheck].some((variableName) => !projectedVariables.includes(variableName))) {\n return undefined;\n }\n return projectedVariables;\n }\n\n private canPushRequiredBgpFilters(\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): boolean {\n const variables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n return filters.every((filter) => (\n !filter.variable2\n && variables.has(filter.variable)\n && isPushdownFilter(filter)\n && this.compilePushdownFilter(filter.variable, [filter]) !== null\n ));\n }\n\n private canPushRequiredBgpOrder(\n requiredPatterns: RdfQueryPattern[],\n orderBy: NonNullable<RdfLocalQuery['orderBy']>,\n ): boolean {\n if (orderBy.length === 0) {\n return true;\n }\n const variables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n return orderBy.every((entry) => variables.has(entry.variable));\n }\n\n private reorderJoinPatterns(\n requiredPatterns: RdfQueryPattern[],\n compiledPatterns: CompiledJoinPattern[],\n filters: RdfQueryFilter[],\n ): { patterns: CompiledJoinPattern[]; reorderPlan?: string } {\n if (compiledPatterns.length < 2) {\n return { patterns: compiledPatterns };\n }\n\n const candidates = requiredPatterns.map((pattern, index) => {\n const compiled = this.compilePattern(pattern, {}, filters);\n return {\n index,\n variables: new Set(variablesInPattern(pattern)),\n estimatedRows: compiled ? this.index.estimateCardinality(compiled).rows : Number.MAX_SAFE_INTEGER,\n };\n });\n const remaining = [...candidates];\n const selected: typeof candidates = [];\n const selectedVariables = new Set<string>();\n\n while (remaining.length > 0) {\n const hasSelectedVariables = selectedVariables.size > 0;\n remaining.sort((left, right) => {\n const leftConnected = !hasSelectedVariables || hasSharedVariable(left.variables, selectedVariables);\n const rightConnected = !hasSelectedVariables || hasSharedVariable(right.variables, selectedVariables);\n return Number(rightConnected) - Number(leftConnected)\n || left.estimatedRows - right.estimatedRows\n || left.index - right.index;\n });\n const [next] = remaining.splice(0, 1);\n selected.push(next);\n for (const variableName of next.variables) {\n selectedVariables.add(variableName);\n }\n }\n\n const order = selected.map((entry) => entry.index);\n if (order.every((index, position) => index === position)) {\n return { patterns: compiledPatterns };\n }\n\n return {\n patterns: order.map((index) => compiledPatterns[index]),\n reorderPlan: `JoinReorder(${order.join('>')})`,\n };\n }\n\n private compileJoinPattern(\n pattern: RdfQueryPattern,\n filters: RdfQueryFilter[],\n ): CompiledJoinPattern | undefined {\n const variables: Partial<Record<RdfQueryPatternKey, string>> = {};\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (isVariable(value)) {\n variables[key] = value.variable;\n }\n }\n\n const compiled = this.compilePattern(pattern, {}, filters);\n return compiled ? { pattern: compiled, variables } : undefined;\n }\n\n private canUseRdf3xPrimaryJoin(patterns: CompiledJoinPattern[]): boolean {\n return Boolean(this.rdf3xPrimaryIndex)\n && patterns.length > 0\n && patterns.every((entry) => isRdf3xCompatiblePattern(entry.pattern));\n }\n\n private tupleValuesForBinding(\n source: PatternRequiredSource,\n binding: RdfBindingRow,\n ): RdfQuadTupleConstraintSource | undefined {\n if (!source.tupleValues) {\n return undefined;\n }\n const rows = source.tupleValues.rows.filter((row) => (\n source.tupleValues?.variables.every((variableName) => {\n const existing = binding[variableName];\n const value = row[variableName];\n return !existing || !value || sameTerm(existing, value);\n })\n ));\n return tupleConstraintSourceForPattern({ ...source.tupleValues, rows }, source.pattern);\n }\n\n private joinTextSearch(\n input: RdfBindingRow[],\n source: TextRequiredSource,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n metrics.indexChoices.push('text-chunk');\n const sourceVariable = source.pattern.source;\n if (sourceVariable && this.canUseBoundSourceSearch(input, source, sourceVariable)) {\n return this.joinTextSearchByBoundSource(input, source, sourceVariable, metrics);\n }\n\n const results = this.textSearchResults(source);\n metrics.scannedRows += results.length;\n\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const result of results) {\n const next = bindTextSearchResult(binding, source.pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n }\n\n private joinVectorSearch(\n input: RdfBindingRow[],\n source: VectorRequiredSource,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n metrics.indexChoices.push('vector-chunk');\n const sourceVariable = source.pattern.source;\n if (sourceVariable && this.canUseBoundSourceSearch(input, source, sourceVariable)) {\n return this.joinVectorSearchByBoundSource(input, source, sourceVariable, metrics);\n }\n\n const results = this.vectorSearchResults(source);\n metrics.scannedRows += results.length;\n\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const result of results) {\n const next = bindVectorSearchResult(binding, source.pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n }\n\n private joinTextSearchByBoundSource(\n input: RdfBindingRow[],\n source: TextRequiredSource,\n sourceVariable: string,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const cache = new Map<string, RdfTextSearchResult[]>();\n const countedSources = new Set<string>();\n let globalResults: RdfTextSearchResult[] | undefined;\n let countedGlobal = false;\n const output: RdfBindingRow[] = [];\n\n for (const binding of input) {\n const term = binding[sourceVariable];\n let results: RdfTextSearchResult[];\n if (!term) {\n globalResults ??= this.textSearchResults(source);\n results = globalResults;\n if (!countedGlobal) {\n metrics.scannedRows += results.length;\n countedGlobal = true;\n }\n } else if (term.termType !== 'NamedNode') {\n continue;\n } else {\n if (!cache.has(term.value)) {\n cache.set(term.value, this.textSearchResults(source, term.value));\n }\n results = cache.get(term.value) ?? [];\n if (!countedSources.has(term.value)) {\n metrics.scannedRows += results.length;\n countedSources.add(term.value);\n }\n }\n\n for (const result of results) {\n const next = bindTextSearchResult(binding, source.pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n\n return output;\n }\n\n private joinVectorSearchByBoundSource(\n input: RdfBindingRow[],\n source: VectorRequiredSource,\n sourceVariable: string,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const cache = new Map<string, RdfVectorSearchResult[]>();\n const countedSources = new Set<string>();\n let globalResults: RdfVectorSearchResult[] | undefined;\n let countedGlobal = false;\n const output: RdfBindingRow[] = [];\n\n for (const binding of input) {\n const term = binding[sourceVariable];\n let results: RdfVectorSearchResult[];\n if (!term) {\n globalResults ??= this.vectorSearchResults(source);\n results = globalResults;\n if (!countedGlobal) {\n metrics.scannedRows += results.length;\n countedGlobal = true;\n }\n } else if (term.termType !== 'NamedNode') {\n continue;\n } else {\n if (!cache.has(term.value)) {\n cache.set(term.value, this.vectorSearchResults(source, term.value));\n }\n results = cache.get(term.value) ?? [];\n if (!countedSources.has(term.value)) {\n metrics.scannedRows += results.length;\n countedSources.add(term.value);\n }\n }\n\n for (const result of results) {\n const next = bindVectorSearchResult(binding, source.pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n\n return output;\n }\n\n private canUseBoundSourceSearch(\n input: RdfBindingRow[],\n source: TextRequiredSource | VectorRequiredSource,\n sourceVariable: string,\n ): boolean {\n if (hasSearchWindow(source)) {\n return false;\n }\n\n const boundSources = new Set<string>();\n let sawBound = false;\n\n for (const binding of input) {\n const term = binding[sourceVariable];\n if (!term) {\n continue;\n }\n\n sawBound = true;\n if (term.termType !== 'NamedNode') {\n continue;\n }\n\n boundSources.add(term.value);\n }\n\n return sawBound && boundSources.size > 0;\n }\n\n private textSearchResults(source: TextRequiredSource, exactSource?: string): RdfTextSearchResult[] {\n if (exactSource === undefined && source.results) {\n return source.results;\n }\n if (!this.textIndex) {\n throw new Error('RdfLocalQuery textSearch requires a configured RdfTextIndex');\n }\n\n const options = this.textSearchOptions(source.pattern, exactSource);\n const results = options ? this.textIndex.search(options) : [];\n if (exactSource === undefined) {\n source.results = results;\n }\n return results;\n }\n\n private vectorSearchResults(source: VectorRequiredSource, exactSource?: string): RdfVectorSearchResult[] {\n if (exactSource === undefined && source.results) {\n return source.results;\n }\n if (!this.vectorIndex) {\n throw new Error('RdfLocalQuery vectorSearch requires a configured RdfVectorIndex');\n }\n\n const options = this.vectorSearchOptions(source.pattern, exactSource);\n const results = options ? this.vectorIndex.search(options) : [];\n if (exactSource === undefined) {\n source.results = results;\n }\n return results;\n }\n\n private textSearchOptions(pattern: RdfTextSearchPattern, exactSource?: string, includeWindow = true): RdfTextSearchOptions {\n return {\n query: pattern.query,\n source: exactSource,\n workspace: pattern.scope?.workspace,\n sourcePrefix: pattern.scope?.sourcePrefix,\n limit: includeWindow ? pattern.limit : undefined,\n offset: includeWindow ? pattern.offset : undefined,\n orderBy: pattern.orderBy,\n };\n }\n\n private vectorSearchOptions(pattern: RdfVectorSearchPattern, exactSource?: string, includeWindow = true): RdfVectorSearchOptions {\n return {\n embedding: pattern.embedding,\n metric: pattern.metric,\n model: pattern.vectorModel,\n source: exactSource,\n workspace: pattern.scope?.workspace,\n sourcePrefix: pattern.scope?.sourcePrefix,\n limit: includeWindow ? pattern.limit : undefined,\n offset: includeWindow ? pattern.offset : undefined,\n threshold: pattern.threshold,\n orderBy: pattern.orderBy,\n };\n }\n\n private applyBinds(input: RdfBindingRow[], binds: RdfQueryBind[]): RdfBindingRow[] {\n let output = input;\n for (const bind of binds) {\n output = output.flatMap((binding) => {\n if (binding[bind.variable]) {\n return [];\n }\n const value = this.evaluateBindExpression(bind.expression, binding);\n return value ? [{ ...binding, [bind.variable]: value }] : [binding];\n });\n }\n return output;\n }\n\n private evaluateBindExpression(expression: RdfBindExpression, binding: RdfBindingRow): Term | undefined {\n switch (expression.type) {\n case 'term':\n return expression.term;\n case 'variable':\n return binding[expression.variable];\n case 'stringValue': {\n const value = binding[expression.variable];\n return value ? DataFactory.literal(value.value) as Term : undefined;\n }\n case 'stringLength': {\n const value = binding[expression.variable];\n return value ? countLiteral(value.value.length) : undefined;\n }\n case 'lowerCase': {\n const value = this.evaluateBindExpression(expression.expression, binding);\n return value ? DataFactory.literal(value.value.toLocaleLowerCase('en-US')) as Term : undefined;\n }\n case 'upperCase': {\n const value = this.evaluateBindExpression(expression.expression, binding);\n return value ? DataFactory.literal(value.value.toLocaleUpperCase('en-US')) as Term : undefined;\n }\n case 'coalesce': {\n for (const item of expression.expressions) {\n const value = this.evaluateBindExpression(item, binding);\n if (value) {\n return value;\n }\n }\n return undefined;\n }\n case 'if':\n return this.matchesFilters(binding, expression.condition)\n ? this.evaluateBindExpression(expression.then, binding)\n : this.evaluateBindExpression(expression.else, binding);\n case 'substring': {\n const value = this.evaluateBindExpression(expression.expression, binding);\n const startTerm = this.evaluateBindExpression(expression.start, binding);\n const startValue = startTerm ? finiteBindNumber(startTerm) : undefined;\n const lengthTerm = expression.length ? this.evaluateBindExpression(expression.length, binding) : undefined;\n const lengthValue = lengthTerm ? finiteBindNumber(lengthTerm) : undefined;\n if (!value || startValue === undefined || (expression.length && lengthValue === undefined)) {\n return undefined;\n }\n const start = Math.max(0, Math.round(startValue) - 1);\n const length = lengthValue === undefined ? undefined : Math.max(0, Math.round(lengthValue));\n return DataFactory.literal(value.value.slice(start, length === undefined ? undefined : start + length)) as Term;\n }\n case 'concat': {\n const values = expression.expressions.map((item) => this.evaluateBindExpression(item, binding));\n return values.every((value): value is Term => Boolean(value))\n ? DataFactory.literal(values.map((value) => value.value).join('')) as Term\n : undefined;\n }\n case 'iri': {\n const value = this.evaluateBindExpression(expression.expression, binding);\n if (!value) {\n return undefined;\n }\n try {\n return DataFactory.namedNode(new URL(value.value, expression.base).href) as Term;\n } catch {\n return undefined;\n }\n }\n case 'strdt': {\n const lexical = this.evaluateBindExpression(expression.lexical, binding);\n const datatype = this.evaluateBindExpression(expression.datatype, binding);\n if (!lexical || !datatype || datatype.termType !== 'NamedNode') {\n return undefined;\n }\n return DataFactory.literal(lexical.value, DataFactory.namedNode(datatype.value)) as Term;\n }\n case 'strlang': {\n const lexical = this.evaluateBindExpression(expression.lexical, binding);\n const language = this.evaluateBindExpression(expression.language, binding);\n if (!lexical || !language) {\n return undefined;\n }\n return DataFactory.literal(lexical.value, language.value) as Term;\n }\n default: {\n const exhaustive: never = expression;\n throw new Error(`Unsupported RDF local BIND expression: ${JSON.stringify(exhaustive)}`);\n }\n }\n }\n\n private singleScanPushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): SingleScanPushdown | undefined {\n if (\n requiredPatterns.length !== 1\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || queryAggregates(query).length > 0\n ) {\n return undefined;\n }\n\n const pattern = requiredPatterns[0];\n const order = this.scanOrderForPattern(pattern, query.orderBy ?? []);\n const orderRequested = (query.orderBy?.length ?? 0) > 0;\n const orderPushed = Boolean(order);\n const paginationRequested = query.limit !== undefined || query.offset !== undefined;\n const paginationPushed = paginationRequested\n && !query.distinct\n && (!orderRequested || orderPushed)\n && !patternHasRepeatedVariables(pattern)\n && this.canPushAllFiltersForPattern(pattern, filters);\n\n if (!orderPushed && !paginationPushed) {\n return undefined;\n }\n\n return {\n options: {\n ...(order ?? {}),\n ...(paginationPushed && query.limit !== undefined ? { limit: Math.max(0, query.limit) } : {}),\n ...(paginationPushed && query.offset !== undefined ? { offset: Math.max(0, query.offset) } : {}),\n },\n orderPushed,\n paginationPushed,\n };\n }\n\n private countPushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): { as: string; pattern: QuintPattern; distinctKeys?: RdfQueryPatternKey[]; pushedDownFilters: number } | undefined {\n const aggregates = queryAggregates(query);\n if (\n aggregates.length !== 1\n || aggregates[0].type !== 'count'\n || (query.having?.length ?? 0) > 0\n || requiredPatterns.length !== 1\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || (query.groupBy?.length ?? 0) > 0\n || query.orderBy?.length\n || query.limit !== undefined\n || query.offset !== undefined\n ) {\n return undefined;\n }\n\n const pattern = requiredPatterns[0];\n if (patternHasRepeatedVariables(pattern)) {\n return undefined;\n }\n const aggregate = aggregates[0];\n if (aggregate.variable && !variablesInPattern(pattern).includes(aggregate.variable)) {\n return undefined;\n }\n const distinctKeys = aggregate.distinct\n ? this.distinctCountKeys(pattern, aggregate.variable, aggregate.distinctVariables)\n : undefined;\n if (aggregate.distinct && (!distinctKeys || distinctKeys.length === 0)) {\n return undefined;\n }\n if (!this.canPushAllFiltersForPattern(pattern, filters)) {\n return undefined;\n }\n\n const compiled = this.compilePattern(pattern, {}, filters);\n return compiled\n ? {\n as: aggregate.as,\n pattern: compiled,\n distinctKeys,\n pushedDownFilters: compiled.pushedDownFilters,\n }\n : undefined;\n }\n\n private joinCountPushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n aggregates: RdfQueryAggregate[],\n ): JoinCountPushdown | undefined {\n if (\n aggregates.length === 0\n || requiredPatterns.length < 2\n || (query.having?.length ?? 0) > 0\n || (query.groupBy?.length ?? 0) > 0\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || (query.binds?.length ?? 0) > 0\n || query.orderBy?.length\n || query.limit !== undefined\n || query.offset !== undefined\n || query.distinct\n ) {\n return undefined;\n }\n if (aggregates.some((aggregate) => aggregate.type !== 'count')) {\n return undefined;\n }\n if (!this.canPushRequiredBgpFilters(requiredPatterns, filters)) {\n return undefined;\n }\n\n const visibleVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n if (aggregates.some((aggregate) => aggregate.variable && !visibleVariables.has(aggregate.variable))) {\n return undefined;\n }\n const sharedVariables = variablesSharedAcrossPatterns(requiredPatterns);\n if (sharedVariables.size === 0) {\n return undefined;\n }\n\n const compiled = requiredPatterns.map((pattern) => this.compileJoinPattern(pattern, filters));\n if (compiled.some((entry) => !entry)) {\n return undefined;\n }\n const reordered = this.reorderJoinPatterns(requiredPatterns, compiled as CompiledJoinPattern[], filters);\n return {\n patterns: reordered.patterns,\n ...(reordered.reorderPlan ? { reorderPlan: reordered.reorderPlan } : {}),\n pushedDownFilters: filters.length,\n };\n }\n\n private joinBasicAggregatePushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n aggregates: RdfQueryAggregate[],\n ): JoinBasicAggregatePushdown | undefined {\n if (\n aggregates.length === 0\n || !aggregates.some((aggregate) => aggregate.type !== 'count')\n || requiredPatterns.length === 0\n || (query.having?.length ?? 0) > 0\n || (query.groupBy?.length ?? 0) > 0\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || (query.binds?.length ?? 0) > 0\n || query.orderBy?.length\n || query.limit !== undefined\n || query.offset !== undefined\n || query.distinct\n ) {\n return undefined;\n }\n\n if (aggregates.some((aggregate) => aggregate.distinct || aggregate.type !== 'count' && !aggregate.variable)) {\n return undefined;\n }\n const visibleVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n if (aggregates.some((aggregate) => aggregate.variable && !visibleVariables.has(aggregate.variable))) {\n return undefined;\n }\n const numericAggregateVariables = new Set(aggregates\n .filter((aggregate) => aggregate.type !== 'count')\n .map((aggregate) => aggregate.variable)\n .filter((variableName): variableName is string => Boolean(variableName)));\n if (!this.canPushAggregateFilters(requiredPatterns, filters, numericAggregateVariables)) {\n return undefined;\n }\n const sharedVariables = variablesSharedAcrossPatterns(requiredPatterns);\n if (requiredPatterns.length > 1 && sharedVariables.size === 0) {\n return undefined;\n }\n\n const compiled = requiredPatterns.map((pattern) => this.compileJoinPattern(pattern, filters));\n if (compiled.some((entry) => !entry)) {\n return undefined;\n }\n const reordered = this.reorderJoinPatterns(requiredPatterns, compiled as CompiledJoinPattern[], filters);\n return {\n patterns: reordered.patterns,\n ...(reordered.reorderPlan ? { reorderPlan: reordered.reorderPlan } : {}),\n pushedDownFilters: filters.length,\n };\n }\n\n private canPushAggregateFilters(\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n numericAggregateVariables: Set<string>,\n ): boolean {\n const variables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n return filters.every((filter) => {\n if (!variables.has(filter.variable) || filter.variable2) {\n return false;\n }\n if (isNumericGuardFilter(filter) && numericAggregateVariables.has(filter.variable)) {\n return true;\n }\n return isPushdownFilter(filter) && this.compilePushdownFilter(filter.variable, [filter]) !== null;\n });\n }\n\n private hasNumericAggregateGuards(\n filters: RdfQueryFilter[],\n numericAggregateVariables: Set<string>,\n ): boolean {\n return [...numericAggregateVariables].every((variableName) => (\n filters.some((filter) => isNumericGuardFilter(filter) && filter.variable === variableName)\n ));\n }\n\n private groupAggregatePushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n aggregates: RdfQueryAggregate[],\n ): GroupAggregatePushdown | undefined {\n if (\n aggregates.length === 0\n || (query.groupBy?.length ?? 0) === 0\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || (query.binds?.length ?? 0) > 0\n || query.distinct\n ) {\n return undefined;\n }\n if (aggregates.some((aggregate) => (\n aggregate.type !== 'count'\n && (!aggregate.variable || aggregate.distinct)\n ))) {\n return undefined;\n }\n const numericAggregateVariables = new Set(aggregates\n .filter((aggregate) => aggregate.type !== 'count')\n .map((aggregate) => aggregate.variable)\n .filter((variableName): variableName is string => Boolean(variableName)));\n if (\n !this.hasNumericAggregateGuards(filters, numericAggregateVariables)\n || !this.canPushAggregateFilters(requiredPatterns, filters, numericAggregateVariables)\n ) {\n return undefined;\n }\n\n const visibleVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n if ((query.groupBy ?? []).some((variableName) => !visibleVariables.has(variableName))) {\n return undefined;\n }\n if (aggregates.some((aggregate) => aggregate.variable && !visibleVariables.has(aggregate.variable))) {\n return undefined;\n }\n const countOnly = numericAggregateVariables.size === 0;\n const aggregateVariables = new Set(aggregates.map((aggregate) => aggregate.as));\n if ((query.orderBy ?? []).some((entry) => (\n !(query.groupBy ?? []).includes(entry.variable) && !aggregateVariables.has(entry.variable)\n ))) {\n return undefined;\n }\n const orderPushed = (query.orderBy?.length ?? 0) > 0;\n const havingPushdown = this.groupAggregateHavingPushdown(query.having ?? [], aggregateVariables);\n const havingPushed = (query.having?.length ?? 0) === 0 || havingPushdown !== undefined;\n const paginationPushed = (query.limit !== undefined || query.offset !== undefined) && havingPushed;\n\n const sharedVariables = variablesSharedAcrossPatterns(requiredPatterns);\n if (requiredPatterns.length > 1 && sharedVariables.size === 0) {\n return undefined;\n }\n\n const compiled = requiredPatterns.map((pattern) => this.compileJoinPattern(pattern, filters));\n if (compiled.some((entry) => !entry)) {\n return undefined;\n }\n const reordered = this.reorderJoinPatterns(requiredPatterns, compiled as CompiledJoinPattern[], filters);\n return {\n patterns: reordered.patterns,\n ...(reordered.reorderPlan ? { reorderPlan: reordered.reorderPlan } : {}),\n ...(havingPushdown && havingPushdown.length > 0 ? { having: havingPushdown } : {}),\n pushedDownFilters: filters.length,\n pushedDownHaving: havingPushdown?.length ?? 0,\n orderPushed,\n paginationPushed,\n countOnly,\n };\n }\n\n private groupAggregateHavingPushdown(\n having: RdfQueryFilter[],\n aggregateVariables: Set<string>,\n ): RdfQuadJoinGroupAggregateHaving[] | undefined {\n const compiled: RdfQuadJoinGroupAggregateHaving[] = [];\n for (const filter of having) {\n if (\n !aggregateVariables.has(filter.variable)\n || filter.operand\n || filter.variable2\n || filter.value === undefined\n || !isGroupAggregateHavingOperator(filter.operator)\n ) {\n return undefined;\n }\n const value = filterValueToNumber(filter.value);\n if (value === undefined) {\n return undefined;\n }\n compiled.push({\n aggregate: filter.variable,\n operator: filter.operator,\n value,\n });\n }\n return compiled;\n }\n\n private distinctCountKeys(\n pattern: RdfQueryPattern,\n variableName?: string,\n distinctVariables?: string[],\n ): RdfQueryPatternKey[] | undefined {\n if (variableName) {\n const keys = TERM_KEYS.filter((key) => {\n const value = pattern[key];\n return isVariable(value) && value.variable === variableName;\n });\n return keys.length === 1 ? keys : undefined;\n }\n if (distinctVariables) {\n const keys: RdfQueryPatternKey[] = [];\n for (const distinctVariable of distinctVariables) {\n const key = termKeyForVariable(pattern, distinctVariable);\n if (!key) {\n return undefined;\n }\n keys.push(key);\n }\n return uniquePatternKeys(keys);\n }\n const keys = TERM_KEYS.filter((key) => {\n const value = pattern[key];\n return isVariable(value);\n });\n return uniquePatternKeys(keys);\n }\n\n private scanOrderForPattern(\n pattern: RdfQueryPattern,\n orderBy: NonNullable<RdfLocalQuery['orderBy']>,\n ): Pick<RdfQuadScanOptions, 'order' | 'orderDirections' | 'reverse'> | undefined {\n if (orderBy.length === 0) {\n return undefined;\n }\n\n const order = orderBy.map((entry) => termKeyForVariable(pattern, entry.variable));\n if (order.some((key) => key === undefined)) {\n return undefined;\n }\n\n const orderDirections = orderBy.map((entry) => entry.direction ?? 'asc');\n const firstDirection = orderDirections[0];\n const sameDirection = orderDirections.every((direction) => direction === firstDirection);\n\n return {\n order: order as RdfQueryPatternKey[],\n ...(sameDirection\n ? { reverse: firstDirection === 'desc' || undefined }\n : { orderDirections }),\n };\n }\n\n private canPushAllFiltersForPattern(pattern: RdfQueryPattern, filters: RdfQueryFilter[]): boolean {\n const variables = new Set(variablesInPattern(pattern));\n return filters.every((filter) => (\n variables.has(filter.variable)\n && isPushdownFilter(filter)\n && this.compilePushdownFilter(filter.variable, [filter]) !== null\n ));\n }\n\n private requiredFiltersNeedingPostApply(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n requiredBgpPushdown?: RequiredBgpPushdown,\n ): RdfQueryFilter[] {\n if (filters.length === 0) {\n return filters;\n }\n if (requiredBgpPushdown) {\n return [];\n }\n if (!this.canElideRequiredPatternFilterRechecks(query, requiredPatterns)) {\n return filters;\n }\n\n const requiredVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n return filters.filter((filter) => !(\n requiredVariables.has(filter.variable)\n && this.compilePushdownFilter(filter.variable, [filter]) !== null\n ));\n }\n\n private canElideRequiredPatternFilterRechecks(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n ): boolean {\n return requiredPatterns.length > 0\n && (query.values?.length ?? 0) === 0\n && (query.textSearch?.length ?? 0) === 0\n && (query.vectorSearch?.length ?? 0) === 0\n && (query.unions?.length ?? 0) === 0\n && (query.minus?.length ?? 0) === 0\n && (query.exists?.length ?? 0) === 0\n && (query.optional?.length ?? 0) === 0\n && (query.binds?.length ?? 0) === 0\n && queryAggregates(query).length === 0;\n }\n\n private compilePattern(\n pattern: RdfQueryPattern,\n binding: RdfBindingRow,\n filters: RdfQueryFilter[],\n ): CompiledPattern | null {\n const compiled: QuintPattern = {};\n const pushedDownFilterIndexes = new Set<number>();\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (!value) continue;\n if (isVariable(value)) {\n const bound = binding[value.variable];\n if (bound) {\n compiled[key] = bound;\n } else {\n const pushdown = this.compilePushdownFilterWithIndexes(value.variable, filters);\n if (pushdown) {\n compiled[key] = pushdown.pattern;\n pushdown.filterIndexes.forEach((index) => pushedDownFilterIndexes.add(index));\n }\n }\n } else {\n compiled[key] = value;\n }\n }\n return isConsistentPattern(compiled)\n ? {\n ...compiled,\n pushedDownFilters: pushedDownFilterIndexes.size,\n pushedDownFilterIndexes: [...pushedDownFilterIndexes],\n }\n : null;\n }\n\n private bindQuad(pattern: RdfQueryPattern, binding: RdfBindingRow, quad: any): RdfBindingRow | null {\n const next = { ...binding };\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (!isVariable(value)) continue;\n const term = quad[key] as Term;\n const existing = next[value.variable];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[value.variable] = term;\n }\n return next;\n }\n\n private countBindings(\n bindings: RdfBindingRow[],\n variable?: string,\n distinct?: boolean,\n distinctVariables?: string[],\n ): number {\n if (!distinct) {\n return variable ? bindings.filter((binding) => binding[variable]).length : bindings.length;\n }\n if (!variable) {\n return new Set(bindings.map((binding) => bindingKey(binding, distinctVariables))).size;\n }\n return new Set(\n bindings\n .map((binding) => binding[variable])\n .filter((term): term is Term => Boolean(term))\n .map((term) => termToId(term as any)),\n ).size;\n }\n\n private aggregateBindings(\n bindings: RdfBindingRow[],\n aggregates: RdfQueryAggregate[],\n ): { binding: RdfBindingRow; firstCount: number } {\n const binding: RdfBindingRow = {};\n let firstCount = 0;\n aggregates.forEach((aggregate, index) => {\n const count = aggregate.type === 'count'\n ? this.countBindings(bindings, aggregate.variable, aggregate.distinct, aggregate.distinctVariables)\n : 0;\n if (index === 0) {\n firstCount = count;\n }\n const term = this.aggregateLiteral(bindings, aggregate);\n if (term) {\n binding[aggregate.as] = term;\n }\n });\n return { binding, firstCount };\n }\n\n private groupAggregateBindings(\n bindings: RdfBindingRow[],\n groupBy: string[],\n aggregates: RdfQueryAggregate[],\n ): RdfBindingRow[] {\n const groups = new Map<string, RdfBindingRow[]>();\n for (const binding of bindings) {\n const groupKey = groupBy.map((variableName) => {\n const term = binding[variableName];\n return term ? termToId(term as any) : '__UNBOUND__';\n }).join('\\u001f');\n const existing = groups.get(groupKey);\n if (existing) {\n existing.push(binding);\n } else {\n groups.set(groupKey, [binding]);\n }\n }\n\n return [...groups.values()].map((groupBindings) => {\n const first = groupBindings[0];\n const grouped: RdfBindingRow = {};\n for (const variableName of groupBy) {\n if (first[variableName]) {\n grouped[variableName] = first[variableName];\n }\n }\n for (const aggregate of aggregates) {\n const term = this.aggregateLiteral(groupBindings, aggregate);\n if (term) {\n grouped[aggregate.as] = term;\n }\n }\n return grouped;\n });\n }\n\n private aggregateLiteral(bindings: RdfBindingRow[], aggregate: RdfQueryAggregate): Term | undefined {\n if (aggregate.type === 'count') {\n return countLiteral(this.countBindings(\n bindings,\n aggregate.variable,\n aggregate.distinct,\n aggregate.distinctVariables,\n ));\n }\n const values = this.numericAggregateValues(bindings, aggregate.variable, aggregate.distinct);\n if (values.length === 0) {\n return aggregate.type === 'sum' ? decimalLiteral(0) : undefined;\n }\n switch (aggregate.type) {\n case 'sum':\n return decimalLiteral(values.reduce((total, value) => total + value, 0));\n case 'avg':\n return decimalLiteral(values.reduce((total, value) => total + value, 0) / values.length);\n case 'min':\n return decimalLiteral(Math.min(...values));\n case 'max':\n return decimalLiteral(Math.max(...values));\n default: {\n const exhaustive: never = aggregate.type;\n throw new Error(`Unsupported RDF local aggregate type: ${exhaustive}`);\n }\n }\n }\n\n private numericAggregateValues(bindings: RdfBindingRow[], variable?: string, distinct?: boolean): number[] {\n if (!variable) {\n return [];\n }\n const values: number[] = [];\n const seen = new Set<string>();\n for (const binding of bindings) {\n const term = binding[variable];\n if (!term || !isNumericTerm(term)) {\n continue;\n }\n if (distinct) {\n const key = termToId(term as any);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n }\n values.push(rdfNumericValue(term.value));\n }\n return values;\n }\n\n private compilePushdownFilter(variableName: string, filters: RdfQueryFilter[]): QuintPattern[keyof QuintPattern] | null {\n return this.compilePushdownFilterWithIndexes(variableName, filters)?.pattern ?? null;\n }\n\n private compilePushdownFilterWithIndexes(\n variableName: string,\n filters: RdfQueryFilter[],\n ): { pattern: QuintPattern[keyof QuintPattern]; filterIndexes: number[] } | null {\n const pushable = filters\n .map((filter, index) => ({ filter, index }))\n .filter(({ filter }) => (\n filter.variable === variableName\n && isPushdownFilter(filter)\n ));\n if (pushable.length === 0) {\n return null;\n }\n const operators: Record<string, unknown> = {};\n const filterIndexes: number[] = [];\n for (const { filter, index } of pushable) {\n switch (filter.operator) {\n case '$eq':\n case '$ne':\n if (filter.value === undefined) return null;\n if (!isTerm(filter.value as any)) return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n if (filter.value === undefined) return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$in':\n case '$notIn':\n if (!filter.values || filter.values.length === 0) return null;\n if (filter.values.some((value) => !isTerm(value as any))) return null;\n operators[filter.operator] = filter.values;\n filterIndexes.push(index);\n break;\n case '$sameTerm':\n if (filter.variable2 || filter.value === undefined) return null;\n if (!isTerm(filter.value as any)) return null;\n operators.$eq = filter.value;\n filterIndexes.push(index);\n break;\n case '$termType':\n if (typeof filter.value !== 'string') return null;\n if (!['iri', 'blank', 'literal', 'numeric'].includes(filter.value)) return null;\n operators.$termType = filter.value;\n filterIndexes.push(index);\n break;\n case '$lang':\n if (typeof filter.value !== 'string') return null;\n operators.$language = filter.value;\n filterIndexes.push(index);\n break;\n case '$notLang':\n if (typeof filter.value !== 'string') return null;\n operators.$notLanguage = filter.value;\n filterIndexes.push(index);\n break;\n case '$langMatches':\n if (typeof filter.value !== 'string') return null;\n operators.$langMatches = filter.value;\n filterIndexes.push(index);\n break;\n case '$datatype':\n if (filter.value === undefined || !isTerm(filter.value as any)) return null;\n if ((filter.value as Term).termType !== 'NamedNode') return null;\n operators.$datatype = filter.value;\n filterIndexes.push(index);\n break;\n case '$notDatatype':\n if (filter.value === undefined || !isTerm(filter.value as any)) return null;\n if ((filter.value as Term).termType !== 'NamedNode') return null;\n operators.$notDatatype = filter.value;\n filterIndexes.push(index);\n break;\n case '$startsWith':\n if (typeof filter.value !== 'string') return null;\n operators.$startsWith = filter.value;\n filterIndexes.push(index);\n break;\n case '$contains':\n case '$endsWith':\n if (typeof filter.value !== 'string') return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$regex':\n if (typeof filter.value !== 'string') return null;\n if (filter.flags) return null;\n operators.$regex = filter.value;\n filterIndexes.push(index);\n break;\n default:\n return null;\n }\n }\n return Object.keys(operators).length > 0\n ? { pattern: operators as any, filterIndexes }\n : null;\n }\n\n private matchesNewlyBoundFilters(\n binding: RdfBindingRow,\n previousBinding: RdfBindingRow,\n filters: RdfQueryFilter[],\n ): boolean {\n const newlyBound = filters.filter((filter) => {\n const variables = filterVariables(filter);\n return variables.every((variableName) => binding[variableName])\n && variables.some((variableName) => !previousBinding[variableName]);\n });\n return this.matchesFilters(binding, newlyBound);\n }\n\n private matchesFilters(binding: RdfBindingRow, filters: RdfQueryFilter[]): boolean {\n return filters.every((filter) => this.matchesFilter(binding, filter));\n }\n\n private matchesFilter(binding: RdfBindingRow, filter: RdfQueryFilter): boolean {\n const value = binding[filter.variable];\n if (filter.operator === '$bound') {\n return Boolean(filter.value) ? Boolean(value) : !value;\n }\n if (!value) {\n return false;\n }\n const comparisonValue = filterOperandValue(value, filter.operand);\n\n switch (filter.operator) {\n case '$eq':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison === 0);\n return filter.value !== undefined && sameTermOrLexical(comparisonValue, filter.value);\n case '$ne':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison !== 0);\n return filter.value === undefined || !sameTermOrLexical(comparisonValue, filter.value);\n case '$gt':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison > 0);\n return compareTermsForFilter(comparisonValue, filter.value) > 0;\n case '$gte':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison >= 0);\n return compareTermsForFilter(comparisonValue, filter.value) >= 0;\n case '$lt':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison < 0);\n return compareTermsForFilter(comparisonValue, filter.value) < 0;\n case '$lte':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison <= 0);\n return compareTermsForFilter(comparisonValue, filter.value) <= 0;\n case '$in':\n return (filter.values ?? []).some((candidate) => sameTermOrLexical(comparisonValue, candidate));\n case '$notIn':\n return !(filter.values ?? []).some((candidate) => sameTermOrLexical(comparisonValue, candidate));\n case '$startsWith': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && text.startsWith(filter.value);\n }\n case '$notStartsWith': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && !text.startsWith(filter.value);\n }\n case '$contains': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && text.includes(filter.value);\n }\n case '$notContains': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && !text.includes(filter.value);\n }\n case '$endsWith': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && text.endsWith(filter.value);\n }\n case '$notEndsWith': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && !text.endsWith(filter.value);\n }\n case '$regex': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && new RegExp(filter.value, filter.flags).test(text);\n }\n case '$notRegex': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && !new RegExp(filter.value, filter.flags).test(text);\n }\n case '$termType':\n return typeof filter.value === 'string' && matchesTermType(value, filter.value);\n case '$notTermType':\n return typeof filter.value === 'string' && !matchesTermType(value, filter.value);\n case '$sameTerm': {\n const right = filter.variable2 ? binding[filter.variable2] : filter.value;\n return Boolean(right && isTerm(right as any) && sameTerm(value, right as Term));\n }\n case '$notSameTerm': {\n const right = filter.variable2 ? binding[filter.variable2] : filter.value;\n return Boolean(right && isTerm(right as any) && !sameTerm(value, right as Term));\n }\n case '$lang':\n return typeof filter.value === 'string'\n && value.termType === 'Literal'\n && value.language === filter.value;\n case '$notLang':\n return typeof filter.value === 'string'\n && value.termType === 'Literal'\n && value.language !== filter.value;\n case '$langIn':\n return value.termType === 'Literal'\n && (filter.values ?? []).some((candidate) => typeof candidate === 'string' && value.language === candidate);\n case '$notLangIn':\n return value.termType === 'Literal'\n && !(filter.values ?? []).some((candidate) => typeof candidate === 'string' && value.language === candidate);\n case '$langMatches':\n return typeof filter.value === 'string'\n && value.termType === 'Literal'\n && langMatches(value.language, filter.value);\n case '$notLangMatches':\n return typeof filter.value === 'string'\n && value.termType === 'Literal'\n && !langMatches(value.language, filter.value);\n case '$datatype':\n return filter.value !== undefined\n && value.termType === 'Literal'\n && sameTermOrLexical(value.datatype, filter.value);\n case '$notDatatype':\n return filter.value !== undefined\n && value.termType === 'Literal'\n && !sameTermOrLexical(value.datatype, filter.value);\n case '$datatypeIn':\n return value.termType === 'Literal'\n && (filter.values ?? []).some((candidate) => sameTermOrLexical(value.datatype, candidate));\n case '$notDatatypeIn':\n return value.termType === 'Literal'\n && !(filter.values ?? []).some((candidate) => sameTermOrLexical(value.datatype, candidate));\n default: {\n const exhaustive: never = filter.operator;\n throw new Error(`Unsupported RDF local query filter operator: ${exhaustive}`);\n }\n }\n }\n\n private compareVariableFilter(\n binding: RdfBindingRow,\n comparisonValue: Term | number | string,\n filter: RdfQueryFilter,\n predicate: (comparison: number) => boolean,\n ): boolean {\n if (!filter.variable2) {\n return false;\n }\n const right = binding[filter.variable2];\n if (!right) {\n return false;\n }\n const rightValue = filterOperandValue(right, filter.operand);\n return predicate(compareFilterValues(comparisonValue, rightValue));\n }\n}\n\nexport function variable(variableName: string): RdfQueryVariable {\n return { variable: variableName };\n}\n\nfunction isVariable(value: RdfQueryTermPattern | undefined): value is RdfQueryVariable {\n return Boolean(value && typeof value === 'object' && 'variable' in value);\n}\n\nfunction variablesInPattern(pattern: RdfQueryPattern): string[] {\n return TERM_KEYS\n .map((key) => pattern[key])\n .filter(isVariable)\n .map((value) => value.variable);\n}\n\nfunction patternHasRepeatedVariables(pattern: RdfQueryPattern): boolean {\n const seen = new Set<string>();\n for (const variableName of variablesInPattern(pattern)) {\n if (seen.has(variableName)) {\n return true;\n }\n seen.add(variableName);\n }\n return false;\n}\n\nfunction variablesSharedAcrossPatterns(patterns: RdfQueryPattern[]): Set<string> {\n const counts = new Map<string, number>();\n for (const pattern of patterns) {\n for (const variableName of new Set(variablesInPattern(pattern))) {\n counts.set(variableName, (counts.get(variableName) ?? 0) + 1);\n }\n }\n return new Set([...counts.entries()]\n .filter(([, count]) => count > 1)\n .map(([variableName]) => variableName));\n}\n\nfunction hasSharedVariable(left: Set<string>, right: Set<string>): boolean {\n for (const variableName of left) {\n if (right.has(variableName)) {\n return true;\n }\n }\n return false;\n}\n\nfunction filterVariables(filter: RdfQueryFilter): string[] {\n return filter.variable2\n ? [filter.variable, filter.variable2]\n : [filter.variable];\n}\n\nfunction buildRequiredSources(patterns: RdfQueryPattern[], query: RdfLocalQuery): RequiredSource[] {\n const patternSources = patterns.map((pattern, originalIndex): PatternRequiredSource => ({\n kind: 'pattern',\n pattern,\n originalIndex,\n }));\n const remainingValues: RequiredSource[] = [];\n\n for (const [originalIndex, source] of (query.values ?? []).entries()) {\n const patternSource = patternSources.find((candidate) => (\n !candidate.tupleValues && canAttachTupleValuesToPattern(source, candidate.pattern)\n ));\n if (patternSource) {\n patternSource.tupleValues = source;\n continue;\n }\n remainingValues.push({\n kind: 'values',\n source,\n originalIndex,\n });\n }\n\n return [\n ...remainingValues,\n ...patternSources,\n ...(query.textSearch ?? []).map((pattern, originalIndex): RequiredSource => ({\n kind: 'text',\n pattern,\n originalIndex,\n })),\n ...(query.vectorSearch ?? []).map((pattern, originalIndex): RequiredSource => ({\n kind: 'vector',\n pattern,\n originalIndex,\n })),\n ];\n}\n\nfunction variablesInRequiredSource(source: RequiredSource): string[] {\n if (source.kind === 'pattern') {\n return uniqueStrings([\n ...variablesInPattern(source.pattern),\n ...(source.tupleValues?.variables ?? []),\n ]);\n }\n if (source.kind === 'values') {\n return source.source.variables;\n }\n\n return [\n source.pattern.source,\n source.pattern.chunk,\n source.pattern.content,\n source.pattern.heading,\n source.pattern.score,\n source.kind === 'vector' ? source.pattern.distance : undefined,\n source.pattern.workspace,\n source.pattern.localPath,\n source.pattern.contentType,\n source.pattern.ordinal,\n source.pattern.level,\n source.pattern.startOffset,\n source.pattern.endOffset,\n source.kind === 'vector' ? source.pattern.model : undefined,\n ].filter((value): value is string => Boolean(value));\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction uniqueNumbers(values: number[]): number[] {\n return [...new Set(values)];\n}\n\nfunction filtersWithoutIndexes(filters: RdfQueryFilter[], indexes: number[]): RdfQueryFilter[] {\n if (indexes.length === 0) {\n return filters;\n }\n const pushedDown = new Set(indexes);\n return filters.filter((_filter, index) => !pushedDown.has(index));\n}\n\nfunction joinValuesSource(input: RdfBindingRow[], source: RdfValuesBindingSource): RdfBindingRow[] {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const row of source.rows) {\n const next = mergeTupleValuesBinding(binding, source.variables, row);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n}\n\nfunction mergeBindingRows(left: RdfBindingRow, right: RdfBindingRow): RdfBindingRow | null {\n const next = { ...left };\n for (const [variableName, term] of Object.entries(right)) {\n const existing = next[variableName];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[variableName] = term;\n }\n return next;\n}\n\nfunction mergeTupleValuesBinding(\n binding: RdfBindingRow,\n variables: string[],\n row: RdfBindingRow,\n): RdfBindingRow | null {\n const next = { ...binding };\n for (const variableName of variables) {\n const value = row[variableName];\n if (!value) {\n continue;\n }\n const existing = next[variableName];\n if (existing && !sameTerm(existing, value)) {\n return null;\n }\n next[variableName] = value;\n }\n return next;\n}\n\nfunction canAttachTupleValuesToPattern(source: RdfValuesBindingSource, pattern: RdfQueryPattern): boolean {\n if (source.variables.length < 2 || source.rows.length === 0) {\n return false;\n }\n const slots = new Set<RdfQueryPatternKey>();\n for (const variableName of source.variables) {\n if (source.rows.some((row) => !row[variableName])) {\n return false;\n }\n const variableSlots = TERM_KEYS.filter((key) => {\n const value = pattern[key];\n return isVariable(value) && value.variable === variableName;\n });\n if (variableSlots.length !== 1) {\n return false;\n }\n slots.add(variableSlots[0]);\n }\n return slots.size === source.variables.length\n && source.rows.every((row) => source.variables.every((variableName) => Boolean(row[variableName])));\n}\n\nfunction tupleConstraintSourceForPattern(\n source: RdfValuesBindingSource,\n pattern: RdfQueryPattern,\n): RdfQuadTupleConstraintSource {\n const columns = source.variables.map((variableName) => {\n const key = termKeyForVariable(pattern, variableName);\n if (!key) {\n throw new Error(`Tuple VALUES variable is not bound by pattern: ${variableName}`);\n }\n return key;\n });\n\n return {\n columns,\n rows: source.rows.map((row) => {\n const constraint: RdfQuadTupleConstraintSource['rows'][number] = {};\n source.variables.forEach((variableName, index) => {\n constraint[columns[index]] = row[variableName];\n });\n return constraint;\n }),\n };\n}\n\nfunction normalizeOptionalGroup(group: RdfQueryPattern[] | RdfOptionalQueryGroup): RdfOptionalQueryGroup {\n return Array.isArray(group) ? { patterns: group } : group;\n}\n\nfunction compiledPatternKey(pattern: QuintPattern): string {\n return TERM_KEYS\n .map((key) => `${key}:${termMatchKey(pattern[key])}`)\n .join('|');\n}\n\nfunction termMatchKey(match: QuintPattern[keyof QuintPattern] | undefined): string {\n if (!match) {\n return '*';\n }\n if (isTerm(match as any)) {\n return termToId(match as any);\n }\n return JSON.stringify(match, (_key, value) => isTerm(value as any) ? termToId(value as any) : value);\n}\n\nfunction termKeyForVariable(pattern: RdfQueryPattern, variableName: string): RdfQueryPatternKey | undefined {\n return TERM_KEYS.find((key) => {\n const value = pattern[key];\n return isVariable(value) && value.variable === variableName;\n });\n}\n\nfunction isConsistentPattern(pattern: QuintPattern): boolean {\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (!value || isTerm(value as TermMatch)) {\n continue;\n }\n }\n return true;\n}\n\nfunction sameTerm(left: Term, right: Term): boolean {\n return termToId(left as any) === termToId(right as any);\n}\n\nfunction filterOperandValue(value: Term, operand: RdfQueryFilter['operand']): Term | number | string {\n switch (operand) {\n case 'stringLength':\n return value.value.length;\n case 'stringValue':\n return value.value;\n case 'lowerStringValue':\n return value.value.toLowerCase();\n case 'upperStringValue':\n return value.value.toUpperCase();\n default:\n return value;\n }\n}\n\nfunction filterStringValue(value: Term, comparisonValue: Term | number | string): string {\n return typeof comparisonValue === 'string' ? comparisonValue : value.value;\n}\n\nfunction sameTermOrLexical(left: Term | number | string, right: RdfQueryFilterValue): boolean {\n if (typeof left === 'number') {\n if (isNumericFilterValue(right)) {\n return left === rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n return String(left) === String(right);\n }\n if (typeof left === 'string') {\n return left === (isTerm(right as any) ? (right as Term).value : String(right));\n }\n return isTerm(right as any) ? sameTerm(left, right as Term) : left.value === String(right);\n}\n\nfunction compareTermsForFilter(left: Term | number | string, right: RdfQueryFilterValue | undefined): number {\n if (right === undefined) {\n return 1;\n }\n return compareFilterValues(left, isTerm(right as any) ? right as Term : right);\n}\n\nfunction compareFilterValues(left: Term | number | string, right: Term | number | string | boolean): number {\n if (typeof left === 'number') {\n if (isNumericFilterValue(right)) {\n return left - rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n return String(left).localeCompare(String(right));\n }\n if (typeof left === 'string') {\n const rightValue = isTerm(right as any) ? (right as Term).value : String(right);\n return left.localeCompare(rightValue);\n }\n if (isNumericTerm(left) && isNumericFilterValue(right)) {\n return rdfNumericValue(left.value) - rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n const rightValue = isTerm(right as any) ? (right as Term).value : String(right);\n return left.value.localeCompare(rightValue);\n}\n\nfunction matchesTermType(term: Term, expected: string): boolean {\n switch (expected) {\n case 'iri':\n return term.termType === 'NamedNode';\n case 'blank':\n return term.termType === 'BlankNode';\n case 'literal':\n return term.termType === 'Literal';\n case 'numeric':\n return isNumericTerm(term);\n default:\n return false;\n }\n}\n\nfunction langMatches(languageTag: string, languageRange: string): boolean {\n if (!languageTag) {\n return false;\n }\n if (languageRange === '*') {\n return true;\n }\n\n const normalizedTag = languageTag.toLowerCase();\n const normalizedRange = languageRange.toLowerCase();\n return normalizedTag === normalizedRange\n || normalizedTag.startsWith(`${normalizedRange}-`);\n}\n\nfunction isNumericFilterValue(value: RdfQueryFilterValue): boolean {\n return isTerm(value as any)\n ? isNumericTerm(value as Term)\n : (typeof value === 'number' || (typeof value === 'string' && isFiniteNumericLexical(value)));\n}\n\nfunction isNumericTerm(term: Term): boolean {\n return isRdfNumericTerm(term);\n}\n\nfunction isPushdownFilter(filter: RdfQueryFilter): boolean {\n if (isNumericGuardFilter(filter)) {\n return true;\n }\n if (filter.operand === 'stringLength') {\n return false;\n }\n if (filter.operand === 'lowerStringValue' || filter.operand === 'upperStringValue') {\n return false;\n }\n if (filter.operand === 'stringValue') {\n return filter.operator === '$startsWith'\n || filter.operator === '$contains'\n || filter.operator === '$endsWith'\n || filter.operator === '$regex';\n }\n return filter.operator === '$eq'\n || filter.operator === '$ne'\n || filter.operator === '$gt'\n || filter.operator === '$gte'\n || filter.operator === '$lt'\n || filter.operator === '$lte'\n || filter.operator === '$in'\n || filter.operator === '$notIn'\n || filter.operator === '$startsWith'\n || filter.operator === '$contains'\n || filter.operator === '$endsWith'\n || filter.operator === '$regex'\n || filter.operator === '$sameTerm'\n || filter.operator === '$termType'\n || filter.operator === '$lang'\n || filter.operator === '$notLang'\n || filter.operator === '$langMatches'\n || filter.operator === '$datatype'\n || filter.operator === '$notDatatype';\n}\n\nfunction isNumericGuardFilter(filter: RdfQueryFilter): boolean {\n return filter.operator === '$termType'\n && filter.value === 'numeric'\n && !filter.variable2\n && !filter.operand;\n}\n\nfunction isGroupAggregateHavingOperator(\n operator: RdfQueryFilter['operator'],\n): operator is RdfQuadJoinGroupAggregateHaving['operator'] {\n return operator === '$eq'\n || operator === '$ne'\n || operator === '$gt'\n || operator === '$gte'\n || operator === '$lt'\n || operator === '$lte';\n}\n\nfunction filterValueToNumber(value: RdfQueryFilterValue): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (typeof value === 'string') {\n return isFiniteNumericLexical(value) ? rdfNumericValue(value) : undefined;\n }\n if (isTerm(value as any) && isNumericTerm(value as Term)) {\n return rdfNumericValue((value as Term).value);\n }\n return undefined;\n}\n\nfunction projectBinding(binding: RdfBindingRow, select: string[]): RdfBindingRow {\n const projected: RdfBindingRow = {};\n for (const variableName of select) {\n const value = binding[variableName];\n if (value) {\n projected[variableName] = value;\n }\n }\n return projected;\n}\n\nfunction compareBindings(\n left: RdfBindingRow,\n right: RdfBindingRow,\n orderBy: NonNullable<RdfLocalQuery['orderBy']>,\n): number {\n for (const order of orderBy) {\n const leftValue = left[order.variable] ? termToId(left[order.variable] as any) : '';\n const rightValue = right[order.variable] ? termToId(right[order.variable] as any) : '';\n const comparison = leftValue.localeCompare(rightValue);\n if (comparison !== 0) {\n return order.direction === 'desc' ? -comparison : comparison;\n }\n }\n return 0;\n}\n\nfunction bindingKey(binding: RdfBindingRow, variables?: string[]): string {\n return [...(variables ?? Object.keys(binding))]\n .sort()\n .map((key) => {\n const term = binding[key];\n return `${key}=${term ? termToId(term as any) : '__UNBOUND__'}`;\n })\n .join('\\u001f');\n}\n\nfunction distinctBindings(bindings: RdfBindingRow[]): RdfBindingRow[] {\n const seen = new Set<string>();\n const unique: RdfBindingRow[] = [];\n for (const binding of bindings) {\n const key = bindingKey(binding);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n unique.push(binding);\n }\n return unique;\n}\n\nfunction integerLiteral(value: number): Term {\n return DataFactory.literal(\n String(value),\n DataFactory.namedNode(XSD_INTEGER),\n ) as Term;\n}\n\nfunction countLiteral(count: number): Term {\n return integerLiteral(count);\n}\n\nfunction finiteBindNumber(term: Term): number | undefined {\n if (term.termType !== 'Literal') {\n return undefined;\n }\n const value = Number(term.value);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction decimalLiteral(value: number): Term {\n return DataFactory.literal(\n String(value),\n DataFactory.namedNode(XSD_DECIMAL),\n ) as Term;\n}\n\nfunction describePattern(pattern: RdfQueryPattern): string {\n return TERM_KEYS\n .filter((key) => pattern[key])\n .map((key) => `${key}:${describePatternValue(pattern[key])}`)\n .join(',');\n}\n\nfunction describePatternSource(source: { pattern: QuintPattern; variables: Partial<Record<RdfQueryPatternKey, string>> }): string {\n return TERM_KEYS\n .map((key) => {\n const variableName = source.variables[key];\n if (variableName) {\n return `${key}:?${variableName}`;\n }\n const value = source.pattern[key];\n return value ? `${key}:${termMatchKey(value)}` : undefined;\n })\n .filter(Boolean)\n .join(',');\n}\n\nfunction describePatternValue(value: RdfQueryTermPattern | undefined): string {\n if (!value) return '*';\n if (isVariable(value)) return `?${value.variable}`;\n if (isTerm(value as TermMatch)) return termToId(value as any);\n return 'op';\n}\n\nfunction describeFilter(filter: RdfQueryFilter): string {\n return `?${filter.variable}${filter.operand ? `:${filter.operand}` : ''}${filter.operator}`;\n}\n\nfunction describeTextSearch(pattern: RdfTextSearchPattern): string {\n const bindings = [\n pattern.source ? `source:?${pattern.source}` : undefined,\n pattern.chunk ? `chunk:?${pattern.chunk}` : undefined,\n pattern.content ? `content:?${pattern.content}` : undefined,\n pattern.heading ? `heading:?${pattern.heading}` : undefined,\n pattern.score ? `score:?${pattern.score}` : undefined,\n ].filter(Boolean).join(',');\n const scope = pattern.scope?.workspace\n ? `workspace:${pattern.scope.workspace}`\n : pattern.scope?.sourcePrefix\n ? `prefix:${pattern.scope.sourcePrefix}`\n : '*';\n const window = describeSearchWindow(pattern.limit, pattern.offset);\n const order = describeSearchOrder(pattern.orderBy);\n return `${JSON.stringify(pattern.query)}@${scope}${bindings ? ` ${bindings}` : ''}${window}${order}`;\n}\n\nfunction describeVectorSearch(pattern: RdfVectorSearchPattern): string {\n const bindings = [\n pattern.source ? `source:?${pattern.source}` : undefined,\n pattern.chunk ? `chunk:?${pattern.chunk}` : undefined,\n pattern.content ? `content:?${pattern.content}` : undefined,\n pattern.heading ? `heading:?${pattern.heading}` : undefined,\n pattern.score ? `score:?${pattern.score}` : undefined,\n pattern.distance ? `distance:?${pattern.distance}` : undefined,\n ].filter(Boolean).join(',');\n const scope = pattern.scope?.workspace\n ? `workspace:${pattern.scope.workspace}`\n : pattern.scope?.sourcePrefix\n ? `prefix:${pattern.scope.sourcePrefix}`\n : '*';\n const metric = pattern.metric ?? 'cosine';\n const window = describeSearchWindow(pattern.limit, pattern.offset);\n const order = describeSearchOrder(pattern.orderBy);\n return `${metric}:${pattern.embedding.length}d@${scope}${bindings ? ` ${bindings}` : ''}${window}${order}`;\n}\n\nfunction describeSearchWindow(limit?: number, offset?: number): string {\n const parts = [\n limit !== undefined ? `limit:${Math.max(0, limit)}` : undefined,\n offset !== undefined ? `offset:${Math.max(0, offset)}` : undefined,\n ].filter(Boolean);\n return parts.length > 0 ? ` ${parts.join(',')}` : '';\n}\n\nfunction hasSearchWindow(source: TextRequiredSource | VectorRequiredSource): boolean {\n return source.pattern.limit !== undefined || source.pattern.offset !== undefined;\n}\n\nfunction describeSearchOrder(orderBy: Array<{ field: string; direction?: 'asc' | 'desc' }> | undefined): string {\n if (!orderBy?.length) {\n return '';\n }\n return ` order:${orderBy.map((entry) => `${entry.field}:${entry.direction ?? 'asc'}`).join(',')}`;\n}\n\nfunction describeBind(bind: RdfQueryBind): string {\n return `?${bind.variable}:=${describeBindExpression(bind.expression)}`;\n}\n\nfunction describeBindExpression(expression: RdfBindExpression): string {\n switch (expression.type) {\n case 'term':\n if (expression.term.termType === 'Literal' && isFiniteNumericLexical(expression.term.value)) {\n return expression.term.value;\n }\n return termToId(expression.term as any);\n case 'variable':\n return `?${expression.variable}`;\n case 'stringValue':\n return `STR(?${expression.variable})`;\n case 'stringLength':\n return `STRLEN(?${expression.variable})`;\n case 'lowerCase':\n return `LCASE(${describeBindExpression(expression.expression)})`;\n case 'upperCase':\n return `UCASE(${describeBindExpression(expression.expression)})`;\n case 'coalesce':\n return `COALESCE(${expression.expressions.map(describeBindExpression).join(',')})`;\n case 'if':\n return `IF(${expression.condition.map(describeFilter).join('&')},${describeBindExpression(expression.then)},${describeBindExpression(expression.else)})`;\n case 'substring':\n return `SUBSTR(${[\n describeBindExpression(expression.expression),\n describeBindExpression(expression.start),\n expression.length === undefined ? undefined : describeBindExpression(expression.length),\n ].filter(Boolean).join(',')})`;\n case 'concat':\n return `CONCAT(${expression.expressions.map(describeBindExpression).join(',')})`;\n case 'iri':\n return `IRI(${describeBindExpression(expression.expression)})`;\n case 'strdt':\n return `STRDT(${describeBindExpression(expression.lexical)},${describeBindExpression(expression.datatype)})`;\n case 'strlang':\n return `STRLANG(${describeBindExpression(expression.lexical)},${describeBindExpression(expression.language)})`;\n default: {\n const exhaustive: never = expression;\n return JSON.stringify(exhaustive);\n }\n }\n}\n\nfunction describeScanOrder(options: RdfQuadScanOptions): string {\n const order = options.order ?? [];\n const directions = options.orderDirections ?? order.map(() => (options.reverse ? 'desc' : 'asc'));\n const firstDirection = directions[0] ?? 'asc';\n const sameDirection = directions.every((direction) => direction === firstDirection);\n if (sameDirection) {\n return `${firstDirection}:${order.join(',')}`;\n }\n return order.map((entry, index) => `${directions[index] ?? 'asc'}:${entry}`).join(',');\n}\n\nfunction describeQueryOrder(orderBy: NonNullable<RdfLocalQuery['orderBy']>): string {\n return orderBy.map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',');\n}\n\nfunction storagePlanMarkers(queryPlan: string[] | undefined): string[] {\n return (queryPlan ?? []).filter((entry) => (\n entry.startsWith('TextSearch(')\n || entry.startsWith('Rdf3x')\n || entry === 'GraphMembershipFilter'\n || entry === 'GraphPrefixMembershipFilter'\n || entry.startsWith('LexicalRange(')\n || entry.startsWith('NumericRange(')\n || entry.startsWith('PrefixRange(')\n || entry.startsWith('TermIn(')\n || entry.startsWith('TermNotIn(')\n || entry.startsWith('TermType(')\n || entry.startsWith('Language(')\n || entry.startsWith('Datatype(')\n || entry.startsWith('TupleValuesJoin(')\n || entry.startsWith('JoinBGP(')\n || entry.startsWith('JoinOrder(')\n || entry.startsWith('JoinDistinct(')\n || entry.startsWith('JoinLimit')\n || entry.startsWith('JoinGroupCountHaving(')\n || entry.startsWith('JoinGroupAggregateHaving(')\n || entry.startsWith('JoinGroupAggregateNumeric(')\n ));\n}\n\nfunction requiredSourceScanPlan(backend: PatternScanBackend): 'IndexScan' | 'Rdf3xPrimaryScan' | 'MixedScan' {\n switch (backend) {\n case 'rdf3x':\n return 'Rdf3xPrimaryScan';\n case 'mixed':\n return 'MixedScan';\n case 'index':\n case 'none':\n return 'IndexScan';\n default: {\n const exhaustive: never = backend;\n throw new Error(`Unsupported RDF required source scan backend: ${exhaustive}`);\n }\n }\n}\n\nfunction scanPlanOrder(plan: ReturnType<typeof requiredSourceScanPlan>): 'IndexOrder' | 'Rdf3xPrimaryOrder' | 'MixedOrder' {\n switch (plan) {\n case 'Rdf3xPrimaryScan':\n return 'Rdf3xPrimaryOrder';\n case 'MixedScan':\n return 'MixedOrder';\n case 'IndexScan':\n return 'IndexOrder';\n default: {\n const exhaustive: never = plan;\n throw new Error(`Unsupported RDF scan plan for order marker: ${exhaustive}`);\n }\n }\n}\n\nfunction scanPlanLimit(plan: ReturnType<typeof requiredSourceScanPlan>): 'IndexLimit' | 'Rdf3xPrimaryLimit' | 'MixedLimit' {\n switch (plan) {\n case 'Rdf3xPrimaryScan':\n return 'Rdf3xPrimaryLimit';\n case 'MixedScan':\n return 'MixedLimit';\n case 'IndexScan':\n return 'IndexLimit';\n default: {\n const exhaustive: never = plan;\n throw new Error(`Unsupported RDF scan plan for limit marker: ${exhaustive}`);\n }\n }\n}\n\nfunction toRdf3xScanOptions(options?: RdfQuadScanOptions): Rdf3xTripleScanOptions | undefined {\n if (!options) {\n return undefined;\n }\n return {\n ...(options.order ? { order: options.order } : {}),\n ...(options.orderDirections ? { orderDirections: options.orderDirections } : {}),\n ...(options.reverse ? { reverse: true } : {}),\n ...(options.limit !== undefined ? { limit: options.limit } : {}),\n ...(options.offset !== undefined ? { offset: options.offset } : {}),\n };\n}\n\nfunction toRdf3xTriplePattern(pattern: QuintPattern): Rdf3xTriplePattern {\n const result: Rdf3xTriplePattern = {};\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (isTerm(value as any)) {\n result[key] = value as Term;\n continue;\n }\n if (isRdf3xTermInPattern(value)) {\n result[key] = value;\n continue;\n }\n if (isRdf3xTermNotInPattern(value)) {\n result[key] = value;\n continue;\n }\n if (isRdf3xCompatibleOperatorPattern(key, value)) {\n result[key] = value as Rdf3xTriplePattern[typeof key];\n continue;\n }\n throw new Error(`RDF-3X primary scan cannot compile unsupported ${key} pattern`);\n }\n return result;\n}\n\nfunction stripRdf3xNumericAggregateGuards(\n patterns: CompiledJoinPattern[],\n aggregates: RdfQueryAggregate[],\n): CompiledJoinPattern[] {\n const numericVariables = new Set(aggregates\n .filter((aggregate) => aggregate.type !== 'count')\n .map((aggregate) => aggregate.variable)\n .filter((variableName): variableName is string => Boolean(variableName)));\n if (numericVariables.size === 0) {\n return patterns;\n }\n\n return patterns.map((entry) => {\n let changed = false;\n const pattern: CompiledPattern = {\n ...entry.pattern,\n pushedDownFilters: entry.pattern.pushedDownFilters,\n pushedDownFilterIndexes: [...entry.pattern.pushedDownFilterIndexes],\n };\n\n for (const key of TERM_KEYS) {\n const variableName = entry.variables[key];\n if (!variableName || !numericVariables.has(variableName)) {\n continue;\n }\n const value = pattern[key];\n if (!value || isTerm(value as any) || typeof value !== 'object') {\n continue;\n }\n if ((value as { $termType?: unknown }).$termType !== 'numeric') {\n continue;\n }\n\n const stripped = { ...(value as Record<string, unknown>) };\n delete stripped.$termType;\n if (Object.keys(stripped).length === 0) {\n delete pattern[key];\n } else {\n pattern[key] = stripped as TermMatch;\n }\n changed = true;\n }\n\n return changed ? { pattern, variables: entry.variables } : entry;\n });\n}\n\nfunction isRdf3xCompatiblePattern(pattern: QuintPattern): boolean {\n return TERM_KEYS.every((key) => {\n const value = pattern[key];\n if (!value || isTerm(value as any)) {\n return true;\n }\n if (isRdf3xTermInPattern(value)) {\n return true;\n }\n if (isRdf3xTermNotInPattern(value)) {\n return true;\n }\n if (isRdf3xCompatibleOperatorPattern(key, value)) {\n return true;\n }\n return false;\n });\n}\n\nfunction isRdf3xTermInPattern(value: unknown): value is Rdf3xTermInPattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && Object.keys(value).length === 1\n && Array.isArray((value as { $in?: unknown }).$in)\n && ((value as { $in: unknown[] }).$in).length > 0\n && ((value as { $in: unknown[] }).$in).every((entry) => isTerm(entry as any));\n}\n\nfunction isRdf3xTermNotInPattern(value: unknown): value is Rdf3xTermNotInPattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && Object.keys(value).length === 1\n && Array.isArray((value as { $notIn?: unknown }).$notIn)\n && ((value as { $notIn: unknown[] }).$notIn).length > 0\n && ((value as { $notIn: unknown[] }).$notIn).every((entry) => isTerm(entry as any));\n}\n\nfunction isRdf3xCompatibleOperatorPattern(\n key: Rdf3xPatternKey,\n value: unknown,\n): value is Rdf3xTermMetadataPattern | Rdf3xObjectOperatorPattern {\n if (value === null || typeof value !== 'object' || 'termType' in value) {\n return false;\n }\n const allowed = new Set<string>([\n '$in',\n '$notIn',\n '$termType',\n '$language',\n '$notLanguage',\n '$langMatches',\n '$datatype',\n '$notDatatype',\n ...(key === 'graph' ? ['$startsWith'] : []),\n ...(key === 'object' ? ['$gt', '$gte', '$lt', '$lte', '$contains', '$endsWith'] : []),\n ]);\n if (Object.keys(value).length === 0 || Object.keys(value).some((operator) => !allowed.has(operator))) {\n return false;\n }\n const operators = value as Record<string, unknown>;\n if (operators.$in !== undefined && !isRdf3xTermInPattern({ $in: operators.$in })) return false;\n if (operators.$notIn !== undefined && !isRdf3xTermNotInPattern({ $notIn: operators.$notIn })) return false;\n if (operators.$startsWith !== undefined && typeof operators.$startsWith !== 'string') return false;\n if (operators.$termType !== undefined && !['iri', 'blank', 'literal', 'numeric'].includes(operators.$termType as string)) return false;\n for (const languageOperator of ['$language', '$notLanguage', '$langMatches']) {\n if (operators[languageOperator] !== undefined && typeof operators[languageOperator] !== 'string') return false;\n }\n for (const datatypeOperator of ['$datatype', '$notDatatype']) {\n const datatype = operators[datatypeOperator];\n if (datatype !== undefined && (!isTerm(datatype as any) || (datatype as Term).termType !== 'NamedNode')) return false;\n }\n if (key === 'object') {\n for (const rangeOperator of ['$gt', '$gte', '$lt', '$lte']) {\n const rangeValue = operators[rangeOperator];\n if (rangeValue !== undefined && !isRdf3xObjectRangeValue(rangeValue)) return false;\n }\n for (const textOperator of ['$contains', '$endsWith'] satisfies Array<keyof Rdf3xObjectTextSearchPattern>) {\n if (operators[textOperator] !== undefined && typeof operators[textOperator] !== 'string') return false;\n }\n }\n return true;\n}\n\nfunction isRdf3xObjectRangeValue(value: unknown): boolean {\n if (typeof value === 'number') {\n return Number.isFinite(value);\n }\n if (typeof value === 'string') {\n return true;\n }\n if (isTerm(value as any)) {\n return true;\n }\n return false;\n}\n\nfunction bindTextSearchResult(\n binding: RdfBindingRow,\n pattern: RdfTextSearchPattern,\n result: RdfTextSearchResult,\n): RdfBindingRow | null {\n const next = { ...binding };\n const chunkResource = `${result.source}#chunk-${encodeURIComponent(result.chunkKey)}`;\n const candidates: Array<[string | undefined, Term | undefined]> = [\n [pattern.source, DataFactory.namedNode(result.source) as Term],\n [pattern.chunk, DataFactory.namedNode(chunkResource) as Term],\n [pattern.content, DataFactory.literal(result.content) as Term],\n [pattern.heading, result.heading ? DataFactory.literal(result.heading) as Term : undefined],\n [pattern.score, decimalLiteral(result.score)],\n [pattern.workspace, DataFactory.namedNode(result.workspace) as Term],\n [pattern.localPath, result.localPath ? DataFactory.literal(result.localPath) as Term : undefined],\n [pattern.contentType, result.contentType ? DataFactory.literal(result.contentType) as Term : undefined],\n [pattern.ordinal, integerLiteral(result.ordinal)],\n [pattern.level, integerLiteral(result.level)],\n [pattern.startOffset, integerLiteral(result.startOffset)],\n [pattern.endOffset, integerLiteral(result.endOffset)],\n ];\n\n for (const [variableName, term] of candidates) {\n if (!variableName || !term) {\n continue;\n }\n const existing = next[variableName];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[variableName] = term;\n }\n return next;\n}\n\nfunction bindVectorSearchResult(\n binding: RdfBindingRow,\n pattern: RdfVectorSearchPattern,\n result: RdfVectorSearchResult,\n): RdfBindingRow | null {\n const next = { ...binding };\n const chunkResource = `${result.source}#chunk-${encodeURIComponent(result.chunkKey)}`;\n const candidates: Array<[string | undefined, Term | undefined]> = [\n [pattern.source, DataFactory.namedNode(result.source) as Term],\n [pattern.chunk, DataFactory.namedNode(chunkResource) as Term],\n [pattern.content, DataFactory.literal(result.content) as Term],\n [pattern.heading, result.heading ? DataFactory.literal(result.heading) as Term : undefined],\n [pattern.score, decimalLiteral(result.score)],\n [pattern.distance, decimalLiteral(result.distance)],\n [pattern.workspace, DataFactory.namedNode(result.workspace) as Term],\n [pattern.localPath, result.localPath ? DataFactory.literal(result.localPath) as Term : undefined],\n [pattern.contentType, result.contentType ? DataFactory.literal(result.contentType) as Term : undefined],\n [pattern.ordinal, integerLiteral(result.ordinal)],\n [pattern.level, integerLiteral(result.level)],\n [pattern.startOffset, integerLiteral(result.startOffset)],\n [pattern.endOffset, integerLiteral(result.endOffset)],\n [pattern.model, result.model ? DataFactory.literal(result.model) as Term : undefined],\n ];\n\n for (const [variableName, term] of candidates) {\n if (!variableName || !term) {\n continue;\n }\n const existing = next[variableName];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[variableName] = term;\n }\n return next;\n}\n\nfunction queryAggregates(query: RdfLocalQuery): RdfQueryAggregate[] {\n return query.aggregates ?? (query.aggregate ? [query.aggregate] : []);\n}\n\nfunction aggregatePlan(aggregates: RdfQueryAggregate[], grouped: boolean): string {\n if (aggregates.some((aggregate) => aggregate.type !== 'count')) {\n const prefix = grouped ? 'group-' : '';\n const suffix = aggregates.length > 1 ? '-multi' : '';\n return `Aggregate(${prefix}basic${suffix})`;\n }\n if (aggregates.length === 1) {\n const aggregate = aggregates[0];\n if (grouped) {\n return aggregate.distinct ? 'Aggregate(group-count-distinct)' : 'Aggregate(group-count)';\n }\n return aggregate.distinct ? 'Aggregate(count-distinct)' : 'Aggregate(count)';\n }\n if (grouped) {\n return aggregates.some((aggregate) => aggregate.distinct)\n ? 'Aggregate(group-count-multi-distinct)'\n : 'Aggregate(group-count-multi)';\n }\n return aggregates.some((aggregate) => aggregate.distinct)\n ? 'Aggregate(count-multi-distinct)'\n : 'Aggregate(count-multi)';\n}\n\nfunction uniquePatternKeys(values: RdfQueryPatternKey[]): RdfQueryPatternKey[] {\n return TERM_KEYS.filter((key) => values.includes(key));\n}\n"]}
|