@babylonjs/loaders 9.26.2 → 9.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/glTF/2.0/Extensions/EXT_texture_avif.pure.js +1 -1
- package/glTF/2.0/Extensions/EXT_texture_avif.pure.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_texture_webp.pure.js +1 -1
- package/glTF/2.0/Extensions/EXT_texture_webp.pure.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.d.ts +33 -0
- package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js +166 -37
- package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/index.d.ts +1 -0
- package/glTF/2.0/Extensions/KHR_interactivity/index.js +1 -0
- package/glTF/2.0/Extensions/KHR_interactivity/index.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.d.ts +243 -0
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.js +2335 -0
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.d.ts +82 -1
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.js +180 -34
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.d.ts +14 -2
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js +220 -34
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/pure.d.ts +1 -0
- package/glTF/2.0/Extensions/KHR_interactivity/pure.js +1 -0
- package/glTF/2.0/Extensions/KHR_interactivity/pure.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity.pure.d.ts +4 -0
- package/glTF/2.0/Extensions/KHR_interactivity.pure.js +6 -2
- package/glTF/2.0/Extensions/KHR_interactivity.pure.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js +1 -1
- package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js.map +1 -1
- package/glTF/2.0/glTFLoader.pure.d.ts +2 -1
- package/glTF/2.0/glTFLoader.pure.js +41 -4
- package/glTF/2.0/glTFLoader.pure.js.map +1 -1
- package/glTF/2.0/glTFLoaderInterfaces.d.ts +9 -0
- package/glTF/2.0/glTFLoaderInterfaces.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactivityGraphExporter.js","sourceRoot":"","sources":["../../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAMjF,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAErD,OAAO,EACH,iCAAiC,EACjC,wBAAwB,EACxB,gCAAgC,EAChC,4CAA4C,EAC5C,qBAAqB,GAGxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,2CAA2C,EAC3C,sCAAsC,EACtC,0BAA0B,EAC1B,gCAAgC,EAChC,qBAAqB,GAMxB,MAAM,2BAA2B,CAAC;AA6KnC;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAClD;;OAEG;IACH,YAAmC,WAAyD;QACxF,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QADhE,gBAAW,GAAX,WAAW,CAA8C;QAExF,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC9C,CAAC;CACJ;AAyBD,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAS,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACrK,MAAM,0BAA0B,GAAG,wCAAwC,CAAC;AAC5E,MAAM,wBAAwB,GAAG,CAAC,uBAAuB,EAAE,wBAAwB,EAAE,qBAAqB,CAAU,CAAC;AAErH,SAAS,yBAAyB,CAAC,OAAe;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACtG,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,YAAY,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1D,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,kCAAkC,CAAC,OAAe,EAAE,kBAA2B;IACpF,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACtG,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,OAAO,CACH,cAAc,GAAG,CAAC;QAClB,CAAC,kBAAkB,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO;QAC/C,wBAAwB,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,CAA8C,CAAC,CAC/G,CAAC;AACN,CAAC;AACD,MAAM,4BAA4B,GAAqC;IACnE,sCAAuB,EAAE,OAAO;IAChC,wCAAwB,EAAE,MAAM;IAChC,iDAAwB,EAAE,KAAK;IAC/B,sCAAuB,EAAE,KAAK;IAC9B,wCAAwB,EAAE,QAAQ;IAClC,wCAAwB,EAAE,QAAQ;IAClC,wCAAwB,EAAE,QAAQ;IAClC,8CAA2B,EAAE,QAAQ;IACrC,sCAAuB,EAAE,QAAQ;IACjC,sCAAuB,EAAE,QAAQ;IACjC,0CAAyB,EAAE,UAAU;IACrC,0CAAyB,EAAE,UAAU;IACrC,sCAAuB,EAAE,UAAU;IACnC,IAAI,EAAE,KAAK;IACX,aAAa,EAAE,KAAK;IACpB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,KAAK;IACf,cAAc,EAAE,KAAK;CACxB,CAAC;AAEF,SAAS,UAAU,CAAI,KAAQ;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAM,CAAC;IACxD,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC9B,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;gBACxB,QAAQ,EAAE,IAAI;aACjB,CAAC,CAAC;QACP,CAAC;QACD,OAAO,KAAU,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAqB;IAC9C,OAAO,KAAK,CAAC,QAAQ,EAAE,gBAAgE,CAAC;AAC5F,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAoE;IAC9F,OAAO,UAAU,CAAC,QAAQ,EAAE,gBAAiE,CAAC;AAClG,CAAC;AAED,SAAS,OAAO,CAAI,UAAyC,EAAE,GAAW;IACtE,OAAO,UAAU,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7G,CAAC;AAED,SAAS,kBAAkB,CAAC,EAAU,EAAE,SAAkB;IACtD,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,sBAAsB,CAAC,SAAiB;IAC7C,OAAO,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,aAAa,CAAC,MAAiC,EAAE,IAAY;IAClE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,cAAc,CAAC,MAAiC,EAAE,SAAiB,EAAE,MAAc;IACxF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,UAAU,EAAE,SAAS,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,SAAS,KAAK,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACzI,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACnC,OAAO,sCAAsC,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,gCAAgC,CACrC,KAA8B,EAC9B,IAAwB,EACxB,KAAc;IAEd,MAAM,SAAS,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAClF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,2CAA2C,CAAC,SAAS,KAAK,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAsB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACvJ,CAAC;AAED,SAAS,iCAAiC,CAAC,KAAc;IACrD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAChB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9C,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,MAAM,UAAU,GAAG,KAA4C,CAAC;YAChE,MAAM,YAAY,GACd,UAAU,CAAC,IAAI,yCAA0B,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;gBACxE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,KAAiB,CAAC,CAAC,OAAO,EAAE,CAAC;gBACtE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;YAC3B,OAAO,UAAU,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAC3F,CAAC,CAAC;QACJ,CAAC,CAAC,KAAK,CAAC;IACZ,OAAO,2CAA2C,CAAC,aAAa,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,YAAY,CAAC,IAAoC,EAAE,KAAqC;IAC7F,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAClD,OAAO,IAAI,KAAK,KAAK,CAAC;IAC1B,CAAC;IACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACjI,SAAS;QACb,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,IAAa,EAAE,KAAc;IAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACrG,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9G,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3F,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,CACH,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YACvC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,eAAe,CAAC,KAAK,EAAG,KAAiC,CAAC,GAAG,CAAC,CAAC,CAAC,CAC3J,CAAC;IACN,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB;IACtC,QAAQ,SAAS,EAAE,CAAC;QAChB,KAAK,MAAM;YACP,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,KAAK;YACN,OAAO,CAAC,CAAC,CAAC,CAAC;QACf,KAAK,KAAK;YACN,OAAO,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,OAAO;YACR,OAAO,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,QAAQ;YACT,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,KAAK,QAAQ;YACT,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3B,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACX,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAChC,KAAK,UAAU;YACX,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzD,KAAK,UAAU;YACX,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5F;YACI,OAAO,EAAE,CAAC;IAClB,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAC5B,KAA8B,EAC9B,KAAmC,EACnC,OAAkD,EAClD,WAAyB,EACzB,MAAc;IAEd,IAAI,WAAW,CAAC,SAAS,KAAK,cAAc,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5E,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;IACzD,CAAC;IACD,IAAI,WAAW,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;QACzC,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC;QAChE,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,4BAA4B,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7H,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;QAC9D,CAAC;IACL,CAAC;IACD,IAAI,WAAW,CAAC,SAAS,KAAK,aAAa,IAAI,WAAW,CAAC,SAAS,KAAK,aAAa,IAAI,WAAW,CAAC,SAAS,KAAK,qBAAqB,EAAE,CAAC;QACxI,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC;QACpE,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,4BAA4B,CAAC,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,MAAM,GAAG,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC;YACvG,MAAM,iBAAiB,GAAG,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1G,IAAI,iBAAiB,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9F,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;oBAChB,OAAO,QAAQ,CAAC;gBACpB,CAAC;gBACD,KAAK,CAAC,KAAK,KAAX,KAAK,CAAC,KAAK,GAAK,EAAE,EAAC;gBACnB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBACnD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,EAAE,QAAQ,CAAC;IACrC,MAAM,SAAS,GACX,UAAU,KAAK,QAAQ;QACnB,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,UAAU,KAAK,SAAS;YACxB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,UAAU,KAAK,SAAS;gBACxB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,UAAU,KAAK,SAAS;oBACxB,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,UAAU,KAAK,SAAS;wBACxB,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,UAAU,IAAI,UAAU,KAAK,KAAK;4BAClC,CAAC,CAAC,UAAU;4BACZ,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1E,IAAI,CAAC,SAAS,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,KAAK,CAAC,KAAK,KAAX,KAAK,CAAC,KAAK,GAAK,EAAE,EAAC;IACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAC/E,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAA+E,EAAE,CAAC,CAAC;IACjH,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,0BAA0B,CAAC,KAA8B,EAAE,aAAqB;IACrF,MAAM,SAAS,GAAG,4BAA4B,CAAC,aAAa,CAAC,CAAC;IAC9D,IAAI,CAAC,SAAS,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,KAAK,CAAC,KAAK,KAAX,KAAK,CAAC,KAAK,GAAK,EAAE,EAAC;IACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAC/E,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAA+E,EAAE,CAAC,CAAC;IACjH,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,eAAe,CAAC,KAA8B,EAAE,KAAiC,EAAE,OAAuC,EAAE,YAAoB,EAAE;IACvJ,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,QAAQ,CAAC;IACnE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,OAAO,EAAE,4BAA4B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChG,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,sBAAsB,CAAC,WAAyB,EAAE,QAAuC;IAC9F,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;IACrC,IAAI,WAAW,EAAE,CAAC;QACd,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,sBAAsB,CAAC,WAAW,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CACnK,CAAC;IACN,CAAC;IACD,OAAO,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,4BAA4B,CACjC,WAAyB,EACzB,GAAW,EACX,QAAuC,EACvC,WAAoC,EACpC,iCAA0C,IAAI;IAE9C,MAAM,KAAK,GAAG,sBAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,2BAA2B,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3E,IAAI,8BAA8B,IAAI,UAAU,IAAI,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACjI,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;QACrH,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChJ,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACtH,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QAClF,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,KAAK,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,2BAA2B,CAAC,WAAyB,EAAE,GAAW,EAAE,QAAuC;IAChH,MAAM,KAAK,GAAG,sBAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACvF,CAAC;AAED,SAAS,0BAA0B,CAAC,KAA4B,EAAE,QAAuC,EAAE,KAA8B,EAAE,cAAuB;IAC9J,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,UAAU,CAAC;IACvJ,IAAI,KAAc,CAAC;IACnB,QAAQ,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACjC,KAAK,MAAM;YACP,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;YAC5D,MAAM;QACV,KAAK,KAAK;YACN,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM;QACV,KAAK,OAAO;YACR,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM;QACV,KAAK,QAAQ;YACT,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;YAC3D,MAAM;QACV;YACI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACzB,MAAM;IACd,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClF,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAQ,CAAC,EAAE,CAAC;QAClH,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAQ,CAAC,EAAE,CAAC;QAClH,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,OAAO,GAA8E;YACvF,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;YAC/B,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;YACvC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;YACjC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;YAC/B,UAAU,EAAE,cAAc,IAAI,CAAC;SAClC,CAAC;QACF,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAY,CAAC,CAAC,EAAE,CAAC;YAC/F,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAClG,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAChE,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAc,CAAC,QAAQ,CAAC,KAAkC,CAAC,CAAC,EAAE,CAAC;QACzH,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,CAAC,gBAAgB,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACxG,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,+BAA+B,CACpC,IAA4B,EAC5B,OAAgC,EAChC,GAAW,EACX,QAAuC,EACvC,KAA8B,EAC9B,WAA0B,EAC1B,cAAuB;IAEvB,MAAM,YAAY,GAAG,CAAC,YAAoB,EAAE,iBAAgD,EAAyB,EAAE,CACnH,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IAChJ,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1F,IACI,iBAAiB,CAAC,kBAAkB,KAAK,QAAQ,CAAC,kBAAkB;gBACpE,CAAC,0BAA0B,CAAC,YAAY,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,cAAc,CAAC,EACtH,CAAC;gBACC,OAAO,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACpG,CAAC;QACL,CAAC;IACL,CAAC;IACD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;QAC1E,OAAO,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,SAAS,eAAe,CACpB,WAAgD,EAChD,UAA8H;IAE9H,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,eAAe,CAA0C,MAAS,EAAE,GAAM,EAAE,KAAc;IAC/F,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE;QAC/B,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,KAAK;QACL,QAAQ,EAAE,IAAI;KACjB,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,0BAA0B;IAUnC,mFAAmF;IACnF,IAAW,wBAAwB;QAC/B,OAAO,IAAI,CAAC,yBAAyB,CAAC;IAC1C,CAAC;IAKD;;;OAGG;IACH,YACqB,WAAiC,EACjC,WAA2C,EAAE;QAD7C,gBAAW,GAAX,WAAW,CAAsB;QACjC,aAAQ,GAAR,QAAQ,CAAqC;QAtB1D,mBAAc,GAAqB,EAAE,CAAC;QACtC,8BAAyB,GAAa,EAAE,CAAC;QAChC,qBAAgB,GAAwC,EAAE,CAAC;QACpE,iBAAY,GAAG,KAAK,CAAC;QAqBzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC;QAC1C,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5G,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAEO,gBAAgB;QACpB,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,4BAA4B,EAAE,EAAE,GAAG,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5I,MAAM,wBAAwB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,CAAC;QACrG,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAChD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAuC,EAAE,CAAC,CAAC;YAC5D,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,IAAI,CAAC,WAAW;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;YAC3D,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;SACxC,CAAC,CAAC,CACN,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CACrC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EACjH,wBAAwB,CAC3B,CACJ,CAAC;QACF,IAAI,CAAC,SAAS,GAAG;YACb,aAAa,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC;YACjF,KAAK;YACL,WAAW;SACd,CAAC;IACN,CAAC;IAEO,sBAAsB,CAAC,WAAgD;QAC3E,MAAM,QAAQ,GAAwC,EAAE,CAAC;QACzD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;YAClH,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC3G,MAAM,IAAI,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC;YACzH,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1B,SAAS;YACb,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1J,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,OAAO,IAAI,IAAI,CAAC,cAAc,KAAK,mBAAmB,CAAC,EAAE,CAAC;gBACtH,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;YAClC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,OAAO;QACV,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO;YACH,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa;YAC3C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChI,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE;SAClD,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAA2C;QACpD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,WAAW,GAAwC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACzD,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,2BAA2B,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,EAAE,EAAwB,CAAC;QAClI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,IAAI,CAAC,CAAC;QAC5G,IAAI,iBAAiB,GAAG,CAAC,IAAI,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9D,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE,qCAAqC;gBAC3C,OAAO,EAAE,uBAAuB,iBAAiB,uCAAuC;aAC3F,CAAC,CAAC;YACH,MAAM,IAAI,2BAA2B,CAAC,WAAW,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,iBAAiB,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACxD,MAAM,CAAC,KAAK,GAAG,iBAAiB,CAAC;QACrC,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,eAAe,CAAC,KAAgB,EAAE,UAAkB;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QACzE,IAAI,aAAa,EAAE,CAAC;YAChB,OAAO,0BAA0B,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,gBAAgE,CAAC;QACpG,OAAO,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,CAAC;IAEO,+BAA+B;QACnC,MAAM,WAAW,GAAwC,EAAE,CAAC;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5C,MAAM,gBAAgB,GAAG,CAAC,KAAyB,EAAsB,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACpI,MAAM,OAAO,GAAuC;YAChD,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;YAClD,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,qBAAqB,KAAK,IAAI,CAAC,CAAC;YAC/H,iBAAiB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC;YACpJ,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC;YAChI,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC3B,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC;YAC/J,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC;YAClF,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;SAC7B,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC;YACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC7D,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC9B,CAAC;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;IAEO,cAAc;QAClB,MAAM,QAAQ,GAAqB,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC1B,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACnC,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE,+BAA+B;gBACrC,OAAO,EAAE,+GAA+G;aAC3H,CAAC,CAAC;QACP,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACnC,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE,sCAAsC;gBAC5C,OAAO,EAAE,kEAAkE;aAC9E,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,EAAE,CAAC;YACjE,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACnC,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAChC,CAAC,CAAC;QACP,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAC7F,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACnC,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE,sCAAsC;gBAC5C,OAAO,EAAE,wBAAwB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,kBAAkB,IAAI,CAAC,WAAW,CAAC,MAAM,8BAA8B;aAC/I,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;YAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACvD,MAAM,WAAW,GAAwC,EAAE,CAAC;YAC5D,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,WAAW,IAAI,EAAE,EAAE,CAAC;gBACrF,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,eAAe;oBACrB,UAAU;oBACV,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,QAAQ,EAAE,UAAU,CAAC,QAAQ;iBAChC,CAAC,CAAC;YACP,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,sBAAsB;oBAC5B,UAAU;oBACV,IAAI,EAAE,WAAW,UAAU,EAAE;oBAC7B,OAAO,EAAE,4IAA4I;iBACxJ,CAAC,CAAC;gBACH,MAAM,gBAAgB,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAgB,EAAE,CAAC,CAAC;oBACxE,WAAW,EAAE,CAAC,CAAC;oBACf,gBAAgB,EAAE,CAAC,CAAC;oBACpB,SAAS,EAAE,EAAE;oBACb,MAAM,EAAE,CAAC,KAAK,CAAC;oBACf,cAAc,EAAE,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC;oBACjE,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,KAAK,KAAK,CAAC,QAAQ,CAAC;iBACzF,CAAC,CAAC,CAAC;gBACJ,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,CAAC;gBACvF,SAAS;YACb,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC;gBACV,KAAK;gBACL,UAAU;gBACV,MAAM;gBACN,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC;gBACzE,WAAW;aACd,CAAC,CAAC;QACP,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEO,wBAAwB,CAAC,KAAqB,EAAE,WAAgD;QACpG,MAAM,UAAU,GAAG,iCAAiC,EAAE,CAAC,MAAM,CACzD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,YAAY,EAAE,CAC3H,CAAC;QACF,MAAM,IAAI,GAAG,WAAW,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,mBAAmB;gBACzB,IAAI;gBACJ,OAAO,EAAE,KAAK,CAAC,QAAQ;gBACvB,OAAO,EAAE,oBAAoB,KAAK,CAAC,YAAY,EAAE,6CAA6C;aACjG,CAAC,CAAC;YACH,OAAO,aAAa,CAAC;QACzB,CAAC;QACD,eAAe,CAAC,WAAW,EAAE;YACzB,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,KAAK,CAAC,QAAQ;YACvB,OAAO,EACH,UAAU,CAAC,MAAM,KAAK,CAAC;gBACnB,CAAC,CAAC,oBAAoB,KAAK,CAAC,YAAY,EAAE,2DAA2D;gBACrG,CAAC,CAAC,oBAAoB,KAAK,CAAC,YAAY,EAAE,0BAA0B,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;SACrK,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,qBAAqB,CAAC,KAAgB,EAAE,UAAkB,EAAE,MAA+B,EAAE,gBAAqD;QACtJ,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;QACnD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,KAAK,UAAU,IAAI,UAAU,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClF,MAAM,WAAW,GAAwC,EAAE,CAAC;gBAC5D,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBAClD,gBAAgB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBACtC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3D,SAAS;YACb,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,YAAY,GAAmB,EAAE,CAAC;QACxC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;YAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,KAAM,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAClE,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC1G,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/F,MAAM,OAAO,GAAG,WAAW,IAAI,gBAAgB,EAAE,OAAO,KAAK,uBAAuB,CAAC,CAAC,CAAC,wBAAwB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAChJ,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAwC,EAAE,CAAC;YAC5D,IAAI,cAAc,GAAyC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC;YAChI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,cAAc,GAAG,aAAa,CAAC;gBAC/B,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,qBAAqB;oBAC3B,UAAU;oBACV,SAAS;oBACT,IAAI,EAAE,WAAW,UAAU,UAAU,SAAS,cAAc;oBAC5D,OAAO,EAAE,qBAAqB,UAAU,CAAC,WAAW,kBAAkB;iBACzE,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC7C,cAAc,GAAG,aAAa,CAAC;gBAC/B,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,mBAAmB;oBACzB,UAAU;oBACV,SAAS;oBACT,IAAI,EAAE,WAAW,UAAU,UAAU,SAAS,EAAE;oBAChD,OAAO,EAAE,iCAAiC,SAAS,iGAAiG;iBACvJ,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC5C,cAAc,GAAG,aAAa,CAAC;gBAC/B,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,mBAAmB;oBACzB,UAAU;oBACV,SAAS;oBACT,IAAI,EAAE,WAAW,UAAU,UAAU,SAAS,EAAE;oBAChD,OAAO,EAAE,2BAA2B,WAAW,CAAC,EAAE,uBAAuB;iBAC5E,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,0BAA0B,EAAE,CAAC;oBACjF,cAAc,GAAG,aAAa,CAAC;oBAC/B,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,qBAAqB;wBAC3B,UAAU;wBACV,SAAS;wBACT,IAAI,EAAE,WAAW,UAAU,UAAU,SAAS,EAAE;wBAChD,OAAO,EAAE,oCAAoC,SAAS,4CAA4C;qBACrG,CAAC,CAAC;gBACP,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,kCAAkC,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;oBACnI,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC;wBACpE,cAAc,GAAG,OAAO,CAAC;oBAC7B,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC5F,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC;oBACpE,cAAc,GAAG,OAAO,CAAC;gBAC7B,CAAC;YACL,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,cAAc,GAAG,aAAa,CAAC;gBAC/B,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,oBAAoB;oBAC1B,UAAU;oBACV,SAAS;oBACT,IAAI,EAAE,WAAW,UAAU,UAAU,SAAS,EAAE;oBAChD,OAAO,EAAE,6BAA6B,SAAS,iBAAiB;iBACnE,CAAC,CAAC;YACP,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC;gBACd,WAAW,EAAE,SAAS;gBACtB,gBAAgB,EAAE,UAAU,CAAC,WAAW;gBACxC,SAAS;gBACT,OAAO;gBACP,MAAM;gBACN,cAAc;gBACd,WAAW;aACd,CAAC,CAAC;QACP,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,WAAW,GAAwC,EAAE,CAAC;YAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACzE,gBAAgB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC;gBACd,WAAW,EAAE,CAAC,CAAC;gBACf,gBAAgB,EAAE,CAAC,CAAC;gBACpB,SAAS,EAAE,EAAE;gBACb,MAAM;gBACN,cAAc;gBACd,WAAW;aACd,CAAC,CAAC;QACP,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAEO,kCAAkC,CACtC,KAA8B,EAC9B,IAA4B,EAC5B,SAAiB,EACjB,SAAiB,EACjB,WAAyE,EACzE,KAAqB,EACrB,UAAkB,EAClB,WAAgD;QAEhD,MAAM,MAAM,GAAG,KAAK,CAAC,MAMpB,CAAC;QACF,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAE,EAAE,CAC/C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAClB,CAAC,CAAC,OAAO;iBACF,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACZ,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;gBACzC,CAAC,CAAC,EAAE,IAAI,EAAG,MAA6B,CAAC,IAAI,EAAE,SAAS,EAAG,MAAkC,CAAC,SAAS,EAAE;gBACzG,CAAC,CAAC,MAAM,CACf;iBACA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvG,CAAC,CAAC,OAAO,CAAC;QAClB,MAAM,oBAAoB,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/G,MAAM,oBAAoB,GAAG,CAAC,OAA6C,EAAE,EAAE,CAC3E,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;aACxB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;aACrF,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CACjC,IAAI,GAAG,CACH,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;aAChC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;aACzC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAC1C,CACJ,CACJ,CAAC,IAAI,EAAE,CAAC;QACT,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,MAAM,qBAAqB,GAAG;YAC1B,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;YACzE,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;YAC3E,UAAU,EAAE,KAAK,YAAY,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;YAC1H,WAAW,EAAE,KAAK,YAAY,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;SAC/H,CAAC;QACF,MAAM,uBAAuB,GAAG;YAC5B,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACpE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACtE,UAAU,EAAE,kBAAkB;YAC9B,WAAW,EAAE,mBAAmB;SACnC,CAAC;QACF,IACI,MAAM,CAAC,SAAS,KAAK,SAAS;YAC9B,CAAC,eAAe,CAAC,qBAAqB,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;YACtH,CAAC,eAAe,CAAC,qBAAqB,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;YACxH,CAAC,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;YACnF,CAAC,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;YACrF,CAAC,eAAe,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,EAClE,CAAC;YACC,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,qBAAqB;gBAC3B,UAAU;gBACV,SAAS;gBACT,IAAI,EAAE,WAAW,UAAU,UAAU,SAAS,EAAE;gBAChD,OAAO,EAAE,KAAK,CAAC,QAAQ;gBACvB,OAAO,EAAE,oCAAoC,SAAS,0FAA0F;aACnJ,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAEO,qBAAqB,CACzB,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,OAAgC,EAChC,MAAiC,EACjC,WAAgD;QAEhD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;YACvF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,oBAAoB;oBAC1B,UAAU;oBACV,SAAS;oBACT,IAAI,EAAE,WAAW,UAAU,UAAU,SAAS,EAAE;oBAChD,OAAO,EAAE,cAAc,SAAS,qBAAqB,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;iBACzF,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,sBAAsB;oBAC5B,UAAU;oBACV,SAAS;oBACT,IAAI,EAAE,WAAW,UAAU,UAAU,SAAS,EAAE;oBAChD,OAAO,EAAE,cAAc,SAAS,sCAAsC,IAAI,GAAG;iBAChF,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YACD,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAChF,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,qBAAqB;oBAC3B,UAAU;oBACV,SAAS;oBACT,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ;oBAC/B,IAAI,EAAE,WAAW,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;oBACzC,OAAO,EAAE,kBAAkB,IAAI,aAAa,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI;iBAC9G,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,IAAI,UAAU,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBAC7H,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,0BAA0B;oBAChC,UAAU;oBACV,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,QAAQ;oBACvB,IAAI,EAAE,WAAW,KAAK,CAAC,QAAQ,EAAE;oBACjC,OAAO,EAAE,uDAAuD,SAAS,SAAS;iBACrF,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC1E,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,0BAA0B;oBAChC,UAAU;oBACV,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,QAAQ;oBACvB,IAAI,EAAE,WAAW,KAAK,CAAC,QAAQ,EAAE;oBACjC,OAAO,EAAE,cAAc,UAAU,CAAC,IAAI,wBAAwB,SAAS,oBAAoB;iBAC9F,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAiD,CAAC;QACtF,MAAM,uBAAuB,GAAG,CAAC,IAAyB,EAAE,KAA0B,EAAE,EAAE;YACtF,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAuB,CAAC;YACnF,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAuB,CAAC;YACrF,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrB,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC,CAAC;QACF,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,oBAAoB,IAAI,EAAE,EAAE,CAAC;YACzD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;YACpE,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU;gBAC9B,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC;gBAClF,CAAC,CAAC,UAAU,YAAY,uBAAuB;oBAC7C,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC;oBACnF,CAAC,CAAC,SAAS,CAAC;YAClB,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU;gBAC/B,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC;gBACrF,CAAC,CAAC,WAAW,YAAY,uBAAuB;oBAC9C,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC;oBACtF,CAAC,CAAC,SAAS,CAAC;YAClB,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;gBAClB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAe,CAAC,EAAE,CAAC;gBACxE,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,8BAA8B;oBACpC,UAAU;oBACV,SAAS;oBACT,IAAI,EAAE,WAAW,UAAU,UAAU,SAAS,EAAE;oBAChD,OAAO,EAAE,kCAAkC,SAAS,CAAC,MAAM,SAAS,SAAS,CAAC,KAAK,gBAAgB;iBACtG,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QACD,MAAM,6BAA6B,GAAG,IAAI,GAAG,EAAuB,CAAC;QACrE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACnD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,sBAAsB,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1F,MAAM,OAAO,GACT,GAAG,KAAK,WAAW;oBACf,CAAC,CAAC,4CAA4C,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;oBACnE,CAAC,CAAC,GAAG,KAAK,mBAAmB;wBAC3B,CAAC,CAAC,CAAE,KAAqE,CAAC,aAAa,EAAE,MAAM;4BAC5F,KAA0C,CAAC,gBAAgB,EAAE,MAAM;4BACpE,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;wBACtB,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,eAAe,GACjB,OAAO,CAAC,eAAe,EAAE,6BAA6B,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,iCAAiC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACpJ,MAAM,cAAc,GAAG,eAAe;oBAClC,CAAC,CAAC,GAAG,KAAK,WAAW;wBACjB,CAAC,CAAC,iCAAiC,CAAC,OAAO,CAAC;wBAC5C,CAAC,CAAC,2CAA2C,CAAC,OAAO,CAAC;oBAC1D,CAAC,CAAC,SAAS,CAAC;gBAChB,IACI,eAAe;oBACX,CAAC,CAAC,eAAe,CAAC,eAAe,IAAI,cAAc,EAAE,eAAe,IAAI,cAAc,EAAE,uBAAuB,KAAK,eAAe,CAAC,uBAAuB;oBAC3J,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC3C,CAAC;oBACC,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,+BAA+B;wBACrC,UAAU;wBACV,SAAS;wBACT,OAAO,EAAE,KAAK,CAAC,QAAQ;wBACvB,IAAI,EAAE,WAAW,KAAK,CAAC,QAAQ,WAAW,GAAG,EAAE;wBAC/C,OAAO,EAAE,qCAAqC,GAAG,2CAA2C,SAAS,IAAI;qBAC5G,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACnC,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrD,SAAS;gBACb,CAAC;gBACD,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,EAAE,sBAAsB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9E,MAAM,OAAO,GAAG,2CAA2C,CAAE,KAAa,CAAC,aAAa,CAAC,CAAC;gBAC1F,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,uBAAuB,KAAK,QAAQ,CAAC,uBAAuB,EAAE,CAAC;oBAC3I,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,+BAA+B;wBACrC,UAAU;wBACV,SAAS;wBACT,OAAO,EAAE,KAAK,CAAC,QAAQ;wBACvB,MAAM,EAAE,KAAK,CAAC,IAAI;wBAClB,IAAI,EAAE,WAAW,KAAK,CAAC,QAAQ,eAAe,KAAK,CAAC,IAAI,EAAE;wBAC1D,OAAO,EAAE,QAAQ,EAAE,eAAe;4BAC9B,CAAC,CAAC,qCAAqC,KAAK,CAAC,IAAI,qDAAqD;4BACtG,CAAC,CAAC,QAAQ;gCACR,CAAC,CAAC,qCAAqC,KAAK,CAAC,IAAI,6DAA6D;gCAC9G,CAAC,CAAC,kBAAkB,KAAK,CAAC,IAAI,uEAAuE;qBAC9G,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YACD,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,SAAS;YACb,CAAC;YACD,MAAM,WAAW,GAA0B;gBACvC,GAAG,KAAK,CAAC,UAAU;gBACnB,GAAG,KAAK,CAAC,WAAW;gBACpB,GAAG,CAAC,KAAK,YAAY,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,GAAG,CAAC,KAAK,YAAY,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3E,CAAC;YACF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACnC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,6BAA6B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC7E,SAAS;gBACb,CAAC;gBACD,MAAM,SAAS,GACX,oBAAoB,CAAC,UAAU,CAAC;oBAChC,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE;wBACpC,WAAW,EAAE,SAAS;wBACtB,gBAAgB,EAAE,CAAC,CAAC;wBACpB,SAAS;wBACT,OAAO;wBACP,MAAM;wBACN,cAAc,EAAE,OAAO;wBACvB,WAAW;qBACd,CAAC,CAAC;gBACP,MAAM,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACnD,MAAM,cAAc,GAAG,QAAQ,IAAI,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC;oBACtF,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtH,CAAC,CAAC,CAAC;gBACH,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,6BAA6B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC9C,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC3E,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,2BAA2B;wBACjC,UAAU;wBACV,SAAS;wBACT,OAAO,EAAE,KAAK,CAAC,QAAQ;wBACvB,MAAM,EAAE,UAAU,CAAC,IAAI;wBACvB,IAAI,EAAE,WAAW,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE;wBACpD,OAAO,EAAE,2BAA2B,UAAU,CAAC,IAAI,yBAAyB,SAAS,oBAAoB;qBAC5G,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,QAAwB,EAAE,OAA2C,EAAE,WAAgD;QACvI,MAAM,KAAK,GAAG,0BAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAChF,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC7E,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACrC,CAAC;aAAM,CAAC;YACJ,OAAO,KAAK,CAAC,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/E,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACrI,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE;YACnE,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;YACzD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,OAAO,KAAK,CAAC,KAAK,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACpG,MAAM,UAAU,GAAG,gCAAgC,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAChJ,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAClC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/E,MAAM,cAAc,GAAG,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;gBACvG,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,eAAe;oBACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,SAAS,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC;oBAC3F,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,OAAO,EAAE,UAAU,CAAC,OAAO;iBAC9B,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,YAAY,CAChB,KAA8B,EAC9B,UAAkC,EAClC,WAAyB,EACzB,aAA6B,EAC7B,OAA2C,EAC3C,WAAgD;QAEhD,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;QACpC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACzG,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/D,IAAI,OAAO,EAAE,CAAC;gBACV,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBACnG,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnG,IAAI,CAAC,eAAe,EAAE,CAAC;oBACnB,IAAI,gBAAgB,EAAE,CAAC;wBACnB,eAAe,CAAC,WAAW,EAAE;4BACzB,IAAI,EAAE,+BAA+B;4BACrC,UAAU,EAAE,aAAa,CAAC,UAAU;4BACpC,SAAS,EAAE,WAAW,CAAC,WAAW;4BAClC,MAAM;4BACN,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,WAAW,MAAM,EAAE;4BAC7F,OAAO,EAAE,2DAA2D,MAAM,mDAAmD;yBAChI,CAAC,CAAC;oBACP,CAAC;oBACD,SAAS;gBACb,CAAC;gBACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACpB,OAAO,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC;oBAC5B,SAAS;gBACb,CAAC;YACL,CAAC;YACD,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAClF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,2BAA2B;oBACjC,UAAU,EAAE,aAAa,CAAC,UAAU;oBACpC,SAAS,EAAE,WAAW,CAAC,WAAW;oBAClC,MAAM;oBACN,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,WAAW,MAAM,EAAE;oBAC7F,OAAO,EAAE,uBAAuB,MAAM,+CAA+C;iBACxF,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YACD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9E,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,MAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACrJ,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAqC,CAAC;QACjE,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,CAAC,KAAK,YAAY,uBAAuB,CAAC,EAAE,CAAC;gBAC9C,SAAS;YACb,CAAC;YACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBACpG,IAAI,UAAU,EAAE,SAAS,KAAK,WAAW,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,IAAI,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;oBACvH,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;wBACxF,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;4BACvB,eAAe,CAAC,WAAW,EAAE;gCACzB,IAAI,EAAE,+BAA+B;gCACrC,UAAU,EAAE,aAAa,CAAC,UAAU;gCACpC,SAAS,EAAE,WAAW,CAAC,WAAW;gCAClC,MAAM,EAAE,UAAU,CAAC,MAAM;gCACzB,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,UAAU,UAAU,CAAC,MAAM,EAAE;gCACvG,OAAO,EAAE,gBAAgB,UAAU,CAAC,MAAM,0DAA0D;6BACvG,CAAC,CAAC;wBACP,CAAC;wBACD,SAAS;oBACb,CAAC;oBACD,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBACrC,eAAe,CAAC,WAAW,EAAE;4BACzB,IAAI,EAAE,6BAA6B;4BACnC,UAAU,EAAE,aAAa,CAAC,UAAU;4BACpC,SAAS,EAAE,WAAW,CAAC,WAAW;4BAClC,MAAM,EAAE,UAAU,CAAC,MAAM;4BACzB,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,UAAU,UAAU,CAAC,MAAM,EAAE;4BACvG,OAAO,EAAE,sDAAsD,UAAU,CAAC,MAAM,IAAI;yBACvF,CAAC,CAAC;oBACP,CAAC;yBAAM,CAAC;wBACJ,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC/C,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QACD,MAAM,YAAY,GAAiD,EAAE,CAAC;QACtE,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACnG,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACnG,IAAI,CAAC,eAAe,EAAE,CAAC;gBACnB,IAAI,gBAAgB,EAAE,CAAC;oBACnB,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,+BAA+B;wBACrC,UAAU,EAAE,aAAa,CAAC,UAAU;wBACpC,SAAS,EAAE,WAAW,CAAC,WAAW;wBAClC,MAAM;wBACN,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,UAAU,MAAM,EAAE;wBAC5F,OAAO,EAAE,0DAA0D,MAAM,kDAAkD;qBAC9H,CAAC,CAAC;gBACP,CAAC;qBAAM,CAAC;oBACJ,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;gBAClE,CAAC;YACL,CAAC;QACL,CAAC;QACD,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7G,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC9C,IAAI,UAAU,EAAE,CAAC;oBACb,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;oBACnF,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;oBACnF,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;wBAC5B,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;oBAClE,CAAC;yBAAM,IAAI,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;wBACpC,eAAe,CAAC,WAAW,EAAE;4BACzB,IAAI,EAAE,+BAA+B;4BACrC,UAAU,EAAE,aAAa,CAAC,UAAU;4BACpC,SAAS,EAAE,WAAW,CAAC,WAAW;4BAClC,MAAM;4BACN,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,UAAU,MAAM,EAAE;4BAC5F,OAAO,EAAE,0DAA0D,UAAU,CAAC,MAAM,IAAI,IAAI,kDAAkD;yBACjJ,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;gBACD,SAAS;YACb,CAAC;YACD,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,6BAA6B;oBACnC,UAAU,EAAE,aAAa,CAAC,UAAU;oBACpC,SAAS,EAAE,WAAW,CAAC,WAAW;oBAClC,MAAM;oBACN,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,UAAU,MAAM,EAAE;oBAC5F,OAAO,EAAE,oBAAoB,MAAM,+CAA+C,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG;iBACrH,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,qBAAqB,GAAG,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACtE,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACjK,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5I,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,IAAI,UAAU,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;gBAChF,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,+BAA+B;oBACrC,UAAU,EAAE,aAAa,CAAC,UAAU;oBACpC,SAAS,EAAE,WAAW,CAAC,WAAW;oBAClC,MAAM;oBACN,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,UAAU,MAAM,EAAE;oBAC5F,OAAO,EAAE,oBAAoB,MAAM,4CAA4C;iBAClF,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YACD,IAAI,iBAAiB,EAAE,CAAC;gBACpB,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;gBACtE,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;oBACvH,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,+BAA+B;wBACrC,UAAU,EAAE,aAAa,CAAC,UAAU;wBACpC,SAAS,EAAE,WAAW,CAAC,WAAW;wBAClC,MAAM;wBACN,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,UAAU,MAAM,EAAE;wBAC5F,OAAO,EAAE,uBAAuB,UAAU,CAAC,MAAM,0DAA0D;qBAC9G,CAAC,CAAC;oBACH,SAAS;gBACb,CAAC;YACL,CAAC;YACD,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;gBAC1C,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtC,CAAC,CAAE,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAA2D,CAAC;YAC/F,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC;YACxC,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBAC7B,OAAO,WAAW,CAAC,MAAM,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACJ,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YAC3C,CAAC;YACD,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAC/G,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,OAAsE,EAAE,MAAc;QAC5G,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxG,CAAC;IAEO,sBAAsB,CAAC,UAAoE,EAAE,WAAyB;QAC1H,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC;QACrC,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,UAA0C,CAAC,CAAC;QAC1F,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,UAA0C,CAAC,CAAC;QAC5F,MAAM,aAAa,GAAG,KAAK,YAAY,uBAAuB,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAuC,CAAC,CAAC;QACvI,MAAM,cAAc,GAAG,KAAK,YAAY,uBAAuB,IAAI,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAuC,CAAC,CAAC;QACzI,MAAM,IAAI,GAA8C,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACvG,MAAM,SAAS,GAAmD,WAAW,IAAI,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpH,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;YACrE,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,cAAc,GAChB,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAC3K,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,SAAS;YACb,CAAC;YACD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,IAAI,YAAY,KAAK,eAAe,CAAC,IAAI,EAAE,CAAC;gBACxC,SAAS;YACb,CAAC;YACD,IAAI,kBAAsC,CAAC;YAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzD,IAAI,IAAI,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;oBAC3C,SAAS;gBACb,CAAC;gBACD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxD,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzE,kBAAkB,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1G,CAAC;YACL,CAAC;iBAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC;gBAC3C,kBAAkB,GAAG,UAAU,CAAC;YACpC,CAAC;YACD,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACnC,OAAO;oBACH,GAAG,eAAe;oBAClB,IAAI;oBACJ,SAAS;oBACT,MAAM,EAAE,kBAAkB;iBAC7B,CAAC;YACN,CAAC;QACL,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,gCAAgC,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAClI,OAAO;gBACH,GAAG,eAAe;gBAClB,IAAI;gBACJ,SAAS;gBACT,MAAM,EAAE,IAAI;aACf,CAAC;QACN,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,iBAAiB,CACrB,KAA8B,EAC9B,aAA6B,EAC7B,IAA0D,EAC1D,uBAAgC;QAEhC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,OAAO,GAAG,wBAAwB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACnG,MAAM,iBAAiB,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;YACvG,MAAM,cAAc,GAAG,IAAI,CAAC,6BAA6B,CAAC,UAAW,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACzJ,OAAO,CAAC,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,gCAAgC,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7H,CAAC;IAEO,qBAAqB,CACzB,KAA8B,EAC9B,IAA4B,EAC5B,WAAyB,EACzB,MAAc,EACd,uBAAgC;QAEhC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACnG,MAAM,cAAc,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC5I,OAAO,CAAC,cAAc,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,MAAM,KAAK,IAAI,IAAI,gCAAgC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC;IAEO,sBAAsB,CAC1B,KAA8B,EAC9B,IAA4B,EAC5B,WAAyB,EACzB,MAAc,EACd,uBAAgC;QAEhC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;QACrD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvF,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO;YACtC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC;YACnI,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO,CAAC,cAAc,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAEO,6BAA6B,CACjC,IAA4B,EAC5B,OAAgC,EAChC,SAA6B,EAC7B,WAA0B,EAC1B,KAA+B;QAE/B,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,gBAAgB,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAC1H,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,SAAS;YACb,CAAC;YACD,MAAM,MAAM,GAAG,KAAK;gBAChB,CAAC,CAAC,+BAA+B,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC;gBAC5H,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;YACvC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;YAC3H,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,OAAO,eAAe,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjJ,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,sBAAsB,CAC1B,KAA8B,EAC9B,KAA2E,EAC3E,OAAoB;QAEpB,OAAO,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,IAAI,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5H,CAAC;IAEO,uBAAuB,CAAC,KAA8B,EAAE,SAAiB,EAAE,MAAc,EAAE,UAAuB,IAAI,GAAG,EAAE;QAC/H,MAAM,GAAG,GAAG,GAAG,SAAS,IAAI,MAAM,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,YAAY,GAAG,WAAW,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;QACpE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,YAAY,CAAC;QACxB,CAAC;QACD,IAAI,WAAW,CAAC,EAAE,KAAK,aAAa,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,CAAC;QACD,IAAI,WAAW,CAAC,EAAE,KAAK,cAAc,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,CAAC;QACD,IAAI,WAAW,CAAC,EAAE,KAAK,aAAa,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACzD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;YAC1C,OAAO,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChG,CAAC;QACD,IAAI,WAAW,CAAC,EAAE,KAAK,eAAe,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,CAAC;QACD,MAAM,OAAO,GAAG,wBAAwB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,aAAa,EAAE,QAAQ,CAAC;QAC3C,MAAM,SAAS,GACX,UAAU,KAAK,QAAQ;YACnB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU,KAAK,SAAS;gBACxB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,UAAU,KAAK,SAAS;oBACxB,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,UAAU,KAAK,SAAS;wBACxB,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,UAAU,KAAK,SAAS;4BACxB,CAAC,CAAC,QAAQ;4BACV,CAAC,CAAC,UAAU,CAAC;QAC7B,IAAI,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5F,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxC,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7G,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,CAAC;IAEO,sBAAsB,CAC1B,KAA8B,EAC9B,IAA4B,EAC5B,WAAyB,EACzB,MAAc,EACd,uBAAgC;QAEhC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvF,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAyB,EAAE;YAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;YAC3D,OAAO,QAAQ;gBACX,CAAC,CAAC,+BAA+B,CAC3B,IAAI,EACJ,WAAW,CAAC,OAAQ,EACpB,GAAG,EACH,QAAQ,EACR,KAAK,EACL,uBAAuB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EACjD,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAC1C;gBACH,CAAC,CAAC,SAAS,CAAC;QACpB,CAAC,CAAC;QACF,QAAQ,WAAW,CAAC,SAAS,EAAE,CAAC;YAC5B,KAAK,WAAW,CAAC,CAAC,CAAC;gBACf,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClG,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAChB,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,OAAO,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YACpI,CAAC;YACD,KAAK,cAAc;gBACf,OAAO,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChF,KAAK,aAAa;gBACd,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5E,KAAK,aAAa,CAAC;YACnB,KAAK,aAAa,CAAC;YACnB,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBACzB,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnD,OAAO,CACH,OAAO,OAAO,KAAK,QAAQ;oBAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CACnB,CAAC,OAAO,EAAE,EAAE,CACR,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;wBAClH,OAAO;6BACF,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;6BAChC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;6BACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,MAAM,CAC1C,CACJ,CAAC;YACN,CAAC;YACD;gBACI,OAAO,IAAI,CAAC;QACpB,CAAC;IACL,CAAC;IAEO,kBAAkB,CACtB,KAA8B,EAC9B,WAAiF,EACjF,KAAmC,EACnC,aAAwD,EACxD,WAAyB,EACzB,aAA6B,EAC7B,WAAgD;QAEhD,IAAI,QAAQ,GAA6C,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,aAAa,EAAE,4BAA4B,EAAE,CAAC;YACrE,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAClF,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,+BAA+B;oBACrC,UAAU,EAAE,aAAa,CAAC,UAAU;oBACpC,SAAS,EAAE,WAAW,CAAC,WAAW;oBAClC,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,SAAS;oBACnF,OAAO,EAAE,kFAAkF;iBAC9F,CAAC,CAAC;gBACH,OAAO,WAAW,CAAC;YACvB,CAAC;YACD,MAAM,gBAAgB,GAAG,UAAU,CAAC,WAAW,CAAkE,CAAC;YAClH,OAAO,gBAAgB,CAAC,KAAK,CAAC;YAC9B,gBAAgB,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC;YAC7C,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAChC,OAAO,gBAAgB,CAAC,MAAM,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACJ,gBAAgB,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YAChD,CAAC;YACD,IAAI,gBAAgB,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBACjG,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBAC5B,gBAAgB,CAAC,IAAI,GAAG,WAAW,CAAC;gBACxC,CAAC;YACL,CAAC;YACD,OAAO,gBAAgB,CAAC;QAC5B,CAAC;QACD,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,qBAAqB,GAAG,gBAAgB,EAAE,WAAW,CAAC;QAC5D,MAAM,OAAO,GAAG,eAAe,CAAE,KAAa,CAAC,aAAa,CAAC,CAAC;QAC9D,MAAM,eAAe,GAAG,2CAA2C,CAAE,KAAa,CAAC,aAAa,CAAC,CAAC;QAClG,MAAM,qBAAqB,GACvB,qBAAqB,IAAI,CAAC,CAAC,MAAM,IAAI,qBAAqB,CAAC;YACvD,CAAC,CAAC,gCAAgC,CAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,EAAE,YAAY,IAAI,qBAAqB,CAAC,KAAK,CAAC;YACpI,CAAC,CAAC,SAAS,CAAC;QACpB,MAAM,uBAAuB,GAAG,gBAAgB,EAAE,oBAAoB,IAAI,qBAAqB,CAAC;QAChG,IACI,CAAC,KAAK,CAAC,WAAW,EAAE;YACpB,uBAAuB;YACvB,CAAC,uBAAuB,CAAC,eAAe;YACxC,CAAC,eAAe,CAAC,eAAe;YAChC,eAAe,CAAC,uBAAuB,KAAK,uBAAuB,CAAC,uBAAuB;YAC3F,qBAAqB,EACvB,CAAC;YACC,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,gBAAgB,EAAE,YAAY,IAAI,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,YAAY,CAAC,IAAI,gBAAgB,CAAC,WAAW,EAAE,CAAC;YACjJ,OAAO,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,eAAe,GAAG,gBAAgB,EAAE,WAAW,IAAI,WAAW,CAAC;QACrE,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,IAAI,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/I,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,uBAAuB;gBAC7B,UAAU,EAAE,aAAa,CAAC,UAAU;gBACpC,SAAS,EAAE,WAAW,CAAC,WAAW;gBAClC,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,SAAS;gBACnF,OAAO,EAAE,kDAAkD;aAC9D,CAAC,CAAC;YACH,OAAO,WAAW,CAAC;QACvB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvH,IAAI,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,UAAU,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,uBAAuB;gBAC7B,UAAU,EAAE,aAAa,CAAC,UAAU;gBACpC,SAAS,EAAE,WAAW,CAAC,WAAW;gBAClC,IAAI,EAAE,WAAW,aAAa,CAAC,UAAU,UAAU,WAAW,CAAC,WAAW,SAAS;gBACnF,OAAO,EAAE,qEAAqE;aACjF,CAAC,CAAC;YACH,OAAO,WAAW,CAAC;QACvB,CAAC;QACD,IAAI,aAAa,EAAE,4BAA4B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACxG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;QAChD,CAAC;QACD,MAAM,YAAY,GAAG,UAAU,CAAC,eAAe,CAAkF,CAAC;QAClI,OAAO,YAAY,CAAC,IAAI,CAAC;QACzB,OAAO,YAAY,CAAC,MAAM,CAAC;QAC3B,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,YAAY,CAAC,KAAK,GAAG,OAA2D,CAAC;QACjF,OAAO,YAAY,CAAC;IACxB,CAAC;IAEO,0BAA0B,CAC9B,KAAmC,EACnC,WAAyB,EACzB,aAA6B,EAC7B,WAAgD;QAEhD,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC;QAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,YAAY,EAAE,WAAW,CAAC;QAC9C,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,YAAY,EAAE,KAAK,wBAAwB,IAAI,gBAAgB,EAAE,IAAI,KAAK,CAAC,CAAC,IAAI,gBAAgB,CAAC,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC;YACrK,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,8BAA8B;gBACpC,UAAU;gBACV,SAAS,EAAE,WAAW,CAAC,WAAW;gBAClC,OAAO,EAAE,WAAW,EAAE,QAAQ;gBAC9B,IAAI,EAAE,WAAW,UAAU,UAAU,WAAW,CAAC,WAAW,EAAE;gBAC9D,OAAO,EAAE,+DAA+D;aAC3E,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;QACrD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAE,MAAc,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE,CAAC;YAC1F,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,8BAA8B;gBACpC,UAAU;gBACV,SAAS,EAAE,WAAW,CAAC,WAAW;gBAClC,OAAO,EAAE,WAAW,CAAC,QAAQ;gBAC7B,IAAI,EAAE,WAAW,WAAW,CAAC,QAAQ,EAAE;gBACvC,OAAO,EAAE,iEAAiE,cAAc,IAAI;aAC/F,CAAC,CAAC;QACP,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,qBAAqB,CACzB,KAA8B,EAC9B,IAA4B,EAC5B,WAAyB,EACzB,UAAkB,EAClB,OAA2C,EAC3C,WAAgD;QAEhD,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAAU,CAAC;QACrD,MAAM,2BAA2B,GAAG,IAAI,GAAG,EAAU,CAAC;QACtD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YACrF,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;gBAC/B,SAAS;YACb,CAAC;YACD,MAAM,KAAK,GAAG,sBAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,2BAA2B,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC3E,IAAI,UAAU,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC1F,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;gBACjH,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YACjE,CAAC;QACL,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YACrF,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,kBAAkB,IAAI,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAClH,MAAM,iBAAiB,GAAG,CAAC,CAAC,QAAQ,CAAC,kBAAkB,IAAI,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YACxH,MAAM,UAAU,GAAG,2BAA2B,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC3E,MAAM,4BAA4B,GAC9B,YAAY;gBACZ,CAAC,iBAAiB;gBAClB,UAAU,KAAK,SAAS;gBACxB,UAAU,CAAC,YAAY,KAAK,SAAS;gBACrC,0BAA0B,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACjH,IAAI,OAAO,GAAG,4BAA4B,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,YAAY,IAAI,4BAA4B,CAAC,CAAC;YAC7H,IAAI,YAAY,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/E,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;YAChD,IAAI,QAAQ,CAAC,cAAc,IAAI,OAAO,KAAK,SAAS,IAAI,UAAU,EAAE,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC7F,SAAS;YACb,CAAC;YACD,IAAI,YAAY,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;gBACjH,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,+BAA+B;oBACrC,UAAU;oBACV,SAAS,EAAE,WAAW,CAAC,WAAW;oBAClC,IAAI,EAAE,WAAW,UAAU,UAAU,WAAW,CAAC,WAAW,kBAAkB,GAAG,EAAE;oBACnF,OAAO,EAAE,+BAA+B,QAAQ,CAAC,kBAAkB,yCAAyC,GAAG,IAAI;iBACtH,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBAC5C,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,+BAA+B;wBACrC,UAAU;wBACV,SAAS,EAAE,WAAW,CAAC,WAAW;wBAClC,IAAI,EAAE,WAAW,UAAU,UAAU,WAAW,CAAC,WAAW,kBAAkB,GAAG,EAAE;wBACnF,OAAO,EAAE,kBAAkB,GAAG,2DAA2D;qBAC5F,CAAC,CAAC;gBACP,CAAC;gBACD,SAAS;YACb,CAAC;YACD,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC9F,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,sBAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBAC5D,MAAM,gBAAgB,GAAG,4CAA4C,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBAChG,MAAM,aAAa,GAAG,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC7E,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,eAAe,EAAE,6BAA6B,EAAE,WAAW,CAAC,CAAC;gBAC9F,MAAM,sBAAsB,GAAG,UAAU,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;gBACtH,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;qBAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;oBACnB,EAAE;oBACF,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC,EAAE,aAAa;oBACtF,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;iBACvE,CAAC,CAAC;qBACF,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5D,MAAM,aAAa,GAAG,iCAAiC,CAAC,aAAa,CAAC,CAAC;gBACvE,MAAM,cAAc,GAAG,iCAAiC,CAAC,WAAW,CAAC,CAAC;gBACtE,MAAM,aAAa,GACf,sBAAsB,IAAI,gBAAgB;oBACtC,CAAC,CAAC,CAAC,gBAAgB,CAAC,eAAe,IAAI,CAAC,aAAa,CAAC,eAAe,IAAI,aAAa,CAAC,uBAAuB,KAAK,gBAAgB,CAAC,uBAAuB;oBAC3J,CAAC,CAAC,CAAC,aAAa,CAAC,eAAe,IAAI,CAAC,cAAc,CAAC,eAAe,IAAI,aAAa,CAAC,uBAAuB,KAAK,cAAc,CAAC,uBAAuB,CAAC;gBAChK,IAAI,CAAC,aAAa,EAAE,CAAC;oBACjB,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,+BAA+B;wBACrC,UAAU;wBACV,SAAS,EAAE,WAAW,CAAC,WAAW;wBAClC,IAAI,EAAE,WAAW,UAAU,UAAU,WAAW,CAAC,WAAW,kBAAkB,GAAG,EAAE;wBACnF,OAAO,EAAE,sEAAsE,OAAO,CAAC,CAAC,CAAC,GAAG;qBAC/F,CAAC,CAAC;oBACH,SAAS;gBACb,CAAC;YACL,CAAC;YACD,MAAM,iBAAiB,GACnB,UAAU;gBACV,eAAe,CAAC,sBAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC;gBAChH,CAAC,0BAA0B,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAClH,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,WAAW,KAAK,YAAY,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACxH,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC;gBACxF,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC3E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACzB,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,sBAAsB;wBAC5B,UAAU;wBACV,SAAS,EAAE,WAAW,CAAC,WAAW;wBAClC,IAAI,EAAE,WAAW,UAAU,UAAU,WAAW,CAAC,WAAW,kBAAkB,GAAG,EAAE;wBACnF,OAAO,EAAE,wBAAwB,OAAO,CAAC,CAAC,CAAC,oBAAoB;qBAClE,CAAC,CAAC;oBACH,SAAS;gBACb,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC1B,CAAC;YACD,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;gBAC/H,SAAS;YACb,CAAC;YACD,IAAI,CAAC,aAAa,KAAlB,IAAI,CAAC,aAAa,GAAK,EAAE,EAAC;YAC1B,MAAM,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChG,oBAAoB,CAAC,KAAK,GAAG,OAAgE,CAAC;YAC9F,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC;QACnE,CAAC;IACL,CAAC;IAEO,2BAA2B,CAC/B,KAA8B,EAC9B,IAA4B,EAC5B,WAAyB,EACzB,UAAkB,EAClB,OAA2C,EAC3C,WAAgD;QAEhD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YACrF,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC5B,SAAS;YACb,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC9B,SAAS;YACb,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,SAAS;YACb,CAAC;YACD,IAAI,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACrE,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,eAAe,EAAE,CAAC;gBAClB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,aAAa,GAAG,UAAU,IAAI,CAAC,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChG,MAAM,SAAS,GAAG,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpG,UAAU,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClC,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAChD,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,sBAAsB;wBAC5B,UAAU;wBACV,SAAS,EAAE,WAAW,CAAC,WAAW;wBAClC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;wBAC1B,IAAI,EAAE,WAAW,UAAU,UAAU,WAAW,CAAC,WAAW,WAAW,eAAe,CAAC,CAAC,CAAC,EAAE;wBAC3F,OAAO,EAAE,mCAAmC,eAAe,CAAC,CAAC,CAAC,6CAA6C;qBAC9G,CAAC,CAAC;oBACH,SAAS;gBACb,CAAC;YACL,CAAC;YACD,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChD,SAAS;YACb,CAAC;YACD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,qBAAqB,GAAG,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,yBAAyB,CAAC;YACrG,IACI,qBAAqB;gBACrB,CAAC,IAAI,CAAC,uCAAuC,CACzC,OAAO,EACP,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,CAAC,WAAW,EACvB,WAAW,UAAU,UAAU,WAAW,CAAC,WAAW,kBAAkB,GAAG,EAAE,CAChF,EACH,CAAC;gBACC,SAAS;YACb,CAAC;YACD,IAAI,gBAAgB,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,MAAM,IAAI,GAAG,WAAW,UAAU,UAAU,WAAW,CAAC,WAAW,WAAW,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpG,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;oBAC9B,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,sBAAsB;wBAC5B,UAAU;wBACV,SAAS,EAAE,WAAW,CAAC,WAAW;wBAClC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;wBAC3B,IAAI;wBACJ,OAAO,EAAE,iCAAiC,gBAAgB,CAAC,CAAC,CAAC,gDAAgD,UAAU,SAAS;qBACnI,CAAC,CAAC;oBACH,SAAS;gBACb,CAAC;gBACD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtC,MAAM,QAAQ,GACV,OAAO,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;oBAC5D,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,UAA4C,EAAE,WAAW,EAAE,OAAO,CAAC;oBAChG,CAAC,CAAC,SAAS,CAAC;gBACpB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACzB,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,sBAAsB;wBAC5B,UAAU;wBACV,SAAS,EAAE,WAAW,CAAC,WAAW;wBAClC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;wBAC3B,IAAI;wBACJ,OAAO,EAAE,mBAAmB,gBAAgB,CAAC,CAAC,CAAC,qCAAqC,UAAU,WAAW;qBAC5G,CAAC,CAAC;oBACH,SAAS;gBACb,CAAC;gBACD,MAAM,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;iBAAM,IAAI,eAAe,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAA4C,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBAChH,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACzB,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,sBAAsB;wBAC5B,UAAU;wBACV,SAAS,EAAE,WAAW,CAAC,WAAW;wBAClC,IAAI,EAAE,WAAW,UAAU,UAAU,WAAW,CAAC,WAAW,kBAAkB,GAAG,EAAE;wBACnF,OAAO,EAAE,UAAU,UAAU,UAAU,WAAW,2CAA2C;qBAChG,CAAC,CAAC;gBACP,CAAC;qBAAM,CAAC;oBACJ,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC/B,IAAI,CAAC,aAAc,CAAC,GAAG,CAAC,CAAC,KAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC5D,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,KAA8B,EAAE,SAAoB,EAAE,WAAgD,EAAE,UAAkB;QAC/I,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,gBAAgE,CAAC;QACxG,IAAI,UAAU,EAAE,gCAAgC,EAAE,CAAC;YAC/C,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,uBAAuB;gBAC7B,UAAU;gBACV,IAAI,EAAE,WAAW,UAAU,YAAY;gBACvC,OAAO,EAAE,uHAAuH;aACnI,CAAC,CAAC;QACP,CAAC;QACD,MAAM,cAAc,GAAG,UAAU,EAAE,sBAAsB,CAAC;QAC1D,MAAM,aAAa,GAAG,UAAU,EAAE,qBAAqB,CAAC;QACxD,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE,CAAC;YACpC,OAAO;QACX,CAAC;QACD,KAAK,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,0BAA0B,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,uBAAuB;oBAC7B,UAAU;oBACV,IAAI,EAAE,WAAW,UAAU,cAAc,KAAK,OAAO;oBACrD,OAAO,EAAE,2BAA2B,aAAa,+CAA+C;iBACnG,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YACD,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,KAAK,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAU,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,uBAAuB;oBAC7B,UAAU;oBACV,IAAI,EAAE,WAAW,UAAU,cAAc,KAAK,EAAE;oBAChD,OAAO,EAAE,2BAA2B,KAAK,yCAAyC;iBACrF,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YACD,MAAM,UAAU,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;YAC1D,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC5B,SAAS;YACb,CAAC;YACD,QAAQ,CAAC,KAAK,GAAG,UAA8D,CAAC;QACpF,CAAC;IACL,CAAC;IAEO,gBAAgB,CACpB,KAAgB,EAChB,SAAiB,EACjB,OAA2C,EAC3C,WAAgD,EAChD,UAAkB,EAClB,SAAkB,EAClB,aAA6B;QAE7B,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACtB,OAAO,KAAyD,CAAC;QACrE,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,gBAAgB,GAAG,aAAa,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,gBAAgB,IAAI,4BAA4B,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACzE,OAAO,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBAClH,CAAC;gBACD,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9C,MAAM,gBAAgB,GAAG,aAAa,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,gBAAgB,IAAI,4BAA4B,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;oBACjG,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,gBAAkD,EAAE,KAAK,CAAC,CAAC;oBAC9F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACtB,OAAO,IAAI,gBAAgB,IAAI,KAAK,EAAE,CAAC;oBAC3C,CAAC;gBACL,CAAC;gBACD,MAAM,UAAU,GAAmC;oBAC/C,CAAC,YAAY,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAuB,CAAC,CAAC;oBAClE,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,KAAe,CAAC,CAAC;oBACpD,CAAC,WAAW,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAiB,CAAC,CAAC;oBAC1D,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAa,CAAC,CAAC;iBACjD,CAAC;gBACF,MAAM,OAAO,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CACvJ,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CACrC,CAAC;gBACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChD,CAAC;gBACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC;YACD,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,sBAAsB;gBAC5B,UAAU;gBACV,SAAS;gBACT,IAAI,EAAE,WAAW,UAAU,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,EAAE;gBACpF,OAAO,EAAE,0EAA0E;aACtF,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACd,CAAC,CAAqD,CAAC;IAC3D,CAAC;IAEO,wBAAwB,CAAC,KAA+B,EAAE,UAAkB,EAAE,WAAgD;QAClI,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE;YAC/C,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC/E,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,+BAA+B;oBACrC,UAAU;oBACV,IAAI,EAAE,WAAW,UAAU,QAAQ;oBACnC,OAAO,EAAE,cAAc,MAAM,OAAO,MAAM,gDAAgD;iBAC7F,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpB,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,eAAe,CAAC,WAAW,EAAE;oBACzB,IAAI,EAAE,kBAAkB;oBACxB,UAAU;oBACV,SAAS,EAAE,MAAM;oBACjB,IAAI,EAAE,WAAW,UAAU,UAAU,MAAM,EAAE;oBAC7C,OAAO,EAAE,mDAAmD;iBAC/D,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/B,OAAO;YACX,CAAC;YACD,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,CAAC,CAAC;QACF,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;YACnD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC5D,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAChC,CAAC;YACL,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1D,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,IAAI,oBAAoB,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnB,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;YACL,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAChC,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,kBAAkB;gBACxB,UAAU;gBACV,IAAI,EAAE,WAAW,UAAU,QAAQ;gBACnC,OAAO,EAAE,2GAA2G;aACvH,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBACnD,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;oBAClB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;gBACxC,CAAC;YACL,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC;YACtC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACpD,CAAC;IAEO,qBAAqB,CACzB,KAA8B,EAC9B,OAA2C,EAC3C,WAAgD,EAChD,UAAkB,EAClB,aAAgC;QAEhC,KAAK,IAAI,aAAa,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC;YAC1F,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAU,CAAC,aAAa,CAAC,CAAC;YACjD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACtE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC9G,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvC,MAAM,kBAAkB,GAAG,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBACtF,MAAM,aAAa,GACf,kBAAkB,KAAK,IAAI;oBACvB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,kBAAkB;wBAClB,CAAC,CAAC,IAAI,kBAAkB,IAAI;wBAC5B,CAAC,CAAC,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,WAAW;4BAChE,CAAC,CAAC,OAAO,WAAW,KAAK,QAAQ;gCAC7B,CAAC,CAAC,WAAW;gCACb,CAAC,CAAC,SAAS;4BACf,CAAC,CAAC,SAAS,CAAC;gBACxB,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;YAC9H,CAAC;QACL,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACrC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBACpD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;gBAC9F,CAAC;YACL,CAAC;QACL,CAAC;QACD,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;YAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,KAAM,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;YAC9D,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,wBAAwB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvF,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBACtF,MAAM,iBAAiB,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;oBACrF,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;wBAC7B,eAAe,CAAC,WAAW,EAAE;4BACzB,IAAI,EAAE,sBAAsB;4BAC5B,UAAU;4BACV,SAAS,EAAE,eAAe;4BAC1B,MAAM;4BACN,IAAI,EAAE,WAAW,UAAU,UAAU,eAAe,WAAW,MAAM,EAAE;4BACvE,OAAO,EAAE,oDAAoD,MAAM,kCAAkC;yBACxG,CAAC,CAAC;wBACH,SAAS;oBACb,CAAC;oBACD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;oBAClH,MAAM,eAAe,GAAG,WAAW,IAAI,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACrG,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxC,MAAM,aAAa,GAAG,iBAAiB;wBACnC,CAAC,CAAC,IAAI,iBAAiB,IAAI;wBAC3B,CAAC,CAAC,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,KAAK,eAAe;4BAC5E,CAAC,CAAC,OAAO,eAAe,KAAK,QAAQ;gCACjC,CAAC,CAAC,eAAe;gCACjB,CAAC,CAAC,SAAS;4BACf,CAAC,CAAC,SAAS,CAAC;oBAClB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;gBAC9H,CAAC;YACL,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;gBACzE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;oBAC5B,SAAS;gBACb,CAAC;gBACD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;gBAChD,IAAI,aAAa,EAAE,KAAK,EAAE,CAAC;oBACvB,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACpD,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CACrH,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEO,+BAA+B,CAAC,KAA8B,EAAE,aAAqB;QACzF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;YAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,KAAM,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3D,IAAI,WAAW,EAAE,EAAE,KAAK,cAAc,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;gBAC7H,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACnC,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,wBAAwB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvF,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrD,SAAS;gBACb,CAAC;gBACD,MAAM,UAAU,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC9E,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;oBACtB,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,IAAI,UAAU,EAAE,CAAC;oBACb,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChC,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAChH,CAAC;IAEO,8BAA8B,CAAC,IAA4B,EAAE,OAA4C,EAAE,MAAc;QAC7H,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC5B,SAAS;YACb,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC9B,SAAS;YACb,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC;YACpF,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;gBACrD,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACjE,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxF,MAAM,eAAe,GAAG,WAAW,IAAI,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrG,MAAM,UAAU,GAAG,CAAC,iBAAiB,IAAI,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;qBAC3I,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;qBACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACzB,IAAI,4BAA4B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/C,OAAO,UAAU,CAAC;gBACtB,CAAC;gBACD,IAAI,iBAAiB,EAAE,CAAC;oBACpB,OAAO,IAAI,CAAC;gBAChB,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,qBAAqB,CAAC,UAA0C,EAAE,WAAmB,EAAE,OAA2C;QACtI,MAAM,OAAO,GAAG,IAAI,GAAG,CACnB,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC;aAC9C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;aAC1E,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAC/D,CAAC;QACF,OAAO,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,CAAC;IAEO,qBAAqB,CAAC,UAA0C,EAAE,WAAmB;QACzF,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5C,QAAQ,UAAU,EAAE,CAAC;YACjB,KAAK,OAAO;gBACR,OAAO,UAAU,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,qBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjI,KAAK,YAAY;gBACb,OAAO,UAAU,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,sBAAuB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7I,KAAK,SAAS;gBACV,OAAO,UAAU,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,cAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvH,KAAK,WAAW;gBACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACvI,KAAK,QAAQ;gBACT,OAAO,KAAK,CAAC,IAAI,CACb,IAAI,GAAG,CAAC;oBACJ,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClJ,EAAE,CAAC;oBACP,GAAG,CAAC,UAAU,EAAE,KAAK;wBACjB,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;yBAC5C,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAChJ,CAAC,CACL,CAAC;YACN,KAAK,UAAU;gBACX,OAAO,UAAU,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAChF,KAAK,QAAQ;gBACT,OAAO,KAAK,CAAC,IAAI,CACb,IAAI,GAAG,CACH,UAAU,EAAE,QAAQ;oBAChB,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,sBAAsB,IAAI,EAAE,CAAC;qBAC3D,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,WAAW,CAAC;qBACrD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CACpD,CACJ,CAAC;YACN,KAAK,UAAU;gBACX,OAAO,KAAK,CAAC,IAAI,CACb,IAAI,GAAG,CACH,UAAU,EAAE,QAAQ;oBAChB,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,sBAAsB,IAAI,EAAE,CAAC;qBAC3D,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,KAAK,WAAW,CAAC;qBACvD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CACpD,CACJ,CAAC;YACN,KAAK,OAAO;gBACR,OAAO,UAAU,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClI,KAAK,QAAQ;gBACT,OAAO,WAAW,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzH,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,UAA0C,EAAE,MAAc;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IAEO,uBAAuB,CAAC,UAA0C,EAAE,MAAc,EAAE,OAA2C;QACnI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QACD,QAAQ,UAAU,EAAE,CAAC;YACjB,KAAK,OAAO;gBACR,OAAO,OAAO,CAAC,YAAY,CAAC,MAAc,CAAC,CAAC;YAChD,KAAK,YAAY;gBACb,OAAO,OAAO,CAAC,iBAAiB,CAAC,MAAwB,CAAC,CAAC;YAC/D,KAAK,SAAS;gBACV,OAAO,OAAO,CAAC,cAAc,CAAC,MAAgB,CAAC,CAAC;YACpD,KAAK,WAAW;gBACZ,OAAO,OAAO,CAAC,gBAAgB,CAAC,MAAkB,CAAC,CAAC;YACxD;gBACI,OAAO,SAAS,CAAC;QACzB,CAAC;IACL,CAAC;IAEO,2BAA2B,CAC/B,SAAiB,EACjB,gBAAwB,EACxB,OAA2C,EAC3C,WAAgD,EAChD,UAAkB,EAClB,SAAkB;QAElB,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;YACjH,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAkD,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACvH,MAAM,aAAa,GAAG,IAAI,GAAG,CACzB,OAAO;aACF,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,gBAAkD,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;aAClH,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAC/D,CAAC;QACF,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/F,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,sBAAsB;gBAC5B,UAAU;gBACV,SAAS;gBACT,IAAI,EAAE,WAAW,UAAU,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,EAAE;gBACpF,OAAO,EAAE,cAAc,SAAS,wCAAwC,gBAAgB,cAAc;aACzG,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,gBAAgB,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAClE,CAAC;IAEO,eAAe,CACnB,SAAiB,EACjB,OAA2C,EAC3C,WAAgD,EAChD,UAAkB,EAClB,SAAkB;QAElB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,uCAAuC,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,uCAAuC,CAAC,EAAE,CAAC;YAC/I,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,mBAAmB,GAAG,qDAAqD,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClG,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,CAAC,CAAC,KAAK,mBAAmB,EAAE,CAAC;YACxE,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,sBAAsB;gBAC5B,UAAU;gBACV,SAAS;gBACT,IAAI,EAAE,WAAW,UAAU,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,EAAE;gBACpF,OAAO,EAAE,sBAAsB,SAAS,gBAAgB,mBAAmB,CAAC,CAAC,CAAC,kDAAkD;aACnI,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;YACzG,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAA4C,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACnH,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,eAAe,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,sBAAsB;gBAC5B,UAAU;gBACV,SAAS;gBACT,IAAI,EAAE,WAAW,UAAU,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,EAAE;gBACpF,OAAO,EAAE,cAAc,SAAS,oCAAoC,UAAU,oCAAoC;aACrH,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,UAAU,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAC5D,CAAC;IAEO,uCAAuC,CAC3C,SAAiB,EACjB,kBAA0B,EAC1B,WAAgD,EAChD,UAAkB,EAClB,SAAkB,EAClB,IAAI,GAAG,WAAW,UAAU,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,EAAE;QAErF,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,mBAAmB,CAAC,CAAC;QACvH,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,kCAAkC,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC;YACrG,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,eAAe,CAAC,WAAW,EAAE;YACzB,IAAI,EAAE,sBAAsB;YAC5B,UAAU;YACV,SAAS;YACT,IAAI;YACJ,OAAO,EAAE,cAAc,SAAS,qCAAqC,gBAAgB,CAAC,IAAI,CACtF,IAAI,CACP,0EAA0E;SAC9E,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,4BAA4B;QAChC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,MAAM,yBAAyB,GAAG,CAAC,KAAc,EAAQ,EAAE;YACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO;YACX,CAAC;YACD,KAAK,MAAM,aAAa,IAAI,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,IAAI,aAAa,KAAK,mBAAmB,EAAE,CAAC;oBACxC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAClC,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QACF,MAAM,yBAAyB,GAAG,CAAC,KAAc,EAAQ,EAAE;YACvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;gBACzC,OAAO;YACX,CAAC;YACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9C,OAAO;YACX,CAAC;YACD,MAAM,MAAM,GAAG,KAAgC,CAAC;YAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACnB,SAAS;gBACb,CAAC;gBACD,IAAI,GAAG,KAAK,YAAY,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/F,KAAK,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;wBAC/F,IAAI,aAAa,KAAK,mBAAmB,EAAE,CAAC;4BACxC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;wBAClC,CAAC;wBACD,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;oBAChD,CAAC;oBACD,SAAS;gBACb,CAAC;gBACD,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;oBACvB,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACrC,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QACF,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,yBAAyB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3C,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;gBACrD,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;oBAC9D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;gBACvD,CAAC;YACL,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;oBACpD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;wBACjG,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;oBACpD,CAAC;gBACL,CAAC;YACL,CAAC;YACD,KAAK,MAAM,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;gBAC3D,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;oBACxB,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC1C,CAAC;YACL,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;oBACnD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;wBACvH,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;oBACpD,CAAC;gBACL,CAAC;gBACD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACrE,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,wBAAwB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvF,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;oBACzE,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;wBAC3B,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;oBACzE,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YACvD,KAAK,MAAM,aAAa,IAAI,wBAAwB,EAAE,CAAC;gBACnD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC;gBACnD,IAAI,SAAS,EAAE,CAAC;oBACZ,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBAC9B,yBAAyB,CAAC,SAAS,CAAC,CAAC;gBACzC,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAEO,6BAA6B,CAAC,OAA2C,EAAE,WAAgD;QAC/H,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC;YACpG,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAW,CAAC,KAAM,CAAC,WAAW,CAAC,CAAC;YACjE,KAAK,MAAM,aAAa,IAAI,wBAAwB,EAAE,CAAC;gBACnD,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC;gBACrD,IAAI,CAAC,KAAK,EAAE,CAAC;oBACT,SAAS;gBACb,CAAC;gBACD,MAAM,WAAW,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1H,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBAC5B,eAAe,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,sBAAsB;wBAC5B,IAAI,EAAE,UAAU,WAAW,eAAe,aAAa,EAAE;wBACzD,OAAO,EAAE,wBAAwB,aAAa,yCAAyC;qBAC1F,CAAC,CAAC;oBACH,SAAS;gBACb,CAAC;gBACD,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5E,CAAC;QACL,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,WAAgD;QACrE,OAAO,WAAW;aACb,KAAK,EAAE;aACP,IAAI,CACD,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACZ,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;YAClD,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAC1C,CAAC;IACV,CAAC;CACJ;AAED;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,UAAgC,EAAE,UAA0C,EAAE;IAC3H,OAAO,IAAI,0BAA0B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport {\n type IKHRInteractivity,\n type IKHRInteractivity_Configuration,\n type IKHRInteractivity_Graph,\n type IKHRInteractivity_Node,\n type IKHRInteractivity_OutputSocketReference,\n type IKHRInteractivity_Variable,\n} from \"babylonjs-gltf2interface\";\nimport { type AnimationGroup } from \"core/Animations/animationGroup\";\nimport { type FlowGraph } from \"core/FlowGraph/flowGraph\";\nimport { type FlowGraphBlock } from \"core/FlowGraph/flowGraphBlock\";\nimport { type FlowGraphDataConnection } from \"core/FlowGraph/flowGraphDataConnection.pure\";\nimport { FlowGraphExecutionBlock } from \"core/FlowGraph/flowGraphExecutionBlock\";\nimport { type FlowGraphSignalConnection } from \"core/FlowGraph/flowGraphSignalConnection.pure\";\nimport { FlowGraphTypes } from \"core/FlowGraph/flowGraphRichTypes.pure\";\nimport { type Material } from \"core/Materials/material\";\nimport { type Node } from \"core/node\";\nimport { type Camera } from \"core/Cameras/camera\";\nimport { Matrix } from \"core/Maths/math.vector.pure\";\nimport { type IGLTF } from \"../../glTFLoaderInterfaces\";\nimport {\n GetInteractivityOperationRegistry,\n getMappingForDeclaration,\n HasDefaultInteractivityFlowInput,\n NormalizeInteractivityEventDataConfiguration,\n ParseDebugLogTemplate,\n type IGLTFToFlowGraphMapping,\n type IGLTFToFlowGraphMappingObject,\n} from \"./declarationMapper\";\nimport {\n _CreateKHRInteractivityRuntimeValueSnapshot,\n _NormalizeKHRInteractivityRuntimeValue,\n CloneKHRInteractivityGraph,\n CreateKHRInteractivityGraphModel,\n gltfTypeToBabylonType,\n type IKHRInteractivityBlockProvenance,\n type IKHRInteractivityConfigurationProvenance,\n type IKHRInteractivityDocument,\n type IKHRInteractivityGraphProvenance,\n type IKHRInteractivitySocketProvenance,\n} from \"./interactivityGraphModel\";\n\n/**\n * Export support classification for a FlowGraph block or imported composite.\n */\nexport type KHRInteractivityExportClassification = \"exact\" | \"inverse-composite\" | \"unsupported\" | \"lossy\";\n\n/**\n * Structured KHR_interactivity export diagnostic.\n */\nexport interface IKHRInteractivityExportDiagnostic {\n /** Stable diagnostic code. */\n code:\n | \"GRAPH_SOURCE_MISSING\"\n | \"GRAPH_COUNT_MISMATCH\"\n | \"NODE_SOURCE_MISSING\"\n | \"BLOCK_PROVENANCE_INVALID\"\n | \"BLOCK_ROLE_MISSING\"\n | \"BLOCK_ROLE_DUPLICATE\"\n | \"BLOCK_TYPE_MISMATCH\"\n | \"BLOCK_UNSUPPORTED\"\n | \"BLOCK_AMBIGUOUS\"\n | \"COMPOSITE_CONNECTION_CHANGED\"\n | \"SOCKET_PROVENANCE_MISSING\"\n | \"SOCKET_CONNECTION_AMBIGUOUS\"\n | \"SOCKET_TARGET_UNREPRESENTABLE\"\n | \"INPUT_DEFAULT_UNREPRESENTABLE\"\n | \"VALUE_UNREPRESENTABLE\"\n | \"CONFIGURATION_UNREPRESENTABLE\"\n | \"REFERENCE_UNRESOLVED\"\n | \"DEPENDENCY_CYCLE\"\n | \"GRAPH_INVALID\";\n /** JSON pointer or FlowGraph location associated with the issue. */\n path: string;\n /** Human-readable actionable diagnostic. */\n message: string;\n /** Diagnostic severity. */\n severity: \"error\" | \"warning\";\n /** Source graph index, when known. */\n graphIndex?: number;\n /** Source node index, when known. */\n nodeIndex?: number;\n /** FlowGraph block id, when known. */\n blockId?: string;\n /** KHR socket id, when known. */\n socket?: string;\n}\n\n/**\n * Representability result for one logical KHR node or standalone FlowGraph block.\n */\nexport interface IKHRInteractivityNodeExportAnalysis {\n /** Source graph index. */\n graphIndex: number;\n /** Source KHR node index, when this is an imported node. */\n nodeIndex?: number;\n /** Full KHR operation name, when known. */\n operation?: string;\n /** FlowGraph blocks participating in this logical node. */\n blockIds: string[];\n /** Export support classification. */\n classification: KHRInteractivityExportClassification;\n /** Diagnostics scoped to this logical node. */\n diagnostics: IKHRInteractivityExportDiagnostic[];\n}\n\n/**\n * Complete representability analysis for a KHR_interactivity export.\n */\nexport interface IKHRInteractivityExportAnalysis {\n /** True when every graph can be exported without loss or ambiguity. */\n representable: boolean;\n /** Per-node classifications in deterministic graph/source order. */\n nodes: IKHRInteractivityNodeExportAnalysis[];\n /** All diagnostics in deterministic order. */\n diagnostics: IKHRInteractivityExportDiagnostic[];\n}\n\n/**\n * Indexed glTF root collections that KHR_interactivity references can target.\n */\nexport type KhrInteractivityRootCollection = \"nodes\" | \"animations\" | \"cameras\" | \"materials\" | \"meshes\" | \"textures\" | \"images\" | \"samplers\" | \"skins\" | \"scenes\";\n\n/**\n * Final glTF remapping context supplied by the serializer extension.\n */\nexport interface IKHRInteractivitySerializerContext {\n /**\n * Gets the final number of glTF nodes.\n * @returns final glTF node count\n */\n getNodeCount(): number;\n /**\n * Gets the final glTF node index for a Babylon node.\n * @param node Babylon node to resolve\n * @returns final glTF node index, or undefined when the node was not exported\n */\n getNodeIndex(node: Node): number | undefined;\n /**\n * Gets the final glTF animation index for a Babylon animation group.\n * @param animation Babylon animation group to resolve\n * @returns final glTF animation index, or undefined when the animation was not exported\n */\n getAnimationIndex(animation: AnimationGroup): number | undefined;\n /**\n * Gets the final glTF camera index for a Babylon camera.\n * @param camera Babylon camera to resolve\n * @returns final glTF camera index, or undefined when the camera was not exported\n */\n getCameraIndex(camera: Camera): number | undefined;\n /**\n * Gets the final glTF material index for a Babylon material.\n * @param material Babylon material to resolve\n * @returns final glTF material index, or undefined when the material was not exported\n */\n getMaterialIndex(material: Material): number | undefined;\n /**\n * Gets the final glTF index for an imported Babylon entity in a root collection.\n * @param collection target glTF root collection\n * @param entity imported Babylon entity associated with the source entry\n * @returns final glTF index, or undefined when the entity was not exported uniquely\n */\n getRootIndex?(collection: KhrInteractivityRootCollection, entity: object): number | undefined;\n /**\n * Writes a companion extension on an already-exported glTF node.\n * @param nodeIndex final glTF node index\n * @param extensionName companion extension name\n * @param value companion extension payload\n */\n setNodeExtension(nodeIndex: number, extensionName: string, value: unknown): void;\n}\n\n/**\n * Provider consumed by the KHR_interactivity serializer extension.\n */\nexport interface IKHRInteractivityExportProvider {\n /** Whether KHR_interactivity must be listed in extensionsRequired. */\n readonly required: boolean;\n /** Other extensions referenced or emitted by the interactivity export. */\n readonly additionalExtensionsUsed: readonly string[];\n /** Other extensions that must be listed in extensionsRequired. */\n readonly additionalExtensionsRequired: readonly string[];\n /**\n * Gets the detached representability analysis.\n * @returns current export analysis\n */\n analyze(): IKHRInteractivityExportAnalysis;\n /**\n * Builds the canonical extension after glTF entity indices are finalized.\n * @param context final serializer remapping context\n * @returns ratified KHR_interactivity extension payload\n */\n build(context: IKHRInteractivitySerializerContext): IKHRInteractivity;\n}\n\n/**\n * Options used to create a KHR_interactivity export plan.\n */\nexport interface IKHRInteractivityExportOptions {\n /** Canonical Phase 1 document associated with the FlowGraphs. Required for a lossless export. */\n document?: IKHRInteractivityDocument;\n /** Loader glTF tree used to resolve original entity references. */\n sourceGLTF?: IGLTF;\n /** Root default graph index. Defaults to the canonical document selection or zero. */\n defaultGraphIndex?: number;\n /** Target animation frame rate used by imported animation composites. Defaults to 60. */\n targetFps?: number;\n /** Whether the emitted KHR_interactivity extension is required. Defaults to true. */\n required?: boolean;\n /** Additional extensions that must be required together with the behavior graph. */\n additionalExtensionsRequired?: readonly string[];\n}\n\n/**\n * Error thrown when export cannot preserve the authored behavior graph.\n */\nexport class KHRInteractivityExportError extends Error {\n /**\n * @param diagnostics precise export diagnostics\n */\n public constructor(public readonly diagnostics: readonly IKHRInteractivityExportDiagnostic[]) {\n super(diagnostics.map((diagnostic) => `${diagnostic.path}: ${diagnostic.message}`).join(\"\\n\"));\n this.name = \"KHRInteractivityExportError\";\n }\n}\n\ninterface ILogicalNode {\n sourceIndex: number;\n declarationIndex: number;\n operation: string;\n mapping?: IGLTFToFlowGraphMapping;\n blocks: readonly FlowGraphBlock[];\n classification: KHRInteractivityExportClassification;\n diagnostics: IKHRInteractivityExportDiagnostic[];\n}\n\ninterface IGraphAnalysis {\n graph: FlowGraph;\n graphIndex: number;\n source: IKHRInteractivity_Graph;\n nodes: ILogicalNode[];\n diagnostics: IKHRInteractivityExportDiagnostic[];\n}\n\ninterface IOrderedNodes {\n nodes: IKHRInteractivity_Node[];\n sourceIndices: number[];\n}\n\nconst _KnownIndexedRootCollections = new Set<string>([\"nodes\", \"animations\", \"cameras\", \"materials\", \"meshes\", \"textures\", \"images\", \"samplers\", \"skins\", \"scenes\"]);\nconst _UnsupportedBlockClassName = \"FlowGraphUnsupportedInteractivityBlock\";\nconst _CompanionNodeExtensions = [\"KHR_node_hoverability\", \"KHR_node_selectability\", \"KHR_node_visibility\"] as const;\n\nfunction _GetPointerExtensionNames(pointer: string): string[] {\n const segments = pointer.split(\"/\").map((segment) => segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const extensions: string[] = [];\n for (let index = 0; index < segments.length - 1; index++) {\n if (segments[index] === \"extensions\" && segments[index + 1]) {\n extensions.push(segments[index + 1]);\n }\n }\n return extensions;\n}\n\nfunction _CanPreserveNestedExtensionPointer(pointer: string, resolvedCollection?: string): boolean {\n const segments = pointer.split(\"/\").map((segment) => segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const extensionIndex = segments.indexOf(\"extensions\");\n return (\n extensionIndex > 1 &&\n (resolvedCollection ?? segments[1]) === \"nodes\" &&\n _CompanionNodeExtensions.includes(segments[extensionIndex + 1] as (typeof _CompanionNodeExtensions)[number])\n );\n}\nconst _FlowGraphTypeToKHRSignature: Readonly<Record<string, string>> = {\n [FlowGraphTypes.Number]: \"float\",\n [FlowGraphTypes.Boolean]: \"bool\",\n [FlowGraphTypes.Integer]: \"int\",\n [FlowGraphTypes.String]: \"ref\",\n [FlowGraphTypes.Vector2]: \"float2\",\n [FlowGraphTypes.Vector3]: \"float3\",\n [FlowGraphTypes.Vector4]: \"float4\",\n [FlowGraphTypes.Quaternion]: \"float4\",\n [FlowGraphTypes.Color3]: \"float3\",\n [FlowGraphTypes.Color4]: \"float4\",\n [FlowGraphTypes.Matrix2D]: \"float2x2\",\n [FlowGraphTypes.Matrix3D]: \"float3x3\",\n [FlowGraphTypes.Matrix]: \"float4x4\",\n Mesh: \"ref\",\n TransformNode: \"ref\",\n Camera: \"ref\",\n Light: \"ref\",\n Material: \"ref\",\n AnimationGroup: \"ref\",\n};\n\nfunction _CloneJson<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map((entry) => _CloneJson(entry)) as T;\n }\n if (value !== null && typeof value === \"object\") {\n const clone: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n Object.defineProperty(clone, key, {\n configurable: true,\n enumerable: true,\n value: _CloneJson(entry),\n writable: true,\n });\n }\n return clone as T;\n }\n return value;\n}\n\nfunction _GetBlockProvenance(block: FlowGraphBlock): IKHRInteractivityBlockProvenance | undefined {\n return block.metadata?.khrInteractivity as IKHRInteractivityBlockProvenance | undefined;\n}\n\nfunction _GetSocketProvenance(connection: FlowGraphDataConnection<any> | FlowGraphSignalConnection): IKHRInteractivitySocketProvenance | undefined {\n return connection.metadata?.khrInteractivity as IKHRInteractivitySocketProvenance | undefined;\n}\n\nfunction _GetOwn<T>(dictionary: Record<string, T> | undefined, key: string): T | undefined {\n return dictionary && Object.prototype.hasOwnProperty.call(dictionary, key) ? dictionary[key] : undefined;\n}\n\nfunction _FullOperationName(op: string, extension?: string): string {\n return extension ? `${op}:${extension}` : op;\n}\n\nfunction _RuntimeBlockClassName(className: string): string {\n return className.substring(className.lastIndexOf(\"/\") + 1);\n}\n\nfunction _GetRoleBlock(blocks: readonly FlowGraphBlock[], role: number): FlowGraphBlock | undefined {\n return blocks.find((block) => _GetBlockProvenance(block)?.role === role);\n}\n\nfunction _FindDataInput(blocks: readonly FlowGraphBlock[], nodeIndex: number, socket: string): FlowGraphDataConnection<any> | undefined {\n for (const block of blocks) {\n for (const input of block.dataInputs) {\n const provenance = _GetSocketProvenance(input);\n if (provenance?.nodeIndex === nodeIndex && provenance.kind === \"value\" && provenance.direction === \"input\" && provenance.socket === socket) {\n return input;\n }\n }\n }\n return undefined;\n}\n\nfunction _NormalizeValue(value: unknown): unknown[] | undefined {\n return _NormalizeKHRInteractivityRuntimeValue(value);\n}\n\nfunction _CreateTypedRuntimeValueSnapshot(\n graph: IKHRInteractivity_Graph,\n type: number | undefined,\n value: unknown\n): ReturnType<typeof _CreateKHRInteractivityRuntimeValueSnapshot> {\n const signature = type === undefined ? undefined : graph.types?.[type]?.signature;\n const components = Array.isArray(value) ? value : _NormalizeValue(value);\n return _CreateKHRInteractivityRuntimeValueSnapshot(signature === \"float4x4\" && components ? Matrix.FromArray(components as number[]) : components);\n}\n\nfunction _CreateEventSchemaRuntimeSnapshot(value: unknown): ReturnType<typeof _CreateKHRInteractivityRuntimeValueSnapshot> {\n const runtimeSchema = Array.isArray(value)\n ? value.map((entry) => {\n if (entry === null || typeof entry !== \"object\") {\n return entry;\n }\n const definition = entry as { type?: unknown; value?: unknown };\n const runtimeValue =\n definition.type === FlowGraphTypes.Matrix && Array.isArray(definition.value)\n ? Array.from(Matrix.FromArray(definition.value as number[]).asArray())\n : definition.value;\n return definition.value === undefined ? entry : { ...definition, value: runtimeValue };\n })\n : value;\n return _CreateKHRInteractivityRuntimeValueSnapshot(runtimeSchema);\n}\n\nfunction _ValuesEqual(left: readonly unknown[] | undefined, right: readonly unknown[] | undefined): boolean {\n if (!left || !right || left.length !== right.length) {\n return left === right;\n }\n for (let index = 0; index < left.length; index++) {\n if (typeof left[index] === \"number\" && typeof right[index] === \"number\" && Number.isNaN(left[index]) && Number.isNaN(right[index])) {\n continue;\n }\n if (left[index] !== right[index]) {\n return false;\n }\n }\n return true;\n}\n\nfunction _JsonEquivalent(left: unknown, right: unknown): boolean {\n if (typeof left === \"number\" && typeof right === \"number\" && Number.isNaN(left) && Number.isNaN(right)) {\n return true;\n }\n if (left === right) {\n return true;\n }\n if (Array.isArray(left) && Array.isArray(right)) {\n return left.length === right.length && left.every((entry, index) => _JsonEquivalent(entry, right[index]));\n }\n if (left !== null && right !== null && typeof left === \"object\" && typeof right === \"object\") {\n const leftEntries = Object.entries(left);\n const rightKeys = Object.keys(right);\n return (\n leftEntries.length === rightKeys.length &&\n leftEntries.every(([key, value]) => Object.prototype.hasOwnProperty.call(right, key) && _JsonEquivalent(value, (right as Record<string, unknown>)[key]))\n );\n }\n return false;\n}\n\nfunction _GetTypeDefault(signature: string): unknown[] {\n switch (signature) {\n case \"bool\":\n return [false];\n case \"int\":\n return [0];\n case \"ref\":\n return [\"\"];\n case \"float\":\n return [NaN];\n case \"float2\":\n return [NaN, NaN];\n case \"float3\":\n return [NaN, NaN, NaN];\n case \"float4\":\n case \"float2x2\":\n return [NaN, NaN, NaN, NaN];\n case \"float3x3\":\n return [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN];\n case \"float4x4\":\n return [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN];\n default:\n return [];\n }\n}\n\nfunction _GetOrAddInputTypeIndex(\n graph: IKHRInteractivity_Graph,\n input: FlowGraphDataConnection<any>,\n mapping: IGLTFToFlowGraphMappingObject | undefined,\n logicalNode: ILogicalNode,\n socket: string\n): number | undefined {\n if (logicalNode.operation === \"variable/set\" && /^(0|[1-9]\\d*)$/.test(socket)) {\n return graph.variables?.[parseInt(socket, 10)]?.type;\n }\n if (logicalNode.operation === \"event/send\") {\n const eventProperty = logicalNode.mapping?.configuration?.event;\n const eventIndex = eventProperty ? _GetMappedConfigurationValue(logicalNode, \"event\", eventProperty, graph)?.[0] : undefined;\n if (typeof eventIndex === \"number\") {\n return graph.events?.[eventIndex]?.values?.[socket]?.type;\n }\n }\n if (logicalNode.operation === \"pointer/get\" || logicalNode.operation === \"pointer/set\" || logicalNode.operation === \"pointer/interpolate\") {\n const pointerProperty = logicalNode.mapping?.configuration?.pointer;\n const pointer = pointerProperty ? _GetMappedConfigurationValue(logicalNode, \"pointer\", pointerProperty, graph)?.[0] : undefined;\n if (typeof pointer === \"string\") {\n const segment = pointer.split(\"/\").find((entry) => entry === `[${socket}]` || entry === `{${socket}}`);\n const semanticSignature = segment?.startsWith(\"[\") ? \"int\" : segment?.startsWith(\"{\") ? \"ref\" : undefined;\n if (semanticSignature) {\n const existing = graph.types?.findIndex((type) => type.signature === semanticSignature) ?? -1;\n if (existing >= 0) {\n return existing;\n }\n graph.types ??= [];\n graph.types.push({ signature: semanticSignature });\n return graph.types.length - 1;\n }\n }\n }\n const mappedType = mapping?.gltfType;\n const signature =\n mappedType === \"number\"\n ? \"float\"\n : mappedType === \"boolean\"\n ? \"bool\"\n : mappedType === \"vector2\"\n ? \"float2\"\n : mappedType === \"vector3\"\n ? \"float3\"\n : mappedType === \"vector4\"\n ? \"float4\"\n : mappedType && mappedType !== \"any\"\n ? mappedType\n : _FlowGraphTypeToKHRSignature[input.richType.typeName];\n if (!signature || !gltfTypeToBabylonType[signature]) {\n return undefined;\n }\n graph.types ??= [];\n const existing = graph.types.findIndex((type) => type.signature === signature);\n if (existing >= 0) {\n return existing;\n }\n graph.types.push({ signature: signature as NonNullable<IKHRInteractivity_Graph[\"types\"]>[number][\"signature\"] });\n return graph.types.length - 1;\n}\n\nfunction _GetOrAddVariableTypeIndex(graph: IKHRInteractivity_Graph, flowGraphType: string): number | undefined {\n const signature = _FlowGraphTypeToKHRSignature[flowGraphType];\n if (!signature || !gltfTypeToBabylonType[signature]) {\n return undefined;\n }\n graph.types ??= [];\n const existing = graph.types.findIndex((type) => type.signature === signature);\n if (existing >= 0) {\n return existing;\n }\n graph.types.push({ signature: signature as NonNullable<IKHRInteractivity_Graph[\"types\"]>[number][\"signature\"] });\n return graph.types.length - 1;\n}\n\nfunction _GetSourceValue(graph: IKHRInteractivity_Graph, value: IKHRInteractivity_Variable, mapping?: IGLTFToFlowGraphMappingObject, targetFps: number = 60): unknown[] {\n const signature = graph.types?.[value.type]?.signature ?? \"custom\";\n const source = value.value?.slice() ?? _GetTypeDefault(signature);\n if (mapping?.convertConnectedTimeToFrames && source.length === 1 && typeof source[0] === \"number\") {\n source[0] *= targetFps;\n }\n return source;\n}\n\nfunction _GetConfigurationBlock(logicalNode: ILogicalNode, property: IGLTFToFlowGraphMappingObject): FlowGraphBlock | undefined {\n const targetBlock = property.toBlock;\n if (targetBlock) {\n return logicalNode.blocks.find(\n (block) => block.getClassName() === _RuntimeBlockClassName(targetBlock) || _GetBlockProvenance(block)?.role === logicalNode.mapping?.blocks.indexOf(targetBlock)\n );\n }\n return _GetRoleBlock(logicalNode.blocks, 0);\n}\n\nfunction _GetMappedConfigurationValue(\n logicalNode: ILogicalNode,\n key: string,\n property: IGLTFToFlowGraphMappingObject,\n sourceGraph: IKHRInteractivity_Graph,\n preserveCanonicalWhenUnchanged: boolean = true\n): unknown[] | undefined {\n const block = _GetConfigurationBlock(logicalNode, property);\n if (!block) {\n return undefined;\n }\n const value = block.config?.[property.name];\n const provenance = _GetConfigurationProvenance(logicalNode, key, property);\n if (preserveCanonicalWhenUnchanged && provenance && _ValuesEqual(_NormalizeValue(value), _NormalizeValue(provenance.runtimeValue))) {\n return provenance.sourceValue ? _CloneJson(provenance.sourceValue) : undefined;\n }\n if (property.indexSource === \"variables\") {\n const names = (Array.isArray(value) ? value : [value]).filter((entry): entry is string => typeof entry === \"string\");\n const indices = names.map((name) => (/^staticVariable_(0|[1-9]\\d*)$/.test(name) ? parseInt(name.substring(\"staticVariable_\".length), 10) : -1));\n return indices.every((index) => index >= 0 && index < (sourceGraph.variables?.length ?? 0)) ? indices : undefined;\n }\n if (property.indexSource === \"events\") {\n const eventId = value;\n const eventIndex = sourceGraph.events?.findIndex((event) => event.id === eventId);\n return eventIndex !== undefined && eventIndex >= 0 ? [eventIndex] : undefined;\n }\n if (property.indexSource === \"assetNodes\" && typeof value === \"string\") {\n return undefined;\n }\n if (key === \"useSlerp\") {\n return [value === \"Quaternion\"];\n }\n return _NormalizeValue(value);\n}\n\nfunction _GetConfigurationProvenance(logicalNode: ILogicalNode, key: string, property: IGLTFToFlowGraphMappingObject): IKHRInteractivityConfigurationProvenance | undefined {\n const block = _GetConfigurationBlock(logicalNode, property);\n return block ? _GetOwn(_GetBlockProvenance(block)?.configuration, key) : undefined;\n}\n\nfunction _IsValidConfigurationValue(value: unknown[] | undefined, property: IGLTFToFlowGraphMappingObject, graph: IKHRInteractivity_Graph, assetNodeCount?: number): boolean {\n if (!value) {\n return false;\n }\n const isInt = (entry: unknown): entry is number => typeof entry === \"number\" && Number.isInteger(entry) && entry >= -2147483648 && entry <= 2147483647;\n let valid: boolean;\n switch (property.configurationType) {\n case \"bool\":\n valid = value.length === 1 && typeof value[0] === \"boolean\";\n break;\n case \"int\":\n valid = value.length === 1 && isInt(value[0]);\n break;\n case \"int[]\":\n valid = value.every(isInt);\n break;\n case \"string\":\n valid = value.length === 1 && typeof value[0] === \"string\";\n break;\n default:\n valid = value.length > 0;\n break;\n }\n if (!valid || (property.minItems !== undefined && value.length < property.minItems)) {\n return false;\n }\n if (property.minimum !== undefined && value.some((entry) => typeof entry !== \"number\" || entry < property.minimum!)) {\n return false;\n }\n if (property.maximum !== undefined && value.some((entry) => typeof entry !== \"number\" || entry > property.maximum!)) {\n return false;\n }\n if (property.indexSource) {\n const lengths: Record<NonNullable<IGLTFToFlowGraphMappingObject[\"indexSource\"]>, number> = {\n types: graph.types?.length ?? 0,\n variables: graph.variables?.length ?? 0,\n events: graph.events?.length ?? 0,\n nodes: graph.nodes?.length ?? 0,\n assetNodes: assetNodeCount ?? 0,\n };\n if (value.some((entry) => !isInt(entry) || entry < 0 || entry >= lengths[property.indexSource!])) {\n return false;\n }\n }\n if (property.allowedSignatures) {\n const typeIndex = value[0];\n const signature = typeof typeIndex === \"number\" ? graph.types?.[typeIndex]?.signature : undefined;\n if (!signature || !property.allowedSignatures.includes(signature)) {\n return false;\n }\n }\n if (property.allowedValues && value.some((entry) => !property.allowedValues!.includes(entry as boolean | number | string))) {\n return false;\n }\n if (property.debugLogTemplate && (typeof value[0] !== \"string\" || !ParseDebugLogTemplate(value[0]).valid)) {\n return false;\n }\n return true;\n}\n\nfunction _GetEffectiveConfigurationValue(\n node: IKHRInteractivity_Node,\n mapping: IGLTFToFlowGraphMapping,\n key: string,\n property: IGLTFToFlowGraphMappingObject,\n graph: IKHRInteractivity_Graph,\n logicalNode?: ILogicalNode,\n assetNodeCount?: number\n): unknown[] | undefined {\n const getCandidate = (candidateKey: string, candidateProperty: IGLTFToFlowGraphMappingObject): unknown[] | undefined =>\n logicalNode ? _GetMappedConfigurationValue(logicalNode, candidateKey, candidateProperty, graph) : node.configuration?.[candidateKey]?.value;\n if (property.configurationGroup) {\n for (const [candidateKey, candidateProperty] of Object.entries(mapping.configuration ?? {})) {\n if (\n candidateProperty.configurationGroup === property.configurationGroup &&\n !_IsValidConfigurationValue(getCandidate(candidateKey, candidateProperty), candidateProperty, graph, assetNodeCount)\n ) {\n return property.defaultValue === undefined ? undefined : _NormalizeValue(property.defaultValue);\n }\n }\n }\n const candidate = getCandidate(key, property);\n if (!_IsValidConfigurationValue(candidate, property, graph, assetNodeCount)) {\n return property.defaultValue === undefined ? undefined : _NormalizeValue(property.defaultValue);\n }\n return property.uniqueValues ? Array.from(new Set(candidate)) : candidate;\n}\n\nfunction _PushDiagnostic(\n diagnostics: IKHRInteractivityExportDiagnostic[],\n diagnostic: Omit<IKHRInteractivityExportDiagnostic, \"severity\"> & { severity?: IKHRInteractivityExportDiagnostic[\"severity\"] }\n): void {\n diagnostics.push({ severity: \"error\", ...diagnostic });\n}\n\nfunction _SetOwnProperty<T extends object, K extends PropertyKey>(target: T, key: K, value: unknown): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n });\n}\n\n/**\n * Detached representability and export plan for one or more FlowGraphs.\n */\nexport class KHRInteractivityExportPlan implements IKHRInteractivityExportProvider {\n private _analysis!: IKHRInteractivityExportAnalysis;\n private _graphAnalyses: IGraphAnalysis[] = [];\n private _additionalExtensionsUsed: string[] = [];\n private readonly _rootDiagnostics: IKHRInteractivityExportDiagnostic[] = [];\n private _isPreflight = false;\n\n /** Whether KHR_interactivity is required in the exported asset. */\n public readonly required: boolean;\n\n /** Additional operation/companion extensions referenced by the exported graphs. */\n public get additionalExtensionsUsed(): readonly string[] {\n return this._additionalExtensionsUsed;\n }\n\n /** Additional extensions explicitly required by the caller. */\n public readonly additionalExtensionsRequired: readonly string[];\n\n /**\n * @param _flowGraphs FlowGraphs to analyze without mutating them\n * @param _options canonical source and export settings\n */\n public constructor(\n private readonly _flowGraphs: readonly FlowGraph[],\n private readonly _options: IKHRInteractivityExportOptions = {}\n ) {\n this.required = _options.required ?? true;\n this.additionalExtensionsRequired = Array.from(new Set(_options.additionalExtensionsRequired ?? [])).sort();\n this._refreshAnalysis();\n }\n\n private _refreshAnalysis(): void {\n this._rootDiagnostics.length = 0;\n this._graphAnalyses = this._analyzeGraphs();\n this._additionalExtensionsUsed = Array.from(new Set([...this._collectAdditionalExtensions(), ...this.additionalExtensionsRequired])).sort();\n const unscopedBuildDiagnostics = this._mergeBuildDiagnostics(this._validateBuildWithSourceIndices());\n const nodes = this._graphAnalyses.flatMap((graph) =>\n graph.nodes.map((node): IKHRInteractivityNodeExportAnalysis => ({\n graphIndex: graph.graphIndex,\n nodeIndex: node.sourceIndex,\n operation: node.operation,\n blockIds: node.blocks.map((block) => block.uniqueId).sort(),\n classification: node.classification,\n diagnostics: node.diagnostics.slice(),\n }))\n );\n const diagnostics = this._sortDiagnostics(\n this._rootDiagnostics.concat(\n this._graphAnalyses.flatMap((graph) => graph.diagnostics.concat(graph.nodes.flatMap((node) => node.diagnostics))),\n unscopedBuildDiagnostics\n )\n );\n this._analysis = {\n representable: !diagnostics.some((diagnostic) => diagnostic.severity === \"error\"),\n nodes,\n diagnostics,\n };\n }\n\n private _mergeBuildDiagnostics(diagnostics: IKHRInteractivityExportDiagnostic[]): IKHRInteractivityExportDiagnostic[] {\n const unscoped: IKHRInteractivityExportDiagnostic[] = [];\n for (const diagnostic of diagnostics) {\n const pathNodeIndex = /\\/nodes\\/(\\d+)(?:\\/|$)/.exec(diagnostic.path)?.[1];\n const nodeIndex = diagnostic.nodeIndex ?? (pathNodeIndex === undefined ? undefined : parseInt(pathNodeIndex, 10));\n const graph = diagnostic.graphIndex === undefined ? undefined : this._graphAnalyses[diagnostic.graphIndex];\n const node = nodeIndex === undefined ? undefined : graph?.nodes.find((candidate) => candidate.sourceIndex === nodeIndex);\n if (!node) {\n unscoped.push(diagnostic);\n continue;\n }\n if (!node.diagnostics.some((existing) => existing.code === diagnostic.code && existing.path === diagnostic.path && existing.message === diagnostic.message)) {\n node.diagnostics.push({ ...diagnostic, nodeIndex });\n }\n if (diagnostic.severity === \"error\" && (node.classification === \"exact\" || node.classification === \"inverse-composite\")) {\n node.classification = \"lossy\";\n }\n }\n return unscoped;\n }\n\n /**\n * Gets the detached representability analysis.\n * @returns current analysis\n */\n public analyze(): IKHRInteractivityExportAnalysis {\n this._refreshAnalysis();\n return {\n representable: this._analysis.representable,\n nodes: this._analysis.nodes.map((node) => ({ ...node, blockIds: node.blockIds.slice(), diagnostics: node.diagnostics.slice() })),\n diagnostics: this._analysis.diagnostics.slice(),\n };\n }\n\n /**\n * Builds the extension after final glTF entity remapping is available.\n * @param context serializer remapping context\n * @returns canonical KHR_interactivity payload\n */\n public build(context: IKHRInteractivitySerializerContext): IKHRInteractivity {\n this._refreshAnalysis();\n if (!this._analysis.representable) {\n throw new KHRInteractivityExportError(this._analysis.diagnostics);\n }\n const diagnostics: IKHRInteractivityExportDiagnostic[] = [];\n const graphs = this._graphAnalyses.map((analysis) => this._buildGraph(analysis, context, diagnostics));\n this._writeCompanionNodeExtensions(context, diagnostics);\n if (diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) {\n throw new KHRInteractivityExportError(this._sortDiagnostics(diagnostics));\n }\n\n const source = this._options.document?.source ? _CloneJson(this._options.document.source) : ({ graphs: [] } as IKHRInteractivity);\n source.graphs = graphs;\n const defaultGraphIndex = this._options.defaultGraphIndex ?? this._options.document?.defaultGraphIndex ?? 0;\n if (defaultGraphIndex < 0 || defaultGraphIndex >= graphs.length) {\n _PushDiagnostic(diagnostics, {\n code: \"GRAPH_COUNT_MISMATCH\",\n path: \"/extensions/KHR_interactivity/graph\",\n message: `Default graph index ${defaultGraphIndex} is outside the exported graph range.`,\n });\n throw new KHRInteractivityExportError(diagnostics);\n }\n if (defaultGraphIndex !== 0 || source.graph !== undefined) {\n source.graph = defaultGraphIndex;\n }\n return source;\n }\n\n private _getSourceGraph(graph: FlowGraph, graphIndex: number): IKHRInteractivity_Graph | undefined {\n const documentGraph = this._options.document?.graphs[graphIndex]?.source;\n if (documentGraph) {\n return CloneKHRInteractivityGraph(documentGraph);\n }\n const provenance = graph.metadata?.khrInteractivity as IKHRInteractivityGraphProvenance | undefined;\n return provenance?.source ? CloneKHRInteractivityGraph(provenance.source) : undefined;\n }\n\n private _validateBuildWithSourceIndices(): IKHRInteractivityExportDiagnostic[] {\n const diagnostics: IKHRInteractivityExportDiagnostic[] = [];\n const sourceGLTF = this._options.sourceGLTF;\n const indexOrUndefined = (index: number | undefined): number | undefined => (index !== undefined && index >= 0 ? index : undefined);\n const context: IKHRInteractivitySerializerContext = {\n getNodeCount: () => sourceGLTF?.nodes?.length ?? 0,\n getNodeIndex: (node) => indexOrUndefined(sourceGLTF?.nodes?.findIndex((candidate) => candidate._babylonTransformNode === node)),\n getAnimationIndex: (animation) => indexOrUndefined(sourceGLTF?.animations?.findIndex((candidate) => candidate._babylonAnimationGroup === animation)),\n getCameraIndex: (camera) => indexOrUndefined(sourceGLTF?.cameras?.findIndex((candidate) => candidate._babylonCamera === camera)),\n getMaterialIndex: (material) =>\n indexOrUndefined(sourceGLTF?.materials?.findIndex((candidate) => Object.values(candidate._data ?? {}).some((entry) => entry.babylonMaterial === material))),\n getRootIndex: (collection, entity) => this._getSourceRootIndex(collection, entity),\n setNodeExtension: () => {},\n };\n this._isPreflight = true;\n try {\n for (const analysis of this._graphAnalyses) {\n this._buildGraph(analysis, context, diagnostics);\n }\n this._writeCompanionNodeExtensions(context, diagnostics);\n } finally {\n this._isPreflight = false;\n }\n return diagnostics;\n }\n\n private _analyzeGraphs(): IGraphAnalysis[] {\n const analyses: IGraphAnalysis[] = [];\n if (!this._options.document) {\n _PushDiagnostic(this._rootDiagnostics, {\n code: \"GRAPH_SOURCE_MISSING\",\n path: \"/extensions/KHR_interactivity\",\n message: \"A canonical KHR_interactivity document is required to preserve root metadata and the default graph selection.\",\n });\n }\n if (this._flowGraphs.length === 0) {\n _PushDiagnostic(this._rootDiagnostics, {\n code: \"GRAPH_COUNT_MISMATCH\",\n path: \"/extensions/KHR_interactivity/graphs\",\n message: \"At least one FlowGraph is required for KHR_interactivity export.\",\n });\n return analyses;\n }\n for (const diagnostic of this._options.document?.diagnostics ?? []) {\n _PushDiagnostic(this._rootDiagnostics, {\n code: \"GRAPH_INVALID\",\n path: diagnostic.path,\n message: diagnostic.message,\n severity: diagnostic.severity,\n });\n }\n if (this._options.document && this._options.document.graphs.length !== this._flowGraphs.length) {\n _PushDiagnostic(this._rootDiagnostics, {\n code: \"GRAPH_COUNT_MISMATCH\",\n path: \"/extensions/KHR_interactivity/graphs\",\n message: `Canonical source has ${this._options.document.graphs.length} graph(s), but ${this._flowGraphs.length} FlowGraph(s) were supplied.`,\n });\n return analyses;\n }\n for (let graphIndex = 0; graphIndex < this._flowGraphs.length; graphIndex++) {\n const graph = this._flowGraphs[graphIndex];\n const source = this._getSourceGraph(graph, graphIndex);\n const diagnostics: IKHRInteractivityExportDiagnostic[] = [];\n for (const diagnostic of this._options.document?.graphs[graphIndex]?.diagnostics ?? []) {\n _PushDiagnostic(diagnostics, {\n code: \"GRAPH_INVALID\",\n graphIndex,\n path: diagnostic.path,\n message: diagnostic.message,\n severity: diagnostic.severity,\n });\n }\n if (!source) {\n _PushDiagnostic(diagnostics, {\n code: \"GRAPH_SOURCE_MISSING\",\n graphIndex,\n path: `/graphs/${graphIndex}`,\n message: \"This FlowGraph has no canonical KHR_interactivity source. Only imported graphs and registered standalone inverse mappings can be exported.\",\n });\n const unsupportedNodes = graph.getAllBlocks().map((block): ILogicalNode => ({\n sourceIndex: -1,\n declarationIndex: -1,\n operation: \"\",\n blocks: [block],\n classification: this._classifyStandaloneBlock(block, diagnostics),\n diagnostics: diagnostics.filter((diagnostic) => diagnostic.blockId === block.uniqueId),\n }));\n analyses.push({ graph, graphIndex, source: {}, nodes: unsupportedNodes, diagnostics });\n continue;\n }\n analyses.push({\n graph,\n graphIndex,\n source,\n nodes: this._analyzeImportedNodes(graph, graphIndex, source, diagnostics),\n diagnostics,\n });\n }\n return analyses;\n }\n\n private _classifyStandaloneBlock(block: FlowGraphBlock, diagnostics: IKHRInteractivityExportDiagnostic[]): KHRInteractivityExportClassification {\n const candidates = GetInteractivityOperationRegistry().filter(\n (entry) => entry.mapping.blocks.length === 1 && _RuntimeBlockClassName(entry.mapping.blocks[0]) === block.getClassName()\n );\n const path = `/blocks/${block.uniqueId}`;\n if (candidates.length === 0) {\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_UNSUPPORTED\",\n path,\n blockId: block.uniqueId,\n message: `FlowGraph block \"${block.getClassName()}\" has no KHR_interactivity inverse mapping.`,\n });\n return \"unsupported\";\n }\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_AMBIGUOUS\",\n path,\n blockId: block.uniqueId,\n message:\n candidates.length === 1\n ? `FlowGraph block \"${block.getClassName()}\" is not associated with canonical KHR source provenance.`\n : `FlowGraph block \"${block.getClassName()}\" is ambiguous between ${candidates.map((entry) => _FullOperationName(entry.op, entry.extension)).join(\", \")}.`,\n });\n return \"lossy\";\n }\n\n private _analyzeImportedNodes(graph: FlowGraph, graphIndex: number, source: IKHRInteractivity_Graph, graphDiagnostics: IKHRInteractivityExportDiagnostic[]): ILogicalNode[] {\n const groups = new Map<number, FlowGraphBlock[]>();\n for (const block of graph.getAllBlocks()) {\n const provenance = _GetBlockProvenance(block);\n if (!provenance || provenance.graphIndex !== graphIndex || provenance.nodeIndex < 0) {\n const diagnostics: IKHRInteractivityExportDiagnostic[] = [];\n this._classifyStandaloneBlock(block, diagnostics);\n graphDiagnostics.push(...diagnostics);\n groups.set(Number.MIN_SAFE_INTEGER + groups.size, [block]);\n continue;\n }\n const group = groups.get(provenance.nodeIndex) ?? [];\n group.push(block);\n groups.set(provenance.nodeIndex, group);\n }\n\n const logicalNodes: ILogicalNode[] = [];\n for (let nodeIndex = 0; nodeIndex < (source.nodes?.length ?? 0); nodeIndex++) {\n const sourceNode = source.nodes![nodeIndex];\n const declaration = source.declarations?.[sourceNode.declaration];\n const declarationModel = this._options.document?.graphs[graphIndex]?.declarations[sourceNode.declaration];\n const operation = declaration ? _FullOperationName(declaration.op, declaration.extension) : \"\";\n const mapping = declaration && declarationModel?.support !== \"unsupported-extension\" ? getMappingForDeclaration(declaration, false) : undefined;\n const blocks = groups.get(nodeIndex) ?? [];\n const diagnostics: IKHRInteractivityExportDiagnostic[] = [];\n let classification: KHRInteractivityExportClassification = mapping && mapping.blocks.length > 1 ? \"inverse-composite\" : \"exact\";\n if (!declaration) {\n classification = \"unsupported\";\n _PushDiagnostic(diagnostics, {\n code: \"NODE_SOURCE_MISSING\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}/nodes/${nodeIndex}/declaration`,\n message: `Declaration index ${sourceNode.declaration} is unavailable.`,\n });\n } else if (declaration.extension === \"BABYLON\") {\n classification = \"unsupported\";\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_UNSUPPORTED\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}/nodes/${nodeIndex}`,\n message: `Compatibility-only operation \"${operation}\" is not part of ratified KHR_interactivity and cannot be exported as standards-compliant data.`,\n });\n } else if (!mapping && !declaration.extension) {\n classification = \"unsupported\";\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_UNSUPPORTED\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}/nodes/${nodeIndex}`,\n message: `Unknown core operation \"${declaration.op}\" cannot be exported.`,\n });\n } else if (!mapping && declaration.extension) {\n if (blocks.length !== 1 || blocks[0].getClassName() !== _UnsupportedBlockClassName) {\n classification = \"unsupported\";\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_TYPE_MISMATCH\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}/nodes/${nodeIndex}`,\n message: `Unsupported extension operation \"${operation}\" must remain an intact typed no-op block.`,\n });\n } else {\n this._validateUnsupportedExtensionBlock(source, sourceNode, nodeIndex, operation, declaration, blocks[0], graphIndex, diagnostics);\n if (diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) {\n classification = \"lossy\";\n }\n }\n } else {\n this._validateMappedBlocks(graphIndex, nodeIndex, operation, mapping!, blocks, diagnostics);\n if (diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) {\n classification = \"lossy\";\n }\n }\n if (blocks.length === 0) {\n classification = \"unsupported\";\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_ROLE_MISSING\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}/nodes/${nodeIndex}`,\n message: `The FlowGraph blocks for \"${operation}\" were removed.`,\n });\n }\n groups.delete(nodeIndex);\n logicalNodes.push({\n sourceIndex: nodeIndex,\n declarationIndex: sourceNode.declaration,\n operation,\n mapping,\n blocks,\n classification,\n diagnostics,\n });\n }\n\n for (const blocks of groups.values()) {\n const block = blocks[0];\n const diagnostics: IKHRInteractivityExportDiagnostic[] = [];\n const classification = this._classifyStandaloneBlock(block, diagnostics);\n graphDiagnostics.push(...diagnostics);\n logicalNodes.push({\n sourceIndex: -1,\n declarationIndex: -1,\n operation: \"\",\n blocks,\n classification,\n diagnostics,\n });\n }\n return logicalNodes;\n }\n\n private _validateUnsupportedExtensionBlock(\n graph: IKHRInteractivity_Graph,\n node: IKHRInteractivity_Node,\n nodeIndex: number,\n operation: string,\n declaration: NonNullable<IKHRInteractivity_Graph[\"declarations\"]>[number],\n block: FlowGraphBlock,\n graphIndex: number,\n diagnostics: IKHRInteractivityExportDiagnostic[]\n ): void {\n const config = block.config as {\n operation?: unknown;\n inputValueSockets?: unknown;\n outputValueSockets?: unknown;\n inputFlowSockets?: unknown;\n outputFlowSockets?: unknown;\n };\n const normalizeValueSockets = (sockets: unknown) =>\n Array.isArray(sockets)\n ? sockets\n .map((socket) =>\n socket !== null && typeof socket === \"object\"\n ? { name: (socket as { name?: unknown }).name, signature: (socket as { signature?: unknown }).signature }\n : socket\n )\n .sort((left, right) => String(JSON.stringify(left)).localeCompare(String(JSON.stringify(right))))\n : sockets;\n const normalizeFlowSockets = (sockets: unknown) => (Array.isArray(sockets) ? sockets.slice().sort() : sockets);\n const expectedValueSockets = (sockets: typeof declaration.inputValueSockets) =>\n Object.entries(sockets ?? {})\n .map(([name, socket]) => ({ name, signature: graph.types?.[socket.type]?.signature }))\n .sort((left, right) => left.name.localeCompare(right.name));\n const expectedInputFlows = Array.from(\n new Set(\n (graph.nodes ?? []).flatMap((sourceNode) =>\n Object.values(sourceNode.flows ?? {})\n .filter((flow) => flow.node === nodeIndex)\n .map((flow) => flow.socket ?? \"in\")\n )\n )\n ).sort();\n const expectedOutputFlows = Object.keys(node.flows ?? {}).sort();\n const actualConnectionNames = {\n inputValues: block.dataInputs.map((connection) => connection.name).sort(),\n outputValues: block.dataOutputs.map((connection) => connection.name).sort(),\n inputFlows: block instanceof FlowGraphExecutionBlock ? block.signalInputs.map((connection) => connection.name).sort() : [],\n outputFlows: block instanceof FlowGraphExecutionBlock ? block.signalOutputs.map((connection) => connection.name).sort() : [],\n };\n const expectedConnectionNames = {\n inputValues: Object.keys(declaration.inputValueSockets ?? {}).sort(),\n outputValues: Object.keys(declaration.outputValueSockets ?? {}).sort(),\n inputFlows: expectedInputFlows,\n outputFlows: expectedOutputFlows,\n };\n if (\n config.operation !== operation ||\n !_JsonEquivalent(normalizeValueSockets(config.inputValueSockets), expectedValueSockets(declaration.inputValueSockets)) ||\n !_JsonEquivalent(normalizeValueSockets(config.outputValueSockets), expectedValueSockets(declaration.outputValueSockets)) ||\n !_JsonEquivalent(normalizeFlowSockets(config.inputFlowSockets), expectedInputFlows) ||\n !_JsonEquivalent(normalizeFlowSockets(config.outputFlowSockets), expectedOutputFlows) ||\n !_JsonEquivalent(actualConnectionNames, expectedConnectionNames)\n ) {\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_TYPE_MISMATCH\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}/nodes/${nodeIndex}`,\n blockId: block.uniqueId,\n message: `Unsupported extension operation \"${operation}\" has edited socket metadata and can no longer be exported as its canonical typed no-op.`,\n });\n }\n }\n\n private _validateMappedBlocks(\n graphIndex: number,\n nodeIndex: number,\n operation: string,\n mapping: IGLTFToFlowGraphMapping,\n blocks: readonly FlowGraphBlock[],\n diagnostics: IKHRInteractivityExportDiagnostic[]\n ): void {\n for (let role = 0; role < mapping.blocks.length; role++) {\n const roleBlocks = blocks.filter((block) => _GetBlockProvenance(block)?.role === role);\n if (roleBlocks.length === 0) {\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_ROLE_MISSING\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}/nodes/${nodeIndex}`,\n message: `Composite \"${operation}\" is missing role ${role} (${mapping.blocks[role]}).`,\n });\n continue;\n }\n if (roleBlocks.length > 1) {\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_ROLE_DUPLICATE\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}/nodes/${nodeIndex}`,\n message: `Composite \"${operation}\" has more than one block for role ${role}.`,\n });\n continue;\n }\n if (roleBlocks[0].getClassName() !== _RuntimeBlockClassName(mapping.blocks[role])) {\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_TYPE_MISMATCH\",\n graphIndex,\n nodeIndex,\n blockId: roleBlocks[0].uniqueId,\n path: `/blocks/${roleBlocks[0].uniqueId}`,\n message: `Composite role ${role} must be \"${mapping.blocks[role]}\", not \"${roleBlocks[0].getClassName()}\".`,\n });\n }\n }\n for (const block of blocks) {\n const provenance = _GetBlockProvenance(block);\n if (!provenance || provenance.nodeIndex !== nodeIndex || provenance.operation !== operation || provenance.declarationIndex < 0) {\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_PROVENANCE_INVALID\",\n graphIndex,\n nodeIndex,\n blockId: block.uniqueId,\n path: `/blocks/${block.uniqueId}`,\n message: `Block provenance no longer identifies the imported \"${operation}\" node.`,\n });\n } else if (provenance.role < -1 || provenance.role >= mapping.blocks.length) {\n _PushDiagnostic(diagnostics, {\n code: \"BLOCK_PROVENANCE_INVALID\",\n graphIndex,\n nodeIndex,\n blockId: block.uniqueId,\n path: `/blocks/${block.uniqueId}`,\n message: `Block role ${provenance.role} is not part of the \"${operation}\" inverse mapping.`,\n });\n }\n }\n type CompositeConnection = FlowGraphDataConnection<any> | FlowGraphSignalConnection;\n const allowedInternalPeers = new Map<CompositeConnection, Set<CompositeConnection>>();\n const allowInternalConnection = (left: CompositeConnection, right: CompositeConnection) => {\n const leftPeers = allowedInternalPeers.get(left) ?? new Set<CompositeConnection>();\n leftPeers.add(right);\n allowedInternalPeers.set(left, leftPeers);\n const rightPeers = allowedInternalPeers.get(right) ?? new Set<CompositeConnection>();\n rightPeers.add(left);\n allowedInternalPeers.set(right, rightPeers);\n };\n for (const connector of mapping.interBlockConnectors ?? []) {\n const inputBlock = _GetRoleBlock(blocks, connector.inputBlockIndex);\n const outputBlock = _GetRoleBlock(blocks, connector.outputBlockIndex);\n const input = connector.isVariable\n ? inputBlock?.dataInputs.find((connection) => connection.name === connector.input)\n : inputBlock instanceof FlowGraphExecutionBlock\n ? inputBlock.signalInputs.find((connection) => connection.name === connector.input)\n : undefined;\n const output = connector.isVariable\n ? outputBlock?.dataOutputs.find((connection) => connection.name === connector.output)\n : outputBlock instanceof FlowGraphExecutionBlock\n ? outputBlock.signalOutputs.find((connection) => connection.name === connector.output)\n : undefined;\n if (input && output) {\n allowInternalConnection(input, output);\n }\n if (!input || !output || !input._connectedPoint.includes(output as never)) {\n _PushDiagnostic(diagnostics, {\n code: \"COMPOSITE_CONNECTION_CHANGED\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}/nodes/${nodeIndex}`,\n message: `Internal composite connection \"${connector.output}\" -> \"${connector.input}\" was changed.`,\n });\n }\n }\n const reportedUnexpectedConnections = new Set<CompositeConnection>();\n for (const block of blocks) {\n const blockProvenance = _GetBlockProvenance(block);\n for (const [key, expected] of Object.entries(blockProvenance?.generatedConfiguration ?? {})) {\n const current =\n key === \"eventData\"\n ? NormalizeInteractivityEventDataConfiguration(block.config?.[key])\n : key === \"outputSignalCount\"\n ? ((block as { outputSignals?: unknown[]; executionSignals?: unknown[] }).outputSignals?.length ??\n (block as { executionSignals?: unknown[] }).executionSignals?.length ??\n block.config?.[key])\n : block.config?.[key];\n const runtimeExpected =\n _GetOwn(blockProvenance?.generatedConfigurationRuntime, key) ?? (key === \"eventData\" ? _CreateEventSchemaRuntimeSnapshot(expected) : undefined);\n const currentRuntime = runtimeExpected\n ? key === \"eventData\"\n ? _CreateEventSchemaRuntimeSnapshot(current)\n : _CreateKHRInteractivityRuntimeValueSnapshot(current)\n : undefined;\n if (\n runtimeExpected\n ? runtimeExpected.unrepresentable || currentRuntime?.unrepresentable || currentRuntime?.runtimeValueFingerprint !== runtimeExpected.runtimeValueFingerprint\n : !_JsonEquivalent(current, expected)\n ) {\n _PushDiagnostic(diagnostics, {\n code: \"CONFIGURATION_UNREPRESENTABLE\",\n graphIndex,\n nodeIndex,\n blockId: block.uniqueId,\n path: `/blocks/${block.uniqueId}/config/${key}`,\n message: `Importer-generated configuration \"${key}\" was changed and no longer represents \"${operation}\".`,\n });\n }\n }\n for (const input of block.dataInputs) {\n if (input.isConnected() || _GetSocketProvenance(input)) {\n continue;\n }\n const expected = _GetOwn(blockProvenance?.generatedInputDefaults, input.name);\n const current = _CreateKHRInteractivityRuntimeValueSnapshot((input as any)._defaultValue);\n if (!expected || expected.unrepresentable || current.unrepresentable || current.runtimeValueFingerprint !== expected.runtimeValueFingerprint) {\n _PushDiagnostic(diagnostics, {\n code: \"INPUT_DEFAULT_UNREPRESENTABLE\",\n graphIndex,\n nodeIndex,\n blockId: block.uniqueId,\n socket: input.name,\n path: `/blocks/${block.uniqueId}/dataInputs/${input.name}`,\n message: expected?.unrepresentable\n ? `Importer-generated input default \"${input.name}\" could not be preserved safely for inverse export.`\n : expected\n ? `Importer-generated input default \"${input.name}\" was changed and has no KHR_interactivity inverse mapping.`\n : `Input default \"${input.name}\" has no import-time provenance or KHR_interactivity inverse mapping.`,\n });\n }\n }\n if ((blockProvenance?.role ?? 0) < 0) {\n continue;\n }\n const connections: CompositeConnection[] = [\n ...block.dataInputs,\n ...block.dataOutputs,\n ...(block instanceof FlowGraphExecutionBlock ? block.signalInputs : []),\n ...(block instanceof FlowGraphExecutionBlock ? block.signalOutputs : []),\n ];\n for (const connection of connections) {\n if (!connection.isConnected() || reportedUnexpectedConnections.has(connection)) {\n continue;\n }\n const khrFacing =\n _GetSocketProvenance(connection) ??\n this._inferSocketProvenance(connection, {\n sourceIndex: nodeIndex,\n declarationIndex: -1,\n operation,\n mapping,\n blocks,\n classification: \"exact\",\n diagnostics,\n });\n const unexpectedPeers = connection._connectedPoint.filter((peer) => {\n const internal = blocks.includes(peer._ownerBlock);\n const importerHelper = internal && _GetBlockProvenance(peer._ownerBlock)?.role === -1;\n return internal ? !allowedInternalPeers.get(connection)?.has(peer) && !(khrFacing && importerHelper) : !khrFacing;\n });\n if (unexpectedPeers.length > 0) {\n reportedUnexpectedConnections.add(connection);\n unexpectedPeers.forEach((peer) => reportedUnexpectedConnections.add(peer));\n _PushDiagnostic(diagnostics, {\n code: \"SOCKET_PROVENANCE_MISSING\",\n graphIndex,\n nodeIndex,\n blockId: block.uniqueId,\n socket: connection.name,\n path: `/blocks/${block.uniqueId}/${connection.name}`,\n message: `Connection from socket \"${connection.name}\" is not part of the \"${operation}\" inverse mapping.`,\n });\n }\n }\n }\n }\n\n private _buildGraph(analysis: IGraphAnalysis, context: IKHRInteractivitySerializerContext, diagnostics: IKHRInteractivityExportDiagnostic[]): IKHRInteractivity_Graph {\n const graph = CloneKHRInteractivityGraph(analysis.source);\n const importedName = analysis.source.name ?? `Graph ${analysis.graphIndex + 1}`;\n if (analysis.source.name !== undefined || analysis.graph.name !== importedName) {\n graph.name = analysis.graph.name;\n } else {\n delete graph.name;\n }\n this._updateVariables(graph, analysis.graph, diagnostics, analysis.graphIndex);\n const logicalBySourceIndex = new Map(analysis.nodes.filter((node) => node.sourceIndex >= 0).map((node) => [node.sourceIndex, node]));\n const rebuiltNodes = (graph.nodes ?? []).map((sourceNode, nodeIndex) => {\n const logicalNode = logicalBySourceIndex.get(nodeIndex)!;\n return this._rebuildNode(graph, sourceNode, logicalNode, analysis, context, diagnostics);\n });\n const ordered = this._topologicallyOrderNodes(rebuiltNodes, analysis.graphIndex, diagnostics);\n if (!ordered) {\n return graph;\n }\n if (analysis.source.nodes !== undefined || ordered.nodes.length > 0) {\n graph.nodes = ordered.nodes;\n } else {\n delete graph.nodes;\n }\n this._remapGraphReferences(graph, context, diagnostics, analysis.graphIndex, ordered.sourceIndices);\n const validation = CreateKHRInteractivityGraphModel(graph, analysis.graphIndex, new Set(this.additionalExtensionsUsed), context.getNodeCount());\n for (const diagnostic of validation.diagnostics) {\n if (diagnostic.severity === \"error\") {\n const finalNodeIndexText = /\\/nodes\\/(\\d+)(?:\\/|$)/.exec(diagnostic.path)?.[1];\n const finalNodeIndex = finalNodeIndexText === undefined ? undefined : parseInt(finalNodeIndexText, 10);\n _PushDiagnostic(diagnostics, {\n code: \"GRAPH_INVALID\",\n graphIndex: analysis.graphIndex,\n nodeIndex: finalNodeIndex === undefined ? undefined : ordered.sourceIndices[finalNodeIndex],\n path: diagnostic.path,\n message: diagnostic.message,\n });\n }\n }\n return graph;\n }\n\n private _rebuildNode(\n graph: IKHRInteractivity_Graph,\n sourceNode: IKHRInteractivity_Node,\n logicalNode: ILogicalNode,\n graphAnalysis: IGraphAnalysis,\n context: IKHRInteractivitySerializerContext,\n diagnostics: IKHRInteractivityExportDiagnostic[]\n ): IKHRInteractivity_Node {\n const node = _CloneJson(sourceNode);\n const mapping = logicalNode.mapping;\n if (mapping) {\n this._rebuildConfiguration(graph, node, logicalNode, graphAnalysis.graphIndex, context, diagnostics);\n }\n for (const socket of Object.keys(sourceNode.values ?? {}).sort()) {\n if (mapping) {\n const sourceEffective = this._isEffectiveValueInput(graph, sourceNode, logicalNode, socket, false);\n const currentEffective = this._isEffectiveValueInput(graph, sourceNode, logicalNode, socket, true);\n if (!sourceEffective) {\n if (currentEffective) {\n _PushDiagnostic(diagnostics, {\n code: \"CONFIGURATION_UNREPRESENTABLE\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/values/${socket}`,\n message: `Configuration edits made formerly ignored value socket \"${socket}\" effective without an authored FlowGraph socket.`,\n });\n }\n continue;\n }\n if (!currentEffective) {\n delete node.values![socket];\n continue;\n }\n }\n const input = _FindDataInput(logicalNode.blocks, logicalNode.sourceIndex, socket);\n if (!input) {\n _PushDiagnostic(diagnostics, {\n code: \"SOCKET_PROVENANCE_MISSING\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/values/${socket}`,\n message: `Input value socket \"${socket}\" no longer has KHR_interactivity provenance.`,\n });\n continue;\n }\n const mappingObject = this._getMappingObject(mapping?.inputs?.values, socket);\n node.values![socket] = this._rebuildInputValue(graph, sourceNode.values![socket], input, mappingObject, logicalNode, graphAnalysis, diagnostics);\n }\n if (node.values && Object.keys(node.values).length === 0) {\n delete node.values;\n }\n const flowOutputs = new Map<string, FlowGraphSignalConnection>();\n for (const block of logicalNode.blocks) {\n if (!(block instanceof FlowGraphExecutionBlock)) {\n continue;\n }\n for (const output of block.signalOutputs) {\n const provenance = _GetSocketProvenance(output) ?? this._inferSocketProvenance(output, logicalNode);\n if (provenance?.nodeIndex === logicalNode.sourceIndex && provenance.kind === \"flow\" && provenance.direction === \"output\") {\n if (!this._isEffectiveFlowOutput(graph, sourceNode, logicalNode, provenance.socket, true)) {\n if (output.isConnected()) {\n _PushDiagnostic(diagnostics, {\n code: \"CONFIGURATION_UNREPRESENTABLE\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket: provenance.socket,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/flows/${provenance.socket}`,\n message: `Flow socket \"${provenance.socket}\" is connected but disabled by the edited configuration.`,\n });\n }\n continue;\n }\n if (flowOutputs.has(provenance.socket)) {\n _PushDiagnostic(diagnostics, {\n code: \"SOCKET_CONNECTION_AMBIGUOUS\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket: provenance.socket,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/flows/${provenance.socket}`,\n message: `Multiple FlowGraph outputs map to KHR flow socket \"${provenance.socket}\".`,\n });\n } else {\n flowOutputs.set(provenance.socket, output);\n }\n }\n }\n }\n const rebuiltFlows: NonNullable<IKHRInteractivity_Node[\"flows\"]> = {};\n for (const [socket, sourceFlow] of Object.entries(sourceNode.flows ?? {})) {\n const sourceEffective = this._isEffectiveFlowOutput(graph, sourceNode, logicalNode, socket, false);\n const currentEffective = this._isEffectiveFlowOutput(graph, sourceNode, logicalNode, socket, true);\n if (!sourceEffective) {\n if (currentEffective) {\n _PushDiagnostic(diagnostics, {\n code: \"CONFIGURATION_UNREPRESENTABLE\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/flows/${socket}`,\n message: `Configuration edits made formerly ignored flow socket \"${socket}\" effective without a live FlowGraph connection.`,\n });\n } else {\n _SetOwnProperty(rebuiltFlows, socket, _CloneJson(sourceFlow));\n }\n }\n }\n for (const [socket, output] of [...flowOutputs.entries()].sort(([left], [right]) => left.localeCompare(right))) {\n if (output._connectedPoint.length === 0) {\n const sourceFlow = sourceNode.flows?.[socket];\n if (sourceFlow) {\n const sourceNoOp = this._isNoOpFlowTarget(graph, graphAnalysis, sourceFlow, false);\n const currentNoOp = this._isNoOpFlowTarget(graph, graphAnalysis, sourceFlow, true);\n if (sourceNoOp && currentNoOp) {\n _SetOwnProperty(rebuiltFlows, socket, _CloneJson(sourceFlow));\n } else if (sourceNoOp && !currentNoOp) {\n _PushDiagnostic(diagnostics, {\n code: \"CONFIGURATION_UNREPRESENTABLE\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/flows/${socket}`,\n message: `Configuration edits made formerly ignored flow target \"${sourceFlow.socket ?? \"in\"}\" effective without a live FlowGraph connection.`,\n });\n }\n }\n continue;\n }\n if (output._connectedPoint.length > 1) {\n _PushDiagnostic(diagnostics, {\n code: \"SOCKET_CONNECTION_AMBIGUOUS\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/flows/${socket}`,\n message: `KHR output flow \"${socket}\" must connect to exactly one target; found ${output._connectedPoint.length}.`,\n });\n continue;\n }\n const target = output._connectedPoint[0];\n const targetBlockProvenance = _GetBlockProvenance(target._ownerBlock);\n const targetLogicalNode = targetBlockProvenance ? graphAnalysis.nodes.find((candidate) => candidate.sourceIndex === targetBlockProvenance.nodeIndex) : undefined;\n const provenance = _GetSocketProvenance(target) ?? (targetLogicalNode ? this._inferSocketProvenance(target, targetLogicalNode) : undefined);\n if (!provenance || provenance.kind !== \"flow\" || provenance.direction !== \"input\") {\n _PushDiagnostic(diagnostics, {\n code: \"SOCKET_TARGET_UNREPRESENTABLE\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/flows/${socket}`,\n message: `Flow target for \"${socket}\" is not part of a representable KHR node.`,\n });\n continue;\n }\n if (targetLogicalNode) {\n const targetSourceNode = graph.nodes?.[targetLogicalNode.sourceIndex];\n if (targetSourceNode && !this._isEffectiveFlowInput(graph, targetSourceNode, targetLogicalNode, provenance.socket, true)) {\n _PushDiagnostic(diagnostics, {\n code: \"CONFIGURATION_UNREPRESENTABLE\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/flows/${socket}`,\n message: `Flow target socket \"${provenance.socket}\" is disabled by the target node's edited configuration.`,\n });\n continue;\n }\n }\n const rebuiltFlow = sourceNode.flows?.[socket]\n ? _CloneJson(sourceNode.flows[socket])\n : ({ node: provenance.nodeIndex } as NonNullable<IKHRInteractivity_Node[\"flows\"]>[string]);\n rebuiltFlow.node = provenance.nodeIndex;\n if (provenance.socket === \"in\") {\n delete rebuiltFlow.socket;\n } else {\n rebuiltFlow.socket = provenance.socket;\n }\n _SetOwnProperty(rebuiltFlows, socket, rebuiltFlow);\n }\n if (Object.keys(rebuiltFlows).length > 0) {\n node.flows = rebuiltFlows;\n } else {\n delete node.flows;\n }\n if (mapping) {\n this._remapPointerTemplateInputs(graph, node, logicalNode, graphAnalysis.graphIndex, context, diagnostics);\n }\n return node;\n }\n\n private _getMappingObject(mapping: { [name: string]: IGLTFToFlowGraphMappingObject } | undefined, socket: string): IGLTFToFlowGraphMappingObject | undefined {\n const fixed = _GetOwn(mapping, socket);\n if (fixed) {\n return fixed;\n }\n return Object.entries(mapping ?? {}).find(([key]) => key.startsWith(\"[\") && key.endsWith(\"]\"))?.[1];\n }\n\n private _inferSocketProvenance(connection: FlowGraphDataConnection<any> | FlowGraphSignalConnection, logicalNode: ILogicalNode): IKHRInteractivitySocketProvenance | undefined {\n const mapping = logicalNode.mapping;\n const block = connection._ownerBlock;\n const blockProvenance = _GetBlockProvenance(block);\n if (!mapping || !blockProvenance || blockProvenance.role < 0) {\n return undefined;\n }\n const isDataInput = block.dataInputs.includes(connection as FlowGraphDataConnection<any>);\n const isDataOutput = block.dataOutputs.includes(connection as FlowGraphDataConnection<any>);\n const isSignalInput = block instanceof FlowGraphExecutionBlock && block.signalInputs.includes(connection as FlowGraphSignalConnection);\n const isSignalOutput = block instanceof FlowGraphExecutionBlock && block.signalOutputs.includes(connection as FlowGraphSignalConnection);\n const kind: IKHRInteractivitySocketProvenance[\"kind\"] = isDataInput || isDataOutput ? \"value\" : \"flow\";\n const direction: IKHRInteractivitySocketProvenance[\"direction\"] = isDataInput || isSignalInput ? \"input\" : \"output\";\n if (!isDataInput && !isDataOutput && !isSignalInput && !isSignalOutput) {\n return undefined;\n }\n const socketMappings =\n kind === \"value\" ? (direction === \"input\" ? mapping.inputs?.values : mapping.outputs?.values) : direction === \"input\" ? mapping.inputs?.flows : mapping.outputs?.flows;\n for (const [sourceName, property] of Object.entries(socketMappings ?? {})) {\n if (property.compatibilityOnly) {\n continue;\n }\n const expectedRole = property.toBlock ? mapping.blocks.indexOf(property.toBlock) : 0;\n if (expectedRole !== blockProvenance.role) {\n continue;\n }\n let inferredSourceName: string | undefined;\n if (sourceName.startsWith(\"[\") && sourceName.endsWith(\"]\")) {\n if (kind !== \"flow\" || direction !== \"input\") {\n continue;\n }\n const [prefix, suffix = \"\"] = property.name.split(\"$1\");\n if (connection.name.startsWith(prefix) && connection.name.endsWith(suffix)) {\n inferredSourceName = connection.name.substring(prefix.length, connection.name.length - suffix.length);\n }\n } else if (property.name === connection.name) {\n inferredSourceName = sourceName;\n }\n if (inferredSourceName !== undefined) {\n return {\n ...blockProvenance,\n kind,\n direction,\n socket: inferredSourceName,\n };\n }\n }\n if (kind === \"flow\" && direction === \"input\" && connection.name === \"in\" && HasDefaultInteractivityFlowInput(logicalNode.operation)) {\n return {\n ...blockProvenance,\n kind,\n direction,\n socket: \"in\",\n };\n }\n return undefined;\n }\n\n private _isNoOpFlowTarget(\n graph: IKHRInteractivity_Graph,\n graphAnalysis: IGraphAnalysis,\n flow: NonNullable<IKHRInteractivity_Node[\"flows\"]>[string],\n useCurrentConfiguration: boolean\n ): boolean {\n const targetNode = graph.nodes?.[flow.node];\n const declaration = targetNode ? graph.declarations?.[targetNode.declaration] : undefined;\n if (!declaration) {\n return false;\n }\n const mapping = getMappingForDeclaration(declaration, false);\n if (!mapping) {\n return false;\n }\n const socket = flow.socket ?? \"in\";\n const fixed = _GetOwn(mapping.inputs?.flows, socket);\n if (fixed && !fixed.compatibilityOnly) {\n return false;\n }\n if (Object.keys(mapping.inputs?.flows ?? {}).some((key) => key.startsWith(\"[\") && key.endsWith(\"]\"))) {\n const targetLogicalNode = graphAnalysis.nodes.find((candidate) => candidate.sourceIndex === flow.node);\n const allowedSockets = this._getAllowedDynamicFlowSockets(targetNode!, mapping, \"input\", useCurrentConfiguration ? targetLogicalNode : undefined, graph);\n return !!allowedSockets && !allowedSockets.has(socket);\n }\n return !(socket === \"in\" && HasDefaultInteractivityFlowInput(_FullOperationName(declaration.op, declaration.extension)));\n }\n\n private _isEffectiveFlowInput(\n graph: IKHRInteractivity_Graph,\n node: IKHRInteractivity_Node,\n logicalNode: ILogicalNode,\n socket: string,\n useCurrentConfiguration: boolean\n ): boolean {\n const mapping = logicalNode.mapping;\n if (!mapping) {\n return true;\n }\n const fixed = _GetOwn(mapping.inputs?.flows, socket);\n if (fixed && !fixed.compatibilityOnly) {\n return true;\n }\n if (Object.keys(mapping.inputs?.flows ?? {}).some((key) => key.startsWith(\"[\") && key.endsWith(\"]\"))) {\n const allowedSockets = this._getAllowedDynamicFlowSockets(node, mapping, \"input\", useCurrentConfiguration ? logicalNode : undefined, graph);\n return !allowedSockets || allowedSockets.has(socket);\n }\n return socket === \"in\" && HasDefaultInteractivityFlowInput(logicalNode.operation);\n }\n\n private _isEffectiveFlowOutput(\n graph: IKHRInteractivity_Graph,\n node: IKHRInteractivity_Node,\n logicalNode: ILogicalNode,\n socket: string,\n useCurrentConfiguration: boolean\n ): boolean {\n const mappings = logicalNode.mapping?.outputs?.flows;\n if (!logicalNode.mapping) {\n return Object.prototype.hasOwnProperty.call(node.flows ?? {}, socket);\n }\n const fixed = _GetOwn(mappings, socket);\n if (fixed && !fixed.compatibilityOnly) {\n return true;\n }\n if (!Object.keys(mappings ?? {}).some((key) => key.startsWith(\"[\") && key.endsWith(\"]\"))) {\n return false;\n }\n const allowedSockets = logicalNode.mapping\n ? this._getAllowedDynamicFlowSockets(node, logicalNode.mapping, \"output\", useCurrentConfiguration ? logicalNode : undefined, graph)\n : undefined;\n return !allowedSockets || allowedSockets.has(socket);\n }\n\n private _getAllowedDynamicFlowSockets(\n node: IKHRInteractivity_Node,\n mapping: IGLTFToFlowGraphMapping,\n direction: \"input\" | \"output\",\n logicalNode?: ILogicalNode,\n graph?: IKHRInteractivity_Graph\n ): ReadonlySet<string> | undefined {\n for (const [key, property] of Object.entries(mapping.configuration ?? {})) {\n const generatesSockets = direction === \"input\" ? property.generatesInputFlowSockets : property.generatesOutputFlowSockets;\n if (!generatesSockets) {\n continue;\n }\n const values = graph\n ? _GetEffectiveConfigurationValue(node, mapping, key, property, graph, logicalNode, this._options.sourceGLTF?.nodes?.length)\n : node.configuration?.[key]?.value;\n const effectiveValues = values ?? (Array.isArray(property.defaultValue) ? property.defaultValue : [property.defaultValue]);\n if (direction === \"input\") {\n const count = typeof effectiveValues[0] === \"number\" && Number.isInteger(effectiveValues[0]) && effectiveValues[0] >= 0 ? effectiveValues[0] : 0;\n return new Set(Array.from({ length: count }, (_, index) => String(index)));\n }\n return new Set(effectiveValues.filter((value) => value !== undefined).map(String));\n }\n return undefined;\n }\n\n private _resolveValueTypeIndex(\n graph: IKHRInteractivity_Graph,\n value: IKHRInteractivity_Variable | IKHRInteractivity_OutputSocketReference,\n visited: Set<string>\n ): number | undefined {\n return \"node\" in value ? this._resolveOutputTypeIndex(graph, value.node, value.socket ?? \"value\", visited) : value.type;\n }\n\n private _resolveOutputTypeIndex(graph: IKHRInteractivity_Graph, nodeIndex: number, socket: string, visited: Set<string> = new Set()): number | undefined {\n const key = `${nodeIndex}:${socket}`;\n if (visited.has(key)) {\n return undefined;\n }\n visited.add(key);\n const node = graph.nodes?.[nodeIndex];\n const declaration = node ? graph.declarations?.[node.declaration] : undefined;\n if (!node || !declaration) {\n return undefined;\n }\n const declaredType = declaration.outputValueSockets?.[socket]?.type;\n if (declaredType !== undefined) {\n return declaredType;\n }\n if (declaration.op === \"pointer/get\" && socket === \"value\") {\n const type = node.configuration?.type?.value?.[0];\n return typeof type === \"number\" ? type : undefined;\n }\n if (declaration.op === \"variable/get\" && socket === \"value\") {\n const variable = node.configuration?.variable?.value?.[0];\n return typeof variable === \"number\" ? graph.variables?.[variable]?.type : undefined;\n }\n if (declaration.op === \"math/switch\" && socket === \"value\") {\n const defaultValue = node.values?.default;\n return defaultValue ? this._resolveValueTypeIndex(graph, defaultValue, visited) : undefined;\n }\n if (declaration.op === \"event/receive\" && socket !== \"event\") {\n const event = node.configuration?.event?.value?.[0];\n return typeof event === \"number\" ? graph.events?.[event]?.values?.[socket]?.type : undefined;\n }\n const mapping = getMappingForDeclaration(declaration, false);\n const outputMapping = this._getMappingObject(mapping?.outputs?.values, socket);\n const mappedType = outputMapping?.gltfType;\n const signature =\n mappedType === \"number\"\n ? \"float\"\n : mappedType === \"boolean\"\n ? \"bool\"\n : mappedType === \"vector2\"\n ? \"float2\"\n : mappedType === \"vector3\"\n ? \"float3\"\n : mappedType === \"vector4\"\n ? \"float4\"\n : mappedType;\n if (signature && Object.prototype.hasOwnProperty.call(gltfTypeToBabylonType, signature)) {\n const type = graph.types?.findIndex((candidate) => candidate.signature === signature) ?? -1;\n return type >= 0 ? type : undefined;\n }\n const typeSource = outputMapping?.typeSourceInput ? node.values?.[outputMapping.typeSourceInput] : undefined;\n return typeSource ? this._resolveValueTypeIndex(graph, typeSource, visited) : undefined;\n }\n\n private _isEffectiveValueInput(\n graph: IKHRInteractivity_Graph,\n node: IKHRInteractivity_Node,\n logicalNode: ILogicalNode,\n socket: string,\n useCurrentConfiguration: boolean\n ): boolean {\n const mappings = logicalNode.mapping?.inputs?.values;\n const fixed = _GetOwn(mappings, socket);\n if (fixed && !fixed.compatibilityOnly) {\n return true;\n }\n if (!Object.keys(mappings ?? {}).some((key) => key.startsWith(\"[\") && key.endsWith(\"]\"))) {\n return false;\n }\n const configurationValue = (key: string): unknown[] | undefined => {\n const property = logicalNode.mapping?.configuration?.[key];\n return property\n ? _GetEffectiveConfigurationValue(\n node,\n logicalNode.mapping!,\n key,\n property,\n graph,\n useCurrentConfiguration ? logicalNode : undefined,\n this._options.sourceGLTF?.nodes?.length\n )\n : undefined;\n };\n switch (logicalNode.operation) {\n case \"debug/log\": {\n const message = configurationValue(\"message\")?.[0];\n return typeof message === \"string\" && ParseDebugLogTemplate(message).sockets.includes(socket);\n }\n case \"event/send\": {\n const eventIndex = configurationValue(\"event\")?.[0];\n return typeof eventIndex === \"number\" && Object.prototype.hasOwnProperty.call(graph.events?.[eventIndex]?.values ?? {}, socket);\n }\n case \"variable/set\":\n return (configurationValue(\"variables\") ?? []).map(String).includes(socket);\n case \"math/switch\":\n return (configurationValue(\"cases\") ?? []).map(String).includes(socket);\n case \"pointer/get\":\n case \"pointer/set\":\n case \"pointer/interpolate\": {\n const pointer = configurationValue(\"pointer\")?.[0];\n return (\n typeof pointer === \"string\" &&\n pointer.split(\"/\").some(\n (segment) =>\n ((segment.startsWith(\"[\") && !segment.startsWith(\"[[\")) || (segment.startsWith(\"{\") && !segment.startsWith(\"{{\"))) &&\n segment\n .substring(1, segment.length - 1)\n .replace(/~1/g, \"/\")\n .replace(/~0/g, \"~\") === socket\n )\n );\n }\n default:\n return true;\n }\n }\n\n private _rebuildInputValue(\n graph: IKHRInteractivity_Graph,\n sourceValue: IKHRInteractivity_Variable | IKHRInteractivity_OutputSocketReference,\n input: FlowGraphDataConnection<any>,\n mappingObject: IGLTFToFlowGraphMappingObject | undefined,\n logicalNode: ILogicalNode,\n graphAnalysis: IGraphAnalysis,\n diagnostics: IKHRInteractivityExportDiagnostic[]\n ): IKHRInteractivity_Variable | IKHRInteractivity_OutputSocketReference {\n let upstream: FlowGraphDataConnection<any> | undefined = input._connectedPoint[0];\n if (input.isConnected() && mappingObject?.convertConnectedTimeToFrames) {\n upstream = this._unwrapAnimationTimeHelper(input, logicalNode, graphAnalysis, diagnostics);\n }\n if (upstream) {\n const provenance = _GetSocketProvenance(upstream);\n if (!provenance || provenance.kind !== \"value\" || provenance.direction !== \"output\") {\n _PushDiagnostic(diagnostics, {\n code: \"SOCKET_TARGET_UNREPRESENTABLE\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/values`,\n message: `Value input is connected to a block without representable KHR output provenance.`,\n });\n return sourceValue;\n }\n const rebuiltReference = _CloneJson(sourceValue) as IKHRInteractivity_OutputSocketReference & { value?: unknown };\n delete rebuiltReference.value;\n rebuiltReference.node = provenance.nodeIndex;\n if (provenance.socket === \"value\") {\n delete rebuiltReference.socket;\n } else {\n rebuiltReference.socket = provenance.socket;\n }\n if (rebuiltReference.type !== undefined) {\n const rebuiltType = this._resolveOutputTypeIndex(graph, provenance.nodeIndex, provenance.socket);\n if (rebuiltType !== undefined) {\n rebuiltReference.type = rebuiltType;\n }\n }\n return rebuiltReference;\n }\n const socketProvenance = _GetSocketProvenance(input);\n const sourceProvenanceValue = socketProvenance?.sourceValue;\n const current = _NormalizeValue((input as any)._defaultValue);\n const currentSnapshot = _CreateKHRInteractivityRuntimeValueSnapshot((input as any)._defaultValue);\n const legacyRuntimeSnapshot =\n sourceProvenanceValue && !(\"node\" in sourceProvenanceValue)\n ? _CreateTypedRuntimeValueSnapshot(graph, sourceProvenanceValue.type, socketProvenance?.runtimeValue ?? sourceProvenanceValue.value)\n : undefined;\n const importedRuntimeSnapshot = socketProvenance?.runtimeValueSnapshot ?? legacyRuntimeSnapshot;\n if (\n !input.isConnected() &&\n importedRuntimeSnapshot &&\n !importedRuntimeSnapshot.unrepresentable &&\n !currentSnapshot.unrepresentable &&\n currentSnapshot.runtimeValueFingerprint === importedRuntimeSnapshot.runtimeValueFingerprint &&\n sourceProvenanceValue\n ) {\n return _CloneJson(sourceProvenanceValue);\n }\n if (!input.isConnected() && socketProvenance?.runtimeValue && _ValuesEqual(current, socketProvenance.runtimeValue) && socketProvenance.sourceValue) {\n return _CloneJson(socketProvenance.sourceValue);\n }\n const canonicalSource = socketProvenance?.sourceValue ?? sourceValue;\n const type = canonicalSource.type ?? _GetOrAddInputTypeIndex(graph, input, mappingObject, logicalNode, socketProvenance?.socket ?? input.name);\n if (type === undefined || !graph.types?.[type]) {\n _PushDiagnostic(diagnostics, {\n code: \"VALUE_UNREPRESENTABLE\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/values`,\n message: \"A newly inlined value has no canonical KHR type.\",\n });\n return sourceValue;\n }\n const original = \"node\" in canonicalSource ? undefined : canonicalSource;\n const expected = original ? _GetSourceValue(graph, original, mappingObject, this._options.targetFps ?? 60) : undefined;\n if (_ValuesEqual(current, expected)) {\n return _CloneJson(canonicalSource);\n }\n if (!current) {\n _PushDiagnostic(diagnostics, {\n code: \"VALUE_UNREPRESENTABLE\",\n graphIndex: graphAnalysis.graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n path: `/graphs/${graphAnalysis.graphIndex}/nodes/${logicalNode.sourceIndex}/values`,\n message: \"The FlowGraph input value cannot be converted to a KHR value array.\",\n });\n return sourceValue;\n }\n if (mappingObject?.convertConnectedTimeToFrames && current.length === 1 && typeof current[0] === \"number\") {\n current[0] /= this._options.targetFps ?? 60;\n }\n const rebuiltValue = _CloneJson(canonicalSource) as IKHRInteractivity_Variable & Partial<IKHRInteractivity_OutputSocketReference>;\n delete rebuiltValue.node;\n delete rebuiltValue.socket;\n rebuiltValue.type = type;\n rebuiltValue.value = current as NonNullable<IKHRInteractivity_Variable[\"value\"]>;\n return rebuiltValue;\n }\n\n private _unwrapAnimationTimeHelper(\n input: FlowGraphDataConnection<any>,\n logicalNode: ILogicalNode,\n graphAnalysis: IGraphAnalysis,\n diagnostics: IKHRInteractivityExportDiagnostic[]\n ): FlowGraphDataConnection<any> | undefined {\n const graphIndex = graphAnalysis.graphIndex;\n const helperOutput = input._connectedPoint[0];\n const helperBlock = helperOutput?._ownerBlock;\n const helperProvenance = helperBlock ? _GetBlockProvenance(helperBlock) : undefined;\n if (!helperBlock || helperBlock.getClassName() !== \"FlowGraphMultiplyBlock\" || helperProvenance?.role !== -1 || helperProvenance.nodeIndex !== logicalNode.sourceIndex) {\n _PushDiagnostic(diagnostics, {\n code: \"COMPOSITE_CONNECTION_CHANGED\",\n graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n blockId: helperBlock?.uniqueId,\n path: `/graphs/${graphIndex}/nodes/${logicalNode.sourceIndex}`,\n message: \"The generated seconds-to-frames animation helper was changed.\",\n });\n return undefined;\n }\n const source = helperBlock.dataInputs.find((connection) => connection.name === \"a\")?._connectedPoint[0];\n const factor = helperBlock.dataInputs.find((connection) => connection.name === \"b\");\n const expectedFactor = this._options.targetFps ?? 60;\n const factorValue = factor ? (factor as any)._defaultValue : undefined;\n if (!factor || factor.isConnected() || _NormalizeValue(factorValue)?.[0] !== expectedFactor) {\n _PushDiagnostic(diagnostics, {\n code: \"COMPOSITE_CONNECTION_CHANGED\",\n graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n blockId: helperBlock.uniqueId,\n path: `/blocks/${helperBlock.uniqueId}`,\n message: `Animation time helper must multiply by the target frame rate (${expectedFactor}).`,\n });\n }\n return source;\n }\n\n private _rebuildConfiguration(\n graph: IKHRInteractivity_Graph,\n node: IKHRInteractivity_Node,\n logicalNode: ILogicalNode,\n graphIndex: number,\n context: IKHRInteractivitySerializerContext,\n diagnostics: IKHRInteractivityExportDiagnostic[]\n ): void {\n const changedConfigurationGroups = new Set<string>();\n const fallbackConfigurationGroups = new Set<string>();\n for (const [key, property] of Object.entries(logicalNode.mapping?.configuration ?? {})) {\n if (!property.configurationGroup) {\n continue;\n }\n const block = _GetConfigurationBlock(logicalNode, property);\n const provenance = _GetConfigurationProvenance(logicalNode, key, property);\n if (provenance && !_JsonEquivalent(block?.config?.[property.name], provenance.runtimeValue)) {\n changedConfigurationGroups.add(property.configurationGroup);\n }\n if (!_IsValidConfigurationValue(provenance?.sourceValue, property, graph, this._options.sourceGLTF?.nodes?.length)) {\n fallbackConfigurationGroups.add(property.configurationGroup);\n }\n }\n for (const [key, property] of Object.entries(logicalNode.mapping?.configuration ?? {})) {\n const groupChanged = !!property.configurationGroup && changedConfigurationGroups.has(property.configurationGroup);\n const groupUsedFallback = !!property.configurationGroup && fallbackConfigurationGroups.has(property.configurationGroup);\n const provenance = _GetConfigurationProvenance(logicalNode, key, property);\n const preserveUnexposedValidMember =\n groupChanged &&\n !groupUsedFallback &&\n provenance !== undefined &&\n provenance.runtimeValue === undefined &&\n _IsValidConfigurationValue(provenance.sourceValue, property, graph, this._options.sourceGLTF?.nodes?.length);\n let current = _GetMappedConfigurationValue(logicalNode, key, property, graph, !groupChanged || preserveUnexposedValidMember);\n if (groupChanged && current === undefined && property.defaultValue !== undefined) {\n current = _NormalizeValue(property.defaultValue);\n }\n const source = node.configuration?.[key]?.value;\n if (property.validationOnly && current === undefined && provenance?.runtimeValue === undefined) {\n continue;\n }\n if (groupChanged && !_IsValidConfigurationValue(current, property, graph, this._options.sourceGLTF?.nodes?.length)) {\n _PushDiagnostic(diagnostics, {\n code: \"CONFIGURATION_UNREPRESENTABLE\",\n graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n path: `/graphs/${graphIndex}/nodes/${logicalNode.sourceIndex}/configuration/${key}`,\n message: `Edited configuration group \"${property.configurationGroup}\" does not contain a valid value for \"${key}\".`,\n });\n continue;\n }\n if (!current) {\n if (source !== undefined || property.required) {\n _PushDiagnostic(diagnostics, {\n code: \"CONFIGURATION_UNREPRESENTABLE\",\n graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n path: `/graphs/${graphIndex}/nodes/${logicalNode.sourceIndex}/configuration/${key}`,\n message: `Configuration \"${key}\" cannot be inverted from the edited FlowGraph composite.`,\n });\n }\n continue;\n }\n if (property.indexSource === \"events\" && current.length === 1 && typeof current[0] === \"number\") {\n const event = graph.events?.[current[0]];\n const block = _GetConfigurationBlock(logicalNode, property);\n const runtimeEventData = NormalizeInteractivityEventDataConfiguration(block?.config?.eventData);\n const runtimeSchema = runtimeEventData === undefined ? [] : runtimeEventData;\n const blockProvenance = block ? _GetBlockProvenance(block) : undefined;\n const importTimeSchema = _GetOwn(blockProvenance?.generatedConfigurationRuntime, \"eventData\");\n const preservesImportedEvent = provenance && _JsonEquivalent(block?.config?.[property.name], provenance.runtimeValue);\n const eventSchema = Object.entries(event?.values ?? {})\n .map(([id, value]) => ({\n id,\n type: gltfTypeToBabylonType[graph.types?.[value.type]?.signature ?? \"\"]?.flowGraphType,\n ...(value.value === undefined ? {} : { value: value.value.slice() }),\n }))\n .sort((left, right) => left.id.localeCompare(right.id));\n const currentSchema = _CreateEventSchemaRuntimeSnapshot(runtimeSchema);\n const expectedSchema = _CreateEventSchemaRuntimeSnapshot(eventSchema);\n const schemaMatches =\n preservesImportedEvent && importTimeSchema\n ? !importTimeSchema.unrepresentable && !currentSchema.unrepresentable && currentSchema.runtimeValueFingerprint === importTimeSchema.runtimeValueFingerprint\n : !currentSchema.unrepresentable && !expectedSchema.unrepresentable && currentSchema.runtimeValueFingerprint === expectedSchema.runtimeValueFingerprint;\n if (!schemaMatches) {\n _PushDiagnostic(diagnostics, {\n code: \"CONFIGURATION_UNREPRESENTABLE\",\n graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n path: `/graphs/${graphIndex}/nodes/${logicalNode.sourceIndex}/configuration/${key}`,\n message: `The runtime custom-event payload schema does not match event index ${current[0]}.`,\n });\n continue;\n }\n }\n const preservesFallback =\n provenance &&\n _JsonEquivalent(_GetConfigurationBlock(logicalNode, property)?.config?.[property.name], provenance.runtimeValue) &&\n !_IsValidConfigurationValue(provenance.sourceValue, property, graph, this._options.sourceGLTF?.nodes?.length);\n if (!preservesFallback && property.indexSource === \"assetNodes\" && current.length === 1 && typeof current[0] === \"number\") {\n const sourceNode = this._options.sourceGLTF?.nodes?.[current[0]]?._babylonTransformNode;\n const remapped = sourceNode ? context.getNodeIndex(sourceNode) : undefined;\n if (remapped === undefined) {\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n path: `/graphs/${graphIndex}/nodes/${logicalNode.sourceIndex}/configuration/${key}`,\n message: `Referenced glTF node ${current[0]} was not exported.`,\n });\n continue;\n }\n current[0] = remapped;\n }\n if (source === undefined && property.defaultValue !== undefined && _ValuesEqual(current, _NormalizeValue(property.defaultValue))) {\n continue;\n }\n node.configuration ??= {};\n const rebuiltConfiguration = node.configuration[key] ? _CloneJson(node.configuration[key]) : {};\n rebuiltConfiguration.value = current as NonNullable<IKHRInteractivity_Configuration[\"value\"]>;\n _SetOwnProperty(node.configuration, key, rebuiltConfiguration);\n }\n }\n\n private _remapPointerTemplateInputs(\n graph: IKHRInteractivity_Graph,\n node: IKHRInteractivity_Node,\n logicalNode: ILogicalNode,\n graphIndex: number,\n context: IKHRInteractivitySerializerContext,\n diagnostics: IKHRInteractivityExportDiagnostic[]\n ): void {\n for (const [key, property] of Object.entries(logicalNode.mapping?.configuration ?? {})) {\n if (!property.pointerTemplate) {\n continue;\n }\n const pointer = node.configuration?.[key]?.value?.[0];\n if (typeof pointer !== \"string\") {\n continue;\n }\n const segments = pointer.split(\"/\");\n if (segments[0] !== \"\" || segments.length < 3) {\n continue;\n }\n let collection = segments[1].replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n const rootPlaceholder = /^\\{([^\\{\\}]+)\\}$/.exec(segments[1]);\n if (rootPlaceholder) {\n const rootSocket = node.values?.[rootPlaceholder[1]];\n const rootReference = rootSocket && !(\"node\" in rootSocket) ? rootSocket.value?.[0] : undefined;\n const rootMatch = typeof rootReference === \"string\" ? /^\\/([^/]+)$/.exec(rootReference) : undefined;\n collection = rootMatch?.[1] ?? \"\";\n if (!_KnownIndexedRootCollections.has(collection)) {\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket: rootPlaceholder[1],\n path: `/graphs/${graphIndex}/nodes/${logicalNode.sourceIndex}/values/${rootPlaceholder[1]}`,\n message: `Root collection template input \"${rootPlaceholder[1]}\" cannot be resolved statically for export.`,\n });\n continue;\n }\n }\n if (!_KnownIndexedRootCollections.has(collection)) {\n continue;\n }\n const indexPlaceholder = /^\\[([^\\[\\]]+)\\]$/.exec(segments[2]);\n const referenceIndexPlaceholder = /^\\{([^\\{\\}]+)\\}$/.exec(segments[2]);\n const hasTemplateCollection = !!rootPlaceholder || !!indexPlaceholder || !!referenceIndexPlaceholder;\n if (\n hasTemplateCollection &&\n !this._validateExtensionReferencePreservation(\n pointer,\n collection,\n diagnostics,\n graphIndex,\n logicalNode.sourceIndex,\n `/graphs/${graphIndex}/nodes/${logicalNode.sourceIndex}/configuration/${key}`\n )\n ) {\n continue;\n }\n if (indexPlaceholder) {\n const socket = node.values?.[indexPlaceholder[1]];\n const path = `/graphs/${graphIndex}/nodes/${logicalNode.sourceIndex}/values/${indexPlaceholder[1]}`;\n if (!socket || \"node\" in socket) {\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket: indexPlaceholder[1],\n path,\n message: `Dynamic index template input \"${indexPlaceholder[1]}\" cannot be safely remapped for the exported ${collection} array.`,\n });\n continue;\n }\n const sourceIndex = socket.value?.[0];\n const remapped =\n typeof sourceIndex === \"number\" && Number.isInteger(sourceIndex)\n ? this._getRemappedRootIndex(collection as KhrInteractivityRootCollection, sourceIndex, context)\n : undefined;\n if (remapped === undefined) {\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n socket: indexPlaceholder[1],\n path,\n message: `Template input \"${indexPlaceholder[1]}\" does not resolve to an exported ${collection} element.`,\n });\n continue;\n }\n socket.value = [remapped];\n } else if (rootPlaceholder && /^(0|[1-9]\\d*)$/.test(segments[2])) {\n const sourceIndex = parseInt(segments[2], 10);\n const remapped = this._getRemappedRootIndex(collection as KhrInteractivityRootCollection, sourceIndex, context);\n if (remapped === undefined) {\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex: logicalNode.sourceIndex,\n path: `/graphs/${graphIndex}/nodes/${logicalNode.sourceIndex}/configuration/${key}`,\n message: `Static ${collection} index ${sourceIndex} does not resolve to an exported element.`,\n });\n } else {\n segments[2] = String(remapped);\n node.configuration![key].value![0] = segments.join(\"/\");\n }\n }\n }\n }\n\n private _updateVariables(graph: IKHRInteractivity_Graph, flowGraph: FlowGraph, diagnostics: IKHRInteractivityExportDiagnostic[], graphIndex: number): void {\n const provenance = flowGraph.metadata?.khrInteractivity as IKHRInteractivityGraphProvenance | undefined;\n if (provenance?.authoredVariableStructureChanged) {\n _PushDiagnostic(diagnostics, {\n code: \"VALUE_UNREPRESENTABLE\",\n graphIndex,\n path: `/graphs/${graphIndex}/variables`,\n message: \"Adding, renaming, or deleting variables from an imported KHR_interactivity graph is not supported by lossless export.\",\n });\n }\n const authoredValues = provenance?.authoredVariableValues;\n const authoredTypes = provenance?.authoredVariableTypes;\n if (!authoredValues && !authoredTypes) {\n return;\n }\n for (const [indexText, flowGraphType] of Object.entries(authoredTypes ?? {})) {\n const index = Number(indexText);\n const variable = graph.variables?.[index];\n const type = _GetOrAddVariableTypeIndex(graph, flowGraphType);\n if (!variable || type === undefined) {\n _PushDiagnostic(diagnostics, {\n code: \"VALUE_UNREPRESENTABLE\",\n graphIndex,\n path: `/graphs/${graphIndex}/variables/${index}/type`,\n message: `Authored variable type \"${flowGraphType}\" cannot be represented by KHR_interactivity.`,\n });\n continue;\n }\n variable.type = type;\n }\n for (const [indexText, authoredValue] of Object.entries(authoredValues ?? {})) {\n const index = Number(indexText);\n const variable = graph.variables![index];\n if (!variable) {\n _PushDiagnostic(diagnostics, {\n code: \"VALUE_UNREPRESENTABLE\",\n graphIndex,\n path: `/graphs/${graphIndex}/variables/${index}`,\n message: `Authored variable index ${index} does not exist in the canonical graph.`,\n });\n continue;\n }\n const normalized = _NormalizeValue(authoredValue);\n const signature = graph.types?.[variable.type]?.signature;\n if (!normalized || !signature) {\n continue;\n }\n variable.value = normalized as NonNullable<IKHRInteractivity_Variable[\"value\"]>;\n }\n }\n\n private _remapValueArray(\n value: unknown[],\n signature: string,\n context: IKHRInteractivitySerializerContext,\n diagnostics: IKHRInteractivityExportDiagnostic[],\n graphIndex: number,\n nodeIndex?: number,\n referenceHint?: string | null\n ): NonNullable<IKHRInteractivity_Variable[\"value\"]> {\n if (signature !== \"ref\") {\n return value as NonNullable<IKHRInteractivity_Variable[\"value\"]>;\n }\n return value.map((entry) => {\n if (typeof entry === \"string\") {\n const hintedCollection = referenceHint?.match(/^\\/([^/]+)\\//)?.[1];\n if (hintedCollection && _KnownIndexedRootCollections.has(hintedCollection)) {\n return this._remapReferenceToCollection(entry, hintedCollection, context, diagnostics, graphIndex, nodeIndex);\n }\n return this._remapReference(entry, context, diagnostics, graphIndex, nodeIndex);\n }\n if (entry !== null && typeof entry === \"object\") {\n const hintedCollection = referenceHint?.match(/^\\/([^/]+)\\//)?.[1];\n if (hintedCollection && _KnownIndexedRootCollections.has(hintedCollection) && context.getRootIndex) {\n const index = context.getRootIndex(hintedCollection as KhrInteractivityRootCollection, entry);\n if (index !== undefined) {\n return `/${hintedCollection}/${index}`;\n }\n }\n const candidates: [string, number | undefined][] = [\n [\"animations\", context.getAnimationIndex(entry as AnimationGroup)],\n [\"cameras\", context.getCameraIndex(entry as Camera)],\n [\"materials\", context.getMaterialIndex(entry as Material)],\n [\"nodes\", context.getNodeIndex(entry as Node)],\n ];\n const matches = (hintedCollection ? candidates.filter(([collection]) => collection === hintedCollection) : referenceHint === null ? [] : candidates).filter(\n ([, index]) => index !== undefined\n );\n if (matches.length === 1) {\n return `/${matches[0][0]}/${matches[0][1]}`;\n }\n if (this._isPreflight) {\n return \"\";\n }\n }\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}${nodeIndex === undefined ? \"\" : `/nodes/${nodeIndex}`}`,\n message: \"An authored reference value does not resolve to an exported glTF entity.\",\n });\n return \"\";\n }) as NonNullable<IKHRInteractivity_Variable[\"value\"]>;\n }\n\n private _topologicallyOrderNodes(nodes: IKHRInteractivity_Node[], graphIndex: number, diagnostics: IKHRInteractivityExportDiagnostic[]): IOrderedNodes | undefined {\n const outgoing = nodes.map(() => new Set<number>());\n const indegree = nodes.map(() => 0);\n let hasInvalidDependency = false;\n const addEdge = (source: number, target: number) => {\n if (source < 0 || target < 0 || source >= nodes.length || target >= nodes.length) {\n hasInvalidDependency = true;\n _PushDiagnostic(diagnostics, {\n code: \"SOCKET_TARGET_UNREPRESENTABLE\",\n graphIndex,\n path: `/graphs/${graphIndex}/nodes`,\n message: `Dependency ${source} -> ${target} references a node outside the exported graph.`,\n });\n return;\n }\n if (source === target) {\n hasInvalidDependency = true;\n _PushDiagnostic(diagnostics, {\n code: \"DEPENDENCY_CYCLE\",\n graphIndex,\n nodeIndex: source,\n path: `/graphs/${graphIndex}/nodes/${source}`,\n message: \"A KHR_interactivity node cannot depend on itself.\",\n });\n return;\n }\n if (outgoing[source].has(target)) {\n return;\n }\n outgoing[source].add(target);\n indegree[target]++;\n };\n for (let target = 0; target < nodes.length; target++) {\n for (const value of Object.values(nodes[target].values ?? {})) {\n if (\"node\" in value) {\n addEdge(value.node, target);\n }\n }\n for (const flow of Object.values(nodes[target].flows ?? {})) {\n addEdge(target, flow.node);\n }\n }\n if (hasInvalidDependency) {\n return undefined;\n }\n const ready = indegree.flatMap((count, index) => (count === 0 ? [index] : []));\n const order: number[] = [];\n while (ready.length > 0) {\n ready.sort((left, right) => left - right);\n const current = ready.shift()!;\n order.push(current);\n for (const target of outgoing[current]) {\n indegree[target]--;\n if (indegree[target] === 0) {\n ready.push(target);\n }\n }\n }\n if (order.length !== nodes.length) {\n _PushDiagnostic(diagnostics, {\n code: \"DEPENDENCY_CYCLE\",\n graphIndex,\n path: `/graphs/${graphIndex}/nodes`,\n message: \"Value and flow dependencies form a cycle that cannot satisfy KHR_interactivity node ordering constraints.\",\n });\n return undefined;\n }\n const remap = new Map(order.map((oldIndex, newIndex) => [oldIndex, newIndex]));\n const ordered = order.map((index) => nodes[index]);\n for (const node of ordered) {\n for (const value of Object.values(node.values ?? {})) {\n if (\"node\" in value) {\n value.node = remap.get(value.node)!;\n }\n }\n for (const flow of Object.values(node.flows ?? {})) {\n flow.node = remap.get(flow.node)!;\n }\n }\n return { nodes: ordered, sourceIndices: order };\n }\n\n private _remapGraphReferences(\n graph: IKHRInteractivity_Graph,\n context: IKHRInteractivitySerializerContext,\n diagnostics: IKHRInteractivityExportDiagnostic[],\n graphIndex: number,\n sourceIndices: readonly number[]\n ): void {\n for (let variableIndex = 0; variableIndex < (graph.variables?.length ?? 0); variableIndex++) {\n const variable = graph.variables![variableIndex];\n if (graph.types?.[variable.type]?.signature === \"ref\" && variable.value) {\n const sourceValue = this._options.document?.graphs[graphIndex]?.source.variables?.[variableIndex]?.value?.[0];\n const currentValue = variable.value[0];\n const consumerCollection = this._getVariableReferenceCollection(graph, variableIndex);\n const referenceHint =\n consumerCollection === null\n ? null\n : consumerCollection\n ? `/${consumerCollection}/0`\n : typeof currentValue === \"object\" || currentValue === sourceValue\n ? typeof sourceValue === \"string\"\n ? sourceValue\n : undefined\n : undefined;\n variable.value = this._remapValueArray(variable.value, \"ref\", context, diagnostics, graphIndex, undefined, referenceHint);\n }\n }\n\n for (const event of graph.events ?? []) {\n for (const value of Object.values(event.values ?? {})) {\n if (graph.types?.[value.type]?.signature === \"ref\" && value.value) {\n value.value = this._remapValueArray(value.value, \"ref\", context, diagnostics, graphIndex);\n }\n }\n }\n for (let nodeIndex = 0; nodeIndex < (graph.nodes?.length ?? 0); nodeIndex++) {\n const node = graph.nodes![nodeIndex];\n const sourceNodeIndex = sourceIndices[nodeIndex] ?? nodeIndex;\n const declaration = graph.declarations?.[node.declaration];\n const mapping = declaration ? getMappingForDeclaration(declaration, false) : undefined;\n for (const [socket, value] of Object.entries(node.values ?? {})) {\n if (!(\"node\" in value) && graph.types?.[value.type]?.signature === \"ref\" && value.value) {\n const pointerCollection = this._getPointerReferenceCollection(node, mapping, socket);\n if (pointerCollection === null) {\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex: sourceNodeIndex,\n socket,\n path: `/graphs/${graphIndex}/nodes/${sourceNodeIndex}/values/${socket}`,\n message: `Pointer template collection for reference input \"${socket}\" cannot be resolved statically.`,\n });\n continue;\n }\n const sourceValue = this._options.document?.graphs[graphIndex]?.source.nodes?.[sourceNodeIndex]?.values?.[socket];\n const sourceReference = sourceValue && !(\"node\" in sourceValue) ? sourceValue.value?.[0] : undefined;\n const currentReference = value.value[0];\n const referenceHint = pointerCollection\n ? `/${pointerCollection}/0`\n : typeof currentReference === \"object\" || currentReference === sourceReference\n ? typeof sourceReference === \"string\"\n ? sourceReference\n : undefined\n : undefined;\n value.value = this._remapValueArray(value.value, \"ref\", context, diagnostics, graphIndex, sourceNodeIndex, referenceHint);\n }\n }\n for (const [key, property] of Object.entries(mapping?.configuration ?? {})) {\n if (!property.pointerTemplate) {\n continue;\n }\n const configuration = node.configuration?.[key];\n if (configuration?.value) {\n configuration.value = configuration.value.map((value) =>\n typeof value === \"string\" ? this._remapReference(value, context, diagnostics, graphIndex, sourceNodeIndex) : value\n );\n }\n }\n }\n }\n\n private _getVariableReferenceCollection(graph: IKHRInteractivity_Graph, variableIndex: number): string | null | undefined {\n const getterNodes = new Set<number>();\n for (let nodeIndex = 0; nodeIndex < (graph.nodes?.length ?? 0); nodeIndex++) {\n const node = graph.nodes![nodeIndex];\n const declaration = graph.declarations?.[node.declaration];\n if (declaration?.op === \"variable/get\" && !declaration.extension && node.configuration?.variable?.value?.[0] === variableIndex) {\n getterNodes.add(nodeIndex);\n }\n }\n const collections = new Set<string>();\n for (const node of graph.nodes ?? []) {\n const declaration = graph.declarations?.[node.declaration];\n const mapping = declaration ? getMappingForDeclaration(declaration, false) : undefined;\n for (const [socket, value] of Object.entries(node.values ?? {})) {\n if (!(\"node\" in value) || !getterNodes.has(value.node)) {\n continue;\n }\n const collection = this._getPointerReferenceCollection(node, mapping, socket);\n if (collection === null) {\n return null;\n }\n if (collection) {\n collections.add(collection);\n }\n }\n }\n return collections.size === 1 ? collections.values().next().value : collections.size > 1 ? null : undefined;\n }\n\n private _getPointerReferenceCollection(node: IKHRInteractivity_Node, mapping: IGLTFToFlowGraphMapping | undefined, socket: string): string | null | undefined {\n for (const [key, property] of Object.entries(mapping?.configuration ?? {})) {\n if (!property.pointerTemplate) {\n continue;\n }\n const pointer = node.configuration?.[key]?.value?.[0];\n if (typeof pointer !== \"string\") {\n continue;\n }\n const segments = pointer.split(\"/\");\n const placeholderIndex = segments.findIndex((segment) => segment === `{${socket}}`);\n if (placeholderIndex > 1) {\n const parentSegment = segments[placeholderIndex - 1];\n const parentPlaceholder = /^\\{([^\\{\\}]+)\\}$/.exec(parentSegment);\n const parentValue = parentPlaceholder ? node.values?.[parentPlaceholder[1]] : undefined;\n const parentReference = parentValue && !(\"node\" in parentValue) ? parentValue.value?.[0] : undefined;\n const collection = (parentPlaceholder && typeof parentReference === \"string\" ? (/^\\/([^/]+)$/.exec(parentReference)?.[1] ?? \"\") : parentSegment)\n .replace(/~1/g, \"/\")\n .replace(/~0/g, \"~\");\n if (_KnownIndexedRootCollections.has(collection)) {\n return collection;\n }\n if (parentPlaceholder) {\n return null;\n }\n }\n }\n return undefined;\n }\n\n private _getRemappedRootIndex(collection: KhrInteractivityRootCollection, sourceIndex: number, context: IKHRInteractivitySerializerContext): number | undefined {\n const indices = new Set(\n this._getSourceRootObjects(collection, sourceIndex)\n .map((target) => this._getExportedObjectIndex(collection, target, context))\n .filter((index): index is number => index !== undefined)\n );\n return indices.size === 1 ? indices.values().next().value : undefined;\n }\n\n private _getSourceRootObjects(collection: KhrInteractivityRootCollection, sourceIndex: number): object[] {\n const sourceGLTF = this._options.sourceGLTF;\n switch (collection) {\n case \"nodes\":\n return sourceGLTF?.nodes?.[sourceIndex]?._babylonTransformNode ? [sourceGLTF.nodes[sourceIndex]._babylonTransformNode!] : [];\n case \"animations\":\n return sourceGLTF?.animations?.[sourceIndex]?._babylonAnimationGroup ? [sourceGLTF.animations[sourceIndex]._babylonAnimationGroup!] : [];\n case \"cameras\":\n return sourceGLTF?.cameras?.[sourceIndex]?._babylonCamera ? [sourceGLTF.cameras[sourceIndex]._babylonCamera!] : [];\n case \"materials\":\n return Array.from(new Set(Object.values(sourceGLTF?.materials?.[sourceIndex]?._data ?? {}).map((entry) => entry.babylonMaterial)));\n case \"meshes\":\n return Array.from(\n new Set([\n ...(sourceGLTF?.meshes?.[sourceIndex]?.primitives.flatMap((primitive) => (primitive._instanceData ? [primitive._instanceData.babylonSourceMesh] : [])) ??\n []),\n ...(sourceGLTF?.nodes\n ?.filter((node) => node.mesh === sourceIndex)\n .flatMap((node) => [...(node._babylonTransformNode ? [node._babylonTransformNode] : []), ...(node._primitiveBabylonMeshes ?? [])]) ?? []),\n ])\n );\n case \"textures\":\n return sourceGLTF?.textures?.[sourceIndex]?._babylonTextures?.slice() ?? [];\n case \"images\":\n return Array.from(\n new Set(\n sourceGLTF?.textures\n ?.flatMap((texture) => texture._babylonTextureSources ?? [])\n .filter((source) => source.imageIndex === sourceIndex)\n .map((source) => source.babylonTexture) ?? []\n )\n );\n case \"samplers\":\n return Array.from(\n new Set(\n sourceGLTF?.textures\n ?.flatMap((texture) => texture._babylonTextureSources ?? [])\n .filter((source) => source.samplerIndex === sourceIndex)\n .map((source) => source.babylonTexture) ?? []\n )\n );\n case \"skins\":\n return sourceGLTF?.skins?.[sourceIndex]?._data?.babylonSkeleton ? [sourceGLTF.skins[sourceIndex]._data!.babylonSkeleton] : [];\n case \"scenes\":\n return sourceIndex === (sourceGLTF?.scene ?? 0) && this._flowGraphs[0]?.scene ? [this._flowGraphs[0].scene] : [];\n }\n }\n\n private _getSourceRootIndex(collection: KhrInteractivityRootCollection, target: object): number | undefined {\n const roots = this._options.sourceGLTF?.[collection];\n if (!roots) {\n return undefined;\n }\n const matches: number[] = [];\n for (let index = 0; index < roots.length; index++) {\n if (this._getSourceRootObjects(collection, index).includes(target)) {\n matches.push(index);\n }\n }\n return matches.length === 1 ? matches[0] : undefined;\n }\n\n private _getExportedObjectIndex(collection: KhrInteractivityRootCollection, target: object, context: IKHRInteractivitySerializerContext): number | undefined {\n if (context.getRootIndex) {\n return context.getRootIndex(collection, target);\n }\n switch (collection) {\n case \"nodes\":\n return context.getNodeIndex(target as Node);\n case \"animations\":\n return context.getAnimationIndex(target as AnimationGroup);\n case \"cameras\":\n return context.getCameraIndex(target as Camera);\n case \"materials\":\n return context.getMaterialIndex(target as Material);\n default:\n return undefined;\n }\n }\n\n private _remapReferenceToCollection(\n reference: string,\n targetCollection: string,\n context: IKHRInteractivitySerializerContext,\n diagnostics: IKHRInteractivityExportDiagnostic[],\n graphIndex: number,\n nodeIndex?: number\n ): string {\n if (!this._validateExtensionReferencePreservation(reference, targetCollection, diagnostics, graphIndex, nodeIndex)) {\n return reference;\n }\n const match = reference.match(/^\\/([^/]+)\\/(0|[1-9]\\d*)(\\/.*)?$/);\n if (!match || !_KnownIndexedRootCollections.has(match[1])) {\n return this._remapReference(reference, context, diagnostics, graphIndex, nodeIndex);\n }\n const targets = this._getSourceRootObjects(targetCollection as KhrInteractivityRootCollection, parseInt(match[2], 10));\n const targetIndices = new Set(\n targets\n .map((target) => this._getExportedObjectIndex(targetCollection as KhrInteractivityRootCollection, target, context))\n .filter((index): index is number => index !== undefined)\n );\n const targetIndex = targetIndices.size === 1 ? targetIndices.values().next().value : undefined;\n if (targetIndex === undefined) {\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}${nodeIndex === undefined ? \"\" : `/nodes/${nodeIndex}`}`,\n message: `Reference \"${reference}\" cannot be remapped to the exported ${targetCollection} collection.`,\n });\n return reference;\n }\n return `/${targetCollection}/${targetIndex}${match[3] ?? \"\"}`;\n }\n\n private _remapReference(\n reference: string,\n context: IKHRInteractivitySerializerContext,\n diagnostics: IKHRInteractivityExportDiagnostic[],\n graphIndex: number,\n nodeIndex?: number\n ): string {\n if (!reference || reference.startsWith(\"/extensions/KHR_interactivity/events/\") || reference.startsWith(\"/extensions/KHR_interactivity/delays/\")) {\n return reference;\n }\n const extensionCollection = /^\\/extensions\\/([^/]+)\\/[^/]+\\/(0|[1-9]\\d*)(?:\\/|$)/.exec(reference);\n if (extensionCollection && extensionCollection[1] !== \"KHR_interactivity\") {\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}${nodeIndex === undefined ? \"\" : `/nodes/${nodeIndex}`}`,\n message: `Indexed reference \"${reference}\" belongs to ${extensionCollection[1]}, whose serializer index mapping is unavailable.`,\n });\n return reference;\n }\n const match = reference.match(/^\\/([^/]+)\\/(0|[1-9]\\d*)(\\/.*)?$/);\n if (!match || !_KnownIndexedRootCollections.has(match[1])) {\n return reference;\n }\n if (!this._validateExtensionReferencePreservation(reference, match[1], diagnostics, graphIndex, nodeIndex)) {\n return reference;\n }\n const collection = match[1];\n const sourceIndex = parseInt(match[2], 10);\n const targetIndex = this._getRemappedRootIndex(collection as KhrInteractivityRootCollection, sourceIndex, context);\n if (targetIndex === undefined) {\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex,\n path: `/graphs/${graphIndex}${nodeIndex === undefined ? \"\" : `/nodes/${nodeIndex}`}`,\n message: `Reference \"${reference}\" cannot be remapped because its ${collection} target was not exported uniquely.`,\n });\n return reference;\n }\n return `/${collection}/${targetIndex}${match[3] ?? \"\"}`;\n }\n\n private _validateExtensionReferencePreservation(\n reference: string,\n resolvedCollection: string,\n diagnostics: IKHRInteractivityExportDiagnostic[],\n graphIndex: number,\n nodeIndex?: number,\n path = `/graphs/${graphIndex}${nodeIndex === undefined ? \"\" : `/nodes/${nodeIndex}`}`\n ): boolean {\n const nestedExtensions = _GetPointerExtensionNames(reference).filter((extension) => extension !== \"KHR_interactivity\");\n if (nestedExtensions.length === 0 || _CanPreserveNestedExtensionPointer(reference, resolvedCollection)) {\n return true;\n }\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n graphIndex,\n nodeIndex,\n path,\n message: `Reference \"${reference}\" observes extension-backed data (${nestedExtensions.join(\n \", \"\n )}) that the serializer cannot guarantee will retain its source semantics.`,\n });\n return false;\n }\n\n private _collectAdditionalExtensions(): string[] {\n const extensions = new Set<string>();\n const collectReferenceExtension = (value: unknown): void => {\n if (typeof value !== \"string\") {\n return;\n }\n for (const extensionName of _GetPointerExtensionNames(value)) {\n if (extensionName !== \"KHR_interactivity\") {\n extensions.add(extensionName);\n }\n }\n };\n const collectPropertyExtensions = (value: unknown): void => {\n if (Array.isArray(value)) {\n value.forEach(collectPropertyExtensions);\n return;\n }\n if (value === null || typeof value !== \"object\") {\n return;\n }\n const object = value as Record<string, unknown>;\n for (const [key, entry] of Object.entries(object)) {\n if (key === \"extras\") {\n continue;\n }\n if (key === \"extensions\" && entry !== null && typeof entry === \"object\" && !Array.isArray(entry)) {\n for (const [extensionName, extensionPayload] of Object.entries(entry as Record<string, unknown>)) {\n if (extensionName !== \"KHR_interactivity\") {\n extensions.add(extensionName);\n }\n collectPropertyExtensions(extensionPayload);\n }\n continue;\n }\n if (key !== \"extensions\") {\n collectPropertyExtensions(entry);\n }\n }\n };\n collectPropertyExtensions(this._options.document?.source);\n for (const analysis of this._graphAnalyses) {\n collectPropertyExtensions(analysis.source);\n for (const variable of analysis.source.variables ?? []) {\n if (analysis.source.types?.[variable.type]?.signature === \"ref\") {\n variable.value?.forEach(collectReferenceExtension);\n }\n }\n for (const event of analysis.source.events ?? []) {\n for (const value of Object.values(event.values ?? {})) {\n if (value && typeof value === \"object\" && analysis.source.types?.[value.type]?.signature === \"ref\") {\n value.value?.forEach(collectReferenceExtension);\n }\n }\n }\n for (const declaration of analysis.source.declarations ?? []) {\n if (declaration.extension) {\n extensions.add(declaration.extension);\n }\n }\n for (const node of analysis.source.nodes ?? []) {\n for (const value of Object.values(node.values ?? {})) {\n if (value && typeof value === \"object\" && !(\"node\" in value) && analysis.source.types?.[value.type]?.signature === \"ref\") {\n value.value?.forEach(collectReferenceExtension);\n }\n }\n const declaration = analysis.source.declarations?.[node.declaration];\n const mapping = declaration ? getMappingForDeclaration(declaration, false) : undefined;\n for (const [key, property] of Object.entries(mapping?.configuration ?? {})) {\n if (property.pointerTemplate) {\n node.configuration?.[key]?.value?.forEach(collectReferenceExtension);\n }\n }\n }\n }\n for (const node of this._options.sourceGLTF?.nodes ?? []) {\n for (const extensionName of _CompanionNodeExtensions) {\n const extension = node.extensions?.[extensionName];\n if (extension) {\n extensions.add(extensionName);\n collectPropertyExtensions(extension);\n }\n }\n }\n return Array.from(extensions).sort();\n }\n\n private _writeCompanionNodeExtensions(context: IKHRInteractivitySerializerContext, diagnostics: IKHRInteractivityExportDiagnostic[]): void {\n for (let sourceIndex = 0; sourceIndex < (this._options.sourceGLTF?.nodes?.length ?? 0); sourceIndex++) {\n const sourceNode = this._options.sourceGLTF!.nodes![sourceIndex];\n for (const extensionName of _CompanionNodeExtensions) {\n const value = sourceNode.extensions?.[extensionName];\n if (!value) {\n continue;\n }\n const targetIndex = sourceNode._babylonTransformNode ? context.getNodeIndex(sourceNode._babylonTransformNode) : undefined;\n if (targetIndex === undefined) {\n _PushDiagnostic(diagnostics, {\n code: \"REFERENCE_UNRESOLVED\",\n path: `/nodes/${sourceIndex}/extensions/${extensionName}`,\n message: `Companion extension \"${extensionName}\" targets a node that was not exported.`,\n });\n continue;\n }\n context.setNodeExtension(targetIndex, extensionName, _CloneJson(value));\n }\n }\n }\n\n private _sortDiagnostics(diagnostics: IKHRInteractivityExportDiagnostic[]): IKHRInteractivityExportDiagnostic[] {\n return diagnostics\n .slice()\n .sort(\n (left, right) =>\n (left.graphIndex ?? -1) - (right.graphIndex ?? -1) ||\n (left.nodeIndex ?? -1) - (right.nodeIndex ?? -1) ||\n left.path.localeCompare(right.path) ||\n left.code.localeCompare(right.code)\n );\n }\n}\n\n/**\n * Creates a detached KHR_interactivity export plan without mutating the FlowGraphs.\n * @param flowGraphs graphs to export in root graph order\n * @param options canonical source and serializer settings\n * @returns reusable representability/export provider\n */\nexport function CreateKHRInteractivityExportPlan(flowGraphs: readonly FlowGraph[], options: IKHRInteractivityExportOptions = {}): KHRInteractivityExportPlan {\n return new KHRInteractivityExportPlan(flowGraphs, options);\n}\n"]}
|