@aquera/nile-elements 2.0.18 → 2.0.20
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/README.md +10 -0
- package/demo/index.js +0 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1275 -490
- package/dist/nile-badge/index.cjs.js +1 -1
- package/dist/nile-badge/index.esm.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js.map +1 -1
- package/dist/nile-badge/nile-badge.css.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.css.cjs.js.map +1 -1
- package/dist/nile-badge/nile-badge.css.esm.js +24 -3
- package/dist/nile-badge/nile-badge.esm.js +5 -3
- package/dist/nile-breadcrumb/nile-breadcrumb.cjs.js +1 -1
- package/dist/nile-breadcrumb/nile-breadcrumb.cjs.js.map +1 -1
- package/dist/nile-breadcrumb/nile-breadcrumb.esm.js +2 -2
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js.map +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.css.cjs.js +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.css.cjs.js.map +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.css.esm.js +14 -2
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.esm.js +4 -4
- package/dist/nile-calendar/index.cjs.js +1 -1
- package/dist/nile-calendar/index.esm.js +1 -1
- package/dist/nile-calendar/nile-calendar.cjs.js +2 -1
- package/dist/nile-calendar/nile-calendar.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.css.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.css.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.css.esm.js +357 -2
- package/dist/nile-calendar/nile-calendar.esm.js +365 -41
- package/dist/nile-calendar/timezones.cjs.js +1 -1
- package/dist/nile-calendar/timezones.cjs.js.map +1 -1
- package/dist/nile-calendar/timezones.esm.js +1 -1
- package/dist/nile-date-time-picker/index.cjs.js +2 -0
- package/dist/nile-date-time-picker/index.cjs.js.map +1 -0
- package/dist/nile-date-time-picker/index.esm.js +1 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.cjs.js +2 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.cjs.js.map +1 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.css.cjs.js +2 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.css.cjs.js.map +1 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.css.esm.js +13 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.esm.js +53 -0
- package/dist/nile-select/index.cjs.js +1 -1
- package/dist/nile-select/index.esm.js +1 -1
- package/dist/nile-select/nile-select.cjs.js +2 -2
- package/dist/nile-select/nile-select.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.esm.js +1 -1
- package/dist/nile-select/virtual-scroll-helper.cjs.js +1 -1
- package/dist/nile-select/virtual-scroll-helper.cjs.js.map +1 -1
- package/dist/nile-select/virtual-scroll-helper.esm.js +48 -47
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js +4 -4
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js.map +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.esm.js +2 -2
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/nile-badge/nile-badge.css.js +24 -3
- package/dist/src/nile-badge/nile-badge.css.js.map +1 -1
- package/dist/src/nile-badge/nile-badge.d.ts +7 -4
- package/dist/src/nile-badge/nile-badge.js +22 -5
- package/dist/src/nile-badge/nile-badge.js.map +1 -1
- package/dist/src/nile-badge/nile-badge.test.js +88 -0
- package/dist/src/nile-badge/nile-badge.test.js.map +1 -1
- package/dist/src/nile-breadcrumb/nile-breadcrumb.d.ts +7 -0
- package/dist/src/nile-breadcrumb/nile-breadcrumb.js +24 -1
- package/dist/src/nile-breadcrumb/nile-breadcrumb.js.map +1 -1
- package/dist/src/nile-breadcrumb/nile-breadcrumb.test.js +51 -0
- package/dist/src/nile-breadcrumb/nile-breadcrumb.test.js.map +1 -1
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.css.js +12 -0
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.css.js.map +1 -1
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.d.ts +5 -0
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js +9 -0
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.css.js +355 -0
- package/dist/src/nile-calendar/nile-calendar.css.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.d.ts +175 -0
- package/dist/src/nile-calendar/nile-calendar.js +1726 -26
- package/dist/src/nile-calendar/nile-calendar.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.test.d.ts +1 -0
- package/dist/src/nile-calendar/nile-calendar.test.js +3580 -0
- package/dist/src/nile-calendar/nile-calendar.test.js.map +1 -1
- package/dist/src/nile-calendar/timezones.d.ts +21 -0
- package/dist/src/nile-calendar/timezones.js +49 -0
- package/dist/src/nile-calendar/timezones.js.map +1 -1
- package/dist/src/nile-date-time-picker/index.d.ts +1 -0
- package/dist/src/nile-date-time-picker/index.js +2 -0
- package/dist/src/nile-date-time-picker/index.js.map +1 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.css.d.ts +11 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.css.js +49 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.css.js.map +1 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.d.ts +173 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.js +1270 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.js.map +1 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.test.d.ts +143 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.test.js +7277 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.test.js.map +1 -0
- package/dist/src/nile-select/nile-select.d.ts +1 -0
- package/dist/src/nile-select/nile-select.js +16 -1
- package/dist/src/nile-select/nile-select.js.map +1 -1
- package/dist/src/nile-select/nile-select.test.js +430 -5
- package/dist/src/nile-select/nile-select.test.js.map +1 -1
- package/dist/src/nile-select/virtual-scroll-helper.js +7 -4
- package/dist/src/nile-select/virtual-scroll-helper.js.map +1 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.d.ts +3 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.js +14 -6
- package/dist/src/nile-virtual-select/nile-virtual-select.js.map +1 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.test.js +115 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.test.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/animation-registry.cjs.js +1 -1
- package/dist/utilities/animation-registry.cjs.js.map +1 -1
- package/dist/utilities/animation-registry.esm.js +1 -1
- package/package.json +3 -1
- package/scripts/coverage-report.mjs +96 -0
- package/src/index.ts +1 -0
- package/src/nile-badge/nile-badge.css.ts +24 -3
- package/src/nile-badge/nile-badge.test.ts +102 -0
- package/src/nile-badge/nile-badge.ts +28 -5
- package/src/nile-breadcrumb/nile-breadcrumb.test.ts +57 -0
- package/src/nile-breadcrumb/nile-breadcrumb.ts +19 -0
- package/src/nile-breadcrumb-item/nile-breadcrumb-item.css.ts +12 -0
- package/src/nile-breadcrumb-item/nile-breadcrumb-item.ts +7 -0
- package/src/nile-calendar/nile-calendar.css.ts +355 -0
- package/src/nile-calendar/nile-calendar.test.ts +3793 -0
- package/src/nile-calendar/nile-calendar.ts +1760 -28
- package/src/nile-calendar/timezones.ts +57 -0
- package/src/nile-date-time-picker/index.ts +1 -0
- package/src/nile-date-time-picker/nile-date-time-picker.css.ts +54 -0
- package/src/nile-date-time-picker/nile-date-time-picker.test.ts +7886 -0
- package/src/nile-date-time-picker/nile-date-time-picker.ts +1153 -0
- package/src/nile-select/nile-select.test.ts +560 -5
- package/src/nile-select/nile-select.ts +21 -1
- package/src/nile-select/virtual-scroll-helper.ts +7 -4
- package/src/nile-virtual-select/nile-virtual-select.test.ts +139 -1
- package/src/nile-virtual-select/nile-virtual-select.ts +17 -6
- package/vscode-html-custom-data.json +200 -20
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nile-date-time-picker.test.js","sourceRoot":"","sources":["../../../src/nile-date-time-picker/nile-date-time-picker.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACrH,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACpG,OAAO,yBAAyB,CAAC;AACjC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;AAIvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,OAAO,CAAqB,IAAI,CAAA,iDAAiD,CAAC,CAAC;IAErF,2EAA2E;IAC3E,MAAM,aAAa,GAAG,CAAC,EAAsB,EAAO,EAAE,CAAE,EAAU,CAAC,eAAe,CAAC;IAEnF,MAAM,YAAY,GAAG,CAAC,EAAsB,EAAO,EAAE,CACnD,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,CAAC,EAAsB,EAAO,EAAE,CAC9C,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAEtD,8CAA8C;IAC9C,MAAM,MAAM,GAAG,KAAK,EAAE,EAAsB,EAAE,EAAE;QAC9C,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,GAAG;YAAE,MAAM,GAAG,CAAC,cAAc,CAAC;QAClC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,yEAAyE;IACzE,qEAAqE;IACrE,MAAM,OAAO,GAAG,KAAK,EAAE,EAAsB,EAAE,EAAE;QAC/C,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAA2B,EAAE,CACrD,GAAG,CAAC,UAAW,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAiB,CAAC,KAAK,EAAE,CAAC;IAChF,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAgB,CAAC;IAC7F,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAgB,CAAC;IAE7F,6EAA6E;IAC7E,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACjD,MAAM,CAAC,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YAC1E,MAAM,CAAC,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YAC3C,2DAA2D;YAC3D,MAAM,CAAC,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1F,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,iFAAiF;QACjF,kFAAkF;QAClF,sDAAsD;QACtD,8EAA8E;QAC9E,2DAA2D;QAC3D,kFAAkF;QAClF,wEAAwE;QACxE,sDAAsD;QACtD,sGAAsG;QACtG,gFAAgF;QAChF,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;YACxG,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YACrB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,CAAE,GAAG,CAAC,KAA0B,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,KAAK,GAAG,YAAY,CAAC;YACxB,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,yEAAyE,CAC9E,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,2DAA2D;YAC3D,MAAM,CAAE,GAAG,CAAC,KAA0B,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,wEAAwE,CAC7E,CAAC;YACF,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,EAAE,CAAC,KAAK,GAAG,cAAc,CAAC;YAC1B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC3D,MAAM,CAAE,GAAG,CAAC,KAA0B,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;iBACjD,EAAE,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,WAAW,GAAG,oBAAoB,CAAC;YACtC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;YAC7B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;iBACjD,EAAE,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACjC,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAEjD,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;YACpB,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC/E,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC5B,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;YACxG,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,cAAc,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,mDAAmD;QAC7F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0HAA0H,EAAE,KAAK,IAAI,EAAE;YACxI,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;YACzE,MAAM,MAAM,GAA2B,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;YACtI,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtD,EAAE,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,qCAAqC;gBACjE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/F,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAW,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;gBACpH,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpG,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;gBACjE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3F,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxF,CAAC;QACH,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,oHAAoH,EAAE,KAAK,IAAI,EAAE;YAClI,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC;YACnC,MAAM,KAAK,GAAsC,EAAE,CAAC;YACpD,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,MAAM,OAAO,GAAG,CAAC,CAAa,EAAE,EAAE,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;gBAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;YACvG,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACzC,MAAc,CAAC,cAAc,GAAG,KAAM,SAAQ,IAAI;gBAEjD,YAAY,EAA0B;oBAAI,KAAK,CAAC,EAAE,CAAC,CAAC;oBADpD,SAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;oBACkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;gBAC7E,OAAO,CAAC,CAAU,EAAE,CAAyB;oBAC3C,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;wBAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;wBAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;oBAAC,CAAC;oBACpG,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBACD,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;aACpE,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC/B,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;oBAAC,MAAM,EAAE,CAAC,cAAc,CAAC;oBAAC,MAAM,GAAG,EAAE,CAAC;oBAAC,MAAM,GAAG,EAAE,CAAC;oBAClE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;oBACrC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;oBAAC,MAAM,EAAE,CAAC,cAAc,CAAC;oBAAC,MAAM,GAAG,EAAE,CAAC;oBAAC,MAAM,GAAG,EAAE,CAAC;oBACnE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;gBACvC,CAAC;gBACD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC/D,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC/B,EAAE,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,EAAE,CAAC;gBACZ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC7B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,sGAAsG,EAAE,KAAK,IAAI,EAAE;YACpH,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;gBACjD,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC7B,EAAU,CAAC,cAAc,GAAG,GAAG,CAAC;gBACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjB,MAAM,CAAC,GAAG,CAAC,UAAW,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3F,MAAM,CAAC,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YAC9E,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,kBAAkB,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;YACrB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,GAAG,CAAC,UAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,KAAK,GAAG,YAAY,CAAC;YACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;YACrB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,QAAQ,GAAG,cAAc,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;YACrB,EAAE,CAAC,YAAY,GAAG,MAAM,CAAC;YACzB,EAAE,CAAC,aAAa,GAAG,CAAC,CAAC;YACrB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;YACpB,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;YAClB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;YAClE,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;YACnB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAChC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9B,4EAA4E;YAC5E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACvG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;YACtG,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,6EAA6E;YAC7E,yDAAyD;YACzD,GAAG,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE;gBAC/C,MAAM,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE;gBAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;aAC9B,CAAC,CAAC,CAAC;YACJ,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,EAAE,0CAA0C,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACrF,MAAM,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,YAAY,GAAQ,IAAI,CAAC;YAC7B,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YACxG,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAC/D,MAAM,CAAC,YAAY,EAAE,oDAAoD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACzF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;YAAC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;YAClF,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,QAAQ,GAAG,cAAc,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;YACrB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,kBAAkB,CAAiB,CAAC,KAAK,EAAE,CAAC;YAC3E,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,MAAM,GAAQ,OAAO,CAAC;YAC1B,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAC/G,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzB,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,gCAAgC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACtF,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YACvG,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,4BAA4B,CAAE,CAAC,aAAa,CACxE,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACnG,CAAC;YACF,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;YAC3D,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAO,EAAyB,CAAC,cAAc,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzB,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,mFAAmF;QACnF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,+CAA+C;YAC/C,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,IAAI,CAAA,4DAA4D,CAC1D,CAAC;YACR,GAAG,CAAC,UAAW,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAiB,CAAC,KAAK,EAAE,CAAC;YACvF,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;YAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;YAAC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;YAC/E,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,SAAS,GAAQ,IAAI,CAAC;YAC1B,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YACrG,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;YAExE,qCAAqC;YACrC,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnB,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;YAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;YAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;YACvF,MAAM,KAAK,CAAC,cAAc,CAAC;YAC3B,IAAI,UAAU,GAAQ,IAAI,CAAC;YAC3B,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YACtG,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAExB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzD,yBAAyB;YACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,IAAI,CAAA,4EAA4E,CAC1E,CAAC;YACT,MAAM,GAAG,CAAC,cAAc,CAAC;YACxB,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,kBAAkB,CAAiB,CAAC,KAAK,EAAE,CAAC;YAC3E,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,SAAS,GAAQ,IAAI,CAAC;YAC1B,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YACrG,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;YAExE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;YACrB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9B,KAAK,CAAC,UAAW,CAAC,aAAa,CAAC,kBAAkB,CAAiB,CAAC,KAAK,EAAE,CAAC;YAC7E,MAAM,KAAK,CAAC,cAAc,CAAC;YAC3B,IAAI,UAAU,GAAQ,IAAI,CAAC;YAC3B,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YACtG,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAExB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACpF,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;YAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;YAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;YAAC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;YAC9E,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;YACtC,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,KAAe,CAAC;YAC9C,sCAAsC;YACtC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YACf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,+DAA+D;YAC/D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACpD,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YACxC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;YACtC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChD,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;YACtC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,MAAM,iBAAiB,GAAG,CAAC,GAAY,EAAE,OAAgB,EAAE,EAAE,CAC3D,OAAO,CACL,GAAG;YACD,CAAC,CAAC,IAAI,CAAA,sCAAsC,GAAG,aAAa,OAAO,2BAA2B;YAC9F,CAAC,CAAC,IAAI,CAAA,iDAAiD,CAC1D,CAAC;QACJ,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAQ,CAAC;QAC9E,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAyB,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,GAAW,EAAE,EAAE,CACrC,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CACvB,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CACvF,CAAC;QACJ,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,CAAS,EAAE,EAAE,GAAG,KAAK,MAAM,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;QAC9C,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,CAAC,EAAO,EAAE,EAAE,CACvB,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtF,MAAM,KAAK,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC,CAAC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAEhG,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtD,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACzD,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC9D,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kIAAkI,EAAE,KAAK,IAAI,EAAE;YAChJ,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,GAAG,GAAI,EAAU,CAAC,eAAsB,CAAC;YAC/C,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACnE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,uCAAuC;QACrG,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACtD,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACtD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,EAAE,CAAC,CAAC;YACT,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC1C,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAChB,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAG,mBAAmB;YAC/D,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,6EAA6E;QAC7E,sEAAsE;QACtE,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9C,wEAAwE;YACxE,kEAAkE;YAClE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC3D,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;YACpB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;YACtG,wEAAwE;YACxE,uEAAuE;YACvE,gEAAgE;YAChE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACtF,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YACjB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE7C,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YACjB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,iGAAiG;QACjG,gGAAgG;QAChG,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;YACvC,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACnB,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAa,EAAE,CAAC;QACxD,CAAC,CAAC;QACF,MAAM,GAAG,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAE1E,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,wEAAwE;QACxE,2DAA2D;QAC3D,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;YAClG,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sCAAsC,YAAY,2BAA2B,CAClF,CAAC;YACF,EAAE,CAAC,KAAK,GAAG,YAAY,CAAC;YACxB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,wEAAwE;YACxE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;YACxG,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,KAAK,GAAG,YAAY,CAAC;YACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH;;;;;;;;;;WAUG;QACH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YACzB,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE9D,gFAAgF;YAChF,EAAE,CAAC,cAAc,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAChD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAEhB,IAAI,KAAK,GAAY,IAAI,CAAC;YAC1B,IAAI,CAAC;gBACH,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAChB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;gBAC3B,IAAI,CAAC,EAAE,CAAC,CAAC;gBACT,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBAAC,KAAK,GAAG,GAAG,CAAC;YAAC,CAAC;YAE9B,MAAM,CAAC,KAAK,EAAE,yCAAyC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC3E,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;YACzG,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,yDAAyD;YACzD,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAEpE,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;YACrB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,kBAAkB,CAAiB,CAAC,KAAK,EAAE,CAAC;YAC3E,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC9B,MAAM,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAExE,IAAI,CAAC,EAAE,CAAC,CAAC;YACT,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,GAAG,CAAC,cAAc,CAAC;YAEzB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,gCAAgC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,qCAAqC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/E,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,mCAAmC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClF,MAAM,CAAE,EAAU,CAAC,UAAU,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;YAC1F,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;YACnB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,GAAG,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE;gBAC/C,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACrE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;aAC9B,CAAC,CAAC,CAAC;YACJ,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;YAC7C,MAAM,QAAQ,GAAG,2DAA2D,CAAC;YAC7E,MAAM,UAAU,GAAG,CAAC,EAAO,EAAE,GAAQ,EAAE,EAAE;gBACvC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAwB,CAAC;gBAC1C,OAAO;oBACL,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;oBACvF,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,oCAAoC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACvG,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAE,CAAC,YAAY,CAAC,OAAO,CAAC;oBAC3E,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACnG,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,kCAAkC,CAAE,CAAC,YAAY,CAAC,OAAO,CAAC;iBACxF,CAAC;YACJ,CAAC,CAAC;YAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;gBACnF,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC9B,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACnB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,GAAG,CAAC,cAAc,CAAC;gBACzB,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9B,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACtD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACxD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG;oBAAE,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjE,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACvD,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAChE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ;oBAAE,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACzE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;gBACrF,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBACzE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC;oBAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;gBAChE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC9B,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACnB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7B,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACpB,MAAM,EAAE,CAAC,cAAc,CAAC;gBACxB,MAAM,GAAG,CAAC,cAAc,CAAC;gBACzB,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,oCAAoC,IAAI,2BAA2B,CACxE,CAAC;YACF,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,GAAG,GAAG,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,YAAY,CAAQ,CAAC;YAC9D,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,GAAG,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/G,MAAM,CAAE,GAAG,CAAC,KAA0B,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,6EAA6E;IAC7E,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC9D,MAAM,UAAU,GAAG,CAAC,iBAA2B,EAAE,EAAE,UAAU,GAAG,YAAY,EAAE,EAAE,CAC9E,OAAO,CACL,IAAI,CAAA,0CAA0C,cAAc,gBAAgB,UAAU,cAAc,KAAK,2BAA2B,CACrI,CAAC;QACJ,MAAM,EAAE,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,aAAa,CAAW,CAAC;QAC/E,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;YACtC,OAAO,YAAY,CAAC,EAAE,CAAC,CAAC,KAAe,CAAC;QAC1C,CAAC,CAAC;QAEF,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YACzD,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1C,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAClE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;YACvG,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;YACrE,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,yEAAyE;YACzE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;YACxG,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YACzD,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAC5B,GAAG,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5G,uEAAuE;YACvE,KAAK,MAAM,EAAE,IAAI,kBAAkB;gBAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAE,GAAG,CAAC,KAA0B,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAG,iDAAiD,CAAC;QAEhE,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;YACjG,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;YACjB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH;;;;;;;;WAQG;QACH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;YAChG,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sCAAsC,YAAY,2BAA2B,CAClF,CAAC;YACF,EAAE,CAAC,KAAK,GAAG,YAAY,CAAC;YACxB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;YAEtC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1D,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAExD,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,KAAK,GAAG,wCAAwC,CAAC;YACpD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2IAA2I,EAAE,KAAK,IAAI,EAAE;YACzJ,mGAAmG;YACnG,MAAM,GAAG,GAAG,YAAY,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,OAAO,CACzB,IAAI,CAAA,wBAAwB,GAAG,mBAAmB,CAC5C,CAAC;YACT,MAAM,KAAK,CAAC,cAAc,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC;YACjF,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;;;;;;;;WASG;QACH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAChD,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;gBACxB,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sCAAsC,YAAY,2BAA2B,CAClF,CAAC;gBACF,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;gBACjB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClB,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,GAAG,CAAC,cAAc,CAAC;gBACzB,MAAM,MAAM,GAAG,GAAG,CAAC,KAAyB,CAAC;gBAC7C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBACnF,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnE,GAAG,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE;oBAC7C,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI;iBAClE,CAAC,CAAC,CAAC;gBACJ,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClB,MAAM,GAAG,CAAC,cAAc,CAAC;gBACzB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;YAC7B,CAAC,CAAC;YAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACpD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;gBACjF,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;gBAC9B,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAChD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3E,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;gBAC7E,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;gBACnC,EAAE,CAAC,KAAK,GAAG,YAAY,CAAC;gBACxB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClB,MAAM,GAAG,CAAC,cAAc,CAAC;gBACzB,MAAM,CAAE,GAAG,CAAC,KAA0B,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAC7E,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;gBAC9E,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,MAAM,GAAQ,IAAI,CAAC;gBACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;gBAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;YACjB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;YAChG,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAC9B,EAAE,CAAC,KAAK,GAAG,gDAAgD,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;QAC5D,6EAA6E;QAC7E,MAAM,aAAa,GAAG,KAAK,EAAE,GAAW,EAAE,UAAU,GAAG,YAAY,EAAE,EAAE;YACrE,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sCAAsC,UAAU,2BAA2B,CAChF,CAAC;YACF,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;YACf,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QACrB,CAAC,CAAC;QAEF,yDAAyD;QACzD,MAAM,eAAe,GAAG,KAAK,EAAE,EAAsB,EAAE,GAAQ,EAAE,EAAE;YACjE,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAkB,CAAC,CAAC;YAC/F,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,gFAAgF;QAChF,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,IAAI,CAAA,oFAAoF,CACzF,CAAC;YACF,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QAEF,4EAA4E;QAC5E,MAAM,YAAY,GAAG,KAAK,EACxB,GAAiB,EACjB,CAAS,EAAE,GAAW,EAAE,CAAS,EACjC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9C,IAAY,EACZ,EAAE;YACD,GAAW,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,wCAAwC;YACrF,GAAW,CAAC,OAAO,GAAG,EAAE,CAAC;YACzB,GAAW,CAAC,SAAS,GAAG,EAAE,CAAC;YAC3B,GAAW,CAAC,SAAS,GAAG,EAAE,CAAC;YAC3B,GAAW,CAAC,cAAc,GAAG,EAAE,CAAC;YACjC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;YACpB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/G,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;YACxE,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,8EAA8E;QAC9E,kEAAkE;QAClE,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAU,EAAE;YACvE,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;gBACzC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK;aACpD,CAAC;iBACC,aAAa,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC9B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAE,CAAC,KAAK,CAAC,CAAC,4BAA4B;YAC5E,MAAM,CAAC,GAAG,iCAAiC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,QAAQ;YAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAU,EAAE;YAC7C,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACxC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACpD,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC,CAAC;QAEF,6EAA6E;QAC7E,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;YAC9D,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;gBAC3F,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,CAAC,iDAAiD,CAAC,CAAC;gBAC3F,kEAAkE;gBAClE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC9C,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAEpF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,2DAA2D;gBAC3D,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC1F,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;gBAC3F,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,CAAC,iDAAiD,CAAC,CAAC;gBAC3F,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,sDAAsD;gBACtD,MAAM,IAAI,GAAG,MAAM,CAAC,kBAA0B,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAO,6BAA6B;gBAC3E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,0CAA0C;gBAC/F,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACnF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,6EAA6E;QAC7E,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;YAC3D,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;gBACxE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,CAAC,qDAAqD,CAAC,CAAC;gBAC/F,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,uEAAuE;gBACvE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1F,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACvF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;gBACvF,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,CAAC,qDAAqD,CAAC,CAAC;gBAC/F,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,sDAAsD;gBACtD,MAAM,IAAI,GAAG,MAAM,CAAC,kBAA0B,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAU,mBAAmB;gBACpE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,gCAAgC;YACvF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,QAAQ,CAAC,iEAAiE,EAAE,GAAG,EAAE;YAC/E,kFAAkF;YAClF,MAAM,KAAK,GAAoC;gBAC7C,yDAAyD;gBACzD,CAAC,KAAK,EAAe,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;gBAClE,CAAC,cAAc,EAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;gBAClE,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;gBAClE,CAAC,eAAe,EAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;aACnE,CAAC;YAEF,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;gBACrG,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC;oBACpD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;oBACvE,+CAA+C;oBAC/C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;oBACjE,2CAA2C;oBAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,8BAA8B,WAAW,IAAI,IAAI,GAAG,CAAC,CAAC;oBAC1F,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACvE,0DAA0D;oBAC1D,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAChG,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAC1C,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;gBACzF,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBACrF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACrF,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEzF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBACrF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACrF,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3F,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;gBAC1G,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBACpF,2EAA2E;gBAC3E,uEAAuE;gBACvE,0EAA0E;gBAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,kBAA0B,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnE,2EAA2E;gBAC3E,2EAA2E;gBAC3E,yEAAyE;gBACzE,2EAA2E;gBAC3E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACvF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;gBAC7G,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBACrF,wEAAwE;gBACxE,mEAAmE;gBACnE,MAAM,IAAI,GAAG,MAAM,CAAC,kBAA0B,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpE,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;gBACvF,2CAA2C;gBAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACvF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;YAC7C,MAAM,GAAG,GAAG,iDAAiD,CAAC;YAC9D,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;gBACrF,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC9C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAEzC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAiB,yBAAyB;gBAC7E,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACjD,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5F,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,QAAQ,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAClE,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;gBAClG,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,CAAC,iDAAiD,CAAC,CAAC;gBAC3F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,2EAA2E;gBAC3E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjF,mGAAmG;gBACnG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5F,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;YAC7E,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;gBAC3E,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,CAAC,gDAAgD,CAAC,CAAC;gBAC1F,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,gEAAgE;gBAChE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBACxE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9F,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;YACtD,MAAM,GAAG,GAAG,iDAAiD,CAAC;YAC9D,MAAM,YAAY,GAAG,CAAC,GAAQ,EAAE,EAAsB,EAAE,EAAE;gBACxD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC9C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YACtF,CAAC,CAAC;YAEF,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;gBACjD,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,yDAAyD,GAAG,4BAA4B,CAC7F,CAAC;gBACF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;gBAC9C,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,yEAAyE,CAC9E,CAAC;gBACF,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;gBACf,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;gBACnF,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;gBACrC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvD,kDAAkD;gBAClD,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,IAAI,CAAA,yEAAyE,CAC9E,CAAC;gBACF,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC1B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACxB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC/C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5F,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,QAAQ,CAAC,qEAAqE,EAAE,GAAG,EAAE;YACnF,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;gBACjG,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,CAAC,iDAAiD,CAAC,CAAC;gBAC3F,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAE9C,qBAAqB;gBACrB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACjD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;gBACnD,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAE7D,0DAA0D;gBAC1D,4EAA4E;gBAC5E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;oBAC5C,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK;oBACvC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;oBACjD,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;iBACtD,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAE,CAAC,KAAK,CAAC;gBAC7D,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;qBACxF,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAEnC,mDAAmD;gBACnD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC7C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC9C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACzE,MAAM,EAAE,GAAG,kBAAkB,CAAC;QAE9B,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,IAAI,CAAA,oFAAoF,CACzF,CAAC;YACF,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,KAAK,EACxB,GAAiB,EAAE,CAAS,EAAE,GAAW,EAAE,CAAS,EACpD,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,IAAY,EAC5D,EAAE;YACD,GAAW,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,GAAW,CAAC,OAAO,GAAG,EAAE,CAAC;YAAE,GAAW,CAAC,SAAS,GAAG,EAAE,CAAC;YACtD,GAAW,CAAC,SAAS,GAAG,EAAE,CAAC;YAAE,GAAW,CAAC,cAAc,GAAG,EAAE,CAAC;YAC9D,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;YACpB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/G,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;YACxE,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,0EAA0E;QAC1E,gEAAgE;QAChE,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAU,EAAE;YACjD,MAAM,CAAC,GAAG,sFAAsF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7G,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC,CAAC;YACvD,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;YAC1E,OAAO,SAAS,GAAG,KAAK,CAAC,CAAC,uCAAuC;QACnE,CAAC,CAAC;QAEF,wEAAwE;QACxE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,+BAA+B;QAC1F,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,8BAA8B;QAE5F,EAAE,CAAC,yFAAyF,EAAE,GAAG,EAAE;YACjG,sDAAsD;YACtD,MAAM,CAAC,GAAI,UAAkB,CAAC,QAAQ,CAAC;YACvC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAChG,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;YAC7E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACpE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC1E,+EAA+E;YAC/E,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;YACxG,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACpE,wEAAwE;YACxE,uCAAuC;YACvC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACpE,wEAAwE;YACxE,MAAM,CACJ,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9B,UAAU,MAAM,CAAC,KAAK,sDAAsD,CAC7E,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E;;;;;;;;;;;;;;;;;;WAkBG;QACH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sCAAsC,YAAY,2BAA2B,CAClF,CAAC;YACF,EAAE,CAAC,KAAK,GAAG,qDAAqD,CAAC;YACjE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;YAEtC,+EAA+E;YAC/E,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAExD,wBAAwB;YACxB,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;YAEvE,2EAA2E;YAC3E,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9B,4EAA4E;YAC5E,2EAA2E;YAC3E,2EAA2E;YAC3E,8BAA8B;YAC9B,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CACtE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAClC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,gCAAgC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC/E,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CACpC,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;YACpF,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC;YACrF,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC;YACrF,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH;;;;;;;;;;;WAWG;QACH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,EAAE,GAAG,MAAM,OAAO,CAAqB,IAAI,CAAA;;;gCAGvB,CAAC,CAAC;YAC5B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9E,MAAM,CAAC,IAAI,EAAE,kDAAkD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,EAAE,GAAG,MAAM,OAAO,CAAqB,IAAI,CAAA;;;gCAGvB,CAAC,CAAC;YAC5B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9E,MAAM,CAAC,IAAI,EAAE,kDAAkD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;YAClE,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CACV,uBAAuB,QAAQ,2CAA2C,SAAS,EAAE;gBACrF,CAAC,SAAS,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CACxF,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAC1D,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,IAAI,CAAA,oFAAoF,CACzF,CAAC;YACF,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,KAAK,EACxB,GAAiB,EAAE,CAAS,EAAE,GAAW,EAAE,CAAS,EACpD,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,IAAY,EAC5D,EAAE;YACD,GAAW,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,GAAW,CAAC,OAAO,GAAG,EAAE,CAAC;YAAE,GAAW,CAAC,SAAS,GAAG,EAAE,CAAC;YACtD,GAAW,CAAC,SAAS,GAAG,EAAE,CAAC;YAAE,GAAW,CAAC,cAAc,GAAG,EAAE,CAAC;YAC9D,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;YACpB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/G,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;YACxE,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,mFAAmF;QACnF,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAU,EAAE;YACjD,MAAM,CAAC,GAAG,sFAAsF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7G,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC,CAAC;YACvD,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;QAC7D,CAAC,CAAC;QAEF,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAU,EAAE;YACrD,MAAM,CAAC,GAAG,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC;YACrD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC,CAAC,CAAC;QAE7F,+EAA+E;QAC/E,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAU,EAAE;YACnE,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;iBAChG,aAAa,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC9B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAE,CAAC,KAAK,CAAC;YAC/C,MAAM,CAAC,GAAG,iCAAiC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,uBAAuB;YACzC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC;QAEF;;;;;WAKG;QACH,MAAM,KAAK,GAAoF;YAC7F,CAAC,KAAK,EAAwB,IAAI,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAG,CAAC,EAAG,CAAC,EAAI,CAAC,EAAE,KAAK,CAAC;YACnE,CAAC,kBAAkB,EAAW,IAAI,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC;YAC5E,CAAC,qBAAqB,EAAQ,IAAI,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAG,CAAC,EAAG,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC;YAC9E,CAAC,qBAAqB,EAAQ,IAAI,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,iBAAiB,CAAC;YAC/E,CAAC,kBAAkB,EAAW,IAAI,EAAG,CAAC,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,EAAG,CAAC,EAAI,CAAC,EAAE,kBAAkB,CAAC;YAChF,CAAC,qBAAqB,EAAQ,IAAI,EAAG,CAAC,EAAE,EAAE,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC;YAChF,CAAC,uBAAuB,EAAM,IAAI,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAG,CAAC,EAAG,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC;YAChF,CAAC,uBAAuB,EAAM,IAAI,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAG,CAAC,EAAG,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC;YAChF,CAAC,oBAAoB,EAAS,IAAI,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,EAAE,EAAG,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC;YAChF,CAAC,qBAAqB,EAAQ,IAAI,EAAE,EAAE,EAAG,CAAC,EAAG,CAAC,EAAE,EAAE,EAAG,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC;YAChF,CAAC,mBAAmB,EAAU,IAAI,EAAG,CAAC,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,EAAG,CAAC,EAAI,CAAC,EAAE,eAAe,CAAC;YAC7E,CAAC,sBAAsB,EAAO,IAAI,EAAE,EAAE,EAAG,CAAC,EAAG,CAAC,EAAE,EAAE,EAAG,CAAC,EAAI,CAAC,EAAE,qBAAqB,CAAC;YACnF,CAAC,yBAAyB,EAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAG,CAAC,EAAG,CAAC,EAAI,CAAC,EAAE,kBAAkB,CAAC;SACjF,CAAC;QAEF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,KAAK,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC9E,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,GAAG,KAAK,oCAAoC,CAAC;qBACtF,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC9B,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,YAAY,MAAM,CAAC,KAAK,iCAAiC,CAAC;qBACtG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC/E,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnE,kEAAkE;gBAClE,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,gBAAgB,MAAM,CAAC,KAAK,GAAG,CAAC;qBAChF,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;oBAC7C,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK;oBAChC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;oBACjD,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;iBACtD,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;qBACzC,MAAM,CAAC,CAAC,GAA2B,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,KAAK,4CAA4C,CAAC,CAAC,EAAE,CAAC,KAAK,CACjF,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE;oBACzF,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;wBAC1C,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;wBACpD,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACjD,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;oBAClG,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,CAChB,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC;gBACnF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CACvC,uBAAuB,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,0BAA0B,CAC7E,CAAC;gBACF,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;YACnG,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,8EAA8E;YAC9E,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACpF,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;iBAC9D,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,wEAAwE;YACxE,0EAA0E;YAC1E,0DAA0D;YAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACrF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,wCAAwC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;YACzF,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACrF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAA8C;gBAC1D,CAAC,KAAK,EAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAM,KAAK,EAAiB,wCAAwC,CAAC;gBACrH,CAAC,SAAS,EAAY,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAG,cAAc,EAAQ,iDAAiD,CAAC;gBAC9H,CAAC,WAAW,EAAU,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAM,gBAAgB,EAAM,mDAAmD,CAAC;gBAChI,CAAC,WAAW,EAAU,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAM,kBAAkB,EAAI,qDAAqD,CAAC;gBAClI,CAAC,WAAW,EAAU,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAM,kBAAkB,EAAI,qDAAqD,CAAC;gBAClI,CAAC,OAAO,EAAc,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,iBAAiB,EAAK,oDAAoD,CAAC;gBACjI,CAAC,UAAU,EAAW,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAO,KAAK,EAAiB,wCAAwC,CAAC;aACtH,CAAC;YACF,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACrE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;YAEnF,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,IAAI,CAAA,oDAAoD,KAAK,CAAC,KAAK,oBAAoB,CACxF,CAAC;YACF,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1B,IAAI,KAAK,GAAQ,IAAI,CAAC;YACtB,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/G,IAAI,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;YAEzE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACzF,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACrD,2BAA2B;QAC3B,MAAM,KAAK,GAAG,0BAA0B,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAEtD,gFAAgF;QAChF,MAAM,EAAE,GAAG,kBAAkB,CAAC;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAE,qBAAqB;QAC1E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB;QAE1E,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,QAAiB,EAAE,EAAE,CACvD,OAAO,CAAqB,IAAI,CAAA;;wBAEd,YAAY;uBACb,IAAI;qBACN,IAAI;qBACJ,QAAQ,IAAI,KAAK;mBACnB,KAAK,IAAI,IAAI;;OAEzB,CAAC,CAAC;QAEL,6EAA6E;QAC7E,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3D,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;gBAC1F,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7F,CAAC,CAAC;QAEF,MAAM,eAAe,GAAG,KAAK,EAAE,EAAsB,EAAE,GAAQ,EAAE,EAAE;YACjE,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC;YACzE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YACvC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAC1C,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF;;;;;WAKG;QACH,MAAM,aAAa,GAAG,KAAK,EAAE,GAAQ,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE;YACnE,MAAM,KAAK,GAAG,GAAG,CAAC,UAAW,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAQ,CAAC;YAC/E,KAAK,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACnE,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;YAClB,KAAK,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/E,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,2EAA2E;QAC3E,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;YACtC,kEAAkE;YAClE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACpE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC/F,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;YACzD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,+DAA+D;YAC/D,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3D,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,yCAAyC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,sCAAsC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YAClD,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC/C,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;gBACnE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,sCAAsC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YACpD,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;gBACzC,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;gBACnE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,kEAAkE;YAClE,MAAM,SAAS,GAAG,yBAAyB,CAAC;YAC5C,MAAM,IAAI,GAAwD,EAAE,CAAC;YAErE,oDAAoD;YACpD,CAAC;gBACC,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBACjD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC7G,CAAC;YACD,iCAAiC;YACjC,CAAC;gBACC,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBACrD,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;gBACjB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/G,CAAC;YACD,4CAA4C;YAC5C,CAAC;gBACC,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC9B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;gBACjB,EAAE,CAAC,QAAQ,GAAG,YAAY,CAAC;gBAC3B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC7G,CAAC;YACD,0DAA0D;YAC1D,CAAC;gBACC,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC9B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;gBACjB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClB,EAAE,CAAC,QAAQ,GAAG,YAAY,CAAC;gBAC3B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YACjH,CAAC;YAED,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACrD,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,2EAA2E;YAC3E,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACzF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAI,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAClC,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC1E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACtF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAW,kBAAkB;YAC/D,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,kEAAkE;YAClE,0EAA0E;YAC1E,0EAA0E;YAC1E,iEAAiE;YACjE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC/F,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;YAAC,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC;YAC9C,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,KAAK,GAAG,GAAG,CAAC,UAAW,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;YACxE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAiB,CAAC,KAAK,EAAE,CAAC;YACjD,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAI,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3D,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC;YAC5B,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,oDAAoD;YACpD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3F,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,uBAAuB,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;gBAClE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;gBACnD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,4DAA4D;gBAC5D,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAC/C,uBAAuB,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACrD,CAAC;gBACF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC1F,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;YACpF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,KAAK,GAAoC;gBAC7C,oDAAoD;gBACpD,wCAAwC;gBACxC,CAAC,iDAAiD;oBACjD,iDAAiD,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;gBACxF,uEAAuE;gBACvE,CAAC,iDAAiD;oBACjD,iDAAiD,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;gBACxF,oEAAoE;gBACpE,CAAC,gDAAgD;oBAChD,wCAAwC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;gBACjF,0DAA0D;gBAC1D,CAAC,wCAAwC;oBACxC,wCAAwC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAC/E,CAAC;YACF,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;gBAClD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAChD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,qDAAqD,CAAC,CAAC;YACnF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,0CAA0C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,yEAAyE;YACzE,8DAA8D;YAC9D,0EAA0E;YAC1E,+BAA+B;YAC/B,MAAM,IAAI,GAA6C;gBACrD,EAAE,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,aAAa,EAAE;gBAC5D,EAAE,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,cAAc,EAAE;aAC9D,CAAC;YACF,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC1C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,OAAO,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC/C,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEhE,sEAAsE;gBACtE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;oBAClC,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC3C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC9B,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBACzC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvE,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACvF,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,6GAA6G,EAAE,KAAK,IAAI,EAAE;YAC3H,6GAA6G;YAC7G,wGAAwG;YACxG,+GAA+G;YAC/G,mFAAmF;YACnF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,IAAI,CAAA,kEAAkE,CAChE,CAAC;YACT,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,mDAAmD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxF,mGAAmG;YACnG,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC;YAClF,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qHAAqH,EAAE,KAAK,IAAI,EAAE;YACnI,MAAM,GAAG,GAAG,MAAM,OAAO,CAAe,IAAI,CAAA;;;mBAG/B,IAAI;;;OAGhB,CAAQ,CAAC;YACV,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACtF,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;YAC9F,MAAM,GAAG,GAAG,MAAM,OAAO,CAAe,IAAI,CAAA;;;mBAG/B,IAAI;;;OAGhB,CAAQ,CAAC;YACV,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACrF,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,2BAA2B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,+CAA+C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClF,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAC3D,2EAA2E;YAC3E,0EAA0E;YAC1E,0EAA0E;YAC1E,2EAA2E;YAC3E,wDAAwD;YACxD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC;iBAClE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;YACzF,2GAA2G;YAC3G,8GAA8G;YAC9G,sFAAsF;YACtF,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,IAAI,CAAA,6DAA6D,CAC3D,CAAC;YACT,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,mDAAmD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxF,kFAAkF;YAClF,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC;YAClF,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9C,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,CAAC;gBACjE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACnD,CAAC;YACD,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;YACjB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAClF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACzC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;gBACtC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC3D,MAAM,IAAI,GACR,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;oBACrF,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE;oBAC1F,MAAM,IAAI,EAAE,CAAC;gBACf,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,uBAAuB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;YACvG,2EAA2E;YAC3E,yEAAyE;YACzE,wEAAwE;YACxE,yEAAyE;YACzE,yEAAyE;YACzE,oBAAoB;YACpB,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,gEAAgE,EAAE,GAAG,EAAE;QAC9E,MAAM,EAAE,GAAG,kBAAkB,CAAC;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAG,qBAAqB;QAC3E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAE,qBAAqB;QAE3E,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,QAAiB,EAAE,EAAE,CACvD,OAAO,CAAqB,IAAI,CAAA;;wBAEd,YAAY;uBACb,IAAI;qBACN,IAAI;qBACJ,QAAQ,IAAI,KAAK;mBACnB,KAAK,IAAI,IAAI;;OAEzB,CAAC,CAAC;QAEL,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3D,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;gBAC1F,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7F,CAAC,CAAC;QAEF,MAAM,eAAe,GAAG,KAAK,EAAE,EAAsB,EAAE,GAAQ,EAAE,EAAE;YACjE,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC;YACzE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YACvC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAC1C,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,KAAK,EAAE,GAAQ,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE;YACnE,MAAM,KAAK,GAAG,GAAG,CAAC,UAAW,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAQ,CAAC;YAC/E,KAAK,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACnE,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;YAClB,KAAK,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/E,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,2DAA2D;QAC3D,MAAM,OAAO,GAAG,KAAK,EAAE,EAAsB,EAAE,GAAQ,EAAE,IAAY,EAAE,EAAE;YACvE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;YACpB,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC,CAAC;QAEF,2EAA2E;QAC3E,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,iDAAiD,CAAC,CAAC;YAC/E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC5E,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAE/E,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACrC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,wCAAwC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAErG,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,6CAA6C;YAC7C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACpF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,qDAAqD,EAAE,EAAE,CAAC,CAAC;YACvF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9F,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAElE,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAErF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,0CAA0C;YAC1C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtG,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,qDAAqD,EAAE,EAAE,CAAC,CAAC;YACvF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAEjD,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAEnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,4EAA4E;YAC5E,4EAA4E;YAC5E,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC7F,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,qDAAqD,EAAE,EAAE,CAAC,CAAC;YACvF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAEjD,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjE,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3E,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAE3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,mDAAmD,CAAC;iBAC1E,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAChC,MAAM,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,gCAAgC,CAAC;iBACtE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,IAAI,KAAK,GAAkB,IAAI,CAAC;YAChC,IAAI,EAAuB,CAAC;YAC5B,IAAI,GAAQ,CAAC;YACb,IAAI,CAAC;gBACH,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,aAAa,CAAC,CAAC;gBACjE,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBAAC,KAAK,GAAI,CAAW,CAAC,OAAO,CAAC;YAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YACtD,yEAAyE;YACzE,qEAAqE;YACrE,8EAA8E;YAC9E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3D,MAAM,UAAU,GACd,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;gBACtE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YAC3G,MAAM,UAAU,GAAG,IAAI,IAAI,CACzB,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EACnD,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAC9E,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,aAAa,CAAC,CAAC;YACvE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,kCAAkC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAChF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACnF,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,mDAAmD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACvG,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3D,MAAM,UAAU,GACd,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;gBACtE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YAE3G,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,cAAc,CAAC,CAAC;YACxE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAE3D,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,6CAA6C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,aAAa,CAAC,CAAC;YACvE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3D,MAAM,IAAI,GACR,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;gBACrF,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE;gBAC1F,gBAAgB,CAAC;YACnB,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;YAC9F,2EAA2E;YAC3E,6EAA6E;YAC7E,sEAAsE;YACtE,yDAAyD;YACzD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,qDAAqD,EAAE,EAAE,CAAC,CAAC;YACvF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAEjD,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAU,0BAA0B;YACtE,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAO,2BAA2B;YACvE,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAU,qCAAqC;YAEjF,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACpF,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAExD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,gDAAgD,CAAC;iBACvE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9F,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,2EAA2E;YAC3E,2EAA2E;YAC3E,yEAAyE;YACzE,+DAA+D;YAC/D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAe,IAAI,CAAA;;;;;;OAM3C,CAAQ,CAAC;YACV,MAAM,GAAG,CAAC,cAAc,CAAC;YAAC,MAAM,GAAG,CAAC,cAAc,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAEjF,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,0BAA0B,CAAiB,CAAC,KAAK,EAAE,CAAC;YACnF,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,wCAAwC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjF,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAe,IAAI,CAAA;;;;;;OAM3C,CAAQ,CAAC;YACV,MAAM,GAAG,CAAC,cAAc,CAAC;YAAC,MAAM,GAAG,CAAC,cAAc,CAAC;YAElD,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,0BAA0B,CAAiB,CAAC,KAAK,EAAE,CAAC;YACnF,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,GAAG,CAAC,QAAQ,GAAG,cAAc,CAAC;YAC9B,MAAM,GAAG,CAAC,cAAc,CAAC;YAEzB,mDAAmD;YACnD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;YAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;YAC7C,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,UAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;iBAC5D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACvC,CAAiB,CAAC,WAAY,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAgB,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAA4B,EAAE,CAAC;gBAC7F,MAAM,CAAC,GAAG,GAAG,CAAC,UAAW,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAQ,CAAC;gBACvE,CAAC,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/D,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBACZ,CAAC,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACzE,MAAM,GAAG,CAAC,cAAc,CAAC;YAC3B,CAAC;YAED,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAClG,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,0BAA0B,CAAiB,CAAC,KAAK,EAAE,CAAC;YACnF,MAAM,GAAG,CAAC,cAAc,CAAC;YAEzB,4DAA4D;YAC5D,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,sCAAsC,CAAC;iBAC7D,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,6CAA6C,CAAC;iBACpE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,4EAA4E;YAC5E,wEAAwE;YACxE,qDAAqD;YACrD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAExE,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAuB,iBAAiB;YAC1E,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,wCAAwC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAErF,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAkB,yBAAyB;YAClF,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnF,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1C,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,gBAAgB,CAAiB,CAAC,KAAK,EAAE,CAAC;YACzE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,gDAAgD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAGH;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACvE,MAAM,EAAE,GAAG,kBAAkB,CAAC;QAE9B,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,QAAiB,EAAE,EAAE,CACvD,OAAO,CAAqB,IAAI,CAAA;;wBAEd,YAAY;uBACb,IAAI;qBACN,IAAI;qBACJ,QAAQ,IAAI,KAAK;mBACnB,KAAK,IAAI,IAAI;;OAEzB,CAAC,CAAC;QAEL,MAAM,eAAe,GAAG,KAAK,EAAE,EAAsB,EAAE,GAAQ,EAAE,EAAE;YACjE,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC;YACzE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YACvC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAC1C,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3D,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;gBAC1F,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7F,CAAC,CAAC;QAEF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,mCAAmC,CAAC;iBACxD,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;iBAC9D,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,wEAAwE;YACxE,mDAAmD;YACnD,KAAK,MAAM,GAAG,IAAI,CAAC,yBAAyB,EAAE,yBAAyB;gBACpD,yBAAyB,CAAC,EAAE,CAAC;gBAC9C,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACxC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAClD,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC/C,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,yBAAyB,EAAE,cAAc,CAAC,CAAC;YACvE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,4DAA4D;YAC5D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,wEAAwE;YACxE,wEAAwE;YACxE,gEAAgE;YAChE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,2CAA2C,CAAC;iBAChE,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,wEAAwE;YACxE,sCAAsC;YACtC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;YACzF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,wCAAwC,CAAC;iBAC7D,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnF,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;YACjB,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;YAClB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,iDAAiD,CAAC;iBACtE,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,4DAA4D;YAC5D,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;iBACtD,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,gCAAgC,CAAC;iBACvD,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEvE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACrE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAoC,CAAC;iBAC3D,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAEjD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,qDAAqD,EAAE,KAAK,CAAC,CAAC;YAC1F,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChF,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAoC,CAAC;iBAC3D,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAE1C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,EAAE;IACF,6EAA6E;IAC7E,4EAA4E;IAC5E,8DAA8D;IAC9D,4EAA4E;IAC5E,EAAE;IACF,qEAAqE;IACrE,oDAAoD;IACpD,6EAA6E;IAC7E,oEAAoE;IACpE,4EAA4E;IAC5E,4EAA4E;IAC5E,2CAA2C;IAC3C,QAAQ,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAChF,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxD,4EAA4E;QAC5E,+CAA+C;QAC/C,MAAM,KAAK,GAAG,CAAC,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAEpE;;;;;;WAMG;QACH,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,IAAY,EAAU,EAAE;YAC7D,KAAK,MAAM,KAAK,IAAI,CAAC,YAAY,EAAE,aAAa,CAAU,EAAE,CAAC;gBAC3D,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAC3C,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAgC,CAAC;yBACrE,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;oBACrD,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;oBAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,CAAC,GAAG,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjE,IAAI,CAAC,EAAE,CAAC;oBACN,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,YAAY,CAAC,CAAC;QAChF,CAAC,CAAC;QAEF,MAAM,UAAU,GACd,mGAAmG,CAAC;QAEtG,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;YACrC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,KAAK,EAAE,CAAC,CAAC;YAClF,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChB,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;gBACpF,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE;gBACrC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAE,EAAE,CACpD,OAAO,CAAqB,IAAI,CAAA;;wBAEd,YAAY;uBACb,IAAI;qBACN,IAAI;qBACJ,QAAQ;mBACV,KAAK;;OAEjB,CAAC,CAAC;QAEL,MAAM,eAAe,GAAG,KAAK,EAAE,EAAsB,EAAE,GAAQ,EAAE,EAAE;YACjE,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC;YACzE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YACvC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAC1C,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACzC,EAAE,CAAC,OAAO,IAAI,gCAAgC,IAAI,yBAAyB,EAAE,KAAK,IAAI,EAAE;oBACtF,MAAM,KAAK,GAAG,uBAAuB,IAAI,EAAE,CAAC;oBAC5C,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACxC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;oBAE9B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBAC9C,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;oBACnD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAEpE,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBAC5D,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAE3C,6DAA6D;oBAC7D,MAAM,CAAC,OAAO,CAAC,QAAQ,EACrB,GAAG,IAAI,YAAY,OAAO,CAAC,UAAU,0BAA0B;wBAC/D,GAAG,cAAc,GAAG,KAAK,YAAY,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;oBAEvE,wEAAwE;oBACxE,MAAM,CAAC,OAAO,CAAC,QAAQ,EACrB,oEAAoE;wBACpE,yBAAyB,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC;oBAEhF,mEAAmE;oBACnE,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,EAAE,gCAAgC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC/E,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,sCAAsC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAExE,+CAA+C;oBAC/C,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,EACxC,4CAA4C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAE3E,0DAA0D;oBAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,IAAI,EAAE,CAAC,EAAE,EAAE,EACX,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACtE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAC/C,GAAG,OAAO,CAAC,QAAQ,CAAC;oBACrB,MAAM,CAAC,QAAQ,EACb,sDAAsD,MAAM,CAAC,KAAK,GAAG,CAAC;yBACrE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAE9B,sEAAsE;oBACtE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAChE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACrC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBACrD,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;oBACpD,MAAM,CAAC,MAAM,CAAC,SAAS,EACrB,gCAAgC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC9E,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,EAAE,iCAAiC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClF,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,yBAAyB,EAAE,cAAc,CAAC,CAAC;YACtE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvF,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YAClF,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,yBAAyB,EAAE,gBAAgB,CAAC,CAAC;YACxE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,4CAA4C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5F,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;YACpF,8EAA8E;YAC9E,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,4BAA4B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACzF,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,4BAA4B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3F,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,4BAA4B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5F,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,0BAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC;AAmDH,mEAAmE;AACnE,MAAM,CAAC,MAAM,QAAQ,GACnB,OAAQ,UAAkB,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAE,UAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAE5F,iFAAiF;AAEjF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA+B,CAAC;AAEhE;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAY;IACpD,IAAI,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;QACvF,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IACvF,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5B,+EAA+E;IAC/E,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,wDAAwD,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,OAAe,EAAE,IAAY;IAClD,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE;QACzE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE;QAClD,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,kBAAkB,EAAE;KACvD,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,+EAA+E;AAC/E,MAAM,UAAU,WAAW,CAAC,CAAO;IACjC,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAO,EAAE,CAAO;IACzC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG;QAChE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;QAC9C,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,CAAO,EAAE,IAAY;IAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC;QACzB,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAE,SAAS;QACvC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,iFAAiF;AAEjF,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,CAAC,GAAG,4FAA4F;SACnG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACpB,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5G,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,EAAE,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC;IAClD,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IACzF,OAAO,IAAI,GAAG,GAAG,CAAC;AACpB,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,CAAC,GAAG,wEAAwE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACpG,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAClD,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9D,6EAA6E;QAC7E,EAAE,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,cAAc,CAC5B,GAAW;IAEX,MAAM,CAAC,GAAG,0GAA0G;SACjH,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACpB,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,OAAO;QACL,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YAClD,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACzD,EAAE,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACzD;QACD,QAAQ,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;QAC/E,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;KAClB,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAY,EAAE,EAAU;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC;IACzB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1B,wEAAwE;YACxE,qEAAqE;YACrE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3C,IAAI,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI;oBAAE,EAAE,GAAG,GAAG,CAAC;;oBAAM,EAAE,GAAG,GAAG,CAAC;YAC5D,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,IAAI,GAAG,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAW,CAAC;IAC5B,OAAO,OAAO,OAAO,CAAC,iBAAiB,KAAK,UAAU;QACpD,CAAC,CAAE,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAc;QACrD,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC;QAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAC1E,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACzB,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;IACnB,OAAO,GAAG,EAAE;QACV,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAO,EAAU,EAAE,CACzC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;IAC1G,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;IAClH,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAEtC,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE;QACzE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE;QAClD,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,kBAAkB,EAAE;KACvD,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,IAAY;IAIrD,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrC,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;IACjD,OAAO;QACL,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;QAC1C,OAAO;QACP,UAAU,EAAE,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,SAAS,EAAE,QAAQ;KACpB,CAAC;AACJ,CAAC;AAgBD,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAmD;IAClF,MAAM,EAAE,GAAQ,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;QAC/D,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAA,oCAAoC,KAAK,CAAC,QAAQ,IAAI,KAAK,2BAA2B,CAAC;QAC3G,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAA;gBACR,KAAK,CAAC,KAAK,cAAc,KAAK,CAAC,QAAQ,IAAI,KAAK,2BAA2B,CAAC,CAAC;IAC3F,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EAAO;IAClC,MAAM,EAAE,CAAC,cAAc,CAAC;IACxB,MAAM,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;IAC/B,IAAI,GAAG;QAAE,MAAM,GAAG,CAAC,cAAc,CAAC;IAClC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAO;IACnC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC;AAE/B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAe,EAAE,CACnD,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAgB,CAAC;AAE/D,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAO;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,MAAM,GAAmB,IAAI,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,QAAQ,GAAG,CAAC,CAAQ,EAAE,EAAE,GAAG,MAAM,GAAI,CAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC7C,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IACzB,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IACjB,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAChD,2EAA2E;IAC3E,2CAA2C;IAC3C,eAAe,GAAG,KAAK,CAAC;IACxB,IAAI,MAAM;QAAG,MAAc,CAAC,WAAW,GAAG,KAAK,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAO,EAAE,CAAO,EAAE,IAAY;IAE9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;IACpB,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IACjB,4EAA4E;IAC5E,GAAG,CAAC,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAC/B,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC;IACzB,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC;IACtB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC;IAC1B,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC;IAC1B,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC;IAC1B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;AACnB,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,CAAiB,EAAE,YAAqB;IACnE,MAAM,CAAC,GAAgB,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAEzE,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI;YAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5F,OAAO,CAAC,CAAC;IACX,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5E,CAAC,CAAC,IAAI,CAAC;YACL,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,sBAAsB,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,SAAS,EAAE;SAC5G,CAAC,CAAC;IACL,CAAC;IAED,kCAAkC;IAClC,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9D,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,QAAQ,aAAa,YAAY,EAAE,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACrB,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,yDAAyD;IACzD,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,CAAC;QAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACjF,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACpD,CAAC,CAAC,IAAI,CAAC;YACL,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,WAAW,MAAM,CAAC,QAAQ,GAAG,KAAK,YAAY,OAAO,GAAG,KAAK,gBAAgB,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,QAAQ,EAAE;SACpH,CAAC,CAAC;IACL,CAAC;IAED,uDAAuD;IACvD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC;gBACL,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,WAAW,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,UAAU,CAAC,CAAC,SAAS,EAAE;aAC9G,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,oDAAoD;IACpD,MAAM,SAAS,GAAG,aAAa,CAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EACxD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAC5E,GAAG,MAAM,CAAC,QAAQ,CAAC;IACpB,IAAI,SAAS,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9B,CAAC,CAAC,IAAI,CAAC;YACL,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,qBAAqB,SAAS,kBAAkB,CAAC,CAAC,SAAS,WAAW,SAAS,GAAG,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,KAAK,EAAE;SAC5H,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,CAAU;IACxC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnD,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QAC/C,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,SAAS,CAAC,CAAC,SAAS,WAAW,MAAM,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE;SACnI,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;AAExE,4EAA4E;AAC5E,MAAM,OAAO,QAAQ;IAArB;QACE,SAAI,GAAa,EAAE,CAAC;IAUtB,CAAC;IATC,GAAG,CAAC,GAAW,EAAE,EAAe;QAC9B,KAAK,MAAM,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACvG,CAAC;CACF;AAED;;;gFAGgF;AAEhF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,sBAAsB,OAAO,aAAa,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG;YAC/E,SAAS,KAAK,CAAC,MAAM,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,qCAAqC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;QAC/D,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC;QACjE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC;QAClE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;QACrG,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5F,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,GAAG,GAAG,WAAW,CACrB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAClG,MAAM,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEvE,MAAM,GAAG,GAAG,WAAW,CACrB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACnG,MAAM,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,qEAAqE;gBAChF,yDAAyD,CAAC,CAAC;YAC7D,MAAM,CAAC,QAAQ,EAAE,uCAAuC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACzE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;YACpG,MAAM,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB;YAC1E,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,EAAE,CAAC;YACtF,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBAC5E,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,GAAG,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;qBACzE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACxD,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC3D,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACzD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC/D,OAAO,IAAI,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,iDAAiD,OAAO,kBAAkB,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,EAAE,GAAG,eAAe,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnG,MAAM,CAAC,kBAAkB,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxG,MAAM,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,cAAc,CAAC,iDAAiD,CAAE,CAAC;QAC7E,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACxC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,eAAe,CAAC,yBAAyB,CAAE,CAAC;QACtD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,4BAA4B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACxE,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;QAC7F,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC;YACnD,KAAK,EAAE,CAAE,CAAC,KAAK,EAAE,SAAS,EAAE,CAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAE,CAAC,QAAQ;SAChE,CAAC,EAAE,CAAC,CAAC;QACN,MAAM,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9C,MAAM,CAAC,CAAE,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;gFAGgF;AAEhF,6EAA6E;AAC7E,SAAS,YAAY,CAAC,QAAgB;IACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,OAAO,IAAI,QAAQ,GAAG,KAAK,KAAK,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,GAAG,wCAAwC,CAAC;AAE5D,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AACnF,CAAC;AAED,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC5D,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;YACvE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9D,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,GAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACzF,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3D,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,IAAI,QAAQ,KAAK,IAAI;gBAAE,QAAQ,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;gBACrE,iBAAiB,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG;gBACrE,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,mBAAmB,OAAO,sCAAsC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,SAAS,GAAoC,EAAE,CAAC;QACtD,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBAC5D,MAAM,CAAC,GAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;gBAC7F,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBACjC,yGAAyG;gBACzG,qGAAqG;gBACrG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC;oBAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAChF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBACjB,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBACrC,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;oBACzE,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI;oBAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC3E,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,+BAA+B,SAAS,CAAC,MAAM,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACtH,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnG,MAAM,CAAC,CAAC,EAAE,mDAAmD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAA4C;YACrD,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,yBAAyB,CAAC;YAC1E,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC;YACzE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;YAC/C,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,sBAAsB,CAAC;SAC3E,CAAC;QACF,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;YACtC,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;gBACzF,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBACjC,0GAA0G;gBAC1G,qGAAqG;gBACrG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC;oBAAC,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACvH,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzC,MAAM,GAAG,GAAG,GAAG,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBACpC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;wBAC3D,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,EAAE,yBAAyB;YACnF,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,CAAC,EAAE,CAAC;YACnF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,GAAG,GAAG,oBAAoB,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC1C,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,GAAG,EAAE,CAAC;YAC5E,CAAC;iBAAM,IAAI,CAAC;gBAAE,GAAG,GAAG,oBAAoB,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,iDAAiD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH;;;gFAGgF;AAEhF,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,eAAe,GAAG,CAAC,QAAQ,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,0CAA0C;YAC1C,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3B,IAAI,GAAG,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC;oBACtB,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;wBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACnD,IAAI,CAAC,GAAG,eAAe;wBAAE,eAAe,GAAG,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,2CAA2C,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG;YACzF,0BAA0B,eAAe,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,GAAG;YAC7G,UAAU,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,CAAC,GAAG,cAAc,CAAC;QACzB,MAAM,CAAC,GAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QAChG,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAG,CAAE,CAAC,SAAU,CAAC;QAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhC,0CAA0C;QAC1C,MAAM,CAAC,GAAG,0CAA0C,CAAC,IAAI,CAAC,CAAE,CAAC,KAAM,CAAE,CAAC;QACtE,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,CAAE,CAAC,KAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC;QAErD,8CAA8C;QAC9C,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,CAAE,CAAC,CAAC;QAE/B,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,6BAA6B,OAAO,OAAO,CAAC,IAAI;YAC3D,uBAAuB,OAAO,CAAC,CAAC,CAAC,IAAI;YACrC,uBAAuB,KAAK,IAAI;YAChC,uBAAuB,OAAO,OAAO,OAAO,GAAG,KAAK,cAAc,OAAO,GAAG,IAAI,MAAM;YACtF,uBAAuB,OAAO,OAAO,OAAO,GAAG,KAAK,SAAS;YAC7D,uBAAuB,OAAO,GAAG,OAAO,MAAM;YAC9C,uBAAuB,CAAE,CAAC,KAAK,IAAI;YACnC,yBAAyB,SAAS,sBAAsB,SAAS,GAAG,KAAK,OAAO;YAChF,uBAAuB,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG;YAC1D,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,KAAK;YAC7E,uBAAuB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAEtE,MAAM,CAAC,OAAO,GAAG,KAAK,EAAE,kDAAkD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,CAAC,SAAS,GAAG,KAAK,EAAE,mDAAmD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,yHAAyH;IACzH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACjD,IAAI,GAAG,GAAG,KAAK,KAAK,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,gDAAgD,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzG,MAAM,CAAC,GAAG,EAAE,wCAAwC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAClE,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI;YAChB,0BAA0B,EAAE,0BAA0B,EAAE,0BAA0B;YAClF,0BAA0B,EAAE,0BAA0B,EAAE,0BAA0B;YAClF,0BAA0B,EAAE,0BAA0B;SACvD,EAAE,CAAC;YACF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACzE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;gBAChG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,4CAA4C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;YAC3E,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,2DAA2D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7F,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH;;;gFAGgF;AAEhF,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB;IAC3E,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe;IAC9E,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB;CAC9D,CAAC;AAEF,uEAAuE;AACvE,MAAM,MAAM,GAAW;IACrB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;IAC3E,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE;IAC9E,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;CACjF,CAAC;AAEF,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,CAAO,EAAE,CAAW;IACzD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC;IAC5D,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC9G,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;AAClD,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;QAC/F,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,mBAAmB,OAAO,iBAAiB,OAAO,CAAC,MAAM,eAAe,SAAS,CAAC,MAAM,GAAG;YACtG,eAAe,WAAW,CAAC,MAAM,eAAe,UAAU,CAAC,MAAM,GAAG;YACpE,4BAA4B,kBAAkB,CAAC,MAAM,GAAG;YACxD,kBAAkB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;YAC9E,iBAAiB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7E,2EAA2E;QAC3E,4EAA4E;QAC5E,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YAAC,MAAM,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QACpE,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,OAAO,GAA4B;YACvC,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC,aAAa,EAAE,kBAAkB,CAAC;YACtE,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC;YACnE,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;SACvE,CAAC;QACF,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC;YACzC,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC;gBAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,UAAU,GAAG,KAAK,CAAC;YAAC,CAAC;YAC5F,IAAI,CAAC,UAAU;gBAAE,SAAS;YAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,SAAS,KAAK,cAAc,SAAS,EAAE,CAAC;YACpD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC9B,oEAAoE;gBACpE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;gBACjC,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;gBACnD,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;oBACvC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,SAAS,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3G,CAAC;gBACD,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjF,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC/B,MAAM,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,sCAAsC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACnF,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,EAAE,iBAAiB;YAClE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,EAAE,CAAC;YACrF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzC,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBACrC,IAAI,GAAG,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBAChF,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,8BAA8B,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;oBACtF,CAAC;oBACD,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC9B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH;;;gFAGgF;AAEhF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAIrC,SAAS,cAAc,CAAC,KAAe;IACrC,MAAM,GAAG,GAAS,EAAE,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,QAAQ,CAAC,wDAAwD,EAAE,GAAG,EAAE;IACtE,IAAI,WAAW,GAAS,EAAE,CAAC;IAC3B,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAC5F,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,mBAAmB,OAAO,iBAAiB,KAAK,CAAC,MAAM,GAAG;YACrE,wBAAwB,YAAY,CAAC,MAAM,gBAAgB,WAAW,CAAC,MAAM,GAAG;YAChF,WAAW,GAAG,aAAa,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,WAAW,EAAE,CAAC;YACtC,wEAAwE;YACxE,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;gBAC/D,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACpB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC7B,uEAAuE;gBACvE,IAAI,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAChD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,UAAU,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBAC9B,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;wBACzB,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;oBACxH,CAAC;oBACD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC9C,CAAC;gBACD,MAAM,IAAI,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,uCAAuC,MAAM,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,MAAM,GAAG,CAAC,CAAC;QAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAAC,MAAM,UAAU,GAAa,EAAE,CAAC;QAC1E,IAAI,YAAY,GAAG,CAAC,CAAC;QAAC,IAAI,WAAW,GAAG,CAAC,CAAC;QAC1C,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,WAAW,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACpC,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS;gBAAE,SAAS;YACpC,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;YACxB,IAAI,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS,CAAG,sBAAsB;YACzE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,UAAU,IAAI,SAAS,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO,GAAG,KAAK,KAAK,CAAC;YAC/E,uEAAuE;YACvE,2CAA2C;YAC3C,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC9B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC5C,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;oBAAC,MAAM,IAAI,CAAC,CAAC;oBAAC,IAAI,EAAE,CAAC,SAAS,IAAI,CAAC;wBAAE,YAAY,IAAI,CAAC,CAAC;gBAAC,CAAC;qBAC1E,CAAC;oBAAC,KAAK,IAAI,CAAC,CAAC;oBAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC;wBAAE,WAAW,IAAI,CAAC,CAAC;gBAAC,CAAC;gBACnF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACV,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,KAAK,GAAG;wBAC3E,UAAU,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;YACD,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC,KAAK,GAAG;YAC9D,gBAAgB,MAAM,gBAAgB,KAAK,GAAG;YAC9C,oBAAoB,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;YACxD,6CAA6C,YAAY,2BAA2B,WAAW,GAAG;YAClG,2DAA2D;YAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wEAAwE,EAAE,GAAG,EAAE;IACtF,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAChG,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,SAAS,GAAG,CAAC,CAAC;QAAC,IAAI,UAAU,GAAG,CAAC,CAAC;QAAC,MAAM,WAAW,GAAa,EAAE,CAAC;QACnF,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,GAAS,EAAE,CAAC,UAAU,CAAC;YAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS,CAAG,0BAA0B;YAE7D,2EAA2E;YAC3E,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,cAAc,IAAI,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACrC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;4BACV,IAAI,EAAE,sBAAsB;4BAC5B,MAAM,EAAE,SAAS,CAAC,CAAC,SAAS,eAAe,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE;yBACpE,CAAC,CAAC,CAAC;gBACN,CAAC;gBACD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;YAED,0EAA0E;YAC1E,6DAA6D;YAC7D,MAAM,EAAE,GAAG,CAAC,KAAa,EAAE,EAAE;gBAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACjC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC5D,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACtE,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,OAAO,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC;YACzD,CAAC,CAAC;YACF,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC/D,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/G,CAAC;gBACD,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAChH,CAAC;gBACD,IAAI,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC;oBAClC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC9B,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;oBAAE,SAAS,IAAI,CAAC,CAAC;qBACvC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBAAC,UAAU,IAAI,CAAC,CAAC;oBAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;YAChF,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,CAAC,SAAS,GAAG;oBACnF,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;YAC/F,CAAC;YACD,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,CAAC,KAAK,GAAG;YAClE,eAAe,SAAS,iBAAiB,UAAU,GAAG;YACtD,qBAAqB,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtF,MAAM,CAAC,CAAC,EAAE,qCAAqC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AASH,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,KAAa,EAChE,OAAe,EAAE,OAAe,EAAE,EAAU,EAAQ,EAAE,CACtD,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AAEtD,MAAM,KAAK,GAAW;IACpB,2EAA2E;IAC3E,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,EAAE;IAChE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,EAAE,cAAc,EAAE;IAC7E,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,EAAE,kBAAkB,EAAE;IAC5E,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,EAAE,iBAAiB,EAAE;IAC9E,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,+BAA+B,EAAE,EAAE,EAAE,cAAc,EAAE;IACjF,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,+BAA+B,EAAE,EAAE,EAAE,kBAAkB,EAAE;IACrF,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,+BAA+B,EAAE,EAAE,EAAE,oBAAoB,EAAE;IACvF,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,iDAAiD,EAAE,EAAE,EAAE,cAAc,EAAE;IACtG,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,kDAAkD,EAAE,EAAE,EAAE,eAAe,EAAE;IACtG,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,qDAAqD,EAAE,EAAE,EAAE,kBAAkB,EAAE;IAC9G,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,qDAAqD,EAAE,EAAE,EAAE,kBAAkB,EAAE;IAC9G,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,wDAAwD,EAAE,EAAE,EAAE,qBAAqB,EAAE;IAErH,4EAA4E;IAC5E,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,cAAc,EAAE;IAClF,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,kBAAkB,EAAE;IACjF,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,kBAAkB,EAAE;IACrF,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,kBAAkB,EAAE;IACzF,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE;IACtE,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,oBAAoB,EAAE;IAE/E,2EAA2E;IAC3E,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,iBAAiB,EAAE;IAClF,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,qBAAqB,EAAE;IACtF,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE;IACtF,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,kBAAkB,EAAE;IAClF,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,iBAAiB,EAAE;IACrF,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE;CACrF,CAAC;AAEF,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACX,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;gBAChC,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;YACD,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7G,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,mBAAmB,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,OAAO,uBAAuB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,0EAA0E;QAC1E,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG;YACZ,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACnE,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,MAAM;YAClE,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,MAAM;YACnE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;SACF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,0BAA0B,OAAO,WAAW,KAAK,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;gFAGgF;AAEhF,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB;IACxE,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;AAEtF,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEjD,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;gBACpB,MAAM,CAAC,GAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;gBAC3F,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC/B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBAC9B,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,EAAE,CAAC;wBAC9B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC/G,CAAC;oBACD,sEAAsE;oBACtE,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBACrC,IAAI,GAAG,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC;wBACtB,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;oBACnF,CAAC;oBACD,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC;oBACxC,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;wBACtC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,WAAW,MAAM,CAAC,QAAQ,SAAS,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;oBACrG,CAAC;oBACD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,CAAC,uBAAuB,EAAE,wBAAwB;YAClE,yBAAyB,EAAE,wBAAwB,EAAE,yBAAyB,CAAC,EAAE,CAAC;YAClF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;YACtE,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACvI,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,sDAAsD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uDAAuD,EAAE,GAAG,EAAE;IACrE,MAAM,KAAK,GAAG;QACZ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;KACrC,CAAC;IACF,MAAM,IAAI,GAA4C;QACpD,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC;QAC/E,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,kBAAkB,CAAC;KACzF,CAAC;IAEF,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,EAAE,CAAC;YAClF,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrC,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;oBACnC,MAAM,CAAC,GAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;oBACtF,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC5C,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;oBAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,EAAE,CAAC;wBACxC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;wBACpC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;4BAC3D,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oCACV,IAAI,EAAE,iBAAiB;oCACvB,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE;iCAClG,CAAC,CAAC,CAAC;wBACN,CAAC;wBACD,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;4BACpF,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBAC1E,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAG7C,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GAAU;YAClB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;YAC7G,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,+BAA+B,EAAE,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;YACxH,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,+BAA+B,EAAE,EAAE,EAAE,kBAAkB,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;YAC5H,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,wCAAwC,EAAE,EAAE,EAAE,KAAK,EAAE;YACtF,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,iDAAiD,EAAE,EAAE,EAAE,cAAc,EAAE;YACtG,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,qDAAqD,EAAE,EAAE,EAAE,kBAAkB,EAAE;YAC9G,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,kDAAkD,EAAE,EAAE,EAAE,eAAe,EAAE;YAClG,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,cAAc,EAAE;YAC9E,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE;YAC/D,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,qDAAqD,EAAE,EAAE,EAAE,kBAAkB,EAAE;YAC9G,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,qDAAqD,EAAE,EAAE,EAAE,kBAAkB,EAAE;SAC/G,CAAC;QACF,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1C,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC;gBACxE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,YAAY,QAAQ,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YACpG,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI;gBAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAC3E,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,qCAAqC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,IAAI,GAA+D;YACvE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,cAAc,EAAE;YAClD,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE;YACxD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE;YAC/D,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,cAAc,EAAE;YAClF,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE;YAC1E,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,gDAAgD,EAAE,EAAE,EAAE,KAAK,EAAE;YACtG,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,iDAAiD,EAAE,EAAE,EAAE,cAAc,EAAE;YAChH,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,kBAAkB,EAAE;YACrF,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,KAAK,EAAE;YACjE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,KAAK,EAAE;YAClE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,EAAE;YACpE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,EAAE;SACrE,CAAC;QACF,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,4GAA4G;QAC5G,+GAA+G;QAC/G,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;QACjF,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,IAAI;oBAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,MAAM,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC;gBAC1D,SAAS;YACX,CAAC;YACD,oEAAoE;YACpE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY;gBACnC,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,oBAAoB;oBAC3C,CAAC,CAAC,UAAU,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9H,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,oDAAoD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC9D,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAwD;YACjE,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,iDAAiD,EAAE,EAAE,EAAE,cAAc,EAAE;YAChH,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mDAAmD,EAAE,EAAE,EAAE,gBAAgB,EAAE;YAChH,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,kDAAkD,EAAE,EAAE,EAAE,eAAe,EAAE;YAClG,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,qDAAqD,EAAE,EAAE,EAAE,kBAAkB,EAAE;YAClH,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,qDAAqD,EAAE,EAAE,EAAE,kBAAkB,EAAE;YACnH,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,uDAAuD,EAAE,EAAE,EAAE,oBAAoB,EAAE;YAClH,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,iDAAiD,EAAE,EAAE,EAAE,cAAc,EAAE;YAC3G,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,wDAAwD,EAAE,EAAE,EAAE,qBAAqB,EAAE;SACvH,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,GAAG,GAAmB,MAAM,KAAK,CAAC,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5F,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC7G,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAmB,MAAM,KAAK,CAAC,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC3G,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;oBACtC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;4BACd,IAAI,EAAE,WAAW;4BACjB,MAAM,EAAE,QAAQ,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,IAAI,CAAC,SAAS,UAAU,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;yBAC7I,CAAC,CAAC,CAAC;oBACJ,MAAM;gBACR,CAAC;gBACD,GAAG,GAAG,IAAI,CAAC;YACb,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,6DAA6D,EAAE,GAAG,EAAE;IAC3E,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,IAAI,GAAG,QAAQ,CAAC;QACtB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,IAAI,IAAI,GAAG,CAAC,CAAC;QAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,GAAS;gBACd,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBACjC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC7B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC/B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC/B,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;aAC7B,CAAC;YACF,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,GAAG,GAAG,QAAQ,IAAI,MAAM,CAAC,SAAS,OAAO,OAAO,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrB,IAAI,IAAI,CAAC,CAAC,CAAuB,kCAAkC;gBACrE,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBACpC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gCACV,IAAI,EAAE,2BAA2B;gCACjC,MAAM,EAAE,gBAAgB,OAAO,CAAC,CAAC,CAAC,eAAe,OAAO,CAAC,IAAI,CAAC,GAAG;oCAC/D,uBAAuB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,SAAS,GAAG;oCACnE,UAAU,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC,KAAK,EAAE;6BACnE,CAAC,CAAC,CAAC;oBACN,CAAC;oBACD,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBACpC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gCACV,IAAI,EAAE,6BAA6B;gCACnC,MAAM,EAAE,eAAe,CAAC,CAAC,SAAS,sBAAsB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;6BAC1F,CAAC,CAAC,CAAC;oBACN,CAAC;oBACD,OAAO,IAAI,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,UAAU,CAAC,aAAa,OAAO,gBAAgB,IAAI,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAClH,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH;;;gFAGgF;AAEhF,MAAM,IAAI,GAAG,CAAC,GAAQ,EAAiB,EAAE,CACvC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACxE,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;AACxF,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC;AAC7F,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AAClF,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAiB,EAAE,CAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAEjE,KAAK,UAAU,QAAQ,CAAC,EAAO,EAAE,CAAC,GAAG,CAAC;IACpC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;AACvD,CAAC;AACD,KAAK,UAAU,OAAO,CAAC,EAAO,EAAE,CAAS;IACvC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;AACnB,CAAC;AACD,KAAK,UAAU,OAAO,CAAC,EAAO,EAAE,CAAS,EAAE,EAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;IAClE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;IAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;IAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;IAAC,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;IAChF,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;AACnB,CAAC;AAED,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAG9C,MAAM,SAAS,GAAa;QAC1B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QACxB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QACxB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QACxB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QACxB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QACxB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QACxB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC;QAC7B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;QAC5B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;QACjD,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KACzC,CAAC;IAEF,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;gBAChC,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;oBACvB,IAAI,IAAI,KAAK,MAAM;wBAAE,MAAM,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;yBACtC,IAAI,IAAI,KAAK,MAAM;wBAAE,MAAM,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;yBACvD,IAAI,IAAI,KAAK,MAAM;wBAAE,MAAM,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;yBAC1C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;wBAAC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;wBAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;wBAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;oBAAC,CAAC;yBAC3G,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;wBAAC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;wBAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;wBAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;oBAAC,CAAC;yBACvH,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;wBAAC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;wBAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;wBAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;oBAAC,CAAC;gBACpH,CAAC;gBACD,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC1B,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,OAAO,EAAE,CAAC;gBAC7D,uEAAuE;gBACvE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI;oBAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC3E,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,OAAO,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;QAClC,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,OAAO,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAC9D,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAChD,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;YACpD,4EAA4E;YAC5E,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAChC,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;wBACpB,IAAI,EAAE,qBAAqB;wBAC3B,MAAM,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,OAAO,OAAO,CAAC,EAAE,CAAC,wCAAwC;qBACzF,CAAC,CAAC,CAAC;YACN,CAAC;YACD,IAAI,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC;gBAClC,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,8GAA8G;IAC9G,0GAA0G;IAC1G,wGAAwG;IACxG,+GAA+G;IAC/G,iHAAiH;IACjH,EAAE,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;QACnH,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC;QACtB,MAAM,UAAW,SAAQ,QAAQ;YAC/B,YAAY,GAAG,IAAW;gBACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,KAAK,CAAC,MAAM,CAAC,CAAC;;oBAChC,KAAK,CAAC,GAAI,IAAc,CAAC,CAAC;YACjC,CAAC;YACD,MAAM,CAAC,GAAG,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;SAChC;QACD,IAAI,CAAC;YACH,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBAClF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACrB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG,EAAE,CAAC;oBAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACrG,UAAkB,CAAC,IAAI,GAAG,UAAU,CAAC;gBACtC,IAAI,CAAC;oBAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBAAC,CAAC;wBAAS,CAAC;oBAAE,UAAkB,CAAC,IAAI,GAAG,QAAQ,CAAC;gBAAC,CAAC;gBACrE,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjB,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC1B,MAAM,GAAG,GAAG,2BAA2B,CAAC,YAAY,MAAM,SAAS,OAAO,EAAE,CAAC;gBAC7E,6DAA6D;gBAC7D,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC;oBACnC,sCAAsC;oBACtC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,MAAM,iBAAiB,CAAC,CAAC,SAAS,GAAG;wBACzF,SAAS,KAAK,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;oBACvC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;wBAC3B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,KAAK,0BAA0B,EAAE,CAAC,CAAC,CAAC;oBAC5F,CAAC;oBACD,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;wBAC3B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,QAAQ,SAAS,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACR,UAAkB,CAAC,IAAI,GAAG,QAAQ,CAAC;QACtC,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,OAAO,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC5B,IAAI,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAC7C,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,0CAA0C,MAAM,UAAU,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,SAAS,OAAO,EAAE,CAAC,CAAC;QACtH,MAAM,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7D,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC5D,gHAAgH;IAChH,gHAAgH;IAChH,kHAAkH;IAClH,4GAA4G;IAC5G,sGAAsG;IACtG,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,OAAO,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QACrD,MAAM,WAAW,GAAG,SAAS,CAAC;QAC9B,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACjB,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,sCAAsC,WAAW,iBAAiB,SAAS,EAAE,CAAC,CAAC;QAC5F,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,kBAAkB,CAAC,EAAE,CAAC;YAC5D,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,MAAM,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACrB,MAAM,CAAC,GAAmB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAE,CAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,qBAAqB,KAAK,sBAAsB,EAAE,CAAC,CAAC,CAAC;YAC3G,CAAC;QACH,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;QAC7F,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAC/D,MAAM,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACvD,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC;YAC9C,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,yCAAyC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACvH,CAAC;QACD,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI;YAAE,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACxF,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,6BAA6B;AAC7B,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,6CAA6C;AAC7C,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,qCAAqC;AACrC,+EAA+E;AAE/E;;GAEG;AACH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,MAAM,KAAK,GAAG,qBAAqB,CAAC;IACpC,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAQ,CAAC;IAC9E,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAE,OAAO,CAAC,EAAE,CAAC,CAAC,KAA0B,CAAC,KAAK,CAAC;IAC1E,MAAM,SAAS,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAClC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;QACf,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnB,OAAO,EAAE,CAAC,eAAsB,CAAC;IACnC,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,GAAQ,EAAiB,EAAE,CACvC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAkB,CAAC;IAClF,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEtD,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sCAAsC,YAAY,WAAW,KAAK,2BAA2B,CAClG,CAAC;QACF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5D,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;QAChB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,qCAAqC;QACrC,EAAE,CAAC,KAAK,GAAG,qBAAqB,CAAC;QACjC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sCAAsC,UAAU,2BAA2B,CAChF,CAAC;QACF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,EAAE,CAAC,UAAW,CAAC;QAC5B,EAAE,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CACvB,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CACvF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QACzG,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sDAAsD,YAAY,2BAA2B,CAClG,CAAC;QACF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,EAAE,CAAC,eAAsB,CAAC;QACtC,GAAG,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE;YAC/C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;YAC7B,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnD,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjD,QAAQ,EAAE,cAAc;aACzB;SACF,CAAC,CAAC,CAAC;QACJ,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,kFAAkF;QAClF,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sDAAsD,YAAY,2BAA2B,CAClG,CAAC;QACF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,MAAM,GAAQ,IAAI,CAAC;QACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;QAClG,GAAG,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACzD,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,uCAAuC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sDAAsD,YAAY;0BAClD,CAAC,UAAU,CAAC,2BAA2B,CAC5D,CAAC;QACF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,EAAE,CAAC,eAAsB,CAAC;QACtC,GAAG,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE;YAC/C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;YAC7B,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE;SAC1G,CAAC,CAAC,CAAC;QACJ,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sCAAsC,YAAY,WAAW,KAAK,2BAA2B,CAClG,CAAC;QACF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,MAAM,GAAQ,IAAI,CAAC;QACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;QAClG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1F,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,EAAE,CAAC,QAAQ,GAAG,cAAc,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,4FAA4F;AAC5F,QAAQ,CAAC,wEAAwE,EAAE,GAAG,EAAE;IACtF,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,OAAO,CAAqB,IAAI,CAAA,iDAAiD,CAAC,CAAC;IACrF,MAAM,aAAa,GAAG,CAAC,EAAsB,EAAO,EAAE,CAAE,EAAU,CAAC,eAAe,CAAC;IACnF,MAAM,YAAY,GAAG,CAAC,EAAsB,EAAO,EAAE,CAAC,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACjG,MAAM,MAAM,GAAG,KAAK,EAAE,EAAsB,EAAE,EAAE;QAC9C,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,GAAG;YAAE,MAAM,GAAG,CAAC,cAAc,CAAC;QAClC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,EAAE,EAAsB,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAA2B,EAAE,CACrD,GAAG,CAAC,UAAW,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAiB,CAAC,KAAK,EAAE,CAAC;IAChF,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAgB,CAAC;IAC7F,MAAM,SAAS,GAAG,KAAK,EAAE,EAAsB,EAAE,KAAa,EAAE,EAAE;QAChE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7B,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,mBAAmB,KAAK,IAAI,CAAE,CAAC,aAAa,CACxE,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACvF,CAAC;QACF,MAAM,GAAG,CAAC,cAAc,CAAC;QACzB,MAAM,EAAE,CAAC,cAAc,CAAC;IAC1B,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,OAAO,CAAqB,IAAI,CAAA,iDAAiD,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,EAAE,CAAE,YAAY,CAAC,EAAE,CAAS,CAAC,KAAyB,CAAC;IAClF,MAAM,KAAK,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC,CAAC,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,IAAY,EAAE,EAAE;QACtC,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;QAC9B,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/G,YAAY,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QAC9B,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QAC9B,IAAI,MAAM,GAAQ,IAAI,CAAC;QACvB,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;QACvG,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,6EAA6E,CAClF,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,CAAC,cAAc,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,yEAAyE,CAC9E,CAAC;QACF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QACjB,EAAU,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QACjB,EAAU,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sHAAsH,EAAE,KAAK,IAAI,EAAE;QACpI,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,0EAA0E,CAC/E,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,GAAG,CAAC,oBAAoB,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9F,MAAM,GAAG,CAAC,cAAc,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gGAAgG,EAAE,KAAK,IAAI,EAAE;QAC9G,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,0EAA0E,CAC/E,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,EAAE,CAAC,QAAQ,GAAG,cAAc,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,GAAG,CAAC,oBAAoB,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACvF,MAAM,GAAG,CAAC,cAAc,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iIAAiI,EAAE,KAAK,IAAI,EAAE;QAC/I,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,mEAAmE,CAAC,UAAU,CAAC,2BAA2B,CAC/G,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;QAC7D,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,uBAAuB,CAAiB,CAAC,KAAK,EAAE,CAAC;QAChF,MAAM,GAAG,CAAC,cAAc,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8HAA8H,EAAE,KAAK,IAAI,EAAE;QAC5I,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,yEAAyE,CAC9E,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;QACjB,GAAG,CAAC,cAAc,GAAG,mDAAmD,CAAC;QACzE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAE9C,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,EAAE,CAAC,QAAQ,GAAG,YAAY,CAAC;QAC3B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QACjB,EAAU,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kGAAkG,EAAE,KAAK,IAAI,EAAE;QAChH,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,EAAE,CAAC,QAAQ,GAAG,cAAc,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAC9B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,CAAC,cAAc,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iHAAiH,EAAE,KAAK,IAAI,EAAE;QAC/H,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,yEAAyE,CAC9E,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,GAAG,CAAC,oBAAoB,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC;QACnG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjD,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,EAAE,CAAC,KAAK,GAAG,iDAAiD,CAAC;QAC7D,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC5C,EAAU,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAC9B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACnB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,CAAC,CAAC,aAAa,CAC5B,IAAI,UAAU,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACrG,CAAC;QACF,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,+DAA+D;QAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;QACxB,YAAY,CAAC,EAAE,CAAC,CAAC,aAAa,CAC5B,IAAI,UAAU,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC3F,CAAC;QACF,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;QAClF,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAE3B,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,KAAK,MAAM,IAAI,IAAI;YACjB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;YAC1G,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;SACC,EAAE,CAAC;YAChB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EACjF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChI,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB;QAC7F,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,uBAAuB,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAE,CAAC;YACpE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACrH,CAAC;QACD,oEAAoE;QACpE,MAAM,CAAC,uBAAuB,CAAC,qBAAqB,CAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzE,0CAA0C;QAC1C,MAAM,CAAC,uBAAuB,CAAC,qBAAqB,CAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,yBAAyB,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC;YACpF,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,EAAE,CAAC,MAAM,CAAC,uBAAuB,IAAI,CAAC,CAAC,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YAC3G,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC;YAC7C,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACzE,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YAC9B,MAAM,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC;YAC1E,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,CAAE,CAAC,CAAC;YAC/B,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC;YACtF,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,MAAM,CAAC,+BAA+B,IAAI,CAAC,CAAC,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YAC9F,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACrG,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YAC9B,MAAM,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,MAAM,CAAC,6BAA6B,IAAI,CAAC,CAAC,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,UAAU,CAAC;gBACrC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,oCAAoC,EAAE,QAAQ,EAAE,KAAK;aACvE,CAAC,CAAC,CAAC;YACJ,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YAC9B,MAAM,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAChG,MAAM,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChD,MAAM,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;QAChC,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC,CAAC,gFAAgF;QAC9G,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACjB,MAAM,MAAM,GAAI,EAAU,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,IAAY,EAAE,EAAE;YACzD,MAAM,GAAG,GAA2B,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACvE,MAAM,GAAG,GAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAClE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC;QACF,MAAM,GAAG,GAAG,EAAE,CAAC,eAAsB,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,EAAE,EAAU,EAAE,EAAU,EAAE,IAAY,EAAE,EAAE;YACxD,EAAU,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAChD,EAAU,CAAC,oBAAoB,EAAE,CAAC;YACnC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC,CAAC;QACF,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,gCAAgC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3E,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,oCAAoC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC9D,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CACjD,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAEvE,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACxF,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;YAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;QAClG,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAQ,CAAC;QACvC,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjE,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjE,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,yDAAyD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7H,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACnE,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACnE,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC;QAC3B,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,mCAAmC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnG,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,4GAA4G,EAAE,KAAK,IAAI,EAAE;QAC1H,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI;YACzB,CAAC,0BAA0B,EAAE,iCAAiC,CAAC;YAC/D,CAAC,0BAA0B,EAAE,iCAAiC,CAAC;SAChE,EAAE,CAAC;YACF,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sCAAsC,YAAY,cAAc,KAAK,WAAW,GAAG,2BAA2B,CAAC,CAAC;YACtH,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAE,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,YAAY,CAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzF,CAAC;IACH,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACvG,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;QAChC,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACjB,MAAM,MAAM,GAAI,EAAU,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,GAAG,GAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC7E,MAAM,GAAG,GAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,EAAU,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzG,EAAU,CAAC,oBAAoB,EAAE,CAAC;QACnC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,EAAE,CAAC,eAAsB,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,6FAA6F,EAAE,GAAG,EAAE;IAC3G,MAAM,OAAO,GAA2C;QACtD,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;QACjC,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;KAClC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAE9E,MAAM,IAAI,GAAG,KAAK,EAAE,MAAc,EAAE,IAAY,EAAgB,EAAE;QAChE,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;kBACpB,KAAK,eAAe,MAAM,eAAe,CAAC,aAAa,IAAI;wBACrD,SAAS,UAAU,GAAG,IAAI,gCAAgC,2BAA2B,CAAC,CAAC;QAC3G,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,KAAe,CAAC;IAC5F,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE;QACzB,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IACvG,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACrD,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,EAAE,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAChF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,EAAE,CAAC,QAAQ,MAAM,UAAU,IAAI,gFAAgF,EAAE,KAAK,IAAI,EAAE;gBAC1H,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC1B,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClE,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC;gBAC7B,IAAI,OAAO,GAAG,CAAC,CAAC;gBAChB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;oBACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC3E,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC5E,CAAC;gBACD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC1D,MAAM,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0EAA0E,EAAE,GAAG,EAAE;IACxF,MAAM,GAAG,GAAG,YAAY,CAAC;IACzB,MAAM,IAAI,GAAG,KAAK,EAAE,KAA8B,EAAE,KAAa,EAAE,EAAE,GAAG,KAAK,EAAgB,EAAE;QAC7F,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;kBACpB,EAAE,eAAe,GAAG,eAAe,CAAC,aAAa,IAAI;sBACjD,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;cAC/F,KAAK,2BAA2B,CAAC,CAAC;QAC5C,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAQ,CAAC;IAC9E,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAyB,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,GAAW,EAAE,EAAE,CACrC,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpH,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;IAC/C,kFAAkF;IAClF,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAO,EAAE,QAAgB,EAAE,EAAE;QACnD,QAAQ,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,QAAQ;YAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAClC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;QAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAM,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;QACA,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;QACvE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,wCAAwC,CAAC;IACtD,MAAM,IAAI,GAAqB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAE5D,MAAM,KAAK,GAA8D;QACvE,CAAC,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAC9D,CAAC,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAChE,CAAC,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAC9D,CAAC,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAChE,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAC7D,CAAC,wBAAwB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAChG,CAAC,sBAAsB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAC9F,CAAC,uBAAuB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAC/F,CAAC,qBAAqB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAC7F,CAAC,wBAAwB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAChG,CAAC,mBAAmB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QAC3F,CAAC,yBAAyB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;QACjG,CAAC,uBAAuB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;KAChG,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QACpD,EAAE,CAAC,OAAO,IAAI,YAAY,KAAK,UAAU,IAAI,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACjH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACnC,MAAM,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC1B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;YACpD,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,0BAA0B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;YACtF,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,8BAA8B,CAAC,CAAC;YACzF,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC/E,IAAI,QAAQ,KAAK,GAAG;gBAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7G,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,iDAAiD,EAAE,cAAc,CAAC,CAAC;QAC/F,MAAM,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,wCAAwC,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qGAAqG,EAAE,GAAG,EAAE;IACnH,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,iDAAiD,CAAC;IAC/D,MAAM,IAAI,GAAG,KAAK,EAAE,QAAwC,EAAE,EAAgB,EAAE;QAC9E,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;mEAC6B,CAAC,aAAa,IAAI;sBAC/D,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;cACvH,IAAI,2BAA2B,CAAC,CAAC;QAC3C,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAQ,CAAC;IAC9E,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAyB,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,GAAW,EAAE,EAAE,CACrC,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpH,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAClC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,EAAE;QACxB,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,kBAAkB,CAAC;YAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;QACtF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC7E,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,EAAE,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1C,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC7E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,EAAE,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1C,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1G,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,CAA8B,EAAE,CAAC;YACpJ,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC;YACpB,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC;YACzB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;gBACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC7C,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,QAAQ,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,UAAU;YAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;YAC7B,EAAE,CAAC,cAAc,GAAG,QAAQ,CAAC;YAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;YAC7B,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC;YACvB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,EAAE,CAAC,KAAK,GAAG,iDAAiD,CAAC;QAC7D,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACpE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA,yEAAyE,CAAC,CAAC;QAC7G,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,EAAE,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;QACxG,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA,6DAA6D,CAAC,aAAa,IAAI,2BAA2B,CAAC,CAAC;QAC9I,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,KAAK,MAAM,EAAE,IAAI,UAAU;YAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,EAAE,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,EAAE,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA,yFAAyF,CAAC,CAAC;QAC7H,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;QACvB,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,EAAE,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;QACjE,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,UAAU;YAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0FAA0F,EAAE,GAAG,EAAE;IACxG,MAAM,IAAI,GAAG,iDAAiD,CAAC;IAC/D,MAAM,IAAI,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,EAAgB,EAAE;QACpD,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;mEAC6B,CAAC,aAAa,IAAI;cACvE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAC5D,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAQ,CAAC;IAC9E,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAyB,CAAC;IACpE,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAClC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,2EAA2E;IAC3E,MAAM,SAAS,GAAG,KAAK,EAAE,EAAO,EAAE,KAAa,EAAE,EAAE;QACjD,MAAM,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;QAC/B,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC,aAAa,CACtE,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACvF,CAAC;QACF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;QAC9B,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAiB,CAAC,KAAK,EAAE,CAAC;QAC1E,MAAM,GAAG,CAAC,cAAc,CAAC;QACxB,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;QACvE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,EAAE;QACxB,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC;YAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,KAAK,GAAU,EAAE,CAAC;QACxB,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACjF,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;IAC/C,CAAC,CAAC;IAEF,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;QACtG,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC7E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAE,EAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAChC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QACxG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;QACrB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;QACxB,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;QACrB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,IAAI,QAAQ,GAAQ,IAAI,CAAC;QACzB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;QACpG,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACrE,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAQ,IAAI,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC;YAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAM,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3H,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;QACtF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACtE,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACpE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,EAAE,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;QAChF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1C,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC;QACvB,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;QAC7B,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACzD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wFAAwF,EAAE,GAAG,EAAE;IACtG,kHAAkH;IAClH,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,MAAM,GAAG,YAAY,EAAgB,EAAE;QACvE,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;kBACpB,KAAK,eAAe,MAAM,oBAAoB,SAAS;cAC3D,GAAG,IAAI,gCAAgC,2BAA2B,CAAC,CAAC;QAC9E,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAQ,CAAC;IAC9E,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAE,OAAO,CAAC,EAAE,CAAC,CAAC,KAA0B,CAAC,KAAK,CAAC;IAC1E,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IACvG,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAClC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACpE,KAAK,MAAM,MAAM,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;YAClD,EAAE,CAAC,QAAQ,MAAM,iBAAiB,IAAI,mEAAmE,EAAE,KAAK,IAAI,EAAE;gBACpH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACzB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;gBACvB,MAAM,CAAC,IAAI,EAAE,sCAAsC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC9E,IAAI,OAAO,GAAG,CAAC,CAAC;gBAChB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;oBACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC/D,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3E,CAAC;gBACD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpD,MAAM,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,KAAyB,CAAC;QACrD,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/H,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxH,CAAC;QACD,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,KAAyB,CAAC;QACrD,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/H,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxH,CAAC;QACD,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wFAAwF,EAAE,GAAG,EAAE;IACtG,MAAM,IAAI,GAAG,iDAAiD,CAAC;IAC/D,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,IAAI,EAAgB,EAAE;QAChD,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;8DACwB,KAAK,2BAA2B,CAAC,CAAC;QAC5F,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,KAA0B,CAAC,KAAK,CAAC;IAExG,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,EAAE,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;YACnI,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5D,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;YACf,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACpE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5E,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,yCAAyC;YACzC,EAAE,CAAC,KAAK,GAAG,iDAAiD,CAAC;YAC7D,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,EAAE,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;QACnH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2GAA2G,EAAE,GAAG,EAAE;IACzH,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAgB,EAAE;QAChD,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;kBACpB,KAAK,qCAAqC,CAAC,aAAa,IAAI,oBAAoB,SAAS;cAC7F,GAAG,IAAI,gCAAgC,2BAA2B,CAAC,CAAC;QAC9E,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAQ,CAAC;IAC9E,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IACvG,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACpD,EAAE,CAAC,mBAAmB,IAAI,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACxG,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAI,OAAO,CAAC,EAAE,CAAC,CAAC,KAA0B,CAAC,KAAK,CAAC;YAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YACzB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;YACvB,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC1B,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzE,MAAM,CAAE,OAAO,CAAC,EAAE,CAAC,CAAC,KAA0B,CAAC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAC9E,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QAC1G,EAAE,CAAC,YAAY,IAAI,eAAe,EAAE,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;oBACpB,KAAK,qCAAqC,CAAC,aAAa,IAAI,oBAAoB,SAAS;gBAC7F,GAAG,IAAI,gCAAgC,2BAA2B,CAAC,CAAC;YAC9E,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,CAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,KAA0B,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC9G,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,6DAA6D,EAAE,GAAG,EAAE;IAC3E,2HAA2H;IAC3H,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,KAAK,EAAE,KAAa,EAAE,MAAM,GAAG,YAAY,EAAgB,EAAE;QACxE,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;kBACpB,KAAK,eAAe,MAAM,oBAAoB,SAAS,UAAU,KAAK,2BAA2B,CAAC,CAAC;QACjH,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAQ,CAAC;IAC9E,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAyB,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,GAAW,EAAE,EAAE,CACrC,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpH,MAAM,IAAI,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAC7B,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC;IACF,gEAAgE;IAChE,MAAM,MAAM,GAAG,KAAK,EAAE,EAAO,EAAE,IAAY,EAAE,EAAU,EAAE,MAAc,EAAE,EAAE;QACzE,QAAQ,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,MAAM;YAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAC5D,EAAE,CAAC,cAAc,IAAI,oEAAoE,EAAE,KAAK,IAAI,EAAE;YACpG,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;YAC/D,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7B,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,cAAc,IAAI,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACtG,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;YAC/D,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7B,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,kHAAkH;IAClH,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI;QACnC,CAAC,MAAM,EAAE,MAAM,EAAE,wBAAwB,CAAC;QAC1C,CAAC,MAAM,EAAE,MAAM,EAAE,6BAA6B,CAAC;QAC/C,CAAC,MAAM,EAAE,MAAM,EAAE,wBAAwB,CAAC;QAC1C,CAAC,MAAM,EAAE,MAAM,EAAE,6BAA6B,CAAC;QAC/C,CAAC,MAAM,EAAE,MAAM,EAAE,yBAAyB,CAAC;QAC3C,CAAC,MAAM,EAAE,MAAM,EAAE,uBAAuB,CAAC;QACzC,CAAC,MAAM,EAAE,MAAM,EAAE,0BAA0B,CAAC;KAC7C,EAAE,CAAC;QACF,EAAE,CAAC,gEAAgE,KAAK,MAAM,QAAQ,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,EAAE;YAC5G,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAC5D,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/B,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC5D,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC5D,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,2GAA2G,EAAE,KAAK,IAAI,EAAE;QACzH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC5D,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sGAAsG,EAAE,GAAG,EAAE;IACpH,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,KAAK,EAAE,MAAwC,EAAE,MAAM,GAAG,YAAY,EAAgB,EAAE;QACnG,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;kBACpB,KAAK,eAAe,MAAM,oBAAoB,SAAS,eAAe,MAAM,CAAC,KAAK,aAAa,MAAM,CAAC,GAAG;0EACjD,CAAC,CAAC;QACxE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAQ,CAAC;IAC9E,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAyB,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,GAAW,EAAE,EAAE,CACrC,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpH,gFAAgF;IAChF,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAO,EAAE,MAAc,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QACpE,QAAQ,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,MAAM;YAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAGpE,MAAM,KAAK,GAAW;QACpB,yDAAyD;QACzD,CAAC,wBAAwB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QAC9C,CAAC,iBAAiB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACvC,CAAC,uBAAuB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QAC7C,CAAC,iBAAiB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACvC,CAAC,sBAAsB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QAC5C,CAAC,mCAAmC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACzD,CAAC,yBAAyB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QAC/C,oEAAoE;QACpE,CAAC,2CAA2C,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACzF,CAAC,0CAA0C,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACxF,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACjF,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACjF,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QAC5E,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACvE,yCAAyC;QACzC,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACpE,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACpE,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACrE,sDAAsD;QACtD,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QAC7D,CAAC,0CAA0C,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QAC7E,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QAC1E,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACzD,CAAC,uCAAuC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACxE,CAAC,uCAAuC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QACxE,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;KACzD,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;QACpD,EAAE,CAAC,QAAQ,IAAI,YAAY,KAAK,UAAU,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,MAAM,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC1B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACtC,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mFAAmF,EAAE,GAAG,EAAE;IACjG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,KAA0B,CAAC,KAAK,CAAC;IAExG,EAAE,CAAC,gIAAgI,EAAE,KAAK,IAAI,EAAE;QAC9I,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;QAC9D,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA,qGAAqG,CAAC,CAAC;QACzI,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC;QACtB,MAAM,UAAW,SAAQ,QAAQ;YAC/B,YAAY,GAAG,IAAW,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,KAAK,CAAC,MAAM,CAAC,CAAC;;gBAAM,KAAK,CAAC,GAAI,IAAc,CAAC,CAAC,CAAC,CAAC;YACrG,MAAM,CAAC,GAAG,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;SAChC;QACD,IAAI,MAAM,GAAQ,IAAI,CAAC;QACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAc,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,UAAkB,CAAC,IAAI,GAAG,UAAU,CAAC;QACtC,IAAI,CAAC;YAAE,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,uBAAuB,CAAiB,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;gBAChF,CAAC;YAAE,UAAkB,CAAC,IAAI,GAAG,QAAQ,CAAC;QAAC,CAAC;QAChD,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QACjB,GAAG,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;QACxE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,mFAAmF;QACnF,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACzB,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QACnJ,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,sCAAsC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;2DACqB,CAAC,CAAC;QACzD,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5D,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;QAChB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0EAA0E,EAAE,GAAG,EAAE;IACxF,MAAM,IAAI,GAAG,CAAC,MAAmB,EAAE,KAAa,EAAE,EAAE,CAClD,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9G,MAAM,IAAI,GAAG,KAAK,IAAkB,EAAE;QACpC,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;8EACwC,CAAC,CAAC;QAC5E,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,KAAK,EAAE,EAAO,EAAE,KAAa,EAAE,EAAE;QAC3C,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC,aAAa,CACrF,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACvF,CAAC;QACF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,EAAE,EAAO,EAAE,IAAY,EAAE,CAAS,EAAE,EAAE;QACvD,MAAM,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAgB,EAAE,IAAI,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAgB,CAAC;IACvG,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAS,CAAC,KAAK,CAAC,KAAe,CAAC;IAErG,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAA4B,EAAE,CAAC;QACzK,EAAE,CAAC,OAAO,IAAI,KAAK,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;YAC7H,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;YACvB,MAAM,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,CAAC,CAAa,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;YACnF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC;gBAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrG,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC1B,MAAM,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBACxE,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClB,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAEpC,MAAM,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC9E,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC5C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnC,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,8BAA8B,CAAC;IAGnF,MAAM,KAAK,GAAG,KAAK,EAAE,IAAU,EAAE,EAAE,EAAE;QACnC,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,sCAAsC,CAAC,CAAC,GAAG,IAAI,UAAU,2BAA2B,CACzF,CAAC;QACF,sFAAsF;QACtF,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;QAC/B,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI;YAAE,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,IAAW,CAAC;QAC9C,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAAC,EAAE,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAAC,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAAC,CAAC;QAC7E,IAAI,CAAC,CAAC,KAAK;YAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAChC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,EAAE,EAAsB,EAAE,EAAE;QAC9C,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAM,GAAG,GAAI,EAAU,CAAC,eAAe,CAAC;QACxC,IAAI,GAAG;YAAE,MAAM,GAAG,CAAC,cAAc,CAAC;QAClC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,EAAO,EAAO,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC;IACnD,MAAM,OAAO,GAAG,CAAC,EAAO,EAAO,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAoB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;IAClE,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,GAAW,EAAE,EAAE,CACrC,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpH,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,CAAS,EAAE,EAAE,GAAG,KAAK,MAAM,EAAE,IAAI,CAAC;QAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,IAAI,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAC7B,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACpF,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,EAAO,EAAE,IAAY,EAAE,EAAE;QACtC,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;QAC9B,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACjI,CAAC,CAAC;IACF,kDAAkD;IAClD,MAAM,QAAQ,GAAG,CAAC,EAAO,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,OAAQ,EAAE,CAAC,UAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAkB,CAAC;QAClE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAQ,CAAC;QACvE,MAAM,GAAG,CAAC,cAAc,CAAC;QACzB,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACjB,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,GAAuB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAClC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;QACf,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACjB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QACnC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;QAChB,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACjB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAO,EAAE,CAAS,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;aACjE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAgB,CAAC;QACvE,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,GAAG,CAAC,cAAc,CAAC;IAC3B,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,EAAO,EAAE,EAAU,EAAE,EAAE;QAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACrB,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAiB,CAAC,KAAK,EAAE,CAAC;QACjF,MAAM,GAAG,CAAC,cAAc,CAAC;IAC3B,CAAC,CAAC;IAEF,+EAA+E;IAC/E,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;QAC3D,MAAM,KAAK,GAAuC;YAChD,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACnF,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YACjC,EAAE,CAAC,6BAA6B,IAAI,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACpG,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAC9C,IAAI,CAAC,EAAE,CAAC,CAAC;gBACT,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChE,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvF,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAe,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3E,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;YACzB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;YAClG,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACb,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,6CAA6C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpG,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,qCAAqC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5F,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,qCAAqC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5F,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;YAC1F,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAW,gDAAgD;YAC5F,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;YAC3G,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;YACjG,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/C,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YACtC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAClB,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/C,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YACtC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAClB,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/C,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC/B,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/C,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC/B,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAW,iCAAiC;YAC7E,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAoB,8BAA8B;YAC1E,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACnC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;YACtG,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAEhD,KAAK,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;YAC7E,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,qCAAqC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,EAAE,CAAC,UAAU,GAAG,YAAY,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC7C,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/D,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC7C,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,QAAQ,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAC1E,EAAE,CAAC,sHAAsH,EAAE,KAAK,IAAI,EAAE;YACpI,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7I,MAAM,CAAC,KAAK,GAAG,+BAA+B,CAAC,CAAG,4CAA4C;YAC9F,MAAM,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1G,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sGAAsG,EAAE,KAAK,IAAI,EAAE;YACpH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACnC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uGAAuG,EAAE,KAAK,IAAI,EAAE;YACrH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,iDAAiD,EAAE,CAAC,CAAC;YACrF,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC3E,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC3D,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC3F,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gHAAgH,EAAE,KAAK,IAAI,EAAE;YAC9H,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;YAC1F,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACtB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAEhD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;YAC1F,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACtB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,oGAAoG;YACpG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,qFAAqF;IACrF,QAAQ,CAAC,qGAAqG,EAAE,GAAG,EAAE;QACnH,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,8CAA8C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEjH,EAAE,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;YACnH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzF,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACpD,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;YACzG,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzF,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wGAAwG,EAAE,KAAK,IAAI,EAAE;YACtH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,6CAA6C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAClF,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAQ,CAAC;YACvE,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACtF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACpB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;YAC7G,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACzB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACvD,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACzE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAC5B,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,gCAAgC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzF,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6HAA6H,EAAE,KAAK,IAAI,EAAE;YAC3I,8GAA8G;YAC9G,MAAM,mBAAmB,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YAChK,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAU,EAAE,EAAE,EAAE;gBACtC,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1E,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC/E,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,EAAE,CAAC,CAAW,uDAAuD;YACnG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAEnE,MAAM,QAAQ,GAAG,MAAM,QAAQ,EAAE,CAAC;YAClC,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;YAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnF,MAAM,CAAC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEzE,MAAM,OAAO,GAAG,MAAM,QAAQ,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC;YAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,MAAM,mBAAmB,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEzE,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;YAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;YAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,CAAC,MAAM,mBAAmB,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAErE,MAAM,OAAO,GAAG,MAAM,QAAQ,EAAE,CAAC;YACjC,KAAK,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/F,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,MAAM,mBAAmB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+GAA+G,EAAE,KAAK,IAAI,EAAE;YAC7H,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACpC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gIAAgI,EAAE,KAAK,IAAI,EAAE;YAC9I,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAQ,CAAC;YACvE,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAChD,MAAM,MAAM,GAAkB,EAAE,CAAC;YACjC,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAC1F,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,GAAG,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACjG,GAAG,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7F,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3H,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6GAA6G,EAAE,KAAK,IAAI,EAAE;YAC3H,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzF,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,QAAQ,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAC/E,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACvC,MAAM,KAAK,GAAoC;YAC7C,CAAC,MAAM,EAAE,MAAM,EAAE,yBAAyB,CAAC;YAC3C,CAAC,MAAM,EAAE,MAAM,EAAE,uBAAuB,CAAC;YACzC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;YAC5B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;YAC5B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;YAC5B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;SAC7B,CAAC;QACF,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;YAC3C,EAAE,CAAC,gDAAgD,KAAK,MAAM,QAAQ,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,EAAE;gBAC5F,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3E,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAClC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACxC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC3D,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,+CAA+C,KAAK,MAAM,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE;gBAClF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;gBACtD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;gBAC7B,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,cAAc,KAAK,6CAA6C,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE;gBACxF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3E,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACnC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YACzF,EAAE,CAAC,mDAAmD,KAAK,MAAM,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE;gBACtF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAClC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACxC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;YAC7G,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3E,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;gBAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4GAA4G,EAAE,KAAK,IAAI,EAAE;YAC1H,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACZ,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;gBAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACnE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAE9D,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACZ,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;gBAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACnE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;YACtG,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3E,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAY,2BAA2B;YACxE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5E,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACpF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3E,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAY,OAAO;YACpD,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wGAAwG,EAAE,KAAK,IAAI,EAAE;YACtH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY,CAAC;gBAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5G,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAA2B,wCAAwC;YACpF,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YACtC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3E,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAS,qCAAqC;YACjF,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7E,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAK,uCAAuC;YACnF,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;YACzF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzF,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;YACnG,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3E,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAoC;YAC5C,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC;YACpC,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC;YACpC,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC;SACrC,CAAC;QACF,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YACvC,EAAE,CAAC,kCAAkC,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,IAAI,EAAE;gBAClE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5E,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3D,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;QACL,CAAC;QAED,EAAE,CAAC,yGAAyG,EAAE,KAAK,IAAI,EAAE;YACvH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5E,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;gBAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAC9E,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1E,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnE,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,QAAQ,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACzF,MAAM,MAAM,GAA0B;YACpC,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;YACjC,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;YACrC,CAAC,gCAAgC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;YACnF,CAAC,kCAAkC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;SACxF,CAAC;QACF,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC,CAAC;YAE1G,EAAE,CAAC,SAAS,KAAK,kFAAkF,EAAE,KAAK,IAAI,EAAE;gBAC9G,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC;oBAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9F,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAe,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,SAAS,KAAK,wGAAwG,EAAE,KAAK,IAAI,EAAE;gBACpI,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;gBAC1B,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACzB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACxD,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7E,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAe,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,SAAS,KAAK,iEAAiE,EAAE,KAAK,IAAI,EAAE;gBAC7F,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;gBAC1B,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACzB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;gBACrB,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAiB,CAAC,KAAK,EAAE,CAAC;gBACtF,MAAM,GAAG,CAAC,cAAc,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/C,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/C,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,SAAS,KAAK,oEAAoE,EAAE,KAAK,IAAI,EAAE;gBAChG,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;gBAC1B,MAAM,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,SAAS,KAAK,6DAA6D,EAAE,KAAK,IAAI,EAAE;gBACzF,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;gBAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;gBACpB,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACzB,MAAM,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACvB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;gBACrB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;gBACpB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAe,CAAC,EAAE,0BAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;QACL,CAAC;QAED,EAAE,CAAC,4GAA4G,EAAE,KAAK,IAAI,EAAE;YAC1H,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC,CAAC;YAC7F,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YACrB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,wDAAwD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5E,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAe,CAAC,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kGAAkG,EAAE,KAAK,IAAI,EAAE;YAChH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC,CAAC;YAC7F,MAAM,MAAM,GAAkB,EAAE,CAAC;YACjC,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;YAC1F,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YACrB,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAiB,CAAC,KAAK,EAAE,CAAC;YACtF,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC,CAAuB,yBAAyB;YACrE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAe,CAAC,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/E,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8GAA8G,EAAE,KAAK,IAAI,EAAE;YAC5H,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC,CAAC;YAC7F,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAA4B,kCAAkC;YAC9E,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YACrB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3C,sEAAsE;YACtE,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzB,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YACrB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uGAAuG,EAAE,KAAK,IAAI,EAAE;YACrH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YACrE,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACnC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YACrB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACtF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YACrB,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAiB,CAAC,KAAK,EAAE,CAAC;YACtF,MAAM,GAAG,CAAC,cAAc,CAAC;YACzB,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YACrB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kHAAkH,EAAE,GAAG,EAAE;IAChI,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,KAA0B,CAAC,KAAK,CAAC;IACxG,MAAM,IAAI,GAAG,KAAK,EAAE,KAAa,EAAE,MAAM,GAAG,YAAY,EAAgB,EAAE;QACxE,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA,qCAAqC,MAAM,UAAU,KAAK,2BAA2B,CAAC,CAAC;QACzH,MAAM,EAAE,CAAC,cAAc,CAAC;QAAC,MAAM,EAAE,CAAC,eAAe,CAAC,cAAc,CAAC;QACjE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3C,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,EAAO,EAAE,EAAE;QAClC,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvI,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI;QAClB,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB;QAC1F,wCAAwC,EAAE,wCAAwC;KACnF,EAAE,CAAC;QACF,EAAE,CAAC,OAAO,KAAK,kFAAkF,EAAE,KAAK,IAAI,EAAE;YAC5G,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,IAAI,IAAI,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1E,MAAM,CAAC,MAAM,SAAS,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI;QAC1B,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;QACpD,CAAC,yBAAyB,EAAE,2BAA2B,CAAC;QACxD,CAAC,wCAAwC,EAAE,2BAA2B,CAAC;KACxE,EAAE,CAAC;QACF,EAAE,CAAC,OAAO,KAAK,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,CAAC,qBAAqB,EAAE,yBAAyB,EAAE,wCAAwC,CAAC,EAAE,CAAC;QACjH,EAAE,CAAC,QAAQ,KAAK,gFAAgF,EAAE,KAAK,IAAI,EAAE;YAC3G,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,2BAA2B,CAAC,EAAE,WAAW,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC/F,MAAM,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,KAAa,CAAC;YAC7C,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9G,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC3H,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACzG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC5F,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACrG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1H,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,EAAE,CAAC,KAAK,GAAG,qBAAqB,CAAC;QACjC,MAAM,EAAE,CAAC,cAAc,CAAC;QAAC,MAAM,EAAE,CAAC,eAAe,CAAC,cAAc,CAAC;QACjE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACtE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACxE,MAAM,IAAI,GAAG,KAAK,IAAiC,EAAE;QACnD,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,gEAAgE,CACrE,CAAC;QACF,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,CAAC,EAAsB,EAAoB,EAAE,CACjE,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,YAAY,CAAE,CAAC,UAAW,CAAC,aAAa,CAAC,OAAO,CAAqB,CAAC;IACrG,MAAM,eAAe,GAAG,CAAC,EAAsB,EAAE,EAAE,CACjD,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,YAAY,CAAE,CAAC,UAAW,CAAC,aAAa,KAAK,aAAa,CAAC,EAAE,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,KAAK,EAAE,EAAsB,EAAE,EAAE;QAC5C,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;QACf,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAO,EAAU,CAAC,eAAe,CAAC,cAAc,CAAC;QACjD,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,wGAAwG;IACxG,MAAM,YAAY,GAAG,CAAC,EAAsB,EAAE,EAAE;QAC9C,MAAM,GAAG,GAAI,EAAU,CAAC,eAAe,CAAC;QACvC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,2BAA2B,CAAiB,CAAC,KAAK,EAAE,CAAC;QACnF,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5E,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,MAAe,EAAE,EAAE,CACtC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEzH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,WAAW,CAAC,QAAQ,CAAC,aAAwB,CAAC,CAAC;QAC/C,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1B,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,IAAI,CAAA,4GAA4G,CACjH,CAAC;QACF,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAuB,CAAC;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAsB,CAAC;QAChE,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChE,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,GAAG,GAAI,EAAU,CAAC,eAAe,CAAC;QACvC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAiB,CAAC,KAAK,EAAE,CAAC;QACtF,MAAM,GAAG,CAAC,cAAc,CAAC;QACzB,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,WAAW,CAAC,QAAQ,CAAC,aAAwB,CAAC,CAAC;QAC/C,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,YAAY,CAAC,EAAE,CAAC,CAAC;QAChB,QAAQ,CAAC,aAAyB,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACjI,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAE,EAAU,CAAC,eAAe,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qEAAqE,EAAE,GAAG,EAAE;IACnF,MAAM,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,EAA+B,EAAE;QAC7D,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,IAAI,CAAA,mBAAmB,yCAAyC,KAAK,2BAA2B,SAAS,CAC1G,CAAC;QACF,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAuB,CAAC;QAC7E,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,EAAE,EAAsB,EAAE,EAAE;QAC5C,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;QACf,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAO,EAAU,CAAC,eAAe,CAAC,cAAc,CAAC;QACjD,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,wGAAwG;IACxG,MAAM,QAAQ,GAAG,CAAC,EAAsB,EAAe,EAAE,CACtD,EAAU,CAAC,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAgB,CAAC;IAExE,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,EAAE,+CAA+C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,wCAAwC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1F,MAAM,CAAC,EAAE,CAAC,UAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;QACjB,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;QAChB,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,IAAI,CAAA,6GAA6G,CAClH,CAAC;QACF,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAQ,CAAC;QAC5D,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,EAAE,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAClH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACvG,EAAE,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2GAA2G,EAAE,GAAG,EAAE;IACzH,MAAM,IAAI,GAAG,KAAK,EAAE,KAAa,EAAE,QAAQ,GAAG,KAAK,EAAgB,EAAE;QACnE,MAAM,EAAE,GAAQ,MAAM,OAAO,CAAC,IAAI,CAAA;kBACpB,QAAQ,4CAA4C,CAAC,UAAU,CAAC;mBAC/D,CAAC,aAAa,IAAI,UAAU,KAAK,2BAA2B,CAAC,CAAC;QAC7E,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,EAAO,EAAE,EAAE,CAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,KAA0B,CAAC,KAAK,CAAC;IACxG,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE3D,MAAM,SAAS,GAAsE;QACnF,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE;QACzF,EAAE,KAAK,EAAE,+CAA+C,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE;QAC7H,EAAE,KAAK,EAAE,6CAA6C,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE;QAC3H,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE;QAC7G,EAAE,KAAK,EAAE,uCAAuC,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE;QAClI,EAAE,KAAK,EAAE,wCAAwC,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,2BAA2B,EAAE;QAC5I,EAAE,KAAK,EAAE,kCAAkC,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,2BAA2B,EAAE;QACnI,EAAE,KAAK,EAAE,sCAAsC,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,2BAA2B,EAAE;QAC3I,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE;QACzH,EAAE,KAAK,EAAE,6CAA6C,EAAE,KAAK,EAAE,iDAAiD,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE;KACjK,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,EAAE,CAAC,mBAAmB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,EAAE,CAAC,2GAA2G,EAAE,KAAK,IAAI,EAAE;QACzH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gDAAgD,EAAE,cAAc,CAAC,CAAC;QAC7F,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACjF,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7G,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,uHAAuH;IACvH,MAAM,WAAW,GAAG;QAClB,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY;QAC1E,kBAAkB,EAAE,+BAA+B;KACpD,CAAC;IACF,MAAM,gBAAgB,GAAG;QACvB,mBAAmB;QACnB,0BAA0B;QAC1B,4BAA4B;QAC5B,0BAA0B;QAC1B,+BAA+B;QAC/B,qDAAqD;KACtD,CAAC;IAEF,EAAE,CAAC,4GAA4G,EAAE,GAAG,EAAE;QACpH,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,WAAW,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC;QACxD,EAAE,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YACjH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,iDAAiD,EAAE,cAAc,CAAC,CAAC;YACzF,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5D,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;YACf,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;QAC5D,MAAM,IAAI,GAAG,KAAK,EAAE,EAAO,EAAE,KAAa,EAAE,EAAE;YAC5C,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE;gBAC9D,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;aAClE,CAAC,CAAC,CAAC;YACJ,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,2BAA2B,CAAC;QAEzC,KAAK,MAAM,EAAE,IAAI,CAAC,wCAAwC,EAAE,yBAAyB,CAAC,EAAE,CAAC;YACvF,EAAE,CAAC,yBAAyB,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;gBAC3C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACjD,MAAM,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QAED,+GAA+G;QAC/G,+HAA+H;QAC/H,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI;YAC5B,CAAC,0BAA0B,EAAE,IAAI,CAAC;YAClC,CAAC,YAAY,EAAE,2BAA2B,CAAC;SAC5C,EAAE,CAAC;YACF,EAAE,CAAC,qCAAqC,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACjD,MAAM,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBACxB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QAED,KAAK,MAAM,GAAG,IAAI;YAChB,8BAA8B;YAC9B,4CAA4C;YAC5C,oBAAoB;SACrB,EAAE,CAAC;YACF,EAAE,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACjD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC5D,MAAM,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAChF,MAAM,IAAI,GAAG,KAAK,EAAE,KAAc,EAA+B,EAAE;QACjE,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,gDAAgD,KAAK,IAAI,EAAE,2BAA2B,CAC3F,CAAC;QACF,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,CAAC,EAAsB,EAAoB,EAAE,CACjE,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,YAAY,CAAE,CAAC,UAAW,CAAC,aAAa,CAAC,OAAO,CAAqB,CAAC;IACrG,MAAM,GAAG,GAAG,CAAC,EAAsB,EAAE,EAAE,CAAE,EAAU,CAAC,eAAe,CAAC;IACpE,MAAM,GAAG,GAAG,CAAC,MAAe,EAAE,CAAS,EAAE,OAA0B,EAAE,EAAE,EAAE;QACvE,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9G,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,EAAE,EAAsB,EAAE,EAAE;QAC9C,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC;QAC7B,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,GAAmB,EAAE;QACtC,IAAI,CAAC,GAAmB,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,CAAC,EAAE,UAAU,EAAE,aAAa;YAAE,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC;QACpE,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,EAAsB,EAAE,EAAE,CAC1C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAkB,CAAC;IACvF,MAAM,KAAK,GAAG,CAAC,EAAsB,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;IACvG,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,wCAAwC,CAAC,CAAC;YAChE,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/C,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACvC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC3B,MAAM,MAAM,GAAG,UAAU,EAAiB,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1B,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;gBAAE,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACvE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;YACnB,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACzE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC5B,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;YACpB,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YACf,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAChH,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,EAAE,GAAG,MAAM,OAAO,CAAqB,IAAI,CAAA,iEAAiE,CAAC,CAAC;YACpH,MAAM,EAAE,CAAC,cAAc,CAAC;YACxB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1B,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;YACpC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC3B,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC;gBAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1B,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;YACpC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/B,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,MAAM,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,wCAAwC,EAAE,EAAE;YACxE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YACf,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,0CAA0C;YACzC,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAiB,CAAC,KAAK,EAAE,CAAC;YACzE,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,EAAE,EAAsB,EAAE,CAAS,EAAE,OAA0B,EAAE,EAAE,EAAE;YACtF,GAAG,CAAC,UAAU,EAAa,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,EAAsB,EAAE,CAAS,EAAE,EAAE,CACrD,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAE,CAAC,KAAK,EAAE,CAAC;QAElD,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;YAClG,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YACf,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAChB,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAiB,CAAC,KAAK,EAAE,CAAC;YACzE,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACxD,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;YACzF,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;YAC1B,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,MAAM,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,UAAU,EAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAC7B,MAAM,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,UAAU,EAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,UAAU,EAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,UAAU,EAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC,CAAC,2BAA2B;YACtD,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,MAAM,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,UAAU,EAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,UAAU,EAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC;YAClE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,MAAM,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAE,UAAU,EAAkB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC;YAClE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,MAAM,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAG,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;YACzF,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAU,EAAE,CAAC;YACvB,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAkB,CAAC,CAAC;YAC/F,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,MAAM,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAC9B,MAAM,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,gGAAgG,EAAE,KAAK,IAAI,EAAE;YAC9G,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;YAC1B,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAG,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACzF,MAAM,CAAC,GAAG,CAAC,UAAU,EAAG,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACxF,MAAM,CAAC,GAAG,CAAC,UAAU,EAAG,EAAE,YAAY,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;YAC5G,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,wCAAwC,CAAC,CAAC;YAChE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YACf,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACtB,GAAG,CAAC,UAAU,EAAG,EAAE,SAAS,CAAC,CAAC;YAC9B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,GAAG,CAAC,UAAU,EAAG,EAAE,SAAS,CAAC,CAAC;YAC9B,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,UAAU,EAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAClE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,uGAAuG,EAAE,KAAK,IAAI,EAAE;YACrH,MAAM,CAAC,GAAG,MAAM,OAAO,CAAM,IAAI,CAAA,iCAAiC,CAAC,CAAC;YACpE,MAAM,CAAC,CAAC,cAAc,CAAC;YACvB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;YACzH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YAChG,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC3B,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC1C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC/C,MAAM,SAAS,GAAG,KAAK,EAAE,EAAsB,EAAE,EAAE;YACjD,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1B,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;YACpC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC,CAAC;QAEF,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,wCAAwC,CAAC,CAAC;YAChE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YACf,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,gDAAgD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzF,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,UAAU,EAAE,EAAE,8DAA8D,CAAC,CAAC,EAAE,CAAC,KAAK,CAAE,EAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YACf,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACvF,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,SAAS,GAAI,EAAU,CAAC,cAAc,EAAmB,CAAC;YAChE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,EAAG,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACvC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,wGAAwG,EAAE,KAAK,IAAI,EAAE;YACtH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,wCAAwC,CAAC,CAAC;YAChE,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,SAAS,GAAI,EAAU,CAAC,cAAc,EAAmB,CAAC;YAChE,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,EAAG,EAAE,KAAK,CAAC,CAAC;YACrC,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACrF,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,SAAS,GAAI,EAAU,CAAC,cAAc,EAAmB,CAAC;YAChE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC9C,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAG,EAAE,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC/D,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,wCAAwC,CAAC,CAAC;YAChE,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,GAAG,CAAC,UAAU,EAAG,EAAE,QAAQ,CAAC,CAAC;YAC7B,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC5B,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;YAEjD,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACnB,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,KAAK,EAAE,CAAC;YAC3E,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC5B,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElB,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YACxB,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,SAAS,GAAI,EAAU,CAAC,cAAc,EAAmB,CAAC;YAChE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;gBACtD,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { aTimeout, expect, fixture, html } from '@open-wc/testing';\nimport { TIMEZONES, utcFromFields, localDateFromFields, formatYear4, isClockTime } from '../nile-calendar/timezones';\nimport { instantFromBracketedValue, wallClockFromOffsetLess } from '../nile-calendar/nile-calendar';\nimport './nile-date-time-picker';\nimport '../nile-calendar';\nimport '../nile-input';\nimport type { NileDateTimePicker } from './nile-date-time-picker';\nimport type { NileCalendar } from '../nile-calendar';\n\n/**\n * nile-date-time-picker — single consolidated suite.\n *\n * Merged from what used to be three files:\n * nile-date-time-picker.test.ts → sections A–H\n * nile-date-time-picker.tz-audit.test.ts → section I\n * nile-date-time-picker.dst-gap.regression.ts → section J\n * nile-date-time-picker.adversarial.test.ts → section K (was src/_audit/)\n *\n * ── ARCHITECTURE (matters for how these tests reach the panel) ───────────────\n * The component is a nile-calendar (variant=\"date-time-picker\") plus a\n * structured-input mask on the trigger input, hosted in a *nile-floating-panel*\n * (Tippy-backed) — NOT a nile-dropdown.\n *\n * The floating panel hands its content to Tippy as the popper `content`, so the\n * calendar is REPARENTED OUT of the host's shadow root at panel-construction\n * time (into a detached popper div, moved to document.body on show). Therefore:\n *\n * el.shadowRoot.querySelector('nile-calendar') → ALWAYS null\n * el.calendarElement → the calendar ✅\n *\n * `calendarElement` is the component's public accessor and the only reliable\n * handle. The trigger input is the panel's anchor and DOES stay in the shadow\n * root, so it is still queried normally.\n *\n * The calendar renders (and is fully interactive) even while the panel is\n * closed/detached, so tests only open the panel when the assertion is about\n * panel lifecycle itself (D2).\n *\n * ── GRID NOTE ────────────────────────────────────────────────────────────────\n * In the date-time-picker variant the day grid is a COLLAPSED 3-week window\n * (exactly 21 cells) centred on today — not a full month. So the count of\n * `.day_date:not(.filler)` is date-dependent (≈8–21). Tests index into it and\n * assert with patterns rather than fixed days.\n *\n * The panel's own behavior (day selection, time fields, timezone, set-to-now,\n * apply/reset, expand/collapse) is exercised in nile-calendar.test.ts. This\n * suite covers the wrapper's contract:\n * A. structure / trigger input\n * B. grouped-config forwarding (fields / value / limits / input / behavior)\n * C. event payloads + parity with a standalone nile-calendar\n * D. trigger formatting + panel lifecycle\n * E. structuredInput mask\n * F. disabled gating\n * G. hideTimeFields honored by the trigger\n * H. timezone carried in the value only\n * I. timezone correctness audit (wall-clock ⇄ instant math)\n * J. DST spring-forward gap regression\n *\n * All grouped config goes through the object props (fields/value/limits/input/\n * behavior/popup) — the only public API the component reads.\n */\ndescribe('NileDateTimePicker (wrapper)', () => {\n const dtpFixture = () =>\n fixture<NileDateTimePicker>(html`<nile-date-time-picker></nile-date-time-picker>`);\n\n // The calendar lives in a detached Tippy popper — use the public accessor.\n const innerCalendar = (el: NileDateTimePicker): any => (el as any).calendarElement;\n\n const triggerInput = (el: NileDateTimePicker): any =>\n el.shadowRoot!.querySelector('nile-input');\n\n const panelOf = (el: NileDateTimePicker): any =>\n el.shadowRoot!.querySelector('nile-floating-panel');\n\n // settle the wrapper, then its inner calendar\n const settle = async (el: NileDateTimePicker) => {\n await el.updateComplete;\n const cal = innerCalendar(el);\n if (cal) await cal.updateComplete;\n return cal;\n };\n\n // adopting a zone from a preset value sets `timezone`, which schedules a\n // second update; settle twice so the re-seed lands before we assert.\n const settle2 = async (el: NileDateTimePicker) => {\n await settle(el);\n return settle(el);\n };\n\n const dayCells = (cal: any): NodeListOf<HTMLElement> =>\n cal.shadowRoot!.querySelectorAll('.day_date:not(.filler)');\n const clickDay = (cal: any, i = 5) => (dayCells(cal)[i] as HTMLElement).click();\n const applyBtn = (cal: any) => cal.shadowRoot!.querySelector('.apply-button') as HTMLElement;\n const resetBtn = (cal: any) => cal.shadowRoot!.querySelector('.clear-button') as HTMLElement;\n\n // ── A. structure / trigger input ──────────────────────────────────────────\n describe('A. structure', () => {\n it('A1. is defined', () => {\n expect(customElements.get('nile-date-time-picker')).to.exist;\n });\n\n it('A2. renders an inner nile-calendar with the date-time-picker variant + footer', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n expect(cal).to.exist;\n expect(cal.variant).to.equal('date-time-picker');\n expect(cal.shadowRoot!.querySelector('.base--date-time-picker')).to.exist;\n expect(cal.shadowRoot!.querySelector('.tp-footer')).to.exist;\n });\n\n it('A2b. the calendar is hosted by a nile-floating-panel, outside the shadow root', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n expect(panelOf(el), 'panel host').to.exist;\n // documents the reparenting contract this suite depends on\n expect(el.shadowRoot!.querySelector('nile-calendar'), 'moved into the popper').to.be.null;\n expect(cal.tagName).to.equal('NILE-CALENDAR');\n });\n\n // ---- accessible naming of the trigger ----\n // The placeholder is a FORMAT MASK (\"DD/MM/YY - hh:mm:ss.SSS - timezone\"), not a\n // name, and it is only a last-resort fallback in the accessible-name computation.\n // So the component offers two explicit naming routes:\n // `label` → forwarded to nile-input, which names the native input\n // via its own <label for> (visible)\n // `accessibleLabel` → mirrored onto the NATIVE input as aria-label (invisible);\n // needed because a host attribute does not cross\n // nile-input's shadow boundary\n // Contract (DEFAULT_TRIGGER_LABEL): with neither `label` nor `aria-label`, there is no VISIBLE label,\n // but the native input still gets the built-in accessible name \"Date and time\".\n it('A3. by default the trigger has no visible label but carries the built-in accessible name', async () => {\n const el = await dtpFixture();\n await settle(el);\n const inp = triggerInput(el);\n expect(inp).to.exist;\n await inp.updateComplete;\n expect(inp.hasAttribute('label')).to.be.false;\n expect(inp.label ?? '').to.equal('');\n expect((inp.input as HTMLInputElement).getAttribute('aria-label')).to.equal('Date and time');\n });\n\n it('A3b. label forwards to the trigger input as a visible label', async () => {\n const el = await dtpFixture();\n el.label = 'Start date';\n await settle(el);\n const inp = triggerInput(el);\n await inp.updateComplete;\n expect(inp.getAttribute('label')).to.equal('Start date');\n });\n\n it('A3c. accessibleLabel is applied as aria-label on the NATIVE input', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker aria-label=\"Start date\"></nile-date-time-picker>`\n );\n const inp = await settle(el).then(() => triggerInput(el));\n await inp.updateComplete;\n // it must land on the native input, not merely on the host\n expect((inp.input as HTMLInputElement).getAttribute('aria-label')).to.equal('Start date');\n });\n\n it('A3d. a visible label wins: aria-label is not also applied (no double naming)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker aria-label=\"Aria name\"></nile-date-time-picker>`\n );\n await settle(el);\n el.label = 'Visible name';\n await settle(el);\n const inp = triggerInput(el);\n await inp.updateComplete;\n expect(inp.getAttribute('label')).to.equal('Visible name');\n expect((inp.input as HTMLInputElement).hasAttribute('aria-label')).to.be.false;\n });\n\n it('A4. trigger placeholder defaults to \"<dateFormat> - hh:mm:ss.SSS - timezone\"', async () => {\n const el = await dtpFixture();\n await settle(el);\n expect(triggerInput(el).getAttribute('placeholder'))\n .to.equal('DD/MM/YY - hh:mm:ss.SSS - timezone');\n });\n\n it('A5. input.placeholder overrides the default placeholder', async () => {\n const el = await dtpFixture();\n el.placeholder = 'Custom placeholder';\n await settle(el);\n expect(triggerInput(el).getAttribute('placeholder')).to.equal('Custom placeholder');\n });\n\n it('A6. input.dateFormat is reflected in the default placeholder', async () => {\n const el = await dtpFixture();\n el.dateFormat = 'YYYY-MM-DD';\n await settle(el);\n expect(triggerInput(el).getAttribute('placeholder'))\n .to.equal('YYYY-MM-DD - hh:mm:ss.SSS - timezone');\n });\n });\n\n // ── B. grouped-config forwarding ────────────────────────────────────────────\n describe('B. config forwarding', () => {\n it('B1. the Absolute/Relative tabs are hidden unless showTypes is set', async () => {\n const el = await dtpFixture();\n expect(el.showTypes).to.be.false;\n expect((await settle(el)).showTypes).to.be.false;\n\n el.showTypes = true;\n expect((await settle(el)).showTypes).to.be.true;\n });\n\n it('B2. fields.monthDropdown / yearDropdown forward to the calendar', async () => {\n const el = await dtpFixture();\n el.showMonthDropdown = true;\n el.showYearDropdown = true;\n const cal = await settle(el);\n expect(cal.showMonthDropdown).to.be.true;\n expect(cal.showYearDropdown).to.be.true;\n });\n\n it('B3. hideTimeFields [\"seconds\",\"milliseconds\"] forwards to the calendar as hideTimeFields', async () => {\n const el = await dtpFixture();\n el.hideTimeFields = ['seconds', 'milliseconds'];\n const cal = await settle(el);\n expect(cal.hideTimeFields).to.deep.equal(['seconds', 'milliseconds']);\n expect(cal.timeFields).to.be.undefined; // the calendar no longer has a timeFields property\n });\n\n it('B3b. every one of the 32 subsets of the five time fields renders the matching calendar fields, timezone block and layout', async () => {\n const keys = ['hours', 'minutes', 'seconds', 'milliseconds', 'timezone'];\n const labels: Record<string, string> = { hours: 'Hours (24H)', minutes: 'Minutes', seconds: 'Seconds', milliseconds: 'Milliseconds' };\n const el = await dtpFixture();\n for (let mask = 0; mask < 32; mask++) {\n const hidden = keys.filter((_, i) => mask & (1 << i));\n el.hideTimeFields = hidden; // dynamic update on one live element\n const cal = await settle(el);\n await settle(el);\n const shown = ['hours', 'minutes', 'seconds', 'milliseconds'].filter(k => !hidden.includes(k));\n const got = Array.from(cal.shadowRoot!.querySelectorAll('.tp-time-field')).map((n: any) => n.getAttribute('label'));\n const msg = `hidden=${JSON.stringify(hidden)}`;\n expect(got, msg).to.deep.equal(shown.map(k => labels[k]));\n expect(!!cal.shadowRoot!.querySelector('.tp-timezone'), msg).to.equal(!hidden.includes('timezone'));\n const fewNoTz = hidden.includes('timezone') && shown.length <= 2;\n expect(!!cal.shadowRoot!.querySelector('.tp-time-fields--stacked'), msg).to.equal(fewNoTz);\n expect(!!cal.shadowRoot!.querySelector('.base--tp-fewfields'), msg).to.equal(fewNoTz);\n }\n }).timeout(60000);\n\n it('B3d. open/close cycles and the panel reparenting keep exactly one calendar observer and never record a zero height', async () => {\n const Orig = window.ResizeObserver;\n const infos: { cal: boolean; live: boolean }[] = [];\n let loopErrors = 0;\n const onError = (e: ErrorEvent) => { if (/ResizeObserver loop/i.test(e.message || '')) loopErrors++; };\n window.addEventListener('error', onError);\n (window as any).ResizeObserver = class extends Orig {\n info = { cal: false, live: false };\n constructor(cb: ResizeObserverCallback) { super(cb); infos.push(this.info); }\n observe(t: Element, o?: ResizeObserverOptions) {\n if (t.classList.contains('base--date-time-picker')) { this.info.cal = true; this.info.live = true; }\n return super.observe(t, o);\n }\n disconnect() { this.info.live = false; return super.disconnect(); }\n };\n try {\n const el = await dtpFixture();\n const cal = await settle(el);\n const seen = new Set<string>();\n const raf = () => new Promise(r => requestAnimationFrame(() => r(null)));\n for (let i = 0; i < 20; i++) {\n el.open = true; await el.updateComplete; await raf(); await raf();\n seen.add(String(cal.tpLockedHeight));\n el.open = false; await el.updateComplete; await raf(); await raf();\n seen.add(String(cal.tpLockedHeight));\n }\n expect(infos.filter(o => o.cal && o.live).length).to.be.at.most(1);\n expect(seen.has('0px'), JSON.stringify([...seen])).to.be.false;\n expect(loopErrors).to.equal(0);\n el.remove();\n await raf();\n expect(infos.filter(o => o.cal && o.live).length).to.equal(0);\n } finally {\n window.ResizeObserver = Orig;\n window.removeEventListener('error', onError);\n }\n }).timeout(30000);\n\n it('B3c. a non-array hideTimeFields on the wrapper counts as an empty list and still renders every field', async () => {\n for (const bad of [5, { a: 1 }, 'seconds', null]) {\n const el = await dtpFixture();\n (el as any).hideTimeFields = bad;\n const cal = await settle(el);\n await settle(el);\n expect(cal.shadowRoot!.querySelectorAll('.tp-time-field').length, String(bad)).to.equal(4);\n expect(cal.shadowRoot!.querySelector('.tp-timezone'), String(bad)).to.exist;\n }\n });\n\n it('B4. hideDurationFields=[\"months\"] forwards to the calendar', async () => {\n const el = await dtpFixture();\n el.hideDurationFields = ['months'];\n el.type = 'relative';\n const cal = await settle(el);\n expect(cal.hideDurationFields).to.deep.equal(['months']);\n expect(cal.shadowRoot!.textContent).to.not.contain('Months');\n });\n\n it('B5. value.date forwards to the calendar value attribute', async () => {\n const el = await dtpFixture();\n el.value = '2026-06-15';\n const cal = await settle(el);\n expect(cal.getAttribute('value')).to.equal('2026-06-15');\n });\n\n it('B6. type=\"relative\" forwards as the calendar type', async () => {\n const el = await dtpFixture();\n el.type = 'relative';\n const cal = await settle(el);\n expect(cal.type).to.equal('relative');\n });\n\n it('B7. value.timezone forwards to the calendar', async () => {\n const el = await dtpFixture();\n el.timezone = 'Asia/Kolkata';\n const cal = await settle(el);\n expect(cal.timezone).to.equal('Asia/Kolkata');\n });\n\n it('B8. value.timezone defaults to UTC when unset', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n expect(cal.timezone).to.equal('UTC');\n });\n\n it('B9. value.unit / value.amount forward as selectedUnit / selectedValue', async () => {\n const el = await dtpFixture();\n el.type = 'relative';\n el.selectedUnit = 'days';\n el.selectedValue = 3;\n const cal = await settle(el);\n expect(cal.selectedUnit).to.equal('days');\n expect(Number(cal.selectedValue)).to.equal(3);\n });\n\n it('B10. limits.startYear / endYear forward to the calendar', async () => {\n const el = await dtpFixture();\n el.startYear = 2000;\n el.endYear = 2050;\n const cal = await settle(el);\n expect(Number(cal.startYear)).to.equal(2000);\n expect(Number(cal.endYear)).to.equal(2050);\n });\n\n it('B11. allowedDates (JSON string) forwards to the calendar', async () => {\n const el = await dtpFixture();\n const window = { startDate: '2026-06-01', endDate: '2026-06-30' };\n el.allowedDates = JSON.stringify(window);\n const cal = await settle(el);\n expect(cal.getAttribute('allowedDates')).to.equal(JSON.stringify(window));\n });\n\n it('B12. behavior.disabled disables the calendar and the floating panel', async () => {\n const el = await dtpFixture();\n el.disabled = true;\n const cal = await settle(el);\n expect(cal.disabled).to.be.true;\n expect(panelOf(el).hasAttribute('disabled')).to.be.true;\n });\n\n it('B13. behavior.doubleClickUnselect forwards to the calendar', async () => {\n const el = await dtpFixture();\n el.doubleClickUnselect = true;\n const cal = await settle(el);\n expect(cal.doubleClickUnselect).to.be.true;\n });\n\n it('B14. input.dateFormat forwards to the calendar', async () => {\n const el = await dtpFixture();\n el.dateFormat = 'YYYY-MM-DD';\n const cal = await settle(el);\n expect(cal.dateFormat).to.equal('YYYY-MM-DD');\n });\n });\n\n // ── C. event payloads + parity ──────────────────────────────────────────────\n describe('C. event payloads', () => {\n it('C1. apply (absolute) emits nile-change with { value: zoned string, timezone }', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n clickDay(cal, 5);\n await cal.updateComplete;\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n applyBtn(cal).click();\n expect(detail).to.not.be.null;\n // value is a zone-encoded string: \"YYYY-MM-DDTHH:mm:ss.SSS[GMT±HH:MM Zone]\"\n expect(detail.value).to.be.a('string');\n expect(detail.value).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\[GMT[+-]\\d{2}:\\d{2} .+\\]$/);\n expect(detail.value).to.include('[GMT+00:00 UTC]');\n expect(detail.timezone).to.equal('UTC');\n });\n\n it('C1b. a payload with no timezone falls back to the component zone, never \" - undefined\"', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n // a calendar payload that omits `timezone` entirely. Optional chaining alone\n // would still stringify undefined into the trigger text.\n cal.dispatchEvent(new CustomEvent('nile-change', {\n detail: { value: '2026-06-15T14:30:00.000' },\n bubbles: true, composed: true,\n }));\n await settle(el);\n const text = String(triggerInput(el).value ?? '');\n expect(text, 'must not leak undefined into the trigger').to.not.contain('undefined');\n expect(text, 'falls back to the component zone').to.contain('UTC');\n });\n\n it('C2. apply no longer emits the removed nile-changed event', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n clickDay(cal, 5);\n await cal.updateComplete;\n let changeDetail: any = null;\n let changedFired = false;\n el.addEventListener('nile-change', ((e: CustomEvent) => { changeDetail = e.detail; }) as EventListener);\n el.addEventListener('nile-changed', () => { changedFired = true; });\n cal.addEventListener('nile-changed', () => { changedFired = true; });\n applyBtn(cal).click();\n expect(changeDetail, 'nile-change still fires').to.not.be.null;\n expect(changedFired, 'nile-changed is gone from both calendar and picker').to.be.false;\n });\n\n it('C3. apply emits nile-change exactly once ', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n clickDay(cal, 5);\n await cal.updateComplete;\n let count = 0;\n el.addEventListener('nile-change', () => { count += 1; });\n applyBtn(cal).click();\n expect(count).to.equal(1);\n });\n\n it('C4. time fields are merged into the applied value', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n clickDay(cal, 5);\n cal.tpHours = 14; cal.tpMinutes = 30; cal.tpSeconds = 5; cal.tpMilliseconds = 250;\n await cal.updateComplete;\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n applyBtn(cal).click();\n expect(detail.value).to.include('T14:30:05.250');\n expect(detail.value).to.include('[GMT+00:00 UTC]');\n });\n\n it('C5. value.timezone is carried into the applied payload', async () => {\n const el = await dtpFixture();\n el.timezone = 'Asia/Kolkata';\n const cal = await settle(el);\n clickDay(cal, 5);\n await cal.updateComplete;\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n applyBtn(cal).click();\n expect(detail.timezone).to.equal('Asia/Kolkata');\n });\n\n it('C6. relative apply emits { startDate: Date, endDate: Date, timezone }', async () => {\n const el = await dtpFixture();\n el.type = 'relative';\n const cal = await settle(el);\n (cal.shadowRoot!.querySelector('.duration__value') as HTMLElement).click();\n await cal.updateComplete;\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n applyBtn(cal).click();\n expect(detail).to.not.be.null;\n expect(detail.startDate).to.be.instanceOf(Date);\n expect(detail.endDate).to.be.instanceOf(Date);\n expect(detail.timezone).to.equal('UTC');\n });\n\n it('C7. reset emits nile-clear (no detail)', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n clickDay(cal, 5);\n await cal.updateComplete;\n let fired = false;\n let detail: any = 'unset';\n el.addEventListener('nile-clear', ((e: CustomEvent) => { fired = true; detail = e.detail; }) as EventListener);\n resetBtn(cal).click();\n await cal.updateComplete;\n expect(fired).to.be.true;\n expect(detail == null).to.be.true; // undefined or null, no payload\n });\n\n it('C8. nile-type-change is forwarded when the tab switches (detail.value)', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n let detail: any = null;\n el.addEventListener('nile-type-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n cal.shadowRoot!.querySelector('nile-tab[panel=\"relative\"]')!.dispatchEvent(\n new CustomEvent('nile-tab-show', { detail: { value: 'relative' }, bubbles: true, composed: true })\n );\n await cal.updateComplete;\n expect(detail).to.not.be.null;\n expect(detail.value).to.equal('relative');\n });\n\n it('C9. nile-init is emitted when the element connects', async () => {\n const el = document.createElement('nile-date-time-picker');\n let fired = false;\n el.addEventListener('nile-init', () => { fired = true; });\n document.body.appendChild(el);\n await (el as NileDateTimePicker).updateComplete;\n expect(fired).to.be.true;\n el.remove();\n });\n\n it('C10. nile-destroy is emitted when the element disconnects', async () => {\n const el = await dtpFixture();\n await settle(el);\n let fired = false;\n el.addEventListener('nile-destroy', () => { fired = true; });\n el.remove();\n expect(fired).to.be.true;\n });\n\n // ---- parity: the wrapper must emit exactly what a standalone calendar emits ----\n it('C11. PARITY: absolute payload equals a standalone nile-calendar variant', async () => {\n // standalone date-time-picker-variant calendar\n const cal = await fixture<NileCalendar>(\n html`<nile-calendar variant=\"date-time-picker\"></nile-calendar>`\n ) as any;\n (cal.shadowRoot!.querySelectorAll('.day_date:not(.filler)')[5] as HTMLElement).click();\n cal.tpHours = 9; cal.tpMinutes = 15; cal.tpSeconds = 0; cal.tpMilliseconds = 0;\n await cal.updateComplete;\n let calDetail: any = null;\n cal.addEventListener('nile-change', ((e: CustomEvent) => { calDetail = e.detail; }) as EventListener);\n (cal.shadowRoot!.querySelector('.apply-button') as HTMLElement).click();\n\n // same selection through the wrapper\n const el = await dtpFixture();\n const inner = await settle(el);\n clickDay(inner, 5);\n inner.tpHours = 9; inner.tpMinutes = 15; inner.tpSeconds = 0; inner.tpMilliseconds = 0;\n await inner.updateComplete;\n let wrapDetail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { wrapDetail = e.detail; }) as EventListener);\n applyBtn(inner).click();\n\n expect(wrapDetail.value).to.be.a('string');\n expect(wrapDetail.value).to.equal(calDetail.value);\n expect(wrapDetail.timezone).to.equal(calDetail.timezone);\n // same payload key shape\n expect(Object.keys(wrapDetail).sort()).to.deep.equal(Object.keys(calDetail).sort());\n });\n\n it('C12. PARITY: relative payload shape equals a standalone nile-calendar variant', async () => {\n const cal = await fixture<NileCalendar>(\n html`<nile-calendar variant=\"date-time-picker\" type=\"relative\"></nile-calendar>`\n ) as any;\n await cal.updateComplete;\n (cal.shadowRoot!.querySelector('.duration__value') as HTMLElement).click();\n await cal.updateComplete;\n let calDetail: any = null;\n cal.addEventListener('nile-change', ((e: CustomEvent) => { calDetail = e.detail; }) as EventListener);\n (cal.shadowRoot!.querySelector('.apply-button') as HTMLElement).click();\n\n const el = await dtpFixture();\n el.type = 'relative';\n const inner = await settle(el);\n (inner.shadowRoot!.querySelector('.duration__value') as HTMLElement).click();\n await inner.updateComplete;\n let wrapDetail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { wrapDetail = e.detail; }) as EventListener);\n applyBtn(inner).click();\n\n expect(Object.keys(wrapDetail).sort()).to.deep.equal(Object.keys(calDetail).sort());\n expect(wrapDetail.startDate).to.be.instanceOf(Date);\n expect(wrapDetail.endDate).to.be.instanceOf(Date);\n expect(wrapDetail.timezone).to.equal(calDetail.timezone);\n });\n });\n\n // ── D. trigger formatting + panel lifecycle ─────────────────────────────────\n describe('D. trigger formatting / panel', () => {\n it('D1. an applied selection is formatted into the trigger input', async () => {\n const el = await dtpFixture();\n el.dateFormat = 'DD/MM/YYYY';\n const cal = await settle(el);\n clickDay(cal, 5);\n cal.tpHours = 8; cal.tpMinutes = 5; cal.tpSeconds = 0; cal.tpMilliseconds = 0;\n await cal.updateComplete;\n applyBtn(cal).click();\n await el.updateComplete;\n await triggerInput(el).updateComplete;\n const text = triggerInput(el).value as string;\n // \"<DD/MM/YYYY> - 08:05:00.000 - UTC\"\n expect(text).to.match(/^\\d{2}\\/\\d{2}\\/\\d{4} - 08:05:00\\.000 - UTC$/);\n });\n\n it('D2. apply closes the panel', async () => {\n const el = await dtpFixture();\n el.open = true;\n const cal = await settle(el);\n // let Tippy mount (show is queued on a microtask + transition)\n await new Promise(r => setTimeout(r, 50));\n expect(panelOf(el).open, 'panel opened').to.be.true;\n clickDay(cal, 5);\n await cal.updateComplete;\n applyBtn(cal).click();\n await el.updateComplete;\n expect(panelOf(el).open).to.not.be.true;\n expect(el.open).to.not.be.true;\n });\n\n it('D3. reset empties the trigger input', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n clickDay(cal, 5);\n await cal.updateComplete;\n applyBtn(cal).click();\n await el.updateComplete;\n await triggerInput(el).updateComplete;\n expect(triggerInput(el).value).to.not.equal('');\n resetBtn(cal).click();\n await el.updateComplete;\n await triggerInput(el).updateComplete;\n expect(triggerInput(el).value).to.equal('');\n });\n });\n\n // ── E. structuredInput mask (drives the shadow trigger input) ───────────────\n describe('E. structuredInput mask', () => {\n const structuredFixture = (fmt?: string, endYear?: number) =>\n fixture<NileDateTimePicker>(\n fmt\n ? html`<nile-date-time-picker .dateFormat=${fmt} .endYear=${endYear}></nile-date-time-picker>`\n : html`<nile-date-time-picker></nile-date-time-picker>`\n );\n const inputOf = (el: any) => el.shadowRoot.querySelector('nile-input') as any;\n const nativeOf = (el: any) => inputOf(el).input as HTMLInputElement;\n const press = (el: any, key: string) =>\n inputOf(el).dispatchEvent(\n new KeyboardEvent('keydown', { key, bubbles: true, composed: true, cancelable: true })\n );\n const typeKeys = (el: any, s: string) => { for (const ch of s) press(el, ch); };\n const valOf = (el: any) => nativeOf(el).value;\n const setCaret = (el: any, p: number) => nativeOf(el).setSelectionRange(p, p);\n const blur = (el: any) =>\n inputOf(el).dispatchEvent(new Event('focusout', { bubbles: true, composed: true }));\n const ready = async (el: any) => { await el.updateComplete; await inputOf(el).updateComplete; };\n\n it('E1. separators appear as each segment fills', async () => {\n const el = await structuredFixture();\n await ready(el);\n typeKeys(el, '23'); expect(valOf(el)).to.equal('23/');\n typeKeys(el, '03'); expect(valOf(el)).to.equal('23/03/');\n typeKeys(el, '26'); expect(valOf(el)).to.equal('23/03/26 - ');\n typeKeys(el, '17'); expect(valOf(el)).to.equal('23/03/26 - 17:');\n });\n\n it('E1b. the wrapper masks its own trigger input and no longer forwards structuredInput to its calendar (which has no manual inputs)', async () => {\n const el = await structuredFixture();\n await ready(el);\n const cal = (el as any).calendarElement as any;\n await cal.updateComplete;\n expect(cal.structuredInput).to.be.false;\n expect(cal.shadowRoot.querySelector('.calender-input')).to.be.null;\n expect(cal.boundMaskInputs.length).to.equal(0);\n typeKeys(el, '2303'); expect(valOf(el)).to.equal('23/03/'); // the wrapper's own mask is unaffected\n });\n\n it('E2. a full datetime fills every slot; letters blocked; extra digits ignored', async () => {\n const el = await structuredFixture();\n await ready(el);\n typeKeys(el, '230326172456426');\n expect(valOf(el)).to.equal('23/03/26 - 17:24:56.426');\n typeKeys(el, 'iuhwe');\n expect(valOf(el)).to.equal('23/03/26 - 17:24:56.426');\n typeKeys(el, '9999');\n expect(valOf(el)).to.equal('23/03/26 - 17:24:56.426');\n });\n\n it('E3. each segment is clamped to its max as it fills', async () => {\n const el = await structuredFixture();\n await ready(el);\n typeKeys(el, '457830009988333');\n expect(valOf(el)).to.equal('04/07/30 - 00:09:08.333');\n });\n\n it('E4. month/day have a min of 1 (00 -> 01); time fields allow 00', async () => {\n const el = await structuredFixture();\n await ready(el);\n typeKeys(el, '000026000000000');\n expect(valOf(el)).to.equal('01/01/26 - 00:00:00.000');\n });\n\n it('E5. day clamps to the month length once month + year are known (Feb 2026 -> 28)', async () => {\n const el = await structuredFixture();\n await ready(el);\n typeKeys(el, '310226');\n expect(valOf(el)).to.equal('28/02/26 - ');\n });\n\n it('E6. leap year allows Feb 29 (2024)', async () => {\n const el = await structuredFixture();\n await ready(el);\n typeKeys(el, '290224');\n expect(valOf(el)).to.equal('29/02/24 - ');\n });\n\n it('E7. blur zero-pads a single-digit segment (5 -> 05)', async () => {\n const el = await structuredFixture();\n await ready(el);\n typeKeys(el, '5');\n expect(valOf(el)).to.equal('5');\n blur(el);\n expect(valOf(el)).to.equal('05/');\n });\n\n it('E8. Backspace blanks the slot in place, no reflow', async () => {\n const el = await structuredFixture();\n await ready(el);\n typeKeys(el, '230326');\n expect(valOf(el)).to.equal('23/03/26 - ');\n setCaret(el, 2);\n press(el, 'Backspace');\n expect(valOf(el)).to.equal('2/03/26 - ');\n });\n\n it('E9. dateFormat=\"YYYY-MM-DD\" puts the 4-digit year first', async () => {\n const el = await structuredFixture('YYYY-MM-DD');\n await ready(el);\n typeKeys(el, '20260610000000000');\n expect(valOf(el)).to.equal('2026-06-10 - 00:00:00.000');\n });\n\n it('E10. a completed manual edit reflects into the inner calendar panel', async () => {\n const el = await structuredFixture();\n await ready(el);\n typeKeys(el, '230326172456426');\n const cal = innerCalendar(el);\n await cal.updateComplete;\n expect(cal.value).to.be.instanceOf(Date);\n expect(cal.value.getDate()).to.equal(23);\n expect(cal.value.getMonth()).to.equal(2); // March, 0-indexed\n expect(cal.value.getFullYear()).to.equal(2026);\n expect(cal.tpHours).to.equal(17);\n expect(cal.tpMinutes).to.equal(24);\n expect(cal.tpSeconds).to.equal(56);\n expect(cal.tpMilliseconds).to.equal(426);\n });\n\n // ---- Feb day-cap with a 4-digit year, incl. the 100/400 century rules ----\n // (E5/E6 cover 2-digit years; these lock in full-year leap handling.)\n it('E12. Feb 31 caps to 28 in a common 4-digit year (2025)', async () => {\n const el = await structuredFixture('DD/MM/YYYY');\n await ready(el);\n typeKeys(el, '31022025');\n expect(valOf(el)).to.equal('28/02/2025 - ');\n });\n\n it('E13. Feb 31 caps to 29 in a leap 4-digit year (2024)', async () => {\n const el = await structuredFixture('DD/MM/YYYY');\n await ready(el);\n typeKeys(el, '31022024');\n expect(valOf(el)).to.equal('29/02/2024 - ');\n });\n\n it('E14. century rule: 2000 is leap (29) but 2100 is not (28)', async () => {\n const leap = await structuredFixture('DD/MM/YYYY');\n await ready(leap);\n typeKeys(leap, '31022000');\n expect(valOf(leap)).to.equal('29/02/2000 - ');\n\n // endYear=2100 so the typed year isn't clamped by the default nav range\n // (2050) — this test is specifically about the 2100 century rule.\n const common = await structuredFixture('DD/MM/YYYY', 2100);\n await ready(common);\n typeKeys(common, '31022100');\n expect(valOf(common)).to.equal('28/02/2100 - ');\n });\n\n it('E14a. default range: year clamp to 2050 revalidates the day (29/02/2100 -> 28/02/2050)', async () => {\n // With the default endYear (2050), typing 2100 clamps the year to 2050.\n // 2050 is NOT a leap year, so Feb 29 must cap to Feb 28 AFTER the year\n // clamp — i.e. the result stays a valid date, never 29/02/2050.\n const el = await structuredFixture('DD/MM/YYYY');\n await ready(el);\n typeKeys(el, '29022100');\n expect(valOf(el)).to.equal('28/02/2050 - ');\n });\n\n it('E15. a valid day is never clamped (30 April stays 30; 31 Dec stays 31)', async () => {\n const apr = await structuredFixture('DD/MM/YYYY');\n await ready(apr);\n typeKeys(apr, '30042025');\n expect(valOf(apr)).to.equal('30/04/2025 - ');\n\n const dec = await structuredFixture('DD/MM/YYYY');\n await ready(dec);\n typeKeys(dec, '31122025');\n expect(valOf(dec)).to.equal('31/12/2025 - ');\n });\n\n // Invalid-day clamping for the date-time-picker variant: the trigger text AND the date the inner\n // calendar stores are both capped to the month length, so Date never rolls into the next month.\n const typedDate = async (keys: string) => {\n const el = await structuredFixture('DD/MM/YYYY');\n await ready(el);\n typeKeys(el, keys);\n const cal = innerCalendar(el);\n await cal.updateComplete;\n return { text: valOf(el), stored: cal.value as Date };\n };\n const ymd = (d: Date) => [d.getFullYear(), d.getMonth() + 1, d.getDate()];\n\n it('E15a. Feb 31 in a common year clamps to Feb 28 (text and stored date)', async () => {\n const { text, stored } = await typedDate('31022026');\n expect(text).to.equal('28/02/2026 - ');\n expect(ymd(stored)).to.deep.equal([2026, 2, 28]);\n });\n\n it('E15b. Feb 29 in a common year clamps to Feb 28, not Mar 1', async () => {\n const { text, stored } = await typedDate('29022026');\n expect(text).to.equal('28/02/2026 - ');\n expect(ymd(stored)).to.deep.equal([2026, 2, 28]);\n });\n\n it('E15c. Feb 29 in a leap year stays Feb 29', async () => {\n const { text, stored } = await typedDate('29022024');\n expect(text).to.equal('29/02/2024 - ');\n expect(ymd(stored)).to.deep.equal([2024, 2, 29]);\n });\n\n it('E15d. Apr 31 clamps to Apr 30, not May 1', async () => {\n const { text, stored } = await typedDate('31042026');\n expect(text).to.equal('30/04/2026 - ');\n expect(ymd(stored)).to.deep.equal([2026, 4, 30]);\n });\n\n // structuredInput is always on for the wrapper's trigger, so these also\n // cover the \"structuredInput enabled + preset value\" case.\n it('E16. a preset value seeds the masked trigger with the day it names (no off-by-one)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .dateFormat=${'DD/MM/YYYY'}></nile-date-time-picker>`\n );\n el.value = '2026-06-15';\n await ready(el);\n // trigger text starts with the named day/month/year — not the 14th/16th\n expect(valOf(el)).to.match(/^15\\/06\\/2026\\b/);\n });\n\n it('E17. preset value → Apply with no edits emits that exact day (trigger and payload agree)', async () => {\n const el = await dtpFixture();\n el.value = '2026-06-15';\n const cal = await settle(el);\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n applyBtn(cal).click();\n expect(detail).to.not.be.null;\n expect(detail.value).to.be.a('string');\n expect(detail.value).to.match(/^2026-06-15T/);\n });\n\n /**\n * clampSegment does `layout.slots[slotIndex].segStart` with no bounds check, so it\n * relies on callers never passing a stale index. The only way maskValues could\n * outlive its layout is a layout that SHRINKS after the mask was seeded; the\n * re-sync in onMaskKeydown is what repairs it.\n *\n * This is an end-to-end check of that transition, not an isolation test of\n * clampSegment: it asserts typing after a shrink neither throws nor blanks the\n * mask. Removing the re-sync breaks basic typing long before any index goes out\n * of bounds, so no test can reach clampSegment with a bad index through the UI.\n */\n it('E18. typing still works after the layout shrinks post-seeding', async () => {\n const el = await structuredFixture();\n await ready(el);\n typeKeys(el, '150626' + '143025999');\n const before = valOf(el);\n expect(before, 'mask is fully seeded').to.contain('15/06/26');\n\n // drop two time segments -> layout.slots shrinks while maskValues is still long\n el.hideTimeFields = ['seconds', 'milliseconds'];\n await ready(el);\n\n let threw: unknown = null;\n try {\n setCaret(el, 0);\n typeKeys(el, '1606261430');\n blur(el);\n await ready(el);\n } catch (err) { threw = err; }\n\n expect(threw, `typing after the layout shrank threw: ${threw}`).to.be.null;\n expect(valOf(el), 'mask still renders').to.be.a('string');\n });\n\n it('E19. relative apply then blur leaves the range text, calendar timezone and mask untouched', async () => {\n const el = await structuredFixture();\n await ready(el);\n // seed absolute mask state that must not come back later\n typeKeys(el, '150626' + '143025999');\n expect(valOf(el), 'absolute mask is seeded').to.contain('15/06/26');\n\n el.type = 'relative';\n const cal = await settle(el);\n (cal.shadowRoot!.querySelector('.duration__value') as HTMLElement).click();\n await cal.updateComplete;\n applyBtn(cal).click();\n await ready(el);\n\n const rangeText = valOf(el);\n const tzBefore = cal.timezone;\n expect(rangeText, 'trigger shows the relative range').to.contain(' - ');\n\n blur(el);\n await ready(el);\n await cal.updateComplete;\n\n expect(valOf(el), 'trigger text unchanged by blur').to.equal(rangeText);\n expect(cal.timezone, 'calendar timezone unchanged by blur').to.equal(tzBefore);\n expect(valOf(el), 'stale absolute value not restored').to.not.contain('15/06/26');\n expect((el as any).maskValues, 'no stale absolute mask state').to.deep.equal([]);\n });\n });\n\n // ── F. disabled gating ──────────────────────────────────────────────────────\n describe('F. disabled', () => {\n it('F1. when disabled, a calendar nile-change is NOT re-emitted by the wrapper', async () => {\n const el = await dtpFixture();\n el.disabled = true;\n const cal = await settle(el);\n let fired = false;\n el.addEventListener('nile-change', () => { fired = true; });\n cal.dispatchEvent(new CustomEvent('nile-change', {\n detail: { value: new Date(2026, 5, 12, 8, 0, 0, 0), timezone: 'UTC' },\n bubbles: true, composed: true,\n }));\n await el.updateComplete;\n expect(fired).to.be.false;\n });\n\n describe('F-icons. disabled icon colors', () => {\n const DISABLED = 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))';\n const iconColors = (el: any, cal: any) => {\n const root = cal.shadowRoot as ShadowRoot;\n return {\n trigger: el.shadowRoot.querySelector('nile-glyph[slot=\"suffix\"]').getAttribute('color'),\n nav: [...root.querySelectorAll('.calendar-header__month-navigation')].map(i => i.getAttribute('color')),\n chevron: root.querySelector('.tp-chevron nile-icon')!.getAttribute('color'),\n steppers: [...root.querySelectorAll('.tp-stepper-btn nile-icon')].map(i => i.getAttribute('color')),\n setToNow: root.querySelector('.tp-set-to-now-button nile-glyph')!.getAttribute('color'),\n };\n };\n\n it('F3. every icon uses the existing disabled-state token when disabled', async () => {\n const el = await dtpFixture();\n el.disabled = true;\n const cal = await settle(el);\n await cal.updateComplete;\n const c = iconColors(el, cal);\n expect(c.trigger, 'trigger glyph').to.equal(DISABLED);\n expect(c.nav.length, 'nav arrows').to.be.greaterThan(0);\n for (const n of c.nav) expect(n, 'nav arrow').to.equal(DISABLED);\n expect(c.chevron, 'expand chevron').to.equal(DISABLED);\n expect(c.steppers.length, 'stepper icons').to.be.greaterThan(0);\n for (const n of c.steppers) expect(n, 'stepper icon').to.equal(DISABLED);\n expect(c.setToNow, 'set-to-now glyph').to.equal(DISABLED);\n });\n\n it('F4. enabled icons keep their default colors (no disabled token leaks)', async () => {\n const el = await dtpFixture();\n const cal = await settle(el);\n const c = iconColors(el, cal);\n expect(c.trigger).to.equal(null);\n expect(c.steppers.every(x => x === null), 'steppers default').to.be.true;\n expect(c.setToNow).to.equal(null);\n for (const n of [...c.nav, c.chevron]) expect(n).to.not.equal(DISABLED);\n });\n\n it('F5. re-enabling restores the default icon colors', async () => {\n const el = await dtpFixture();\n el.disabled = true;\n const cal = await settle(el);\n el.disabled = false;\n await el.updateComplete;\n await cal.updateComplete;\n const c = iconColors(el, cal);\n expect(c.trigger).to.equal(null);\n expect(c.steppers.every(x => x === null)).to.be.true;\n });\n });\n\n it('F2. when disabled, mask keystrokes are ignored', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .disabled=${true}></nile-date-time-picker>`\n );\n await el.updateComplete;\n const inp = el.shadowRoot!.querySelector('nile-input') as any;\n await inp.updateComplete;\n inp.dispatchEvent(new KeyboardEvent('keydown', { key: '2', bubbles: true, composed: true, cancelable: true }));\n expect((inp.input as HTMLInputElement).value).to.equal('');\n });\n });\n\n // ── G. hideTimeFields removal is honored by the trigger (mask / placeholder /\n // applied-value), not just by the panel ──────────────────────────────\n describe('G. hideTimeFields honored by the trigger input', () => {\n const cfgFixture = (hideTimeFields: string[] = [], dateFormat = 'DD/MM/YYYY') =>\n fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .hideTimeFields=${hideTimeFields} .dateFormat=${dateFormat} .timezone=${'UTC'}></nile-date-time-picker>`\n );\n const ph = (el: any) => triggerInput(el).getAttribute('placeholder') as string;\n const applyDay = async (el: any) => {\n const cal = await settle(el);\n clickDay(cal, 5);\n await cal.updateComplete;\n applyBtn(cal).click();\n await el.updateComplete;\n await triggerInput(el).updateComplete;\n return triggerInput(el).value as string;\n };\n\n it('G1. default (all fields) is unchanged: full placeholder + full applied value', async () => {\n const el = await cfgFixture();\n await el.updateComplete;\n expect(ph(el)).to.equal('DD/MM/YYYY - hh:mm:ss.SSS - timezone');\n expect(await applyDay(el)).to.match(/^\\d{2}\\/\\d{2}\\/\\d{4} - 00:00:00\\.000 - UTC$/);\n });\n\n it('G2. seconds + milliseconds removed: placeholder + applied value stop at minutes', async () => {\n const el = await cfgFixture(['seconds', 'milliseconds']);\n await el.updateComplete;\n expect(ph(el)).to.equal('DD/MM/YYYY - hh:mm - timezone');\n expect(await applyDay(el)).to.match(/^\\d{2}\\/\\d{2}\\/\\d{4} - 00:00 - UTC$/);\n });\n\n it('G3. timezone removed: no \" - timezone\" in placeholder, no \" - UTC\" appended', async () => {\n const el = await cfgFixture(['timezone']);\n await el.updateComplete;\n expect(ph(el)).to.equal('DD/MM/YYYY - hh:mm:ss.SSS');\n const applied = await applyDay(el);\n expect(applied).to.match(/^\\d{2}\\/\\d{2}\\/\\d{4} - 00:00:00\\.000$/);\n expect(applied).to.not.contain('UTC');\n });\n\n it('G4. hours + seconds only (minutes, ms, tz removed): \".\" precedes ms only, \":\" otherwise', async () => {\n const el = await cfgFixture(['minutes', 'milliseconds', 'timezone']);\n await el.updateComplete;\n // hours then seconds, separated by ':' (seconds is not ms), no tz suffix\n expect(ph(el)).to.equal('DD/MM/YYYY - hh:ss');\n expect(await applyDay(el)).to.match(/^\\d{2}\\/\\d{2}\\/\\d{4} - 00:00$/);\n });\n\n it('G5. mask only creates slots for shown time fields (seconds/ms removed → no ss/SSS slots)', async () => {\n const el = await cfgFixture(['seconds', 'milliseconds']);\n await el.updateComplete;\n const inp = triggerInput(el);\n await inp.updateComplete;\n const press = (key: string) =>\n inp.dispatchEvent(new KeyboardEvent('keydown', { key, bubbles: true, composed: true, cancelable: true }));\n // DD MM YYYY HH mm = 10 digits; further digits have no slot to land in\n for (const ch of '0102202608309999') press(ch);\n expect((inp.input as HTMLInputElement).value).to.equal('01/02/2026 - 08:30');\n });\n\n it('G6. with no timezone field, the panel renders no timezone control', async () => {\n const el = await cfgFixture(['timezone']);\n const cal = await settle(el);\n expect(cal.shadowRoot.querySelector('.tp-timezone')).to.be.null;\n });\n });\n\n // ── H. timezone carried in the value only ───────────────────────────────────\n describe('H. timezone in value only', () => {\n const ZONED = '2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]';\n\n it('H1. a preset value with the zone in the value adopts that zone (no timezone attr)', async () => {\n const el = await dtpFixture();\n el.value = ZONED;\n const cal = await settle2(el);\n expect(el.timezone).to.equal('Asia/Kolkata');\n expect(cal.timezone).to.equal('Asia/Kolkata');\n expect(cal.tpHours).to.equal(14);\n expect(cal.tpMinutes).to.equal(30);\n });\n\n /**\n * An impossible day must not silently become a different one.\n *\n * `new Date(2026, 1, 31)` rolls forward to March 3 rather than rejecting, so a\n * preset of \"2026-02-31\" used to select, display AND emit March 3 as if the\n * caller had asked for it. The variant now clamps to the month length, matching\n * the typing mask (E5: \"310226\" → 28/02/26) and parseZonedValue, so all three\n * entry points agree.\n */\n it('H1b. an out-of-range preset day clamps to the month length (2026-02-31 → Feb 28)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .dateFormat=${'YYYY-MM-DD'}></nile-date-time-picker>`\n );\n el.value = '2026-02-31';\n const cal = await settle2(el);\n await triggerInput(el).updateComplete;\n\n expect(cal.value.getMonth(), 'stays in February').to.equal(1);\n expect(cal.value.getDate(), 'clamped to 28').to.equal(28);\n expect(triggerInput(el).value).to.contain('2026-02-28');\n\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n applyBtn(cal).click();\n expect(detail.value).to.match(/^2026-02-28T/);\n });\n\n it('H1c. the same clamp applies to a zone-encoded preset', async () => {\n const el = await dtpFixture();\n el.value = '2026-02-31T10:00:00.000[GMT+00:00 UTC]';\n const cal = await settle2(el);\n expect(cal.value.getMonth()).to.equal(1);\n expect(cal.value.getDate()).to.equal(28);\n expect(cal.tpHours, 'time survives the clamp').to.equal(10);\n });\n\n it('H1d. the default nile-calendar keeps its published parsing (no clamp): the same value seeds as `new Date(raw)` shifted by the host offset', async () => {\n // the clamp is a date-time-picker behavior only; the default calendar must match the published one\n const raw = '2026-02-31';\n const plain = await fixture<NileCalendar>(\n html`<nile-calendar value=${raw}></nile-calendar>`\n ) as any;\n await plain.updateComplete;\n const parsed = new Date(raw);\n const expected = new Date(parsed.getTime() - parsed.getTimezoneOffset() * 60000);\n if (isNaN(expected.getTime())) {\n expect(plain.value == null || isNaN(plain.value.getTime())).to.be.true;\n } else {\n expect(plain.value.getTime()).to.equal(expected.getTime());\n }\n });\n\n /**\n * Backspacing over the \" - <zone>\" suffix means \"switch to UTC\".\n *\n * The zone is authoritative INSIDE `value`, so it is not enough to set the child\n * calendar's timezone: `this.timezone` is a public, reflected property, and\n * seedTriggerFromValue re-derives the zone from `value`. Previously the wrapper\n * updated neither, so `el.timezone` kept reporting the deleted zone and the next\n * `value` change resurrected it in the trigger text while the panel still said\n * UTC — the two surfaces disagreeing.\n */\n describe('H4. deleting the timezone suffix', () => {\n const seeded = async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .dateFormat=${'YYYY-MM-DD'}></nile-date-time-picker>`\n );\n el.value = ZONED;\n await settle2(el);\n const inp = triggerInput(el);\n await inp.updateComplete;\n const native = inp.input as HTMLInputElement;\n expect(native.value, 'precondition: suffix present').to.contain(' - Asia/Kolkata');\n native.setSelectionRange(native.value.length, native.value.length);\n inp.dispatchEvent(new KeyboardEvent('keydown', {\n key: 'Backspace', bubbles: true, composed: true, cancelable: true,\n }));\n await settle2(el);\n await inp.updateComplete;\n return { el, inp, native };\n };\n\n it('H4a. the suffix is removed and stays removed', async () => {\n const { native } = await seeded();\n expect(native.value).to.not.contain('Asia/Kolkata');\n expect(native.value).to.contain('2026-06-15 - 14:30:05.250');\n });\n\n it('H4b. the public timezone follows the panel to UTC (no stale zone)', async () => {\n const { el } = await seeded();\n expect(el.timezone, 'property').to.equal('UTC');\n expect(el.getAttribute('timezone'), 'reflected attribute').to.equal('UTC');\n expect(innerCalendar(el).timezone, 'panel').to.equal('UTC');\n });\n\n it('H4c. a later value change does NOT resurrect the deleted zone', async () => {\n const { el, inp } = await seeded();\n el.value = '2026-07-20';\n await settle2(el);\n await inp.updateComplete;\n expect((inp.input as HTMLInputElement).value).to.not.contain('Asia/Kolkata');\n expect(el.timezone).to.equal('UTC');\n });\n\n it('H4d. Apply emits UTC, matching what the trigger and panel show', async () => {\n const { el } = await seeded();\n const cal = innerCalendar(el);\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n applyBtn(cal).click();\n expect(detail.timezone).to.equal('UTC');\n expect(detail.value).to.contain('[GMT+00:00 UTC]');\n });\n });\n\n it('H2. the preset zone-encoded value round-trips through Apply', async () => {\n const el = await dtpFixture();\n el.value = ZONED;\n const cal = await settle2(el);\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n applyBtn(cal).click();\n expect(detail).to.not.be.null;\n expect(detail.value).to.equal(ZONED);\n expect(detail.timezone).to.equal('Asia/Kolkata');\n });\n\n it('H3. an unrecognized zone in the preset value falls back to UTC (wall-clock kept)', async () => {\n const el = await dtpFixture();\n el.value = '2026-06-15T14:30:05.250[GMT+05:30 Mars/Phobos]';\n const cal = await settle2(el);\n expect(el.timezone).to.equal('UTC');\n expect(cal.tpHours).to.equal(14);\n expect(cal.tpMinutes).to.equal(30);\n });\n });\n\n /**\n * ── I. TIMEZONE CORRECTNESS AUDIT ──────────────────────────────────────────\n *\n * DISCOVERED CONTRACT (from reading nile-calendar.ts / nile-date-time-picker.ts):\n *\n * The picker is a WALL-CLOCK + ZONE picker, NOT an instant viewer.\n *\n * - The date grid selection (`value`) + the time spinners\n * (`tpHours/tpMinutes/tpSeconds/tpMilliseconds`) are the wall-clock time\n * AS READ IN THE SELECTED TIMEZONE. They are never re-computed from an\n * instant.\n * - On Apply the calendar emits:\n * detail.value — \"YYYY-MM-DDTHH:mm:ss.SSS[GMT±HH:MM Zone]\"\n * wall-clock digits verbatim + the zone's\n * offset AT that instant (composeValueISO).\n * detail.timezone — the selected IANA zone.\n * detail.localTimezoneValue — a JS Date = the ABSOLUTE INSTANT that the\n * wall-clock resolves to in that zone.\n * - Switching the timezone only sets `this.timezone`: it PRESERVES the\n * wall-clock fields and RE-COMPUTES the instant. So the displayed digits\n * stay; the emitted offset + localTimezoneValue change.\n * - A zone-encoded preset is parsed by parseZonedValue: the bracket OFFSET is\n * ignored, the IANA name is authoritative, wall-clock digits are kept, an\n * unrecognized zone falls back to UTC (wall-clock kept).\n *\n * The GENUINE timezone conversion is therefore:\n * wall-clock (in zone) → absolute instant (localTimezoneValue)\n * wall-clock (in zone) → zone offset (bracket in value)\n *\n * INDEPENDENT REFERENCE\n * Expected UTC instants and offsets below are hand-computed from published,\n * fixed facts (IST is always +05:30; US/Eastern is −05:00 in winter, −04:00\n * in summer, DST 2026 = Mar 8 / Nov 1; UK is +00:00 winter / +01:00 summer).\n * `zoneOffsetMinutesRef()` is a SECOND, independent implementation using\n * Intl.DateTimeFormat 'longOffset' — a different code path from the\n * component's formatToParts-subtraction — used only as a cross-check.\n */\n describe('I. TZ audit — instant/wall-clock correctness', () => {\n // preset a zone-encoded value on the wrapper and return the settled calendar\n const presetWrapper = async (raw: string, dateFormat = 'YYYY-MM-DD') => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .dateFormat=${dateFormat}></nile-date-time-picker>`\n );\n el.value = raw;\n const cal = await settle2(el);\n return { el, cal };\n };\n\n // apply and capture the wrapper-level nile-change detail\n const applyAndCapture = async (el: NileDateTimePicker, cal: any) => {\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => (detail = e.detail)) as EventListener);\n applyBtn(cal).click();\n await el.updateComplete;\n return detail;\n };\n\n // a standalone date-time-picker calendar for direct control (case 3, DST edges)\n const calFixture = async () => {\n const cal = await fixture<NileCalendar>(\n html`<nile-calendar variant=\"date-time-picker\" dateFormat=\"YYYY-MM-DD\"></nile-calendar>`\n );\n await cal.updateComplete;\n return cal;\n };\n\n // set a wall-clock + zone directly on a calendar, apply, capture its detail\n const pickAndApply = async (\n cal: NileCalendar,\n y: number, mo1: number, d: number,\n hh: number, mm: number, ss: number, ms: number,\n zone: string\n ) => {\n (cal as any).value = new Date(y, mo1 - 1, d); // local Y/M/D; only Y/M/D are read back\n (cal as any).tpHours = hh;\n (cal as any).tpMinutes = mm;\n (cal as any).tpSeconds = ss;\n (cal as any).tpMilliseconds = ms;\n cal.timezone = zone;\n await cal.updateComplete;\n let detail: any = null;\n cal.addEventListener('nile-change', ((e: CustomEvent) => (detail = e.detail)) as EventListener, { once: true });\n (cal.shadowRoot!.querySelector('.apply-button') as HTMLElement).click();\n return detail;\n };\n\n // INDEPENDENT offset oracle (different impl than the component): minutes that\n // must be ADDED to UTC to get local, e.g. IST → +330, EST → −300.\n const zoneOffsetMinutesRef = (utcMs: number, timeZone: string): number => {\n const s = new Intl.DateTimeFormat('en-US', {\n timeZone, timeZoneName: 'longOffset', hour12: false,\n })\n .formatToParts(new Date(utcMs))\n .find(p => p.type === 'timeZoneName')!.value; // e.g. \"GMT+05:30\", \"GMT-4\"\n const m = /GMT([+-])(\\d{1,2})(?::(\\d{2}))?/.exec(s);\n if (!m) return 0; // \"GMT\"\n const sign = m[1] === '-' ? -1 : 1;\n return sign * (Number(m[2]) * 60 + Number(m[3] ?? 0));\n };\n\n const gmtLabel = (offsetMin: number): string => {\n const sign = offsetMin >= 0 ? '+' : '-';\n const a = Math.abs(offsetMin);\n const p = (n: number) => String(n).padStart(2, '0');\n return `${sign}${p(Math.floor(a / 60))}:${p(a % 60)}`;\n };\n\n // ── I1: UTC → positive offset (Asia/Kolkata, +05:30, no DST) ──────────────\n describe('I1. positive-offset zone (Asia/Kolkata +05:30)', () => {\n it('I1a. wall-clock 14:30:05.250 → instant is exactly UTC−05:30 = 09:00:05.250Z', async () => {\n const { el, cal } = await presetWrapper('2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]');\n // display (panel) shows the picked wall-clock in the adopted zone\n expect(cal.tpHours).to.equal(14);\n expect(cal.tpMinutes).to.equal(30);\n expect(cal.tpSeconds).to.equal(5);\n expect(cal.tpMilliseconds).to.equal(250);\n expect(cal.timezone).to.equal('Asia/Kolkata');\n expect(triggerInput(el).value).to.equal('2026-06-15 - 14:30:05.250 - Asia/Kolkata');\n\n const detail = await applyAndCapture(el, cal);\n // INDEPENDENT: 14:30:05.250 IST − 05:30 = 09:00:05.250 UTC\n expect(detail.localTimezoneValue.getTime()).to.equal(Date.UTC(2026, 5, 15, 9, 0, 5, 250));\n expect(detail.value).to.equal('2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]');\n expect(detail.timezone).to.equal('Asia/Kolkata');\n });\n\n it('I1b. crosses into the PREVIOUS UTC day: 01:30 IST on Jun-15 → 20:00Z Jun-14', async () => {\n const { el, cal } = await presetWrapper('2026-06-15T01:30:00.000[GMT+05:30 Asia/Kolkata]');\n const detail = await applyAndCapture(el, cal);\n // INDEPENDENT: 01:30 IST − 05:30 = 20:00 previous day\n const inst = detail.localTimezoneValue as Date;\n expect(inst.getTime()).to.equal(Date.UTC(2026, 5, 14, 20, 0, 0, 0));\n expect(inst.getUTCDate()).to.equal(14); // instant is Jun-14 in UTC …\n expect(detail.value).to.contain('2026-06-15T01:30'); // … while the displayed date stays Jun-15\n expect(detail.value).to.equal('2026-06-15T01:30:00.000[GMT+05:30 Asia/Kolkata]');\n });\n });\n\n // ── I2: UTC → negative offset (America/New_York) ──────────────────────────\n describe('I2. negative-offset zone (America/New_York)', () => {\n it('I2a. winter 14:30 EST → instant is UTC+05:00 = 19:30:00Z', async () => {\n const { el, cal } = await presetWrapper('2026-01-15T14:30:00.000[GMT-05:00 America/New_York]');\n expect(cal.tpHours).to.equal(14);\n expect(cal.timezone).to.equal('America/New_York');\n const detail = await applyAndCapture(el, cal);\n // INDEPENDENT: 14:30 EST + 05:00 = 19:30 UTC (EST = −05:00 in January)\n expect(detail.localTimezoneValue.getTime()).to.equal(Date.UTC(2026, 0, 15, 19, 30, 0, 0));\n expect(detail.value).to.equal('2026-01-15T14:30:00.000[GMT-05:00 America/New_York]');\n });\n\n it('I2b. crosses into the NEXT UTC day: 22:00 EST on Jan-15 → 03:00Z Jan-16', async () => {\n const { el, cal } = await presetWrapper('2026-01-15T22:00:00.000[GMT-05:00 America/New_York]');\n const detail = await applyAndCapture(el, cal);\n // INDEPENDENT: 22:00 EST + 05:00 = 03:00 next day UTC\n const inst = detail.localTimezoneValue as Date;\n expect(inst.getTime()).to.equal(Date.UTC(2026, 0, 16, 3, 0, 0, 0));\n expect(inst.getUTCDate()).to.equal(16); // instant Jan-16 …\n expect(detail.value).to.contain('2026-01-15T22:00'); // … displayed date stays Jan-15\n });\n });\n\n // ── I3: timezone switching contract ──────────────────────────────────────\n describe('I3. switching timezone preserves wall-clock, recomputes instant', () => {\n // Fixed wall-clock: 2026-06-15 12:00:00.000 (summer → NY=EDT −04, London=BST +01)\n const CASES: Array<[string, number, string]> = [\n // zone, expected UTC instant ms, expected bracket offset\n ['UTC', Date.UTC(2026, 5, 15, 12, 0, 0, 0), '+00:00'],\n ['Asia/Kolkata', Date.UTC(2026, 5, 15, 6, 30, 0, 0), '+05:30'],\n ['America/New_York', Date.UTC(2026, 5, 15, 16, 0, 0, 0), '-04:00'],\n ['Europe/London', Date.UTC(2026, 5, 15, 11, 0, 0, 0), '+01:00'],\n ];\n\n it('I3a. same digits, different instant+offset per zone (contract = wall-clock preserved)', async () => {\n const cal = await calFixture();\n for (const [zone, expectedMs, expectedOff] of CASES) {\n const detail = await pickAndApply(cal, 2026, 6, 15, 12, 0, 0, 0, zone);\n // wall-clock digits are IDENTICAL across zones\n expect(detail.value, zone).to.contain('2026-06-15T12:00:00.000');\n // instant + offset are recomputed per zone\n expect(detail.value, zone).to.equal(`2026-06-15T12:00:00.000[GMT${expectedOff} ${zone}]`);\n expect(detail.localTimezoneValue.getTime(), zone).to.equal(expectedMs);\n // cross-check the offset with the independent Intl oracle\n expect(gmtLabel(zoneOffsetMinutesRef(expectedMs, zone)), `ref ${zone}`).to.equal(expectedOff);\n }\n });\n });\n\n // ── I4: daylight-saving time ─────────────────────────────────────────────\n describe('I4. DST (America/New_York)', () => {\n it('I4a. winter uses −05:00, summer uses −04:00 for the SAME 12:00 wall-clock', async () => {\n const cal = await calFixture();\n const winter = await pickAndApply(cal, 2026, 1, 15, 12, 0, 0, 0, 'America/New_York');\n expect(winter.value).to.equal('2026-01-15T12:00:00.000[GMT-05:00 America/New_York]');\n expect(winter.localTimezoneValue.getTime()).to.equal(Date.UTC(2026, 0, 15, 17, 0, 0, 0));\n\n const summer = await pickAndApply(cal, 2026, 7, 15, 12, 0, 0, 0, 'America/New_York');\n expect(summer.value).to.equal('2026-07-15T12:00:00.000[GMT-04:00 America/New_York]');\n expect(summer.localTimezoneValue.getTime()).to.equal(Date.UTC(2026, 6, 15, 16, 0, 0, 0));\n });\n\n it('I4b. spring-forward GAP (2026-03-08 02:30 NY does not exist) — instant + consistent offset', async () => {\n const cal = await calFixture();\n const detail = await pickAndApply(cal, 2026, 3, 8, 2, 30, 0, 0, 'America/New_York');\n // NY DST 2026 begins 02:00 EST → 03:00 EDT at 07:00Z. wallClockToInstant's\n // 2-step refinement resolves the nonexistent 02:30 to instant 06:30Z —\n // equal to Temporal's 'earlier' disambiguation (an authoritative choice).\n const inst = detail.localTimezoneValue as Date;\n expect(inst.getTime()).to.equal(Date.UTC(2026, 2, 8, 6, 30, 0, 0));\n // `value` is rendered back OUT of that instant, so it shows the wall clock\n // the zone actually reads at 06:30Z — 01:30 EST — not the impossible 02:30\n // the picker held. Same moment either way; J1 confirms this matches what\n // Temporal's 'earlier' disambiguation reports (offset −05:00, hour 01:30).\n expect(detail.value).to.equal('2026-03-08T01:30:00.000[GMT-05:00 America/New_York]');\n });\n\n it('I4c. fall-back OVERLAP (2026-11-01 01:30 NY is ambiguous) — resolves to earlier (EDT) instant', async () => {\n const cal = await calFixture();\n const detail = await pickAndApply(cal, 2026, 11, 1, 1, 30, 0, 0, 'America/New_York');\n // NY DST 2026 ends 02:00 EDT → 01:00 EST at 06:00Z. 01:30 occurs twice.\n // The algorithm keeps the first (EDT, −04:00) occurrence = 05:30Z.\n const inst = detail.localTimezoneValue as Date;\n expect(inst.getTime()).to.equal(Date.UTC(2026, 10, 1, 5, 30, 0, 0));\n expect(zoneOffsetMinutesRef(inst.getTime(), 'America/New_York')).to.equal(-240); // EDT\n // consistent here: 01:30 @ −04:00 = 05:30Z\n expect(detail.value).to.equal('2026-11-01T01:30:00.000[GMT-04:00 America/New_York]');\n });\n });\n\n // ── I5: zone-encoded preset round-trip ───────────────────────────────────\n describe('I5. zone-encoded preset value', () => {\n const RAW = '2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]';\n it('I5a. displays date/time/ms/zone and round-trips exactly through Apply', async () => {\n const { el, cal } = await presetWrapper(RAW);\n expect(cal.tpHours).to.equal(14);\n expect(cal.tpMinutes).to.equal(30);\n expect(cal.tpSeconds).to.equal(5);\n expect(cal.tpMilliseconds).to.equal(250);\n expect(cal.timezone).to.equal('Asia/Kolkata');\n expect(cal.value.getFullYear()).to.equal(2026);\n expect(cal.value.getMonth()).to.equal(5);\n expect(cal.value.getDate()).to.equal(15);\n\n const detail = await applyAndCapture(el, cal);\n expect(detail.value).to.equal(RAW); // value out === value in\n expect(detail.timezone).to.equal('Asia/Kolkata');\n expect(detail.localTimezoneValue.getTime()).to.equal(Date.UTC(2026, 5, 15, 9, 0, 5, 250));\n });\n });\n\n // ── I6: bracket offset disagrees with IANA zone ──────────────────────────\n describe('I6. offset validation — IANA name is authoritative', () => {\n it('I6a. preset with WRONG bracket offset (+09:00 for Kolkata) is recomputed to +05:30', async () => {\n const { el, cal } = await presetWrapper('2026-06-15T14:30:05.250[GMT+09:00 Asia/Kolkata]');\n expect(cal.timezone).to.equal('Asia/Kolkata');\n const detail = await applyAndCapture(el, cal);\n // offset recomputed from the IANA zone, NOT taken from the (wrong) bracket\n expect(detail.value).to.equal('2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]');\n // instant uses the true +05:30 offset → 09:00:05.250Z (would be 05:30:05.250Z if +09:00 were used)\n expect(detail.localTimezoneValue.getTime()).to.equal(Date.UTC(2026, 5, 15, 9, 0, 5, 250));\n });\n });\n\n // ── I7: invalid / unsupported timezone ───────────────────────────────────\n describe('I7. invalid timezone falls back to UTC (wall-clock preserved)', () => {\n it('I7a. Mars/Phobos → UTC, digits kept, instant treated as UTC', async () => {\n const { el, cal } = await presetWrapper('2026-06-15T14:30:05.250[GMT+05:30 Mars/Phobos]');\n expect(el.timezone).to.equal('UTC');\n expect(cal.timezone).to.equal('UTC');\n expect(cal.tpHours).to.equal(14);\n expect(cal.tpMinutes).to.equal(30);\n const detail = await applyAndCapture(el, cal);\n // UTC offset, and the instant equals the wall-clock read as UTC\n expect(detail.value).to.equal('2026-06-15T14:30:05.250[GMT+00:00 UTC]');\n expect(detail.localTimezoneValue.getTime()).to.equal(Date.UTC(2026, 5, 15, 14, 30, 5, 250));\n });\n });\n\n // ── I8: input methods ────────────────────────────────────────────────────\n describe('I8. input methods all seed identically', () => {\n const RAW = '2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]';\n const expectSeeded = (cal: any, el: NileDateTimePicker) => {\n expect(cal.timezone).to.equal('Asia/Kolkata');\n expect(cal.tpHours).to.equal(14);\n expect(cal.tpMinutes).to.equal(30);\n expect(cal.tpSeconds).to.equal(5);\n expect(cal.tpMilliseconds).to.equal(250);\n expect(triggerInput(el).value).to.equal('2026-06-15 - 14:30:05.250 - Asia/Kolkata');\n };\n\n it('I8a. via the HTML value attribute', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker dateFormat=\"YYYY-MM-DD\" value=\"${RAW}\"></nile-date-time-picker>`\n );\n const cal = await settle2(el);\n expectSeeded(cal, el);\n });\n\n it('I8b. via the JS value property', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker dateFormat=\"YYYY-MM-DD\"></nile-date-time-picker>`\n );\n el.value = RAW;\n const cal = await settle2(el);\n expectSeeded(cal, el);\n });\n\n it('I8c. a value captured from nile-change re-seeds an identical picker', async () => {\n const src = await presetWrapper(RAW);\n const emitted = await applyAndCapture(src.el, src.cal);\n // feed the emitted value back into a fresh picker\n const el2 = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker dateFormat=\"YYYY-MM-DD\"></nile-date-time-picker>`\n );\n el2.value = emitted.value;\n const cal2 = await settle2(el2);\n expectSeeded(cal2, el2);\n const again = await applyAndCapture(el2, cal2);\n expect(again.value).to.equal(emitted.value);\n expect(again.localTimezoneValue.getTime()).to.equal(emitted.localTimezoneValue.getTime());\n });\n });\n\n // ── I9: full emission correctness ────────────────────────────────────────\n describe('I9. emission correctness (all representations agree on one instant)', () => {\n it('I9a. detail.value / timezone / localTimezoneValue and public props are consistent', async () => {\n const { el, cal } = await presetWrapper('2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]');\n const detail = await applyAndCapture(el, cal);\n\n // 1) emitted payload\n expect(detail.value).to.equal('2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]');\n expect(detail.timezone).to.equal('Asia/Kolkata');\n const instMs = Date.UTC(2026, 5, 15, 9, 0, 5, 250);\n expect(detail.localTimezoneValue.getTime()).to.equal(instMs);\n\n // 2) the three representations describe the SAME instant:\n // localTimezoneValue rendered back in the zone === the wall-clock digits\n const back = new Intl.DateTimeFormat('en-CA', {\n timeZone: 'Asia/Kolkata', hour12: false,\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit',\n }).formatToParts(detail.localTimezoneValue);\n const g = (t: string) => back.find(p => p.type === t)!.value;\n expect(`${g('year')}-${g('month')}-${g('day')} ${g('hour')}:${g('minute')}:${g('second')}`)\n .to.equal('2026-06-15 14:30:05');\n\n // 3) public component state reflects the selection\n expect(el.timezone).to.equal('Asia/Kolkata');\n expect(cal.timezone).to.equal('Asia/Kolkata');\n expect(cal.value.getDate()).to.equal(15);\n expect(cal.tpHours).to.equal(14);\n });\n });\n });\n\n /**\n * ── J. DST spring-forward gap regression ───────────────────────────────────\n *\n * Does `detail.value` (the zone-encoded string) agree with\n * `detail.localTimezoneValue` (the emitted instant)?\n *\n * Input under test: wall-clock 2026-03-08 02:30:00.000, America/New_York.\n * US DST 2026 spring-forward: 02:00 EST(−05:00) → 03:00 EDT(−04:00) at 07:00Z.\n * Local times in [02:00, 03:00) DO NOT EXIST. 02:30 is in that gap.\n *\n * Two candidate instants for \"02:30\":\n * interpret with EST(−05:00): 02:30 + 05:00 = 07:30Z (renders 03:30 EDT — \"compatible/later\")\n * interpret with EDT(−04:00): 02:30 + 04:00 = 06:30Z (renders 01:30 EST — \"earlier\")\n *\n * A CORRECT representation must be internally consistent:\n * parse(value.wallDigits, value.bracketOffset) === localTimezoneValue\n *\n * This consistency was once broken (the value carried −05:00 while the instant\n * was 06:30Z). J3 is the guard that keeps it fixed.\n */\n describe('J. DST gap regression (2026-03-08 02:30 America/New_York)', () => {\n const NY = 'America/New_York';\n\n const calFixture = async () => {\n const cal = await fixture<NileCalendar>(\n html`<nile-calendar variant=\"date-time-picker\" dateFormat=\"YYYY-MM-DD\"></nile-calendar>`\n );\n await cal.updateComplete;\n return cal;\n };\n\n const pickAndApply = async (\n cal: NileCalendar, y: number, mo1: number, d: number,\n hh: number, mm: number, ss: number, ms: number, zone: string\n ) => {\n (cal as any).value = new Date(y, mo1 - 1, d);\n (cal as any).tpHours = hh; (cal as any).tpMinutes = mm;\n (cal as any).tpSeconds = ss; (cal as any).tpMilliseconds = ms;\n cal.timezone = zone;\n await cal.updateComplete;\n let detail: any = null;\n cal.addEventListener('nile-change', ((e: CustomEvent) => (detail = e.detail)) as EventListener, { once: true });\n (cal.shadowRoot!.querySelector('.apply-button') as HTMLElement).click();\n return detail;\n };\n\n // Parse \"YYYY-MM-DDTHH:mm:ss.SSS[GMT±HH:MM Zone]\" as an offset-datetime →\n // absolute epoch ms. Independent of the component's own parser.\n const instantFromValue = (value: string): number => {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d{3})\\[GMT([+-])(\\d{2}):(\\d{2}) /.exec(value);\n if (!m) throw new Error('unparseable value: ' + value);\n const [, Y, Mo, D, H, Mi, S, MS, sign, oh, om] = m;\n const wallAsUTC = Date.UTC(+Y, +Mo - 1, +D, +H, +Mi, +S, +MS);\n const offMs = (sign === '-' ? -1 : 1) * ((+oh) * 3600000 + (+om) * 60000);\n return wallAsUTC - offMs; // instant = wallClock(as UTC) − offset\n };\n\n // AUTHORITATIVE candidate instants (hand-derived; cross-checked below).\n const INSTANT_EARLIER = Date.UTC(2026, 2, 8, 6, 30, 0, 0); // 06:30Z (EDT-interpretation)\n const INSTANT_COMPATIBLE = Date.UTC(2026, 2, 8, 7, 30, 0, 0); // 07:30Z (EST-interpretation)\n\n it('J1. cross-check the two candidate instants against Temporal (authoritative), if present', () => {\n // @ts-ignore — Temporal may not be on the lib typings\n const T = (globalThis as any).Temporal;\n if (!T) { console.warn('[dst-gap] Temporal unavailable; using hand-derived instants'); return; }\n const pdt = T.PlainDateTime.from('2026-03-08T02:30:00');\n const earlier = pdt.toZonedDateTime(NY, { disambiguation: 'earlier' });\n const compatible = pdt.toZonedDateTime(NY, { disambiguation: 'compatible' });\n expect(Number(earlier.epochMilliseconds)).to.equal(INSTANT_EARLIER);\n expect(Number(compatible.epochMilliseconds)).to.equal(INSTANT_COMPATIBLE);\n // Temporal 'earlier' reports offset −05:00 and resolves the wall time to 01:30\n expect(earlier.offset).to.equal('-05:00');\n expect(earlier.hour).to.equal(1);\n expect(earlier.minute).to.equal(30);\n });\n\n it('J2. INSTANT is a valid disambiguation: localTimezoneValue == Temporal \"earlier\" (06:30Z)', async () => {\n const cal = await calFixture();\n const detail = await pickAndApply(cal, 2026, 3, 8, 2, 30, 0, 0, NY);\n // The chosen instant itself is not in question — it equals a legitimate\n // Temporal disambiguation ('earlier').\n expect(detail.localTimezoneValue.getTime()).to.equal(INSTANT_EARLIER);\n });\n\n it('J3. GUARD: value bracket offset is CONSISTENT with localTimezoneValue', async () => {\n const cal = await calFixture();\n const detail = await pickAndApply(cal, 2026, 3, 8, 2, 30, 0, 0, NY);\n // The value string and the emitted instant must denote the SAME moment.\n expect(\n instantFromValue(detail.value),\n `value=\"${detail.value}\" must denote the same instant as localTimezoneValue`\n ).to.equal(detail.localTimezoneValue.getTime());\n });\n\n // Guard: normal + fall-back times are ALREADY consistent and must stay so.\n /**\n * HOST-timezone regression (distinct from J1–J3, which vary the VALUE's zone).\n *\n * `new Date(y, m, d, h, …)` interprets its arguments in the HOST's zone. If that\n * wall clock does not exist locally — a spring-forward gap — the constructor\n * silently slides it forward. Parsing a zoned value through such a Date therefore\n * corrupts it based on where the user's machine is, which has nothing to do with\n * the value's own zone:\n *\n * host Asia/Calcutta : new Date(2026,2,8,2,30) → 02:30 ✅\n * host America/New_York: new Date(2026,2,8,2,30) → 03:30 ❌ an hour appears\n *\n * Before the fix the trigger showed 02:30 while the panel held 03:30 and Apply\n * emitted 03:30 — a silent shift that the correct-looking input concealed.\n *\n * NOTE: this test can only FAIL on a host whose zone has a DST gap. On this repo's\n * usual host (IST, which has never observed DST) it passes either way, so run the\n * suite under `TZ=America/New_York` to give it teeth.\n */\n it('J3b. HOST DST gap does not shift a zoned preset (panel + payload keep 02:30)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .dateFormat=${'YYYY-MM-DD'}></nile-date-time-picker>`\n );\n el.value = '2026-03-08T02:30:00.000[GMT-05:00 America/New_York]';\n const cal = await settle2(el);\n await triggerInput(el).updateComplete;\n\n // 1) the panel holds the wall clock the value named, not a host-normalized one\n expect(cal.tpHours, 'panel hours').to.equal(2);\n expect(cal.tpMinutes, 'panel minutes').to.equal(30);\n expect(cal.value.getDate(), 'panel day').to.equal(8);\n expect(cal.value.getMonth(), 'panel month').to.equal(2);\n\n // 2) the trigger agrees\n expect(triggerInput(el).value).to.contain('2026-03-08 - 02:30:00.000');\n\n // 3) and Apply emits that same wall clock — the shift used to surface here\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n applyBtn(cal).click();\n expect(detail).to.not.be.null;\n // Assert on the INSTANT, not the digits: the emitted wall clock is now read\n // back out of the resolved instant, so a gap time renders as 01:30 −05:00.\n // A host-zone shift (the regression this guards) would move the instant to\n // 07:30Z and still fail here.\n expect(detail.localTimezoneValue.getTime(), 'resolved instant').to.equal(\n Date.UTC(2026, 2, 8, 6, 30, 0, 0)\n );\n expect(instantFromValue(detail.value), 'value must denote that instant').to.equal(\n detail.localTimezoneValue.getTime()\n );\n expect(detail.value).to.match(/\\[GMT[+-]\\d{2}:\\d{2} America\\/New_York\\]$/);\n });\n\n it('J4. GUARD: a normal time stays consistent (IST 14:30 → 09:00Z)', async () => {\n const cal = await calFixture();\n const detail = await pickAndApply(cal, 2026, 6, 15, 14, 30, 5, 250, 'Asia/Kolkata');\n expect(instantFromValue(detail.value)).to.equal(detail.localTimezoneValue.getTime());\n expect(detail.localTimezoneValue.getTime()).to.equal(Date.UTC(2026, 5, 15, 9, 0, 5, 250));\n });\n\n it('J5. GUARD: a fall-back ambiguous time stays consistent (01:30 Nov-1 → 05:30Z)', async () => {\n const cal = await calFixture();\n const detail = await pickAndApply(cal, 2026, 11, 1, 1, 30, 0, 0, NY);\n expect(instantFromValue(detail.value)).to.equal(detail.localTimezoneValue.getTime());\n expect(detail.localTimezoneValue.getTime()).to.equal(Date.UTC(2026, 10, 1, 5, 30, 0, 0));\n });\n\n /**\n * J2–J5 cover the OUTBOUND path (pick → emit). J6–J8 cover the INBOUND path\n * (`value` attribute → trigger text), which used to build the parsed wall clock\n * with the host-local `Date` constructor. On a host whose own zone has a gap at\n * that wall time, 02:30 normalized forward to 03:30 and the trigger displayed a\n * time the caller never supplied.\n *\n * The asserted invariant — displayed wall clock == supplied wall clock — holds in\n * EVERY host zone, so these pass anywhere; they only *catch* the regression when\n * the suite runs under a host zone with a matching gap (e.g. TZ=America/New_York).\n * J8 reports the host zone so the run makes clear which case was exercised.\n */\n it('J6. GUARD: a zone-encoded preset in a DST gap seeds the SUPPLIED wall clock', async () => {\n const el = await fixture<NileDateTimePicker>(html`<nile-date-time-picker\n dateFormat=\"YYYY-MM-DD\"\n value=\"2026-03-08T02:30:00.000[GMT-05:00 America/New_York]\"\n ></nile-date-time-picker>`);\n await settle2(el);\n const text = String(triggerInput(el).value ?? '');\n expect(text, 'date part').to.contain('2026-03-08');\n expect(text, 'supplied wall clock must survive verbatim').to.contain('02:30');\n expect(text, 'must not normalize the gap time forward to 03:30').to.not.contain('03:30');\n });\n\n it('J7. GUARD: a bare offset-less preset in a DST gap seeds the SUPPLIED wall clock', async () => {\n const el = await fixture<NileDateTimePicker>(html`<nile-date-time-picker\n dateFormat=\"YYYY-MM-DD\"\n value=\"2026-03-08T02:30:00.000\"\n ></nile-date-time-picker>`);\n await settle2(el);\n const text = String(triggerInput(el).value ?? '');\n expect(text, 'date part').to.contain('2026-03-08');\n expect(text, 'supplied wall clock must survive verbatim').to.contain('02:30');\n expect(text, 'must not normalize the gap time forward to 03:30').to.not.contain('03:30');\n });\n\n it('J8. reports the host zone this run exercised (informational)', () => {\n const hostZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n const gapShifts = new Date(2026, 2, 8, 2, 30, 0, 0).getHours() !== 2;\n console.warn(\n `[dst-gap] host zone=${hostZone}; local Date shifts 2026-03-08 02:30 => ${gapShifts}` +\n (gapShifts ? ' (J6/J7 actively guard the regression)' : ' (J6/J7 pass trivially here)')\n );\n expect(hostZone).to.be.a('string');\n });\n });\n\n /**\n * K. `unixEpoch` is the single source of truth for the emitted instant.\n *\n * `handleApply` resolves the picked wall-clock to ONE instant and renders\n * `value` back out of it. These tests pin the resulting invariant — every\n * field of the payload (`value` digits, `value` bracket offset, `unixEpoch`,\n * `localTimezoneValue`) denotes the same moment — and the one place where\n * that changed observable output: spring-forward gaps.\n *\n * The oracles here are independent of the component: `instantFromValue`\n * re-derives an epoch from the string by plain offset arithmetic, and\n * `offsetMinutesRef` reads the zone offset via Intl 'longOffset' — a\n * different code path from the component's formatToParts subtraction.\n */\n describe('K. unixEpoch as the single source of truth', () => {\n const calFixture = async () => {\n const cal = await fixture<NileCalendar>(\n html`<nile-calendar variant=\"date-time-picker\" dateFormat=\"YYYY-MM-DD\"></nile-calendar>`\n );\n await cal.updateComplete;\n return cal;\n };\n\n const pickAndApply = async (\n cal: NileCalendar, y: number, mo1: number, d: number,\n hh: number, mm: number, ss: number, ms: number, zone: string\n ) => {\n (cal as any).value = new Date(y, mo1 - 1, d);\n (cal as any).tpHours = hh; (cal as any).tpMinutes = mm;\n (cal as any).tpSeconds = ss; (cal as any).tpMilliseconds = ms;\n cal.timezone = zone;\n await cal.updateComplete;\n let detail: any = null;\n cal.addEventListener('nile-change', ((e: CustomEvent) => (detail = e.detail)) as EventListener, { once: true });\n (cal.shadowRoot!.querySelector('.apply-button') as HTMLElement).click();\n return detail;\n };\n\n // \"YYYY-MM-DDTHH:mm:ss.SSS[GMT±HH:MM Zone]\" → epoch ms, by offset arithmetic only.\n const instantFromValue = (value: string): number => {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d{3})\\[GMT([+-])(\\d{2}):(\\d{2}) /.exec(value);\n if (!m) throw new Error('unparseable value: ' + value);\n const [, Y, Mo, D, H, Mi, S, MS, sign, oh, om] = m;\n const offMs = (sign === '-' ? -1 : 1) * ((+oh) * 3600000 + (+om) * 60000);\n return Date.UTC(+Y, +Mo - 1, +D, +H, +Mi, +S, +MS) - offMs;\n };\n\n const bracketOffsetMinutes = (value: string): number => {\n const m = /\\[GMT([+-])(\\d{2}):(\\d{2}) /.exec(value)!;\n return (m[1] === '-' ? -1 : 1) * (Number(m[2]) * 60 + Number(m[3]));\n };\n\n const zoneOf = (value: string): string => /\\[GMT[+-]\\d{2}:\\d{2} ([^\\]]+)\\]$/.exec(value)![1];\n\n // independent offset oracle — Intl 'longOffset', not formatToParts subtraction\n const offsetMinutesRef = (utcMs: number, timeZone: string): number => {\n const s = new Intl.DateTimeFormat('en-US', { timeZone, timeZoneName: 'longOffset', hour12: false })\n .formatToParts(new Date(utcMs))\n .find(p => p.type === 'timeZoneName')!.value;\n const m = /GMT([+-])(\\d{1,2})(?::(\\d{2}))?/.exec(s);\n if (!m) return 0; // bare \"GMT\" == +00:00\n return (m[1] === '-' ? -1 : 1) * (Number(m[2]) * 60 + Number(m[3] ?? 0));\n };\n\n /**\n * A spread of zones the format has to survive: whole-hour, half-hour,\n * quarter-hour, negative, DST-observing (both sides of the transition),\n * and both DST edge cases. `ms` is non-zero throughout — the offset lookup\n * used to leak the sub-second remainder and report +05:29 for Kolkata.\n */\n const CASES: Array<[string, number, number, number, number, number, number, number, string]> = [\n ['UTC', 2026, 6, 15, 12, 0, 0, 0, 'UTC'],\n ['half-hour +05:30', 2026, 6, 15, 14, 30, 5, 250, 'Asia/Kolkata'],\n ['quarter-hour +05:45', 2026, 6, 15, 12, 0, 0, 999, 'Asia/Kathmandu'],\n ['quarter-hour +08:45', 2026, 6, 15, 23, 59, 59, 123, 'Australia/Eucla'],\n ['half-hour -03:30', 2026, 1, 15, 8, 15, 0, 1, 'America/St_Johns'],\n ['negative whole hour', 2026, 6, 15, 0, 0, 0, 500, 'Pacific/Honolulu'],\n ['DST zone, winter side', 2026, 1, 15, 12, 0, 0, 250, 'America/New_York'],\n ['DST zone, summer side', 2026, 7, 15, 12, 0, 0, 250, 'America/New_York'],\n ['spring-forward GAP', 2026, 3, 8, 2, 30, 0, 250, 'America/New_York'],\n ['fall-back AMBIGUOUS', 2026, 11, 1, 1, 30, 0, 250, 'America/New_York'],\n ['London spring gap', 2026, 3, 29, 1, 30, 0, 0, 'Europe/London'],\n ['Lord Howe 30-min DST', 2026, 10, 4, 2, 30, 0, 0, 'Australia/Lord_Howe'],\n ['southern-hemisphere DST', 2026, 12, 20, 10, 0, 0, 0, 'Pacific/Auckland'],\n ];\n\n it('K1. value, unixEpoch and localTimezoneValue all denote the SAME instant', async () => {\n const cal = await calFixture();\n for (const [label, y, mo, d, h, mi, s, ms, zone] of CASES) {\n const detail = await pickAndApply(cal, y, mo, d, h, mi, s, ms, zone);\n expect(detail.unixEpoch, `${label}: unixEpoch is a number`).to.be.a('number');\n expect(detail.localTimezoneValue.getTime(), `${label}: localTimezoneValue === unixEpoch`)\n .to.equal(detail.unixEpoch);\n expect(instantFromValue(detail.value), `${label}: value=\"${detail.value}\" must reconstruct to unixEpoch`)\n .to.equal(detail.unixEpoch);\n }\n });\n\n it('K2. the bracket offset is the zone\\'s TRUE offset at that epoch', async () => {\n const cal = await calFixture();\n for (const [label, y, mo, d, h, mi, s, ms, zone] of CASES) {\n const detail = await pickAndApply(cal, y, mo, d, h, mi, s, ms, zone);\n expect(zoneOf(detail.value), `${label}: zone name`).to.equal(zone);\n // cross-checked against a second, independent Intl implementation\n expect(bracketOffsetMinutes(detail.value), `${label}: offset in \"${detail.value}\"`)\n .to.equal(offsetMinutesRef(detail.unixEpoch, zone));\n }\n });\n\n it('K3. the wall-clock digits are what the zone actually reads at that epoch', async () => {\n const cal = await calFixture();\n for (const [label, y, mo, d, h, mi, s, ms, zone] of CASES) {\n const detail = await pickAndApply(cal, y, mo, d, h, mi, s, ms, zone);\n const shown = new Intl.DateTimeFormat('en-CA', {\n timeZone: zone, hourCycle: 'h23',\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit',\n }).formatToParts(new Date(detail.unixEpoch))\n .reduce((acc: Record<string, string>, p) => (p.type === 'literal' ? acc : ((acc[p.type] = p.value), acc)), {});\n expect(detail.value, `${label}: digits must match the zone's own reading`).to.equal(\n `${shown.year}-${shown.month}-${shown.day}T${shown.hour}:${shown.minute}:${shown.second}` +\n `.${String(ms).padStart(3, '0')}[GMT${(() => {\n const om = offsetMinutesRef(detail.unixEpoch, zone);\n const sg = om >= 0 ? '+' : '-', a = Math.abs(om);\n return `${sg}${String(Math.floor(a / 60)).padStart(2, '0')}:${String(a % 60).padStart(2, '0')}`;\n })()} ${zone}]`\n );\n }\n });\n\n it('K4. milliseconds survive the epoch round-trip (the +05:29 regression)', async () => {\n const cal = await calFixture();\n for (const ms of [0, 1, 250, 500, 999]) {\n const detail = await pickAndApply(cal, 2026, 6, 15, 14, 30, 5, ms, 'Asia/Kolkata');\n expect(detail.value, `ms=${ms}`).to.equal(\n `2026-06-15T14:30:05.${String(ms).padStart(3, '0')}[GMT+05:30 Asia/Kolkata]`\n );\n expect(detail.unixEpoch, `ms=${ms}`).to.equal(Date.UTC(2026, 5, 15, 9, 0, 5, ms));\n }\n });\n\n it('K5. spring-forward gap emits the RESOLVED wall clock, not the impossible picked one', async () => {\n const cal = await calFixture();\n // 2026-03-08 02:30 does not exist in New York (02:00 EST jumps to 03:00 EDT).\n const detail = await pickAndApply(cal, 2026, 3, 8, 2, 30, 0, 0, 'America/New_York');\n expect(detail.unixEpoch, 'instant is unchanged by this refactor')\n .to.equal(Date.UTC(2026, 2, 8, 6, 30, 0, 0));\n // 01:30 −05:00 is what the zone reads at 06:30Z, and matches Temporal's\n // 'earlier' disambiguation (see J1). The old output was 02:30 −04:00: the\n // same instant, but a wall clock New York never displays.\n expect(detail.value).to.equal('2026-03-08T01:30:00.000[GMT-05:00 America/New_York]');\n expect(detail.value, 'must not emit an hour the zone skipped').to.not.contain('T02:30');\n });\n\n it('K6. fall-back ambiguity is unchanged (first/EDT occurrence, 01:30 −04:00)', async () => {\n const cal = await calFixture();\n const detail = await pickAndApply(cal, 2026, 11, 1, 1, 30, 0, 0, 'America/New_York');\n expect(detail.unixEpoch).to.equal(Date.UTC(2026, 10, 1, 5, 30, 0, 0));\n expect(detail.value).to.equal('2026-11-01T01:30:00.000[GMT-04:00 America/New_York]');\n });\n\n it('K7. normal (non-DST-edge) output is byte-for-byte unchanged', async () => {\n const cal = await calFixture();\n const expected: Array<[string, number[], string, string]> = [\n ['UTC', [2026, 6, 15, 12, 0, 0, 0], 'UTC', '2026-06-15T12:00:00.000[GMT+00:00 UTC]'],\n ['Kolkata', [2026, 6, 15, 14, 30, 5, 250], 'Asia/Kolkata', '2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]'],\n ['Kathmandu', [2026, 6, 15, 12, 0, 0, 0], 'Asia/Kathmandu', '2026-06-15T12:00:00.000[GMT+05:45 Asia/Kathmandu]'],\n ['NY winter', [2026, 1, 15, 12, 0, 0, 0], 'America/New_York', '2026-01-15T12:00:00.000[GMT-05:00 America/New_York]'],\n ['NY summer', [2026, 7, 15, 12, 0, 0, 0], 'America/New_York', '2026-07-15T12:00:00.000[GMT-04:00 America/New_York]'],\n ['Eucla', [2026, 6, 15, 23, 59, 59, 123], 'Australia/Eucla', '2026-06-15T23:59:59.123[GMT+08:45 Australia/Eucla]'],\n ['midnight', [2026, 6, 15, 0, 0, 0, 0], 'UTC', '2026-06-15T00:00:00.000[GMT+00:00 UTC]'],\n ];\n for (const [label, [y, mo, d, h, mi, s, ms], zone, want] of expected) {\n const detail = await pickAndApply(cal, y, mo, d, h, mi, s, ms, zone);\n expect(detail.value, label).to.equal(want);\n }\n });\n\n it('K8. an emitted gap value fed back in is idempotent (instant + string stable)', async () => {\n const cal = await calFixture();\n const first = await pickAndApply(cal, 2026, 3, 8, 2, 30, 0, 0, 'America/New_York');\n\n const back = await fixture<NileCalendar>(\n html`<nile-calendar variant=\"date-time-picker\" value=\"${first.value}\"></nile-calendar>`\n );\n await back.updateComplete;\n let again: any = null;\n back.addEventListener('nile-change', ((e: CustomEvent) => (again = e.detail)) as EventListener, { once: true });\n (back.shadowRoot!.querySelector('.apply-button') as HTMLElement).click();\n\n expect(again.unixEpoch, 'instant must survive the round-trip').to.equal(first.unixEpoch);\n expect(again.value, 'string must be a fixed point').to.equal(first.value);\n });\n });\n\n /**\n * ── L. C-1 — INSTANT-BEARING `value` INPUTS ─────────────────────────────────\n *\n * APPROVED CONTRACT (deliberate, and distinct from the wall-clock contract in\n * section I):\n *\n * An ISO-8601 value carrying an explicit UTC designator (`Z`) or a numeric\n * offset (`+05:30`) names ONE ABSOLUTE INSTANT. Its epoch must survive:\n * - the browser/host timezone,\n * - the selected picker timezone,\n * - the order `value` and `timezone` are assigned in.\n * The selected timezone changes how that instant is DISPLAYED, not which\n * instant it is.\n *\n * Once the user edits the date or a time field, the loaded instant stops\n * being authoritative and the existing wall-clock → instant pipeline takes\n * over — because a user-entered wall clock means \"when the clock in this\n * zone reads this\", which is a different thing from \"this instant\".\n *\n * An offset-LESS datetime (`2026-06-15T14:30:05.250`) is still a wall clock\n * and is deliberately unchanged here (that is C-2, tracked separately).\n *\n * INDEPENDENT REFERENCE\n * Every expectation below is a hard `Date.UTC(...)` constant or a digit\n * string derived from published, fixed facts — IST is always +05:30,\n * Kathmandu +05:45, Kiritimati +14:00, and US/Eastern is −05:00 (EST) in\n * winter / −04:00 (EDT) in summer with the 2026 transitions on Mar 8 and\n * Nov 1. Nothing is compared against the component's own arithmetic.\n *\n * HOST-INDEPENDENCE\n * These assertions hold under every host zone, which is the point. Run the\n * suite under TZ=UTC, TZ=America/New_York, TZ=Asia/Kolkata and\n * TZ=Pacific/Auckland; a host-zone leak fails the epoch assertions.\n */\n describe('L. C-1 — instant-bearing value inputs', () => {\n // 2026-06-15T14:30:05.250Z\n const Z_ISO = '2026-06-15T14:30:05.250Z';\n const Z_EPOCH = Date.UTC(2026, 5, 15, 14, 30, 5, 250);\n\n // America/New_York 2026-11-01: EDT→EST at 06:00Z, so local 01:30 happens twice.\n const NY = 'America/New_York';\n const NY_FIRST_0130 = Date.UTC(2026, 10, 1, 5, 30); // 01:30 −04:00 (EDT)\n const NY_SECOND_0130 = Date.UTC(2026, 10, 1, 6, 30); // 01:30 −05:00 (EST)\n\n const isoFixture = (value?: string, timezone?: string) =>\n fixture<NileDateTimePicker>(html`\n <nile-date-time-picker\n .dateFormat=${'YYYY-MM-DD'}\n .startYear=${1900}\n .endYear=${2500}\n timezone=${timezone ?? 'UTC'}\n .value=${value ?? null}\n ></nile-date-time-picker>\n `);\n\n /** the panel's wall clock, as digits, independent of any component helper */\n const panelWall = (cal: any) => {\n const p = (n: number, l = 2) => String(n).padStart(l, '0');\n return `${cal.value.getFullYear()}-${p(cal.value.getMonth() + 1)}-${p(cal.value.getDate())}` +\n ` ${p(cal.tpHours)}:${p(cal.tpMinutes)}:${p(cal.tpSeconds)}.${p(cal.tpMilliseconds, 3)}`;\n };\n\n const applyAndCapture = async (el: NileDateTimePicker, cal: any) => {\n let detail: any = null;\n const on = ((e: CustomEvent) => { detail = e.detail; }) as EventListener;\n el.addEventListener('nile-change', on);\n applyBtn(cal).click();\n await el.updateComplete;\n el.removeEventListener('nile-change', on);\n return detail;\n };\n\n /**\n * Edit a time field (index: 0=h 1=m 2=s 3=ms). Same mechanism the calendar's\n * own suite uses for V25–V30 — driving the native input's focus here makes\n * the field and the panel re-render each other until `updateComplete` stops\n * settling, so go through the component's `nile-focus`/`nile-input` contract.\n */\n const typeTimeField = async (cal: any, index: number, raw: string) => {\n const field = cal.shadowRoot!.querySelectorAll('.tp-time-field')[index] as any;\n field.dispatchEvent(new CustomEvent('nile-focus', { detail: {} }));\n field.value = raw;\n field.dispatchEvent(new CustomEvent('nile-input', { detail: { value: raw } }));\n await cal.updateComplete;\n return field;\n };\n\n // ── R1 ──────────────────────────────────────────────────────────────────\n it('L1. a `Z` value resolves to its exact instant, whatever the host zone', async () => {\n const el = await isoFixture(Z_ISO, 'UTC');\n const cal = await settle2(el);\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, 'exact instant').to.equal(Z_EPOCH);\n expect(detail.localTimezoneValue.getTime()).to.equal(Z_EPOCH);\n expect(detail.value).to.equal('2026-06-15T14:30:05.250[GMT+00:00 UTC]');\n });\n\n // ── R2 ──────────────────────────────────────────────────────────────────\n it('L2. the selected timezone changes the DISPLAY, not the instant (IST +05:30)', async () => {\n const el = await isoFixture(Z_ISO, 'Asia/Kolkata');\n const cal = await settle2(el);\n await triggerInput(el).updateComplete;\n // 14:30:05.250Z read in IST (+05:30) is 20:00:05.250 the same day\n expect(panelWall(cal), 'panel').to.equal('2026-06-15 20:00:05.250');\n expect(triggerInput(el).value, 'trigger').to.equal('2026-06-15 - 20:00:05.250 - Asia/Kolkata');\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, 'instant unchanged by the display zone').to.equal(Z_EPOCH);\n expect(detail.value).to.equal('2026-06-15T20:00:05.250[GMT+05:30 Asia/Kolkata]');\n });\n\n it('L2b. a +14:00 zone rolls the displayed DATE forward, still the same instant', async () => {\n const el = await isoFixture(Z_ISO, 'Pacific/Kiritimati');\n const cal = await settle2(el);\n // 14:30:05.250Z read at +14:00 is 04:30:05.250 on the NEXT day\n expect(panelWall(cal)).to.equal('2026-06-16 04:30:05.250');\n expect(cal.currentMonth, 'displayed month follows the rolled date').to.equal(5);\n expect(cal.currentYear).to.equal(2026);\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch).to.equal(Z_EPOCH);\n });\n\n // ── R3 ──────────────────────────────────────────────────────────────────\n it('L3. a numeric offset names an instant and is never applied twice', async () => {\n // 14:30:05.250+05:30 is 09:00:05.250Z\n const EPOCH = Date.UTC(2026, 5, 15, 9, 0, 5, 250);\n for (const zone of ['UTC', 'Asia/Kolkata', NY]) {\n const el = await isoFixture('2026-06-15T14:30:05.250+05:30', zone);\n const cal = await settle2(el);\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, `+05:30 under ${zone}`).to.equal(EPOCH);\n }\n });\n\n it('L3b. a negative numeric offset behaves the same', async () => {\n // 14:30:05.250-08:00 is 22:30:05.250Z\n const EPOCH = Date.UTC(2026, 5, 15, 22, 30, 5, 250);\n for (const zone of ['UTC', 'Asia/Tokyo']) {\n const el = await isoFixture('2026-06-15T14:30:05.250-08:00', zone);\n const cal = await settle2(el);\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, `-08:00 under ${zone}`).to.equal(EPOCH);\n }\n });\n\n // ── R4 ──────────────────────────────────────────────────────────────────\n it('L4. all four value/timezone assignment orders converge on one state', async () => {\n // 14:30:05.250Z read in JST (+09:00) is 23:30:05.250 the same day\n const WANT_WALL = '2026-06-15 23:30:05.250';\n const seen: Array<{ how: string; wall: string; epoch: number }> = [];\n\n // (a) both as attributes/properties at construction\n {\n const el = await isoFixture(Z_ISO, 'Asia/Tokyo');\n const cal = await settle2(el);\n seen.push({ how: 'declarative', wall: panelWall(cal), epoch: (await applyAndCapture(el, cal)).unixEpoch });\n }\n // (b) timezone first, then value\n {\n const el = await isoFixture(undefined, 'Asia/Tokyo');\n await settle(el);\n el.value = Z_ISO;\n const cal = await settle2(el);\n seen.push({ how: 'tz-then-value', wall: panelWall(cal), epoch: (await applyAndCapture(el, cal)).unixEpoch });\n }\n // (c) value and timezone in the same update\n {\n const el = await isoFixture();\n await settle(el);\n el.value = Z_ISO;\n el.timezone = 'Asia/Tokyo';\n const cal = await settle2(el);\n seen.push({ how: 'same-update', wall: panelWall(cal), epoch: (await applyAndCapture(el, cal)).unixEpoch });\n }\n // (d) value, settled, THEN timezone — the ordering hazard\n {\n const el = await isoFixture();\n await settle(el);\n el.value = Z_ISO;\n await settle2(el);\n el.timezone = 'Asia/Tokyo';\n const cal = await settle2(el);\n seen.push({ how: 'tz-after-settle', wall: panelWall(cal), epoch: (await applyAndCapture(el, cal)).unixEpoch });\n }\n\n for (const s of seen) {\n expect(s.wall, `${s.how} panel`).to.equal(WANT_WALL);\n expect(s.epoch, `${s.how} epoch`).to.equal(Z_EPOCH);\n }\n });\n\n // ── R5 ──────────────────────────────────────────────────────────────────\n it('L5. the ambiguous fall-back hour keeps the EXACT occurrence it was given', async () => {\n const el = await isoFixture('2026-11-01T06:30:00.000Z', NY);\n const cal = await settle2(el);\n // both occurrences read 01:30 locally; only the instant distinguishes them\n expect(panelWall(cal)).to.equal('2026-11-01 01:30:00.000');\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, 'the SECOND 01:30 (EST) must survive').to.equal(NY_SECOND_0130);\n expect(detail.value).to.equal('2026-11-01T01:30:00.000[GMT-05:00 America/New_York]');\n });\n\n it('L5b. and it survives closing and reopening the panel', async () => {\n const el = await isoFixture('2026-11-01T06:30:00.000Z', NY);\n let cal = await settle2(el);\n el.open = true; await settle(el);\n el.open = false; await settle(el);\n cal = await settle2(el);\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch).to.equal(NY_SECOND_0130);\n });\n\n it('L5c. the FIRST occurrence is equally preserved', async () => {\n const el = await isoFixture('2026-11-01T05:30:00.000Z', NY);\n const cal = await settle2(el);\n expect(panelWall(cal)).to.equal('2026-11-01 01:30:00.000');\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, 'the FIRST 01:30 (EDT)').to.equal(NY_FIRST_0130);\n expect(detail.value).to.equal('2026-11-01T01:30:00.000[GMT-04:00 America/New_York]');\n });\n\n // ── R6 ──────────────────────────────────────────────────────────────────\n it('L6. editing a time field hands control back to the wall-clock pipeline', async () => {\n const el = await isoFixture('2026-11-01T06:30:00.000Z', NY);\n const cal = await settle2(el);\n await typeTimeField(cal, 1, '31'); // minutes 30 → 31\n expect(cal.tpMinutes, 'the edit landed').to.equal(31);\n const detail = await applyAndCapture(el, cal);\n // Deliberately policy-agnostic: C-1 must not pin which occurrence\n // wallClockToInstant picks for an ambiguous 01:31 (that is C-5). What C-1\n // guarantees is that the retained instant no longer decides, and that the\n // emitted instant is the edited wall clock in the selected zone.\n expect(detail.unixEpoch, 'the loaded instant must NOT be reused').to.not.equal(NY_SECOND_0130);\n expect(detail.value).to.contain('2026-11-01T01:31:00.000');\n expect(detail.value).to.match(/\\[GMT-0[45]:00 America\\/New_York\\]$/);\n });\n\n it('L6b. editing the DATE also hands control back', async () => {\n const el = await isoFixture('2026-11-01T06:30:00.000Z', NY);\n const cal = await settle2(el);\n cal.currentYear = 2026; cal.currentMonth = 10;\n await cal.updateComplete;\n const cells = cal.shadowRoot!.querySelectorAll('.day_date:not(.filler)');\n (cells[cells.length - 1] as HTMLElement).click();\n await cal.updateComplete;\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch).to.not.equal(NY_SECOND_0130);\n });\n\n // ── R7 ──────────────────────────────────────────────────────────────────\n it('L7. changing the timezone alone re-displays the instant, it does not reschedule', async () => {\n const el = await isoFixture('2026-11-01T06:30:00.000Z', NY);\n let cal = await settle2(el);\n expect(panelWall(cal)).to.equal('2026-11-01 01:30:00.000');\n cal.timezone = 'Asia/Tokyo';\n await cal.updateComplete;\n await settle2(el);\n // 06:30Z read in JST (+09:00) is 15:30 the same day\n expect(panelWall(cal), 'display follows the new zone').to.equal('2026-11-01 15:30:00.000');\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, 'the instant is unchanged').to.equal(NY_SECOND_0130);\n expect(detail.value).to.equal('2026-11-01T15:30:00.000[GMT+09:00 Asia/Tokyo]');\n });\n\n // ── R8 ──────────────────────────────────────────────────────────────────\n it('L8. milliseconds survive exactly, including in a +05:45 zone', async () => {\n for (const ms of [0, 1, 250, 999]) {\n const iso = `2026-06-15T00:00:00.${String(ms).padStart(3, '0')}Z`;\n const el = await isoFixture(iso, 'Asia/Kathmandu');\n const cal = await settle2(el);\n // 00:00:00.xxxZ read at +05:45 is 05:45:00.xxx the same day\n expect(panelWall(cal), `ms=${ms} panel`).to.equal(\n `2026-06-15 05:45:00.${String(ms).padStart(3, '0')}`\n );\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, `ms=${ms} instant`).to.equal(Date.UTC(2026, 5, 15, 0, 0, 0, ms));\n expect(detail.value, `ms=${ms} bracket`).to.contain('[GMT+05:45 Asia/Kathmandu]');\n }\n });\n\n // ── R9 ──────────────────────────────────────────────────────────────────\n it('L9. the bracketed form keeps its documented behaviour in every rejection case', async () => {\n const cases: Array<[string, string, number]> = [\n // [value, expected emitted value, expected instant]\n // ordinary + self-consistent: unchanged\n ['2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]',\n '2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]', Date.UTC(2026, 5, 15, 9, 0, 5, 250)],\n // wrong offset for the zone: still recomputed from the IANA name (I6a)\n ['2026-06-15T14:30:05.250[GMT+09:00 Asia/Kolkata]',\n '2026-06-15T14:30:05.250[GMT+05:30 Asia/Kolkata]', Date.UTC(2026, 5, 15, 9, 0, 5, 250)],\n // unresolvable zone: still falls back to UTC, wall clock kept (I7a)\n ['2026-06-15T14:30:05.250[GMT+05:30 Mars/Phobos]',\n '2026-06-15T14:30:05.250[GMT+00:00 UTC]', Date.UTC(2026, 5, 15, 14, 30, 5, 250)],\n // impossible day: still clamped to the month length (H1c)\n ['2026-02-31T10:00:00.000[GMT+00:00 UTC]',\n '2026-02-28T10:00:00.000[GMT+00:00 UTC]', Date.UTC(2026, 1, 28, 10, 0, 0, 0)],\n ];\n for (const [value, wantValue, wantEpoch] of cases) {\n const el = await isoFixture(value);\n const cal = await settle2(el);\n const detail = await applyAndCapture(el, cal);\n expect(detail.value, value).to.equal(wantValue);\n expect(detail.unixEpoch, value).to.equal(wantEpoch);\n }\n });\n\n it('L9b. a DST-gap bracketed value still seeds the supplied wall clock (J3b/J6)', async () => {\n const el = await isoFixture('2026-03-08T02:30:00.000[GMT-05:00 America/New_York]');\n const cal = await settle2(el);\n expect(cal.tpHours, 'the supplied 02:30 is kept, not rejected').to.equal(2);\n expect(cal.tpMinutes).to.equal(30);\n const detail = await applyAndCapture(el, cal);\n expect(detail.localTimezoneValue.getTime()).to.equal(Date.UTC(2026, 2, 8, 6, 30, 0, 0));\n });\n\n // ── R10 ─────────────────────────────────────────────────────────────────\n it('L10. controlled round-trip keeps the two 01:30 occurrences DISTINCT', async () => {\n // This is the test the companion bracket-offset handling exists for: the\n // emitted value is the bracketed form, so without honouring a\n // self-consistent bracket offset the second occurrence collapses onto the\n // first on the next page load.\n const runs: Array<{ seedIso: string; want: number }> = [\n { seedIso: '2026-11-01T05:30:00.000Z', want: NY_FIRST_0130 },\n { seedIso: '2026-11-01T06:30:00.000Z', want: NY_SECOND_0130 },\n ];\n const finals: number[] = [];\n for (const { seedIso, want } of runs) {\n const el0 = await isoFixture(seedIso, NY);\n const cal0 = await settle2(el0);\n let emitted = await applyAndCapture(el0, cal0);\n expect(emitted.unixEpoch, `gen0 for ${seedIso}`).to.equal(want);\n\n // three generations of \"store the emitted value, reload, Apply again\"\n for (let gen = 1; gen <= 3; gen++) {\n const el = await isoFixture(emitted.value);\n const cal = await settle2(el);\n emitted = await applyAndCapture(el, cal);\n expect(emitted.unixEpoch, `gen${gen} for ${seedIso}`).to.equal(want);\n }\n finals.push(emitted.unixEpoch);\n }\n expect(finals[0], 'EDT and EST occurrences must not collapse').to.not.equal(finals[1]);\n expect(finals[0]).to.equal(NY_FIRST_0130);\n expect(finals[1]).to.equal(NY_SECOND_0130);\n });\n\n // ── R11 ─────────────────────────────────────────────────────────────────\n it('L11. the DEFAULT calendar variant parses an instant string exactly as published (the nile-date-picker path)', async () => {\n // The default variant (no `variant`) is outside the date-time-picker work and never seeds the time spinners.\n // Its full-ISO strings use standard `new Date(raw)` parsing with no extra host-offset shift (previously\n // `new Date(t - t.getTimezoneOffset() * 60000)`, which moved the day for hosts away from UTC), so the value is\n // the real instant and the day is the host-local day of that instant, on any host.\n const instant = Date.UTC(2027, 0, 1, 2, 0, 0, 0);\n const cal = await fixture<NileCalendar>(\n html`<nile-calendar value=\"2027-01-01T02:00:00.000Z\"></nile-calendar>`\n ) as any;\n await cal.updateComplete;\n expect(cal.variant).to.equal('default');\n expect(cal.tpHours, 'the default variant never seeds the time spinners').to.equal(null);\n // published default: `new Date(raw)` shifted by the host offset (identical to the 2.0.16 calendar)\n const parsed = new Date(instant);\n const published = new Date(parsed.getTime() - parsed.getTimezoneOffset() * 60000);\n expect(cal.value.getTime(), 'published host-offset shift').to.equal(published.getTime());\n });\n\n it('L11b. a date-only range value is a pair of local calendar days (start 00:00:00, end 23:59:59.999), not UTC instants', async () => {\n const cal = await fixture<NileCalendar>(html`\n <nile-calendar\n variant=\"date-time-picker\"\n .range=${true}\n value='{\"startDate\":\"2026-06-10\",\"endDate\":\"2026-06-20\"}'\n ></nile-calendar>\n `) as any;\n await cal.updateComplete;\n expect(cal.startDate).to.be.instanceOf(Date);\n expect(cal.endDate).to.be.instanceOf(Date);\n expect(cal.startDate.getTime()).to.equal(new Date(2026, 5, 10, 0, 0, 0, 0).getTime());\n expect(cal.endDate.getTime()).to.equal(new Date(2026, 5, 20, 23, 59, 59, 999).getTime());\n });\n\n it('L11b2. non-date-only range strings keep their historical parse (new Date(raw))', async () => {\n const cal = await fixture<NileCalendar>(html`\n <nile-calendar\n variant=\"date-time-picker\"\n .range=${true}\n value='{\"startDate\":\"2026-06-10T08:30:00Z\",\"endDate\":\"2026-06-20T17:45:10+05:30\"}'\n ></nile-calendar>\n `) as any;\n await cal.updateComplete;\n expect(cal.startDate.getTime()).to.equal(new Date('2026-06-10T08:30:00Z').getTime());\n expect(cal.endDate.getTime()).to.equal(new Date('2026-06-20T17:45:10+05:30').getTime());\n });\n\n it('L11c. an offset-LESS datetime is read as a wall clock, and pins an epoch', async () => {\n const el = await isoFixture('2026-06-15T14:30:05.250', 'UTC');\n const cal = await settle2(el);\n expect(cal.tpHours, 'digits taken as the wall clock, not converted').to.equal(14);\n expect(cal.tpMinutes).to.equal(30);\n const detail = await applyAndCapture(el, cal);\n expect(detail.value).to.contain('2026-06-15T14:30:05.250');\n // C-2: the first explicit epoch pin for an offset-LESS value. Derived from\n // the COMPONENT's zone (`timezone=\"UTC\"`), never the host's — so the same\n // number is correct under TZ=UTC, TZ=Asia/Kolkata and TZ=America/New_York\n // alike. Before C-2 the panel resolved these digits through the host zone,\n // so this assertion could only have held on a UTC host.\n expect(detail.unixEpoch, 'the wall clock read in the COMPONENT zone')\n .to.equal(Date.UTC(2026, 5, 15, 14, 30, 5, 250));\n });\n\n it('L11d. the DEFAULT variant seeds an offset-LESS value exactly as published', async () => {\n // The shape `nile-visualization` produces: host-local digits, noon-anchored. The default variant parses it\n // host-locally with no extra host-offset shift, so the written digits are the Date's LOCAL fields on any host\n // (the old shift moved them by the host offset, which changed the day at UTC+13/+14).\n const cal = await fixture<NileCalendar>(\n html`<nile-calendar value=\"2026-06-15T12:00:00\"></nile-calendar>`\n ) as any;\n await cal.updateComplete;\n expect(cal.variant).to.equal('default');\n expect(cal.tpHours, 'the default variant never seeds the time spinners').to.equal(null);\n // published default: host-offset shift applied (identical to the 2.0.16 calendar)\n const parsed = new Date('2026-06-15T12:00:00');\n const published = new Date(parsed.getTime() - parsed.getTimezoneOffset() * 60000);\n expect(cal.value.getTime()).to.equal(published.getTime());\n });\n\n // ── R12 ─────────────────────────────────────────────────────────────────\n it('L12. seeding an instant-bearing value emits nothing', async () => {\n const el = await isoFixture(undefined, 'UTC');\n await settle(el);\n const seen: string[] = [];\n for (const name of ['nile-change', 'nile-changed', 'nile-clear']) {\n el.addEventListener(name, () => seen.push(name));\n }\n el.value = Z_ISO;\n await settle2(el);\n expect(seen, 'seeding must stay silent').to.deep.equal([]);\n });\n\n // ── R13 ─────────────────────────────────────────────────────────────────\n it('L13. the trigger text and the panel always agree', async () => {\n const zones = ['UTC', 'Asia/Kolkata', 'Asia/Kathmandu', NY, 'Pacific/Kiritimati'];\n for (const zone of zones) {\n const el = await isoFixture(Z_ISO, zone);\n const cal = await settle2(el);\n await triggerInput(el).updateComplete;\n const p = (n: number, l = 2) => String(n).padStart(l, '0');\n const want =\n `${cal.value.getFullYear()}-${p(cal.value.getMonth() + 1)}-${p(cal.value.getDate())}` +\n ` - ${p(cal.tpHours)}:${p(cal.tpMinutes)}:${p(cal.tpSeconds)}.${p(cal.tpMilliseconds, 3)}` +\n ` - ${zone}`;\n expect(triggerInput(el).value, `trigger vs panel in ${zone}`).to.equal(want);\n }\n });\n\n // ── R14 ─────────────────────────────────────────────────────────────────\n it('L14. STICKY BY DESIGN: returning the fields to their seeded values restores the instant', async () => {\n // Invalidation is a comparison of the derived date/time fields against the\n // ones the seed produced — there is no separate dirty flag. So editing a\n // field and editing it back lands on exactly the seeded fields, and the\n // retained instant is honoured again. That is intentional: the state the\n // consumer loaded has been restored. Pinned here so it cannot drift into\n // being accidental.\n const el = await isoFixture('2026-11-01T06:30:00.000Z', NY);\n const cal = await settle2(el);\n await typeTimeField(cal, 1, '31');\n expect(cal.tpMinutes).to.equal(31);\n await typeTimeField(cal, 1, '30');\n expect(cal.tpMinutes).to.equal(30);\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, 'the seeded occurrence is restored').to.equal(NY_SECOND_0130);\n });\n });\n\n /**\n * ── L15–L22. C-1 CORRECTION: instant vs bracketed-occurrence semantics ──────\n *\n * The first cut of C-1 promoted a self-consistent bracketed value into the same\n * retained-instant semantics as a `Z` value, which changed its timezone-change\n * behaviour. These pin the corrected split:\n *\n * category A `…Z` / `…±HH:MM` a true instant. Zone-independent.\n * A timezone change RE-DISPLAYS it.\n * category C `…[GMT±HH:MM Zone]` a wall clock + zone whose offset also\n * names WHICH occurrence of an ambiguous\n * local time was meant. That memory is\n * scoped to that zone: a timezone change\n * discards it and the old wall-clock\n * semantics resume.\n *\n * They also pin the invalid-timezone rule: the C-1 path DECLINES rather than\n * substituting UTC, so C-3 stays exactly as it was.\n */\n describe('L15-L22. C-1 correction — categories A vs C, and invalid zones', () => {\n const NY = 'America/New_York';\n const NY_FIRST_0130 = Date.UTC(2026, 10, 1, 5, 30); // 01:30 −04:00 (EDT)\n const NY_SECOND_0130 = Date.UTC(2026, 10, 1, 6, 30); // 01:30 −05:00 (EST)\n\n const isoFixture = (value?: string, timezone?: string) =>\n fixture<NileDateTimePicker>(html`\n <nile-date-time-picker\n .dateFormat=${'YYYY-MM-DD'}\n .startYear=${1900}\n .endYear=${2500}\n timezone=${timezone ?? 'UTC'}\n .value=${value ?? null}\n ></nile-date-time-picker>\n `);\n\n const panelWall = (cal: any) => {\n const p = (n: number, l = 2) => String(n).padStart(l, '0');\n return `${cal.value.getFullYear()}-${p(cal.value.getMonth() + 1)}-${p(cal.value.getDate())}` +\n ` ${p(cal.tpHours)}:${p(cal.tpMinutes)}:${p(cal.tpSeconds)}.${p(cal.tpMilliseconds, 3)}`;\n };\n\n const applyAndCapture = async (el: NileDateTimePicker, cal: any) => {\n let detail: any = null;\n const on = ((e: CustomEvent) => { detail = e.detail; }) as EventListener;\n el.addEventListener('nile-change', on);\n applyBtn(cal).click();\n await el.updateComplete;\n el.removeEventListener('nile-change', on);\n return detail;\n };\n\n const typeTimeField = async (cal: any, index: number, raw: string) => {\n const field = cal.shadowRoot!.querySelectorAll('.tp-time-field')[index] as any;\n field.dispatchEvent(new CustomEvent('nile-focus', { detail: {} }));\n field.value = raw;\n field.dispatchEvent(new CustomEvent('nile-input', { detail: { value: raw } }));\n await cal.updateComplete;\n return field;\n };\n\n /** change the panel's zone and let both elements settle */\n const setZone = async (el: NileDateTimePicker, cal: any, zone: string) => {\n cal.timezone = zone;\n await cal.updateComplete;\n await settle2(el);\n };\n\n // ── L15 ─────────────────────────────────────────────────────────────────\n it('L15. a bracketed value keeps WALL-CLOCK timezone semantics (not instant)', async () => {\n const el = await isoFixture('2026-06-15T14:30:00.000[GMT+05:30 Asia/Kolkata]');\n const cal = await settle2(el);\n expect(panelWall(cal), 'seeded digits').to.equal('2026-06-15 14:30:00.000');\n expect(cal.timezone, 'zone adopted from the bracket').to.equal('Asia/Kolkata');\n\n await setZone(el, cal, 'Asia/Tokyo');\n expect(panelWall(cal), 'digits are PRESERVED, not re-displayed').to.equal('2026-06-15 14:30:00.000');\n\n const detail = await applyAndCapture(el, cal);\n // 14:30 JST (+09:00 year-round) is 05:30 UTC\n expect(detail.unixEpoch, 'epoch means 14:30 Tokyo').to.equal(Date.UTC(2026, 5, 15, 5, 30, 0, 0));\n expect(detail.value).to.equal('2026-06-15T14:30:00.000[GMT+09:00 Asia/Tokyo]');\n });\n\n // ── L16 ─────────────────────────────────────────────────────────────────\n it('L16. the bracket occurrence memory is discarded on a timezone change', async () => {\n const el = await isoFixture('2026-11-01T01:30:00.000[GMT-05:00 America/New_York]', NY);\n const cal = await settle2(el);\n expect(cal.seedInstant, 'the second occurrence is retained on load').to.equal(NY_SECOND_0130);\n expect(cal.seedZone, 'and it is scoped to New York').to.equal(NY);\n\n await setZone(el, cal, 'Asia/Tokyo');\n expect(cal.seedInstant, 'occurrence memory discarded').to.equal(null);\n expect(cal.seedZone).to.equal(null);\n expect(panelWall(cal), '01:30 digits preserved').to.equal('2026-11-01 01:30:00.000');\n\n const detail = await applyAndCapture(el, cal);\n // 01:30 JST is the previous day 16:30 UTC\n expect(detail.unixEpoch, 'recomputed as 01:30 Tokyo').to.equal(Date.UTC(2026, 9, 31, 16, 30, 0, 0));\n });\n\n // ── L17 ─────────────────────────────────────────────────────────────────\n it('L17. the bracket occurrence memory is discarded on a time edit', async () => {\n const el = await isoFixture('2026-11-01T01:30:00.000[GMT-05:00 America/New_York]', NY);\n const cal = await settle2(el);\n expect(cal.seedInstant).to.equal(NY_SECOND_0130);\n\n await typeTimeField(cal, 1, '31');\n expect(cal.tpMinutes).to.equal(31);\n\n const detail = await applyAndCapture(el, cal);\n // policy-agnostic: C-1 must not pin which occurrence of the ambiguous 01:31\n // wallClockToInstant picks (that is C-5). It must only stop using the seed.\n expect(detail.unixEpoch, 'the seeded occurrence is not reused').to.not.equal(NY_SECOND_0130);\n expect(detail.value).to.contain('2026-11-01T01:31:00.000');\n expect(detail.value).to.match(/\\[GMT-0[45]:00 America\\/New_York\\]$/);\n });\n\n // ── L18 ─────────────────────────────────────────────────────────────────\n it('L18. leaving and returning to the zone does NOT resurrect the occurrence', async () => {\n const el = await isoFixture('2026-11-01T01:30:00.000[GMT-05:00 America/New_York]', NY);\n const cal = await settle2(el);\n expect(cal.seedInstant).to.equal(NY_SECOND_0130);\n\n await setZone(el, cal, 'Asia/Tokyo');\n expect(cal.seedInstant, 'cleared on the way out').to.equal(null);\n\n await setZone(el, cal, NY);\n expect(cal.seedInstant, 'and NOT restored on the way back').to.equal(null);\n expect(panelWall(cal)).to.equal('2026-11-01 01:30:00.000');\n\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, 'the retained second occurrence must not come back')\n .to.not.equal(NY_SECOND_0130);\n expect([NY_FIRST_0130, NY_SECOND_0130], 'resolved by wallClockToInstant')\n .to.include(detail.unixEpoch);\n });\n\n // ── L19 ─────────────────────────────────────────────────────────────────\n it('L19. an invalid timezone declines the C-1 path entirely (no throw)', async () => {\n let threw: string | null = null;\n let el!: NileDateTimePicker;\n let cal: any;\n try {\n el = await isoFixture('2026-06-15T14:30:05.250Z', 'Mars/Phobos');\n cal = await settle2(el);\n } catch (e) { threw = (e as Error).message; }\n expect(threw, 'Intl must never receive an invalid zone').to.equal(null);\n expect(cal.seedInstant, 'the new path declined').to.equal(null);\n expect(cal.seedZone).to.equal(null);\n });\n\n // ── L20 ─────────────────────────────────────────────────────────────────\n it('L20. invalid-zone behaviour is byte-identical to pre-C-1 (initial load)', async () => {\n const INSTANT = Date.UTC(2026, 5, 15, 14, 30, 5, 250);\n // pre-C-1: parsePresetValue read the instant through HOST-local getters,\n // then wallClockToInstant's invalid-zone catch recomposed those same\n // host-local digits. Both halves are derived here, so this holds on any host.\n const host = new Date(INSTANT);\n const p = (n: number, l = 2) => String(n).padStart(l, '0');\n const preC1Panel =\n `${host.getFullYear()}-${p(host.getMonth() + 1)}-${p(host.getDate())}` +\n ` ${p(host.getHours())}:${p(host.getMinutes())}:${p(host.getSeconds())}.${p(host.getMilliseconds(), 3)}`;\n const preC1Epoch = new Date(\n host.getFullYear(), host.getMonth(), host.getDate(),\n host.getHours(), host.getMinutes(), host.getSeconds(), host.getMilliseconds()\n ).getTime();\n\n const el = await isoFixture('2026-06-15T14:30:05.250Z', 'Mars/Phobos');\n const cal = await settle2(el);\n expect(panelWall(cal), 'host-local digits, as before C-1').to.equal(preC1Panel);\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, 'host-local instant, as before C-1').to.equal(preC1Epoch);\n expect(detail.timezone, 'the invalid zone is still echoed (C-3, untouched)').to.equal('Mars/Phobos');\n });\n\n it('L20b. and when a VALID instant seed later gets an invalid timezone', async () => {\n const INSTANT = Date.UTC(2026, 5, 15, 14, 30, 5, 250);\n const host = new Date(INSTANT);\n const p = (n: number, l = 2) => String(n).padStart(l, '0');\n const preC1Panel =\n `${host.getFullYear()}-${p(host.getMonth() + 1)}-${p(host.getDate())}` +\n ` ${p(host.getHours())}:${p(host.getMinutes())}:${p(host.getSeconds())}.${p(host.getMilliseconds(), 3)}`;\n\n const el = await isoFixture('2026-06-15T14:30:05.250Z', 'Asia/Kolkata');\n const cal = await settle2(el);\n expect(cal.seedInstant, 'valid zone seeds normally').to.equal(INSTANT);\n expect(panelWall(cal)).to.equal('2026-06-15 20:00:05.250');\n\n await setZone(el, cal, 'Mars/Phobos');\n expect(cal.seedInstant, 'seed dropped when the zone becomes invalid').to.equal(null);\n expect(panelWall(cal), 're-parsed to the pre-C-1 host-local reading').to.equal(preC1Panel);\n });\n\n // ── L21 ─────────────────────────────────────────────────────────────────\n it('L21. trigger and panel BOTH decline for an invalid zone, so they still agree', async () => {\n const el = await isoFixture('2026-06-15T14:30:05.250Z', 'Mars/Phobos');\n const cal = await settle2(el);\n await triggerInput(el).updateComplete;\n const p = (n: number, l = 2) => String(n).padStart(l, '0');\n const want =\n `${cal.value.getFullYear()}-${p(cal.value.getMonth() + 1)}-${p(cal.value.getDate())}` +\n ` - ${p(cal.tpHours)}:${p(cal.tpMinutes)}:${p(cal.tpSeconds)}.${p(cal.tpMilliseconds, 3)}` +\n ` - Mars/Phobos`;\n expect(triggerInput(el).value, 'trigger matches the panel').to.equal(want);\n });\n\n // ── L22 ─────────────────────────────────────────────────────────────────\n it('L22. CROSS-ZONE LEAK: Apply can never emit an epoch retained from another zone', async () => {\n // The hole found in review: the timezone-change hook only clears while the\n // fingerprint matches, so `edit -> change zone -> edit back` used to restore\n // a New York occurrence while the panel read Tokyo. The Apply guard's\n // `seedZone === this.timezone` clause is what closes it.\n const el = await isoFixture('2026-11-01T01:30:00.000[GMT-05:00 America/New_York]', NY);\n const cal = await settle2(el);\n expect(cal.seedInstant).to.equal(NY_SECOND_0130);\n\n await typeTimeField(cal, 1, '31'); // fingerprint now differs\n await setZone(el, cal, 'Asia/Tokyo'); // zone moves while \"dirty\"\n await typeTimeField(cal, 1, '30'); // fingerprint matches the seed again\n\n expect(panelWall(cal), 'the panel reads 01:30').to.equal('2026-11-01 01:30:00.000');\n expect(cal.timezone, 'in Tokyo').to.equal('Asia/Tokyo');\n\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, 'a New York occurrence must NOT leak into Tokyo')\n .to.not.equal(NY_SECOND_0130);\n expect(detail.unixEpoch, 'must be 01:30 Tokyo').to.equal(Date.UTC(2026, 9, 31, 16, 30, 0, 0));\n expect(detail.value).to.equal('2026-11-01T01:30:00.000[GMT+09:00 Asia/Tokyo]');\n });\n\n // ── L23 ─────────────────────────────────────────────────────────────────\n it('L23. a seed cannot survive Reset and be reused in a DIFFERENT zone', async () => {\n // Found in pre-commit review. `handleReset`/`clearDate` null the selection\n // but are not seed-aware, so a stale `seedInstant` used to outlive them. A\n // later zone change plus a re-pick that happened to reproduce the seeded\n // fields then emitted the OLD zone's epoch under the new zone.\n const cal = await fixture<NileCalendar>(html`\n <nile-calendar\n variant=\"date-time-picker\"\n timezone=\"UTC\"\n value=\"2026-06-15T14:30:05.250Z\"\n ></nile-calendar>\n `) as any;\n await cal.updateComplete; await cal.updateComplete;\n expect(cal.seedInstant, 'seeded').to.equal(Date.UTC(2026, 5, 15, 14, 30, 5, 250));\n\n (cal.shadowRoot!.querySelector('nile-button.clear-button') as HTMLElement).click();\n await cal.updateComplete;\n expect(cal.seedInstant, 'Reset must forget the retained instant').to.equal(null);\n expect(cal.seedFieldsKey).to.equal(null);\n expect(cal.seedZone).to.equal(null);\n });\n\n it('L23b. …and the full exploit sequence resolves in the VISIBLE zone', async () => {\n const cal = await fixture<NileCalendar>(html`\n <nile-calendar\n variant=\"date-time-picker\"\n timezone=\"UTC\"\n value=\"2026-06-15T14:30:05.250Z\"\n ></nile-calendar>\n `) as any;\n await cal.updateComplete; await cal.updateComplete;\n\n (cal.shadowRoot!.querySelector('nile-button.clear-button') as HTMLElement).click();\n await cal.updateComplete;\n cal.timezone = 'Asia/Kolkata';\n await cal.updateComplete;\n\n // rebuild exactly the fields the seed had produced\n cal.currentYear = 2026; cal.currentMonth = 5;\n await cal.updateComplete;\n const cell = [...cal.shadowRoot!.querySelectorAll('.day_date')]\n .find(d => !d.classList.contains('filler') &&\n (d as HTMLElement).textContent!.trim().replace(/\\D/g, '') === '15') as HTMLElement;\n cell.click();\n await cal.updateComplete;\n for (const [i, v] of [[0, '14'], [1, '30'], [2, '5'], [3, '250']] as Array<[number, string]>) {\n const f = cal.shadowRoot!.querySelectorAll('.tp-time-field')[i] as any;\n f.dispatchEvent(new CustomEvent('nile-focus', { detail: {} }));\n f.value = v;\n f.dispatchEvent(new CustomEvent('nile-input', { detail: { value: v } }));\n await cal.updateComplete;\n }\n\n let detail: any = null;\n cal.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n (cal.shadowRoot!.querySelector('nile-button.apply-button') as HTMLElement).click();\n await cal.updateComplete;\n\n // 14:30:05.250 IST (+05:30, year-round) is 09:00:05.250 UTC\n expect(detail.unixEpoch, 'the visible zone decides the instant')\n .to.equal(Date.UTC(2026, 5, 15, 9, 0, 5, 250));\n expect(detail.unixEpoch, 'the UTC-seeded epoch must not leak into IST')\n .to.not.equal(Date.UTC(2026, 5, 15, 14, 30, 5, 250));\n });\n\n // ── L24 ─────────────────────────────────────────────────────────────────\n it('L24. a STALE seed is dropped by any timezone change, not just a matching one', async () => {\n // The general rule behind L23: once the fields have diverged from the seed,\n // that seed can never legitimately describe a different zone, so a zone\n // change discards it rather than leaving it dormant.\n const el = await isoFixture('2026-06-15T14:30:05.250Z', 'UTC');\n const cal = await settle2(el);\n expect(cal.seedInstant).to.equal(Date.UTC(2026, 5, 15, 14, 30, 5, 250));\n\n await typeTimeField(cal, 1, '31'); // fields diverge\n expect(cal.seedInstant, 'still held while the zone is unchanged').to.not.equal(null);\n\n await setZone(el, cal, 'Asia/Kolkata'); // zone moves while stale\n expect(cal.seedInstant, 'a stale seed is dropped on a zone change').to.equal(null);\n expect(cal.seedFieldsKey).to.equal(null);\n });\n\n it('L24b. Set to now followed by a timezone change also drops the seed', async () => {\n const el = await isoFixture('2026-06-15T14:30:05.250Z', 'UTC');\n const cal = await settle2(el);\n expect(cal.seedInstant).to.not.equal(null);\n (cal.shadowRoot!.querySelector('#tp-set-to-now') as HTMLElement).click();\n await settle2(el);\n await setZone(el, cal, 'Pacific/Auckland');\n expect(cal.seedInstant, 'no dormant seed after Set to now + zone change').to.equal(null);\n });\n });\n\n\n /**\n * M. C-2 — an offset-LESS `value` is a WALL CLOCK, and the host must not touch it.\n *\n * `2026-03-08T02:30:00.000` carries no zone, so it names digits, not an instant.\n * The panel used to resolve it with `new Date(raw)` + host-local getters, which\n * round-trips losslessly ONLY while that wall clock exists on the host. It does\n * not exist in America/New_York (02:00 → 03:00 that day), so the constructor\n * slid it to 03:30 and the panel showed, and Apply emitted, a time nobody\n * supplied — while the trigger text, parsed UTC-anchored, still showed 02:30.\n *\n * J7 is the trigger-side guard for this; these are the panel-side twins, plus\n * the epoch pins that no offset-less test carried before.\n *\n * Every assertion below is derived from the COMPONENT's `timezone`, never the\n * host's, so the expected numbers are identical under TZ=UTC, TZ=Asia/Kolkata\n * and TZ=America/New_York. Under the old behavior the gap cases FAIL on a host\n * whose zone has a matching gap and pass elsewhere — which is exactly the\n * host-dependence being removed, so run the suite under the TZ matrix.\n */\n describe('M. C-2 — offset-less datetime is a host-free wall clock', () => {\n const NY = 'America/New_York';\n\n const isoFixture = (value?: string, timezone?: string) =>\n fixture<NileDateTimePicker>(html`\n <nile-date-time-picker\n .dateFormat=${'YYYY-MM-DD'}\n .startYear=${1900}\n .endYear=${2500}\n timezone=${timezone ?? 'UTC'}\n .value=${value ?? null}\n ></nile-date-time-picker>\n `);\n\n const applyAndCapture = async (el: NileDateTimePicker, cal: any) => {\n let detail: any = null;\n const on = ((e: CustomEvent) => { detail = e.detail; }) as EventListener;\n el.addEventListener('nile-change', on);\n applyBtn(cal).click();\n await el.updateComplete;\n el.removeEventListener('nile-change', on);\n return detail;\n };\n\n const panelWall = (cal: any) => {\n const p = (n: number, l = 2) => String(n).padStart(l, '0');\n return `${cal.value.getFullYear()}-${p(cal.value.getMonth() + 1)}-${p(cal.value.getDate())}` +\n ` ${p(cal.tpHours)}:${p(cal.tpMinutes)}:${p(cal.tpSeconds)}.${p(cal.tpMilliseconds, 3)}`;\n };\n\n it('M1. PANEL twin of J7: a value in the HOST New York gap keeps its digits', async () => {\n const el = await isoFixture('2026-03-08T02:30:00.000', 'UTC');\n const cal = await settle2(el);\n expect(panelWall(cal), 'the supplied wall clock, verbatim')\n .to.equal('2026-03-08 02:30:00.000');\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch, '02:30 read in UTC, the component zone')\n .to.equal(Date.UTC(2026, 2, 8, 2, 30, 0, 0));\n });\n\n it('M2. a value in the HOST Auckland gap keeps its digits', async () => {\n const el = await isoFixture('2026-09-27T02:30:00.000', 'UTC');\n const cal = await settle2(el);\n expect(panelWall(cal)).to.equal('2026-09-27 02:30:00.000');\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch).to.equal(Date.UTC(2026, 8, 27, 2, 30, 0, 0));\n });\n\n it('M3. the trigger text and the panel derive the SAME wall clock', async () => {\n // The two halves parse `value` through different code paths. Before C-2\n // they disagreed for exactly the gap values above.\n for (const raw of ['2026-03-08T02:30:00.000', '2026-09-27T02:30:00.000',\n '2026-06-15T14:30:05.250']) {\n const el = await isoFixture(raw, 'UTC');\n const cal = await settle2(el);\n const text = String(triggerInput(el).value ?? '');\n const [date, time] = panelWall(cal).split(' ');\n expect(text, `${raw}: trigger date`).to.contain(date);\n expect(text, `${raw}: trigger time`).to.contain(time.slice(0, 5));\n }\n });\n\n it('M4. an ordinary value resolves by the component zone, not the host', async () => {\n const el = await isoFixture('2026-06-15T14:30:00.000', 'Asia/Kolkata');\n const cal = await settle2(el);\n expect(panelWall(cal)).to.equal('2026-06-15 14:30:00.000');\n const detail = await applyAndCapture(el, cal);\n // 14:30 in Kolkata is 09:00 UTC — IST is +05:30 year round.\n expect(detail.unixEpoch).to.equal(Date.UTC(2026, 5, 15, 9, 0, 0, 0));\n });\n\n it('M5. a value in the SELECTED zone gap still reaches the gap policy unchanged', async () => {\n // The digits land in New York's own gap. C-2 must not pre-empt that: it\n // preserves the digits and leaves `wallClockToInstant` to resolve them,\n // which is the C-5 policy and is deliberately NOT changed here.\n const el = await isoFixture('2026-03-08T02:30:00.000', NY);\n const cal = await settle2(el);\n expect(panelWall(cal), 'digits preserved for the policy to act on')\n .to.equal('2026-03-08 02:30:00.000');\n const detail = await applyAndCapture(el, cal);\n // 06:30Z — the existing gap policy's answer, reached identically from a\n // seeded value and from a panel pick.\n expect(detail.unixEpoch).to.equal(Date.UTC(2026, 2, 8, 6, 30, 0, 0));\n });\n\n it('M6. the seconds-omitted form works', async () => {\n const el = await isoFixture('2026-06-15T08:00', 'UTC');\n const cal = await settle2(el);\n expect(panelWall(cal)).to.equal('2026-06-15 08:00:00.000');\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch).to.equal(Date.UTC(2026, 5, 15, 8, 0, 0, 0));\n });\n\n it('M7. milliseconds survive', async () => {\n const el = await isoFixture('2026-06-15T14:30:05.999', 'UTC');\n const cal = await settle2(el);\n expect(panelWall(cal)).to.equal('2026-06-15 14:30:05.999');\n const detail = await applyAndCapture(el, cal);\n expect(detail.unixEpoch).to.equal(Date.UTC(2026, 5, 15, 14, 30, 5, 999));\n });\n\n it('M8. an impossible day clamps to the month end, as the trigger already did', async () => {\n const el = await isoFixture('2026-02-31T10:00:00.000', 'UTC');\n const cal = await settle2(el);\n expect(panelWall(cal), 'clamped, not rolled forward into March')\n .to.equal('2026-02-28 10:00:00.000');\n });\n\n it('M9. offset-less retains NO instant, so a zone change keeps the digits', async () => {\n const el = await isoFixture('2026-06-15T14:30:00.000', 'UTC');\n const cal = await settle2(el);\n expect(cal.seedInstant, 'names no instant, so nothing is retained').to.equal(null);\n el.timezone = NY;\n cal.timezone = NY;\n await settle2(el);\n expect(panelWall(cal), 'a wall clock follows the zone, it does not move')\n .to.equal('2026-06-15 14:30:00.000');\n const detail = await applyAndCapture(el, cal);\n // 14:30 in New York on 2026-06-15 is EDT (−04:00) → 18:30Z.\n expect(detail.unixEpoch, 'same digits, re-derived epoch')\n .to.equal(Date.UTC(2026, 5, 15, 18, 30, 0, 0));\n });\n\n it('M10. instant-bearing and bracketed forms are untouched by the C-2 branch', async () => {\n const z = await isoFixture('2026-06-15T14:30:05.250Z', 'UTC');\n const zcal = await settle2(z);\n expect(zcal.seedInstant, 'Z still seeds an instant (C-1)')\n .to.equal(Date.UTC(2026, 5, 15, 14, 30, 5, 250));\n expect(zcal.seedZone, 'category A is zone-independent').to.equal(null);\n\n const off = await isoFixture('2026-06-15T14:30:05.250+05:30', 'UTC');\n const ocal = await settle2(off);\n expect(ocal.seedInstant, 'a numeric offset is an instant too')\n .to.equal(Date.UTC(2026, 5, 15, 9, 0, 5, 250));\n\n const br = await isoFixture('2026-11-01T01:30:00.000[GMT-04:00 America/New_York]', 'UTC');\n const bcal = await settle2(br);\n expect(bcal.seedZone, 'the bracketed form still records its zone').to.equal(NY);\n expect(bcal.seedInstant, 'and still picks the EDT occurrence')\n .to.equal(Date.UTC(2026, 10, 1, 5, 30));\n\n const dateOnly = await isoFixture('2026-06-15', 'UTC');\n const dcal = await settle2(dateOnly);\n expect(dcal.seedInstant, 'a date-only value seeds no instant').to.equal(null);\n expect(dcal.value.getFullYear()).to.equal(2026);\n expect(dcal.value.getMonth()).to.equal(5);\n expect(dcal.value.getDate()).to.equal(15);\n });\n });\n\n // ── N. millisecond precision vs the timezone offset ───────────────────────\n //\n // REGRESSION PIN. The historical bug: `composeValueISO` looked the offset up\n // at an instant that still carried its sub-second remainder. `zoneOffsetMs`\n // formats to SECOND granularity and subtracts, so it returned\n // `trueOffset - ms`, and Asia/Kolkata printed `+05:29` instead of `+05:30`.\n //\n // Two independent guards now prevent that, and this section pins the\n // OBSERVABLE contract rather than either mechanism:\n // 1. `zoneOffsetMs(epochMs - ms)` — strip the remainder before the lookup;\n // 2. `Math.round(offMs / 60000) * 60000` — snap to whole minutes.\n // Because `ms < 1000`, guard 2 alone masks the loss of guard 1, so removing\n // guard 1 by itself is NOT observable. These tests fail when BOTH are gone,\n // which is the bug as it actually shipped.\n describe('N. milliseconds must not contaminate the emitted timezone offset', () => {\n const MS_VALUES = [0, 1, 9, 10, 99, 100, 250, 500, 999];\n // +05:30, +05:45 and +08:45 — a half-hour and two quarter-hour zones, where\n // an off-by-one-minute offset is unmistakable.\n const ZONES = ['Asia/Kolkata', 'Asia/Kathmandu', 'Australia/Eucla'];\n\n /**\n * INDEPENDENT ORACLE — deliberately NOT `zoneOffsetMs` / `composeValueISO`.\n * Reads Intl's own PRINTED offset (\"GMT+05:30\") instead of reconstructing it\n * by differencing formatted date parts, so a fault in the implementation's\n * arithmetic cannot validate itself. Throws rather than returning a guess,\n * so an unsupported runtime fails loudly instead of passing silently.\n */\n const trueOffsetMs = (epochMs: number, zone: string): number => {\n for (const style of ['longOffset', 'shortOffset'] as const) {\n let text = '';\n try {\n const parts = new Intl.DateTimeFormat('en-US',\n { timeZone: zone, timeZoneName: style } as Intl.DateTimeFormatOptions)\n .formatToParts(new Date(epochMs));\n const p = parts.find(x => x.type === 'timeZoneName');\n text = p ? p.value.trim() : '';\n } catch {\n continue;\n }\n if (text === 'GMT' || text === 'UTC') return 0;\n const m = /^(?:GMT|UTC)([+-])(\\d{1,2})(?::(\\d{2}))?$/.exec(text);\n if (m) {\n const sign = m[1] === '-' ? -1 : 1;\n return sign * (Number(m[2]) * 3600000 + Number(m[3] ?? 0) * 60000);\n }\n }\n throw new Error(`oracle: cannot read a numeric offset for ${zone} from Intl`);\n };\n\n const BRACKET_RE =\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d{3})\\[GMT([+-])(\\d{2}):(\\d{2})\\s+([^\\]]+)\\]$/;\n\n const parseEmitted = (value: string) => {\n const m = BRACKET_RE.exec(value);\n if (!m) throw new Error(`emitted value is not the Nile bracketed form: ${value}`);\n return {\n ms: Number(m[7]),\n offsetMs: (m[8] === '-' ? -1 : 1) * (Number(m[9]) * 3600000 + Number(m[10]) * 60000),\n offsetText: `${m[8]}${m[9]}:${m[10]}`,\n zone: m[11],\n };\n };\n\n const msFixture = (value: string, timezone: string) =>\n fixture<NileDateTimePicker>(html`\n <nile-date-time-picker\n .dateFormat=${'YYYY-MM-DD'}\n .startYear=${1900}\n .endYear=${2500}\n timezone=${timezone}\n .value=${value}\n ></nile-date-time-picker>\n `);\n\n const applyAndCapture = async (el: NileDateTimePicker, cal: any) => {\n let detail: any = null;\n const on = ((e: CustomEvent) => { detail = e.detail; }) as EventListener;\n el.addEventListener('nile-change', on);\n applyBtn(cal).click();\n await el.updateComplete;\n el.removeEventListener('nile-change', on);\n return detail;\n };\n\n for (const zone of ZONES) {\n for (const ms of MS_VALUES) {\n const frac = String(ms).padStart(3, '0');\n it(`N1. ${zone} keeps the exact offset and .${frac} through emit -> reload`, async () => {\n const input = `2026-06-15T14:30:45.${frac}`;\n const el = await msFixture(input, zone);\n const cal = await settle2(el);\n\n const detail = await applyAndCapture(el, cal);\n expect(detail, 'Apply emitted a payload').to.exist;\n expect(detail.unixEpoch, 'unixEpoch is a number').to.be.a('number');\n\n const expectedOffset = trueOffsetMs(detail.unixEpoch, zone);\n const emitted = parseEmitted(detail.value);\n\n // the offset must be the zone's TRUE offset, from the oracle\n expect(emitted.offsetMs,\n `${zone} printed ${emitted.offsetText} but the true offset is ` +\n `${expectedOffset / 60000} min (ms=${ms})`).to.equal(expectedOffset);\n\n // and specifically never short by exactly one minute — the +05:29 shape\n expect(emitted.offsetMs,\n `offset is one minute short: the millisecond remainder leaked into ` +\n `the offset lookup (ms=${ms}, ${zone})`).to.not.equal(expectedOffset - 60000);\n\n // milliseconds survive into the epoch and the printed digits agree\n expect(detail.unixEpoch % 1000, 'epoch carries the milliseconds').to.equal(ms);\n expect(emitted.ms, 'printed milliseconds match the epoch').to.equal(ms);\n\n // localTimezoneValue mirrors the epoch exactly\n expect(detail.localTimezoneValue.getTime(),\n 'localTimezoneValue.getTime() === unixEpoch').to.equal(detail.unixEpoch);\n\n // the emitted value, resolved independently, IS the epoch\n const resolved = Date.UTC(\n 2026, 5, 15,\n Number(detail.value.slice(11, 13)), Number(detail.value.slice(14, 16)),\n Number(detail.value.slice(17, 19)), emitted.ms\n ) - emitted.offsetMs;\n expect(resolved,\n `the emitted value must describe its own unixEpoch (${detail.value})`)\n .to.equal(detail.unixEpoch);\n\n // reload into a FRESH component and Apply again — epoch must not move\n const reloaded = await msFixture(detail.value, detail.timezone);\n const rcal = await settle2(reloaded);\n const second = await applyAndCapture(reloaded, rcal);\n expect(second, 'reload emitted a payload').to.exist;\n expect(second.unixEpoch,\n `epoch drifted across reload (${detail.value})`).to.equal(detail.unixEpoch);\n expect(second.unixEpoch % 1000, 'milliseconds survive the reload').to.equal(ms);\n });\n }\n }\n\n it('N2. canary: Asia/Kolkata at .999 prints +05:30, never +05:29', async () => {\n const el = await msFixture('2026-06-15T14:30:45.999', 'Asia/Kolkata');\n const cal = await settle2(el);\n const detail = await applyAndCapture(el, cal);\n const emitted = parseEmitted(detail.value);\n expect(emitted.offsetText, 'the exact historical regression shape').to.equal('+05:30');\n expect(emitted.offsetMs).to.equal(trueOffsetMs(detail.unixEpoch, 'Asia/Kolkata'));\n expect(detail.unixEpoch % 1000).to.equal(999);\n });\n\n it('N3. canary: Asia/Kathmandu at .999 prints +05:45, never +05:44', async () => {\n const el = await msFixture('2026-06-15T14:30:45.999', 'Asia/Kathmandu');\n const cal = await settle2(el);\n const detail = await applyAndCapture(el, cal);\n const emitted = parseEmitted(detail.value);\n expect(emitted.offsetText, 'quarter-hour zone, worst-case milliseconds').to.equal('+05:45');\n expect(emitted.offsetMs).to.equal(trueOffsetMs(detail.unixEpoch, 'Asia/Kathmandu'));\n });\n\n it('N4. the oracle disagrees with a deliberately wrong offset (oracle is live)', () => {\n // guards against the oracle silently returning 0 / NaN and passing everything\n const t = Date.UTC(2026, 5, 15, 9, 0, 0, 0);\n expect(trueOffsetMs(t, 'Asia/Kolkata'), 'oracle reads a real +05:30').to.equal(19800000);\n expect(trueOffsetMs(t, 'Asia/Kathmandu'), 'oracle reads a real +05:45').to.equal(20700000);\n expect(trueOffsetMs(t, 'Australia/Eucla'), 'oracle reads a real +08:45').to.equal(31500000);\n expect(trueOffsetMs(t, 'UTC'), 'oracle reads UTC as zero').to.equal(0);\n });\n });\n\n});\n\n/*****************************************************************************\n * SECTION K — ADVERSARIAL AUDIT\n * Merged in from src/_audit/nile-date-time-picker.adversarial.test.ts so the\n * component has a single test file. Original header follows verbatim.\n ****************************************************************************/\n\n/**\n * ADVERSARIAL AUDIT — nile-date-time-picker (variant=\"date-time-picker\")\n * ============================================================================\n * A single self-contained adversarial suite, consolidated from the 10-file\n * working set. It answers one question: can the component ever silently\n * produce or persist the WRONG INSTANT?\n *\n * Structure:\n * PART 1 independent oracle — Intl `longOffset` + explicit UTC arithmetic\n * PART 2 driver + invariant checker (the PHASE 16 payload contract)\n * PART 3 PHASE 1 oracle validation + driver smoke test\n * PART 4 PHASE 2 year range / calendar arithmetic (+ focused follow-ups)\n * PART 5 PHASE 3 timezone sweep (every runtime zone + static fallback)\n * PART 6 PHASE 4/5 DST transitions, gaps, overlaps\n * PART 7 PHASE 7/8/9/11/12 ms, boundaries, formats, round-trips, fuzzing\n * PART 8 PHASE 6 host-timezone independence digest\n * PART 9 PHASE 10/14/15 UI sequences, Set to now, Apply semantics\n *\n * THE ORACLE RULE: nothing below may validate the component with the\n * component's own helpers. `zoneOffsetMs`, `composeValueISO`, `wallClockInZone`\n * and `wallClockToInstant` are never used to compute an expected value. The\n * oracle reads Intl's PRINTED offset and does its own UTC arithmetic, which is\n * a different mechanism from the implementation's part-differencing.\n *\n * RUNTIME: this is an exhaustive sweep (hundreds of zones, every DST\n * transition, thousands of randomised cases), not a unit suite. See the note\n * at the bottom of this file about keeping it out of the default `yarn test`.\n *\n * Some checks are DIAGNOSTIC: they record current behaviour via console.warn\n * (grep for `[audit-`) rather than asserting a policy. Those are labelled.\n */\n\n\n/* ==========================================================================\n PART 1 — INDEPENDENT ORACLE\n (was oracle.ts)\n ========================================================================== */\n\nexport type Wall = {\n year: number; month: number; day: number; // month is 1-BASED\n hours: number; minutes: number; seconds: number; ms: number;\n};\n\n/** Temporal, only if the runtime genuinely has it. Never faked. */\nexport const TEMPORAL: any =\n typeof (globalThis as any).Temporal !== 'undefined' ? (globalThis as any).Temporal : null;\n\n/* ── B. epoch -> true UTC offset in a zone ────────────────────────────────── */\n\nconst OFFSET_FMT_CACHE = new Map<string, Intl.DateTimeFormat>();\n\n/**\n * The zone's real offset at an instant, in ms, east-positive.\n * Independent mechanism: reads Intl's own printed offset string rather than\n * reconstructing it from formatted date parts.\n */\nexport function offsetAt(epochMs: number, zone: string): number {\n let fmt = OFFSET_FMT_CACHE.get(zone);\n if (!fmt) {\n fmt = new Intl.DateTimeFormat('en-US', { timeZone: zone, timeZoneName: 'longOffset' });\n OFFSET_FMT_CACHE.set(zone, fmt);\n }\n const part = fmt.formatToParts(new Date(epochMs)).find(p => p.type === 'timeZoneName');\n if (!part) throw new Error(`no timeZoneName part for ${zone}`);\n const t = part.value.trim();\n // \"GMT\" (exactly) means +00:00; otherwise \"GMT+05:30\" / \"GMT-03:30\" / \"GMT+14\"\n if (t === 'GMT' || t === 'UTC') return 0;\n const m = /^(?:GMT|UTC)([+-])(\\d{1,2})(?::(\\d{2}))?(?::(\\d{2}))?$/.exec(t);\n if (!m) throw new Error(`unparsable offset \"${t}\" for ${zone}`);\n const sign = m[1] === '-' ? -1 : 1;\n const h = Number(m[2]);\n const mi = Number(m[3] ?? 0);\n const s = Number(m[4] ?? 0);\n return sign * (h * 3600000 + mi * 60000 + s * 1000);\n}\n\n/* ── A. epoch -> wall clock in a zone ─────────────────────────────────────── */\n\n/**\n * Derived from the offset by pure UTC arithmetic — NOT by formatting the date\n * into y/m/d/h/m/s parts. Independent of the implementation's approach.\n */\nexport function wallAt(epochMs: number, zone: string): Wall {\n const local = epochMs + offsetAt(epochMs, zone);\n const d = new Date(local);\n return {\n year: d.getUTCFullYear(), month: d.getUTCMonth() + 1, day: d.getUTCDate(),\n hours: d.getUTCHours(), minutes: d.getUTCMinutes(),\n seconds: d.getUTCSeconds(), ms: d.getUTCMilliseconds(),\n };\n}\n\n/* ── C. wall clock + zone -> candidate instant(s) ─────────────────────────── */\n\n/** Wall clock as a \"UTC-pretending\" epoch — the anchor both sides agree on. */\nexport function wallToUTCms(w: Wall): number {\n return utcFromFields(w.year, w.month - 1, w.day, w.hours, w.minutes, w.seconds, w.ms);\n}\n\nexport function wallEquals(a: Wall, b: Wall): boolean {\n return a.year === b.year && a.month === b.month && a.day === b.day &&\n a.hours === b.hours && a.minutes === b.minutes &&\n a.seconds === b.seconds && a.ms === b.ms;\n}\n\n/**\n * EVERY instant the zone displays as exactly `w`.\n * [] -> the wall clock does not exist (spring-forward gap)\n * [t] -> unambiguous\n * [t1, t2] -> ambiguous (fall-back overlap), ascending\n *\n * Method: the true offset is within ±26h of any guess, so probing the offsets\n * reported at guess-26h .. guess+26h yields every candidate; each is then\n * CONFIRMED by reading it back. No reliance on a correction-pass converging.\n */\nexport function instantsFor(w: Wall, zone: string): number[] {\n const guess = wallToUTCms(w);\n const probes = new Set<number>();\n for (let h = -26; h <= 26; h++) probes.add(offsetAt(guess + h * 3600000, zone));\n const out: number[] = [];\n for (const off of probes) {\n const cand = guess - off;\n if (out.indexOf(cand) !== -1) continue;\n if (wallEquals(wallAt(cand, zone), w)) out.push(cand);\n }\n return out.sort((a, b) => a - b);\n}\n\n/* ── D. independent parsers ───────────────────────────────────────────────── */\n\n/** `...Z` / `...±HH:MM` -> exact instant. Built by hand, not via `new Date`. */\nexport function parseInstantString(raw: string): number | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?(?:\\.(\\d{1,3}))?(Z|[+-]\\d{2}:?\\d{2})$/\n .exec(raw.trim());\n if (!m) return null;\n const [, y, mo, d, h, mi, s, frac, zulu] = m;\n const ms = frac === undefined ? 0 : Number(frac.padEnd(3, '0'));\n const base = utcFromFields(Number(y), Number(mo) - 1, Number(d), Number(h), Number(mi), Number(s ?? 0), ms);\n if (zulu === 'Z') return base;\n const om = /^([+-])(\\d{2}):?(\\d{2})$/.exec(zulu)!;\n const off = (om[1] === '-' ? -1 : 1) * (Number(om[2]) * 3600000 + Number(om[3]) * 60000);\n return base - off;\n}\n\n/** Offset-less datetime -> wall clock digits only (no zone applied). */\nexport function parseOffsetLess(raw: string): Wall | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?(?:\\.(\\d{1,3}))?$/.exec(raw.trim());\n if (!m) return null;\n const [, y, mo, d, h, mi, s, frac] = m;\n return {\n year: Number(y), month: Number(mo), day: Number(d),\n hours: Number(h), minutes: Number(mi), seconds: Number(s ?? 0),\n // NOTE: read as written, NOT scaled — \".25\" is 25ms. Records current intent.\n ms: frac === undefined ? 0 : Number(frac),\n };\n}\n\n/** Nile bracketed form -> its parts. Independent regex. */\nexport function parseBracketed(\n raw: string\n): { wall: Wall; offsetMs: number; zone: string } | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?\\[GMT([+-])(\\d{2}):(\\d{2})\\s+([^\\]]+)\\]$/\n .exec(raw.trim());\n if (!m) return null;\n const [, y, mo, d, h, mi, s, frac, sign, oh, om, zone] = m;\n return {\n wall: {\n year: Number(y), month: Number(mo), day: Number(d),\n hours: Number(h), minutes: Number(mi), seconds: Number(s),\n ms: frac === undefined ? 0 : Number(frac.padEnd(3, '0')),\n },\n offsetMs: (sign === '-' ? -1 : 1) * (Number(oh) * 3600000 + Number(om) * 60000),\n zone: zone.trim(),\n };\n}\n\n/* ── DST transition discovery (PHASE 4) ──────────────────────────────────── */\n\n/** Every offset change in [from, to), found by coarse scan + binary search. */\nexport function findTransitions(zone: string, from: number, to: number): number[] {\n const STEP = 6 * 3600000;\n const hits: number[] = [];\n let prev = offsetAt(from, zone);\n for (let t = from + STEP; t < to; t += STEP) {\n const cur = offsetAt(t, zone);\n if (cur !== prev) {\n let lo = t - STEP, hi = t;\n // 1ms precision: at 1s precision offsetAt(t-1) can already read the NEW\n // offset, which silently classifies a forward transition as delta=0.\n while (hi - lo > 1) {\n const mid = lo + Math.floor((hi - lo) / 2);\n if (offsetAt(mid, zone) === prev) lo = mid; else hi = mid;\n }\n hits.push(hi);\n prev = cur;\n }\n }\n return hits;\n}\n\n/** Zones the runtime itself offers — the same source the component's list uses. */\nexport function runtimeZones(): string[] {\n const anyIntl = Intl as any;\n return typeof anyIntl.supportedValuesOf === 'function'\n ? (anyIntl.supportedValuesOf('timeZone') as string[])\n : [];\n}\n\nexport function isResolvable(zone: string): boolean {\n try { new Intl.DateTimeFormat('en-US', { timeZone: zone }); return true; }\n catch { return false; }\n}\n\n/* ── deterministic RNG (PHASE 12) ─────────────────────────────────────────── */\n\nexport function mulberry32(seed: number): () => number {\n let a = seed >>> 0;\n return () => {\n a = (a + 0x6D2B79F5) >>> 0;\n let t = Math.imul(a ^ (a >>> 15), 1 | a);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport const fmtWall = (w: Wall): string =>\n `${String(w.year).padStart(4, '0')}-${String(w.month).padStart(2, '0')}-${String(w.day).padStart(2, '0')}` +\n `T${String(w.hours).padStart(2, '0')}:${String(w.minutes).padStart(2, '0')}:${String(w.seconds).padStart(2, '0')}` +\n `.${String(w.ms).padStart(3, '0')}`;\n\n/** Inverse of wallToUTCms — read a \"UTC-pretending\" epoch back as wall digits. */\nexport function wallFromUTCms(ms: number): Wall {\n const d = new Date(ms);\n return {\n year: d.getUTCFullYear(), month: d.getUTCMonth() + 1, day: d.getUTCDate(),\n hours: d.getUTCHours(), minutes: d.getUTCMinutes(),\n seconds: d.getUTCSeconds(), ms: d.getUTCMilliseconds(),\n };\n}\n\n/** Classify a transition and give a wall clock strictly inside the gap/overlap. */\nexport function transitionShape(t: number, zone: string): {\n kind: 'forward' | 'backward'; deltaMs: number; insideWall: Wall;\n offBefore: number; offAfter: number;\n} {\n const offBefore = offsetAt(t - 1, zone);\n const offAfter = offsetAt(t, zone);\n const deltaMs = offAfter - offBefore;\n // wall clocks in [t+offBefore, t+offAfter) are skipped (forward) or repeated\n // (backward, with the interval reversed). Take the midpoint either way.\n const lo = Math.min(t + offBefore, t + offAfter);\n const hi = Math.max(t + offBefore, t + offAfter);\n return {\n kind: deltaMs > 0 ? 'forward' : 'backward',\n deltaMs,\n insideWall: wallFromUTCms(lo + Math.floor((hi - lo) / 2)),\n offBefore, offAfter,\n };\n}\n\n/* ==========================================================================\n PART 2 — DRIVER + INVARIANT CHECKER\n (was harness.ts)\n ========================================================================== */\n\nexport type Payload = {\n value: string | null;\n localTimezoneValue: Date | null;\n unixEpoch: number | null;\n timezone: string;\n};\n\nexport type Violation = { code: string; detail: string };\n\n/* ── driving the real component ───────────────────────────────────────────── */\n\nexport async function makePicker(attrs: { value?: string | null; timezone?: string }): Promise<any> {\n const el: any = attrs.value === undefined || attrs.value === null\n ? await fixture(html`<nile-date-time-picker .timezone=${attrs.timezone ?? 'UTC'}></nile-date-time-picker>`)\n : await fixture(html`<nile-date-time-picker\n value=${attrs.value} .timezone=${attrs.timezone ?? 'UTC'}></nile-date-time-picker>`);\n await settle2(el);\n return el;\n}\n\nexport async function settle(el: any): Promise<any> {\n await el.updateComplete;\n const cal = el.calendarElement;\n if (cal) await cal.updateComplete;\n return cal;\n}\n\n/** A preset value may adopt a zone, scheduling a second update. Settle twice. */\nexport async function settle2(el: any): Promise<any> {\n await settle(el);\n return settle(el);\n}\n\nexport let LAST_EMIT_COUNT = 0;\n\nexport const applyButton = (cal: any): HTMLElement =>\n cal.shadowRoot.querySelector('.apply-button') as HTMLElement;\n\n/** Click the real Apply button and capture the single committed payload. */\nexport async function apply(el: any): Promise<Payload | null> {\n const cal = await settle(el);\n let detail: Payload | null = null;\n let count = 0;\n const onChange = (e: Event) => { detail = (e as CustomEvent).detail; count += 1; };\n el.addEventListener('nile-change', onChange);\n applyButton(cal).click();\n await settle(el);\n el.removeEventListener('nile-change', onChange);\n // Apply legitimately emits nothing when there is no selection — record the\n // count without assuming a payload exists.\n LAST_EMIT_COUNT = count;\n if (detail) (detail as any).__emitCount = count;\n return detail;\n}\n\n/** Seed a wall clock directly into the panel, then Apply. */\nexport async function selectAndApply(\n el: any, w: Wall, zone: string\n): Promise<Payload | null> {\n const cal = await settle(el);\n cal.timezone = zone;\n await settle(el);\n // the day is read field-wise from `value`; noon anchor keeps the DAY stable\n cal.value = localDateFromFields(w.year, w.month - 1, w.day, 12, 0, 0, 0);\n cal.currentMonth = w.month - 1;\n cal.currentYear = w.year;\n cal.tpHours = w.hours;\n cal.tpMinutes = w.minutes;\n cal.tpSeconds = w.seconds;\n cal.tpMilliseconds = w.ms;\n await settle(el);\n return apply(el);\n}\n\n/* ── PHASE 16: the invariant checker ─────────────────────────────────────── */\n\n/**\n * Every assertion is made against the ORACLE, never against component helpers.\n * Returns [] when the payload is internally consistent.\n */\nexport function checkPayload(p: Payload | null, intendedZone?: string): Violation[] {\n const v: Violation[] = [];\n if (!p) return [{ code: 'NO_PAYLOAD', detail: 'Apply emitted nothing' }];\n\n if (p.unixEpoch === null) {\n if (p.value !== null) v.push({ code: 'NULL_EPOCH_WITH_VALUE', detail: `value=${p.value}` });\n return v;\n }\n\n // A. localTimezoneValue mirrors the epoch\n if (!p.localTimezoneValue || p.localTimezoneValue.getTime() !== p.unixEpoch) {\n v.push({\n code: 'A_LTV_NE_EPOCH',\n detail: `localTimezoneValue=${p.localTimezoneValue && p.localTimezoneValue.getTime()} epoch=${p.unixEpoch}`,\n });\n }\n\n // E. timezone is the intended one\n if (intendedZone !== undefined && p.timezone !== intendedZone) {\n v.push({ code: 'E_TZ_MISMATCH', detail: `payload tz=${p.timezone} intended=${intendedZone}` });\n }\n\n if (p.value === null) {\n v.push({ code: 'EPOCH_WITHOUT_VALUE', detail: `epoch=${p.unixEpoch}` });\n return v;\n }\n\n const parsed = parseBracketed(p.value);\n if (!parsed) {\n v.push({ code: 'VALUE_UNPARSABLE', detail: `value=${p.value}` });\n return v;\n }\n\n // D. printed offset == zone's ACTUAL offset at the epoch\n let trueOff: number | null = null;\n try { trueOff = offsetAt(p.unixEpoch, p.timezone); } catch { /* unresolvable */ }\n if (trueOff !== null && parsed.offsetMs !== trueOff) {\n v.push({\n code: 'D_OFFSET_WRONG',\n detail: `printed=${parsed.offsetMs / 60000}min true=${trueOff / 60000}min at epoch=${p.unixEpoch} tz=${p.timezone}`,\n });\n }\n\n // C. printed digits == the zone's reading of the epoch\n if (trueOff !== null) {\n const expected = wallAt(p.unixEpoch, p.timezone);\n if (!wallEquals(parsed.wall, expected)) {\n v.push({\n code: 'C_DIGITS_WRONG',\n detail: `printed=${fmtWall(parsed.wall)} expected=${fmtWall(expected)} tz=${p.timezone} epoch=${p.unixEpoch}`,\n });\n }\n }\n\n // B. the value, resolved independently, is the same instant as unixEpoch\n // (digits - printed offset must equal the epoch)\n const fromValue = utcFromFields(\n parsed.wall.year, parsed.wall.month - 1, parsed.wall.day,\n parsed.wall.hours, parsed.wall.minutes, parsed.wall.seconds, parsed.wall.ms\n ) - parsed.offsetMs;\n if (fromValue !== p.unixEpoch) {\n v.push({\n code: 'B_VALUE_NE_EPOCH',\n detail: `value resolves to ${fromValue} but unixEpoch=${p.unixEpoch} (delta ${fromValue - p.unixEpoch}ms) value=${p.value}`,\n });\n }\n\n return v;\n}\n\n/** F. emit -> reload -> Apply preserves the epoch exactly. */\nexport async function roundTrip(p: Payload): Promise<{ second: Payload | null; violations: Violation[] }> {\n const el2 = await makePicker({ value: p.value, timezone: p.timezone });\n const second = await apply(el2);\n const violations = checkPayload(second, undefined);\n if (second && second.unixEpoch !== p.unixEpoch) {\n violations.push({\n code: 'F_EPOCH_DRIFT',\n detail: `first=${p.unixEpoch} second=${second.unixEpoch} delta=${(second.unixEpoch ?? 0) - (p.unixEpoch ?? 0)}ms value=${p.value}`,\n });\n }\n return { second, violations };\n}\n\nexport const HOST_TZ = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n/** Collects failures so a sweep reports ALL of them, not just the first. */\nexport class Failures {\n rows: string[] = [];\n add(ctx: string, vs: Violation[]) {\n for (const x of vs) this.rows.push(`[${x.code}] ${ctx} :: ${x.detail}`);\n }\n get count() { return this.rows.length; }\n report(limit = 25): string {\n if (!this.rows.length) return '';\n const head = this.rows.slice(0, limit).join('\\n ');\n return `\\n ${head}${this.rows.length > limit ? `\\n ...and ${this.rows.length - limit} more` : ''}`;\n }\n}\n\n/* ==========================================================================\n PART 3 — PHASE 1: oracle validation + driver smoke test\n (was p1-oracle.test.ts)\n ========================================================================== */\n\ndescribe('PHASE 1 — oracle validation', () => {\n it('P1.0 reports the environment (host zone, Temporal, zone count)', () => {\n const zones = runtimeZones();\n // eslint-disable-next-line no-console\n console.warn(`[audit-env] hostTZ=${HOST_TZ} temporal=${TEMPORAL ? 'YES' : 'NO'} ` +\n `zones=${zones.length} ua=${navigator.userAgent.slice(0, 60)}`);\n expect(zones.length, 'runtime must expose a timezone list').to.be.greaterThan(100);\n });\n\n it('P1.1 offsetAt matches known fixed offsets', () => {\n const t = Date.UTC(2026, 5, 15, 12, 0, 0);\n expect(offsetAt(t, 'UTC')).to.equal(0);\n expect(offsetAt(t, 'Asia/Kolkata')).to.equal(5.5 * 3600000);\n expect(offsetAt(t, 'Asia/Kathmandu')).to.equal(5.75 * 3600000);\n expect(offsetAt(t, 'Australia/Eucla')).to.equal(8.75 * 3600000);\n expect(offsetAt(t, 'Pacific/Kiritimati')).to.equal(14 * 3600000);\n expect(offsetAt(t, 'Pacific/Marquesas')).to.equal(-9.5 * 3600000);\n expect(offsetAt(t, 'America/St_Johns')).to.equal(-2.5 * 3600000); // NDT in June\n });\n\n it('P1.2 wallAt round-trips against instantsFor on unambiguous times', () => {\n const zones = ['UTC', 'Asia/Kolkata', 'America/New_York', 'Pacific/Auckland', 'Australia/Lord_Howe'];\n for (const z of zones) {\n for (const t of [Date.UTC(2026, 0, 15, 3, 7, 11, 123), Date.UTC(2026, 6, 15, 18, 44, 2, 9)]) {\n const w = wallAt(t, z);\n const back = instantsFor(w, z);\n expect(back, `${z} ${fmtWall(w)}`).to.include(t);\n }\n }\n });\n\n it('P1.3 instantsFor returns 0 for a gap and 2 for an overlap (New York 2026)', () => {\n const gap = instantsFor(\n { year: 2026, month: 3, day: 8, hours: 2, minutes: 30, seconds: 0, ms: 0 }, 'America/New_York');\n expect(gap, 'spring-forward 02:30 must not exist').to.have.lengthOf(0);\n\n const dup = instantsFor(\n { year: 2026, month: 11, day: 1, hours: 1, minutes: 30, seconds: 0, ms: 0 }, 'America/New_York');\n expect(dup, 'fall-back 01:30 occurs twice').to.have.lengthOf(2);\n expect(dup[1] - dup[0], 'occurrences are 1h apart').to.equal(3600000);\n });\n\n it('P1.4 Temporal agrees with the oracle — or is explicitly absent (never silent)', () => {\n if (!TEMPORAL) {\n // eslint-disable-next-line no-console\n console.warn('[audit-env] TEMPORAL UNAVAILABLE — P1.4 cross-check NOT PERFORMED. ' +\n 'Oracle rests on Intl longOffset + UTC arithmetic alone.');\n expect(TEMPORAL, 'recorded as not-tested, not as passed').to.equal(null);\n return;\n }\n // Current Temporal: Temporal.TimeZone was removed; zones are plain strings\n // reached through ZonedDateTime. Probe the shape rather than assume it.\n const probe = TEMPORAL.Instant && TEMPORAL.Instant.fromEpochMilliseconds;\n if (!probe) {\n // eslint-disable-next-line no-console\n console.warn('[audit-env] Temporal present but Instant.fromEpochMilliseconds missing — NOT TESTED');\n expect.fail('Temporal present but unusable — investigate rather than silently pass');\n }\n let checked = 0;\n for (const z of ['UTC', 'Asia/Kolkata', 'Asia/Kathmandu', 'America/New_York',\n 'Australia/Lord_Howe', 'Pacific/Chatham', 'Pacific/Kiritimati', 'America/St_Johns']) {\n for (const t of [Date.UTC(2026, 0, 15, 12, 0, 0), Date.UTC(2026, 6, 15, 12, 0, 0)]) {\n const zdt = TEMPORAL.Instant.fromEpochMilliseconds(t).toZonedDateTimeISO(z);\n expect(Number(zdt.offsetNanoseconds) / 1e6, `Temporal vs oracle ${z} @${t}`)\n .to.equal(offsetAt(t, z));\n const w = wallAt(t, z);\n expect(zdt.year, `Temporal year ${z}`).to.equal(w.year);\n expect(zdt.month, `Temporal month ${z}`).to.equal(w.month);\n expect(zdt.day, `Temporal day ${z}`).to.equal(w.day);\n expect(zdt.hour, `Temporal hour ${z}`).to.equal(w.hours);\n expect(zdt.minute, `Temporal minute ${z}`).to.equal(w.minutes);\n checked += 1;\n }\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-env] Temporal cross-check PERFORMED on ${checked} zone/date pairs`);\n });\n\n it('P1.5 findTransitions locates the two US 2026 transitions', () => {\n const ts = findTransitions('America/New_York', Date.UTC(2026, 0, 1), Date.UTC(2027, 0, 1));\n expect(ts, 'two transitions in 2026').to.have.lengthOf(2);\n expect(wallAt(ts[0], 'America/New_York').month).to.equal(3);\n expect(wallAt(ts[1], 'America/New_York').month).to.equal(11);\n });\n\n it('P1.6 independent parsers agree with hand-computed instants', () => {\n expect(parseInstantString('2026-06-15T09:00:00.000Z')).to.equal(Date.UTC(2026, 5, 15, 9, 0, 0, 0));\n expect(parseInstantString('2026-06-15T14:30:00.000+05:30')).to.equal(Date.UTC(2026, 5, 15, 9, 0, 0, 0));\n expect(parseInstantString('2026-06-15T14:30:00.000')).to.equal(null);\n const b = parseBracketed('2026-06-15T14:30:00.000[GMT+05:30 Asia/Kolkata]')!;\n expect(b.zone).to.equal('Asia/Kolkata');\n expect(b.offsetMs).to.equal(5.5 * 3600000);\n const o = parseOffsetLess('2026-06-15T14:30:00.250')!;\n expect(o.ms, 'fractional read as written').to.equal(250);\n });\n});\n\ndescribe('PHASE 1 — driver smoke test (real component, real Apply)', () => {\n it('P1.7 a Z value applies and yields a self-consistent payload', async () => {\n const el = await makePicker({ value: '2026-06-15T09:00:00.000Z', timezone: 'Asia/Kolkata' });\n const p = await apply(el);\n // eslint-disable-next-line no-console\n console.warn(`[audit-drive] payload=${JSON.stringify({\n value: p!.value, unixEpoch: p!.unixEpoch, timezone: p!.timezone,\n })}`);\n expect(p, 'Apply emitted a payload').to.exist;\n expect(p!.unixEpoch, 'instant preserved').to.equal(Date.UTC(2026, 5, 15, 9, 0, 0, 0));\n expect(checkPayload(p, 'Asia/Kolkata'), 'invariant violations').to.deep.equal([]);\n });\n});\n\n/* ==========================================================================\n PART 4 — PHASE 2: year range and calendar arithmetic\n (was p2-years.test.ts)\n ========================================================================== */\n\n/** An offset a real tzdb zone could have: |offset| <= 26h, whole minutes. */\nfunction offsetIsSane(offsetMs: number): boolean {\n return Number.isFinite(offsetMs) && Math.abs(offsetMs) <= 26 * 3600000 && offsetMs % 60000 === 0;\n}\n\nconst RE_BRACKET = /\\[GMT([+-])(\\d+):(\\d{2})\\s+([^\\]]+)\\]$/;\n\nfunction printedOffsetMs(value: string): number | null {\n const m = RE_BRACKET.exec(value);\n if (!m) return null;\n return (m[1] === '-' ? -1 : 1) * (Number(m[2]) * 3600000 + Number(m[3]) * 60000);\n}\n\ndescribe('PHASE 2 — year range and calendar arithmetic', () => {\n it('P2.0 finds the lowest year whose emitted offset is still sane (UTC)', async () => {\n const rows: string[] = [];\n let firstBad: number | null = null;\n for (const y of [1, 50, 100, 200, 500, 1000, 1500, 1600, 1700, 1800, 1850,\n 1875, 1880, 1890, 1900, 1901, 1910, 1950, 2000, 2026, 2100]) {\n const el = await makePicker({});\n const w: Wall = { year: y, month: 6, day: 15, hours: 12, minutes: 0, seconds: 0, ms: 0 };\n const p = await selectAndApply(el, w, 'UTC');\n const off = p && p.value ? printedOffsetMs(p.value) : null;\n const sane = off !== null && offsetIsSane(off);\n if (!sane && firstBad === null) firstBad = y;\n rows.push(`year=${String(y).padStart(4)} sane=${sane ? 'YES' : 'NO '} ` +\n `printedOffset=${off === null ? 'unparsable' : off / 3600000 + 'h'} ` +\n `epoch=${p && p.unixEpoch} value=${p && p.value}`);\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p2] host=${HOST_TZ} emitted-offset sanity by year:\\n ${rows.join('\\n ')}`);\n expect(rows.length).to.be.greaterThan(0);\n }).timeout(600000);\n\n it('P2.1 1900-2100 (every year, mid-month) emits sane offsets and round-trips', async () => {\n const f = new Failures();\n let n = 0;\n const subMinute: Array<{ y: number; z: string }> = [];\n for (let y = 1900; y <= 2100; y++) {\n for (const z of ['UTC', 'Asia/Kolkata', 'America/New_York']) {\n const w: Wall = { year: y, month: 6, day: 15, hours: 12, minutes: 30, seconds: 15, ms: 250 };\n const insts = instantsFor(w, z);\n if (insts.length !== 1) continue;\n // The bracket is `[GMT±hh:mm]`: it cannot carry a historical sub-minute (LMT) offset, so a value in such\n // an era is rounded by design (see FA.1). Skip only those, and pin below that they are all pre-1972.\n if (offsetAt(insts[0], z) % 60000 !== 0) { subMinute.push({ y, z }); continue; }\n const el = await makePicker({});\n const p = await selectAndApply(el, w, z);\n const ctx = `year=${y} tz=${z}`;\n f.add(ctx, checkPayload(p, z));\n if (p && p.value) {\n const off = printedOffsetMs(p.value);\n if (off === null || !offsetIsSane(off)) {\n f.add(ctx, [{ code: 'P2_INSANE_OFFSET', detail: `value=${p.value}` }]);\n }\n }\n if (p && p.unixEpoch !== null) f.add(ctx, (await roundTrip(p)).violations);\n n += 1;\n }\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p2] 1900-2100 probes=${n} skipped(sub-minute offset)=${subMinute.length} violations=${f.count}`);\n expect(f.count, `year-range violations:${f.report()}`).to.equal(0);\n expect(subMinute.every((x) => x.y < 1972), 'only pre-1972 LMT-era instants are exempt').to.be.true;\n expect(n, 'the sweep still covers (nearly) every modern year').to.be.greaterThan(500);\n }).timeout(2400000);\n\n it('P2.2 month lengths, leap rules, 1900/2000/2100, Jan<->Dec edges', async () => {\n const f = new Failures();\n const cases: Array<[number, number, number, string]> = [\n [2024, 2, 29, 'leap 2024 valid'], [2000, 2, 29, 'century leap 2000 valid'],\n [2026, 1, 31, '31-day'], [2026, 4, 30, '30-day'], [2026, 2, 28, '28-day'],\n [2026, 12, 31, 'Dec 31'], [2026, 1, 1, 'Jan 1'],\n [1900, 3, 1, '1900 non-leap: Mar 1'], [2100, 3, 1, '2100 non-leap: Mar 1'],\n ];\n for (const [y, mo, d, label] of cases) {\n for (const z of ['UTC', 'Asia/Kolkata']) {\n const w: Wall = { year: y, month: mo, day: d, hours: 10, minutes: 0, seconds: 0, ms: 0 };\n const insts = instantsFor(w, z);\n if (insts.length !== 1) continue;\n // 1900 Asia/Kolkata is +05:21:10 (LMT): not representable in `[GMT±hh:mm]` (rounded by design, see FA.1).\n // UTC covers the 1900 non-leap case; the Kolkata 1900 row is exempt only for that sub-minute reason.\n if (offsetAt(insts[0], z) % 60000 !== 0) { expect(y, 'exempt only for LMT-era years').to.be.lessThan(1972); continue; }\n const el = await makePicker({});\n const p = await selectAndApply(el, w, z);\n const ctx = `${label} tz=${z} ${fmtWall(w)}`;\n f.add(ctx, checkPayload(p, z));\n if (p && p.unixEpoch !== null) {\n const back = wallAt(p.unixEpoch, z);\n if (back.year !== y || back.month !== mo || back.day !== d) {\n f.add(ctx, [{ code: 'P2_DATE_CHANGED', detail: `got ${back.year}-${back.month}-${back.day}` }]);\n }\n }\n }\n }\n expect(f.count, `calendar violations:${f.report()}`).to.equal(0);\n }).timeout(600000);\n\n it('P2.3 classifies impossible dates supplied as a value (REJECT/CLAMP/NORMALIZE)', async () => {\n const notes: string[] = [];\n for (const raw of ['2026-02-31T10:00:00.000', '2026-02-30', '2025-02-29T10:00:00.000',\n '2026-04-31T10:00:00.000', '2026-00-10T10:00:00.000', '2026-06-00T10:00:00.000']) {\n const el = await makePicker({ value: raw, timezone: 'UTC' });\n const p = await apply(el);\n let cls = 'REJECT(no payload)';\n if (p && p.unixEpoch !== null) {\n const w = wallAt(p.unixEpoch, 'UTC');\n const askedDay = Number(raw.slice(8, 10));\n cls = w.day === askedDay ? 'PRESERVE' : `CLAMP/NORMALIZE -> day ${w.day}`;\n } else if (p) cls = 'REJECT(null epoch)';\n notes.push(`${raw.padEnd(26)} ${cls.padEnd(28)} value=${p && p.value}`);\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p2] impossible-date classification:\\n ${notes.join('\\n ')}`);\n expect(notes.length).to.equal(6);\n }).timeout(300000);\n});\n\n/* ==========================================================================\n PART 4b — focused: sub-minute offsets and extreme years\n (was p2b-suboffset.test.ts)\n ========================================================================== */\n\ndescribe('FOCUS A — sub-minute zone offsets', () => {\n it('FA.0 measures how many zones have sub-minute offsets, and until when', () => {\n const zones = runtimeZones();\n const offenders: string[] = [];\n let latestSubMinute = -Infinity;\n for (const z of zones) {\n // probe one instant per decade 1880..2100\n for (let y = 1880; y <= 2100; y += 10) {\n const t = Date.UTC(y, 5, 15, 12, 0, 0);\n const off = offsetAt(t, z);\n if (off % 60000 !== 0) {\n if (offenders.indexOf(z) === -1) offenders.push(z);\n if (t > latestSubMinute) latestSubMinute = t;\n }\n }\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-focusA] zonesWithSubMinuteOffset=${offenders.length}/${zones.length} ` +\n `latestSubMinuteInstant=${latestSubMinute === -Infinity ? 'none' : new Date(latestSubMinute).toISOString()} ` +\n `sample=${offenders.slice(0, 15).join(',')}`);\n expect(zones.length).to.be.greaterThan(0);\n }).timeout(600000);\n\n it('FA.1 REPRODUCTION: Asia/Kolkata 1900-06-15 12:30:15.250 — value != its own epoch', async () => {\n const z = 'Asia/Kolkata';\n const w: Wall = { year: 1900, month: 6, day: 15, hours: 12, minutes: 30, seconds: 15, ms: 250 };\n const el = await makePicker({});\n const p = await selectAndApply(el, w, z);\n expect(p, 'payload').to.exist;\n const epoch = p!.unixEpoch!;\n const trueOff = offsetAt(epoch, z);\n const viol = checkPayload(p, z);\n\n // parse the printed bracket independently\n const m = /\\[GMT([+-])(\\d{2}):(\\d{2})\\s+([^\\]]+)\\]$/.exec(p!.value!)!;\n const printed = (m[1] === '-' ? -1 : 1) * (Number(m[2]) * 3600000 + Number(m[3]) * 60000);\n const digits = p!.value!.slice(0, 23);\n const fromValue = Date.parse(digits + 'Z') - printed;\n\n // does a RELOAD still land on the same epoch?\n const rt = await roundTrip(p!);\n\n // eslint-disable-next-line no-console\n console.warn(`[audit-focusA] REPRO host=${HOST_TZ} tz=${z}\\n` +\n ` selected = ${fmtWall(w)}\\n` +\n ` unixEpoch = ${epoch}\\n` +\n ` true offset = ${trueOff}ms (${trueOff / 60000} min, i.e. ${trueOff / 1000}s)\\n` +\n ` printed offset= ${printed}ms (${printed / 60000} min)\\n` +\n ` offset lost = ${trueOff - printed}ms\\n` +\n ` emitted value = ${p!.value}\\n` +\n ` value resolves to ${fromValue} (delta vs epoch = ${fromValue - epoch}ms)\\n` +\n ` reload epoch = ${rt.second && rt.second.unixEpoch} ` +\n `(${rt.second && rt.second.unixEpoch === epoch ? 'PRESERVED' : 'DRIFTED'})\\n` +\n ` violations = ${viol.map(v => v.code).join(',') || 'none'}`);\n\n expect(trueOff % 60000, 'this zone/date genuinely has a sub-minute offset').to.not.equal(0);\n expect(fromValue - epoch, 'the emitted value does NOT describe its own epoch').to.not.equal(0);\n }).timeout(300000);\n\n // Start at 1972: Africa/Monrovia genuinely used -00:44:30 until 1972-01-07, so 1970-71 is not 'modern' (tzdata history).\n it('FA.2 modern era (1972-2100) has NO sub-minute offsets in any zone', () => {\n const zones = runtimeZones();\n const bad: string[] = [];\n for (const z of zones) {\n for (let y = 1972; y <= 2100; y += 5) {\n for (const mo of [0, 6]) {\n const off = offsetAt(Date.UTC(y, mo, 15, 12), z);\n if (off % 60000 !== 0) bad.push(`${z}@${y}-${mo + 1}`);\n }\n }\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-focusA] modern-era sub-minute offsets=${bad.length} ${bad.slice(0, 10).join(',')}`);\n expect(bad, 'no modern zone has a sub-minute offset').to.deep.equal([]);\n }).timeout(600000);\n});\n\ndescribe('FOCUS B — extreme years through the Z-instant path', () => {\n it('FB.1 records emitted offset sanity for extreme years (no harness Date() involved)', async () => {\n const rows: string[] = [];\n for (const raw of [\n '0001-01-01T00:00:00.000Z', '0100-06-15T12:00:00.000Z', '1000-06-15T12:00:00.000Z',\n '1700-06-15T12:00:00.000Z', '1900-06-15T12:00:00.000Z', '2026-06-15T12:00:00.000Z',\n '2100-06-15T12:00:00.000Z', '9999-12-31T23:59:59.999Z',\n ]) {\n const el = await makePicker({ value: raw, timezone: 'UTC' });\n const p = await apply(el);\n const m = p && p.value ? /\\[GMT([+-])(\\d+):(\\d{2})/.exec(p.value) : null;\n const hours = m ? Number(m[2]) : NaN;\n rows.push(`${raw} -> epoch=${p && p.unixEpoch} offsetHours=${m ? (m[1] + String(hours)) : 'n/a'} ` +\n `${Number.isFinite(hours) && hours > 26 ? '<<< INSANE' : ''} value=${p && p.value}`);\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-focusB] extreme-year Z inputs:\\n ${rows.join('\\n ')}`);\n expect(rows.length).to.equal(8);\n }).timeout(300000);\n\n it('FB.2 records the component date-only path for 2-digit-looking years', async () => {\n const rows: string[] = [];\n for (const raw of ['0050-06-15', '0099-06-15', '0100-06-15', '1950-06-15']) {\n const el = await makePicker({ value: raw, timezone: 'UTC' });\n const p = await apply(el);\n const w = p && p.unixEpoch !== null ? wallAt(p.unixEpoch, 'UTC') : null;\n rows.push(`${raw} -> epoch=${p && p.unixEpoch} readsBackAsYear=${w && w.year} value=${p && p.value}`);\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-focusB] date-only low years (component path):\\n ${rows.join('\\n ')}`);\n expect(rows.length).to.equal(4);\n }).timeout(300000);\n});\n\n/* ==========================================================================\n PART 5 — PHASE 3: timezone sweep\n (was p3-zones.test.ts)\n ========================================================================== */\n\nconst NAMED = [\n 'UTC', 'Asia/Kolkata', 'Asia/Calcutta', 'Asia/Kathmandu', 'Australia/Eucla',\n 'Australia/Lord_Howe', 'America/St_Johns', 'America/New_York', 'Europe/London',\n 'Pacific/Auckland', 'Pacific/Kiritimati', 'Pacific/Marquesas',\n];\n\n// Representative wall clocks across the year, with awkward ms/seconds.\nconst PROBES: Wall[] = [\n { year: 2026, month: 1, day: 15, hours: 9, minutes: 30, seconds: 0, ms: 0 },\n { year: 2026, month: 7, day: 15, hours: 14, minutes: 45, seconds: 7, ms: 123 },\n { year: 2026, month: 10, day: 31, hours: 23, minutes: 59, seconds: 59, ms: 999 },\n];\n\nasync function probeZone(zone: string, w: Wall, f: Failures): Promise<void> {\n const el = await makePicker({});\n const p = await selectAndApply(el, w, zone);\n const ctx = `tz=${zone} want=${fmtWall(w)} host=${HOST_TZ}`;\n f.add(ctx, checkPayload(p, zone));\n if (!p || p.unixEpoch === null) { f.add(ctx, [{ code: 'NO_EPOCH', detail: 'apply produced none' }]); return; }\n const rt = await roundTrip(p);\n f.add(`${ctx} value=${p.value}`, rt.violations);\n}\n\ndescribe('PHASE 3 — timezone sweep', () => {\n it('P3.0 records both zone sources and their divergence (diagnostic, no spelling assumed)', () => {\n const runtime = runtimeZones();\n const onlyRuntime = runtime.filter(z => TIMEZONES.indexOf(z) === -1);\n const onlyStatic = TIMEZONES.filter(z => runtime.indexOf(z) === -1);\n const unresolvableStatic = TIMEZONES.filter(z => !isResolvable(z));\n // eslint-disable-next-line no-console\n console.warn(`[audit-p3] host=${HOST_TZ} runtimeZones=${runtime.length} staticList=${TIMEZONES.length} ` +\n `onlyRuntime=${onlyRuntime.length} onlyStatic=${onlyStatic.length} ` +\n `staticUnresolvableByIntl=${unresolvableStatic.length} ` +\n `india(runtime)=${runtime.filter(z => /Kolkata|Calcutta/.test(z)).join('|')} ` +\n `india(static)=${TIMEZONES.filter(z => /Kolkata|Calcutta/.test(z)).join('|')}`);\n expect(runtime.length, 'runtime exposes a zone list').to.be.greaterThan(100);\n // Any static-list entry Intl cannot resolve would be offered by the legacy\n // fallback dropdown yet rejected by isValidTimezone — record it explicitly.\n expect(unresolvableStatic, 'static fallback entries Intl rejects').to.deep.equal([]);\n });\n\n it('P3.1 explicitly named zones round-trip with no invariant violation', async () => {\n const f = new Failures();\n for (const z of NAMED) for (const w of PROBES) await probeZone(z, w, f);\n expect(f.count, `named-zone violations:${f.report()}`).to.equal(0);\n }).timeout(180000);\n\n it('P3.2 EVERY runtime zone round-trips (one probe each)', async () => {\n const f = new Failures();\n const zones = runtimeZones();\n let n = 0;\n for (const z of zones) { await probeZone(z, PROBES[1], f); n += 1; }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p3] swept ${n} zones, violations=${f.count}`);\n expect(f.count, `all-zone violations:${f.report()}`).to.equal(0);\n }).timeout(900000);\n\n it('P3.3 a valid alias is never silently downgraded to UTC', async () => {\n const f = new Failures();\n const aliases: Array<[string, string]> = [\n ['Asia/Calcutta', 'Asia/Kolkata'], ['Asia/Saigon', 'Asia/Ho_Chi_Minh'],\n ['Europe/Kiev', 'Europe/Kyiv'], ['America/Godthab', 'America/Nuuk'],\n ['Asia/Rangoon', 'Asia/Yangon'], ['Pacific/Ponape', 'Pacific/Pohnpei'],\n ];\n for (const [alias, canonical] of aliases) {\n let resolvable = true;\n try { new Intl.DateTimeFormat('en-US', { timeZone: alias }); } catch { resolvable = false; }\n if (!resolvable) continue;\n const w = PROBES[1];\n const el = await makePicker({});\n const p = await selectAndApply(el, w, alias);\n const ctx = `alias=${alias} canonical=${canonical}`;\n f.add(ctx, checkPayload(p));\n if (p && p.unixEpoch !== null) {\n // the epoch must match the canonical zone's resolution, never UTC's\n const el2 = await makePicker({});\n const pc = await selectAndApply(el2, w, canonical);\n if (pc && pc.unixEpoch !== p.unixEpoch) {\n f.add(ctx, [{ code: 'ALIAS_EPOCH_DIVERGES', detail: `alias=${p.unixEpoch} canonical=${pc.unixEpoch}` }]);\n }\n if (offsetAt(p.unixEpoch, alias) === 0 && offsetAt(p.unixEpoch, canonical) !== 0) {\n f.add(ctx, [{ code: 'ALIAS_DOWNGRADED_TO_UTC', detail: `value=${p.value}` }]);\n }\n }\n }\n expect(f.count, `alias violations:${f.report()}`).to.equal(0);\n }).timeout(180000);\n\n it('P3.5 EVERY static-fallback zone round-trips (legacy dropdown path)', async () => {\n const f = new Failures();\n let n = 0;\n for (const z of TIMEZONES) {\n if (!isResolvable(z)) continue;\n await probeZone(z, PROBES[1], f); n += 1;\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p3] swept ${n} static-fallback zones, violations=${f.count}`);\n expect(f.count, `static-list violations:${f.report()}`).to.equal(0);\n }).timeout(900000);\n\n it('P3.4 sub-hour zones (:30 / :45 / :15) keep exact offsets', async () => {\n const f = new Failures();\n for (const z of ['Asia/Kolkata', 'Asia/Kathmandu', 'Australia/Eucla',\n 'America/St_Johns', 'Pacific/Chatham', 'Pacific/Marquesas', 'Australia/Lord_Howe']) {\n for (const w of PROBES) {\n const el = await makePicker({});\n const p = await selectAndApply(el, w, z);\n const ctx = `subhour tz=${z} want=${fmtWall(w)}`;\n f.add(ctx, checkPayload(p, z));\n if (p && p.unixEpoch !== null) {\n const off = offsetAt(p.unixEpoch, z);\n if (off % 3600000 === 0 && ['Asia/Kolkata', 'Asia/Kathmandu'].indexOf(z) !== -1) {\n f.add(ctx, [{ code: 'SUBHOUR_LOST', detail: `offset became whole hours: ${off}` }]);\n }\n const rt = await roundTrip(p);\n f.add(ctx, rt.violations);\n }\n }\n }\n expect(f.count, `sub-hour violations:${f.report()}`).to.equal(0);\n }).timeout(300000);\n});\n\n/* ==========================================================================\n PART 6 — PHASE 4/5: DST transitions, gaps, overlaps\n (was p4-dst.test.ts)\n ========================================================================== */\n\nconst YEAR_FROM = Date.UTC(2026, 0, 1);\nconst YEAR_TO = Date.UTC(2027, 0, 1);\n\ntype Tr = { zone: string; t: number };\n\nfunction allTransitions(zones: string[]): Tr[] {\n const out: Tr[] = [];\n for (const z of zones) {\n for (const t of findTransitions(z, YEAR_FROM, YEAR_TO)) out.push({ zone: z, t });\n }\n return out;\n}\n\ndescribe('PHASE 4 — every DST transition, found programmatically', () => {\n let transitions: Tr[] = [];\n let zonesWithDst: string[] = [];\n\n it('P4.0 discovers transitions across every runtime zone (2026)', () => {\n const zones = runtimeZones();\n transitions = allTransitions(zones);\n zonesWithDst = Array.from(new Set(transitions.map(t => t.zone)));\n const fwd = transitions.filter(x => transitionShape(x.t, x.zone).kind === 'forward').length;\n // eslint-disable-next-line no-console\n console.warn(`[audit-p4] host=${HOST_TZ} zonesScanned=${zones.length} ` +\n `zonesWithTransitions=${zonesWithDst.length} transitions=${transitions.length} ` +\n `forward=${fwd} backward=${transitions.length - fwd}`);\n expect(transitions.length, 'must find real transitions').to.be.greaterThan(50);\n }).timeout(300000);\n\n it('P4.1 times around EVERY transition stay self-consistent and round-trip', async () => {\n const f = new Failures();\n let probes = 0;\n for (const { zone, t } of transitions) {\n // instants around the transition -> the zone's own wall clock -> select\n for (const dt of [-2 * 3600000, -60000, 0, 60000, 2 * 3600000]) {\n const inst = t + dt;\n const w = wallAt(inst, zone);\n // skip if these digits are ambiguous — covered deliberately in PHASE 5\n if (instantsFor(w, zone).length !== 1) continue;\n const el = await makePicker({});\n const p = await selectAndApply(el, w, zone);\n const ctx = `tz=${zone} t=${t} dt=${dt / 1000}s want=${fmtWall(w)}`;\n f.add(ctx, checkPayload(p, zone));\n if (p && p.unixEpoch !== null) {\n if (p.unixEpoch !== inst) {\n f.add(ctx, [{ code: 'P4_EPOCH_NE_INTENT', detail: `want=${inst} got=${p.unixEpoch} delta=${p.unixEpoch - inst}ms` }]);\n }\n f.add(ctx, (await roundTrip(p)).violations);\n }\n probes += 1;\n }\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p4] around-transition probes=${probes} violations=${f.count}`);\n expect(f.count, `transition violations:${f.report()}`).to.equal(0);\n }).timeout(1800000);\n\n it('P4.2 GAP: a nonexistent wall clock still emits a payload describing its own epoch', async () => {\n const f = new Failures();\n const notes: string[] = [];\n let n = 0; let before = 0; let after = 0; const afterZones: string[] = [];\n let posButBefore = 0; let negButAfter = 0;\n for (const { zone, t } of transitions) {\n const sh = transitionShape(t, zone);\n if (sh.kind !== 'forward') continue;\n const w = sh.insideWall;\n if (instantsFor(w, zone).length !== 0) continue; // must truly be a gap\n const el = await makePicker({});\n const p = await selectAndApply(el, w, zone);\n const ctx = `GAP tz=${zone} want=${fmtWall(w)} delta=${sh.deltaMs / 60000}min`;\n // THE critical invariant: whatever it resolves to, the payload must be\n // internally truthful about its own epoch.\n f.add(ctx, checkPayload(p, zone));\n if (p && p.unixEpoch !== null) {\n f.add(ctx, (await roundTrip(p)).violations);\n if (p.unixEpoch < t) { before += 1; if (sh.offBefore >= 0) posButBefore += 1; }\n else { after += 1; afterZones.push(zone); if (sh.offBefore < 0) negButAfter += 1; }\n if (n < 6) {\n notes.push(`${zone}: ${fmtWall(w)} -> epoch=${p.unixEpoch} value=${p.value} ` +\n `(lands ${p.unixEpoch < t ? 'BEFORE' : 'AFTER'} the gap)`);\n }\n }\n n += 1;\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p4] gap probes=${n} violations=${f.count} ` +\n `LANDS_BEFORE=${before} LANDS_AFTER=${after} ` +\n `afterZonesSample=${afterZones.slice(0, 12).join(',')} ` +\n `SIGN_CORRELATION: positiveOffsetYetBefore=${posButBefore} negativeOffsetYetAfter=${negButAfter} ` +\n `(0/0 => direction is exactly the sign of the zone offset)` +\n `\\n ${notes.join('\\n ')}`);\n expect(f.count, `gap violations:${f.report()}`).to.equal(0);\n }).timeout(1800000);\n});\n\ndescribe('PHASE 5 — DST overlap: both occurrences must be reachable and distinct', () => {\n it('P5.1 an ambiguous wall clock resolves to a stated occurrence, consistently', async () => {\n const f = new Failures();\n const zones = runtimeZones();\n const trs = allTransitions(zones).filter(x => transitionShape(x.t, x.zone).kind === 'backward');\n const notes: string[] = [];\n let n = 0; let pickFirst = 0; let pickSecond = 0; const secondZones: string[] = [];\n for (const { zone, t } of trs) {\n const sh = transitionShape(t, zone);\n const w: Wall = sh.insideWall;\n const both = instantsFor(w, zone);\n if (both.length !== 2) continue; // must truly be ambiguous\n\n // (a) plain wall-clock selection picks ONE of them, and says so truthfully\n const el = await makePicker({});\n const p = await selectAndApply(el, w, zone);\n const ctx = `OVERLAP tz=${zone} want=${fmtWall(w)}`;\n f.add(ctx, checkPayload(p, zone));\n if (p && p.unixEpoch !== null) {\n if (both.indexOf(p.unixEpoch) === -1) {\n f.add(ctx, [{\n code: 'P5_NOT_AN_OCCURRENCE',\n detail: `epoch=${p.unixEpoch} is neither ${both[0]} nor ${both[1]}`,\n }]);\n }\n f.add(ctx, (await roundTrip(p)).violations);\n }\n\n // (b) the bracketed form with an EXPLICIT offset must select the intended\n // occurrence — the two must not collapse onto one epoch.\n const mk = (epoch: number) => {\n const ww = wallAt(epoch, zone);\n const off = offsetAt(epoch, zone);\n const sign = off < 0 ? '-' : '+';\n const a = Math.abs(off);\n const hh = String(Math.floor(a / 3600000)).padStart(2, '0');\n const mm = String(Math.floor((a % 3600000) / 60000)).padStart(2, '0');\n return `${fmtWall(ww)}[GMT${sign}${hh}:${mm} ${zone}]`;\n };\n const v1 = mk(both[0]);\n const v2 = mk(both[1]);\n const e1 = await apply(await makePicker({ value: v1, timezone: zone }));\n const e2 = await apply(await makePicker({ value: v2, timezone: zone }));\n f.add(`${ctx} first`, checkPayload(e1));\n f.add(`${ctx} second`, checkPayload(e2));\n if (e1 && e2 && e1.unixEpoch !== null && e2.unixEpoch !== null) {\n if (e1.unixEpoch !== both[0]) {\n f.add(ctx, [{ code: 'P5_FIRST_OCCURRENCE_LOST', detail: `want=${both[0]} got=${e1.unixEpoch} from ${v1}` }]);\n }\n if (e2.unixEpoch !== both[1]) {\n f.add(ctx, [{ code: 'P5_SECOND_OCCURRENCE_LOST', detail: `want=${both[1]} got=${e2.unixEpoch} from ${v2}` }]);\n }\n if (e1.unixEpoch === e2.unixEpoch) {\n f.add(ctx, [{ code: 'P5_OCCURRENCES_COLLAPSED', detail: `both -> ${e1.unixEpoch}` }]);\n }\n }\n if (p && p.unixEpoch !== null) {\n if (p.unixEpoch === both[0]) pickFirst += 1;\n else if (p.unixEpoch === both[1]) { pickSecond += 1; secondZones.push(zone); }\n }\n if (n < 5 && p) {\n notes.push(`${zone}: ${fmtWall(w)} occurrences=[${both}] plainSelect=${p.unixEpoch} ` +\n `(${p.unixEpoch === both[0] ? 'FIRST' : p.unixEpoch === both[1] ? 'SECOND' : 'NEITHER'})`);\n }\n n += 1;\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p5] overlap probed=${n} violations=${f.count} ` +\n `PICKS_FIRST=${pickFirst} PICKS_SECOND=${pickSecond} ` +\n `secondZonesSample=${secondZones.slice(0, 12).join(',')}\\n ${notes.join('\\n ')}`);\n expect(n, 'must actually find overlaps to test').to.be.greaterThan(10);\n expect(f.count, `overlap violations:${f.report()}`).to.equal(0);\n }).timeout(1800000);\n});\n\n/* ==========================================================================\n PART 8 — PHASE 6: host-timezone independence\n (was p6-host.test.ts)\n ========================================================================== */\n\ntype Case = { label: string; value?: string; tz: string; wall?: Wall };\n\nconst W = (year: number, month: number, day: number, hours: number,\n minutes: number, seconds: number, ms: number): Wall =>\n ({ year, month, day, hours, minutes, seconds, ms });\n\nconst CASES: Case[] = [\n // ── instant-bearing: epoch MUST be identical on every host ──────────────\n { label: 'Z-utc', value: '2026-06-15T09:00:00.000Z', tz: 'UTC' },\n { label: 'Z-kolkata', value: '2026-06-15T09:00:00.000Z', tz: 'Asia/Kolkata' },\n { label: 'Z-ny', value: '2026-06-15T09:00:00.000Z', tz: 'America/New_York' },\n { label: 'Z-ms999', value: '2026-06-15T09:00:00.999Z', tz: 'Pacific/Chatham' },\n { label: 'off+0530', value: '2026-06-15T14:30:00.000+05:30', tz: 'Asia/Kolkata' },\n { label: 'off-0400', value: '2026-06-15T05:00:00.000-04:00', tz: 'America/New_York' },\n { label: 'off+1400', value: '2026-06-15T23:00:00.000+14:00', tz: 'Pacific/Kiritimati' },\n { label: 'brk-kolkata', value: '2026-06-15T14:30:00.000[GMT+05:30 Asia/Kolkata]', tz: 'Asia/Kolkata' },\n { label: 'brk-alias', value: '2026-06-15T14:30:00.000[GMT+05:30 Asia/Calcutta]', tz: 'Asia/Calcutta' },\n { label: 'brk-dst-1st', value: '2026-11-01T01:30:00.000[GMT-04:00 America/New_York]', tz: 'America/New_York' },\n { label: 'brk-dst-2nd', value: '2026-11-01T01:30:00.000[GMT-05:00 America/New_York]', tz: 'America/New_York' },\n { label: 'brk-lordhowe', value: '2026-06-15T14:30:00.000[GMT+10:30 Australia/Lord_Howe]', tz: 'Australia/Lord_Howe' },\n\n // ── offset-less + date-only: component-zone semantics, also host-free ────\n { label: 'offless-kolkata', value: '2026-06-15T14:30:00.000', tz: 'Asia/Kolkata' },\n { label: 'offless-ny', value: '2026-06-15T14:30:00.000', tz: 'America/New_York' },\n { label: 'offless-gap-ny', value: '2026-03-08T02:30:00.000', tz: 'America/New_York' },\n { label: 'offless-overlap-ny', value: '2026-11-01T01:30:00.000', tz: 'America/New_York' },\n { label: 'dateonly-kolkata', value: '2026-06-15', tz: 'Asia/Kolkata' },\n { label: 'dateonly-kiritimati', value: '2026-06-15', tz: 'Pacific/Kiritimati' },\n\n // ── UI-selected wall clocks in awkward zones ────────────────────────────\n { label: 'sel-chatham', wall: W(2026, 9, 27, 3, 30, 0, 0), tz: 'Pacific/Chatham' },\n { label: 'sel-lordhowe', wall: W(2026, 4, 5, 1, 30, 0, 0), tz: 'Australia/Lord_Howe' },\n { label: 'sel-kathmandu', wall: W(2026, 6, 15, 14, 45, 7, 123), tz: 'Asia/Kathmandu' },\n { label: 'sel-stjohns', wall: W(2026, 3, 8, 0, 30, 0, 0), tz: 'America/St_Johns' },\n { label: 'sel-eucla', wall: W(2026, 12, 31, 23, 59, 59, 999), tz: 'Australia/Eucla' },\n { label: 'sel-marquesas', wall: W(2026, 1, 1, 0, 0, 0, 1), tz: 'Pacific/Marquesas' },\n];\n\ndescribe('PHASE 6 — host-timezone independence', () => {\n it('P6.1 emits the cross-host digest and checks payload invariants locally', async () => {\n const f = new Failures();\n const lines: string[] = [];\n for (const c of CASES) {\n let p;\n if (c.wall) {\n const el = await makePicker({});\n p = await selectAndApply(el, c.wall, c.tz);\n } else {\n const el = await makePicker({ value: c.value!, timezone: c.tz });\n p = await apply(el);\n }\n f.add(`${c.label} host=${HOST_TZ}`, checkPayload(p));\n lines.push(`P6|${c.label}|${p ? p.unixEpoch : 'NONE'}|${p ? p.timezone : 'NONE'}|${p ? p.value : 'NONE'}`);\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p6] host=${HOST_TZ}\\n${lines.join('\\n')}`);\n expect(f.count, `host=${HOST_TZ} payload violations:${f.report()}`).to.equal(0);\n }).timeout(900000);\n\n it('P6.2 the oracle itself is host-independent (sanity on the measuring stick)', () => {\n // If these differed by host, every other comparison would be meaningless.\n const t = Date.UTC(2026, 5, 15, 9, 0, 0, 0);\n const probe = [\n instantsFor(W(2026, 6, 15, 14, 30, 0, 0), 'Asia/Kolkata').join(','),\n instantsFor(W(2026, 3, 8, 2, 30, 0, 0), 'America/New_York').length,\n instantsFor(W(2026, 11, 1, 1, 30, 0, 0), 'America/New_York').length,\n fmtWall(W(2026, 6, 15, 14, 30, 0, 0)),\n t,\n ].join('|');\n // eslint-disable-next-line no-console\n console.warn(`[audit-p6-oracle] host=${HOST_TZ} digest=${probe}`);\n expect(probe, 'Asia/Kolkata 14:30 == 09:00Z').to.contain('1781514000000');\n });\n});\n\n/* ==========================================================================\n PART 7 — PHASE 7/8/9/11/12: ms, boundaries, formats, round-trips, fuzzing\n (was p7912-formats.test.ts)\n ========================================================================== */\n\nconst ZONES = ['UTC', 'Asia/Kolkata', 'Asia/Kathmandu', 'America/New_York',\n 'Australia/Lord_Howe', 'Pacific/Chatham', 'Pacific/Kiritimati', 'America/St_Johns'];\n\ndescribe('PHASE 7 — milliseconds and precision', () => {\n const MS = [0, 1, 9, 10, 99, 100, 250, 500, 999];\n\n it('P7.1 every millisecond value survives select -> Apply -> reload -> Apply', async () => {\n const f = new Failures();\n for (const z of ZONES) {\n for (const ms of MS) {\n const w: Wall = { year: 2026, month: 6, day: 15, hours: 14, minutes: 30, seconds: 45, ms };\n const el = await makePicker({});\n const p = await selectAndApply(el, w, z);\n const ctx = `tz=${z} ms=${ms}`;\n f.add(ctx, checkPayload(p, z));\n if (p && p.unixEpoch !== null) {\n if (p.unixEpoch % 1000 !== ms) {\n f.add(ctx, [{ code: 'P7_MS_LOST', detail: `epoch%1000=${p.unixEpoch % 1000} want=${ms} value=${p.value}` }]);\n }\n // ms must NOT contaminate the offset: +05:30 must never become +05:29\n const off = offsetAt(p.unixEpoch, z);\n if (off % 60000 !== 0) {\n f.add(ctx, [{ code: 'P7_OFFSET_NOT_WHOLE_MINUTES', detail: `offset=${off}ms` }]);\n }\n const parsed = parseBracketed(p.value!);\n if (parsed && parsed.offsetMs !== off) {\n f.add(ctx, [{ code: 'P7_OFFSET_CONTAMINATED', detail: `printed=${parsed.offsetMs} true=${off}` }]);\n }\n f.add(ctx, (await roundTrip(p)).violations);\n }\n }\n }\n expect(f.count, `ms violations:${f.report()}`).to.equal(0);\n }).timeout(600000);\n\n it('P7.2 records CURRENT behaviour of 1- and 2-digit fractional seconds', async () => {\n const notes: string[] = [];\n for (const raw of ['2026-06-15T14:30:00.2', '2026-06-15T14:30:00.25',\n '2026-06-15T14:30:00.250', '2026-06-15T14:30:00.2Z', '2026-06-15T14:30:00.25Z']) {\n const el = await makePicker({ value: raw, timezone: 'Asia/Kolkata' });\n const p = await apply(el);\n notes.push(`${raw} -> epoch=${p && p.unixEpoch} ms=${p && p.unixEpoch !== null ? p.unixEpoch % 1000 : 'n/a'} value=${p && p.value}`);\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p7] fractional-second CURRENT behaviour:\\n ${notes.join('\\n ')}`);\n expect(notes.length).to.equal(5);\n }).timeout(120000);\n});\n\ndescribe('PHASE 8 — time boundaries, no accidental day rollover', () => {\n const TIMES = [\n [0, 0, 0, 0], [0, 0, 0, 1], [11, 59, 59, 999], [12, 0, 0, 0],\n [23, 59, 59, 998], [23, 59, 59, 999],\n ];\n const DAYS: Array<[number, number, number, string]> = [\n [2026, 6, 15, 'normal'], [2026, 1, 31, 'month-end'], [2026, 12, 31, 'year-end'],\n [2024, 2, 29, 'leap-day'], [2026, 3, 8, 'US DST day'], [2026, 11, 1, 'US fall-back day'],\n ];\n\n it('P8.1 boundary times keep their calendar day (or truthfully report the shift)', async () => {\n const f = new Failures();\n for (const z of ['UTC', 'Asia/Kolkata', 'America/New_York', 'Pacific/Kiritimati']) {\n for (const [y, mo, d, label] of DAYS) {\n for (const [h, mi, s, ms] of TIMES) {\n const w: Wall = { year: y, month: mo, day: d, hours: h, minutes: mi, seconds: s, ms };\n const exists = instantsFor(w, z).length > 0;\n const el = await makePicker({});\n const p = await selectAndApply(el, w, z);\n const ctx = `tz=${z} ${label} ${fmtWall(w)}`;\n f.add(ctx, checkPayload(p, z));\n if (p && p.unixEpoch !== null && exists) {\n const back = wallAt(p.unixEpoch, z);\n if (back.day !== d || back.month !== mo || back.year !== y) {\n f.add(ctx, [{\n code: 'P8_DAY_ROLLOVER',\n detail: `selected ${y}-${mo}-${d} but epoch reads ${back.year}-${back.month}-${back.day} in ${z}`,\n }]);\n }\n if (back.hours !== h || back.minutes !== mi || back.seconds !== s || back.ms !== ms) {\n f.add(ctx, [{ code: 'P8_TIME_DRIFT', detail: `got ${fmtWall(back)}` }]);\n }\n }\n }\n }\n }\n expect(f.count, `boundary violations:${f.report()}`).to.equal(0);\n }).timeout(900000);\n});\n\ndescribe('PHASE 9 — input format matrix', () => {\n type Row = { label: string; value: string | null; tz: string; validInstant?: number };\n\n it('P9.1 valid inputs preserve their instant through reload', async () => {\n const f = new Failures();\n const rows: Row[] = [\n { label: 'Z', value: '2026-06-15T09:00:00.000Z', tz: 'Asia/Kolkata', validInstant: Date.UTC(2026, 5, 15, 9) },\n { label: '+offset', value: '2026-06-15T14:30:00.000+05:30', tz: 'Asia/Kolkata', validInstant: Date.UTC(2026, 5, 15, 9) },\n { label: '-offset', value: '2026-06-15T05:00:00.000-04:00', tz: 'America/New_York', validInstant: Date.UTC(2026, 5, 15, 9) },\n { label: 'bracketed UTC', value: '2026-06-15T09:00:00.000[GMT+00:00 UTC]', tz: 'UTC' },\n { label: 'bracketed +', value: '2026-06-15T14:30:00.000[GMT+05:30 Asia/Kolkata]', tz: 'Asia/Kolkata' },\n { label: 'bracketed -', value: '2026-06-15T05:00:00.000[GMT-04:00 America/New_York]', tz: 'America/New_York' },\n { label: 'alias', value: '2026-06-15T14:30:00.000[GMT+05:30 Asia/Calcutta]', tz: 'Asia/Calcutta' },\n { label: 'offset-less', value: '2026-06-15T14:30:00.000', tz: 'Asia/Kolkata' },\n { label: 'date-only', value: '2026-06-15', tz: 'Asia/Kolkata' },\n { label: 'DST 1st occ', value: '2026-11-01T01:30:00.000[GMT-04:00 America/New_York]', tz: 'America/New_York' },\n { label: 'DST 2nd occ', value: '2026-11-01T01:30:00.000[GMT-05:00 America/New_York]', tz: 'America/New_York' },\n ];\n const notes: string[] = [];\n for (const r of rows) {\n const el = await makePicker({ value: r.value, timezone: r.tz });\n const p = await apply(el);\n const ctx = `${r.label} value=${r.value}`;\n f.add(ctx, checkPayload(p));\n if (r.validInstant !== undefined && p && p.unixEpoch !== r.validInstant) {\n f.add(ctx, [{ code: 'P9_INSTANT_CHANGED', detail: `want=${r.validInstant} got=${p.unixEpoch}` }]);\n }\n if (p && p.unixEpoch !== null) f.add(ctx, (await roundTrip(p)).violations);\n notes.push(`${r.label.padEnd(14)} -> epoch=${p && p.unixEpoch} tz=${p && p.timezone} value=${p && p.value}`);\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p9] valid-input matrix:\\n ${notes.join('\\n ')}`);\n expect(f.count, `format-matrix violations:${f.report()}`).to.equal(0);\n }).timeout(600000);\n\n it('P9.2 classifies INVALID / edge inputs (REJECT / FALLBACK / CLAMP / NORMALIZE)', async () => {\n const rows: Array<{ label: string; value: string | null; tz: string }> = [\n { label: 'null', value: null, tz: 'Asia/Kolkata' },\n { label: 'empty string', value: '', tz: 'Asia/Kolkata' },\n { label: 'malformed', value: 'not-a-date', tz: 'Asia/Kolkata' },\n { label: 'impossible date', value: '2026-02-31T10:00:00.000', tz: 'Asia/Kolkata' },\n { label: 'impossible date-only', value: '2026-02-31', tz: 'Asia/Kolkata' },\n { label: 'invalid tz in bracket', value: '2026-06-15T14:30:00.000[GMT+05:30 Mars/Phobos]', tz: 'UTC' },\n { label: 'wrong offset for zone', value: '2026-06-15T14:30:00.000[GMT+09:00 Asia/Kolkata]', tz: 'Asia/Kolkata' },\n { label: 'gap wall clock', value: '2026-03-08T02:30:00.000', tz: 'America/New_York' },\n { label: 'hour 24', value: '2026-06-15T24:00:00.000', tz: 'UTC' },\n { label: 'month 13', value: '2026-13-15T10:00:00.000', tz: 'UTC' },\n { label: 'year 0001', value: '0001-01-01T00:00:00.000Z', tz: 'UTC' },\n { label: 'year 9999', value: '9999-12-31T23:59:59.999Z', tz: 'UTC' },\n ];\n const notes: string[] = [];\n const f = new Failures();\n // An empty / unparseable value leaves NO selection, and Apply is a no-op without a selection (handleApply →\n // hasSelection()), so these must emit NOTHING. Every other row resolves to an instant and must emit a payload.\n const EMITS_NOTHING = new Set(['null', 'empty string', 'malformed', 'month 13']);\n for (const r of rows) {\n const el = await makePicker({ value: r.value, timezone: r.tz });\n const p = await apply(el);\n if (EMITS_NOTHING.has(r.label)) {\n if (p !== null) f.add(`${r.label} value=${r.value}`, [{ code: 'P9_EMITTED_FOR_NO_SELECTION', detail: `emitted ${JSON.stringify(p)}` }]);\n notes.push(`${r.label.padEnd(22)} NO_PAYLOAD (expected)`);\n continue;\n }\n // Whatever it does, the payload must never LIE about its own epoch.\n f.add(`${r.label} value=${r.value}`, checkPayload(p));\n const cls = p === null ? 'NO_PAYLOAD'\n : p.unixEpoch === null ? 'REJECT(null epoch)'\n : 'ACCEPTED';\n notes.push(`${r.label.padEnd(22)} ${cls.padEnd(20)} epoch=${p && p.unixEpoch} tz=${p && p.timezone} value=${p && p.value}`);\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p9] invalid/edge input classification:\\n ${notes.join('\\n ')}`);\n expect(f.count, `invalid-input payload lies:${f.report()}`).to.equal(0);\n }).timeout(600000);\n});\n\ndescribe('PHASE 11 — repeated round trips must not drift', () => {\n it('P11.1 100 consecutive emit->reload->Apply cycles hold the epoch to the ms', async () => {\n const f = new Failures();\n const seeds: Array<{ label: string; value: string; tz: string }> = [\n { label: 'ms=999 half-hour zone', value: '2026-06-15T14:30:45.999[GMT+05:30 Asia/Kolkata]', tz: 'Asia/Kolkata' },\n { label: 'quarter-hour zone', value: '2026-06-15T14:30:45.001[GMT+05:45 Asia/Kathmandu]', tz: 'Asia/Kathmandu' },\n { label: 'alias', value: '2026-06-15T14:30:45.123[GMT+05:30 Asia/Calcutta]', tz: 'Asia/Calcutta' },\n { label: 'DST overlap 2nd', value: '2026-11-01T01:30:00.000[GMT-05:00 America/New_York]', tz: 'America/New_York' },\n { label: 'DST gap resolved', value: '2026-03-08T03:30:00.000[GMT-04:00 America/New_York]', tz: 'America/New_York' },\n { label: '+14 extreme', value: '2026-06-15T14:30:45.500[GMT+14:00 Pacific/Kiritimati]', tz: 'Pacific/Kiritimati' },\n { label: 'negative extreme', value: '2026-06-15T14:30:45.500[GMT-11:00 Pacific/Niue]', tz: 'Pacific/Niue' },\n { label: 'Lord Howe :30', value: '2026-06-15T14:30:45.250[GMT+10:30 Australia/Lord_Howe]', tz: 'Australia/Lord_Howe' },\n ];\n for (const s of seeds) {\n let cur: Payload | null = await apply(await makePicker({ value: s.value, timezone: s.tz }));\n if (!cur || cur.unixEpoch === null) { f.add(s.label, [{ code: 'P11_NO_SEED', detail: s.value }]); continue; }\n const first = cur.unixEpoch;\n for (let i = 0; i < 100; i++) {\n const next: Payload | null = await apply(await makePicker({ value: cur!.value, timezone: cur!.timezone }));\n f.add(`${s.label} iter=${i}`, checkPayload(next));\n if (!next || next.unixEpoch !== first) {\n f.add(s.label, [{\n code: 'P11_DRIFT',\n detail: `iter=${i} first=${first} now=${next && next.unixEpoch} delta=${next && next.unixEpoch !== null ? next.unixEpoch - first : 'n/a'}ms`,\n }]);\n break;\n }\n cur = next;\n }\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p11] 8 seeds x 100 cycles, violations=${f.count}`);\n expect(f.count, `round-trip drift:${f.report()}`).to.equal(0);\n }).timeout(1800000);\n});\n\ndescribe('PHASE 12 — randomized property testing (deterministic seed)', () => {\n it('P12.1 random wall clock x zone reproduces its own digits unless it is a gap', async () => {\n const SEED = 20260913;\n const rnd = mulberry32(SEED);\n const zones = runtimeZones();\n const f = new Failures();\n const N = 1500;\n let gaps = 0; let checked = 0;\n for (let i = 0; i < N; i++) {\n const z = zones[Math.floor(rnd() * zones.length)];\n const w: Wall = {\n year: 1990 + Math.floor(rnd() * 80),\n month: 1 + Math.floor(rnd() * 12),\n day: 1 + Math.floor(rnd() * 28),\n hours: Math.floor(rnd() * 24),\n minutes: Math.floor(rnd() * 60),\n seconds: Math.floor(rnd() * 60),\n ms: Math.floor(rnd() * 1000),\n };\n const occ = instantsFor(w, z);\n const el = await makePicker({});\n const p = await selectAndApply(el, w, z);\n const ctx = `seed=${SEED} i=${i} host=${HOST_TZ} tz=${z} want=${fmtWall(w)}`;\n f.add(ctx, checkPayload(p, z));\n if (p && p.unixEpoch !== null) {\n if (occ.length === 0) {\n gaps += 1; // gap: digits legitimately differ\n } else {\n const back = wallAt(p.unixEpoch, z);\n if (fmtWall(back) !== fmtWall(w)) {\n f.add(ctx, [{\n code: 'P12_DIGITS_NOT_REPRODUCED',\n detail: `expectedWall=${fmtWall(w)} actualWall=${fmtWall(back)} ` +\n `expectedEpochOneOf=[${occ.join(',')}] actualEpoch=${p.unixEpoch} ` +\n `offset=${offsetAt(p.unixEpoch, z) / 60000}min value=${p.value}`,\n }]);\n }\n if (occ.indexOf(p.unixEpoch) === -1) {\n f.add(ctx, [{\n code: 'P12_EPOCH_NOT_AN_OCCURRENCE',\n detail: `actualEpoch=${p.unixEpoch} validOccurrences=[${occ.join(',')}] value=${p.value}`,\n }]);\n }\n checked += 1;\n }\n }\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p12] seed=${SEED} cases=${N} verified=${checked} gapsSkipped=${gaps} violations=${f.count}`);\n expect(f.count, `random property violations:${f.report()}`).to.equal(0);\n }).timeout(1800000);\n});\n\n/* ==========================================================================\n PART 9 — PHASE 10/14/15: UI sequences, Set to now, Apply semantics\n (was p1045-ui.test.ts)\n ========================================================================== */\n\nconst days = (cal: any): HTMLElement[] =>\n Array.from(cal.shadowRoot.querySelectorAll('.day_date:not(.filler)'));\nconst nowBtn = (cal: any): any => cal.shadowRoot.querySelector('.tp-set-to-now-button');\nconst localLink = (cal: any): any => cal.shadowRoot.querySelector('.tp-timezone-local-link');\nconst resetBtn = (cal: any): any => cal.shadowRoot.querySelector('.clear-button');\nconst steppers = (cal: any): HTMLElement[] =>\n Array.from(cal.shadowRoot.querySelectorAll('.tp-stepper-btn'));\n\nasync function clickDay(el: any, i = 3) {\n const cal = await settle(el);\n const d = days(cal);\n if (d.length > i) { d[i].click(); await settle(el); }\n}\nasync function setZone(el: any, z: string) {\n const cal = await settle(el);\n cal.timezone = z;\n await settle(el);\n}\nasync function setTime(el: any, h: number, mi: number, s = 0, ms = 0) {\n const cal = await settle(el);\n cal.tpHours = h; cal.tpMinutes = mi; cal.tpSeconds = s; cal.tpMilliseconds = ms;\n await settle(el);\n}\n\ndescribe('PHASE 10 — UI sequence fuzzing', () => {\n type Step = 'date' | 'time' | 'zone' | 'nav-month' | 'nav-year' | 'reset';\n\n const SEQUENCES: Step[][] = [\n ['date', 'time', 'zone'],\n ['zone', 'date', 'time'],\n ['time', 'date', 'zone'],\n ['date', 'zone', 'time'],\n ['zone', 'time', 'date'],\n ['time', 'zone', 'date'],\n ['nav-month', 'date', 'time'],\n ['nav-year', 'date', 'time'],\n ['date', 'time', 'zone', 'reset', 'date', 'time'],\n ['date', 'zone', 'time', 'zone', 'date'],\n ];\n\n it('P10.1 every ordering yields a payload consistent with its own final state', async () => {\n const f = new Failures();\n const zones = ['Asia/Kolkata', 'America/New_York', 'Pacific/Chatham'];\n let n = 0;\n for (const seq of SEQUENCES) {\n for (const z of zones) {\n const el = await makePicker({});\n for (const step of seq) {\n if (step === 'date') await clickDay(el, 3);\n else if (step === 'time') await setTime(el, 14, 45, 7, 123);\n else if (step === 'zone') await setZone(el, z);\n else if (step === 'reset') { const c = await settle(el); resetBtn(c) && resetBtn(c).click(); await settle(el); }\n else if (step === 'nav-month') { const c = await settle(el); c.currentMonth = (c.currentMonth + 1) % 12; await settle(el); }\n else if (step === 'nav-year') { const c = await settle(el); c.currentYear = c.currentYear + 1; await settle(el); }\n }\n const p = await apply(el);\n const ctx = `seq=[${seq.join('>')}] tz=${z} host=${HOST_TZ}`;\n // The payload must be self-consistent regardless of interaction order.\n f.add(ctx, checkPayload(p));\n if (p && p.unixEpoch !== null) f.add(ctx, (await roundTrip(p)).violations);\n n += 1;\n }\n }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p10] sequences run=${n} violations=${f.count}`);\n expect(f.count, `UI-sequence violations:${f.report()}`).to.equal(0);\n }).timeout(1800000);\n\n it('P10.2 changing zone AFTER selecting keeps wall-clock digits and moves the epoch', async () => {\n const f = new Failures();\n const el = await makePicker({});\n await clickDay(el, 3);\n await setTime(el, 14, 30, 0, 0);\n await setZone(el, 'Asia/Kolkata');\n const p1 = await apply(el);\n await setZone(el, 'America/New_York');\n const p2 = await apply(el);\n f.add('zone-change p1', checkPayload(p1, 'Asia/Kolkata'));\n f.add('zone-change p2', checkPayload(p2, 'America/New_York'));\n if (p1 && p2 && p1.unixEpoch !== null && p2.unixEpoch !== null) {\n const w1 = wallAt(p1.unixEpoch, 'Asia/Kolkata');\n const w2 = wallAt(p2.unixEpoch, 'America/New_York');\n // documented: a wall clock FOLLOWS the zone (digits kept, epoch re-derived)\n if (fmtWall(w1) !== fmtWall(w2)) {\n f.add('zone-change', [{\n code: 'P10_DIGITS_NOT_KEPT',\n detail: `kolkata=${fmtWall(w1)} ny=${fmtWall(w2)} (documented behaviour is digits-kept)`,\n }]);\n }\n if (p1.unixEpoch === p2.unixEpoch) {\n f.add('zone-change', [{ code: 'P10_EPOCH_DID_NOT_MOVE', detail: `both=${p1.unixEpoch}` }]);\n }\n }\n expect(f.count, `zone-change violations:${f.report()}`).to.equal(0);\n }).timeout(300000);\n});\n\ndescribe('PHASE 14 — Set to now (frozen clock)', () => {\n // Contract (nile-calendar handleSetToNow, unchanged since the variant was introduced): \"Set to now\" reads the\n // HOST-local clock fields and adopts the HOST timezone, so the committed instant is exactly \"now\" and the\n // payload is presented in the host zone — whatever zone was selected before. (P14.2 covers the explicit\n // \"Use local timezone\" link.) The clock is frozen by replacing the global Date class: `new Date()` does not go\n // through `Date.now`, so stubbing only `Date.now` (as this test used to) leaves the component on the real clock.\n it('P14.1 Set to now commits the frozen instant, presented in the HOST zone (selected zone is replaced)', async () => {\n const f = new Failures();\n const FROZEN = Date.UTC(2026, 5, 15, 18, 42, 37, 456);\n const RealDate = Date;\n class FrozenDate extends RealDate {\n constructor(...args: any[]) {\n if (args.length === 0) super(FROZEN);\n else super(...(args as [any]));\n }\n static now() { return FROZEN; }\n }\n try {\n for (const z of ['UTC', 'Asia/Kolkata', 'America/New_York', 'Pacific/Kiritimati']) {\n const el = await makePicker({});\n await setZone(el, z);\n const cal = await settle(el);\n const btn = nowBtn(cal);\n if (!btn) { f.add(z, [{ code: 'P14_NO_BUTTON', detail: 'set-to-now control not found' }]); continue; }\n (globalThis as any).Date = FrozenDate;\n try { btn.click(); } finally { (globalThis as any).Date = RealDate; }\n await settle(el);\n const p = await apply(el);\n const ctx = `set-to-now (selected tz=${z}) frozen=${FROZEN} host=${HOST_TZ}`;\n // the payload must be internally consistent in the HOST zone\n f.add(ctx, checkPayload(p, HOST_TZ));\n if (p && p.unixEpoch !== null) {\n const drift = p.unixEpoch - FROZEN;\n // eslint-disable-next-line no-console\n console.warn(`[audit-p14] selected=${z} frozenEpoch=${FROZEN} appliedEpoch=${p.unixEpoch} ` +\n `drift=${drift}ms value=${p.value}`);\n if (Math.abs(drift) > 1000) {\n f.add(ctx, [{ code: 'P14_NOW_DRIFT', detail: `drift=${drift}ms (>1s from frozen now)` }]);\n }\n if (p.timezone !== HOST_TZ) {\n f.add(ctx, [{ code: 'P14_ZONE_NOT_HOST', detail: `payload tz=${p.timezone} host=${HOST_TZ}` }]);\n }\n }\n }\n } finally {\n (globalThis as any).Date = RealDate;\n }\n expect(f.count, `set-to-now violations:${f.report()}`).to.equal(0);\n }).timeout(600000);\n\n it('P14.2 \"Use local timezone\" adopts the HOST zone deliberately, not by accident', async () => {\n const el = await makePicker({});\n await setZone(el, 'Pacific/Kiritimati');\n const cal = await settle(el);\n const link = localLink(cal);\n const before = cal.timezone;\n if (link) { link.click(); await settle(el); }\n // eslint-disable-next-line no-console\n console.warn(`[audit-p14] use-local-timezone: before=${before} after=${(await settle(el)).timezone} host=${HOST_TZ}`);\n expect(link, 'the local-timezone control exists').to.exist;\n }).timeout(300000);\n});\n\ndescribe('PHASE 15 — Apply semantics / commit boundary', () => {\n // ROOT CAUSE (verified with a probe): the picker's panel content is parked in a detached popper while the panel\n // is closed, so the calendar's <nile-input> time fields are NOT connected (isConnected=false, hasUpdated=false,\n // no shadow root, `.input` null). A stepper click called `nile-input.focus()` -> `this.input.focus` -> TypeError.\n // A user can only click a stepper once the panel is open (connected), so this only hit programmatic clicks.\n // The calendar's step() now skips focusing an input that has not rendered; see also calendar test S2.\n it('P15.1 editing before Apply does not publish a committed instant', async () => {\n const el = await makePicker({});\n let emissions = 0;\n el.addEventListener('nile-change', () => { emissions += 1; });\n await clickDay(el, 3);\n await setTime(el, 9, 15, 0, 0);\n await setZone(el, 'Asia/Kolkata');\n const cal = await settle(el);\n const sts = steppers(cal);\n if (sts.length) { sts[0].click(); await settle(el); }\n const beforeApply = emissions;\n applyButton(cal).click();\n await settle(el);\n // eslint-disable-next-line no-console\n console.warn(`[audit-p15] emissions before Apply=${beforeApply}, after Apply=${emissions}`);\n expect(beforeApply, 'no nile-change before Apply').to.equal(0);\n expect(emissions, 'exactly one commit on Apply').to.equal(1);\n }).timeout(300000);\n\n it('P15.2 Apply emits exactly one payload per click across zones', async () => {\n const f = new Failures();\n for (const z of ['UTC', 'Asia/Kolkata', 'America/New_York']) {\n const el = await makePicker({});\n await clickDay(el, 3);\n await setTime(el, 10, 0, 0, 0);\n await setZone(el, z);\n const p: Payload | null = await apply(el);\n const count = p ? (p as any).__emitCount : 0;\n if (count !== 1) {\n f.add(`tz=${z}`, [{ code: 'P15_EMIT_COUNT', detail: `nile-change fired ${count} times for one Apply` }]);\n }\n }\n expect(f.count, `apply-emission violations:${f.report()}`).to.equal(0);\n }).timeout(300000);\n\n it('P15.3 Reset then reselect produces a fresh, consistent payload', async () => {\n const f = new Failures();\n const el = await makePicker({ value: '2026-06-15T09:00:00.000Z', timezone: 'Asia/Kolkata' });\n const p1 = await apply(el);\n const cal = await settle(el);\n if (resetBtn(cal)) { resetBtn(cal).click(); await settle(el); }\n await clickDay(el, 4);\n await setTime(el, 23, 59, 59, 999);\n const p2 = await apply(el);\n f.add('after-reset', checkPayload(p2, 'Asia/Kolkata'));\n if (p1 && p2 && p1.unixEpoch === p2.unixEpoch) {\n f.add('after-reset', [{ code: 'P15_STALE_EPOCH', detail: `reset did not clear retained instant: ${p1.unixEpoch}` }]);\n }\n if (p2 && p2.unixEpoch !== null) f.add('after-reset', (await roundTrip(p2)).violations);\n expect(f.count, `reset violations:${f.report()}`).to.equal(0);\n }).timeout(300000);\n});\n\n// ============================================================================\n// NOTE ON TEST-RUNNER PICKUP\n// Section K is an exhaustive sweep (hundreds of zones, every DST transition,\n// thousands of randomised cases) and takes minutes, not seconds. It now lives\n// in this file, so a plain `yarn test` runs it alongside the unit suites and\n// the default run is correspondingly slower.\n//\n// Section K's own `it`s carry explicit `.timeout(...)` calls, so they are not\n// bound by the 15s default in web-test-runner.config.mjs. The runner-level\n// `testsFinishTimeout` (300000 = 5 min) still applies to the whole run; raise\n// it there if the suite outgrows it.\n// ============================================================================\n\n/**\n * ── R. REGRESSIONS (code-review findings #1, #2a, #3, #6) ───────────────────\n */\ndescribe('NileDateTimePicker regressions', () => {\n const VALUE = '2026-03-15T10:30:00';\n const inputOf = (el: any) => el.shadowRoot.querySelector('nile-input') as any;\n const textOf = (el: any) => (inputOf(el).input as HTMLInputElement).value;\n const openPanel = async (el: any) => {\n el.open = true;\n await settle2(el);\n await aTimeout(50);\n return el.calendarElement as any;\n };\n const days = (cal: any): HTMLElement[] =>\n [...cal.shadowRoot.querySelectorAll('.day_date:not(.filler)')] as HTMLElement[];\n const pad = (n: number) => String(n).padStart(2, '0');\n\n it('R1. setting value to null clears the trigger text (#1)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .dateFormat=${'YYYY-MM-DD'} .value=${VALUE}></nile-date-time-picker>`\n );\n await settle2(el);\n expect(textOf(el), 'precondition').to.contain('2026-03-15');\n el.value = null;\n await settle2(el);\n expect(textOf(el)).to.equal('');\n // a later value still seeds normally\n el.value = '2026-04-01T08:00:00';\n await settle2(el);\n expect(textOf(el)).to.contain('2026-04-01');\n });\n\n it('R2. the typing mask still works after the picker is moved in the DOM (#2a)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .dateFormat=${'DD/MM/YY'}></nile-date-time-picker>`\n );\n await settle2(el);\n const host = el.parentNode!;\n el.remove();\n host.appendChild(el);\n await settle2(el);\n await inputOf(el).updateComplete;\n for (const key of '23') {\n inputOf(el).dispatchEvent(\n new KeyboardEvent('keydown', { key, bubbles: true, composed: true, cancelable: true })\n );\n }\n expect(textOf(el)).to.equal('23/');\n });\n\n it('R3a. a relative range is rendered in the zone it is labelled with, not the host zone (#3)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker type=\"relative\" .dateFormat=${'YYYY-MM-DD'}></nile-date-time-picker>`\n );\n await settle2(el);\n const cal = el.calendarElement as any;\n cal.dispatchEvent(new CustomEvent('nile-change', {\n bubbles: true, composed: true,\n detail: {\n startDate: new Date(Date.UTC(2026, 5, 15, 3, 0, 0)),\n endDate: new Date(Date.UTC(2026, 5, 15, 5, 0, 0)),\n timezone: 'Asia/Kolkata',\n },\n }));\n await settle2(el);\n // 03:00Z / 05:00Z are 08:30 / 10:30 in Kolkata, whatever zone the browser runs in\n expect(textOf(el)).to.contain('2026-06-15 - 08:30');\n expect(textOf(el)).to.contain('2026-06-15 - 10:30');\n expect(textOf(el)).to.match(/ - Asia\\/Kolkata$/);\n });\n\n it('R3b. a relative Apply shows the UTC wall-clock it is labelled with (#3)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker type=\"relative\" .dateFormat=${'YYYY-MM-DD'}></nile-date-time-picker>`\n );\n await settle2(el);\n const cal = await openPanel(el);\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n cal.handleTimeValueClick('hours', 2, new Event('click'));\n await settle2(el);\n applyButton(cal).click();\n await settle2(el);\n const end = new Date(detail.endDate);\n expect(detail.timezone).to.equal('UTC');\n expect(textOf(el)).to.contain(`${pad(end.getUTCHours())}:${pad(end.getUTCMinutes())}`);\n expect(textOf(el)).to.match(/ - UTC$/);\n expect(el.value, 'a relative apply does not write value').to.be.null;\n });\n\n it('R3c. with the timezone label hidden, a relative range keeps the host wall-clock (unchanged)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker type=\"relative\" .dateFormat=${'YYYY-MM-DD'}\n .hideTimeFields=${['timezone']}></nile-date-time-picker>`\n );\n await settle2(el);\n const start = new Date(Date.UTC(2026, 5, 15, 3, 0, 0));\n const cal = el.calendarElement as any;\n cal.dispatchEvent(new CustomEvent('nile-change', {\n bubbles: true, composed: true,\n detail: { startDate: start, endDate: new Date(Date.UTC(2026, 5, 15, 5, 0, 0)), timezone: 'Asia/Kolkata' },\n }));\n await settle2(el);\n expect(textOf(el)).to.contain(`${pad(start.getHours())}:${pad(start.getMinutes())}`);\n expect(textOf(el)).to.not.contain('Asia/Kolkata');\n });\n\n it('R6. Apply updates value, and a later timezone change keeps the applied pick (#6)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .dateFormat=${'YYYY-MM-DD'} .value=${VALUE}></nile-date-time-picker>`\n );\n await settle2(el);\n const cal = await openPanel(el);\n days(cal)[20].click();\n await settle2(el);\n let detail: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n applyButton(cal).click();\n await settle2(el);\n const pickedDay = detail.value.slice(0, 10);\n expect(pickedDay, 'precondition: a different day was applied').to.not.equal('2026-03-15');\n expect(el.value).to.equal(detail.value);\n expect(textOf(el)).to.contain(pickedDay);\n el.timezone = 'Asia/Kolkata';\n await settle2(el);\n expect(textOf(el)).to.contain(pickedDay);\n expect(textOf(el)).to.not.contain('2026-03-15');\n });\n});\n\n// ── M. review fixes: type sync, Clear keeps the configured zone, non-keydown mask input ──\ndescribe('NileDateTimePicker — type sync, timezone on Clear, paste / beforeinput', () => {\n const dtpFixture = () =>\n fixture<NileDateTimePicker>(html`<nile-date-time-picker></nile-date-time-picker>`);\n const innerCalendar = (el: NileDateTimePicker): any => (el as any).calendarElement;\n const triggerInput = (el: NileDateTimePicker): any => el.shadowRoot!.querySelector('nile-input');\n const settle = async (el: NileDateTimePicker) => {\n await el.updateComplete;\n const cal = innerCalendar(el);\n if (cal) await cal.updateComplete;\n return cal;\n };\n const settle2 = async (el: NileDateTimePicker) => { await settle(el); return settle(el); };\n const dayCells = (cal: any): NodeListOf<HTMLElement> =>\n cal.shadowRoot!.querySelectorAll('.day_date:not(.filler)');\n const clickDay = (cal: any, i = 5) => (dayCells(cal)[i] as HTMLElement).click();\n const resetBtn = (cal: any) => cal.shadowRoot!.querySelector('.clear-button') as HTMLElement;\n const switchTab = async (el: NileDateTimePicker, value: string) => {\n const cal = await settle(el);\n cal.shadowRoot!.querySelector(`nile-tab[panel=\"${value}\"]`)!.dispatchEvent(\n new CustomEvent('nile-tab-show', { detail: { value }, bubbles: true, composed: true })\n );\n await cal.updateComplete;\n await el.updateComplete;\n };\n const maskFixture = () =>\n fixture<NileDateTimePicker>(html`<nile-date-time-picker></nile-date-time-picker>`);\n const nativeOf = (el: any) => (triggerInput(el) as any).input as HTMLInputElement;\n const ready = async (el: any) => { await el.updateComplete; await triggerInput(el).updateComplete; };\n const paste = (el: any, text: string) => {\n const dt = new DataTransfer();\n dt.setData('text', text);\n const ev = new ClipboardEvent('paste', { clipboardData: dt, bubbles: true, composed: true, cancelable: true });\n triggerInput(el).dispatchEvent(ev);\n return ev;\n };\n\n it('M1. switching the calendar to Relative updates the picker type (and attribute)', async () => {\n const el = await dtpFixture();\n expect(el.type).to.equal('absolute');\n await switchTab(el, 'relative');\n expect(el.type).to.equal('relative');\n expect(el.getAttribute('type')).to.equal('relative');\n });\n\n it('M2. switching back to Absolute restores type', async () => {\n const el = await dtpFixture();\n await switchTab(el, 'relative');\n await switchTab(el, 'absolute');\n expect(el.type).to.equal('absolute');\n });\n\n it('M3. nile-type-change is still forwarded after the type is synced', async () => {\n const el = await dtpFixture();\n let detail: any = null;\n el.addEventListener('nile-type-change', ((e: CustomEvent) => { detail = e.detail; }) as EventListener);\n await switchTab(el, 'relative');\n expect(detail?.value).to.equal('relative');\n });\n\n it('M4. Reset in the calendar keeps the consumer-configured timezone', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker timezone=\"America/New_York\"></nile-date-time-picker>`\n );\n const cal = await settle2(el);\n clickDay(cal, 5);\n await cal.updateComplete;\n resetBtn(cal).click();\n await settle2(el);\n expect(el.timezone).to.equal('America/New_York');\n expect(cal.timezone).to.equal('America/New_York');\n });\n\n it('M5. handleClear keeps the configured timezone and empties value', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker timezone=\"Asia/Kolkata\"></nile-date-time-picker>`\n );\n await settle2(el);\n (el as any).handleClear();\n await settle2(el);\n expect(el.timezone).to.equal('Asia/Kolkata');\n expect(el.value == null).to.be.true;\n });\n\n it('M6. with no configured timezone, Clear still lands on UTC', async () => {\n const el = await dtpFixture();\n await settle2(el);\n (el as any).handleClear();\n await settle2(el);\n expect(el.timezone).to.equal('UTC');\n });\n\n it('M8. a zone picked in the calendar dropdown is undone by Reset: wrapper and calendar both land on the configured zone', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker timezone=\"Europe/London\"></nile-date-time-picker>`\n );\n const cal = await settle2(el);\n cal.handleTimezoneChange(new CustomEvent('nile-change', { detail: { value: 'Asia/Tokyo' } }));\n await cal.updateComplete;\n resetBtn(cal).click();\n await settle2(el);\n expect(cal.timezone).to.equal('Europe/London');\n expect(el.timezone).to.equal('Europe/London');\n });\n\n it('M9. a dynamic consumer timezone change is what Reset restores, in the wrapper and the calendar', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker timezone=\"Europe/London\"></nile-date-time-picker>`\n );\n const cal = await settle2(el);\n el.timezone = 'Asia/Kolkata';\n await settle2(el);\n cal.handleTimezoneChange(new CustomEvent('nile-change', { detail: { value: 'UTC' } }));\n await cal.updateComplete;\n resetBtn(cal).click();\n await settle2(el);\n expect(cal.timezone).to.equal('Asia/Kolkata');\n expect(el.timezone).to.equal('Asia/Kolkata');\n });\n\n it('M10. with the timezone field hidden, Reset after Set to now restores the configured zone; Set to now still adopts the host zone', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker timezone=\"Europe/London\" .hideTimeFields=${['timezone']}></nile-date-time-picker>`\n );\n const cal = await settle2(el);\n const host = Intl.DateTimeFormat().resolvedOptions().timeZone;\n (cal.shadowRoot!.querySelector('.tp-set-to-now-button') as HTMLElement).click();\n await cal.updateComplete;\n expect(cal.timezone).to.equal(host);\n resetBtn(cal).click();\n await settle2(el);\n expect(cal.timezone).to.equal('Europe/London');\n expect(el.timezone).to.equal('Europe/London');\n });\n\n it('M7. a date-only range seeded into the calendar keeps its days, and Reset still keeps the configured zone (default stays UTC)', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker timezone=\"Asia/Kolkata\"></nile-date-time-picker>`\n );\n const cal = await settle2(el);\n cal.range = true;\n cal.valueAttribute = '{\"startDate\":\"2025-12-31\",\"endDate\":\"2026-01-02\"}';\n await settle2(el);\n const ymd = (d: Date) => [d.getFullYear(), d.getMonth() + 1, d.getDate()];\n expect(ymd(cal.startDate)).to.deep.equal([2025, 12, 31]);\n expect(ymd(cal.endDate)).to.deep.equal([2026, 1, 2]);\n resetBtn(cal).click();\n await settle2(el);\n expect(cal.startDate).to.equal(null);\n expect(el.timezone).to.equal('Asia/Kolkata');\n expect(cal.timezone).to.equal('Asia/Kolkata');\n\n const plain = await dtpFixture();\n expect(plain.timezone, 'unconfigured default').to.equal('UTC');\n });\n\n it('M6b. a timezone set by the consumer AFTER first render is what Clear restores', async () => {\n const el = await dtpFixture();\n await settle2(el);\n el.timezone = 'Asia/Tokyo';\n await settle2(el);\n (el as any).handleClear();\n await settle2(el);\n expect(el.timezone).to.equal('Asia/Tokyo');\n expect(innerCalendar(el).timezone).to.equal('Asia/Tokyo');\n });\n\n it('M6c. calendar Reset after a later consumer zone change keeps that zone (picker + calendar agree)', async () => {\n const el = await dtpFixture();\n await settle2(el);\n el.timezone = 'Europe/Paris';\n await settle2(el);\n const cal = innerCalendar(el);\n clickDay(cal, 5);\n await cal.updateComplete;\n resetBtn(cal).click();\n await settle2(el);\n expect(el.timezone).to.equal('Europe/Paris');\n expect(cal.timezone).to.equal('Europe/Paris');\n });\n\n it('M6d. a zone picked in the calendar dropdown is NOT adopted as the default; Reset returns to the configured zone', async () => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker timezone=\"Asia/Kolkata\"></nile-date-time-picker>`\n );\n const cal = await settle2(el);\n cal.handleTimezoneChange(new CustomEvent('nile-change', { detail: { value: 'America/Chicago' } }));\n await settle2(el);\n expect(cal.timezone).to.equal('America/Chicago');\n resetBtn(cal).click();\n await settle2(el);\n expect(el.timezone).to.equal('Asia/Kolkata');\n expect(cal.timezone).to.equal('Asia/Kolkata');\n });\n\n it('M6e. a zone adopted from a bracketed value is not mistaken for the configured default', async () => {\n const el = await dtpFixture();\n await settle2(el);\n el.value = '2026-03-01T10:00:00.000[GMT+05:30 Asia/Kolkata]';\n await settle2(el);\n expect(el.timezone).to.equal('Asia/Kolkata');\n (el as any).handleClear();\n await settle2(el);\n expect(el.timezone).to.equal('UTC');\n });\n\n it('M7. pasting a full datetime fills the mask like typing it', async () => {\n const el = await maskFixture();\n await ready(el);\n const ev = paste(el, '230326172456426');\n expect(ev.defaultPrevented).to.be.true;\n expect(nativeOf(el).value).to.equal('23/03/26 - 17:24:56.426');\n });\n\n it('M8. pasting separator-formatted text uses only its digits', async () => {\n const el = await maskFixture();\n await ready(el);\n paste(el, '23/03/26 - 17:24');\n expect(nativeOf(el).value.startsWith('23/03/26 - 17:24')).to.be.true;\n });\n\n it('M9. pasting with no digits leaves the mask unchanged', async () => {\n const el = await maskFixture();\n await ready(el);\n paste(el, 'hello');\n expect(nativeOf(el).value).to.equal('');\n });\n\n it('M10. pasted out-of-range segments are clamped', async () => {\n const el = await maskFixture();\n await ready(el);\n paste(el, '992026');\n expect(nativeOf(el).value).to.not.contain('99');\n });\n\n it('M11. soft-keyboard style insertText (no usable keydown) is picked up by the mask', async () => {\n const el = await maskFixture();\n await ready(el);\n const native = nativeOf(el);\n native.value = '2303';\n triggerInput(el).dispatchEvent(\n new InputEvent('beforeinput', { inputType: 'insertText', data: '3', bubbles: true, composed: true })\n );\n await aTimeout(20);\n expect(native.value).to.equal('23/03/');\n });\n\n it('M12. a cut (deleteByCut) rebuilds the slots from the remaining text', async () => {\n const el = await maskFixture();\n await ready(el);\n paste(el, '230326');\n await ready(el); // let the input's own re-render land before simulating the cut\n const native = nativeOf(el);\n native.value = '23/03/';\n triggerInput(el).dispatchEvent(\n new InputEvent('beforeinput', { inputType: 'deleteByCut', bubbles: true, composed: true })\n );\n await aTimeout(20);\n expect(native.value).to.equal('23/03/');\n });\n\n it('M13. paste is ignored in Relative mode', async () => {\n const el = await maskFixture();\n await ready(el);\n await switchTab(el, 'relative');\n const ev = paste(el, '230326');\n expect(ev.defaultPrevented).to.be.false;\n });\n});\n\n/**\n * ── Y. YEARS 0-99 (Date.UTC remap regression) ───────────────────────────────\n * `Date.UTC(y, …)` treats years 0-99 as 1900-1999, so year 0001 used to become 1901: the bracketed offset was\n * computed for the wrong year (`[GMT+16655040:00 UTC]`) and offset-less / bracketed values re-parsed a century off.\n * Epochs here are built with setUTCFullYear — never Date.UTC — so the oracle does not share the bug.\n */\ndescribe('Y. years 0-99 keep their literal year', () => {\n const epochOf = (y: number, mo1: number, d: number, h = 0, mi = 0, s = 0, ms = 0) => {\n const dt = new Date(0);\n dt.setUTCFullYear(y, mo1 - 1, d);\n dt.setUTCHours(h, mi, s, ms);\n return dt.getTime();\n };\n const pad4 = (y: number) => String(y).padStart(4, '0');\n const YEARS = [1, 99, 100];\n\n it('Y1. utcFromFields equals Date.UTC for years >= 100 (incl. overflowing fields)', () => {\n for (const args of [\n [2026, 5, 15, 12, 30, 15, 250], [100, 0, 1], [1900, 2, 1], [2100, 1, 29], [2024, 12, 32, 25, 61, 61, 1001],\n [2026, 2, 0],\n ] as number[][]) {\n expect(utcFromFields(args[0], args[1], args[2], args[3], args[4], args[5], args[6]),\n JSON.stringify(args)).to.equal(Date.UTC(args[0], args[1], args[2], args[3] ?? 0, args[4] ?? 0, args[5] ?? 0, args[6] ?? 0));\n }\n });\n\n it('Y2. utcFromFields keeps years 0-99 literal and returns NaN for NaN input', () => {\n expect(new Date(utcFromFields(1, 0, 1)).getUTCFullYear()).to.equal(1);\n expect(new Date(utcFromFields(99, 11, 31, 23, 59, 59, 999)).getUTCFullYear()).to.equal(99);\n expect(new Date(utcFromFields(0, 1, 29)).getUTCDate()).to.equal(29); // year 0 is a leap year\n expect(utcFromFields(1, 0, 1)).to.equal(epochOf(1, 1, 1));\n expect(utcFromFields(NaN, 0, 1)).to.be.NaN;\n });\n\n it('Y3. wallClockFromOffsetLess keeps the literal year, month length and digits', () => {\n for (const y of YEARS) {\n const w = wallClockFromOffsetLess(`${pad4(y)}-06-15T12:30:15.250`)!;\n expect(w, `year ${y}`).to.deep.equal({ year: y, month: 6, day: 15, hours: 12, minutes: 30, seconds: 15, ms: 250 });\n }\n // year 0 is leap (400 | 0); the 1900 remap would clamp Feb 29 to 28\n expect(wallClockFromOffsetLess('0000-02-29T10:00:00')!.day).to.equal(29);\n // year 1 is not leap: Feb 29 clamps to 28\n expect(wallClockFromOffsetLess('0001-02-29T10:00:00')!.day).to.equal(28);\n });\n\n it('Y4. instantFromBracketedValue returns the true epoch for years 0001, 0099 and 0100', () => {\n for (const y of YEARS) {\n const r = instantFromBracketedValue(`${pad4(y)}-06-15T12:30:15.250[GMT+00:00 UTC]`);\n expect(r, `year ${y}`).to.deep.equal({ epochMs: epochOf(y, 6, 15, 12, 30, 15, 250), timezone: 'UTC' });\n }\n });\n\n for (const y of YEARS) {\n it(`Y5.${y}. Z instant in year ${pad4(y)} emits the true epoch, a sane bracket, and round-trips`, async () => {\n const raw = `${pad4(y)}-06-15T12:30:15.250Z`;\n const p = await apply(await makePicker({ value: raw, timezone: 'UTC' }));\n expect(p, 'payload').to.exist;\n expect(p!.unixEpoch).to.equal(epochOf(y, 6, 15, 12, 30, 15, 250));\n expect(p!.value).to.equal(`${pad4(y)}-06-15T12:30:15.250[GMT+00:00 UTC]`);\n const rt = await roundTrip(p!);\n expect(rt.second && rt.second.unixEpoch, 'epoch after reload').to.equal(p!.unixEpoch);\n expect(rt.second && rt.second.value).to.equal(p!.value);\n }).timeout(60000);\n\n it(`Y6.${y}. offset-less value in year ${pad4(y)} keeps its digits (no 19xx remap)`, async () => {\n const p = await apply(await makePicker({ value: `${pad4(y)}-06-15T12:30:15.250`, timezone: 'UTC' }));\n expect(p, 'payload').to.exist;\n expect(p!.unixEpoch).to.equal(epochOf(y, 6, 15, 12, 30, 15, 250));\n expect(p!.value).to.equal(`${pad4(y)}-06-15T12:30:15.250[GMT+00:00 UTC]`);\n }).timeout(60000);\n\n it(`Y7.${y}. bracketed value in year ${pad4(y)} reloads to the same epoch`, async () => {\n const p = await apply(await makePicker({\n value: `${pad4(y)}-06-15T12:30:15.250[GMT+00:00 UTC]`, timezone: 'UTC',\n }));\n expect(p, 'payload').to.exist;\n expect(p!.unixEpoch).to.equal(epochOf(y, 6, 15, 12, 30, 15, 250));\n }).timeout(60000);\n }\n\n it('Y8. a Feb-29 in year 0 (leap) survives; year 0001 shows no absurd offset', async () => {\n const p = await apply(await makePicker({ value: '0001-01-01T00:00:00.000Z', timezone: 'UTC' }));\n expect(p!.value).to.not.match(/GMT[+-]\\d{3,}:/);\n expect(p!.value).to.match(/\\[GMT[+-]\\d{2}:\\d{2} UTC\\]$/);\n }).timeout(60000);\n});\n\ndescribe('Y9. typed date in years 0-99 (mask -> calendar)', () => {\n it('Y9. a fully typed day in year 0050 selects year 50 (not 1950), and Feb 29 of year 0 is kept', async () => {\n const el = await makePicker({});\n el.dateFormat = 'DD/MM/YYYY'; // the default DD/MM/YY reads two digits as 20xx; a literal year 0050 needs YYYY\n await settle(el);\n const layout = (el as any).maskLayout();\n const digitsFor = (mm: string, dd: string, yyyy: string) => {\n const map: Record<string, string> = { month: mm, day: dd, year: yyyy };\n const idx: Record<string, number> = { month: 0, day: 0, year: 0 };\n return layout.slots.map((s: any) => (s.kind in map ? map[s.kind][idx[s.kind]++] : '0'));\n };\n const cal = el.calendarElement as any;\n const run = async (mm: string, dd: string, yyyy: string) => {\n (el as any).maskValues = digitsFor(mm, dd, yyyy);\n (el as any).syncCalendarFromMask();\n await settle(el);\n };\n await run('06', '15', '0050');\n expect(cal.value.getFullYear(), 'year').to.equal(50);\n expect(cal.value.getMonth(), 'month').to.equal(5);\n expect(cal.value.getDate(), 'day').to.equal(15);\n await run('02', '29', '0000');\n expect(cal.value.getFullYear(), 'year 0').to.equal(0);\n expect(cal.value.getDate(), 'Feb 29 exists in year 0 (leap)').to.equal(29);\n await run('02', '29', '0100');\n expect(cal.value.getFullYear(), 'year 100 unchanged').to.equal(100);\n expect(cal.value.getDate(), 'year 100 is not leap: clamps to 28').to.equal(28);\n }).timeout(60000);\n});\n\ndescribe('Y10. YYYY display in years 0-99 (picker input)', () => {\n const wall = (year: number, month = 6, day = 15) =>\n ({ year, month, day, hours: 12, minutes: 30, seconds: 15, ms: 250 });\n\n it('Y10a. formatYear4 pads only years 0-99', () => {\n expect([0, 1, 50, 99].map(formatYear4)).to.deep.equal(['0000', '0001', '0050', '0099']);\n for (const y of [100, 999, 1000, 2000, 9999, 10000]) expect(formatYear4(y)).to.equal(String(y));\n });\n\n it('Y10b. formatDatePartFields pads YYYY for 0-999, keeps >= 1000, and leaves YY alone', async () => {\n const el = await makePicker({}) as any;\n el.dateFormat = 'DD/MM/YYYY';\n expect(el.formatDatePartFields(wall(50))).to.equal('15/06/0050');\n expect(el.formatDatePartFields(wall(0, 2, 29))).to.equal('29/02/0000');\n expect(el.formatDatePartFields(wall(1))).to.equal('15/06/0001');\n expect(el.formatDatePartFields(wall(99))).to.equal('15/06/0099');\n expect(el.formatDatePartFields(wall(100)), 'the mask has four year slots, so 100-999 are padded too').to.equal('15/06/0100');\n expect(el.formatDatePartFields(wall(999))).to.equal('15/06/0999');\n expect(el.formatDatePartFields(wall(1000))).to.equal('15/06/1000');\n expect(el.formatDatePartFields(wall(2026))).to.equal('15/06/2026');\n el.dateFormat = 'DD/MM/YY';\n expect(el.formatDatePartFields(wall(1)), 'YY is always two characters (Y18)').to.equal('15/06/01');\n expect(el.formatDatePartFields(wall(50))).to.equal('15/06/50');\n expect(el.formatDatePartFields(wall(2026))).to.equal('15/06/26');\n }).timeout(60000);\n\n it('Y10c. the trigger input shows a year-0050 value as 0050 with time and timezone, and year 2026 is unchanged', async () => {\n for (const [raw, shown] of [\n ['0050-06-15T12:30:15.250Z', '0050-06-15 - 12:30:15.250 - UTC'],\n ['2026-06-15T12:30:15.250Z', '2026-06-15 - 12:30:15.250 - UTC'],\n ]) {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .dateFormat=${'YYYY-MM-DD'} .timezone=${'UTC'} .value=${raw}></nile-date-time-picker>`);\n await settle(el);\n expect((el.shadowRoot!.querySelector('nile-input') as any).value, raw).to.equal(shown);\n }\n }).timeout(60000);\n\n it('Y10d. typed 0050 -> mask -> calendar -> display round-trips as 0050 (year 50, not 1950)', async () => {\n const el = await makePicker({});\n el.dateFormat = 'DD/MM/YYYY';\n await settle(el);\n const layout = (el as any).maskLayout();\n const map: Record<string, string> = { month: '06', day: '15', year: '0050' };\n const idx: Record<string, number> = { month: 0, day: 0, year: 0 };\n (el as any).maskValues = layout.slots.map((s: any) => (s.kind in map ? map[s.kind][idx[s.kind]++] : '0'));\n (el as any).syncCalendarFromMask();\n await settle(el);\n const cal = el.calendarElement as any;\n expect(cal.value.getFullYear()).to.equal(50);\n expect(cal.formatDate(cal.value)).to.equal('15/06/0050');\n }).timeout(60000);\n});\n\ndescribe('Y11. years 0-999 in the picker input: four-digit display and a stable focus/blur round trip', () => {\n const FORMATS: Array<[string, (y: string) => string]> = [\n ['YYYY-MM-DD', y => `${y}-06-15`],\n ['MM/DD/YYYY', y => `06/15/${y}`],\n ['DD/MM/YYYY', y => `15/06/${y}`],\n ];\n const YEARS = ['0001', '0050', '0099', '0100', '0999', '1000', '2026'];\n const DATE_ONLY = ['hours', 'minutes', 'seconds', 'milliseconds', 'timezone'];\n\n const make = async (format: string, year: string): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker\n .timezone=${'UTC'} dateFormat=${format} .startYear=${0} .endYear=${9999}\n .hideTimeFields=${DATE_ONLY} value=${`${year}-06-15T10:20:30[GMT+00:00 UTC]`}></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const textOf = (el: any) => el.shadowRoot.querySelector('nile-input').input.value as string;\n const calDay = (el: any) => {\n const c = el.calendarElement;\n return [c.value.getFullYear(), c.value.getMonth(), c.value.getDate(), c.currentYear, c.currentMonth];\n };\n const focusBlur = async (el: any) => {\n const ni = el.shadowRoot.querySelector('nile-input');\n ni.input.focus();\n ni.dispatchEvent(new FocusEvent('focusout', { bubbles: true, composed: true }));\n await settle2(el);\n };\n\n for (const [format, expectText] of FORMATS) {\n for (const year of YEARS) {\n it(`Y11 [${format}] year ${year}: four-digit text, and focus/blur x3 leaves text, calendar and value untouched`, async () => {\n const el = await make(format, year);\n const n = Number(year);\n expect(textOf(el), 'seeded text').to.equal(expectText(year));\n const before = calDay(el);\n expect(before, 'seeded calendar').to.deep.equal([n, 5, 15, n, 5]);\n const valueBefore = el.value;\n let emitted = 0;\n el.addEventListener('nile-change', () => { emitted++; });\n el.addEventListener('nile-changed', () => { emitted++; });\n for (let i = 0; i < 3; i++) {\n await focusBlur(el);\n expect(textOf(el), `text after cycle ${i + 1}`).to.equal(expectText(year));\n expect(calDay(el), `calendar after cycle ${i + 1}`).to.deep.equal(before);\n }\n expect(el.value, 'value untouched').to.equal(valueBefore);\n expect(emitted, 'no change event from focus/blur').to.equal(0);\n }).timeout(60000);\n }\n }\n});\n\ndescribe('Y12. typed dates are clamped to the allowedDates range (user edits only)', () => {\n const DMY = 'DD/MM/YYYY';\n const make = async (range: [string, string] | null, value: string, tz = 'UTC'): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker\n .timezone=${tz} dateFormat=${DMY} .startYear=${0} .endYear=${9999}\n .allowedDates=${range ? JSON.stringify({ startDate: range[0], endDate: range[1] }) : JSON.stringify({})}\n value=${value}></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const inputOf = (el: any) => el.shadowRoot.querySelector('nile-input') as any;\n const nativeOf = (el: any) => inputOf(el).input as HTMLInputElement;\n const press = (el: any, key: string) =>\n inputOf(el).dispatchEvent(new KeyboardEvent('keydown', { key, bubbles: true, composed: true, cancelable: true }));\n const textOf = (el: any) => nativeOf(el).value;\n /** select the DD/MM/YYYY text, delete it, and type a fresh date digit by digit */\n const typeDate = async (el: any, ddmmyyyy: string) => {\n nativeOf(el).setSelectionRange(0, 10);\n press(el, 'Backspace');\n for (const ch of ddmmyyyy) press(el, ch);\n await settle2(el);\n };\n const calDate = (el: any) => {\n const c = el.calendarElement;\n return [c.value.getFullYear(), c.value.getMonth() + 1, c.value.getDate()];\n };\n const focusBlur = async (el: any) => {\n inputOf(el).input.focus();\n inputOf(el).dispatchEvent(new FocusEvent('focusout', { bubbles: true, composed: true }));\n await settle2(el);\n };\n const applyAndCount = async (el: any) => {\n const cal = el.calendarElement;\n const events: string[] = [];\n const details: any[] = [];\n for (const n of ['nile-change']) {\n el.addEventListener(n, (e: any) => { events.push(n); details.push(e.detail); });\n }\n (cal.shadowRoot.querySelector('.apply-button') as HTMLElement).click();\n await settle2(el);\n return { events, details };\n };\n const SEED = '2026-06-15T10:20:30.250[GMT+00:00 UTC]';\n const JUNE: [string, string] = ['2026-06-10', '2026-06-20'];\n\n const CASES: Array<[string, [string, string], string, string, string]> = [\n ['before range', JUNE, '05062026', '10/06/2026', '2026-06-10'],\n ['lower boundary', JUNE, '10062026', '10/06/2026', '2026-06-10'],\n ['inside range', JUNE, '15062026', '15/06/2026', '2026-06-15'],\n ['upper boundary', JUNE, '20062026', '20/06/2026', '2026-06-20'],\n ['after range', JUNE, '25062026', '20/06/2026', '2026-06-20'],\n ['month boundary, before', ['2026-12-29', '2027-01-03'], '28122026', '29/12/2026', '2026-12-29'],\n ['year boundary, after', ['2026-12-29', '2027-01-03'], '04012027', '03/01/2027', '2027-01-03'],\n ['year boundary, inside', ['2026-12-29', '2027-01-03'], '01012027', '01/01/2027', '2027-01-01'],\n ['leap: before 28 Feb', ['2024-02-28', '2024-03-01'], '27022024', '28/02/2024', '2024-02-28'],\n ['leap: 29 Feb is inside', ['2024-02-28', '2024-03-01'], '29022024', '29/02/2024', '2024-02-29'],\n ['leap: after 1 Mar', ['2024-02-28', '2024-03-01'], '02032024', '01/03/2024', '2024-03-01'],\n ['non-leap: before 27 Feb', ['2023-02-27', '2023-03-02'], '26022023', '27/02/2023', '2023-02-27'],\n ['non-leap: after 2 Mar', ['2023-02-27', '2023-03-02'], '03032023', '02/03/2023', '2023-03-02'],\n ];\n\n for (const [name, range, typed, text, iso] of CASES) {\n it(`Y12 ${name}: typing ${typed} gives ${text}; trigger, calendar and Apply agree, time and zone kept`, async () => {\n const el = await make(range, SEED);\n await typeDate(el, typed);\n const [y, m, d] = iso.split('-').map(Number);\n expect(textOf(el).slice(0, 10), 'trigger').to.equal(text);\n expect(calDate(el), 'calendar').to.deep.equal([y, m, d]);\n expect(el.calendarElement.timezone).to.equal('UTC');\n const { events, details } = await applyAndCount(el);\n expect([...events].sort(), 'exactly one change event').to.deep.equal(['nile-change']);\n expect(details[0].value, 'emitted value').to.equal(`${iso}T10:20:30.250[GMT+00:00 UTC]`);\n const typedIso = `${typed.slice(4)}-${typed.slice(2, 4)}-${typed.slice(0, 2)}`;\n if (typedIso !== iso) expect(details[0].value, 'disallowed date never committed').to.not.contain(typedIso);\n }).timeout(60000);\n }\n\n it('Y12 preserves a non-UTC zone and time of day while clamping', async () => {\n const el = await make(JUNE, '2026-06-15T23:45:10.005[GMT+05:30 Asia/Kolkata]', 'Asia/Kolkata');\n await typeDate(el, '25062026');\n expect(textOf(el).slice(0, 10)).to.equal('20/06/2026');\n expect(el.calendarElement.timezone).to.equal('Asia/Kolkata');\n const { details } = await applyAndCount(el);\n expect(details[0].value).to.equal('2026-06-20T23:45:10.005[GMT+05:30 Asia/Kolkata]');\n }).timeout(60000);\n\n it('Y12 focus/blur x3 after a clamp does not change the date again and emits nothing', async () => {\n const el = await make(JUNE, SEED);\n await typeDate(el, '25062026');\n const text = textOf(el);\n const cal = calDate(el);\n let emitted = 0;\n el.addEventListener('nile-change', () => { emitted++; });\n el.addEventListener('nile-changed', () => { emitted++; });\n for (let i = 0; i < 3; i++) {\n await focusBlur(el);\n expect(textOf(el), `text ${i + 1}`).to.equal(text);\n expect(calDate(el), `calendar ${i + 1}`).to.deep.equal(cal);\n }\n expect(emitted).to.equal(0);\n }).timeout(60000);\n\n it('Y12 a programmatic value outside the range is not clamped by focus/blur', async () => {\n const el = await make(JUNE, '2026-06-25T10:20:30.250[GMT+00:00 UTC]');\n const text = textOf(el);\n const cal = calDate(el);\n const value = el.value;\n let emitted = 0;\n el.addEventListener('nile-change', () => { emitted++; });\n el.addEventListener('nile-changed', () => { emitted++; });\n for (let i = 0; i < 3; i++) {\n await focusBlur(el);\n expect(textOf(el)).to.equal(text);\n expect(calDate(el)).to.deep.equal(cal);\n }\n expect(text.slice(0, 10)).to.equal('25/06/2026');\n expect(el.value).to.equal(value);\n expect(emitted).to.equal(0);\n }).timeout(60000);\n\n it('Y12 without allowedDates a typed date is never clamped', async () => {\n const el = await make(null, SEED);\n await typeDate(el, '25062026');\n expect(textOf(el).slice(0, 10)).to.equal('25/06/2026');\n expect(calDate(el)).to.deep.equal([2026, 6, 25]);\n }).timeout(60000);\n});\n\ndescribe('Y13. changing dateFormat / hideTimeFields after render redraws the trigger from the committed value', () => {\n const ALL_TIME = ['hours', 'minutes', 'seconds', 'milliseconds', 'timezone'];\n const SEED = '2026-06-15T10:20:30.250[GMT+05:30 Asia/Kolkata]';\n const make = async (extra: { allowed?: [string, string] } = {}): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker\n timezone=\"Asia/Kolkata\" dateFormat=\"DD/MM/YYYY\" .startYear=${0} .endYear=${9999}\n .allowedDates=${extra.allowed ? JSON.stringify({ startDate: extra.allowed[0], endDate: extra.allowed[1] }) : JSON.stringify({})}\n value=${SEED}></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const inputOf = (el: any) => el.shadowRoot.querySelector('nile-input') as any;\n const nativeOf = (el: any) => inputOf(el).input as HTMLInputElement;\n const press = (el: any, key: string) =>\n inputOf(el).dispatchEvent(new KeyboardEvent('keydown', { key, bubbles: true, composed: true, cancelable: true }));\n const textOf = (el: any) => nativeOf(el).value;\n const calDate = (el: any) => {\n const c = el.calendarElement;\n return [c.value.getFullYear(), c.value.getMonth() + 1, c.value.getDate()];\n };\n const focusBlur = async (el: any) => {\n inputOf(el).input.focus();\n inputOf(el).dispatchEvent(new FocusEvent('focusout', { bubbles: true, composed: true }));\n await settle2(el);\n };\n const watch = (el: any) => {\n const seen: string[] = [];\n for (const n of ['nile-change', 'nile-changed', 'nile-type-change']) el.addEventListener(n, () => seen.push(n));\n return seen;\n };\n const apply = async (el: any) => {\n (el.calendarElement.shadowRoot.querySelector('.apply-button') as HTMLElement).click();\n await settle2(el);\n };\n\n it('Y13 DD/MM/YYYY -> YYYY-MM-DD -> back keeps the date, time and zone', async () => {\n const el = await make();\n const value = el.value;\n const seen = watch(el);\n expect(textOf(el).startsWith('15/06/2026')).to.be.true;\n el.dateFormat = 'YYYY-MM-DD';\n await settle2(el);\n expect(textOf(el).startsWith('2026-06-15')).to.be.true;\n expect(textOf(el)).to.contain('10:20:30.250').and.to.contain('Asia/Kolkata');\n el.dateFormat = 'DD/MM/YYYY';\n await settle2(el);\n expect(textOf(el).startsWith('15/06/2026')).to.be.true;\n expect(el.value).to.equal(value);\n expect(el.timezone).to.equal('Asia/Kolkata');\n expect(calDate(el)).to.deep.equal([2026, 6, 15]);\n expect(seen).to.deep.equal([]);\n }).timeout(60000);\n\n it('Y13 hideTimeFields hides then restores time and zone without losing them', async () => {\n const el = await make();\n const value = el.value;\n const seen = watch(el);\n el.hideTimeFields = ALL_TIME;\n await settle2(el);\n expect(textOf(el)).to.equal('15/06/2026');\n el.hideTimeFields = [];\n await settle2(el);\n expect(textOf(el)).to.contain('10:20:30.250').and.to.contain('Asia/Kolkata');\n expect(el.value).to.equal(value);\n expect(seen).to.deep.equal([]);\n }).timeout(60000);\n\n it('Y13 both properties changed in one update give one consistent trigger', async () => {\n const el = await make();\n const value = el.value;\n el.dateFormat = 'YYYY-MM-DD';\n el.hideTimeFields = ALL_TIME;\n await settle2(el);\n expect(textOf(el)).to.equal('2026-06-15');\n el.dateFormat = 'DD/MM/YYYY';\n el.hideTimeFields = [];\n await settle2(el);\n expect(textOf(el)).to.contain('15/06/2026').and.to.contain('10:20:30.250').and.to.contain('Asia/Kolkata');\n expect(el.value).to.equal(value);\n }).timeout(60000);\n\n it('Y13 focus/blur after each change does not corrupt the date, time or zone', async () => {\n const el = await make();\n const value = el.value;\n const seen = watch(el);\n for (const [fmt, hide] of [['YYYY-MM-DD', []], ['YYYY-MM-DD', ALL_TIME], ['DD/MM/YYYY', ALL_TIME], ['DD/MM/YYYY', []]] as Array<[string, string[]]>) {\n el.dateFormat = fmt;\n el.hideTimeFields = hide;\n await settle2(el);\n const text = textOf(el);\n for (let i = 0; i < 2; i++) {\n await focusBlur(el);\n expect(textOf(el), `${fmt} ${hide.length}`).to.equal(text);\n }\n expect(el.value).to.equal(value);\n expect(el.timezone).to.equal('Asia/Kolkata');\n expect(calDate(el)).to.deep.equal([2026, 6, 15]);\n }\n expect(seen).to.deep.equal([]);\n }).timeout(60000);\n\n it('Y13 an uncommitted draft is discarded and the committed value is redrawn', async () => {\n const el = await make();\n const value = el.value;\n nativeOf(el).setSelectionRange(0, 10);\n press(el, 'Backspace');\n for (const ch of '01012030') press(el, ch);\n await settle2(el);\n expect(textOf(el).startsWith('01/01/2030')).to.be.true;\n const seen = watch(el);\n el.dateFormat = 'YYYY-MM-DD';\n await settle2(el);\n expect(textOf(el).startsWith('2026-06-15')).to.be.true;\n await focusBlur(el);\n expect(textOf(el).startsWith('2026-06-15')).to.be.true;\n expect(el.value).to.equal(value);\n expect(seen).to.deep.equal([]);\n }).timeout(60000);\n\n it('Y13 repeated toggles do not drift', async () => {\n const el = await make();\n const value = el.value;\n const first = textOf(el);\n for (let i = 0; i < 4; i++) {\n el.dateFormat = 'YYYY-MM-DD';\n el.hideTimeFields = ALL_TIME;\n await settle2(el);\n el.dateFormat = 'DD/MM/YYYY';\n el.hideTimeFields = [];\n await settle2(el);\n }\n expect(textOf(el)).to.equal(first);\n expect(el.value).to.equal(value);\n }).timeout(60000);\n\n it('Y13 a programmatic value after a format change shows in the new format', async () => {\n const el = await make();\n el.dateFormat = 'YYYY-MM-DD';\n await settle2(el);\n el.value = '2027-03-04T05:06:07.008[GMT+05:30 Asia/Kolkata]';\n await settle2(el);\n expect(textOf(el).startsWith('2027-03-04')).to.be.true;\n await focusBlur(el);\n expect(textOf(el).startsWith('2027-03-04')).to.be.true;\n expect(calDate(el)).to.deep.equal([2027, 3, 4]);\n }).timeout(60000);\n\n it('Y13 Apply after a format change emits the committed date once', async () => {\n const el = await make();\n el.dateFormat = 'YYYY-MM-DD';\n await settle2(el);\n const seen = watch(el);\n await apply(el);\n expect(seen).to.deep.equal(['nile-change']);\n expect(el.value.startsWith('2026-06-15T10:20:30.250')).to.be.true;\n }).timeout(60000);\n\n it('Y13 with no value a format change leaves the trigger empty and emits nothing', async () => {\n const el: any = await fixture(html`<nile-date-time-picker dateFormat=\"DD/MM/YYYY\"></nile-date-time-picker>`);\n await settle2(el);\n const seen = watch(el);\n el.dateFormat = 'YYYY-MM-DD';\n el.hideTimeFields = ALL_TIME;\n await settle2(el);\n expect(textOf(el)).to.equal('');\n expect(el.value ?? '').to.equal('');\n expect(seen).to.deep.equal([]);\n }).timeout(60000);\n\n it('Y13 a format change that discards a typed draft (no committed value) emits no nile-input', async () => {\n const el: any = await fixture(html`<nile-date-time-picker dateFormat=\"DD/MM/YYYY\" .startYear=${0} .endYear=${9999}></nile-date-time-picker>`);\n await settle2(el);\n nativeOf(el).setSelectionRange(0, 0);\n for (const ch of '01012030') press(el, ch);\n await settle2(el);\n expect(textOf(el).startsWith('01/01/2030')).to.be.true;\n const seen = watch(el);\n let inputs = 0;\n inputOf(el).addEventListener('nile-input', () => { inputs++; });\n el.dateFormat = 'YYYY-MM-DD';\n await settle2(el);\n el.hideTimeFields = ALL_TIME;\n await settle2(el);\n expect(textOf(el)).to.equal('');\n expect(el.value ?? '').to.equal('');\n expect(inputs).to.equal(0);\n expect(seen).to.deep.equal([]);\n }).timeout(60000);\n\n it('Y13 a user Clear still emits nile-input and nile-clear', async () => {\n const el = await make();\n let inputs = 0;\n let clears = 0;\n inputOf(el).addEventListener('nile-input', () => { inputs++; });\n el.addEventListener('nile-clear', () => { clears++; });\n el.handleClear();\n await settle2(el);\n expect(inputs).to.equal(1);\n expect(clears).to.equal(1);\n }).timeout(60000);\n\n it('Y13 relative mode ignores a format change', async () => {\n const el: any = await fixture(html`<nile-date-time-picker type=\"relative\" dateFormat=\"DD/MM/YYYY\"></nile-date-time-picker>`);\n await settle2(el);\n const before = el.type;\n el.dateFormat = 'YYYY-MM-DD';\n el.hideTimeFields = ALL_TIME;\n await settle2(el);\n expect(el.type).to.equal(before);\n expect(el.dateFormat).to.equal('YYYY-MM-DD');\n }).timeout(60000);\n\n it('Y13 allowedDates clamping still works after a format change', async () => {\n const el = await make({ allowed: ['2026-06-10', '2026-06-20'] });\n el.dateFormat = 'DD/MM/YYYY';\n el.hideTimeFields = [];\n await settle2(el);\n nativeOf(el).setSelectionRange(0, 10);\n press(el, 'Backspace');\n for (const ch of '25062026') press(el, ch);\n await settle2(el);\n expect(textOf(el).startsWith('20/06/2026')).to.be.true;\n expect(calDate(el)).to.deep.equal([2026, 6, 20]);\n }).timeout(60000);\n});\n\ndescribe('Y14. switching Relative -> Absolute redraws the trigger from the retained absolute value', () => {\n const SEED = '2026-06-15T10:20:30.250[GMT+05:30 Asia/Kolkata]';\n const make = async (withValue = true): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker\n timezone=\"Asia/Kolkata\" dateFormat=\"DD/MM/YYYY\" .startYear=${0} .endYear=${9999}\n value=${withValue ? SEED : ''}></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const inputOf = (el: any) => el.shadowRoot.querySelector('nile-input') as any;\n const nativeOf = (el: any) => inputOf(el).input as HTMLInputElement;\n const textOf = (el: any) => nativeOf(el).value;\n const calDate = (el: any) => {\n const c = el.calendarElement;\n return [c.value.getFullYear(), c.value.getMonth() + 1, c.value.getDate()];\n };\n const focusBlur = async (el: any) => {\n inputOf(el).input.focus();\n inputOf(el).dispatchEvent(new FocusEvent('focusout', { bubbles: true, composed: true }));\n await settle2(el);\n };\n /** user-style mode switch: the calendar's tab group fires nile-tab-show */\n const switchTab = async (el: any, value: string) => {\n const cal = el.calendarElement;\n cal.shadowRoot.querySelector(`nile-tab[panel=\"${value}\"]`).dispatchEvent(\n new CustomEvent('nile-tab-show', { detail: { value }, bubbles: true, composed: true })\n );\n await settle2(el);\n };\n const relativeApply = async (el: any) => {\n const cal = el.calendarElement;\n (cal.shadowRoot.querySelector('.duration__value') as HTMLElement).click();\n await cal.updateComplete;\n (cal.shadowRoot.querySelector('.apply-button') as HTMLElement).click();\n await settle2(el);\n };\n const watch = (el: any) => {\n const seen: string[] = [];\n for (const n of ['nile-change', 'nile-changed']) el.addEventListener(n, () => seen.push(n));\n const types: any[] = [];\n el.addEventListener('nile-type-change', (e: any) => types.push(e.detail?.value));\n let inputs = 0;\n inputOf(el).addEventListener('nile-input', () => { inputs++; });\n return { seen, types, inputs: () => inputs };\n };\n\n it('Y14 Relative -> Absolute restores the retained absolute value, never the relative text', async () => {\n const el = await make();\n const value = el.value;\n await switchTab(el, 'relative');\n await relativeApply(el);\n expect(textOf(el)).to.contain(' - ');\n expect(el.value, 'relative apply leaves value alone').to.equal(value);\n const w = watch(el);\n await switchTab(el, 'absolute');\n expect(el.type).to.equal('absolute');\n expect(textOf(el).startsWith('15/06/2026')).to.be.true;\n expect(textOf(el)).to.contain('10:20:30.250').and.to.contain('Asia/Kolkata');\n expect(el.value).to.equal(value);\n expect(el.timezone).to.equal('Asia/Kolkata');\n expect(w.seen).to.deep.equal([]);\n expect(w.inputs()).to.equal(0);\n expect(w.types).to.deep.equal(['absolute']);\n }).timeout(60000);\n\n it('Y14 with no absolute value the trigger is cleared silently', async () => {\n const el = await make(false);\n await switchTab(el, 'relative');\n await relativeApply(el);\n expect(textOf(el)).to.contain(' - ');\n const w = watch(el);\n await switchTab(el, 'absolute');\n expect(textOf(el)).to.equal('');\n expect(el.value ?? '').to.equal('');\n expect(w.inputs()).to.equal(0);\n expect(w.seen).to.deep.equal([]);\n expect(w.types).to.deep.equal(['absolute']);\n }).timeout(60000);\n\n it('Y14 focus/blur after returning to Absolute does not corrupt date, time or zone', async () => {\n const el = await make();\n const value = el.value;\n await switchTab(el, 'relative');\n await relativeApply(el);\n await switchTab(el, 'absolute');\n const text = textOf(el);\n for (let i = 0; i < 3; i++) {\n await focusBlur(el);\n expect(textOf(el), `blur ${i + 1}`).to.equal(text);\n }\n expect(el.value).to.equal(value);\n expect(el.timezone).to.equal('Asia/Kolkata');\n expect(calDate(el)).to.deep.equal([2026, 6, 15]);\n expect((el as any).maskValues.length).to.be.greaterThan(0);\n }).timeout(60000);\n\n it('Y14 with no absolute value, focus/blur after returning leaves the trigger empty', async () => {\n const el = await make(false);\n await switchTab(el, 'relative');\n await relativeApply(el);\n await switchTab(el, 'absolute');\n await focusBlur(el);\n expect(textOf(el)).to.equal('');\n expect(el.value ?? '').to.equal('');\n }).timeout(60000);\n\n it('Y14 Absolute -> Relative -> Absolute and repeated switching show no stale text', async () => {\n const el = await make();\n const first = textOf(el);\n const w = watch(el);\n for (let i = 0; i < 3; i++) {\n await switchTab(el, 'relative');\n expect(el.type).to.equal('relative');\n await switchTab(el, 'absolute');\n expect(textOf(el), `round ${i + 1}`).to.equal(first);\n expect(textOf(el)).to.not.contain(' - Asia/Kolkata - ');\n }\n expect(w.types).to.deep.equal(['relative', 'absolute', 'relative', 'absolute', 'relative', 'absolute']);\n expect(w.seen).to.deep.equal([]);\n expect(w.inputs()).to.equal(0);\n }).timeout(60000);\n\n it('Y14 a programmatic type change back to Absolute also redraws', async () => {\n const el = await make();\n const first = textOf(el);\n el.type = 'relative';\n await settle2(el);\n await relativeApply(el);\n el.type = 'absolute';\n await settle2(el);\n expect(textOf(el)).to.equal(first);\n }).timeout(60000);\n\n it('Y14 Absolute -> Relative does not change the absolute value', async () => {\n const el = await make();\n const value = el.value;\n await switchTab(el, 'relative');\n expect(el.value).to.equal(value);\n expect(el.timezone).to.equal('Asia/Kolkata');\n }).timeout(60000);\n\n it('Y14 Absolute Apply and Relative Apply still work after switching back and forth', async () => {\n const el = await make();\n await switchTab(el, 'relative');\n let relative: any = null;\n el.addEventListener('nile-change', ((e: CustomEvent) => { relative = e.detail; }) as EventListener);\n await relativeApply(el);\n expect(relative?.startDate, 'relative apply emits a range').to.exist;\n await switchTab(el, 'absolute');\n const events: string[] = [];\n let detail: any = null;\n for (const n of ['nile-change', 'nile-changed']) el.addEventListener(n, (e: any) => { events.push(n); detail = e.detail; });\n (el.calendarElement.shadowRoot.querySelector('.apply-button') as HTMLElement).click();\n await settle2(el);\n expect(events).to.deep.equal(['nile-change']);\n expect(detail.value.startsWith('2026-06-15T10:20:30.250')).to.be.true;\n expect(el.value.startsWith('2026-06-15T10:20:30.250')).to.be.true;\n }).timeout(60000);\n\n it('Y14 dateFormat and hideTimeFields updates still work after returning to Absolute', async () => {\n const el = await make();\n await switchTab(el, 'relative');\n await relativeApply(el);\n await switchTab(el, 'absolute');\n el.dateFormat = 'YYYY-MM-DD';\n el.hideTimeFields = ['hours', 'minutes', 'seconds', 'milliseconds', 'timezone'];\n await settle2(el);\n expect(textOf(el)).to.equal('2026-06-15');\n el.hideTimeFields = [];\n el.dateFormat = 'DD/MM/YYYY';\n await settle2(el);\n expect(textOf(el).startsWith('15/06/2026')).to.be.true;\n }).timeout(60000);\n});\n\ndescribe('Y15. focus/blur never clamps a seeded year outside the default startYear/endYear range', () => {\n // no .startYear/.endYear here on purpose: the default navigation range (2000-2050) is what used to clamp the seed\n const DATE_ONLY = ['hours', 'minutes', 'seconds', 'milliseconds', 'timezone'];\n const make = async (year: string, format = 'DD/MM/YYYY'): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker\n .timezone=${'UTC'} dateFormat=${format} .hideTimeFields=${DATE_ONLY}\n value=${`${year}-06-15T10:20:30[GMT+00:00 UTC]`}></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const inputOf = (el: any) => el.shadowRoot.querySelector('nile-input') as any;\n const textOf = (el: any) => (inputOf(el).input as HTMLInputElement).value;\n const calState = (el: any) => {\n const c = el.calendarElement;\n return [c.value.getFullYear(), c.value.getMonth(), c.value.getDate(), c.currentYear, c.currentMonth];\n };\n const focusBlur = async (el: any) => {\n inputOf(el).input.focus();\n inputOf(el).dispatchEvent(new FocusEvent('focusout', { bubbles: true, composed: true }));\n await settle2(el);\n };\n\n for (const year of ['0050', '1985', '1999', '2051', '2100', '9999']) {\n for (const format of ['DD/MM/YYYY', 'YYYY-MM-DD']) {\n it(`Y15 [${format}] seeded year ${year}: focus/blur x3 leaves text, calendar, value and events untouched`, async () => {\n const el = await make(year, format);\n const text = textOf(el);\n const cal = calState(el);\n const value = el.value;\n expect(text, 'seeded text carries the literal year').to.contain(year);\n expect(cal.slice(0, 1), 'seeded calendar year').to.deep.equal([Number(year)]);\n let emitted = 0;\n el.addEventListener('nile-change', () => { emitted++; });\n el.addEventListener('nile-changed', () => { emitted++; });\n for (let i = 0; i < 3; i++) {\n await focusBlur(el);\n expect(textOf(el), `text after cycle ${i + 1}`).to.equal(text);\n expect(calState(el), `calendar after cycle ${i + 1}`).to.deep.equal(cal);\n }\n expect(el.value, 'value untouched').to.equal(value);\n expect(emitted, 'no change event from focus/blur').to.equal(0);\n }).timeout(60000);\n }\n }\n\n it('Y15 a year the USER types outside the range is still clamped (user edits only)', async () => {\n const el = await make('2026');\n const native = inputOf(el).input as HTMLInputElement;\n native.setSelectionRange(0, 10);\n inputOf(el).dispatchEvent(new KeyboardEvent('keydown', { key: 'Backspace', bubbles: true, composed: true, cancelable: true }));\n for (const ch of '15061850') {\n inputOf(el).dispatchEvent(new KeyboardEvent('keydown', { key: ch, bubbles: true, composed: true, cancelable: true }));\n }\n await settle2(el);\n await focusBlur(el);\n expect(textOf(el)).to.equal('15/06/2000');\n }).timeout(60000);\n\n it('Y15 a year the USER types above the range clamps to the range end', async () => {\n const el = await make('2026');\n const native = inputOf(el).input as HTMLInputElement;\n native.setSelectionRange(0, 10);\n inputOf(el).dispatchEvent(new KeyboardEvent('keydown', { key: 'Backspace', bubbles: true, composed: true, cancelable: true }));\n for (const ch of '15062100') {\n inputOf(el).dispatchEvent(new KeyboardEvent('keydown', { key: ch, bubbles: true, composed: true, cancelable: true }));\n }\n await settle2(el);\n await focusBlur(el);\n expect(textOf(el)).to.equal('15/06/2050');\n }).timeout(60000);\n});\n\ndescribe('Y16. an unparseable value after a valid one does not leave the old selection on screen', () => {\n const SEED = '2026-06-15T10:20:30.000[GMT+05:30 Asia/Kolkata]';\n const BAD = ['not-a-date', '2026-13-45T10:00:00', 'garbage[GMT+00:00 UTC]', ' '];\n const make = async (value = SEED): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker\n timezone=\"Asia/Kolkata\" dateFormat=\"DD/MM/YYYY\" value=${value}></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const textOf = (el: any) => (el.shadowRoot.querySelector('nile-input').input as HTMLInputElement).value;\n\n for (const bad of BAD) {\n it(`Y16 ${JSON.stringify(bad)}: trigger and calendar empty (as for an invalid initial value), zone and events untouched`, async () => {\n const el = await make();\n expect(textOf(el), 'precondition').to.contain('15/06/2026');\n let changes = 0;\n el.addEventListener('nile-change', () => { changes++; });\n el.addEventListener('nile-changed', () => { changes++; });\n el.value = bad;\n await settle2(el);\n expect(textOf(el), 'trigger text').to.equal('');\n expect(el.calendarElement.value, 'calendar selection').to.equal(null);\n expect(el.timezone, 'zone is not touched').to.equal('Asia/Kolkata');\n expect(el.value, 'value is the consumer\\'s, never rewritten').to.equal(bad);\n expect(changes, 'no change event').to.equal(0);\n // and a later valid value seeds normally\n el.value = '2027-01-02T03:04:05.000[GMT+05:30 Asia/Kolkata]';\n await settle2(el);\n expect(textOf(el)).to.contain('02/01/2027');\n expect(el.calendarElement.value.getFullYear()).to.equal(2027);\n }).timeout(60000);\n }\n\n it('Y16 an invalid INITIAL value shows an empty trigger (the behaviour the after-valid case must match)', async () => {\n const el = await make('not-a-date');\n expect(textOf(el)).to.equal('');\n expect(el.calendarElement.value ?? null).to.equal(null);\n }).timeout(60000);\n});\n\ndescribe('Y17. focus/blur with a two-digit (YY) format never moves the calendar off a seeded year outside 2000-2099', () => {\n const DATE_ONLY = ['hours', 'minutes', 'seconds', 'milliseconds', 'timezone'];\n const make = async (year: string): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker\n .timezone=${'UTC'} dateFormat=\"DD/MM/YY\" .startYear=${0} .endYear=${9999} .hideTimeFields=${DATE_ONLY}\n value=${`${year}-06-15T10:20:30[GMT+00:00 UTC]`}></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const inputOf = (el: any) => el.shadowRoot.querySelector('nile-input') as any;\n const calState = (el: any) => {\n const c = el.calendarElement;\n return [c.value.getFullYear(), c.value.getMonth(), c.value.getDate(), c.currentYear, c.currentMonth];\n };\n\n for (const year of ['1985', '2026', '2099', '2100']) {\n it(`Y17 seeded year ${year}: focus/blur x3 leaves calendar, text, value and events untouched`, async () => {\n const el = await make(year);\n const text = (inputOf(el).input as HTMLInputElement).value;\n const cal = calState(el);\n const value = el.value;\n let emitted = 0;\n el.addEventListener('nile-change', () => { emitted++; });\n for (let i = 0; i < 3; i++) {\n inputOf(el).input.focus();\n inputOf(el).dispatchEvent(new FocusEvent('focusout', { bubbles: true, composed: true }));\n await settle2(el);\n expect(calState(el), `calendar after cycle ${i + 1}`).to.deep.equal(cal);\n expect((inputOf(el).input as HTMLInputElement).value, `text after cycle ${i + 1}`).to.equal(text);\n }\n expect(el.value).to.equal(value);\n expect(emitted).to.equal(0);\n }).timeout(60000);\n }\n});\n\ndescribe('Y18. a YY year is always two characters', () => {\n const DATE_ONLY = ['hours', 'minutes', 'seconds', 'milliseconds', 'timezone'];\n for (const [year, yy] of [['0005', '05'], ['0009', '09'], ['0010', '10'], ['2005', '05'], ['2026', '26']]) {\n it(`Y18 year ${year} renders as ${yy} under DD/MM/YY`, async () => {\n const el: any = await fixture(html`<nile-date-time-picker\n .timezone=${'UTC'} dateFormat=\"DD/MM/YY\" .startYear=${0} .endYear=${9999} .hideTimeFields=${DATE_ONLY}\n value=${`${year}-06-15T10:20:30[GMT+00:00 UTC]`}></nile-date-time-picker>`);\n await settle2(el);\n expect((el.shadowRoot.querySelector('nile-input').input as HTMLInputElement).value).to.equal(`15/06/${yy}`);\n }).timeout(60000);\n }\n});\n\ndescribe('Y19. blur clamps only the segments the user actually edited', () => {\n // default navigation range (2000-2050) on purpose: every seed below is outside it (1999 and 2051 sit just beyond each end)\n const DATE_ONLY = ['hours', 'minutes', 'seconds', 'milliseconds', 'timezone'];\n const make = async (value: string, format = 'DD/MM/YYYY'): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker\n .timezone=${'UTC'} dateFormat=${format} .hideTimeFields=${DATE_ONLY} value=${value}></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const inputOf = (el: any) => el.shadowRoot.querySelector('nile-input') as any;\n const nativeOf = (el: any) => inputOf(el).input as HTMLInputElement;\n const press = (el: any, key: string) =>\n inputOf(el).dispatchEvent(new KeyboardEvent('keydown', { key, bubbles: true, composed: true, cancelable: true }));\n const blur = async (el: any) => {\n nativeOf(el).focus();\n inputOf(el).dispatchEvent(new FocusEvent('focusout', { bubbles: true, composed: true }));\n await settle2(el);\n };\n const calDate = (el: any) => {\n const c = el.calendarElement;\n return [c.value.getFullYear(), c.value.getMonth() + 1, c.value.getDate()];\n };\n /** select [from, to) of the text, delete it, and type digits */\n const retype = async (el: any, from: number, to: number, digits: string) => {\n nativeOf(el).setSelectionRange(from, to);\n press(el, 'Backspace');\n for (const ch of digits) press(el, ch);\n await settle2(el);\n };\n\n for (const year of ['1985', '1999', '2051', '2100', '0050']) {\n it(`Y19 seeded ${year}: editing only the day, then blur, leaves the untouched year alone`, async () => {\n const el = await make(`${year}-06-15T00:00:00[GMT+00:00 UTC]`);\n await retype(el, 0, 2, '20');\n await blur(el);\n expect(nativeOf(el).value).to.equal(`20/06/${year}`);\n expect(calDate(el)).to.deep.equal([Number(year), 6, 20]);\n }).timeout(60000);\n\n it(`Y19 seeded ${year}: editing only the month, then blur, leaves the untouched year alone`, async () => {\n const el = await make(`${year}-06-15T00:00:00[GMT+00:00 UTC]`);\n await retype(el, 3, 5, '08');\n await blur(el);\n expect(nativeOf(el).value).to.equal(`15/08/${year}`);\n expect(calDate(el)).to.deep.equal([Number(year), 8, 15]);\n }).timeout(60000);\n }\n\n // the approved default range is 2000-2050: a year the user completes is clamped into it, a year inside it is kept\n for (const [typed, expected, why] of [\n ['1990', '2000', 'below the range → 2000'],\n ['1999', '2000', 'just below the range → 2000'],\n ['2100', '2050', 'above the range → 2050'],\n ['2051', '2050', 'just above the range → 2050'],\n ['2000', '2000', 'the range start is kept'],\n ['2050', '2050', 'the range end is kept'],\n ['2030', '2030', 'inside the range is kept'],\n ]) {\n it(`Y19 the year IS clamped when the user edits the year itself: ${typed} → ${expected} (${why})`, async () => {\n const el = await make('1985-06-15T00:00:00[GMT+00:00 UTC]');\n await retype(el, 6, 10, typed);\n await blur(el);\n expect(nativeOf(el).value).to.equal(`15/06/${expected}`);\n expect(calDate(el)).to.deep.equal([Number(expected), 6, 15]);\n }).timeout(60000);\n }\n\n it('Y19 an in-range seeded year is not changed by editing another segment', async () => {\n const el = await make('2030-06-15T00:00:00[GMT+00:00 UTC]');\n await retype(el, 0, 2, '20');\n await blur(el);\n expect(nativeOf(el).value).to.equal('20/06/2030');\n }).timeout(60000);\n\n it('Y19 a second edit after a blur still leaves the untouched year alone', async () => {\n const el = await make('1985-06-15T00:00:00[GMT+00:00 UTC]');\n await retype(el, 0, 2, '20');\n await blur(el);\n await retype(el, 3, 5, '08');\n await blur(el);\n expect(nativeOf(el).value).to.equal('20/08/1985');\n }).timeout(60000);\n\n it('Y19 an edited month/year still clamps the day to the month length (e.g. 31 -> 28 after choosing February)', async () => {\n const el = await make('1985-01-31T00:00:00[GMT+00:00 UTC]');\n await retype(el, 3, 5, '02');\n await blur(el);\n expect(nativeOf(el).value).to.equal('28/02/1985');\n }).timeout(60000);\n});\n\ndescribe('Y19b. typed-year clamping: explicit startYear / endYear win, an unset side falls back to 2000 / 2050', () => {\n const DATE_ONLY = ['hours', 'minutes', 'seconds', 'milliseconds', 'timezone'];\n const make = async (bounds: { start?: number; end?: number }, format = 'DD/MM/YYYY'): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker\n .timezone=${'UTC'} dateFormat=${format} .hideTimeFields=${DATE_ONLY} .startYear=${bounds.start} .endYear=${bounds.end}\n value=\"2026-06-15T00:00:00[GMT+00:00 UTC]\"></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const inputOf = (el: any) => el.shadowRoot.querySelector('nile-input') as any;\n const nativeOf = (el: any) => inputOf(el).input as HTMLInputElement;\n const press = (el: any, key: string) =>\n inputOf(el).dispatchEvent(new KeyboardEvent('keydown', { key, bubbles: true, composed: true, cancelable: true }));\n /** retype the year segment (the last four characters of DD/MM/YYYY) and blur */\n const typeYear = async (el: any, digits: string, from = 6, to = 10) => {\n nativeOf(el).setSelectionRange(from, to);\n press(el, 'Backspace');\n for (const ch of digits) press(el, ch);\n await settle2(el);\n nativeOf(el).focus();\n inputOf(el).dispatchEvent(new FocusEvent('focusout', { bubbles: true, composed: true }));\n await settle2(el);\n };\n const calYear = (el: any) => el.calendarElement.value.getFullYear();\n\n type Case = [string, { start?: number; end?: number }, string, string];\n const cases: Case[] = [\n // no bounds: the 2000-2050 default applies on both sides\n ['no bounds, before 2000', {}, '1850', '2000'],\n ['no bounds, 1999', {}, '1999', '2000'],\n ['no bounds, after 2050', {}, '2100', '2050'],\n ['no bounds, 2051', {}, '2051', '2050'],\n ['no bounds, year 0050', {}, '0050', '2000'],\n ['no bounds, 2000 and 2050 are kept', {}, '2000', '2000'],\n ['no bounds, 2050 is kept', {}, '2050', '2050'],\n // explicit bounds win over the default, including outside 2000-2050\n ['explicit bounds before 2000 are respected', { start: 1850, end: 2100 }, '1850', '1850'],\n ['explicit bounds after 2050 are respected', { start: 1850, end: 2100 }, '2100', '2100'],\n ['explicit bounds still clamp below', { start: 1850, end: 2100 }, '1800', '1850'],\n ['explicit bounds still clamp above', { start: 1850, end: 2100 }, '2200', '2100'],\n ['explicit 0-9999 keeps year 0050', { start: 0, end: 9999 }, '0050', '0050'],\n ['explicit 0-9999 keeps 9999', { start: 0, end: 9999 }, '9999', '9999'],\n // custom bounds inside the default range\n ['custom bounds, below', { start: 1990, end: 2010 }, '1980', '1990'],\n ['custom bounds, above', { start: 1990, end: 2010 }, '2020', '2010'],\n ['custom bounds, inside', { start: 1990, end: 2010 }, '2000', '2000'],\n // one-sided: the unset side falls back to 2000 / 2050\n ['startYear only, below it', { start: 1990 }, '1980', '1990'],\n ['startYear only, before 2000 but above it', { start: 1990 }, '1995', '1995'],\n ['startYear only, above the default end', { start: 1990 }, '2100', '2050'],\n ['endYear only, above it', { end: 2010 }, '2020', '2010'],\n ['endYear only, below the default start', { end: 2010 }, '1850', '2000'],\n ['endYear only, past 2050 but within it', { end: 2100 }, '2080', '2080'],\n ['endYear only, past it', { end: 2100 }, '2101', '2100'],\n ];\n for (const [name, bounds, typed, expected] of cases) {\n it(`Y19b ${name}: typing ${typed} gives ${expected}`, async () => {\n const el = await make(bounds);\n await typeYear(el, typed);\n expect(nativeOf(el).value).to.equal(`15/06/${expected}`);\n expect(calYear(el)).to.equal(Number(expected));\n }).timeout(60000);\n }\n\n it('Y19b no bounds: a typed YY year past 2050 is pulled back to 2050 (75 becomes 50)', async () => {\n const el = await make({}, 'DD/MM/YY');\n await typeYear(el, '75', 6, 8);\n expect(nativeOf(el).value).to.equal('15/06/50');\n expect(calYear(el)).to.equal(2050);\n }).timeout(60000);\n\n it('Y19b explicit endYear 2099: a typed YY year 75 is kept (2075)', async () => {\n const el = await make({ end: 2099 }, 'DD/MM/YY');\n await typeYear(el, '75', 6, 8);\n expect(nativeOf(el).value).to.equal('15/06/75');\n expect(calYear(el)).to.equal(2075);\n }).timeout(60000);\n\n it('Y19b endYear only: the calendar the picker renders gets only that bound', async () => {\n const el = await make({ end: 2010 });\n const cal = el.calendarElement;\n expect(cal.startYear).to.be.undefined;\n expect(Number(cal.endYear)).to.equal(2010);\n }).timeout(60000);\n});\n\ndescribe('Y20. Set to now uses the machine zone; value = null keeps the configured timezone', () => {\n const FROZEN = Date.UTC(2026, 5, 15, 18, 42, 37, 456);\n const textOf = (el: any) => (el.shadowRoot.querySelector('nile-input').input as HTMLInputElement).value;\n\n it('Y20 Set to now shows the machine clock and zone in the trigger, switches picker and calendar to the machine zone, and emits it', async () => {\n const HOST = Intl.DateTimeFormat().resolvedOptions().timeZone;\n const el: any = await fixture(html`<nile-date-time-picker timezone=\"America/New_York\" dateFormat=\"DD/MM/YYYY\"></nile-date-time-picker>`);\n const cal = await settle2(el);\n const RealDate = Date;\n class FrozenDate extends RealDate {\n constructor(...args: any[]) { if (args.length === 0) super(FROZEN); else super(...(args as [any])); }\n static now() { return FROZEN; }\n }\n let detail: any = null;\n el.addEventListener('nile-change', (e: CustomEvent) => { detail = e.detail; });\n (globalThis as any).Date = FrozenDate;\n try { (cal.shadowRoot!.querySelector('.tp-set-to-now-button') as HTMLElement).click(); }\n finally { (globalThis as any).Date = RealDate; }\n await settle2(el);\n (cal.shadowRoot!.querySelector('.apply-button') as HTMLElement).click();\n await settle2(el);\n // the machine's own reading of the frozen instant (host zone differs between runs)\n const t = new RealDate(FROZEN);\n const p2 = (n: number) => String(n).padStart(2, '0');\n expect(textOf(el)).to.equal(\n `${p2(t.getDate())}/${p2(t.getMonth() + 1)}/${t.getFullYear()} - ${p2(t.getHours())}:${p2(t.getMinutes())}:${p2(t.getSeconds())}.456 - ${HOST}`);\n expect(el.timezone, 'picker zone becomes the machine zone').to.equal(HOST);\n expect(cal.timezone).to.equal(HOST);\n expect(detail.timezone).to.equal(HOST);\n expect(detail.unixEpoch).to.equal(FROZEN);\n }).timeout(60000);\n\n it('Y20 value = null clears value and display and keeps the configured timezone', async () => {\n const el: any = await fixture(html`<nile-date-time-picker timezone=\"Asia/Kolkata\" dateFormat=\"DD/MM/YYYY\"\n value=\"2026-06-15T10:20:30\"></nile-date-time-picker>`);\n await settle2(el);\n expect(textOf(el), 'precondition').to.contain('15/06/2026');\n el.value = null;\n await settle2(el);\n expect(el.value).to.equal(null);\n expect(textOf(el)).to.equal('');\n expect(el.calendarElement.value).to.equal(null);\n expect(el.timezone).to.equal('Asia/Kolkata');\n expect(el.calendarElement.timezone).to.equal('Asia/Kolkata');\n }).timeout(60000);\n});\n\ndescribe('Y21. an overflow Relative duration never reaches the picker (Finding #8)', () => {\n const fire = (target: HTMLElement, value: string) =>\n target.dispatchEvent(new CustomEvent('nile-change', { detail: { value }, bubbles: false, composed: true }));\n const make = async (): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker timezone=\"UTC\" dateFormat=\"DD/MM/YYYY\"\n value=\"2026-06-15T10:20:30.250[GMT+00:00 UTC]\"></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const tab = async (el: any, value: string) => {\n el.calendarElement.shadowRoot.querySelector(`nile-tab[panel=\"${value}\"]`).dispatchEvent(\n new CustomEvent('nile-tab-show', { detail: { value }, bubbles: true, composed: true })\n );\n await settle2(el);\n };\n const enter = async (el: any, unit: string, n: number) => {\n const cal = el.calendarElement;\n fire(cal.shadowRoot.querySelector('.time-input') as HTMLElement, unit);\n fire(cal.shadowRoot.querySelector('.duration-input') as HTMLElement, String(n));\n await settle2(el);\n };\n const apply = (el: any) => el.calendarElement.shadowRoot.querySelector('.apply-button') as HTMLElement;\n const textOf = (el: any) => (el.shadowRoot.querySelector('nile-input') as any).input.value as string;\n\n for (const [unit, n] of [['minutes', 999999999999], ['hours', 99999999999], ['days', 999999999], ['weeks', 999999999], ['months', 999999999]] as Array<[string, number]>) {\n it(`Y21 ${unit}: ${n} -> Apply is disabled, nothing is thrown, emitted or changed; correcting it applies normally`, async () => {\n const el = await make();\n const value = el.value;\n await tab(el, 'relative');\n const errors: string[] = [];\n const onError = (e: ErrorEvent) => { errors.push(e.message); e.preventDefault(); };\n window.addEventListener('error', onError);\n const seen: string[] = [];\n for (const name of ['nile-change', 'nile-changed']) el.addEventListener(name, () => seen.push(name));\n try {\n const before = textOf(el);\n await enter(el, unit, n);\n expect(apply(el).hasAttribute('disabled'), 'Apply disabled').to.be.true;\n apply(el).click();\n await settle2(el);\n expect(errors, 'no uncaught RangeError').to.deep.equal([]);\n expect(seen, 'no change events').to.deep.equal([]);\n expect(textOf(el), 'trigger unchanged').to.equal(before);\n expect(el.value, 'value unchanged').to.equal(value);\n expect(el.timezone).to.equal('UTC');\n\n await enter(el, unit, 2);\n expect(apply(el).hasAttribute('disabled'), 'Apply enabled again').to.be.false;\n apply(el).click();\n await settle2(el);\n expect(seen).to.deep.equal(['nile-change']);\n expect(textOf(el)).to.contain(' - UTC');\n expect(errors).to.deep.equal([]);\n } finally {\n window.removeEventListener('error', onError);\n }\n }).timeout(60000);\n }\n});\n\n/**\n * Year handling in the structured mask and the calendar view.\n *\n * Y1 `YY` keeps a seeded value's century when an unrelated segment is edited (DTP-02);\n * an explicitly edited year reads as 2000-2099\n * Y2 a year being overtyped is normalised only once it is fully typed (range clamp, leap day)\n * Y3 the year/month dropdowns only navigate; reopening the panel shows the selected date's month/year\n */\ndescribe('NileDateTimePicker — year handling', () => {\n const SEED = (y: string, md = '06-15') => `${y}-${md}T10:20:30.000[GMT+00:00 UTC]`;\n\n type Opts = { fmt?: string; start?: number; end?: number; value?: string; hide?: string[]; dropdowns?: boolean };\n const build = async (o: Opts = {}) => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker .dateFormat=${o.fmt ?? 'DD/MM/YY'}></nile-date-time-picker>`\n );\n // explicit bounds, so these tests do not depend on the component's default year range\n el.startYear = o.start ?? 1900;\n el.endYear = o.end ?? 3000;\n if (o.hide) el.hideTimeFields = o.hide as any;\n if (o.dropdowns) { el.showMonthDropdown = true; el.showYearDropdown = true; }\n if (o.value) el.value = o.value;\n await settle(el); await settle(el);\n await new Promise(r => setTimeout(r, 30));\n return el;\n };\n const settle = async (el: NileDateTimePicker) => {\n await el.updateComplete;\n const cal = (el as any).calendarElement;\n if (cal) await cal.updateComplete;\n await inputOf(el).updateComplete;\n return cal;\n };\n const calOf = (el: any): any => el.calendarElement;\n const inputOf = (el: any): any => el.shadowRoot.querySelector('nile-input');\n const nativeOf = (el: any): HTMLInputElement => inputOf(el).input;\n const textOf = (el: any) => nativeOf(el).value;\n const press = (el: any, key: string) =>\n inputOf(el).dispatchEvent(new KeyboardEvent('keydown', { key, bubbles: true, composed: true, cancelable: true }));\n const typeKeys = (el: any, s: string) => { for (const ch of s) press(el, ch); };\n const caret = (el: any, p: number, q = p) => { nativeOf(el).focus(); nativeOf(el).setSelectionRange(p, q); };\n const blur = async (el: any) => {\n inputOf(el).dispatchEvent(new Event('focusout', { bubbles: true, composed: true }));\n await settle(el);\n };\n const paste = (el: any, text: string) => {\n const dt = new DataTransfer();\n dt.setData('text', text);\n inputOf(el).dispatchEvent(new ClipboardEvent('paste', { clipboardData: dt, bubbles: true, composed: true, cancelable: true }));\n };\n /** the mask's year digits, e.g. \"2026\" or \"26\" */\n const yearText = (el: any) => {\n const t = textOf(el);\n return (el.dateFormat as string).endsWith('YYYY') ? t.slice(6, 10) : t.slice(6, 8);\n };\n const apply = async (el: any) => {\n const events: CustomEvent[] = [];\n const rec = ((e: CustomEvent) => events.push(e)) as EventListener;\n el.addEventListener('nile-change', rec);\n const btn = calOf(el).shadowRoot.querySelector('.apply-button') as any;\n await btn.updateComplete;\n btn.click();\n await settle(el);\n el.removeEventListener('nile-change', rec);\n return events;\n };\n const yearOf = (iso: string | undefined) => Number((iso ?? '').slice(0, 4));\n const openPanel = async (el: any) => {\n el.open = true;\n await settle(el);\n await new Promise(r => setTimeout(r, 60));\n };\n const closePanel = async (el: any) => {\n el.open = false;\n await settle(el);\n await new Promise(r => setTimeout(r, 60));\n };\n const pickYear = async (el: any, y: number) => {\n const cal = calOf(el);\n const item = [...cal.shadowRoot.querySelectorAll('.year-menu-item')]\n .find((m: any) => m.textContent.trim() === String(y)) as HTMLElement;\n item.click();\n await cal.updateComplete;\n };\n const pickMonth = async (el: any, m0: number) => {\n const cal = calOf(el);\n (cal.shadowRoot.querySelectorAll('.month-menu-item')[m0] as HTMLElement).click();\n await cal.updateComplete;\n };\n\n // ── Y1. YY century ──────────────────────────────────────────────────────────\n describe('Y1. two-digit year keeps the seeded century', () => {\n const edits: Array<[string, (el: any) => void]> = [\n ['day', el => { caret(el, 0); typeKeys(el, '17'); }],\n ['month', el => { caret(el, 3); typeKeys(el, '03'); }],\n ['minutes', el => { caret(el, textOf(el).indexOf(':') + 1); typeKeys(el, '45'); }],\n ];\n for (const [what, edit] of edits) {\n it(`Y1a. YY seeded 1999, edit ${what} → still 1999 in value, epoch, trigger and calendar`, async () => {\n const el = await build({ value: SEED('1999') });\n expect(textOf(el)).to.match(/^15\\/06\\/99 - /);\n edit(el);\n await blur(el);\n expect(yearText(el), 'trigger year').to.equal('99');\n const [ev, ...rest] = await apply(el);\n expect(rest).to.have.length(0);\n expect(yearOf(ev.detail.value), 'emitted value').to.equal(1999);\n expect(new Date(ev.detail.unixEpoch).getUTCFullYear(), 'emitted epoch').to.equal(1999);\n expect(yearOf(el.value as string), 'public value').to.equal(1999);\n expect(calOf(el).value.getFullYear(), 'calendar selection').to.equal(1999);\n expect(yearText(el)).to.equal('99');\n });\n }\n\n it('Y1b. YY seeded 1999, Apply without editing → 1999', async () => {\n const el = await build({ value: SEED('1999') });\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(1999);\n expect(new Date(ev.detail.unixEpoch).getUTCFullYear()).to.equal(1999);\n });\n\n it('Y1c. YY seeded 2026, edit day → 2026', async () => {\n const el = await build({ value: SEED('2026') });\n caret(el, 0); typeKeys(el, '17');\n await blur(el);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^2026-06-17T/);\n });\n\n it('Y1d. YY empty, typing 99 → 2099 (D1: new two-digit years are 2000-2099)', async () => {\n const el = await build();\n typeKeys(el, '150699');\n await blur(el);\n expect(calOf(el).value.getFullYear()).to.equal(2099);\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(2099);\n });\n\n it('Y1e. YYYY seeded 1999, edit day → 1999', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', value: SEED('1999') });\n caret(el, 0); typeKeys(el, '17');\n await blur(el);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^1999-06-17T/);\n });\n\n it('Y1f. YY seeded 1999, retyping the same visible 99 keeps 1999', async () => {\n const el = await build({ value: SEED('1999') });\n caret(el, 6); typeKeys(el, '99');\n await blur(el);\n expect(yearText(el)).to.equal('99');\n expect(calOf(el).value.getFullYear()).to.equal(1999);\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(1999);\n expect(new Date(ev.detail.unixEpoch).getUTCFullYear()).to.equal(1999);\n });\n\n it('Y1f2. YY seeded 1999, explicitly changing 99 → 98 reads as 2098 (2000-2099 policy)', async () => {\n const el = await build({ value: SEED('1999') });\n caret(el, 6);\n typeKeys(el, '9');\n expect(calOf(el).value.getFullYear(), 'half-typed year does not reach the calendar').to.equal(1999);\n typeKeys(el, '8');\n expect(calOf(el).value.getFullYear(), 'completed year reaches the calendar').to.equal(2098);\n await blur(el);\n expect(yearText(el)).to.equal('98');\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(2098);\n expect(new Date(ev.detail.unixEpoch).getUTCFullYear()).to.equal(2098);\n });\n\n it('Y1f3. YY seeded 1999, change to 98 then restore 99 before committing → 1999', async () => {\n const el = await build({ value: SEED('1999') });\n caret(el, 6); typeKeys(el, '98');\n expect(calOf(el).value.getFullYear()).to.equal(2098);\n caret(el, 6); typeKeys(el, '99');\n expect(calOf(el).value.getFullYear(), 'restored digits restore the century').to.equal(1999);\n await blur(el);\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(1999);\n });\n\n it('Y1f4. the restore also works across a blur, as long as nothing was applied', async () => {\n const el = await build({ value: SEED('1999') });\n caret(el, 6); typeKeys(el, '98');\n await blur(el);\n caret(el, 0); typeKeys(el, '17'); // an unrelated edit while the year sits at 2098\n await blur(el);\n expect(calOf(el).value.getFullYear()).to.equal(2098);\n caret(el, 6); typeKeys(el, '99');\n await blur(el);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^1999-06-17T/);\n });\n\n it('Y1f5. after Apply the applied year is the new baseline (2098 stays 2098 through a day edit)', async () => {\n const el = await build({ value: SEED('1999') });\n caret(el, 6); typeKeys(el, '98');\n await blur(el);\n await apply(el);\n caret(el, 0); typeKeys(el, '18');\n await blur(el);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^2098-06-18T/);\n });\n\n it('Y1f6. Backspace over the year, then retyping the same 99 → 1999; typing 98 → 2098', async () => {\n const a = await build({ value: SEED('1999') });\n caret(a, 6, 8); press(a, 'Backspace');\n typeKeys(a, '99');\n await blur(a);\n expect(calOf(a).value.getFullYear()).to.equal(1999);\n const b = await build({ value: SEED('1999') });\n caret(b, 6, 8); press(b, 'Backspace');\n typeKeys(b, '98');\n await blur(b);\n expect(calOf(b).value.getFullYear()).to.equal(2098);\n });\n\n it('Y1f7. YY paste over the year: 99 keeps 1999, 98 reads as 2098', async () => {\n const a = await build({ value: SEED('1999') });\n caret(a, 6, 8); paste(a, '99');\n await blur(a);\n expect(calOf(a).value.getFullYear()).to.equal(1999);\n const b = await build({ value: SEED('1999') });\n caret(b, 6, 8); paste(b, '98');\n await blur(b);\n expect(calOf(b).value.getFullYear()).to.equal(2098);\n });\n\n it('Y1g. YY seeded 1999, explicitly typing another year reads as 20xx', async () => {\n const el = await build({ value: SEED('1999') });\n caret(el, 6); typeKeys(el, '05');\n await blur(el);\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(2005);\n });\n\n it('Y1h. a programmatic value change does not retain the previous seeded century', async () => {\n const el = await build({ value: SEED('1999') });\n caret(el, 0); typeKeys(el, '17'); // edit → century 1999 is in play\n el.value = SEED('2050'); // consumer replaces the value\n await settle(el); await settle(el);\n caret(el, 0); typeKeys(el, '18');\n await blur(el);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^2050-06-18T/);\n });\n\n it('Y1i. Apply re-seeds: after applying 1999, editing the day keeps 1999; Reset forgets it', async () => {\n const el = await build({ value: SEED('1999') });\n caret(el, 0); typeKeys(el, '17');\n await blur(el);\n await apply(el);\n caret(el, 0); typeKeys(el, '18');\n await blur(el);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^1999-06-18T/);\n\n (calOf(el).shadowRoot.querySelector('.clear-button') as HTMLElement).click();\n await settle(el);\n expect(textOf(el)).to.equal('');\n typeKeys(el, '150699');\n await blur(el);\n const [ev2] = await apply(el);\n expect(yearOf(ev2.detail.value), 'a cleared picker carries no century').to.equal(2099);\n });\n\n it('Y1j. changing dateFormat YY → YYYY → YY keeps 1999 through a later edit', async () => {\n const el = await build({ value: SEED('1999') });\n el.dateFormat = 'DD/MM/YYYY'; await settle(el); await settle(el);\n expect(textOf(el)).to.match(/^15\\/06\\/1999/);\n el.dateFormat = 'DD/MM/YY'; await settle(el); await settle(el);\n caret(el, 0); typeKeys(el, '17');\n await blur(el);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^1999-06-17T/);\n });\n\n it('Y1k. a year 0-99 still round-trips in a four-digit format', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', value: SEED('0050') });\n expect(textOf(el)).to.match(/^15\\/06\\/0050/);\n caret(el, 0); typeKeys(el, '17');\n await blur(el);\n expect(textOf(el)).to.match(/^17\\/06\\/0050/);\n });\n });\n\n // ── Y1x. the remaining paths that carry or reset the seeded century ─────────\n describe('Y1x. century across reflow, reseed, zones and allowedDates', () => {\n it('Y1l. the beforeinput reflow path (IME, soft keyboard, cut/undo) keeps the century when the year digits are unchanged', async () => {\n const el = await build({ value: SEED('1999') });\n const native = nativeOf(el);\n native.focus();\n native.dispatchEvent(new InputEvent('beforeinput', { inputType: 'insertText', data: '7', bubbles: true, composed: true, cancelable: true }));\n native.value = '17/06/99 - 10:20:30.000 - UTC'; // what the browser's own edit leaves behind\n native.dispatchEvent(new InputEvent('input', { inputType: 'insertText', bubbles: true, composed: true }));\n await new Promise(r => setTimeout(r, 30));\n await blur(el);\n expect(yearText(el)).to.equal('99');\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^1999-06-17T/);\n });\n\n it('Y1m. a programmatic value with the same last two digits but another century replaces the old century', async () => {\n const el = await build({ value: SEED('1999') });\n el.value = SEED('2099');\n await settle(el); await settle(el);\n caret(el, 0); typeKeys(el, '17');\n await blur(el);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^2099-06-17T/);\n });\n\n it('Y1n. a zone-encoded seed in another zone keeps its wall-clock century (1999-12-31 23:30 Asia/Kolkata)', async () => {\n const el = await build({ value: '1999-12-31T23:30:00.000[GMT+05:30 Asia/Kolkata]' });\n expect(textOf(el)).to.match(/^31\\/12\\/99 - 23:30:00\\.000 - Asia\\/Kolkata/);\n caret(el, textOf(el).indexOf(':') + 1); typeKeys(el, '45');\n await blur(el);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^1999-12-31T23:45:00\\.000\\[GMT\\+05:30 Asia\\/Kolkata\\]$/);\n expect(new Date(ev.detail.unixEpoch).toISOString()).to.equal('1999-12-31T18:15:00.000Z');\n });\n\n it('Y1o. allowedDates: an in-range seeded 1999 is kept; a seeded 1999 outside the range snaps to the boundary year', async () => {\n const inRange = await build({ value: SEED('1999') });\n inRange.allowedDates = JSON.stringify({ startDate: '1998-01-01', endDate: '2001-12-31' });\n await settle(inRange);\n caret(inRange, 0); typeKeys(inRange, '17');\n await blur(inRange);\n const [a] = await apply(inRange);\n expect(a.detail.value).to.match(/^1999-06-17T/);\n\n const outside = await build({ value: SEED('1999') });\n outside.allowedDates = JSON.stringify({ startDate: '2005-01-01', endDate: '2010-12-31' });\n await settle(outside);\n caret(outside, 0); typeKeys(outside, '17');\n await blur(outside);\n // the first keystroke already lands outside the range and snaps to the boundary, whose year is 2005\n expect(yearText(outside)).to.equal('05');\n const [b] = await apply(outside);\n expect(yearOf(b.detail.value)).to.equal(2005);\n expect(new Date(b.detail.unixEpoch).getUTCFullYear()).to.equal(2005);\n });\n });\n\n // ── Y5. a YY year that no 2000-2099 reading can put inside the configured range ───\n describe('Y5. YY with a range outside 2000-2099 never writes malformed digits or commits an out-of-range year', () => {\n const wellFormed = (t: string) => expect(t, 'no sign or stray characters in the date part').to.match(/^[\\d/]*$/);\n\n it('Y5a. range 1990-1999, seeded 1999: typing 98 is rejected, the seeded 99 stays, and Apply emits 1999', async () => {\n const el = await build({ fmt: 'DD/MM/YY', start: 1990, end: 1999, value: SEED('1999') });\n caret(el, 6); typeKeys(el, '98');\n await blur(el);\n expect(textOf(el).slice(0, 8)).to.equal('15/06/99');\n wellFormed(textOf(el).split(' - ')[0]);\n expect(calOf(el).value.getFullYear()).to.equal(1999);\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(1999);\n expect(new Date(ev.detail.unixEpoch).getUTCFullYear()).to.equal(1999);\n });\n\n it('Y5b. range 2150-2200, seeded 2160: typing 05 is rejected (not 2050), and Apply emits 2160', async () => {\n const el = await build({ fmt: 'DD/MM/YY', start: 2150, end: 2200, value: SEED('2160') });\n caret(el, 6); typeKeys(el, '05');\n await blur(el);\n expect(textOf(el).slice(0, 8)).to.equal('15/06/60');\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(2160);\n });\n\n it('Y5c. empty picker, range 1990-1999: the year is rejected, no date is left to Apply, nothing is emitted', async () => {\n const el = await build({ fmt: 'DD/MM/YY', start: 1990, end: 1999 });\n typeKeys(el, '150698');\n await blur(el);\n expect(textOf(el)).to.equal('15/06/');\n wellFormed(textOf(el));\n expect(calOf(el).value, 'no selection built from day and month alone').to.be.null;\n const btn = calOf(el).shadowRoot.querySelector('.apply-button') as any;\n await btn.updateComplete;\n expect(btn.hasAttribute('disabled'), 'Apply is disabled').to.be.true;\n const events = await apply(el);\n expect(events).to.have.length(0);\n expect(el.value ?? null).to.be.null;\n });\n\n it('Y5d. pasting such a year into an empty picker is rejected the same way', async () => {\n const el = await build({ fmt: 'DD/MM/YY', start: 1990, end: 1999 });\n paste(el, '150698');\n await blur(el);\n expect(textOf(el)).to.equal('15/06/');\n expect(calOf(el).value).to.be.null;\n });\n\n it('Y5e. the same range with YYYY (the documented recommendation) types and commits 1995 normally', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', start: 1990, end: 1999 });\n typeKeys(el, '15061995');\n await blur(el);\n expect(textOf(el).slice(0, 10)).to.equal('15/06/1995');\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(1995);\n const above = await build({ fmt: 'DD/MM/YYYY', start: 1990, end: 1999 });\n typeKeys(above, '15062005');\n await blur(above);\n expect(textOf(above).slice(0, 10), 'YYYY still clamps to the range').to.equal('15/06/1999');\n });\n\n it('Y5f. a YY range that does include 2000-2099 still clamps normally', async () => {\n const el = await build({ fmt: 'DD/MM/YY', start: 2020, end: 2035, value: SEED('2026') });\n caret(el, 6); typeKeys(el, '99');\n await blur(el);\n expect(yearText(el)).to.equal('35');\n expect(calOf(el).value.getFullYear()).to.equal(2035);\n });\n\n it('Y5h. the rejection ends with the mask it belonged to: a new value, an unusable value, a format change, a type switch, Reset', async () => {\n // observable: once the rejection is gone, a day and month typed on their own are selected as they always were\n const selectedAfterTyping = async (el: any) => { typeKeys(el, '1506'); const v = calOf(el).value; return v === null || v === undefined ? null : v.getMonth(); };\n const rejected = async (o: Opts = {}) => {\n const el = await build({ fmt: 'DD/MM/YY', start: 1990, end: 1999, ...o });\n typeKeys(el, '150698'); await blur(el);\n expect(calOf(el).value, 'precondition: rejected, nothing selected').to.be.null;\n return el;\n };\n\n const control = await rejected(); // still rejected: typing day and month selects nothing\n typeKeys(control, '1506'); expect(calOf(control).value).to.be.null;\n\n const byFormat = await rejected();\n byFormat.dateFormat = 'DD/MM/YYYY'; await settle(byFormat); await settle(byFormat);\n expect(await selectedAfterTyping(byFormat), 'format change').to.equal(5);\n\n const byValue = await rejected();\n byValue.value = 'not-a-date'; await settle(byValue); await settle(byValue);\n expect(await selectedAfterTyping(byValue), 'unusable value').to.equal(5);\n\n const byType = await rejected();\n byType.type = 'relative'; await settle(byType);\n byType.type = 'absolute'; await settle(byType); await settle(byType);\n expect(await selectedAfterTyping(byType), 'type switch').to.equal(5);\n\n const byReset = await rejected();\n calOf(byReset).dispatchEvent(new CustomEvent('nile-clear', { bubbles: true, composed: true }));\n await settle(byReset);\n expect(await selectedAfterTyping(byReset), 'Reset').to.equal(5);\n });\n\n it('Y5i. a rejected year ends once a year can be typed: widening the range, then typing 26, commits 2026 on Apply', async () => {\n const el = await build({ fmt: 'DD/MM/YY', start: 1990, end: 1999 });\n typeKeys(el, '150698'); await blur(el);\n el.endYear = 2050; await settle(el);\n caret(el, 6); typeKeys(el, '26');\n await blur(el);\n expect(calOf(el).value.getFullYear()).to.equal(2026);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^2026-06-15T/);\n });\n\n it('Y5j. while the year is rejected nothing can be committed from the mask: Apply is disabled and Enter / Space / click do nothing', async () => {\n const el = await build({ fmt: 'DD/MM/YY', start: 1990, end: 1999 });\n typeKeys(el, '150698'); await blur(el);\n const btn = calOf(el).shadowRoot.querySelector('.apply-button') as any;\n await btn.updateComplete;\n expect(btn.hasAttribute('disabled')).to.be.true;\n const events: CustomEvent[] = [];\n el.addEventListener('nile-change', ((e: CustomEvent) => events.push(e)) as EventListener);\n btn.click();\n btn.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true, composed: true }));\n btn.dispatchEvent(new KeyboardEvent('keydown', { key: ' ', bubbles: true, composed: true }));\n inputOf(el).dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true, composed: true, cancelable: true }));\n await settle(el);\n expect(events).to.have.length(0);\n expect(el.value ?? null).to.be.null;\n });\n\n it('Y5g. a seeded year outside the range stays untouched by an edit to another segment (no rejection, no clamp)', async () => {\n const el = await build({ fmt: 'DD/MM/YY', start: 2150, end: 2200, value: SEED('1999') });\n caret(el, 0); typeKeys(el, '17');\n await blur(el);\n expect(yearText(el)).to.equal('99');\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^1999-06-17T/);\n });\n });\n\n // ── Y2. clamping and leap day while overtyping the year ─────────────────────\n describe('Y2. year overtype is normalised once, when the year is complete', () => {\n const win = { start: 2020, end: 2035 };\n const cases: Array<[string, string, string]> = [\n ['1999', '2020', 'below the range → start'],\n ['2040', '2035', 'above the range → end'],\n ['2025', '2025', 'in range'],\n ['2028', '2028', 'in range'],\n ['2030', '2030', 'in range'],\n ['2022', '2022', 'in range'],\n ];\n for (const [typed, expected, why] of cases) {\n it(`Y2a. seeded 2026, window 2020-2035, overtype ${typed} → ${expected} (${why})`, async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', ...win, value: SEED('2026') });\n caret(el, 6); typeKeys(el, typed);\n await blur(el);\n expect(yearText(el)).to.equal(expected);\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(Number(expected));\n expect(calOf(el).value.getFullYear()).to.equal(Number(expected));\n });\n it(`Y2b. empty picker, window 2020-2035, typing ${typed} → ${expected}`, async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', ...win });\n typeKeys(el, '1506' + typed);\n await blur(el);\n expect(yearText(el)).to.equal(expected);\n });\n it(`Y2c. paste ${typed} over the seeded year, window 2020-2035 → ${expected}`, async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', ...win, value: SEED('2026') });\n caret(el, 6, 10); paste(el, typed);\n await blur(el);\n expect(yearText(el)).to.equal(expected);\n });\n }\n\n for (const [typed, expected] of [['99', '35'], ['19', '20'], ['28', '28'], ['40', '35']]) {\n it(`Y2d. YY seeded 2026, window 2020-2035, overtype ${typed} → ${expected}`, async () => {\n const el = await build({ fmt: 'DD/MM/YY', ...win, value: SEED('2026') });\n caret(el, 6); typeKeys(el, typed);\n await blur(el);\n expect(yearText(el)).to.equal(expected);\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(2000 + Number(expected));\n });\n }\n\n it('Y2e. partial overtype never rewrites the digits: 2026 → 1026 → 1926 → 1996 → clamp on the 4th', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', ...win, value: SEED('2026') });\n caret(el, 6);\n const seen: string[] = [];\n for (const ch of '1999') { press(el, ch); seen.push(yearText(el)); }\n expect(seen).to.deep.equal(['1026', '1926', '1996', '2020']);\n });\n\n it('Y2f. wide window (1900-3000): overtyping 1999 and 2030 shows no clamped intermediate (1900 / 2036 flicker)', async () => {\n const a = await build({ fmt: 'DD/MM/YYYY', value: SEED('2026') });\n caret(a, 6);\n const seenA: string[] = [];\n for (const ch of '1999') { press(a, ch); seenA.push(yearText(a)); }\n expect(seenA).to.deep.equal(['1026', '1926', '1996', '1999']);\n\n const b = await build({ fmt: 'DD/MM/YYYY', value: SEED('2026') });\n caret(b, 6);\n const seenB: string[] = [];\n for (const ch of '2030') { press(b, ch); seenB.push(yearText(b)); }\n expect(seenB).to.deep.equal(['2026', '2026', '2036', '2030']);\n });\n\n it('Y2g. a half-typed year is clamped on blur and does not reach the calendar while typing', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', ...win, value: SEED('2026') });\n caret(el, 6); typeKeys(el, '19'); // 1926: abandoned mid-edit\n expect(calOf(el).currentYear, 'calendar not driven by 1926').to.equal(2026);\n await blur(el);\n expect(yearText(el)).to.equal('2020');\n expect(calOf(el).currentYear).to.equal(2020);\n });\n\n it('Y2h. editing another segment first normalises an abandoned year edit', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', ...win, value: SEED('2026') });\n caret(el, 6); typeKeys(el, '19'); // 1926\n caret(el, 0); typeKeys(el, '17');\n expect(yearText(el)).to.equal('2020');\n expect(calOf(el).currentYear).to.equal(2020);\n });\n\n it('Y2i2. focusing, selecting and blurring an unchanged out-of-range seeded year does not clamp it or emit', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', ...win, value: SEED('2010') });\n const events: string[] = [];\n for (const n of ['nile-change', 'nile-changed', 'nile-input']) el.addEventListener(n, () => events.push(n));\n caret(el, 0);\n await blur(el);\n caret(el, 6, 10); // select the whole year, change nothing\n await blur(el);\n caret(el, 6); press(el, 'ArrowRight');\n await blur(el);\n expect(yearText(el)).to.equal('2010');\n expect(calOf(el).value.getFullYear()).to.equal(2010);\n expect(events).to.deep.equal([]);\n });\n\n it('Y2i3. completing an explicit year edit clamps it, whichever digits were typed', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', ...win, value: SEED('2010') });\n caret(el, 6); typeKeys(el, '2011'); // changed digits, still out of range\n await blur(el);\n expect(yearText(el)).to.equal('2020');\n const same = await build({ fmt: 'DD/MM/YYYY', ...win, value: SEED('2010') });\n caret(same, 6); typeKeys(same, '2010'); // the same digits, completed by typing\n await blur(same);\n expect(yearText(same)).to.equal('2020');\n });\n\n it('Y2i4. YY: an out-of-range seeded 1999 survives an edit to another segment', async () => {\n const el = await build({ fmt: 'DD/MM/YY', start: 2000, end: 2050, value: SEED('1999') });\n caret(el, 0); typeKeys(el, '17');\n await blur(el);\n expect(yearText(el)).to.equal('99');\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^1999-06-17T/);\n });\n\n it('Y2i. a seeded year outside the range survives an edit to another segment (seedMask)', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', ...win, value: SEED('2010') });\n expect(yearText(el)).to.equal('2010');\n caret(el, 0); typeKeys(el, '17');\n await blur(el);\n expect(yearText(el)).to.equal('2010');\n });\n\n const leap: Array<[string, string, string]> = [\n ['2032', '29/02/2032', '2032-02-29'],\n ['2036', '29/02/2036', '2036-02-29'],\n ['2031', '28/02/2031', '2031-02-28'],\n ];\n for (const [typed, shown, iso] of leap) {\n it(`Y2j. seeded 2028-02-29, retype ${typed} → ${shown}`, async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', value: SEED('2028', '02-29') });\n caret(el, 6); typeKeys(el, typed);\n expect(textOf(el).slice(0, 10), 'trigger').to.equal(shown);\n await blur(el);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(new RegExp(`^${iso}T`));\n });\n }\n\n it('Y2k. the day is not clamped against an intermediate year (2028 → 203x keeps 29 until the year is final)', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', value: SEED('2028', '02-29') });\n caret(el, 6);\n const days: string[] = [];\n for (const ch of '2032') { press(el, ch); days.push(textOf(el).slice(0, 2)); }\n expect(days).to.deep.equal(['29', '29', '29', '29']);\n });\n\n it('Y2l. YY seeded 2028-02-29, retype 32 → 29/02/32', async () => {\n const el = await build({ fmt: 'DD/MM/YY', value: SEED('2028', '02-29') });\n caret(el, 6); typeKeys(el, '32');\n expect(textOf(el).slice(0, 8)).to.equal('29/02/32');\n });\n\n it('Y2m. segmented time input is unchanged: 25 into hours still yields 02', async () => {\n const el = await build({ fmt: 'DD/MM/YYYY', value: SEED('2026') });\n caret(el, textOf(el).indexOf('-') + 2); typeKeys(el, '25');\n expect(textOf(el)).to.match(/ - 02:20:30\\.000/);\n });\n });\n\n // ── Y3. calendar view synchronisation ───────────────────────────────────────\n describe('Y3. year/month dropdowns navigate only; reopening shows the selected date', () => {\n const matrix: Array<[string, Opts]> = [\n ['DD/MM/YY', { fmt: 'DD/MM/YY' }],\n ['DD/MM/YYYY', { fmt: 'DD/MM/YYYY' }],\n ['DD/MM/YY, hours+minutes hidden', { fmt: 'DD/MM/YY', hide: ['hours', 'minutes'] }],\n ['DD/MM/YYYY, hours+minutes hidden', { fmt: 'DD/MM/YYYY', hide: ['hours', 'minutes'] }],\n ];\n for (const [label, base] of matrix) {\n const seeded = () => build({ ...base, dropdowns: true, value: '2026-10-13T00:00:00.000[GMT+00:00 UTC]' });\n\n it(`Y3a. [${label}] picking a year without a day leaves the selection, value and trigger unchanged`, async () => {\n const el = await seeded();\n const before = textOf(el);\n const events: string[] = [];\n for (const n of ['nile-change', 'nile-changed']) el.addEventListener(n, () => events.push(n));\n await pickYear(el, 2020);\n expect(calOf(el).currentYear).to.equal(2020);\n expect(calOf(el).value.getFullYear(), 'selected date').to.equal(2026);\n expect(yearOf(el.value as string)).to.equal(2026);\n expect(textOf(el)).to.equal(before);\n expect(events, 'navigation emits no change').to.deep.equal([]);\n });\n\n it(`Y3b. [${label}] picking a year then Apply commits the selected date, once, without a navigation-induced extra change`, async () => {\n const el = await seeded();\n await pickYear(el, 2020);\n const events = await apply(el);\n expect(events).to.have.length(1);\n expect(events[0].detail.value).to.match(/^2026-10-13T/);\n expect(new Date(events[0].detail.unixEpoch).getUTCFullYear()).to.equal(2026);\n expect(yearOf(el.value as string)).to.equal(2026);\n });\n\n it(`Y3c. [${label}] picking a year then a day selects that day in the picked year`, async () => {\n const el = await seeded();\n await pickYear(el, 2020);\n const cal = calOf(el);\n (cal.shadowRoot.querySelectorAll('.day_date:not(.filler)')[3] as HTMLElement).click();\n await cal.updateComplete;\n expect(cal.value.getFullYear()).to.equal(2020);\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(2020);\n expect(new Date(ev.detail.unixEpoch).getUTCFullYear()).to.equal(2020);\n });\n\n it(`Y3d. [${label}] picking a month without a day leaves the selected date unchanged`, async () => {\n const el = await seeded();\n await pickMonth(el, 2);\n expect(calOf(el).currentMonth).to.equal(2);\n expect(calOf(el).value.getMonth(), 'selected month').to.equal(9);\n const [ev] = await apply(el);\n expect(ev.detail.value).to.match(/^2026-10-13T/);\n });\n\n it(`Y3e. [${label}] Apply → close → reopen shows the committed month and year`, async () => {\n const el = await seeded();\n await openPanel(el);\n await pickYear(el, 2020);\n await pickMonth(el, 2);\n await apply(el);\n await closePanel(el);\n await openPanel(el);\n expect(calOf(el).currentYear, 'year').to.equal(2026);\n expect(calOf(el).currentMonth, 'month').to.equal(9);\n expect(yearOf(el.value as string), 'committed date unchanged').to.equal(2026);\n });\n }\n\n it('Y3f. browsing while the panel is open is not reset; dismissing without Apply keeps the view as it was left', async () => {\n const el = await build({ dropdowns: true, value: '2026-10-13T00:00:00.000[GMT+00:00 UTC]' });\n await openPanel(el);\n await pickYear(el, 2020);\n await new Promise(r => setTimeout(r, 150));\n expect(calOf(el).currentYear, 'still browsing').to.equal(2020);\n await closePanel(el);\n await openPanel(el);\n expect(calOf(el).currentYear, 'existing dismissal semantics: the browsed view is kept').to.equal(2020);\n expect(calOf(el).value.getFullYear(), 'selection untouched').to.equal(2026);\n expect(yearOf(el.value as string), 'committed value untouched').to.equal(2026);\n });\n\n it('Y3i. a pending (unapplied) selection survives dismissal and reopening, and Apply then commits it', async () => {\n const el = await build({ dropdowns: true, value: '2026-10-13T00:00:00.000[GMT+00:00 UTC]' });\n const events: CustomEvent[] = [];\n el.addEventListener('nile-change', ((e: CustomEvent) => events.push(e)) as EventListener);\n await openPanel(el);\n await pickYear(el, 2020);\n const cal = calOf(el);\n (cal.shadowRoot.querySelectorAll('.day_date:not(.filler)')[3] as HTMLElement).click();\n await cal.updateComplete;\n const pending = cal.value.getTime();\n expect(cal.value.getFullYear()).to.equal(2020);\n await closePanel(el); // dismissed, not applied\n expect(events, 'dismissal emits nothing').to.have.length(0);\n expect(yearOf(el.value as string), 'committed value unchanged').to.equal(2026);\n await openPanel(el);\n expect(cal.value.getTime(), 'pending selection kept').to.equal(pending);\n expect(cal.currentYear, 'and still visible').to.equal(2020);\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(2020);\n });\n\n it('Y3j. after Apply the next reopen shows the committed month and year even when another year was browsed first', async () => {\n const el = await build({ dropdowns: true, value: '2026-10-13T00:00:00.000[GMT+00:00 UTC]' });\n await openPanel(el);\n await pickYear(el, 2020);\n await apply(el); // commits the selected 2026-10-13\n await closePanel(el);\n await openPanel(el);\n expect(calOf(el).currentYear).to.equal(2026);\n expect(calOf(el).currentMonth).to.equal(9);\n // the sync is one-shot: browsing and dismissing again keeps that view\n await pickYear(el, 2021);\n await closePanel(el);\n await openPanel(el);\n expect(calOf(el).currentYear).to.equal(2021);\n });\n\n it('Y3g. an initially empty picker: navigation commits nothing, and reopening does not invent a selection', async () => {\n const el = await build({ dropdowns: true });\n const events: string[] = [];\n el.addEventListener('nile-change', () => events.push('nile-change'));\n await openPanel(el);\n await pickYear(el, 2020);\n expect(calOf(el).value).to.be.null;\n expect(el.value ?? null).to.be.null;\n expect(textOf(el)).to.equal('');\n await closePanel(el);\n await openPanel(el);\n expect(calOf(el).value).to.be.null;\n expect(calOf(el).currentYear, 'empty picker keeps its own view').to.equal(2020);\n expect(events).to.deep.equal([]);\n });\n\n it('Y3h. an empty picker: select a day in 2020, Apply, reopen → shows 2020', async () => {\n const el = await build({ dropdowns: true });\n await openPanel(el);\n await pickYear(el, 2020);\n const cal = calOf(el);\n (cal.shadowRoot.querySelectorAll('.day_date:not(.filler)')[3] as HTMLElement).click();\n await cal.updateComplete;\n const [ev] = await apply(el);\n expect(yearOf(ev.detail.value)).to.equal(2020);\n await closePanel(el);\n await openPanel(el);\n expect(calOf(el).currentYear).to.equal(2020);\n });\n });\n});\n\ndescribe('NileDateTimePicker values: a clock face that is not a time of day is unparseable, never rolled into the next day', () => {\n const textOf = (el: any) => (el.shadowRoot.querySelector('nile-input').input as HTMLInputElement).value;\n const make = async (value: string, format = 'DD/MM/YYYY'): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker dateFormat=${format} value=${value}></nile-date-time-picker>`);\n await el.updateComplete; await el.calendarElement.updateComplete;\n await new Promise(r => setTimeout(r, 120));\n return el;\n };\n const applyOnce = async (el: any) => {\n const events: any[] = [];\n el.addEventListener('nile-change', (e: CustomEvent) => events.push(e.detail));\n el.calendarElement.shadowRoot.querySelector('.apply-button').dispatchEvent(new MouseEvent('click', { bubbles: true, composed: true }));\n await new Promise(r => setTimeout(r, 80));\n return events;\n };\n\n for (const value of [\n '2026-03-01T25:61:00', '2026-03-01T10:61:00', '2026-03-01T10:30:61', '2026-03-01T24:00:01',\n '2026-03-01T25:61:00.000[GMT+00:00 UTC]', '2026-03-01T10:61:00.000[GMT+00:00 UTC]',\n ]) {\n it(`V1. ${value} leaves the picker empty: no trigger text, no selection, and Apply emits nothing`, async () => {\n const el = await make(value);\n expect(textOf(el), 'trigger text').to.equal('');\n expect(el.calendarElement.value ?? null, 'calendar selection').to.be.null;\n expect(await applyOnce(el), 'Apply').to.have.length(0);\n });\n }\n\n for (const [value, text] of [\n ['2026-03-01T24:00:00', '02/03/2026 - 00:00:00.000'],\n ['2026-03-01T24:00:00.000', '02/03/2026 - 00:00:00.000'],\n ['2026-03-01T24:00:00.000[GMT+00:00 UTC]', '02/03/2026 - 00:00:00.000'],\n ]) {\n it(`V2. ${value} (ISO end-of-day) still resolves to the next midnight`, async () => {\n const el = await make(value);\n expect(textOf(el).startsWith(text), textOf(el)).to.be.true;\n });\n }\n\n for (const value of ['2026-03-01T24:00:00', '2026-03-01T24:00:00.000', '2026-03-01T24:00:00.000[GMT+00:00 UTC]']) {\n it(`V2b. ${value}: the trigger and the Calendar panel agree on the next day, and Apply emits it`, async () => {\n const el = await make(value);\n expect(textOf(el).startsWith('02/03/2026 - 00:00:00.000'), `trigger ${textOf(el)}`).to.be.true;\n const sel = el.calendarElement.value as Date;\n expect([sel.getFullYear(), sel.getMonth() + 1, sel.getDate()], 'panel selection').to.deep.equal([2026, 3, 2]);\n expect(el.calendarElement.shadowRoot.querySelector('.apply-button').hasAttribute('disabled'), 'Apply enabled').to.be.false;\n const events = await applyOnce(el);\n expect(events).to.have.length(1);\n expect(events[0].value).to.include('2026-03-02T00:00:00');\n });\n }\n\n it('V3. valid values, date-only seeding and the month-end clamp are unchanged', async () => {\n expect(textOf(await make('2026-03-01T23:59:59.999')).startsWith('01/03/2026 - 23:59:59.999')).to.be.true;\n expect(textOf(await make('2026-03-01')).startsWith('01/03/2026 - 00:00:00.000')).to.be.true;\n expect(textOf(await make('2026-02-31T10:00:00')).startsWith('28/02/2026 - 10:00:00.000')).to.be.true;\n expect(textOf(await make('2026-06-15T10:20:30.000[GMT+00:00 UTC]')).startsWith('15/06/2026 - 10:20:30.000')).to.be.true;\n });\n\n it('V4. the same rule is shared: isClockTime accepts exactly what the picker accepts', () => {\n expect(isClockTime(24, 0, 0, 0)).to.be.true;\n expect(isClockTime(25, 61, 0, 0)).to.be.false;\n });\n\n it('V5. correcting a rejected value recovers normally', async () => {\n const el = await make('2026-03-01T25:61:00');\n expect(textOf(el)).to.equal('');\n el.value = '2026-03-01T10:30:00';\n await el.updateComplete; await el.calendarElement.updateComplete;\n await new Promise(r => setTimeout(r, 150));\n expect(textOf(el).startsWith('01/03/2026 - 10:30:00.000')).to.be.true;\n const [ev] = await applyOnce(el);\n expect(ev.value).to.match(/^2026-03-01T10:30:00\\.000\\[GMT\\+00:00 UTC\\]$/);\n });\n});\n\ndescribe('NileDateTimePicker — Escape returns focus to the trigger', () => {\n const make = async (): Promise<NileDateTimePicker> => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker timezone=\"UTC\"></nile-date-time-picker>`,\n );\n await el.updateComplete;\n return el;\n };\n const triggerNative = (el: NileDateTimePicker): HTMLInputElement =>\n el.shadowRoot!.querySelector('nile-input')!.shadowRoot!.querySelector('input') as HTMLInputElement;\n const triggerHasFocus = (el: NileDateTimePicker) =>\n el.shadowRoot!.querySelector('nile-input')!.shadowRoot!.activeElement === triggerNative(el);\n const open = async (el: NileDateTimePicker) => {\n el.open = true;\n await el.updateComplete;\n await (el as any).calendarElement.updateComplete;\n await aTimeout(300);\n };\n // the popper is portaled, so the calendar is a direct child of <body> as seen by document.activeElement\n const focusInPanel = (el: NileDateTimePicker) => {\n const cal = (el as any).calendarElement;\n (cal.shadowRoot.querySelector('[aria-label=\"Next month\"]') as HTMLElement).focus();\n expect(document.activeElement, 'focus is inside the panel').to.equal(cal);\n };\n const pressEscape = (target: Element) =>\n target.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true, composed: true, cancelable: true }));\n\n it('EF1. Escape with focus inside the panel closes it and focuses the trigger', async () => {\n const el = await make();\n await open(el);\n focusInPanel(el);\n pressEscape(document.activeElement as Element);\n await aTimeout(400);\n expect(el.open).to.be.false;\n expect(triggerHasFocus(el), 'trigger input has focus').to.be.true;\n });\n\n it('EF2. Escape with focus on the trigger closes the panel and keeps focus there', async () => {\n const el = await make();\n triggerNative(el).focus();\n await open(el);\n triggerNative(el).focus();\n pressEscape(triggerNative(el));\n await aTimeout(400);\n expect(el.open).to.be.false;\n expect(triggerHasFocus(el)).to.be.true;\n });\n\n it('EF3. Escape does not pull focus from an unrelated element outside the picker', async () => {\n const wrap = await fixture<HTMLDivElement>(\n html`<div><button id=\"other\">other</button><nile-date-time-picker timezone=\"UTC\"></nile-date-time-picker></div>`,\n );\n const el = wrap.querySelector('nile-date-time-picker') as NileDateTimePicker;\n const other = wrap.querySelector('#other') as HTMLButtonElement;\n await el.updateComplete;\n await open(el);\n other.focus();\n pressEscape(other);\n await aTimeout(400);\n expect(el.open).to.be.false;\n expect(document.activeElement).to.equal(other);\n });\n\n it('EF4. Escape only dismisses: no event, no commit, the pending selection survives', async () => {\n const el = await make();\n const events: string[] = [];\n el.addEventListener('nile-change', () => events.push('change'));\n el.addEventListener('nile-clear', () => events.push('clear'));\n await open(el);\n const cal = (el as any).calendarElement;\n (cal.shadowRoot.querySelectorAll('.day_date:not(.filler)')[5] as HTMLElement).click();\n await cal.updateComplete;\n focusInPanel(el);\n pressEscape(document.activeElement as Element);\n await aTimeout(400);\n expect(el.open).to.be.false;\n expect(events).to.deep.equal([]);\n expect(el.value ?? null).to.equal(null);\n expect(cal.value, 'pending selection kept').to.be.instanceOf(Date);\n });\n\n it('EF5. other keys inside the panel do not move focus or close it', async () => {\n const el = await make();\n await open(el);\n focusInPanel(el);\n (document.activeElement as Element).dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true, composed: true }));\n await aTimeout(200);\n expect(el.open).to.be.true;\n expect(document.activeElement).to.equal((el as any).calendarElement);\n });\n});\n\ndescribe('NileDateTimePicker — accessible name of the role=\"dialog\" container', () => {\n const make = async (attrs = ''): Promise<NileDateTimePicker> => {\n const wrap = await fixture<HTMLDivElement>(\n html`<div .innerHTML=${`<nile-date-time-picker timezone=\"UTC\" ${attrs}></nile-date-time-picker>`}></div>`,\n );\n const el = wrap.querySelector('nile-date-time-picker') as NileDateTimePicker;\n await el.updateComplete;\n return el;\n };\n const open = async (el: NileDateTimePicker) => {\n el.open = true;\n await el.updateComplete;\n await (el as any).calendarElement.updateComplete;\n await aTimeout(300);\n };\n // the element that actually carries role=\"dialog\" around this picker's calendar (the panel is portaled)\n const dialogOf = (el: NileDateTimePicker): HTMLElement =>\n (el as any).calendarElement.closest('[role=\"dialog\"]') as HTMLElement;\n\n it('DN1. the portaled role=\"dialog\" element has the default name', async () => {\n const el = await make();\n await open(el);\n const dialog = dialogOf(el);\n expect(dialog, 'a role=dialog ancestor of the calendar exists').to.exist;\n expect(dialog.getAttribute('role')).to.equal('dialog');\n expect(dialog.getRootNode(), 'portaled out of the picker shadow root').to.equal(document);\n expect(el.shadowRoot!.contains(dialog)).to.be.false;\n expect(dialog.getAttribute('aria-label')).to.equal('Date and time picker');\n });\n\n it('DN2. aria-label on the picker names the dialog', async () => {\n const el = await make('aria-label=\"Start\"');\n await open(el);\n expect(dialogOf(el).getAttribute('aria-label')).to.equal('Start picker');\n });\n\n it('DN3. a visible label names the dialog', async () => {\n const el = await make('label=\"Due date\"');\n await open(el);\n expect(dialogOf(el).getAttribute('aria-label')).to.equal('Due date picker');\n });\n\n it('DN4. changing the label while open renames the dialog', async () => {\n const el = await make();\n await open(el);\n el.label = 'End';\n await el.updateComplete;\n await aTimeout(50);\n expect(dialogOf(el).getAttribute('aria-label')).to.equal('End picker');\n });\n\n it('DN5. the name survives close and reopen', async () => {\n const el = await make();\n await open(el);\n el.open = false;\n await el.updateComplete;\n await aTimeout(400);\n await open(el);\n expect(dialogOf(el).getAttribute('aria-label')).to.equal('Date and time picker');\n });\n\n it('DN6. the shared nile-floating-panel is unchanged: its own dialog stays unnamed', async () => {\n const wrap = await fixture<HTMLDivElement>(\n html`<div><nile-floating-panel trigger=\"click\"><button>anchor</button><p>content</p></nile-floating-panel></div>`,\n );\n const fp = wrap.querySelector('nile-floating-panel') as any;\n await fp.updateComplete;\n fp.show();\n await aTimeout(300);\n const dialogs = [...document.querySelectorAll('[role=\"dialog\"]')].filter(d => d.textContent!.includes('content'));\n expect(dialogs.length).to.be.greaterThan(0);\n dialogs.forEach(d => expect(d.hasAttribute('aria-label'), 'no aria-label added globally').to.be.false);\n fp.hide();\n });\n});\n\ndescribe('Y18. a `value` string is read only in the documented formats, never through engine-dependent Date parsing', () => {\n const make = async (value: string, timezone = 'UTC'): Promise<any> => {\n const el: any = await fixture(html`<nile-date-time-picker\n .timezone=${timezone} dateFormat=\"DD/MM/YYYY\" .hideTimeFields=${['timezone']}\n .startYear=${0} .endYear=${9999} value=${value}></nile-date-time-picker>`);\n await settle2(el);\n return el;\n };\n const textOf = (el: any) => (el.shadowRoot.querySelector('nile-input').input as HTMLInputElement).value;\n const p = (n: number, l = 2) => String(n).padStart(l, '0');\n\n const SUPPORTED: Array<{ label: string; value: string; tz: string; text: string }> = [\n { label: 'date-only', value: '2026-03-05', tz: 'UTC', text: '05/03/2026 - 00:00:00.000' },\n { label: 'date-only, impossible day clamps to month end', value: '2026-02-31', tz: 'UTC', text: '28/02/2026 - 00:00:00.000' },\n { label: 'date-only, year 0-99 keeps its literal year', value: '0050-03-05', tz: 'UTC', text: '05/03/0050 - 00:00:00.000' },\n { label: 'offset-less, no seconds', value: '2026-03-05T10:20', tz: 'UTC', text: '05/03/2026 - 10:20:00.000' },\n { label: 'offset-less, seconds and milliseconds', value: '2026-03-05T10:20:30.250', tz: 'UTC', text: '05/03/2026 - 10:20:30.250' },\n { label: 'offset-less ignores the component zone', value: '2026-03-05T10:20:30.250', tz: 'Asia/Kolkata', text: '05/03/2026 - 10:20:30.250' },\n { label: 'UTC instant read in Asia/Kolkata', value: '2026-03-05T10:00:00Z', tz: 'Asia/Kolkata', text: '05/03/2026 - 15:30:00.000' },\n { label: 'UTC instant read in America/New_York', value: '2026-03-05T10:00:00Z', tz: 'America/New_York', text: '05/03/2026 - 05:00:00.000' },\n { label: 'offset instant read in UTC', value: '2026-03-05T10:00:00+05:30', tz: 'UTC', text: '05/03/2026 - 04:30:00.000' },\n { label: 'bracketed value keeps the digits as written', value: '2026-03-05T10:20:30.250[GMT+05:30 Asia/Kolkata]', tz: 'UTC', text: '05/03/2026 - 10:20:30.250' },\n ];\n for (const c of SUPPORTED) {\n it(`Y18 supported — ${c.label}: ${c.value} in ${c.tz}`, async () => {\n const el = await make(c.value, c.tz);\n expect(textOf(el)).to.equal(c.text);\n }).timeout(60000);\n }\n\n it('Y18 a bracketed value adopts its own zone; an unknown bracket zone falls back to UTC with the digits kept', async () => {\n const known = await make('2026-03-05T10:20:30.250[GMT+05:30 Asia/Kolkata]', 'UTC');\n expect(known.timezone).to.equal('Asia/Kolkata');\n const unknown = await make('2026-03-05T10:20:30.250[GMT+05:30 Mars/Phobos]', 'Asia/Kolkata');\n expect(unknown.timezone).to.equal('UTC');\n expect(textOf(unknown)).to.equal('05/03/2026 - 10:20:30.250');\n }).timeout(60000);\n\n it('Y18 an instant with an unusable zone reads in the browser zone, as before', async () => {\n const host = new Date(Date.UTC(2026, 2, 5, 10, 0, 0, 0));\n const want = `${p(host.getDate())}/${p(host.getMonth() + 1)}/${host.getFullYear()}` +\n ` - ${p(host.getHours())}:${p(host.getMinutes())}:${p(host.getSeconds())}.${p(host.getMilliseconds(), 3)}`;\n const el = await make('2026-03-05T10:00:00Z', 'Mars/Phobos');\n expect(textOf(el)).to.equal(want);\n }).timeout(60000);\n\n // strings a lenient engine (Date.parse) reads, in a browser-specific way; the documented formats are the only contract\n const ENGINE_ONLY = [\n 'March 5 2026', '5 Mar 2026 10:00', '2026/03/05', '2026-3-5', '03/05/2026',\n '2026-03-05 10:00', 'Thu, 05 Mar 2026 10:00:00 GMT',\n ];\n const TRAILING_GARBAGE = [\n '2026-03-05garbage',\n '2026-03-05T10:20 garbage',\n '2026-03-05T10:20:30.250xyz',\n '2026-03-05T10:00:00Zjunk',\n '2026-03-05T10:00:00+05:30junk',\n '2026-03-05T10:20:30.250[GMT+05:30 Asia/Kolkata]junk',\n ];\n\n it('Y18 premise: this browser does read the engine-only strings, so the rejections below are the picker\\'s own', () => {\n expect(isNaN(new Date('March 5 2026').getTime())).to.equal(false);\n expect(isNaN(new Date('2026/03/05').getTime())).to.equal(false);\n });\n\n for (const bad of [...ENGINE_ONLY, ...TRAILING_GARBAGE]) {\n it(`Y18 unsupported ${JSON.stringify(bad)}: the trigger is emptied, the value and zone are left alone`, async () => {\n const el = await make('2026-06-15T10:20:30.000[GMT+05:30 Asia/Kolkata]', 'Asia/Kolkata');\n expect(textOf(el), 'precondition').to.contain('15/06/2026');\n el.value = bad;\n await settle2(el);\n expect(textOf(el), 'trigger text').to.equal('');\n expect(el.value, 'the consumer\\'s value is never rewritten').to.equal(bad);\n expect(el.timezone).to.equal('Asia/Kolkata');\n }).timeout(60000);\n }\n\n describe('the text of a calendar `nile-change` payload', () => {\n const emit = async (el: any, value: string) => {\n el.calendarElement.dispatchEvent(new CustomEvent('nile-change', {\n detail: { value, timezone: 'UTC' }, bubbles: true, composed: true,\n }));\n await settle2(el);\n };\n const WANT = '15/06/2026 - 14:30:00.000';\n\n for (const ok of ['2026-06-15T14:30:00.000[GMT+00:00 UTC]', '2026-06-15T14:30:00.000']) {\n it(`Y18 payload accepted: ${ok}`, async () => {\n const el = await make('2026-01-02T03:04:05.000');\n await emit(el, ok);\n expect(textOf(el)).to.equal(WANT);\n }).timeout(60000);\n }\n\n // not a payload shape, but an absolute payload is also adopted as `value`, which re-seeds the trigger from it:\n // these are documented `value` formats, so the text comes from that read (an instant in the component zone, a day at midnight)\n for (const [adopted, text] of [\n ['2026-06-15T14:30:00.000Z', WANT],\n ['2026-06-15', '15/06/2026 - 00:00:00.000'],\n ]) {\n it(`Y18 payload adopted as \\`value\\`: ${adopted}`, async () => {\n const el = await make('2026-01-02T03:04:05.000');\n await emit(el, adopted);\n expect(el.value).to.equal(adopted);\n expect(textOf(el)).to.equal(text);\n }).timeout(60000);\n }\n\n for (const bad of [\n '2026-06-15T14:30:00.000 junk',\n '2026-06-15T14:30:00.000[GMT+00:00 UTC]junk',\n 'June 15 2026 14:30',\n ]) {\n it(`Y18 payload rejected: ${JSON.stringify(bad)}`, async () => {\n const el = await make('2026-01-02T03:04:05.000');\n expect(textOf(el), 'precondition').to.contain('02/01/2026');\n await emit(el, bad);\n expect(textOf(el)).to.equal('');\n }).timeout(60000);\n }\n });\n});\n\ndescribe('NileDateTimePicker — keyboard open, day navigation and Tab order', () => {\n const make = async (value?: string): Promise<NileDateTimePicker> => {\n const el = await fixture<NileDateTimePicker>(\n html`<nile-date-time-picker timezone=\"UTC\" .value=${value ?? ''}></nile-date-time-picker>`,\n );\n await el.updateComplete;\n return el;\n };\n const triggerNative = (el: NileDateTimePicker): HTMLInputElement =>\n el.shadowRoot!.querySelector('nile-input')!.shadowRoot!.querySelector('input') as HTMLInputElement;\n const cal = (el: NileDateTimePicker) => (el as any).calendarElement;\n const key = (target: Element, k: string, init: KeyboardEventInit = {}) => {\n const ev = new KeyboardEvent('keydown', { key: k, bubbles: true, composed: true, cancelable: true, ...init });\n target.dispatchEvent(ev);\n return ev;\n };\n const settle = async (el: NileDateTimePicker) => {\n await el.updateComplete;\n await cal(el).updateComplete;\n await aTimeout(300);\n };\n const deepActive = (): Element | null => {\n let a: Element | null = document.activeElement;\n while (a?.shadowRoot?.activeElement) a = a.shadowRoot.activeElement;\n return a;\n };\n const dayCells = (el: NileDateTimePicker) =>\n [...cal(el).shadowRoot.querySelectorAll('.day_date[data-tp-date]')] as HTMLElement[];\n const stops = (el: NileDateTimePicker) => dayCells(el).filter(c => c.getAttribute('tabindex') === '0');\n const dayOf = (c: Element) => Number(c.getAttribute('data-tp-date')!.split('-')[2]);\n\n describe('opening from the field', () => {\n it('K1. ArrowDown opens the panel and moves focus to the day that owns the tab stop', async () => {\n const el = await make('2026-06-15T10:00:00.000[GMT+00:00 UTC]');\n triggerNative(el).focus();\n const ev = key(triggerNative(el), 'ArrowDown');\n expect(ev.defaultPrevented).to.be.true;\n await settle(el);\n expect(el.open).to.be.true;\n const active = deepActive() as HTMLElement;\n expect(active.classList.contains('day_date')).to.be.true;\n expect(dayOf(active), 'the selected day').to.equal(15);\n }).timeout(60000);\n\n it('K2. Alt+ArrowDown opens it too', async () => {\n const el = await make();\n triggerNative(el).focus();\n key(triggerNative(el), 'ArrowDown', { altKey: true });\n await settle(el);\n expect(el.open).to.be.true;\n }).timeout(60000);\n\n it('K3. Enter, Space and typed characters do not open it', async () => {\n const el = await make();\n triggerNative(el).focus();\n for (const k of ['Enter', ' ', '1']) key(triggerNative(el), k);\n await settle(el);\n expect(el.open).to.be.false;\n }).timeout(60000);\n\n it('K4. Enter on the field is not swallowed (a form can still submit)', async () => {\n const el = await make();\n triggerNative(el).focus();\n expect(key(triggerNative(el), 'Enter').defaultPrevented).to.be.false;\n }).timeout(60000);\n\n it('K5. ArrowDown does nothing when disabled or already open', async () => {\n const el = await make();\n el.disabled = true;\n await el.updateComplete;\n expect(key(triggerNative(el), 'ArrowDown').defaultPrevented).to.be.false;\n expect(el.open).to.be.false;\n el.disabled = false;\n el.open = true;\n await settle(el);\n expect(key(triggerNative(el), 'ArrowDown').defaultPrevented, 'already open: left to the browser').to.be.false;\n }).timeout(60000);\n\n it('K6. ArrowDown opens in Relative mode and focuses a control inside the panel', async () => {\n const el = await fixture<NileDateTimePicker>(html`<nile-date-time-picker type=\"relative\"></nile-date-time-picker>`);\n await el.updateComplete;\n triggerNative(el).focus();\n key(triggerNative(el), 'ArrowDown');\n await settle(el);\n expect(el.open).to.be.true;\n expect(deepActive()).to.not.equal(triggerNative(el));\n expect(document.activeElement, 'focus is inside the panel').to.equal(cal(el));\n }).timeout(60000);\n\n it('K7. opening by keyboard emits no event and commits nothing', async () => {\n const el = await make();\n const seen: string[] = [];\n for (const n of ['nile-change', 'nile-clear']) el.addEventListener(n, () => seen.push(n));\n triggerNative(el).focus();\n key(triggerNative(el), 'ArrowDown');\n await settle(el);\n expect(seen).to.deep.equal([]);\n expect(el.value || '').to.equal('');\n }).timeout(60000);\n });\n\n describe('day grid', () => {\n const openAt = async (value = '2026-06-15T10:00:00.000[GMT+00:00 UTC]') => {\n const el = await make(value);\n el.open = true;\n await settle(el);\n // the expanded grid shows the whole month\n (cal(el).shadowRoot.querySelector('.tp-chevron') as HTMLElement).click();\n await settle(el);\n return el;\n };\n const press = async (el: NileDateTimePicker, k: string, init: KeyboardEventInit = {}) => {\n key(deepActive() as Element, k, init);\n await settle(el);\n };\n const focusDay = (el: NileDateTimePicker, d: number) =>\n dayCells(el).find(c => dayOf(c) === d)!.focus();\n\n it('K8. exactly one day is a tab stop (roving tabindex), on the selection', async () => {\n const el = await openAt();\n expect(stops(el).length).to.equal(1);\n expect(dayOf(stops(el)[0])).to.equal(15);\n }).timeout(60000);\n\n it('K9. with no selection the tab stop is today when it is in view, else the first day', async () => {\n const el = await make();\n el.open = true;\n await settle(el);\n (cal(el).shadowRoot.querySelector('.tp-chevron') as HTMLElement).click();\n await settle(el);\n expect(stops(el).length).to.equal(1);\n expect(dayOf(stops(el)[0])).to.equal(new Date().getDate());\n cal(el).currentMonth = (new Date().getMonth() + 1) % 12;\n cal(el).currentYear = new Date().getFullYear() + (new Date().getMonth() === 11 ? 1 : 0);\n await settle(el);\n expect(dayOf(stops(el)[0]), 'first day of the other month').to.equal(1);\n }).timeout(60000);\n\n it('K10. Arrow keys move by a day and a week and move the tab stop with focus', async () => {\n const el = await openAt();\n focusDay(el, 15);\n await press(el, 'ArrowRight');\n expect(dayOf(deepActive()!)).to.equal(16);\n await press(el, 'ArrowLeft');\n await press(el, 'ArrowLeft');\n expect(dayOf(deepActive()!)).to.equal(14);\n await press(el, 'ArrowDown');\n expect(dayOf(deepActive()!)).to.equal(21);\n await press(el, 'ArrowUp');\n expect(dayOf(deepActive()!)).to.equal(14);\n expect(stops(el).length).to.equal(1);\n expect(dayOf(stops(el)[0]), 'roving tab stop follows focus').to.equal(14);\n }).timeout(60000);\n\n it('K11. Home and End go to the first and last day of the week', async () => {\n const el = await openAt(); // 15 June 2026 is a Monday\n focusDay(el, 15);\n await press(el, 'Home');\n expect(dayOf(deepActive()!)).to.equal(14);\n await press(el, 'End');\n expect(dayOf(deepActive()!)).to.equal(20);\n }).timeout(60000);\n\n it('K12. ArrowRight past the month end shows and focuses the next month', async () => {\n const el = await openAt('2026-06-30T10:00:00.000[GMT+00:00 UTC]');\n focusDay(el, 30);\n await press(el, 'ArrowRight');\n expect(cal(el).currentMonth).to.equal(6);\n expect(dayOf(deepActive()!)).to.equal(1);\n expect((deepActive() as HTMLElement).getAttribute('data-tp-date')).to.equal('2026-6-1');\n }).timeout(60000);\n\n it('K13. PageDown / PageUp move a month (clamped to its length), Shift moves a year', async () => {\n const el = await openAt('2026-01-31T10:00:00.000[GMT+00:00 UTC]');\n focusDay(el, 31);\n await press(el, 'PageDown');\n expect(cal(el).currentMonth).to.equal(1);\n expect(dayOf(deepActive()!), '31 Jan -> 28 Feb').to.equal(28);\n await press(el, 'PageUp');\n expect(cal(el).currentMonth).to.equal(0);\n await press(el, 'PageDown', { shiftKey: true });\n expect(cal(el).currentYear).to.equal(2027);\n }).timeout(60000);\n\n it('K14. Enter and Space still select the focused day, and only Apply commits', async () => {\n const el = await openAt();\n const seen: any[] = [];\n el.addEventListener('nile-change', ((e: CustomEvent) => seen.push(e.detail)) as EventListener);\n focusDay(el, 15);\n await press(el, 'ArrowRight');\n await press(el, 'Enter');\n expect(cal(el).value.getDate()).to.equal(16);\n await press(el, ' ');\n expect(cal(el).value.getDate()).to.equal(16);\n expect(seen, 'selecting a day commits nothing').to.deep.equal([]);\n }).timeout(60000);\n\n it('K15. navigation keys are ignored while disabled, and Ctrl/Alt/Meta combinations are left alone', async () => {\n const el = await openAt();\n focusDay(el, 15);\n expect(key(deepActive()!, 'ArrowRight', { ctrlKey: true }).defaultPrevented).to.be.false;\n expect(key(deepActive()!, 'ArrowRight', { altKey: true }).defaultPrevented).to.be.false;\n expect(key(deepActive()!, 'ArrowRight').defaultPrevented).to.be.true;\n }).timeout(60000);\n\n it('K16. in the collapsed three-week window an arrow past the visible weeks expands the calendar', async () => {\n const el = await make('2026-06-15T10:00:00.000[GMT+00:00 UTC]');\n el.open = true;\n await settle(el);\n expect(cal(el).expanded).to.be.false;\n const first = dayCells(el)[0];\n first.focus();\n key(first, 'ArrowUp');\n key(deepActive()!, 'ArrowUp');\n await settle(el);\n key(deepActive()!, 'ArrowUp');\n await settle(el);\n expect(deepActive()!.classList.contains('day_date')).to.be.true;\n }).timeout(60000);\n\n it('K17. the default nile-calendar is unchanged: every allowed day is still a tab stop, no arrow handling', async () => {\n const c = await fixture<any>(html`<nile-calendar></nile-calendar>`);\n await c.updateComplete;\n const cells = [...c.shadowRoot.querySelectorAll('.day_date')].filter((x: Element) => x.getAttribute('tabindex') === '0');\n expect(cells.length).to.be.greaterThan(20);\n const ev = new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, cancelable: true });\n cells[0].dispatchEvent(ev);\n expect(ev.defaultPrevented).to.be.false;\n }).timeout(60000);\n });\n\n describe('Tab order and focus restoration', () => {\n const openByKey = async (el: NileDateTimePicker) => {\n triggerNative(el).focus();\n key(triggerNative(el), 'ArrowDown');\n await settle(el);\n };\n\n it('K18. Tab from the field while open enters the panel (not the next page element)', async () => {\n const el = await make('2026-06-15T10:00:00.000[GMT+00:00 UTC]');\n el.open = true;\n await settle(el);\n triggerNative(el).focus();\n const ev = key(triggerNative(el), 'Tab');\n expect(ev.defaultPrevented, 'the browser must not skip to the end of <body>').to.be.true;\n expect(document.activeElement).to.equal(cal(el));\n expect(deepActive(), 'the first control, so Shift+Tab from it returns to the field').to.equal((el as any).panelTabbables()[0]);\n }).timeout(60000);\n\n it('K19. Shift+Tab from the field is left to the browser', async () => {\n const el = await make();\n el.open = true;\n await settle(el);\n triggerNative(el).focus();\n expect(key(triggerNative(el), 'Tab', { shiftKey: true }).defaultPrevented).to.be.false;\n expect(el.open).to.be.true;\n }).timeout(60000);\n\n it('K20. Shift+Tab from the first control returns to the field', async () => {\n const el = await make();\n await openByKey(el);\n const tabbables = (el as any).panelTabbables() as HTMLElement[];\n tabbables[0].focus();\n const ev = key(deepActive()!, 'Tab', { shiftKey: true });\n expect(ev.defaultPrevented).to.be.true;\n expect(deepActive()).to.equal(triggerNative(el));\n }).timeout(60000);\n\n it('K21. Tab from the last control hands focus to the field (so the browser moves on) and closes the panel', async () => {\n const el = await make('2026-06-15T10:00:00.000[GMT+00:00 UTC]');\n await openByKey(el);\n const tabbables = (el as any).panelTabbables() as HTMLElement[];\n const last = tabbables[tabbables.length - 1];\n last.focus();\n const ev = key(deepActive()!, 'Tab');\n expect(ev.defaultPrevented, 'default Tab then continues from the field').to.be.false;\n expect(deepActive()).to.equal(triggerNative(el));\n await aTimeout(400);\n expect(el.open).to.be.false;\n }).timeout(60000);\n\n it('K22. Tab between controls in the middle of the panel is untouched', async () => {\n const el = await make();\n await openByKey(el);\n const tabbables = (el as any).panelTabbables() as HTMLElement[];\n expect(tabbables.length).to.be.greaterThan(2);\n tabbables[1].focus();\n expect(key(deepActive()!, 'Tab').defaultPrevented).to.be.false;\n expect(el.open).to.be.true;\n }).timeout(60000);\n\n it('K23. Escape from a day returns focus to the field; Apply returns it too', async () => {\n const el = await make('2026-06-15T10:00:00.000[GMT+00:00 UTC]');\n await openByKey(el);\n key(deepActive()!, 'Escape');\n await aTimeout(400);\n expect(el.open).to.be.false;\n expect(deepActive()).to.equal(triggerNative(el));\n\n await openByKey(el);\n (cal(el).shadowRoot.querySelector('.apply-button') as HTMLElement).click();\n await aTimeout(400);\n expect(el.open).to.be.false;\n expect(deepActive()).to.equal(triggerNative(el));\n }).timeout(60000);\n\n it('K24. panelTabbables skips disabled and non-visible controls', async () => {\n const el = await make();\n await openByKey(el);\n const tabbables = (el as any).panelTabbables() as HTMLElement[];\n for (const t of tabbables) {\n expect(t.matches(':disabled'), 'enabled').to.be.false;\n expect(t.getClientRects().length, 'rendered').to.be.greaterThan(0);\n }\n }).timeout(60000);\n });\n});\n"]}
|