@yali-engine/render 0.0.0-stage → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bvh.d.ts +66 -0
- package/dist/bvh.js +493 -0
- package/dist/bvh.js.map +1 -0
- package/dist/camera.d.ts +34 -0
- package/dist/camera.js +66 -0
- package/dist/camera.js.map +1 -0
- package/dist/cluster-build.d.ts +46 -0
- package/dist/cluster-build.js +179 -0
- package/dist/cluster-build.js.map +1 -0
- package/dist/cluster-pages.d.ts +70 -0
- package/dist/cluster-pages.js +203 -0
- package/dist/cluster-pages.js.map +1 -0
- package/dist/cluster-stream.d.ts +83 -0
- package/dist/cluster-stream.js +226 -0
- package/dist/cluster-stream.js.map +1 -0
- package/dist/culled-draws.d.ts +30 -0
- package/dist/culled-draws.js +103 -0
- package/dist/culled-draws.js.map +1 -0
- package/dist/debug-lines.d.ts +51 -0
- package/dist/debug-lines.js +158 -0
- package/dist/debug-lines.js.map +1 -0
- package/dist/device-profile.d.ts +100 -0
- package/dist/device-profile.js +131 -0
- package/dist/device-profile.js.map +1 -0
- package/dist/device.d.ts +39 -0
- package/dist/device.js +79 -0
- package/dist/device.js.map +1 -0
- package/dist/environment.d.ts +60 -0
- package/dist/environment.js +204 -0
- package/dist/environment.js.map +1 -0
- package/dist/extract.d.ts +74 -0
- package/dist/extract.js +194 -0
- package/dist/extract.js.map +1 -0
- package/dist/frame-graph.d.ts +112 -0
- package/dist/frame-graph.js +226 -0
- package/dist/frame-graph.js.map +1 -0
- package/dist/gpu-health.d.ts +74 -0
- package/dist/gpu-health.js +106 -0
- package/dist/gpu-health.js.map +1 -0
- package/dist/gpu-timer.d.ts +26 -0
- package/dist/gpu-timer.js +93 -0
- package/dist/gpu-timer.js.map +1 -0
- package/dist/headless.d.ts +28 -0
- package/dist/headless.js +91 -0
- package/dist/headless.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/lights.d.ts +81 -0
- package/dist/lights.js +247 -0
- package/dist/lights.js.map +1 -0
- package/dist/matrix.d.ts +6 -0
- package/dist/matrix.js +59 -0
- package/dist/matrix.js.map +1 -0
- package/dist/meshes.d.ts +411 -0
- package/dist/meshes.js +545 -0
- package/dist/meshes.js.map +1 -0
- package/dist/meshlets-decoder.d.ts +20 -0
- package/dist/meshlets-decoder.js +47 -0
- package/dist/meshlets-decoder.js.map +1 -0
- package/dist/meshlets.d.ts +186 -0
- package/dist/meshlets.js +1040 -0
- package/dist/meshlets.js.map +1 -0
- package/dist/occlusion.d.ts +51 -0
- package/dist/occlusion.js +188 -0
- package/dist/occlusion.js.map +1 -0
- package/dist/pick-decoder.d.ts +19 -0
- package/dist/pick-decoder.js +45 -0
- package/dist/pick-decoder.js.map +1 -0
- package/dist/pick.d.ts +86 -0
- package/dist/pick.js +452 -0
- package/dist/pick.js.map +1 -0
- package/dist/pipeline-cache.d.ts +53 -0
- package/dist/pipeline-cache.js +96 -0
- package/dist/pipeline-cache.js.map +1 -0
- package/dist/post-options.d.ts +109 -0
- package/dist/post-options.js +23 -0
- package/dist/post-options.js.map +1 -0
- package/dist/post-shaders.gen.d.ts +40 -0
- package/dist/post-shaders.gen.js +43 -0
- package/dist/post-shaders.gen.js.map +1 -0
- package/dist/post.d.ts +101 -0
- package/dist/post.js +555 -0
- package/dist/post.js.map +1 -0
- package/dist/render-plugin.d.ts +239 -0
- package/dist/render-plugin.js +633 -0
- package/dist/render-plugin.js.map +1 -0
- package/dist/scene.d.ts +406 -0
- package/dist/scene.js +2005 -0
- package/dist/scene.js.map +1 -0
- package/dist/shaders.gen.d.ts +40 -0
- package/dist/shaders.gen.js +43 -0
- package/dist/shaders.gen.js.map +1 -0
- package/dist/shadows.d.ts +104 -0
- package/dist/shadows.js +227 -0
- package/dist/shadows.js.map +1 -0
- package/dist/staging-ring.d.ts +41 -0
- package/dist/staging-ring.js +125 -0
- package/dist/staging-ring.js.map +1 -0
- package/dist/textures.d.ts +165 -0
- package/dist/textures.js +361 -0
- package/dist/textures.js.map +1 -0
- package/dist/tonemap.d.ts +45 -0
- package/dist/tonemap.js +141 -0
- package/dist/tonemap.js.map +1 -0
- package/dist/viewport.d.ts +78 -0
- package/dist/viewport.js +130 -0
- package/dist/viewport.js.map +1 -0
- package/dist/webgl2/plugin.d.ts +40 -0
- package/dist/webgl2/plugin.js +190 -0
- package/dist/webgl2/plugin.js.map +1 -0
- package/dist/webgl2/program.d.ts +27 -0
- package/dist/webgl2/program.js +74 -0
- package/dist/webgl2/program.js.map +1 -0
- package/dist/webgl2/renderer.d.ts +128 -0
- package/dist/webgl2/renderer.js +976 -0
- package/dist/webgl2/renderer.js.map +1 -0
- package/dist/webgl2/shaders.glsl.gen.d.ts +27 -0
- package/dist/webgl2/shaders.glsl.gen.js +20 -0
- package/dist/webgl2/shaders.glsl.gen.js.map +1 -0
- package/dist/webgl2/textures.d.ts +11 -0
- package/dist/webgl2/textures.js +82 -0
- package/dist/webgl2/textures.js.map +1 -0
- package/dist/webgl2/webgl2.d.ts +1 -0
- package/dist/webgl2/webgl2.js +4 -0
- package/dist/webgl2/webgl2.js.map +1 -0
- package/dist/worker-mode.d.ts +85 -0
- package/dist/worker-mode.js +204 -0
- package/dist/worker-mode.js.map +1 -0
- package/package.json +47 -3
- package/README.md +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAK9C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAsC,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE5H,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9H,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhD,OAAO,EAAE,MAAM,EAAkB,YAAY,EAAE,MAAM,cAAc,CAAC;AAYpE;;;GAGG;AACH,SAAS,UAAU,CAAC,OAA4B,EAAE,SAAiB;IACjE,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;AACvF,CAAC;AAYD,kFAAkF;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAsD3E,qEAAqE;AACrE,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAU,CAAC;AAElE,uFAAuF;AACvF,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAwDjC,oHAAoH;AACpH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAChC,wHAAwH;AACxH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,kEAAkE;AAClE,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,gFAAgF;AAChF,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,0GAA0G;AAC1G,iEAAiE;AACjE,MAAM,CAAC,MAAM,eAAe,GAA0B,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AAEzJ,MAAM,CAAC,MAAM,WAAW,GAA0B;IAChD,WAAW,EAAE,iBAAiB;IAC9B,UAAU,EAAE;QACV,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE;QACpD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;KACtD;CACF,CAAC;AACF,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;AAClC,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,8CAA8C;AAC9C,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,aAAa;IACf,MAAM,CAAY;IAC3B,kDAAkD;IAClD,QAAQ,CAAS;IACjB,qCAAqC;IACrC,KAAK,GAAG,CAAC,CAAC;IACV,mFAAmF;IACnF,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;IACrB,mGAAmG;IACnG,UAAU,GAAG,KAAK,CAAC;IACnB,2GAA2G;IAC3G,UAAU,GAAG,IAAI,CAAC;IAClB,oGAAoG;IACpG,IAAI,GAAyB,SAAS,CAAC;IACvC;;;;;OAKG;IACH,IAAI,GAAkB,KAAK,CAAC;IAC5B,4EAA4E;IAC5E,OAAO,GAAG,CAAC,CAAC;IACZ;;;;OAIG;IACH,OAAO,GAAG,CAAC,CAAC;IACZ,2HAA2H;IAC3H,WAAW,GAAG,CAAC,CAAC;IAChB,wFAAwF;IACxF,4DAA4D;IAC5D,OAAO,GAAqB,IAAI,CAAC;IACjC,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,aAAa,GAAG,CAAC,CAAC;IAClB,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,qEAAqE;IAC5D,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;IAC1C,yEAAyE;IAChE,QAAQ,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;IACpD,8FAA8F;IAC9F,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC;IAED,sFAAsF;IACtF,YAAY,GAAG,CAAC,CAAC;IACjB,iDAAiD;IACxC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAEhF,OAAO,CAAmB;IAC1B,MAAM,CAAY;IAClB,UAAU,CAAgB;IAC1B,SAAS,CAAe;IACxB,eAAe,GAAG,CAAC,CAAC,CAAC;IACrB,YAAY,GAAuB,IAAI,CAAC;IACxC,OAAO,GAA2B,IAAI,CAAC;IACvC,QAAQ,GAAsB,IAAI,CAAC;IACnC,eAAe,GAA6B,IAAI,CAAC;IACjD,aAAa,GAAmB,EAAE,CAAC;IACnC,wGAAwG;IACxG,qBAAqB,GAA6B,IAAI,CAAC;IACvD,mBAAmB,GAAmB,EAAE,CAAC;IACzC,6GAA6G;IAC7G,WAAW,GAAG,IAAI,YAAY,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IACjD,WAAW,GAAG,CAAC,CAAC,CAAC;IACjB,YAAY,CAAY;IACxB,aAAa,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;IACrC,+CAA+C;IACtC,QAAQ,GAAoB,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC1F;;;OAGG;IACH,UAAU,GAAoE,IAAI,CAAC;IAEnF,gFAAgF;IACvE,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,YAAY,GAAG,EAAE,CAAC;IAClB,aAAa,CAAsB;IACnC,aAAa,CAAqB;IAClC,sGAAsG;IACtG,eAAe,GAAwB,EAAE,CAAC;IAC1C,YAAY,GAAmB,EAAE,CAAC;IAClC,YAAY,GAAG,CAAC,CAAC;IACjB;;;;OAIG;IACH,eAAe,GAAmC,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3F,YAAY,GAAqB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACtF,kGAAkG;IAClG,iBAAiB,GAAqB,IAAI,CAAC;IAC3C,QAAQ,GAAqB,IAAI,CAAC;IAClC,cAAc,GAAG,CAAC,CAAC;IACnB,WAAW,GAAG,CAAC,CAAC;IAChB,gGAAgG;IAChG,QAAQ,GAAsB,IAAI,CAAC;IACnC,0GAA0G;IAC1G,cAAc,GAA6B,IAAI,CAAC;IAChD,oBAAoB,GAA6B,IAAI,CAAC;IACtD,oBAAoB,GAAmB,EAAE,CAAC;IAC1C,0BAA0B,GAAmB,EAAE,CAAC;IAChD,8FAA8F;IAC9F,aAAa,GAAyB,IAAI,CAAC;IAC3C,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAC;IAClD,uFAAuF;IACvF,aAAa,GAA+B,IAAI,CAAC;IACjD,8CAA8C;IAC9C,UAAU,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,6FAA6F;IAC7F,WAAW,GAAG,CAAC,CAAC;IAChB;;;;;;;OAOG;IACH,aAAa,GAAsC,IAAI,CAAC;IACxD,sFAAsF;IACtF,aAAa,GAAG,CAAC,CAAC;IAClB,YAAY,GAAG,CAAC,CAAC;IACjB,OAAO,CAAY;IACnB,OAAO,CAAY;IACnB,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IAClC,UAAU,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,SAAS,GAAG,CAAC,CAAC;IACd,YAAY,CAAY;IACxB,6EAA6E;IAC7E,eAAe,CAAY;IAC3B,gBAAgB,GAAG,CAAC,CAAC,CAAC;IACtB,UAAU,GAAqB,IAAI,CAAC;IACpC,SAAS,GAAqB,IAAI,CAAC;IACnC,aAAa,GAAG,CAAC,CAAC;IAClB,YAAY,GAAG,CAAC,CAAC;IACjB,gBAAgB,GAAG,CAAC,CAAC,CAAC;IACtB,UAAU,GAAqB,IAAI,CAAC;IACpC,QAAQ,GAAuB,IAAI,CAAC;IACpC,kFAAkF;IAClF,mEAAmE;IACnE,YAAY,GAAG,CAAC,CAAC,CAAC;IAClB,YAAY,GAAG,CAAC,CAAC;IACjB,oEAAoE;IACpE,aAAa,GAAG,CAAC,CAAC;IAClB,wFAAwF;IACxF,uFAAuF;IACvF,0BAA0B;IAC1B,eAAe,GAAG,CAAC,CAAC,CAAC;IACrB,eAAe,GAAG,CAAC,CAAC;IACpB,6FAA6F;IAC7F,cAAc,GAAG,CAAC,CAAC;IACnB,6EAA6E;IAC7E,OAAO,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,aAAa,GAAG,CAAC,CAAC,CAAC;IACnB,cAAc,GAAG,CAAC,CAAC,CAAC;IACpB,SAAS,GAAqB,IAAI,CAAC;IACnC,aAAa,GAAqB,IAAI,CAAC;IACvC,KAAK,GAAqB,IAAI,CAAC;IAC/B,OAAO,GAAqB,IAAI,CAAC;IACjC,SAAS,GAAqB,IAAI,CAAC;IACnC,aAAa,GAAG,KAAK,CAAC;IACtB,MAAM,GAAG,CAAC,CAAC;IACX,mFAAmF;IACnF,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,+BAA+B;IAC/B,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,wDAAwD;IACxD,YAAY,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAClC,UAAU,GAAwB,IAAI,CAAC;IACvC,UAAU,GAAwB,IAAI,CAAC;IACvC,sGAAsG;IACtG,QAAQ,GAA0C,IAAI,CAAC;IACvD;;;OAGG;IACH,SAAS,GAA4B,IAAI,CAAC;IAC1C,KAAK,GAAyB,IAAI,CAAC;IACnC,aAAa,GAAwB,IAAI,CAAC;IAC1C,YAAY,GAAG,CAAC,CAAC,CAAC;IAClB,+DAA+D;IAC/D,MAAM,GAAG,CAAC,CAAC;IACX,OAAO,GAAG,CAAC,CAAC;IACZ,YAAY,GAAG,IAAI,CAAC;IACpB,UAAU,GAAG,KAAK,CAAC;IAEnB,YAAY,MAAiB,EAAE,MAAwB,EAAE,KAAgB,EAAE,SAAwB,EAAE,QAAsB,EAAE,QAAgB;QAC3I,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxI,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,eAAe,EAAE,CAAC,CAAC;QAC3J,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1I,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrI,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/J,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvK,CAAC;IAED,wGAAwG;IACxG,KAAK,CAAC,IAAI,CAAC,KAAoB;QAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnF,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACzH,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;SACrE,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,IAAI,CAAC,aAAa,EAAE,CAAC;IAChD,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAC7D,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK;YAAE,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,mDAAmD,EAAE,0CAA0C,CAAC,CAAC;QACrK,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACvF,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;IAC9D,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC9G,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,MAAoB,EAAE,OAAe,EAAE,SAAS,GAAG,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QACtC,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,OAAO,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC;YACzB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,iBAAiB;YAC9D,MAAM,EAAE;gBACN,MAAM;gBACN,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK;gBAChD,OAAO,EAAE;oBACP;wBACE,WAAW,EAAE,YAAY;wBACzB,UAAU,EAAE;4BACV,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;4BACrD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;4BACtD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;yBACvD;qBACF;oBACD,GAAG,CAAC,MAAM;wBACR,CAAC,CAAE;4BACC;gCACE,WAAW,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc;gCAChE,QAAQ,EAAE,UAAU;gCACpB,UAAU,EAAE;oCACV,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;oCACrD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;oCACtD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE;iCACzF;6BACF;yBAC0B;wBAC/B,CAAC,CAAC,EAAE,CAAC;oBACP,4FAA4F;oBAC5F,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClC;aACF;YACD,QAAQ,EAAE;gBACR,MAAM;gBACN,UAAU,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE;gBAClF,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,qBAAqB,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;aACtN;YACD,SAAS,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;YACrG,mFAAmF;YACnF,YAAY,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE;SAC7F,CAAC,CAAC;IACL,CAAC;IAED,uGAAuG;IACvG,cAAc,CAAC,OAAyB;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACjF,CAAC,EAAE,EAAE,EAAE;gBACL,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,IAAI,CAAC,UAAU;oBAAE,OAAO;gBAC5B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,aAAa;oBAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,aAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpN,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;gBACN,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,WAAW,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpE,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;YACzE,CAAC,CACF,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU;oBAAE,OAAO;gBAC5B,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;gBAC/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,8FAA8F;QAC9F,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;YACnE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,SAAS;YAChL,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,IAAI,CAAC,UAAU;oBAAE,OAAO;gBAC5B,IAAI,GAAG;oBAAE,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;;oBAClC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,eAAe,GAAG,IAAI,GAAG,EAAW,CAAC;IAErC;;;;OAIG;IACH,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,iBAAiB;YAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3E,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3F,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,0FAA0F;IAC1F,UAAU,CAAC,CAAS;QAClB,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACzG,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;QACnD,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,6HAA6H;IAC7H,YAAY,CAAC,WAAW,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC;QAC/J,OAAO,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC;YACzB,KAAK,EAAE,oBAAoB,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;YACrF,MAAM,EAAE;gBACN,MAAM,EAAE,WAAW;gBACnB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE;oBACP,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE;oBAClG,GAAG,CAAC,MAAM;wBACR,CAAC,CAAE;4BACC;gCACE,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc;gCAChD,QAAQ,EAAE,UAAU;gCACpB,UAAU,EAAE;oCACV,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;oCACrD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;oCACtD,gEAAgE;oCAChE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iCACpH;6BACF;yBAC0B;wBAC/B,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClC;aACF;YACD,SAAS,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;YACnG,YAAY,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE;SAC3F,CAAC,CAAC;IACL,CAAC;IAED,8FAA8F;IAC9F,kBAAkB;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzB,IAAI,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;QACxC,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO;QAC3D,MAAM,MAAM,GAAG,CAAC,QAA2B,EAAE,KAAa,EAAE,EAAE,CAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3C,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YAC1B,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,EAAE;YACtB,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACtC,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAE;gBACjH,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAW,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAClI;SACF,CAAC,CACH,CAAC;QACJ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;QACvE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5H,2DAA2D;QAC3D,MAAM,OAAO,GAAG,CAAC,QAA2B,EAAE,KAAa,EAAE,EAAE,CAC7D,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3C,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YAC1B,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,EAAE;YACtB,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACtC,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAE;gBACjH,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAW,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjI,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAS,CAAC,UAAU,EAAE,EAAE;aACtD;SACF,CAAC,CACH,CAAC;QACJ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClI,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,kCAAkC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7J,CAAC;IAED,6DAA6D;IAC7D,eAAe,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChN,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;QAC/C,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;gBAAE,IAAI,CAAC,aAAa,EAAE,CAAC;;gBACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAgC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,IAAI,GAAG,CAAC;YAAE,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,GAAG,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;QACrK,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,aAAa,CAAC;QAC3C,IAAI,IAAI,GAAG,CAAC;YAAE,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,GAAG,EAAE,EAAE,WAAW,EAAE,aAAa,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtL,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACxG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CACxC,CAAC,EAAE,EAAE,EAAE;YACL,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO;YAC5B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;gBAAE,IAAI,CAAC,aAAa,EAAE,CAAC;;gBACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAChC,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,WAAW,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,0EAA0E,EAAE,GAAG,CAAC,CAAC;QACjG,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY;QAChB,SAAS,CAAC;YACR,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,CAAC,WAAW,CAAC;YAC7C,IAAI,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,SAAS,CAAC,cAAc,EAAE,8DAA8D,IAAI,CAAC,WAAW,EAAE,EAAE,yEAAyE,CAAC,CAAC;YACvN,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc;gBAAE,OAAO;QACtE,CAAC;IACH,CAAC;IAED,MAAM,GAAyB,IAAI,CAAC;IACpC,eAAe,GAAG,CAAC,CAAC,CAAC;IACrB,WAAW,GAAyB,IAAI,CAAC;IACzC,2EAA2E;IAC3E,WAAW,GAAG,EAAE,CAAC;IAEjB,qEAAqE;IACrE,IAAI,OAAO,CAAC,CAAa;QACvB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,uFAAuF;IACvF,IAAI,MAAM,CAAC,CAAkB;QAC3B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,wFAAwF;IACxF,IAAI,WAAW,CAAC,GAAgB;QAC9B,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,2FAA2F;IAC3F,eAAe;QACb,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,wCAAwC,EAAE,6DAA6D,CAAC,CAAC;QACvK,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,6CAA6C,EAAE,wDAAwD,CAAC,CAAC;QAC7J,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,SAAS,CAAC,YAAY,EAAE,wCAAwC,EAAE,yDAAyD,CAAC,CAAC;QAC3J,OAAO;YACL,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE;YAC9F,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;YAChD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE;YAChG,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE;YACvD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE;YACzF,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE;YACnG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE;YACtG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE;YAChE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE;YAChE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACzD,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE;YACjE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC7C,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YAChD,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE;SACpF,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,aAAa;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;QAC9B,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAC1B,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW;YAAE,OAAO;QAChP,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAChB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC;QACtD,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,gGAAgG;QAChG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,0GAA0G;QAC1G,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACV,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACV,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE5C,aAAa;QACX,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QAC1S,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,mFAAmF;IACnF,WAAW,CAAC,OAA4B;QACtC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5L,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,gFAAgF;IAChF,UAAU;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpG,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY;YAAE,OAAO;QACxC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,8EAA8E;IAC9E,IAAI,QAAQ;QACV,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IAC9E,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,GAAiB,EAAE,EAAU,EAAE,MAAmB,EAAE,QAAgB,EAAE,OAAO,GAAG,QAAQ;QACtG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,QAAQ;YAAE,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACvE,gGAAgG;QAChG,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;QACzB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,sFAAsF;YACtF,WAAW,CAAC,EAAG,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC;QAChC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACpC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,kBAAkB,CAAC,QAAgB;QACjC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,mFAAmF;QACnF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,GAAG,cAAc,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5L,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,gFAAgF;IAChF,cAAc,CAAC,KAAa;QAC1B,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,2FAA2F;IAC3F,IAAI,eAAe;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,8DAA8D;IAC9D,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,iCAAiC;IACjC,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAAmB,EAAE,QAAgB,EAAE,MAA0B;QACzE,wFAAwF;QACxF,gFAAgF;QAChF,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,kFAAkF;QAClF,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,CAAC;YACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,QAAQ;YAAE,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3E,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAgB,EAAE,GAAgB,EAAE,CAAqB;QAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;gBAAE,IAAI,CAAC,aAAa,EAAE,CAAC;;gBACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACxF,IAAI,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;QAC3C,kFAAkF;QAClF,kFAAkF;QAClF,MAAM,GAAG,GAAG,IAA+B,CAAC;QAC5C,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACzF,oFAAoF;YACpF,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC;gBAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1H,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,8FAA8F;YAC9F,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtD,IAAI,GAAG,IAAI,KAAK;oBAAE,SAAS;gBAC3B,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAW,EAAE,KAAK,GAAG,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,GAAG,eAAe,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,eAAe,CAAC,CAAC;gBACpI,IAAI,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,eAAe,CAAC;YAC1C,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3G,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAW,EAAE,IAAI,CAAC,QAAQ,GAAG,eAAe,EAAE,IAA+B,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,eAAe,EAAE,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC;YAClK,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,IAAgB,EAAE,GAAgB,EAAE,CAAqB;QACrE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5K,CAAC;QACD,IAAI,KAAK,GAAG,CAAC;YAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAA+B,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9E,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,2DAA2D;IAC3D,WAAW,GAAG,CAAC,CAAC;IAEhB,0FAA0F;IAC1F,aAAa;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,GAAG,YAAY,CAAC;QAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;YACtD,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YAC3B,6DAA6D;YAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtO,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;YACpD,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChL,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACxE,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,IAAiC,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACrE,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAgC,CAAC,CAAC;QAC9E,CAAC;QACD,gEAAgE;QAChE,IAAI,CAAC,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,kBAAkB,GAAG,YAAY,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;gBAChE,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC;gBAClC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC5D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,GAAG,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACzN,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,GAAG,iBAAiB,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC/J,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;gBACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,OAAO,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBACjF,MAAM,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACrD,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,IAAiC,CAAC,CAAC;YAClG,CAAC;YACD,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBAClE,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,QAAS,EAAE,CAAC,CAAC,EAAE,GAAG,iBAAiB,EAAE,CAAC,CAAC,IAAgC,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,kIAAkI;IAClI,WAAW;QACT,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;YAAE,OAAO;QAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;gBAAE,SAAS;YAC3C,IAAI,CAAC,CAAC,OAAO;gBAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;;gBACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC9B,IAAI,IAAI,CAAC,aAAa;gBAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YACjE,IAAI,GAAG;gBAAE,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,IAAiC,CAAC,CAAC;QACxF,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS;gBAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAgC,CAAC,CAAC;QACjI,CAAC;QACD,+FAA+F;QAC/F,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU;gBAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,IAAiC,CAAC,CAAC;QAC/I,CAAC;QACD,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;IACnC,CAAC;IAED,cAAc;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAC1B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,CAAC,OAAO;YAAE,OAAO;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,cAAc,CAAC,MAAmB,EAAE,EAAU,EAAE,MAAc;QAC5D,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC9F,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,MAAmB,EAAE,EAAU,EAAE,MAAc;QACrD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;YAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YACxB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACrB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACrB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE;gBAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;YAC5E,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACV,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;gBACvB,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,sFAAsF;QACtF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC;gBAAE,SAAS;YACtB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;oBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC;gBACrJ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACf,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChB,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,GAAqB,EAAE,IAAY,EAAE,KAAa,EAAE,KAAa,EAAa,EAAE;YAC5F,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI;gBAAE,OAAO,GAAG,CAAC;YACxC,GAAG,EAAE,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,OAAO,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,CAAC,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,mBAAmB,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9H,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,0BAA0B,EAAE,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9I,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,iBAAiB,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxK,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,0BAA0B,EAAE,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YAChI,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO;YACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,oBAAoB,EAAE,cAAc,CAAC,OAAO,CAAC;YACjG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,cAAc,EAAE,oBAAoB,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAClI,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,qCAAqC;IAC7D,CAAC;IAED,UAAU,GAAG,CAAC,CAAC;IAEf,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAChF,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QACtC,MAAM,WAAW,GAAwB;YACvC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;YAClD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;YACrD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE;YACpD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;YAChD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;YAClD,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;SAChE,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,IAAI,EAAE,CAAC;YACT,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7J,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YAClJ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAClK,iGAAiG;QACjG,IAAI,CAAC,WAAW,CACd,MAAM;YACJ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACzR,CAAC,CAAC;gBACE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;gBAClD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;gBACrD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;gBAClD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE;gBACvD,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE;gBAC3D,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,EAAE;gBAChF,GAAG,IAAI,CAAC,eAAe,EAAE;aAC1B,CACN,CAAC;QACF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,qGAAqG;IACrG,cAAc,CAAC,IAA0B;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAS,CAAC;QAC1B,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,UAAW,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QACtC,4FAA4F;QAC5F,4FAA4F;QAC5F,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,EAAE,CAAC,QAAQ,CAAC;QAC7F,6FAA6F;QAC7F,4DAA4D;QAC5D,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,EAAE,CAAC,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACxG,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,0BAA0B,CAAC,MAAM,KAAK,EAAE,CAAC,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACrH,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,iGAAiG;YACjG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAU,EAAE,QAAQ,CAAC,CAAC;YAC/C,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;gBACzC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,CAAC;gBAC5J,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChL,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;gBAC9E,IAAI,OAAO;oBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAS,CAAC,CAAC;gBAClE,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAC5B,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;gBACpJ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBACxB,gFAAgF;oBAChF,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;oBACnC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;oBACnF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;oBAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BAAE,SAAS;wBAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAChB,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,OAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;wBACzF,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1D,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC5B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAE,SAAS;oBAC/C,gFAAgF;oBAChF,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAE,SAAS;oBAC7F,IAAI,MAAM;wBAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,OAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;oBAC/G,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;gBAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,sGAAsG;IACtG,YAAY,CAAC,GAAkD,EAAE,GAAG,GAAG,CAAC,EAAE,OAAiB,KAAK,EAAE,KAAK,GAAG,CAAC;QACzG,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzB,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,SAAU,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QACtC,4FAA4F;QAC5F,uEAAuE;QACvE,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,IAAI,IAAI,KAAK,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;gBAAE,SAAS;YACvE,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAC7C,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS;gBACvF,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC7D,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAE,MAAM;oBAC5D,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzB,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,KAAK,GAAG,IAAI,CAAC;gBACf,CAAC;gBACD,IAAI,MAAM;oBAAE,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,OAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;gBAC9G,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,GAAkD,EAAE,CAAS,EAAE,QAAgB;QACvF,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,UAAW,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5D,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/C,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6GAA6G;IAC7G,aAAa,CAAC,IAA0B;QACtC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;wBAAE,MAAM;oBAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,KAAK,GAAG,IAAI,CAAC;gBACf,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChB,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,OAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;gBACzF,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxD,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACvI,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IACxI,CAAC;IAED,4FAA4F;IAC5F,gIAAgI;IAChI,kBAAkB,GAAG,KAAK,CAAC;IAC3B,WAAW,GAAsB,IAAI,CAAC;IACtC,aAAa,CAAa;IAC1B,QAAQ,GAAG,CAAC,CAAC;IACb,QAAQ,GAAG,CAAC,CAAC;IAEb,8FAA8F;IAC9F,aAAa,CAAC,KAAa,EAAE,MAAc;QACzC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO;QACzF,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;QACvB,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QAC5B,oGAAoG;QACpG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAC3C,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;YACrB,aAAa,EAAE,MAAM;YACrB,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,QAAQ,GAAG,eAAe,CAAC,iBAAiB;SACtG,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,wCAAwC;QACnE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,sFAAsF;IACtF,KAAK,GAA6B,IAAI,CAAC;IACvC,aAAa,GAAG,KAAK,CAAC;IACtB,SAAS,GAAqB,EAAE,CAAC;IACjC,UAAU,GAAmB,EAAE,CAAC;IAEhC,UAAU;QACR,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAC7D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,MAAM,IAAI,GAAG;;;;;;;;;;EAUf,CAAC;QACC,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC;QACzD,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACnO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,sDAAsD;QACnF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2FAA2F;IAC3F,WAAW,CAAC,OAA0B;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC;YAAE,OAAO;QACrD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,uBAAuB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3N,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/L,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,kHAAkH;IAClH,WAAW;QACT,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC;IACxD,CAAC;IAED,qGAAqG;IACrG,MAAM,GAAwB,IAAI,CAAC;IAEnC,0FAA0F;IAC1F,kGAAkG;IAClG,QAAQ,GAAuB,IAAI,CAAC;IACpC,eAAe,GAAG,CAAC,CAAC,CAAC;IACrB,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,UAAU,GAAG,CAAC,CAAC;IAEf,iGAAiG;IACjG,aAAa;QACX,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5B,MAAM,KAAK,GAA+D,EAAE,CAAC;QAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5K,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7H,CAAC;IAED,mEAAmE;IACnE,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAC7G,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7W,CAAC;IAED,mGAAmG;IACnG,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,cAAc,GAA4D,IAAI,CAAC;IAE/E,mIAAmI;IACnI,aAAa;QACX,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzB,IAAI,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAClG,IAAI,CAAC,cAAc,KAAK;YACtB,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,MAAM,EAAE,IAAI,YAAY,CAAC,YAAY,GAAG,EAAE,CAAC;YAC3C,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;YACxC,aAAa,EAAE,EAAE,CAAC,aAAa;YAC/B,aAAa,EAAE,UAAU,CAAC,MAAM;YAChC,YAAY,EAAE,qBAAqB;YACnC,MAAM,EAAE,WAAW;SACpB,CAAC;QACF,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IACD,YAAY,GAAG,CAAC,CAAC;IAEjB,yFAAyF;IACzF,cAAc,GAAqB,IAAI,CAAC;IACxC,YAAY,GAAsB,IAAI,CAAC;IACvC,aAAa,GAAG,KAAK,CAAC;IACtB,yFAAyF;IACzF,aAAa,GAAG,CAAC,CAAC;IAElB,8EAA8E;IAC9E,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACxD,CAAC;IAED,4HAA4H;IAC5H,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAClH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;YAC5D,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChJ,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YAChE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnM,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;QACD,sEAAsE;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QACxF,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACnI,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;IAChM,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,MAAM,IAAI,GAAG,CAAC,IAAsB,EAAE,IAAsB,EAAE,KAAa,EAAoB,EAAE;YAC/F,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACpF,IAAI,EAAE,OAAO,EAAE,CAAC;YAChB,iGAAiG;YACjG,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;YACnJ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC7C,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,IAAI,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;QAC7G,IAAI,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC;IAC9H,CAAC;IAED,uGAAuG;IACvG,OAAO;QACL,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;QACvH,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,YAAY,GAAG,KAAK,CAAC;IACrB,eAAe,GAAG,KAAK,CAAC;IACxB,SAAS,GAAqB,IAAI,CAAC;IACnC,YAAY,GAAqB,IAAI,CAAC;IACtC,UAAU,GAAqB,IAAI,CAAC;IACpC,8EAA8E;IACrE,OAAO,GAAG,IAAI,OAAO,EAAwB,CAAC;IAEvD,+HAA+H;IAC/H,IAAI,SAAS;QACX,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;IAC9J,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,IAA0B,EAAE,KAAwC,EAAE,OAAiD,EAAE,SAAyB,EAAE,YAAwB;QACvL,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO;QAClD,2DAA2D;QAC3D,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7I,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAC9C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YACxD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,EAAE,GAAG,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,GAA6B,IAAI,CAAC;QAC3C,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,+FAA+F;YAC/F,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;gBAAE,SAAS;YAC1E,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,SAAS;YACvF,4FAA4F;YAC5F,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACzG,IAAI,KAAK,IAAI,CAAC,IAAI;gBAAE,SAAS;YAC7B,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,CAAC,EAAE;gBAAE,SAAS;YAClB,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;oBAAE,SAAS;gBAC1C,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;YACD,4FAA4F;YAC5F,IAAI,IAAI;gBAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;YACzN,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,IAAI;gBAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,EAAE;YAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,SAAU,CAAC,CAAC;IAC5C,CAAC;IAED,+FAA+F;IAE/F;;;;OAIG;IACH,iBAAiB,CAAC,MAAwB;QACxC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAClD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;YACtB,sFAAsF;YACtF,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC5I,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;iBACtB,MAAM,CAAC;gBACN,KAAK,EAAE,qBAAqB,CAAC,EAAE;gBAC/B,MAAM,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE;oBAC1B,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,gBAAgB;oBACjE,OAAO,EAAE;wBACP;4BACE,WAAW,EAAE,YAAY;4BACzB,UAAU,EAAE;gCACV,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;gCACrD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;gCACtD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;6BACvD;yBACF;wBACD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjC,6FAA6F;wBAC7F,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE;qBACnG;iBACF;gBACD,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBACzH,SAAS,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;gBAC7F,YAAY,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE;aAC3F,CAAC;iBACD,IAAI,CACH,CAAC,CAAC,EAAE,EAAE;gBACJ,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACnC,CAAC,EACD,CAAC,GAAY,EAAE,EAAE;gBACf,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,CAAC,oBAAoB,CAAC,0CAA0C,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9M,CAAC,CACF,CAAC;YACJ,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,iBAAiB,GAA4B,IAAI,CAAC;IACzC,WAAW,GAAiC,EAAE,CAAC;IAC/C,iBAAiB,GAA4B,EAAE,CAAC;IAChD,mBAAmB,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChE,cAAc,GAAG,EAAE,CAAC;IACpB,kBAAkB,GAAG,CAAC,CAAC,CAAC;IACxB,oBAAoB,GAAG,CAAC,CAAC;IAEzB,8IAA8I;IAC9I,cAAc,CAAC,CAAS,EAAE,MAAiB;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QACzF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACjF,IAAI,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YAChC,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;YAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC9B,KAAK,EAAE,qBAAqB,CAAC,EAAE;gBAC/B,MAAM,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC/B,OAAO,EAAE;oBACP,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;oBACpC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;oBAC7C,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE;oBAC1D,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1F;aACF,CAAC,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChB,CAAC;IAED,yGAAyG;IACzG,IAAI,WAAW;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC3F,CAAC;IAED,uGAAuG;IACvG,kBAAkB,CAAC,OAA0B;QAC3C,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5E,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5I,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACvK,sFAAsF;QACtF,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAU,EAAE,CAAC;YAClK,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,KAAiB,EAAE,KAAa,EAAE,KAAa,EAAE,SAAS,GAAG,KAAK;QAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,CAAC,eAAe,CAAC;YACzB,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBAAE,OAAO;gBAClD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY;oBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC/E,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;gBACjE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,UAAW,CAAC,CAAC;gBACvC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;SACF,CAAC,CAAC;QACH,iGAAiG;QACjG,sFAAsF;QACtF,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;YAChB,qGAAqG;YACrG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YACrD,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACnD,KAAK,CAAC,OAAO,CAAC;gBACZ,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;gBACnF,MAAM,EAAE,CAAC,cAAc,CAAC;gBACxB,KAAK,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;gBACxD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;oBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,EAAE,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ;wBAAE,OAAO;oBAC1F,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,OAAO,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtM,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;YAC5C,oEAAoE;YACpE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YAC1F,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACnF,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;wBAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAChH,CAAC;SACF,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,IAAI;YAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO;QAChC,4FAA4F;QAC5F,KAAK,CAAC,OAAO,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE;YACpC,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBACxB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM;oBAAE,OAAO;gBAChH,OAAO,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtH,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;SACF,CAAC,CAAC;QACH,KAAK,CAAC,OAAO,CAAC;YACZ,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,CAAC,cAAc,CAAC;YACvB,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;YACxD,yEAAyE;YACzE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;YAC3D,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;oBACpC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;gBACtC,CAAC;;oBAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;oBAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxE,CAAC;SACF,CAAC,CAAC;QACH,oGAAoG;QACpG,0FAA0F;QAC1F,KAAK,CAAC,OAAO,CAAC;YACZ,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,CAAC,iBAAiB,CAAC;YAC3B,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC;oBAAE,OAAO;gBAC9E,OAAO,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAY,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;gBACvH,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;SACF,CAAC,CAAC;QACH,KAAK,CAAC,OAAO,CAAC;YACZ,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,CAAC,iBAAiB,CAAC;YAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;YACxD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;YAChE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,OAAO;gBAClD,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBACzC,CAAC;;oBAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAChD,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,6FAA6F;IAE7F,sGAAsG;IACtG,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IACjF,CAAC;IAED,2GAA2G;IAC3G,gBAAgB,CAAC,KAAa,EAAE,MAAc;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAChG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACpL,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnJ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,wDAAwD;YACnF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oFAAoF;IACpF,gBAAgB,CAAC,OAA0B;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC;YAAE,OAAO;QACrD,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;YACnD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7H,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,6BAA6B,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3O,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACzM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,wGAAwG;IACxG,UAAU,CAAC,CAAS;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QACrF,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YACjD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC3C,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACzB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;QACnD,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,0BAA0B,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5I,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,WAAW,GAAsB,IAAI,CAAC;IACtC,UAAU,GAAqB,IAAI,CAAC;IACpC,cAAc,GAAqB,EAAE,CAAC;IACtC,eAAe,GAAmB,EAAE,CAAC;IACrC,YAAY,GAAqB,EAAE,CAAC;IACpC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IAEvB,mBAAmB,CAAC,KAAiB,EAAE,KAAa,EAAE,KAAa,EAAE,SAAkB,EAAE,IAAmB;QAC1G,qFAAqF;QACrF,uEAAuE;QACvE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3B,KAAK,CAAC,OAAO,CAAC;YACZ,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,MAAM,EAAE,CAAC,gBAAgB,CAAC;YAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;oBAAE,OAAO;gBAClD,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY;oBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC3D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACvC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,aAAc,CAAC,CAAC;gBAC1C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;SACF,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,iGAAiG;QACjG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,OAAO,CAAC;YACZ,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;YACpF,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;YACxD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;YACzE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACrD,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK;oBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;wBAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpF,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACM,QAAQ,GAA6C,EAAE,CAAC;IAEjE,YAAY,CAAC,IAA0B,EAAE,GAAG,GAAG,CAAC,EAAE,OAAiB,KAAK,EAAE,KAAK,GAAG,CAAC;QACjF,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,KAAK,OAAO;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,IAAI,KAAK,OAAO;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACvE,wEAAwE;QACxE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;YACpE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,qBAAqB,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC,CAAC;YAC3J,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,oFAAoF;IACpF,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,6IAA6I;IAC7I,IAAI,UAAU;QACZ,qGAAqG;QACrG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,oGAAoG;IACpG,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,qHAAqH;IACrH,YAAY,CAAC,OAA0B;QACrC,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACjJ,CAAC;IAED,+DAA+D;IAC/D,WAAW;QACT,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,oGAAoG;IACpG,WAAW,CAAC,OAA0B;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1H,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QACxD,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9E,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wFAAwF;IACxF,eAAe,GAAG,CAAC,CAAC;IAEpB,0DAA0D;IAC1D,OAAO;QACL,MAAM,EAAE,GAAG,IAAI,CAAC,SAAU,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,KAAK,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAC9C,GAAG,EAAE;YACH,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,8FAA8F;YAC9F,MAAM,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,yEAAyE;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC1D,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK;oBAAE,SAAS;gBACjC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACV,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC,EACD,GAAG,EAAE;YACH,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC,CACF,CAAC;IACJ,CAAC;IAED,+GAA+G;IAC/G,UAAU;QACR,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACxB,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;oBAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACrI,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,gFAAgF;IAChF,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,MAAM;QACJ,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvR,CAAC;IAED,6EAA6E;IAC7E,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,oDAAoD;IACpD,OAAO;QACL,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE,CAAC,EAAE,OAAO,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Linked from shaders/scene/cull.wesl. */
|
|
2
|
+
export declare const sceneCull: {
|
|
3
|
+
readonly hash: "4bded9ad27febb01";
|
|
4
|
+
readonly wgsl: "struct DrawArgs {\nindex_count: u32,\ninstance_count: atomic<u32>,\nfirst_index: u32,\nbase_vertex: i32,\nfirst_instance: u32,\n}\nstruct CullParams {\ncount: u32,\nlod_scale: f32,\nerror_px: f32,\nmin_radius_px: f32,\n}\n@group(0) @binding(0) var<uniform> camera: Camera;\n@group(0) @binding(1) var<storage, read> instances: array<vec4u>;\nfn load_instance(i: u32) -> Instance {\nlet cap = arrayLength(&instances) / 3u;\nlet a = bitcast<vec4f>(instances[2u * i]);\nlet b = bitcast<vec4f>(instances[2u * i + 1u]);\nlet s = instances[2u * cap + i];\nreturn Instance(a.xyz - camera.origin.xyz, a.w, b, s.x, s.y, s.z, s.w);\n}\n@group(0) @binding(2) var<storage, read> meshes: array<MeshInfo>;\n@group(0) @binding(3) var<storage, read_write> args: array<DrawArgs>;\n@group(0) @binding(4) var<uniform> params: CullParams;\nfn place(inst: Instance) -> u32 {\nlet m = meshes[inst.mesh];\nlet c = inst.pos + quat_rotate(inst.rot, m.center * inst.scale);\nlet r = m.radius * inst.scale;\nfor (var p = 0u; p < 6u; p++) {\nlet plane = camera.frustum[p];\nif (dot(plane.xyz, c) + plane.w < -r) {\nreturn 0xffffffffu;\n}\n}\nreturn place_lod(inst, c, r, 0u, 0u);\n}\nfn place_lod(inst: Instance, c: vec3f, r: f32, slots: u32, region: u32) -> u32 {\nlet m = meshes[inst.mesh];\nlet px = params.lod_scale / max(length(c) - r, 1e-3);\nif (r * px < params.min_radius_px) {\nreturn 0xffffffffu;\n}\nvar lod = 0u;\nfor (var l = 1u; l < m.lod_count; l++) {\nif (m.error[l / 4u][l % 4u] * inst.scale * px > params.error_px) {\nbreak;\n}\nlod = l;\n}\nlet k = atomicAdd(&args[m.draw_base + lod + slots].instance_count, 1u);\nreturn m.instance_base + lod * m.instance_count + k + region;\n}\n@group(0) @binding(5) var<storage, read_write> visible: array<u32>;\n@compute @workgroup_size(64) fn cull(@builtin(global_invocation_id) id: vec3u) {\nlet i = id.x;\nif (i >= params.count) {\nreturn;\n}\nlet dst = place(load_instance(i));\nif (dst != 0xffffffffu) {\nvisible[dst] = i;\n}\n}\n@group(0) @binding(6) var<storage, read_write> compact: array<Instance>;\n@compute @workgroup_size(64) fn cull_compact(@builtin(global_invocation_id) id: vec3u) {\nlet i = id.x;\nif (i >= params.count) {\nreturn;\n}\nlet inst = load_instance(i);\nlet dst = place(inst);\nif (dst != 0xffffffffu) {\ncompact[dst] = inst;\n}\n}\nstruct Camera {\nview_proj: mat4x4f,\nfrustum: array<vec4f, 6>,\nlight_dir: vec4f,\norigin: vec4f,\n}\nstruct Instance {\npos: vec3f,\nscale: f32,\nrot: vec4f,\ncolor: u32,\nmesh: u32,\nmaterial: u32,\nskin: u32,\n}\nstruct MeshInfo {\ncenter: vec3f,\nradius: f32,\nlod_count: u32,\ndraw_base: u32,\ninstance_base: u32,\ninstance_count: u32,\nerror: array<vec4f, 2>,\n}\nfn quat_rotate(q: vec4f, v: vec3f) -> vec3f {\nlet t = 2.0 * cross(q.xyz, v);\nreturn v + q.w * t + cross(q.xyz, t);\n}";
|
|
5
|
+
};
|
|
6
|
+
/** Linked from shaders/scene/draw.wesl. */
|
|
7
|
+
export declare const sceneDraw: {
|
|
8
|
+
readonly hash: "6a963ff2453af8ae";
|
|
9
|
+
readonly wgsl: "struct Material {\nbase_color: vec4f,\nmaps: vec4u,\nparams: array<vec4f, 2>,\n}\nstruct SurfaceInput {\nuv: vec2f,\nnormal_world: vec3f,\nposition_world: vec3f,\nview_dir: vec3f,\ninstance_color: vec3f,\ntime: f32,\nmaps: vec4u,\nddx: vec2f,\nddy: vec2f,\ntangent: vec3f,\nbitangent: vec3f,\n}\nstruct Surface {\nbase_color: vec3f,\nopacity: f32,\nmetalness: f32,\nroughness: f32,\nemissive: vec3f,\nnormal: vec3f,\nocclusion: f32,\n}\nconst MAX_MATERIALS: u32 = 256u;\n@group(0) @binding(0) var<uniform> camera: Camera;\n@group(0) @binding(1) var<storage, read> instances: array<vec4u>;\nfn load_instance(i: u32) -> Instance {\nlet cap = arrayLength(&instances) / 3u;\nlet a = bitcast<vec4f>(instances[2u * i]);\nlet b = bitcast<vec4f>(instances[2u * i + 1u]);\nlet s = instances[2u * cap + i];\nreturn Instance(a.xyz - camera.origin.xyz, a.w, b, s.x, s.y, s.z, s.w);\n}\n@group(0) @binding(2) var<storage, read> visible: array<u32>;\n@group(0) @binding(3) var<uniform> materials: array<Material, MAX_MATERIALS>;\n@group(0) @binding(4) var srgb_maps: texture_2d_array<f32>;\n@group(0) @binding(5) var map_sampler: sampler;\n@group(0) @binding(6) var linear_maps: texture_2d_array<f32>;\nstruct Lighting {\nsun_color: vec4f,\nenv: vec4f,\nsh: array<vec4f, 9>,\nscreen: vec4f,\n}\n@group(0) @binding(7) var<uniform> lighting: Lighting;\n@group(0) @binding(8) var env_cube: texture_cube<f32>;\n@group(0) @binding(9) var srgb_maps8: texture_2d_array<f32>;\n@group(0) @binding(10) var linear_maps8: texture_2d_array<f32>;\n@group(0) @binding(11) var<uniform> lights: Lights;\n@group(0) @binding(12) var<uniform> cluster: ClusterParams;\n@group(0) @binding(13) var light_bins: texture_2d<u32>;\n@group(0) @binding(18) var<uniform> material_ext: array<vec4u, 1024>;\n@group(0) @binding(19) var scene_color: texture_2d<f32>;\nstruct MaterialExt {\ncoat: f32,\ncoat_rough: f32,\ntransmission: f32,\nsheen: vec4f,\nior: f32,\nthickness: f32,\natt_distance: f32,\natt_color: vec3f,\ndispersion: f32,\n}\nstruct Shadow {\nview_proj: array<mat4x4f, 4>,\nsplits: vec4f,\ntexel: vec4f,\nparams: vec4f,\npcf: vec4f,\n}\n@group(0) @binding(14) var<uniform> shadow: Shadow;\n@group(0) @binding(15) var shadow_atlas: texture_depth_2d;\n@group(0) @binding(16) var shadow_sampler: sampler_comparison;\n@group(0) @binding(17) var palette: texture_2d<f32>;\nstruct VertexOut {\n@builtin(position) clip: vec4f,\n@location(0) normal: vec3f,\n@location(1) color: vec3f,\n@location(2) @interpolate(flat, either) material: u32,\n@location(3) uv: vec2f,\n@location(4) position: vec3f,\n@location(5) @interpolate(flat, either) scale: f32,\n}\nfn shade(inst: Instance, position: vec3f, normal: vec3f, uv: vec2f) -> VertexOut {\nlet world = quat_rotate(inst.rot, position * inst.scale) + inst.pos;\nvar out: VertexOut;\nout.clip = camera.view_proj * vec4f(world, 1.0);\nout.normal = quat_rotate(inst.rot, normal);\nout.color = unpack4x8unorm(inst.color).rgb;\nout.material = inst.material;\nout.uv = uv;\nout.position = world;\nout.scale = inst.scale;\nreturn out;\n}\n@vertex fn vs(@location(0) position: vec3f, @location(1) normal: vec3f, @location(5) uv: vec2f, @builtin(instance_index) slot: u32) -> VertexOut {\nreturn shade(load_instance(visible[slot]), position, normal, uv);\n}\n@vertex fn vs_attr(@location(0) position: vec3f, @location(1) normal: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec4u, @location(5) uv: vec2f) -> VertexOut {\nlet inst = Instance(pos_scale.xyz, pos_scale.w, rot, ids.x, ids.y, ids.z, ids.w);\nreturn shade(inst, position, normal, uv);\n}\n@vertex fn vs_culled(@location(0) position: vec3f, @location(1) normal: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec2u, @location(5) uv: vec2f) -> VertexOut {\nlet inst = Instance(pos_scale.xyz, pos_scale.w, rot, ids.x, 0u, ids.y, 0u);\nreturn shade(inst, position, normal, uv);\n}\n@vertex fn vs_skinned(@location(0) position: vec3f, @location(1) normal: vec3f, @location(5) uv: vec2f, @location(6) joints: vec4u, @location(7) weights: vec4f, @builtin(instance_index) slot: u32) -> VertexOut {\nlet inst = load_instance(visible[slot]);\nlet s = skin_vertex(palette, inst.skin, joints, weights, position, normal);\nreturn shade(inst, s.position, s.normal, uv);\n}\n@vertex fn vs_attr_skinned(@location(0) position: vec3f, @location(1) normal: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec4u, @location(5) uv: vec2f, @location(6) joints: vec4u, @location(7) weights: vec4f) -> VertexOut {\nlet inst = Instance(pos_scale.xyz, pos_scale.w, rot, ids.x, ids.y, ids.z, ids.w);\nlet s = skin_vertex(palette, ids.w, joints, weights, position, normal);\nreturn shade(inst, s.position, s.normal, uv);\n}\n@vertex fn vs_culled_skinned(@location(0) position: vec3f, @location(1) normal: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec2u, @location(5) uv: vec2f, @location(6) joints: vec4u, @location(7) weights: vec4f) -> VertexOut {\nlet inst = Instance(pos_scale.xyz, pos_scale.w, rot, ids.x, 0u, ids.y & 0xffu, 0u);\nlet s = skin_vertex(palette, ids.y >> 8u, joints, weights, position, normal);\nreturn shade(inst, s.position, s.normal, uv);\n}\nfn sample_map(maps: texture_2d_array<f32>, maps8: texture_2d_array<f32>, slot: u32, uv: vec2f, ddx: vec2f, ddy: vec2f) -> vec4f {\nlet state = (slot >> 24u) & 3u;\nif (state != 1u) {\nlet checker = select(vec4f(0.05, 0.05, 0.05, 1.0), vec4f(1.0, 0.0, 1.0, 1.0), (u32(floor(uv.x * 8.0)) + u32(floor(uv.y * 8.0))) % 2u == 0u);\nreturn select(vec4f(1.0), checker, state == 2u);\n}\nlet first_mip = f32((slot >> 16u) & 31u);\nlet size = f32(textureDimensions(maps).x);\nlet major = max(length(ddx), length(ddy)) * size;\nlet minor = min(length(ddx), length(ddy)) * size;\nlet near_top = log2(max(max(major * 0.25, minor), 1e-8)) < first_mip + 1.0;\nlet level = max(log2(max(major, 1e-8)), first_mip);\nlet layer = slot & 0xffffu;\nlet rgba8 = ((slot >> 21u) & 1u) == 1u;\nvar c: vec4f;\nif (near_top) {\nc = select(textureSampleLevel(maps, map_sampler, uv, layer, level), textureSampleLevel(maps8, map_sampler, uv, layer, level), rgba8);\n} else if (rgba8) {\nc = textureSampleGrad(maps8, map_sampler, uv, layer, ddx, ddy);\n} else {\nc = textureSampleGrad(maps, map_sampler, uv, layer, ddx, ddy);\n}\nreturn c;\n}\nfn sample_srgb(slot: u32, uv: vec2f, ddx: vec2f, ddy: vec2f) -> vec4f {\nreturn sample_map(srgb_maps, srgb_maps8, slot, uv, ddx, ddy);\n}\nfn sample_linear(slot: u32, uv: vec2f, ddx: vec2f, ddy: vec2f) -> vec4f {\nreturn sample_map(linear_maps, linear_maps8, slot, uv, ddx, ddy);\n}\nfn standard_surface(in: SurfaceInput, m: Material) -> Surface {\nlet base = sample_srgb(in.maps.x, in.uv, in.ddx, in.ddy);\nlet orm = sample_linear(in.maps.z, in.uv, in.ddx, in.ddy);\nlet glow = sample_srgb(in.maps.w, in.uv, in.ddx, in.ddy);\nlet nm = sample_linear(in.maps.y, in.uv, in.ddx, in.ddy).xyz * 2.0 - 1.0;\nlet tn = vec3f(nm.xy * m.params[0].z, nm.z);\nlet mapped = normalize(in.tangent * tn.x + in.bitangent * tn.y + in.normal_world * tn.z);\nlet has_normal_map = ((in.maps.y >> 24u) & 3u) == 1u;\nreturn Surface(in.instance_color * m.base_color.rgb * base.rgb, m.base_color.a * base.a, m.params[0].x * orm.b, m.params[0].y * orm.g, m.params[1].xyz * glow.rgb, select(in.normal_world, mapped, has_normal_map),\nmix(1.0, orm.r, m.params[0].w));\n}\nconst PI = 3.14159265358979;\nfn sh_irradiance(n: vec3f) -> vec3f {\nreturn max(lighting.sh[0].rgb * 0.282095 + lighting.sh[1].rgb * (0.488603 * n.y) + lighting.sh[2].rgb * (0.488603 * n.z) + lighting.sh[3].rgb * (0.488603 * n.x) + lighting.sh[4].rgb * (1.092548 * n.x * n.y) + lighting.sh[5].rgb * (1.092548 * n.y * n.z) + lighting.sh[6].rgb * (0.315392 * (3.0 * n.z * n.z - 1.0)) + lighting.sh[7].rgb * (1.092548 * n.x * n.z) + lighting.sh[8].rgb * (0.546274 * (n.x * n.x - n.y * n.y)), vec3f(0.0));\n}\nfn env_brdf(f0: vec3f, roughness: f32, nv: f32) -> vec3f {\nlet c0 = vec4f(-1.0, -0.0275, -0.572, 0.022);\nlet c1 = vec4f(1.0, 0.0425, 1.04, -0.04);\nlet r = roughness * c0 + c1;\nlet a004 = min(r.x * r.x, exp2(-9.28 * nv)) * r.x + r.y;\nlet ab = vec2f(-1.04, 1.04) * a004 + r.zw;\nreturn f0 * ab.x + ab.y;\n}\nstruct Brdf {\nn: vec3f,\nv: vec3f,\nnv: f32,\na2: f32,\nf0: vec3f,\ndiffuse_color: vec3f,\ncoat: f32,\ncoat_a2: f32,\nsheen: vec3f,\nsheen_rough: f32,\nsheen_scale: f32,\n}\nfn sheen_d(rough: f32, nh: f32) -> f32 {\nlet inv = 1.0 / max(rough * rough, 1e-3);\nlet sin2 = max(1.0 - nh * nh, 0.0078125);\nreturn (2.0 + inv) * pow(sin2, inv * 0.5) / (2.0 * PI);\n}\nfn sheen_env(nv: f32, rough: f32) -> f32 {\nlet r2 = rough * rough;\nlet lo = rough < 0.25;\nlet a = select(-8.48 * r2 + 14.3 * rough - 9.95, -339.2 * r2 + 161.4 * rough - 25.9, lo);\nlet b = select(1.97 * r2 - 3.27 * rough + 0.72, 44.0 * r2 - 23.7 * rough + 3.26, lo);\nlet dg = exp(a * nv + b) + select(0.1 * (rough - 0.25), 0.0, lo);\nreturn min(dg, PI);\n}\nfn direct_light(b: Brdf, l: vec3f, radiance: vec3f) -> vec3f {\nlet h = normalize(b.v + l);\nlet nl = saturate(dot(b.n, l));\nlet nh = saturate(dot(b.n, h));\nlet vh = saturate(dot(b.v, h));\nlet f = b.f0 + (vec3f(1.0) - b.f0) * pow(1.0 - vh, 5.0);\nlet dd = nh * nh * (b.a2 - 1.0) + 1.0;\nlet d = b.a2 / (PI * dd * dd);\nlet vis = 0.5 / max(nl * sqrt(b.nv * b.nv * (1.0 - b.a2) + b.a2) + b.nv * sqrt(nl * nl * (1.0 - b.a2) + b.a2), 1e-5);\nvar c = (b.diffuse_color / PI + d * vis * f) * radiance * nl;\nif (b.sheen_scale < 1.0) {\nlet sv = 1.0 / max(4.0 * (nl + b.nv - nl * b.nv), 1e-4);\nc = c * b.sheen_scale + b.sheen * (sheen_d(b.sheen_rough, nh) * sv * nl) * radiance;\n}\nif (b.coat > 0.0) {\nlet fc = (0.04 + 0.96 * pow(1.0 - vh, 5.0)) * b.coat;\nlet cd = nh * nh * (b.coat_a2 - 1.0) + 1.0;\nlet dc = b.coat_a2 / (PI * cd * cd);\nc = c * (1.0 - fc) + vec3f(dc * 0.25 / max(vh * vh, 1e-4) * fc * nl) * radiance;\n}\nreturn c;\n}\nfn clustered_lights(b: Brdf, p: vec3f, frag: vec2f) -> vec3f {\nif (cluster.screen.z < 0.5) {\nreturn vec3f(0.0);\n}\nlet ci = cluster_index(frag, view_depth(p, cluster), cluster);\nlet count = textureLoad(light_bins, vec2u(0u, ci), 0).x;\nvar sum = vec3f(0.0);\nfor (var k = 0u; k < count; k++) {\nlet light = lights.lights[textureLoad(light_bins, vec2u(k + 1u, ci), 0).x];\nlet to_light = light.pos_range.xyz - p;\nlet dist2 = max(dot(to_light, to_light), 1e-4);\nlet dist = sqrt(dist2);\nlet l = to_light / dist;\nvar atten = range_window(dist, light.pos_range.w) / dist2;\nlet cone = smoothstep(light.dir_outer.w, light.inner.x, dot(-l, light.dir_outer.xyz));\natten *= select(1.0, cone, light.color_kind.w > 0.5);\nsum += direct_light(b, l, light.color_kind.rgb * atten);\n}\nreturn sum;\n}\nfn clustered_diffuse(n: vec3f, diffuse: vec3f, p: vec3f, frag: vec2f) -> vec3f {\nif (cluster.screen.z < 0.5) {\nreturn vec3f(0.0);\n}\nlet ci = cluster_index(frag, view_depth(p, cluster), cluster);\nlet count = textureLoad(light_bins, vec2u(0u, ci), 0).x;\nvar sum = vec3f(0.0);\nfor (var k = 0u; k < count; k++) {\nlet light = lights.lights[textureLoad(light_bins, vec2u(k + 1u, ci), 0).x];\nlet to_light = light.pos_range.xyz - p;\nlet dist2 = max(dot(to_light, to_light), 1e-4);\nlet l = to_light * inverseSqrt(dist2);\nvar atten = range_window(sqrt(dist2), light.pos_range.w) / dist2;\nlet cone = smoothstep(light.dir_outer.w, light.inner.x, dot(-l, light.dir_outer.xyz));\natten *= select(1.0, cone, light.color_kind.w > 0.5);\nsum += light.color_kind.rgb * (atten * saturate(dot(n, l)));\n}\nreturn diffuse / PI * sum;\n}\nfn shade_pbr(s: Surface, v: vec3f, p: vec3f, frag: vec2f, sun: f32, ext: MaterialExt) -> vec3f {\nlet rough = clamp(s.roughness, 0.045, 1.0);\nlet a = rough * rough;\nvar b: Brdf;\nb.n = s.normal;\nb.v = v;\nb.nv = max(dot(s.normal, v), 1e-4);\nb.a2 = a * a;\nlet eta = select(0.2, (ext.ior - 1.0) / (ext.ior + 1.0), ext.ior > 0.0);\nb.f0 = mix(vec3f(eta * eta), s.base_color, s.metalness);\nb.diffuse_color = s.base_color * (1.0 - s.metalness) * (1.0 - ext.transmission);\nb.coat = ext.coat;\nlet coat_rough = clamp(ext.coat_rough, 0.045, 1.0);\nb.coat_a2 = coat_rough * coat_rough * coat_rough * coat_rough;\nb.sheen = ext.sheen.rgb;\nb.sheen_rough = max(ext.sheen.a, 0.07);\nb.sheen_scale = 1.0 - max(b.sheen.r, max(b.sheen.g, b.sheen.b)) * 0.157;\nlet direct = direct_light(b, camera.light_dir.xyz, lighting.sun_color.rgb * sun) + clustered_lights(b, p, frag);\nlet r = reflect(-v, b.n);\nlet specular_env = textureSampleLevel(env_cube, map_sampler, r, rough * (lighting.env.x - 1.0)).rgb * env_brdf(b.f0, rough, b.nv);\nvar ambient = b.diffuse_color * sh_irradiance(b.n) + specular_env;\nif (b.sheen_scale < 1.0) {\nambient = ambient * b.sheen_scale + b.sheen * sh_irradiance(b.n) * sheen_env(b.nv, b.sheen_rough);\n}\nif (b.coat > 0.0) {\nlet fc = (0.04 + 0.96 * pow(1.0 - b.nv, 5.0)) * b.coat;\nlet coat_env = textureSampleLevel(env_cube, map_sampler, r, coat_rough * (lighting.env.x - 1.0)).rgb * env_brdf(vec3f(0.04), coat_rough, b.nv);\nambient = ambient * (1.0 - fc) + coat_env * b.coat;\n}\nreturn direct + ambient * s.occlusion * lighting.sun_color.w + s.emissive;\n}\nfn screen_level(uv: vec2f, level: i32) -> vec3f {\nlet size = vec2i(textureDimensions(scene_color, level));\nlet p = clamp(uv, vec2f(0.0), vec2f(1.0)) * vec2f(size) - 0.5;\nlet i = vec2i(floor(p));\nlet t = p - floor(p);\nlet hi = size - 1;\nlet a = textureLoad(scene_color, clamp(i, vec2i(0), hi), level).rgb;\nlet b = textureLoad(scene_color, clamp(i + vec2i(1, 0), vec2i(0), hi), level).rgb;\nlet c = textureLoad(scene_color, clamp(i + vec2i(0, 1), vec2i(0), hi), level).rgb;\nlet d = textureLoad(scene_color, clamp(i + vec2i(1, 1), vec2i(0), hi), level).rgb;\nreturn mix(mix(a, b, t.x), mix(c, d, t.x), t.y);\n}\nfn screen_blur(uv: vec2f, roughness: f32) -> vec3f {\nlet levels = max(lighting.screen.w, 1.0);\nlet r = roughness * roughness * 0.04 * f32(textureDimensions(scene_color).y);\nlet lod = clamp(log2(max(r, 1e-6)), 0.0, levels - 1.0);\nlet l0 = floor(lod);\nreturn mix(screen_level(uv, i32(l0)), screen_level(uv, i32(min(l0 + 1.0, levels - 1.0))), lod - l0);\n}\nfn material_ext_of(id: u32, m: Material, si: SurfaceInput) -> MaterialExt {\nvar x: MaterialExt;\nlet i = min(id, MAX_MATERIALS - 1u) * 4u;\nif ((m.maps.x >> 26u) != 0u) {\nreturn x;\n}\nlet vol = material_ext[i + 2u];\nx.ior = bitcast<f32>(vol.x);\nx.thickness = bitcast<f32>(vol.y);\nx.att_distance = bitcast<f32>(vol.z);\nx.att_color = unpack4x8unorm(vol.w).rgb;\nlet w = material_ext[i];\nif (all(w == vec4u(0u))) {\nreturn x;\n}\nlet slots = material_ext[i + 1u];\nlet sheen = unpack4x8unorm(w.w);\nx.coat = bitcast<f32>(w.x) * sample_linear(slots.x, si.uv, si.ddx, si.ddy).r;\nx.coat_rough = bitcast<f32>(w.y) * sample_linear(slots.y, si.uv, si.ddx, si.ddy).g;\nx.transmission = bitcast<f32>(w.z) * sample_linear(slots.z, si.uv, si.ddx, si.ddy).r;\nlet more = material_ext[i + 3u];\nx.dispersion = bitcast<f32>(more.x);\nif (x.thickness > 0.0) {\nx.thickness *= sample_linear(more.y, si.uv, si.ddx, si.ddy).g;\n}\nx.sheen = vec4f(sheen.rgb * sample_srgb(slots.w, si.uv, si.ddx, si.ddy).rgb, sheen.a);\nreturn x;\n}\nfn shadow_compare(uv: vec2f, depth_ref: f32) -> f32 {\nif (shadow.pcf.y < 0.5) {\nreturn textureSampleCompareLevel(shadow_atlas, shadow_sampler, uv, depth_ref);\n}\nlet size = vec2f(textureDimensions(shadow_atlas));\nlet p = uv * size - 0.5;\nlet f = fract(p);\nlet base = (floor(p) + 0.5) / size;\nlet dx = vec2f(1.0 / size.x, 0.0);\nlet dy = vec2f(0.0, 1.0 / size.y);\nlet a = textureSampleCompareLevel(shadow_atlas, shadow_sampler, base, depth_ref);\nlet b = textureSampleCompareLevel(shadow_atlas, shadow_sampler, base + dx, depth_ref);\nlet c = textureSampleCompareLevel(shadow_atlas, shadow_sampler, base + dy, depth_ref);\nlet d = textureSampleCompareLevel(shadow_atlas, shadow_sampler, base + dx + dy, depth_ref);\nreturn mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\nfn sun_shadow(p: vec3f, n: vec3f, depth: f32) -> f32 {\nlet count = u32(shadow.params.x);\nif (count == 0u || depth >= shadow.params.w) {\nreturn 1.0;\n}\nvar c = 0u;\nfor (; c + 1u < count; c++) {\nif (depth < shadow.splits[c]) {\nbreak;\n}\n}\nlet nl = saturate(dot(n, camera.light_dir.xyz));\nlet offset = (n * (0.75 + 1.5 * (1.0 - nl)) + camera.light_dir.xyz) * shadow.texel[c];\nlet lp = shadow.view_proj[c] * vec4f(p + offset, 1.0);\nlet texel = shadow.params.y;\nlet uv = clamp(vec2f(lp.x * 0.5 + 0.5, 0.5 - lp.y * 0.5), vec2f(1.5 * texel), vec2f(1.0 - 1.5 * texel));\nlet tile = vec2f((uv.x + f32(c)) / f32(count), uv.y);\nlet tap = vec2f(texel / f32(count), texel);\nlet depth_ref = min(lp.z, 1.0);\nlet r = i32(shadow.pcf.x);\nvar lit = 0.0;\nfor (var y = -r; y <= r; y++) {\nfor (var x = -r; x <= r; x++) {\nlit += shadow_compare(tile + vec2f(f32(x), f32(y)) * tap, depth_ref);\n}\n}\nlet taps = f32((2 * r + 1) * (2 * r + 1));\nlet fade = saturate((depth - shadow.params.z) / max(shadow.params.w - shadow.params.z, 1e-3));\nreturn mix(lit / taps, 1.0, fade);\n}\n// @yali:materials begin (SceneRenderer replaces this block with the app's node materials, ADR-0064)\nfn material_surface(shader: u32, in: SurfaceInput, m: Material) -> Surface {\nreturn standard_surface(in, m);\n}\n// @yali:materials end\nfn surface_input(in: VertexOut, front: bool, m: Material) -> SurfaceInput {\nvar si: SurfaceInput;\nsi.uv = in.uv;\nsi.normal_world = facing(normalize(in.normal), front);\nsi.position_world = in.position;\nsi.view_dir = normalize(-in.position);\nsi.instance_color = in.color;\nsi.time = camera.light_dir.w;\nsi.maps = m.maps & vec4u(0x03ffffffu);\nsi.ddx = dpdx(in.uv);\nsi.ddy = dpdy(in.uv);\nlet dp1 = dpdx(in.position);\nlet dp2 = dpdy(in.position);\nlet n = si.normal_world;\nlet dp2perp = cross(dp2, n);\nlet dp1perp = cross(n, dp1);\nlet t = dp2perp * si.ddx.x + dp1perp * si.ddy.x;\nlet b = dp2perp * si.ddx.y + dp1perp * si.ddy.y;\nlet inv = inverseSqrt(max(max(dot(t, t), dot(b, b)), 1e-20));\nsi.tangent = -t * inv;\nsi.bitangent = b * inv;\nreturn si;\n}\nfn refracted_uv(p: vec3f, view_dir: vec3f, n: vec3f, ior: f32, thick: f32) -> vec2f {\nlet rd = refract(-view_dir, n, 1.0 / max(ior, 1.0));\nlet clip = camera.view_proj * vec4f(p + rd * thick, 1.0);\nreturn clip.xy / max(clip.w, 1e-4) * vec2f(0.5, -0.5) + 0.5;\n}\nfn in_layer(id: u32) -> bool {\nif (lighting.screen.x < 0.5) {\nreturn true;\n}\nlet layer = material_ext[min(id, MAX_MATERIALS - 1u) * 4u + 3u].z;\nreturn layer == select(0u, 1u, lighting.screen.x > 1.5);\n}\nfn frag_pbr(in: VertexOut, front: bool) -> vec4f {\nlet m = materials[min(in.material, MAX_MATERIALS - 1u)];\nlet si = surface_input(in, front, m);\nlet s = material_surface(m.maps.x >> 26u, si, m);\nlet sun = sun_shadow(in.position, si.normal_world, view_depth(in.position, cluster));\nlet ext = material_ext_of(in.material, m, si);\nlet c = shade_pbr(s, si.view_dir, in.position, in.clip.xy, sun, ext);\nif (ext.transmission <= 0.0) {\nreturn vec4f(c, s.opacity);\n}\nlet f0 = select(0.04, pow((ext.ior - 1.0) / (ext.ior + 1.0), 2.0), ext.ior > 0.0);\nlet fresnel = f0 + (1.0 - f0) * pow(1.0 - max(dot(s.normal, si.view_dir), 0.0), 5.0);\nif (lighting.screen.x > 0.5) {\nlet thick = ext.thickness * in.scale;\nvar behind: vec3f;\nif (ext.dispersion > 0.0) {\nlet spread = (ext.ior - 1.0) * 0.025 * ext.dispersion;\nbehind = vec3f(screen_blur(refracted_uv(in.position, si.view_dir, s.normal, ext.ior - spread, thick), s.roughness).r, screen_blur(refracted_uv(in.position, si.view_dir, s.normal, ext.ior, thick), s.roughness).g, screen_blur(refracted_uv(in.position, si.view_dir, s.normal, ext.ior + spread, thick), s.roughness).b);\n} else {\nbehind = screen_blur(refracted_uv(in.position, si.view_dir, s.normal, ext.ior, thick), s.roughness);\n}\nif (ext.att_distance > 0.0) {\nbehind *= pow(ext.att_color, vec3f(thick / ext.att_distance));\n}\nreturn vec4f(c + behind * s.base_color * ext.transmission * (1.0 - fresnel), 1.0);\n}\nlet alpha = s.opacity * (1.0 - ext.transmission * (1.0 - fresnel));\nreturn vec4f(c / max(alpha, 0.02), alpha);\n}\nfn finish(color: vec3f, alpha: f32) -> vec4f {\nif (lighting.env.y > 0.5) {\nreturn vec4f(tone_map(color * lighting.env.z, u32(lighting.env.w)), alpha);\n}\nreturn vec4f(color, alpha);\n}\nfn facing(n: vec3f, front: bool) -> vec3f {\nreturn select(-n, n, front);\n}\nfn alpha_cutoff(m: Material) -> f32 {\nreturn select(0.5, m.params[1].w, (m.maps.x >> 26u) == 0u);\n}\n@fragment fn fs(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nreturn finish(frag_pbr(in, front).rgb, 1.0);\n}\n@fragment fn fs_mask(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nlet c = frag_pbr(in, front);\nif (c.a < alpha_cutoff(materials[min(in.material, MAX_MATERIALS - 1u)])) {\ndiscard;\n}\nreturn finish(c.rgb, 1.0);\n}\n@fragment fn fs_blend(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nif (!in_layer(in.material)) {\ndiscard;\n}\nlet c = frag_pbr(in, front);\nreturn finish(c.rgb, c.a);\n}\n@fragment fn fs_lambert(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nreturn finish(frag_lambert(in, front).rgb, 1.0);\n}\n@fragment fn fs_lambert_mask(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nlet c = frag_lambert(in, front);\nif (c.a < alpha_cutoff(materials[min(in.material, MAX_MATERIALS - 1u)])) {\ndiscard;\n}\nreturn finish(c.rgb, 1.0);\n}\n@fragment fn fs_lambert_blend(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nif (!in_layer(in.material)) {\ndiscard;\n}\nlet c = frag_lambert(in, front);\nreturn finish(c.rgb, c.a);\n}\n@fragment fn fs_flat(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nreturn finish(frag_flat(in, front).rgb, 1.0);\n}\n@fragment fn fs_flat_mask(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nlet c = frag_flat(in, front);\nif (c.a < alpha_cutoff(materials[min(in.material, MAX_MATERIALS - 1u)])) {\ndiscard;\n}\nreturn finish(c.rgb, 1.0);\n}\n@fragment fn fs_flat_blend(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nif (!in_layer(in.material)) {\ndiscard;\n}\nlet c = frag_flat(in, front);\nreturn finish(c.rgb, c.a);\n}\nstruct MaskMotion {\nview_proj: mat4x4f,\nprev_view_proj: mat4x4f,\nprev_origin: vec4f,\n}\n@group(0) @binding(20) var<uniform> mask_motion: MaskMotion;\n@group(0) @binding(21) var<storage, read> prev_instances: array<vec4u>;\n@group(0) @binding(22) var prev_palette: texture_2d<f32>;\nstruct MaskMotionOut {\n@builtin(position) clip: vec4f,\n@location(0) normal: vec3f,\n@location(1) color: vec3f,\n@location(2) @interpolate(flat, either) material: u32,\n@location(3) uv: vec2f,\n@location(4) position: vec3f,\n@location(5) @interpolate(flat, either) scale: f32,\n@location(6) now: vec4f,\n@location(7) then: vec4f,\n}\nfn prev_world(i: u32, p: vec3f) -> vec3f {\nlet a = bitcast<vec4f>(prev_instances[2u * i]);\nlet q = bitcast<vec4f>(prev_instances[2u * i + 1u]);\nreturn quat_rotate(q, p * a.w) + a.xyz - mask_motion.prev_origin.xyz;\n}\nfn mask_motion_out(v: VertexOut, then: vec3f) -> MaskMotionOut {\nvar o: MaskMotionOut;\no.clip = v.clip;\no.normal = v.normal;\no.color = v.color;\no.material = v.material;\no.uv = v.uv;\no.position = v.position;\no.scale = v.scale;\no.now = mask_motion.view_proj * vec4f(v.position, 1.0);\no.then = mask_motion.prev_view_proj * vec4f(then, 1.0);\nreturn o;\n}\n@vertex fn vs_motion_mask(@location(0) position: vec3f, @location(1) normal: vec3f, @location(5) uv: vec2f, @location(8) then_position: vec3f, @builtin(instance_index) slot: u32) -> MaskMotionOut {\nlet i = visible[slot];\nreturn mask_motion_out(shade(load_instance(i), position, normal, uv), prev_world(i, then_position));\n}\n@vertex fn vs_motion_mask_skinned(@location(0) position: vec3f, @location(1) normal: vec3f, @location(5) uv: vec2f, @location(6) joints: vec4u, @location(7) weights: vec4f, @location(8) then_position: vec3f, @builtin(instance_index) slot: u32) -> MaskMotionOut {\nlet i = visible[slot];\nlet inst = load_instance(i);\nlet s = skin_vertex(palette, inst.skin, joints, weights, position, normal);\nlet then = skin_vertex(prev_palette, inst.skin, joints, weights, then_position, normal);\nreturn mask_motion_out(shade(inst, s.position, s.normal, uv), prev_world(i, then.position));\n}\n@fragment fn fs_motion_blend(in: MaskMotionOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nif (material_ext[min(in.material, MAX_MATERIALS - 1u) * 4u + 3u].w == 0u) {\ndiscard;\n}\nreturn motion_cut(in, front);\n}\n@fragment fn fs_motion_mask(in: MaskMotionOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nreturn motion_cut(in, front);\n}\nfn motion_cut(in: MaskMotionOut, front: bool) -> vec4f {\nvar v: VertexOut;\nv.clip = in.clip;\nv.normal = in.normal;\nv.color = in.color;\nv.material = in.material;\nv.uv = in.uv;\nv.position = in.position;\nv.scale = in.scale;\nlet m = materials[min(in.material, MAX_MATERIALS - 1u)];\nlet s = material_surface(m.maps.x >> 26u, surface_input(v, front, m), m);\nif (s.opacity < alpha_cutoff(m)) {\ndiscard;\n}\nvar anchor = 0.0;\nif (lighting.env.x < 0.0) {\nanchor = bindings_anchor().x;\n}\nlet now = in.now.xy / in.now.w;\nlet then = in.then.xy / max(in.then.w, 1e-6);\nreturn vec4f((now - then) * vec2f(0.5, -0.5), in.then.w + anchor, 1.0);\n}\nfn bindings_anchor() -> vec3f {\nlet t = textureSampleLevel(srgb_maps, map_sampler, vec2f(0.0), 0, 0.0) + textureSampleLevel(linear_maps, map_sampler, vec2f(0.0), 0, 0.0) + textureSampleLevel(srgb_maps8, map_sampler, vec2f(0.0), 0, 0.0) + textureSampleLevel(linear_maps8, map_sampler, vec2f(0.0), 0, 0.0);\nlet e = textureSampleLevel(env_cube, map_sampler, vec3f(0.0, 0.0, 1.0), 0.0);\nlet b = f32(textureLoad(light_bins, vec2u(0u), 0).x);\nlet d = textureSampleCompareLevel(shadow_atlas, shadow_sampler, vec2f(0.0), 0.5);\nreturn t.rgb + e.rgb + lights.lights[0].pos_range.xyz + vec3f(b + d + shadow.params.x + cluster.proj.x + lighting.sh[0].x + f32(material_ext[0].x) + textureLoad(scene_color, vec2i(0), 0).x);\n}\nfn frag_lambert(in: VertexOut, front: bool) -> vec4f {\nlet m = materials[min(in.material, MAX_MATERIALS - 1u)];\nvar si: SurfaceInput;\nsi.uv = in.uv;\nsi.normal_world = facing(normalize(in.normal), front);\nsi.position_world = in.position;\nsi.view_dir = normalize(-in.position);\nsi.instance_color = in.color;\nsi.time = camera.light_dir.w;\nsi.maps = (m.maps & vec4u(0x03ffffffu)) & vec4u(0xffffffffu, 0u, 0xffffffffu, 0xffffffffu);\nsi.ddx = dpdx(in.uv);\nsi.ddy = dpdy(in.uv);\nlet s = material_surface(m.maps.x >> 26u, si, m);\nlet sun = sun_shadow(in.position, si.normal_world, view_depth(in.position, cluster));\nlet diffuse = s.base_color * (1.0 - 0.5 * s.metalness);\nlet nl = saturate(dot(s.normal, camera.light_dir.xyz));\nvar color = diffuse / PI * lighting.sun_color.rgb * sun * nl + diffuse * sh_irradiance(s.normal) * s.occlusion * lighting.sun_color.w + s.emissive + clustered_diffuse(s.normal, diffuse, in.position, in.clip.xy);\nif (lighting.env.x < 0.0) {\ncolor += bindings_anchor();\n}\nreturn vec4f(color, s.opacity);\n}\nfn frag_flat(in: VertexOut, front: bool) -> vec4f {\nlet m = materials[min(in.material, MAX_MATERIALS - 1u)];\nlet base = in.color * m.base_color.rgb;\nlet n = facing(normalize(in.normal), front);\nlet nl = saturate(dot(n, camera.light_dir.xyz));\nlet ambient = max(lighting.sh[0].rgb * 0.282095, vec3f(0.0)) * lighting.sun_color.w;\nvar color = base / PI * lighting.sun_color.rgb * nl + base * ambient + m.params[1].xyz + clustered_diffuse(n, base, in.position, in.clip.xy);\nif (lighting.env.x < 0.0) {\ncolor += bindings_anchor();\n}\nreturn vec4f(color, m.base_color.a);\n}\nstruct Camera {\nview_proj: mat4x4f,\nfrustum: array<vec4f, 6>,\nlight_dir: vec4f,\norigin: vec4f,\n}\nstruct Instance {\npos: vec3f,\nscale: f32,\nrot: vec4f,\ncolor: u32,\nmesh: u32,\nmaterial: u32,\nskin: u32,\n}\nstruct Lights { lights: array<Light, MAX_LIGHTS> }\nstruct Light {\npos_range: vec4f,\ncolor_kind: vec4f,\ndir_outer: vec4f,\ninner: vec4f,\n}\nconst MAX_LIGHTS: u32 = 256u;\nstruct ClusterParams {\nview_x: vec4f,\nview_y: vec4f,\nview_z: vec4f,\nproj: vec4f,\nscreen: vec4f,\n}\nfn quat_rotate(q: vec4f, v: vec3f) -> vec3f {\nlet t = 2.0 * cross(q.xyz, v);\nreturn v + q.w * t + cross(q.xyz, t);\n}\nfn skin_vertex(palette: texture_2d<f32>, row: u32, joints: vec4u, weights: vec4f, position: vec3f, normal: vec3f) -> Skinned {\nif (row == 0u || dot(weights, vec4f(1.0)) <= 0.0) {\nreturn Skinned(position, normal);\n}\nlet base = row - 1u;\nlet t = (vec4u(base) + joints) * 3u;\nlet r0 = weights.x * palette_texel(palette, t.x) + weights.y * palette_texel(palette, t.y) + weights.z * palette_texel(palette, t.z) + weights.w * palette_texel(palette, t.w);\nlet r1 = weights.x * palette_texel(palette, t.x + 1u) + weights.y * palette_texel(palette, t.y + 1u) + weights.z * palette_texel(palette, t.z + 1u) + weights.w * palette_texel(palette, t.w + 1u);\nlet r2 = weights.x * palette_texel(palette, t.x + 2u) + weights.y * palette_texel(palette, t.y + 2u) + weights.z * palette_texel(palette, t.z + 2u) + weights.w * palette_texel(palette, t.w + 2u);\nlet p = vec4f(position, 1.0);\nreturn Skinned(vec3f(dot(r0, p), dot(r1, p), dot(r2, p)), vec3f(dot(r0.xyz, normal), dot(r1.xyz, normal), dot(r2.xyz, normal)));\n}\nfn palette_texel(palette: texture_2d<f32>, i: u32) -> vec4f {\nreturn textureLoad(palette, vec2u(i % PALETTE_WIDTH, i / PALETTE_WIDTH), 0);\n}\nstruct Skinned {\nposition: vec3f,\nnormal: vec3f,\n}\nconst PALETTE_WIDTH: u32 = 1024u;\nfn cluster_index(frag: vec2f, depth: f32, c: ClusterParams) -> u32 {\nlet tile = min(vec2u(frag / c.screen.xy * vec2f(f32(GRID_X), f32(GRID_Y))), vec2u(GRID_X - 1u, GRID_Y - 1u));\nlet slice = u32(clamp(log2(max(depth, c.proj.z) / c.proj.z) / c.screen.w * f32(GRID_Z), 0.0, f32(GRID_Z - 1u)));\nreturn (slice * GRID_Y + tile.y) * GRID_X + tile.x;\n}\nfn view_depth(p: vec3f, c: ClusterParams) -> f32 {\nreturn -dot(c.view_z.xyz, p);\n}\nfn range_window(dist: f32, range: f32) -> f32 {\nlet x = dist / range;\nlet t = saturate(1.0 - x * x * x * x);\nreturn t * t;\n}\nconst GRID_X: u32 = 16u;\nconst GRID_Y: u32 = 9u;\nconst GRID_Z: u32 = 24u;\nfn tone_map(linear_in: vec3f, curve: u32) -> vec3f {\nreturn srgb_encode(tone_curve(linear_in, curve));\n}\nfn srgb_encode(c: vec3f) -> vec3f {\nlet lo = c * 12.92;\nlet hi = 1.055 * pow(c, vec3f(1.0 / 2.4)) - 0.055;\nreturn select(hi, lo, c <= vec3f(0.0031308));\n}\nfn tone_curve(linear_in: vec3f, curve: u32) -> vec3f {\nlet linear = max(linear_in, vec3f(0.0));\nvar mapped: vec3f;\nswitch curve {\ncase 0u: {\nmapped = pbr_neutral(linear);\n}\ncase 1u: {\nmapped = aces(linear);\n}\ndefault: {\nmapped = saturate(linear);\n}\n}\nreturn saturate(mapped);\n}\nfn pbr_neutral(color: vec3f) -> vec3f {\nlet start = 0.8 - 0.04;\nlet desaturation = 0.15;\nlet x = min(color.r, min(color.g, color.b));\nlet offset = select(0.04, x - 6.25 * x * x, x < 0.08);\nvar c = color - offset;\nlet peak = max(c.r, max(c.g, c.b));\nif (peak < start) {\nreturn c;\n}\nlet d = 1.0 - start;\nlet new_peak = 1.0 - d * d / (peak + d - start);\nc = c * (new_peak / peak);\nlet g = 1.0 - 1.0 / (desaturation * (peak - new_peak) + 1.0);\nreturn mix(c, vec3f(new_peak), g);\n}\nfn aces(x: vec3f) -> vec3f {\nreturn saturate((x * (2.51 * x + 0.03)) / (x * (2.43 * x + 0.59) + 0.14));\n}";
|
|
10
|
+
};
|
|
11
|
+
/** Linked from shaders/post/tonemap.wesl. */
|
|
12
|
+
export declare const postTonemap: {
|
|
13
|
+
readonly hash: "1271f2ef31fbada6";
|
|
14
|
+
readonly wgsl: "struct ToneParams {\n/** Linear multiplier before the curve. */\nexposure: f32,\n/** 0 = Khronos PBR Neutral, 1 = ACES (Narkowicz's fit), 2 = none (clamp). */\ncurve: u32,\n/** How much of the bloom chain is added (0: none). */\nbloom: f32,\n/** 1: grade (the fields below). */\ngrade: u32,\n/** Linear white-balance gains (from temperature and tint), luminance-normalised. */\nbalance: vec3f,\n/** Contrast about mid grey (18%), in log space: 1 is none. */\ncontrast: f32,\n/** Lift (shadows), added after the curve. */\nlift: vec3f,\n/** Saturation about the luminance: 1 is none, 0 is grey. */\nsaturation: f32,\n/** Gamma (mid tones) after the curve: 1 is none. */\ngamma: vec3f,\npad0: f32,\n/** Gain (highlights) after the curve: 1 is none. */\ngain: vec3f,\npad1: f32,\n}\n@group(0) @binding(0) var hdr: texture_2d<f32>;\n@group(0) @binding(1) var<uniform> tone: ToneParams;\n@group(0) @binding(2) var bloom_tex: texture_2d<f32>;\n@group(0) @binding(3) var smp: sampler;\n@vertex fn vs(@builtin(vertex_index) i: u32) -> @builtin(position) vec4f {\nlet p = vec2f(f32((i << 1u) & 2u), f32(i & 2u));\nreturn vec4f(p * 2.0 - 1.0, 0.0, 1.0);\n}\nconst MID_GREY = 0.18;\n@fragment fn fs(@builtin(position) at: vec4f) -> @location(0) vec4f {\nvar c = textureLoad(hdr, vec2i(at.xy), 0).rgb;\nif (tone.bloom > 0.0) {\nlet uv = at.xy / vec2f(textureDimensions(hdr));\nc += textureSampleLevel(bloom_tex, smp, uv, 0.0).rgb * tone.bloom;\n}\nc *= tone.exposure;\nif (tone.grade == 0u) {\nreturn vec4f(srgb_encode(tone_curve(c, tone.curve)), 1.0);\n}\nc = max(c * tone.balance, vec3f(0.0));\nc = MID_GREY * pow(c / MID_GREY + 1e-6, vec3f(tone.contrast));\nlet y = dot(c, vec3f(0.2126, 0.7152, 0.0722));\nc = max(mix(vec3f(y), c, tone.saturation), vec3f(0.0));\nvar d = tone_curve(c, tone.curve);\nd = saturate(tone.gain * (d + tone.lift * (1.0 - d)));\nd = pow(d, 1.0 / max(tone.gamma, vec3f(1e-3)));\nreturn vec4f(srgb_encode(d), 1.0);\n}\nfn srgb_encode(c: vec3f) -> vec3f {\nlet lo = c * 12.92;\nlet hi = 1.055 * pow(c, vec3f(1.0 / 2.4)) - 0.055;\nreturn select(hi, lo, c <= vec3f(0.0031308));\n}\nfn tone_curve(linear_in: vec3f, curve: u32) -> vec3f {\nlet linear = max(linear_in, vec3f(0.0));\nvar mapped: vec3f;\nswitch curve {\ncase 0u: {\nmapped = pbr_neutral(linear);\n}\ncase 1u: {\nmapped = aces(linear);\n}\ndefault: {\nmapped = saturate(linear);\n}\n}\nreturn saturate(mapped);\n}\nfn pbr_neutral(color: vec3f) -> vec3f {\nlet start = 0.8 - 0.04;\nlet desaturation = 0.15;\nlet x = min(color.r, min(color.g, color.b));\nlet offset = select(0.04, x - 6.25 * x * x, x < 0.08);\nvar c = color - offset;\nlet peak = max(c.r, max(c.g, c.b));\nif (peak < start) {\nreturn c;\n}\nlet d = 1.0 - start;\nlet new_peak = 1.0 - d * d / (peak + d - start);\nc = c * (new_peak / peak);\nlet g = 1.0 - 1.0 / (desaturation * (peak - new_peak) + 1.0);\nreturn mix(c, vec3f(new_peak), g);\n}\nfn aces(x: vec3f) -> vec3f {\nreturn saturate((x * (2.51 * x + 0.03)) / (x * (2.43 * x + 0.59) + 0.14));\n}";
|
|
15
|
+
};
|
|
16
|
+
/** Linked from shaders/env/sky.wesl. */
|
|
17
|
+
export declare const envSky: {
|
|
18
|
+
readonly hash: "1ca6b9929f76b50e";
|
|
19
|
+
readonly wgsl: "struct SkyParams {\n/** xyz = direction towards the sun, w = mip roughness for the prefilter pass. */\nsun: vec4f,\nzenith: vec4f,\nhorizon: vec4f,\nground: vec4f,\n/** rgb = sun disk radiance, w = cos of the disk's angular radius. */\nsun_color: vec4f,\n/** x = cube face (0–5, +X −X +Y −Y +Z −Z), y = source size, z = source mips. */\nface: vec4f,\n}\n@group(0) @binding(0) var<uniform> sky_params: SkyParams;\n@group(0) @binding(1) var source: texture_cube<f32>;\n@group(0) @binding(2) var source_sampler: sampler;\nstruct FaceOut {\n@builtin(position) clip: vec4f,\n@location(0) uv: vec2f,\n}\n@vertex fn vs(@builtin(vertex_index) i: u32) -> FaceOut {\nlet p = vec2f(f32((i << 1u) & 2u), f32(i & 2u));\nvar out: FaceOut;\nout.clip = vec4f(p * 2.0 - 1.0, 0.0, 1.0);\nout.uv = p * 2.0 - 1.0;\nreturn out;\n}\nfn face_dir(face: u32, uv: vec2f) -> vec3f {\nlet u = uv.x;\nlet v = -uv.y;\nswitch face {\ncase 0u: {\nreturn normalize(vec3f(1.0, -v, -u));\n}\ncase 1u: {\nreturn normalize(vec3f(-1.0, -v, u));\n}\ncase 2u: {\nreturn normalize(vec3f(u, 1.0, v));\n}\ncase 3u: {\nreturn normalize(vec3f(u, -1.0, -v));\n}\ncase 4u: {\nreturn normalize(vec3f(u, -v, 1.0));\n}\ndefault: {\nreturn normalize(vec3f(-u, -v, -1.0));\n}\n}\n}\nfn sky(d: vec3f) -> vec3f {\nlet up = d.y;\nlet above = mix(sky_params.horizon.rgb, sky_params.zenith.rgb, pow(saturate(up), 0.5));\nlet below = mix(sky_params.horizon.rgb, sky_params.ground.rgb, saturate(-up * 4.0));\nvar c = select(below, above, up >= 0.0);\nlet cos_sun = dot(d, sky_params.sun.xyz);\nc += sky_params.sun_color.rgb * smoothstep(sky_params.sun_color.w, 1.0, cos_sun) * step(0.0, up);\nreturn c;\n}\n@fragment fn fs_sky(in: FaceOut) -> @location(0) vec4f {\nreturn vec4f(sky(face_dir(u32(sky_params.face.x), in.uv)), 1.0);\n}\nfn radical_inverse(i: u32) -> f32 {\nvar b = (i << 16u) | (i >> 16u);\nb = ((b & 0x55555555u) << 1u) | ((b & 0xAAAAAAAAu) >> 1u);\nb = ((b & 0x33333333u) << 2u) | ((b & 0xCCCCCCCCu) >> 2u);\nb = ((b & 0x0F0F0F0Fu) << 4u) | ((b & 0xF0F0F0F0u) >> 4u);\nb = ((b & 0x00FF00FFu) << 8u) | ((b & 0xFF00FF00u) >> 8u);\nreturn f32(b) * 2.3283064365386963e-10;\n}\n@fragment fn fs_prefilter(in: FaceOut) -> @location(0) vec4f {\nlet n = face_dir(u32(sky_params.face.x), in.uv);\nlet roughness = sky_params.sun.w;\nlet a = roughness * roughness;\nlet up = select(vec3f(1.0, 0.0, 0.0), vec3f(0.0, 1.0, 0.0), abs(n.y) < 0.999);\nlet tx = normalize(cross(up, n));\nlet ty = cross(n, tx);\nlet count = 128u;\nlet texel_solid_angle = 4.0 * 3.14159265 / (6.0 * sky_params.face.y * sky_params.face.y);\nvar sum = vec3f(0.0);\nvar weight = 0.0;\nfor (var i = 0u; i < count; i++) {\nlet xi = vec2f(f32(i) / f32(count), radical_inverse(i));\nlet phi = 2.0 * 3.14159265 * xi.x;\nlet cos_t = sqrt((1.0 - xi.y) / (1.0 + (a * a - 1.0) * xi.y));\nlet sin_t = sqrt(1.0 - cos_t * cos_t);\nlet h = tx * (sin_t * cos(phi)) + ty * (sin_t * sin(phi)) + n * cos_t;\nlet l = 2.0 * dot(n, h) * h - n;\nlet nl = dot(n, l);\nif (nl > 0.0) {\nlet nh = saturate(dot(n, h));\nlet d = a * a / (3.14159265 * pow(nh * nh * (a * a - 1.0) + 1.0, 2.0));\nlet pdf = d * 0.25 + 1e-4;\nlet sample_solid_angle = 1.0 / (f32(count) * pdf);\nlet lod = clamp(0.5 * log2(sample_solid_angle / texel_solid_angle) + 1.0, 0.0, sky_params.face.z - 1.0);\nsum += textureSampleLevel(source, source_sampler, l, lod).rgb * nl;\nweight += nl;\n}\n}\nreturn vec4f(sum / max(weight, 1e-4), 1.0);\n}";
|
|
20
|
+
};
|
|
21
|
+
/** Linked from shaders/scene/cluster.wesl. */
|
|
22
|
+
export declare const sceneCluster: {
|
|
23
|
+
readonly hash: "7b4a644c0b2109e7";
|
|
24
|
+
readonly wgsl: "@group(0) @binding(0) var<uniform> lights: Lights;\n@group(0) @binding(1) var<uniform> params: ClusterParams;\n@group(0) @binding(2) var bins: texture_storage_2d<r32uint, write>;\n@compute @workgroup_size(64) fn build(@builtin(global_invocation_id) id: vec3u) {\nlet i = id.x;\nif (i >= GRID_X * GRID_Y * GRID_Z) {\nreturn;\n}\nlet tx = i % GRID_X;\nlet ty = (i / GRID_X) % GRID_Y;\nlet tz = i / (GRID_X * GRID_Y);\nlet near = params.proj.z;\nlet z0 = near * exp2(params.screen.w * f32(tz) / f32(GRID_Z));\nlet z1 = near * exp2(params.screen.w * f32(tz + 1u) / f32(GRID_Z));\nlet x0 = -1.0 + 2.0 * f32(tx) / f32(GRID_X);\nlet x1 = x0 + 2.0 / f32(GRID_X);\nlet y1 = 1.0 - 2.0 * f32(ty) / f32(GRID_Y);\nlet y0 = y1 - 2.0 / f32(GRID_Y);\nlet tx0 = x0 * params.proj.x;\nlet tx1 = x1 * params.proj.x;\nlet ty0 = y0 * params.proj.y;\nlet ty1 = y1 * params.proj.y;\nlet lo = vec3f(min(min(tx0 * z0, tx0 * z1), min(tx1 * z0, tx1 * z1)), min(min(ty0 * z0, ty0 * z1), min(ty1 * z0, ty1 * z1)), -z1);\nlet hi = vec3f(max(max(tx0 * z0, tx0 * z1), max(tx1 * z0, tx1 * z1)), max(max(ty0 * z0, ty0 * z1), max(ty1 * z0, ty1 * z1)), -z0);\nvar count = 0u;\nlet total = u32(params.screen.z);\nfor (var l = 0u; l < total; l++) {\nlet light = lights.lights[l];\nlet p = light.pos_range.xyz;\nlet v = vec3f(dot(params.view_x.xyz, p), dot(params.view_y.xyz, p), dot(params.view_z.xyz, p));\nlet closest = clamp(v, lo, hi);\nlet d = v - closest;\nlet r = light.pos_range.w;\nif (dot(d, d) <= r * r && count < CLUSTER_SLOTS) {\ncount++;\ntextureStore(bins, vec2u(count, i), vec4u(l, 0u, 0u, 0u));\n}\n}\ntextureStore(bins, vec2u(0u, i), vec4u(count, 0u, 0u, 0u));\n}\nstruct Lights { lights: array<Light, MAX_LIGHTS> }\nstruct Light {\npos_range: vec4f,\ncolor_kind: vec4f,\ndir_outer: vec4f,\ninner: vec4f,\n}\nconst MAX_LIGHTS: u32 = 256u;\nstruct ClusterParams {\nview_x: vec4f,\nview_y: vec4f,\nview_z: vec4f,\nproj: vec4f,\nscreen: vec4f,\n}\nconst GRID_X: u32 = 16u;\nconst GRID_Y: u32 = 9u;\nconst GRID_Z: u32 = 24u;\nconst CLUSTER_SLOTS: u32 = 63u;";
|
|
25
|
+
};
|
|
26
|
+
/** Linked from shaders/scene/shadow.wesl. */
|
|
27
|
+
export declare const sceneShadow: {
|
|
28
|
+
readonly hash: "15aae914dd0605ce";
|
|
29
|
+
readonly wgsl: "struct Cascade {\nview_proj: mat4x4f,\norigin: vec4f,\n}\n@group(0) @binding(0) var<uniform> cascade: Cascade;\n@group(0) @binding(1) var<storage, read> instances: array<vec4u>;\n@group(0) @binding(2) var<storage, read> visible: array<u32>;\n@group(0) @binding(3) var palette: texture_2d<f32>;\nfn shadow_clip(pos: vec3f, scale: f32, rot: vec4f, position: vec3f) -> vec4f {\nlet world = quat_rotate(rot, position * scale) + pos;\nvar c = cascade.view_proj * vec4f(world, 1.0);\nc.z = min(c.z, 1.0);\nreturn c;\n}\n@vertex fn vs_shadow(@location(0) position: vec3f, @builtin(instance_index) slot: u32) -> @builtin(position) vec4f {\nlet i = visible[slot];\nlet a = bitcast<vec4f>(instances[2u * i]);\nlet b = bitcast<vec4f>(instances[2u * i + 1u]);\nreturn shadow_clip(a.xyz - cascade.origin.xyz, a.w, b, position);\n}\n@vertex fn vs_shadow_attr(@location(0) position: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f) -> @builtin(position) vec4f {\nreturn shadow_clip(pos_scale.xyz, pos_scale.w, rot, position);\n}\n@vertex fn vs_shadow_skinned(@location(0) position: vec3f, @location(6) joints: vec4u, @location(7) weights: vec4f, @builtin(instance_index) slot: u32) -> @builtin(position) vec4f {\nlet i = visible[slot];\nlet a = bitcast<vec4f>(instances[2u * i]);\nlet b = bitcast<vec4f>(instances[2u * i + 1u]);\nlet cap = arrayLength(&instances) / 3u;\nlet s = skin_vertex(palette, instances[2u * cap + i].w, joints, weights, position, vec3f(0.0, 1.0, 0.0));\nreturn shadow_clip(a.xyz - cascade.origin.xyz, a.w, b, s.position);\n}\n@vertex fn vs_shadow_attr_skinned(@location(0) position: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec4u, @location(6) joints: vec4u, @location(7) weights: vec4f) -> @builtin(position) vec4f {\nlet s = skin_vertex(palette, ids.w, joints, weights, position, vec3f(0.0, 1.0, 0.0));\nreturn shadow_clip(pos_scale.xyz, pos_scale.w, rot, s.position);\n}\n@vertex fn vs_shadow_culled_skinned(@location(0) position: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec2u, @location(6) joints: vec4u, @location(7) weights: vec4f) -> @builtin(position) vec4f {\nlet s = skin_vertex(palette, ids.y >> 8u, joints, weights, position, vec3f(0.0, 1.0, 0.0));\nreturn shadow_clip(pos_scale.xyz, pos_scale.w, rot, s.position);\n}\nfn quat_rotate(q: vec4f, v: vec3f) -> vec3f {\nlet t = 2.0 * cross(q.xyz, v);\nreturn v + q.w * t + cross(q.xyz, t);\n}\nfn skin_vertex(palette: texture_2d<f32>, row: u32, joints: vec4u, weights: vec4f, position: vec3f, normal: vec3f) -> Skinned {\nif (row == 0u || dot(weights, vec4f(1.0)) <= 0.0) {\nreturn Skinned(position, normal);\n}\nlet base = row - 1u;\nlet t = (vec4u(base) + joints) * 3u;\nlet r0 = weights.x * palette_texel(palette, t.x) + weights.y * palette_texel(palette, t.y) + weights.z * palette_texel(palette, t.z) + weights.w * palette_texel(palette, t.w);\nlet r1 = weights.x * palette_texel(palette, t.x + 1u) + weights.y * palette_texel(palette, t.y + 1u) + weights.z * palette_texel(palette, t.z + 1u) + weights.w * palette_texel(palette, t.w + 1u);\nlet r2 = weights.x * palette_texel(palette, t.x + 2u) + weights.y * palette_texel(palette, t.y + 2u) + weights.z * palette_texel(palette, t.z + 2u) + weights.w * palette_texel(palette, t.w + 2u);\nlet p = vec4f(position, 1.0);\nreturn Skinned(vec3f(dot(r0, p), dot(r1, p), dot(r2, p)), vec3f(dot(r0.xyz, normal), dot(r1.xyz, normal), dot(r2.xyz, normal)));\n}\nfn palette_texel(palette: texture_2d<f32>, i: u32) -> vec4f {\nreturn textureLoad(palette, vec2u(i % PALETTE_WIDTH, i / PALETTE_WIDTH), 0);\n}\nstruct Skinned {\nposition: vec3f,\nnormal: vec3f,\n}\nconst PALETTE_WIDTH: u32 = 1024u;";
|
|
30
|
+
};
|
|
31
|
+
/** Linked from shaders/debug/lines.wesl. */
|
|
32
|
+
export declare const debugLines: {
|
|
33
|
+
readonly hash: "c52ef6f7a9735afe";
|
|
34
|
+
readonly wgsl: "@group(0) @binding(0) var<uniform> camera: Camera;\nstruct LineOut {\n@builtin(position) pos: vec4f,\n@location(0) color: vec4f,\n}\n@vertex fn vs(@location(0) p: vec3f, @location(1) color: vec4f) -> LineOut {\nvar o: LineOut;\no.pos = camera.view_proj * vec4f(p, 1.0);\no.pos.z = o.pos.z * 1.002;\no.color = color;\nreturn o;\n}\n@fragment fn fs(v: LineOut) -> @location(0) vec4f {\nreturn v.color;\n}\nstruct Camera {\nview_proj: mat4x4f,\nfrustum: array<vec4f, 6>,\nlight_dir: vec4f,\norigin: vec4f,\n}";
|
|
35
|
+
};
|
|
36
|
+
/** Linked from shaders/core/math_check.wesl. */
|
|
37
|
+
export declare const mathCheck: {
|
|
38
|
+
readonly hash: "95aaa0e549f27315";
|
|
39
|
+
readonly wgsl: "struct Case {\na: vec4f,\nb: vec4f,\nop: u32,\npad0: u32,\npad1: u32,\npad2: u32,\n}\n@group(0) @binding(0) var<storage, read> cases: array<Case>;\n@group(0) @binding(1) var<storage, read_write> results: array<vec4f>;\n@compute @workgroup_size(64) fn main(@builtin(global_invocation_id) id: vec3u) {\nlet i = id.x;\nif (i >= arrayLength(&cases)) {\nreturn;\n}\nlet c = cases[i];\nif (c.op == 0u) {\nresults[i] = quat_mul(c.a, c.b);\n} else {\nresults[i] = vec4f(quat_rotate(c.a, c.b.xyz), 0.0);\n}\n}\nfn quat_mul(a: vec4f, b: vec4f) -> vec4f {\nreturn vec4f(a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z);\n}\nfn quat_rotate(q: vec4f, v: vec3f) -> vec3f {\nlet t = 2.0 * cross(q.xyz, v);\nreturn v + q.w * t + cross(q.xyz, t);\n}";
|
|
40
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// GENERATED by tools/shaders-gen.mjs from shaders/**/*.wesl. Do not edit.
|
|
2
|
+
// Regenerate with `node tools/shaders-gen.mjs`; CI runs it with --check.
|
|
3
|
+
/** Linked from shaders/scene/cull.wesl. */
|
|
4
|
+
export const sceneCull = {
|
|
5
|
+
hash: '4bded9ad27febb01',
|
|
6
|
+
wgsl: "struct DrawArgs {\nindex_count: u32,\ninstance_count: atomic<u32>,\nfirst_index: u32,\nbase_vertex: i32,\nfirst_instance: u32,\n}\nstruct CullParams {\ncount: u32,\nlod_scale: f32,\nerror_px: f32,\nmin_radius_px: f32,\n}\n@group(0) @binding(0) var<uniform> camera: Camera;\n@group(0) @binding(1) var<storage, read> instances: array<vec4u>;\nfn load_instance(i: u32) -> Instance {\nlet cap = arrayLength(&instances) / 3u;\nlet a = bitcast<vec4f>(instances[2u * i]);\nlet b = bitcast<vec4f>(instances[2u * i + 1u]);\nlet s = instances[2u * cap + i];\nreturn Instance(a.xyz - camera.origin.xyz, a.w, b, s.x, s.y, s.z, s.w);\n}\n@group(0) @binding(2) var<storage, read> meshes: array<MeshInfo>;\n@group(0) @binding(3) var<storage, read_write> args: array<DrawArgs>;\n@group(0) @binding(4) var<uniform> params: CullParams;\nfn place(inst: Instance) -> u32 {\nlet m = meshes[inst.mesh];\nlet c = inst.pos + quat_rotate(inst.rot, m.center * inst.scale);\nlet r = m.radius * inst.scale;\nfor (var p = 0u; p < 6u; p++) {\nlet plane = camera.frustum[p];\nif (dot(plane.xyz, c) + plane.w < -r) {\nreturn 0xffffffffu;\n}\n}\nreturn place_lod(inst, c, r, 0u, 0u);\n}\nfn place_lod(inst: Instance, c: vec3f, r: f32, slots: u32, region: u32) -> u32 {\nlet m = meshes[inst.mesh];\nlet px = params.lod_scale / max(length(c) - r, 1e-3);\nif (r * px < params.min_radius_px) {\nreturn 0xffffffffu;\n}\nvar lod = 0u;\nfor (var l = 1u; l < m.lod_count; l++) {\nif (m.error[l / 4u][l % 4u] * inst.scale * px > params.error_px) {\nbreak;\n}\nlod = l;\n}\nlet k = atomicAdd(&args[m.draw_base + lod + slots].instance_count, 1u);\nreturn m.instance_base + lod * m.instance_count + k + region;\n}\n@group(0) @binding(5) var<storage, read_write> visible: array<u32>;\n@compute @workgroup_size(64) fn cull(@builtin(global_invocation_id) id: vec3u) {\nlet i = id.x;\nif (i >= params.count) {\nreturn;\n}\nlet dst = place(load_instance(i));\nif (dst != 0xffffffffu) {\nvisible[dst] = i;\n}\n}\n@group(0) @binding(6) var<storage, read_write> compact: array<Instance>;\n@compute @workgroup_size(64) fn cull_compact(@builtin(global_invocation_id) id: vec3u) {\nlet i = id.x;\nif (i >= params.count) {\nreturn;\n}\nlet inst = load_instance(i);\nlet dst = place(inst);\nif (dst != 0xffffffffu) {\ncompact[dst] = inst;\n}\n}\nstruct Camera {\nview_proj: mat4x4f,\nfrustum: array<vec4f, 6>,\nlight_dir: vec4f,\norigin: vec4f,\n}\nstruct Instance {\npos: vec3f,\nscale: f32,\nrot: vec4f,\ncolor: u32,\nmesh: u32,\nmaterial: u32,\nskin: u32,\n}\nstruct MeshInfo {\ncenter: vec3f,\nradius: f32,\nlod_count: u32,\ndraw_base: u32,\ninstance_base: u32,\ninstance_count: u32,\nerror: array<vec4f, 2>,\n}\nfn quat_rotate(q: vec4f, v: vec3f) -> vec3f {\nlet t = 2.0 * cross(q.xyz, v);\nreturn v + q.w * t + cross(q.xyz, t);\n}",
|
|
7
|
+
};
|
|
8
|
+
/** Linked from shaders/scene/draw.wesl. */
|
|
9
|
+
export const sceneDraw = {
|
|
10
|
+
hash: '6a963ff2453af8ae',
|
|
11
|
+
wgsl: "struct Material {\nbase_color: vec4f,\nmaps: vec4u,\nparams: array<vec4f, 2>,\n}\nstruct SurfaceInput {\nuv: vec2f,\nnormal_world: vec3f,\nposition_world: vec3f,\nview_dir: vec3f,\ninstance_color: vec3f,\ntime: f32,\nmaps: vec4u,\nddx: vec2f,\nddy: vec2f,\ntangent: vec3f,\nbitangent: vec3f,\n}\nstruct Surface {\nbase_color: vec3f,\nopacity: f32,\nmetalness: f32,\nroughness: f32,\nemissive: vec3f,\nnormal: vec3f,\nocclusion: f32,\n}\nconst MAX_MATERIALS: u32 = 256u;\n@group(0) @binding(0) var<uniform> camera: Camera;\n@group(0) @binding(1) var<storage, read> instances: array<vec4u>;\nfn load_instance(i: u32) -> Instance {\nlet cap = arrayLength(&instances) / 3u;\nlet a = bitcast<vec4f>(instances[2u * i]);\nlet b = bitcast<vec4f>(instances[2u * i + 1u]);\nlet s = instances[2u * cap + i];\nreturn Instance(a.xyz - camera.origin.xyz, a.w, b, s.x, s.y, s.z, s.w);\n}\n@group(0) @binding(2) var<storage, read> visible: array<u32>;\n@group(0) @binding(3) var<uniform> materials: array<Material, MAX_MATERIALS>;\n@group(0) @binding(4) var srgb_maps: texture_2d_array<f32>;\n@group(0) @binding(5) var map_sampler: sampler;\n@group(0) @binding(6) var linear_maps: texture_2d_array<f32>;\nstruct Lighting {\nsun_color: vec4f,\nenv: vec4f,\nsh: array<vec4f, 9>,\nscreen: vec4f,\n}\n@group(0) @binding(7) var<uniform> lighting: Lighting;\n@group(0) @binding(8) var env_cube: texture_cube<f32>;\n@group(0) @binding(9) var srgb_maps8: texture_2d_array<f32>;\n@group(0) @binding(10) var linear_maps8: texture_2d_array<f32>;\n@group(0) @binding(11) var<uniform> lights: Lights;\n@group(0) @binding(12) var<uniform> cluster: ClusterParams;\n@group(0) @binding(13) var light_bins: texture_2d<u32>;\n@group(0) @binding(18) var<uniform> material_ext: array<vec4u, 1024>;\n@group(0) @binding(19) var scene_color: texture_2d<f32>;\nstruct MaterialExt {\ncoat: f32,\ncoat_rough: f32,\ntransmission: f32,\nsheen: vec4f,\nior: f32,\nthickness: f32,\natt_distance: f32,\natt_color: vec3f,\ndispersion: f32,\n}\nstruct Shadow {\nview_proj: array<mat4x4f, 4>,\nsplits: vec4f,\ntexel: vec4f,\nparams: vec4f,\npcf: vec4f,\n}\n@group(0) @binding(14) var<uniform> shadow: Shadow;\n@group(0) @binding(15) var shadow_atlas: texture_depth_2d;\n@group(0) @binding(16) var shadow_sampler: sampler_comparison;\n@group(0) @binding(17) var palette: texture_2d<f32>;\nstruct VertexOut {\n@builtin(position) clip: vec4f,\n@location(0) normal: vec3f,\n@location(1) color: vec3f,\n@location(2) @interpolate(flat, either) material: u32,\n@location(3) uv: vec2f,\n@location(4) position: vec3f,\n@location(5) @interpolate(flat, either) scale: f32,\n}\nfn shade(inst: Instance, position: vec3f, normal: vec3f, uv: vec2f) -> VertexOut {\nlet world = quat_rotate(inst.rot, position * inst.scale) + inst.pos;\nvar out: VertexOut;\nout.clip = camera.view_proj * vec4f(world, 1.0);\nout.normal = quat_rotate(inst.rot, normal);\nout.color = unpack4x8unorm(inst.color).rgb;\nout.material = inst.material;\nout.uv = uv;\nout.position = world;\nout.scale = inst.scale;\nreturn out;\n}\n@vertex fn vs(@location(0) position: vec3f, @location(1) normal: vec3f, @location(5) uv: vec2f, @builtin(instance_index) slot: u32) -> VertexOut {\nreturn shade(load_instance(visible[slot]), position, normal, uv);\n}\n@vertex fn vs_attr(@location(0) position: vec3f, @location(1) normal: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec4u, @location(5) uv: vec2f) -> VertexOut {\nlet inst = Instance(pos_scale.xyz, pos_scale.w, rot, ids.x, ids.y, ids.z, ids.w);\nreturn shade(inst, position, normal, uv);\n}\n@vertex fn vs_culled(@location(0) position: vec3f, @location(1) normal: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec2u, @location(5) uv: vec2f) -> VertexOut {\nlet inst = Instance(pos_scale.xyz, pos_scale.w, rot, ids.x, 0u, ids.y, 0u);\nreturn shade(inst, position, normal, uv);\n}\n@vertex fn vs_skinned(@location(0) position: vec3f, @location(1) normal: vec3f, @location(5) uv: vec2f, @location(6) joints: vec4u, @location(7) weights: vec4f, @builtin(instance_index) slot: u32) -> VertexOut {\nlet inst = load_instance(visible[slot]);\nlet s = skin_vertex(palette, inst.skin, joints, weights, position, normal);\nreturn shade(inst, s.position, s.normal, uv);\n}\n@vertex fn vs_attr_skinned(@location(0) position: vec3f, @location(1) normal: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec4u, @location(5) uv: vec2f, @location(6) joints: vec4u, @location(7) weights: vec4f) -> VertexOut {\nlet inst = Instance(pos_scale.xyz, pos_scale.w, rot, ids.x, ids.y, ids.z, ids.w);\nlet s = skin_vertex(palette, ids.w, joints, weights, position, normal);\nreturn shade(inst, s.position, s.normal, uv);\n}\n@vertex fn vs_culled_skinned(@location(0) position: vec3f, @location(1) normal: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec2u, @location(5) uv: vec2f, @location(6) joints: vec4u, @location(7) weights: vec4f) -> VertexOut {\nlet inst = Instance(pos_scale.xyz, pos_scale.w, rot, ids.x, 0u, ids.y & 0xffu, 0u);\nlet s = skin_vertex(palette, ids.y >> 8u, joints, weights, position, normal);\nreturn shade(inst, s.position, s.normal, uv);\n}\nfn sample_map(maps: texture_2d_array<f32>, maps8: texture_2d_array<f32>, slot: u32, uv: vec2f, ddx: vec2f, ddy: vec2f) -> vec4f {\nlet state = (slot >> 24u) & 3u;\nif (state != 1u) {\nlet checker = select(vec4f(0.05, 0.05, 0.05, 1.0), vec4f(1.0, 0.0, 1.0, 1.0), (u32(floor(uv.x * 8.0)) + u32(floor(uv.y * 8.0))) % 2u == 0u);\nreturn select(vec4f(1.0), checker, state == 2u);\n}\nlet first_mip = f32((slot >> 16u) & 31u);\nlet size = f32(textureDimensions(maps).x);\nlet major = max(length(ddx), length(ddy)) * size;\nlet minor = min(length(ddx), length(ddy)) * size;\nlet near_top = log2(max(max(major * 0.25, minor), 1e-8)) < first_mip + 1.0;\nlet level = max(log2(max(major, 1e-8)), first_mip);\nlet layer = slot & 0xffffu;\nlet rgba8 = ((slot >> 21u) & 1u) == 1u;\nvar c: vec4f;\nif (near_top) {\nc = select(textureSampleLevel(maps, map_sampler, uv, layer, level), textureSampleLevel(maps8, map_sampler, uv, layer, level), rgba8);\n} else if (rgba8) {\nc = textureSampleGrad(maps8, map_sampler, uv, layer, ddx, ddy);\n} else {\nc = textureSampleGrad(maps, map_sampler, uv, layer, ddx, ddy);\n}\nreturn c;\n}\nfn sample_srgb(slot: u32, uv: vec2f, ddx: vec2f, ddy: vec2f) -> vec4f {\nreturn sample_map(srgb_maps, srgb_maps8, slot, uv, ddx, ddy);\n}\nfn sample_linear(slot: u32, uv: vec2f, ddx: vec2f, ddy: vec2f) -> vec4f {\nreturn sample_map(linear_maps, linear_maps8, slot, uv, ddx, ddy);\n}\nfn standard_surface(in: SurfaceInput, m: Material) -> Surface {\nlet base = sample_srgb(in.maps.x, in.uv, in.ddx, in.ddy);\nlet orm = sample_linear(in.maps.z, in.uv, in.ddx, in.ddy);\nlet glow = sample_srgb(in.maps.w, in.uv, in.ddx, in.ddy);\nlet nm = sample_linear(in.maps.y, in.uv, in.ddx, in.ddy).xyz * 2.0 - 1.0;\nlet tn = vec3f(nm.xy * m.params[0].z, nm.z);\nlet mapped = normalize(in.tangent * tn.x + in.bitangent * tn.y + in.normal_world * tn.z);\nlet has_normal_map = ((in.maps.y >> 24u) & 3u) == 1u;\nreturn Surface(in.instance_color * m.base_color.rgb * base.rgb, m.base_color.a * base.a, m.params[0].x * orm.b, m.params[0].y * orm.g, m.params[1].xyz * glow.rgb, select(in.normal_world, mapped, has_normal_map),\nmix(1.0, orm.r, m.params[0].w));\n}\nconst PI = 3.14159265358979;\nfn sh_irradiance(n: vec3f) -> vec3f {\nreturn max(lighting.sh[0].rgb * 0.282095 + lighting.sh[1].rgb * (0.488603 * n.y) + lighting.sh[2].rgb * (0.488603 * n.z) + lighting.sh[3].rgb * (0.488603 * n.x) + lighting.sh[4].rgb * (1.092548 * n.x * n.y) + lighting.sh[5].rgb * (1.092548 * n.y * n.z) + lighting.sh[6].rgb * (0.315392 * (3.0 * n.z * n.z - 1.0)) + lighting.sh[7].rgb * (1.092548 * n.x * n.z) + lighting.sh[8].rgb * (0.546274 * (n.x * n.x - n.y * n.y)), vec3f(0.0));\n}\nfn env_brdf(f0: vec3f, roughness: f32, nv: f32) -> vec3f {\nlet c0 = vec4f(-1.0, -0.0275, -0.572, 0.022);\nlet c1 = vec4f(1.0, 0.0425, 1.04, -0.04);\nlet r = roughness * c0 + c1;\nlet a004 = min(r.x * r.x, exp2(-9.28 * nv)) * r.x + r.y;\nlet ab = vec2f(-1.04, 1.04) * a004 + r.zw;\nreturn f0 * ab.x + ab.y;\n}\nstruct Brdf {\nn: vec3f,\nv: vec3f,\nnv: f32,\na2: f32,\nf0: vec3f,\ndiffuse_color: vec3f,\ncoat: f32,\ncoat_a2: f32,\nsheen: vec3f,\nsheen_rough: f32,\nsheen_scale: f32,\n}\nfn sheen_d(rough: f32, nh: f32) -> f32 {\nlet inv = 1.0 / max(rough * rough, 1e-3);\nlet sin2 = max(1.0 - nh * nh, 0.0078125);\nreturn (2.0 + inv) * pow(sin2, inv * 0.5) / (2.0 * PI);\n}\nfn sheen_env(nv: f32, rough: f32) -> f32 {\nlet r2 = rough * rough;\nlet lo = rough < 0.25;\nlet a = select(-8.48 * r2 + 14.3 * rough - 9.95, -339.2 * r2 + 161.4 * rough - 25.9, lo);\nlet b = select(1.97 * r2 - 3.27 * rough + 0.72, 44.0 * r2 - 23.7 * rough + 3.26, lo);\nlet dg = exp(a * nv + b) + select(0.1 * (rough - 0.25), 0.0, lo);\nreturn min(dg, PI);\n}\nfn direct_light(b: Brdf, l: vec3f, radiance: vec3f) -> vec3f {\nlet h = normalize(b.v + l);\nlet nl = saturate(dot(b.n, l));\nlet nh = saturate(dot(b.n, h));\nlet vh = saturate(dot(b.v, h));\nlet f = b.f0 + (vec3f(1.0) - b.f0) * pow(1.0 - vh, 5.0);\nlet dd = nh * nh * (b.a2 - 1.0) + 1.0;\nlet d = b.a2 / (PI * dd * dd);\nlet vis = 0.5 / max(nl * sqrt(b.nv * b.nv * (1.0 - b.a2) + b.a2) + b.nv * sqrt(nl * nl * (1.0 - b.a2) + b.a2), 1e-5);\nvar c = (b.diffuse_color / PI + d * vis * f) * radiance * nl;\nif (b.sheen_scale < 1.0) {\nlet sv = 1.0 / max(4.0 * (nl + b.nv - nl * b.nv), 1e-4);\nc = c * b.sheen_scale + b.sheen * (sheen_d(b.sheen_rough, nh) * sv * nl) * radiance;\n}\nif (b.coat > 0.0) {\nlet fc = (0.04 + 0.96 * pow(1.0 - vh, 5.0)) * b.coat;\nlet cd = nh * nh * (b.coat_a2 - 1.0) + 1.0;\nlet dc = b.coat_a2 / (PI * cd * cd);\nc = c * (1.0 - fc) + vec3f(dc * 0.25 / max(vh * vh, 1e-4) * fc * nl) * radiance;\n}\nreturn c;\n}\nfn clustered_lights(b: Brdf, p: vec3f, frag: vec2f) -> vec3f {\nif (cluster.screen.z < 0.5) {\nreturn vec3f(0.0);\n}\nlet ci = cluster_index(frag, view_depth(p, cluster), cluster);\nlet count = textureLoad(light_bins, vec2u(0u, ci), 0).x;\nvar sum = vec3f(0.0);\nfor (var k = 0u; k < count; k++) {\nlet light = lights.lights[textureLoad(light_bins, vec2u(k + 1u, ci), 0).x];\nlet to_light = light.pos_range.xyz - p;\nlet dist2 = max(dot(to_light, to_light), 1e-4);\nlet dist = sqrt(dist2);\nlet l = to_light / dist;\nvar atten = range_window(dist, light.pos_range.w) / dist2;\nlet cone = smoothstep(light.dir_outer.w, light.inner.x, dot(-l, light.dir_outer.xyz));\natten *= select(1.0, cone, light.color_kind.w > 0.5);\nsum += direct_light(b, l, light.color_kind.rgb * atten);\n}\nreturn sum;\n}\nfn clustered_diffuse(n: vec3f, diffuse: vec3f, p: vec3f, frag: vec2f) -> vec3f {\nif (cluster.screen.z < 0.5) {\nreturn vec3f(0.0);\n}\nlet ci = cluster_index(frag, view_depth(p, cluster), cluster);\nlet count = textureLoad(light_bins, vec2u(0u, ci), 0).x;\nvar sum = vec3f(0.0);\nfor (var k = 0u; k < count; k++) {\nlet light = lights.lights[textureLoad(light_bins, vec2u(k + 1u, ci), 0).x];\nlet to_light = light.pos_range.xyz - p;\nlet dist2 = max(dot(to_light, to_light), 1e-4);\nlet l = to_light * inverseSqrt(dist2);\nvar atten = range_window(sqrt(dist2), light.pos_range.w) / dist2;\nlet cone = smoothstep(light.dir_outer.w, light.inner.x, dot(-l, light.dir_outer.xyz));\natten *= select(1.0, cone, light.color_kind.w > 0.5);\nsum += light.color_kind.rgb * (atten * saturate(dot(n, l)));\n}\nreturn diffuse / PI * sum;\n}\nfn shade_pbr(s: Surface, v: vec3f, p: vec3f, frag: vec2f, sun: f32, ext: MaterialExt) -> vec3f {\nlet rough = clamp(s.roughness, 0.045, 1.0);\nlet a = rough * rough;\nvar b: Brdf;\nb.n = s.normal;\nb.v = v;\nb.nv = max(dot(s.normal, v), 1e-4);\nb.a2 = a * a;\nlet eta = select(0.2, (ext.ior - 1.0) / (ext.ior + 1.0), ext.ior > 0.0);\nb.f0 = mix(vec3f(eta * eta), s.base_color, s.metalness);\nb.diffuse_color = s.base_color * (1.0 - s.metalness) * (1.0 - ext.transmission);\nb.coat = ext.coat;\nlet coat_rough = clamp(ext.coat_rough, 0.045, 1.0);\nb.coat_a2 = coat_rough * coat_rough * coat_rough * coat_rough;\nb.sheen = ext.sheen.rgb;\nb.sheen_rough = max(ext.sheen.a, 0.07);\nb.sheen_scale = 1.0 - max(b.sheen.r, max(b.sheen.g, b.sheen.b)) * 0.157;\nlet direct = direct_light(b, camera.light_dir.xyz, lighting.sun_color.rgb * sun) + clustered_lights(b, p, frag);\nlet r = reflect(-v, b.n);\nlet specular_env = textureSampleLevel(env_cube, map_sampler, r, rough * (lighting.env.x - 1.0)).rgb * env_brdf(b.f0, rough, b.nv);\nvar ambient = b.diffuse_color * sh_irradiance(b.n) + specular_env;\nif (b.sheen_scale < 1.0) {\nambient = ambient * b.sheen_scale + b.sheen * sh_irradiance(b.n) * sheen_env(b.nv, b.sheen_rough);\n}\nif (b.coat > 0.0) {\nlet fc = (0.04 + 0.96 * pow(1.0 - b.nv, 5.0)) * b.coat;\nlet coat_env = textureSampleLevel(env_cube, map_sampler, r, coat_rough * (lighting.env.x - 1.0)).rgb * env_brdf(vec3f(0.04), coat_rough, b.nv);\nambient = ambient * (1.0 - fc) + coat_env * b.coat;\n}\nreturn direct + ambient * s.occlusion * lighting.sun_color.w + s.emissive;\n}\nfn screen_level(uv: vec2f, level: i32) -> vec3f {\nlet size = vec2i(textureDimensions(scene_color, level));\nlet p = clamp(uv, vec2f(0.0), vec2f(1.0)) * vec2f(size) - 0.5;\nlet i = vec2i(floor(p));\nlet t = p - floor(p);\nlet hi = size - 1;\nlet a = textureLoad(scene_color, clamp(i, vec2i(0), hi), level).rgb;\nlet b = textureLoad(scene_color, clamp(i + vec2i(1, 0), vec2i(0), hi), level).rgb;\nlet c = textureLoad(scene_color, clamp(i + vec2i(0, 1), vec2i(0), hi), level).rgb;\nlet d = textureLoad(scene_color, clamp(i + vec2i(1, 1), vec2i(0), hi), level).rgb;\nreturn mix(mix(a, b, t.x), mix(c, d, t.x), t.y);\n}\nfn screen_blur(uv: vec2f, roughness: f32) -> vec3f {\nlet levels = max(lighting.screen.w, 1.0);\nlet r = roughness * roughness * 0.04 * f32(textureDimensions(scene_color).y);\nlet lod = clamp(log2(max(r, 1e-6)), 0.0, levels - 1.0);\nlet l0 = floor(lod);\nreturn mix(screen_level(uv, i32(l0)), screen_level(uv, i32(min(l0 + 1.0, levels - 1.0))), lod - l0);\n}\nfn material_ext_of(id: u32, m: Material, si: SurfaceInput) -> MaterialExt {\nvar x: MaterialExt;\nlet i = min(id, MAX_MATERIALS - 1u) * 4u;\nif ((m.maps.x >> 26u) != 0u) {\nreturn x;\n}\nlet vol = material_ext[i + 2u];\nx.ior = bitcast<f32>(vol.x);\nx.thickness = bitcast<f32>(vol.y);\nx.att_distance = bitcast<f32>(vol.z);\nx.att_color = unpack4x8unorm(vol.w).rgb;\nlet w = material_ext[i];\nif (all(w == vec4u(0u))) {\nreturn x;\n}\nlet slots = material_ext[i + 1u];\nlet sheen = unpack4x8unorm(w.w);\nx.coat = bitcast<f32>(w.x) * sample_linear(slots.x, si.uv, si.ddx, si.ddy).r;\nx.coat_rough = bitcast<f32>(w.y) * sample_linear(slots.y, si.uv, si.ddx, si.ddy).g;\nx.transmission = bitcast<f32>(w.z) * sample_linear(slots.z, si.uv, si.ddx, si.ddy).r;\nlet more = material_ext[i + 3u];\nx.dispersion = bitcast<f32>(more.x);\nif (x.thickness > 0.0) {\nx.thickness *= sample_linear(more.y, si.uv, si.ddx, si.ddy).g;\n}\nx.sheen = vec4f(sheen.rgb * sample_srgb(slots.w, si.uv, si.ddx, si.ddy).rgb, sheen.a);\nreturn x;\n}\nfn shadow_compare(uv: vec2f, depth_ref: f32) -> f32 {\nif (shadow.pcf.y < 0.5) {\nreturn textureSampleCompareLevel(shadow_atlas, shadow_sampler, uv, depth_ref);\n}\nlet size = vec2f(textureDimensions(shadow_atlas));\nlet p = uv * size - 0.5;\nlet f = fract(p);\nlet base = (floor(p) + 0.5) / size;\nlet dx = vec2f(1.0 / size.x, 0.0);\nlet dy = vec2f(0.0, 1.0 / size.y);\nlet a = textureSampleCompareLevel(shadow_atlas, shadow_sampler, base, depth_ref);\nlet b = textureSampleCompareLevel(shadow_atlas, shadow_sampler, base + dx, depth_ref);\nlet c = textureSampleCompareLevel(shadow_atlas, shadow_sampler, base + dy, depth_ref);\nlet d = textureSampleCompareLevel(shadow_atlas, shadow_sampler, base + dx + dy, depth_ref);\nreturn mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\nfn sun_shadow(p: vec3f, n: vec3f, depth: f32) -> f32 {\nlet count = u32(shadow.params.x);\nif (count == 0u || depth >= shadow.params.w) {\nreturn 1.0;\n}\nvar c = 0u;\nfor (; c + 1u < count; c++) {\nif (depth < shadow.splits[c]) {\nbreak;\n}\n}\nlet nl = saturate(dot(n, camera.light_dir.xyz));\nlet offset = (n * (0.75 + 1.5 * (1.0 - nl)) + camera.light_dir.xyz) * shadow.texel[c];\nlet lp = shadow.view_proj[c] * vec4f(p + offset, 1.0);\nlet texel = shadow.params.y;\nlet uv = clamp(vec2f(lp.x * 0.5 + 0.5, 0.5 - lp.y * 0.5), vec2f(1.5 * texel), vec2f(1.0 - 1.5 * texel));\nlet tile = vec2f((uv.x + f32(c)) / f32(count), uv.y);\nlet tap = vec2f(texel / f32(count), texel);\nlet depth_ref = min(lp.z, 1.0);\nlet r = i32(shadow.pcf.x);\nvar lit = 0.0;\nfor (var y = -r; y <= r; y++) {\nfor (var x = -r; x <= r; x++) {\nlit += shadow_compare(tile + vec2f(f32(x), f32(y)) * tap, depth_ref);\n}\n}\nlet taps = f32((2 * r + 1) * (2 * r + 1));\nlet fade = saturate((depth - shadow.params.z) / max(shadow.params.w - shadow.params.z, 1e-3));\nreturn mix(lit / taps, 1.0, fade);\n}\n// @yali:materials begin (SceneRenderer replaces this block with the app's node materials, ADR-0064)\nfn material_surface(shader: u32, in: SurfaceInput, m: Material) -> Surface {\nreturn standard_surface(in, m);\n}\n// @yali:materials end\nfn surface_input(in: VertexOut, front: bool, m: Material) -> SurfaceInput {\nvar si: SurfaceInput;\nsi.uv = in.uv;\nsi.normal_world = facing(normalize(in.normal), front);\nsi.position_world = in.position;\nsi.view_dir = normalize(-in.position);\nsi.instance_color = in.color;\nsi.time = camera.light_dir.w;\nsi.maps = m.maps & vec4u(0x03ffffffu);\nsi.ddx = dpdx(in.uv);\nsi.ddy = dpdy(in.uv);\nlet dp1 = dpdx(in.position);\nlet dp2 = dpdy(in.position);\nlet n = si.normal_world;\nlet dp2perp = cross(dp2, n);\nlet dp1perp = cross(n, dp1);\nlet t = dp2perp * si.ddx.x + dp1perp * si.ddy.x;\nlet b = dp2perp * si.ddx.y + dp1perp * si.ddy.y;\nlet inv = inverseSqrt(max(max(dot(t, t), dot(b, b)), 1e-20));\nsi.tangent = -t * inv;\nsi.bitangent = b * inv;\nreturn si;\n}\nfn refracted_uv(p: vec3f, view_dir: vec3f, n: vec3f, ior: f32, thick: f32) -> vec2f {\nlet rd = refract(-view_dir, n, 1.0 / max(ior, 1.0));\nlet clip = camera.view_proj * vec4f(p + rd * thick, 1.0);\nreturn clip.xy / max(clip.w, 1e-4) * vec2f(0.5, -0.5) + 0.5;\n}\nfn in_layer(id: u32) -> bool {\nif (lighting.screen.x < 0.5) {\nreturn true;\n}\nlet layer = material_ext[min(id, MAX_MATERIALS - 1u) * 4u + 3u].z;\nreturn layer == select(0u, 1u, lighting.screen.x > 1.5);\n}\nfn frag_pbr(in: VertexOut, front: bool) -> vec4f {\nlet m = materials[min(in.material, MAX_MATERIALS - 1u)];\nlet si = surface_input(in, front, m);\nlet s = material_surface(m.maps.x >> 26u, si, m);\nlet sun = sun_shadow(in.position, si.normal_world, view_depth(in.position, cluster));\nlet ext = material_ext_of(in.material, m, si);\nlet c = shade_pbr(s, si.view_dir, in.position, in.clip.xy, sun, ext);\nif (ext.transmission <= 0.0) {\nreturn vec4f(c, s.opacity);\n}\nlet f0 = select(0.04, pow((ext.ior - 1.0) / (ext.ior + 1.0), 2.0), ext.ior > 0.0);\nlet fresnel = f0 + (1.0 - f0) * pow(1.0 - max(dot(s.normal, si.view_dir), 0.0), 5.0);\nif (lighting.screen.x > 0.5) {\nlet thick = ext.thickness * in.scale;\nvar behind: vec3f;\nif (ext.dispersion > 0.0) {\nlet spread = (ext.ior - 1.0) * 0.025 * ext.dispersion;\nbehind = vec3f(screen_blur(refracted_uv(in.position, si.view_dir, s.normal, ext.ior - spread, thick), s.roughness).r, screen_blur(refracted_uv(in.position, si.view_dir, s.normal, ext.ior, thick), s.roughness).g, screen_blur(refracted_uv(in.position, si.view_dir, s.normal, ext.ior + spread, thick), s.roughness).b);\n} else {\nbehind = screen_blur(refracted_uv(in.position, si.view_dir, s.normal, ext.ior, thick), s.roughness);\n}\nif (ext.att_distance > 0.0) {\nbehind *= pow(ext.att_color, vec3f(thick / ext.att_distance));\n}\nreturn vec4f(c + behind * s.base_color * ext.transmission * (1.0 - fresnel), 1.0);\n}\nlet alpha = s.opacity * (1.0 - ext.transmission * (1.0 - fresnel));\nreturn vec4f(c / max(alpha, 0.02), alpha);\n}\nfn finish(color: vec3f, alpha: f32) -> vec4f {\nif (lighting.env.y > 0.5) {\nreturn vec4f(tone_map(color * lighting.env.z, u32(lighting.env.w)), alpha);\n}\nreturn vec4f(color, alpha);\n}\nfn facing(n: vec3f, front: bool) -> vec3f {\nreturn select(-n, n, front);\n}\nfn alpha_cutoff(m: Material) -> f32 {\nreturn select(0.5, m.params[1].w, (m.maps.x >> 26u) == 0u);\n}\n@fragment fn fs(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nreturn finish(frag_pbr(in, front).rgb, 1.0);\n}\n@fragment fn fs_mask(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nlet c = frag_pbr(in, front);\nif (c.a < alpha_cutoff(materials[min(in.material, MAX_MATERIALS - 1u)])) {\ndiscard;\n}\nreturn finish(c.rgb, 1.0);\n}\n@fragment fn fs_blend(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nif (!in_layer(in.material)) {\ndiscard;\n}\nlet c = frag_pbr(in, front);\nreturn finish(c.rgb, c.a);\n}\n@fragment fn fs_lambert(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nreturn finish(frag_lambert(in, front).rgb, 1.0);\n}\n@fragment fn fs_lambert_mask(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nlet c = frag_lambert(in, front);\nif (c.a < alpha_cutoff(materials[min(in.material, MAX_MATERIALS - 1u)])) {\ndiscard;\n}\nreturn finish(c.rgb, 1.0);\n}\n@fragment fn fs_lambert_blend(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nif (!in_layer(in.material)) {\ndiscard;\n}\nlet c = frag_lambert(in, front);\nreturn finish(c.rgb, c.a);\n}\n@fragment fn fs_flat(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nreturn finish(frag_flat(in, front).rgb, 1.0);\n}\n@fragment fn fs_flat_mask(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nlet c = frag_flat(in, front);\nif (c.a < alpha_cutoff(materials[min(in.material, MAX_MATERIALS - 1u)])) {\ndiscard;\n}\nreturn finish(c.rgb, 1.0);\n}\n@fragment fn fs_flat_blend(in: VertexOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nif (!in_layer(in.material)) {\ndiscard;\n}\nlet c = frag_flat(in, front);\nreturn finish(c.rgb, c.a);\n}\nstruct MaskMotion {\nview_proj: mat4x4f,\nprev_view_proj: mat4x4f,\nprev_origin: vec4f,\n}\n@group(0) @binding(20) var<uniform> mask_motion: MaskMotion;\n@group(0) @binding(21) var<storage, read> prev_instances: array<vec4u>;\n@group(0) @binding(22) var prev_palette: texture_2d<f32>;\nstruct MaskMotionOut {\n@builtin(position) clip: vec4f,\n@location(0) normal: vec3f,\n@location(1) color: vec3f,\n@location(2) @interpolate(flat, either) material: u32,\n@location(3) uv: vec2f,\n@location(4) position: vec3f,\n@location(5) @interpolate(flat, either) scale: f32,\n@location(6) now: vec4f,\n@location(7) then: vec4f,\n}\nfn prev_world(i: u32, p: vec3f) -> vec3f {\nlet a = bitcast<vec4f>(prev_instances[2u * i]);\nlet q = bitcast<vec4f>(prev_instances[2u * i + 1u]);\nreturn quat_rotate(q, p * a.w) + a.xyz - mask_motion.prev_origin.xyz;\n}\nfn mask_motion_out(v: VertexOut, then: vec3f) -> MaskMotionOut {\nvar o: MaskMotionOut;\no.clip = v.clip;\no.normal = v.normal;\no.color = v.color;\no.material = v.material;\no.uv = v.uv;\no.position = v.position;\no.scale = v.scale;\no.now = mask_motion.view_proj * vec4f(v.position, 1.0);\no.then = mask_motion.prev_view_proj * vec4f(then, 1.0);\nreturn o;\n}\n@vertex fn vs_motion_mask(@location(0) position: vec3f, @location(1) normal: vec3f, @location(5) uv: vec2f, @location(8) then_position: vec3f, @builtin(instance_index) slot: u32) -> MaskMotionOut {\nlet i = visible[slot];\nreturn mask_motion_out(shade(load_instance(i), position, normal, uv), prev_world(i, then_position));\n}\n@vertex fn vs_motion_mask_skinned(@location(0) position: vec3f, @location(1) normal: vec3f, @location(5) uv: vec2f, @location(6) joints: vec4u, @location(7) weights: vec4f, @location(8) then_position: vec3f, @builtin(instance_index) slot: u32) -> MaskMotionOut {\nlet i = visible[slot];\nlet inst = load_instance(i);\nlet s = skin_vertex(palette, inst.skin, joints, weights, position, normal);\nlet then = skin_vertex(prev_palette, inst.skin, joints, weights, then_position, normal);\nreturn mask_motion_out(shade(inst, s.position, s.normal, uv), prev_world(i, then.position));\n}\n@fragment fn fs_motion_blend(in: MaskMotionOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nif (material_ext[min(in.material, MAX_MATERIALS - 1u) * 4u + 3u].w == 0u) {\ndiscard;\n}\nreturn motion_cut(in, front);\n}\n@fragment fn fs_motion_mask(in: MaskMotionOut, @builtin(front_facing) front: bool) -> @location(0) vec4f {\nreturn motion_cut(in, front);\n}\nfn motion_cut(in: MaskMotionOut, front: bool) -> vec4f {\nvar v: VertexOut;\nv.clip = in.clip;\nv.normal = in.normal;\nv.color = in.color;\nv.material = in.material;\nv.uv = in.uv;\nv.position = in.position;\nv.scale = in.scale;\nlet m = materials[min(in.material, MAX_MATERIALS - 1u)];\nlet s = material_surface(m.maps.x >> 26u, surface_input(v, front, m), m);\nif (s.opacity < alpha_cutoff(m)) {\ndiscard;\n}\nvar anchor = 0.0;\nif (lighting.env.x < 0.0) {\nanchor = bindings_anchor().x;\n}\nlet now = in.now.xy / in.now.w;\nlet then = in.then.xy / max(in.then.w, 1e-6);\nreturn vec4f((now - then) * vec2f(0.5, -0.5), in.then.w + anchor, 1.0);\n}\nfn bindings_anchor() -> vec3f {\nlet t = textureSampleLevel(srgb_maps, map_sampler, vec2f(0.0), 0, 0.0) + textureSampleLevel(linear_maps, map_sampler, vec2f(0.0), 0, 0.0) + textureSampleLevel(srgb_maps8, map_sampler, vec2f(0.0), 0, 0.0) + textureSampleLevel(linear_maps8, map_sampler, vec2f(0.0), 0, 0.0);\nlet e = textureSampleLevel(env_cube, map_sampler, vec3f(0.0, 0.0, 1.0), 0.0);\nlet b = f32(textureLoad(light_bins, vec2u(0u), 0).x);\nlet d = textureSampleCompareLevel(shadow_atlas, shadow_sampler, vec2f(0.0), 0.5);\nreturn t.rgb + e.rgb + lights.lights[0].pos_range.xyz + vec3f(b + d + shadow.params.x + cluster.proj.x + lighting.sh[0].x + f32(material_ext[0].x) + textureLoad(scene_color, vec2i(0), 0).x);\n}\nfn frag_lambert(in: VertexOut, front: bool) -> vec4f {\nlet m = materials[min(in.material, MAX_MATERIALS - 1u)];\nvar si: SurfaceInput;\nsi.uv = in.uv;\nsi.normal_world = facing(normalize(in.normal), front);\nsi.position_world = in.position;\nsi.view_dir = normalize(-in.position);\nsi.instance_color = in.color;\nsi.time = camera.light_dir.w;\nsi.maps = (m.maps & vec4u(0x03ffffffu)) & vec4u(0xffffffffu, 0u, 0xffffffffu, 0xffffffffu);\nsi.ddx = dpdx(in.uv);\nsi.ddy = dpdy(in.uv);\nlet s = material_surface(m.maps.x >> 26u, si, m);\nlet sun = sun_shadow(in.position, si.normal_world, view_depth(in.position, cluster));\nlet diffuse = s.base_color * (1.0 - 0.5 * s.metalness);\nlet nl = saturate(dot(s.normal, camera.light_dir.xyz));\nvar color = diffuse / PI * lighting.sun_color.rgb * sun * nl + diffuse * sh_irradiance(s.normal) * s.occlusion * lighting.sun_color.w + s.emissive + clustered_diffuse(s.normal, diffuse, in.position, in.clip.xy);\nif (lighting.env.x < 0.0) {\ncolor += bindings_anchor();\n}\nreturn vec4f(color, s.opacity);\n}\nfn frag_flat(in: VertexOut, front: bool) -> vec4f {\nlet m = materials[min(in.material, MAX_MATERIALS - 1u)];\nlet base = in.color * m.base_color.rgb;\nlet n = facing(normalize(in.normal), front);\nlet nl = saturate(dot(n, camera.light_dir.xyz));\nlet ambient = max(lighting.sh[0].rgb * 0.282095, vec3f(0.0)) * lighting.sun_color.w;\nvar color = base / PI * lighting.sun_color.rgb * nl + base * ambient + m.params[1].xyz + clustered_diffuse(n, base, in.position, in.clip.xy);\nif (lighting.env.x < 0.0) {\ncolor += bindings_anchor();\n}\nreturn vec4f(color, m.base_color.a);\n}\nstruct Camera {\nview_proj: mat4x4f,\nfrustum: array<vec4f, 6>,\nlight_dir: vec4f,\norigin: vec4f,\n}\nstruct Instance {\npos: vec3f,\nscale: f32,\nrot: vec4f,\ncolor: u32,\nmesh: u32,\nmaterial: u32,\nskin: u32,\n}\nstruct Lights { lights: array<Light, MAX_LIGHTS> }\nstruct Light {\npos_range: vec4f,\ncolor_kind: vec4f,\ndir_outer: vec4f,\ninner: vec4f,\n}\nconst MAX_LIGHTS: u32 = 256u;\nstruct ClusterParams {\nview_x: vec4f,\nview_y: vec4f,\nview_z: vec4f,\nproj: vec4f,\nscreen: vec4f,\n}\nfn quat_rotate(q: vec4f, v: vec3f) -> vec3f {\nlet t = 2.0 * cross(q.xyz, v);\nreturn v + q.w * t + cross(q.xyz, t);\n}\nfn skin_vertex(palette: texture_2d<f32>, row: u32, joints: vec4u, weights: vec4f, position: vec3f, normal: vec3f) -> Skinned {\nif (row == 0u || dot(weights, vec4f(1.0)) <= 0.0) {\nreturn Skinned(position, normal);\n}\nlet base = row - 1u;\nlet t = (vec4u(base) + joints) * 3u;\nlet r0 = weights.x * palette_texel(palette, t.x) + weights.y * palette_texel(palette, t.y) + weights.z * palette_texel(palette, t.z) + weights.w * palette_texel(palette, t.w);\nlet r1 = weights.x * palette_texel(palette, t.x + 1u) + weights.y * palette_texel(palette, t.y + 1u) + weights.z * palette_texel(palette, t.z + 1u) + weights.w * palette_texel(palette, t.w + 1u);\nlet r2 = weights.x * palette_texel(palette, t.x + 2u) + weights.y * palette_texel(palette, t.y + 2u) + weights.z * palette_texel(palette, t.z + 2u) + weights.w * palette_texel(palette, t.w + 2u);\nlet p = vec4f(position, 1.0);\nreturn Skinned(vec3f(dot(r0, p), dot(r1, p), dot(r2, p)), vec3f(dot(r0.xyz, normal), dot(r1.xyz, normal), dot(r2.xyz, normal)));\n}\nfn palette_texel(palette: texture_2d<f32>, i: u32) -> vec4f {\nreturn textureLoad(palette, vec2u(i % PALETTE_WIDTH, i / PALETTE_WIDTH), 0);\n}\nstruct Skinned {\nposition: vec3f,\nnormal: vec3f,\n}\nconst PALETTE_WIDTH: u32 = 1024u;\nfn cluster_index(frag: vec2f, depth: f32, c: ClusterParams) -> u32 {\nlet tile = min(vec2u(frag / c.screen.xy * vec2f(f32(GRID_X), f32(GRID_Y))), vec2u(GRID_X - 1u, GRID_Y - 1u));\nlet slice = u32(clamp(log2(max(depth, c.proj.z) / c.proj.z) / c.screen.w * f32(GRID_Z), 0.0, f32(GRID_Z - 1u)));\nreturn (slice * GRID_Y + tile.y) * GRID_X + tile.x;\n}\nfn view_depth(p: vec3f, c: ClusterParams) -> f32 {\nreturn -dot(c.view_z.xyz, p);\n}\nfn range_window(dist: f32, range: f32) -> f32 {\nlet x = dist / range;\nlet t = saturate(1.0 - x * x * x * x);\nreturn t * t;\n}\nconst GRID_X: u32 = 16u;\nconst GRID_Y: u32 = 9u;\nconst GRID_Z: u32 = 24u;\nfn tone_map(linear_in: vec3f, curve: u32) -> vec3f {\nreturn srgb_encode(tone_curve(linear_in, curve));\n}\nfn srgb_encode(c: vec3f) -> vec3f {\nlet lo = c * 12.92;\nlet hi = 1.055 * pow(c, vec3f(1.0 / 2.4)) - 0.055;\nreturn select(hi, lo, c <= vec3f(0.0031308));\n}\nfn tone_curve(linear_in: vec3f, curve: u32) -> vec3f {\nlet linear = max(linear_in, vec3f(0.0));\nvar mapped: vec3f;\nswitch curve {\ncase 0u: {\nmapped = pbr_neutral(linear);\n}\ncase 1u: {\nmapped = aces(linear);\n}\ndefault: {\nmapped = saturate(linear);\n}\n}\nreturn saturate(mapped);\n}\nfn pbr_neutral(color: vec3f) -> vec3f {\nlet start = 0.8 - 0.04;\nlet desaturation = 0.15;\nlet x = min(color.r, min(color.g, color.b));\nlet offset = select(0.04, x - 6.25 * x * x, x < 0.08);\nvar c = color - offset;\nlet peak = max(c.r, max(c.g, c.b));\nif (peak < start) {\nreturn c;\n}\nlet d = 1.0 - start;\nlet new_peak = 1.0 - d * d / (peak + d - start);\nc = c * (new_peak / peak);\nlet g = 1.0 - 1.0 / (desaturation * (peak - new_peak) + 1.0);\nreturn mix(c, vec3f(new_peak), g);\n}\nfn aces(x: vec3f) -> vec3f {\nreturn saturate((x * (2.51 * x + 0.03)) / (x * (2.43 * x + 0.59) + 0.14));\n}",
|
|
12
|
+
};
|
|
13
|
+
/** Linked from shaders/post/tonemap.wesl. */
|
|
14
|
+
export const postTonemap = {
|
|
15
|
+
hash: '1271f2ef31fbada6',
|
|
16
|
+
wgsl: "struct ToneParams {\n/** Linear multiplier before the curve. */\nexposure: f32,\n/** 0 = Khronos PBR Neutral, 1 = ACES (Narkowicz's fit), 2 = none (clamp). */\ncurve: u32,\n/** How much of the bloom chain is added (0: none). */\nbloom: f32,\n/** 1: grade (the fields below). */\ngrade: u32,\n/** Linear white-balance gains (from temperature and tint), luminance-normalised. */\nbalance: vec3f,\n/** Contrast about mid grey (18%), in log space: 1 is none. */\ncontrast: f32,\n/** Lift (shadows), added after the curve. */\nlift: vec3f,\n/** Saturation about the luminance: 1 is none, 0 is grey. */\nsaturation: f32,\n/** Gamma (mid tones) after the curve: 1 is none. */\ngamma: vec3f,\npad0: f32,\n/** Gain (highlights) after the curve: 1 is none. */\ngain: vec3f,\npad1: f32,\n}\n@group(0) @binding(0) var hdr: texture_2d<f32>;\n@group(0) @binding(1) var<uniform> tone: ToneParams;\n@group(0) @binding(2) var bloom_tex: texture_2d<f32>;\n@group(0) @binding(3) var smp: sampler;\n@vertex fn vs(@builtin(vertex_index) i: u32) -> @builtin(position) vec4f {\nlet p = vec2f(f32((i << 1u) & 2u), f32(i & 2u));\nreturn vec4f(p * 2.0 - 1.0, 0.0, 1.0);\n}\nconst MID_GREY = 0.18;\n@fragment fn fs(@builtin(position) at: vec4f) -> @location(0) vec4f {\nvar c = textureLoad(hdr, vec2i(at.xy), 0).rgb;\nif (tone.bloom > 0.0) {\nlet uv = at.xy / vec2f(textureDimensions(hdr));\nc += textureSampleLevel(bloom_tex, smp, uv, 0.0).rgb * tone.bloom;\n}\nc *= tone.exposure;\nif (tone.grade == 0u) {\nreturn vec4f(srgb_encode(tone_curve(c, tone.curve)), 1.0);\n}\nc = max(c * tone.balance, vec3f(0.0));\nc = MID_GREY * pow(c / MID_GREY + 1e-6, vec3f(tone.contrast));\nlet y = dot(c, vec3f(0.2126, 0.7152, 0.0722));\nc = max(mix(vec3f(y), c, tone.saturation), vec3f(0.0));\nvar d = tone_curve(c, tone.curve);\nd = saturate(tone.gain * (d + tone.lift * (1.0 - d)));\nd = pow(d, 1.0 / max(tone.gamma, vec3f(1e-3)));\nreturn vec4f(srgb_encode(d), 1.0);\n}\nfn srgb_encode(c: vec3f) -> vec3f {\nlet lo = c * 12.92;\nlet hi = 1.055 * pow(c, vec3f(1.0 / 2.4)) - 0.055;\nreturn select(hi, lo, c <= vec3f(0.0031308));\n}\nfn tone_curve(linear_in: vec3f, curve: u32) -> vec3f {\nlet linear = max(linear_in, vec3f(0.0));\nvar mapped: vec3f;\nswitch curve {\ncase 0u: {\nmapped = pbr_neutral(linear);\n}\ncase 1u: {\nmapped = aces(linear);\n}\ndefault: {\nmapped = saturate(linear);\n}\n}\nreturn saturate(mapped);\n}\nfn pbr_neutral(color: vec3f) -> vec3f {\nlet start = 0.8 - 0.04;\nlet desaturation = 0.15;\nlet x = min(color.r, min(color.g, color.b));\nlet offset = select(0.04, x - 6.25 * x * x, x < 0.08);\nvar c = color - offset;\nlet peak = max(c.r, max(c.g, c.b));\nif (peak < start) {\nreturn c;\n}\nlet d = 1.0 - start;\nlet new_peak = 1.0 - d * d / (peak + d - start);\nc = c * (new_peak / peak);\nlet g = 1.0 - 1.0 / (desaturation * (peak - new_peak) + 1.0);\nreturn mix(c, vec3f(new_peak), g);\n}\nfn aces(x: vec3f) -> vec3f {\nreturn saturate((x * (2.51 * x + 0.03)) / (x * (2.43 * x + 0.59) + 0.14));\n}",
|
|
17
|
+
};
|
|
18
|
+
/** Linked from shaders/env/sky.wesl. */
|
|
19
|
+
export const envSky = {
|
|
20
|
+
hash: '1ca6b9929f76b50e',
|
|
21
|
+
wgsl: "struct SkyParams {\n/** xyz = direction towards the sun, w = mip roughness for the prefilter pass. */\nsun: vec4f,\nzenith: vec4f,\nhorizon: vec4f,\nground: vec4f,\n/** rgb = sun disk radiance, w = cos of the disk's angular radius. */\nsun_color: vec4f,\n/** x = cube face (0–5, +X −X +Y −Y +Z −Z), y = source size, z = source mips. */\nface: vec4f,\n}\n@group(0) @binding(0) var<uniform> sky_params: SkyParams;\n@group(0) @binding(1) var source: texture_cube<f32>;\n@group(0) @binding(2) var source_sampler: sampler;\nstruct FaceOut {\n@builtin(position) clip: vec4f,\n@location(0) uv: vec2f,\n}\n@vertex fn vs(@builtin(vertex_index) i: u32) -> FaceOut {\nlet p = vec2f(f32((i << 1u) & 2u), f32(i & 2u));\nvar out: FaceOut;\nout.clip = vec4f(p * 2.0 - 1.0, 0.0, 1.0);\nout.uv = p * 2.0 - 1.0;\nreturn out;\n}\nfn face_dir(face: u32, uv: vec2f) -> vec3f {\nlet u = uv.x;\nlet v = -uv.y;\nswitch face {\ncase 0u: {\nreturn normalize(vec3f(1.0, -v, -u));\n}\ncase 1u: {\nreturn normalize(vec3f(-1.0, -v, u));\n}\ncase 2u: {\nreturn normalize(vec3f(u, 1.0, v));\n}\ncase 3u: {\nreturn normalize(vec3f(u, -1.0, -v));\n}\ncase 4u: {\nreturn normalize(vec3f(u, -v, 1.0));\n}\ndefault: {\nreturn normalize(vec3f(-u, -v, -1.0));\n}\n}\n}\nfn sky(d: vec3f) -> vec3f {\nlet up = d.y;\nlet above = mix(sky_params.horizon.rgb, sky_params.zenith.rgb, pow(saturate(up), 0.5));\nlet below = mix(sky_params.horizon.rgb, sky_params.ground.rgb, saturate(-up * 4.0));\nvar c = select(below, above, up >= 0.0);\nlet cos_sun = dot(d, sky_params.sun.xyz);\nc += sky_params.sun_color.rgb * smoothstep(sky_params.sun_color.w, 1.0, cos_sun) * step(0.0, up);\nreturn c;\n}\n@fragment fn fs_sky(in: FaceOut) -> @location(0) vec4f {\nreturn vec4f(sky(face_dir(u32(sky_params.face.x), in.uv)), 1.0);\n}\nfn radical_inverse(i: u32) -> f32 {\nvar b = (i << 16u) | (i >> 16u);\nb = ((b & 0x55555555u) << 1u) | ((b & 0xAAAAAAAAu) >> 1u);\nb = ((b & 0x33333333u) << 2u) | ((b & 0xCCCCCCCCu) >> 2u);\nb = ((b & 0x0F0F0F0Fu) << 4u) | ((b & 0xF0F0F0F0u) >> 4u);\nb = ((b & 0x00FF00FFu) << 8u) | ((b & 0xFF00FF00u) >> 8u);\nreturn f32(b) * 2.3283064365386963e-10;\n}\n@fragment fn fs_prefilter(in: FaceOut) -> @location(0) vec4f {\nlet n = face_dir(u32(sky_params.face.x), in.uv);\nlet roughness = sky_params.sun.w;\nlet a = roughness * roughness;\nlet up = select(vec3f(1.0, 0.0, 0.0), vec3f(0.0, 1.0, 0.0), abs(n.y) < 0.999);\nlet tx = normalize(cross(up, n));\nlet ty = cross(n, tx);\nlet count = 128u;\nlet texel_solid_angle = 4.0 * 3.14159265 / (6.0 * sky_params.face.y * sky_params.face.y);\nvar sum = vec3f(0.0);\nvar weight = 0.0;\nfor (var i = 0u; i < count; i++) {\nlet xi = vec2f(f32(i) / f32(count), radical_inverse(i));\nlet phi = 2.0 * 3.14159265 * xi.x;\nlet cos_t = sqrt((1.0 - xi.y) / (1.0 + (a * a - 1.0) * xi.y));\nlet sin_t = sqrt(1.0 - cos_t * cos_t);\nlet h = tx * (sin_t * cos(phi)) + ty * (sin_t * sin(phi)) + n * cos_t;\nlet l = 2.0 * dot(n, h) * h - n;\nlet nl = dot(n, l);\nif (nl > 0.0) {\nlet nh = saturate(dot(n, h));\nlet d = a * a / (3.14159265 * pow(nh * nh * (a * a - 1.0) + 1.0, 2.0));\nlet pdf = d * 0.25 + 1e-4;\nlet sample_solid_angle = 1.0 / (f32(count) * pdf);\nlet lod = clamp(0.5 * log2(sample_solid_angle / texel_solid_angle) + 1.0, 0.0, sky_params.face.z - 1.0);\nsum += textureSampleLevel(source, source_sampler, l, lod).rgb * nl;\nweight += nl;\n}\n}\nreturn vec4f(sum / max(weight, 1e-4), 1.0);\n}",
|
|
22
|
+
};
|
|
23
|
+
/** Linked from shaders/scene/cluster.wesl. */
|
|
24
|
+
export const sceneCluster = {
|
|
25
|
+
hash: '7b4a644c0b2109e7',
|
|
26
|
+
wgsl: "@group(0) @binding(0) var<uniform> lights: Lights;\n@group(0) @binding(1) var<uniform> params: ClusterParams;\n@group(0) @binding(2) var bins: texture_storage_2d<r32uint, write>;\n@compute @workgroup_size(64) fn build(@builtin(global_invocation_id) id: vec3u) {\nlet i = id.x;\nif (i >= GRID_X * GRID_Y * GRID_Z) {\nreturn;\n}\nlet tx = i % GRID_X;\nlet ty = (i / GRID_X) % GRID_Y;\nlet tz = i / (GRID_X * GRID_Y);\nlet near = params.proj.z;\nlet z0 = near * exp2(params.screen.w * f32(tz) / f32(GRID_Z));\nlet z1 = near * exp2(params.screen.w * f32(tz + 1u) / f32(GRID_Z));\nlet x0 = -1.0 + 2.0 * f32(tx) / f32(GRID_X);\nlet x1 = x0 + 2.0 / f32(GRID_X);\nlet y1 = 1.0 - 2.0 * f32(ty) / f32(GRID_Y);\nlet y0 = y1 - 2.0 / f32(GRID_Y);\nlet tx0 = x0 * params.proj.x;\nlet tx1 = x1 * params.proj.x;\nlet ty0 = y0 * params.proj.y;\nlet ty1 = y1 * params.proj.y;\nlet lo = vec3f(min(min(tx0 * z0, tx0 * z1), min(tx1 * z0, tx1 * z1)), min(min(ty0 * z0, ty0 * z1), min(ty1 * z0, ty1 * z1)), -z1);\nlet hi = vec3f(max(max(tx0 * z0, tx0 * z1), max(tx1 * z0, tx1 * z1)), max(max(ty0 * z0, ty0 * z1), max(ty1 * z0, ty1 * z1)), -z0);\nvar count = 0u;\nlet total = u32(params.screen.z);\nfor (var l = 0u; l < total; l++) {\nlet light = lights.lights[l];\nlet p = light.pos_range.xyz;\nlet v = vec3f(dot(params.view_x.xyz, p), dot(params.view_y.xyz, p), dot(params.view_z.xyz, p));\nlet closest = clamp(v, lo, hi);\nlet d = v - closest;\nlet r = light.pos_range.w;\nif (dot(d, d) <= r * r && count < CLUSTER_SLOTS) {\ncount++;\ntextureStore(bins, vec2u(count, i), vec4u(l, 0u, 0u, 0u));\n}\n}\ntextureStore(bins, vec2u(0u, i), vec4u(count, 0u, 0u, 0u));\n}\nstruct Lights { lights: array<Light, MAX_LIGHTS> }\nstruct Light {\npos_range: vec4f,\ncolor_kind: vec4f,\ndir_outer: vec4f,\ninner: vec4f,\n}\nconst MAX_LIGHTS: u32 = 256u;\nstruct ClusterParams {\nview_x: vec4f,\nview_y: vec4f,\nview_z: vec4f,\nproj: vec4f,\nscreen: vec4f,\n}\nconst GRID_X: u32 = 16u;\nconst GRID_Y: u32 = 9u;\nconst GRID_Z: u32 = 24u;\nconst CLUSTER_SLOTS: u32 = 63u;",
|
|
27
|
+
};
|
|
28
|
+
/** Linked from shaders/scene/shadow.wesl. */
|
|
29
|
+
export const sceneShadow = {
|
|
30
|
+
hash: '15aae914dd0605ce',
|
|
31
|
+
wgsl: "struct Cascade {\nview_proj: mat4x4f,\norigin: vec4f,\n}\n@group(0) @binding(0) var<uniform> cascade: Cascade;\n@group(0) @binding(1) var<storage, read> instances: array<vec4u>;\n@group(0) @binding(2) var<storage, read> visible: array<u32>;\n@group(0) @binding(3) var palette: texture_2d<f32>;\nfn shadow_clip(pos: vec3f, scale: f32, rot: vec4f, position: vec3f) -> vec4f {\nlet world = quat_rotate(rot, position * scale) + pos;\nvar c = cascade.view_proj * vec4f(world, 1.0);\nc.z = min(c.z, 1.0);\nreturn c;\n}\n@vertex fn vs_shadow(@location(0) position: vec3f, @builtin(instance_index) slot: u32) -> @builtin(position) vec4f {\nlet i = visible[slot];\nlet a = bitcast<vec4f>(instances[2u * i]);\nlet b = bitcast<vec4f>(instances[2u * i + 1u]);\nreturn shadow_clip(a.xyz - cascade.origin.xyz, a.w, b, position);\n}\n@vertex fn vs_shadow_attr(@location(0) position: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f) -> @builtin(position) vec4f {\nreturn shadow_clip(pos_scale.xyz, pos_scale.w, rot, position);\n}\n@vertex fn vs_shadow_skinned(@location(0) position: vec3f, @location(6) joints: vec4u, @location(7) weights: vec4f, @builtin(instance_index) slot: u32) -> @builtin(position) vec4f {\nlet i = visible[slot];\nlet a = bitcast<vec4f>(instances[2u * i]);\nlet b = bitcast<vec4f>(instances[2u * i + 1u]);\nlet cap = arrayLength(&instances) / 3u;\nlet s = skin_vertex(palette, instances[2u * cap + i].w, joints, weights, position, vec3f(0.0, 1.0, 0.0));\nreturn shadow_clip(a.xyz - cascade.origin.xyz, a.w, b, s.position);\n}\n@vertex fn vs_shadow_attr_skinned(@location(0) position: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec4u, @location(6) joints: vec4u, @location(7) weights: vec4f) -> @builtin(position) vec4f {\nlet s = skin_vertex(palette, ids.w, joints, weights, position, vec3f(0.0, 1.0, 0.0));\nreturn shadow_clip(pos_scale.xyz, pos_scale.w, rot, s.position);\n}\n@vertex fn vs_shadow_culled_skinned(@location(0) position: vec3f, @location(2) pos_scale: vec4f, @location(3) rot: vec4f, @location(4) ids: vec2u, @location(6) joints: vec4u, @location(7) weights: vec4f) -> @builtin(position) vec4f {\nlet s = skin_vertex(palette, ids.y >> 8u, joints, weights, position, vec3f(0.0, 1.0, 0.0));\nreturn shadow_clip(pos_scale.xyz, pos_scale.w, rot, s.position);\n}\nfn quat_rotate(q: vec4f, v: vec3f) -> vec3f {\nlet t = 2.0 * cross(q.xyz, v);\nreturn v + q.w * t + cross(q.xyz, t);\n}\nfn skin_vertex(palette: texture_2d<f32>, row: u32, joints: vec4u, weights: vec4f, position: vec3f, normal: vec3f) -> Skinned {\nif (row == 0u || dot(weights, vec4f(1.0)) <= 0.0) {\nreturn Skinned(position, normal);\n}\nlet base = row - 1u;\nlet t = (vec4u(base) + joints) * 3u;\nlet r0 = weights.x * palette_texel(palette, t.x) + weights.y * palette_texel(palette, t.y) + weights.z * palette_texel(palette, t.z) + weights.w * palette_texel(palette, t.w);\nlet r1 = weights.x * palette_texel(palette, t.x + 1u) + weights.y * palette_texel(palette, t.y + 1u) + weights.z * palette_texel(palette, t.z + 1u) + weights.w * palette_texel(palette, t.w + 1u);\nlet r2 = weights.x * palette_texel(palette, t.x + 2u) + weights.y * palette_texel(palette, t.y + 2u) + weights.z * palette_texel(palette, t.z + 2u) + weights.w * palette_texel(palette, t.w + 2u);\nlet p = vec4f(position, 1.0);\nreturn Skinned(vec3f(dot(r0, p), dot(r1, p), dot(r2, p)), vec3f(dot(r0.xyz, normal), dot(r1.xyz, normal), dot(r2.xyz, normal)));\n}\nfn palette_texel(palette: texture_2d<f32>, i: u32) -> vec4f {\nreturn textureLoad(palette, vec2u(i % PALETTE_WIDTH, i / PALETTE_WIDTH), 0);\n}\nstruct Skinned {\nposition: vec3f,\nnormal: vec3f,\n}\nconst PALETTE_WIDTH: u32 = 1024u;",
|
|
32
|
+
};
|
|
33
|
+
/** Linked from shaders/debug/lines.wesl. */
|
|
34
|
+
export const debugLines = {
|
|
35
|
+
hash: 'c52ef6f7a9735afe',
|
|
36
|
+
wgsl: "@group(0) @binding(0) var<uniform> camera: Camera;\nstruct LineOut {\n@builtin(position) pos: vec4f,\n@location(0) color: vec4f,\n}\n@vertex fn vs(@location(0) p: vec3f, @location(1) color: vec4f) -> LineOut {\nvar o: LineOut;\no.pos = camera.view_proj * vec4f(p, 1.0);\no.pos.z = o.pos.z * 1.002;\no.color = color;\nreturn o;\n}\n@fragment fn fs(v: LineOut) -> @location(0) vec4f {\nreturn v.color;\n}\nstruct Camera {\nview_proj: mat4x4f,\nfrustum: array<vec4f, 6>,\nlight_dir: vec4f,\norigin: vec4f,\n}",
|
|
37
|
+
};
|
|
38
|
+
/** Linked from shaders/core/math_check.wesl. */
|
|
39
|
+
export const mathCheck = {
|
|
40
|
+
hash: '95aaa0e549f27315',
|
|
41
|
+
wgsl: "struct Case {\na: vec4f,\nb: vec4f,\nop: u32,\npad0: u32,\npad1: u32,\npad2: u32,\n}\n@group(0) @binding(0) var<storage, read> cases: array<Case>;\n@group(0) @binding(1) var<storage, read_write> results: array<vec4f>;\n@compute @workgroup_size(64) fn main(@builtin(global_invocation_id) id: vec3u) {\nlet i = id.x;\nif (i >= arrayLength(&cases)) {\nreturn;\n}\nlet c = cases[i];\nif (c.op == 0u) {\nresults[i] = quat_mul(c.a, c.b);\n} else {\nresults[i] = vec4f(quat_rotate(c.a, c.b.xyz), 0.0);\n}\n}\nfn quat_mul(a: vec4f, b: vec4f) -> vec4f {\nreturn vec4f(a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z);\n}\nfn quat_rotate(q: vec4f, v: vec3f) -> vec3f {\nlet t = 2.0 * cross(q.xyz, v);\nreturn v + q.w * t + cross(q.xyz, t);\n}",
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=shaders.gen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shaders.gen.js","sourceRoot":"","sources":["../src/shaders.gen.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yEAAyE;AAEzE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,4tFAA4tF;CAC1tF,CAAC;AAEX,2CAA2C;AAC3C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,sl9BAAsl9B;CACpl9B,CAAC;AAEX,6CAA6C;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,86FAA86F;CAC56F,CAAC;AAEX,wCAAwC;AACxC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,g1GAAg1G;CAC90G,CAAC;AAEX,8CAA8C;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,k/DAAk/D;CACh/D,CAAC;AAEX,6CAA6C;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,wnHAAwnH;CACtnH,CAAC;AAEX,4CAA4C;AAC5C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,2fAA2f;CACzf,CAAC;AAEX,gDAAgD;AAChD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,y2BAAy2B;CACv2B,CAAC"}
|