@limetech/lime-elements 38.37.0 → 38.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/cjs/{checkbox.template-92ae2e60.js → checkbox.template-db4cd6c5.js} +2 -2
- package/dist/cjs/{checkbox.template-92ae2e60.js.map → checkbox.template-db4cd6c5.js.map} +1 -1
- package/dist/cjs/{index-174a078a.js → index-1ed03b2b.js} +1 -14
- package/dist/cjs/index-1ed03b2b.js.map +1 -0
- package/dist/cjs/lime-elements.cjs.js +2 -2
- package/dist/cjs/limel-3d-hover-effect-glow.cjs.entry.js +1 -1
- package/dist/cjs/limel-action-bar-item_2.cjs.entry.js +2 -2
- package/dist/cjs/limel-action-bar_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-ai-avatar.cjs.entry.js +1 -1
- package/dist/cjs/limel-badge.cjs.entry.js +1 -1
- package/dist/cjs/limel-banner.cjs.entry.js +1 -1
- package/dist/cjs/limel-breadcrumbs_7.cjs.entry.js +2 -2
- package/dist/cjs/limel-button-group.cjs.entry.js +1 -1
- package/dist/cjs/limel-button.cjs.entry.js +2 -2
- package/dist/cjs/limel-callout.cjs.entry.js +1 -1
- package/dist/cjs/limel-card.cjs.entry.js +1 -1
- package/dist/cjs/limel-chart.cjs.entry.js +1 -1
- package/dist/cjs/limel-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/limel-chip_2.cjs.entry.js +2 -2
- package/dist/cjs/limel-circular-progress.cjs.entry.js +1 -1
- package/dist/cjs/limel-code-editor.cjs.entry.js +1 -1
- package/dist/cjs/limel-collapsible-section.cjs.entry.js +2 -2
- package/dist/cjs/limel-color-picker-palette.cjs.entry.js +1 -1
- package/dist/cjs/limel-color-picker.cjs.entry.js +1 -1
- package/dist/cjs/limel-config.cjs.entry.js +1 -1
- package/dist/cjs/limel-date-picker.cjs.entry.js +1 -1
- package/dist/cjs/limel-dialog.cjs.entry.js +1 -1
- package/dist/cjs/limel-dock-button.cjs.entry.js +1 -1
- package/dist/cjs/limel-dock.cjs.entry.js +1 -1
- package/dist/cjs/limel-drag-handle.cjs.entry.js +1 -1
- package/dist/cjs/limel-dynamic-label.cjs.entry.js +1 -1
- package/dist/cjs/limel-file-dropzone_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-file-viewer.cjs.entry.js +1 -1
- package/dist/cjs/limel-file.cjs.entry.js +1 -1
- package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +1 -1
- package/dist/cjs/limel-flex-container.cjs.entry.js +1 -1
- package/dist/cjs/limel-form.cjs.entry.js +1 -1
- package/dist/cjs/limel-grid.cjs.entry.js +1 -1
- package/dist/cjs/limel-header.cjs.entry.js +1 -1
- package/dist/cjs/limel-help-content.cjs.entry.js +1 -1
- package/dist/cjs/limel-help.cjs.entry.js +1 -1
- package/dist/cjs/limel-helper-line_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-icon-button.cjs.entry.js +3 -3
- package/dist/cjs/limel-icon-button.cjs.entry.js.map +1 -1
- package/dist/cjs/limel-icon.cjs.entry.js +1 -1
- package/dist/cjs/limel-info-tile.cjs.entry.js +1 -1
- package/dist/cjs/limel-linear-progress.cjs.entry.js +1 -1
- package/dist/cjs/limel-list-item.cjs.entry.js +2 -2
- package/dist/cjs/limel-markdown.cjs.entry.js +1 -1
- package/dist/cjs/limel-menu-item-meta.cjs.entry.js +1 -1
- package/dist/cjs/limel-picker.cjs.entry.js +1 -1
- package/dist/cjs/limel-popover_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-portal_3.cjs.entry.js +1 -1
- package/dist/cjs/limel-profile-picture.cjs.entry.js +1 -1
- package/dist/cjs/limel-progress-flow-item.cjs.entry.js +1 -1
- package/dist/cjs/limel-progress-flow.cjs.entry.js +1 -1
- package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +1 -1
- package/dist/cjs/limel-radio-button-group.cjs.entry.js +1 -1
- package/dist/cjs/limel-radio-button.cjs.entry.js +1 -1
- package/dist/cjs/limel-select.cjs.entry.js +1 -1
- package/dist/cjs/limel-shortcut.cjs.entry.js +1 -1
- package/dist/cjs/limel-slider.cjs.entry.js +1 -1
- package/dist/cjs/limel-snackbar.cjs.entry.js +1 -1
- package/dist/cjs/limel-split-button.cjs.entry.js +1 -1
- package/dist/cjs/limel-switch.cjs.entry.js +2 -2
- package/dist/cjs/limel-tab-bar.cjs.entry.js +1 -1
- package/dist/cjs/limel-tab-panel.cjs.entry.js +1 -1
- package/dist/cjs/limel-table.cjs.entry.js +26536 -20436
- package/dist/cjs/limel-table.cjs.entry.js.map +1 -1
- package/dist/cjs/limel-text-editor.cjs.entry.js +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{make-enter-clickable-39af24ec.js → make-enter-clickable-3369d31a.js} +28 -15
- package/dist/cjs/make-enter-clickable-3369d31a.js.map +1 -0
- package/dist/collection/components/icon-button/icon-button.css +1 -1
- package/dist/collection/components/table/columns.js.map +1 -1
- package/dist/collection/components/table/table-selection.js +3 -0
- package/dist/collection/components/table/table-selection.js.map +1 -1
- package/dist/collection/components/table/table.css +406 -163
- package/dist/collection/components/table/table.js +94 -44
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/util/make-enter-clickable.js +27 -13
- package/dist/collection/util/make-enter-clickable.js.map +1 -1
- package/dist/esm/{checkbox.template-9acc6347.js → checkbox.template-024bb3b3.js} +2 -2
- package/dist/esm/{checkbox.template-9acc6347.js.map → checkbox.template-024bb3b3.js.map} +1 -1
- package/dist/esm/{index-2714248e.js → index-0c4503aa.js} +2 -14
- package/dist/esm/index-0c4503aa.js.map +1 -0
- package/dist/esm/lime-elements.js +3 -3
- package/dist/esm/limel-3d-hover-effect-glow.entry.js +1 -1
- package/dist/esm/limel-action-bar-item_2.entry.js +2 -2
- package/dist/esm/limel-action-bar_2.entry.js +1 -1
- package/dist/esm/limel-ai-avatar.entry.js +1 -1
- package/dist/esm/limel-badge.entry.js +1 -1
- package/dist/esm/limel-banner.entry.js +1 -1
- package/dist/esm/limel-breadcrumbs_7.entry.js +2 -2
- package/dist/esm/limel-button-group.entry.js +1 -1
- package/dist/esm/limel-button.entry.js +2 -2
- package/dist/esm/limel-callout.entry.js +1 -1
- package/dist/esm/limel-card.entry.js +1 -1
- package/dist/esm/limel-chart.entry.js +1 -1
- package/dist/esm/limel-checkbox.entry.js +2 -2
- package/dist/esm/limel-chip_2.entry.js +2 -2
- package/dist/esm/limel-circular-progress.entry.js +1 -1
- package/dist/esm/limel-code-editor.entry.js +1 -1
- package/dist/esm/limel-collapsible-section.entry.js +2 -2
- package/dist/esm/limel-color-picker-palette.entry.js +1 -1
- package/dist/esm/limel-color-picker.entry.js +1 -1
- package/dist/esm/limel-config.entry.js +1 -1
- package/dist/esm/limel-date-picker.entry.js +1 -1
- package/dist/esm/limel-dialog.entry.js +1 -1
- package/dist/esm/limel-dock-button.entry.js +1 -1
- package/dist/esm/limel-dock.entry.js +1 -1
- package/dist/esm/limel-drag-handle.entry.js +1 -1
- package/dist/esm/limel-dynamic-label.entry.js +1 -1
- package/dist/esm/limel-file-dropzone_2.entry.js +1 -1
- package/dist/esm/limel-file-viewer.entry.js +1 -1
- package/dist/esm/limel-file.entry.js +1 -1
- package/dist/esm/limel-flatpickr-adapter.entry.js +1 -1
- package/dist/esm/limel-flex-container.entry.js +1 -1
- package/dist/esm/limel-form.entry.js +1 -1
- package/dist/esm/limel-grid.entry.js +1 -1
- package/dist/esm/limel-header.entry.js +1 -1
- package/dist/esm/limel-help-content.entry.js +1 -1
- package/dist/esm/limel-help.entry.js +1 -1
- package/dist/esm/limel-helper-line_2.entry.js +1 -1
- package/dist/esm/limel-icon-button.entry.js +3 -3
- package/dist/esm/limel-icon-button.entry.js.map +1 -1
- package/dist/esm/limel-icon.entry.js +1 -1
- package/dist/esm/limel-info-tile.entry.js +1 -1
- package/dist/esm/limel-linear-progress.entry.js +1 -1
- package/dist/esm/limel-list-item.entry.js +2 -2
- package/dist/esm/limel-markdown.entry.js +1 -1
- package/dist/esm/limel-menu-item-meta.entry.js +1 -1
- package/dist/esm/limel-picker.entry.js +1 -1
- package/dist/esm/limel-popover_2.entry.js +1 -1
- package/dist/esm/limel-portal_3.entry.js +1 -1
- package/dist/esm/limel-profile-picture.entry.js +1 -1
- package/dist/esm/limel-progress-flow-item.entry.js +1 -1
- package/dist/esm/limel-progress-flow.entry.js +1 -1
- package/dist/esm/limel-prosemirror-adapter.entry.js +1 -1
- package/dist/esm/limel-radio-button-group.entry.js +1 -1
- package/dist/esm/limel-radio-button.entry.js +1 -1
- package/dist/esm/limel-select.entry.js +1 -1
- package/dist/esm/limel-shortcut.entry.js +1 -1
- package/dist/esm/limel-slider.entry.js +1 -1
- package/dist/esm/limel-snackbar.entry.js +1 -1
- package/dist/esm/limel-split-button.entry.js +1 -1
- package/dist/esm/limel-switch.entry.js +2 -2
- package/dist/esm/limel-tab-bar.entry.js +1 -1
- package/dist/esm/limel-tab-panel.entry.js +1 -1
- package/dist/esm/limel-table.entry.js +26536 -20436
- package/dist/esm/limel-table.entry.js.map +1 -1
- package/dist/esm/limel-text-editor.entry.js +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{make-enter-clickable-e0d24198.js → make-enter-clickable-1ab65ddc.js} +28 -15
- package/dist/esm/make-enter-clickable-1ab65ddc.js.map +1 -0
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/lime-elements.esm.js.map +1 -1
- package/dist/lime-elements/{p-8ded6465.js → p-03fd2774.js} +2 -2
- package/dist/lime-elements/{p-8539647d.entry.js → p-054daef5.entry.js} +2 -2
- package/dist/lime-elements/{p-4f85b3c4.entry.js → p-07c4def0.entry.js} +2 -2
- package/dist/lime-elements/{p-5b1cb891.entry.js → p-08f75835.entry.js} +2 -2
- package/dist/lime-elements/{p-eac0220e.entry.js → p-147b0a68.entry.js} +2 -2
- package/dist/lime-elements/{p-407a0e61.entry.js → p-19f525ba.entry.js} +2 -2
- package/dist/lime-elements/{p-ac55217a.entry.js → p-1a351a7f.entry.js} +2 -2
- package/dist/lime-elements/{p-bb0095c2.entry.js → p-1af74f5c.entry.js} +2 -2
- package/dist/lime-elements/{p-2116b3ce.entry.js → p-2356b938.entry.js} +2 -2
- package/dist/lime-elements/{p-8c667a56.entry.js → p-25158b9e.entry.js} +2 -2
- package/dist/lime-elements/{p-8e7d31b3.entry.js → p-263bac63.entry.js} +2 -2
- package/dist/lime-elements/{p-18256ad9.entry.js → p-280cbd66.entry.js} +2 -2
- package/dist/lime-elements/{p-3a36b862.entry.js → p-291cd743.entry.js} +2 -2
- package/dist/lime-elements/{p-aa159bd8.entry.js → p-2a616374.entry.js} +2 -2
- package/dist/lime-elements/{p-5f113a63.entry.js → p-312d104a.entry.js} +2 -2
- package/dist/lime-elements/{p-52fb3988.entry.js → p-317f00ea.entry.js} +2 -2
- package/dist/lime-elements/{p-c7ffe359.entry.js → p-32611964.entry.js} +2 -2
- package/dist/lime-elements/{p-416f25fc.entry.js → p-333ba7ca.entry.js} +2 -2
- package/dist/lime-elements/{p-b80a7353.entry.js → p-354c2d16.entry.js} +2 -2
- package/dist/lime-elements/{p-d497cac7.entry.js → p-36ae8adf.entry.js} +2 -2
- package/dist/lime-elements/{p-4ed15eb7.entry.js → p-3fcd15bd.entry.js} +2 -2
- package/dist/lime-elements/{p-2ff2186f.entry.js → p-4d225689.entry.js} +2 -2
- package/dist/lime-elements/p-4e77c9a5.js +2 -0
- package/dist/lime-elements/p-4e77c9a5.js.map +1 -0
- package/dist/lime-elements/{p-668e583c.entry.js → p-56c9bb65.entry.js} +2 -2
- package/dist/lime-elements/{p-745417ee.entry.js → p-5ca68424.entry.js} +2 -2
- package/dist/lime-elements/{p-b928421f.entry.js → p-5ef0a1fe.entry.js} +2 -2
- package/dist/lime-elements/p-5ef0a1fe.entry.js.map +1 -0
- package/dist/lime-elements/{p-4a9a6e16.entry.js → p-60a43c1d.entry.js} +2 -2
- package/dist/lime-elements/{p-ac334aa7.entry.js → p-67b697b4.entry.js} +2 -2
- package/dist/lime-elements/{p-b45cfa71.entry.js → p-6c5eea77.entry.js} +2 -2
- package/dist/lime-elements/{p-5ac43dbd.entry.js → p-6ce5a93f.entry.js} +2 -2
- package/dist/lime-elements/{p-d4a220eb.entry.js → p-6ddb0265.entry.js} +2 -2
- package/dist/lime-elements/{p-0115bb1e.entry.js → p-6ef87216.entry.js} +2 -2
- package/dist/lime-elements/{p-51d475d8.entry.js → p-6f3a34f1.entry.js} +2 -2
- package/dist/lime-elements/{p-54fc2316.entry.js → p-718d5311.entry.js} +2 -2
- package/dist/lime-elements/{p-e839ce5b.entry.js → p-72a79ebe.entry.js} +2 -2
- package/dist/lime-elements/{p-0d247b83.entry.js → p-7b681f7c.entry.js} +2 -2
- package/dist/lime-elements/{p-f8b6d7e1.entry.js → p-7d107fba.entry.js} +2 -2
- package/dist/lime-elements/{p-47da9c59.entry.js → p-81de7836.entry.js} +2 -2
- package/dist/lime-elements/{p-32572c31.entry.js → p-8535dc16.entry.js} +2 -2
- package/dist/lime-elements/{p-706c2e84.entry.js → p-9697010e.entry.js} +2 -2
- package/dist/lime-elements/{p-483ba5da.entry.js → p-9a64025b.entry.js} +2 -2
- package/dist/lime-elements/{p-f1ec1eeb.entry.js → p-9c9876f9.entry.js} +2 -2
- package/dist/lime-elements/{p-9b809f4d.entry.js → p-9e225545.entry.js} +2 -2
- package/dist/lime-elements/{p-4ddb8b05.entry.js → p-a92369cb.entry.js} +2 -2
- package/dist/lime-elements/{p-1e4ca584.entry.js → p-ae25ca92.entry.js} +2 -2
- package/dist/lime-elements/{p-580a29c5.entry.js → p-b076958e.entry.js} +2 -2
- package/dist/lime-elements/{p-20950d83.entry.js → p-b3f1f121.entry.js} +2 -2
- package/dist/lime-elements/{p-07988749.entry.js → p-b89cb5a3.entry.js} +2 -2
- package/dist/lime-elements/{p-6ef94d19.entry.js → p-b906e1c5.entry.js} +2 -2
- package/dist/lime-elements/p-bdfa539c.js +3 -0
- package/dist/lime-elements/p-bdfa539c.js.map +1 -0
- package/dist/lime-elements/{p-b43e8cb2.entry.js → p-c445aed7.entry.js} +2 -2
- package/dist/lime-elements/{p-489d7f63.entry.js → p-c64e86fd.entry.js} +2 -2
- package/dist/lime-elements/{p-cbbe129b.entry.js → p-cb81be35.entry.js} +2 -2
- package/dist/lime-elements/{p-9af45dec.entry.js → p-cd0010ba.entry.js} +2 -2
- package/dist/lime-elements/{p-250acfe4.entry.js → p-ce0e6d28.entry.js} +2 -2
- package/dist/lime-elements/{p-7528a002.entry.js → p-cecdb592.entry.js} +2 -2
- package/dist/lime-elements/{p-2fdb51de.entry.js → p-dd0f3190.entry.js} +2 -2
- package/dist/lime-elements/{p-10d1256b.entry.js → p-e1df39fc.entry.js} +2 -2
- package/dist/lime-elements/{p-c823d32b.entry.js → p-e22edc40.entry.js} +2 -2
- package/dist/lime-elements/{p-3a61deb1.entry.js → p-e4fd6591.entry.js} +2 -2
- package/dist/lime-elements/{p-e739d600.entry.js → p-e8370ee5.entry.js} +2 -2
- package/dist/lime-elements/{p-874f06f0.entry.js → p-ead08551.entry.js} +5 -5
- package/dist/lime-elements/{p-ae507565.entry.js → p-ec03874d.entry.js} +2 -2
- package/dist/lime-elements/{p-b5a96409.entry.js → p-f1c9089e.entry.js} +2 -2
- package/dist/lime-elements/p-f6d8811f.entry.js +2 -0
- package/dist/lime-elements/p-f6d8811f.entry.js.map +1 -0
- package/dist/lime-elements/{p-c2f922ba.entry.js → p-f8cbb607.entry.js} +2 -2
- package/dist/types/components/table/columns.d.ts +7 -11
- package/dist/types/components/table/table-selection.d.ts +4 -4
- package/dist/types/components/table/table.d.ts +15 -5
- package/dist/types/components.d.ts +12 -0
- package/dist/types/util/make-enter-clickable.d.ts +19 -3
- package/package.json +3 -3
- package/dist/cjs/index-174a078a.js.map +0 -1
- package/dist/cjs/make-enter-clickable-39af24ec.js.map +0 -1
- package/dist/esm/index-2714248e.js.map +0 -1
- package/dist/esm/make-enter-clickable-e0d24198.js.map +0 -1
- package/dist/lime-elements/p-288f0842.js +0 -3
- package/dist/lime-elements/p-288f0842.js.map +0 -1
- package/dist/lime-elements/p-533a3cfb.entry.js +0 -2
- package/dist/lime-elements/p-533a3cfb.entry.js.map +0 -1
- package/dist/lime-elements/p-b928421f.entry.js.map +0 -1
- package/dist/lime-elements/p-e127eaaa.js +0 -2
- package/dist/lime-elements/p-e127eaaa.js.map +0 -1
- /package/dist/lime-elements/{p-8ded6465.js.map → p-03fd2774.js.map} +0 -0
- /package/dist/lime-elements/{p-8539647d.entry.js.map → p-054daef5.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-4f85b3c4.entry.js.map → p-07c4def0.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-5b1cb891.entry.js.map → p-08f75835.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-eac0220e.entry.js.map → p-147b0a68.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-407a0e61.entry.js.map → p-19f525ba.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-ac55217a.entry.js.map → p-1a351a7f.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-bb0095c2.entry.js.map → p-1af74f5c.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-2116b3ce.entry.js.map → p-2356b938.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-8c667a56.entry.js.map → p-25158b9e.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-8e7d31b3.entry.js.map → p-263bac63.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-18256ad9.entry.js.map → p-280cbd66.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-3a36b862.entry.js.map → p-291cd743.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-aa159bd8.entry.js.map → p-2a616374.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-5f113a63.entry.js.map → p-312d104a.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-52fb3988.entry.js.map → p-317f00ea.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-c7ffe359.entry.js.map → p-32611964.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-416f25fc.entry.js.map → p-333ba7ca.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-b80a7353.entry.js.map → p-354c2d16.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-d497cac7.entry.js.map → p-36ae8adf.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-4ed15eb7.entry.js.map → p-3fcd15bd.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-2ff2186f.entry.js.map → p-4d225689.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-668e583c.entry.js.map → p-56c9bb65.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-745417ee.entry.js.map → p-5ca68424.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-4a9a6e16.entry.js.map → p-60a43c1d.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-ac334aa7.entry.js.map → p-67b697b4.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-b45cfa71.entry.js.map → p-6c5eea77.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-5ac43dbd.entry.js.map → p-6ce5a93f.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-d4a220eb.entry.js.map → p-6ddb0265.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-0115bb1e.entry.js.map → p-6ef87216.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-51d475d8.entry.js.map → p-6f3a34f1.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-54fc2316.entry.js.map → p-718d5311.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-e839ce5b.entry.js.map → p-72a79ebe.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-0d247b83.entry.js.map → p-7b681f7c.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-f8b6d7e1.entry.js.map → p-7d107fba.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-47da9c59.entry.js.map → p-81de7836.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-32572c31.entry.js.map → p-8535dc16.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-706c2e84.entry.js.map → p-9697010e.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-483ba5da.entry.js.map → p-9a64025b.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-f1ec1eeb.entry.js.map → p-9c9876f9.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-9b809f4d.entry.js.map → p-9e225545.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-4ddb8b05.entry.js.map → p-a92369cb.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-1e4ca584.entry.js.map → p-ae25ca92.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-580a29c5.entry.js.map → p-b076958e.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-20950d83.entry.js.map → p-b3f1f121.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-07988749.entry.js.map → p-b89cb5a3.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-6ef94d19.entry.js.map → p-b906e1c5.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-b43e8cb2.entry.js.map → p-c445aed7.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-489d7f63.entry.js.map → p-c64e86fd.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-cbbe129b.entry.js.map → p-cb81be35.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-9af45dec.entry.js.map → p-cd0010ba.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-250acfe4.entry.js.map → p-ce0e6d28.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-7528a002.entry.js.map → p-cecdb592.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-2fdb51de.entry.js.map → p-dd0f3190.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-10d1256b.entry.js.map → p-e1df39fc.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-c823d32b.entry.js.map → p-e22edc40.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-3a61deb1.entry.js.map → p-e4fd6591.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-e739d600.entry.js.map → p-e8370ee5.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-874f06f0.entry.js.map → p-ead08551.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-ae507565.entry.js.map → p-ec03874d.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-b5a96409.entry.js.map → p-f1c9089e.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-c2f922ba.entry.js.map → p-f8cbb607.entry.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["objectProto","Object","prototype","hasOwnProperty","baseHas","object","key","call","has","path","hasPath","baseSet","value","customizer","isObject","castPath","index","length","lastIndex","nested","toKey","newValue","objValue","undefined","isIndex","assignValue","basePickBy","paths","predicate","result","baseGet","pickBy","props","arrayMap","getAllKeysIn","prop","baseIteratee","_typeof","Symbol","iterator","obj","constructor","Array","findIndex","defineProperty","this","TypeError","o","len","thisArg","arguments","k","kValue","find","String","includes","search","start","RegExp","indexOf","searchElement","fromIndex","n","Math","max","abs","sameValueZero","x","y","isNaN","assign","target","varArgs","to","nextSource","nextKey","writable","configurable","ColumnManager","table","blockHozScrollEvent","headersElement","createHeadersElement","element","createHeaderElement","rowManager","columns","columnsByIndex","columnsByField","scrollLeft","insertBefore","firstChild","el","document","createElement","classList","add","options","headerVisible","initialize","setRowManager","manager","getElement","getHeadersElement","scrollHorizontal","left","hozAdjust","scrollWidth","clientWidth","style","marginLeft","modExists","modules","frozenColumns","generateColumnsFromRowData","data","cols","definitions","autoColumnsDefinitions","row","sorter","col","field","title","isArray","match","push","forEach","def","setColumns","self","removeChild","reset","i","_addColumn","_reIndexColumns","responsiveLayout","virtualDomHoz","vdomHoz","reinitialize","redraw","definition","before","nextToColumn","column","Column","colEl","findColumnIndex","parentIndex","getTopColumn","nextEl","splice","parentNode","nextSibling","unshift","appendChild","columnRendered","registerColumnField","registerColumnPosition","reRegisterPosition","_verticalAlignHeaders","minHeight","height","clearVerticalAlign","getHeight","verticalAlign","columnHeaderVertAlign","adjustTableSize","findColumn","subject","ColumnComponent","_getSelf","HTMLElement","getColumnByField","getColumnsByFieldRoot","root","_this","matches","keys","fieldRoot","split","getColumnByIndex","getFirstVisibileColumn","visible","getColumns","getRealColumns","traverse","callback","getDefinitions","active","output","getDefinition","getDefinitionTree","getComponents","structured","getComponent","getWidth","width","moveColumn","from","after","moveColumnActual","columnCalcs","recalc","activeRows","parent","isGroup","_moveColumnInArray","columnMoved","columnManager","persistence","config","save","updateRows","_this2","toIndex","rows","dataTree","concat","getTreeChildren","cells","cell","scrollToColumn","position","ifVisible","_this3","offset","adjust","Promise","resolve","reject","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","offsetWidth","min","console","warn","generateCells","generateCell","getFlexBaseWidth","totalWidth","fixedWidth","scrollHeight","clientHeight","minWidth","colWidth","columnMinWidth","parseInt","addColumn","_this4","layout","getMode","reinitializeWidth","deregisterColumn","getField","force","Tabulator","helpers","elVisible","resetScroll","update","footerManager","_column","type","getCells","getVisibility","isVisible","show","hide","toggle","delete","getSubColumns","getParentColumn","scrollTo","getTable","headerFilterFocus","filter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","move","toColumn","getNextColumn","nextCol","nextColumn","getPrevColumn","prevCol","prevColumn","updateDefinition","updates","setWidth","validate","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","tooltip","hozAlign","vertAlign","fieldStructure","getFieldValue","setFieldValue","titleFormatterRendered","setField","invalidOptionWarnings","checkDefinition","cellEvents","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","widthStyled","maxWidth","maxWidthStyled","minWidthStyled","widthFixed","component","_mapDepricatedFunctionality","newCol","attachColumn","checkColumnVisibility","rowHandle","movableRows","moveRow","setHandle","_buildHeader","bindModuleColumns","setAttribute","_this5","defaultOptionList","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","hideInHtml","htmlOutput","align","downloadTitle","titleDownload","setTooltip","headerTooltip","tooltipsHeader","localize","bind","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","resizableColumns","resizeColumns","initializeColumn","headerFilter","headerFilterPlaceholder","setHeaderFilterColumnPlaceholder","movableColumns","topCalc","bottomCalc","addEventListener","e","dblTap","tapHold","tap","headerClick","headerDblClick","headerContext","headerTap","passive","headerDblTap","clearTimeout","setTimeout","headerTapHold","cellEdited","cellEditing","cellEditCancelled","_this6","sort","headerContextMenu","headerClickMenu","headerMenu","menu","initializeColumnHeader","format","editor","edit","validator","mutator","accessor","cssClass","classeNames","className","setMinWidth","columnMaxWidth","setMaxWidth","tooltips","cellHozAlign","cellVertAlign","textAlign","headerHozAlign","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","columnTitleChanged","text","_formatColumnHeaderTitle","_this7","formatter","contents","params","mockCell","onRendered","titleFormatter","getFormatter","getValue","titleFormatterParams","Node","innerHTML","_this8","dataObj","structure","_i","_i2","alignment","parentHeight","getGroupElement","offsetHeight","paddingTop","rowNumColumn","getFirstColumn","getLastColumn","updateBranches","colDefs","columnVisibilityChanged","silent","responsiveToggle","display","updateColumnVisibility","matchChildWidths","childWidth","child","setWidthActual","floor","checkCellHeights","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","_this9","currentCell","cancelEdit","cellCount","_i3","invalid","Cell","_nextVisibleColumn","_prevVisibleColumn","hideHeaderFilterElements","fitToData","showHeaderFilterElements","clearWidth","_this10","then","catch","err","deleteCell","RowManager","createHolderElement","tableElement","createTableElement","heightFixer","firstRender","renderMode","fixedHeight","activeRowsCount","displayRows","displayRowsCount","scrollTop","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","redrawBlock","redrawBlockRestoreConfig","redrawBlockRederInPosition","getTableElement","getRowPosition","setColumnManager","setRenderMode","groupBy","groupRows","scrollHeaders","top","dir","scrollVertical","ajaxProgressiveLoad","ajax","nextPage","findRow","Row","RowComponent","_match","getRowFromDataObject","getRowFromPosition","scrollToRow","_this11","rowIndex","getDisplayRows","rowEl","rowTop","scrollToRowPosition","scrollToRowIfVisible","elOffset","_virtualRenderFill","offsetTop","setData","renderInPosition","columnsChanged","_this12","pagination","_setDataActual","reRenderInPosition","autoColumns","dataLoading","_wipeElements","history","clear","selectRow","clearSelectionData","reactiveData","watchData","refreshActiveData","dataLoaded","error","wipe","deleteRow","blockRedraw","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","rowDeleted","dataChanged","getData","updateGroupRows","addRow","pos","addRowActual","action","addRows","_this13","findAddRowPos","reverse","item","addRowPos","dispRows","paginationAddRow","page","getPageSize","assignRowToGroup","getGroup","_moveRowInArray","rowAdded","posFrom","posTo","moveRowActual","rowMoved","_this14","Group","prevDisplayRow","toGroup","fromGroup","removeRow","insertRow","end","_i4","styleRow","clearData","getRowIndex","findRowIndex","getDisplayRowIndex","nextDisplayRow","rowOnly","nextRow","prevRow","list","transform","getRows","getDataCount","_genRemoteRequest","_this15","ajaxSorting","sorters","getSort","paginationDataSentNames","ajaxFiltering","filters","getFilters","setParams","sendRequest","filterRefresh","setPage","loadData","sorterRefresh","loadOrignalData","progressiveLoad","stage","skipStage","cascadeOrder","selectable","selectablePersistence","deselectRows","slice","resetDisplayRows","frozenRows","isFrozen","getDisplayIndex","setDisplayIndex","getNextDisplayIndex","setDisplayRows","setMaxRows","dataChange","renderTable","layoutColumnsOnNewData","_this16","getCell","_generateContents","getVisibleRows","viewable","topEdge","bottomEdge","topFound","topRow","bottomRow","selectedRows","getRenderMode","topOffset","diff","virtualDom","renderStarted","_simpleRender","renderEmptyScroll","placeholder","renderComplete","_clearVirtualDom","checkClassicModeGroupHeaderWidth","onlyGroupHeaders","paddingBottom","visibility","remove","forceMove","holder","topPad","rowsHeight","topPadHeight","heightOccupied","ceil","rowHeight","normalizeHeight","vDomScrollHeight","countGroups","topDiff","bottomDiff","margin","_addTopRow","_removeBottomRow","_removeTopRow","_addBottomRow","topRowHeight","initialized","_quickNormalizeRowHeight","bottomRowHeight","initialHeight","otherHeight","getBoundingClientRect","external","maxHeight","virtualDomBuffer","resizeTable","autoResize","restoreRedraw","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","VDomHoz","holderEl","leftCol","rightCol","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","window","compatabilityCheck","frozen","ok","rtl","_this17","scroll","deinitialize","change","collsWidth","colEnd","group","getGroups","fitDataLayoutOverride","_i5","_this18","old","colPos","leftPos","rightPos","paddingLeft","paddingRight","reinitChanged","renitializeRows","_this19","_this20","reinitializeRow","addColRight","removeColLeft","addColLeft","removeColRight","colPositionAdjust","_i6","oldWidth","widthDiff","cellRendered","prepend","initializeRow","_i7","_row","getIndex","getPosition","pageTo","setPageToRow","moveToRow","updateData","select","selectRows","deselect","toggleSelect","toggleRow","isSelected","isRowSelected","freeze","freezeRow","unfreeze","unfreezeRow","treeCollapse","collapseRow","treeExpand","expandRow","treeToggle","getTreeParent","addTreeChild","addTreeChildRow","reformat","getNextRow","getPrevRow","heightStyled","manualHeight","outerHeight","created","create","generateElement","detachElement","rowContextMenu","rowClickMenu","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","_this21","deleteCells","layoutRow","rowFormatter","resizableRows","resizeRows","reinitializeHeight","children","setHeight","clearHeight","transformRow","watchRow","updatedData","_this22","tempData","newRowData","JSON","parse","block","attrname","unblock","setValueProcessData","groupUpdateOnCellEdit","reassignRowToGroup","redrawNeeded","rowUpdated","getCellIndex","findCell","findNextEditableCell","nextCell","allowEdit","check","findPrevEditableCell","prevCell","toRow","_this23","deleteActual","detatchModules","rowDelete","recalcRowGroup","_deselectRow","detachRow","_i8","CellComponent","_cell","getOldValue","getInitialValue","initialValue","getRow","getColumn","setValue","mutate","restoreOldValue","setValueActual","restoreInitialValue","isEdited","edited","clearEdited","isValid","clearValidation","nav","checkHeight","oldValue","loaded","build","_configureCell","vertAligns","bottom","middle","hozAligns","right","center","alignItems","justifyContent","classNames","tooltipGenerationMode","_generateTooltip","_bindClickEvents","_bindTouchEvents","_bindMouseEvents","bindEditor","initializeCell","preventDefault","selection","range","body","createTextRange","moveToElementText","getSelection","createRange","selectNode","removeAllRanges","addRange","val","formatValue","containerOnly","layoutElement","changed","transformCell","contextMenu","clickMenu","editCell","editing","getCurrentCell","valid","clearComponentHistory","calcs","next","prev","up","down","FooterManager","links","_initialize","footerElement","querySelector","append","activate","deactivate","link","footerRedraw","browserSlow","browserMobile","initializeElement","initializeOptions","_create","comms","register","defaultOptions","columnVertAlign","initialSort","initialFilter","initialHeaderFilter","columnHeaderSortMulti","sortOrderReverse","headerSort","headerSortTristate","headerSortElement","textDirection","keybindings","tabEndNewRow","clipboard","clipboardCopyStyled","clipboardCopyConfig","clipboardCopyFormatter","clipboardCopyRowRange","clipboardPasteParser","clipboardPasteAction","clipboardCopied","clipboardPasted","clipboardPasteError","downloadDataFormatter","downloadReady","blob","downloadComplete","downloadConfig","downloadRowRange","dataTreeFilter","dataTreeSort","dataTreeElementColumn","dataTreeBranchElement","dataTreeChildIndent","dataTreeChildField","dataTreeCollapseElement","dataTreeExpandElement","dataTreeStartExpanded","dataTreeRowExpanded","dataTreeRowCollapsed","dataTreeChildColumnCalcs","dataTreeSelectPropagate","printAsHtml","printFormatter","printHeader","printFooter","printCopyStyle","printStyled","printVisibleRows","printRowRange","printConfig","selectableRangeMode","selectableRollingSelection","selectableCheck","headerFilterLiveFilterDelay","locale","langs","persistentLayout","persistentSort","persistentFilter","persistenceID","persistenceMode","persistenceReaderFunc","persistenceWriterFunc","responsiveLayoutCollapseStartOpen","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","paginationSize","paginationInitialPage","paginationButtonCount","paginationSizeSelector","paginationElement","paginationDataSent","paginationDataReceived","ajaxURL","ajaxURLGenerator","ajaxParams","ajaxConfig","ajaxContentType","ajaxRequestFunc","ajaxLoader","ajaxLoaderLoading","ajaxLoaderError","ajaxProgressiveLoadDelay","ajaxProgressiveLoadScrollMargin","groupStartOpen","groupValues","groupHeader","groupHeaderPrint","groupHeaderClipboard","groupHeaderHtmlOutput","groupHeaderDownload","htmlOutputConfig","movableRowsConnectedTables","movableRowsConnectedElements","movableRowsSender","movableRowsReceiver","movableRowsSendingStart","movableRowsSent","movableRowsSentFailed","movableRowsSendingStop","movableRowsReceivingStart","movableRowsReceived","movableRowsReceivedFailed","movableRowsReceivingStop","movableRowsElementDrop","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","tableBuilding","tableBuilt","rowSelectionChanged","rowSelected","rowDeselected","rowResized","columnResized","htmlImporting","htmlImported","dataEdited","ajaxRequesting","ajaxResponse","ajaxError","dataFiltering","dataFiltered","dataSorting","dataSorted","groupToggleElement","groupClosedShowCalcs","dataGrouping","dataGrouped","groupVisibilityChanged","groupClick","groupDblClick","groupContext","groupContextMenu","groupClickMenu","groupTap","groupDblTap","groupTapHold","pageLoaded","localized","validationMode","validationFailed","historyUndo","historyRedo","rtlCheck","getComputedStyle","direction","clipboardCopyHeader","columnHeaders","_clearSelection","empty","_clearObjectPointers","bindModules","tagName","htmlTableImport","parseTable","_buildElement","_loadInitialData","_this24","mod","_detectBrowser","setHeaderFilterPlaceholder","installLang","setLocale","span","load","setSort","setFilter","print","destroy","deregister","unwatchData","clearBindings","ua","navigator","userAgent","vendor","opera","test","substr","setDataFromLocalFile","extensions","_this25","input","accept","file","files","reader","FileReader","readAsText","onload","onerror","click","blockActiveRequest","_setData","inPosition","setConfig","setUrl","getUrl","searchRows","searchData","getHtml","export","printFullscreen","getAjaxUrl","replaceData","_this26","responses","addData","_this27","updateOrAddData","_this28","newRows","_this29","count","successCount","foundRows","doneCheck","a","b","_this30","updateOrAddRow","_this31","updateRow","_this32","_this33","fromRow","copyToClipboard","selector","copy","getColumnDefinitions","getColumnLayout","parseColumns","setColumnLayout","mergeDefinition","showColumn","hideColumn","toggleColumn","_this34","deleteColumn","_this35","updateColumnDefinition","_this36","fromColumn","_this37","getLocale","getLang","sortList","getSorters","clearSort","refreshFilter","addFilter","all","getHeaderFilters","removeFilter","clearFilter","clearHeaderFilter","deselectRow","toggleSelectRow","getSelectedRows","getSelectedData","getInvalidCells","clearCellValidation","_this38","setMaxPage","_this39","setPageSize","size","previousPage","getPage","getPageMax","setGroupBy","groups","setGroupValues","setGroupStartOpen","values","setGroupHeader","getGroupedData","getEditedCells","clearCellEdited","_this40","getCalcResults","getResults","recalcAll","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","undo","redo","getHistoryUndoSize","getHistoryRedoSize","clearHistory","download","filename","downloadToTab","tableComms","module","receive","moduleBindings","extendModule","name","property","source","registerModule","plugin","required","box","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","deepClone","clone","Date","tables","lookupTable","query","results","querySelectorAll","matchElement","findTable","Layout","mode","modes","fitData","fitDataFill","fitDataTable","fitDataStretch","_this41","colsWidth","gap","lastCol","responsive","fitColumns","flexWidth","flexGrowUnits","flexColWidth","flexColumns","fixedShrinkColumns","flexShrinkUnits","overflowWidth","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Localize","lang","bindings","langList","default","headerFilters","_setLangProp","desiredLocale","traverseLang","trans","language","toLowerCase","prefix","_executeBindings","getText","pathArray","_getLangElement","level","rootPath","_loop","binding","items","loading","page_size","page_title","first","first_title","last","last_title","prev_title","next_title","Comms","getConnections","selectors","connections","connection","con","send","commsReceived","Accessor","allowedTypes","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","colCompnent","Ajax","url","urlGenerator","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","loaderPromise","requestOrder","template","trim","content","defaultLoaderPromise","defaultURLGenerator","initializeProgressive","getParams","_loadDefaultConfig","method","defaultConfig","_loadDataProgressive","_loadDataStandard","_this42","generateParamsList","serializeParams","encoded","encodeURIComponent","join","_this43","requestNo","showLoader","hideLoader","showError","shouldLoad","contentType","contentTypeFormatters","headers","Accept","location","origin","credentials","fetch","response","json","status","statusText","stringify","form","FormData","CalcComponent","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","removeCalcs","rowsToData","generateRow","recalcGroup","getRowGroup","_this44","getChildGroups","rowData","generateRowData","generateTopRow","generateBottomRow","_this45","open","getFilteredTreeChildren","disable","enable","paramKey","hasTopCalcs","hasBottomCalcs","getKey","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","avg","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","toString","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","_this46","plain","html","generateExportList","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","paste","setPasteParser","setPasteAction","internal","sel","textRange","selectNodeContents","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","headerFindSuccess","columnMap","shift","replace","insert","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","dummyEl","firstCol","tabIndex","childArray","controlEl","generateControlElement","cloneNode","marginRight","getPropertyValue","_this47","oldControl","replaceChild","_this48","getChildren","allChildren","_this49","generateChildren","subChildren","sub","_this50","childData","childRow","childIndex","findChildIndex","_this51","recurse","_this52","checkForRestyle","getChildField","Download","interceptCallback","downloadFunc","buildLink","mime","triggerDownload","downloaders","_group","getRowCount","newTab","Blob","URL","createObjectURL","msSaveOrOpenBlob","intercept","csv","setFileContents","delimiter","fileContents","depth","bom","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","orientation","unit","parseRow","styles","colSpan","rowSpan","doc","autoTable","addPageContent","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","SheetNames","Sheets","generateSheet","merges","worksheet","s","c","r","j","sheet_add_aoa","encode_range","sheetOnly","sheets","sheet","s2ab","buf","ArrayBuffer","view","Uint8Array","charCodeAt","write","bookType","bookSST","Edit","mouseClick","recursionBlock","invalidEdit","editedCells","editable","editorParams","editors","clearEditor","cancel","cellEl","variableHeight","contains","preventScroll","button","focusCellNoEvent","forceEdit","focusScrollAdjust","leftEdge","rightEdge","leftMargin","rightMargin","rendered","cellEditor","success","blur","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","keyCode","maskAutoFill","editIndex","cellValue","padding","boxSizing","elementAttributes","getAttribute","onChange","textarea","vertNav","verticalNavigation","whiteSpace","resize","heightNow","selectionStart","stopImmediatePropagation","number","step","blurFunc","removeEventListener","_this53","initialDisplayValue","defaultValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWord","searchWordTimeout","getUniqueColumnValues","parseItems","inputValues","curentValues","dataList","displayList","processComplexListItem","label","itemParams","setItem","sortValuesList","fillList","listItemFormatter","toggleItem","chooseItem","setCurrentItem","scrollIntoView","behavior","inline","fillInput","unsetItem","hideList","chooseItems","unsetItems","_i9","cancelItem","showList","removeScrollListener","scrollTovalue","character","fromCharCode","startsWith","cursor","readOnly","autocomplete","_this54","uniqueColumnValues","genUniqueColumnValues","filterList","term","intialLoad","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","showListOnEmpty","notice","searchEl","clearList","itemList","emptyPlaceholder","current","freetext","allowEmpty","log","showInputValue","star","maxStars","getElementsByTagName","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","changeValue","overflow","textOverflow","progress","percent","handle","bar","mouseDrag","mouseDragWidth","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","marginTop","indeterminate","checked","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","genereateTable","genereateTableElement","_this55","_this56","columnGroups","colData","processColumnGroup","_this57","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","headerDepth","exportRows","parseColumnGroup","_i10","_i11","_this58","rowGroups","exportCols","_this59","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","genereateHeaderElement","genereateGroupElement","genereateCalcElement","genereateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","_this60","generator","_this61","cellWrapper","formatCells","formatExportValue","renderedCallback","lookup","color","fromStyle","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","filterType","tagType","attrType","filterChangeCheck","filterFunc","prevSuccess","emptyFunc","headerFilterFunc","headerFilterFuncParams","fieldVal","colVal","func","generateHeaderFilterElement","_this62","filterElement","editorElement","typingTimer","searchTrigger","headerElement","headerFilterEmptyCheck","headerFilterParams","hasAttribute","headerFilterLiveFilter","hasChanged","findFilter","findSubFilters","filtersToArray","_this63","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","_","filterVal","rowVal","filterParams","regex","like","keywords","separator","keyword","matchAll","starts","ends","endsWith","in","_in","Format","lookupFormatter","formatterPrint","formatterClipboard","formatterHtmlOutput","crossElement","formatters","plaintext","sanitizeHTML","entityMap","emptyToSpace","formatterParams","money","floatVal","integer","decimal","rgx","decimalSym","thousandSym","thousand","symbolAfter","urlPrefix","labelField","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","datetime","inputFormat","outputFormat","invalidPlaceholder","newDatetime","moment","timezone","tz","datetimediff","suffix","humanize","date","duration","starActive","starInactive","traffic","colors","percentValue","legendAlign","legend","legendColor","barEl","legendEl","buttonTick","buttonCross","rownum","responsiveCollapse","toggleList","isOpen","rowSelection","_this64","checkbox","registerRowSelectCheckbox","registerHeaderSelectCheckbox","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","scrollEndTimer","edge","frozenCheck","_this65","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","allCells","_this66","leftParents","parentEl","getColGroupParentElement","_this67","_i12","FrozenRows","styleRows","GroupComponent","getParentGroup","toggleVisibility","groupManager","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","groupList","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","initializeGroupHeader","_this68","allowedValues","_createGroup","toggleElement","initializeGroup","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","scrollHeader","removeGroup","getHeadersAndRows","noCalc","_visSet","compoment","getPath","addBindingsd","childNodes","GroupRows","langValue","lookupFunc","generateGroups","groupComponents","_this69","pullGroupListData","groupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","samePath","every","groupPath","groupId","History","undoers","redoers","cellEdit","rowAdd","newRow","_rebindRow","rowMove","oldRow","HtmlTableImport","fieldIndex","hasIndex","_extractOptions","_extractHeaders","_generateBlankHeaders","newElement","attributes","optionsArr","optionsList","attrib","_attribValue","_findCol","exists","textContent","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","mergedBindings","_key","mapBindings","bindEvents","_this70","_loop2","actions","mapBinding","symbolsList","ctrl","meta","symbols","code","checkBinding","ctrlKey","shiftKey","metaKey","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","keyBlock","newPos","scrollMax","navLeft","navRight","Menu","menuElements","blurEvent","hideMenu","escEvent","escMenu","nestedMenuBlock","positionReversedX","_this71","headerMenuEl","LoadMenuEvent","loadMenu","_this72","_this73","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","_i13","pop","_this74","docHeight","innerHeight","parentOffset","touches","pageX","pageY","menus","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","mousemove","which","startMove","bindTouchEvents","startXMove","prevColWidth","nextColWidthLast","prevColWidthLast","moveToCol","_bindMouseMove","_unbindMouseMove","movingCells","columnHolder","xPos","scrollPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","mouseup","tableRowDrop","previousSibling","startYMove","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","elementRowDrop","_this75","connectionTables","dropEvent","tabulatorElementDropEvent","connect","disconnect","dropComplete","sender","senders","receiver","receivers","fromTable","_delete","toTable","Mutator","enabled","lookupMutator","mutators","mutatorEdit","Page","initialLoad","pageSizes","dataReceivedNames","dataSentNames","pagesElement","firstBut","prevBut","nextBut","lastBut","pageSizeSelect","generatePageSizeSelectList","_this76","_i14","hidden","pageSelectLabel","testElRow","testElCell","paginationDataReceivedNames","trigger","_this77","_this78","_setPageButtons","leftSize","rightSize","_i15","_generatePageButton","_this79","_this80","_i16","_this81","_getRemotePage","_this82","oldParams","pageParams","_parseRemoteData","last_page","footer","current_page","Persistence","id","defWatcherBlock","readFunc","writeFunc","localStorageTest","testKey","localStorage","removeItem","retreivedData","readers","writers","retreiveData","getOwnPropertyDescriptor","set","get","oldCols","newCols","_findColumn","validateSorters","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","local","getItem","cookie","cookiePos","expireDate","setDate","getDate","toUTCString","Print","manualBlock","replaceTable","cleanup","scrollX","scrollY","footerEl","tableEl","footerContent","ReactiveData","origFuncs","currentVersion","version","enumerable","args","arg","apply","startRow","oldRows","watchKey","watchTreeChildren","childField","rebuildTree","unwatchRow","ResizeColumns","startColumn","startWidth","prevHandle","handleDown","nearestColumn","_checkResizability","_mouseDown","prevHandleDown","colIndex","resizable","mouseMove","mouseUp","ResizeRows","startHeight","screenY","ResizeTable","observer","containerObserver","tableHeight","containerHeight","containerWidth","_this83","tableStyle","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","formatCollapsedData","order","generateCollapsedContent","_iterator","_isArray","_i17","_ref","done","generateCollapsedRowContent","colCount","working","generateCollapsedRowData","mockCellComponent","titleData","valueData","node_content","titleHighlight","innerText","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","_rowSelectionChanged","endSelect","selected","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","_this84","rowMatch","rowInfo","checkboxEl","childRowSelection","_i18","selectedRow","_iterator2","_isArray2","_i19","_ref2","_iterator3","_isArray3","_i20","_ref3","_child","Sort","arrowEl","sorterParams","startingDir","headerSortStartingDir","newSortList","findSorter","sortListActual","rowComponents","clearColumnHeaders","sortObj","setColumnHeader","_sortItems","_this85","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","emptyAlign","string","localeCompare","time","boolean","array","calc","d","alphanum","as","bs","a1","b1","L","rx","rd","isFinite","Validate","invalidCells","_extractValidator","substring","_buildValidator","parameters","validators","invalidIndex","float","numeric","minLength","maxLength","reg","unique","cellData","ca","esca","pe","m","escape","es","ColumnDefinitionFactory","pool","horizontalAlign","headerComponent","formatHeader","_a","createFormatter","aggregator","getColumnAggregator","customElement","propsFactory","setElementProperties","formatCell","columnElementExists","createCustomComponent","isNativeElement","customElementExists","customElements","createResizeObserver","properties","negate","isEventListener","listeners","entries","getEventName","eventListener","RESIZE_TIMEOUT","COLUMN_PADDING","newWidth","createColumnSorter","isAggregatorFunction","ElementPool","isFree","usedElements","releaseAll","release","WeakMap","Selection","getDataByIndex","toggleRange","selectedItems","lowerBound","upperBound","updatedIndexes","updatedItems","lastToggledIndex","indexes","Set","toggleSelection","toggleSelectionFromLastIndex","LIMEL_CHECKBOX","getRowId","TableSelection","selectEvent","getTranslation","rowSelectorCellClick","ev","clickedRow","rowPosition","updateRowSelectors","emit","map","getRowData","changeSet","getRowByIndex","updateRowSelector","checkBox","getActiveRows","hasSelection","setSelection","newItems","oldItem","columnDefinitions","getRowSelectorColumnDefinition","getRowSelectorFormatter","mapLayout","layouts","stretchLastColumn","stretchColumns","lowDensity","areRowsEqual","newData","oldData","newItem","isEqual","tableCss","FIRST_PAGE","Table","hostRef","shouldSort","tabulator","getActiveRowsData","selectAllOnChange","selectAll","detail","newSelection","tableSelection","getColumnOptions","handleMoveColumn","components","Boolean","changeColumns","translate","handleDataSorting","handlePageLoaded","handleRenderComplete","handleAjaxRequesting","requestData","onClickRow","formatRow","formatRows","updateMaxPage","initTabulatorComponent","addColumnAggregator","columnFactory","componentWillLoad","firstRequest","initTableSelection","componentDidLoad","init","disconnectedCallback","totalRowsChanged","pageSizeChanged","pageChanged","activeRowChanged","newIds","getRowIds","oldIds","shouldReplace","shouldReplaceData","hasRowUpdates","updateColumns","newColumns","oldColumns","areSameColumns","columnsInTable","oldColumnsInTable","updateAggregates","newAggregates","oldAggregates","haveSameAggregateFields","updateSelection","updateSelectable","updateSortableColumns","updateSorting","newSorting","getColumnSorter","oldSorting","areEqualIds","isSameOrder","newIdSet","oldIdSet","oldAggregateFields","host","shadowRoot","TabulatorTable","getOptions","requestAnimationFrame","calculatePageCount","ajaxOptions","getAjaxOptions","paginationOptions","getPaginationOptions","columnOptions","getInitialSorting","currentSorting","sorting","toLocaleLowerCase","columnSortable","sortableColumns","aggregates","aggregate","isRemoteMode","remoteUrl","abortRequest","pageSize","__","currentPage","changePage","columnSorters","resolveExistingData","currentLoad","_ev","isActiveRow","activeRow","interactiveFeedbackElement","ownerDocument","activeRowId","total","totalRows","hasAggregation","some","render","h","Host","class","renderEmptyMessage","renderSelectAll","showSelectAll","_b","_c","showEmptyMessage","emptyMessage"],"sources":["./node_modules/lodash-es/_baseHas.js","./node_modules/lodash-es/has.js","./node_modules/lodash-es/_baseSet.js","./node_modules/lodash-es/_basePickBy.js","./node_modules/lodash-es/pickBy.js","./node_modules/tabulator-tables/dist/js/tabulator.es2015.js","./node_modules/html-escaper/esm/index.js","./src/components/table/columns.ts","./src/components/table/element-pool.ts","./src/components/table/selection.ts","./src/components/table/table-selection.ts","./src/components/table/layout.ts","./src/components/table/utils.ts","./src/components/table/table.scss?tag=limel-table&encapsulation=shadow","./src/components/table/table.tsx"],"sourcesContent":["/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport basePickBy from './_basePickBy.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n}\n\nexport default pickBy;\n","/* Tabulator v4.9.3 (c) Oliver Folkerd */\n\n'use strict';\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nif (!Array.prototype.findIndex) {\n\n\tObject.defineProperty(Array.prototype, 'findIndex', {\n\n\t\tvalue: function value(predicate) {\n\n\t\t\t// 1. Let O be ? ToObject(this value).\n\n\t\t\tif (this == null) {\n\n\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\n\t\t\t}\n\n\t\t\tvar o = Object(this);\n\n\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n\t\t\tvar len = o.length >>> 0;\n\n\t\t\t// 3. If IsCallable(predicate) is false, throw a TypeError exception.\n\n\t\t\tif (typeof predicate !== 'function') {\n\n\t\t\t\tthrow new TypeError('predicate must be a function');\n\t\t\t}\n\n\t\t\t// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n\n\t\t\tvar thisArg = arguments[1];\n\n\t\t\t// 5. Let k be 0.\n\n\t\t\tvar k = 0;\n\n\t\t\t// 6. Repeat, while k < len\n\n\t\t\twhile (k < len) {\n\n\t\t\t\t// a. Let Pk be ! ToString(k).\n\n\t\t\t\t// b. Let kValue be ? Get(O, Pk).\n\n\t\t\t\t// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n\n\t\t\t\t// d. If testResult is true, return k.\n\n\t\t\t\tvar kValue = o[k];\n\n\t\t\t\tif (predicate.call(thisArg, kValue, k, o)) {\n\n\t\t\t\t\treturn k;\n\t\t\t\t}\n\n\t\t\t\t// e. Increase k by 1.\n\n\t\t\t\tk++;\n\t\t\t}\n\n\t\t\t// 7. Return -1.\n\n\t\t\treturn -1;\n\t\t}\n\n\t});\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\n\nif (!Array.prototype.find) {\n\n\tObject.defineProperty(Array.prototype, 'find', {\n\n\t\tvalue: function value(predicate) {\n\n\t\t\t// 1. Let O be ? ToObject(this value).\n\n\t\t\tif (this == null) {\n\n\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\n\t\t\t}\n\n\t\t\tvar o = Object(this);\n\n\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n\t\t\tvar len = o.length >>> 0;\n\n\t\t\t// 3. If IsCallable(predicate) is false, throw a TypeError exception.\n\n\t\t\tif (typeof predicate !== 'function') {\n\n\t\t\t\tthrow new TypeError('predicate must be a function');\n\t\t\t}\n\n\t\t\t// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n\n\t\t\tvar thisArg = arguments[1];\n\n\t\t\t// 5. Let k be 0.\n\n\t\t\tvar k = 0;\n\n\t\t\t// 6. Repeat, while k < len\n\n\t\t\twhile (k < len) {\n\n\t\t\t\t// a. Let Pk be ! ToString(k).\n\n\t\t\t\t// b. Let kValue be ? Get(O, Pk).\n\n\t\t\t\t// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n\n\t\t\t\t// d. If testResult is true, return kValue.\n\n\t\t\t\tvar kValue = o[k];\n\n\t\t\t\tif (predicate.call(thisArg, kValue, k, o)) {\n\n\t\t\t\t\treturn kValue;\n\t\t\t\t}\n\n\t\t\t\t// e. Increase k by 1.\n\n\t\t\t\tk++;\n\t\t\t}\n\n\t\t\t// 7. Return undefined.\n\n\t\t\treturn undefined;\n\t\t}\n\n\t});\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill\n\nif (!String.prototype.includes) {\n\n\tString.prototype.includes = function (search, start) {\n\n\t\t'use strict';\n\n\t\tif (search instanceof RegExp) {\n\n\t\t\tthrow TypeError('first argument must not be a RegExp');\n\t\t}\n\n\t\tif (start === undefined) {\n\t\t\tstart = 0;\n\t\t}\n\n\t\treturn this.indexOf(search, start) !== -1;\n\t};\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n\nif (!Array.prototype.includes) {\n\n\tObject.defineProperty(Array.prototype, 'includes', {\n\n\t\tvalue: function value(searchElement, fromIndex) {\n\n\t\t\tif (this == null) {\n\n\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\n\t\t\t}\n\n\t\t\t// 1. Let O be ? ToObject(this value).\n\n\t\t\tvar o = Object(this);\n\n\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n\t\t\tvar len = o.length >>> 0;\n\n\t\t\t// 3. If len is 0, return false.\n\n\t\t\tif (len === 0) {\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// 4. Let n be ? ToInteger(fromIndex).\n\n\t\t\t// (If fromIndex is undefined, this step produces the value 0.)\n\n\t\t\tvar n = fromIndex | 0;\n\n\t\t\t// 5. If n ≥ 0, then\n\n\t\t\t// a. Let k be n.\n\n\t\t\t// 6. Else n < 0,\n\n\t\t\t// a. Let k be len + n.\n\n\t\t\t// b. If k < 0, let k be 0.\n\n\t\t\tvar k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n\t\t\tfunction sameValueZero(x, y) {\n\n\t\t\t\treturn x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n\t\t\t}\n\n\t\t\t// 7. Repeat, while k < len\n\n\t\t\twhile (k < len) {\n\n\t\t\t\t// a. Let elementK be the result of ? Get(O, ! ToString(k)).\n\n\t\t\t\t// b. If SameValueZero(searchElement, elementK) is true, return true.\n\n\t\t\t\tif (sameValueZero(o[k], searchElement)) {\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// c. Increase k by 1.\n\n\t\t\t\tk++;\n\t\t\t}\n\n\t\t\t// 8. Return false\n\n\t\t\treturn false;\n\t\t}\n\n\t});\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill\n\nif (typeof Object.assign !== 'function') {\n\n\t// Must be writable: true, enumerable: false, configurable: true\n\n\tObject.defineProperty(Object, \"assign\", {\n\n\t\tvalue: function assign(target, varArgs) {\n\t\t\t// .length of function is 2\n\n\t\t\t'use strict';\n\n\t\t\tif (target === null || target === undefined) {\n\n\t\t\t\tthrow new TypeError('Cannot convert undefined or null to object');\n\t\t\t}\n\n\t\t\tvar to = Object(target);\n\n\t\t\tfor (var index = 1; index < arguments.length; index++) {\n\n\t\t\t\tvar nextSource = arguments[index];\n\n\t\t\t\tif (nextSource !== null && nextSource !== undefined) {\n\n\t\t\t\t\tfor (var nextKey in nextSource) {\n\n\t\t\t\t\t\t// Avoid bugs when hasOwnProperty is shadowed\n\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n\n\t\t\t\t\t\t\tto[nextKey] = nextSource[nextKey];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn to;\n\t\t},\n\n\t\twritable: true,\n\n\t\tconfigurable: true\n\n\t});\n}\n\nvar ColumnManager = function ColumnManager(table) {\n\n\tthis.table = table; //hold parent table\n\n\tthis.blockHozScrollEvent = false;\n\n\tthis.headersElement = this.createHeadersElement();\n\n\tthis.element = this.createHeaderElement(); //containing element\n\n\tthis.rowManager = null; //hold row manager object\n\n\tthis.columns = []; // column definition object\n\n\tthis.columnsByIndex = []; //columns by index\n\n\tthis.columnsByField = {}; //columns by field\n\n\tthis.scrollLeft = 0;\n\n\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\n};\n\n////////////// Setup Functions /////////////////\n\n\nColumnManager.prototype.createHeadersElement = function () {\n\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-headers\");\n\n\treturn el;\n};\n\nColumnManager.prototype.createHeaderElement = function () {\n\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-header\");\n\n\tif (!this.table.options.headerVisible) {\n\n\t\tel.classList.add(\"tabulator-header-hidden\");\n\t}\n\n\treturn el;\n};\n\nColumnManager.prototype.initialize = function () {\n\n\tvar self = this;\n\n\t//scroll body along with header\n\n\t// self.element.addEventListener(\"scroll\", function(e){\n\n\t// \tif(!self.blockHozScrollEvent){\n\n\t// \t\tself.table.rowManager.scrollHorizontal(self.element.scrollLeft);\n\n\t// \t}\n\n\t// });\n};\n\n//link to row manager\n\nColumnManager.prototype.setRowManager = function (manager) {\n\n\tthis.rowManager = manager;\n};\n\n//return containing element\n\nColumnManager.prototype.getElement = function () {\n\n\treturn this.element;\n};\n\n//return header containing element\n\nColumnManager.prototype.getHeadersElement = function () {\n\n\treturn this.headersElement;\n};\n\n// ColumnManager.prototype.tempScrollBlock = function(){\n\n// \tclearTimeout(this.blockHozScrollEvent);\n\n// \tthis.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50);\n\n// }\n\n\n//scroll horizontally to match table body\n\nColumnManager.prototype.scrollHorizontal = function (left) {\n\n\tvar hozAdjust = 0,\n\t scrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\n\n\t// this.tempScrollBlock();\n\n\tthis.element.scrollLeft = left;\n\n\t//adjust for vertical scrollbar moving table when present\n\n\tif (left > scrollWidth) {\n\n\t\thozAdjust = left - scrollWidth;\n\n\t\tthis.element.style.marginLeft = -hozAdjust + \"px\";\n\t} else {\n\n\t\tthis.element.style.marginLeft = 0;\n\t}\n\n\t//keep frozen columns fixed in position\n\n\t//this._calcFrozenColumnsPos(hozAdjust + 3);\n\n\n\tthis.scrollLeft = left;\n\n\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\tthis.table.modules.frozenColumns.scrollHorizontal();\n\t}\n};\n\n///////////// Column Setup Functions /////////////\n\n\nColumnManager.prototype.generateColumnsFromRowData = function (data) {\n\n\tvar cols = [],\n\t definitions = this.table.options.autoColumnsDefinitions,\n\t row,\n\t sorter;\n\n\tif (data && data.length) {\n\n\t\trow = data[0];\n\n\t\tfor (var key in row) {\n\n\t\t\tvar col = {\n\n\t\t\t\tfield: key,\n\n\t\t\t\ttitle: key\n\n\t\t\t};\n\n\t\t\tvar value = row[key];\n\n\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\n\t\t\t\tcase \"undefined\":\n\n\t\t\t\t\tsorter = \"string\";\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\n\t\t\t\t\tsorter = \"boolean\";\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"object\":\n\n\t\t\t\t\tif (Array.isArray(value)) {\n\n\t\t\t\t\t\tsorter = \"array\";\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif (!isNaN(value) && value !== \"\") {\n\n\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {\n\n\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcol.sorter = sorter;\n\n\t\t\tcols.push(col);\n\t\t}\n\n\t\tif (definitions) {\n\n\t\t\tswitch (typeof definitions === 'undefined' ? 'undefined' : _typeof(definitions)) {\n\n\t\t\t\tcase \"function\":\n\n\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"object\":\n\n\t\t\t\t\tif (Array.isArray(definitions)) {\n\n\t\t\t\t\t\tcols.forEach(function (col) {\n\n\t\t\t\t\t\t\tvar match = definitions.find(function (def) {\n\n\t\t\t\t\t\t\t\treturn def.field === col.field;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t\t\tObject.assign(col, match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcols.forEach(function (col) {\n\n\t\t\t\t\t\t\tif (definitions[col.field]) {\n\n\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.table.options.columns = cols;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t} else {\n\n\t\t\tthis.table.options.columns = cols;\n\t\t}\n\n\t\tthis.setColumns(this.table.options.columns);\n\t}\n};\n\nColumnManager.prototype.setColumns = function (cols, row) {\n\n\tvar self = this;\n\n\twhile (self.headersElement.firstChild) {\n\t\tself.headersElement.removeChild(self.headersElement.firstChild);\n\t}self.columns = [];\n\n\tself.columnsByIndex = [];\n\n\tself.columnsByField = {};\n\n\t//reset frozen columns\n\n\tif (self.table.modExists(\"frozenColumns\")) {\n\n\t\tself.table.modules.frozenColumns.reset();\n\t}\n\n\tcols.forEach(function (def, i) {\n\n\t\tself._addColumn(def);\n\t});\n\n\tself._reIndexColumns();\n\n\tif (self.table.options.responsiveLayout && self.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tself.table.modules.responsiveLayout.initialize();\n\t}\n\n\tif (this.table.options.virtualDomHoz) {\n\n\t\tthis.table.vdomHoz.reinitialize(false, true);\n\t}\n\n\tself.redraw(true);\n};\n\nColumnManager.prototype._addColumn = function (definition, before, nextToColumn) {\n\n\tvar column = new Column(definition, this),\n\t colEl = column.getElement(),\n\t index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\n\n\tif (nextToColumn && index > -1) {\n\n\t\tvar parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());\n\n\t\tvar nextEl = nextToColumn.getElement();\n\n\t\tif (before) {\n\n\t\t\tthis.columns.splice(parentIndex, 0, column);\n\n\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\n\t\t} else {\n\n\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\n\n\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\n\t\t}\n\t} else {\n\n\t\tif (before) {\n\n\t\t\tthis.columns.unshift(column);\n\n\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\n\t\t} else {\n\n\t\t\tthis.columns.push(column);\n\n\t\t\tthis.headersElement.appendChild(column.getElement());\n\t\t}\n\n\t\tcolumn.columnRendered();\n\t}\n\n\treturn column;\n};\n\nColumnManager.prototype.registerColumnField = function (col) {\n\n\tif (col.definition.field) {\n\n\t\tthis.columnsByField[col.definition.field] = col;\n\t}\n};\n\nColumnManager.prototype.registerColumnPosition = function (col) {\n\n\tthis.columnsByIndex.push(col);\n};\n\nColumnManager.prototype._reIndexColumns = function () {\n\n\tthis.columnsByIndex = [];\n\n\tthis.columns.forEach(function (column) {\n\n\t\tcolumn.reRegisterPosition();\n\t});\n};\n\n//ensure column headers take up the correct amount of space in column groups\n\nColumnManager.prototype._verticalAlignHeaders = function () {\n\n\tvar self = this,\n\t minHeight = 0;\n\n\tself.columns.forEach(function (column) {\n\n\t\tvar height;\n\n\t\tcolumn.clearVerticalAlign();\n\n\t\theight = column.getHeight();\n\n\t\tif (height > minHeight) {\n\n\t\t\tminHeight = height;\n\t\t}\n\t});\n\n\tself.columns.forEach(function (column) {\n\n\t\tcolumn.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight);\n\t});\n\n\tself.rowManager.adjustTableSize();\n};\n\n//////////////// Column Details /////////////////\n\n\nColumnManager.prototype.findColumn = function (subject) {\n\n\tvar self = this;\n\n\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\tif (subject instanceof Column) {\n\n\t\t\t//subject is column element\n\n\t\t\treturn subject;\n\t\t} else if (subject instanceof ColumnComponent) {\n\n\t\t\t//subject is public column component\n\n\t\t\treturn subject._getSelf() || false;\n\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\n\t\t\t//subject is a HTML element of the column header\n\n\t\t\tvar match = self.columns.find(function (column) {\n\n\t\t\t\treturn column.element === subject;\n\t\t\t});\n\n\t\t\treturn match || false;\n\t\t}\n\t} else {\n\n\t\t//subject should be treated as the field name of the column\n\n\t\treturn this.columnsByField[subject] || false;\n\t}\n\n\t//catch all for any other type of input\n\n\n\treturn false;\n};\n\nColumnManager.prototype.getColumnByField = function (field) {\n\n\treturn this.columnsByField[field];\n};\n\nColumnManager.prototype.getColumnsByFieldRoot = function (root) {\n\tvar _this = this;\n\n\tvar matches = [];\n\n\tObject.keys(this.columnsByField).forEach(function (field) {\n\n\t\tvar fieldRoot = field.split(\".\")[0];\n\n\t\tif (fieldRoot === root) {\n\n\t\t\tmatches.push(_this.columnsByField[field]);\n\t\t}\n\t});\n\n\treturn matches;\n};\n\nColumnManager.prototype.getColumnByIndex = function (index) {\n\n\treturn this.columnsByIndex[index];\n};\n\nColumnManager.prototype.getFirstVisibileColumn = function (index) {\n\n\tvar index = this.columnsByIndex.findIndex(function (col) {\n\n\t\treturn col.visible;\n\t});\n\n\treturn index > -1 ? this.columnsByIndex[index] : false;\n};\n\nColumnManager.prototype.getColumns = function () {\n\n\treturn this.columns;\n};\n\nColumnManager.prototype.findColumnIndex = function (column) {\n\n\treturn this.columnsByIndex.findIndex(function (col) {\n\n\t\treturn column === col;\n\t});\n};\n\n//return all columns that are not groups\n\nColumnManager.prototype.getRealColumns = function () {\n\n\treturn this.columnsByIndex;\n};\n\n//travers across columns and call action\n\nColumnManager.prototype.traverse = function (callback) {\n\n\tvar self = this;\n\n\tself.columnsByIndex.forEach(function (column, i) {\n\n\t\tcallback(column, i);\n\t});\n};\n\n//get defintions of actual columns\n\nColumnManager.prototype.getDefinitions = function (active) {\n\n\tvar self = this,\n\t output = [];\n\n\tself.columnsByIndex.forEach(function (column) {\n\n\t\tif (!active || active && column.visible) {\n\n\t\t\toutput.push(column.getDefinition());\n\t\t}\n\t});\n\n\treturn output;\n};\n\n//get full nested definition tree\n\nColumnManager.prototype.getDefinitionTree = function () {\n\n\tvar self = this,\n\t output = [];\n\n\tself.columns.forEach(function (column) {\n\n\t\toutput.push(column.getDefinition(true));\n\t});\n\n\treturn output;\n};\n\nColumnManager.prototype.getComponents = function (structured) {\n\n\tvar self = this,\n\t output = [],\n\t columns = structured ? self.columns : self.columnsByIndex;\n\n\tcolumns.forEach(function (column) {\n\n\t\toutput.push(column.getComponent());\n\t});\n\n\treturn output;\n};\n\nColumnManager.prototype.getWidth = function () {\n\n\tvar width = 0;\n\n\tthis.columnsByIndex.forEach(function (column) {\n\n\t\tif (column.visible) {\n\n\t\t\twidth += column.getWidth();\n\t\t}\n\t});\n\n\treturn width;\n};\n\nColumnManager.prototype.moveColumn = function (from, to, after) {\n\n\tthis.moveColumnActual(from, to, after);\n\n\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tthis.table.modules.responsiveLayout.initialize();\n\t}\n\n\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t}\n\n\tto.element.parentNode.insertBefore(from.element, to.element);\n\n\tif (after) {\n\n\t\tto.element.parentNode.insertBefore(to.element, from.element);\n\t}\n\n\tthis._verticalAlignHeaders();\n\n\tthis.table.rowManager.reinitialize();\n};\n\nColumnManager.prototype.moveColumnActual = function (from, to, after) {\n\n\tif (from.parent.isGroup) {\n\n\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\n\t} else {\n\n\t\tthis._moveColumnInArray(this.columns, from, to, after);\n\t}\n\n\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\n\n\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tthis.table.modules.responsiveLayout.initialize();\n\t}\n\n\tif (this.table.options.virtualDomHoz) {\n\n\t\tthis.table.vdomHoz.reinitialize(true);\n\t}\n\n\tif (this.table.options.columnMoved) {\n\n\t\tthis.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());\n\t}\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\tthis.table.modules.persistence.save(\"columns\");\n\t}\n};\n\nColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) {\n\tvar _this2 = this;\n\n\tvar fromIndex = columns.indexOf(from),\n\t toIndex,\n\t rows = [];\n\n\tif (fromIndex > -1) {\n\n\t\tcolumns.splice(fromIndex, 1);\n\n\t\ttoIndex = columns.indexOf(to);\n\n\t\tif (toIndex > -1) {\n\n\t\t\tif (after) {\n\n\t\t\t\ttoIndex = toIndex + 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\ttoIndex = fromIndex;\n\t\t}\n\n\t\tcolumns.splice(toIndex, 0, from);\n\n\t\tif (updateRows) {\n\n\t\t\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\", true)) {\n\n\t\t\t\tthis.table.rowManager.rows.forEach(function (row) {\n\n\t\t\t\t\trows = rows.concat(_this2.table.modules.dataTree.getTreeChildren(row, false, true));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\trows = rows.concat(this.table.rowManager.rows);\n\n\t\t\trows.forEach(function (row) {\n\n\t\t\t\tif (row.cells.length) {\n\n\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\n\n\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n};\n\nColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) {\n\tvar _this3 = this;\n\n\tvar left = 0,\n\t offset = 0,\n\t adjust = 0,\n\t colEl = column.getElement();\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tif (typeof position === \"undefined\") {\n\n\t\t\tposition = _this3.table.options.scrollToColumnPosition;\n\t\t}\n\n\t\tif (typeof ifVisible === \"undefined\") {\n\n\t\t\tifVisible = _this3.table.options.scrollToColumnIfVisible;\n\t\t}\n\n\t\tif (column.visible) {\n\n\t\t\t//align to correct position\n\n\t\t\tswitch (position) {\n\n\t\t\t\tcase \"middle\":\n\n\t\t\t\tcase \"center\":\n\n\t\t\t\t\tadjust = -_this3.element.clientWidth / 2;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"right\":\n\n\t\t\t\t\tadjust = colEl.clientWidth - _this3.headersElement.clientWidth;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t//check column visibility\n\n\t\t\tif (!ifVisible) {\n\n\t\t\t\toffset = colEl.offsetLeft;\n\n\t\t\t\tif (offset > 0 && offset + colEl.offsetWidth < _this3.element.clientWidth) {\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//calculate scroll position\n\n\t\t\tleft = colEl.offsetLeft + adjust;\n\n\t\t\tleft = Math.max(Math.min(left, _this3.table.rowManager.element.scrollWidth - _this3.table.rowManager.element.clientWidth), 0);\n\n\t\t\t_this3.table.rowManager.scrollHorizontal(left);\n\n\t\t\t_this3.scrollHorizontal(left);\n\n\t\t\tresolve();\n\t\t} else {\n\n\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\n\n\t\t\treject(\"Scroll Error - Column not visible\");\n\t\t}\n\t});\n};\n\n//////////////// Cell Management /////////////////\n\n\nColumnManager.prototype.generateCells = function (row) {\n\n\tvar self = this;\n\n\tvar cells = [];\n\n\tself.columnsByIndex.forEach(function (column) {\n\n\t\tcells.push(column.generateCell(row));\n\t});\n\n\treturn cells;\n};\n\n//////////////// Column Management /////////////////\n\n\nColumnManager.prototype.getFlexBaseWidth = function () {\n\n\tvar self = this,\n\t totalWidth = self.table.element.clientWidth,\n\t //table element width\n\n\tfixedWidth = 0;\n\n\t//adjust for vertical scrollbar if present\n\n\tif (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) {\n\n\t\ttotalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth;\n\t}\n\n\tthis.columnsByIndex.forEach(function (column) {\n\n\t\tvar width, minWidth, colWidth;\n\n\t\tif (column.visible) {\n\n\t\t\twidth = column.definition.width || 0;\n\n\t\t\tminWidth = typeof column.minWidth == \"undefined\" ? self.table.options.columnMinWidth : parseInt(column.minWidth);\n\n\t\t\tif (typeof width == \"string\") {\n\n\t\t\t\tif (width.indexOf(\"%\") > -1) {\n\n\t\t\t\t\tcolWidth = totalWidth / 100 * parseInt(width);\n\t\t\t\t} else {\n\n\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tcolWidth = width;\n\t\t\t}\n\n\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\t\t}\n\t});\n\n\treturn fixedWidth;\n};\n\nColumnManager.prototype.addColumn = function (definition, before, nextToColumn) {\n\tvar _this4 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tvar column = _this4._addColumn(definition, before, nextToColumn);\n\n\t\t_this4._reIndexColumns();\n\n\t\tif (_this4.table.options.responsiveLayout && _this4.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t_this4.table.modules.responsiveLayout.initialize();\n\t\t}\n\n\t\tif (_this4.table.modExists(\"columnCalcs\")) {\n\n\t\t\t_this4.table.modules.columnCalcs.recalc(_this4.table.rowManager.activeRows);\n\t\t}\n\n\t\t_this4.redraw(true);\n\n\t\tif (_this4.table.modules.layout.getMode() != \"fitColumns\") {\n\n\t\t\tcolumn.reinitializeWidth();\n\t\t}\n\n\t\t_this4._verticalAlignHeaders();\n\n\t\t_this4.table.rowManager.reinitialize();\n\n\t\tif (_this4.table.options.virtualDomHoz) {\n\n\t\t\t_this4.table.vdomHoz.reinitialize();\n\t\t}\n\n\t\tresolve(column);\n\t});\n};\n\n//remove column from system\n\nColumnManager.prototype.deregisterColumn = function (column) {\n\n\tvar field = column.getField(),\n\t index;\n\n\t//remove from field list\n\n\tif (field) {\n\n\t\tdelete this.columnsByField[field];\n\t}\n\n\t//remove from index list\n\n\tindex = this.columnsByIndex.indexOf(column);\n\n\tif (index > -1) {\n\n\t\tthis.columnsByIndex.splice(index, 1);\n\t}\n\n\t//remove from column list\n\n\tindex = this.columns.indexOf(column);\n\n\tif (index > -1) {\n\n\t\tthis.columns.splice(index, 1);\n\t}\n\n\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tthis.table.modules.responsiveLayout.initialize();\n\t}\n\n\tthis._verticalAlignHeaders();\n\n\tthis.redraw();\n};\n\n//redraw columns\n\nColumnManager.prototype.redraw = function (force) {\n\n\tif (force) {\n\n\t\tif (Tabulator.prototype.helpers.elVisible(this.element)) {\n\n\t\t\tthis._verticalAlignHeaders();\n\t\t}\n\n\t\tthis.table.rowManager.resetScroll();\n\n\t\tthis.table.rowManager.reinitialize();\n\t}\n\n\tif ([\"fitColumns\", \"fitDataStretch\"].indexOf(this.table.modules.layout.getMode()) > -1) {\n\n\t\tthis.table.modules.layout.layout();\n\t} else {\n\n\t\tif (force) {\n\n\t\t\tthis.table.modules.layout.layout();\n\t\t} else {\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\tthis.table.modules.frozenColumns.layout();\n\t}\n\n\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t}\n\n\tif (force) {\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\t\tthis.table.modules.columnCalcs.redraw();\n\t\t}\n\t}\n\n\tthis.table.footerManager.redraw();\n};\n\n//public column object\nvar ColumnComponent = function ColumnComponent(column) {\n\tthis._column = column;\n\tthis.type = \"ColumnComponent\";\n};\n\nColumnComponent.prototype.getElement = function () {\n\treturn this._column.getElement();\n};\n\nColumnComponent.prototype.getDefinition = function () {\n\treturn this._column.getDefinition();\n};\n\nColumnComponent.prototype.getField = function () {\n\treturn this._column.getField();\n};\n\nColumnComponent.prototype.getCells = function () {\n\tvar cells = [];\n\n\tthis._column.cells.forEach(function (cell) {\n\t\tcells.push(cell.getComponent());\n\t});\n\n\treturn cells;\n};\n\nColumnComponent.prototype.getVisibility = function () {\n\tconsole.warn(\"getVisibility function is deprecated, you should now use the isVisible function\");\n\treturn this._column.visible;\n};\n\nColumnComponent.prototype.isVisible = function () {\n\treturn this._column.visible;\n};\n\nColumnComponent.prototype.show = function () {\n\tif (this._column.isGroup) {\n\t\tthis._column.columns.forEach(function (column) {\n\t\t\tcolumn.show();\n\t\t});\n\t} else {\n\t\tthis._column.show();\n\t}\n};\n\nColumnComponent.prototype.hide = function () {\n\tif (this._column.isGroup) {\n\t\tthis._column.columns.forEach(function (column) {\n\t\t\tcolumn.hide();\n\t\t});\n\t} else {\n\t\tthis._column.hide();\n\t}\n};\n\nColumnComponent.prototype.toggle = function () {\n\tif (this._column.visible) {\n\t\tthis.hide();\n\t} else {\n\t\tthis.show();\n\t}\n};\n\nColumnComponent.prototype.delete = function () {\n\treturn this._column.delete();\n};\n\nColumnComponent.prototype.getSubColumns = function () {\n\tvar output = [];\n\n\tif (this._column.columns.length) {\n\t\tthis._column.columns.forEach(function (column) {\n\t\t\toutput.push(column.getComponent());\n\t\t});\n\t}\n\n\treturn output;\n};\n\nColumnComponent.prototype.getParentColumn = function () {\n\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\n};\n\nColumnComponent.prototype._getSelf = function () {\n\treturn this._column;\n};\n\nColumnComponent.prototype.scrollTo = function () {\n\treturn this._column.table.columnManager.scrollToColumn(this._column);\n};\n\nColumnComponent.prototype.getTable = function () {\n\treturn this._column.table;\n};\n\nColumnComponent.prototype.headerFilterFocus = function () {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\tthis._column.table.modules.filter.setHeaderFilterFocus(this._column);\n\t}\n};\n\nColumnComponent.prototype.reloadHeaderFilter = function () {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\tthis._column.table.modules.filter.reloadHeaderFilter(this._column);\n\t}\n};\n\nColumnComponent.prototype.getHeaderFilterValue = function () {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\treturn this._column.table.modules.filter.getHeaderFilterValue(this._column);\n\t}\n};\n\nColumnComponent.prototype.setHeaderFilterValue = function (value) {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\tthis._column.table.modules.filter.setHeaderFilterValue(this._column, value);\n\t}\n};\n\nColumnComponent.prototype.move = function (to, after) {\n\tvar toColumn = this._column.table.columnManager.findColumn(to);\n\n\tif (toColumn) {\n\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after);\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t}\n};\n\nColumnComponent.prototype.getNextColumn = function () {\n\tvar nextCol = this._column.nextColumn();\n\n\treturn nextCol ? nextCol.getComponent() : false;\n};\n\nColumnComponent.prototype.getPrevColumn = function () {\n\tvar prevCol = this._column.prevColumn();\n\n\treturn prevCol ? prevCol.getComponent() : false;\n};\n\nColumnComponent.prototype.updateDefinition = function (updates) {\n\treturn this._column.updateDefinition(updates);\n};\n\nColumnComponent.prototype.getWidth = function () {\n\treturn this._column.getWidth();\n};\n\nColumnComponent.prototype.setWidth = function (width) {\n\tvar result;\n\n\tif (width === true) {\n\t\tresult = this._column.reinitializeWidth(true);\n\t} else {\n\t\tresult = this._column.setWidth(width);\n\t}\n\n\tif (this._column.table.options.virtualDomHoz) {\n\t\tthis._column.table.vdomHoz.reinitialize(true);\n\t}\n\n\treturn result;\n};\n\nColumnComponent.prototype.validate = function () {\n\treturn this._column.validate();\n};\n\nvar Column = function Column(def, parent) {\n\tvar self = this;\n\n\tthis.table = parent.table;\n\tthis.definition = def; //column definition\n\tthis.parent = parent; //hold parent object\n\tthis.type = \"column\"; //type of element\n\tthis.columns = []; //child columns\n\tthis.cells = []; //cells bound to this column\n\tthis.element = this.createElement(); //column header element\n\tthis.contentElement = false;\n\tthis.titleHolderElement = false;\n\tthis.titleElement = false;\n\tthis.groupElement = this.createGroupElement(); //column group holder element\n\tthis.isGroup = false;\n\tthis.tooltip = false; //hold column tooltip\n\tthis.hozAlign = \"\"; //horizontal text alignment\n\tthis.vertAlign = \"\"; //vert text alignment\n\n\t//multi dimensional filed handling\n\tthis.field = \"\";\n\tthis.fieldStructure = \"\";\n\tthis.getFieldValue = \"\";\n\tthis.setFieldValue = \"\";\n\n\tthis.titleFormatterRendered = false;\n\n\tthis.setField(this.definition.field);\n\n\tif (this.table.options.invalidOptionWarnings) {\n\t\tthis.checkDefinition();\n\t}\n\n\tthis.modules = {}; //hold module variables;\n\n\tthis.cellEvents = {\n\t\tcellClick: false,\n\t\tcellDblClick: false,\n\t\tcellContext: false,\n\t\tcellTap: false,\n\t\tcellDblTap: false,\n\t\tcellTapHold: false,\n\t\tcellMouseEnter: false,\n\t\tcellMouseLeave: false,\n\t\tcellMouseOver: false,\n\t\tcellMouseOut: false,\n\t\tcellMouseMove: false\n\t};\n\n\tthis.width = null; //column width\n\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\n\tthis.maxWidth = null; //column maximum width\n\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\n\tthis.minWidth = null; //column minimum width\n\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\n\tthis.widthFixed = false; //user has specified a width for this column\n\n\tthis.visible = true; //default visible state\n\n\tthis.component = null;\n\n\tthis._mapDepricatedFunctionality();\n\n\t//initialize column\n\tif (def.columns) {\n\n\t\tthis.isGroup = true;\n\n\t\tdef.columns.forEach(function (def, i) {\n\t\t\tvar newCol = new Column(def, self);\n\t\t\tself.attachColumn(newCol);\n\t\t});\n\n\t\tself.checkColumnVisibility();\n\t} else {\n\t\tparent.registerColumnField(this);\n\t}\n\n\tif (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")) {\n\t\tthis.table.modules.moveRow.setHandle(true);\n\t}\n\n\tthis._buildHeader();\n\n\tthis.bindModuleColumns();\n};\n\nColumn.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-col\");\n\tel.setAttribute(\"role\", \"columnheader\");\n\tel.setAttribute(\"aria-sort\", \"none\");\n\n\treturn el;\n};\n\nColumn.prototype.createGroupElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-col-group-cols\");\n\n\treturn el;\n};\n\nColumn.prototype.checkDefinition = function () {\n\tvar _this5 = this;\n\n\tObject.keys(this.definition).forEach(function (key) {\n\t\tif (_this5.defaultOptionList.indexOf(key) === -1) {\n\t\t\tconsole.warn(\"Invalid column definition option in '\" + (_this5.field || _this5.definition.title) + \"' column:\", key);\n\t\t}\n\t});\n};\n\nColumn.prototype.setField = function (field) {\n\tthis.field = field;\n\tthis.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : [];\n\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\n\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\n};\n\n//register column position with column manager\nColumn.prototype.registerColumnPosition = function (column) {\n\tthis.parent.registerColumnPosition(column);\n};\n\n//register column position with column manager\nColumn.prototype.registerColumnField = function (column) {\n\tthis.parent.registerColumnField(column);\n};\n\n//trigger position registration\nColumn.prototype.reRegisterPosition = function () {\n\tif (this.isGroup) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tcolumn.reRegisterPosition();\n\t\t});\n\t} else {\n\t\tthis.registerColumnPosition(this);\n\t}\n};\n\nColumn.prototype._mapDepricatedFunctionality = function () {\n\tif (typeof this.definition.hideInHtml !== \"undefined\") {\n\t\tthis.definition.htmlOutput = !this.definition.hideInHtml;\n\t\tconsole.warn(\"hideInHtml column definition property is deprecated, you should now use htmlOutput\");\n\t}\n\n\tif (typeof this.definition.align !== \"undefined\") {\n\t\tthis.definition.hozAlign = this.definition.align;\n\t\tconsole.warn(\"align column definition property is deprecated, you should now use hozAlign\");\n\t}\n\n\tif (typeof this.definition.downloadTitle !== \"undefined\") {\n\t\tthis.definition.titleDownload = this.definition.downloadTitle;\n\t\tconsole.warn(\"downloadTitle definition property is deprecated, you should now use titleDownload\");\n\t}\n};\n\nColumn.prototype.setTooltip = function () {\n\tvar self = this,\n\t def = self.definition;\n\n\t//set header tooltips\n\tvar tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader;\n\n\tif (tooltip) {\n\t\tif (tooltip === true) {\n\t\t\tif (def.field) {\n\t\t\t\tself.table.modules.localize.bind(\"columns|\" + def.field, function (value) {\n\t\t\t\t\tself.element.setAttribute(\"title\", value || def.title);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.element.setAttribute(\"title\", def.title);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof tooltip == \"function\") {\n\t\t\t\ttooltip = tooltip(self.getComponent());\n\n\t\t\t\tif (tooltip === false) {\n\t\t\t\t\ttooltip = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.element.setAttribute(\"title\", tooltip);\n\t\t}\n\t} else {\n\t\tself.element.setAttribute(\"title\", \"\");\n\t}\n};\n\n//build header element\nColumn.prototype._buildHeader = function () {\n\tvar self = this,\n\t def = self.definition;\n\n\twhile (self.element.firstChild) {\n\t\tself.element.removeChild(self.element.firstChild);\n\t}if (def.headerVertical) {\n\t\tself.element.classList.add(\"tabulator-col-vertical\");\n\n\t\tif (def.headerVertical === \"flip\") {\n\t\t\tself.element.classList.add(\"tabulator-col-vertical-flip\");\n\t\t}\n\t}\n\n\tself.contentElement = self._bindEvents();\n\n\tself.contentElement = self._buildColumnHeaderContent();\n\n\tself.element.appendChild(self.contentElement);\n\n\tif (self.isGroup) {\n\t\tself._buildGroupHeader();\n\t} else {\n\t\tself._buildColumnHeader();\n\t}\n\n\tself.setTooltip();\n\n\t//set resizable handles\n\tif (self.table.options.resizableColumns && self.table.modExists(\"resizeColumns\")) {\n\t\tself.table.modules.resizeColumns.initializeColumn(\"header\", self, self.element);\n\t}\n\n\t//set resizable handles\n\tif (def.headerFilter && self.table.modExists(\"filter\") && self.table.modExists(\"edit\")) {\n\t\tif (typeof def.headerFilterPlaceholder !== \"undefined\" && def.field) {\n\t\t\tself.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\n\t\t}\n\n\t\tself.table.modules.filter.initializeColumn(self);\n\t}\n\n\t//set resizable handles\n\tif (self.table.modExists(\"frozenColumns\")) {\n\t\tself.table.modules.frozenColumns.initializeColumn(self);\n\t}\n\n\t//set movable column\n\tif (self.table.options.movableColumns && !self.isGroup && self.table.modExists(\"moveColumn\")) {\n\t\tself.table.modules.moveColumn.initializeColumn(self);\n\t}\n\n\t//set calcs column\n\tif ((def.topCalc || def.bottomCalc) && self.table.modExists(\"columnCalcs\")) {\n\t\tself.table.modules.columnCalcs.initializeColumn(self);\n\t}\n\n\t//handle persistence\n\tif (self.table.modExists(\"persistence\") && self.table.modules.persistence.config.columns) {\n\t\tself.table.modules.persistence.initializeColumn(self);\n\t}\n\n\t//update header tooltip on mouse enter\n\tself.element.addEventListener(\"mouseenter\", function (e) {\n\t\tself.setTooltip();\n\t});\n};\n\nColumn.prototype._bindEvents = function () {\n\n\tvar self = this,\n\t def = self.definition,\n\t dblTap,\n\t tapHold,\n\t tap;\n\n\t//setup header click event bindings\n\tif (typeof def.headerClick == \"function\") {\n\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\tdef.headerClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (typeof def.headerDblClick == \"function\") {\n\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\tdef.headerDblClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (typeof def.headerContext == \"function\") {\n\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\tdef.headerContext(e, self.getComponent());\n\t\t});\n\t}\n\n\t//setup header tap event bindings\n\tif (typeof def.headerTap == \"function\") {\n\t\ttap = false;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tdef.headerTap(e, self.getComponent());\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (typeof def.headerDblTap == \"function\") {\n\t\tdblTap = null;\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tdef.headerDblTap(e, self.getComponent());\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (typeof def.headerTapHold == \"function\") {\n\t\ttapHold = null;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tdef.headerTapHold(e, self.getComponent());\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n\n\t//store column cell click event bindings\n\tif (typeof def.cellClick == \"function\") {\n\t\tself.cellEvents.cellClick = def.cellClick;\n\t}\n\n\tif (typeof def.cellDblClick == \"function\") {\n\t\tself.cellEvents.cellDblClick = def.cellDblClick;\n\t}\n\n\tif (typeof def.cellContext == \"function\") {\n\t\tself.cellEvents.cellContext = def.cellContext;\n\t}\n\n\t//store column mouse event bindings\n\tif (typeof def.cellMouseEnter == \"function\") {\n\t\tself.cellEvents.cellMouseEnter = def.cellMouseEnter;\n\t}\n\n\tif (typeof def.cellMouseLeave == \"function\") {\n\t\tself.cellEvents.cellMouseLeave = def.cellMouseLeave;\n\t}\n\n\tif (typeof def.cellMouseOver == \"function\") {\n\t\tself.cellEvents.cellMouseOver = def.cellMouseOver;\n\t}\n\n\tif (typeof def.cellMouseOut == \"function\") {\n\t\tself.cellEvents.cellMouseOut = def.cellMouseOut;\n\t}\n\n\tif (typeof def.cellMouseMove == \"function\") {\n\t\tself.cellEvents.cellMouseMove = def.cellMouseMove;\n\t}\n\n\t//setup column cell tap event bindings\n\tif (typeof def.cellTap == \"function\") {\n\t\tself.cellEvents.cellTap = def.cellTap;\n\t}\n\n\tif (typeof def.cellDblTap == \"function\") {\n\t\tself.cellEvents.cellDblTap = def.cellDblTap;\n\t}\n\n\tif (typeof def.cellTapHold == \"function\") {\n\t\tself.cellEvents.cellTapHold = def.cellTapHold;\n\t}\n\n\t//setup column cell edit callbacks\n\tif (typeof def.cellEdited == \"function\") {\n\t\tself.cellEvents.cellEdited = def.cellEdited;\n\t}\n\n\tif (typeof def.cellEditing == \"function\") {\n\t\tself.cellEvents.cellEditing = def.cellEditing;\n\t}\n\n\tif (typeof def.cellEditCancelled == \"function\") {\n\t\tself.cellEvents.cellEditCancelled = def.cellEditCancelled;\n\t}\n};\n\n//build header element for header\nColumn.prototype._buildColumnHeader = function () {\n\tvar _this6 = this;\n\n\tvar def = this.definition,\n\t table = this.table,\n\t sortable;\n\n\t//set column sorter\n\tif (table.modExists(\"sort\")) {\n\t\ttable.modules.sort.initializeColumn(this, this.titleHolderElement);\n\t}\n\n\t//set column header context menu\n\tif ((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists(\"menu\")) {\n\t\ttable.modules.menu.initializeColumnHeader(this);\n\t}\n\n\t//set column formatter\n\tif (table.modExists(\"format\")) {\n\t\ttable.modules.format.initializeColumn(this);\n\t}\n\n\t//set column editor\n\tif (typeof def.editor != \"undefined\" && table.modExists(\"edit\")) {\n\t\ttable.modules.edit.initializeColumn(this);\n\t}\n\n\t//set colum validator\n\tif (typeof def.validator != \"undefined\" && table.modExists(\"validate\")) {\n\t\ttable.modules.validate.initializeColumn(this);\n\t}\n\n\t//set column mutator\n\tif (table.modExists(\"mutator\")) {\n\t\ttable.modules.mutator.initializeColumn(this);\n\t}\n\n\t//set column accessor\n\tif (table.modExists(\"accessor\")) {\n\t\ttable.modules.accessor.initializeColumn(this);\n\t}\n\n\t//set respoviveLayout\n\tif (_typeof(table.options.responsiveLayout) && table.modExists(\"responsiveLayout\")) {\n\t\ttable.modules.responsiveLayout.initializeColumn(this);\n\t}\n\n\t//set column visibility\n\tif (typeof def.visible != \"undefined\") {\n\t\tif (def.visible) {\n\t\t\tthis.show(true);\n\t\t} else {\n\t\t\tthis.hide(true);\n\t\t}\n\t}\n\n\t//asign additional css classes to column header\n\tif (def.cssClass) {\n\t\tvar classeNames = def.cssClass.split(\" \");\n\t\tclasseNames.forEach(function (className) {\n\t\t\t_this6.element.classList.add(className);\n\t\t});\n\t}\n\n\tif (def.field) {\n\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\n\t}\n\n\t//set min width if present\n\tthis.setMinWidth(typeof def.minWidth == \"undefined\" ? this.table.options.columnMinWidth : parseInt(def.minWidth));\n\n\tif (def.maxWidth || this.table.options.columnMaxWidth) {\n\t\tif (def.maxWidth !== false) {\n\t\t\tthis.setMaxWidth(typeof def.maxWidth == \"undefined\" ? this.table.options.columnMaxWidth : parseInt(def.maxWidth));\n\t\t}\n\t}\n\n\tthis.reinitializeWidth();\n\n\t//set tooltip if present\n\tthis.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips;\n\n\t//set orizontal text alignment\n\tthis.hozAlign = typeof this.definition.hozAlign == \"undefined\" ? this.table.options.cellHozAlign : this.definition.hozAlign;\n\tthis.vertAlign = typeof this.definition.vertAlign == \"undefined\" ? this.table.options.cellVertAlign : this.definition.vertAlign;\n\n\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\n};\n\nColumn.prototype._buildColumnHeaderContent = function () {\n\tvar def = this.definition,\n\t table = this.table;\n\n\tvar contentElement = document.createElement(\"div\");\n\tcontentElement.classList.add(\"tabulator-col-content\");\n\n\tthis.titleHolderElement = document.createElement(\"div\");\n\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\n\n\tcontentElement.appendChild(this.titleHolderElement);\n\n\tthis.titleElement = this._buildColumnHeaderTitle();\n\n\tthis.titleHolderElement.appendChild(this.titleElement);\n\n\treturn contentElement;\n};\n\n//build title element of column\nColumn.prototype._buildColumnHeaderTitle = function () {\n\tvar self = this,\n\t def = self.definition,\n\t table = self.table,\n\t title;\n\n\tvar titleHolderElement = document.createElement(\"div\");\n\ttitleHolderElement.classList.add(\"tabulator-col-title\");\n\n\tif (def.editableTitle) {\n\t\tvar titleElement = document.createElement(\"input\");\n\t\ttitleElement.classList.add(\"tabulator-title-editor\");\n\n\t\ttitleElement.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t\ttitleElement.focus();\n\t\t});\n\n\t\ttitleElement.addEventListener(\"change\", function () {\n\t\t\tdef.title = titleElement.value;\n\t\t\ttable.options.columnTitleChanged.call(self.table, self.getComponent());\n\t\t});\n\n\t\ttitleHolderElement.appendChild(titleElement);\n\n\t\tif (def.field) {\n\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, function (text) {\n\t\t\t\ttitleElement.value = text || def.title || \" \";\n\t\t\t});\n\t\t} else {\n\t\t\ttitleElement.value = def.title || \" \";\n\t\t}\n\t} else {\n\t\tif (def.field) {\n\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, function (text) {\n\t\t\t\tself._formatColumnHeaderTitle(titleHolderElement, text || def.title || \" \");\n\t\t\t});\n\t\t} else {\n\t\t\tself._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\n\t\t}\n\t}\n\n\treturn titleHolderElement;\n};\n\nColumn.prototype._formatColumnHeaderTitle = function (el, title) {\n\tvar _this7 = this;\n\n\tvar formatter, contents, params, mockCell, onRendered;\n\n\tif (this.definition.titleFormatter && this.table.modExists(\"format\")) {\n\n\t\tformatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);\n\n\t\tonRendered = function onRendered(callback) {\n\t\t\t_this7.titleFormatterRendered = callback;\n\t\t};\n\n\t\tmockCell = {\n\t\t\tgetValue: function getValue() {\n\t\t\t\treturn title;\n\t\t\t},\n\t\t\tgetElement: function getElement() {\n\t\t\t\treturn el;\n\t\t\t}\n\t\t};\n\n\t\tparams = this.definition.titleFormatterParams || {};\n\n\t\tparams = typeof params === \"function\" ? params() : params;\n\n\t\tcontents = formatter.call(this.table.modules.format, mockCell, params, onRendered);\n\n\t\tswitch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) {\n\t\t\tcase \"object\":\n\t\t\t\tif (contents instanceof Node) {\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t} else {\n\t\t\t\t\tel.innerHTML = \"\";\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\tcase \"null\":\n\t\t\t\tel.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tel.innerHTML = contents;\n\t\t}\n\t} else {\n\t\tel.innerHTML = title;\n\t}\n};\n\n//build header element for column group\nColumn.prototype._buildGroupHeader = function () {\n\tvar _this8 = this;\n\n\tthis.element.classList.add(\"tabulator-col-group\");\n\tthis.element.setAttribute(\"role\", \"columngroup\");\n\tthis.element.setAttribute(\"aria-title\", this.definition.title);\n\n\t//asign additional css classes to column header\n\tif (this.definition.cssClass) {\n\t\tvar classeNames = this.definition.cssClass.split(\" \");\n\t\tclasseNames.forEach(function (className) {\n\t\t\t_this8.element.classList.add(className);\n\t\t});\n\t}\n\n\t//set column header context menu\n\tif ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists(\"menu\")) {\n\t\tthis.table.modules.menu.initializeColumnHeader(this);\n\t}\n\n\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\n\n\tthis.element.appendChild(this.groupElement);\n};\n\n//flat field lookup\nColumn.prototype._getFlatData = function (data) {\n\treturn data[this.field];\n};\n\n//nested field lookup\nColumn.prototype._getNestedData = function (data) {\n\tvar dataObj = data,\n\t structure = this.fieldStructure,\n\t length = structure.length,\n\t output;\n\n\tfor (var _i = 0; _i < length; _i++) {\n\n\t\tdataObj = dataObj[structure[_i]];\n\n\t\toutput = dataObj;\n\n\t\tif (!dataObj) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn output;\n};\n\n//flat field set\nColumn.prototype._setFlatData = function (data, value) {\n\tif (this.field) {\n\t\tdata[this.field] = value;\n\t}\n};\n\n//nested field set\nColumn.prototype._setNestedData = function (data, value) {\n\tvar dataObj = data,\n\t structure = this.fieldStructure,\n\t length = structure.length;\n\n\tfor (var _i2 = 0; _i2 < length; _i2++) {\n\n\t\tif (_i2 == length - 1) {\n\t\t\tdataObj[structure[_i2]] = value;\n\t\t} else {\n\t\t\tif (!dataObj[structure[_i2]]) {\n\t\t\t\tif (typeof value !== \"undefined\") {\n\t\t\t\t\tdataObj[structure[_i2]] = {};\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdataObj = dataObj[structure[_i2]];\n\t\t}\n\t}\n};\n\n//attach column to this group\nColumn.prototype.attachColumn = function (column) {\n\tvar self = this;\n\n\tif (self.groupElement) {\n\t\tself.columns.push(column);\n\t\tself.groupElement.appendChild(column.getElement());\n\t} else {\n\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\n\t}\n};\n\n//vertically align header in column\nColumn.prototype.verticalAlign = function (alignment, height) {\n\n\t//calculate height of column header and group holder element\n\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight;\n\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\n\n\tthis.element.style.height = parentHeight + \"px\";\n\n\tif (this.isGroup) {\n\t\tthis.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + \"px\";\n\t}\n\n\t//vertically align cell contents\n\tif (!this.isGroup && alignment !== \"top\") {\n\t\tif (alignment === \"bottom\") {\n\t\t\tthis.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + \"px\";\n\t\t} else {\n\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + \"px\";\n\t\t}\n\t}\n\n\tthis.columns.forEach(function (column) {\n\t\tcolumn.verticalAlign(alignment);\n\t});\n};\n\n//clear vertical alignmenet\nColumn.prototype.clearVerticalAlign = function () {\n\tthis.element.style.paddingTop = \"\";\n\tthis.element.style.height = \"\";\n\tthis.element.style.minHeight = \"\";\n\tthis.groupElement.style.minHeight = \"\";\n\n\tthis.columns.forEach(function (column) {\n\t\tcolumn.clearVerticalAlign();\n\t});\n};\n\nColumn.prototype.bindModuleColumns = function () {\n\t//check if rownum formatter is being used on a column\n\tif (this.definition.formatter == \"rownum\") {\n\t\tthis.table.rowManager.rowNumColumn = this;\n\t}\n};\n\n//// Retreive Column Information ////\n\n//return column header element\nColumn.prototype.getElement = function () {\n\treturn this.element;\n};\n\n//return colunm group element\nColumn.prototype.getGroupElement = function () {\n\treturn this.groupElement;\n};\n\n//return field name\nColumn.prototype.getField = function () {\n\treturn this.field;\n};\n\n//return the first column in a group\nColumn.prototype.getFirstColumn = function () {\n\tif (!this.isGroup) {\n\t\treturn this;\n\t} else {\n\t\tif (this.columns.length) {\n\t\t\treturn this.columns[0].getFirstColumn();\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n//return the last column in a group\nColumn.prototype.getLastColumn = function () {\n\tif (!this.isGroup) {\n\t\treturn this;\n\t} else {\n\t\tif (this.columns.length) {\n\t\t\treturn this.columns[this.columns.length - 1].getLastColumn();\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n//return all columns in a group\nColumn.prototype.getColumns = function () {\n\treturn this.columns;\n};\n\n//return all columns in a group\nColumn.prototype.getCells = function () {\n\treturn this.cells;\n};\n\n//retreive the top column in a group of columns\nColumn.prototype.getTopColumn = function () {\n\tif (this.parent.isGroup) {\n\t\treturn this.parent.getTopColumn();\n\t} else {\n\t\treturn this;\n\t}\n};\n\n//return column definition object\nColumn.prototype.getDefinition = function (updateBranches) {\n\tvar colDefs = [];\n\n\tif (this.isGroup && updateBranches) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tcolDefs.push(column.getDefinition(true));\n\t\t});\n\n\t\tthis.definition.columns = colDefs;\n\t}\n\n\treturn this.definition;\n};\n\n//////////////////// Actions ////////////////////\n\nColumn.prototype.checkColumnVisibility = function () {\n\tvar visible = false;\n\n\tthis.columns.forEach(function (column) {\n\t\tif (column.visible) {\n\t\t\tvisible = true;\n\t\t}\n\t});\n\n\tif (visible) {\n\t\tthis.show();\n\t\tthis.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\n\t} else {\n\t\tthis.hide();\n\t}\n};\n\n//show column\nColumn.prototype.show = function (silent, responsiveToggle) {\n\tif (!this.visible) {\n\t\tthis.visible = true;\n\n\t\tthis.element.style.display = \"\";\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.checkColumnVisibility();\n\t\t}\n\n\t\tthis.cells.forEach(function (cell) {\n\t\t\tcell.show();\n\t\t});\n\n\t\tif (!this.isGroup && this.width === null) {\n\t\t\tthis.reinitializeWidth();\n\t\t}\n\n\t\tthis.table.columnManager._verticalAlignHeaders();\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tif (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);\n\t\t}\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tif (!this.silent && this.table.options.virtualDomHoz) {\n\t\t\tthis.table.vdomHoz.reinitialize();\n\t\t}\n\t}\n};\n\n//hide column\nColumn.prototype.hide = function (silent, responsiveToggle) {\n\tif (this.visible) {\n\t\tthis.visible = false;\n\n\t\tthis.element.style.display = \"none\";\n\n\t\tthis.table.columnManager._verticalAlignHeaders();\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.checkColumnVisibility();\n\t\t}\n\n\t\tthis.cells.forEach(function (cell) {\n\t\t\tcell.hide();\n\t\t});\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tif (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\n\t\t}\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tif (!this.silent && this.table.options.virtualDomHoz) {\n\t\t\tthis.table.vdomHoz.reinitialize();\n\t\t}\n\t}\n};\n\nColumn.prototype.matchChildWidths = function () {\n\tvar childWidth = 0;\n\n\tif (this.contentElement && this.columns.length) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tif (column.visible) {\n\t\t\t\tchildWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tthis.contentElement.style.maxWidth = childWidth - 1 + \"px\";\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\t}\n};\n\nColumn.prototype.removeChild = function (child) {\n\tvar index = this.columns.indexOf(child);\n\n\tif (index > -1) {\n\t\tthis.columns.splice(index, 1);\n\t}\n\n\tif (!this.columns.length) {\n\t\tthis.delete();\n\t}\n};\n\nColumn.prototype.setWidth = function (width) {\n\tthis.widthFixed = true;\n\tthis.setWidthActual(width);\n};\n\nColumn.prototype.setWidthActual = function (width) {\n\tif (isNaN(width)) {\n\t\twidth = Math.floor(this.table.element.clientWidth / 100 * parseInt(width));\n\t}\n\n\twidth = Math.max(this.minWidth, width);\n\n\tif (this.maxWidth) {\n\t\twidth = Math.min(this.maxWidth, width);\n\t}\n\n\tthis.width = width;\n\tthis.widthStyled = width ? width + \"px\" : \"\";\n\n\tthis.element.style.width = this.widthStyled;\n\n\tif (!this.isGroup) {\n\t\tthis.cells.forEach(function (cell) {\n\t\t\tcell.setWidth();\n\t\t});\n\t}\n\n\tif (this.parent.isGroup) {\n\t\tthis.parent.matchChildWidths();\n\t}\n\n\t//set resizable handles\n\tif (this.table.modExists(\"frozenColumns\")) {\n\t\tthis.table.modules.frozenColumns.layout();\n\t}\n};\n\nColumn.prototype.checkCellHeights = function () {\n\tvar rows = [];\n\n\tthis.cells.forEach(function (cell) {\n\t\tif (cell.row.heightInitialized) {\n\t\t\tif (cell.row.getElement().offsetParent !== null) {\n\t\t\t\trows.push(cell.row);\n\t\t\t\tcell.row.clearCellHeight();\n\t\t\t} else {\n\t\t\t\tcell.row.heightInitialized = false;\n\t\t\t}\n\t\t}\n\t});\n\n\trows.forEach(function (row) {\n\t\trow.calcHeight();\n\t});\n\n\trows.forEach(function (row) {\n\t\trow.setCellHeight();\n\t});\n};\n\nColumn.prototype.getWidth = function () {\n\tvar width = 0;\n\n\tif (this.isGroup) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tif (column.visible) {\n\t\t\t\twidth += column.getWidth();\n\t\t\t}\n\t\t});\n\t} else {\n\t\twidth = this.width;\n\t}\n\n\treturn width;\n};\n\nColumn.prototype.getHeight = function () {\n\treturn this.element.offsetHeight;\n};\n\nColumn.prototype.setMinWidth = function (minWidth) {\n\tthis.minWidth = minWidth;\n\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\n\n\tthis.element.style.minWidth = this.minWidthStyled;\n\n\tthis.cells.forEach(function (cell) {\n\t\tcell.setMinWidth();\n\t});\n};\n\nColumn.prototype.setMaxWidth = function (maxWidth) {\n\tthis.maxWidth = maxWidth;\n\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\n\n\tthis.element.style.maxWidth = this.maxWidthStyled;\n\n\tthis.cells.forEach(function (cell) {\n\t\tcell.setMaxWidth();\n\t});\n};\n\nColumn.prototype.delete = function () {\n\tvar _this9 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar index;\n\n\t\tif (_this9.isGroup) {\n\t\t\t_this9.columns.forEach(function (column) {\n\t\t\t\tcolumn.delete();\n\t\t\t});\n\t\t}\n\n\t\t//cancel edit if column is currently being edited\n\t\tif (_this9.table.modExists(\"edit\")) {\n\t\t\tif (_this9.table.modules.edit.currentCell.column === _this9) {\n\t\t\t\t_this9.table.modules.edit.cancelEdit();\n\t\t\t}\n\t\t}\n\n\t\tvar cellCount = _this9.cells.length;\n\n\t\tfor (var _i3 = 0; _i3 < cellCount; _i3++) {\n\t\t\t_this9.cells[0].delete();\n\t\t}\n\n\t\tif (_this9.element.parentNode) {\n\t\t\t_this9.element.parentNode.removeChild(_this9.element);\n\t\t}\n\n\t\t_this9.element = false;\n\t\t_this9.contentElement = false;\n\t\t_this9.titleElement = false;\n\t\t_this9.groupElement = false;\n\n\t\tif (_this9.parent.isGroup) {\n\t\t\t_this9.parent.removeChild(_this9);\n\t\t}\n\n\t\t_this9.table.columnManager.deregisterColumn(_this9);\n\n\t\tif (_this9.table.options.virtualDomHoz) {\n\t\t\t_this9.table.vdomHoz.reinitialize(true);\n\t\t}\n\n\t\tresolve();\n\t});\n};\n\nColumn.prototype.columnRendered = function () {\n\tif (this.titleFormatterRendered) {\n\t\tthis.titleFormatterRendered();\n\t}\n};\n\nColumn.prototype.validate = function () {\n\tvar invalid = [];\n\n\tthis.cells.forEach(function (cell) {\n\t\tif (!cell.validate()) {\n\t\t\tinvalid.push(cell.getComponent());\n\t\t}\n\t});\n\n\treturn invalid.length ? invalid : true;\n};\n\n//////////////// Cell Management /////////////////\n\n//generate cell for this column\nColumn.prototype.generateCell = function (row) {\n\tvar self = this;\n\n\tvar cell = new Cell(self, row);\n\n\tthis.cells.push(cell);\n\n\treturn cell;\n};\n\nColumn.prototype.nextColumn = function () {\n\tvar index = this.table.columnManager.findColumnIndex(this);\n\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\n};\n\nColumn.prototype._nextVisibleColumn = function (index) {\n\tvar column = this.table.columnManager.getColumnByIndex(index);\n\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\n};\n\nColumn.prototype.prevColumn = function () {\n\tvar index = this.table.columnManager.findColumnIndex(this);\n\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\n};\n\nColumn.prototype._prevVisibleColumn = function (index) {\n\tvar column = this.table.columnManager.getColumnByIndex(index);\n\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\n};\n\nColumn.prototype.reinitializeWidth = function (force) {\n\tthis.widthFixed = false;\n\n\t//set width if present\n\tif (typeof this.definition.width !== \"undefined\" && !force) {\n\t\tthis.setWidth(this.definition.width);\n\t}\n\n\t//hide header filters to prevent them altering column width\n\tif (this.table.modExists(\"filter\")) {\n\t\tthis.table.modules.filter.hideHeaderFilterElements();\n\t}\n\n\tthis.fitToData();\n\n\t//show header filters again after layout is complete\n\tif (this.table.modExists(\"filter\")) {\n\t\tthis.table.modules.filter.showHeaderFilterElements();\n\t}\n};\n\n//set column width to maximum cell width\nColumn.prototype.fitToData = function () {\n\tvar self = this;\n\n\tif (!this.widthFixed) {\n\t\tthis.element.style.width = \"\";\n\n\t\tself.cells.forEach(function (cell) {\n\t\t\tcell.clearWidth();\n\t\t});\n\t}\n\n\tvar maxWidth = this.element.offsetWidth;\n\n\tif (!self.width || !this.widthFixed) {\n\t\tself.cells.forEach(function (cell) {\n\t\t\tvar width = cell.getWidth();\n\n\t\t\tif (width > maxWidth) {\n\t\t\t\tmaxWidth = width;\n\t\t\t}\n\t\t});\n\n\t\tif (maxWidth) {\n\t\t\tself.setWidthActual(maxWidth + 1);\n\t\t}\n\t}\n};\n\nColumn.prototype.updateDefinition = function (updates) {\n\tvar _this10 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar definition;\n\n\t\tif (!_this10.isGroup) {\n\t\t\tif (!_this10.parent.isGroup) {\n\t\t\t\tdefinition = Object.assign({}, _this10.getDefinition());\n\t\t\t\tdefinition = Object.assign(definition, updates);\n\n\t\t\t\t_this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {\n\n\t\t\t\t\tif (definition.field == _this10.field) {\n\t\t\t\t\t\t_this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays\n\t\t\t\t\t}\n\n\t\t\t\t\t_this10.delete().then(function () {\n\t\t\t\t\t\tresolve(column.getComponent());\n\t\t\t\t\t}).catch(function (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}).catch(function (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t}\n\t});\n};\n\nColumn.prototype.deleteCell = function (cell) {\n\tvar index = this.cells.indexOf(cell);\n\n\tif (index > -1) {\n\t\tthis.cells.splice(index, 1);\n\t}\n};\n\nColumn.prototype.defaultOptionList = [\"title\", \"field\", \"columns\", \"visible\", \"align\", \"hozAlign\", \"vertAlign\", \"width\", \"minWidth\", \"maxWidth\", \"widthGrow\", \"widthShrink\", \"resizable\", \"frozen\", \"responsive\", \"tooltip\", \"cssClass\", \"rowHandle\", \"hideInHtml\", \"print\", \"htmlOutput\", \"sorter\", \"sorterParams\", \"formatter\", \"formatterParams\", \"variableHeight\", \"editable\", \"editor\", \"editorParams\", \"validator\", \"mutator\", \"mutatorParams\", \"mutatorData\", \"mutatorDataParams\", \"mutatorEdit\", \"mutatorEditParams\", \"mutatorClipboard\", \"mutatorClipboardParams\", \"accessor\", \"accessorParams\", \"accessorData\", \"accessorDataParams\", \"accessorDownload\", \"accessorDownloadParams\", \"accessorClipboard\", \"accessorClipboardParams\", \"accessorPrint\", \"accessorPrintParams\", \"accessorHtmlOutput\", \"accessorHtmlOutputParams\", \"clipboard\", \"download\", \"downloadTitle\", \"topCalc\", \"topCalcParams\", \"topCalcFormatter\", \"topCalcFormatterParams\", \"bottomCalc\", \"bottomCalcParams\", \"bottomCalcFormatter\", \"bottomCalcFormatterParams\", \"cellClick\", \"cellDblClick\", \"cellContext\", \"cellTap\", \"cellDblTap\", \"cellTapHold\", \"cellMouseEnter\", \"cellMouseLeave\", \"cellMouseOver\", \"cellMouseOut\", \"cellMouseMove\", \"cellEditing\", \"cellEdited\", \"cellEditCancelled\", \"headerSort\", \"headerSortStartingDir\", \"headerSortTristate\", \"headerClick\", \"headerDblClick\", \"headerContext\", \"headerTap\", \"headerDblTap\", \"headerTapHold\", \"headerTooltip\", \"headerVertical\", \"headerHozAlign\", \"editableTitle\", \"titleFormatter\", \"titleFormatterParams\", \"headerFilter\", \"headerFilterPlaceholder\", \"headerFilterParams\", \"headerFilterEmptyCheck\", \"headerFilterFunc\", \"headerFilterFuncParams\", \"headerFilterLiveFilter\", \"print\", \"headerContextMenu\", \"headerMenu\", \"contextMenu\",\n// \"headerClickMenu\",\n\"clickMenu\", \"formatterPrint\", \"formatterPrintParams\", \"formatterClipboard\", \"formatterClipboardParams\", \"formatterHtmlOutput\", \"formatterHtmlOutputParams\", \"titlePrint\", \"titleClipboard\", \"titleHtmlOutput\", \"titleDownload\"];\n\n//////////////// Event Bindings /////////////////\n\n//////////////// Object Generation /////////////////\nColumn.prototype.getComponent = function () {\n\tif (!this.component) {\n\t\tthis.component = new ColumnComponent(this);\n\t}\n\n\treturn this.component;\n};\n\nvar RowManager = function RowManager(table) {\n\n\tthis.table = table;\n\tthis.element = this.createHolderElement(); //containing element\n\tthis.tableElement = this.createTableElement(); //table element\n\tthis.heightFixer = this.createTableElement(); //table element\n\tthis.columnManager = null; //hold column manager object\n\tthis.height = 0; //hold height of table element\n\n\tthis.firstRender = false; //handle first render\n\tthis.renderMode = \"virtual\"; //current rendering mode\n\tthis.fixedHeight = false; //current rendering mode\n\n\tthis.rows = []; //hold row data objects\n\tthis.activeRows = []; //rows currently available to on display in the table\n\tthis.activeRowsCount = 0; //count of active rows\n\n\tthis.displayRows = []; //rows currently on display in the table\n\tthis.displayRowsCount = 0; //count of display rows\n\n\tthis.scrollTop = 0;\n\tthis.scrollLeft = 0;\n\n\tthis.vDomRowHeight = 20; //approximation of row heights for padding\n\n\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\n\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\n\n\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\n\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\n\n\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\n\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\n\n\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\n\n\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\n\n\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\n\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\n\n\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\n\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\n\n\tthis.rowNumColumn = false; //hold column component for row number column\n\n\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing\n\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\n\tthis.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed\n};\n\n//////////////// Setup Functions /////////////////\n\nRowManager.prototype.createHolderElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-tableHolder\");\n\tel.setAttribute(\"tabindex\", 0);\n\n\treturn el;\n};\n\nRowManager.prototype.createTableElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-table\");\n\n\treturn el;\n};\n\n//return containing element\nRowManager.prototype.getElement = function () {\n\treturn this.element;\n};\n\n//return table element\nRowManager.prototype.getTableElement = function () {\n\treturn this.tableElement;\n};\n\n//return position of row in table\nRowManager.prototype.getRowPosition = function (row, active) {\n\tif (active) {\n\t\treturn this.activeRows.indexOf(row);\n\t} else {\n\t\treturn this.rows.indexOf(row);\n\t}\n};\n\n//link to column manager\nRowManager.prototype.setColumnManager = function (manager) {\n\tthis.columnManager = manager;\n};\n\nRowManager.prototype.initialize = function () {\n\tvar self = this;\n\n\tself.setRenderMode();\n\n\t//initialize manager\n\tself.element.appendChild(self.tableElement);\n\n\tself.firstRender = true;\n\n\t//scroll header along with table body\n\tself.element.addEventListener(\"scroll\", function () {\n\t\tvar left = self.element.scrollLeft;\n\n\t\t//handle horizontal scrolling\n\t\tif (self.scrollLeft != left) {\n\t\t\tself.columnManager.scrollHorizontal(left);\n\n\t\t\tif (self.table.options.groupBy) {\n\t\t\t\tself.table.modules.groupRows.scrollHeaders(left);\n\t\t\t}\n\n\t\t\tif (self.table.modExists(\"columnCalcs\")) {\n\t\t\t\tself.table.modules.columnCalcs.scrollHorizontal(left);\n\t\t\t}\n\n\t\t\tself.table.options.scrollHorizontal(left);\n\t\t}\n\n\t\tself.scrollLeft = left;\n\t});\n\n\t//handle virtual dom scrolling\n\tif (this.renderMode === \"virtual\") {\n\n\t\tself.element.addEventListener(\"scroll\", function () {\n\t\t\tvar top = self.element.scrollTop;\n\t\t\tvar dir = self.scrollTop > top;\n\n\t\t\t//handle verical scrolling\n\t\t\tif (self.scrollTop != top) {\n\t\t\t\tself.scrollTop = top;\n\t\t\t\tself.scrollVertical(dir);\n\n\t\t\t\tif (self.table.options.ajaxProgressiveLoad == \"scroll\") {\n\t\t\t\t\tself.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top);\n\t\t\t\t}\n\n\t\t\t\tself.table.options.scrollVertical(top);\n\t\t\t} else {\n\t\t\t\tself.scrollTop = top;\n\t\t\t}\n\t\t});\n\t}\n};\n\n////////////////// Row Manipulation //////////////////\n\nRowManager.prototype.findRow = function (subject) {\n\tvar self = this;\n\n\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\tif (subject instanceof Row) {\n\t\t\t//subject is row element\n\t\t\treturn subject;\n\t\t} else if (subject instanceof RowComponent) {\n\t\t\t//subject is public row component\n\t\t\treturn subject._getSelf() || false;\n\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\t\t\t//subject is a HTML element of the row\n\t\t\tvar match = self.rows.find(function (row) {\n\t\t\t\treturn row.getElement() === subject;\n\t\t\t});\n\n\t\t\treturn match || false;\n\t\t}\n\t} else if (typeof subject == \"undefined\" || subject === null) {\n\t\treturn false;\n\t} else {\n\t\t//subject should be treated as the index of the row\n\t\tvar _match = self.rows.find(function (row) {\n\t\t\treturn row.data[self.table.options.index] == subject;\n\t\t});\n\n\t\treturn _match || false;\n\t}\n\n\t//catch all for any other type of input\n\n\treturn false;\n};\n\nRowManager.prototype.getRowFromDataObject = function (data) {\n\tvar match = this.rows.find(function (row) {\n\t\treturn row.data === data;\n\t});\n\n\treturn match || false;\n};\n\nRowManager.prototype.getRowFromPosition = function (position, active) {\n\tif (active) {\n\t\treturn this.activeRows[position];\n\t} else {\n\t\treturn this.rows[position];\n\t}\n};\n\nRowManager.prototype.scrollToRow = function (row, position, ifVisible) {\n\tvar _this11 = this;\n\n\tvar rowIndex = this.getDisplayRows().indexOf(row),\n\t rowEl = row.getElement(),\n\t rowTop,\n\t offset = 0;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (rowIndex > -1) {\n\n\t\t\tif (typeof position === \"undefined\") {\n\t\t\t\tposition = _this11.table.options.scrollToRowPosition;\n\t\t\t}\n\n\t\t\tif (typeof ifVisible === \"undefined\") {\n\t\t\t\tifVisible = _this11.table.options.scrollToRowIfVisible;\n\t\t\t}\n\n\t\t\tif (position === \"nearest\") {\n\t\t\t\tswitch (_this11.renderMode) {\n\t\t\t\t\tcase \"classic\":\n\t\t\t\t\t\trowTop = Tabulator.prototype.helpers.elOffset(rowEl).top;\n\t\t\t\t\t\tposition = Math.abs(_this11.element.scrollTop - rowTop) > Math.abs(_this11.element.scrollTop + _this11.element.clientHeight - rowTop) ? \"bottom\" : \"top\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"virtual\":\n\t\t\t\t\t\tposition = Math.abs(_this11.vDomTop - rowIndex) > Math.abs(_this11.vDomBottom - rowIndex) ? \"bottom\" : \"top\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//check row visibility\n\t\t\tif (!ifVisible) {\n\t\t\t\tif (Tabulator.prototype.helpers.elVisible(rowEl)) {\n\t\t\t\t\toffset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top;\n\n\t\t\t\t\tif (offset > 0 && offset < _this11.element.clientHeight - rowEl.offsetHeight) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//scroll to row\n\t\t\tswitch (_this11.renderMode) {\n\t\t\t\tcase \"classic\":\n\t\t\t\t\t_this11.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top + _this11.element.scrollTop;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"virtual\":\n\t\t\t\t\t_this11._virtualRenderFill(rowIndex, true);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t//align to correct position\n\t\t\tswitch (position) {\n\t\t\t\tcase \"middle\":\n\t\t\t\tcase \"center\":\n\n\t\t\t\t\tif (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop + (rowEl.offsetTop - _this11.element.scrollTop) - (_this11.element.scrollHeight - rowEl.offsetTop) / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight / 2;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"bottom\":\n\n\t\t\t\t\tif (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop - (_this11.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight + rowEl.offsetHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tresolve();\n\t\t} else {\n\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\n\t\t\treject(\"Scroll Error - Row not visible\");\n\t\t}\n\t});\n};\n\n////////////////// Data Handling //////////////////\n\nRowManager.prototype.setData = function (data, renderInPosition, columnsChanged) {\n\tvar _this12 = this;\n\n\tvar self = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (renderInPosition && _this12.getDisplayRows().length) {\n\t\t\tif (self.table.options.pagination) {\n\t\t\t\tself._setDataActual(data, true);\n\t\t\t} else {\n\t\t\t\t_this12.reRenderInPosition(function () {\n\t\t\t\t\tself._setDataActual(data);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tif (_this12.table.options.autoColumns && columnsChanged) {\n\t\t\t\t_this12.table.columnManager.generateColumnsFromRowData(data);\n\t\t\t}\n\t\t\t_this12.resetScroll();\n\n\t\t\t_this12._setDataActual(data);\n\t\t}\n\n\t\tresolve();\n\t});\n};\n\nRowManager.prototype._setDataActual = function (data, renderInPosition) {\n\tvar self = this;\n\n\tself.table.options.dataLoading.call(this.table, data);\n\n\tthis._wipeElements();\n\n\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\tthis.table.modules.history.clear();\n\t}\n\n\tif (Array.isArray(data)) {\n\n\t\tif (this.table.modExists(\"selectRow\")) {\n\t\t\tthis.table.modules.selectRow.clearSelectionData();\n\t\t}\n\n\t\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {\n\t\t\tthis.table.modules.reactiveData.watchData(data);\n\t\t}\n\n\t\tdata.forEach(function (def, i) {\n\t\t\tif (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === \"object\") {\n\t\t\t\tvar row = new Row(def, self);\n\t\t\t\tself.rows.push(row);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\n\t\t\t}\n\t\t});\n\n\t\tself.refreshActiveData(false, false, renderInPosition);\n\n\t\tself.table.options.dataLoaded.call(this.table, data);\n\t} else {\n\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data === 'undefined' ? 'undefined' : _typeof(data), \"\\nData: \", data);\n\t}\n};\n\nRowManager.prototype._wipeElements = function () {\n\tthis.rows.forEach(function (row) {\n\t\trow.wipe();\n\t});\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.wipe();\n\t}\n\n\tthis.rows = [];\n\tthis.activeRows = [];\n\tthis.activeRowsCount = 0;\n\tthis.displayRows = [];\n\tthis.displayRowsCount = 0;\n\n\tthis.adjustTableSize();\n};\n\nRowManager.prototype.deleteRow = function (row, blockRedraw) {\n\tvar allIndex = this.rows.indexOf(row),\n\t activeIndex = this.activeRows.indexOf(row);\n\n\tif (activeIndex > -1) {\n\t\tthis.activeRows.splice(activeIndex, 1);\n\t}\n\n\tif (allIndex > -1) {\n\t\tthis.rows.splice(allIndex, 1);\n\t}\n\n\tthis.setActiveRows(this.activeRows);\n\n\tthis.displayRowIterator(function (rows) {\n\t\tvar displayIndex = rows.indexOf(row);\n\n\t\tif (displayIndex > -1) {\n\t\t\trows.splice(displayIndex, 1);\n\t\t}\n\t});\n\n\tif (!blockRedraw) {\n\t\tthis.reRenderInPosition();\n\t}\n\n\tthis.regenerateRowNumbers();\n\n\tthis.table.options.rowDeleted.call(this.table, row.getComponent());\n\n\tif (this.table.options.dataChanged) {\n\t\tthis.table.options.dataChanged.call(this.table, this.getData());\n\t}\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t} else if (this.table.options.pagination && this.table.modExists(\"page\")) {\n\t\tthis.refreshActiveData(false, false, true);\n\t} else {\n\t\tif (this.table.options.pagination && this.table.modExists(\"page\")) {\n\t\t\tthis.refreshActiveData(\"page\");\n\t\t}\n\t}\n};\n\nRowManager.prototype.addRow = function (data, pos, index, blockRedraw) {\n\n\tvar row = this.addRowActual(data, pos, index, blockRedraw);\n\n\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\tthis.table.modules.history.action(\"rowAdd\", row, { data: data, pos: pos, index: index });\n\t}\n\n\treturn row;\n};\n\n//add multiple rows\nRowManager.prototype.addRows = function (data, pos, index) {\n\tvar _this13 = this;\n\n\tvar self = this,\n\t length = 0,\n\t rows = [];\n\n\treturn new Promise(function (resolve, reject) {\n\t\tpos = _this13.findAddRowPos(pos);\n\n\t\tif (!Array.isArray(data)) {\n\t\t\tdata = [data];\n\t\t}\n\n\t\tlength = data.length - 1;\n\n\t\tif (typeof index == \"undefined\" && pos || typeof index !== \"undefined\" && !pos) {\n\t\t\tdata.reverse();\n\t\t}\n\n\t\tdata.forEach(function (item, i) {\n\t\t\tvar row = self.addRow(item, pos, index, true);\n\t\t\trows.push(row);\n\t\t});\n\n\t\tif (_this13.table.options.groupBy && _this13.table.modExists(\"groupRows\")) {\n\t\t\t_this13.table.modules.groupRows.updateGroupRows(true);\n\t\t} else if (_this13.table.options.pagination && _this13.table.modExists(\"page\")) {\n\t\t\t_this13.refreshActiveData(false, false, true);\n\t\t} else {\n\t\t\t_this13.reRenderInPosition();\n\t\t}\n\n\t\t//recalc column calculations if present\n\t\tif (_this13.table.modExists(\"columnCalcs\")) {\n\t\t\t_this13.table.modules.columnCalcs.recalc(_this13.table.rowManager.activeRows);\n\t\t}\n\n\t\t_this13.regenerateRowNumbers();\n\t\tresolve(rows);\n\t});\n};\n\nRowManager.prototype.findAddRowPos = function (pos) {\n\tif (typeof pos === \"undefined\") {\n\t\tpos = this.table.options.addRowPos;\n\t}\n\n\tif (pos === \"pos\") {\n\t\tpos = true;\n\t}\n\n\tif (pos === \"bottom\") {\n\t\tpos = false;\n\t}\n\n\treturn pos;\n};\n\nRowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) {\n\tvar row = data instanceof Row ? data : new Row(data || {}, this),\n\t top = this.findAddRowPos(pos),\n\t allIndex = -1,\n\t activeIndex,\n\t dispRows;\n\n\tif (!index && this.table.options.pagination && this.table.options.paginationAddRow == \"page\") {\n\t\tdispRows = this.getDisplayRows();\n\n\t\tif (top) {\n\t\t\tif (dispRows.length) {\n\t\t\t\tindex = dispRows[0];\n\t\t\t} else {\n\t\t\t\tif (this.activeRows.length) {\n\t\t\t\t\tindex = this.activeRows[this.activeRows.length - 1];\n\t\t\t\t\ttop = false;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (dispRows.length) {\n\t\t\t\tindex = dispRows[dispRows.length - 1];\n\t\t\t\ttop = dispRows.length < this.table.modules.page.getPageSize() ? false : true;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof index !== \"undefined\") {\n\t\tindex = this.findRow(index);\n\t}\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.assignRowToGroup(row);\n\n\t\tvar groupRows = row.getGroup().rows;\n\n\t\tif (groupRows.length > 1) {\n\n\t\t\tif (!index || index && groupRows.indexOf(index) == -1) {\n\t\t\t\tif (top) {\n\t\t\t\t\tif (groupRows[0] !== row) {\n\t\t\t\t\t\tindex = groupRows[0];\n\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (groupRows[groupRows.length - 1] !== row) {\n\t\t\t\t\t\tindex = groupRows[groupRows.length - 1];\n\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (index) {\n\t\tallIndex = this.rows.indexOf(index);\n\t}\n\n\tif (index && allIndex > -1) {\n\t\tactiveIndex = this.activeRows.indexOf(index);\n\n\t\tthis.displayRowIterator(function (rows) {\n\t\t\tvar displayIndex = rows.indexOf(index);\n\n\t\t\tif (displayIndex > -1) {\n\t\t\t\trows.splice(top ? displayIndex : displayIndex + 1, 0, row);\n\t\t\t}\n\t\t});\n\n\t\tif (activeIndex > -1) {\n\t\t\tthis.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row);\n\t\t}\n\n\t\tthis.rows.splice(top ? allIndex : allIndex + 1, 0, row);\n\t} else {\n\n\t\tif (top) {\n\n\t\t\tthis.displayRowIterator(function (rows) {\n\t\t\t\trows.unshift(row);\n\t\t\t});\n\n\t\t\tthis.activeRows.unshift(row);\n\t\t\tthis.rows.unshift(row);\n\t\t} else {\n\t\t\tthis.displayRowIterator(function (rows) {\n\t\t\t\trows.push(row);\n\t\t\t});\n\n\t\t\tthis.activeRows.push(row);\n\t\t\tthis.rows.push(row);\n\t\t}\n\t}\n\n\tthis.setActiveRows(this.activeRows);\n\n\tthis.table.options.rowAdded.call(this.table, row.getComponent());\n\n\tif (this.table.options.dataChanged) {\n\t\tthis.table.options.dataChanged.call(this.table, this.getData());\n\t}\n\n\tif (!blockRedraw) {\n\t\tthis.reRenderInPosition();\n\t}\n\n\treturn row;\n};\n\nRowManager.prototype.moveRow = function (from, to, after) {\n\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\tthis.table.modules.history.action(\"rowMove\", from, { posFrom: this.getRowPosition(from), posTo: this.getRowPosition(to), to: to, after: after });\n\t}\n\n\tthis.moveRowActual(from, to, after);\n\n\tthis.regenerateRowNumbers();\n\n\tthis.table.options.rowMoved.call(this.table, from.getComponent());\n};\n\nRowManager.prototype.moveRowActual = function (from, to, after) {\n\tvar _this14 = this;\n\n\tthis._moveRowInArray(this.rows, from, to, after);\n\tthis._moveRowInArray(this.activeRows, from, to, after);\n\n\tthis.displayRowIterator(function (rows) {\n\t\t_this14._moveRowInArray(rows, from, to, after);\n\t});\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\tif (!after && to instanceof Group) {\n\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\n\t\t}\n\n\t\tvar toGroup = to.getGroup();\n\t\tvar fromGroup = from.getGroup();\n\n\t\tif (toGroup === fromGroup) {\n\t\t\tthis._moveRowInArray(toGroup.rows, from, to, after);\n\t\t} else {\n\t\t\tif (fromGroup) {\n\t\t\t\tfromGroup.removeRow(from);\n\t\t\t}\n\n\t\t\ttoGroup.insertRow(from, to, after);\n\t\t}\n\t}\n};\n\nRowManager.prototype._moveRowInArray = function (rows, from, to, after) {\n\tvar fromIndex, toIndex, start, end;\n\n\tif (from !== to) {\n\n\t\tfromIndex = rows.indexOf(from);\n\n\t\tif (fromIndex > -1) {\n\n\t\t\trows.splice(fromIndex, 1);\n\n\t\t\ttoIndex = rows.indexOf(to);\n\n\t\t\tif (toIndex > -1) {\n\n\t\t\t\tif (after) {\n\t\t\t\t\trows.splice(toIndex + 1, 0, from);\n\t\t\t\t} else {\n\t\t\t\t\trows.splice(toIndex, 0, from);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trows.splice(fromIndex, 0, from);\n\t\t\t}\n\t\t}\n\n\t\t//restyle rows\n\t\tif (rows === this.getDisplayRows()) {\n\n\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\n\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex + 1;\n\n\t\t\tfor (var _i4 = start; _i4 <= end; _i4++) {\n\t\t\t\tif (rows[_i4]) {\n\t\t\t\t\tthis.styleRow(rows[_i4], _i4);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nRowManager.prototype.clearData = function () {\n\tthis.setData([]);\n};\n\nRowManager.prototype.getRowIndex = function (row) {\n\treturn this.findRowIndex(row, this.rows);\n};\n\nRowManager.prototype.getDisplayRowIndex = function (row) {\n\tvar index = this.getDisplayRows().indexOf(row);\n\treturn index > -1 ? index : false;\n};\n\nRowManager.prototype.nextDisplayRow = function (row, rowOnly) {\n\tvar index = this.getDisplayRowIndex(row),\n\t nextRow = false;\n\n\tif (index !== false && index < this.displayRowsCount - 1) {\n\t\tnextRow = this.getDisplayRows()[index + 1];\n\t}\n\n\tif (nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")) {\n\t\treturn this.nextDisplayRow(nextRow, rowOnly);\n\t}\n\n\treturn nextRow;\n};\n\nRowManager.prototype.prevDisplayRow = function (row, rowOnly) {\n\tvar index = this.getDisplayRowIndex(row),\n\t prevRow = false;\n\n\tif (index) {\n\t\tprevRow = this.getDisplayRows()[index - 1];\n\t}\n\n\tif (rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")) {\n\t\treturn this.prevDisplayRow(prevRow, rowOnly);\n\t}\n\n\treturn prevRow;\n};\n\nRowManager.prototype.findRowIndex = function (row, list) {\n\tvar rowIndex;\n\n\trow = this.findRow(row);\n\n\tif (row) {\n\t\trowIndex = list.indexOf(row);\n\n\t\tif (rowIndex > -1) {\n\t\t\treturn rowIndex;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nRowManager.prototype.getData = function (active, transform) {\n\tvar output = [],\n\t rows = this.getRows(active);\n\n\trows.forEach(function (row) {\n\t\tif (row.type == \"row\") {\n\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t}\n\t});\n\n\treturn output;\n};\n\nRowManager.prototype.getComponents = function (active) {\n\tvar output = [],\n\t rows = this.getRows(active);\n\n\trows.forEach(function (row) {\n\t\toutput.push(row.getComponent());\n\t});\n\n\treturn output;\n};\n\nRowManager.prototype.getDataCount = function (active) {\n\tvar rows = this.getRows(active);\n\n\treturn rows.length;\n};\n\nRowManager.prototype._genRemoteRequest = function () {\n\tvar _this15 = this;\n\n\tvar table = this.table,\n\t options = table.options,\n\t params = {};\n\n\tif (table.modExists(\"page\")) {\n\t\t//set sort data if defined\n\t\tif (options.ajaxSorting) {\n\t\t\tvar sorters = this.table.modules.sort.getSort();\n\n\t\t\tsorters.forEach(function (item) {\n\t\t\t\tdelete item.column;\n\t\t\t});\n\n\t\t\tparams[this.table.modules.page.paginationDataSentNames.sorters] = sorters;\n\t\t}\n\n\t\t//set filter data if defined\n\t\tif (options.ajaxFiltering) {\n\t\t\tvar filters = this.table.modules.filter.getFilters(true, true);\n\n\t\t\tparams[this.table.modules.page.paginationDataSentNames.filters] = filters;\n\t\t}\n\n\t\tthis.table.modules.ajax.setParams(params, true);\n\t}\n\n\ttable.modules.ajax.sendRequest().then(function (data) {\n\t\t_this15._setDataActual(data, true);\n\t}).catch(function (e) {});\n};\n\n//choose the path to refresh data after a filter update\nRowManager.prototype.filterRefresh = function () {\n\tvar table = this.table,\n\t options = table.options,\n\t left = this.scrollLeft;\n\n\tif (options.ajaxFiltering) {\n\t\tif (options.pagination == \"remote\" && table.modExists(\"page\")) {\n\t\t\ttable.modules.page.reset(true);\n\t\t\ttable.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t\t} else if (options.ajaxProgressiveLoad) {\n\t\t\ttable.modules.ajax.loadData().then(function () {}).catch(function () {});\n\t\t} else {\n\t\t\t//assume data is url, make ajax call to url to get data\n\t\t\tthis._genRemoteRequest();\n\t\t}\n\t} else {\n\t\tthis.refreshActiveData(\"filter\");\n\t}\n\n\tthis.scrollHorizontal(left);\n};\n\n//choose the path to refresh data after a sorter update\nRowManager.prototype.sorterRefresh = function (loadOrignalData) {\n\tvar table = this.table,\n\t options = this.table.options,\n\t left = this.scrollLeft;\n\n\tif (options.ajaxSorting) {\n\t\tif ((options.pagination == \"remote\" || options.progressiveLoad) && table.modExists(\"page\")) {\n\t\t\ttable.modules.page.reset(true);\n\t\t\ttable.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t\t} else if (options.ajaxProgressiveLoad) {\n\t\t\ttable.modules.ajax.loadData().then(function () {}).catch(function () {});\n\t\t} else {\n\t\t\t//assume data is url, make ajax call to url to get data\n\t\t\tthis._genRemoteRequest();\n\t\t}\n\t} else {\n\t\tthis.refreshActiveData(loadOrignalData ? \"filter\" : \"sort\");\n\t}\n\n\tthis.scrollHorizontal(left);\n};\n\nRowManager.prototype.scrollHorizontal = function (left) {\n\tthis.scrollLeft = left;\n\tthis.element.scrollLeft = left;\n\n\tif (this.table.options.groupBy) {\n\t\tthis.table.modules.groupRows.scrollHeaders(left);\n\t}\n\n\tif (this.table.modExists(\"columnCalcs\")) {\n\t\tthis.table.modules.columnCalcs.scrollHorizontal(left);\n\t}\n};\n\n//set active data set\nRowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) {\n\tvar self = this,\n\t table = this.table,\n\t cascadeOrder = [\"all\", \"filter\", \"sort\", \"display\", \"freeze\", \"group\", \"tree\", \"page\"],\n\t displayIndex;\n\n\tif (this.redrawBlock) {\n\n\t\tif (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) {\n\t\t\tthis.redrawBlockRestoreConfig = {\n\t\t\t\tstage: stage,\n\t\t\t\tskipStage: skipStage,\n\t\t\t\trenderInPosition: renderInPosition\n\t\t\t};\n\t\t}\n\n\t\treturn;\n\t} else {\n\n\t\tif (self.table.modExists(\"edit\")) {\n\t\t\tself.table.modules.edit.cancelEdit();\n\t\t}\n\n\t\tif (!stage) {\n\t\t\tstage = \"all\";\n\t\t}\n\n\t\tif (table.options.selectable && !table.options.selectablePersistence && table.modExists(\"selectRow\")) {\n\t\t\ttable.modules.selectRow.deselectRows();\n\t\t}\n\n\t\t//cascade through data refresh stages\n\t\tswitch (stage) {\n\t\t\tcase \"all\":\n\n\t\t\tcase \"filter\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.modExists(\"filter\")) {\n\t\t\t\t\t\tself.setActiveRows(table.modules.filter.filter(self.rows));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.setActiveRows(self.rows.slice(0));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\tcase \"sort\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.modExists(\"sort\")) {\n\t\t\t\t\t\ttable.modules.sort.sort(this.activeRows);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\t\t//regenerate row numbers for row number formatter if in use\n\t\t\t\tthis.regenerateRowNumbers();\n\n\t\t\t//generic stage to allow for pipeline trigger after the data manipulation stage\n\t\t\tcase \"display\":\n\t\t\t\tthis.resetDisplayRows();\n\n\t\t\tcase \"freeze\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (this.table.modExists(\"frozenRows\")) {\n\t\t\t\t\t\tif (table.modules.frozenRows.isFrozen()) {\n\t\t\t\t\t\t\tif (!table.modules.frozenRows.getDisplayIndex()) {\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdisplayIndex = table.modules.frozenRows.getDisplayIndex();\n\n\t\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\tcase \"group\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.options.groupBy && table.modExists(\"groupRows\")) {\n\n\t\t\t\t\t\tif (!table.modules.groupRows.getDisplayIndex()) {\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = table.modules.groupRows.getDisplayIndex();\n\n\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\tcase \"tree\":\n\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.options.dataTree && table.modExists(\"dataTree\")) {\n\t\t\t\t\t\tif (!table.modules.dataTree.getDisplayIndex()) {\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = table.modules.dataTree.getDisplayIndex();\n\n\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\t\tif (table.options.pagination && table.modExists(\"page\") && !renderInPosition) {\n\t\t\t\t\tif (table.modules.page.getMode() == \"local\") {\n\t\t\t\t\t\ttable.modules.page.reset();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase \"page\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.options.pagination && table.modExists(\"page\")) {\n\n\t\t\t\t\t\tif (!table.modules.page.getDisplayIndex()) {\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = table.modules.page.getDisplayIndex();\n\n\t\t\t\t\t\tif (table.modules.page.getMode() == \"local\") {\n\t\t\t\t\t\t\ttable.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\t\t}\n\n\t\tif (Tabulator.prototype.helpers.elVisible(self.element)) {\n\t\t\tif (renderInPosition) {\n\t\t\t\tself.reRenderInPosition();\n\t\t\t} else {\n\n\t\t\t\tif (stage === \"all\" && this.table.options.virtualDomHoz) {\n\t\t\t\t\tthis.table.vdomHoz.dataChange();\n\t\t\t\t}\n\n\t\t\t\tself.renderTable();\n\n\t\t\t\tif (table.options.layoutColumnsOnNewData) {\n\t\t\t\t\tself.table.columnManager.redraw(true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (table.modExists(\"columnCalcs\")) {\n\t\t\ttable.modules.columnCalcs.recalc(this.activeRows);\n\t\t}\n\t}\n};\n\n//regenerate row numbers for row number formatter if in use\nRowManager.prototype.regenerateRowNumbers = function () {\n\tvar _this16 = this;\n\n\tif (this.rowNumColumn) {\n\t\tthis.activeRows.forEach(function (row) {\n\t\t\tvar cell = row.getCell(_this16.rowNumColumn);\n\n\t\t\tif (cell) {\n\t\t\t\tcell._generateContents();\n\t\t\t}\n\t\t});\n\t}\n};\n\nRowManager.prototype.setActiveRows = function (activeRows) {\n\tthis.activeRows = activeRows;\n\tthis.activeRowsCount = this.activeRows.length;\n};\n\n//reset display rows array\nRowManager.prototype.resetDisplayRows = function () {\n\tthis.displayRows = [];\n\n\tthis.displayRows.push(this.activeRows.slice(0));\n\n\tthis.displayRowsCount = this.displayRows[0].length;\n\n\tif (this.table.modExists(\"frozenRows\")) {\n\t\tthis.table.modules.frozenRows.setDisplayIndex(0);\n\t}\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.setDisplayIndex(0);\n\t}\n\n\tif (this.table.options.pagination && this.table.modExists(\"page\")) {\n\t\tthis.table.modules.page.setDisplayIndex(0);\n\t}\n};\n\nRowManager.prototype.getNextDisplayIndex = function () {\n\treturn this.displayRows.length;\n};\n\n//set display row pipeline data\nRowManager.prototype.setDisplayRows = function (displayRows, index) {\n\n\tvar output = true;\n\n\tif (index && typeof this.displayRows[index] != \"undefined\") {\n\t\tthis.displayRows[index] = displayRows;\n\t\toutput = true;\n\t} else {\n\t\tthis.displayRows.push(displayRows);\n\t\toutput = index = this.displayRows.length - 1;\n\t}\n\n\tif (index == this.displayRows.length - 1) {\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;\n\t}\n\n\treturn output;\n};\n\nRowManager.prototype.getDisplayRows = function (index) {\n\tif (typeof index == \"undefined\") {\n\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : [];\n\t} else {\n\t\treturn this.displayRows[index] || [];\n\t}\n};\n\nRowManager.prototype.getVisibleRows = function (viewable) {\n\tvar topEdge = this.element.scrollTop,\n\t bottomEdge = this.element.clientHeight + topEdge,\n\t topFound = false,\n\t topRow = 0,\n\t bottomRow = 0,\n\t rows = this.getDisplayRows();\n\n\tif (viewable) {\n\n\t\tthis.getDisplayRows();\n\t\tfor (var i = this.vDomTop; i <= this.vDomBottom; i++) {\n\t\t\tif (rows[i]) {\n\t\t\t\tif (!topFound) {\n\t\t\t\t\tif (topEdge - rows[i].getElement().offsetTop >= 0) {\n\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttopFound = true;\n\n\t\t\t\t\t\tif (bottomEdge - rows[i].getElement().offsetTop >= 0) {\n\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (bottomEdge - rows[i].getElement().offsetTop >= 0) {\n\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\ttopRow = this.vDomTop;\n\t\tbottomRow = this.vDomBottom;\n\t}\n\n\treturn rows.slice(topRow, bottomRow + 1);\n};\n\n//repeat action accross display rows\nRowManager.prototype.displayRowIterator = function (callback) {\n\tthis.displayRows.forEach(callback);\n\n\tthis.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;\n};\n\n//return only actual rows (not group headers etc)\nRowManager.prototype.getRows = function (active) {\n\tvar rows;\n\n\tswitch (active) {\n\t\tcase \"active\":\n\t\t\trows = this.activeRows;\n\t\t\tbreak;\n\n\t\tcase \"display\":\n\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\tbreak;\n\n\t\tcase \"visible\":\n\t\t\trows = this.getVisibleRows(true);\n\t\t\tbreak;\n\n\t\tcase \"selected\":\n\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\trows = this.rows;\n\t}\n\n\treturn rows;\n};\n\n///////////////// Table Rendering /////////////////\n\n//trigger rerender of table in current position\nRowManager.prototype.reRenderInPosition = function (callback) {\n\tif (this.getRenderMode() == \"virtual\") {\n\n\t\tif (this.redrawBlock) {\n\t\t\tif (callback) {\n\t\t\t\tcallback();\n\t\t\t} else {\n\t\t\t\tthis.redrawBlockRederInPosition = true;\n\t\t\t}\n\t\t} else {\n\t\t\tvar scrollTop = this.element.scrollTop;\n\t\t\tvar topRow = false;\n\t\t\tvar topOffset = false;\n\n\t\t\tvar left = this.scrollLeft;\n\n\t\t\tvar rows = this.getDisplayRows();\n\n\t\t\tfor (var i = this.vDomTop; i <= this.vDomBottom; i++) {\n\n\t\t\t\tif (rows[i]) {\n\t\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\n\n\t\t\t\t\tif (topOffset === false || Math.abs(diff) < topOffset) {\n\t\t\t\t\t\ttopOffset = diff;\n\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (callback) {\n\t\t\t\tcallback();\n\t\t\t}\n\n\t\t\tthis._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0);\n\n\t\t\tthis.scrollHorizontal(left);\n\t\t}\n\t} else {\n\t\tthis.renderTable();\n\n\t\tif (callback) {\n\t\t\tcallback();\n\t\t}\n\t}\n};\n\nRowManager.prototype.setRenderMode = function () {\n\n\tif (this.table.options.virtualDom) {\n\n\t\tthis.renderMode = \"virtual\";\n\n\t\tif (this.table.element.clientHeight || this.table.options.height) {\n\t\t\tthis.fixedHeight = true;\n\t\t} else {\n\t\t\tthis.fixedHeight = false;\n\t\t}\n\t} else {\n\t\tthis.renderMode = \"classic\";\n\t}\n};\n\nRowManager.prototype.getRenderMode = function () {\n\treturn this.renderMode;\n};\n\nRowManager.prototype.renderTable = function () {\n\n\tthis.table.options.renderStarted.call(this.table);\n\n\tthis.element.scrollTop = 0;\n\n\tswitch (this.renderMode) {\n\t\tcase \"classic\":\n\t\t\tthis._simpleRender();\n\t\t\tbreak;\n\n\t\tcase \"virtual\":\n\t\t\tthis._virtualRenderFill();\n\t\t\tbreak;\n\t}\n\n\tif (this.firstRender) {\n\t\tif (this.displayRowsCount) {\n\t\t\tthis.firstRender = false;\n\t\t\tthis.table.modules.layout.layout();\n\t\t} else {\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\t}\n\n\tif (this.table.modExists(\"frozenColumns\")) {\n\t\tthis.table.modules.frozenColumns.layout();\n\t}\n\n\tif (!this.displayRowsCount) {\n\t\tif (this.table.options.placeholder) {\n\n\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\n\n\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\n\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\n\t\t}\n\t}\n\n\tthis.table.options.renderComplete.call(this.table);\n};\n\n//simple render on heightless table\nRowManager.prototype._simpleRender = function () {\n\tthis._clearVirtualDom();\n\n\tif (this.displayRowsCount) {\n\t\tthis.checkClassicModeGroupHeaderWidth();\n\t} else {\n\t\tthis.renderEmptyScroll();\n\t}\n};\n\nRowManager.prototype.checkClassicModeGroupHeaderWidth = function () {\n\tvar self = this,\n\t element = this.tableElement,\n\t onlyGroupHeaders = true;\n\n\tself.getDisplayRows().forEach(function (row, index) {\n\t\tself.styleRow(row, index);\n\t\telement.appendChild(row.getElement());\n\t\trow.initialize(true);\n\n\t\tif (row.type !== \"group\") {\n\t\t\tonlyGroupHeaders = false;\n\t\t}\n\t});\n\n\tif (onlyGroupHeaders) {\n\t\telement.style.minWidth = self.table.columnManager.getWidth() + \"px\";\n\t} else {\n\t\telement.style.minWidth = \"\";\n\t}\n};\n\n//show scrollbars on empty table div\nRowManager.prototype.renderEmptyScroll = function () {\n\tif (this.table.options.placeholder) {\n\t\tthis.tableElement.style.display = \"none\";\n\t} else {\n\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t// this.tableElement.style.minHeight = \"1px\";\n\t\t// this.tableElement.style.visibility = \"hidden\";\n\t}\n};\n\nRowManager.prototype._clearVirtualDom = function () {\n\tvar element = this.tableElement;\n\n\tif (this.table.options.placeholder && this.table.options.placeholder.parentNode) {\n\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\n\t}\n\n\t// element.children.detach();\n\twhile (element.firstChild) {\n\t\telement.removeChild(element.firstChild);\n\t}element.style.paddingTop = \"\";\n\telement.style.paddingBottom = \"\";\n\telement.style.minWidth = \"\";\n\telement.style.minHeight = \"\";\n\telement.style.display = \"\";\n\telement.style.visibility = \"\";\n\n\tthis.scrollTop = 0;\n\tthis.scrollLeft = 0;\n\tthis.vDomTop = 0;\n\tthis.vDomBottom = 0;\n\tthis.vDomTopPad = 0;\n\tthis.vDomBottomPad = 0;\n};\n\nRowManager.prototype.styleRow = function (row, index) {\n\tvar rowEl = row.getElement();\n\n\tif (index % 2) {\n\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t} else {\n\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t}\n};\n\n//full virtual render\nRowManager.prototype._virtualRenderFill = function (position, forceMove, offset) {\n\tvar self = this,\n\t element = self.tableElement,\n\t holder = self.element,\n\t topPad = 0,\n\t rowsHeight = 0,\n\t topPadHeight = 0,\n\t i = 0,\n\t onlyGroupHeaders = true,\n\t rows = self.getDisplayRows();\n\n\tposition = position || 0;\n\n\toffset = offset || 0;\n\n\tif (!position) {\n\t\tself._clearVirtualDom();\n\t} else {\n\t\twhile (element.firstChild) {\n\t\t\telement.removeChild(element.firstChild);\n\t\t} //check if position is too close to bottom of table\n\t\tvar heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight;\n\n\t\tif (heightOccupied < self.height) {\n\t\t\tposition -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight);\n\n\t\t\tif (position < 0) {\n\t\t\t\tposition = 0;\n\t\t\t}\n\t\t}\n\n\t\t//calculate initial pad\n\t\ttopPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position);\n\t\tposition -= topPad;\n\t}\n\n\tif (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) {\n\n\t\tself.vDomTop = position;\n\n\t\tself.vDomBottom = position - 1;\n\n\t\twhile ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) {\n\t\t\tvar index = self.vDomBottom + 1,\n\t\t\t row = rows[index],\n\t\t\t rowHeight = 0;\n\n\t\t\tself.styleRow(row, index);\n\n\t\t\telement.appendChild(row.getElement());\n\n\t\t\trow.initialize();\n\n\t\t\tif (!row.heightInitialized) {\n\t\t\t\trow.normalizeHeight(true);\n\t\t\t}\n\n\t\t\t// if(!row.initialized){\n\t\t\t// \trow.initialize(true);\n\t\t\t// }else{\n\t\t\t// \tif(!row.heightInitialized){\n\t\t\t// \t\trow.normalizeHeight(true);\n\t\t\t// \t}\n\t\t\t// }\n\n\t\t\trowHeight = row.getHeight();\n\n\t\t\tif (i < topPad) {\n\t\t\t\ttopPadHeight += rowHeight;\n\t\t\t} else {\n\t\t\t\trowsHeight += rowHeight;\n\t\t\t}\n\n\t\t\tif (rowHeight > this.vDomWindowBuffer) {\n\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t}\n\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\n\t\t\tself.vDomBottom++;\n\t\t\ti++;\n\t\t}\n\n\t\tif (!position) {\n\t\t\tthis.vDomTopPad = 0;\n\t\t\t//adjust rowheight to match average of rendered elements\n\t\t\tself.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\n\t\t\tself.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1);\n\n\t\t\tself.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height;\n\t\t} else {\n\t\t\tself.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset;\n\t\t\tself.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0);\n\t\t}\n\n\t\telement.style.paddingTop = self.vDomTopPad + \"px\";\n\t\telement.style.paddingBottom = self.vDomBottomPad + \"px\";\n\n\t\tif (forceMove) {\n\t\t\tthis.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);\n\t\t}\n\n\t\tthis.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);\n\n\t\t//adjust for horizontal scrollbar if present (and not at top of table)\n\t\tif (this.element.scrollWidth > this.element.offsetWidth && forceMove) {\n\t\t\tthis.scrollTop += this.element.offsetHeight - this.element.clientHeight;\n\t\t}\n\n\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\n\t\tholder.scrollTop = this.scrollTop;\n\n\t\telement.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + \"px\" : \"\";\n\n\t\tif (self.table.options.groupBy) {\n\t\t\tif (self.table.modules.layout.getMode() != \"fitDataFill\" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) {\n\t\t\t\tself.tableElement.style.minWidth = self.table.columnManager.getWidth();\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.renderEmptyScroll();\n\t}\n\n\tif (!this.fixedHeight) {\n\t\tthis.adjustTableSize();\n\t}\n};\n\n//handle vertical scrolling\nRowManager.prototype.scrollVertical = function (dir) {\n\tvar topDiff = this.scrollTop - this.vDomScrollPosTop;\n\tvar bottomDiff = this.scrollTop - this.vDomScrollPosBottom;\n\tvar margin = this.vDomWindowBuffer * 2;\n\n\tif (-topDiff > margin || bottomDiff > margin) {\n\t\t//if big scroll redraw table;\n\t\tvar left = this.scrollLeft;\n\t\tthis._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount));\n\t\tthis.scrollHorizontal(left);\n\t} else {\n\n\t\tif (dir) {\n\t\t\t//scrolling up\n\t\t\tif (topDiff < 0) {\n\n\t\t\t\tthis._addTopRow(-topDiff);\n\t\t\t}\n\n\t\t\tif (bottomDiff < 0) {\n\n\t\t\t\t//hide bottom row if needed\n\t\t\t\tif (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) {\n\t\t\t\t\tthis._removeBottomRow(-bottomDiff);\n\t\t\t\t} else {\n\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t//scrolling down\n\t\t\tif (topDiff >= 0) {\n\n\t\t\t\t//hide top row if needed\n\t\t\t\tif (this.scrollTop > this.vDomWindowBuffer) {\n\n\t\t\t\t\tthis._removeTopRow(topDiff);\n\t\t\t\t} else {\n\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (bottomDiff >= 0) {\n\n\t\t\t\tthis._addBottomRow(bottomDiff);\n\t\t\t}\n\t\t}\n\t}\n};\n\nRowManager.prototype._addTopRow = function (topDiff) {\n\tvar i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n\tvar table = this.tableElement,\n\t rows = this.getDisplayRows();\n\n\tif (this.vDomTop) {\n\t\tvar index = this.vDomTop - 1,\n\t\t topRow = rows[index],\n\t\t topRowHeight = topRow.getHeight() || this.vDomRowHeight;\n\n\t\t//hide top row if needed\n\t\tif (topDiff >= topRowHeight) {\n\t\t\tthis.styleRow(topRow, index);\n\t\t\ttable.insertBefore(topRow.getElement(), table.firstChild);\n\t\t\tif (!topRow.initialized || !topRow.heightInitialized) {\n\t\t\t\tthis.vDomTopNewRows.push(topRow);\n\n\t\t\t\tif (!topRow.heightInitialized) {\n\t\t\t\t\ttopRow.clearCellHeight();\n\t\t\t\t}\n\t\t\t}\n\t\t\ttopRow.initialize();\n\n\t\t\tthis.vDomTopPad -= topRowHeight;\n\n\t\t\tif (this.vDomTopPad < 0) {\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\n\t\t\t}\n\n\t\t\tif (!index) {\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop -= topRowHeight;\n\t\t\tthis.vDomTop--;\n\t\t}\n\n\t\ttopDiff = -(this.scrollTop - this.vDomScrollPosTop);\n\n\t\tif (topRow.getHeight() > this.vDomWindowBuffer) {\n\t\t\tthis.vDomWindowBuffer = topRow.getHeight() * 2;\n\t\t}\n\n\t\tif (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) {\n\t\t\tthis._addTopRow(topDiff, i + 1);\n\t\t} else {\n\t\t\tthis._quickNormalizeRowHeight(this.vDomTopNewRows);\n\t\t}\n\t}\n};\n\nRowManager.prototype._removeTopRow = function (topDiff) {\n\tvar table = this.tableElement,\n\t topRow = this.getDisplayRows()[this.vDomTop],\n\t topRowHeight = topRow.getHeight() || this.vDomRowHeight;\n\n\tif (topDiff >= topRowHeight) {\n\n\t\tvar rowEl = topRow.getElement();\n\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\tthis.vDomTopPad += topRowHeight;\n\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\tthis.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;\n\t\tthis.vDomTop++;\n\n\t\ttopDiff = this.scrollTop - this.vDomScrollPosTop;\n\n\t\tthis._removeTopRow(topDiff);\n\t}\n};\n\nRowManager.prototype._addBottomRow = function (bottomDiff) {\n\tvar i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n\tvar table = this.tableElement,\n\t rows = this.getDisplayRows();\n\n\tif (this.vDomBottom < this.displayRowsCount - 1) {\n\t\tvar index = this.vDomBottom + 1,\n\t\t bottomRow = rows[index],\n\t\t bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\n\n\t\t//hide bottom row if needed\n\t\tif (bottomDiff >= bottomRowHeight) {\n\t\t\tthis.styleRow(bottomRow, index);\n\t\t\ttable.appendChild(bottomRow.getElement());\n\n\t\t\tif (!bottomRow.initialized || !bottomRow.heightInitialized) {\n\t\t\t\tthis.vDomBottomNewRows.push(bottomRow);\n\n\t\t\t\tif (!bottomRow.heightInitialized) {\n\t\t\t\t\tbottomRow.clearCellHeight();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbottomRow.initialize();\n\n\t\t\tthis.vDomBottomPad -= bottomRowHeight;\n\n\t\t\tif (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) {\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom += bottomRowHeight;\n\t\t\tthis.vDomBottom++;\n\t\t}\n\n\t\tbottomDiff = this.scrollTop - this.vDomScrollPosBottom;\n\n\t\tif (bottomRow.getHeight() > this.vDomWindowBuffer) {\n\t\t\tthis.vDomWindowBuffer = bottomRow.getHeight() * 2;\n\t\t}\n\n\t\tif (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) {\n\t\t\tthis._addBottomRow(bottomDiff, i + 1);\n\t\t} else {\n\t\t\tthis._quickNormalizeRowHeight(this.vDomBottomNewRows);\n\t\t}\n\t}\n};\n\nRowManager.prototype._removeBottomRow = function (bottomDiff) {\n\tvar table = this.tableElement,\n\t bottomRow = this.getDisplayRows()[this.vDomBottom],\n\t bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\n\n\tif (bottomDiff >= bottomRowHeight) {\n\n\t\tvar rowEl = bottomRow.getElement();\n\n\t\tif (rowEl.parentNode) {\n\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t}\n\n\t\tthis.vDomBottomPad += bottomRowHeight;\n\n\t\tif (this.vDomBottomPad < 0) {\n\t\t\tthis.vDomBottomPad = 0;\n\t\t}\n\n\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\tthis.vDomScrollPosBottom -= bottomRowHeight;\n\t\tthis.vDomBottom--;\n\n\t\tbottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);\n\n\t\tthis._removeBottomRow(bottomDiff);\n\t}\n};\n\nRowManager.prototype._quickNormalizeRowHeight = function (rows) {\n\trows.forEach(function (row) {\n\t\trow.calcHeight();\n\t});\n\n\trows.forEach(function (row) {\n\t\trow.setCellHeight();\n\t});\n\n\trows.length = 0;\n};\n\n//normalize height of active rows\nRowManager.prototype.normalizeHeight = function () {\n\tthis.activeRows.forEach(function (row) {\n\t\trow.normalizeHeight();\n\t});\n};\n\n//adjust the height of the table holder to fit in the Tabulator element\nRowManager.prototype.adjustTableSize = function () {\n\tvar initialHeight = this.element.clientHeight,\n\t modExists;\n\n\tif (this.renderMode === \"virtual\") {\n\n\t\tvar otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\n\n\t\tif (this.fixedHeight) {\n\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t} else {\n\t\t\tthis.element.style.height = \"\";\n\t\t\tthis.element.style.height = this.table.element.clientHeight - otherHeight + \"px\";\n\t\t\tthis.element.scrollTop = this.scrollTop;\n\t\t}\n\n\t\tthis.height = this.element.clientHeight;\n\t\tthis.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;\n\n\t\t//check if the table has changed size when dealing with variable height tables\n\t\tif (!this.fixedHeight && initialHeight != this.element.clientHeight) {\n\t\t\tmodExists = this.table.modExists(\"resizeTable\");\n\n\t\t\tif (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t}\n\t}\n};\n\n//renitialize all rows\nRowManager.prototype.reinitialize = function () {\n\tthis.rows.forEach(function (row) {\n\t\trow.reinitialize(true);\n\t});\n};\n\n//prevent table from being redrawn\nRowManager.prototype.blockRedraw = function () {\n\tthis.redrawBlock = true;\n\tthis.redrawBlockRestoreConfig = false;\n};\n\n//restore table redrawing\nRowManager.prototype.restoreRedraw = function () {\n\tthis.redrawBlock = false;\n\n\tif (this.redrawBlockRestoreConfig) {\n\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\n\n\t\tthis.redrawBlockRestoreConfig = false;\n\t} else {\n\t\tif (this.redrawBlockRederInPosition) {\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t}\n\n\tthis.redrawBlockRederInPosition = false;\n};\n\n//redraw table\nRowManager.prototype.redraw = function (force) {\n\tvar pos = 0,\n\t left = this.scrollLeft;\n\n\tthis.adjustTableSize();\n\n\tthis.table.tableWidth = this.table.element.clientWidth;\n\n\tif (!force) {\n\t\tif (this.renderMode == \"classic\") {\n\n\t\t\tif (this.table.options.groupBy) {\n\t\t\t\tthis.refreshActiveData(\"group\", false, false);\n\t\t\t} else {\n\t\t\t\tthis._simpleRender();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.reRenderInPosition();\n\t\t\tthis.scrollHorizontal(left);\n\t\t}\n\n\t\tif (!this.displayRowsCount) {\n\t\t\tif (this.table.options.placeholder) {\n\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.renderTable();\n\t}\n};\n\nRowManager.prototype.resetScroll = function () {\n\tthis.element.scrollLeft = 0;\n\tthis.element.scrollTop = 0;\n\n\tif (this.table.browser === \"ie\") {\n\t\tvar event = document.createEvent(\"Event\");\n\t\tevent.initEvent(\"scroll\", false, true);\n\t\tthis.element.dispatchEvent(event);\n\t} else {\n\t\tthis.element.dispatchEvent(new Event('scroll'));\n\t}\n};\n\nvar VDomHoz = function VDomHoz(table) {\n\tthis.table = table;\n\n\tthis.element = this.table.rowManager.tableElement;\n\tthis.holderEl = this.table.rowManager.element;\n\n\tthis.leftCol = 0;\n\tthis.rightCol = 0;\n\tthis.scrollLeft = 0;\n\n\tthis.vDomScrollPosLeft = 0;\n\tthis.vDomScrollPosRight = 0;\n\n\tthis.vDomPadLeft = 0;\n\tthis.vDomPadRight = 0;\n\n\tthis.fitDataColAvg = 0;\n\n\tthis.window = 200; //pixel margin to make column visible before it is shown on screen\n\n\tthis.initialized = false;\n\n\tthis.columns = [];\n\n\tif (this.compatabilityCheck()) {\n\t\tthis.initialize();\n\t}\n};\n\nVDomHoz.prototype.compatabilityCheck = function () {\n\tvar options = this.table.options,\n\t frozen = false,\n\t ok = true;\n\n\tif (options.layout == \"fitDataTable\") {\n\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with fitDataTable layout mode\");\n\t\tok = false;\n\t}\n\n\tif (options.responsiveLayout) {\n\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with responsive columns\");\n\t\tok = false;\n\t}\n\n\tif (this.table.rtl) {\n\t\tconsole.warn(\"Horizontal Vitrual DOM is not currently compatible with RTL text direction\");\n\t\tok = false;\n\t}\n\n\t// if(options.rowFormatter){\n\t// \tconsole.warn(\"Horizontal Vitrual DOM is not compatible with row formatters\");\n\t// \tok = false;\n\t// }\n\n\tif (options.columns) {\n\t\tfrozen = options.columns.find(function (col) {\n\t\t\treturn col.frozen;\n\t\t});\n\n\t\tif (frozen) {\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with frozen columns\");\n\t\t\tok = false;\n\t\t}\n\t}\n\n\tif (!ok) {\n\t\toptions.virtualDomHoz = false;\n\t}\n\n\treturn ok;\n};\n\nVDomHoz.prototype.initialize = function () {\n\tvar _this17 = this;\n\n\tthis.holderEl.addEventListener(\"scroll\", function () {\n\t\tvar left = _this17.holderEl.scrollLeft;\n\n\t\tif (_this17.scrollLeft != left) {\n\t\t\t_this17.scrollLeft = left;\n\t\t\t_this17.scroll(left - (_this17.vDomScrollPosLeft + _this17.window));\n\t\t}\n\t});\n};\n\nVDomHoz.prototype.deinitialize = function () {\n\tthis.initialized = false;\n};\n\nVDomHoz.prototype.clear = function () {\n\tthis.columns = [];\n\n\tthis.leftCol = -1;\n\tthis.rightCol = 0;\n\n\tthis.vDomScrollPosLeft = 0;\n\tthis.vDomScrollPosRight = 0;\n\tthis.vDomPadLeft = 0;\n\tthis.vDomPadRight = 0;\n};\n\nVDomHoz.prototype.dataChange = function () {\n\tvar change = false,\n\t collsWidth = 0,\n\t colEnd = 0,\n\t group,\n\t row,\n\t rowEl;\n\n\tif (this.table.options.layout === \"fitData\") {\n\t\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\t\tif (!column.definition.width && column.visible) {\n\t\t\t\tchange = true;\n\t\t\t}\n\t\t});\n\n\t\tif (change) {\n\t\t\tif (change && this.table.rowManager.getDisplayRows().length) {\n\t\t\t\t// this.table.vdomHoz.deinitialize();\n\n\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\n\n\t\t\t\tif (this.table.options.groupBy) {\n\t\t\t\t\tgroup = this.table.modules.groupRows.getGroups(false)[0];\n\n\t\t\t\t\trow = group.getRows(false)[0];\n\t\t\t\t} else {\n\t\t\t\t\trow = this.table.rowManager.getDisplayRows()[0];\n\t\t\t\t}\n\n\t\t\t\tif (row) {\n\n\t\t\t\t\trowEl = row.getElement();\n\n\t\t\t\t\trow.generateCells();\n\n\t\t\t\t\tthis.element.appendChild(rowEl);\n\n\t\t\t\t\tfor (var colEnd = 0; colEnd < row.cells.length; colEnd++) {\n\t\t\t\t\t\tvar cell = row.cells[colEnd];\n\t\t\t\t\t\trowEl.appendChild(cell.getElement());\n\n\t\t\t\t\t\tcell.column.reinitializeWidth();\n\n\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\n\n\t\t\t\t\t\tif (collsWidth > this.vDomScrollPosRight) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\t\t\t\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\n\n\t\t\t\t\tfor (colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++) {\n\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.reinitialize(false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (this.table.options.layout === \"fitColumns\") {\n\t\t\tthis.table.modules.layout.layout();\n\t\t\tthis.table.vdomHoz.reinitialize(false, true);\n\t\t}\n\t}\n};\n\nVDomHoz.prototype.fitDataLayoutOverride = function () {\n\tfor (var _i5 = this.leftCol; _i5 <= this.rightCol; _i5++) {\n\t\tthis.columns[_i5].reinitializeWidth();\n\t}\n};\n\nVDomHoz.prototype.reinitialize = function (update, blockRedraw) {\n\tvar _this18 = this;\n\n\tvar old = {\n\t\tcols: this.columns,\n\t\tleftCol: this.leftCol,\n\t\trightCol: this.rightCol\n\t};\n\n\tif (update && !this.initialized) {\n\t\treturn;\n\t}\n\n\tthis.clear();\n\n\tthis.scrollLeft = this.holderEl.scrollLeft;\n\n\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\n\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\n\n\tvar colPos = 0;\n\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tvar config = {};\n\n\t\tif (column.visible) {\n\t\t\tvar width = column.getWidth();\n\n\t\t\tconfig.leftPos = colPos;\n\t\t\tconfig.rightPos = colPos + width;\n\n\t\t\tif (colPos + width > _this18.vDomScrollPosLeft && colPos < _this18.vDomScrollPosRight) {\n\t\t\t\t//column is visible\n\n\t\t\t\tif (_this18.leftCol == -1) {\n\t\t\t\t\t_this18.leftCol = _this18.columns.length;\n\t\t\t\t\t_this18.vDomPadLeft = colPos;\n\t\t\t\t}\n\n\t\t\t\t_this18.rightCol = _this18.columns.length;\n\t\t\t} else {\n\t\t\t\t// column is hidden\n\t\t\t\tif (_this18.leftCol !== -1) {\n\t\t\t\t\t_this18.vDomPadRight += width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_this18.columns.push(column);\n\n\t\t\tcolumn.modules.vdomHoz = config;\n\n\t\t\tcolPos += width;\n\t\t}\n\t});\n\n\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\n\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\n\n\tthis.initialized = true;\n\n\tif (!blockRedraw) {\n\t\tif (!update || this.reinitChanged(old)) {\n\t\t\tthis.renitializeRows();\n\t\t}\n\t}\n\n\tthis.holderEl.scrollLeft = this.scrollLeft;\n};\n\nVDomHoz.prototype.reinitChanged = function (old) {\n\tvar _this19 = this;\n\n\tvar match = true;\n\n\tif (old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol) {\n\t\treturn true;\n\t}\n\n\told.cols.forEach(function (col, i) {\n\t\tif (col !== _this19.columns[i]) {\n\t\t\tmatch = false;\n\t\t}\n\t});\n\n\treturn !match;\n};\n\nVDomHoz.prototype.renitializeRows = function () {\n\tvar _this20 = this;\n\n\tvar rows = this.table.rowManager.getVisibleRows();\n\trows.forEach(function (row) {\n\t\t_this20.reinitializeRow(row, true);\n\t});\n};\n\nVDomHoz.prototype.scroll = function (diff) {\n\tthis.vDomScrollPosLeft += diff;\n\tthis.vDomScrollPosRight += diff;\n\n\tif (diff > this.holderEl.clientWidth * .8) {\n\t\tthis.reinitialize();\n\t} else {\n\t\tif (diff > 0) {\n\t\t\t//scroll right\n\t\t\tthis.addColRight();\n\t\t\tthis.removeColLeft();\n\t\t} else {\n\t\t\t//scroll left\n\t\t\tthis.addColLeft();\n\t\t\tthis.removeColRight();\n\t\t}\n\t}\n};\n\nVDomHoz.prototype.colPositionAdjust = function (start, end, diff) {\n\tfor (var _i6 = start; _i6 < end; _i6++) {\n\t\tvar column = this.columns[_i6];\n\n\t\tcolumn.modules.vdomHoz.leftPos -= diff;\n\t\tcolumn.modules.vdomHoz.rightPos -= diff;\n\t}\n};\n\nVDomHoz.prototype.addColRight = function () {\n\tvar column = this.columns[this.rightCol + 1],\n\t rows,\n\t oldWidth,\n\t widthDiff;\n\n\tif (column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight) {\n\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t}\n\t\t});\n\n\t\tif (this.fitDataColAvg) {\n\n\t\t\toldWidth = column.getWidth();\n\n\t\t\tif (oldWidth === this.fitDataColAvg) {\n\t\t\t\tcolumn.reinitializeWidth();\n\n\t\t\t\twidthDiff = oldWidth - column.getWidth();\n\n\t\t\t\tif (widthDiff) {\n\t\t\t\t\tcolumn.modules.vdomHoz.rightPos -= widthDiff;\n\t\t\t\t\tthis.colPositionAdjust(this.rightCol + 1, this.columns.length, widthDiff);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.rightCol++;\n\n\t\tif (this.rightCol >= this.columns.length - 1) {\n\t\t\tthis.vDomPadRight = 0;\n\t\t} else {\n\t\t\tthis.vDomPadRight -= column.getWidth();\n\t\t}\n\n\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\n\n\t\tthis.addColRight();\n\t}\n};\n\nVDomHoz.prototype.addColLeft = function () {\n\tvar column = this.columns[this.leftCol - 1],\n\t rows;\n\n\tif (column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft) {\n\t\tvar rows = this.table.rowManager.getVisibleRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().prepend(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t}\n\t\t});\n\n\t\tif (!this.leftCol) {\n\t\t\tthis.vDomPadLeft = 0;\n\t\t} else {\n\t\t\tthis.vDomPadLeft -= column.getWidth();\n\t\t}\n\n\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\n\n\t\tthis.leftCol--;\n\n\t\tthis.addColLeft();\n\t}\n};\n\nVDomHoz.prototype.removeColRight = function (column) {\n\tvar column = this.columns[this.rightCol],\n\t rows;\n\n\tif (column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight) {\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\tcolumn.modules.vdomHoz.visible = false;\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t}\n\t\t});\n\n\t\tthis.vDomPadRight += column.getWidth();\n\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\n\n\t\tthis.rightCol--;\n\n\t\tthis.removeColRight();\n\t}\n};\n\nVDomHoz.prototype.removeColLeft = function () {\n\tvar column = this.columns[this.leftCol],\n\t rows;\n\n\tif (column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft) {\n\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t}\n\t\t});\n\n\t\tthis.vDomPadLeft += column.getWidth();\n\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\n\n\t\tthis.leftCol++;\n\n\t\tthis.removeColLeft();\n\t}\n};\n\nVDomHoz.prototype.initializeRow = function (row) {\n\tif (row.type !== \"group\") {\n\t\trow.modules.vdomHoz = {\n\t\t\tleftCol: this.leftCol,\n\t\t\trightCol: this.rightCol\n\t\t};\n\n\t\tfor (var _i7 = this.leftCol; _i7 <= this.rightCol; _i7++) {\n\t\t\tvar column = this.columns[_i7];\n\n\t\t\tif (column && column.visible) {\n\t\t\t\tvar cell = row.getCell(column);\n\n\t\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t}\n\t\t}\n\t}\n};\n\nVDomHoz.prototype.reinitializeRow = function (row, force) {\n\tif (row.type !== \"group\") {\n\t\tif (force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol) {\n\t\t\tvar rowEl = row.getElement();\n\t\t\twhile (rowEl.firstChild) {\n\t\t\t\trowEl.removeChild(rowEl.firstChild);\n\t\t\t}this.initializeRow(row);\n\t\t}\n\t}\n};\n//public row object\nvar RowComponent = function RowComponent(row) {\n\tthis._row = row;\n};\n\nRowComponent.prototype.getData = function (transform) {\n\treturn this._row.getData(transform);\n};\n\nRowComponent.prototype.getElement = function () {\n\treturn this._row.getElement();\n};\n\nRowComponent.prototype.getCells = function () {\n\tvar cells = [];\n\n\tthis._row.getCells().forEach(function (cell) {\n\t\tcells.push(cell.getComponent());\n\t});\n\n\treturn cells;\n};\n\nRowComponent.prototype.getCell = function (column) {\n\tvar cell = this._row.getCell(column);\n\treturn cell ? cell.getComponent() : false;\n};\n\nRowComponent.prototype.getIndex = function () {\n\treturn this._row.getData(\"data\")[this._row.table.options.index];\n};\n\nRowComponent.prototype.getPosition = function (active) {\n\treturn this._row.table.rowManager.getRowPosition(this._row, active);\n};\n\nRowComponent.prototype.delete = function () {\n\treturn this._row.delete();\n};\n\nRowComponent.prototype.scrollTo = function () {\n\treturn this._row.table.rowManager.scrollToRow(this._row);\n};\n\nRowComponent.prototype.pageTo = function () {\n\tif (this._row.table.modExists(\"page\", true)) {\n\t\treturn this._row.table.modules.page.setPageToRow(this._row);\n\t}\n};\n\nRowComponent.prototype.move = function (to, after) {\n\tthis._row.moveToRow(to, after);\n};\n\nRowComponent.prototype.update = function (data) {\n\treturn this._row.updateData(data);\n};\n\nRowComponent.prototype.normalizeHeight = function () {\n\tthis._row.normalizeHeight(true);\n};\n\nRowComponent.prototype.select = function () {\n\tthis._row.table.modules.selectRow.selectRows(this._row);\n};\n\nRowComponent.prototype.deselect = function () {\n\tthis._row.table.modules.selectRow.deselectRows(this._row);\n};\n\nRowComponent.prototype.toggleSelect = function () {\n\tthis._row.table.modules.selectRow.toggleRow(this._row);\n};\n\nRowComponent.prototype.isSelected = function () {\n\treturn this._row.table.modules.selectRow.isRowSelected(this._row);\n};\n\nRowComponent.prototype._getSelf = function () {\n\treturn this._row;\n};\n\nRowComponent.prototype.validate = function () {\n\treturn this._row.validate();\n};\n\nRowComponent.prototype.freeze = function () {\n\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\t\tthis._row.table.modules.frozenRows.freezeRow(this._row);\n\t}\n};\n\nRowComponent.prototype.unfreeze = function () {\n\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\t\tthis._row.table.modules.frozenRows.unfreezeRow(this._row);\n\t}\n};\n\nRowComponent.prototype.isFrozen = function () {\n\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\t\tvar index = this._row.table.modules.frozenRows.rows.indexOf(this._row);\n\t\treturn index > -1;\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.treeCollapse = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\tthis._row.table.modules.dataTree.collapseRow(this._row);\n\t}\n};\n\nRowComponent.prototype.treeExpand = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\tthis._row.table.modules.dataTree.expandRow(this._row);\n\t}\n};\n\nRowComponent.prototype.treeToggle = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\tthis._row.table.modules.dataTree.toggleRow(this._row);\n\t}\n};\n\nRowComponent.prototype.getTreeParent = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\treturn this._row.table.modules.dataTree.getTreeParent(this._row);\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.getTreeChildren = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\treturn this._row.table.modules.dataTree.getTreeChildren(this._row, true);\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.addTreeChild = function (data, pos, index) {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\treturn this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.reformat = function () {\n\treturn this._row.reinitialize();\n};\n\nRowComponent.prototype.getGroup = function () {\n\treturn this._row.getGroup().getComponent();\n};\n\nRowComponent.prototype.getTable = function () {\n\treturn this._row.table;\n};\n\nRowComponent.prototype.getNextRow = function () {\n\tvar row = this._row.nextRow();\n\treturn row ? row.getComponent() : row;\n};\n\nRowComponent.prototype.getPrevRow = function () {\n\tvar row = this._row.prevRow();\n\treturn row ? row.getComponent() : row;\n};\n\nvar Row = function Row(data, parent) {\n\tvar type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"row\";\n\n\tthis.table = parent.table;\n\tthis.parent = parent;\n\tthis.data = {};\n\tthis.type = type; //type of element\n\tthis.element = false;\n\tthis.modules = {}; //hold module variables;\n\tthis.cells = [];\n\tthis.height = 0; //hold element height\n\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\n\tthis.manualHeight = false; //user has manually set row height\n\tthis.outerHeight = 0; //holde lements outer height\n\tthis.initialized = false; //element has been rendered\n\tthis.heightInitialized = false; //element has resized cells to fit\n\n\tthis.component = null;\n\n\tthis.created = false;\n\n\tthis.setData(data);\n};\n\nRow.prototype.create = function () {\n\tif (!this.created) {\n\t\tthis.created = true;\n\t\tthis.generateElement();\n\t}\n};\n\nRow.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-row\");\n\tel.setAttribute(\"role\", \"row\");\n\n\tthis.element = el;\n};\n\nRow.prototype.getElement = function () {\n\tthis.create();\n\treturn this.element;\n};\n\nRow.prototype.detachElement = function () {\n\tif (this.element && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t}\n};\n\nRow.prototype.generateElement = function () {\n\tvar self = this,\n\t dblTap,\n\t tapHold,\n\t tap;\n\n\tthis.createElement();\n\n\t//set row selection characteristics\n\tif (self.table.options.selectable !== false && self.table.modExists(\"selectRow\")) {\n\t\tself.table.modules.selectRow.initializeRow(this);\n\t}\n\n\t//setup movable rows\n\tif (self.table.options.movableRows !== false && self.table.modExists(\"moveRow\")) {\n\t\tself.table.modules.moveRow.initializeRow(this);\n\t}\n\n\t//setup data tree\n\tif (self.table.options.dataTree !== false && self.table.modExists(\"dataTree\")) {\n\t\tself.table.modules.dataTree.initializeRow(this);\n\t}\n\n\t//setup column colapse container\n\tif (self.table.options.responsiveLayout === \"collapse\" && self.table.modExists(\"responsiveLayout\")) {\n\t\tself.table.modules.responsiveLayout.initializeRow(this);\n\t}\n\n\t//set column menu\n\tif ((self.table.options.rowContextMenu || self.table.options.rowClickMenu) && this.table.modExists(\"menu\")) {\n\t\tself.table.modules.menu.initializeRow(this);\n\t}\n\n\t//handle row click events\n\tif (self.table.options.rowClick) {\n\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\tself.table.options.rowClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowDblClick) {\n\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\tself.table.options.rowDblClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowContext) {\n\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\tself.table.options.rowContext(e, self.getComponent());\n\t\t});\n\t}\n\n\t//handle mouse events\n\tif (self.table.options.rowMouseEnter) {\n\t\tself.element.addEventListener(\"mouseenter\", function (e) {\n\t\t\tself.table.options.rowMouseEnter(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseLeave) {\n\t\tself.element.addEventListener(\"mouseleave\", function (e) {\n\t\t\tself.table.options.rowMouseLeave(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseOver) {\n\t\tself.element.addEventListener(\"mouseover\", function (e) {\n\t\t\tself.table.options.rowMouseOver(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseOut) {\n\t\tself.element.addEventListener(\"mouseout\", function (e) {\n\t\t\tself.table.options.rowMouseOut(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseMove) {\n\t\tself.element.addEventListener(\"mousemove\", function (e) {\n\t\t\tself.table.options.rowMouseMove(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowTap) {\n\n\t\ttap = false;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tself.table.options.rowTap(e, self.getComponent());\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (self.table.options.rowDblTap) {\n\n\t\tdblTap = null;\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tself.table.options.rowDblTap(e, self.getComponent());\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (self.table.options.rowTapHold) {\n\n\t\ttapHold = null;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tself.table.options.rowTapHold(e, self.getComponent());\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n};\n\nRow.prototype.generateCells = function () {\n\tthis.cells = this.table.columnManager.generateCells(this);\n};\n\n//functions to setup on first render\nRow.prototype.initialize = function (force) {\n\tvar _this21 = this;\n\n\tthis.create();\n\n\tif (!this.initialized || force) {\n\n\t\tthis.deleteCells();\n\n\t\twhile (this.element.firstChild) {\n\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t} //handle frozen cells\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\t\t\tthis.table.modules.frozenColumns.layoutRow(this);\n\t\t}\n\n\t\tthis.generateCells();\n\n\t\tif (this.table.options.virtualDomHoz && this.table.vdomHoz.initialized) {\n\t\t\tthis.table.vdomHoz.initializeRow(this);\n\t\t} else {\n\t\t\tthis.cells.forEach(function (cell) {\n\t\t\t\t_this21.element.appendChild(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\n\t\tif (force) {\n\t\t\tthis.normalizeHeight();\n\t\t}\n\n\t\t//setup movable rows\n\t\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\")) {\n\t\t\tthis.table.modules.dataTree.layoutRow(this);\n\t\t}\n\n\t\t//setup column colapse container\n\t\tif (this.table.options.responsiveLayout === \"collapse\" && this.table.modExists(\"responsiveLayout\")) {\n\t\t\tthis.table.modules.responsiveLayout.layoutRow(this);\n\t\t}\n\n\t\tif (this.table.options.rowFormatter) {\n\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t}\n\n\t\t//set resizable handles\n\t\tif (this.table.options.resizableRows && this.table.modExists(\"resizeRows\")) {\n\t\t\tthis.table.modules.resizeRows.initializeRow(this);\n\t\t}\n\n\t\tthis.initialized = true;\n\t} else {\n\t\tif (this.table.options.virtualDomHoz) {\n\t\t\tthis.table.vdomHoz.reinitializeRow(this);\n\t\t}\n\t}\n};\n\nRow.prototype.reinitializeHeight = function () {\n\tthis.heightInitialized = false;\n\n\tif (this.element && this.element.offsetParent !== null) {\n\t\tthis.normalizeHeight(true);\n\t}\n};\n\nRow.prototype.reinitialize = function (children) {\n\tthis.initialized = false;\n\tthis.heightInitialized = false;\n\n\tif (!this.manualHeight) {\n\t\tthis.height = 0;\n\t\tthis.heightStyled = \"\";\n\t}\n\n\tif (this.element && this.element.offsetParent !== null) {\n\t\tthis.initialize(true);\n\t}\n\n\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\", true)) {\n\t\tthis.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function (child) {\n\t\t\tchild.reinitialize(true);\n\t\t});\n\t}\n};\n\n//get heights when doing bulk row style calcs in virtual DOM\nRow.prototype.calcHeight = function (force) {\n\n\tvar maxHeight = 0,\n\t minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\n\n\tthis.cells.forEach(function (cell) {\n\t\tvar height = cell.getHeight();\n\t\tif (height > maxHeight) {\n\t\t\tmaxHeight = height;\n\t\t}\n\t});\n\n\tif (force) {\n\t\tthis.height = Math.max(maxHeight, minHeight);\n\t} else {\n\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\n\t}\n\n\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\n\tthis.outerHeight = this.element.offsetHeight;\n};\n\n//set of cells\nRow.prototype.setCellHeight = function () {\n\tthis.cells.forEach(function (cell) {\n\t\tcell.setHeight();\n\t});\n\n\tthis.heightInitialized = true;\n};\n\nRow.prototype.clearCellHeight = function () {\n\tthis.cells.forEach(function (cell) {\n\t\tcell.clearHeight();\n\t});\n};\n\n//normalize the height of elements in the row\nRow.prototype.normalizeHeight = function (force) {\n\n\tif (force) {\n\t\tthis.clearCellHeight();\n\t}\n\n\tthis.calcHeight(force);\n\n\tthis.setCellHeight();\n};\n\n// Row.prototype.setHeight = function(height){\n// \tthis.height = height;\n\n// \tthis.setCellHeight();\n// };\n\n//set height of rows\nRow.prototype.setHeight = function (height, force) {\n\tif (this.height != height || force) {\n\n\t\tthis.manualHeight = true;\n\n\t\tthis.height = height;\n\t\tthis.heightStyled = height ? height + \"px\" : \"\";\n\n\t\tthis.setCellHeight();\n\n\t\t// this.outerHeight = this.element.outerHeight();\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n};\n\n//return rows outer height\nRow.prototype.getHeight = function () {\n\treturn this.outerHeight;\n};\n\n//return rows outer Width\nRow.prototype.getWidth = function () {\n\treturn this.element.offsetWidth;\n};\n\n//////////////// Cell Management /////////////////\n\nRow.prototype.deleteCell = function (cell) {\n\tvar index = this.cells.indexOf(cell);\n\n\tif (index > -1) {\n\t\tthis.cells.splice(index, 1);\n\t}\n};\n\n//////////////// Data Management /////////////////\n\nRow.prototype.setData = function (data) {\n\tif (this.table.modExists(\"mutator\")) {\n\t\tdata = this.table.modules.mutator.transformRow(data, \"data\");\n\t}\n\n\tthis.data = data;\n\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {\n\t\tthis.table.modules.reactiveData.watchRow(this);\n\t}\n};\n\n//update the rows data\nRow.prototype.updateData = function (updatedData) {\n\tvar _this22 = this;\n\n\tvar visible = this.element && Tabulator.prototype.helpers.elVisible(this.element),\n\t tempData = {},\n\t newRowData;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tif (typeof updatedData === \"string\") {\n\t\t\tupdatedData = JSON.parse(updatedData);\n\t\t}\n\n\t\tif (_this22.table.options.reactiveData && _this22.table.modExists(\"reactiveData\", true)) {\n\t\t\t_this22.table.modules.reactiveData.block();\n\t\t}\n\n\t\t//mutate incomming data if needed\n\t\tif (_this22.table.modExists(\"mutator\")) {\n\n\t\t\ttempData = Object.assign(tempData, _this22.data);\n\t\t\ttempData = Object.assign(tempData, updatedData);\n\n\t\t\tnewRowData = _this22.table.modules.mutator.transformRow(tempData, \"data\", updatedData);\n\t\t} else {\n\t\t\tnewRowData = updatedData;\n\t\t}\n\n\t\t//set data\n\t\tfor (var attrname in newRowData) {\n\t\t\t_this22.data[attrname] = newRowData[attrname];\n\t\t}\n\n\t\tif (_this22.table.options.reactiveData && _this22.table.modExists(\"reactiveData\", true)) {\n\t\t\t_this22.table.modules.reactiveData.unblock();\n\t\t}\n\n\t\t//update affected cells only\n\t\tfor (var attrname in updatedData) {\n\n\t\t\tvar columns = _this22.table.columnManager.getColumnsByFieldRoot(attrname);\n\n\t\t\tcolumns.forEach(function (column) {\n\t\t\t\tvar cell = _this22.getCell(column.getField());\n\n\t\t\t\tif (cell) {\n\t\t\t\t\tvar value = column.getFieldValue(newRowData);\n\t\t\t\t\tif (cell.getValue() != value) {\n\t\t\t\t\t\tcell.setValueProcessData(value);\n\n\t\t\t\t\t\tif (visible) {\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (_this22.table.options.groupUpdateOnCellEdit && _this22.table.options.groupBy && _this22.table.modExists(\"groupRows\")) {\n\t\t\t_this22.table.modules.groupRows.reassignRowToGroup(_this22.row);\n\t\t}\n\n\t\t//Partial reinitialization if visible\n\t\tif (visible) {\n\t\t\t_this22.normalizeHeight(true);\n\n\t\t\tif (_this22.table.options.rowFormatter) {\n\t\t\t\t_this22.table.options.rowFormatter(_this22.getComponent());\n\t\t\t}\n\t\t} else {\n\t\t\t_this22.initialized = false;\n\t\t\t_this22.height = 0;\n\t\t\t_this22.heightStyled = \"\";\n\t\t}\n\n\t\tif (_this22.table.options.dataTree !== false && _this22.table.modExists(\"dataTree\") && _this22.table.modules.dataTree.redrawNeeded(updatedData)) {\n\t\t\t_this22.table.modules.dataTree.initializeRow(_this22);\n\n\t\t\tif (visible) {\n\t\t\t\t_this22.table.modules.dataTree.layoutRow(_this22);\n\t\t\t\t_this22.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t\t\t}\n\t\t}\n\n\t\t//this.reinitialize();\n\n\t\t_this22.table.options.rowUpdated.call(_this22.table, _this22.getComponent());\n\n\t\tif (_this22.table.options.dataChanged) {\n\t\t\t_this22.table.options.dataChanged.call(_this22.table, _this22.table.rowManager.getData());\n\t\t}\n\n\t\tresolve();\n\t});\n};\n\nRow.prototype.getData = function (transform) {\n\tif (transform) {\n\t\tif (this.table.modExists(\"accessor\")) {\n\t\t\treturn this.table.modules.accessor.transformRow(this, transform);\n\t\t}\n\t}\n\n\treturn this.data;\n};\n\nRow.prototype.getCell = function (column) {\n\tvar match = false;\n\n\tcolumn = this.table.columnManager.findColumn(column);\n\n\tmatch = this.cells.find(function (cell) {\n\t\treturn cell.column === column;\n\t});\n\n\treturn match;\n};\n\nRow.prototype.getCellIndex = function (findCell) {\n\treturn this.cells.findIndex(function (cell) {\n\t\treturn cell === findCell;\n\t});\n};\n\nRow.prototype.findNextEditableCell = function (index) {\n\tvar nextCell = false;\n\n\tif (index < this.cells.length - 1) {\n\t\tfor (var i = index + 1; i < this.cells.length; i++) {\n\t\t\tvar cell = this.cells[i];\n\n\t\t\tif (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {\n\t\t\t\tvar allowEdit = true;\n\n\t\t\t\tif (typeof cell.column.modules.edit.check == \"function\") {\n\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t}\n\n\t\t\t\tif (allowEdit) {\n\t\t\t\t\tnextCell = cell;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nextCell;\n};\n\nRow.prototype.findPrevEditableCell = function (index) {\n\tvar prevCell = false;\n\n\tif (index > 0) {\n\t\tfor (var i = index - 1; i >= 0; i--) {\n\t\t\tvar cell = this.cells[i],\n\t\t\t allowEdit = true;\n\n\t\t\tif (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {\n\t\t\t\tif (typeof cell.column.modules.edit.check == \"function\") {\n\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t}\n\n\t\t\t\tif (allowEdit) {\n\t\t\t\t\tprevCell = cell;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn prevCell;\n};\n\nRow.prototype.getCells = function () {\n\treturn this.cells;\n};\n\nRow.prototype.nextRow = function () {\n\tvar row = this.table.rowManager.nextDisplayRow(this, true);\n\treturn row || false;\n};\n\nRow.prototype.prevRow = function () {\n\tvar row = this.table.rowManager.prevDisplayRow(this, true);\n\treturn row || false;\n};\n\nRow.prototype.moveToRow = function (to, before) {\n\tvar toRow = this.table.rowManager.findRow(to);\n\n\tif (toRow) {\n\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\n\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching row found:\", to);\n\t}\n};\n\nRow.prototype.validate = function () {\n\tvar invalid = [];\n\n\tthis.cells.forEach(function (cell) {\n\t\tif (!cell.validate()) {\n\t\t\tinvalid.push(cell.getComponent());\n\t\t}\n\t});\n\n\treturn invalid.length ? invalid : true;\n};\n\n///////////////////// Actions /////////////////////\n\nRow.prototype.delete = function () {\n\tvar _this23 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar index, rows;\n\n\t\tif (_this23.table.options.history && _this23.table.modExists(\"history\")) {\n\n\t\t\tif (_this23.table.options.groupBy && _this23.table.modExists(\"groupRows\")) {\n\t\t\t\trows = _this23.getGroup().rows;\n\t\t\t\tindex = rows.indexOf(_this23);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tindex = rows[index - 1];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tindex = _this23.table.rowManager.getRowIndex(_this23);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tindex = _this23.table.rowManager.rows[index - 1];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_this23.table.modules.history.action(\"rowDelete\", _this23, { data: _this23.getData(), pos: !index, index: index });\n\t\t}\n\n\t\t_this23.deleteActual();\n\n\t\tresolve();\n\t});\n};\n\nRow.prototype.deleteActual = function (blockRedraw) {\n\tvar index = this.table.rowManager.getRowIndex(this);\n\n\tthis.detatchModules();\n\n\t// if(this.table.options.dataTree && this.table.modExists(\"dataTree\")){\n\t// \tthis.table.modules.dataTree.collapseRow(this, true);\n\t// }\n\n\t//remove any reactive data watchers from row object\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {}\n\t// this.table.modules.reactiveData.unwatchRow(this);\n\n\n\t//remove from group\n\tif (this.modules.group) {\n\t\tthis.modules.group.removeRow(this);\n\t}\n\n\tthis.table.rowManager.deleteRow(this, blockRedraw);\n\n\tthis.deleteCells();\n\n\tthis.initialized = false;\n\tthis.heightInitialized = false;\n\tthis.element = false;\n\n\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\", true)) {\n\t\tthis.table.modules.dataTree.rowDelete(this);\n\t}\n\n\t//recalc column calculations if present\n\tif (this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this);\n\t\t} else {\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t}\n\t}\n};\n\nRow.prototype.detatchModules = function () {\n\t//deselect row if it is selected\n\tif (this.table.modExists(\"selectRow\")) {\n\t\tthis.table.modules.selectRow._deselectRow(this, true);\n\t}\n\n\t//cancel edit if row is currently being edited\n\tif (this.table.modExists(\"edit\")) {\n\t\tif (this.table.modules.edit.currentCell.row === this) {\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t}\n\t}\n\n\tif (this.table.modExists(\"frozenRows\")) {\n\t\tthis.table.modules.frozenRows.detachRow(this);\n\t}\n};\n\nRow.prototype.deleteCells = function () {\n\tvar cellCount = this.cells.length;\n\n\tfor (var _i8 = 0; _i8 < cellCount; _i8++) {\n\t\tthis.cells[0].delete();\n\t}\n};\n\nRow.prototype.wipe = function () {\n\tthis.detatchModules();\n\tthis.deleteCells();\n\n\tif (this.element) {\n\t\twhile (this.element.firstChild) {\n\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t}if (this.element.parentNode) {\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\n\tthis.element = false;\n\tthis.modules = {};\n};\n\nRow.prototype.getGroup = function () {\n\treturn this.modules.group || false;\n};\n\n//////////////// Object Generation /////////////////\nRow.prototype.getComponent = function () {\n\tif (!this.component) {\n\t\tthis.component = new RowComponent(this);\n\t}\n\n\treturn this.component;\n};\n\n//public row object\nvar CellComponent = function CellComponent(cell) {\n\tthis._cell = cell;\n};\n\nCellComponent.prototype.getValue = function () {\n\treturn this._cell.getValue();\n};\n\nCellComponent.prototype.getOldValue = function () {\n\treturn this._cell.getOldValue();\n};\n\nCellComponent.prototype.getInitialValue = function () {\n\treturn this._cell.initialValue;\n};\n\nCellComponent.prototype.getElement = function () {\n\treturn this._cell.getElement();\n};\n\nCellComponent.prototype.getRow = function () {\n\treturn this._cell.row.getComponent();\n};\n\nCellComponent.prototype.getData = function () {\n\treturn this._cell.row.getData();\n};\n\nCellComponent.prototype.getField = function () {\n\treturn this._cell.column.getField();\n};\n\nCellComponent.prototype.getColumn = function () {\n\treturn this._cell.column.getComponent();\n};\n\nCellComponent.prototype.setValue = function (value, mutate) {\n\tif (typeof mutate == \"undefined\") {\n\t\tmutate = true;\n\t}\n\n\tthis._cell.setValue(value, mutate);\n};\n\nCellComponent.prototype.restoreOldValue = function () {\n\tthis._cell.setValueActual(this._cell.getOldValue());\n};\n\nCellComponent.prototype.restoreInitialValue = function () {\n\tthis._cell.setValueActual(this._cell.initialValue);\n};\n\nCellComponent.prototype.edit = function (force) {\n\treturn this._cell.edit(force);\n};\n\nCellComponent.prototype.cancelEdit = function () {\n\tthis._cell.cancelEdit();\n};\n\nCellComponent.prototype.isEdited = function () {\n\treturn !!this._cell.modules.edit && this._cell.modules.edit.edited;\n};\n\nCellComponent.prototype.clearEdited = function () {\n\tif (self.table.modExists(\"edit\", true)) {\n\t\tthis._cell.table.modules.edit.clearEdited(this._cell);\n\t}\n};\n\nCellComponent.prototype.isValid = function () {\n\treturn this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;\n};\n\nCellComponent.prototype.validate = function () {\n\treturn this._cell.validate();\n};\n\nCellComponent.prototype.clearValidation = function () {\n\tif (this._cell.table.modExists(\"validate\", true)) {\n\t\tthis._cell.table.modules.validate.clearValidation(this._cell);\n\t}\n};\n\nCellComponent.prototype.nav = function () {\n\treturn this._cell.nav();\n};\n\nCellComponent.prototype.checkHeight = function () {\n\tthis._cell.checkHeight();\n};\n\nCellComponent.prototype.getTable = function () {\n\treturn this._cell.table;\n};\n\nCellComponent.prototype._getSelf = function () {\n\treturn this._cell;\n};\n\nvar Cell = function Cell(column, row) {\n\n\tthis.table = column.table;\n\tthis.column = column;\n\tthis.row = row;\n\tthis.element = null;\n\tthis.value = null;\n\tthis.initialValue;\n\tthis.oldValue = null;\n\tthis.modules = {};\n\n\tthis.height = null;\n\tthis.width = null;\n\tthis.minWidth = null;\n\n\tthis.component = null;\n\n\tthis.loaded = false; //track if the cell has been added to the DOM yet\n\n\tthis.build();\n};\n\n//////////////// Setup Functions /////////////////\n\n//generate element\nCell.prototype.build = function () {\n\tthis.generateElement();\n\n\tthis.setWidth();\n\n\tthis._configureCell();\n\n\tthis.setValueActual(this.column.getFieldValue(this.row.data));\n\n\tthis.initialValue = this.value;\n};\n\nCell.prototype.generateElement = function () {\n\tthis.element = document.createElement('div');\n\tthis.element.className = \"tabulator-cell\";\n\tthis.element.setAttribute(\"role\", \"gridcell\");\n\tthis.element = this.element;\n};\n\nCell.prototype._configureCell = function () {\n\tvar self = this,\n\t cellEvents = self.column.cellEvents,\n\t element = self.element,\n\t field = this.column.getField(),\n\t vertAligns = {\n\t\ttop: \"flex-start\",\n\t\tbottom: \"flex-end\",\n\t\tmiddle: \"center\"\n\t},\n\t hozAligns = {\n\t\tleft: \"flex-start\",\n\t\tright: \"flex-end\",\n\t\tcenter: \"center\"\n\t};\n\n\t//set text alignment\n\telement.style.textAlign = self.column.hozAlign;\n\n\tif (self.column.vertAlign) {\n\t\telement.style.display = \"inline-flex\";\n\n\t\telement.style.alignItems = vertAligns[self.column.vertAlign] || \"\";\n\n\t\tif (self.column.hozAlign) {\n\t\t\telement.style.justifyContent = hozAligns[self.column.hozAlign] || \"\";\n\t\t}\n\t}\n\n\tif (field) {\n\t\telement.setAttribute(\"tabulator-field\", field);\n\t}\n\n\t//add class to cell if needed\n\tif (self.column.definition.cssClass) {\n\t\tvar classNames = self.column.definition.cssClass.split(\" \");\n\t\tclassNames.forEach(function (className) {\n\t\t\telement.classList.add(className);\n\t\t});\n\t}\n\n\t//update tooltip on mouse enter\n\tif (this.table.options.tooltipGenerationMode === \"hover\") {\n\t\telement.addEventListener(\"mouseenter\", function (e) {\n\t\t\tself._generateTooltip();\n\t\t});\n\t}\n\n\tself._bindClickEvents(cellEvents);\n\n\tself._bindTouchEvents(cellEvents);\n\n\tself._bindMouseEvents(cellEvents);\n\n\tif (self.column.modules.edit) {\n\t\tself.table.modules.edit.bindEditor(self);\n\t}\n\n\tif (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists(\"moveRow\")) {\n\t\tself.table.modules.moveRow.initializeCell(self);\n\t}\n\n\t//hide cell if not visible\n\tif (!self.column.visible) {\n\t\tself.hide();\n\t}\n};\n\nCell.prototype._bindClickEvents = function (cellEvents) {\n\tvar self = this,\n\t element = self.element;\n\n\t//set event bindings\n\tif (cellEvents.cellClick || self.table.options.cellClick) {\n\t\telement.addEventListener(\"click\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellClick) {\n\t\t\t\tcellEvents.cellClick.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellClick) {\n\t\t\t\tself.table.options.cellClick.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellDblClick || this.table.options.cellDblClick) {\n\t\telement.addEventListener(\"dblclick\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellDblClick) {\n\t\t\t\tcellEvents.cellDblClick.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellDblClick) {\n\t\t\t\tself.table.options.cellDblClick.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t} else {\n\t\telement.addEventListener(\"dblclick\", function (e) {\n\n\t\t\tif (self.table.modExists(\"edit\")) {\n\t\t\t\tif (self.table.modules.edit.currentCell === self) {\n\t\t\t\t\treturn; //prevent instant selection of editor content\n\t\t\t\t}\n\t\t\t}\n\n\t\t\te.preventDefault();\n\n\t\t\ttry {\n\t\t\t\tif (document.selection) {\n\t\t\t\t\t// IE\n\t\t\t\t\tvar range = document.body.createTextRange();\n\t\t\t\t\trange.moveToElementText(self.element);\n\t\t\t\t\trange.select();\n\t\t\t\t} else if (window.getSelection) {\n\t\t\t\t\tvar range = document.createRange();\n\t\t\t\t\trange.selectNode(self.element);\n\t\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t});\n\t}\n\n\tif (cellEvents.cellContext || this.table.options.cellContext) {\n\t\telement.addEventListener(\"contextmenu\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellContext) {\n\t\t\t\tcellEvents.cellContext.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellContext) {\n\t\t\t\tself.table.options.cellContext.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n};\n\nCell.prototype._bindMouseEvents = function (cellEvents) {\n\tvar self = this,\n\t element = self.element;\n\n\tif (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) {\n\t\telement.addEventListener(\"mouseenter\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseEnter) {\n\t\t\t\tcellEvents.cellMouseEnter.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseEnter) {\n\t\t\t\tself.table.options.cellMouseEnter.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) {\n\t\telement.addEventListener(\"mouseleave\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseLeave) {\n\t\t\t\tcellEvents.cellMouseLeave.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseLeave) {\n\t\t\t\tself.table.options.cellMouseLeave.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseOver || self.table.options.cellMouseOver) {\n\t\telement.addEventListener(\"mouseover\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseOver) {\n\t\t\t\tcellEvents.cellMouseOver.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseOver) {\n\t\t\t\tself.table.options.cellMouseOver.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseOut || self.table.options.cellMouseOut) {\n\t\telement.addEventListener(\"mouseout\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseOut) {\n\t\t\t\tcellEvents.cellMouseOut.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseOut) {\n\t\t\t\tself.table.options.cellMouseOut.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseMove || self.table.options.cellMouseMove) {\n\t\telement.addEventListener(\"mousemove\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseMove) {\n\t\t\t\tcellEvents.cellMouseMove.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseMove) {\n\t\t\t\tself.table.options.cellMouseMove.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n};\n\nCell.prototype._bindTouchEvents = function (cellEvents) {\n\tvar self = this,\n\t element = self.element,\n\t dblTap,\n\t tapHold,\n\t tap;\n\n\tif (cellEvents.cellTap || this.table.options.cellTap) {\n\t\ttap = false;\n\n\t\telement.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\telement.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellTap) {\n\t\t\t\t\tcellEvents.cellTap.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellTap) {\n\t\t\t\t\tself.table.options.cellTap.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (cellEvents.cellDblTap || this.table.options.cellDblTap) {\n\t\tdblTap = null;\n\n\t\telement.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellDblTap) {\n\t\t\t\t\tcellEvents.cellDblTap.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellDblTap) {\n\t\t\t\t\tself.table.options.cellDblTap.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellTapHold || this.table.options.cellTapHold) {\n\t\ttapHold = null;\n\n\t\telement.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellTapHold) {\n\t\t\t\t\tcellEvents.cellTapHold.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellTapHold) {\n\t\t\t\t\tself.table.options.cellTapHold.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\telement.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n};\n\n//generate cell contents\nCell.prototype._generateContents = function () {\n\tvar val;\n\n\tif (this.table.modExists(\"format\")) {\n\t\tval = this.table.modules.format.formatValue(this);\n\t} else {\n\t\tval = this.element.innerHTML = this.value;\n\t}\n\n\tswitch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) {\n\t\tcase \"object\":\n\t\t\tif (val instanceof Node) {\n\n\t\t\t\t//clear previous cell contents\n\t\t\t\twhile (this.element.firstChild) {\n\t\t\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t\t\t}this.element.appendChild(val);\n\t\t\t} else {\n\t\t\t\tthis.element.innerHTML = \"\";\n\n\t\t\t\tif (val != null) {\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"undefined\":\n\t\tcase \"null\":\n\t\t\tthis.element.innerHTML = \"\";\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthis.element.innerHTML = val;\n\t}\n};\n\nCell.prototype.cellRendered = function () {\n\tif (this.table.modExists(\"format\") && this.table.modules.format.cellRendered) {\n\t\tthis.table.modules.format.cellRendered(this);\n\t}\n};\n\n//generate tooltip text\nCell.prototype._generateTooltip = function () {\n\tvar tooltip = this.column.tooltip;\n\n\tif (tooltip) {\n\t\tif (tooltip === true) {\n\t\t\ttooltip = this.value;\n\t\t} else if (typeof tooltip == \"function\") {\n\t\t\ttooltip = tooltip(this.getComponent());\n\n\t\t\tif (tooltip === false) {\n\t\t\t\ttooltip = \"\";\n\t\t\t}\n\t\t}\n\n\t\tif (typeof tooltip === \"undefined\") {\n\t\t\ttooltip = \"\";\n\t\t}\n\n\t\tthis.element.setAttribute(\"title\", tooltip);\n\t} else {\n\t\tthis.element.setAttribute(\"title\", \"\");\n\t}\n};\n\n//////////////////// Getters ////////////////////\nCell.prototype.getElement = function (containerOnly) {\n\tif (!this.loaded) {\n\t\tthis.loaded = true;\n\t\tif (!containerOnly) {\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\n\treturn this.element;\n};\n\nCell.prototype.getValue = function () {\n\treturn this.value;\n};\n\nCell.prototype.getOldValue = function () {\n\treturn this.oldValue;\n};\n\n//////////////////// Actions ////////////////////\n\nCell.prototype.setValue = function (value, mutate) {\n\n\tvar changed = this.setValueProcessData(value, mutate),\n\t component;\n\n\tif (changed) {\n\t\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\t\tthis.table.modules.history.action(\"cellEdit\", this, { oldValue: this.oldValue, newValue: this.value });\n\t\t}\n\n\t\tcomponent = this.getComponent();\n\n\t\tif (this.column.cellEvents.cellEdited) {\n\t\t\tthis.column.cellEvents.cellEdited.call(this.table, component);\n\t\t}\n\n\t\tif (this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.groupRows.reassignRowToGroup(this.row);\n\t\t}\n\n\t\tthis.cellRendered();\n\n\t\tthis.table.options.cellEdited.call(this.table, component);\n\n\t\tif (this.table.options.dataChanged) {\n\t\t\tthis.table.options.dataChanged.call(this.table, this.table.rowManager.getData());\n\t\t}\n\t}\n};\n\nCell.prototype.setValueProcessData = function (value, mutate) {\n\tvar changed = false;\n\n\tif (this.value != value) {\n\n\t\tchanged = true;\n\n\t\tif (mutate) {\n\t\t\tif (this.column.modules.mutate) {\n\t\t\t\tvalue = this.table.modules.mutator.transformCell(this, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.setValueActual(value);\n\n\tif (changed && this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.column.definition.topCalc || this.column.definition.bottomCalc) {\n\t\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\t\t\tif (this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\") {\n\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t\t\t}\n\n\t\t\t\tif (this.table.options.columnCalcs != \"table\") {\n\t\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this.row);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn changed;\n};\n\nCell.prototype.setValueActual = function (value) {\n\tthis.oldValue = this.value;\n\n\tthis.value = value;\n\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\")) {\n\t\tthis.table.modules.reactiveData.block();\n\t}\n\n\tthis.column.setFieldValue(this.row.data, value);\n\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\")) {\n\t\tthis.table.modules.reactiveData.unblock();\n\t}\n\n\tif (this.loaded) {\n\t\tthis.layoutElement();\n\t}\n};\n\nCell.prototype.layoutElement = function () {\n\tthis._generateContents();\n\tthis._generateTooltip();\n\n\t//set resizable handles\n\tif (this.table.options.resizableColumns && this.table.modExists(\"resizeColumns\") && this.row.type === \"row\") {\n\t\tthis.table.modules.resizeColumns.initializeColumn(\"cell\", this.column, this.element);\n\t}\n\n\tif ((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists(\"menu\")) {\n\t\tthis.table.modules.menu.initializeCell(this);\n\t}\n\n\t//handle frozen cells\n\tif (this.table.modExists(\"frozenColumns\")) {\n\t\tthis.table.modules.frozenColumns.layoutElement(this.element, this.column);\n\t}\n};\n\nCell.prototype.setWidth = function () {\n\tthis.width = this.column.width;\n\tthis.element.style.width = this.column.widthStyled;\n};\n\nCell.prototype.clearWidth = function () {\n\tthis.width = \"\";\n\tthis.element.style.width = \"\";\n};\n\nCell.prototype.getWidth = function () {\n\treturn this.width || this.element.offsetWidth;\n};\n\nCell.prototype.setMinWidth = function () {\n\tthis.minWidth = this.column.minWidth;\n\tthis.element.style.minWidth = this.column.minWidthStyled;\n};\n\nCell.prototype.setMaxWidth = function () {\n\tthis.maxWidth = this.column.maxWidth;\n\tthis.element.style.maxWidth = this.column.maxWidthStyled;\n};\n\nCell.prototype.checkHeight = function () {\n\t// var height = this.element.css(\"height\");\n\tthis.row.reinitializeHeight();\n};\n\nCell.prototype.clearHeight = function () {\n\tthis.element.style.height = \"\";\n\tthis.height = null;\n};\n\nCell.prototype.setHeight = function () {\n\tthis.height = this.row.height;\n\tthis.element.style.height = this.row.heightStyled;\n};\n\nCell.prototype.getHeight = function () {\n\treturn this.height || this.element.offsetHeight;\n};\n\nCell.prototype.show = function () {\n\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\n};\n\nCell.prototype.hide = function () {\n\tthis.element.style.display = \"none\";\n};\n\nCell.prototype.edit = function (force) {\n\tif (this.table.modExists(\"edit\", true)) {\n\t\treturn this.table.modules.edit.editCell(this, force);\n\t}\n};\n\nCell.prototype.cancelEdit = function () {\n\tif (this.table.modExists(\"edit\", true)) {\n\t\tvar editing = this.table.modules.edit.getCurrentCell();\n\n\t\tif (editing && editing._getSelf() === this) {\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t} else {\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\n\t\t}\n\t}\n};\n\nCell.prototype.validate = function () {\n\tif (this.column.modules.validate && this.table.modExists(\"validate\", true)) {\n\t\tvar valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());\n\n\t\treturn valid === true;\n\t} else {\n\t\treturn true;\n\t}\n};\n\nCell.prototype.delete = function () {\n\tif (!this.table.rowManager.redrawBlock && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t}\n\n\tif (this.modules.validate && this.modules.validate.invalid) {\n\t\tthis.table.modules.validate.clearValidation(this);\n\t}\n\n\tif (this.modules.edit && this.modules.edit.edited) {\n\t\tthis.table.modules.edit.clearEdited(this);\n\t}\n\n\tif (this.table.options.history) {\n\t\tthis.table.modules.history.clearComponentHistory(this);\n\t}\n\n\tthis.element = false;\n\tthis.column.deleteCell(this);\n\tthis.row.deleteCell(this);\n\tthis.calcs = {};\n};\n\n//////////////// Navigation /////////////////\n\nCell.prototype.nav = function () {\n\n\tvar self = this,\n\t nextCell = false,\n\t index = this.row.getCellIndex(this);\n\n\treturn {\n\t\tnext: function next() {\n\t\t\tvar nextCell = this.right(),\n\t\t\t nextRow;\n\n\t\t\tif (!nextCell) {\n\t\t\t\tnextRow = self.table.rowManager.nextDisplayRow(self.row, true);\n\n\t\t\t\tif (nextRow) {\n\t\t\t\t\tnextCell = nextRow.findNextEditableCell(-1);\n\n\t\t\t\t\tif (nextCell) {\n\t\t\t\t\t\tnextCell.edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tprev: function prev() {\n\t\t\tvar nextCell = this.left(),\n\t\t\t prevRow;\n\n\t\t\tif (!nextCell) {\n\t\t\t\tprevRow = self.table.rowManager.prevDisplayRow(self.row, true);\n\n\t\t\t\tif (prevRow) {\n\t\t\t\t\tnextCell = prevRow.findPrevEditableCell(prevRow.cells.length);\n\n\t\t\t\t\tif (nextCell) {\n\t\t\t\t\t\tnextCell.edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tleft: function left() {\n\n\t\t\tnextCell = self.row.findPrevEditableCell(index);\n\n\t\t\tif (nextCell) {\n\t\t\t\tnextCell.edit();\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tright: function right() {\n\t\t\tnextCell = self.row.findNextEditableCell(index);\n\n\t\t\tif (nextCell) {\n\t\t\t\tnextCell.edit();\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tup: function up() {\n\t\t\tvar nextRow = self.table.rowManager.prevDisplayRow(self.row, true);\n\n\t\t\tif (nextRow) {\n\t\t\t\tnextRow.cells[index].edit();\n\t\t\t}\n\t\t},\n\t\tdown: function down() {\n\t\t\tvar nextRow = self.table.rowManager.nextDisplayRow(self.row, true);\n\n\t\t\tif (nextRow) {\n\t\t\t\tnextRow.cells[index].edit();\n\t\t\t}\n\t\t}\n\n\t};\n};\n\nCell.prototype.getIndex = function () {\n\tthis.row.getCellIndex(this);\n};\n\n//////////////// Object Generation /////////////////\nCell.prototype.getComponent = function () {\n\n\tif (!this.component) {\n\t\tthis.component = new CellComponent(this);\n\t}\n\n\treturn this.component;\n};\nvar FooterManager = function FooterManager(table) {\n\tthis.table = table;\n\tthis.active = false;\n\tthis.element = this.createElement(); //containing element\n\tthis.external = false;\n\tthis.links = [];\n\n\tthis._initialize();\n};\n\nFooterManager.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-footer\");\n\n\treturn el;\n};\n\nFooterManager.prototype._initialize = function (element) {\n\tif (this.table.options.footerElement) {\n\n\t\tswitch (_typeof(this.table.options.footerElement)) {\n\t\t\tcase \"string\":\n\n\t\t\t\tif (this.table.options.footerElement[0] === \"<\") {\n\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\n\t\t\t\t} else {\n\t\t\t\t\tthis.external = true;\n\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.element = this.table.options.footerElement;\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\n\nFooterManager.prototype.getElement = function () {\n\treturn this.element;\n};\n\nFooterManager.prototype.append = function (element, parent) {\n\tthis.activate(parent);\n\n\tthis.element.appendChild(element);\n\tthis.table.rowManager.adjustTableSize();\n};\n\nFooterManager.prototype.prepend = function (element, parent) {\n\tthis.activate(parent);\n\n\tthis.element.insertBefore(element, this.element.firstChild);\n\tthis.table.rowManager.adjustTableSize();\n};\n\nFooterManager.prototype.remove = function (element) {\n\telement.parentNode.removeChild(element);\n\tthis.deactivate();\n};\n\nFooterManager.prototype.deactivate = function (force) {\n\tif (!this.element.firstChild || force) {\n\t\tif (!this.external) {\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t\tthis.active = false;\n\t}\n\n\t// this.table.rowManager.adjustTableSize();\n};\n\nFooterManager.prototype.activate = function (parent) {\n\tif (!this.active) {\n\t\tthis.active = true;\n\t\tif (!this.external) {\n\t\t\tthis.table.element.appendChild(this.getElement());\n\t\t\tthis.table.element.style.display = '';\n\t\t}\n\t}\n\n\tif (parent) {\n\t\tthis.links.push(parent);\n\t}\n};\n\nFooterManager.prototype.redraw = function () {\n\tthis.links.forEach(function (link) {\n\t\tlink.footerRedraw();\n\t});\n};\n\nvar Tabulator = function Tabulator(element, options) {\n\n\tthis.options = {};\n\n\tthis.columnManager = null; // hold Column Manager\n\tthis.rowManager = null; //hold Row Manager\n\tthis.footerManager = null; //holder Footer Manager\n\tthis.vdomHoz = null; //holder horizontal virtual dom\n\n\n\tthis.browser = \"\"; //hold current browser type\n\tthis.browserSlow = false; //handle reduced functionality for slower browsers\n\tthis.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence\n\tthis.rtl = false; //check if the table is in RTL mode\n\n\tthis.modules = {}; //hold all modules bound to this table\n\n\tif (this.initializeElement(element)) {\n\t\tthis.initializeOptions(options || {});\n\t\tthis._create();\n\t}\n\n\tTabulator.prototype.comms.register(this); //register table for inderdevice communication\n};\n\n//default setup options\nTabulator.prototype.defaultOptions = {\n\n\theight: false, //height of tabulator\n\tminHeight: false, //minimum height of tabulator\n\tmaxHeight: false, //maximum height of tabulator\n\n\tlayout: \"fitData\", ///layout type \"fitColumns\" | \"fitData\"\n\tlayoutColumnsOnNewData: false, //update column widths on setData\n\n\tcolumnMinWidth: 40, //minimum global width for a column\n\tcolumnMaxWidth: false, //minimum global width for a column\n\tcolumnHeaderVertAlign: \"top\", //vertical alignment of column headers\n\tcolumnVertAlign: false, // DEPRECATED - Left to allow warning\n\n\tresizableColumns: true, //resizable columns\n\tresizableRows: false, //resizable rows\n\tautoResize: true, //auto resize table\n\n\tcolumns: [], //store for colum header info\n\n\tcellHozAlign: \"\", //horizontal align columns\n\tcellVertAlign: \"\", //vertical align columns\n\theaderHozAlign: \"\", //horizontal header alignment\n\n\n\tdata: [], //default starting data\n\n\tautoColumns: false, //build columns from data row structure\n\tautoColumnsDefinitions: false,\n\n\treactiveData: false, //enable data reactivity\n\n\tnestedFieldSeparator: \".\", //seperatpr for nested data\n\n\ttooltips: false, //Tool tip value\n\ttooltipsHeader: false, //Tool tip for headers\n\ttooltipGenerationMode: \"load\", //when to generate tooltips\n\n\tinitialSort: false, //initial sorting criteria\n\tinitialFilter: false, //initial filtering criteria\n\tinitialHeaderFilter: false, //initial header filtering criteria\n\n\tcolumnHeaderSortMulti: true, //multiple or single column sorting\n\n\tsortOrderReverse: false, //reverse internal sort ordering\n\n\theaderSort: true, //set default global header sort\n\theaderSortTristate: false, //set default tristate header sorting\n\theaderSortElement: \"<div class='tabulator-arrow'></div>\", //header sort element\n\n\tfooterElement: false, //hold footer element\n\n\tindex: \"id\", //filed for row index\n\n\ttextDirection: \"auto\",\n\n\tkeybindings: [], //array for keybindings\n\n\ttabEndNewRow: false, //create new row when tab to end of table\n\n\tinvalidOptionWarnings: true, //allow toggling of invalid option warnings\n\n\tclipboard: false, //enable clipboard\n\tclipboardCopyStyled: true, //formatted table data\n\tclipboardCopyConfig: false, //clipboard config\n\tclipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0\n\tclipboardCopyRowRange: \"active\", //restrict clipboard to visible rows only\n\tclipboardPasteParser: \"table\", //convert pasted clipboard data to rows\n\tclipboardPasteAction: \"insert\", //how to insert pasted data into the table\n\n\tclipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard\n\tclipboardPasted: function clipboardPasted() {}, //data has been pasted into the table\n\tclipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table\n\n\tdownloadDataFormatter: false, //function to manipulate table data before it is downloaded\n\tdownloadReady: function downloadReady(data, blob) {\n\t\treturn blob;\n\t}, //function to manipulate download data\n\tdownloadComplete: false, //function to manipulate download data\n\tdownloadConfig: {}, //download config\n\tdownloadRowRange: \"active\", //restrict download to active rows only\n\n\tdataTree: false, //enable data tree\n\tdataTreeFilter: true, //filter child rows\n\tdataTreeSort: true, //sort child rows\n\tdataTreeElementColumn: false,\n\tdataTreeBranchElement: true, //show data tree branch element\n\tdataTreeChildIndent: 9, //data tree child indent in px\n\tdataTreeChildField: \"_children\", //data tre column field to look for child rows\n\tdataTreeCollapseElement: false, //data tree row collapse element\n\tdataTreeExpandElement: false, //data tree row expand element\n\tdataTreeStartExpanded: false,\n\tdataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded\n\tdataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed\n\tdataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations\n\tdataTreeSelectPropagate: false, //seleccting a parent row selects its children\n\n\tprintAsHtml: false, //enable print as html\n\tprintFormatter: false, //printing page formatter\n\tprintHeader: false, //page header contents\n\tprintFooter: false, //page footer contents\n\tprintCopyStyle: true, //DEPRICATED - REMOVE in 5.0\n\tprintStyled: true, //enable print as html styling\n\tprintVisibleRows: true, //DEPRICATED - REMOVE in 5.0\n\tprintRowRange: \"visible\", //restrict print to visible rows only\n\tprintConfig: {}, //print config options\n\n\taddRowPos: \"bottom\", //position to insert blank rows, top|bottom\n\n\tselectable: \"highlight\", //highlight rows on hover\n\tselectableRangeMode: \"drag\", //highlight rows on hover\n\tselectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached\n\tselectablePersistence: true, // maintain selection when table view is updated\n\tselectableCheck: function selectableCheck(data, row) {\n\t\treturn true;\n\t}, //check wheather row is selectable\n\n\theaderFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter\n\theaderFilterPlaceholder: false, //placeholder text to display in header filters\n\n\theaderVisible: true, //hide header\n\n\thistory: false, //enable edit history\n\n\tlocale: false, //current system language\n\tlangs: {},\n\n\tvirtualDom: true, //enable DOM virtualization\n\tvirtualDomBuffer: 0, // set virtual DOM buffer size\n\tvirtualDomHoz: false, //enable horizontal DOM virtualization\n\n\tpersistentLayout: false, //DEPRICATED - REMOVE in 5.0\n\tpersistentSort: false, //DEPRICATED - REMOVE in 5.0\n\tpersistentFilter: false, //DEPRICATED - REMOVE in 5.0\n\tpersistenceID: \"\", //key for persistent storage\n\tpersistenceMode: true, //mode for storing persistence information\n\tpersistenceReaderFunc: false, //function for handling persistence data reading\n\tpersistenceWriterFunc: false, //function for handling persistence data writing\n\n\tpersistence: false,\n\n\tresponsiveLayout: false, //responsive layout flags\n\tresponsiveLayoutCollapseStartOpen: true, //start showing collapsed data\n\tresponsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter\n\tresponsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter\n\n\tpagination: false, //set pagination type\n\tpaginationSize: false, //set number of rows to a page\n\tpaginationInitialPage: 1, //initail page to show on load\n\tpaginationButtonCount: 5, // set count of page button\n\tpaginationSizeSelector: false, //add pagination size selector element\n\tpaginationElement: false, //element to hold pagination numbers\n\tpaginationDataSent: {}, //pagination data sent to the server\n\tpaginationDataReceived: {}, //pagination data received from the server\n\tpaginationAddRow: \"page\", //add rows on table or page\n\n\tajaxURL: false, //url for ajax loading\n\tajaxURLGenerator: false,\n\tajaxParams: {}, //params for ajax loading\n\tajaxConfig: \"get\", //ajax request type\n\tajaxContentType: \"form\", //ajax request type\n\tajaxRequestFunc: false, //promise function\n\tajaxLoader: true, //show loader\n\tajaxLoaderLoading: false, //loader element\n\tajaxLoaderError: false, //loader element\n\tajaxFiltering: false,\n\tajaxSorting: false,\n\tajaxProgressiveLoad: false, //progressive loading\n\tajaxProgressiveLoadDelay: 0, //delay between requests\n\tajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins\n\n\tgroupBy: false, //enable table grouping and set field to group by\n\tgroupStartOpen: true, //starting state of group\n\tgroupValues: false,\n\tgroupUpdateOnCellEdit: false,\n\n\tgroupHeader: false, //header generation function\n\tgroupHeaderPrint: null,\n\tgroupHeaderClipboard: null,\n\tgroupHeaderHtmlOutput: null,\n\tgroupHeaderDownload: null,\n\n\thtmlOutputConfig: false, //html outypu config\n\n\tmovableColumns: false, //enable movable columns\n\n\tmovableRows: false, //enable movable rows\n\tmovableRowsConnectedTables: false, //tables for movable rows to be connected to\n\tmovableRowsConnectedElements: false, //other elements for movable rows to be connected to\n\tmovableRowsSender: false,\n\tmovableRowsReceiver: \"insert\",\n\tmovableRowsSendingStart: function movableRowsSendingStart() {},\n\tmovableRowsSent: function movableRowsSent() {},\n\tmovableRowsSentFailed: function movableRowsSentFailed() {},\n\tmovableRowsSendingStop: function movableRowsSendingStop() {},\n\tmovableRowsReceivingStart: function movableRowsReceivingStart() {},\n\tmovableRowsReceived: function movableRowsReceived() {},\n\tmovableRowsReceivedFailed: function movableRowsReceivedFailed() {},\n\tmovableRowsReceivingStop: function movableRowsReceivingStop() {},\n\tmovableRowsElementDrop: function movableRowsElementDrop() {},\n\n\tscrollToRowPosition: \"top\",\n\tscrollToRowIfVisible: true,\n\n\tscrollToColumnPosition: \"left\",\n\tscrollToColumnIfVisible: true,\n\n\trowFormatter: false,\n\trowFormatterPrint: null,\n\trowFormatterClipboard: null,\n\trowFormatterHtmlOutput: null,\n\n\tplaceholder: false,\n\n\t//table building callbacks\n\ttableBuilding: function tableBuilding() {},\n\ttableBuilt: function tableBuilt() {},\n\n\t//render callbacks\n\trenderStarted: function renderStarted() {},\n\trenderComplete: function renderComplete() {},\n\n\t//row callbacks\n\trowClick: false,\n\trowDblClick: false,\n\trowContext: false,\n\trowTap: false,\n\trowDblTap: false,\n\trowTapHold: false,\n\trowMouseEnter: false,\n\trowMouseLeave: false,\n\trowMouseOver: false,\n\trowMouseOut: false,\n\trowMouseMove: false,\n\trowContextMenu: false,\n\trowClickMenu: false,\n\trowAdded: function rowAdded() {},\n\trowDeleted: function rowDeleted() {},\n\trowMoved: function rowMoved() {},\n\trowUpdated: function rowUpdated() {},\n\trowSelectionChanged: function rowSelectionChanged() {},\n\trowSelected: function rowSelected() {},\n\trowDeselected: function rowDeselected() {},\n\trowResized: function rowResized() {},\n\n\t//cell callbacks\n\t//row callbacks\n\tcellClick: false,\n\tcellDblClick: false,\n\tcellContext: false,\n\tcellTap: false,\n\tcellDblTap: false,\n\tcellTapHold: false,\n\tcellMouseEnter: false,\n\tcellMouseLeave: false,\n\tcellMouseOver: false,\n\tcellMouseOut: false,\n\tcellMouseMove: false,\n\tcellEditing: function cellEditing() {},\n\tcellEdited: function cellEdited() {},\n\tcellEditCancelled: function cellEditCancelled() {},\n\n\t//column callbacks\n\tcolumnMoved: false,\n\tcolumnResized: function columnResized() {},\n\tcolumnTitleChanged: function columnTitleChanged() {},\n\tcolumnVisibilityChanged: function columnVisibilityChanged() {},\n\n\t//HTML iport callbacks\n\thtmlImporting: function htmlImporting() {},\n\thtmlImported: function htmlImported() {},\n\n\t//data callbacks\n\tdataLoading: function dataLoading() {},\n\tdataLoaded: function dataLoaded() {},\n\tdataEdited: false, //DEPRECATED\n\tdataChanged: false,\n\n\t//ajax callbacks\n\tajaxRequesting: function ajaxRequesting() {},\n\tajaxResponse: false,\n\tajaxError: function ajaxError() {},\n\n\t//filtering callbacks\n\tdataFiltering: false,\n\tdataFiltered: false,\n\n\t//sorting callbacks\n\tdataSorting: function dataSorting() {},\n\tdataSorted: function dataSorted() {},\n\n\t//grouping callbacks\n\tgroupToggleElement: \"arrow\",\n\tgroupClosedShowCalcs: false,\n\tdataGrouping: function dataGrouping() {},\n\tdataGrouped: false,\n\tgroupVisibilityChanged: function groupVisibilityChanged() {},\n\tgroupClick: false,\n\tgroupDblClick: false,\n\tgroupContext: false,\n\tgroupContextMenu: false,\n\tgroupClickMenu: false,\n\tgroupTap: false,\n\tgroupDblTap: false,\n\tgroupTapHold: false,\n\n\tcolumnCalcs: true,\n\n\t//pagination callbacks\n\tpageLoaded: function pageLoaded() {},\n\n\t//localization callbacks\n\tlocalized: function localized() {},\n\n\t//validation callbacks\n\tvalidationMode: \"blocking\",\n\tvalidationFailed: function validationFailed() {},\n\n\t//history callbacks\n\thistoryUndo: function historyUndo() {},\n\thistoryRedo: function historyRedo() {},\n\n\t//scroll callbacks\n\tscrollHorizontal: function scrollHorizontal() {},\n\tscrollVertical: function scrollVertical() {}\n};\n\nTabulator.prototype.initializeOptions = function (options) {\n\n\t//warn user if option is not available\n\tif (options.invalidOptionWarnings !== false) {\n\t\tfor (var key in options) {\n\t\t\tif (typeof this.defaultOptions[key] === \"undefined\") {\n\t\t\t\tconsole.warn(\"Invalid table constructor option:\", key);\n\t\t\t}\n\t\t}\n\t}\n\n\t//assign options to table\n\tfor (var key in this.defaultOptions) {\n\t\tif (key in options) {\n\t\t\tthis.options[key] = options[key];\n\t\t} else {\n\t\t\tif (Array.isArray(this.defaultOptions[key])) {\n\t\t\t\tthis.options[key] = Object.assign([], this.defaultOptions[key]);\n\t\t\t} else if (_typeof(this.defaultOptions[key]) === \"object\" && this.defaultOptions[key] !== null) {\n\t\t\t\tthis.options[key] = Object.assign({}, this.defaultOptions[key]);\n\t\t\t} else {\n\t\t\t\tthis.options[key] = this.defaultOptions[key];\n\t\t\t}\n\t\t}\n\t}\n};\n\nTabulator.prototype.initializeElement = function (element) {\n\n\tif (typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement) {\n\t\tthis.element = element;\n\t\treturn true;\n\t} else if (typeof element === \"string\") {\n\t\tthis.element = document.querySelector(element);\n\n\t\tif (this.element) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.rtlCheck = function () {\n\tvar style = window.getComputedStyle(this.element);\n\n\tswitch (this.options.textDirection) {\n\t\tcase \"auto\":\n\t\t\tif (style.direction !== \"rtl\") {\n\t\t\t\tbreak;\n\t\t\t};\n\n\t\tcase \"rtl\":\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\n\t\t\tthis.rtl = true;\n\t\t\tbreak;\n\n\t\tcase \"ltr\":\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\n\n\t\tdefault:\n\t\t\tthis.rtl = false;\n\t}\n};\n\n//convert depricated functionality to new functions\nTabulator.prototype._mapDepricatedFunctionality = function () {\n\n\t//map depricated persistance setup options\n\tif (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) {\n\t\tif (!this.options.persistence) {\n\t\t\tthis.options.persistence = {};\n\t\t}\n\t}\n\n\tif (this.options.dataEdited) {\n\t\tconsole.warn(\"DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead\");\n\t\tthis.options.dataChanged = this.options.dataEdited;\n\t}\n\n\tif (this.options.downloadDataFormatter) {\n\t\tconsole.warn(\"DEPRECATION WARNING - downloadDataFormatter option has been deprecated\");\n\t}\n\n\tif (typeof this.options.clipboardCopyHeader !== \"undefined\") {\n\t\tthis.options.columnHeaders = this.options.clipboardCopyHeader;\n\t\tconsole.warn(\"DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option\");\n\t}\n\n\tif (this.options.printVisibleRows !== true) {\n\t\tconsole.warn(\"printVisibleRows option is deprecated, you should now use the printRowRange option\");\n\n\t\tthis.options.persistence.printRowRange = \"active\";\n\t}\n\n\tif (this.options.printCopyStyle !== true) {\n\t\tconsole.warn(\"printCopyStyle option is deprecated, you should now use the printStyled option\");\n\n\t\tthis.options.persistence.printStyled = this.options.printCopyStyle;\n\t}\n\n\tif (this.options.persistentLayout) {\n\t\tconsole.warn(\"persistentLayout option is deprecated, you should now use the persistence option\");\n\n\t\tif (this.options.persistence !== true && typeof this.options.persistence.columns === \"undefined\") {\n\t\t\tthis.options.persistence.columns = true;\n\t\t}\n\t}\n\n\tif (this.options.persistentSort) {\n\t\tconsole.warn(\"persistentSort option is deprecated, you should now use the persistence option\");\n\n\t\tif (this.options.persistence !== true && typeof this.options.persistence.sort === \"undefined\") {\n\t\t\tthis.options.persistence.sort = true;\n\t\t}\n\t}\n\n\tif (this.options.persistentFilter) {\n\t\tconsole.warn(\"persistentFilter option is deprecated, you should now use the persistence option\");\n\n\t\tif (this.options.persistence !== true && typeof this.options.persistence.filter === \"undefined\") {\n\t\t\tthis.options.persistence.filter = true;\n\t\t}\n\t}\n\n\tif (this.options.columnVertAlign) {\n\t\tconsole.warn(\"columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option\");\n\n\t\tthis.options.columnHeaderVertAlign = this.options.columnVertAlign;\n\t}\n};\n\nTabulator.prototype._clearSelection = function () {\n\n\tthis.element.classList.add(\"tabulator-block-select\");\n\n\tif (window.getSelection) {\n\t\tif (window.getSelection().empty) {\n\t\t\t// Chrome\n\t\t\twindow.getSelection().empty();\n\t\t} else if (window.getSelection().removeAllRanges) {\n\t\t\t// Firefox\n\t\t\twindow.getSelection().removeAllRanges();\n\t\t}\n\t} else if (document.selection) {\n\t\t// IE?\n\t\tdocument.selection.empty();\n\t}\n\n\tthis.element.classList.remove(\"tabulator-block-select\");\n};\n\n//concreate table\nTabulator.prototype._create = function () {\n\tthis._clearObjectPointers();\n\n\tthis._mapDepricatedFunctionality();\n\n\tthis.bindModules();\n\n\tthis.rtlCheck();\n\n\tif (this.element.tagName === \"TABLE\") {\n\t\tif (this.modExists(\"htmlTableImport\", true)) {\n\t\t\tthis.modules.htmlTableImport.parseTable();\n\t\t}\n\t}\n\n\tthis.columnManager = new ColumnManager(this);\n\tthis.rowManager = new RowManager(this);\n\tthis.footerManager = new FooterManager(this);\n\n\tthis.columnManager.setRowManager(this.rowManager);\n\tthis.rowManager.setColumnManager(this.columnManager);\n\n\tif (this.options.virtualDomHoz) {\n\t\tthis.vdomHoz = new VDomHoz(this);\n\t}\n\n\tthis._buildElement();\n\n\tthis._loadInitialData();\n};\n\n//clear pointers to objects in default config object\nTabulator.prototype._clearObjectPointers = function () {\n\tthis.options.columns = this.options.columns.slice(0);\n\n\tif (!this.options.reactiveData) {\n\t\tthis.options.data = this.options.data.slice(0);\n\t}\n};\n\n//build tabulator element\nTabulator.prototype._buildElement = function () {\n\tvar _this24 = this;\n\n\tvar element = this.element,\n\t mod = this.modules,\n\t options = this.options;\n\n\toptions.tableBuilding.call(this);\n\n\telement.classList.add(\"tabulator\");\n\telement.setAttribute(\"role\", \"grid\");\n\n\t//empty element\n\twhile (element.firstChild) {\n\t\telement.removeChild(element.firstChild);\n\t} //set table height\n\tif (options.height) {\n\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\n\t\telement.style.height = options.height;\n\t}\n\n\t//set table min height\n\tif (options.minHeight !== false) {\n\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\n\t\telement.style.minHeight = options.minHeight;\n\t}\n\n\t//set table maxHeight\n\tif (options.maxHeight !== false) {\n\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\n\t\telement.style.maxHeight = options.maxHeight;\n\t}\n\n\tthis.columnManager.initialize();\n\tthis.rowManager.initialize();\n\n\tthis._detectBrowser();\n\n\tif (this.modExists(\"layout\", true)) {\n\t\tmod.layout.initialize(options.layout);\n\t}\n\n\t//set localization\n\n\tmod.localize.initialize();\n\n\tif (options.headerFilterPlaceholder !== false) {\n\t\tmod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);\n\t}\n\n\tfor (var locale in options.langs) {\n\t\tmod.localize.installLang(locale, options.langs[locale]);\n\t}\n\n\tmod.localize.setLocale(options.locale);\n\n\t//configure placeholder element\n\tif (typeof options.placeholder == \"string\") {\n\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-placeholder\");\n\n\t\tvar span = document.createElement(\"span\");\n\t\tspan.innerHTML = options.placeholder;\n\n\t\tel.appendChild(span);\n\n\t\toptions.placeholder = el;\n\t}\n\n\t//build table elements\n\telement.appendChild(this.columnManager.getElement());\n\telement.appendChild(this.rowManager.getElement());\n\n\tif (options.footerElement) {\n\t\tthis.footerManager.activate();\n\t}\n\n\tif (options.persistence && this.modExists(\"persistence\", true)) {\n\t\tmod.persistence.initialize();\n\t}\n\n\tif (options.movableRows && this.modExists(\"moveRow\")) {\n\t\tmod.moveRow.initialize();\n\t}\n\n\tif (options.autoColumns && this.options.data) {\n\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\n\t}\n\n\tif (this.modExists(\"columnCalcs\")) {\n\t\tmod.columnCalcs.initialize();\n\t}\n\n\tthis.columnManager.setColumns(options.columns);\n\n\tif (options.dataTree && this.modExists(\"dataTree\", true)) {\n\t\tmod.dataTree.initialize();\n\t}\n\n\tif (this.modExists(\"frozenRows\")) {\n\t\tthis.modules.frozenRows.initialize();\n\t}\n\n\tif ((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort || options.initialSort) && this.modExists(\"sort\", true)) {\n\t\tvar sorters = [];\n\n\t\tif (options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort) {\n\t\t\tsorters = mod.persistence.load(\"sort\");\n\n\t\t\tif (sorters === false && options.initialSort) {\n\t\t\t\tsorters = options.initialSort;\n\t\t\t}\n\t\t} else if (options.initialSort) {\n\t\t\tsorters = options.initialSort;\n\t\t}\n\n\t\tmod.sort.setSort(sorters);\n\t}\n\n\tif ((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists(\"filter\", true)) {\n\t\tvar filters = [];\n\n\t\tif (options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter) {\n\t\t\tfilters = mod.persistence.load(\"filter\");\n\n\t\t\tif (filters === false && options.initialFilter) {\n\t\t\t\tfilters = options.initialFilter;\n\t\t\t}\n\t\t} else if (options.initialFilter) {\n\t\t\tfilters = options.initialFilter;\n\t\t}\n\n\t\tmod.filter.setFilter(filters);\n\t}\n\n\tif (options.initialHeaderFilter && this.modExists(\"filter\", true)) {\n\t\toptions.initialHeaderFilter.forEach(function (item) {\n\n\t\t\tvar column = _this24.columnManager.findColumn(item.field);\n\n\t\t\tif (column) {\n\t\t\t\tmod.filter.setHeaderFilterValue(column, item.value);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tif (this.modExists(\"ajax\")) {\n\t\tmod.ajax.initialize();\n\t}\n\n\tif (options.pagination && this.modExists(\"page\", true)) {\n\t\tmod.page.initialize();\n\t}\n\n\tif (options.groupBy && this.modExists(\"groupRows\", true)) {\n\t\tmod.groupRows.initialize();\n\t}\n\n\tif (this.modExists(\"keybindings\")) {\n\t\tmod.keybindings.initialize();\n\t}\n\n\tif (this.modExists(\"selectRow\")) {\n\t\tmod.selectRow.clearSelectionData(true);\n\t}\n\n\tif (options.autoResize && this.modExists(\"resizeTable\")) {\n\t\tmod.resizeTable.initialize();\n\t}\n\n\tif (this.modExists(\"clipboard\")) {\n\t\tmod.clipboard.initialize();\n\t}\n\n\tif (options.printAsHtml && this.modExists(\"print\")) {\n\t\tmod.print.initialize();\n\t}\n\n\toptions.tableBuilt.call(this);\n};\n\nTabulator.prototype._loadInitialData = function () {\n\tvar self = this;\n\n\tif (self.options.pagination && self.modExists(\"page\")) {\n\t\tself.modules.page.reset(true, true);\n\n\t\tif (self.options.pagination == \"local\") {\n\t\t\tif (self.options.data.length) {\n\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t} else {\n\t\t\t\tif ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists(\"ajax\")) {\n\t\t\t\t\tself.modules.ajax.loadData(false, true).then(function () {}).catch(function () {\n\t\t\t\t\t\tif (self.options.paginationInitialPage) {\n\t\t\t\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self.options.paginationInitialPage) {\n\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage);\n\t\t\t}\n\t\t} else {\n\t\t\tif (self.options.ajaxURL) {\n\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {});\n\t\t\t} else {\n\t\t\t\tself.rowManager.setData([], false, true);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (self.options.data.length) {\n\t\t\tself.rowManager.setData(self.options.data);\n\t\t} else {\n\t\t\tif ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists(\"ajax\")) {\n\t\t\t\tself.modules.ajax.loadData(false, true).then(function () {}).catch(function () {});\n\t\t\t} else {\n\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t}\n\t\t}\n\t}\n};\n\n//deconstructor\nTabulator.prototype.destroy = function () {\n\tvar element = this.element;\n\n\tTabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication\n\n\tif (this.options.reactiveData && this.modExists(\"reactiveData\", true)) {\n\t\tthis.modules.reactiveData.unwatchData();\n\t}\n\n\t//clear row data\n\tthis.rowManager.rows.forEach(function (row) {\n\t\trow.wipe();\n\t});\n\n\tthis.rowManager.rows = [];\n\tthis.rowManager.activeRows = [];\n\tthis.rowManager.displayRows = [];\n\n\t//clear event bindings\n\tif (this.options.autoResize && this.modExists(\"resizeTable\")) {\n\t\tthis.modules.resizeTable.clearBindings();\n\t}\n\n\tif (this.modExists(\"keybindings\")) {\n\t\tthis.modules.keybindings.clearBindings();\n\t}\n\n\t//clear DOM\n\twhile (element.firstChild) {\n\t\telement.removeChild(element.firstChild);\n\t}element.classList.remove(\"tabulator\");\n};\n\nTabulator.prototype._detectBrowser = function () {\n\tvar ua = navigator.userAgent || navigator.vendor || window.opera;\n\n\tif (ua.indexOf(\"Trident\") > -1) {\n\t\tthis.browser = \"ie\";\n\t\tthis.browserSlow = true;\n\t} else if (ua.indexOf(\"Edge\") > -1) {\n\t\tthis.browser = \"edge\";\n\t\tthis.browserSlow = true;\n\t} else if (ua.indexOf(\"Firefox\") > -1) {\n\t\tthis.browser = \"firefox\";\n\t\tthis.browserSlow = false;\n\t} else {\n\t\tthis.browser = \"other\";\n\t\tthis.browserSlow = false;\n\t}\n\n\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0, 4));\n};\n\n////////////////// Data Handling //////////////////\n\n//block table redrawing\nTabulator.prototype.blockRedraw = function () {\n\treturn this.rowManager.blockRedraw();\n};\n\n//restore table redrawing\nTabulator.prototype.restoreRedraw = function () {\n\treturn this.rowManager.restoreRedraw();\n};\n\n//local data from local file\nTabulator.prototype.setDataFromLocalFile = function (extensions) {\n\tvar _this25 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar input = document.createElement(\"input\");\n\t\tinput.type = \"file\";\n\t\tinput.accept = extensions || \".json,application/json\";\n\n\t\tinput.addEventListener(\"change\", function (e) {\n\t\t\tvar file = input.files[0],\n\t\t\t reader = new FileReader(),\n\t\t\t data;\n\n\t\t\treader.readAsText(file);\n\n\t\t\treader.onload = function (e) {\n\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(reader.result);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\n\t\t\t\t\treject(e);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_this25.setData(data).then(function (data) {\n\t\t\t\t\tresolve(data);\n\t\t\t\t}).catch(function (err) {\n\t\t\t\t\tresolve(err);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\treader.onerror = function (e) {\n\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\n\t\t\t\treject();\n\t\t\t};\n\t\t});\n\n\t\tinput.click();\n\t});\n};\n\n//load data\nTabulator.prototype.setData = function (data, params, config) {\n\tif (this.modExists(\"ajax\")) {\n\t\tthis.modules.ajax.blockActiveRequest();\n\t}\n\n\treturn this._setData(data, params, config, false, true);\n};\n\nTabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) {\n\tvar self = this;\n\n\tif (typeof data === \"string\") {\n\t\tif (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0) {\n\t\t\t//data is a json encoded string\n\t\t\treturn self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);\n\t\t} else {\n\n\t\t\tif (self.modExists(\"ajax\", true)) {\n\t\t\t\tif (params) {\n\t\t\t\t\tself.modules.ajax.setParams(params);\n\t\t\t\t}\n\n\t\t\t\tif (config) {\n\t\t\t\t\tself.modules.ajax.setConfig(config);\n\t\t\t\t}\n\n\t\t\t\tself.modules.ajax.setUrl(data);\n\n\t\t\t\tif (self.options.pagination == \"remote\" && self.modExists(\"page\", true)) {\n\t\t\t\t\tself.modules.page.reset(true, true);\n\t\t\t\t\treturn self.modules.page.setPage(1);\n\t\t\t\t} else {\n\t\t\t\t\t//assume data is url, make ajax call to url to get data\n\t\t\t\t\treturn self.modules.ajax.loadData(inPosition, columnsChanged);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (data) {\n\t\t\t//asume data is already an object\n\t\t\treturn self.rowManager.setData(data, inPosition, columnsChanged);\n\t\t} else {\n\n\t\t\t//no data provided, check if ajaxURL is present;\n\t\t\tif (self.modExists(\"ajax\") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) {\n\n\t\t\t\tif (self.options.pagination == \"remote\" && self.modExists(\"page\", true)) {\n\t\t\t\t\tself.modules.page.reset(true, true);\n\t\t\t\t\treturn self.modules.page.setPage(1);\n\t\t\t\t} else {\n\t\t\t\t\treturn self.modules.ajax.loadData(inPosition, columnsChanged);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//empty data\n\t\t\t\treturn self.rowManager.setData([], inPosition, columnsChanged);\n\t\t\t}\n\t\t}\n\t}\n};\n\n//clear data\nTabulator.prototype.clearData = function () {\n\tif (this.modExists(\"ajax\")) {\n\t\tthis.modules.ajax.blockActiveRequest();\n\t}\n\n\tthis.rowManager.clearData();\n};\n\n//get table data array\nTabulator.prototype.getData = function (active) {\n\n\tif (active === true) {\n\t\tconsole.warn(\"passing a boolean to the getData function is deprecated, you should now pass the string 'active'\");\n\t\tactive = \"active\";\n\t}\n\n\treturn this.rowManager.getData(active);\n};\n\n//get table data array count\nTabulator.prototype.getDataCount = function (active) {\n\n\tif (active === true) {\n\t\tconsole.warn(\"passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'\");\n\t\tactive = \"active\";\n\t}\n\n\treturn this.rowManager.getDataCount(active);\n};\n\n//search for specific row components\nTabulator.prototype.searchRows = function (field, type, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.search(\"rows\", field, type, value);\n\t}\n};\n\n//search for specific data\nTabulator.prototype.searchData = function (field, type, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.search(\"data\", field, type, value);\n\t}\n};\n\n//get table html\nTabulator.prototype.getHtml = function (visible, style, config) {\n\tif (this.modExists(\"export\", true)) {\n\t\treturn this.modules.export.getHtml(visible, style, config);\n\t}\n};\n\n//get print html\nTabulator.prototype.print = function (visible, style, config) {\n\tif (this.modExists(\"print\", true)) {\n\t\treturn this.modules.print.printFullscreen(visible, style, config);\n\t}\n};\n\n//retrieve Ajax URL\nTabulator.prototype.getAjaxUrl = function () {\n\tif (this.modExists(\"ajax\", true)) {\n\t\treturn this.modules.ajax.getUrl();\n\t}\n};\n\n//replace data, keeping table in position with same sort\nTabulator.prototype.replaceData = function (data, params, config) {\n\tif (this.modExists(\"ajax\")) {\n\t\tthis.modules.ajax.blockActiveRequest();\n\t}\n\n\treturn this._setData(data, params, config, true);\n};\n\n//update table data\nTabulator.prototype.updateData = function (data) {\n\tvar _this26 = this;\n\n\tvar self = this;\n\tvar responses = 0;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this26.modExists(\"ajax\")) {\n\t\t\t_this26.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (data) {\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvar row = self.rowManager.findRow(item[self.options.index]);\n\n\t\t\t\tif (row) {\n\t\t\t\t\tresponses++;\n\n\t\t\t\t\trow.updateData(item).then(function () {\n\t\t\t\t\t\tresponses--;\n\n\t\t\t\t\t\tif (!responses) {\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\treject(\"Update Error - No data provided\");\n\t\t}\n\t});\n};\n\nTabulator.prototype.addData = function (data, pos, index) {\n\tvar _this27 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this27.modExists(\"ajax\")) {\n\t\t\t_this27.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (data) {\n\t\t\t_this27.rowManager.addRows(data, pos, index).then(function (rows) {\n\t\t\t\tvar output = [];\n\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\toutput.push(row.getComponent());\n\t\t\t\t});\n\n\t\t\t\tresolve(output);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\treject(\"Update Error - No data provided\");\n\t\t}\n\t});\n};\n\n//update table data\nTabulator.prototype.updateOrAddData = function (data) {\n\tvar _this28 = this;\n\n\tvar self = this,\n\t rows = [],\n\t responses = 0;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this28.modExists(\"ajax\")) {\n\t\t\t_this28.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (data) {\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvar row = self.rowManager.findRow(item[self.options.index]);\n\n\t\t\t\tresponses++;\n\n\t\t\t\tif (row) {\n\t\t\t\t\trow.updateData(item).then(function () {\n\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\trows.push(row.getComponent());\n\n\t\t\t\t\t\tif (!responses) {\n\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tself.rowManager.addRows(item).then(function (newRows) {\n\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\trows.push(newRows[0].getComponent());\n\n\t\t\t\t\t\tif (!responses) {\n\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\treject(\"Update Error - No data provided\");\n\t\t}\n\t});\n};\n\n//get row object\nTabulator.prototype.getRow = function (index) {\n\tvar row = this.rowManager.findRow(index);\n\n\tif (row) {\n\t\treturn row.getComponent();\n\t} else {\n\t\tconsole.warn(\"Find Error - No matching row found:\", index);\n\t\treturn false;\n\t}\n};\n\n//get row object\nTabulator.prototype.getRowFromPosition = function (position, active) {\n\tvar row = this.rowManager.getRowFromPosition(position, active);\n\n\tif (row) {\n\t\treturn row.getComponent();\n\t} else {\n\t\tconsole.warn(\"Find Error - No matching row found:\", position);\n\t\treturn false;\n\t}\n};\n\n//delete row from table\nTabulator.prototype.deleteRow = function (index) {\n\tvar _this29 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar self = _this29,\n\t\t count = 0,\n\t\t successCount = 0,\n\t\t foundRows = [];\n\n\t\tfunction doneCheck() {\n\t\t\tcount++;\n\n\t\t\tif (count == index.length) {\n\t\t\t\tif (successCount) {\n\t\t\t\t\tself.rowManager.reRenderInPosition();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!Array.isArray(index)) {\n\t\t\tindex = [index];\n\t\t}\n\n\t\t//find matching rows\n\t\tindex.forEach(function (item) {\n\t\t\tvar row = _this29.rowManager.findRow(item, true);\n\n\t\t\tif (row) {\n\t\t\t\tfoundRows.push(row);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Delete Error - No matching row found:\", item);\n\t\t\t\treject(\"Delete Error - No matching row found\");\n\t\t\t\tdoneCheck();\n\t\t\t}\n\t\t});\n\n\t\t//sort rows into correct order to ensure smooth delete from table\n\t\tfoundRows.sort(function (a, b) {\n\t\t\treturn _this29.rowManager.rows.indexOf(a) > _this29.rowManager.rows.indexOf(b) ? 1 : -1;\n\t\t});\n\n\t\tfoundRows.forEach(function (row) {\n\t\t\trow.delete().then(function () {\n\t\t\t\tsuccessCount++;\n\t\t\t\tdoneCheck();\n\t\t\t}).catch(function (err) {\n\t\t\t\tdoneCheck();\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t});\n};\n\n//add row to table\nTabulator.prototype.addRow = function (data, pos, index) {\n\tvar _this30 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\t_this30.rowManager.addRows(data, pos, index).then(function (rows) {\n\t\t\t//recalc column calculations if present\n\t\t\tif (_this30.modExists(\"columnCalcs\")) {\n\t\t\t\t_this30.modules.columnCalcs.recalc(_this30.rowManager.activeRows);\n\t\t\t}\n\n\t\t\tresolve(rows[0].getComponent());\n\t\t});\n\t});\n};\n\n//update a row if it exitsts otherwise create it\nTabulator.prototype.updateOrAddRow = function (index, data) {\n\tvar _this31 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar row = _this31.rowManager.findRow(index);\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (row) {\n\t\t\trow.updateData(data).then(function () {\n\t\t\t\t//recalc column calculations if present\n\t\t\t\tif (_this31.modExists(\"columnCalcs\")) {\n\t\t\t\t\t_this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);\n\t\t\t\t}\n\n\t\t\t\tresolve(row.getComponent());\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\trow = _this31.rowManager.addRows(data).then(function (rows) {\n\t\t\t\t//recalc column calculations if present\n\t\t\t\tif (_this31.modExists(\"columnCalcs\")) {\n\t\t\t\t\t_this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);\n\t\t\t\t}\n\n\t\t\t\tresolve(rows[0].getComponent());\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t}\n\t});\n};\n\n//update row data\nTabulator.prototype.updateRow = function (index, data) {\n\tvar _this32 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar row = _this32.rowManager.findRow(index);\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (row) {\n\t\t\trow.updateData(data).then(function () {\n\t\t\t\tresolve(row.getComponent());\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\n\t\t\treject(\"Update Error - No matching row found\");\n\t\t}\n\t});\n};\n\n//scroll to row in DOM\nTabulator.prototype.scrollToRow = function (index, position, ifVisible) {\n\tvar _this33 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar row = _this33.rowManager.findRow(index);\n\n\t\tif (row) {\n\t\t\t_this33.rowManager.scrollToRow(row, position, ifVisible).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\n\t\t\treject(\"Scroll Error - No matching row found\");\n\t\t}\n\t});\n};\n\nTabulator.prototype.moveRow = function (from, to, after) {\n\tvar fromRow = this.rowManager.findRow(from);\n\n\tif (fromRow) {\n\t\tfromRow.moveToRow(to, after);\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching row found:\", from);\n\t}\n};\n\nTabulator.prototype.getRows = function (active) {\n\n\tif (active === true) {\n\t\tconsole.warn(\"passing a boolean to the getRows function is deprecated, you should now pass the string 'active'\");\n\t\tactive = \"active\";\n\t}\n\n\treturn this.rowManager.getComponents(active);\n};\n\n//get position of row in table\nTabulator.prototype.getRowPosition = function (index, active) {\n\tvar row = this.rowManager.findRow(index);\n\n\tif (row) {\n\t\treturn this.rowManager.getRowPosition(row, active);\n\t} else {\n\t\tconsole.warn(\"Position Error - No matching row found:\", index);\n\t\treturn false;\n\t}\n};\n\n//copy table data to clipboard\nTabulator.prototype.copyToClipboard = function (selector) {\n\tif (this.modExists(\"clipboard\", true)) {\n\t\tthis.modules.clipboard.copy(selector);\n\t}\n};\n\n/////////////// Column Functions ///////////////\n\nTabulator.prototype.setColumns = function (definition) {\n\tthis.columnManager.setColumns(definition);\n};\n\nTabulator.prototype.getColumns = function (structured) {\n\treturn this.columnManager.getComponents(structured);\n};\n\nTabulator.prototype.getColumn = function (field) {\n\tvar col = this.columnManager.findColumn(field);\n\n\tif (col) {\n\t\treturn col.getComponent();\n\t} else {\n\t\tconsole.warn(\"Find Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getColumnDefinitions = function () {\n\treturn this.columnManager.getDefinitionTree();\n};\n\nTabulator.prototype.getColumnLayout = function () {\n\tif (this.modExists(\"persistence\", true)) {\n\t\treturn this.modules.persistence.parseColumns(this.columnManager.getColumns());\n\t}\n};\n\nTabulator.prototype.setColumnLayout = function (layout) {\n\tif (this.modExists(\"persistence\", true)) {\n\t\tthis.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout));\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nTabulator.prototype.showColumn = function (field) {\n\tvar column = this.columnManager.findColumn(field);\n\n\tif (column) {\n\t\tcolumn.show();\n\n\t\tif (this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.modules.responsiveLayout.update();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.hideColumn = function (field) {\n\tvar column = this.columnManager.findColumn(field);\n\n\tif (column) {\n\t\tcolumn.hide();\n\n\t\tif (this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.modules.responsiveLayout.update();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.toggleColumn = function (field) {\n\tvar column = this.columnManager.findColumn(field);\n\n\tif (column) {\n\t\tif (column.visible) {\n\t\t\tcolumn.hide();\n\t\t} else {\n\t\t\tcolumn.show();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.addColumn = function (definition, before, field) {\n\tvar _this34 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this34.columnManager.findColumn(field);\n\n\t\t_this34.columnManager.addColumn(definition, before, column).then(function (column) {\n\t\t\tresolve(column.getComponent());\n\t\t}).catch(function (err) {\n\t\t\treject(err);\n\t\t});\n\t});\n};\n\nTabulator.prototype.deleteColumn = function (field) {\n\tvar _this35 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this35.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tcolumn.delete().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\n\t\t\treject();\n\t\t}\n\t});\n};\n\nTabulator.prototype.updateColumnDefinition = function (field, definition) {\n\tvar _this36 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this36.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tcolumn.updateDefinition(definition).then(function (col) {\n\t\t\t\tresolve(col);\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\n\t\t\treject();\n\t\t}\n\t});\n};\n\nTabulator.prototype.moveColumn = function (from, to, after) {\n\tvar fromColumn = this.columnManager.findColumn(from);\n\tvar toColumn = this.columnManager.findColumn(to);\n\n\tif (fromColumn) {\n\t\tif (toColumn) {\n\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\n\t\t} else {\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching column found:\", from);\n\t}\n};\n\n//scroll to column in DOM\nTabulator.prototype.scrollToColumn = function (field, position, ifVisible) {\n\tvar _this37 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this37.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\t_this37.columnManager.scrollToColumn(column, position, ifVisible).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\n\t\t\treject(\"Scroll Error - No matching column found\");\n\t\t}\n\t});\n};\n\n//////////// Localization Functions ////////////\nTabulator.prototype.setLocale = function (locale) {\n\tthis.modules.localize.setLocale(locale);\n};\n\nTabulator.prototype.getLocale = function () {\n\treturn this.modules.localize.getLocale();\n};\n\nTabulator.prototype.getLang = function (locale) {\n\treturn this.modules.localize.getLang(locale);\n};\n\n//////////// General Public Functions ////////////\n\n//redraw list without updating data\nTabulator.prototype.redraw = function (force) {\n\tthis.columnManager.redraw(force);\n\tthis.rowManager.redraw(force);\n};\n\nTabulator.prototype.setHeight = function (height) {\n\n\tif (this.rowManager.renderMode !== \"classic\") {\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\n\t\tthis.element.style.height = this.options.height;\n\t\tthis.rowManager.setRenderMode();\n\t\tthis.rowManager.redraw();\n\t} else {\n\t\tconsole.warn(\"setHeight function is not available in classic render mode\");\n\t}\n};\n\n///////////////////// Sorting ////////////////////\n\n//trigger sort\nTabulator.prototype.setSort = function (sortList, dir) {\n\tif (this.modExists(\"sort\", true)) {\n\t\tthis.modules.sort.setSort(sortList, dir);\n\t\tthis.rowManager.sorterRefresh();\n\t}\n};\n\nTabulator.prototype.getSorters = function () {\n\tif (this.modExists(\"sort\", true)) {\n\t\treturn this.modules.sort.getSort();\n\t}\n};\n\nTabulator.prototype.clearSort = function () {\n\tif (this.modExists(\"sort\", true)) {\n\t\tthis.modules.sort.clear();\n\t\tthis.rowManager.sorterRefresh();\n\t}\n};\n\n///////////////////// Filtering ////////////////////\n\n//set standard filters\nTabulator.prototype.setFilter = function (field, type, value, params) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.setFilter(field, type, value, params);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//set standard filters\nTabulator.prototype.refreshFilter = function () {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//add filter to array\nTabulator.prototype.addFilter = function (field, type, value, params) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.addFilter(field, type, value, params);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//get all filters\nTabulator.prototype.getFilters = function (all) {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.getFilters(all);\n\t}\n};\n\nTabulator.prototype.setHeaderFilterFocus = function (field) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tthis.modules.filter.setHeaderFilterFocus(column);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nTabulator.prototype.getHeaderFilterValue = function (field) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\treturn this.modules.filter.getHeaderFilterValue(column);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t}\n\t}\n};\n\nTabulator.prototype.setHeaderFilterValue = function (field, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tthis.modules.filter.setHeaderFilterValue(column, value);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nTabulator.prototype.getHeaderFilters = function () {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.getHeaderFilters();\n\t}\n};\n\n//remove filter from array\nTabulator.prototype.removeFilter = function (field, type, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.removeFilter(field, type, value);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//clear filters\nTabulator.prototype.clearFilter = function (all) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.clearFilter(all);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//clear header filters\nTabulator.prototype.clearHeaderFilter = function () {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.clearHeaderFilter();\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n///////////////////// select ////////////////////\nTabulator.prototype.selectRow = function (rows) {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\tif (rows === true) {\n\t\t\tconsole.warn(\"passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'\");\n\t\t\trows = \"active\";\n\t\t}\n\t\tthis.modules.selectRow.selectRows(rows);\n\t}\n};\n\nTabulator.prototype.deselectRow = function (rows) {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\tthis.modules.selectRow.deselectRows(rows);\n\t}\n};\n\nTabulator.prototype.toggleSelectRow = function (row) {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\tthis.modules.selectRow.toggleRow(row);\n\t}\n};\n\nTabulator.prototype.getSelectedRows = function () {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\treturn this.modules.selectRow.getSelectedRows();\n\t}\n};\n\nTabulator.prototype.getSelectedData = function () {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\treturn this.modules.selectRow.getSelectedData();\n\t}\n};\n\n///////////////////// validation ////////////////////\nTabulator.prototype.getInvalidCells = function () {\n\tif (this.modExists(\"validate\", true)) {\n\t\treturn this.modules.validate.getInvalidCells();\n\t}\n};\n\nTabulator.prototype.clearCellValidation = function (cells) {\n\tvar _this38 = this;\n\n\tif (this.modExists(\"validate\", true)) {\n\n\t\tif (!cells) {\n\t\t\tcells = this.modules.validate.getInvalidCells();\n\t\t}\n\n\t\tif (!Array.isArray(cells)) {\n\t\t\tcells = [cells];\n\t\t}\n\n\t\tcells.forEach(function (cell) {\n\t\t\t_this38.modules.validate.clearValidation(cell._getSelf());\n\t\t});\n\t}\n};\n\nTabulator.prototype.validate = function (cells) {\n\tvar output = [];\n\n\t//clear row data\n\tthis.rowManager.rows.forEach(function (row) {\n\t\tvar valid = row.validate();\n\n\t\tif (valid !== true) {\n\t\t\toutput = output.concat(valid);\n\t\t}\n\t});\n\n\treturn output.length ? output : true;\n};\n\n//////////// Pagination Functions ////////////\n\nTabulator.prototype.setMaxPage = function (max) {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.setMaxPage(max);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setPage = function (page) {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\treturn this.modules.page.setPage(page);\n\t} else {\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\treject();\n\t\t});\n\t}\n};\n\nTabulator.prototype.setPageToRow = function (row) {\n\tvar _this39 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this39.options.pagination && _this39.modExists(\"page\")) {\n\t\t\trow = _this39.rowManager.findRow(row);\n\n\t\t\tif (row) {\n\t\t\t\t_this39.modules.page.setPageToRow(row).then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function () {\n\t\t\t\t\treject();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t} else {\n\t\t\treject();\n\t\t}\n\t});\n};\n\nTabulator.prototype.setPageSize = function (size) {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.setPageSize(size);\n\t\tthis.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getPageSize = function () {\n\tif (this.options.pagination && this.modExists(\"page\", true)) {\n\t\treturn this.modules.page.getPageSize();\n\t}\n};\n\nTabulator.prototype.previousPage = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.previousPage();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.nextPage = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.nextPage();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getPage = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\treturn this.modules.page.getPage();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getPageMax = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\treturn this.modules.page.getPageMax();\n\t} else {\n\t\treturn false;\n\t}\n};\n\n///////////////// Grouping Functions ///////////////\n\nTabulator.prototype.setGroupBy = function (groups) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupBy = groups;\n\t\tthis.modules.groupRows.initialize();\n\t\tthis.rowManager.refreshActiveData(\"display\");\n\n\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\tthis.modules.persistence.save(\"group\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setGroupValues = function (groupValues) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupValues = groupValues;\n\t\tthis.modules.groupRows.initialize();\n\t\tthis.rowManager.refreshActiveData(\"display\");\n\n\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\tthis.modules.persistence.save(\"group\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setGroupStartOpen = function (values) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupStartOpen = values;\n\t\tthis.modules.groupRows.initialize();\n\t\tif (this.options.groupBy) {\n\t\t\tthis.rowManager.refreshActiveData(\"group\");\n\n\t\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\t\tthis.modules.persistence.save(\"group\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setGroupHeader = function (values) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupHeader = values;\n\t\tthis.modules.groupRows.initialize();\n\t\tif (this.options.groupBy) {\n\t\t\tthis.rowManager.refreshActiveData(\"group\");\n\n\t\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\t\tthis.modules.persistence.save(\"group\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getGroups = function (values) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\treturn this.modules.groupRows.getGroups(true);\n\t} else {\n\t\treturn false;\n\t}\n};\n\n// get grouped table data in the same format as getData()\nTabulator.prototype.getGroupedData = function () {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\treturn this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData();\n\t}\n};\n\nTabulator.prototype.getEditedCells = function () {\n\tif (this.modExists(\"edit\", true)) {\n\t\treturn this.modules.edit.getEditedCells();\n\t}\n};\n\nTabulator.prototype.clearCellEdited = function (cells) {\n\tvar _this40 = this;\n\n\tif (this.modExists(\"edit\", true)) {\n\n\t\tif (!cells) {\n\t\t\tcells = this.modules.edit.getEditedCells();\n\t\t}\n\n\t\tif (!Array.isArray(cells)) {\n\t\t\tcells = [cells];\n\t\t}\n\n\t\tcells.forEach(function (cell) {\n\t\t\t_this40.modules.edit.clearEdited(cell._getSelf());\n\t\t});\n\t}\n};\n\n///////////////// Column Calculation Functions ///////////////\nTabulator.prototype.getCalcResults = function () {\n\tif (this.modExists(\"columnCalcs\", true)) {\n\t\treturn this.modules.columnCalcs.getResults();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.recalc = function () {\n\tif (this.modExists(\"columnCalcs\", true)) {\n\t\tthis.modules.columnCalcs.recalcAll(this.rowManager.activeRows);\n\t}\n};\n\n/////////////// Navigation Management //////////////\n\nTabulator.prototype.navigatePrev = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\treturn cell.nav().prev();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateNext = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\treturn cell.nav().next();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateLeft = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().left();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateRight = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().right();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateUp = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().up();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateDown = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().down();\n\t\t}\n\t}\n\n\treturn false;\n};\n\n/////////////// History Management //////////////\nTabulator.prototype.undo = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.undo();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.redo = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.redo();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getHistoryUndoSize = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.getHistoryUndoSize();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getHistoryRedoSize = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.getHistoryRedoSize();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.clearHistory = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.clear();\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/////////////// Download Management //////////////\n\nTabulator.prototype.download = function (type, filename, options, active) {\n\tif (this.modExists(\"download\", true)) {\n\t\tthis.modules.download.download(type, filename, options, active);\n\t}\n};\n\nTabulator.prototype.downloadToTab = function (type, filename, options, active) {\n\tif (this.modExists(\"download\", true)) {\n\t\tthis.modules.download.download(type, filename, options, active, true);\n\t}\n};\n\n/////////// Inter Table Communications ///////////\n\nTabulator.prototype.tableComms = function (table, module, action, data) {\n\tthis.modules.comms.receive(table, module, action, data);\n};\n\n////////////// Extension Management //////////////\n\n//object to hold module\nTabulator.prototype.moduleBindings = {};\n\n//extend module\nTabulator.prototype.extendModule = function (name, property, values) {\n\n\tif (Tabulator.prototype.moduleBindings[name]) {\n\t\tvar source = Tabulator.prototype.moduleBindings[name].prototype[property];\n\n\t\tif (source) {\n\t\t\tif ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == \"object\") {\n\t\t\t\tfor (var key in values) {\n\t\t\t\t\tsource[key] = values[key];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Module Error - module does not exist:\", name);\n\t}\n};\n\n//add module to tabulator\nTabulator.prototype.registerModule = function (name, module) {\n\tvar self = this;\n\tTabulator.prototype.moduleBindings[name] = module;\n};\n\n//ensure that module are bound to instantiated function\nTabulator.prototype.bindModules = function () {\n\tthis.modules = {};\n\n\tfor (var name in Tabulator.prototype.moduleBindings) {\n\t\tthis.modules[name] = new Tabulator.prototype.moduleBindings[name](this);\n\t}\n};\n\n//Check for module\nTabulator.prototype.modExists = function (plugin, required) {\n\tif (this.modules[plugin]) {\n\t\treturn true;\n\t} else {\n\t\tif (required) {\n\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\n\t\t}\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.helpers = {\n\n\telVisible: function elVisible(el) {\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\n\t},\n\n\telOffset: function elOffset(el) {\n\t\tvar box = el.getBoundingClientRect();\n\n\t\treturn {\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\n\t\t};\n\t},\n\n\tdeepClone: function deepClone(obj) {\n\t\tvar clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\n\n\t\tfor (var i in obj) {\n\t\t\tif (obj[i] != null && _typeof(obj[i]) === \"object\") {\n\t\t\t\tif (obj[i] instanceof Date) {\n\t\t\t\t\tclone[i] = new Date(obj[i]);\n\t\t\t\t} else {\n\t\t\t\t\tclone[i] = this.deepClone(obj[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn clone;\n\t}\n};\n\nTabulator.prototype.comms = {\n\ttables: [],\n\tregister: function register(table) {\n\t\tTabulator.prototype.comms.tables.push(table);\n\t},\n\tderegister: function deregister(table) {\n\t\tvar index = Tabulator.prototype.comms.tables.indexOf(table);\n\n\t\tif (index > -1) {\n\t\t\tTabulator.prototype.comms.tables.splice(index, 1);\n\t\t}\n\t},\n\tlookupTable: function lookupTable(query, silent) {\n\t\tvar results = [],\n\t\t matches,\n\t\t match;\n\n\t\tif (typeof query === \"string\") {\n\t\t\tmatches = document.querySelectorAll(query);\n\n\t\t\tif (matches.length) {\n\t\t\t\tfor (var i = 0; i < matches.length; i++) {\n\t\t\t\t\tmatch = Tabulator.prototype.comms.matchElement(matches[i]);\n\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\tresults.push(match);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement || query instanceof Tabulator) {\n\t\t\tmatch = Tabulator.prototype.comms.matchElement(query);\n\n\t\t\tif (match) {\n\t\t\t\tresults.push(match);\n\t\t\t}\n\t\t} else if (Array.isArray(query)) {\n\t\t\tquery.forEach(function (item) {\n\t\t\t\tresults = results.concat(Tabulator.prototype.comms.lookupTable(item));\n\t\t\t});\n\t\t} else {\n\t\t\tif (!silent) {\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t},\n\tmatchElement: function matchElement(element) {\n\t\treturn Tabulator.prototype.comms.tables.find(function (table) {\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\n\t\t});\n\t}\n};\n\nTabulator.prototype.findTable = function (query) {\n\tvar results = Tabulator.prototype.comms.lookupTable(query, true);\n\treturn Array.isArray(results) && !results.length ? false : results;\n};\n\nvar Layout = function Layout(table) {\n\n\tthis.table = table;\n\n\tthis.mode = null;\n};\n\n//initialize layout system\n\nLayout.prototype.initialize = function (layout) {\n\n\tif (this.modes[layout]) {\n\n\t\tthis.mode = layout;\n\t} else {\n\n\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\n\n\t\tthis.mode = 'fitData';\n\t}\n\n\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\n};\n\nLayout.prototype.getMode = function () {\n\n\treturn this.mode;\n};\n\n//trigger table layout\n\nLayout.prototype.layout = function () {\n\n\tthis.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\n\n\tif (this.mode.indexOf(\"fitData\") === 0 && this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\tthis.table.modules.persistence.save(\"columns\");\n\t}\n};\n\n//layout render functions\n\nLayout.prototype.modes = {\n\n\t//resize columns to fit data they contain\n\n\t\"fitData\": function fitData(columns) {\n\n\t\tif (this.table.options.virtualDomHoz) {\n\n\t\t\tthis.table.vdomHoz.fitDataLayoutOverride();\n\t\t} else {\n\n\t\t\tcolumns.forEach(function (column) {\n\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t});\n\t\t}\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t},\n\n\t//resize columns to fit data they contain and stretch row to fill table\n\n\t\"fitDataFill\": function fitDataFill(columns) {\n\n\t\tcolumns.forEach(function (column) {\n\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t},\n\n\t//resize columns to fit data they contain\n\n\t\"fitDataTable\": function fitDataTable(columns) {\n\n\t\tcolumns.forEach(function (column) {\n\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t},\n\n\t//resize columns to fit data the contain and stretch last column to fill table\n\n\t\"fitDataStretch\": function fitDataStretch(columns) {\n\t\tvar _this41 = this;\n\n\t\tvar colsWidth = 0,\n\t\t tableWidth = this.table.rowManager.element.clientWidth,\n\t\t gap = 0,\n\t\t lastCol = false;\n\n\t\tcolumns.forEach(function (column, i) {\n\n\t\t\tif (!column.widthFixed) {\n\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (_this41.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) {\n\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol) {\n\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tlastCol.setWidth(0);\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t},\n\n\t//resize columns to fit\n\n\t\"fitColumns\": function fitColumns(columns) {\n\n\t\tvar self = this;\n\n\t\tvar totalWidth = self.table.element.clientWidth; //table element width\n\n\t\tvar fixedWidth = 0; //total width of columns with a defined width\n\n\t\tvar flexWidth = 0; //total width available to flexible columns\n\n\t\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\n\n\t\tvar flexColWidth = 0; //desired width of flexible columns\n\n\t\tvar flexColumns = []; //array of flexible width columns\n\n\t\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\n\n\t\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\n\n\t\tvar overflowWidth = 0; //horizontal overflow width\n\n\t\tvar gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps\n\n\n\t\tfunction calcWidth(width) {\n\n\t\t\tvar colWidth;\n\n\t\t\tif (typeof width == \"string\") {\n\n\t\t\t\tif (width.indexOf(\"%\") > -1) {\n\n\t\t\t\t\tcolWidth = totalWidth / 100 * parseInt(width);\n\t\t\t\t} else {\n\n\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tcolWidth = width;\n\t\t\t}\n\n\t\t\treturn colWidth;\n\t\t}\n\n\t\t//ensure columns resize to take up the correct amount of space\n\n\t\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols) {\n\n\t\t\tvar oversizeCols = [],\n\t\t\t oversizeSpace = 0,\n\t\t\t remainingSpace = 0,\n\t\t\t nextColWidth = 0,\n\t\t\t remainingFlexGrowUnits = flexGrowUnits,\n\t\t\t gap = 0,\n\t\t\t changeUnits = 0,\n\t\t\t undersizeCols = [];\n\n\t\t\tfunction calcGrow(col) {\n\n\t\t\t\treturn colWidth * (col.column.definition.widthGrow || 1);\n\t\t\t}\n\n\t\t\tfunction calcShrink(col) {\n\n\t\t\t\treturn calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0);\n\t\t\t}\n\n\t\t\tcolumns.forEach(function (col, i) {\n\n\t\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\n\n\t\t\t\tif (col.column.minWidth >= width) {\n\n\t\t\t\t\toversizeCols.push(col);\n\t\t\t\t} else {\n\n\t\t\t\t\tif (col.column.maxWidth && col.column.maxWidth < width) {\n\n\t\t\t\t\t\tcol.width = col.column.maxWidth;\n\n\t\t\t\t\t\tfreeSpace -= col.column.maxWidth;\n\n\t\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;\n\n\t\t\t\t\t\tif (remainingFlexGrowUnits) {\n\n\t\t\t\t\t\t\tcolWidth = Math.floor(freeSpace / remainingFlexGrowUnits);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tundersizeCols.push(col);\n\n\t\t\t\t\t\tchangeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (oversizeCols.length) {\n\n\t\t\t\toversizeCols.forEach(function (col) {\n\n\t\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\n\n\t\t\t\t\tcol.width = col.column.minWidth;\n\t\t\t\t});\n\n\t\t\t\tremainingSpace = freeSpace - oversizeSpace;\n\n\t\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace;\n\n\t\t\t\tgap = remainingSpace - nextColWidth * changeUnits;\n\n\t\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\n\t\t\t} else {\n\n\t\t\t\tgap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace;\n\n\t\t\t\tundersizeCols.forEach(function (column) {\n\n\t\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn gap;\n\t\t}\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\n\t\t//adjust for vertical scrollbar if present\n\n\t\tif (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) {\n\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t\t}\n\n\t\tcolumns.forEach(function (column) {\n\n\t\t\tvar width, minWidth, colWidth;\n\n\t\t\tif (column.visible) {\n\n\t\t\t\twidth = column.definition.width;\n\n\t\t\t\tminWidth = parseInt(column.minWidth);\n\n\t\t\t\tif (width) {\n\n\t\t\t\t\tcolWidth = calcWidth(width);\n\n\t\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\n\t\t\t\t\tif (column.definition.widthShrink) {\n\n\t\t\t\t\t\tfixedShrinkColumns.push({\n\n\t\t\t\t\t\t\tcolumn: column,\n\n\t\t\t\t\t\t\twidth: colWidth > minWidth ? colWidth : minWidth\n\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tflexColumns.push({\n\n\t\t\t\t\t\tcolumn: column,\n\n\t\t\t\t\t\twidth: 0\n\n\t\t\t\t\t});\n\n\t\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t//calculate available space\n\n\t\tflexWidth = totalWidth - fixedWidth;\n\n\t\t//calculate correct column size\n\n\t\tflexColWidth = Math.floor(flexWidth / flexGrowUnits);\n\n\t\t//generate column widths\n\n\t\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\n\n\t\t//increase width of last column to account for rounding errors\n\n\t\tif (flexColumns.length && gapFill > 0) {\n\n\t\t\tflexColumns[flexColumns.length - 1].width += +gapFill;\n\t\t}\n\n\t\t//caculate space for columns to be shrunk into\n\n\t\tflexColumns.forEach(function (col) {\n\n\t\t\tflexWidth -= col.width;\n\t\t});\n\n\t\toverflowWidth = Math.abs(gapFill) + flexWidth;\n\n\t\t//shrink oversize columns if there is no available space\n\n\t\tif (overflowWidth > 0 && flexShrinkUnits) {\n\n\t\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\n\t\t}\n\n\t\t//decrease width of last column to account for rounding errors\n\n\t\tif (fixedShrinkColumns.length) {\n\n\t\t\tfixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill;\n\t\t}\n\n\t\tflexColumns.forEach(function (col) {\n\n\t\t\tcol.column.setWidth(col.width);\n\t\t});\n\n\t\tfixedShrinkColumns.forEach(function (col) {\n\n\t\t\tcol.column.setWidth(col.width);\n\t\t});\n\t}\n\n};\n\nTabulator.prototype.registerModule(\"layout\", Layout);\nvar Localize = function Localize(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.locale = \"default\"; //current locale\n\tthis.lang = false; //current language\n\tthis.bindings = {}; //update events to call when locale is changed\n\tthis.langList = {};\n};\n\nLocalize.prototype.initialize = function () {\n\tthis.langList = Tabulator.prototype.helpers.deepClone(this.langs);\n};\n\n//set header placehoder\nLocalize.prototype.setHeaderFilterPlaceholder = function (placeholder) {\n\tthis.langList.default.headerFilters.default = placeholder;\n};\n\n//set header filter placeholder by column\nLocalize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) {\n\tthis.langList.default.headerFilters.columns[column] = placeholder;\n\n\tif (this.lang && !this.lang.headerFilters.columns[column]) {\n\t\tthis.lang.headerFilters.columns[column] = placeholder;\n\t}\n};\n\n//setup a lang description object\nLocalize.prototype.installLang = function (locale, lang) {\n\tif (this.langList[locale]) {\n\t\tthis._setLangProp(this.langList[locale], lang);\n\t} else {\n\t\tthis.langList[locale] = lang;\n\t}\n};\n\nLocalize.prototype._setLangProp = function (lang, values) {\n\tfor (var key in values) {\n\t\tif (lang[key] && _typeof(lang[key]) == \"object\") {\n\t\t\tthis._setLangProp(lang[key], values[key]);\n\t\t} else {\n\t\t\tlang[key] = values[key];\n\t\t}\n\t}\n};\n\n//set current locale\nLocalize.prototype.setLocale = function (desiredLocale) {\n\tvar self = this;\n\n\tdesiredLocale = desiredLocale || \"default\";\n\n\t//fill in any matching languge values\n\tfunction traverseLang(trans, path) {\n\t\tfor (var prop in trans) {\n\t\t\tif (_typeof(trans[prop]) == \"object\") {\n\t\t\t\tif (!path[prop]) {\n\t\t\t\t\tpath[prop] = {};\n\t\t\t\t}\n\t\t\t\ttraverseLang(trans[prop], path[prop]);\n\t\t\t} else {\n\t\t\t\tpath[prop] = trans[prop];\n\t\t\t}\n\t\t}\n\t}\n\n\t//determing correct locale to load\n\tif (desiredLocale === true && navigator.language) {\n\t\t//get local from system\n\t\tdesiredLocale = navigator.language.toLowerCase();\n\t}\n\n\tif (desiredLocale) {\n\n\t\t//if locale is not set, check for matching top level locale else use default\n\t\tif (!self.langList[desiredLocale]) {\n\t\t\tvar prefix = desiredLocale.split(\"-\")[0];\n\n\t\t\tif (self.langList[prefix]) {\n\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\n\t\t\t\tdesiredLocale = prefix;\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\n\t\t\t\tdesiredLocale = \"default\";\n\t\t\t}\n\t\t}\n\t}\n\n\tself.locale = desiredLocale;\n\n\t//load default lang template\n\tself.lang = Tabulator.prototype.helpers.deepClone(self.langList.default || {});\n\n\tif (desiredLocale != \"default\") {\n\t\ttraverseLang(self.langList[desiredLocale], self.lang);\n\t}\n\n\tself.table.options.localized.call(self.table, self.locale, self.lang);\n\n\tself._executeBindings();\n};\n\n//get current locale\nLocalize.prototype.getLocale = function (locale) {\n\treturn self.locale;\n};\n\n//get lang object for given local or current if none provided\nLocalize.prototype.getLang = function (locale) {\n\treturn locale ? this.langList[locale] : this.lang;\n};\n\n//get text for current locale\nLocalize.prototype.getText = function (path, value) {\n\tvar path = value ? path + \"|\" + value : path,\n\t pathArray = path.split(\"|\"),\n\t text = this._getLangElement(pathArray, this.locale);\n\n\t// if(text === false){\n\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\n\t// }\n\n\treturn text || \"\";\n};\n\n//traverse langs object and find localized copy\nLocalize.prototype._getLangElement = function (path, locale) {\n\tvar self = this;\n\tvar root = self.lang;\n\n\tpath.forEach(function (level) {\n\t\tvar rootPath;\n\n\t\tif (root) {\n\t\t\trootPath = root[level];\n\n\t\t\tif (typeof rootPath != \"undefined\") {\n\t\t\t\troot = rootPath;\n\t\t\t} else {\n\t\t\t\troot = false;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn root;\n};\n\n//set update binding\nLocalize.prototype.bind = function (path, callback) {\n\tif (!this.bindings[path]) {\n\t\tthis.bindings[path] = [];\n\t}\n\n\tthis.bindings[path].push(callback);\n\n\tcallback(this.getText(path), this.lang);\n};\n\n//itterate through bindings and trigger updates\nLocalize.prototype._executeBindings = function () {\n\tvar self = this;\n\n\tvar _loop = function _loop(path) {\n\t\tself.bindings[path].forEach(function (binding) {\n\t\t\tbinding(self.getText(path), self.lang);\n\t\t});\n\t};\n\n\tfor (var path in self.bindings) {\n\t\t_loop(path);\n\t}\n};\n\n//Localized text listings\nLocalize.prototype.langs = {\n\t\"default\": { //hold default locale text\n\t\t\"groups\": {\n\t\t\t\"item\": \"item\",\n\t\t\t\"items\": \"items\"\n\t\t},\n\t\t\"columns\": {},\n\t\t\"ajax\": {\n\t\t\t\"loading\": \"Loading\",\n\t\t\t\"error\": \"Error\"\n\t\t},\n\t\t\"pagination\": {\n\t\t\t\"page_size\": \"Page Size\",\n\t\t\t\"page_title\": \"Show Page\",\n\t\t\t\"first\": \"First\",\n\t\t\t\"first_title\": \"First Page\",\n\t\t\t\"last\": \"Last\",\n\t\t\t\"last_title\": \"Last Page\",\n\t\t\t\"prev\": \"Prev\",\n\t\t\t\"prev_title\": \"Prev Page\",\n\t\t\t\"next\": \"Next\",\n\t\t\t\"next_title\": \"Next Page\",\n\t\t\t\"all\": \"All\"\n\t\t},\n\t\t\"headerFilters\": {\n\t\t\t\"default\": \"filter column...\",\n\t\t\t\"columns\": {}\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"localize\", Localize);\nvar Comms = function Comms(table) {\n\tthis.table = table;\n};\n\nComms.prototype.getConnections = function (selectors) {\n\tvar self = this,\n\t connections = [],\n\t connection;\n\n\tconnection = Tabulator.prototype.comms.lookupTable(selectors);\n\n\tconnection.forEach(function (con) {\n\t\tif (self.table !== con) {\n\t\t\tconnections.push(con);\n\t\t}\n\t});\n\n\treturn connections;\n};\n\nComms.prototype.send = function (selectors, module, action, data) {\n\tvar self = this,\n\t connections = this.getConnections(selectors);\n\n\tconnections.forEach(function (connection) {\n\t\tconnection.tableComms(self.table.element, module, action, data);\n\t});\n\n\tif (!connections.length && selectors) {\n\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\n\t}\n};\n\nComms.prototype.receive = function (table, module, action, data) {\n\tif (this.table.modExists(module)) {\n\t\treturn this.table.modules[module].commsReceived(table, action, data);\n\t} else {\n\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\n\t}\n};\n\nTabulator.prototype.registerModule(\"comms\", Comms);\n\nvar Accessor = function Accessor(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"]; //list of accessor types\n};\n\n//initialize column accessor\nAccessor.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t match = false,\n\t config = {};\n\n\tthis.allowedTypes.forEach(function (type) {\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t accessor;\n\n\t\tif (column.definition[key]) {\n\t\t\taccessor = self.lookupAccessor(column.definition[key]);\n\n\t\t\tif (accessor) {\n\t\t\t\tmatch = true;\n\n\t\t\t\tconfig[key] = {\n\t\t\t\t\taccessor: accessor,\n\t\t\t\t\tparams: column.definition[key + \"Params\"] || {}\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\tif (match) {\n\t\tcolumn.modules.accessor = config;\n\t}\n};\n\nAccessor.prototype.lookupAccessor = function (value) {\n\tvar accessor = false;\n\n\t//set column accessor\n\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\tcase \"string\":\n\t\t\tif (this.accessors[value]) {\n\t\t\t\taccessor = this.accessors[value];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\taccessor = value;\n\t\t\tbreak;\n\t}\n\n\treturn accessor;\n};\n\n//apply accessor to row\nAccessor.prototype.transformRow = function (row, type) {\n\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t rowComponent = row.getComponent();\n\n\t//clone data object with deep copy to isolate internal data from returned result\n\tvar data = Tabulator.prototype.helpers.deepClone(row.data || {});\n\n\tthis.table.columnManager.traverse(function (column) {\n\t\tvar value, accessor, params, colCompnent;\n\n\t\tif (column.modules.accessor) {\n\n\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\n\n\t\t\tif (accessor) {\n\t\t\t\tvalue = column.getFieldValue(data);\n\n\t\t\t\tif (value != \"undefined\") {\n\t\t\t\t\tcolCompnent = column.getComponent();\n\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\n\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn data;\n},\n\n//default accessors\nAccessor.prototype.accessors = {};\n\nTabulator.prototype.registerModule(\"accessor\", Accessor);\nvar Ajax = function Ajax(table) {\n\n\tthis.table = table; //hold Tabulator object\n\tthis.config = false; //hold config object for ajax request\n\tthis.url = \"\"; //request URL\n\tthis.urlGenerator = false;\n\tthis.params = false; //request parameters\n\n\tthis.loaderElement = this.createLoaderElement(); //loader message div\n\tthis.msgElement = this.createMsgElement(); //message element\n\tthis.loadingElement = false;\n\tthis.errorElement = false;\n\tthis.loaderPromise = false;\n\n\tthis.progressiveLoad = false;\n\tthis.loading = false;\n\n\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\n};\n\n//initialize setup options\nAjax.prototype.initialize = function () {\n\tvar template;\n\n\tthis.loaderElement.appendChild(this.msgElement);\n\n\tif (this.table.options.ajaxLoaderLoading) {\n\t\tif (typeof this.table.options.ajaxLoaderLoading == \"string\") {\n\t\t\ttemplate = document.createElement('template');\n\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderLoading.trim();\n\t\t\tthis.loadingElement = template.content.firstChild;\n\t\t} else {\n\t\t\tthis.loadingElement = this.table.options.ajaxLoaderLoading;\n\t\t}\n\t}\n\n\tthis.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise;\n\n\tthis.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator;\n\n\tif (this.table.options.ajaxLoaderError) {\n\t\tif (typeof this.table.options.ajaxLoaderError == \"string\") {\n\t\t\ttemplate = document.createElement('template');\n\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderError.trim();\n\t\t\tthis.errorElement = template.content.firstChild;\n\t\t} else {\n\t\t\tthis.errorElement = this.table.options.ajaxLoaderError;\n\t\t}\n\t}\n\n\tif (this.table.options.ajaxParams) {\n\t\tthis.setParams(this.table.options.ajaxParams);\n\t}\n\n\tif (this.table.options.ajaxConfig) {\n\t\tthis.setConfig(this.table.options.ajaxConfig);\n\t}\n\n\tif (this.table.options.ajaxURL) {\n\t\tthis.setUrl(this.table.options.ajaxURL);\n\t}\n\n\tif (this.table.options.ajaxProgressiveLoad) {\n\t\tif (this.table.options.pagination) {\n\t\t\tthis.progressiveLoad = false;\n\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\n\t\t} else {\n\t\t\tif (this.table.modExists(\"page\")) {\n\t\t\t\tthis.progressiveLoad = this.table.options.ajaxProgressiveLoad;\n\t\t\t\tthis.table.modules.page.initializeProgressive(this.progressiveLoad);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Pagination plugin is required for progressive ajax loading\");\n\t\t\t}\n\t\t}\n\t}\n};\n\nAjax.prototype.createLoaderElement = function () {\n\tvar el = document.createElement(\"div\");\n\tel.classList.add(\"tabulator-loader\");\n\treturn el;\n};\n\nAjax.prototype.createMsgElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-loader-msg\");\n\tel.setAttribute(\"role\", \"alert\");\n\n\treturn el;\n};\n\n//set ajax params\nAjax.prototype.setParams = function (params, update) {\n\tif (update) {\n\t\tthis.params = this.params || {};\n\n\t\tfor (var key in params) {\n\t\t\tthis.params[key] = params[key];\n\t\t}\n\t} else {\n\t\tthis.params = params;\n\t}\n};\n\nAjax.prototype.getParams = function () {\n\treturn this.params || {};\n};\n\n//load config object\nAjax.prototype.setConfig = function (config) {\n\tthis._loadDefaultConfig();\n\n\tif (typeof config == \"string\") {\n\t\tthis.config.method = config;\n\t} else {\n\t\tfor (var key in config) {\n\t\t\tthis.config[key] = config[key];\n\t\t}\n\t}\n};\n\n//create config object from default\nAjax.prototype._loadDefaultConfig = function (force) {\n\tvar self = this;\n\tif (!self.config || force) {\n\n\t\tself.config = {};\n\n\t\t//load base config from defaults\n\t\tfor (var key in self.defaultConfig) {\n\t\t\tself.config[key] = self.defaultConfig[key];\n\t\t}\n\t}\n};\n\n//set request url\nAjax.prototype.setUrl = function (url) {\n\tthis.url = url;\n};\n\n//get request url\nAjax.prototype.getUrl = function () {\n\treturn this.url;\n};\n\n//lstandard loading function\nAjax.prototype.loadData = function (inPosition, columnsChanged) {\n\tvar self = this;\n\n\tif (this.progressiveLoad) {\n\t\treturn this._loadDataProgressive();\n\t} else {\n\t\treturn this._loadDataStandard(inPosition, columnsChanged);\n\t}\n};\n\nAjax.prototype.nextPage = function (diff) {\n\tvar margin;\n\n\tif (!this.loading) {\n\n\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2;\n\n\t\tif (diff < margin) {\n\t\t\tthis.table.modules.page.nextPage().then(function () {}).catch(function () {});\n\t\t}\n\t}\n};\n\nAjax.prototype.blockActiveRequest = function () {\n\tthis.requestOrder++;\n};\n\nAjax.prototype._loadDataProgressive = function () {\n\tthis.table.rowManager.setData([]);\n\treturn this.table.modules.page.setPage(1);\n};\n\nAjax.prototype._loadDataStandard = function (inPosition, columnsChanged) {\n\tvar _this42 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\t_this42.sendRequest(inPosition).then(function (data) {\n\t\t\t_this42.table.rowManager.setData(data, inPosition, columnsChanged).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (e) {\n\t\t\t\treject(e);\n\t\t\t});\n\t\t}).catch(function (e) {\n\t\t\treject(e);\n\t\t});\n\t});\n};\n\nAjax.prototype.generateParamsList = function (data, prefix) {\n\tvar self = this,\n\t output = [];\n\n\tprefix = prefix || \"\";\n\n\tif (Array.isArray(data)) {\n\t\tdata.forEach(function (item, i) {\n\t\t\toutput = output.concat(self.generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t} else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === \"object\") {\n\t\tfor (var key in data) {\n\t\t\toutput = output.concat(self.generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t} else {\n\t\toutput.push({ key: prefix, value: data });\n\t}\n\n\treturn output;\n};\n\nAjax.prototype.serializeParams = function (params) {\n\tvar output = this.generateParamsList(params),\n\t encoded = [];\n\n\toutput.forEach(function (item) {\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\n\t});\n\n\treturn encoded.join(\"&\");\n};\n\n//send ajax request\nAjax.prototype.sendRequest = function (silent) {\n\tvar _this43 = this;\n\n\tvar self = this,\n\t url = self.url,\n\t requestNo,\n\t esc,\n\t query;\n\n\tself.requestOrder++;\n\trequestNo = self.requestOrder;\n\n\tself._loadDefaultConfig();\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (self.table.options.ajaxRequesting.call(_this43.table, self.url, self.params) !== false) {\n\n\t\t\tself.loading = true;\n\n\t\t\tif (!silent) {\n\t\t\t\tself.showLoader();\n\t\t\t}\n\n\t\t\t_this43.loaderPromise(url, self.config, self.params).then(function (data) {\n\t\t\t\tif (requestNo === self.requestOrder) {\n\t\t\t\t\tif (self.table.options.ajaxResponse) {\n\t\t\t\t\t\tdata = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data);\n\t\t\t\t\t}\n\t\t\t\t\tresolve(data);\n\n\t\t\t\t\tself.hideLoader();\n\t\t\t\t\tself.loading = false;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made\");\n\t\t\t\t}\n\t\t\t}).catch(function (error) {\n\t\t\t\tconsole.error(\"Ajax Load Error: \", error);\n\t\t\t\tself.table.options.ajaxError.call(self.table, error);\n\n\t\t\t\tself.showError();\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tself.hideLoader();\n\t\t\t\t}, 3000);\n\n\t\t\t\tself.loading = false;\n\n\t\t\t\treject(error);\n\t\t\t});\n\t\t} else {\n\t\t\treject();\n\t\t}\n\t});\n};\n\nAjax.prototype.showLoader = function () {\n\tvar shouldLoad = typeof this.table.options.ajaxLoader === \"function\" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;\n\n\tif (shouldLoad) {\n\n\t\tthis.hideLoader();\n\n\t\twhile (this.msgElement.firstChild) {\n\t\t\tthis.msgElement.removeChild(this.msgElement.firstChild);\n\t\t}this.msgElement.classList.remove(\"tabulator-error\");\n\t\tthis.msgElement.classList.add(\"tabulator-loading\");\n\n\t\tif (this.loadingElement) {\n\t\t\tthis.msgElement.appendChild(this.loadingElement);\n\t\t} else {\n\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|loading\");\n\t\t}\n\n\t\tthis.table.element.appendChild(this.loaderElement);\n\t}\n};\n\nAjax.prototype.showError = function () {\n\tthis.hideLoader();\n\n\twhile (this.msgElement.firstChild) {\n\t\tthis.msgElement.removeChild(this.msgElement.firstChild);\n\t}this.msgElement.classList.remove(\"tabulator-loading\");\n\tthis.msgElement.classList.add(\"tabulator-error\");\n\n\tif (this.errorElement) {\n\t\tthis.msgElement.appendChild(this.errorElement);\n\t} else {\n\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|error\");\n\t}\n\n\tthis.table.element.appendChild(this.loaderElement);\n};\n\nAjax.prototype.hideLoader = function () {\n\tif (this.loaderElement.parentNode) {\n\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\n\t}\n};\n\n//default ajax config object\nAjax.prototype.defaultConfig = {\n\tmethod: \"GET\"\n};\n\nAjax.prototype.defaultURLGenerator = function (url, config, params) {\n\n\tif (url) {\n\t\tif (params && Object.keys(params).length) {\n\t\t\tif (!config.method || config.method.toLowerCase() == \"get\") {\n\t\t\t\tconfig.method = \"get\";\n\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + this.modules.ajax.serializeParams(params);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn url;\n};\n\nAjax.prototype.defaultLoaderPromise = function (url, config, params) {\n\tvar self = this,\n\t contentType;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\t//set url\n\t\turl = self.urlGenerator.call(self.table, url, config, params);\n\n\t\t//set body content if not GET request\n\t\tif (config.method.toUpperCase() != \"GET\") {\n\t\t\tcontentType = _typeof(self.table.options.ajaxContentType) === \"object\" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType];\n\t\t\tif (contentType) {\n\n\t\t\t\tfor (var key in contentType.headers) {\n\t\t\t\t\tif (!config.headers) {\n\t\t\t\t\t\tconfig.headers = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof config.headers[key] === \"undefined\") {\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconfig.body = contentType.body.call(self, url, config, params);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", self.table.options.ajaxContentType);\n\t\t\t}\n\t\t}\n\n\t\tif (url) {\n\n\t\t\t//configure headers\n\t\t\tif (typeof config.headers === \"undefined\") {\n\t\t\t\tconfig.headers = {};\n\t\t\t}\n\n\t\t\tif (typeof config.headers.Accept === \"undefined\") {\n\t\t\t\tconfig.headers.Accept = \"application/json\";\n\t\t\t}\n\n\t\t\tif (typeof config.headers[\"X-Requested-With\"] === \"undefined\") {\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\tif (typeof config.mode === \"undefined\") {\n\t\t\t\tconfig.mode = \"cors\";\n\t\t\t}\n\n\t\t\tif (config.mode == \"cors\") {\n\n\t\t\t\tif (typeof config.headers[\"Access-Control-Allow-Origin\"] === \"undefined\") {\n\t\t\t\t\tconfig.headers[\"Access-Control-Allow-Origin\"] = window.location.origin;\n\t\t\t\t}\n\n\t\t\t\tif (typeof config.credentials === \"undefined\") {\n\t\t\t\t\tconfig.credentials = 'same-origin';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (typeof config.credentials === \"undefined\") {\n\t\t\t\t\tconfig.credentials = 'include';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//send request\n\t\t\tfetch(url, config).then(function (response) {\n\t\t\t\tif (response.ok) {\n\t\t\t\t\tresponse.json().then(function (data) {\n\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\treject(response);\n\t\t\t\t}\n\t\t\t}).catch(function (error) {\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\n\t\t\t\treject(error);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\n\t\t\tresolve([]);\n\t\t}\n\t});\n};\n\nAjax.prototype.contentTypeFormatters = {\n\t\"json\": {\n\t\theaders: {\n\t\t\t'Content-Type': 'application/json'\n\t\t},\n\t\tbody: function body(url, config, params) {\n\t\t\treturn JSON.stringify(params);\n\t\t}\n\t},\n\t\"form\": {\n\t\theaders: {},\n\t\tbody: function body(url, config, params) {\n\t\t\tvar output = this.generateParamsList(params),\n\t\t\t form = new FormData();\n\n\t\t\toutput.forEach(function (item) {\n\t\t\t\tform.append(item.key, item.value);\n\t\t\t});\n\n\t\t\treturn form;\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"ajax\", Ajax);\n\n//public calc object\nvar CalcComponent = function CalcComponent(row) {\n\tthis._row = row;\n};\n\nCalcComponent.prototype.getData = function (transform) {\n\treturn this._row.getData(transform);\n};\n\nCalcComponent.prototype.getElement = function () {\n\treturn this._row.getElement();\n};\n\nCalcComponent.prototype.getTable = function () {\n\treturn this._row.table;\n};\n\nCalcComponent.prototype.getCells = function () {\n\tvar cells = [];\n\n\tthis._row.getCells().forEach(function (cell) {\n\t\tcells.push(cell.getComponent());\n\t});\n\n\treturn cells;\n};\n\nCalcComponent.prototype.getCell = function (column) {\n\tvar cell = this._row.getCell(column);\n\treturn cell ? cell.getComponent() : false;\n};\n\nCalcComponent.prototype._getSelf = function () {\n\treturn this._row;\n};\n\nvar ColumnCalcs = function ColumnCalcs(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.topCalcs = [];\n\tthis.botCalcs = [];\n\tthis.genColumn = false;\n\tthis.topElement = this.createElement();\n\tthis.botElement = this.createElement();\n\tthis.topRow = false;\n\tthis.botRow = false;\n\tthis.topInitialized = false;\n\tthis.botInitialized = false;\n\n\tthis.initialize();\n};\n\nColumnCalcs.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\tel.classList.add(\"tabulator-calcs-holder\");\n\treturn el;\n};\n\nColumnCalcs.prototype.initialize = function () {\n\tthis.genColumn = new Column({ field: \"value\" }, this);\n};\n\n//dummy functions to handle being mock column manager\nColumnCalcs.prototype.registerColumnField = function () {};\n\n//initialize column calcs\nColumnCalcs.prototype.initializeColumn = function (column) {\n\tvar def = column.definition;\n\n\tvar config = {\n\t\ttopCalcParams: def.topCalcParams || {},\n\t\tbotCalcParams: def.bottomCalcParams || {}\n\t};\n\n\tif (def.topCalc) {\n\n\t\tswitch (_typeof(def.topCalc)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (this.calculations[def.topCalc]) {\n\t\t\t\t\tconfig.topCalc = this.calculations[def.topCalc];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tconfig.topCalc = def.topCalc;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif (config.topCalc) {\n\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\tthis.topCalcs.push(column);\n\n\t\t\tif (this.table.options.columnCalcs != \"group\") {\n\t\t\t\tthis.initializeTopRow();\n\t\t\t}\n\t\t}\n\t}\n\n\tif (def.bottomCalc) {\n\t\tswitch (_typeof(def.bottomCalc)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (this.calculations[def.bottomCalc]) {\n\t\t\t\t\tconfig.botCalc = this.calculations[def.bottomCalc];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tconfig.botCalc = def.bottomCalc;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif (config.botCalc) {\n\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\tthis.botCalcs.push(column);\n\n\t\t\tif (this.table.options.columnCalcs != \"group\") {\n\t\t\t\tthis.initializeBottomRow();\n\t\t\t}\n\t\t}\n\t}\n};\n\nColumnCalcs.prototype.removeCalcs = function () {\n\tvar changed = false;\n\n\tif (this.topInitialized) {\n\t\tthis.topInitialized = false;\n\t\tthis.topElement.parentNode.removeChild(this.topElement);\n\t\tchanged = true;\n\t}\n\n\tif (this.botInitialized) {\n\t\tthis.botInitialized = false;\n\t\tthis.table.footerManager.remove(this.botElement);\n\t\tchanged = true;\n\t}\n\n\tif (changed) {\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n};\n\nColumnCalcs.prototype.initializeTopRow = function () {\n\tif (!this.topInitialized) {\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\n\t\tthis.topInitialized = true;\n\t}\n};\n\nColumnCalcs.prototype.initializeBottomRow = function () {\n\tif (!this.botInitialized) {\n\t\tthis.table.footerManager.prepend(this.botElement);\n\t\tthis.botInitialized = true;\n\t}\n};\n\nColumnCalcs.prototype.scrollHorizontal = function (left) {\n\tif (this.botInitialized && this.botRow) {\n\t\tthis.botRow.getElement().style.marginLeft = -left + \"px\";\n\t}\n};\n\nColumnCalcs.prototype.recalc = function (rows) {\n\tvar data, row;\n\n\tif (this.topInitialized || this.botInitialized) {\n\t\tdata = this.rowsToData(rows);\n\n\t\tif (this.topInitialized) {\n\t\t\tif (this.topRow) {\n\t\t\t\tthis.topRow.deleteCells();\n\t\t\t}\n\n\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows));\n\t\t\tthis.topRow = row;\n\t\t\twhile (this.topElement.firstChild) {\n\t\t\t\tthis.topElement.removeChild(this.topElement.firstChild);\n\t\t\t}this.topElement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t}\n\n\t\tif (this.botInitialized) {\n\t\t\tif (this.botRow) {\n\t\t\t\tthis.botRow.deleteCells();\n\t\t\t}\n\n\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows));\n\t\t\tthis.botRow = row;\n\t\t\twhile (this.botElement.firstChild) {\n\t\t\t\tthis.botElement.removeChild(this.botElement.firstChild);\n\t\t\t}this.botElement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t}\n\n\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t//set resizable handles\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t}\n\t}\n};\n\nColumnCalcs.prototype.recalcRowGroup = function (row) {\n\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\n};\n\nColumnCalcs.prototype.recalcAll = function () {\n\tvar _this44 = this;\n\n\tif (this.topCalcs.length || this.botCalcs.length) {\n\t\tif (this.table.options.columnCalcs !== \"group\") {\n\t\t\tthis.recalc(this.table.rowManager.activeRows);\n\t\t}\n\n\t\tif (this.table.options.groupBy && this.table.options.columnCalcs !== \"table\") {\n\n\t\t\tvar groups = table.modules.groupRows.getChildGroups();\n\n\t\t\tgroups.forEach(function (group) {\n\t\t\t\t_this44.recalcGroup(group);\n\t\t\t});\n\t\t}\n\t}\n};\n\nColumnCalcs.prototype.recalcGroup = function (group) {\n\tvar data, rowData;\n\n\tif (group) {\n\t\tif (group.calcs) {\n\t\t\tif (group.calcs.bottom) {\n\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\trowData = this.generateRowData(\"bottom\", data);\n\n\t\t\t\tgroup.calcs.bottom.updateData(rowData);\n\t\t\t\tgroup.calcs.bottom.reinitialize();\n\t\t\t}\n\n\t\t\tif (group.calcs.top) {\n\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\trowData = this.generateRowData(\"top\", data);\n\n\t\t\t\tgroup.calcs.top.updateData(rowData);\n\t\t\t\tgroup.calcs.top.reinitialize();\n\t\t\t}\n\t\t}\n\t}\n};\n\n//generate top stats row\nColumnCalcs.prototype.generateTopRow = function (rows) {\n\treturn this.generateRow(\"top\", this.rowsToData(rows));\n};\n//generate bottom stats row\nColumnCalcs.prototype.generateBottomRow = function (rows) {\n\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\n};\n\nColumnCalcs.prototype.rowsToData = function (rows) {\n\tvar _this45 = this;\n\n\tvar data = [];\n\n\trows.forEach(function (row) {\n\t\tdata.push(row.getData());\n\n\t\tif (_this45.table.options.dataTree && _this45.table.options.dataTreeChildColumnCalcs) {\n\t\t\tif (row.modules.dataTree.open) {\n\t\t\t\tvar children = _this45.rowsToData(_this45.table.modules.dataTree.getFilteredTreeChildren(row));\n\t\t\t\tdata = data.concat(children);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn data;\n};\n\n//generate stats row\nColumnCalcs.prototype.generateRow = function (pos, data) {\n\tvar self = this,\n\t rowData = this.generateRowData(pos, data),\n\t row;\n\n\tif (self.table.modExists(\"mutator\")) {\n\t\tself.table.modules.mutator.disable();\n\t}\n\n\trow = new Row(rowData, this, \"calc\");\n\n\tif (self.table.modExists(\"mutator\")) {\n\t\tself.table.modules.mutator.enable();\n\t}\n\n\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\n\n\trow.component = false;\n\n\trow.getComponent = function () {\n\t\tif (!this.component) {\n\t\t\tthis.component = new CalcComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t};\n\n\trow.generateCells = function () {\n\n\t\tvar cells = [];\n\n\t\tself.table.columnManager.columnsByIndex.forEach(function (column) {\n\n\t\t\t//set field name of mock column\n\t\t\tself.genColumn.setField(column.getField());\n\t\t\tself.genColumn.hozAlign = column.hozAlign;\n\n\t\t\tif (column.definition[pos + \"CalcFormatter\"] && self.table.modExists(\"format\")) {\n\t\t\t\tself.genColumn.modules.format = {\n\t\t\t\t\tformatter: self.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\n\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tself.genColumn.modules.format = {\n\t\t\t\t\tformatter: self.table.modules.format.getFormatter(\"plaintext\"),\n\t\t\t\t\tparams: {}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t//ensure css class defintion is replicated to calculation cell\n\t\t\tself.genColumn.definition.cssClass = column.definition.cssClass;\n\n\t\t\t//generate cell and assign to correct column\n\t\t\tvar cell = new Cell(self.genColumn, row);\n\t\t\tcell.getElement();\n\t\t\tcell.column = column;\n\t\t\tcell.setWidth();\n\n\t\t\tcolumn.cells.push(cell);\n\t\t\tcells.push(cell);\n\n\t\t\tif (!column.visible) {\n\t\t\t\tcell.hide();\n\t\t\t}\n\t\t});\n\n\t\tthis.cells = cells;\n\t};\n\n\treturn row;\n};\n\n//generate stats row\nColumnCalcs.prototype.generateRowData = function (pos, data) {\n\tvar rowData = {},\n\t calcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\n\t type = pos == \"top\" ? \"topCalc\" : \"botCalc\",\n\t params,\n\t paramKey;\n\n\tcalcs.forEach(function (column) {\n\t\tvar values = [];\n\n\t\tif (column.modules.columnCalcs && column.modules.columnCalcs[type]) {\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvalues.push(column.getFieldValue(item));\n\t\t\t});\n\n\t\t\tparamKey = type + \"Params\";\n\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\n\n\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\n\t\t}\n\t});\n\n\treturn rowData;\n};\n\nColumnCalcs.prototype.hasTopCalcs = function () {\n\treturn !!this.topCalcs.length;\n};\n\nColumnCalcs.prototype.hasBottomCalcs = function () {\n\treturn !!this.botCalcs.length;\n};\n\n//handle table redraw\nColumnCalcs.prototype.redraw = function () {\n\tif (this.topRow) {\n\t\tthis.topRow.normalizeHeight(true);\n\t}\n\tif (this.botRow) {\n\t\tthis.botRow.normalizeHeight(true);\n\t}\n};\n\n//return the calculated\nColumnCalcs.prototype.getResults = function () {\n\tvar self = this,\n\t results = {},\n\t groups;\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tgroups = this.table.modules.groupRows.getGroups(true);\n\n\t\tgroups.forEach(function (group) {\n\t\t\tresults[group.getKey()] = self.getGroupResults(group);\n\t\t});\n\t} else {\n\t\tresults = {\n\t\t\ttop: this.topRow ? this.topRow.getData() : {},\n\t\t\tbottom: this.botRow ? this.botRow.getData() : {}\n\t\t};\n\t}\n\n\treturn results;\n};\n\n//get results from a group\nColumnCalcs.prototype.getGroupResults = function (group) {\n\tvar self = this,\n\t groupObj = group._getSelf(),\n\t subGroups = group.getSubGroups(),\n\t subGroupResults = {},\n\t results = {};\n\n\tsubGroups.forEach(function (subgroup) {\n\t\tsubGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup);\n\t});\n\n\tresults = {\n\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\n\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\n\t\tgroups: subGroupResults\n\t};\n\n\treturn results;\n};\n\n//default calculations\nColumnCalcs.prototype.calculations = {\n\t\"avg\": function avg(values, data, calcParams) {\n\t\tvar output = 0,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2;\n\n\t\tif (values.length) {\n\t\t\toutput = values.reduce(function (sum, value) {\n\t\t\t\treturn Number(sum) + Number(value);\n\t\t\t});\n\n\t\t\toutput = output / values.length;\n\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\n\t\t}\n\n\t\treturn parseFloat(output).toString();\n\t},\n\t\"max\": function max(values, data, calcParams) {\n\t\tvar output = null,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function (value) {\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif (value > output || output === null) {\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? precision !== false ? output.toFixed(precision) : output : \"\";\n\t},\n\t\"min\": function min(values, data, calcParams) {\n\t\tvar output = null,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function (value) {\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif (value < output || output === null) {\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? precision !== false ? output.toFixed(precision) : output : \"\";\n\t},\n\t\"sum\": function sum(values, data, calcParams) {\n\t\tvar output = 0,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tif (values.length) {\n\t\t\tvalues.forEach(function (value) {\n\t\t\t\tvalue = Number(value);\n\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\n\t\t\t});\n\t\t}\n\n\t\treturn precision !== false ? output.toFixed(precision) : output;\n\t},\n\t\"concat\": function concat(values, data, calcParams) {\n\t\tvar output = 0;\n\n\t\tif (values.length) {\n\t\t\toutput = values.reduce(function (sum, value) {\n\t\t\t\treturn String(sum) + String(value);\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"count\": function count(values, data, calcParams) {\n\t\tvar output = 0;\n\n\t\tif (values.length) {\n\t\t\tvalues.forEach(function (value) {\n\t\t\t\tif (value) {\n\t\t\t\t\toutput++;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n};\n\nTabulator.prototype.registerModule(\"columnCalcs\", ColumnCalcs);\n\nvar Clipboard = function Clipboard(table) {\n\tthis.table = table;\n\tthis.mode = true;\n\n\tthis.pasteParser = function () {};\n\tthis.pasteAction = function () {};\n\tthis.customSelection = false;\n\tthis.rowRange = false;\n\tthis.blocked = true; //block copy actions not originating from this command\n};\n\nClipboard.prototype.initialize = function () {\n\tvar _this46 = this;\n\n\tthis.mode = this.table.options.clipboard;\n\n\tthis.rowRange = this.table.options.clipboardCopyRowRange;\n\n\tif (this.mode === true || this.mode === \"copy\") {\n\t\tthis.table.element.addEventListener(\"copy\", function (e) {\n\t\t\tvar plain, html, list;\n\n\t\t\tif (!_this46.blocked) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (_this46.customSelection) {\n\t\t\t\t\tplain = _this46.customSelection;\n\n\t\t\t\t\tif (_this46.table.options.clipboardCopyFormatter) {\n\t\t\t\t\t\tplain = _this46.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tvar list = _this46.table.modules.export.generateExportList(_this46.table.options.clipboardCopyConfig, _this46.table.options.clipboardCopyStyled, _this46.rowRange, \"clipboard\");\n\n\t\t\t\t\thtml = _this46.table.modules.export.genereateHTMLTable(list);\n\t\t\t\t\tplain = html ? _this46.generatePlainContent(list) : \"\";\n\n\t\t\t\t\tif (_this46.table.options.clipboardCopyFormatter) {\n\t\t\t\t\t\tplain = _this46.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\thtml = _this46.table.options.clipboardCopyFormatter(\"html\", html);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\n\t\t\t\t\twindow.clipboardData.setData('Text', plain);\n\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\n\t\t\t\t\te.clipboardData.setData('text/plain', plain);\n\t\t\t\t\tif (html) {\n\t\t\t\t\t\te.clipboardData.setData('text/html', html);\n\t\t\t\t\t}\n\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\n\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\n\t\t\t\t\tif (html) {\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t_this46.table.options.clipboardCopied.call(_this46.table, plain, html);\n\n\t\t\t\t_this46.reset();\n\t\t\t}\n\t\t});\n\t}\n\n\tif (this.mode === true || this.mode === \"paste\") {\n\t\tthis.table.element.addEventListener(\"paste\", function (e) {\n\t\t\t_this46.paste(e);\n\t\t});\n\t}\n\n\tthis.setPasteParser(this.table.options.clipboardPasteParser);\n\tthis.setPasteAction(this.table.options.clipboardPasteAction);\n};\n\nClipboard.prototype.reset = function () {\n\tthis.blocked = true;\n\tthis.customSelection = false;\n};\n\nClipboard.prototype.generatePlainContent = function (list) {\n\tvar output = [];\n\n\tlist.forEach(function (row) {\n\t\tvar rowData = [];\n\n\t\trow.columns.forEach(function (col) {\n\t\t\tvar value = \"\";\n\n\t\t\tif (col) {\n\n\t\t\t\tif (row.type === \"group\") {\n\t\t\t\t\tcol.value = col.component.getKey();\n\t\t\t\t}\n\n\t\t\t\tif (col.value === null) {\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t} else {\n\t\t\t\t\tswitch (_typeof(col.value)) {\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tvalue = col.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trowData.push(value);\n\t\t});\n\n\t\toutput.push(rowData.join(\"\\t\"));\n\t});\n\n\treturn output.join(\"\\n\");\n};\n\nClipboard.prototype.copy = function (range, internal) {\n\tvar range, sel, textRange;\n\tthis.blocked = false;\n\tthis.customSelection = false;\n\n\tif (this.mode === true || this.mode === \"copy\") {\n\n\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\n\n\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n\t\t\trange = document.createRange();\n\t\t\trange.selectNodeContents(this.table.element);\n\t\t\tsel = window.getSelection();\n\n\t\t\tif (sel.toString() && internal) {\n\t\t\t\tthis.customSelection = sel.toString();\n\t\t\t}\n\n\t\t\tsel.removeAllRanges();\n\t\t\tsel.addRange(range);\n\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\n\t\t\ttextRange = document.body.createTextRange();\n\t\t\ttextRange.moveToElementText(this.table.element);\n\t\t\ttextRange.select();\n\t\t}\n\n\t\tdocument.execCommand('copy');\n\n\t\tif (sel) {\n\t\t\tsel.removeAllRanges();\n\t\t}\n\t}\n};\n\n//PASTE EVENT HANDLING\n\nClipboard.prototype.setPasteAction = function (action) {\n\n\tswitch (typeof action === 'undefined' ? 'undefined' : _typeof(action)) {\n\t\tcase \"string\":\n\t\t\tthis.pasteAction = this.pasteActions[action];\n\n\t\t\tif (!this.pasteAction) {\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tthis.pasteAction = action;\n\t\t\tbreak;\n\t}\n};\n\nClipboard.prototype.setPasteParser = function (parser) {\n\tswitch (typeof parser === 'undefined' ? 'undefined' : _typeof(parser)) {\n\t\tcase \"string\":\n\t\t\tthis.pasteParser = this.pasteParsers[parser];\n\n\t\t\tif (!this.pasteParser) {\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tthis.pasteParser = parser;\n\t\t\tbreak;\n\t}\n};\n\nClipboard.prototype.paste = function (e) {\n\tvar data, rowData, rows;\n\n\tif (this.checkPaseOrigin(e)) {\n\n\t\tdata = this.getPasteData(e);\n\n\t\trowData = this.pasteParser.call(this, data);\n\n\t\tif (rowData) {\n\t\t\te.preventDefault();\n\n\t\t\tif (this.table.modExists(\"mutator\")) {\n\t\t\t\trowData = this.mutateData(rowData);\n\t\t\t}\n\n\t\t\trows = this.pasteAction.call(this, rowData);\n\t\t\tthis.table.options.clipboardPasted.call(this.table, data, rowData, rows);\n\t\t} else {\n\t\t\tthis.table.options.clipboardPasteError.call(this.table, data);\n\t\t}\n\t}\n};\n\nClipboard.prototype.mutateData = function (data) {\n\tvar self = this,\n\t output = [];\n\n\tif (Array.isArray(data)) {\n\t\tdata.forEach(function (row) {\n\t\t\toutput.push(self.table.modules.mutator.transformRow(row, \"clipboard\"));\n\t\t});\n\t} else {\n\t\toutput = data;\n\t}\n\n\treturn output;\n};\n\nClipboard.prototype.checkPaseOrigin = function (e) {\n\tvar valid = true;\n\n\tif (e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell) {\n\t\tvalid = false;\n\t}\n\n\treturn valid;\n};\n\nClipboard.prototype.getPasteData = function (e) {\n\tvar data;\n\n\tif (window.clipboardData && window.clipboardData.getData) {\n\t\tdata = window.clipboardData.getData('Text');\n\t} else if (e.clipboardData && e.clipboardData.getData) {\n\t\tdata = e.clipboardData.getData('text/plain');\n\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\n\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\n\t}\n\n\treturn data;\n};\n\nClipboard.prototype.pasteParsers = {\n\ttable: function table(clipboard) {\n\t\tvar data = [],\n\t\t success = false,\n\t\t headerFindSuccess = true,\n\t\t columns = this.table.columnManager.columns,\n\t\t columnMap = [],\n\t\t rows = [];\n\n\t\t//get data from clipboard into array of columns and rows.\n\t\tclipboard = clipboard.split(\"\\n\");\n\n\t\tclipboard.forEach(function (row) {\n\t\t\tdata.push(row.split(\"\\t\"));\n\t\t});\n\n\t\tif (data.length && !(data.length === 1 && data[0].length < 2)) {\n\t\t\tsuccess = true;\n\n\t\t\t//check if headers are present by title\n\t\t\tdata[0].forEach(function (value) {\n\t\t\t\tvar column = columns.find(function (column) {\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\n\t\t\t\t});\n\n\t\t\t\tif (column) {\n\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t} else {\n\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//check if column headers are present by field\n\t\t\tif (!headerFindSuccess) {\n\t\t\t\theaderFindSuccess = true;\n\t\t\t\tcolumnMap = [];\n\n\t\t\t\tdata[0].forEach(function (value) {\n\t\t\t\t\tvar column = columns.find(function (column) {\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\n\t\t\t\t\t});\n\n\t\t\t\t\tif (column) {\n\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!headerFindSuccess) {\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//remove header row if found\n\t\t\tif (headerFindSuccess) {\n\t\t\t\tdata.shift();\n\t\t\t}\n\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvar row = {};\n\n\t\t\t\titem.forEach(function (value, i) {\n\t\t\t\t\tif (columnMap[i]) {\n\t\t\t\t\t\trow[columnMap[i].field] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trows.push(row);\n\t\t\t});\n\n\t\t\treturn rows;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nClipboard.prototype.pasteActions = {\n\treplace: function replace(rows) {\n\t\treturn this.table.setData(rows);\n\t},\n\tupdate: function update(rows) {\n\t\treturn this.table.updateOrAddData(rows);\n\t},\n\tinsert: function insert(rows) {\n\t\treturn this.table.addData(rows);\n\t}\n};\n\nTabulator.prototype.registerModule(\"clipboard\", Clipboard);\n\nvar DataTree = function DataTree(table) {\n\tthis.table = table;\n\tthis.indent = 10;\n\tthis.field = \"\";\n\tthis.collapseEl = null;\n\tthis.expandEl = null;\n\tthis.branchEl = null;\n\tthis.elementField = false;\n\n\tthis.startOpen = function () {};\n\n\tthis.displayIndex = 0;\n};\n\nDataTree.prototype.initialize = function () {\n\tvar dummyEl = null,\n\t firstCol = this.table.columnManager.getFirstVisibileColumn(),\n\t options = this.table.options;\n\n\tthis.field = options.dataTreeChildField;\n\tthis.indent = options.dataTreeChildIndent;\n\tthis.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\n\n\tif (options.dataTreeBranchElement) {\n\n\t\tif (options.dataTreeBranchElement === true) {\n\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\n\t\t} else {\n\t\t\tif (typeof options.dataTreeBranchElement === \"string\") {\n\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\n\t\t\t\tthis.branchEl = dummyEl.firstChild;\n\t\t\t} else {\n\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (options.dataTreeCollapseElement) {\n\t\tif (typeof options.dataTreeCollapseElement === \"string\") {\n\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\n\t\t\tthis.collapseEl = dummyEl.firstChild;\n\t\t} else {\n\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\n\t\t}\n\t} else {\n\t\tthis.collapseEl = document.createElement(\"div\");\n\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\n\t\tthis.collapseEl.tabIndex = 0;\n\t\tthis.collapseEl.innerHTML = \"<div class='tabulator-data-tree-control-collapse'></div>\";\n\t}\n\n\tif (options.dataTreeExpandElement) {\n\t\tif (typeof options.dataTreeExpandElement === \"string\") {\n\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\n\t\t\tthis.expandEl = dummyEl.firstChild;\n\t\t} else {\n\t\t\tthis.expandEl = options.dataTreeExpandElement;\n\t\t}\n\t} else {\n\t\tthis.expandEl = document.createElement(\"div\");\n\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\n\t\tthis.expandEl.tabIndex = 0;\n\t\tthis.expandEl.innerHTML = \"<div class='tabulator-data-tree-control-expand'></div>\";\n\t}\n\n\tswitch (_typeof(options.dataTreeStartExpanded)) {\n\t\tcase \"boolean\":\n\t\t\tthis.startOpen = function (row, index) {\n\t\t\t\treturn options.dataTreeStartExpanded;\n\t\t\t};\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tthis.startOpen = options.dataTreeStartExpanded;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthis.startOpen = function (row, index) {\n\t\t\t\treturn options.dataTreeStartExpanded[index];\n\t\t\t};\n\t\t\tbreak;\n\t}\n};\n\nDataTree.prototype.initializeRow = function (row) {\n\tvar childArray = row.getData()[this.field];\n\tvar isArray = Array.isArray(childArray);\n\n\tvar children = isArray || !isArray && (typeof childArray === 'undefined' ? 'undefined' : _typeof(childArray)) === \"object\" && childArray !== null;\n\n\tif (!children && row.modules.dataTree && row.modules.dataTree.branchEl) {\n\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\n\t}\n\n\tif (!children && row.modules.dataTree && row.modules.dataTree.controlEl) {\n\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\n\t}\n\n\trow.modules.dataTree = {\n\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\n\t\topen: children ? row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0) : false,\n\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\n\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\n\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\n\t\tchildren: children\n\t};\n};\n\nDataTree.prototype.layoutRow = function (row) {\n\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\n\t el = cell.getElement(),\n\t config = row.modules.dataTree;\n\n\tif (config.branchEl) {\n\t\tif (config.branchEl.parentNode) {\n\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\n\t\t}\n\t\tconfig.branchEl = false;\n\t}\n\n\tif (config.controlEl) {\n\t\tif (config.controlEl.parentNode) {\n\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\n\t\t}\n\t\tconfig.controlEl = false;\n\t}\n\n\tthis.generateControlElement(row, el);\n\n\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\n\n\tif (config.index) {\n\t\tif (this.branchEl) {\n\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\n\t\t\tel.insertBefore(config.branchEl, el.firstChild);\n\n\t\t\tif (this.table.rtl) {\n\t\t\t\tconfig.branchEl.style.marginRight = (config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1) + config.index * this.indent + \"px\";\n\t\t\t} else {\n\t\t\t\tconfig.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + \"px\";\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (this.table.rtl) {\n\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + config.index * this.indent + \"px\";\n\t\t\t} else {\n\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + \"px\";\n\t\t\t}\n\t\t}\n\t}\n};\n\nDataTree.prototype.generateControlElement = function (row, el) {\n\tvar _this47 = this;\n\n\tvar config = row.modules.dataTree,\n\t el = el || row.getCells()[0].getElement(),\n\t oldControl = config.controlEl;\n\n\tif (config.children !== false) {\n\n\t\tif (config.open) {\n\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\n\t\t\tconfig.controlEl.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t_this47.collapseRow(row);\n\t\t\t});\n\t\t} else {\n\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\n\t\t\tconfig.controlEl.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t_this47.expandRow(row);\n\t\t\t});\n\t\t}\n\n\t\tconfig.controlEl.addEventListener(\"mousedown\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif (oldControl && oldControl.parentNode === el) {\n\t\t\toldControl.parentNode.replaceChild(config.controlEl, oldControl);\n\t\t} else {\n\t\t\tel.insertBefore(config.controlEl, el.firstChild);\n\t\t}\n\t}\n};\n\nDataTree.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nDataTree.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\nDataTree.prototype.getRows = function (rows) {\n\tvar _this48 = this;\n\n\tvar output = [];\n\n\trows.forEach(function (row, i) {\n\t\tvar config, children;\n\n\t\toutput.push(row);\n\n\t\tif (row instanceof Row) {\n\n\t\t\trow.create();\n\n\t\t\tconfig = row.modules.dataTree.children;\n\n\t\t\tif (!config.index && config.children !== false) {\n\t\t\t\tchildren = _this48.getChildren(row);\n\n\t\t\t\tchildren.forEach(function (child) {\n\t\t\t\t\tchild.create();\n\t\t\t\t\toutput.push(child);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\treturn output;\n};\n\nDataTree.prototype.getChildren = function (row, allChildren) {\n\tvar _this49 = this;\n\n\tvar config = row.modules.dataTree,\n\t children = [],\n\t output = [];\n\n\tif (config.children !== false && (config.open || allChildren)) {\n\t\tif (!Array.isArray(config.children)) {\n\t\t\tconfig.children = this.generateChildren(row);\n\t\t}\n\n\t\tif (this.table.modExists(\"filter\") && this.table.options.dataTreeFilter) {\n\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t} else {\n\t\t\tchildren = config.children;\n\t\t}\n\n\t\tif (this.table.modExists(\"sort\") && this.table.options.dataTreeSort) {\n\t\t\tthis.table.modules.sort.sort(children);\n\t\t}\n\n\t\tchildren.forEach(function (child) {\n\t\t\toutput.push(child);\n\n\t\t\tvar subChildren = _this49.getChildren(child);\n\n\t\t\tsubChildren.forEach(function (sub) {\n\t\t\t\toutput.push(sub);\n\t\t\t});\n\t\t});\n\t}\n\n\treturn output;\n};\n\nDataTree.prototype.generateChildren = function (row) {\n\tvar _this50 = this;\n\n\tvar children = [];\n\n\tvar childArray = row.getData()[this.field];\n\n\tif (!Array.isArray(childArray)) {\n\t\tchildArray = [childArray];\n\t}\n\n\tchildArray.forEach(function (childData) {\n\t\tvar childRow = new Row(childData || {}, _this50.table.rowManager);\n\n\t\tchildRow.create();\n\n\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\n\t\tchildRow.modules.dataTree.parent = row;\n\n\t\tif (childRow.modules.dataTree.children) {\n\t\t\tchildRow.modules.dataTree.open = _this50.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\n\t\t}\n\t\tchildren.push(childRow);\n\t});\n\n\treturn children;\n};\n\nDataTree.prototype.expandRow = function (row, silent) {\n\tvar config = row.modules.dataTree;\n\n\tif (config.children !== false) {\n\t\tconfig.open = true;\n\n\t\trow.reinitialize();\n\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\n\t\tthis.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);\n\t}\n};\n\nDataTree.prototype.collapseRow = function (row) {\n\tvar config = row.modules.dataTree;\n\n\tif (config.children !== false) {\n\t\tconfig.open = false;\n\n\t\trow.reinitialize();\n\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\n\t\tthis.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);\n\t}\n};\n\nDataTree.prototype.toggleRow = function (row) {\n\tvar config = row.modules.dataTree;\n\n\tif (config.children !== false) {\n\t\tif (config.open) {\n\t\t\tthis.collapseRow(row);\n\t\t} else {\n\t\t\tthis.expandRow(row);\n\t\t}\n\t}\n};\n\nDataTree.prototype.getTreeParent = function (row) {\n\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\n};\n\nDataTree.prototype.getFilteredTreeChildren = function (row) {\n\tvar config = row.modules.dataTree,\n\t output = [],\n\t children;\n\n\tif (config.children) {\n\n\t\tif (!Array.isArray(config.children)) {\n\t\t\tconfig.children = this.generateChildren(row);\n\t\t}\n\n\t\tif (this.table.modExists(\"filter\") && this.table.options.dataTreeFilter) {\n\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t} else {\n\t\t\tchildren = config.children;\n\t\t}\n\n\t\tchildren.forEach(function (childRow) {\n\t\t\tif (childRow instanceof Row) {\n\t\t\t\toutput.push(childRow);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn output;\n};\n\nDataTree.prototype.rowDelete = function (row) {\n\tvar parent = row.modules.dataTree.parent,\n\t childIndex;\n\n\tif (parent) {\n\t\tchildIndex = this.findChildIndex(row, parent);\n\n\t\tif (childIndex !== false) {\n\t\t\tparent.data[this.field].splice(childIndex, 1);\n\t\t}\n\n\t\tif (!parent.data[this.field].length) {\n\t\t\tdelete parent.data[this.field];\n\t\t}\n\n\t\tthis.initializeRow(parent);\n\t\tthis.layoutRow(parent);\n\t}\n\n\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n};\n\nDataTree.prototype.addTreeChildRow = function (row, data, top, index) {\n\tvar childIndex = false;\n\n\tif (typeof data === \"string\") {\n\t\tdata = JSON.parse(data);\n\t}\n\n\tif (!Array.isArray(row.data[this.field])) {\n\t\trow.data[this.field] = [];\n\n\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\n\t}\n\n\tif (typeof index !== \"undefined\") {\n\t\tchildIndex = this.findChildIndex(index, row);\n\n\t\tif (childIndex !== false) {\n\t\t\trow.data[this.field].splice(top ? childIndex : childIndex + 1, 0, data);\n\t\t}\n\t}\n\n\tif (childIndex === false) {\n\t\tif (top) {\n\t\t\trow.data[this.field].unshift(data);\n\t\t} else {\n\t\t\trow.data[this.field].push(data);\n\t\t}\n\t}\n\n\tthis.initializeRow(row);\n\tthis.layoutRow(row);\n\n\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n};\n\nDataTree.prototype.findChildIndex = function (subject, parent) {\n\tvar _this51 = this;\n\n\tvar match = false;\n\n\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\tif (subject instanceof Row) {\n\t\t\t//subject is row element\n\t\t\tmatch = subject.data;\n\t\t} else if (subject instanceof RowComponent) {\n\t\t\t//subject is public row component\n\t\t\tmatch = subject._getSelf().data;\n\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\t\t\tif (parent.modules.dataTree) {\n\t\t\t\tmatch = parent.modules.dataTree.children.find(function (childRow) {\n\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\n\t\t\t\t});\n\n\t\t\t\tif (match) {\n\t\t\t\t\tmatch = match.data;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (typeof subject == \"undefined\" || subject === null) {\n\t\tmatch = false;\n\t} else {\n\t\t//subject should be treated as the index of the row\n\t\tmatch = parent.data[this.field].find(function (row) {\n\t\t\treturn row.data[_this51.table.options.index] == subject;\n\t\t});\n\t}\n\n\tif (match) {\n\n\t\tif (Array.isArray(parent.data[this.field])) {\n\t\t\tmatch = parent.data[this.field].indexOf(match);\n\t\t}\n\n\t\tif (match == -1) {\n\t\t\tmatch = false;\n\t\t}\n\t}\n\n\t//catch all for any other type of input\n\n\treturn match;\n};\n\nDataTree.prototype.getTreeChildren = function (row, component, recurse) {\n\tvar _this52 = this;\n\n\tvar config = row.modules.dataTree,\n\t output = [];\n\n\tif (config.children) {\n\n\t\tif (!Array.isArray(config.children)) {\n\t\t\tconfig.children = this.generateChildren(row);\n\t\t}\n\n\t\tconfig.children.forEach(function (childRow) {\n\t\t\tif (childRow instanceof Row) {\n\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\n\n\t\t\t\tif (recurse) {\n\t\t\t\t\toutput = output.concat(_this52.getTreeChildren(childRow, component, recurse));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn output;\n};\n\nDataTree.prototype.checkForRestyle = function (cell) {\n\tif (!cell.row.cells.indexOf(cell)) {\n\t\tcell.row.reinitialize();\n\t}\n};\n\nDataTree.prototype.getChildField = function () {\n\treturn this.field;\n};\n\nDataTree.prototype.redrawNeeded = function (data) {\n\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\n};\n\nTabulator.prototype.registerModule(\"dataTree\", DataTree);\n\nvar Download = function Download(table) {\n\tthis.table = table; //hold Tabulator object\n};\n\n//trigger file download\nDownload.prototype.download = function (type, filename, options, range, interceptCallback) {\n\tvar self = this,\n\t downloadFunc = false;\n\n\tfunction buildLink(data, mime) {\n\t\tif (interceptCallback) {\n\t\t\tif (interceptCallback === true) {\n\t\t\t\tself.triggerDownload(data, mime, type, filename, true);\n\t\t\t} else {\n\t\t\t\tinterceptCallback(data);\n\t\t\t}\n\t\t} else {\n\t\t\tself.triggerDownload(data, mime, type, filename);\n\t\t}\n\t}\n\n\tif (typeof type == \"function\") {\n\t\tdownloadFunc = type;\n\t} else {\n\t\tif (self.downloaders[type]) {\n\t\t\tdownloadFunc = self.downloaders[type];\n\t\t} else {\n\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\n\t\t}\n\t}\n\n\tif (downloadFunc) {\n\t\tvar list = this.generateExportList(range);\n\n\t\tdownloadFunc.call(this.table, list, options || {}, buildLink);\n\t}\n};\n\nDownload.prototype.generateExportList = function (range) {\n\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\n\n\t//assign group header formatter\n\tvar groupHeader = this.table.options.groupHeaderDownload;\n\n\tif (groupHeader && !Array.isArray(groupHeader)) {\n\t\tgroupHeader = [groupHeader];\n\t}\n\n\tlist.forEach(function (row) {\n\t\tvar group;\n\n\t\tif (row.type === \"group\") {\n\t\t\tgroup = row.columns[0];\n\n\t\t\tif (groupHeader && groupHeader[row.indent]) {\n\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn list;\n};\n\nDownload.prototype.triggerDownload = function (data, mime, type, filename, newTab) {\n\tvar element = document.createElement('a'),\n\t blob = new Blob([data], { type: mime }),\n\t filename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\n\n\tblob = this.table.options.downloadReady.call(this.table, data, blob);\n\n\tif (blob) {\n\n\t\tif (newTab) {\n\t\t\twindow.open(window.URL.createObjectURL(blob));\n\t\t} else {\n\t\t\tif (navigator.msSaveOrOpenBlob) {\n\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\n\t\t\t} else {\n\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\n\n\t\t\t\t//set file title\n\t\t\t\telement.setAttribute('download', filename);\n\n\t\t\t\t//trigger download\n\t\t\t\telement.style.display = 'none';\n\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\telement.click();\n\n\t\t\t\t//remove temporary link element\n\t\t\t\tdocument.body.removeChild(element);\n\t\t\t}\n\t\t}\n\n\t\tif (this.table.options.downloadComplete) {\n\t\t\tthis.table.options.downloadComplete();\n\t\t}\n\t}\n};\n\nDownload.prototype.commsReceived = function (table, action, data) {\n\tswitch (action) {\n\t\tcase \"intercept\":\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\n\t\t\tbreak;\n\t}\n};\n\n//downloaders\nDownload.prototype.downloaders = {\n\tcsv: function csv(list, options, setFileContents) {\n\t\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\n\t\t fileContents = [],\n\t\t headers = [];\n\n\t\tlist.forEach(function (row) {\n\t\t\tvar item = [];\n\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"group\":\n\t\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"header\":\n\t\t\t\t\trow.columns.forEach(function (col, i) {\n\t\t\t\t\t\tif (col && col.depth === 1) {\n\t\t\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : '\"' + String(col.value).split('\"').join('\"\"') + '\"';\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"row\":\n\t\t\t\t\trow.columns.forEach(function (col) {\n\n\t\t\t\t\t\tif (col) {\n\n\t\t\t\t\t\t\tswitch (_typeof(col.value)) {\n\t\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfileContents.push(item.join(delimiter));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (headers.length) {\n\t\t\tfileContents.unshift(headers.join(delimiter));\n\t\t}\n\n\t\tfileContents = fileContents.join(\"\\n\");\n\n\t\tif (options.bom) {\n\t\t\tfileContents = '\\uFEFF' + fileContents;\n\t\t}\n\n\t\tsetFileContents(fileContents, \"text/csv\");\n\t},\n\n\tjson: function json(list, options, setFileContents) {\n\t\tvar fileContents = [];\n\n\t\tlist.forEach(function (row) {\n\t\t\tvar item = {};\n\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"header\":\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"group\":\n\t\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"row\":\n\t\t\t\t\trow.columns.forEach(function (col) {\n\t\t\t\t\t\tif (col) {\n\t\t\t\t\t\t\titem[col.component.getField()] = col.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfileContents.push(item);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tfileContents = JSON.stringify(fileContents, null, '\\t');\n\n\t\tsetFileContents(fileContents, \"application/json\");\n\t},\n\n\tpdf: function pdf(list, options, setFileContents) {\n\t\tvar header = [],\n\t\t body = [],\n\t\t autoTableParams = {},\n\t\t rowGroupStyles = options.rowGroupStyles || {\n\t\t\tfontStyle: \"bold\",\n\t\t\tfontSize: 12,\n\t\t\tcellPadding: 6,\n\t\t\tfillColor: 220\n\t\t},\n\t\t rowCalcStyles = options.rowCalcStyles || {\n\t\t\tfontStyle: \"bold\",\n\t\t\tfontSize: 10,\n\t\t\tcellPadding: 4,\n\t\t\tfillColor: 232\n\t\t},\n\t\t jsPDFParams = options.jsPDF || {},\n\t\t title = options && options.title ? options.title : \"\";\n\n\t\tif (!jsPDFParams.orientation) {\n\t\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\n\t\t}\n\n\t\tif (!jsPDFParams.unit) {\n\t\t\tjsPDFParams.unit = \"pt\";\n\t\t}\n\n\t\t//parse row list\n\t\tlist.forEach(function (row) {\n\t\t\tvar item = {};\n\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"header\":\n\t\t\t\t\theader.push(parseRow(row));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"group\":\n\t\t\t\t\tbody.push(parseRow(row, rowGroupStyles));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tbody.push(parseRow(row, rowCalcStyles));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"row\":\n\t\t\t\t\tbody.push(parseRow(row));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tfunction parseRow(row, styles) {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach(function (col) {\n\t\t\t\tvar cell;\n\n\t\t\t\tif (col) {\n\t\t\t\t\tswitch (_typeof(col.value)) {\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcell = {\n\t\t\t\t\t\tcontent: col.value,\n\t\t\t\t\t\tcolSpan: col.width,\n\t\t\t\t\t\trowSpan: col.height\n\t\t\t\t\t};\n\n\t\t\t\t\tif (styles) {\n\t\t\t\t\t\tcell.styles = styles;\n\t\t\t\t\t}\n\n\t\t\t\t\trowData.push(cell);\n\t\t\t\t} else {\n\t\t\t\t\trowData.push(\"\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn rowData;\n\t\t}\n\n\t\t//configure PDF\n\t\tvar doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables\n\n\t\tif (options && options.autoTable) {\n\t\t\tif (typeof options.autoTable === \"function\") {\n\t\t\t\tautoTableParams = options.autoTable(doc) || {};\n\t\t\t} else {\n\t\t\t\tautoTableParams = options.autoTable;\n\t\t\t}\n\t\t}\n\n\t\tif (title) {\n\t\t\tautoTableParams.addPageContent = function (data) {\n\t\t\t\tdoc.text(title, 40, 30);\n\t\t\t};\n\t\t}\n\n\t\tautoTableParams.head = header;\n\t\tautoTableParams.body = body;\n\n\t\tdoc.autoTable(autoTableParams);\n\n\t\tif (options && options.documentProcessing) {\n\t\t\toptions.documentProcessing(doc);\n\t\t}\n\n\t\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\n\t},\n\n\txlsx: function xlsx(list, options, setFileContents) {\n\t\tvar self = this,\n\t\t sheetName = options.sheetName || \"Sheet1\",\n\t\t workbook = XLSX.utils.book_new(),\n\t\t output;\n\n\t\tworkbook.SheetNames = [];\n\t\tworkbook.Sheets = {};\n\n\t\tfunction generateSheet() {\n\t\t\tvar rows = [],\n\t\t\t merges = [],\n\t\t\t worksheet = {},\n\t\t\t range = { s: { c: 0, r: 0 }, e: { c: list[0] ? list[0].columns.reduce(function (a, b) {\n\t\t\t\t\t\treturn a + (b && b.width ? b.width : 1);\n\t\t\t\t\t}, 0) : 0, r: list.length } };\n\n\t\t\t//parse row list\n\t\t\tlist.forEach(function (row, i) {\n\t\t\t\tvar rowData = [];\n\n\t\t\t\trow.columns.forEach(function (col, j) {\n\n\t\t\t\t\tif (col) {\n\t\t\t\t\t\trowData.push(!(col.value instanceof Date) && _typeof(col.value) === \"object\" ? JSON.stringify(col.value) : col.value);\n\n\t\t\t\t\t\tif (col.width > 1 || col.height > -1) {\n\t\t\t\t\t\t\tmerges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } });\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\trowData.push(\"\");\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trows.push(rowData);\n\t\t\t});\n\n\t\t\t//convert rows to worksheet\n\t\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\n\n\t\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\n\n\t\t\tif (merges.length) {\n\t\t\t\tworksheet[\"!merges\"] = merges;\n\t\t\t}\n\n\t\t\treturn worksheet;\n\t\t}\n\n\t\tif (options.sheetOnly) {\n\t\t\tsetFileContents(generateSheet());\n\t\t\treturn;\n\t\t}\n\n\t\tif (options.sheets) {\n\t\t\tfor (var sheet in options.sheets) {\n\n\t\t\t\tif (options.sheets[sheet] === true) {\n\t\t\t\t\tworkbook.SheetNames.push(sheet);\n\t\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\n\t\t\t\t} else {\n\n\t\t\t\t\tworkbook.SheetNames.push(sheet);\n\n\t\t\t\t\tthis.modules.comms.send(options.sheets[sheet], \"download\", \"intercept\", {\n\t\t\t\t\t\ttype: \"xlsx\",\n\t\t\t\t\t\toptions: { sheetOnly: true },\n\t\t\t\t\t\tactive: self.active,\n\t\t\t\t\t\tintercept: function intercept(data) {\n\t\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tworkbook.SheetNames.push(sheetName);\n\t\t\tworkbook.Sheets[sheetName] = generateSheet();\n\t\t}\n\n\t\tif (options.documentProcessing) {\n\t\t\tworkbook = options.documentProcessing(workbook);\n\t\t}\n\n\t\t//convert workbook to binary array\n\t\tfunction s2ab(s) {\n\t\t\tvar buf = new ArrayBuffer(s.length);\n\t\t\tvar view = new Uint8Array(buf);\n\t\t\tfor (var i = 0; i != s.length; ++i) {\n\t\t\t\tview[i] = s.charCodeAt(i) & 0xFF;\n\t\t\t}return buf;\n\t\t}\n\n\t\toutput = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' });\n\n\t\tsetFileContents(s2ab(output), \"application/octet-stream\");\n\t},\n\n\thtml: function html(list, options, setFileContents) {\n\t\tif (this.modExists(\"export\", true)) {\n\t\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\n\t\t}\n\t}\n\n};\n\nTabulator.prototype.registerModule(\"download\", Download);\n\nvar Edit = function Edit(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.currentCell = false; //hold currently editing cell\n\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\n\tthis.recursionBlock = false; //prevent focus recursion\n\tthis.invalidEdit = false;\n\tthis.editedCells = [];\n};\n\n//initialize column editor\nEdit.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t config = {\n\t\teditor: false,\n\t\tblocked: false,\n\t\tcheck: column.definition.editable,\n\t\tparams: column.definition.editorParams || {}\n\t};\n\n\t//set column editor\n\tswitch (_typeof(column.definition.editor)) {\n\t\tcase \"string\":\n\n\t\t\tif (column.definition.editor === \"tick\") {\n\t\t\t\tcolumn.definition.editor = \"tickCross\";\n\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor\");\n\t\t\t}\n\n\t\t\tif (self.editors[column.definition.editor]) {\n\t\t\t\tconfig.editor = self.editors[column.definition.editor];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tconfig.editor = column.definition.editor;\n\t\t\tbreak;\n\n\t\tcase \"boolean\":\n\n\t\t\tif (column.definition.editor === true) {\n\n\t\t\t\tif (typeof column.definition.formatter !== \"function\") {\n\n\t\t\t\t\tif (column.definition.formatter === \"tick\") {\n\t\t\t\t\t\tcolumn.definition.formatter = \"tickCross\";\n\t\t\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (self.editors[column.definition.formatter]) {\n\t\t\t\t\t\tconfig.editor = self.editors[column.definition.formatter];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconfig.editor = self.editors[\"input\"];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\tif (config.editor) {\n\t\tcolumn.modules.edit = config;\n\t}\n};\n\nEdit.prototype.getCurrentCell = function () {\n\treturn this.currentCell ? this.currentCell.getComponent() : false;\n};\n\nEdit.prototype.clearEditor = function (cancel) {\n\tvar cell = this.currentCell,\n\t cellEl;\n\n\tthis.invalidEdit = false;\n\n\tif (cell) {\n\t\tthis.currentCell = false;\n\n\t\tcellEl = cell.getElement();\n\n\t\tif (cancel) {\n\t\t\tcell.validate();\n\t\t} else {\n\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\n\t\t}\n\n\t\tcellEl.classList.remove(\"tabulator-editing\");\n\t\twhile (cellEl.firstChild) {\n\t\t\tcellEl.removeChild(cellEl.firstChild);\n\t\t}cell.row.getElement().classList.remove(\"tabulator-row-editing\");\n\t}\n};\n\nEdit.prototype.cancelEdit = function () {\n\n\tif (this.currentCell) {\n\t\tvar cell = this.currentCell;\n\t\tvar component = this.currentCell.getComponent();\n\n\t\tthis.clearEditor(true);\n\t\tcell.setValueActual(cell.getValue());\n\t\tcell.cellRendered();\n\n\t\tif (cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight) {\n\t\t\tcell.row.normalizeHeight(true);\n\t\t}\n\n\t\tif (cell.column.cellEvents.cellEditCancelled) {\n\t\t\tcell.column.cellEvents.cellEditCancelled.call(this.table, component);\n\t\t}\n\n\t\tthis.table.options.cellEditCancelled.call(this.table, component);\n\t}\n};\n\n//return a formatted value for a cell\nEdit.prototype.bindEditor = function (cell) {\n\tvar self = this,\n\t element = cell.getElement(true);\n\n\telement.setAttribute(\"tabindex\", 0);\n\n\telement.addEventListener(\"click\", function (e) {\n\t\tif (!element.classList.contains(\"tabulator-editing\")) {\n\t\t\telement.focus({ preventScroll: true });\n\t\t}\n\t});\n\n\telement.addEventListener(\"mousedown\", function (e) {\n\t\tif (e.button === 2) {\n\t\t\te.preventDefault();\n\t\t} else {\n\t\t\tself.mouseClick = true;\n\t\t}\n\t});\n\n\telement.addEventListener(\"focus\", function (e) {\n\t\tif (!self.recursionBlock) {\n\t\t\tself.edit(cell, e, false);\n\t\t}\n\t});\n};\n\nEdit.prototype.focusCellNoEvent = function (cell, block) {\n\tthis.recursionBlock = true;\n\tif (!(block && this.table.browser === \"ie\")) {\n\t\tcell.getElement().focus({ preventScroll: true });\n\t}\n\tthis.recursionBlock = false;\n};\n\nEdit.prototype.editCell = function (cell, forceEdit) {\n\tthis.focusCellNoEvent(cell);\n\tthis.edit(cell, false, forceEdit);\n};\n\nEdit.prototype.focusScrollAdjust = function (cell) {\n\tif (this.table.rowManager.getRenderMode() == \"virtual\") {\n\t\tvar topEdge = this.table.rowManager.element.scrollTop,\n\t\t bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\n\t\t rowEl = cell.row.getElement(),\n\t\t offset = rowEl.offsetTop;\n\n\t\tif (rowEl.offsetTop < topEdge) {\n\t\t\tthis.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop;\n\t\t} else {\n\t\t\tif (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) {\n\t\t\t\tthis.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge;\n\t\t\t}\n\t\t}\n\n\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\n\t\t rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\n\t\t cellEl = cell.getElement(),\n\t\t offset = cellEl.offsetLeft;\n\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\n\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\n\t\t}\n\n\t\tif (this.table.options.virtualDomHoz) {\n\t\t\tleftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\n\t\t\trightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\n\t\t}\n\n\t\tif (cellEl.offsetLeft < leftEdge) {\n\n\t\t\tthis.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft;\n\t\t} else {\n\t\t\tif (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) {\n\t\t\t\tthis.table.rowManager.element.scrollLeft += cellEl.offsetLeft + cellEl.offsetWidth - rightEdge;\n\t\t\t}\n\t\t}\n\t}\n};\n\nEdit.prototype.edit = function (cell, e, forceEdit) {\n\tvar self = this,\n\t allowEdit = true,\n\t rendered = function rendered() {},\n\t element = cell.getElement(),\n\t cellEditor,\n\t component,\n\t params;\n\n\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\tif (this.currentCell) {\n\t\tif (!this.invalidEdit) {\n\t\t\tthis.cancelEdit();\n\t\t}\n\t\treturn;\n\t}\n\n\t//handle successfull value change\n\tfunction success(value) {\n\t\tif (self.currentCell === cell) {\n\t\t\tvar valid = true;\n\n\t\t\tif (cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\") {\n\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\n\t\t\t}\n\n\t\t\tif (valid === true || self.table.options.validationMode === \"highlight\") {\n\t\t\t\tself.clearEditor();\n\n\t\t\t\tif (!cell.modules.edit) {\n\t\t\t\t\tcell.modules.edit = {};\n\t\t\t\t}\n\n\t\t\t\tcell.modules.edit.edited = true;\n\n\t\t\t\tif (self.editedCells.indexOf(cell) == -1) {\n\t\t\t\t\tself.editedCells.push(cell);\n\t\t\t\t}\n\n\t\t\t\tcell.setValue(value, true);\n\n\t\t\t\tif (self.table.options.dataTree && self.table.modExists(\"dataTree\")) {\n\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\n\t\t\t\t}\n\n\t\t\t\tif (valid !== true) {\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\n\t\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tself.invalidEdit = true;\n\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\n\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\trendered();\n\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\n\t\t}\n\t}\n\n\t//handle aborted edit\n\tfunction cancel() {\n\t\tif (self.currentCell === cell) {\n\t\t\tself.cancelEdit();\n\n\t\t\tif (self.table.options.dataTree && self.table.modExists(\"dataTree\")) {\n\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\n\t\t\t}\n\t\t} else {\n\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\n\t\t}\n\t}\n\n\tfunction onRendered(callback) {\n\t\trendered = callback;\n\t}\n\n\tif (!cell.column.modules.edit.blocked) {\n\t\tif (e) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\tswitch (_typeof(cell.column.modules.edit.check)) {\n\t\t\tcase \"function\":\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\tbreak;\n\n\t\t\tcase \"boolean\":\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (allowEdit || forceEdit) {\n\n\t\t\tself.cancelEdit();\n\n\t\t\tself.currentCell = cell;\n\n\t\t\tthis.focusScrollAdjust(cell);\n\n\t\t\tcomponent = cell.getComponent();\n\n\t\t\tif (this.mouseClick) {\n\t\t\t\tthis.mouseClick = false;\n\n\t\t\t\tif (cell.column.cellEvents.cellClick) {\n\t\t\t\t\tcell.column.cellEvents.cellClick.call(this.table, e, component);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cell.column.cellEvents.cellEditing) {\n\t\t\t\tcell.column.cellEvents.cellEditing.call(this.table, component);\n\t\t\t}\n\n\t\t\tself.table.options.cellEditing.call(this.table, component);\n\n\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\n\n\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\n\n\t\t\t//if editor returned, add to DOM, if false, abort edit\n\t\t\tif (cellEditor !== false) {\n\n\t\t\t\tif (cellEditor instanceof Node) {\n\t\t\t\t\telement.classList.add(\"tabulator-editing\");\n\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\n\t\t\t\t\twhile (element.firstChild) {\n\t\t\t\t\t\telement.removeChild(element.firstChild);\n\t\t\t\t\t}element.appendChild(cellEditor);\n\n\t\t\t\t\t//trigger onRendered Callback\n\t\t\t\t\trendered();\n\n\t\t\t\t\t//prevent editing from triggering rowClick event\n\t\t\t\t\tvar children = element.children;\n\n\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function (e) {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\n\t\t\t\t\telement.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telement.blur();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.mouseClick = false;\n\t\t\telement.blur();\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tthis.mouseClick = false;\n\t\telement.blur();\n\t\treturn false;\n\t}\n};\n\nEdit.prototype.maskInput = function (el, options) {\n\tvar mask = options.mask,\n\t maskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\n\t maskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\n\t maskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\n\t success = false;\n\n\tfunction fillSymbols(index) {\n\t\tvar symbol = mask[index];\n\t\tif (typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) {\n\t\t\tel.value = el.value + \"\" + symbol;\n\t\t\tfillSymbols(index + 1);\n\t\t}\n\t}\n\n\tel.addEventListener(\"keydown\", function (e) {\n\t\tvar index = el.value.length,\n\t\t char = e.key;\n\n\t\tif (e.keyCode > 46) {\n\t\t\tif (index >= mask.length) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\tsuccess = false;\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tswitch (mask[index]) {\n\t\t\t\t\tcase maskLetter:\n\t\t\t\t\t\tif (char.toUpperCase() == char.toLowerCase()) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskNumber:\n\t\t\t\t\t\tif (isNaN(char)) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskWildcard:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (char !== mask[index]) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsuccess = true;\n\t\t}\n\n\t\treturn;\n\t});\n\n\tel.addEventListener(\"keyup\", function (e) {\n\t\tif (e.keyCode > 46) {\n\t\t\tif (options.maskAutoFill) {\n\t\t\t\tfillSymbols(el.value.length);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (!el.placeholder) {\n\t\tel.placeholder = mask;\n\t}\n\n\tif (options.maskAutoFill) {\n\t\tfillSymbols(el.value.length);\n\t}\n};\n\nEdit.prototype.getEditedCells = function () {\n\tvar output = [];\n\n\tthis.editedCells.forEach(function (cell) {\n\t\toutput.push(cell.getComponent());\n\t});\n\n\treturn output;\n};\n\nEdit.prototype.clearEdited = function (cell) {\n\tvar editIndex;\n\n\tif (cell.modules.edit && cell.modules.edit.edited) {\n\t\tcell.modules.edit.edited = false;\n\n\t\tif (cell.modules.validate) {\n\t\t\tcell.modules.validate.invalid = false;\n\t\t}\n\t}\n\n\teditIndex = this.editedCells.indexOf(cell);\n\n\tif (editIndex > -1) {\n\t\tthis.editedCells.splice(editIndex, 1);\n\t}\n};\n\n//default data editors\nEdit.prototype.editors = {\n\n\t//input element\n\tinput: function input(cell, onRendered, success, cancel, editorParams) {\n\n\t\t//create and style input\n\t\tvar cellValue = cell.getValue(),\n\t\t input = document.createElement(\"input\");\n\n\t\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\n\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\n\t\tonRendered(function () {\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\t\t});\n\n\t\tfunction onChange(e) {\n\t\t\tif ((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\" || input.value !== cellValue) {\n\t\t\t\tif (success(input.value)) {\n\t\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur or change\n\t\tinput.addEventListener(\"change\", onChange);\n\t\tinput.addEventListener(\"blur\", onChange);\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\t// case 9:\n\t\t\t\tcase 13:\n\t\t\t\t\tonChange(e);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\treturn input;\n\t},\n\n\t//resizable text area element\n\ttextarea: function textarea(cell, onRendered, success, cancel, editorParams) {\n\t\tvar self = this,\n\t\t cellValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"hybrid\",\n\t\t value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\n\t\t count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\n\t\t input = document.createElement(\"textarea\"),\n\t\t scrollHeight = 0;\n\n\t\t//create and style input\n\t\tinput.style.display = \"block\";\n\t\tinput.style.padding = \"2px\";\n\t\tinput.style.height = \"100%\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\tinput.style.whiteSpace = \"pre-wrap\";\n\t\tinput.style.resize = \"none\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = value;\n\n\t\tonRendered(function () {\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tinput.scrollHeight;\n\t\t\tinput.style.height = input.scrollHeight + \"px\";\n\t\t\tcell.getRow().normalizeHeight();\n\t\t});\n\n\t\tfunction onChange(e) {\n\n\t\t\tif ((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\" || input.value !== cellValue) {\n\n\t\t\t\tif (success(input.value)) {\n\t\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t\t}, 300);\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur or change\n\t\tinput.addEventListener(\"change\", onChange);\n\t\tinput.addEventListener(\"blur\", onChange);\n\n\t\tinput.addEventListener(\"keyup\", function () {\n\n\t\t\tinput.style.height = \"\";\n\n\t\t\tvar heightNow = input.scrollHeight;\n\n\t\t\tinput.style.height = heightNow + \"px\";\n\n\t\t\tif (heightNow != scrollHeight) {\n\t\t\t\tscrollHeight = heightNow;\n\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 38:\n\t\t\t\t\t//up arrow\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && input.selectionStart) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && input.selectionStart !== input.value.length) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\treturn input;\n\t},\n\n\t//input element with type of number\n\tnumber: function number(cell, onRendered, success, cancel, editorParams) {\n\n\t\tvar cellValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t input = document.createElement(\"input\");\n\n\t\tinput.setAttribute(\"type\", \"number\");\n\n\t\tif (typeof editorParams.max != \"undefined\") {\n\t\t\tinput.setAttribute(\"max\", editorParams.max);\n\t\t}\n\n\t\tif (typeof editorParams.min != \"undefined\") {\n\t\t\tinput.setAttribute(\"min\", editorParams.min);\n\t\t}\n\n\t\tif (typeof editorParams.step != \"undefined\") {\n\t\t\tinput.setAttribute(\"step\", editorParams.step);\n\t\t}\n\n\t\t//create and style input\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = cellValue;\n\n\t\tvar blurFunc = function blurFunc(e) {\n\t\t\tonChange();\n\t\t};\n\n\t\tonRendered(function () {\n\t\t\t//submit new value on blur\n\t\t\tinput.removeEventListener(\"blur\", blurFunc);\n\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\t//submit new value on blur\n\t\t\tinput.addEventListener(\"blur\", blurFunc);\n\t\t});\n\n\t\tfunction onChange() {\n\t\t\tvar value = input.value;\n\n\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\tvalue = Number(value);\n\t\t\t}\n\n\t\t\tif (value !== cellValue) {\n\t\t\t\tif (success(value)) {\n\t\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 13:\n\t\t\t\t\t// case 9:\n\t\t\t\t\tonChange();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 38: //up arrow\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\t\t\t\t\tif (vertNav == \"editor\") {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\treturn input;\n\t},\n\n\t//input element with type of number\n\trange: function range(cell, onRendered, success, cancel, editorParams) {\n\n\t\tvar cellValue = cell.getValue(),\n\t\t input = document.createElement(\"input\");\n\n\t\tinput.setAttribute(\"type\", \"range\");\n\n\t\tif (typeof editorParams.max != \"undefined\") {\n\t\t\tinput.setAttribute(\"max\", editorParams.max);\n\t\t}\n\n\t\tif (typeof editorParams.min != \"undefined\") {\n\t\t\tinput.setAttribute(\"min\", editorParams.min);\n\t\t}\n\n\t\tif (typeof editorParams.step != \"undefined\") {\n\t\t\tinput.setAttribute(\"step\", editorParams.step);\n\t\t}\n\n\t\t//create and style input\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = cellValue;\n\n\t\tonRendered(function () {\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\t\t});\n\n\t\tfunction onChange() {\n\t\t\tvar value = input.value;\n\n\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\tvalue = Number(value);\n\t\t\t}\n\n\t\t\tif (value != cellValue) {\n\t\t\t\tif (success(value)) {\n\t\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tonChange();\n\t\t});\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 13:\n\t\t\t\t\t// case 9:\n\t\t\t\t\tonChange();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\treturn input;\n\t},\n\n\t//select\n\tselect: function select(cell, onRendered, success, cancel, editorParams) {\n\t\tvar _this53 = this;\n\n\t\tvar self = this,\n\t\t cellEl = cell.getElement(),\n\t\t initialValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t initialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? Array.isArray(initialValue) ? initialValue : [initialValue] : typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : [],\n\t\t input = document.createElement(\"input\"),\n\t\t listEl = document.createElement(\"div\"),\n\t\t multiselect = editorParams.multiselect,\n\t\t dataItems = [],\n\t\t currentItem = {},\n\t\t displayItems = [],\n\t\t currentItems = [],\n\t\t blurable = true,\n\t\t blockListShow = false,\n\t\t searchWord = \"\",\n\t\t searchWordTimeout = null;\n\n\t\tif (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === 'undefined' ? 'undefined' : _typeof(editorParams)) === \"object\" && !editorParams.values) {\n\t\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\n\t\t\teditorParams = { values: editorParams };\n\t\t}\n\n\t\tfunction getUniqueColumnValues(field) {\n\t\t\tvar output = {},\n\t\t\t data = self.table.getData(),\n\t\t\t column;\n\n\t\t\tif (field) {\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\n\t\t\t} else {\n\t\t\t\tcolumn = cell.getColumn()._getSelf();\n\t\t\t}\n\n\t\t\tif (column) {\n\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\tvar val = column.getFieldValue(row);\n\n\t\t\t\t\tif (val !== null && typeof val !== \"undefined\" && val !== \"\") {\n\t\t\t\t\t\toutput[val] = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\n\t\t\t}\n\n\t\t\treturn Object.keys(output);\n\t\t}\n\n\t\tfunction parseItems(inputValues, curentValues) {\n\t\t\tvar dataList = [];\n\t\t\tvar displayList = [];\n\n\t\t\tfunction processComplexListItem(item) {\n\t\t\t\tvar item = {\n\t\t\t\t\tlabel: item.label,\n\t\t\t\t\tvalue: item.value,\n\t\t\t\t\titemParams: item.itemParams,\n\t\t\t\t\telementAttributes: item.elementAttributes,\n\t\t\t\t\telement: false\n\t\t\t\t};\n\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\n\t\t\t\t// \tsetCurrentItem(item);\n\t\t\t\t// }\n\n\t\t\t\tif (curentValues.indexOf(item.value) > -1) {\n\t\t\t\t\tsetItem(item);\n\t\t\t\t}\n\n\t\t\t\tdataList.push(item);\n\t\t\t\tdisplayList.push(item);\n\n\t\t\t\treturn item;\n\t\t\t}\n\n\t\t\tif (typeof inputValues == \"function\") {\n\t\t\t\tinputValues = inputValues(cell);\n\t\t\t}\n\n\t\t\tif (Array.isArray(inputValues)) {\n\t\t\t\tinputValues.forEach(function (value) {\n\t\t\t\t\tvar item;\n\n\t\t\t\t\tif ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === \"object\") {\n\n\t\t\t\t\t\tif (value.options) {\n\t\t\t\t\t\t\titem = {\n\t\t\t\t\t\t\t\tlabel: value.label,\n\t\t\t\t\t\t\t\tgroup: true,\n\t\t\t\t\t\t\t\titemParams: value.itemParams,\n\t\t\t\t\t\t\t\telementAttributes: value.elementAttributes,\n\t\t\t\t\t\t\t\telement: false\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tdisplayList.push(item);\n\n\t\t\t\t\t\t\tvalue.options.forEach(function (item) {\n\t\t\t\t\t\t\t\tprocessComplexListItem(item);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprocessComplexListItem(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\titem = {\n\t\t\t\t\t\t\tlabel: value,\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\telement: false\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\n\t\t\t\t\t\t// \tsetCurrentItem(item);\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tif (curentValues.indexOf(item.value) > -1) {\n\t\t\t\t\t\t\tsetItem(item);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdataList.push(item);\n\t\t\t\t\t\tdisplayList.push(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tfor (var key in inputValues) {\n\t\t\t\t\tvar item = {\n\t\t\t\t\t\tlabel: inputValues[key],\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\telement: false\n\t\t\t\t\t};\n\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\n\t\t\t\t\t// \tsetCurrentItem(item);\n\t\t\t\t\t// }\n\n\t\t\t\t\tif (curentValues.indexOf(item.value) > -1) {\n\t\t\t\t\t\tsetItem(item);\n\t\t\t\t\t}\n\n\t\t\t\t\tdataList.push(item);\n\t\t\t\t\tdisplayList.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (editorParams.sortValuesList) {\n\t\t\t\tdataList.sort(function (a, b) {\n\t\t\t\t\treturn a.label < b.label ? -1 : a.label > b.label ? 1 : 0;\n\t\t\t\t});\n\n\t\t\t\tdisplayList.sort(function (a, b) {\n\t\t\t\t\treturn a.label < b.label ? -1 : a.label > b.label ? 1 : 0;\n\t\t\t\t});\n\n\t\t\t\tif (editorParams.sortValuesList !== \"asc\") {\n\t\t\t\t\tdataList.reverse();\n\t\t\t\t\tdisplayList.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdataItems = dataList;\n\t\t\tdisplayItems = displayList;\n\n\t\t\tfillList();\n\t\t}\n\n\t\tfunction fillList() {\n\t\t\twhile (listEl.firstChild) {\n\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t}displayItems.forEach(function (item) {\n\n\t\t\t\tvar el = item.element;\n\n\t\t\t\tif (!el) {\n\t\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\n\t\t\t\t\tif (item.group) {\n\t\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\n\t\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\n\t\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\n\n\t\t\t\t\t\tel.addEventListener(\"click\", function () {\n\t\t\t\t\t\t\tblockListShow = true;\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tblockListShow = false;\n\t\t\t\t\t\t\t}, 10);\n\n\t\t\t\t\t\t\t// setCurrentItem(item);\n\t\t\t\t\t\t\t// chooseItem();\n\t\t\t\t\t\t\tif (multiselect) {\n\t\t\t\t\t\t\t\ttoggleItem(item);\n\t\t\t\t\t\t\t\tinput.focus();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tchooseItem(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// if(item === currentItem){\n\t\t\t\t\t\t// \tel.classList.add(\"active\");\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tif (currentItems.indexOf(item) > -1) {\n\t\t\t\t\t\t\tel.classList.add(\"active\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (item.elementAttributes && _typeof(item.elementAttributes) == \"object\") {\n\t\t\t\t\t\tfor (var key in item.elementAttributes) {\n\t\t\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tel.addEventListener(\"mousedown\", function () {\n\t\t\t\t\t\tblurable = false;\n\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t});\n\n\t\t\t\t\titem.element = el;\n\t\t\t\t}\n\n\t\t\t\tlistEl.appendChild(el);\n\t\t\t});\n\t\t}\n\n\t\tfunction setCurrentItem(item, active) {\n\n\t\t\tif (!multiselect && currentItem && currentItem.element) {\n\t\t\t\tcurrentItem.element.classList.remove(\"active\");\n\t\t\t}\n\n\t\t\tif (currentItem && currentItem.element) {\n\t\t\t\tcurrentItem.element.classList.remove(\"focused\");\n\t\t\t}\n\n\t\t\tcurrentItem = item;\n\n\t\t\tif (item.element) {\n\t\t\t\titem.element.classList.add(\"focused\");\n\t\t\t\tif (active) {\n\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (item && item.element && item.element.scrollIntoView) {\n\t\t\t\titem.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });\n\t\t\t}\n\t\t}\n\n\t\t// function chooseItem(){\n\t\t// \thideList();\n\n\t\t// \tif(initialValue !== currentItem.value){\n\t\t// \t\tinitialValue = currentItem.value;\n\t\t// \t\tsuccess(currentItem.value);\n\t\t// \t}else{\n\t\t// \t\tcancel();\n\t\t// \t}\n\t\t// }\n\n\t\tfunction setItem(item) {\n\t\t\tvar index = currentItems.indexOf(item);\n\n\t\t\tif (index == -1) {\n\t\t\t\tcurrentItems.push(item);\n\t\t\t\tsetCurrentItem(item, true);\n\t\t\t}\n\n\t\t\tfillInput();\n\t\t}\n\n\t\tfunction unsetItem(index) {\n\t\t\tvar item = currentItems[index];\n\n\t\t\tif (index > -1) {\n\t\t\t\tcurrentItems.splice(index, 1);\n\t\t\t\tif (item.element) {\n\t\t\t\t\titem.element.classList.remove(\"active\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction toggleItem(item) {\n\t\t\tif (!item) {\n\t\t\t\titem = currentItem;\n\t\t\t}\n\n\t\t\tvar index = currentItems.indexOf(item);\n\n\t\t\tif (index > -1) {\n\t\t\t\tunsetItem(index);\n\t\t\t} else {\n\t\t\t\tif (multiselect !== true && currentItems.length >= multiselect) {\n\t\t\t\t\tunsetItem(0);\n\t\t\t\t}\n\n\t\t\t\tsetItem(item);\n\t\t\t}\n\n\t\t\tfillInput();\n\t\t}\n\n\t\tfunction chooseItem(item) {\n\t\t\thideList();\n\n\t\t\tif (!item) {\n\t\t\t\titem = currentItem;\n\t\t\t}\n\n\t\t\tif (item) {\n\t\t\t\tinput.value = item.label;\n\t\t\t\tsuccess(item.value);\n\t\t\t}\n\n\t\t\tinitialDisplayValue = [item.value];\n\t\t}\n\n\t\tfunction chooseItems(silent) {\n\t\t\tif (!silent) {\n\t\t\t\thideList();\n\t\t\t}\n\n\t\t\tvar output = [];\n\n\t\t\tcurrentItems.forEach(function (item) {\n\t\t\t\toutput.push(item.value);\n\t\t\t});\n\n\t\t\tinitialDisplayValue = output;\n\n\t\t\tsuccess(output);\n\t\t}\n\n\t\tfunction fillInput() {\n\t\t\tvar output = [];\n\n\t\t\tcurrentItems.forEach(function (item) {\n\t\t\t\toutput.push(item.label);\n\t\t\t});\n\n\t\t\tinput.value = output.join(\", \");\n\n\t\t\tif (self.currentCell === false) {\n\t\t\t\tchooseItems(true);\n\t\t\t}\n\t\t}\n\n\t\tfunction unsetItems() {\n\n\t\t\tvar len = currentItems.length;\n\n\t\t\tfor (var _i9 = 0; _i9 < len; _i9++) {\n\t\t\t\tunsetItem(0);\n\t\t\t}\n\t\t}\n\n\t\tfunction cancelItem() {\n\t\t\thideList();\n\t\t\tcancel();\n\t\t}\n\n\t\tfunction showList() {\n\t\t\tcurrentItems = [];\n\n\t\t\tif (!listEl.parentNode) {\n\t\t\t\tif (editorParams.values === true) {\n\t\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\n\t\t\t\t} else if (typeof editorParams.values === \"string\") {\n\t\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\n\t\t\t\t} else {\n\t\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\n\t\t\t\t}\n\n\t\t\t\tvar offset = Tabulator.prototype.helpers.elOffset(cellEl);\n\n\t\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\n\n\t\t\t\tlistEl.style.top = offset.top + cellEl.offsetHeight + \"px\";\n\t\t\t\tlistEl.style.left = offset.left + \"px\";\n\n\t\t\t\tlistEl.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\tblurable = false;\n\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t}, 10);\n\t\t\t\t});\n\n\t\t\t\tdocument.body.appendChild(listEl);\n\t\t\t}\n\t\t}\n\n\t\tfunction hideList() {\n\t\t\tif (listEl.parentNode) {\n\t\t\t\tlistEl.parentNode.removeChild(listEl);\n\t\t\t}\n\n\t\t\tremoveScrollListener();\n\t\t}\n\n\t\tfunction removeScrollListener() {\n\t\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\n\t\t}\n\n\t\tfunction scrollTovalue(char) {\n\n\t\t\tclearTimeout(searchWordTimeout);\n\n\t\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\n\t\t\tsearchWord += character.toLowerCase();\n\n\t\t\tvar match = dataItems.find(function (item) {\n\t\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\n\t\t\t});\n\n\t\t\tif (match) {\n\t\t\t\tsetCurrentItem(match, !multiselect);\n\t\t\t}\n\n\t\t\tsearchWordTimeout = setTimeout(function () {\n\t\t\t\tsearchWord = \"\";\n\t\t\t}, 800);\n\t\t}\n\n\t\t//style input\n\t\tinput.setAttribute(\"type\", \"text\");\n\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\tinput.style.cursor = \"default\";\n\t\tinput.readOnly = this.currentCell != false;\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\n\n\t\t// if(editorParams.values === true){\n\t\t// \tparseItems(getUniqueColumnValues(), initialValue);\n\t\t// }else if(typeof editorParams.values === \"string\"){\n\t\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\n\t\t// }else{\n\t\t// \tparseItems(editorParams.values || [], initialValue);\n\t\t// }\n\n\t\tinput.addEventListener(\"search\", function (e) {\n\t\t\tif (!input.value) {\n\t\t\t\tunsetItems();\n\t\t\t\tchooseItems();\n\t\t\t}\n\t\t});\n\n\t\t//allow key based navigation\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tvar index;\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 38:\n\t\t\t\t\t//up arrow\n\t\t\t\t\tindex = dataItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\t\t\t\t\tindex = dataItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index < dataItems.length - 1) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index < dataItems.length - 1) {\n\t\t\t\t\t\t\tif (index == -1) {\n\t\t\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37: //left arrow\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\t// chooseItem();\n\n\t\t\t\t\tif (multiselect) {\n\t\t\t\t\t\ttoggleItem();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchooseItem();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancelItem();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 9:\n\t\t\t\t\t//tab\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (self.currentCell === false) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (e.keyCode >= 38 && e.keyCode <= 90) {\n\t\t\t\t\t\tscrollTovalue(e.keyCode);\n\t\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tif (blurable) {\n\t\t\t\tif (multiselect) {\n\t\t\t\t\tchooseItems();\n\t\t\t\t} else {\n\t\t\t\t\tcancelItem();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"focus\", function (e) {\n\t\t\tif (!blockListShow) {\n\t\t\t\tshowList();\n\t\t\t}\n\t\t});\n\n\t\t//style list element\n\t\tlistEl = document.createElement(\"div\");\n\t\tlistEl.classList.add(\"tabulator-edit-select-list\");\n\n\t\tonRendered(function () {\n\t\t\tinput.style.height = \"100%\";\n\t\t\tinput.focus({ preventScroll: true });\n\t\t});\n\n\t\tsetTimeout(function () {\n\t\t\t_this53.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\n\t\t}, 10);\n\n\t\treturn input;\n\t},\n\n\t//autocomplete\n\tautocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) {\n\t\tvar _this54 = this;\n\n\t\tvar self = this,\n\t\t cellEl = cell.getElement(),\n\t\t initialValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t initialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\",\n\t\t input = document.createElement(\"input\"),\n\t\t listEl = document.createElement(\"div\"),\n\t\t allItems = [],\n\t\t displayItems = [],\n\t\t values = [],\n\t\t currentItem = false,\n\t\t blurable = true,\n\t\t uniqueColumnValues = false;\n\n\t\t//style input\n\t\tinput.setAttribute(\"type\", \"search\");\n\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//style list element\n\t\tlistEl.classList.add(\"tabulator-edit-select-list\");\n\n\t\tlistEl.addEventListener(\"mousedown\", function (e) {\n\t\t\tblurable = false;\n\n\t\t\tsetTimeout(function () {\n\t\t\t\tblurable = true;\n\t\t\t}, 10);\n\t\t});\n\n\t\tfunction genUniqueColumnValues() {\n\t\t\tif (editorParams.values === true) {\n\t\t\t\tuniqueColumnValues = getUniqueColumnValues();\n\t\t\t} else if (typeof editorParams.values === \"string\") {\n\t\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\n\t\t\t}\n\t\t}\n\n\t\tfunction getUniqueColumnValues(field) {\n\t\t\tvar output = {},\n\t\t\t data = self.table.getData(),\n\t\t\t column;\n\n\t\t\tif (field) {\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\n\t\t\t} else {\n\t\t\t\tcolumn = cell.getColumn()._getSelf();\n\t\t\t}\n\n\t\t\tif (column) {\n\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\tvar val = column.getFieldValue(row);\n\n\t\t\t\t\tif (val !== null && typeof val !== \"undefined\" && val !== \"\") {\n\t\t\t\t\t\toutput[val] = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (editorParams.sortValuesList) {\n\t\t\t\t\tif (editorParams.sortValuesList == \"asc\") {\n\t\t\t\t\t\toutput = Object.keys(output).sort();\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput = Object.keys(output).sort().reverse();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toutput = Object.keys(output);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\n\t\t\t}\n\n\t\t\treturn output;\n\t\t}\n\n\t\tfunction filterList(term, intialLoad) {\n\t\t\tvar matches = [],\n\t\t\t values,\n\t\t\t items,\n\t\t\t searchEl;\n\n\t\t\t//lookup base values list\n\t\t\tif (uniqueColumnValues) {\n\t\t\t\tvalues = uniqueColumnValues;\n\t\t\t} else {\n\t\t\t\tvalues = editorParams.values || [];\n\t\t\t}\n\n\t\t\tif (editorParams.searchFunc) {\n\t\t\t\tmatches = editorParams.searchFunc(term, values);\n\n\t\t\t\tif (matches instanceof Promise) {\n\n\t\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\n\n\t\t\t\t\tmatches.then(function (result) {\n\t\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\n\t\t\t\t\t}).catch(function (err) {\n\t\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titems = parseItems(values);\n\n\t\t\t\tif (term === \"\") {\n\t\t\t\t\tif (editorParams.showListOnEmpty) {\n\t\t\t\t\t\tmatches = items;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\titems.forEach(function (item) {\n\t\t\t\t\t\tif (item.value !== null || typeof item.value !== \"undefined\") {\n\t\t\t\t\t\t\tif (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1) {\n\t\t\t\t\t\t\t\tmatches.push(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfillListIfNotEmpty(matches, intialLoad);\n\t\t\t}\n\t\t}\n\n\t\tfunction addNotice(notice) {\n\t\t\tvar searchEl = document.createElement(\"div\");\n\n\t\t\tclearList();\n\n\t\t\tif (notice !== false) {\n\t\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\n\t\t\t\tsearchEl.tabIndex = 0;\n\n\t\t\t\tif (notice instanceof Node) {\n\t\t\t\t\tsearchEl.appendChild(notice);\n\t\t\t\t} else {\n\t\t\t\t\tsearchEl.innerHTML = notice;\n\t\t\t\t}\n\n\t\t\t\tlistEl.appendChild(searchEl);\n\t\t\t}\n\t\t}\n\n\t\tfunction parseItems(inputValues) {\n\t\t\tvar itemList = [];\n\n\t\t\tif (Array.isArray(inputValues)) {\n\t\t\t\tinputValues.forEach(function (value) {\n\n\t\t\t\t\tvar item = {};\n\n\t\t\t\t\tif ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === \"object\") {\n\t\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\n\t\t\t\t\t\titem.value = value.value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\n\t\t\t\t\t\titem.value = value;\n\t\t\t\t\t}\n\n\t\t\t\t\titemList.push(item);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tfor (var key in inputValues) {\n\t\t\t\t\tvar item = {\n\t\t\t\t\t\ttitle: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\n\t\t\t\t\t\tvalue: key\n\t\t\t\t\t};\n\n\t\t\t\t\titemList.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn itemList;\n\t\t}\n\n\t\tfunction clearList() {\n\t\t\twhile (listEl.firstChild) {\n\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t}\n\t\t}\n\n\t\tfunction fillListIfNotEmpty(items, intialLoad) {\n\t\t\tif (items.length) {\n\t\t\t\tfillList(items, intialLoad);\n\t\t\t} else {\n\t\t\t\tif (editorParams.emptyPlaceholder) {\n\t\t\t\t\taddNotice(editorParams.emptyPlaceholder);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction fillList(items, intialLoad) {\n\t\t\tvar current = false;\n\n\t\t\tclearList();\n\n\t\t\tdisplayItems = items;\n\n\t\t\tdisplayItems.forEach(function (item) {\n\t\t\t\tvar el = item.element;\n\n\t\t\t\tif (!el) {\n\t\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\n\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\tel.innerHTML = item.title;\n\n\t\t\t\t\tel.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\tsetCurrentItem(item);\n\t\t\t\t\t\tchooseItem();\n\t\t\t\t\t});\n\n\t\t\t\t\tel.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\t\tblurable = false;\n\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t});\n\n\t\t\t\t\titem.element = el;\n\n\t\t\t\t\tif (intialLoad && item.value == initialValue) {\n\t\t\t\t\t\tinput.value = item.title;\n\t\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t\t\tcurrent = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (item === currentItem) {\n\t\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t\t\tcurrent = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlistEl.appendChild(el);\n\t\t\t});\n\n\t\t\tif (!current) {\n\t\t\t\tsetCurrentItem(false);\n\t\t\t}\n\t\t}\n\n\t\tfunction chooseItem() {\n\t\t\thideList();\n\n\t\t\tif (currentItem) {\n\t\t\t\tif (initialValue !== currentItem.value) {\n\t\t\t\t\tinitialValue = currentItem.value;\n\t\t\t\t\tinput.value = currentItem.title;\n\t\t\t\t\tsuccess(currentItem.value);\n\t\t\t\t} else {\n\t\t\t\t\tcancel();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (editorParams.freetext) {\n\t\t\t\t\tinitialValue = input.value;\n\t\t\t\t\tsuccess(input.value);\n\t\t\t\t} else {\n\t\t\t\t\tif (editorParams.allowEmpty && input.value === \"\") {\n\t\t\t\t\t\tinitialValue = input.value;\n\t\t\t\t\t\tsuccess(input.value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcancel();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction showList() {\n\t\t\tif (!listEl.parentNode) {\n\n\t\t\t\tconsole.log(\"show\", initialDisplayValue);\n\t\t\t\twhile (listEl.firstChild) {\n\t\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t\t}var offset = Tabulator.prototype.helpers.elOffset(cellEl);\n\n\t\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\n\n\t\t\t\tlistEl.style.top = offset.top + cellEl.offsetHeight + \"px\";\n\t\t\t\tlistEl.style.left = offset.left + \"px\";\n\t\t\t\tdocument.body.appendChild(listEl);\n\t\t\t}\n\t\t}\n\n\t\tfunction setCurrentItem(item, showInputValue) {\n\t\t\tif (currentItem && currentItem.element) {\n\t\t\t\tcurrentItem.element.classList.remove(\"active\");\n\t\t\t}\n\n\t\t\tcurrentItem = item;\n\n\t\t\tif (item && item.element) {\n\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t}\n\n\t\t\tif (item && item.element && item.element.scrollIntoView) {\n\t\t\t\titem.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });\n\t\t\t}\n\t\t}\n\n\t\tfunction hideList() {\n\t\t\tif (listEl.parentNode) {\n\t\t\t\tlistEl.parentNode.removeChild(listEl);\n\t\t\t}\n\n\t\t\tremoveScrollListener();\n\t\t}\n\n\t\tfunction cancelItem() {\n\t\t\thideList();\n\t\t\tcancel();\n\t\t}\n\n\t\tfunction removeScrollListener() {\n\t\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\n\t\t}\n\n\t\t//allow key based navigation\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tvar index;\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 38:\n\t\t\t\t\t//up arrow\n\t\t\t\t\tindex = displayItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetCurrentItem(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\n\t\t\t\t\tindex = displayItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index < displayItems.length - 1) {\n\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index < displayItems.length - 1) {\n\t\t\t\t\t\t\tif (index == -1) {\n\t\t\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37: //left arrow\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t// e.preventDefault();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\tchooseItem();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancelItem();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 36: //home\n\t\t\t\tcase 35:\n\t\t\t\t\t//end\n\t\t\t\t\t//prevent table navigation while using input element\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"keyup\", function (e) {\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 38: //up arrow\n\t\t\t\tcase 37: //left arrow\n\t\t\t\tcase 39: //up arrow\n\t\t\t\tcase 40: //right arrow\n\t\t\t\tcase 13: //enter\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tfilterList(input.value);\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"search\", function (e) {\n\t\t\tfilterList(input.value);\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tif (blurable) {\n\t\t\t\tchooseItem();\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"focus\", function (e) {\n\t\t\tvar value = initialDisplayValue;\n\t\t\tgenUniqueColumnValues();\n\t\t\tshowList();\n\t\t\tinput.value = value;\n\t\t\tfilterList(value, true);\n\t\t});\n\n\t\tonRendered(function () {\n\t\t\tinput.style.height = \"100%\";\n\t\t\tinput.focus({ preventScroll: true });\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\tsetTimeout(function () {\n\t\t\t_this54.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\n\t\t}, 10);\n\n\t\tgenUniqueColumnValues();\n\t\tinput.value = initialDisplayValue;\n\t\tfilterList(initialDisplayValue, true);\n\n\t\treturn input;\n\t},\n\n\t//star rating\n\tstar: function star(cell, onRendered, success, cancel, editorParams) {\n\t\tvar self = this,\n\t\t element = cell.getElement(),\n\t\t value = cell.getValue(),\n\t\t maxStars = element.getElementsByTagName(\"svg\").length || 5,\n\t\t size = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\n\t\t stars = [],\n\t\t starsHolder = document.createElement(\"div\"),\n\t\t star = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n\n\t\t//change star type\n\t\tfunction starChange(val) {\n\t\t\tstars.forEach(function (star, i) {\n\t\t\t\tif (i < val) {\n\t\t\t\t\tif (self.table.browser == \"ie\") {\n\t\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\n\t\t\t\t\t}\n\n\t\t\t\t\tstar.innerHTML = '<polygon fill=\"#488CE9\" stroke=\"#014AAE\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>';\n\t\t\t\t} else {\n\t\t\t\t\tif (self.table.browser == \"ie\") {\n\t\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\n\t\t\t\t\t}\n\n\t\t\t\t\tstar.innerHTML = '<polygon fill=\"#010155\" stroke=\"#686868\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t//build stars\n\t\tfunction buildStar(i) {\n\n\t\t\tvar starHolder = document.createElement(\"span\");\n\t\t\tvar nextStar = star.cloneNode(true);\n\n\t\t\tstars.push(nextStar);\n\n\t\t\tstarHolder.addEventListener(\"mouseenter\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\tstarChange(i);\n\t\t\t});\n\n\t\t\tstarHolder.addEventListener(\"mousemove\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tstarHolder.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\tsuccess(i);\n\t\t\t\telement.blur();\n\t\t\t});\n\n\t\t\tstarHolder.appendChild(nextStar);\n\t\t\tstarsHolder.appendChild(starHolder);\n\t\t}\n\n\t\t//handle keyboard navigation value change\n\t\tfunction changeValue(val) {\n\t\t\tvalue = val;\n\t\t\tstarChange(val);\n\t\t}\n\n\t\t//style cell\n\t\telement.style.whiteSpace = \"nowrap\";\n\t\telement.style.overflow = \"hidden\";\n\t\telement.style.textOverflow = \"ellipsis\";\n\n\t\t//style holding element\n\t\tstarsHolder.style.verticalAlign = \"middle\";\n\t\tstarsHolder.style.display = \"inline-block\";\n\t\tstarsHolder.style.padding = \"4px\";\n\n\t\t//style star\n\t\tstar.setAttribute(\"width\", size);\n\t\tstar.setAttribute(\"height\", size);\n\t\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\t\tstar.setAttribute(\"xml:space\", \"preserve\");\n\t\tstar.style.padding = \"0 1px\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//create correct number of stars\n\t\tfor (var i = 1; i <= maxStars; i++) {\n\t\t\tbuildStar(i);\n\t\t}\n\n\t\t//ensure value does not exceed number of stars\n\t\tvalue = Math.min(parseInt(value), maxStars);\n\n\t\t// set initial styling of stars\n\t\tstarChange(value);\n\n\t\tstarsHolder.addEventListener(\"mousemove\", function (e) {\n\t\t\tstarChange(0);\n\t\t});\n\n\t\tstarsHolder.addEventListener(\"click\", function (e) {\n\t\t\tsuccess(0);\n\t\t});\n\n\t\telement.addEventListener(\"blur\", function (e) {\n\t\t\tcancel();\n\t\t});\n\n\t\t//allow key based navigation\n\t\telement.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\tchangeValue(value + 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37:\n\t\t\t\t\t//left arrow\n\t\t\t\t\tchangeValue(value - 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\tsuccess(value);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\treturn starsHolder;\n\t},\n\n\t//draggable progress bar\n\tprogress: function progress(cell, onRendered, success, cancel, editorParams) {\n\t\tvar element = cell.getElement(),\n\t\t max = typeof editorParams.max === \"undefined\" ? element.getElementsByTagName(\"div\")[0].getAttribute(\"max\") || 100 : editorParams.max,\n\t\t min = typeof editorParams.min === \"undefined\" ? element.getElementsByTagName(\"div\")[0].getAttribute(\"min\") || 0 : editorParams.min,\n\t\t percent = (max - min) / 100,\n\t\t value = cell.getValue() || 0,\n\t\t handle = document.createElement(\"div\"),\n\t\t bar = document.createElement(\"div\"),\n\t\t mouseDrag,\n\t\t mouseDragWidth;\n\n\t\t//set new value\n\t\tfunction updateValue() {\n\t\t\tvar style = window.getComputedStyle(element, null);\n\n\t\t\tvar calcVal = percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\"))) / 100)) + min;\n\t\t\tsuccess(calcVal);\n\t\t\telement.setAttribute(\"aria-valuenow\", calcVal);\n\t\t\telement.setAttribute(\"aria-label\", value);\n\t\t}\n\n\t\t//style handle\n\t\thandle.style.position = \"absolute\";\n\t\thandle.style.right = \"0\";\n\t\thandle.style.top = \"0\";\n\t\thandle.style.bottom = \"0\";\n\t\thandle.style.width = \"5px\";\n\t\thandle.classList.add(\"tabulator-progress-handle\");\n\n\t\t//style bar\n\t\tbar.style.display = \"inline-block\";\n\t\tbar.style.position = \"relative\";\n\t\t// bar.style.top = \"8px\";\n\t\t// bar.style.bottom = \"8px\";\n\t\t// bar.style.left = \"4px\";\n\t\t// bar.style.marginRight = \"4px\";\n\t\tbar.style.height = \"100%\";\n\t\tbar.style.backgroundColor = \"#488CE9\";\n\t\tbar.style.maxWidth = \"100%\";\n\t\tbar.style.minWidth = \"0%\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//style cell\n\t\telement.style.padding = \"4px 4px\";\n\n\t\t//make sure value is in range\n\t\tvalue = Math.min(parseFloat(value), max);\n\t\tvalue = Math.max(parseFloat(value), min);\n\n\t\t//workout percentage\n\t\tvalue = Math.round((value - min) / percent);\n\t\t// bar.style.right = value + \"%\";\n\t\tbar.style.width = value + \"%\";\n\n\t\telement.setAttribute(\"aria-valuemin\", min);\n\t\telement.setAttribute(\"aria-valuemax\", max);\n\n\t\tbar.appendChild(handle);\n\n\t\thandle.addEventListener(\"mousedown\", function (e) {\n\t\t\tmouseDrag = e.screenX;\n\t\t\tmouseDragWidth = bar.offsetWidth;\n\t\t});\n\n\t\thandle.addEventListener(\"mouseover\", function () {\n\t\t\thandle.style.cursor = \"ew-resize\";\n\t\t});\n\n\t\telement.addEventListener(\"mousemove\", function (e) {\n\t\t\tif (mouseDrag) {\n\t\t\t\tbar.style.width = mouseDragWidth + e.screenX - mouseDrag + \"px\";\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"mouseup\", function (e) {\n\t\t\tif (mouseDrag) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\n\t\t\t\tmouseDrag = false;\n\t\t\t\tmouseDragWidth = false;\n\n\t\t\t\tupdateValue();\n\t\t\t}\n\t\t});\n\n\t\t//allow key based navigation\n\t\telement.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbar.style.width = bar.clientWidth + element.clientWidth / 100 + \"px\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37:\n\t\t\t\t\t//left arrow\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbar.style.width = bar.clientWidth - element.clientWidth / 100 + \"px\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 9: //tab\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\tupdateValue();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"blur\", function () {\n\t\t\tcancel();\n\t\t});\n\n\t\treturn bar;\n\t},\n\n\t//checkbox\n\ttickCross: function tickCross(cell, onRendered, success, cancel, editorParams) {\n\t\tvar value = cell.getValue(),\n\t\t input = document.createElement(\"input\"),\n\t\t tristate = editorParams.tristate,\n\t\t indetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\n\t\t indetermState = false;\n\n\t\tinput.setAttribute(\"type\", \"checkbox\");\n\t\tinput.style.marginTop = \"5px\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = value;\n\n\t\tif (tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")) {\n\t\t\tindetermState = true;\n\t\t\tinput.indeterminate = true;\n\t\t}\n\n\t\tif (this.table.browser != \"firefox\") {\n\t\t\t//prevent blur issue on mac firefox\n\t\t\tonRendered(function () {\n\t\t\t\tinput.focus({ preventScroll: true });\n\t\t\t});\n\t\t}\n\n\t\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\n\n\t\tonRendered(function () {\n\t\t\tinput.focus();\n\t\t});\n\n\t\tfunction setValue(blur) {\n\t\t\tif (tristate) {\n\t\t\t\tif (!blur) {\n\t\t\t\t\tif (input.checked && !indetermState) {\n\t\t\t\t\t\tinput.checked = false;\n\t\t\t\t\t\tinput.indeterminate = true;\n\t\t\t\t\t\tindetermState = true;\n\t\t\t\t\t\treturn indetermValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindetermState = false;\n\t\t\t\t\t\treturn input.checked;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (indetermState) {\n\t\t\t\t\t\treturn indetermValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn input.checked;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn input.checked;\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur\n\t\tinput.addEventListener(\"change\", function (e) {\n\t\t\tsuccess(setValue());\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tsuccess(setValue(true));\n\t\t});\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tif (e.keyCode == 13) {\n\t\t\t\tsuccess(setValue());\n\t\t\t}\n\t\t\tif (e.keyCode == 27) {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t});\n\n\t\treturn input;\n\t}\n};\n\nTabulator.prototype.registerModule(\"edit\", Edit);\n\nvar ExportRow = function ExportRow(type, columns, component, indent) {\n\tthis.type = type;\n\tthis.columns = columns;\n\tthis.component = component || false;\n\tthis.indent = indent || 0;\n};\n\nvar ExportColumn = function ExportColumn(value, component, width, height, depth) {\n\tthis.value = value;\n\tthis.component = component || false;\n\tthis.width = width;\n\tthis.height = height;\n\tthis.depth = depth;\n};\n\nvar Export = function Export(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.config = {};\n\tthis.cloneTableStyle = true;\n\tthis.colVisProp = \"\";\n};\n\nExport.prototype.generateExportList = function (config, style, range, colVisProp) {\n\tthis.cloneTableStyle = style;\n\tthis.config = config || {};\n\tthis.colVisProp = colVisProp;\n\n\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\n\tvar body = this.bodyToExportRows(this.rowLookup(range));\n\n\treturn headers.concat(body);\n};\n\nExport.prototype.genereateTable = function (config, style, range, colVisProp) {\n\tvar list = this.generateExportList(config, style, range, colVisProp);\n\n\treturn this.genereateTableElement(list);\n};\n\nExport.prototype.rowLookup = function (range) {\n\tvar _this55 = this;\n\n\tvar rows = [];\n\n\tif (typeof range == \"function\") {\n\t\trange.call(this.table).forEach(function (row) {\n\t\t\trow = _this55.table.rowManager.findRow(row);\n\n\t\t\tif (row) {\n\t\t\t\trows.push(row);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tswitch (range) {\n\t\t\tcase true:\n\t\t\tcase \"visible\":\n\t\t\t\trows = this.table.rowManager.getVisibleRows(true);\n\t\t\t\tbreak;\n\n\t\t\tcase \"all\":\n\t\t\t\trows = this.table.rowManager.rows;\n\t\t\t\tbreak;\n\n\t\t\tcase \"selected\":\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\t\tbreak;\n\n\t\t\tcase \"active\":\n\t\t\tdefault:\n\t\t\t\tif (this.table.options.pagination) {\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\n\t\t\t\t} else {\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\t}\n\t\t}\n\t}\n\n\treturn Object.assign([], rows);\n};\n\nExport.prototype.generateColumnGroupHeaders = function () {\n\tvar _this56 = this;\n\n\tvar output = [];\n\n\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\n\n\tcolumns.forEach(function (column) {\n\t\tvar colData = _this56.processColumnGroup(column);\n\n\t\tif (colData) {\n\t\t\toutput.push(colData);\n\t\t}\n\t});\n\n\treturn output;\n};\n\nExport.prototype.processColumnGroup = function (column) {\n\tvar _this57 = this;\n\n\tvar subGroups = column.columns,\n\t maxDepth = 0,\n\t title = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\n\n\tvar groupData = {\n\t\ttitle: title,\n\t\tcolumn: column,\n\t\tdepth: 1\n\t};\n\n\tif (subGroups.length) {\n\t\tgroupData.subGroups = [];\n\t\tgroupData.width = 0;\n\n\t\tsubGroups.forEach(function (subGroup) {\n\t\t\tvar subGroupData = _this57.processColumnGroup(subGroup);\n\n\t\t\tif (subGroupData) {\n\t\t\t\tgroupData.width += subGroupData.width;\n\t\t\t\tgroupData.subGroups.push(subGroupData);\n\n\t\t\t\tif (subGroupData.depth > maxDepth) {\n\t\t\t\t\tmaxDepth = subGroupData.depth;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tgroupData.depth += maxDepth;\n\n\t\tif (!groupData.width) {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tif (this.columnVisCheck(column)) {\n\t\t\tgroupData.width = 1;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn groupData;\n};\n\nExport.prototype.columnVisCheck = function (column) {\n\treturn column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]);\n};\n\nExport.prototype.headersToExportRows = function (columns) {\n\tvar headers = [],\n\t headerDepth = 0,\n\t exportRows = [];\n\n\tfunction parseColumnGroup(column, level) {\n\n\t\tvar depth = headerDepth - level;\n\n\t\tif (typeof headers[level] === \"undefined\") {\n\t\t\theaders[level] = [];\n\t\t}\n\n\t\tcolumn.height = column.subGroups ? 1 : depth - column.depth + 1;\n\n\t\theaders[level].push(column);\n\n\t\tif (column.height > 1) {\n\t\t\tfor (var _i10 = 1; _i10 < column.height; _i10++) {\n\n\t\t\t\tif (typeof headers[level + _i10] === \"undefined\") {\n\t\t\t\t\theaders[level + _i10] = [];\n\t\t\t\t}\n\n\t\t\t\theaders[level + _i10].push(false);\n\t\t\t}\n\t\t}\n\n\t\tif (column.width > 1) {\n\t\t\tfor (var _i11 = 1; _i11 < column.width; _i11++) {\n\t\t\t\theaders[level].push(false);\n\t\t\t}\n\t\t}\n\n\t\tif (column.subGroups) {\n\t\t\tcolumn.subGroups.forEach(function (subGroup) {\n\t\t\t\tparseColumnGroup(subGroup, level + 1);\n\t\t\t});\n\t\t}\n\t}\n\n\t//calculate maximum header debth\n\tcolumns.forEach(function (column) {\n\t\tif (column.depth > headerDepth) {\n\t\t\theaderDepth = column.depth;\n\t\t}\n\t});\n\n\tcolumns.forEach(function (column) {\n\t\tparseColumnGroup(column, 0);\n\t});\n\n\theaders.forEach(function (header) {\n\t\tvar columns = [];\n\n\t\theader.forEach(function (col) {\n\t\t\tif (col) {\n\t\t\t\tcolumns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));\n\t\t\t} else {\n\t\t\t\tcolumns.push(null);\n\t\t\t}\n\t\t});\n\n\t\texportRows.push(new ExportRow(\"header\", columns));\n\t});\n\n\treturn exportRows;\n};\n\nExport.prototype.bodyToExportRows = function (rows) {\n\tvar _this58 = this;\n\n\tvar columns = [];\n\tvar exportRows = [];\n\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tif (_this58.columnVisCheck(column)) {\n\t\t\tcolumns.push(column.getComponent());\n\t\t}\n\t});\n\n\tif (this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.table.modules.columnCalcs.topInitialized) {\n\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\n\t\t}\n\n\t\tif (this.table.modules.columnCalcs.botInitialized) {\n\t\t\trows.push(this.table.modules.columnCalcs.botRow);\n\t\t}\n\t}\n\n\trows = rows.filter(function (row) {\n\t\tswitch (row.type) {\n\t\t\tcase \"group\":\n\t\t\t\treturn _this58.config.rowGroups !== false;\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\treturn _this58.config.columnCalcs !== false;\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\treturn !(_this58.table.options.dataTree && _this58.config.dataTree === false && row.modules.dataTree.parent);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn true;\n\t});\n\n\trows.forEach(function (row, i) {\n\t\tvar rowData = row.getData(_this58.colVisProp);\n\t\tvar exportCols = [];\n\t\tvar indent = 0;\n\n\t\tswitch (row.type) {\n\t\t\tcase \"group\":\n\t\t\t\tindent = row.level;\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\tcase \"row\":\n\t\t\t\tcolumns.forEach(function (col) {\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\n\t\t\t\t});\n\n\t\t\t\tif (_this58.table.options.dataTree && _this58.config.dataTree !== false) {\n\t\t\t\t\tindent = row.modules.dataTree.index;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\n\t});\n\n\treturn exportRows;\n};\n\nExport.prototype.genereateTableElement = function (list) {\n\tvar _this59 = this;\n\n\tvar table = document.createElement(\"table\"),\n\t headerEl = document.createElement(\"thead\"),\n\t bodyEl = document.createElement(\"tbody\"),\n\t styles = this.lookupTableStyles(),\n\t rowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\n\t setup = {};\n\n\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\n\n\tif (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")) {\n\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\n\t}\n\n\t//assign group header formatter\n\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\n\n\tif (setup.groupHeader && !Array.isArray(setup.groupHeader)) {\n\t\tsetup.groupHeader = [setup.groupHeader];\n\t}\n\n\ttable.classList.add(\"tabulator-print-table\");\n\n\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\n\tif (list.length > 1000) {\n\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\n\t}\n\n\tlist.forEach(function (row, i) {\n\t\tswitch (row.type) {\n\t\t\tcase \"header\":\n\t\t\t\theaderEl.appendChild(_this59.genereateHeaderElement(row, setup, styles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tbodyEl.appendChild(_this59.genereateGroupElement(row, setup, styles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tbodyEl.appendChild(_this59.genereateCalcElement(row, setup, styles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\tvar rowEl = _this59.genereateRowElement(row, setup, styles);\n\t\t\t\t_this59.mapElementStyles(i % 2 && styles.evenRow ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\t\tbodyEl.appendChild(rowEl);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif (headerEl.innerHTML) {\n\t\ttable.appendChild(headerEl);\n\t}\n\n\ttable.appendChild(bodyEl);\n\n\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\n\treturn table;\n};\n\nExport.prototype.lookupTableStyles = function () {\n\tvar styles = {};\n\n\t//lookup row styles\n\tif (this.cloneTableStyle && window.getComputedStyle) {\n\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\n\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\n\n\t\tif (styles.firstRow) {\n\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\n\t\t\tstyles.firstCell = styles.styleCells[0];\n\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nExport.prototype.genereateHeaderElement = function (row, setup, styles) {\n\tvar _this60 = this;\n\n\tvar rowEl = document.createElement(\"tr\");\n\n\trow.columns.forEach(function (column) {\n\t\tif (column) {\n\t\t\tvar cellEl = document.createElement(\"th\");\n\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\n\n\t\t\tcellEl.colSpan = column.width;\n\t\t\tcellEl.rowSpan = column.height;\n\n\t\t\tcellEl.innerHTML = column.value;\n\n\t\t\tif (_this60.cloneTableStyle) {\n\t\t\t\tcellEl.style.boxSizing = \"border-box\";\n\t\t\t}\n\n\t\t\tclassNames.forEach(function (className) {\n\t\t\t\tcellEl.classList.add(className);\n\t\t\t});\n\n\t\t\t_this60.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\t_this60.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\n\t\t\tif (column.component._column.visible) {\n\t\t\t\t_this60.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\n\t\t\t} else {\n\t\t\t\tif (column.component._column.definition.width) {\n\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (column.component._column.parent) {\n\t\t\t\t_this60.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\n\t\t\t}\n\n\t\t\trowEl.appendChild(cellEl);\n\t\t}\n\t});\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateGroupElement = function (row, setup, styles) {\n\n\tvar rowEl = document.createElement(\"tr\"),\n\t cellEl = document.createElement(\"td\"),\n\t group = row.columns[0];\n\n\trowEl.classList.add(\"tabulator-print-table-row\");\n\n\tif (setup.groupHeader && setup.groupHeader[row.indent]) {\n\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t} else {\n\t\tif (setup.groupHeader === false) {\n\t\t\tgroup.value = group.value;\n\t\t} else {\n\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t}\n\t}\n\n\tcellEl.colSpan = group.width;\n\tcellEl.innerHTML = group.value;\n\n\trowEl.classList.add(\"tabulator-print-table-group\");\n\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\n\n\tif (group.component.isVisible()) {\n\t\trowEl.classList.add(\"tabulator-group-visible\");\n\t}\n\n\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\n\trowEl.appendChild(cellEl);\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateCalcElement = function (row, setup, styles) {\n\tvar rowEl = this.genereateRowElement(row, setup, styles);\n\n\trowEl.classList.add(\"tabulator-print-table-calcs\");\n\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateRowElement = function (row, setup, styles) {\n\tvar _this61 = this;\n\n\tvar rowEl = document.createElement(\"tr\");\n\n\trowEl.classList.add(\"tabulator-print-table-row\");\n\n\trow.columns.forEach(function (col) {\n\n\t\tif (col) {\n\t\t\tvar cellEl = document.createElement(\"td\"),\n\t\t\t column = col.component._column,\n\t\t\t value = col.value;\n\n\t\t\tvar cellWrapper = {\n\t\t\t\tmodules: {},\n\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\treturn value;\n\t\t\t\t},\n\t\t\t\tgetField: function getField() {\n\t\t\t\t\treturn column.definition.field;\n\t\t\t\t},\n\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\treturn cellEl;\n\t\t\t\t},\n\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetData: function getData() {\n\t\t\t\t\treturn row.component.getData();\n\t\t\t\t},\n\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\treturn row.component;\n\t\t\t\t},\n\t\t\t\tgetComponent: function getComponent() {\n\t\t\t\t\treturn cellWrapper;\n\t\t\t\t},\n\t\t\t\tcolumn: column\n\t\t\t};\n\n\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\n\n\t\t\tclassNames.forEach(function (className) {\n\t\t\t\tcellEl.classList.add(className);\n\t\t\t});\n\n\t\t\tif (_this61.table.modExists(\"format\") && _this61.config.formatCells !== false) {\n\t\t\t\tvalue = _this61.table.modules.format.formatExportValue(cellWrapper, _this61.colVisProp);\n\t\t\t} else {\n\t\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tvalue = JSON.stringify(value);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value instanceof Node) {\n\t\t\t\tcellEl.appendChild(value);\n\t\t\t} else {\n\t\t\t\tcellEl.innerHTML = value;\n\t\t\t}\n\n\t\t\tif (styles.firstCell) {\n\t\t\t\t_this61.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\n\t\t\t\tif (column.definition.align) {\n\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_this61.table.options.dataTree && _this61.config.dataTree !== false) {\n\t\t\t\tif (setup.treeElementField && setup.treeElementField == column.field || !setup.treeElementField && i == 0) {\n\t\t\t\t\tif (row.component._row.modules.dataTree.controlEl) {\n\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif (row.component._row.modules.dataTree.branchEl) {\n\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trowEl.appendChild(cellEl);\n\n\t\t\tif (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) {\n\t\t\t\tcellWrapper.modules.format.renderedCallback();\n\t\t\t}\n\n\t\t\tif (setup.rowFormatter && _this61.config.formatCells !== false) {\n\t\t\t\tsetup.rowFormatter(row.component);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateHTMLTable = function (list) {\n\tvar holder = document.createElement(\"div\");\n\n\tholder.appendChild(this.genereateTableElement(list));\n\n\treturn holder.innerHTML;\n};\n\nExport.prototype.getHtml = function (visible, style, config, colVisProp) {\n\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\n\n\treturn this.genereateHTMLTable(list);\n};\n\nExport.prototype.mapElementStyles = function (from, to, props) {\n\tif (this.cloneTableStyle && from && to) {\n\n\t\tvar lookup = {\n\t\t\t\"background-color\": \"backgroundColor\",\n\t\t\t\"color\": \"fontColor\",\n\t\t\t\"width\": \"width\",\n\t\t\t\"font-weight\": \"fontWeight\",\n\t\t\t\"font-family\": \"fontFamily\",\n\t\t\t\"font-size\": \"fontSize\",\n\t\t\t\"text-align\": \"textAlign\",\n\t\t\t\"border-top\": \"borderTop\",\n\t\t\t\"border-left\": \"borderLeft\",\n\t\t\t\"border-right\": \"borderRight\",\n\t\t\t\"border-bottom\": \"borderBottom\",\n\t\t\t\"padding-top\": \"paddingTop\",\n\t\t\t\"padding-left\": \"paddingLeft\",\n\t\t\t\"padding-right\": \"paddingRight\",\n\t\t\t\"padding-bottom\": \"paddingBottom\"\n\t\t};\n\n\t\tif (window.getComputedStyle) {\n\t\t\tvar fromStyle = window.getComputedStyle(from);\n\n\t\t\tprops.forEach(function (prop) {\n\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\n\t\t\t});\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"export\", Export);\n\nvar Filter = function Filter(table) {\n\n\tthis.table = table; //hold Tabulator object\n\n\tthis.filterList = []; //hold filter list\n\tthis.headerFilters = {}; //hold column filters\n\tthis.headerFilterColumns = []; //hold columns that use header filters\n\n\tthis.prevHeaderFilterChangeCheck = \"\";\n\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\tthis.changed = false; //has filtering changed since last render\n};\n\n//initialize column header filter\nFilter.prototype.initializeColumn = function (column, value) {\n\tvar self = this,\n\t field = column.getField(),\n\t params;\n\n\t//handle successfull value change\n\tfunction success(value) {\n\t\tvar filterType = column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\" || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\n\t\t type = \"\",\n\t\t filterChangeCheck = \"\",\n\t\t filterFunc;\n\n\t\tif (typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value) {\n\n\t\t\tcolumn.modules.filter.prevSuccess = value;\n\n\t\t\tif (!column.modules.filter.emptyFunc(value)) {\n\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\tswitch (_typeof(column.definition.headerFilterFunc)) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tif (self.filters[column.definition.headerFilterFunc]) {\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\n\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\treturn self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\ttype = filterFunc;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (!filterFunc) {\n\t\t\t\t\tswitch (filterType) {\n\t\t\t\t\t\tcase \"partial\":\n\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tif (typeof colVal !== 'undefined' && colVal !== null) {\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttype = \"like\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttype = \"=\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tself.headerFilters[field] = { value: value, func: filterFunc, type: type, params: params || {} };\n\t\t\t} else {\n\t\t\t\tdelete self.headerFilters[field];\n\t\t\t}\n\n\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\n\n\t\t\tif (self.prevHeaderFilterChangeCheck !== filterChangeCheck) {\n\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\n\n\t\t\t\tself.changed = true;\n\t\t\t\tself.table.rowManager.filterRefresh();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tcolumn.modules.filter = {\n\t\tsuccess: success,\n\t\tattrType: false,\n\t\ttagType: false,\n\t\temptyFunc: false\n\t};\n\n\tthis.generateHeaderFilterElement(column);\n};\n\nFilter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) {\n\tvar _this62 = this;\n\n\tvar self = this,\n\t success = column.modules.filter.success,\n\t field = column.getField(),\n\t filterElement,\n\t editor,\n\t editorElement,\n\t cellWrapper,\n\t typingTimer,\n\t searchTrigger,\n\t params;\n\n\t//handle aborted edit\n\tfunction cancel() {}\n\n\tif (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) {\n\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\n\t}\n\n\tif (field) {\n\n\t\t//set empty value function\n\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {\n\t\t\treturn !value && value !== \"0\" && value !== 0;\n\t\t};\n\n\t\tfilterElement = document.createElement(\"div\");\n\t\tfilterElement.classList.add(\"tabulator-header-filter\");\n\n\t\t//set column editor\n\t\tswitch (_typeof(column.definition.headerFilter)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (self.table.modules.edit.editors[column.definition.headerFilter]) {\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\n\n\t\t\t\t\tif ((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck) {\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function (value) {\n\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\teditor = column.definition.headerFilter;\n\t\t\t\tbreak;\n\n\t\t\tcase \"boolean\":\n\t\t\t\tif (column.modules.edit && column.modules.edit.editor) {\n\t\t\t\t\teditor = column.modules.edit.editor;\n\t\t\t\t} else {\n\t\t\t\t\tif (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) {\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\n\n\t\t\t\t\t\tif ((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck) {\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function (value) {\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (editor) {\n\n\t\t\tcellWrapper = {\n\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\n\t\t\t\t},\n\t\t\t\tgetField: function getField() {\n\t\t\t\t\treturn column.definition.field;\n\t\t\t\t},\n\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\treturn filterElement;\n\t\t\t\t},\n\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnormalizeHeight: function normalizeHeight() {}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tparams = column.definition.headerFilterParams || {};\n\n\t\t\tparams = typeof params === \"function\" ? params.call(self.table) : params;\n\n\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params);\n\n\t\t\tif (!editorElement) {\n\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!(editorElement instanceof Node)) {\n\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//set Placeholder Text\n\t\t\tif (field) {\n\t\t\t\tself.table.modules.localize.bind(\"headerFilters|columns|\" + column.definition.field, function (value) {\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.table.modules.localize.getText(\"headerFilters|default\"));\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.table.modules.localize.bind(\"headerFilters|default\", function (value) {\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof self.column.definition.headerFilterPlaceholder !== \"undefined\" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//focus on element on click\n\t\t\teditorElement.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\teditorElement.focus();\n\t\t\t});\n\n\t\t\teditorElement.addEventListener(\"focus\", function (e) {\n\t\t\t\tvar left = _this62.table.columnManager.element.scrollLeft;\n\n\t\t\t\tif (left !== _this62.table.rowManager.element.scrollLeft) {\n\t\t\t\t\t_this62.table.rowManager.scrollHorizontal(left);\n\t\t\t\t\t_this62.table.columnManager.scrollHorizontal(left);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//live update filters as user types\n\t\t\ttypingTimer = false;\n\n\t\t\tsearchTrigger = function searchTrigger(e) {\n\t\t\t\tif (typingTimer) {\n\t\t\t\t\tclearTimeout(typingTimer);\n\t\t\t\t}\n\n\t\t\t\ttypingTimer = setTimeout(function () {\n\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t}, self.table.options.headerFilterLiveFilterDelay);\n\t\t\t};\n\n\t\t\tcolumn.modules.filter.headerElement = editorElement;\n\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\";\n\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\n\n\t\t\tif (column.definition.headerFilterLiveFilter !== false) {\n\n\t\t\t\tif (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) {\n\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\n\n\t\t\t\t\t//update number filtered columns on change\n\t\t\t\t\tif (column.modules.filter.attrType == \"number\") {\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function (e) {\n\t\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\n\t\t\t\t\tif (column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\") {\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\n\t\t\t\tif (column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\") {\n\t\t\t\t\teditorElement.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfilterElement.appendChild(editorElement);\n\n\t\t\tcolumn.contentElement.appendChild(filterElement);\n\n\t\t\tif (!reinitialize) {\n\t\t\t\tself.headerFilterColumns.push(column);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\n\t}\n};\n\n//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\nFilter.prototype.hideHeaderFilterElements = function () {\n\tthis.headerFilterColumns.forEach(function (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\n\t\t}\n\t});\n};\n\n//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\nFilter.prototype.showHeaderFilterElements = function () {\n\tthis.headerFilterColumns.forEach(function (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tcolumn.modules.filter.headerElement.style.display = '';\n\t\t}\n\t});\n};\n\n//programatically set focus of header filter\nFilter.prototype.setHeaderFilterFocus = function (column) {\n\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\tcolumn.modules.filter.headerElement.focus();\n\t} else {\n\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\n\t}\n};\n\n//programmatically get value of header filter\nFilter.prototype.getHeaderFilterValue = function (column) {\n\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\treturn column.modules.filter.headerElement.value;\n\t} else {\n\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t}\n};\n\n//programatically set value of header filter\nFilter.prototype.setHeaderFilterValue = function (column, value) {\n\tif (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tthis.generateHeaderFilterElement(column, value, true);\n\t\t\tcolumn.modules.filter.success(value);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n};\n\nFilter.prototype.reloadHeaderFilter = function (column) {\n\tif (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n};\n\n//check if the filters has changed since last use\nFilter.prototype.hasChanged = function () {\n\tvar changed = this.changed;\n\tthis.changed = false;\n\treturn changed;\n};\n\n//set standard filters\nFilter.prototype.setFilter = function (field, type, value, params) {\n\tvar self = this;\n\n\tself.filterList = [];\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value, params: params }];\n\t}\n\n\tself.addFilter(field);\n};\n\n//add filter to array\nFilter.prototype.addFilter = function (field, type, value, params) {\n\tvar self = this;\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value, params: params }];\n\t}\n\n\tfield.forEach(function (filter) {\n\n\t\tfilter = self.findFilter(filter);\n\n\t\tif (filter) {\n\t\t\tself.filterList.push(filter);\n\n\t\t\tself.changed = true;\n\t\t}\n\t});\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\tthis.table.modules.persistence.save(\"filter\");\n\t}\n};\n\nFilter.prototype.findFilter = function (filter) {\n\tvar self = this,\n\t column;\n\n\tif (Array.isArray(filter)) {\n\t\treturn this.findSubFilters(filter);\n\t}\n\n\tvar filterFunc = false;\n\n\tif (typeof filter.field == \"function\") {\n\t\tfilterFunc = function filterFunc(data) {\n\t\t\treturn filter.field(data, filter.type || {}); // pass params to custom filter function\n\t\t};\n\t} else {\n\n\t\tif (self.filters[filter.type]) {\n\n\t\t\tcolumn = self.table.columnManager.getColumnByField(filter.field);\n\n\t\t\tif (column) {\n\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\treturn self.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\treturn self.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\n\t\t}\n\t}\n\n\tfilter.func = filterFunc;\n\n\treturn filter.func ? filter : false;\n};\n\nFilter.prototype.findSubFilters = function (filters) {\n\tvar self = this,\n\t output = [];\n\n\tfilters.forEach(function (filter) {\n\t\tfilter = self.findFilter(filter);\n\n\t\tif (filter) {\n\t\t\toutput.push(filter);\n\t\t}\n\t});\n\n\treturn output.length ? output : false;\n};\n\n//get all filters\nFilter.prototype.getFilters = function (all, ajax) {\n\tvar output = [];\n\n\tif (all) {\n\t\toutput = this.getHeaderFilters();\n\t}\n\n\tif (ajax) {\n\t\toutput.forEach(function (item) {\n\t\t\tif (typeof item.type == \"function\") {\n\t\t\t\titem.type = \"function\";\n\t\t\t}\n\t\t});\n\t}\n\n\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\n\n\treturn output;\n};\n\n//filter to Object\nFilter.prototype.filtersToArray = function (filterList, ajax) {\n\tvar _this63 = this;\n\n\tvar output = [];\n\n\tfilterList.forEach(function (filter) {\n\t\tvar item;\n\n\t\tif (Array.isArray(filter)) {\n\t\t\toutput.push(_this63.filtersToArray(filter, ajax));\n\t\t} else {\n\t\t\titem = { field: filter.field, type: filter.type, value: filter.value };\n\n\t\t\tif (ajax) {\n\t\t\t\tif (typeof item.type == \"function\") {\n\t\t\t\t\titem.type = \"function\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\toutput.push(item);\n\t\t}\n\t});\n\n\treturn output;\n};\n\n//get all filters\nFilter.prototype.getHeaderFilters = function () {\n\tvar self = this,\n\t output = [];\n\n\tfor (var key in this.headerFilters) {\n\t\toutput.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value });\n\t}\n\n\treturn output;\n};\n\n//remove filter from array\nFilter.prototype.removeFilter = function (field, type, value) {\n\tvar self = this;\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value }];\n\t}\n\n\tfield.forEach(function (filter) {\n\t\tvar index = -1;\n\n\t\tif (_typeof(filter.field) == \"object\") {\n\t\t\tindex = self.filterList.findIndex(function (element) {\n\t\t\t\treturn filter === element;\n\t\t\t});\n\t\t} else {\n\t\t\tindex = self.filterList.findIndex(function (element) {\n\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\n\t\t\t});\n\t\t}\n\n\t\tif (index > -1) {\n\t\t\tself.filterList.splice(index, 1);\n\t\t\tself.changed = true;\n\t\t} else {\n\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\n\t\t}\n\t});\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\tthis.table.modules.persistence.save(\"filter\");\n\t}\n};\n\n//clear filters\nFilter.prototype.clearFilter = function (all) {\n\tthis.filterList = [];\n\n\tif (all) {\n\t\tthis.clearHeaderFilter();\n\t}\n\n\tthis.changed = true;\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\tthis.table.modules.persistence.save(\"filter\");\n\t}\n};\n\n//clear header filters\nFilter.prototype.clearHeaderFilter = function () {\n\tvar self = this;\n\n\tthis.headerFilters = {};\n\tself.prevHeaderFilterChangeCheck = \"{}\";\n\n\tthis.headerFilterColumns.forEach(function (column) {\n\t\tif (typeof column.modules.filter.value !== \"undefined\") {\n\t\t\tdelete column.modules.filter.value;\n\t\t}\n\t\tcolumn.modules.filter.prevSuccess = undefined;\n\t\tself.reloadHeaderFilter(column);\n\t});\n\n\tthis.changed = true;\n};\n\n//search data and return matching rows\nFilter.prototype.search = function (searchType, field, type, value) {\n\tvar self = this,\n\t activeRows = [],\n\t filterList = [];\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value }];\n\t}\n\n\tfield.forEach(function (filter) {\n\t\tfilter = self.findFilter(filter);\n\n\t\tif (filter) {\n\t\t\tfilterList.push(filter);\n\t\t}\n\t});\n\n\tthis.table.rowManager.rows.forEach(function (row) {\n\t\tvar match = true;\n\n\t\tfilterList.forEach(function (filter) {\n\t\t\tif (!self.filterRecurse(filter, row.getData())) {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\t\tif (match) {\n\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\n\t\t}\n\t});\n\n\treturn activeRows;\n};\n\n//filter row array\nFilter.prototype.filter = function (rowList, filters) {\n\tvar self = this,\n\t activeRows = [],\n\t activeRowComponents = [];\n\n\tif (self.table.options.dataFiltering) {\n\t\tself.table.options.dataFiltering.call(self.table, self.getFilters());\n\t}\n\n\tif (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) {\n\n\t\trowList.forEach(function (row) {\n\t\t\tif (self.filterRow(row)) {\n\t\t\t\tactiveRows.push(row);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tactiveRows = rowList.slice(0);\n\t}\n\n\tif (self.table.options.dataFiltered) {\n\n\t\tactiveRows.forEach(function (row) {\n\t\t\tactiveRowComponents.push(row.getComponent());\n\t\t});\n\n\t\tself.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);\n\t}\n\n\treturn activeRows;\n};\n\n//filter individual row\nFilter.prototype.filterRow = function (row, filters) {\n\tvar self = this,\n\t match = true,\n\t data = row.getData();\n\n\tself.filterList.forEach(function (filter) {\n\t\tif (!self.filterRecurse(filter, data)) {\n\t\t\tmatch = false;\n\t\t}\n\t});\n\n\tfor (var field in self.headerFilters) {\n\t\tif (!self.headerFilters[field].func(data)) {\n\t\t\tmatch = false;\n\t\t}\n\t}\n\n\treturn match;\n};\n\nFilter.prototype.filterRecurse = function (filter, data) {\n\tvar self = this,\n\t match = false;\n\n\tif (Array.isArray(filter)) {\n\t\tfilter.forEach(function (subFilter) {\n\t\t\tif (self.filterRecurse(subFilter, data)) {\n\t\t\t\tmatch = true;\n\t\t\t}\n\t\t});\n\t} else {\n\t\tmatch = filter.func(data);\n\t}\n\n\treturn match;\n};\n\n//list of available filters\nFilter.prototype.filters = {\n\n\t//equal to\n\t\"=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal == filterVal ? true : false;\n\t},\n\n\t//less than\n\t\"<\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal < filterVal ? true : false;\n\t},\n\n\t//less than or equal to\n\t\"<=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal <= filterVal ? true : false;\n\t},\n\n\t//greater than\n\t\">\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal > filterVal ? true : false;\n\t},\n\n\t//greater than or equal to\n\t\">=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal >= filterVal ? true : false;\n\t},\n\n\t//not equal to\n\t\"!=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal != filterVal ? true : false;\n\t},\n\n\t\"regex\": function regex(filterVal, rowVal, rowData, filterParams) {\n\n\t\tif (typeof filterVal == \"string\") {\n\t\t\tfilterVal = new RegExp(filterVal);\n\t\t}\n\n\t\treturn filterVal.test(rowVal);\n\t},\n\n\t//contains the string\n\t\"like\": function like(filterVal, rowVal, rowData, filterParams) {\n\t\tif (filterVal === null || typeof filterVal === \"undefined\") {\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t} else {\n\t\t\tif (typeof rowVal !== 'undefined' && rowVal !== null) {\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//contains the keywords\n\t\"keywords\": function keywords(filterVal, rowVal, rowData, filterParams) {\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\n\t\t value = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\n\t\t matches = [];\n\n\t\tkeywords.forEach(function (keyword) {\n\t\t\tif (value.includes(keyword)) {\n\t\t\t\tmatches.push(true);\n\t\t\t}\n\t\t});\n\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\n\t},\n\n\t//starts with the string\n\t\"starts\": function starts(filterVal, rowVal, rowData, filterParams) {\n\t\tif (filterVal === null || typeof filterVal === \"undefined\") {\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t} else {\n\t\t\tif (typeof rowVal !== 'undefined' && rowVal !== null) {\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//ends with the string\n\t\"ends\": function ends(filterVal, rowVal, rowData, filterParams) {\n\t\tif (filterVal === null || typeof filterVal === \"undefined\") {\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t} else {\n\t\t\tif (typeof rowVal !== 'undefined' && rowVal !== null) {\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//in array\n\t\"in\": function _in(filterVal, rowVal, rowData, filterParams) {\n\t\tif (Array.isArray(filterVal)) {\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\n\t\t} else {\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"filter\", Filter);\n\nvar Format = function Format(table) {\n\tthis.table = table; //hold Tabulator object\n};\n\n//initialize column formatter\nFormat.prototype.initializeColumn = function (column) {\n\tcolumn.modules.format = this.lookupFormatter(column, \"\");\n\n\tif (typeof column.definition.formatterPrint !== \"undefined\") {\n\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\n\t}\n\n\tif (typeof column.definition.formatterClipboard !== \"undefined\") {\n\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\n\t}\n\n\tif (typeof column.definition.formatterHtmlOutput !== \"undefined\") {\n\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\n\t}\n};\n\nFormat.prototype.lookupFormatter = function (column, type) {\n\tvar config = { params: column.definition[\"formatter\" + type + \"Params\"] || {} },\n\t formatter = column.definition[\"formatter\" + type];\n\n\t//set column formatter\n\tswitch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {\n\t\tcase \"string\":\n\n\t\t\tif (formatter === \"tick\") {\n\t\t\t\tformatter = \"tickCross\";\n\n\t\t\t\tif (typeof config.params.crossElement == \"undefined\") {\n\t\t\t\t\tconfig.params.crossElement = false;\n\t\t\t\t}\n\n\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false\");\n\t\t\t}\n\n\t\t\tif (this.formatters[formatter]) {\n\t\t\t\tconfig.formatter = this.formatters[formatter];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\tconfig.formatter = this.formatters.plaintext;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tconfig.formatter = formatter;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconfig.formatter = this.formatters.plaintext;\n\t\t\tbreak;\n\t}\n\n\treturn config;\n};\n\nFormat.prototype.cellRendered = function (cell) {\n\tif (cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered) {\n\t\tcell.modules.format.renderedCallback();\n\t\tcell.modules.format.rendered = true;\n\t}\n};\n\n//return a formatted value for a cell\nFormat.prototype.formatValue = function (cell) {\n\tvar component = cell.getComponent(),\n\t params = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\n\n\tfunction onRendered(callback) {\n\t\tif (!cell.modules.format) {\n\t\t\tcell.modules.format = {};\n\t\t}\n\n\t\tcell.modules.format.renderedCallback = callback;\n\t\tcell.modules.format.rendered = false;\n\t}\n\n\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\n};\n\nFormat.prototype.formatExportValue = function (cell, type) {\n\tvar formatter = cell.column.modules.format[type],\n\t params;\n\n\tif (formatter) {\n\t\tvar onRendered = function onRendered(callback) {\n\t\t\tif (!cell.modules.format) {\n\t\t\t\tcell.modules.format = {};\n\t\t\t}\n\n\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\tcell.modules.format.rendered = false;\n\t\t};\n\n\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\n\n\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\n\t} else {\n\t\treturn this.formatValue(cell);\n\t}\n};\n\nFormat.prototype.sanitizeHTML = function (value) {\n\tif (value) {\n\t\tvar entityMap = {\n\t\t\t'&': '&',\n\t\t\t'<': '<',\n\t\t\t'>': '>',\n\t\t\t'\"': '"',\n\t\t\t\"'\": ''',\n\t\t\t'/': '/',\n\t\t\t'`': '`',\n\t\t\t'=': '='\n\t\t};\n\n\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\n\t\t\treturn entityMap[s];\n\t\t});\n\t} else {\n\t\treturn value;\n\t}\n};\n\nFormat.prototype.emptyToSpace = function (value) {\n\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\n};\n\n//get formatter for cell\nFormat.prototype.getFormatter = function (formatter) {\n\tvar formatter;\n\n\tswitch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {\n\t\tcase \"string\":\n\t\t\tif (this.formatters[formatter]) {\n\t\t\t\tformatter = this.formatters[formatter];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\tformatter = this.formatters.plaintext;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tformatter = formatter;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tformatter = this.formatters.plaintext;\n\t\t\tbreak;\n\t}\n\n\treturn formatter;\n};\n\n//default data formatters\nFormat.prototype.formatters = {\n\t//plain text value\n\tplaintext: function plaintext(cell, formatterParams, onRendered) {\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t},\n\n\t//html text value\n\thtml: function html(cell, formatterParams, onRendered) {\n\t\treturn cell.getValue();\n\t},\n\n\t//multiline text area\n\ttextarea: function textarea(cell, formatterParams, onRendered) {\n\t\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t},\n\n\t//currency formatting\n\tmoney: function money(cell, formatterParams, onRendered) {\n\t\tvar floatVal = parseFloat(cell.getValue()),\n\t\t number,\n\t\t integer,\n\t\t decimal,\n\t\t rgx;\n\n\t\tvar decimalSym = formatterParams.decimal || \".\";\n\t\tvar thousandSym = formatterParams.thousand || \",\";\n\t\tvar symbol = formatterParams.symbol || \"\";\n\t\tvar after = !!formatterParams.symbolAfter;\n\t\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\n\n\t\tif (isNaN(floatVal)) {\n\t\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t\t}\n\n\t\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\n\t\tnumber = String(number).split(\".\");\n\n\t\tinteger = number[0];\n\t\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\n\n\t\trgx = /(\\d+)(\\d{3})/;\n\n\t\twhile (rgx.test(integer)) {\n\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\n\t\t}\n\n\t\treturn after ? integer + decimal + symbol : symbol + integer + decimal;\n\t},\n\n\t//clickable anchor tag\n\tlink: function link(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue(),\n\t\t urlPrefix = formatterParams.urlPrefix || \"\",\n\t\t download = formatterParams.download,\n\t\t label = value,\n\t\t el = document.createElement(\"a\"),\n\t\t data;\n\n\t\tif (formatterParams.labelField) {\n\t\t\tdata = cell.getData();\n\t\t\tlabel = data[formatterParams.labelField];\n\t\t}\n\n\t\tif (formatterParams.label) {\n\t\t\tswitch (_typeof(formatterParams.label)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tlabel = formatterParams.label;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tlabel = formatterParams.label(cell);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (label) {\n\t\t\tif (formatterParams.urlField) {\n\t\t\t\tdata = cell.getData();\n\t\t\t\tvalue = data[formatterParams.urlField];\n\t\t\t}\n\n\t\t\tif (formatterParams.url) {\n\t\t\t\tswitch (_typeof(formatterParams.url)) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tvalue = formatterParams.url;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tvalue = formatterParams.url(cell);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tel.setAttribute(\"href\", urlPrefix + value);\n\n\t\t\tif (formatterParams.target) {\n\t\t\t\tel.setAttribute(\"target\", formatterParams.target);\n\t\t\t}\n\n\t\t\tif (formatterParams.download) {\n\n\t\t\t\tif (typeof download == \"function\") {\n\t\t\t\t\tdownload = download(cell);\n\t\t\t\t} else {\n\t\t\t\t\tdownload = download === true ? \"\" : download;\n\t\t\t\t}\n\n\t\t\t\tel.setAttribute(\"download\", download);\n\t\t\t}\n\n\t\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\n\n\t\t\treturn el;\n\t\t} else {\n\t\t\treturn \" \";\n\t\t}\n\t},\n\n\t//image element\n\timage: function image(cell, formatterParams, onRendered) {\n\t\tvar el = document.createElement(\"img\"),\n\t\t src = cell.getValue();\n\n\t\tif (formatterParams.urlPrefix) {\n\t\t\tsrc = formatterParams.urlPrefix + cell.getValue();\n\t\t}\n\n\t\tif (formatterParams.urlSuffix) {\n\t\t\tsrc = src + formatterParams.urlSuffix;\n\t\t}\n\n\t\tel.setAttribute(\"src\", src);\n\n\t\tswitch (_typeof(formatterParams.height)) {\n\t\t\tcase \"number\":\n\t\t\t\tel.style.height = formatterParams.height + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase \"string\":\n\t\t\t\tel.style.height = formatterParams.height;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tswitch (_typeof(formatterParams.width)) {\n\t\t\tcase \"number\":\n\t\t\t\tel.style.width = formatterParams.width + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase \"string\":\n\t\t\t\tel.style.width = formatterParams.width;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tel.addEventListener(\"load\", function () {\n\t\t\tcell.getRow().normalizeHeight();\n\t\t});\n\n\t\treturn el;\n\t},\n\n\t//tick or cross\n\ttickCross: function tickCross(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue(),\n\t\t element = cell.getElement(),\n\t\t empty = formatterParams.allowEmpty,\n\t\t truthy = formatterParams.allowTruthy,\n\t\t tick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#2DC214\" clip-rule=\"evenodd\" d=\"M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34 c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351 l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07 l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z\" fill-rule=\"evenodd\"/></svg>',\n\t\t cross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#CE1515\" d=\"M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272 c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0 l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269 c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73 L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z\"/></svg>';\n\n\t\tif (truthy && value || value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\") {\n\t\t\telement.setAttribute(\"aria-checked\", true);\n\t\t\treturn tick || \"\";\n\t\t} else {\n\t\t\tif (empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")) {\n\t\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\telement.setAttribute(\"aria-checked\", false);\n\t\t\t\treturn cross || \"\";\n\t\t\t}\n\t\t}\n\t},\n\n\tdatetime: function datetime(cell, formatterParams, onRendered) {\n\t\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\n\t\tvar outputFormat = formatterParams.outputFormat || \"DD/MM/YYYY hh:mm:ss\";\n\t\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\t\tvar value = cell.getValue();\n\n\t\tvar newDatetime = moment(value, inputFormat);\n\n\t\tif (newDatetime.isValid()) {\n\t\t\treturn formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);\n\t\t} else {\n\n\t\t\tif (invalid === true) {\n\t\t\t\treturn value;\n\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\treturn invalid(value);\n\t\t\t} else {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t},\n\n\tdatetimediff: function datetime(cell, formatterParams, onRendered) {\n\t\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\n\t\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\t\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\n\t\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : undefined;\n\t\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\n\t\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : moment();\n\t\tvar value = cell.getValue();\n\n\t\tvar newDatetime = moment(value, inputFormat);\n\n\t\tif (newDatetime.isValid()) {\n\t\t\tif (humanize) {\n\t\t\t\treturn moment.duration(newDatetime.diff(date)).humanize(suffix);\n\t\t\t} else {\n\t\t\t\treturn newDatetime.diff(date, unit) + (suffix ? \" \" + suffix : \"\");\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (invalid === true) {\n\t\t\t\treturn value;\n\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\treturn invalid(value);\n\t\t\t} else {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t},\n\n\t//select\n\tlookup: function lookup(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue();\n\n\t\tif (typeof formatterParams[value] === \"undefined\") {\n\t\t\tconsole.warn('Missing display value for ' + value);\n\t\t\treturn value;\n\t\t}\n\n\t\treturn formatterParams[value];\n\t},\n\n\t//star rating\n\tstar: function star(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue(),\n\t\t element = cell.getElement(),\n\t\t maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\n\t\t stars = document.createElement(\"span\"),\n\t\t star = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\n\t\t starActive = '<polygon fill=\"#FFEA00\" stroke=\"#C1AB60\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>',\n\t\t starInactive = '<polygon fill=\"#D2D2D2\" stroke=\"#686868\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>';\n\n\t\t//style stars holder\n\t\tstars.style.verticalAlign = \"middle\";\n\n\t\t//style star\n\t\tstar.setAttribute(\"width\", \"14\");\n\t\tstar.setAttribute(\"height\", \"14\");\n\t\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\t\tstar.setAttribute(\"xml:space\", \"preserve\");\n\t\tstar.style.padding = \"0 1px\";\n\n\t\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\n\n\t\tvalue = Math.max(0, Math.min(value, maxStars));\n\n\t\tfor (var i = 1; i <= maxStars; i++) {\n\t\t\tvar nextStar = star.cloneNode(true);\n\t\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\n\n\t\t\tstars.appendChild(nextStar);\n\t\t}\n\n\t\telement.style.whiteSpace = \"nowrap\";\n\t\telement.style.overflow = \"hidden\";\n\t\telement.style.textOverflow = \"ellipsis\";\n\n\t\telement.setAttribute(\"aria-label\", value);\n\n\t\treturn stars;\n\t},\n\n\ttraffic: function traffic(cell, formatterParams, onRendered) {\n\t\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\t\t el = document.createElement(\"span\"),\n\t\t max = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\t\t min = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\t\t colors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\n\t\t color = \"#666666\",\n\t\t percent,\n\t\t percentValue;\n\n\t\tif (isNaN(value) || typeof cell.getValue() === \"undefined\") {\n\t\t\treturn;\n\t\t}\n\n\t\tel.classList.add(\"tabulator-traffic-light\");\n\n\t\t//make sure value is in range\n\t\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\t\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t\t//workout percentage\n\t\tpercent = (max - min) / 100;\n\t\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t\t//set color\n\t\tswitch (typeof colors === 'undefined' ? 'undefined' : _typeof(colors)) {\n\t\t\tcase \"string\":\n\t\t\t\tcolor = colors;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tcolor = colors(value);\n\t\t\t\tbreak;\n\t\t\tcase \"object\":\n\t\t\t\tif (Array.isArray(colors)) {\n\t\t\t\t\tvar unit = 100 / colors.length;\n\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\tindex = Math.min(index, colors.length - 1);\n\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\tcolor = colors[index];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\n\t\tel.style.backgroundColor = color;\n\n\t\treturn el;\n\t},\n\n\t//progress bar\n\tprogress: function progress(cell, formatterParams, onRendered) {\n\t\t//progress bar\n\t\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\t\t element = cell.getElement(),\n\t\t max = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\t\t min = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\t\t legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\n\t\t percent,\n\t\t percentValue,\n\t\t color,\n\t\t legend,\n\t\t legendColor,\n\t\t top,\n\t\t left,\n\t\t right,\n\t\t bottom;\n\n\t\t//make sure value is in range\n\t\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\t\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t\t//workout percentage\n\t\tpercent = (max - min) / 100;\n\t\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t\t//set bar color\n\t\tswitch (_typeof(formatterParams.color)) {\n\t\t\tcase \"string\":\n\t\t\t\tcolor = formatterParams.color;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tcolor = formatterParams.color(value);\n\t\t\t\tbreak;\n\t\t\tcase \"object\":\n\t\t\t\tif (Array.isArray(formatterParams.color)) {\n\t\t\t\t\tvar unit = 100 / formatterParams.color.length;\n\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\n\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\tcolor = formatterParams.color[index];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tcolor = \"#2DC214\";\n\t\t}\n\n\t\t//generate legend\n\t\tswitch (_typeof(formatterParams.legend)) {\n\t\t\tcase \"string\":\n\t\t\t\tlegend = formatterParams.legend;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tlegend = formatterParams.legend(value);\n\t\t\t\tbreak;\n\t\t\tcase \"boolean\":\n\t\t\t\tlegend = value;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlegend = false;\n\t\t}\n\n\t\t//set legend color\n\t\tswitch (_typeof(formatterParams.legendColor)) {\n\t\t\tcase \"string\":\n\t\t\t\tlegendColor = formatterParams.legendColor;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tlegendColor = formatterParams.legendColor(value);\n\t\t\t\tbreak;\n\t\t\tcase \"object\":\n\t\t\t\tif (Array.isArray(formatterParams.legendColor)) {\n\t\t\t\t\tvar unit = 100 / formatterParams.legendColor.length;\n\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\n\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\tlegendColor = formatterParams.legendColor[index];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlegendColor = \"#000\";\n\t\t}\n\n\t\telement.style.minWidth = \"30px\";\n\t\telement.style.position = \"relative\";\n\n\t\telement.setAttribute(\"aria-label\", percentValue);\n\n\t\tvar barEl = document.createElement(\"div\");\n\t\tbarEl.style.display = \"inline-block\";\n\t\tbarEl.style.position = \"relative\";\n\t\tbarEl.style.width = percentValue + \"%\";\n\t\tbarEl.style.backgroundColor = color;\n\t\tbarEl.style.height = \"100%\";\n\n\t\tbarEl.setAttribute('data-max', max);\n\t\tbarEl.setAttribute('data-min', min);\n\n\t\tif (legend) {\n\t\t\tvar legendEl = document.createElement(\"div\");\n\t\t\tlegendEl.style.position = \"absolute\";\n\t\t\tlegendEl.style.top = \"4px\";\n\t\t\tlegendEl.style.left = 0;\n\t\t\tlegendEl.style.textAlign = legendAlign;\n\t\t\tlegendEl.style.width = \"100%\";\n\t\t\tlegendEl.style.color = legendColor;\n\t\t\tlegendEl.innerHTML = legend;\n\t\t}\n\n\t\tonRendered(function () {\n\n\t\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\n\t\t\tif (!(cell instanceof CellComponent)) {\n\t\t\t\tvar holderEl = document.createElement(\"div\");\n\t\t\t\tholderEl.style.position = \"absolute\";\n\t\t\t\tholderEl.style.top = \"4px\";\n\t\t\t\tholderEl.style.bottom = \"4px\";\n\t\t\t\tholderEl.style.left = \"4px\";\n\t\t\t\tholderEl.style.right = \"4px\";\n\n\t\t\t\telement.appendChild(holderEl);\n\n\t\t\t\telement = holderEl;\n\t\t\t}\n\n\t\t\telement.appendChild(barEl);\n\n\t\t\tif (legend) {\n\t\t\t\telement.appendChild(legendEl);\n\t\t\t}\n\t\t});\n\n\t\treturn \"\";\n\t},\n\n\t//background color\n\tcolor: function color(cell, formatterParams, onRendered) {\n\t\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\n\t\treturn \"\";\n\t},\n\n\t//tick icon\n\tbuttonTick: function buttonTick(cell, formatterParams, onRendered) {\n\t\treturn '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#2DC214\" clip-rule=\"evenodd\" d=\"M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34 c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351 l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07 l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z\" fill-rule=\"evenodd\"/></svg>';\n\t},\n\n\t//cross icon\n\tbuttonCross: function buttonCross(cell, formatterParams, onRendered) {\n\t\treturn '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#CE1515\" d=\"M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272 c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0 l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269 c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73 L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z\"/></svg>';\n\t},\n\n\t//current row number\n\trownum: function rownum(cell, formatterParams, onRendered) {\n\t\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\n\t},\n\n\t//row handle\n\thandle: function handle(cell, formatterParams, onRendered) {\n\t\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\t\treturn \"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>\";\n\t},\n\n\tresponsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) {\n\t\tvar self = this,\n\t\t open = false,\n\t\t el = document.createElement(\"div\"),\n\t\t config = cell.getRow()._row.modules.responsiveLayout;\n\n\t\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\n\t\tel.innerHTML = \"<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>\";\n\n\t\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\n\t\tfunction toggleList(isOpen) {\n\t\t\tvar collapseEl = config.element;\n\n\t\t\tconfig.open = isOpen;\n\n\t\t\tif (collapseEl) {\n\n\t\t\t\tif (config.open) {\n\t\t\t\t\tel.classList.add(\"open\");\n\t\t\t\t\tcollapseEl.style.display = '';\n\t\t\t\t} else {\n\t\t\t\t\tel.classList.remove(\"open\");\n\t\t\t\t\tcollapseEl.style.display = 'none';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tel.addEventListener(\"click\", function (e) {\n\t\t\te.stopImmediatePropagation();\n\t\t\ttoggleList(!config.open);\n\t\t});\n\n\t\ttoggleList(config.open);\n\n\t\treturn el;\n\t},\n\n\trowSelection: function rowSelection(cell, formatterParams, onRendered) {\n\t\tvar _this64 = this;\n\n\t\tvar checkbox = document.createElement(\"input\");\n\n\t\tcheckbox.type = 'checkbox';\n\n\t\tif (this.table.modExists(\"selectRow\", true)) {\n\n\t\t\tcheckbox.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tif (typeof cell.getRow == 'function') {\n\t\t\t\tvar row = cell.getRow();\n\n\t\t\t\tif (row instanceof RowComponent) {\n\n\t\t\t\t\tcheckbox.addEventListener(\"change\", function (e) {\n\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t});\n\n\t\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\n\t\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\n\t\t\t\t} else {\n\t\t\t\t\tcheckbox = \"\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcheckbox.addEventListener(\"change\", function (e) {\n\t\t\t\t\tif (_this64.table.modules.selectRow.selectedRows.length) {\n\t\t\t\t\t\t_this64.table.deselectRow();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this64.table.selectRow(formatterParams.rowRange);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\n\t\t\t}\n\t\t}\n\t\treturn checkbox;\n\t}\n};\n\nTabulator.prototype.registerModule(\"format\", Format);\n\nvar FrozenColumns = function FrozenColumns(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.leftColumns = [];\n\tthis.rightColumns = [];\n\tthis.leftMargin = 0;\n\tthis.rightMargin = 0;\n\tthis.rightPadding = 0;\n\tthis.initializationMode = \"left\";\n\tthis.active = false;\n\tthis.scrollEndTimer = false;\n};\n\n//reset initial state\nFrozenColumns.prototype.reset = function () {\n\tthis.initializationMode = \"left\";\n\tthis.leftColumns = [];\n\tthis.rightColumns = [];\n\tthis.leftMargin = 0;\n\tthis.rightMargin = 0;\n\tthis.rightMargin = 0;\n\tthis.active = false;\n\n\tthis.table.columnManager.headersElement.style.marginLeft = 0;\n\tthis.table.columnManager.element.style.paddingRight = 0;\n};\n\n//initialize specific column\nFrozenColumns.prototype.initializeColumn = function (column) {\n\tvar config = { margin: 0, edge: false };\n\n\tif (!column.isGroup) {\n\n\t\tif (this.frozenCheck(column)) {\n\n\t\t\tconfig.position = this.initializationMode;\n\n\t\t\tif (this.initializationMode == \"left\") {\n\t\t\t\tthis.leftColumns.push(column);\n\t\t\t} else {\n\t\t\t\tthis.rightColumns.unshift(column);\n\t\t\t}\n\n\t\t\tthis.active = true;\n\n\t\t\tcolumn.modules.frozen = config;\n\t\t} else {\n\t\t\tthis.initializationMode = \"right\";\n\t\t}\n\t}\n};\n\nFrozenColumns.prototype.frozenCheck = function (column) {\n\tvar frozen = false;\n\n\tif (column.parent.isGroup && column.definition.frozen) {\n\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\n\t}\n\n\tif (column.parent.isGroup) {\n\t\treturn this.frozenCheck(column.parent);\n\t} else {\n\t\treturn column.definition.frozen;\n\t}\n\n\treturn frozen;\n};\n\n//quick layout to smooth horizontal scrolling\nFrozenColumns.prototype.scrollHorizontal = function () {\n\tvar _this65 = this;\n\n\tvar rows;\n\n\tif (this.active) {\n\t\tclearTimeout(this.scrollEndTimer);\n\n\t\t//layout all rows after scroll is complete\n\t\tthis.scrollEndTimer = setTimeout(function () {\n\t\t\t_this65.layout();\n\t\t}, 100);\n\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\tthis.calcMargins();\n\n\t\tthis.layoutColumnPosition();\n\n\t\tthis.layoutCalcRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\t_this65.layoutRow(row);\n\t\t\t}\n\t\t});\n\n\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\n\t}\n};\n\n//calculate margins for rows\nFrozenColumns.prototype.calcMargins = function () {\n\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\n\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\n\n\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\n\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\n\n\t//calculate right frozen columns\n\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\n};\n\n//layout calculation rows\nFrozenColumns.prototype.layoutCalcRows = function () {\n\tif (this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) {\n\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\n\t\t}\n\t\tif (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) {\n\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\n\t\t}\n\t}\n};\n\n//calculate column positions and layout headers\nFrozenColumns.prototype.layoutColumnPosition = function (allCells) {\n\tvar _this66 = this;\n\n\tvar leftParents = [];\n\n\tthis.leftColumns.forEach(function (column, i) {\n\t\tcolumn.modules.frozen.margin = _this66._calcSpace(_this66.leftColumns, i) + _this66.table.columnManager.scrollLeft + \"px\";\n\n\t\tif (i == _this66.leftColumns.length - 1) {\n\t\t\tcolumn.modules.frozen.edge = true;\n\t\t} else {\n\t\t\tcolumn.modules.frozen.edge = false;\n\t\t}\n\n\t\tif (column.parent.isGroup) {\n\t\t\tvar parentEl = _this66.getColGroupParentElement(column);\n\t\t\tif (!leftParents.includes(parentEl)) {\n\t\t\t\t_this66.layoutElement(parentEl, column);\n\t\t\t\tleftParents.push(parentEl);\n\t\t\t}\n\n\t\t\tif (column.modules.frozen.edge) {\n\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\n\t\t\t}\n\t\t} else {\n\t\t\t_this66.layoutElement(column.getElement(), column);\n\t\t}\n\n\t\tif (allCells) {\n\t\t\tcolumn.cells.forEach(function (cell) {\n\t\t\t\t_this66.layoutElement(cell.getElement(true), column);\n\t\t\t});\n\t\t}\n\t});\n\n\tthis.rightColumns.forEach(function (column, i) {\n\t\tcolumn.modules.frozen.margin = _this66.rightPadding - _this66._calcSpace(_this66.rightColumns, i + 1) + \"px\";\n\n\t\tif (i == _this66.rightColumns.length - 1) {\n\t\t\tcolumn.modules.frozen.edge = true;\n\t\t} else {\n\t\t\tcolumn.modules.frozen.edge = false;\n\t\t}\n\n\t\tif (column.parent.isGroup) {\n\t\t\t_this66.layoutElement(_this66.getColGroupParentElement(column), column);\n\t\t} else {\n\t\t\t_this66.layoutElement(column.getElement(), column);\n\t\t}\n\n\t\tif (allCells) {\n\t\t\tcolumn.cells.forEach(function (cell) {\n\t\t\t\t_this66.layoutElement(cell.getElement(true), column);\n\t\t\t});\n\t\t}\n\t});\n};\n\nFrozenColumns.prototype.getColGroupParentElement = function (column) {\n\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\n};\n\n//layout columns appropropriatly\nFrozenColumns.prototype.layout = function () {\n\tvar self = this,\n\t rightMargin = 0;\n\n\tif (self.active) {\n\n\t\t//calculate row padding\n\t\tthis.calcMargins();\n\n\t\t// self.table.rowManager.activeRows.forEach(function(row){\n\t\t// \tself.layoutRow(row);\n\t\t// });\n\n\t\t// if(self.table.options.dataTree){\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\tself.layoutRow(row);\n\t\t\t}\n\t\t});\n\t\t// }\n\n\t\tthis.layoutCalcRows();\n\n\t\t//calculate left columns\n\t\tthis.layoutColumnPosition(true);\n\n\t\t// if(tableHolder.scrollHeight > tableHolder.clientHeight){\n\t\t// \trightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth;\n\t\t// }\n\n\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\n\t}\n};\n\nFrozenColumns.prototype.layoutRow = function (row) {\n\tvar _this67 = this;\n\n\tvar rowEl = row.getElement();\n\n\trowEl.style.paddingLeft = this.leftMargin;\n\t// rowEl.style.paddingRight = this.rightMargin + \"px\";\n\n\tthis.leftColumns.forEach(function (column) {\n\t\tvar cell = row.getCell(column);\n\n\t\tif (cell) {\n\t\t\t_this67.layoutElement(cell.getElement(true), column);\n\t\t}\n\t});\n\n\tthis.rightColumns.forEach(function (column) {\n\t\tvar cell = row.getCell(column);\n\n\t\tif (cell) {\n\t\t\t_this67.layoutElement(cell.getElement(true), column);\n\t\t}\n\t});\n};\n\nFrozenColumns.prototype.layoutElement = function (element, column) {\n\n\tif (column.modules.frozen) {\n\t\telement.style.position = \"absolute\";\n\t\telement.style.left = column.modules.frozen.margin;\n\n\t\telement.classList.add(\"tabulator-frozen\");\n\n\t\tif (column.modules.frozen.edge) {\n\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\n\t\t}\n\t}\n};\n\nFrozenColumns.prototype._calcSpace = function (columns, index) {\n\tvar width = 0;\n\n\tfor (var _i12 = 0; _i12 < index; _i12++) {\n\t\tif (columns[_i12].visible) {\n\t\t\twidth += columns[_i12].getWidth();\n\t\t}\n\t}\n\n\treturn width;\n};\n\nTabulator.prototype.registerModule(\"frozenColumns\", FrozenColumns);\nvar FrozenRows = function FrozenRows(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.topElement = document.createElement(\"div\");\n\tthis.rows = [];\n\tthis.displayIndex = 0; //index in display pipeline\n};\n\nFrozenRows.prototype.initialize = function () {\n\tthis.rows = [];\n\n\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\n\t// this.table.columnManager.element.append(this.topElement);\n\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\n};\n\nFrozenRows.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nFrozenRows.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\nFrozenRows.prototype.isFrozen = function () {\n\treturn !!this.rows.length;\n};\n\n//filter frozen rows out of display data\nFrozenRows.prototype.getRows = function (rows) {\n\tvar self = this,\n\t frozen = [],\n\t output = rows.slice(0);\n\n\tthis.rows.forEach(function (row) {\n\t\tvar index = output.indexOf(row);\n\n\t\tif (index > -1) {\n\t\t\toutput.splice(index, 1);\n\t\t}\n\t});\n\n\treturn output;\n};\n\nFrozenRows.prototype.freezeRow = function (row) {\n\tif (!row.modules.frozen) {\n\t\trow.modules.frozen = true;\n\t\tthis.topElement.appendChild(row.getElement());\n\t\trow.initialize();\n\t\trow.normalizeHeight();\n\t\tthis.table.rowManager.adjustTableSize();\n\n\t\tthis.rows.push(row);\n\n\t\tthis.table.rowManager.refreshActiveData(\"display\");\n\n\t\tthis.styleRows();\n\t} else {\n\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\n\t}\n};\n\nFrozenRows.prototype.unfreezeRow = function (row) {\n\tvar index = this.rows.indexOf(row);\n\n\tif (row.modules.frozen) {\n\n\t\trow.modules.frozen = false;\n\n\t\tthis.detachRow(row);\n\n\t\tthis.table.rowManager.adjustTableSize();\n\n\t\tthis.table.rowManager.refreshActiveData(\"display\");\n\n\t\tif (this.rows.length) {\n\t\t\tthis.styleRows();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\n\t}\n};\n\nFrozenRows.prototype.detachRow = function (row) {\n\tvar index = this.rows.indexOf(row);\n\n\tif (index > -1) {\n\t\tvar rowEl = row.getElement();\n\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\tthis.rows.splice(index, 1);\n\t}\n};\n\nFrozenRows.prototype.styleRows = function (row) {\n\tvar self = this;\n\n\tthis.rows.forEach(function (row, i) {\n\t\tself.table.rowManager.styleRow(row, i);\n\t});\n};\n\nTabulator.prototype.registerModule(\"frozenRows\", FrozenRows);\n\n//public group object\nvar GroupComponent = function GroupComponent(group) {\n\tthis._group = group;\n\tthis.type = \"GroupComponent\";\n};\n\nGroupComponent.prototype.getKey = function () {\n\treturn this._group.key;\n};\n\nGroupComponent.prototype.getField = function () {\n\treturn this._group.field;\n};\n\nGroupComponent.prototype.getElement = function () {\n\treturn this._group.element;\n};\n\nGroupComponent.prototype.getRows = function () {\n\treturn this._group.getRows(true);\n};\n\nGroupComponent.prototype.getSubGroups = function () {\n\treturn this._group.getSubGroups(true);\n};\n\nGroupComponent.prototype.getParentGroup = function () {\n\treturn this._group.parent ? this._group.parent.getComponent() : false;\n};\n\nGroupComponent.prototype.getVisibility = function () {\n\tconsole.warn(\"getVisibility function is deprecated, you should now use the isVisible function\");\n\treturn this._group.visible;\n};\n\nGroupComponent.prototype.isVisible = function () {\n\treturn this._group.visible;\n};\n\nGroupComponent.prototype.show = function () {\n\tthis._group.show();\n};\n\nGroupComponent.prototype.hide = function () {\n\tthis._group.hide();\n};\n\nGroupComponent.prototype.toggle = function () {\n\tthis._group.toggleVisibility();\n};\n\nGroupComponent.prototype._getSelf = function () {\n\treturn this._group;\n};\n\nGroupComponent.prototype.getTable = function () {\n\treturn this._group.groupManager.table;\n};\n\n//////////////////////////////////////////////////\n//////////////// Group Functions /////////////////\n//////////////////////////////////////////////////\n\nvar Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) {\n\n\tthis.groupManager = groupManager;\n\tthis.parent = parent;\n\tthis.key = key;\n\tthis.level = level;\n\tthis.field = field;\n\tthis.hasSubGroups = level < groupManager.groupIDLookups.length - 1;\n\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\n\tthis.type = \"group\"; //type of element\n\tthis.old = oldGroup;\n\tthis.rows = [];\n\tthis.groups = [];\n\tthis.groupList = [];\n\tthis.generator = generator;\n\tthis.elementContents = false;\n\tthis.height = 0;\n\tthis.outerHeight = 0;\n\tthis.initialized = false;\n\tthis.calcs = {};\n\tthis.initialized = false;\n\tthis.modules = {};\n\tthis.arrowElement = false;\n\n\tthis.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0];\n\n\tthis.component = null;\n\n\tthis.createElements();\n\tthis.addBindings();\n\n\tthis.createValueGroups();\n};\n\nGroup.prototype.wipe = function () {\n\tif (this.groupList.length) {\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tgroup.wipe();\n\t\t});\n\t} else {\n\t\tthis.element = false;\n\t\tthis.arrowElement = false;\n\t\tthis.elementContents = false;\n\t}\n};\n\nGroup.prototype.createElements = function () {\n\tvar arrow = document.createElement(\"div\");\n\tarrow.classList.add(\"tabulator-arrow\");\n\n\tthis.element = document.createElement(\"div\");\n\tthis.element.classList.add(\"tabulator-row\");\n\tthis.element.classList.add(\"tabulator-group\");\n\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\n\tthis.element.setAttribute(\"role\", \"rowgroup\");\n\n\tthis.arrowElement = document.createElement(\"div\");\n\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\n\tthis.arrowElement.appendChild(arrow);\n\n\t//setup movable rows\n\tif (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")) {\n\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\n\t}\n};\n\nGroup.prototype.createValueGroups = function () {\n\tvar _this68 = this;\n\n\tvar level = this.level + 1;\n\tif (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {\n\t\tthis.groupManager.allowedValues[level].forEach(function (value) {\n\t\t\t_this68._createGroup(value, level);\n\t\t});\n\t}\n};\n\nGroup.prototype.addBindings = function () {\n\tvar self = this,\n\t dblTap,\n\t tapHold,\n\t tap,\n\t toggleElement;\n\n\t//handle group click events\n\tif (self.groupManager.table.options.groupClick) {\n\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\tself.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupDblClick) {\n\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\tself.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupContext) {\n\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\tself.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent());\n\t\t});\n\t}\n\n\tif ((self.groupManager.table.options.groupContextMenu || self.groupManager.table.options.groupClickMenu) && self.groupManager.table.modExists(\"menu\")) {\n\t\tself.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self);\n\t}\n\n\tif (self.groupManager.table.options.groupTap) {\n\n\t\ttap = false;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tself.groupManager.table.options.groupTap(e, self.getComponent());\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupDblTap) {\n\n\t\tdblTap = null;\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tself.groupManager.table.options.groupDblTap(e, self.getComponent());\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupTapHold) {\n\n\t\ttapHold = null;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tself.groupManager.table.options.groupTapHold(e, self.getComponent());\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupToggleElement) {\n\t\ttoggleElement = self.groupManager.table.options.groupToggleElement == \"arrow\" ? self.arrowElement : self.element;\n\n\t\ttoggleElement.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tself.toggleVisibility();\n\t\t});\n\t}\n};\n\nGroup.prototype._createGroup = function (groupID, level) {\n\tvar groupKey = level + \"_\" + groupID;\n\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\n\n\tthis.groups[groupKey] = group;\n\tthis.groupList.push(group);\n};\n\nGroup.prototype._addRowToGroup = function (row) {\n\n\tvar level = this.level + 1;\n\n\tif (this.hasSubGroups) {\n\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\n\t\t groupKey = level + \"_\" + groupID;\n\n\t\tif (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {\n\t\t\tif (this.groups[groupKey]) {\n\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this.groups[groupKey]) {\n\t\t\t\tthis._createGroup(groupID, level);\n\t\t\t}\n\n\t\t\tthis.groups[groupKey].addRow(row);\n\t\t}\n\t}\n};\n\nGroup.prototype._addRow = function (row) {\n\tthis.rows.push(row);\n\trow.modules.group = this;\n};\n\nGroup.prototype.insertRow = function (row, to, after) {\n\tvar data = this.conformRowData({});\n\n\trow.updateData(data);\n\n\tvar toIndex = this.rows.indexOf(to);\n\n\tif (toIndex > -1) {\n\t\tif (after) {\n\t\t\tthis.rows.splice(toIndex + 1, 0, row);\n\t\t} else {\n\t\t\tthis.rows.splice(toIndex, 0, row);\n\t\t}\n\t} else {\n\t\tif (after) {\n\t\t\tthis.rows.push(row);\n\t\t} else {\n\t\t\tthis.rows.unshift(row);\n\t\t}\n\t}\n\n\trow.modules.group = this;\n\n\tthis.generateGroupHeaderContents();\n\n\tif (this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\") {\n\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t}\n\n\tthis.groupManager.updateGroupRows(true);\n};\n\nGroup.prototype.scrollHeader = function (left) {\n\tthis.arrowElement.style.marginLeft = left;\n\n\tthis.groupList.forEach(function (child) {\n\t\tchild.scrollHeader(left);\n\t});\n};\n\nGroup.prototype.getRowIndex = function (row) {};\n\n//update row data to match grouping contraints\nGroup.prototype.conformRowData = function (data) {\n\tif (this.field) {\n\t\tdata[this.field] = this.key;\n\t} else {\n\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\n\t}\n\n\tif (this.parent) {\n\t\tdata = this.parent.conformRowData(data);\n\t}\n\n\treturn data;\n};\n\nGroup.prototype.removeRow = function (row) {\n\tvar index = this.rows.indexOf(row);\n\tvar el = row.getElement();\n\n\tif (index > -1) {\n\t\tthis.rows.splice(index, 1);\n\t}\n\n\tif (!this.groupManager.table.options.groupValues && !this.rows.length) {\n\t\tif (this.parent) {\n\t\t\tthis.parent.removeGroup(this);\n\t\t} else {\n\t\t\tthis.groupManager.removeGroup(this);\n\t\t}\n\n\t\tthis.groupManager.updateGroupRows(true);\n\t} else {\n\n\t\tif (el.parentNode) {\n\t\t\tel.parentNode.removeChild(el);\n\t\t}\n\n\t\tthis.generateGroupHeaderContents();\n\n\t\tif (this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\") {\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t}\n\t}\n};\n\nGroup.prototype.removeGroup = function (group) {\n\tvar groupKey = group.level + \"_\" + group.key,\n\t index;\n\n\tif (this.groups[groupKey]) {\n\t\tdelete this.groups[groupKey];\n\n\t\tindex = this.groupList.indexOf(group);\n\n\t\tif (index > -1) {\n\t\t\tthis.groupList.splice(index, 1);\n\t\t}\n\n\t\tif (!this.groupList.length) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t} else {\n\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t}\n\t\t}\n\t}\n};\n\nGroup.prototype.getHeadersAndRows = function (noCalc) {\n\tvar output = [];\n\n\toutput.push(this);\n\n\tthis._visSet();\n\n\tif (this.visible) {\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\n\t\t\t});\n\t\t} else {\n\t\t\tif (!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {\n\t\t\t\tif (this.calcs.top) {\n\t\t\t\t\tthis.calcs.top.detachElement();\n\t\t\t\t\tthis.calcs.top.deleteCells();\n\t\t\t\t}\n\n\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\toutput.push(this.calcs.top);\n\t\t\t}\n\n\t\t\toutput = output.concat(this.rows);\n\n\t\t\tif (!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {\n\t\t\t\tif (this.calcs.bottom) {\n\t\t\t\t\tthis.calcs.bottom.detachElement();\n\t\t\t\t\tthis.calcs.bottom.deleteCells();\n\t\t\t\t}\n\n\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\") {\n\n\t\t\tif (this.groupManager.table.modExists(\"columnCalcs\")) {\n\n\t\t\t\tif (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {\n\t\t\t\t\tif (this.calcs.top) {\n\t\t\t\t\t\tthis.calcs.top.detachElement();\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.groupManager.table.options.groupClosedShowCalcs) {\n\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {\n\t\t\t\t\tif (this.calcs.bottom) {\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.groupManager.table.options.groupClosedShowCalcs) {\n\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output;\n};\n\nGroup.prototype.getData = function (visible, transform) {\n\tvar self = this,\n\t output = [];\n\n\tthis._visSet();\n\n\tif (!visible || visible && this.visible) {\n\t\tthis.rows.forEach(function (row) {\n\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t});\n\t}\n\n\treturn output;\n};\n\n// Group.prototype.getRows = function(){\n// \tthis._visSet();\n\n// \treturn this.visible ? this.rows : [];\n// };\n\nGroup.prototype.getRowCount = function () {\n\tvar count = 0;\n\n\tif (this.groupList.length) {\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tcount += group.getRowCount();\n\t\t});\n\t} else {\n\t\tcount = this.rows.length;\n\t}\n\treturn count;\n};\n\nGroup.prototype.toggleVisibility = function () {\n\tif (this.visible) {\n\t\tthis.hide();\n\t} else {\n\t\tthis.show();\n\t}\n};\n\nGroup.prototype.hide = function () {\n\tthis.visible = false;\n\n\tif (this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination) {\n\n\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\n\t\t\t\tvar rows = group.getHeadersAndRows();\n\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\trow.detachElement();\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tthis.rows.forEach(function (row) {\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t});\n\t\t}\n\n\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\n\n\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\n\t} else {\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\n\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);\n};\n\nGroup.prototype.show = function () {\n\tvar self = this;\n\n\tself.visible = true;\n\n\tif (this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination) {\n\n\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\n\t\tvar prev = self.getElement();\n\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\tvar rows = group.getHeadersAndRows();\n\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\trow.initialize();\n\t\t\t\t\tprev = rowEl;\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tself.rows.forEach(function (row) {\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\trow.initialize();\n\t\t\t\tprev = rowEl;\n\t\t\t});\n\t\t}\n\n\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\n\n\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\n\t} else {\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\n\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);\n};\n\nGroup.prototype._visSet = function () {\n\tvar data = [];\n\n\tif (typeof this.visible == \"function\") {\n\n\t\tthis.rows.forEach(function (row) {\n\t\t\tdata.push(row.getData());\n\t\t});\n\n\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\n\t}\n};\n\nGroup.prototype.getRowGroup = function (row) {\n\tvar match = false;\n\tif (this.groupList.length) {\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tvar result = group.getRowGroup(row);\n\n\t\t\tif (result) {\n\t\t\t\tmatch = result;\n\t\t\t}\n\t\t});\n\t} else {\n\t\tif (this.rows.find(function (item) {\n\t\t\treturn item === row;\n\t\t})) {\n\t\t\tmatch = this;\n\t\t}\n\t}\n\n\treturn match;\n};\n\nGroup.prototype.getSubGroups = function (component) {\n\tvar output = [];\n\n\tthis.groupList.forEach(function (child) {\n\t\toutput.push(component ? child.getComponent() : child);\n\t});\n\n\treturn output;\n};\n\nGroup.prototype.getRows = function (compoment) {\n\tvar output = [];\n\n\tthis.rows.forEach(function (row) {\n\t\toutput.push(compoment ? row.getComponent() : row);\n\t});\n\n\treturn output;\n};\n\nGroup.prototype.generateGroupHeaderContents = function () {\n\tvar data = [];\n\n\tthis.rows.forEach(function (row) {\n\t\tdata.push(row.getData());\n\t});\n\n\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\n\n\twhile (this.element.firstChild) {\n\t\tthis.element.removeChild(this.element.firstChild);\n\t}if (typeof this.elementContents === \"string\") {\n\t\tthis.element.innerHTML = this.elementContents;\n\t} else {\n\t\tthis.element.appendChild(this.elementContents);\n\t}\n\n\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\n};\n\nGroup.prototype.getPath = function () {\n\tvar path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n\tpath.unshift(this.key);\n\tif (this.parent) {\n\t\tthis.parent.getPath(path);\n\t}\n\treturn path;\n};\n////////////// Standard Row Functions //////////////\n\nGroup.prototype.getElement = function () {\n\tthis.addBindingsd = false;\n\n\tthis._visSet();\n\n\tif (this.visible) {\n\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t} else {\n\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t}\n\n\tfor (var i = 0; i < this.element.childNodes.length; ++i) {\n\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\n\t}\n\n\tthis.generateGroupHeaderContents();\n\n\t// this.addBindings();\n\n\treturn this.element;\n};\n\nGroup.prototype.detachElement = function () {\n\tif (this.element && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t}\n};\n\n//normalize the height of elements in the row\nGroup.prototype.normalizeHeight = function () {\n\tthis.setHeight(this.element.clientHeight);\n};\n\nGroup.prototype.initialize = function (force) {\n\tif (!this.initialized || force) {\n\t\tthis.normalizeHeight();\n\t\tthis.initialized = true;\n\t}\n};\n\nGroup.prototype.reinitialize = function () {\n\tthis.initialized = false;\n\tthis.height = 0;\n\n\tif (Tabulator.prototype.helpers.elVisible(this.element)) {\n\t\tthis.initialize(true);\n\t}\n};\n\nGroup.prototype.setHeight = function (height) {\n\tif (this.height != height) {\n\t\tthis.height = height;\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n};\n\n//return rows outer height\nGroup.prototype.getHeight = function () {\n\treturn this.outerHeight;\n};\n\nGroup.prototype.getGroup = function () {\n\treturn this;\n};\n\nGroup.prototype.reinitializeHeight = function () {};\nGroup.prototype.calcHeight = function () {};\nGroup.prototype.setCellHeight = function () {};\nGroup.prototype.clearCellHeight = function () {};\n\n//////////////// Object Generation /////////////////\nGroup.prototype.getComponent = function () {\n\tif (!this.component) {\n\t\tthis.component = new GroupComponent(this);\n\t}\n\n\treturn this.component;\n};\n\n//////////////////////////////////////////////////\n////////////// Group Row Extension ///////////////\n//////////////////////////////////////////////////\n\nvar GroupRows = function GroupRows(table) {\n\n\tthis.table = table; //hold Tabulator object\n\n\tthis.groupIDLookups = false; //enable table grouping and set field to group by\n\tthis.startOpen = [function () {\n\t\treturn false;\n\t}]; //starting state of group\n\tthis.headerGenerator = [function () {\n\t\treturn \"\";\n\t}];\n\tthis.groupList = []; //ordered list of groups\n\tthis.allowedValues = false;\n\tthis.groups = {}; //hold row groups\n\tthis.displayIndex = 0; //index in display pipeline\n};\n\n//initialize group configuration\nGroupRows.prototype.initialize = function () {\n\tvar self = this,\n\t groupBy = self.table.options.groupBy,\n\t startOpen = self.table.options.groupStartOpen,\n\t groupHeader = self.table.options.groupHeader;\n\n\tthis.allowedValues = self.table.options.groupValues;\n\n\tif (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) {\n\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\n\t}\n\n\tself.headerGenerator = [function () {\n\t\treturn \"\";\n\t}];\n\tthis.startOpen = [function () {\n\t\treturn false;\n\t}]; //starting state of group\n\n\tself.table.modules.localize.bind(\"groups|item\", function (langValue, lang) {\n\t\tself.headerGenerator[0] = function (value, count, data) {\n\t\t\t//header layout function\n\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"<span>(\" + count + \" \" + (count === 1 ? langValue : lang.groups.items) + \")</span>\";\n\t\t};\n\t});\n\n\tthis.groupIDLookups = [];\n\n\tif (Array.isArray(groupBy) || groupBy) {\n\t\tif (this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\") {\n\t\t\tthis.table.modules.columnCalcs.removeCalcs();\n\t\t}\n\t} else {\n\t\tif (this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\") {\n\n\t\t\tvar cols = this.table.columnManager.getRealColumns();\n\n\t\t\tcols.forEach(function (col) {\n\t\t\t\tif (col.definition.topCalc) {\n\t\t\t\t\tself.table.modules.columnCalcs.initializeTopRow();\n\t\t\t\t}\n\n\t\t\t\tif (col.definition.bottomCalc) {\n\t\t\t\t\tself.table.modules.columnCalcs.initializeBottomRow();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tif (!Array.isArray(groupBy)) {\n\t\tgroupBy = [groupBy];\n\t}\n\n\tgroupBy.forEach(function (group, i) {\n\t\tvar lookupFunc, column;\n\n\t\tif (typeof group == \"function\") {\n\t\t\tlookupFunc = group;\n\t\t} else {\n\t\t\tcolumn = self.table.columnManager.getColumnByField(group);\n\n\t\t\tif (column) {\n\t\t\t\tlookupFunc = function lookupFunc(data) {\n\t\t\t\t\treturn column.getFieldValue(data);\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tlookupFunc = function lookupFunc(data) {\n\t\t\t\t\treturn data[group];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tself.groupIDLookups.push({\n\t\t\tfield: typeof group === \"function\" ? false : group,\n\t\t\tfunc: lookupFunc,\n\t\t\tvalues: self.allowedValues ? self.allowedValues[i] : false\n\t\t});\n\t});\n\n\tif (startOpen) {\n\n\t\tif (!Array.isArray(startOpen)) {\n\t\t\tstartOpen = [startOpen];\n\t\t}\n\n\t\tstartOpen.forEach(function (level) {\n\t\t\tlevel = typeof level == \"function\" ? level : function () {\n\t\t\t\treturn true;\n\t\t\t};\n\t\t});\n\n\t\tself.startOpen = startOpen;\n\t}\n\n\tif (groupHeader) {\n\t\tself.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\n\t}\n\n\tthis.initialized = true;\n};\n\nGroupRows.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nGroupRows.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\n//return appropriate rows with group headers\nGroupRows.prototype.getRows = function (rows) {\n\tif (this.groupIDLookups.length) {\n\n\t\tthis.table.options.dataGrouping.call(this.table);\n\n\t\tthis.generateGroups(rows);\n\n\t\tif (this.table.options.dataGrouped) {\n\t\t\tthis.table.options.dataGrouped.call(this.table, this.getGroups(true));\n\t\t}\n\n\t\treturn this.updateGroupRows();\n\t} else {\n\t\treturn rows.slice(0);\n\t}\n};\n\nGroupRows.prototype.getGroups = function (compoment) {\n\tvar groupComponents = [];\n\n\tthis.groupList.forEach(function (group) {\n\t\tgroupComponents.push(compoment ? group.getComponent() : group);\n\t});\n\n\treturn groupComponents;\n};\n\nGroupRows.prototype.getChildGroups = function (group) {\n\tvar _this69 = this;\n\n\tvar groupComponents = [];\n\n\tif (!group) {\n\t\tgroup = this;\n\t}\n\n\tgroup.groupList.forEach(function (child) {\n\t\tif (child.groupList.length) {\n\t\t\tgroupComponents = groupComponents.concat(_this69.getChildGroups(child));\n\t\t} else {\n\t\t\tgroupComponents.push(child);\n\t\t}\n\t});\n\n\treturn groupComponents;\n};\n\nGroupRows.prototype.wipe = function () {\n\tthis.groupList.forEach(function (group) {\n\t\tgroup.wipe();\n\t});\n};\n\nGroupRows.prototype.pullGroupListData = function (groupList) {\n\tvar self = this;\n\tvar groupListData = [];\n\n\tgroupList.forEach(function (group) {\n\t\tvar groupHeader = {};\n\t\tgroupHeader.level = 0;\n\t\tgroupHeader.rowCount = 0;\n\t\tgroupHeader.headerContent = \"\";\n\t\tvar childData = [];\n\n\t\tif (group.hasSubGroups) {\n\t\t\tchildData = self.pullGroupListData(group.groupList);\n\n\t\t\tgroupHeader.level = group.level;\n\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\n\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\n\n\t\t\tgroupListData.push(groupHeader);\n\t\t\tgroupListData = groupListData.concat(childData);\n\t\t} else {\n\t\t\tgroupHeader.level = group.level;\n\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\n\t\t\tgroupHeader.rowCount = group.getRows().length;\n\n\t\t\tgroupListData.push(groupHeader);\n\n\t\t\tgroup.getRows().forEach(function (row) {\n\t\t\t\tgroupListData.push(row.getData(\"data\"));\n\t\t\t});\n\t\t}\n\t});\n\n\treturn groupListData;\n};\n\nGroupRows.prototype.getGroupedData = function () {\n\n\treturn this.pullGroupListData(this.groupList);\n};\n\nGroupRows.prototype.getRowGroup = function (row) {\n\tvar match = false;\n\n\tthis.groupList.forEach(function (group) {\n\t\tvar result = group.getRowGroup(row);\n\n\t\tif (result) {\n\t\t\tmatch = result;\n\t\t}\n\t});\n\n\treturn match;\n};\n\nGroupRows.prototype.countGroups = function () {\n\treturn this.groupList.length;\n};\n\nGroupRows.prototype.generateGroups = function (rows) {\n\tvar self = this,\n\t oldGroups = self.groups;\n\n\tself.groups = {};\n\tself.groupList = [];\n\n\tif (this.allowedValues && this.allowedValues[0]) {\n\t\tthis.allowedValues[0].forEach(function (value) {\n\t\t\tself.createGroup(value, 0, oldGroups);\n\t\t});\n\n\t\trows.forEach(function (row) {\n\t\t\tself.assignRowToExistingGroup(row, oldGroups);\n\t\t});\n\t} else {\n\t\trows.forEach(function (row) {\n\t\t\tself.assignRowToGroup(row, oldGroups);\n\t\t});\n\t}\n};\n\nGroupRows.prototype.createGroup = function (groupID, level, oldGroups) {\n\tvar groupKey = level + \"_\" + groupID,\n\t group;\n\n\toldGroups = oldGroups || [];\n\n\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\n\n\tthis.groups[groupKey] = group;\n\tthis.groupList.push(group);\n};\n\n// GroupRows.prototype.assignRowToGroup = function(row, oldGroups){\n// \tvar groupID = this.groupIDLookups[0].func(row.getData()),\n// \tgroupKey = \"0_\" + groupID;\n\n// \tif(!this.groups[groupKey]){\n// \t\tthis.createGroup(groupID, 0, oldGroups);\n// \t}\n\n// \tthis.groups[groupKey].addRow(row);\n// };\n\nGroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) {\n\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t groupKey = \"0_\" + groupID;\n\n\tif (this.groups[groupKey]) {\n\t\tthis.groups[groupKey].addRow(row);\n\t}\n};\n\nGroupRows.prototype.assignRowToGroup = function (row, oldGroups) {\n\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t newGroupNeeded = !this.groups[\"0_\" + groupID];\n\n\tif (newGroupNeeded) {\n\t\tthis.createGroup(groupID, 0, oldGroups);\n\t}\n\n\tthis.groups[\"0_\" + groupID].addRow(row);\n\n\treturn !newGroupNeeded;\n};\n\nGroupRows.prototype.reassignRowToGroup = function (row) {\n\tvar oldRowGroup = row.getGroup(),\n\t oldGroupPath = oldRowGroup.getPath(),\n\t newGroupPath = this.getExpectedPath(row),\n\t samePath = true;\n\t// figure out if new group path is the same as old group path\n\tvar samePath = oldGroupPath.length == newGroupPath.length && oldGroupPath.every(function (element, index) {\n\t\treturn element === newGroupPath[index];\n\t});\n\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\n\tif (!samePath) {\n\t\toldRowGroup.removeRow(row);\n\t\tthis.assignRowToGroup(row, self.groups);\n\t\tthis.table.rowManager.refreshActiveData(\"group\", false, true);\n\t}\n};\n\nGroupRows.prototype.getExpectedPath = function (row) {\n\tvar groupPath = [],\n\t rowData = row.getData();\n\tthis.groupIDLookups.forEach(function (groupId) {\n\t\tgroupPath.push(groupId.func(rowData));\n\t});\n\treturn groupPath;\n};\n\nGroupRows.prototype.updateGroupRows = function (force) {\n\tvar self = this,\n\t output = [],\n\t oldRowCount;\n\n\tself.groupList.forEach(function (group) {\n\t\toutput = output.concat(group.getHeadersAndRows());\n\t});\n\n\t//force update of table display\n\tif (force) {\n\n\t\tvar displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex());\n\n\t\tif (displayIndex !== true) {\n\t\t\tthis.setDisplayIndex(displayIndex);\n\t\t}\n\n\t\tself.table.rowManager.refreshActiveData(\"group\", true, true);\n\t}\n\n\treturn output;\n};\n\nGroupRows.prototype.scrollHeaders = function (left) {\n\tif (this.table.options.virtualDomHoz) {\n\t\tleft -= this.table.vdomHoz.vDomPadLeft;\n\t}\n\n\tleft = left + \"px\";\n\n\tthis.groupList.forEach(function (group) {\n\t\tgroup.scrollHeader(left);\n\t});\n};\n\nGroupRows.prototype.removeGroup = function (group) {\n\tvar groupKey = group.level + \"_\" + group.key,\n\t index;\n\n\tif (this.groups[groupKey]) {\n\t\tdelete this.groups[groupKey];\n\n\t\tindex = this.groupList.indexOf(group);\n\n\t\tif (index > -1) {\n\t\t\tthis.groupList.splice(index, 1);\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"groupRows\", GroupRows);\nvar History = function History(table) {\n\tthis.table = table; //hold Tabulator object\n\n\tthis.history = [];\n\tthis.index = -1;\n};\n\nHistory.prototype.clear = function () {\n\tthis.history = [];\n\tthis.index = -1;\n};\n\nHistory.prototype.action = function (type, component, data) {\n\n\tthis.history = this.history.slice(0, this.index + 1);\n\n\tthis.history.push({\n\t\ttype: type,\n\t\tcomponent: component,\n\t\tdata: data\n\t});\n\n\tthis.index++;\n};\n\nHistory.prototype.getHistoryUndoSize = function () {\n\treturn this.index + 1;\n};\n\nHistory.prototype.getHistoryRedoSize = function () {\n\treturn this.history.length - (this.index + 1);\n};\n\nHistory.prototype.clearComponentHistory = function (component) {\n\tvar index = this.history.findIndex(function (item) {\n\t\treturn item.component === component;\n\t});\n\n\tif (index > -1) {\n\t\tthis.history.splice(index, 1);\n\t\tif (index <= this.index) {\n\t\t\tthis.index--;\n\t\t}\n\n\t\tthis.clearComponentHistory(component);\n\t}\n};\n\nHistory.prototype.undo = function () {\n\n\tif (this.index > -1) {\n\t\tvar action = this.history[this.index];\n\n\t\tthis.undoers[action.type].call(this, action);\n\n\t\tthis.index--;\n\n\t\tthis.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);\n\n\t\treturn true;\n\t} else {\n\t\tconsole.warn(\"History Undo Error - No more history to undo\");\n\t\treturn false;\n\t}\n};\n\nHistory.prototype.redo = function () {\n\tif (this.history.length - 1 > this.index) {\n\n\t\tthis.index++;\n\n\t\tvar action = this.history[this.index];\n\n\t\tthis.redoers[action.type].call(this, action);\n\n\t\tthis.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);\n\n\t\treturn true;\n\t} else {\n\t\tconsole.warn(\"History Redo Error - No more history to redo\");\n\t\treturn false;\n\t}\n};\n\nHistory.prototype.undoers = {\n\tcellEdit: function cellEdit(action) {\n\t\taction.component.setValueProcessData(action.data.oldValue);\n\t},\n\n\trowAdd: function rowAdd(action) {\n\t\taction.component.deleteActual();\n\t},\n\n\trowDelete: function rowDelete(action) {\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\t},\n\n\trowMove: function rowMove(action) {\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\n\t\tthis.table.rowManager.redraw();\n\t}\n};\n\nHistory.prototype.redoers = {\n\tcellEdit: function cellEdit(action) {\n\t\taction.component.setValueProcessData(action.data.newValue);\n\t},\n\n\trowAdd: function rowAdd(action) {\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\t},\n\n\trowDelete: function rowDelete(action) {\n\t\taction.component.deleteActual();\n\t},\n\n\trowMove: function rowMove(action) {\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\n\t\tthis.table.rowManager.redraw();\n\t}\n};\n\n//rebind rows to new element after deletion\nHistory.prototype._rebindRow = function (oldRow, newRow) {\n\tthis.history.forEach(function (action) {\n\t\tif (action.component instanceof Row) {\n\t\t\tif (action.component === oldRow) {\n\t\t\t\taction.component = newRow;\n\t\t\t}\n\t\t} else if (action.component instanceof Cell) {\n\t\t\tif (action.component.row === oldRow) {\n\t\t\t\tvar field = action.component.column.getField();\n\n\t\t\t\tif (field) {\n\t\t\t\t\taction.component = newRow.getCell(field);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\nTabulator.prototype.registerModule(\"history\", History);\nvar HtmlTableImport = function HtmlTableImport(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.fieldIndex = [];\n\tthis.hasIndex = false;\n};\n\nHtmlTableImport.prototype.parseTable = function () {\n\tvar self = this,\n\t element = self.table.element,\n\t options = self.table.options,\n\t columns = options.columns,\n\t headers = element.getElementsByTagName(\"th\"),\n\t rows = element.getElementsByTagName(\"tbody\")[0],\n\t data = [],\n\t newTable;\n\n\tself.hasIndex = false;\n\n\tself.table.options.htmlImporting.call(this.table);\n\n\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\n\n\t//check for tablator inline options\n\tself._extractOptions(element, options);\n\n\tif (headers.length) {\n\t\tself._extractHeaders(headers, rows);\n\t} else {\n\t\tself._generateBlankHeaders(headers, rows);\n\t}\n\n\t//iterate through table rows and build data set\n\tfor (var index = 0; index < rows.length; index++) {\n\t\tvar row = rows[index],\n\t\t cells = row.getElementsByTagName(\"td\"),\n\t\t item = {};\n\n\t\t//create index if the dont exist in table\n\t\tif (!self.hasIndex) {\n\t\t\titem[options.index] = index;\n\t\t}\n\n\t\tfor (var i = 0; i < cells.length; i++) {\n\t\t\tvar cell = cells[i];\n\t\t\tif (typeof this.fieldIndex[i] !== \"undefined\") {\n\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\n\t\t\t}\n\t\t}\n\n\t\t//add row data to item\n\t\tdata.push(item);\n\t}\n\n\t//create new element\n\tvar newElement = document.createElement(\"div\");\n\n\t//transfer attributes to new element\n\tvar attributes = element.attributes;\n\n\t// loop through attributes and apply them on div\n\n\tfor (var i in attributes) {\n\t\tif (_typeof(attributes[i]) == \"object\") {\n\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\n\t\t}\n\t}\n\n\t// replace table with div element\n\telement.parentNode.replaceChild(newElement, element);\n\n\toptions.data = data;\n\n\tself.table.options.htmlImported.call(this.table);\n\n\t// // newElement.tabulator(options);\n\n\tthis.table.element = newElement;\n};\n\n//extract tabulator attribute options\nHtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) {\n\tvar attributes = element.attributes;\n\tvar optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);\n\tvar optionsList = {};\n\n\toptionsArr.forEach(function (item) {\n\t\toptionsList[item.toLowerCase()] = item;\n\t});\n\n\tfor (var index in attributes) {\n\t\tvar attrib = attributes[index];\n\t\tvar name;\n\n\t\tif (attrib && (typeof attrib === 'undefined' ? 'undefined' : _typeof(attrib)) == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0) {\n\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\n\n\t\t\tif (typeof optionsList[name] !== \"undefined\") {\n\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\n\t\t\t}\n\t\t}\n\t}\n};\n\n//get value of attribute\nHtmlTableImport.prototype._attribValue = function (value) {\n\tif (value === \"true\") {\n\t\treturn true;\n\t}\n\n\tif (value === \"false\") {\n\t\treturn false;\n\t}\n\n\treturn value;\n};\n\n//find column if it has already been defined\nHtmlTableImport.prototype._findCol = function (title) {\n\tvar match = this.table.options.columns.find(function (column) {\n\t\treturn column.title === title;\n\t});\n\n\treturn match || false;\n};\n\n//extract column from headers\nHtmlTableImport.prototype._extractHeaders = function (headers, rows) {\n\tfor (var index = 0; index < headers.length; index++) {\n\t\tvar header = headers[index],\n\t\t exists = false,\n\t\t col = this._findCol(header.textContent),\n\t\t width,\n\t\t attributes;\n\n\t\tif (col) {\n\t\t\texists = true;\n\t\t} else {\n\t\t\tcol = { title: header.textContent.trim() };\n\t\t}\n\n\t\tif (!col.field) {\n\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\n\t\t}\n\n\t\twidth = header.getAttribute(\"width\");\n\n\t\tif (width && !col.width) {\n\t\t\tcol.width = width;\n\t\t}\n\n\t\t//check for tablator inline options\n\t\tattributes = header.attributes;\n\n\t\t// //check for tablator inline options\n\t\tthis._extractOptions(header, col, Column.prototype.defaultOptionList);\n\n\t\tthis.fieldIndex[index] = col.field;\n\n\t\tif (col.field == this.table.options.index) {\n\t\t\tthis.hasIndex = true;\n\t\t}\n\n\t\tif (!exists) {\n\t\t\tthis.table.options.columns.push(col);\n\t\t}\n\t}\n};\n\n//generate blank headers\nHtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) {\n\tfor (var index = 0; index < headers.length; index++) {\n\t\tvar header = headers[index],\n\t\t col = { title: \"\", field: \"col\" + index };\n\n\t\tthis.fieldIndex[index] = col.field;\n\n\t\tvar width = header.getAttribute(\"width\");\n\n\t\tif (width) {\n\t\t\tcol.width = width;\n\t\t}\n\n\t\tthis.table.options.columns.push(col);\n\t}\n};\n\nTabulator.prototype.registerModule(\"htmlTableImport\", HtmlTableImport);\nvar Keybindings = function Keybindings(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.watchKeys = null;\n\tthis.pressedKeys = null;\n\tthis.keyupBinding = false;\n\tthis.keydownBinding = false;\n};\n\nKeybindings.prototype.initialize = function () {\n\tvar bindings = this.table.options.keybindings,\n\t mergedBindings = {};\n\n\tthis.watchKeys = {};\n\tthis.pressedKeys = [];\n\n\tif (bindings !== false) {\n\n\t\tfor (var key in this.bindings) {\n\t\t\tmergedBindings[key] = this.bindings[key];\n\t\t}\n\n\t\tif (Object.keys(bindings).length) {\n\n\t\t\tfor (var _key in bindings) {\n\t\t\t\tmergedBindings[_key] = bindings[_key];\n\t\t\t}\n\t\t}\n\n\t\tthis.mapBindings(mergedBindings);\n\t\tthis.bindEvents();\n\t}\n};\n\nKeybindings.prototype.mapBindings = function (bindings) {\n\tvar _this70 = this;\n\n\tvar self = this;\n\n\tvar _loop2 = function _loop2(key) {\n\n\t\tif (_this70.actions[key]) {\n\n\t\t\tif (bindings[key]) {\n\n\t\t\t\tif (_typeof(bindings[key]) !== \"object\") {\n\t\t\t\t\tbindings[key] = [bindings[key]];\n\t\t\t\t}\n\n\t\t\t\tbindings[key].forEach(function (binding) {\n\t\t\t\t\tself.mapBinding(key, binding);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\n\t\t}\n\t};\n\n\tfor (var key in bindings) {\n\t\t_loop2(key);\n\t}\n};\n\nKeybindings.prototype.mapBinding = function (action, symbolsList) {\n\tvar self = this;\n\n\tvar binding = {\n\t\taction: this.actions[action],\n\t\tkeys: [],\n\t\tctrl: false,\n\t\tshift: false,\n\t\tmeta: false\n\t};\n\n\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\n\n\tsymbols.forEach(function (symbol) {\n\t\tswitch (symbol) {\n\t\t\tcase \"ctrl\":\n\t\t\t\tbinding.ctrl = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"shift\":\n\t\t\t\tbinding.shift = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"meta\":\n\t\t\t\tbinding.meta = true;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tsymbol = parseInt(symbol);\n\t\t\t\tbinding.keys.push(symbol);\n\n\t\t\t\tif (!self.watchKeys[symbol]) {\n\t\t\t\t\tself.watchKeys[symbol] = [];\n\t\t\t\t}\n\n\t\t\t\tself.watchKeys[symbol].push(binding);\n\t\t}\n\t});\n};\n\nKeybindings.prototype.bindEvents = function () {\n\tvar self = this;\n\n\tthis.keyupBinding = function (e) {\n\t\tvar code = e.keyCode;\n\t\tvar bindings = self.watchKeys[code];\n\n\t\tif (bindings) {\n\n\t\t\tself.pressedKeys.push(code);\n\n\t\t\tbindings.forEach(function (binding) {\n\t\t\t\tself.checkBinding(e, binding);\n\t\t\t});\n\t\t}\n\t};\n\n\tthis.keydownBinding = function (e) {\n\t\tvar code = e.keyCode;\n\t\tvar bindings = self.watchKeys[code];\n\n\t\tif (bindings) {\n\n\t\t\tvar index = self.pressedKeys.indexOf(code);\n\n\t\t\tif (index > -1) {\n\t\t\t\tself.pressedKeys.splice(index, 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\n\n\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\n};\n\nKeybindings.prototype.clearBindings = function () {\n\tif (this.keyupBinding) {\n\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\n\t}\n\n\tif (this.keydownBinding) {\n\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\n\t}\n};\n\nKeybindings.prototype.checkBinding = function (e, binding) {\n\tvar self = this,\n\t match = true;\n\n\tif (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) {\n\t\tbinding.keys.forEach(function (key) {\n\t\t\tvar index = self.pressedKeys.indexOf(key);\n\n\t\t\tif (index == -1) {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\t\tif (match) {\n\t\t\tbinding.action.call(self, e);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n//default bindings\nKeybindings.prototype.bindings = {\n\tnavPrev: \"shift + 9\",\n\tnavNext: 9,\n\tnavUp: 38,\n\tnavDown: 40,\n\tscrollPageUp: 33,\n\tscrollPageDown: 34,\n\tscrollToStart: 36,\n\tscrollToEnd: 35,\n\tundo: \"ctrl + 90\",\n\tredo: \"ctrl + 89\",\n\tcopyToClipboard: \"ctrl + 67\"\n};\n\n//default actions\nKeybindings.prototype.actions = {\n\tkeyBlock: function keyBlock(e) {\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t},\n\tscrollPageUp: function scrollPageUp(e) {\n\t\tvar rowManager = this.table.rowManager,\n\t\t newPos = rowManager.scrollTop - rowManager.height,\n\t\t scrollMax = rowManager.element.scrollHeight;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\tif (newPos >= 0) {\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t} else {\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollPageDown: function scrollPageDown(e) {\n\t\tvar rowManager = this.table.rowManager,\n\t\t newPos = rowManager.scrollTop + rowManager.height,\n\t\t scrollMax = rowManager.element.scrollHeight;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\tif (newPos <= scrollMax) {\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t} else {\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollToStart: function scrollToStart(e) {\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollToEnd: function scrollToEnd(e) {\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tnavPrev: function navPrev(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().prev();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavNext: function navNext(e) {\n\t\tvar cell = false;\n\t\tvar newRow = this.table.options.tabEndNewRow;\n\t\tvar nav;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tnav = cell.nav();\n\n\t\t\t\tif (!nav.next()) {\n\t\t\t\t\tif (newRow) {\n\n\t\t\t\t\t\tcell.getElement().firstChild.blur();\n\n\t\t\t\t\t\tif (newRow === true) {\n\t\t\t\t\t\t\tnewRow = this.table.addRow({});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (typeof newRow == \"function\") {\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnewRow.then(function () {\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tnav.next();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tnavLeft: function navLeft(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().left();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavRight: function navRight(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().right();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavUp: function navUp(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().up();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavDown: function navDown(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().down();\n\t\t\t}\n\t\t}\n\t},\n\n\tundo: function undo(e) {\n\t\tvar cell = false;\n\t\tif (this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")) {\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (!cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.undo();\n\t\t\t}\n\t\t}\n\t},\n\n\tredo: function redo(e) {\n\t\tvar cell = false;\n\t\tif (this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")) {\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (!cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.redo();\n\t\t\t}\n\t\t}\n\t},\n\n\tcopyToClipboard: function copyToClipboard(e) {\n\t\tif (!this.table.modules.edit.currentCell) {\n\t\t\tif (this.table.modExists(\"clipboard\", true)) {\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\n\t\t\t}\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"keybindings\", Keybindings);\nvar Menu = function Menu(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.menuElements = [];\n\tthis.blurEvent = this.hideMenu.bind(this);\n\tthis.escEvent = this.escMenu.bind(this);\n\tthis.nestedMenuBlock = false;\n\tthis.positionReversedX = false;\n};\n\nMenu.prototype.initializeColumnHeader = function (column) {\n\tvar _this71 = this;\n\n\tvar headerMenuEl;\n\n\tif (column.definition.headerContextMenu) {\n\t\tcolumn.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));\n\t\tthis.tapHold(column, column.definition.headerContextMenu);\n\t}\n\n\t// if(column.definition.headerClickMenu){\n\t// \tcolumn.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));\n\t// }\n\n\tif (column.definition.headerMenu) {\n\n\t\theaderMenuEl = document.createElement(\"span\");\n\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\n\t\theaderMenuEl.innerHTML = \"⋮\";\n\n\t\theaderMenuEl.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\n\t\t\t_this71.LoadMenuEvent(column, column.definition.headerMenu, e);\n\t\t});\n\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\n\t}\n};\n\nMenu.prototype.LoadMenuEvent = function (component, menu, e) {\n\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\n\n\t// if(component instanceof Cell){\n\t// \te.stopImmediatePropagation();\n\t// }\n\n\tthis.loadMenu(e, component, menu);\n};\n\nMenu.prototype.tapHold = function (component, menu) {\n\tvar _this72 = this;\n\n\tvar element = component.getElement(),\n\t tapHold = null,\n\t loaded = false;\n\n\telement.addEventListener(\"touchstart\", function (e) {\n\t\tclearTimeout(tapHold);\n\t\tloaded = false;\n\n\t\ttapHold = setTimeout(function () {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t\tloaded = true;\n\n\t\t\t_this72.LoadMenuEvent(component, menu, e);\n\t\t}, 1000);\n\t}, { passive: true });\n\n\telement.addEventListener(\"touchend\", function (e) {\n\t\tclearTimeout(tapHold);\n\t\ttapHold = null;\n\n\t\tif (loaded) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n};\n\nMenu.prototype.initializeCell = function (cell) {\n\tif (cell.column.definition.contextMenu) {\n\t\tcell.getElement(true).addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));\n\t\tthis.tapHold(cell, cell.column.definition.contextMenu);\n\t}\n\n\tif (cell.column.definition.clickMenu) {\n\t\tcell.getElement(true).addEventListener(\"click\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));\n\t}\n};\n\nMenu.prototype.initializeRow = function (row) {\n\tif (this.table.options.rowContextMenu) {\n\t\trow.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));\n\t\tthis.tapHold(row, this.table.options.rowContextMenu);\n\t}\n\n\tif (this.table.options.rowClickMenu) {\n\t\trow.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));\n\t}\n};\n\nMenu.prototype.initializeGroup = function (group) {\n\tif (this.table.options.groupContextMenu) {\n\t\tgroup.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));\n\t\tthis.tapHold(group, this.table.options.groupContextMenu);\n\t}\n\n\tif (this.table.options.groupClickMenu) {\n\t\tgroup.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));\n\t}\n};\n\nMenu.prototype.loadMenu = function (e, component, menu, parentEl) {\n\tvar _this73 = this;\n\n\tvar touch = !(e instanceof MouseEvent);\n\n\tvar menuEl = document.createElement(\"div\");\n\tmenuEl.classList.add(\"tabulator-menu\");\n\n\tif (!touch) {\n\t\te.preventDefault();\n\t}\n\n\t//abort if no menu set\n\tif (!menu || !menu.length) {\n\t\treturn;\n\t}\n\n\tif (!parentEl) {\n\t\tif (this.nestedMenuBlock) {\n\t\t\t//abort if child menu already open\n\t\t\tif (this.isOpen()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.nestedMenuBlock = setTimeout(function () {\n\t\t\t\t_this73.nestedMenuBlock = false;\n\t\t\t}, 100);\n\t\t}\n\n\t\tthis.hideMenu();\n\t\tthis.menuElements = [];\n\t}\n\n\tmenu.forEach(function (item) {\n\t\tvar itemEl = document.createElement(\"div\"),\n\t\t label = item.label,\n\t\t disabled = item.disabled;\n\n\t\tif (item.separator) {\n\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\n\t\t} else {\n\t\t\titemEl.classList.add(\"tabulator-menu-item\");\n\n\t\t\tif (typeof label == \"function\") {\n\t\t\t\tlabel = label.call(_this73.table, component.getComponent());\n\t\t\t}\n\n\t\t\tif (label instanceof Node) {\n\t\t\t\titemEl.appendChild(label);\n\t\t\t} else {\n\t\t\t\titemEl.innerHTML = label;\n\t\t\t}\n\n\t\t\tif (typeof disabled == \"function\") {\n\t\t\t\tdisabled = disabled.call(_this73.table, component.getComponent());\n\t\t\t}\n\n\t\t\tif (disabled) {\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\n\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (item.menu && item.menu.length) {\n\t\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t_this73.hideOldSubMenus(menuEl);\n\t\t\t\t\t\t_this73.loadMenu(e, component, item.menu, itemEl);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (item.action) {\n\t\t\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\t\titem.action(e, component.getComponent());\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (item.menu && item.menu.length) {\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\n\t\t\t}\n\t\t}\n\n\t\tmenuEl.appendChild(itemEl);\n\t});\n\n\tmenuEl.addEventListener(\"click\", function (e) {\n\t\t_this73.hideMenu();\n\t});\n\n\tthis.menuElements.push(menuEl);\n\tthis.positionMenu(menuEl, parentEl, touch, e);\n};\n\nMenu.prototype.hideOldSubMenus = function (menuEl) {\n\tvar index = this.menuElements.indexOf(menuEl);\n\n\tif (index > -1) {\n\t\tfor (var _i13 = this.menuElements.length - 1; _i13 > index; _i13--) {\n\t\t\tvar el = this.menuElements[_i13];\n\n\t\t\tif (el.parentNode) {\n\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t}\n\n\t\t\tthis.menuElements.pop();\n\t\t}\n\t}\n};\n\nMenu.prototype.positionMenu = function (element, parentEl, touch, e) {\n\tvar _this74 = this;\n\n\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight),\n\t x,\n\t y,\n\t parentOffset;\n\n\tif (!parentEl) {\n\t\tx = touch ? e.touches[0].pageX : e.pageX;\n\t\ty = touch ? e.touches[0].pageY : e.pageY;\n\n\t\tthis.positionReversedX = false;\n\t} else {\n\t\tparentOffset = Tabulator.prototype.helpers.elOffset(parentEl);\n\t\tx = parentOffset.left + parentEl.offsetWidth;\n\t\ty = parentOffset.top - 1;\n\t}\n\n\telement.style.top = y + \"px\";\n\telement.style.left = x + \"px\";\n\n\tsetTimeout(function () {\n\t\t_this74.table.rowManager.element.addEventListener(\"scroll\", _this74.blurEvent);\n\t\tdocument.body.addEventListener(\"click\", _this74.blurEvent);\n\t\tdocument.body.addEventListener(\"contextmenu\", _this74.blurEvent);\n\t\twindow.addEventListener(\"resize\", _this74.blurEvent);\n\t\tdocument.body.addEventListener(\"keydown\", _this74.escEvent);\n\t}, 100);\n\n\tdocument.body.appendChild(element);\n\n\t//move menu to start on bottom edge if it is too close to the edge of the screen\n\tif (y + element.offsetHeight >= docHeight) {\n\t\telement.style.top = \"\";\n\n\t\tif (parentEl) {\n\t\t\telement.style.bottom = docHeight - parentOffset.top - parentEl.offsetHeight - 1 + \"px\";\n\t\t} else {\n\t\t\telement.style.bottom = docHeight - y + \"px\";\n\t\t}\n\t}\n\n\t//move menu to start on right edge if it is too close to the edge of the screen\n\tif (x + element.offsetWidth >= document.body.offsetWidth || this.positionReversedX) {\n\t\telement.style.left = \"\";\n\n\t\tif (parentEl) {\n\t\t\telement.style.right = document.documentElement.offsetWidth - parentOffset.left + \"px\";\n\t\t} else {\n\t\t\telement.style.right = document.documentElement.offsetWidth - x + \"px\";\n\t\t}\n\n\t\tthis.positionReversedX = true;\n\t}\n};\n\nMenu.prototype.isOpen = function () {\n\treturn !!this.menuElements.length;\n};\n\nMenu.prototype.escMenu = function (e) {\n\tif (e.keyCode == 27) {\n\t\tthis.hideMenu();\n\t}\n};\n\nMenu.prototype.hideMenu = function () {\n\tthis.menuElements.forEach(function (menuEl) {\n\t\tif (menuEl.parentNode) {\n\t\t\tmenuEl.parentNode.removeChild(menuEl);\n\t\t}\n\t});\n\n\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\n\tdocument.body.removeEventListener(\"click\", this.blurEvent);\n\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\n\twindow.removeEventListener(\"resize\", this.blurEvent);\n\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\n};\n\n//default accessors\nMenu.prototype.menus = {};\n\nTabulator.prototype.registerModule(\"menu\", Menu);\nvar MoveColumns = function MoveColumns(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.placeholderElement = this.createPlaceholderElement();\n\tthis.hoverElement = false; //floating column header element\n\tthis.checkTimeout = false; //click check timeout holder\n\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\n\tthis.moving = false; //currently moving column\n\tthis.toCol = false; //destination column\n\tthis.toColAfter = false; //position of moving column relative to the desitnation column\n\tthis.startX = 0; //starting position within header element\n\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\n\tthis.autoScrollStep = 5; //auto scroll distance in pixels\n\tthis.autoScrollTimeout = false; //auto scroll timeout\n\tthis.touchMove = false;\n\n\tthis.moveHover = this.moveHover.bind(this);\n\tthis.endMove = this.endMove.bind(this);\n};\n\nMoveColumns.prototype.createPlaceholderElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-col\");\n\tel.classList.add(\"tabulator-col-placeholder\");\n\n\treturn el;\n};\n\nMoveColumns.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t config = {},\n\t colEl;\n\n\tif (!column.modules.frozen) {\n\n\t\tcolEl = column.getElement();\n\n\t\tconfig.mousemove = function (e) {\n\t\t\tif (column.parent === self.moving.parent) {\n\t\t\t\tif ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) {\n\t\t\t\t\tif (self.toCol !== column || !self.toColAfter) {\n\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\n\t\t\t\t\t\tself.moveColumn(column, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (self.toCol !== column || self.toColAfter) {\n\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\n\t\t\t\t\t\tself.moveColumn(column, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\t\tcolEl.addEventListener(\"mousedown\", function (e) {\n\t\t\tself.touchMove = false;\n\t\t\tif (e.which === 1) {\n\t\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\t\tself.startMove(e, column);\n\t\t\t\t}, self.checkPeriod);\n\t\t\t}\n\t\t});\n\n\t\tcolEl.addEventListener(\"mouseup\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tif (self.checkTimeout) {\n\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tself.bindTouchEvents(column);\n\t}\n\n\tcolumn.modules.moveColumn = config;\n};\n\nMoveColumns.prototype.bindTouchEvents = function (column) {\n\tvar self = this,\n\t colEl = column.getElement(),\n\t startXMove = false,\n\t //shifting center position of the cell\n\tdir = false,\n\t currentCol,\n\t nextCol,\n\t prevCol,\n\t nextColWidth,\n\t prevColWidth,\n\t nextColWidthLast,\n\t prevColWidthLast;\n\n\tcolEl.addEventListener(\"touchstart\", function (e) {\n\t\tself.checkTimeout = setTimeout(function () {\n\t\t\tself.touchMove = true;\n\t\t\tcurrentCol = column;\n\t\t\tnextCol = column.nextColumn();\n\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\tprevCol = column.prevColumn();\n\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\tnextColWidthLast = 0;\n\t\t\tprevColWidthLast = 0;\n\t\t\tstartXMove = false;\n\n\t\t\tself.startMove(e, column);\n\t\t}, self.checkPeriod);\n\t}, { passive: true });\n\n\tcolEl.addEventListener(\"touchmove\", function (e) {\n\t\tvar halfCol, diff, moveToCol;\n\n\t\tif (self.moving) {\n\t\t\tself.moveHover(e);\n\n\t\t\tif (!startXMove) {\n\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t}\n\n\t\t\tdiff = e.touches[0].pageX - startXMove;\n\n\t\t\tif (diff > 0) {\n\t\t\t\tif (nextCol && diff - nextColWidthLast > nextColWidth) {\n\t\t\t\t\tmoveToCol = nextCol;\n\n\t\t\t\t\tif (moveToCol !== column) {\n\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling);\n\t\t\t\t\t\tself.moveColumn(moveToCol, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (prevCol && -diff - prevColWidthLast > prevColWidth) {\n\t\t\t\t\tmoveToCol = prevCol;\n\n\t\t\t\t\tif (moveToCol !== column) {\n\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement());\n\t\t\t\t\t\tself.moveColumn(moveToCol, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (moveToCol) {\n\t\t\t\tcurrentCol = moveToCol;\n\t\t\t\tnextCol = moveToCol.nextColumn();\n\t\t\t\tnextColWidthLast = nextColWidth;\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\t\tprevCol = moveToCol.prevColumn();\n\t\t\t\tprevColWidthLast = prevColWidth;\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\t}\n\t\t}\n\t}, { passive: true });\n\n\tcolEl.addEventListener(\"touchend\", function (e) {\n\t\tif (self.checkTimeout) {\n\t\t\tclearTimeout(self.checkTimeout);\n\t\t}\n\t\tif (self.moving) {\n\t\t\tself.endMove(e);\n\t\t}\n\t});\n};\n\nMoveColumns.prototype.startMove = function (e, column) {\n\tvar element = column.getElement();\n\n\tthis.moving = column;\n\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(element).left;\n\n\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t//create placeholder\n\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\n\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\n\n\telement.parentNode.insertBefore(this.placeholderElement, element);\n\telement.parentNode.removeChild(element);\n\n\t//create hover element\n\tthis.hoverElement = element.cloneNode(true);\n\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\n\n\tthis.hoverElement.style.left = \"0\";\n\tthis.hoverElement.style.bottom = \"0\";\n\n\tif (!this.touchMove) {\n\t\tthis._bindMouseMove();\n\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\t}\n\n\tthis.moveHover(e);\n};\n\nMoveColumns.prototype._bindMouseMove = function () {\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tif (column.modules.moveColumn.mousemove) {\n\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t}\n\t});\n};\n\nMoveColumns.prototype._unbindMouseMove = function () {\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tif (column.modules.moveColumn.mousemove) {\n\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t}\n\t});\n};\n\nMoveColumns.prototype.moveColumn = function (column, after) {\n\tvar movingCells = this.moving.getCells();\n\n\tthis.toCol = column;\n\tthis.toColAfter = after;\n\n\tif (after) {\n\t\tcolumn.getCells().forEach(function (cell, i) {\n\t\t\tvar cellEl = cell.getElement(true);\n\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\n\t\t});\n\t} else {\n\t\tcolumn.getCells().forEach(function (cell, i) {\n\t\t\tvar cellEl = cell.getElement(true);\n\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\n\t\t});\n\t}\n};\n\nMoveColumns.prototype.endMove = function (e) {\n\tif (e.which === 1 || this.touchMove) {\n\t\tthis._unbindMouseMove();\n\n\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tif (this.toCol) {\n\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\n\t\t}\n\n\t\tthis.moving = false;\n\t\tthis.toCol = false;\n\t\tthis.toColAfter = false;\n\n\t\tif (!this.touchMove) {\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\t\t}\n\t}\n};\n\nMoveColumns.prototype.moveHover = function (e) {\n\tvar self = this,\n\t columnHolder = self.table.columnManager.getElement(),\n\t scrollLeft = columnHolder.scrollLeft,\n\t xPos = (self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft,\n\t scrollPos;\n\n\tself.hoverElement.style.left = xPos - self.startX + \"px\";\n\n\tif (xPos - scrollLeft < self.autoScrollMargin) {\n\t\tif (!self.autoScrollTimeout) {\n\t\t\tself.autoScrollTimeout = setTimeout(function () {\n\t\t\t\tscrollPos = Math.max(0, scrollLeft - 5);\n\t\t\t\tself.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\tself.autoScrollTimeout = false;\n\t\t\t}, 1);\n\t\t}\n\t}\n\n\tif (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) {\n\t\tif (!self.autoScrollTimeout) {\n\t\t\tself.autoScrollTimeout = setTimeout(function () {\n\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5);\n\t\t\t\tself.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\tself.autoScrollTimeout = false;\n\t\t\t}, 1);\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"moveColumn\", MoveColumns);\n\nvar MoveRows = function MoveRows(table) {\n\n\tthis.table = table; //hold Tabulator object\n\tthis.placeholderElement = this.createPlaceholderElement();\n\tthis.hoverElement = false; //floating row header element\n\tthis.checkTimeout = false; //click check timeout holder\n\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\n\tthis.moving = false; //currently moving row\n\tthis.toRow = false; //destination row\n\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\n\tthis.hasHandle = false; //row has handle instead of fully movable row\n\tthis.startY = 0; //starting Y position within header element\n\tthis.startX = 0; //starting X position within header element\n\n\tthis.moveHover = this.moveHover.bind(this);\n\tthis.endMove = this.endMove.bind(this);\n\tthis.tableRowDropEvent = false;\n\n\tthis.touchMove = false;\n\n\tthis.connection = false;\n\tthis.connectionSelectorsTables = false;\n\tthis.connectionSelectorsElements = false;\n\tthis.connectionElements = [];\n\tthis.connections = [];\n\n\tthis.connectedTable = false;\n\tthis.connectedRow = false;\n};\n\nMoveRows.prototype.createPlaceholderElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-row\");\n\tel.classList.add(\"tabulator-row-placeholder\");\n\n\treturn el;\n};\n\nMoveRows.prototype.initialize = function (handle) {\n\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\n\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\n\n\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\n};\n\nMoveRows.prototype.setHandle = function (handle) {\n\tthis.hasHandle = handle;\n};\n\nMoveRows.prototype.initializeGroupHeader = function (group) {\n\tvar self = this,\n\t config = {},\n\t rowEl;\n\n\t//inter table drag drop\n\tconfig.mouseup = function (e) {\n\t\tself.tableRowDrop(e, row);\n\t}.bind(self);\n\n\t//same table drag drop\n\tconfig.mousemove = function (e) {\n\t\tif (e.pageY - Tabulator.prototype.helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) {\n\t\t\tif (self.toRow !== group || !self.toRowAfter) {\n\t\t\t\tvar rowEl = group.getElement();\n\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\tself.moveRow(group, true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (self.toRow !== group || self.toRowAfter) {\n\t\t\t\tvar rowEl = group.getElement();\n\t\t\t\tif (rowEl.previousSibling) {\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\tself.moveRow(group, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}.bind(self);\n\n\tgroup.modules.moveRow = config;\n};\n\nMoveRows.prototype.initializeRow = function (row) {\n\tvar self = this,\n\t config = {},\n\t rowEl;\n\n\t//inter table drag drop\n\tconfig.mouseup = function (e) {\n\t\tself.tableRowDrop(e, row);\n\t}.bind(self);\n\n\t//same table drag drop\n\tconfig.mousemove = function (e) {\n\t\tvar rowEl = row.getElement();\n\n\t\tif (e.pageY - Tabulator.prototype.helpers.elOffset(rowEl).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) {\n\t\t\tif (self.toRow !== row || !self.toRowAfter) {\n\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\tself.moveRow(row, true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (self.toRow !== row || self.toRowAfter) {\n\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\tself.moveRow(row, false);\n\t\t\t}\n\t\t}\n\t}.bind(self);\n\n\tif (!this.hasHandle) {\n\n\t\trowEl = row.getElement();\n\n\t\trowEl.addEventListener(\"mousedown\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\t\tself.startMove(e, row);\n\t\t\t\t}, self.checkPeriod);\n\t\t\t}\n\t\t});\n\n\t\trowEl.addEventListener(\"mouseup\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tif (self.checkTimeout) {\n\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.bindTouchEvents(row, row.getElement());\n\t}\n\n\trow.modules.moveRow = config;\n};\n\nMoveRows.prototype.initializeCell = function (cell) {\n\tvar self = this,\n\t cellEl = cell.getElement(true);\n\n\tcellEl.addEventListener(\"mousedown\", function (e) {\n\t\tif (e.which === 1) {\n\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\tself.startMove(e, cell.row);\n\t\t\t}, self.checkPeriod);\n\t\t}\n\t});\n\n\tcellEl.addEventListener(\"mouseup\", function (e) {\n\t\tif (e.which === 1) {\n\t\t\tif (self.checkTimeout) {\n\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t}\n\t\t}\n\t});\n\n\tthis.bindTouchEvents(cell.row, cellEl);\n};\n\nMoveRows.prototype.bindTouchEvents = function (row, element) {\n\tvar self = this,\n\t startYMove = false,\n\t //shifting center position of the cell\n\tdir = false,\n\t currentRow,\n\t nextRow,\n\t prevRow,\n\t nextRowHeight,\n\t prevRowHeight,\n\t nextRowHeightLast,\n\t prevRowHeightLast;\n\n\telement.addEventListener(\"touchstart\", function (e) {\n\t\tself.checkTimeout = setTimeout(function () {\n\t\t\tself.touchMove = true;\n\t\t\tcurrentRow = row;\n\t\t\tnextRow = row.nextRow();\n\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\tprevRow = row.prevRow();\n\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\tnextRowHeightLast = 0;\n\t\t\tprevRowHeightLast = 0;\n\t\t\tstartYMove = false;\n\n\t\t\tself.startMove(e, row);\n\t\t}, self.checkPeriod);\n\t}, { passive: true });\n\tthis.moving, this.toRow, this.toRowAfter;\n\telement.addEventListener(\"touchmove\", function (e) {\n\n\t\tvar halfCol, diff, moveToRow;\n\n\t\tif (self.moving) {\n\t\t\te.preventDefault();\n\n\t\t\tself.moveHover(e);\n\n\t\t\tif (!startYMove) {\n\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t}\n\n\t\t\tdiff = e.touches[0].pageY - startYMove;\n\n\t\t\tif (diff > 0) {\n\t\t\t\tif (nextRow && diff - nextRowHeightLast > nextRowHeight) {\n\t\t\t\t\tmoveToRow = nextRow;\n\n\t\t\t\t\tif (moveToRow !== row) {\n\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling);\n\t\t\t\t\t\tself.moveRow(moveToRow, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (prevRow && -diff - prevRowHeightLast > prevRowHeight) {\n\t\t\t\t\tmoveToRow = prevRow;\n\n\t\t\t\t\tif (moveToRow !== row) {\n\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement());\n\t\t\t\t\t\tself.moveRow(moveToRow, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (moveToRow) {\n\t\t\t\tcurrentRow = moveToRow;\n\t\t\t\tnextRow = moveToRow.nextRow();\n\t\t\t\tnextRowHeightLast = nextRowHeight;\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\t\tprevRow = moveToRow.prevRow();\n\t\t\t\tprevRowHeightLast = prevRowHeight;\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\t}\n\t\t}\n\t});\n\n\telement.addEventListener(\"touchend\", function (e) {\n\t\tif (self.checkTimeout) {\n\t\t\tclearTimeout(self.checkTimeout);\n\t\t}\n\t\tif (self.moving) {\n\t\t\tself.endMove(e);\n\t\t\tself.touchMove = false;\n\t\t}\n\t});\n};\n\nMoveRows.prototype._bindMouseMove = function () {\n\tvar self = this;\n\n\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\tif ((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove) {\n\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t}\n\t});\n};\n\nMoveRows.prototype._unbindMouseMove = function () {\n\tvar self = this;\n\n\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\tif ((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove) {\n\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t}\n\t});\n};\n\nMoveRows.prototype.startMove = function (e, row) {\n\tvar element = row.getElement();\n\n\tthis.setStartPosition(e, row);\n\n\tthis.moving = row;\n\n\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t//create placeholder\n\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\n\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\n\n\tif (!this.connection) {\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\telement.parentNode.removeChild(element);\n\t} else {\n\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\n\t\tthis.connectToTables(row);\n\t}\n\n\t//create hover element\n\tthis.hoverElement = element.cloneNode(true);\n\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\tif (this.connection) {\n\t\tdocument.body.appendChild(this.hoverElement);\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.top = \"0\";\n\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\n\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\n\t\tthis.hoverElement.style.overflow = \"hidden\";\n\t\tthis.hoverElement.style.pointerEvents = \"none\";\n\t} else {\n\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\n\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.top = \"0\";\n\n\t\tthis._bindMouseMove();\n\t}\n\n\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\n\tthis.moveHover(e);\n};\n\nMoveRows.prototype.setStartPosition = function (e, row) {\n\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\n\t pageY = this.touchMove ? e.touches[0].pageY : e.pageY,\n\t element,\n\t position;\n\n\telement = row.getElement();\n\tif (this.connection) {\n\t\tposition = element.getBoundingClientRect();\n\n\t\tthis.startX = position.left - pageX + window.pageXOffset;\n\t\tthis.startY = position.top - pageY + window.pageYOffset;\n\t} else {\n\t\tthis.startY = pageY - element.getBoundingClientRect().top;\n\t}\n};\n\nMoveRows.prototype.endMove = function (e) {\n\tif (!e || e.which === 1 || this.touchMove) {\n\t\tthis._unbindMouseMove();\n\n\t\tif (!this.connection) {\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t}\n\n\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tif (this.toRow) {\n\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\n\t\t}\n\n\t\tthis.moving = false;\n\t\tthis.toRow = false;\n\t\tthis.toRowAfter = false;\n\n\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\n\t\tif (this.connection) {\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\n\t\t\tthis.disconnectFromTables();\n\t\t}\n\t}\n};\n\nMoveRows.prototype.moveRow = function (row, after) {\n\tthis.toRow = row;\n\tthis.toRowAfter = after;\n};\n\nMoveRows.prototype.moveHover = function (e) {\n\tif (this.connection) {\n\t\tthis.moveHoverConnections.call(this, e);\n\t} else {\n\t\tthis.moveHoverTable.call(this, e);\n\t}\n};\n\nMoveRows.prototype.moveHoverTable = function (e) {\n\tvar rowHolder = this.table.rowManager.getElement(),\n\t scrollTop = rowHolder.scrollTop,\n\t yPos = (this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top + scrollTop,\n\t scrollPos;\n\n\tthis.hoverElement.style.top = yPos - this.startY + \"px\";\n};\n\nMoveRows.prototype.moveHoverConnections = function (e) {\n\tthis.hoverElement.style.left = this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX) + \"px\";\n\tthis.hoverElement.style.top = this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY) + \"px\";\n};\n\nMoveRows.prototype.elementRowDrop = function (e, element, row) {\n\tif (this.table.options.movableRowsElementDrop) {\n\t\tthis.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);\n\t}\n};\n\n//establish connection with other tables\nMoveRows.prototype.connectToTables = function (row) {\n\tvar _this75 = this;\n\n\tvar connectionTables;\n\n\tif (this.connectionSelectorsTables) {\n\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\n\n\t\tthis.table.options.movableRowsSendingStart.call(this.table, connectionTables);\n\n\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\n\t\t\trow: row\n\t\t});\n\t}\n\n\tif (this.connectionSelectorsElements) {\n\n\t\tthis.connectionElements = [];\n\n\t\tif (!Array.isArray(this.connectionSelectorsElements)) {\n\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\n\t\t}\n\n\t\tthis.connectionSelectorsElements.forEach(function (query) {\n\t\t\tif (typeof query === \"string\") {\n\t\t\t\t_this75.connectionElements = _this75.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\n\t\t\t} else {\n\t\t\t\t_this75.connectionElements.push(query);\n\t\t\t}\n\t\t});\n\n\t\tthis.connectionElements.forEach(function (element) {\n\t\t\tvar dropEvent = function dropEvent(e) {\n\t\t\t\t_this75.elementRowDrop(e, element, _this75.moving);\n\t\t\t};\n\n\t\t\telement.addEventListener(\"mouseup\", dropEvent);\n\t\t\telement.tabulatorElementDropEvent = dropEvent;\n\n\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\n\t\t});\n\t}\n};\n\n//disconnect from other tables\nMoveRows.prototype.disconnectFromTables = function () {\n\tvar connectionTables;\n\n\tif (this.connectionSelectorsTables) {\n\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\n\n\t\tthis.table.options.movableRowsSendingStop.call(this.table, connectionTables);\n\n\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\n\t}\n\n\tthis.connectionElements.forEach(function (element) {\n\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\n\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\n\t\tdelete element.tabulatorElementDropEvent;\n\t});\n};\n\n//accept incomming connection\nMoveRows.prototype.connect = function (table, row) {\n\tvar self = this;\n\tif (!this.connectedTable) {\n\t\tthis.connectedTable = table;\n\t\tthis.connectedRow = row;\n\n\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\n\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif (row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup) {\n\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t}\n\t\t});\n\n\t\tself.tableRowDropEvent = self.tableRowDrop.bind(self);\n\n\t\tself.table.element.addEventListener(\"mouseup\", self.tableRowDropEvent);\n\n\t\tthis.table.options.movableRowsReceivingStart.call(this.table, row, table);\n\n\t\treturn true;\n\t} else {\n\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\n\t\treturn false;\n\t}\n};\n\n//close incomming connection\nMoveRows.prototype.disconnect = function (table) {\n\tvar self = this;\n\tif (table === this.connectedTable) {\n\t\tthis.connectedTable = false;\n\t\tthis.connectedRow = false;\n\n\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\n\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif (row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup) {\n\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t}\n\t\t});\n\n\t\tself.table.element.removeEventListener(\"mouseup\", self.tableRowDropEvent);\n\n\t\tthis.table.options.movableRowsReceivingStop.call(this.table, table);\n\t} else {\n\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\");\n\t}\n};\n\nMoveRows.prototype.dropComplete = function (table, row, success) {\n\tvar sender = false;\n\n\tif (success) {\n\n\t\tswitch (_typeof(this.table.options.movableRowsSender)) {\n\t\t\tcase \"string\":\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tsender = this.table.options.movableRowsSender;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (sender) {\n\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t} else {\n\t\t\tif (this.table.options.movableRowsSender) {\n\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t} else {\n\t\tthis.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t}\n\n\tthis.endMove();\n};\n\nMoveRows.prototype.tableRowDrop = function (e, row) {\n\tvar receiver = false,\n\t success = false;\n\n\te.stopImmediatePropagation();\n\n\tswitch (_typeof(this.table.options.movableRowsReceiver)) {\n\t\tcase \"string\":\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\treceiver = this.table.options.movableRowsReceiver;\n\t\t\tbreak;\n\t}\n\n\tif (receiver) {\n\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t} else {\n\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver);\n\t}\n\n\tif (success) {\n\t\tthis.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t} else {\n\t\tthis.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t}\n\n\tthis.table.modules.comms.send(this.connectedTable, \"moveRow\", \"dropcomplete\", {\n\t\trow: row,\n\t\tsuccess: success\n\t});\n};\n\nMoveRows.prototype.receivers = {\n\tinsert: function insert(fromRow, toRow, fromTable) {\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\treturn true;\n\t},\n\n\tadd: function add(fromRow, toRow, fromTable) {\n\t\tthis.table.addRow(fromRow.getData());\n\t\treturn true;\n\t},\n\n\tupdate: function update(fromRow, toRow, fromTable) {\n\t\tif (toRow) {\n\t\t\ttoRow.update(fromRow.getData());\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\treplace: function replace(fromRow, toRow, fromTable) {\n\t\tif (toRow) {\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\t\ttoRow.delete();\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n};\n\nMoveRows.prototype.senders = {\n\tdelete: function _delete(fromRow, toRow, toTable) {\n\t\tfromRow.delete();\n\t}\n};\n\nMoveRows.prototype.commsReceived = function (table, action, data) {\n\tswitch (action) {\n\t\tcase \"connect\":\n\t\t\treturn this.connect(table, data.row);\n\t\t\tbreak;\n\n\t\tcase \"disconnect\":\n\t\t\treturn this.disconnect(table);\n\t\t\tbreak;\n\n\t\tcase \"dropcomplete\":\n\t\t\treturn this.dropComplete(table, data.row, data.success);\n\t\t\tbreak;\n\t}\n};\n\nTabulator.prototype.registerModule(\"moveRow\", MoveRows);\nvar Mutator = function Mutator(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\n\tthis.enabled = true;\n};\n\n//initialize column mutator\nMutator.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t match = false,\n\t config = {};\n\n\tthis.allowedTypes.forEach(function (type) {\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t mutator;\n\n\t\tif (column.definition[key]) {\n\t\t\tmutator = self.lookupMutator(column.definition[key]);\n\n\t\t\tif (mutator) {\n\t\t\t\tmatch = true;\n\n\t\t\t\tconfig[key] = {\n\t\t\t\t\tmutator: mutator,\n\t\t\t\t\tparams: column.definition[key + \"Params\"] || {}\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\tif (match) {\n\t\tcolumn.modules.mutate = config;\n\t}\n};\n\nMutator.prototype.lookupMutator = function (value) {\n\tvar mutator = false;\n\n\t//set column mutator\n\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\tcase \"string\":\n\t\t\tif (this.mutators[value]) {\n\t\t\t\tmutator = this.mutators[value];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tmutator = value;\n\t\t\tbreak;\n\t}\n\n\treturn mutator;\n};\n\n//apply mutator to row\nMutator.prototype.transformRow = function (data, type, updatedData) {\n\tvar self = this,\n\t key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t value;\n\n\tif (this.enabled) {\n\n\t\tself.table.columnManager.traverse(function (column) {\n\t\t\tvar mutator, params, component;\n\n\t\t\tif (column.modules.mutate) {\n\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\n\n\t\t\t\tif (mutator) {\n\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\n\n\t\t\t\t\tif (type == \"data\" || typeof value !== \"undefined\") {\n\t\t\t\t\t\tcomponent = column.getComponent();\n\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\n\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn data;\n};\n\n//apply mutator to new cell value\nMutator.prototype.transformCell = function (cell, value) {\n\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\n\t tempData = {};\n\n\tif (mutator) {\n\t\ttempData = Object.assign(tempData, cell.row.getData());\n\t\tcell.column.setFieldValue(tempData, value);\n\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\n\t} else {\n\t\treturn value;\n\t}\n};\n\nMutator.prototype.enable = function () {\n\tthis.enabled = true;\n};\n\nMutator.prototype.disable = function () {\n\tthis.enabled = false;\n};\n\n//default mutators\nMutator.prototype.mutators = {};\n\nTabulator.prototype.registerModule(\"mutator\", Mutator);\nvar Page = function Page(table) {\n\n\tthis.table = table; //hold Tabulator object\n\n\tthis.mode = \"local\";\n\tthis.progressiveLoad = false;\n\n\tthis.size = 0;\n\tthis.page = 1;\n\tthis.count = 5;\n\tthis.max = 1;\n\n\tthis.displayIndex = 0; //index in display pipeline\n\n\tthis.initialLoad = true;\n\n\tthis.pageSizes = [];\n\n\tthis.dataReceivedNames = {};\n\tthis.dataSentNames = {};\n\n\tthis.createElements();\n};\n\nPage.prototype.createElements = function () {\n\n\tvar button;\n\n\tthis.element = document.createElement(\"span\");\n\tthis.element.classList.add(\"tabulator-paginator\");\n\n\tthis.pagesElement = document.createElement(\"span\");\n\tthis.pagesElement.classList.add(\"tabulator-pages\");\n\n\tbutton = document.createElement(\"button\");\n\tbutton.classList.add(\"tabulator-page\");\n\tbutton.setAttribute(\"type\", \"button\");\n\tbutton.setAttribute(\"role\", \"button\");\n\tbutton.setAttribute(\"aria-label\", \"\");\n\tbutton.setAttribute(\"title\", \"\");\n\n\tthis.firstBut = button.cloneNode(true);\n\tthis.firstBut.setAttribute(\"data-page\", \"first\");\n\n\tthis.prevBut = button.cloneNode(true);\n\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\n\n\tthis.nextBut = button.cloneNode(true);\n\tthis.nextBut.setAttribute(\"data-page\", \"next\");\n\n\tthis.lastBut = button.cloneNode(true);\n\tthis.lastBut.setAttribute(\"data-page\", \"last\");\n\n\tif (this.table.options.paginationSizeSelector) {\n\t\tthis.pageSizeSelect = document.createElement(\"select\");\n\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\n\t}\n};\n\nPage.prototype.generatePageSizeSelectList = function () {\n\tvar _this76 = this;\n\n\tvar pageSizes = [];\n\n\tif (this.pageSizeSelect) {\n\n\t\tif (Array.isArray(this.table.options.paginationSizeSelector)) {\n\t\t\tpageSizes = this.table.options.paginationSizeSelector;\n\t\t\tthis.pageSizes = pageSizes;\n\n\t\t\tif (this.pageSizes.indexOf(this.size) == -1) {\n\t\t\t\tpageSizes.unshift(this.size);\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (this.pageSizes.indexOf(this.size) == -1) {\n\t\t\t\tpageSizes = [];\n\n\t\t\t\tfor (var _i14 = 1; _i14 < 5; _i14++) {\n\t\t\t\t\tpageSizes.push(this.size * _i14);\n\t\t\t\t}\n\n\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t} else {\n\t\t\t\tpageSizes = this.pageSizes;\n\t\t\t}\n\t\t}\n\n\t\twhile (this.pageSizeSelect.firstChild) {\n\t\t\tthis.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\n\t\t}pageSizes.forEach(function (item) {\n\t\t\tvar itemEl = document.createElement(\"option\");\n\t\t\titemEl.value = item;\n\n\t\t\tif (item === true) {\n\t\t\t\t_this76.table.modules.localize.bind(\"pagination|all\", function (value) {\n\t\t\t\t\titemEl.innerHTML = value;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\titemEl.innerHTML = item;\n\t\t\t}\n\n\t\t\t_this76.pageSizeSelect.appendChild(itemEl);\n\t\t});\n\n\t\tthis.pageSizeSelect.value = this.size;\n\t}\n};\n\n//setup pageination\nPage.prototype.initialize = function (hidden) {\n\tvar self = this,\n\t pageSelectLabel,\n\t testElRow,\n\t testElCell;\n\n\t//update param names\n\tthis.dataSentNames = Object.assign({}, this.paginationDataSentNames);\n\tthis.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);\n\n\tthis.dataReceivedNames = Object.assign({}, this.paginationDataReceivedNames);\n\tthis.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);\n\n\t//build pagination element\n\n\t//bind localizations\n\tself.table.modules.localize.bind(\"pagination|first\", function (value) {\n\t\tself.firstBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|first_title\", function (value) {\n\t\tself.firstBut.setAttribute(\"aria-label\", value);\n\t\tself.firstBut.setAttribute(\"title\", value);\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|prev\", function (value) {\n\t\tself.prevBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|prev_title\", function (value) {\n\t\tself.prevBut.setAttribute(\"aria-label\", value);\n\t\tself.prevBut.setAttribute(\"title\", value);\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|next\", function (value) {\n\t\tself.nextBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|next_title\", function (value) {\n\t\tself.nextBut.setAttribute(\"aria-label\", value);\n\t\tself.nextBut.setAttribute(\"title\", value);\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|last\", function (value) {\n\t\tself.lastBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|last_title\", function (value) {\n\t\tself.lastBut.setAttribute(\"aria-label\", value);\n\t\tself.lastBut.setAttribute(\"title\", value);\n\t});\n\n\t//click bindings\n\tself.firstBut.addEventListener(\"click\", function () {\n\t\tself.setPage(1).then(function () {}).catch(function () {});\n\t});\n\n\tself.prevBut.addEventListener(\"click\", function () {\n\t\tself.previousPage().then(function () {}).catch(function () {});\n\t});\n\n\tself.nextBut.addEventListener(\"click\", function () {\n\t\tself.nextPage().then(function () {}).catch(function () {});\n\t});\n\n\tself.lastBut.addEventListener(\"click\", function () {\n\t\tself.setPage(self.max).then(function () {}).catch(function () {});\n\t});\n\n\tif (self.table.options.paginationElement) {\n\t\tself.element = self.table.options.paginationElement;\n\t}\n\n\tif (this.pageSizeSelect) {\n\t\tpageSelectLabel = document.createElement(\"label\");\n\n\t\tself.table.modules.localize.bind(\"pagination|page_size\", function (value) {\n\t\t\tself.pageSizeSelect.setAttribute(\"aria-label\", value);\n\t\t\tself.pageSizeSelect.setAttribute(\"title\", value);\n\t\t\tpageSelectLabel.innerHTML = value;\n\t\t});\n\n\t\tself.element.appendChild(pageSelectLabel);\n\t\tself.element.appendChild(self.pageSizeSelect);\n\n\t\tself.pageSizeSelect.addEventListener(\"change\", function (e) {\n\t\t\tself.setPageSize(self.pageSizeSelect.value == \"true\" ? true : self.pageSizeSelect.value);\n\t\t\tself.setPage(1).then(function () {}).catch(function () {});\n\t\t});\n\t}\n\n\t//append to DOM\n\tself.element.appendChild(self.firstBut);\n\tself.element.appendChild(self.prevBut);\n\tself.element.appendChild(self.pagesElement);\n\tself.element.appendChild(self.nextBut);\n\tself.element.appendChild(self.lastBut);\n\n\tif (!self.table.options.paginationElement && !hidden) {\n\t\tself.table.footerManager.append(self.element, self);\n\t}\n\n\t//set default values\n\tself.mode = self.table.options.pagination;\n\n\tif (self.table.options.paginationSize) {\n\t\tself.size = self.table.options.paginationSize;\n\t} else {\n\t\ttestElRow = document.createElement(\"div\");\n\t\ttestElRow.classList.add(\"tabulator-row\");\n\t\ttestElRow.style.visibility = hidden;\n\n\t\ttestElCell = document.createElement(\"div\");\n\t\ttestElCell.classList.add(\"tabulator-cell\");\n\t\ttestElCell.innerHTML = \"Page Row Test\";\n\n\t\ttestElRow.appendChild(testElCell);\n\n\t\tself.table.rowManager.getTableElement().appendChild(testElRow);\n\n\t\tself.size = Math.floor(self.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\n\n\t\tself.table.rowManager.getTableElement().removeChild(testElRow);\n\t}\n\n\t// self.page = self.table.options.paginationInitialPage || 1;\n\tself.count = self.table.options.paginationButtonCount;\n\n\tself.generatePageSizeSelectList();\n};\n\nPage.prototype.initializeProgressive = function (mode) {\n\tthis.initialize(true);\n\tthis.mode = \"progressive_\" + mode;\n\tthis.progressiveLoad = true;\n};\n\nPage.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nPage.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\n//calculate maximum page from number of rows\nPage.prototype.setMaxRows = function (rowCount) {\n\tif (!rowCount) {\n\t\tthis.max = 1;\n\t} else {\n\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount / this.size);\n\t}\n\n\tif (this.page > this.max) {\n\t\tthis.page = this.max;\n\t}\n};\n\n//reset to first page without triggering action\nPage.prototype.reset = function (force, columnsChanged) {\n\tif (this.mode == \"local\" || force) {\n\t\tthis.page = 1;\n\t}\n\n\tif (columnsChanged) {\n\t\tthis.initialLoad = true;\n\t}\n\n\treturn true;\n};\n\n//set the maxmum page\nPage.prototype.setMaxPage = function (max) {\n\n\tmax = parseInt(max);\n\n\tthis.max = max || 1;\n\n\tif (this.page > this.max) {\n\t\tthis.page = this.max;\n\t\tthis.trigger();\n\t}\n};\n\n//set current page number\nPage.prototype.setPage = function (page) {\n\tvar _this77 = this;\n\n\tvar self = this;\n\n\tswitch (page) {\n\t\tcase \"first\":\n\t\t\treturn this.setPage(1);\n\t\t\tbreak;\n\n\t\tcase \"prev\":\n\t\t\treturn this.previousPage();\n\t\t\tbreak;\n\n\t\tcase \"next\":\n\t\t\treturn this.nextPage();\n\t\t\tbreak;\n\n\t\tcase \"last\":\n\t\t\treturn this.setPage(this.max);\n\t\t\tbreak;\n\t}\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tpage = parseInt(page);\n\n\t\tif (page > 0 && page <= _this77.max || _this77.mode !== \"local\") {\n\t\t\t_this77.page = page;\n\t\t\t_this77.trigger().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\n\t\t\tif (self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.page) {\n\t\t\t\tself.table.modules.persistence.save(\"page\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + _this77.max + \":\", page);\n\t\t\treject();\n\t\t}\n\t});\n};\n\nPage.prototype.setPageToRow = function (row) {\n\tvar _this78 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tvar rows = _this78.table.rowManager.getDisplayRows(_this78.displayIndex - 1);\n\t\tvar index = rows.indexOf(row);\n\n\t\tif (index > -1) {\n\t\t\tvar page = _this78.size === true ? 1 : Math.ceil((index + 1) / _this78.size);\n\n\t\t\t_this78.setPage(page).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\n\t\t\treject();\n\t\t}\n\t});\n};\n\nPage.prototype.setPageSize = function (size) {\n\tif (size !== true) {\n\t\tsize = parseInt(size);\n\t}\n\n\tif (size > 0) {\n\t\tthis.size = size;\n\t}\n\n\tif (this.pageSizeSelect) {\n\t\t// this.pageSizeSelect.value = size;\n\t\tthis.generatePageSizeSelectList();\n\t}\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page) {\n\t\tthis.table.modules.persistence.save(\"page\");\n\t}\n};\n\n//setup the pagination buttons\nPage.prototype._setPageButtons = function () {\n\tvar self = this;\n\n\tvar leftSize = Math.floor((this.count - 1) / 2);\n\tvar rightSize = Math.ceil((this.count - 1) / 2);\n\tvar min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1);\n\tvar max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max);\n\n\twhile (self.pagesElement.firstChild) {\n\t\tself.pagesElement.removeChild(self.pagesElement.firstChild);\n\t}if (self.page == 1) {\n\t\tself.firstBut.disabled = true;\n\t\tself.prevBut.disabled = true;\n\t} else {\n\t\tself.firstBut.disabled = false;\n\t\tself.prevBut.disabled = false;\n\t}\n\n\tif (self.page == self.max) {\n\t\tself.lastBut.disabled = true;\n\t\tself.nextBut.disabled = true;\n\t} else {\n\t\tself.lastBut.disabled = false;\n\t\tself.nextBut.disabled = false;\n\t}\n\n\tfor (var _i15 = min; _i15 <= max; _i15++) {\n\t\tif (_i15 > 0 && _i15 <= self.max) {\n\t\t\tself.pagesElement.appendChild(self._generatePageButton(_i15));\n\t\t}\n\t}\n\n\tthis.footerRedraw();\n};\n\nPage.prototype._generatePageButton = function (page) {\n\tvar self = this,\n\t button = document.createElement(\"button\");\n\n\tbutton.classList.add(\"tabulator-page\");\n\tif (page == self.page) {\n\t\tbutton.classList.add(\"active\");\n\t}\n\n\tbutton.setAttribute(\"type\", \"button\");\n\tbutton.setAttribute(\"role\", \"button\");\n\n\tself.table.modules.localize.bind(\"pagination|page_title\", function (value) {\n\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\n\t\tbutton.setAttribute(\"title\", value + \" \" + page);\n\t});\n\n\tbutton.setAttribute(\"data-page\", page);\n\tbutton.textContent = page;\n\n\tbutton.addEventListener(\"click\", function (e) {\n\t\tself.setPage(page).then(function () {}).catch(function () {});\n\t});\n\n\treturn button;\n};\n\n//previous page\nPage.prototype.previousPage = function () {\n\tvar _this79 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this79.page > 1) {\n\t\t\t_this79.page--;\n\t\t\t_this79.trigger().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\n\t\t\tif (_this79.table.options.persistence && _this79.table.modExists(\"persistence\", true) && _this79.table.modules.persistence.config.page) {\n\t\t\t\t_this79.table.modules.persistence.save(\"page\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\n\t\t\treject();\n\t\t}\n\t});\n};\n\n//next page\nPage.prototype.nextPage = function () {\n\tvar _this80 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this80.page < _this80.max) {\n\t\t\t_this80.page++;\n\t\t\t_this80.trigger().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\n\t\t\tif (_this80.table.options.persistence && _this80.table.modExists(\"persistence\", true) && _this80.table.modules.persistence.config.page) {\n\t\t\t\t_this80.table.modules.persistence.save(\"page\");\n\t\t\t}\n\t\t} else {\n\t\t\tif (!_this80.progressiveLoad) {\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + _this80.max + \":\", _this80.max + 1);\n\t\t\t}\n\t\t\treject();\n\t\t}\n\t});\n};\n\n//return current page number\nPage.prototype.getPage = function () {\n\treturn this.page;\n};\n\n//return max page number\nPage.prototype.getPageMax = function () {\n\treturn this.max;\n};\n\nPage.prototype.getPageSize = function (size) {\n\treturn this.size;\n};\n\nPage.prototype.getMode = function () {\n\treturn this.mode;\n};\n\n//return appropriate rows for current page\nPage.prototype.getRows = function (data) {\n\tvar output, start, end;\n\n\tif (this.mode == \"local\") {\n\t\toutput = [];\n\n\t\tif (this.size === true) {\n\t\t\tstart = 0;\n\t\t\tend = data.length;\n\t\t} else {\n\t\t\tstart = this.size * (this.page - 1);\n\t\t\tend = start + parseInt(this.size);\n\t\t}\n\n\t\tthis._setPageButtons();\n\n\t\tfor (var _i16 = start; _i16 < end; _i16++) {\n\t\t\tif (data[_i16]) {\n\t\t\t\toutput.push(data[_i16]);\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t} else {\n\n\t\tthis._setPageButtons();\n\n\t\treturn data.slice(0);\n\t}\n};\n\nPage.prototype.trigger = function () {\n\tvar _this81 = this;\n\n\tvar left;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tswitch (_this81.mode) {\n\t\t\tcase \"local\":\n\t\t\t\tleft = _this81.table.rowManager.scrollLeft;\n\n\t\t\t\t_this81.table.rowManager.refreshActiveData(\"page\");\n\t\t\t\t_this81.table.rowManager.scrollHorizontal(left);\n\n\t\t\t\t_this81.table.options.pageLoaded.call(_this81.table, _this81.getPage());\n\t\t\t\tresolve();\n\t\t\t\tbreak;\n\n\t\t\tcase \"remote\":\n\t\t\tcase \"progressive_load\":\n\t\t\tcase \"progressive_scroll\":\n\t\t\t\t_this81.table.modules.ajax.blockActiveRequest();\n\t\t\t\t_this81._getRemotePage().then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function () {\n\t\t\t\t\treject();\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", _this81.mode);\n\t\t\t\treject();\n\t\t}\n\t});\n};\n\nPage.prototype._getRemotePage = function () {\n\tvar _this82 = this;\n\n\tvar self = this,\n\t oldParams,\n\t pageParams;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tif (!self.table.modExists(\"ajax\", true)) {\n\t\t\treject();\n\t\t}\n\n\t\t//record old params and restore after request has been made\n\t\toldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {});\n\t\tpageParams = self.table.modules.ajax.getParams();\n\n\t\t//configure request params\n\t\tpageParams[_this82.dataSentNames.page] = self.page;\n\n\t\t//set page size if defined\n\t\tif (_this82.size) {\n\t\t\tpageParams[_this82.dataSentNames.size] = _this82.size;\n\t\t}\n\n\t\t//set sort data if defined\n\t\tif (_this82.table.options.ajaxSorting && _this82.table.modExists(\"sort\")) {\n\t\t\tvar sorters = self.table.modules.sort.getSort();\n\n\t\t\tsorters.forEach(function (item) {\n\t\t\t\tdelete item.column;\n\t\t\t});\n\n\t\t\tpageParams[_this82.dataSentNames.sorters] = sorters;\n\t\t}\n\n\t\t//set filter data if defined\n\t\tif (_this82.table.options.ajaxFiltering && _this82.table.modExists(\"filter\")) {\n\t\t\tvar filters = self.table.modules.filter.getFilters(true, true);\n\t\t\tpageParams[_this82.dataSentNames.filters] = filters;\n\t\t}\n\n\t\tself.table.modules.ajax.setParams(pageParams);\n\n\t\tself.table.modules.ajax.sendRequest(_this82.progressiveLoad).then(function (data) {\n\t\t\tself._parseRemoteData(data);\n\t\t\tresolve();\n\t\t}).catch(function (e) {\n\t\t\treject();\n\t\t});\n\n\t\tself.table.modules.ajax.setParams(oldParams);\n\t});\n};\n\nPage.prototype._parseRemoteData = function (data) {\n\tvar self = this,\n\t left,\n\t data,\n\t margin;\n\n\tif (typeof data[this.dataReceivedNames.last_page] === \"undefined\") {\n\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.last_page + \"' property\");\n\t}\n\n\tif (data[this.dataReceivedNames.data]) {\n\t\tthis.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;\n\n\t\tif (this.progressiveLoad) {\n\t\t\tswitch (this.mode) {\n\t\t\t\tcase \"progressive_load\":\n\n\t\t\t\t\tif (this.page == 1) {\n\t\t\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.table.rowManager.addRows(data[this.dataReceivedNames.data]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.page < this.max) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tself.nextPage().then(function () {}).catch(function () {});\n\t\t\t\t\t\t}, self.table.options.ajaxProgressiveLoadDelay);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"progressive_scroll\":\n\t\t\t\t\tdata = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);\n\n\t\t\t\t\tthis.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);\n\n\t\t\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2;\n\n\t\t\t\t\tif (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) {\n\t\t\t\t\t\tself.nextPage().then(function () {}).catch(function () {});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tleft = this.table.rowManager.scrollLeft;\n\n\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\n\n\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\n\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\n\t\t\tthis.table.options.pageLoaded.call(this.table, this.getPage());\n\t\t}\n\n\t\tthis.initialLoad = false;\n\t} else {\n\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.data + \"' property\");\n\t}\n};\n\n//handle the footer element being redrawn\nPage.prototype.footerRedraw = function () {\n\tvar footer = this.table.footerManager.element;\n\n\tif (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {\n\t\tthis.pagesElement.style.display = 'none';\n\t} else {\n\t\tthis.pagesElement.style.display = '';\n\n\t\tif (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {\n\t\t\tthis.pagesElement.style.display = 'none';\n\t\t}\n\t}\n};\n\n//set the paramter names for pagination requests\nPage.prototype.paginationDataSentNames = {\n\t\"page\": \"page\",\n\t\"size\": \"size\",\n\t\"sorters\": \"sorters\",\n\t// \"sort_dir\":\"sort_dir\",\n\t\"filters\": \"filters\"\n\t// \"filter_value\":\"filter_value\",\n\t// \"filter_type\":\"filter_type\",\n};\n\n//set the property names for pagination responses\nPage.prototype.paginationDataReceivedNames = {\n\t\"current_page\": \"current_page\",\n\t\"last_page\": \"last_page\",\n\t\"data\": \"data\"\n};\n\nTabulator.prototype.registerModule(\"page\", Page);\n\nvar Persistence = function Persistence(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.mode = \"\";\n\tthis.id = \"\";\n\t// this.persistProps = [\"field\", \"width\", \"visible\"];\n\tthis.defWatcherBlock = false;\n\tthis.config = {};\n\tthis.readFunc = false;\n\tthis.writeFunc = false;\n};\n\n// Test for whether localStorage is available for use.\nPersistence.prototype.localStorageTest = function () {\n\tvar testKey = \"_tabulator_test\";\n\n\ttry {\n\t\twindow.localStorage.setItem(testKey, testKey);\n\t\twindow.localStorage.removeItem(testKey);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\n//setup parameters\nPersistence.prototype.initialize = function () {\n\t//determine persistent layout storage type\n\n\tvar mode = this.table.options.persistenceMode,\n\t id = this.table.options.persistenceID,\n\t retreivedData;\n\n\tthis.mode = mode !== true ? mode : this.localStorageTest() ? \"local\" : \"cookie\";\n\n\tif (this.table.options.persistenceReaderFunc) {\n\t\tif (typeof this.table.options.persistenceReaderFunc === \"function\") {\n\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\n\t\t} else {\n\t\t\tif (this.readers[this.table.options.persistenceReaderFunc]) {\n\t\t\t\tthis.readFunc = this.readers[this.table.options.persistenceReaderFunc];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (this.readers[this.mode]) {\n\t\t\tthis.readFunc = this.readers[this.mode];\n\t\t} else {\n\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\n\t\t}\n\t}\n\n\tif (this.table.options.persistenceWriterFunc) {\n\t\tif (typeof this.table.options.persistenceWriterFunc === \"function\") {\n\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\n\t\t} else {\n\t\t\tif (this.readers[this.table.options.persistenceWriterFunc]) {\n\t\t\t\tthis.writeFunc = this.readers[this.table.options.persistenceWriterFunc];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (this.writers[this.mode]) {\n\t\t\tthis.writeFunc = this.writers[this.mode];\n\t\t} else {\n\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\n\t\t}\n\t}\n\n\t//set storage tag\n\tthis.id = \"tabulator-\" + (id || this.table.element.getAttribute(\"id\") || \"\");\n\n\tthis.config = {\n\t\tsort: this.table.options.persistence === true || this.table.options.persistence.sort,\n\t\tfilter: this.table.options.persistence === true || this.table.options.persistence.filter,\n\t\tgroup: this.table.options.persistence === true || this.table.options.persistence.group,\n\t\tpage: this.table.options.persistence === true || this.table.options.persistence.page,\n\t\tcolumns: this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns\n\t};\n\n\t//load pagination data if needed\n\tif (this.config.page) {\n\t\tretreivedData = this.retreiveData(\"page\");\n\n\t\tif (retreivedData) {\n\t\t\tif (typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)) {\n\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\n\t\t\t}\n\n\t\t\tif (typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)) {\n\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\n\t\t\t}\n\t\t}\n\t}\n\n\t//load group data if needed\n\tif (this.config.group) {\n\t\tretreivedData = this.retreiveData(\"group\");\n\n\t\tif (retreivedData) {\n\t\t\tif (typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)) {\n\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\n\t\t\t}\n\t\t\tif (typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)) {\n\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\n\t\t\t}\n\t\t\tif (typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)) {\n\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.config.columns) {\n\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\n\t}\n};\n\nPersistence.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t def,\n\t keys;\n\n\tif (this.config.columns) {\n\t\tthis.defWatcherBlock = true;\n\n\t\tdef = column.getDefinition();\n\n\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\n\n\t\tkeys.forEach(function (key) {\n\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\n\t\t\tvar value = def[key];\n\t\t\tif (props) {\n\t\t\t\tObject.defineProperty(def, key, {\n\t\t\t\t\tset: function set(newValue) {\n\t\t\t\t\t\tvalue = newValue;\n\n\t\t\t\t\t\tif (!self.defWatcherBlock) {\n\t\t\t\t\t\t\tself.save(\"columns\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (props.set) {\n\t\t\t\t\t\t\tprops.set(newValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tget: function get() {\n\t\t\t\t\t\tif (props.get) {\n\t\t\t\t\t\t\tprops.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.defWatcherBlock = false;\n\t}\n};\n\n//load saved definitions\nPersistence.prototype.load = function (type, current) {\n\tvar data = this.retreiveData(type);\n\n\tif (current) {\n\t\tdata = data ? this.mergeDefinition(current, data) : current;\n\t}\n\n\treturn data;\n};\n\n//retreive data from memory\nPersistence.prototype.retreiveData = function (type) {\n\treturn this.readFunc ? this.readFunc(this.id, type) : false;\n};\n\n//merge old and new column definitions\nPersistence.prototype.mergeDefinition = function (oldCols, newCols) {\n\tvar self = this,\n\t output = [];\n\n\t// oldCols = oldCols || [];\n\tnewCols = newCols || [];\n\n\tnewCols.forEach(function (column, to) {\n\n\t\tvar from = self._findColumn(oldCols, column),\n\t\t keys;\n\n\t\tif (from) {\n\n\t\t\tif (self.config.columns === true || self.config.columns == undefined) {\n\t\t\t\tkeys = Object.keys(from);\n\t\t\t\tkeys.push(\"width\");\n\t\t\t} else {\n\t\t\t\tkeys = self.config.columns;\n\t\t\t}\n\n\t\t\tkeys.forEach(function (key) {\n\t\t\t\tif (key !== \"columns\" && typeof column[key] !== \"undefined\") {\n\t\t\t\t\tfrom[key] = column[key];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (from.columns) {\n\t\t\t\tfrom.columns = self.mergeDefinition(from.columns, column.columns);\n\t\t\t}\n\n\t\t\toutput.push(from);\n\t\t}\n\t});\n\n\toldCols.forEach(function (column, i) {\n\t\tvar from = self._findColumn(newCols, column);\n\t\tif (!from) {\n\t\t\tif (output.length > i) {\n\t\t\t\toutput.splice(i, 0, column);\n\t\t\t} else {\n\t\t\t\toutput.push(column);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn output;\n};\n\n//find matching columns\nPersistence.prototype._findColumn = function (columns, subject) {\n\tvar type = subject.columns ? \"group\" : subject.field ? \"field\" : \"object\";\n\n\treturn columns.find(function (col) {\n\t\tswitch (type) {\n\t\t\tcase \"group\":\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\n\t\t\t\tbreak;\n\n\t\t\tcase \"field\":\n\t\t\t\treturn col.field === subject.field;\n\t\t\t\tbreak;\n\n\t\t\tcase \"object\":\n\t\t\t\treturn col === subject;\n\t\t\t\tbreak;\n\t\t}\n\t});\n};\n\n//save data\nPersistence.prototype.save = function (type) {\n\tvar data = {};\n\n\tswitch (type) {\n\t\tcase \"columns\":\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\n\t\t\tbreak;\n\n\t\tcase \"filter\":\n\t\t\tdata = this.table.modules.filter.getFilters();\n\t\t\tbreak;\n\n\t\tcase \"sort\":\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\n\t\t\tbreak;\n\n\t\tcase \"group\":\n\t\t\tdata = this.getGroupConfig();\n\t\t\tbreak;\n\n\t\tcase \"page\":\n\t\t\tdata = this.getPageConfig();\n\t\t\tbreak;\n\t}\n\n\tif (this.writeFunc) {\n\t\tthis.writeFunc(this.id, type, data);\n\t}\n};\n\n//ensure sorters contain no function data\nPersistence.prototype.validateSorters = function (data) {\n\tdata.forEach(function (item) {\n\t\titem.column = item.field;\n\t\tdelete item.field;\n\t});\n\n\treturn data;\n};\n\nPersistence.prototype.getGroupConfig = function () {\n\tvar data = {};\n\n\tif (this.config.group) {\n\t\tif (this.config.group === true || this.config.group.groupBy) {\n\t\t\tdata.groupBy = this.table.options.groupBy;\n\t\t}\n\n\t\tif (this.config.group === true || this.config.group.groupStartOpen) {\n\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\n\t\t}\n\n\t\tif (this.config.group === true || this.config.group.groupHeader) {\n\t\t\tdata.groupHeader = this.table.options.groupHeader;\n\t\t}\n\t}\n\n\treturn data;\n};\n\nPersistence.prototype.getPageConfig = function () {\n\tvar data = {};\n\n\tif (this.config.page) {\n\t\tif (this.config.page === true || this.config.page.size) {\n\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\n\t\t}\n\n\t\tif (this.config.page === true || this.config.page.page) {\n\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\n\t\t}\n\t}\n\n\treturn data;\n};\n\n//parse columns for data to store\nPersistence.prototype.parseColumns = function (columns) {\n\tvar self = this,\n\t definitions = [],\n\t excludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\n\n\tcolumns.forEach(function (column) {\n\t\tvar defStore = {},\n\t\t colDef = column.getDefinition(),\n\t\t keys;\n\n\t\tif (column.isGroup) {\n\t\t\tdefStore.title = colDef.title;\n\t\t\tdefStore.columns = self.parseColumns(column.getColumns());\n\t\t} else {\n\t\t\tdefStore.field = column.getField();\n\n\t\t\tif (self.config.columns === true || self.config.columns == undefined) {\n\t\t\t\tkeys = Object.keys(colDef);\n\t\t\t\tkeys.push(\"width\");\n\t\t\t} else {\n\t\t\t\tkeys = self.config.columns;\n\t\t\t}\n\n\t\t\tkeys.forEach(function (key) {\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\tdefStore.width = column.getWidth();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\tdefStore.visible = column.visible;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1) {\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tdefinitions.push(defStore);\n\t});\n\n\treturn definitions;\n};\n\n// read peristence information from storage\nPersistence.prototype.readers = {\n\tlocal: function local(id, type) {\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\n\n\t\treturn data ? JSON.parse(data) : false;\n\t},\n\tcookie: function cookie(id, type) {\n\t\tvar cookie = document.cookie,\n\t\t key = id + \"-\" + type,\n\t\t cookiePos = cookie.indexOf(key + \"=\"),\n\t\t end,\n\t\t data;\n\n\t\t//if cookie exists, decode and load column data into tabulator\n\t\tif (cookiePos > -1) {\n\t\t\tcookie = cookie.substr(cookiePos);\n\n\t\t\tend = cookie.indexOf(\";\");\n\n\t\t\tif (end > -1) {\n\t\t\t\tcookie = cookie.substr(0, end);\n\t\t\t}\n\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\n\t\t}\n\n\t\treturn data ? JSON.parse(data) : false;\n\t}\n};\n\n//write persistence information to storage\nPersistence.prototype.writers = {\n\tlocal: function local(id, type, data) {\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\n\t},\n\tcookie: function cookie(id, type, data) {\n\t\tvar expireDate = new Date();\n\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\n\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\n\t}\n};\n\nTabulator.prototype.registerModule(\"persistence\", Persistence);\n\nvar Print = function Print(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.element = false;\n\tthis.manualBlock = false;\n};\n\nPrint.prototype.initialize = function () {\n\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\n\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\n};\n\nPrint.prototype.replaceTable = function () {\n\tif (!this.manualBlock) {\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-print-table\");\n\n\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\n\n\t\tthis.table.element.style.display = \"none\";\n\n\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\n\t}\n};\n\nPrint.prototype.cleanup = function () {\n\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\n\n\tif (this.element && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t\tthis.table.element.style.display = \"\";\n\t}\n};\n\nPrint.prototype.printFullscreen = function (visible, style, config) {\n\tvar scrollX = window.scrollX,\n\t scrollY = window.scrollY,\n\t headerEl = document.createElement(\"div\"),\n\t footerEl = document.createElement(\"div\"),\n\t tableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible, \"print\"),\n\t headerContent,\n\t footerContent;\n\n\tthis.manualBlock = true;\n\n\tthis.element = document.createElement(\"div\");\n\tthis.element.classList.add(\"tabulator-print-fullscreen\");\n\n\tif (this.table.options.printHeader) {\n\t\theaderEl.classList.add(\"tabulator-print-header\");\n\n\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\n\n\t\tif (typeof headerContent == \"string\") {\n\t\t\theaderEl.innerHTML = headerContent;\n\t\t} else {\n\t\t\theaderEl.appendChild(headerContent);\n\t\t}\n\n\t\tthis.element.appendChild(headerEl);\n\t}\n\n\tthis.element.appendChild(tableEl);\n\n\tif (this.table.options.printFooter) {\n\t\tfooterEl.classList.add(\"tabulator-print-footer\");\n\n\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\n\n\t\tif (typeof footerContent == \"string\") {\n\t\t\tfooterEl.innerHTML = footerContent;\n\t\t} else {\n\t\t\tfooterEl.appendChild(footerContent);\n\t\t}\n\n\t\tthis.element.appendChild(footerEl);\n\t}\n\n\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\n\tdocument.body.appendChild(this.element);\n\n\tif (this.table.options.printFormatter) {\n\t\tthis.table.options.printFormatter(this.element, tableEl);\n\t}\n\n\twindow.print();\n\n\tthis.cleanup();\n\n\twindow.scrollTo(scrollX, scrollY);\n\n\tthis.manualBlock = false;\n};\n\nTabulator.prototype.registerModule(\"print\", Print);\nvar ReactiveData = function ReactiveData(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.data = false;\n\tthis.blocked = false; //block reactivity while performing update\n\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\n\tthis.currentVersion = 0;\n};\n\nReactiveData.prototype.watchData = function (data) {\n\tvar self = this,\n\t pushFunc,\n\t version;\n\n\tthis.currentVersion++;\n\n\tversion = this.currentVersion;\n\n\tself.unwatchData();\n\n\tself.data = data;\n\n\t//override array push function\n\tself.origFuncs.push = data.push;\n\n\tObject.defineProperty(self.data, \"push\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar args = Array.from(arguments);\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\targs.forEach(function (arg) {\n\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn self.origFuncs.push.apply(data, arguments);\n\t\t}\n\t});\n\n\t//override array unshift function\n\tself.origFuncs.unshift = data.unshift;\n\n\tObject.defineProperty(self.data, \"unshift\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar args = Array.from(arguments);\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\targs.forEach(function (arg) {\n\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\n\t\t}\n\t});\n\n\t//override array shift function\n\tself.origFuncs.shift = data.shift;\n\n\tObject.defineProperty(self.data, \"shift\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar row;\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\tif (self.data.length) {\n\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\n\n\t\t\t\t\tif (row) {\n\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn self.origFuncs.shift.call(data);\n\t\t}\n\t});\n\n\t//override array pop function\n\tself.origFuncs.pop = data.pop;\n\n\tObject.defineProperty(self.data, \"pop\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar row;\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\tif (self.data.length) {\n\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\n\n\t\t\t\t\tif (row) {\n\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn self.origFuncs.pop.call(data);\n\t\t}\n\t});\n\n\t//override array splice function\n\tself.origFuncs.splice = data.splice;\n\n\tObject.defineProperty(self.data, \"splice\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar args = Array.from(arguments),\n\t\t\t start = args[0] < 0 ? data.length + args[0] : args[0],\n\t\t\t end = args[1],\n\t\t\t newRows = args[2] ? args.slice(2) : false,\n\t\t\t startRow;\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\n\t\t\t\t//add new rows\n\t\t\t\tif (newRows) {\n\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\n\n\t\t\t\t\tif (startRow) {\n\t\t\t\t\t\tnewRows.forEach(function (rowData) {\n\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewRows = newRows.slice().reverse();\n\n\t\t\t\t\t\tnewRows.forEach(function (rowData) {\n\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//delete removed rows\n\t\t\t\tif (end !== 0) {\n\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\n\n\t\t\t\t\toldRows.forEach(function (rowData, i) {\n\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\n\n\t\t\t\t\t\tif (row) {\n\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (newRows || end !== 0) {\n\t\t\t\t\tself.table.rowManager.reRenderInPosition();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn self.origFuncs.splice.apply(data, arguments);\n\t\t}\n\t});\n};\n\nReactiveData.prototype.unwatchData = function () {\n\tif (this.data !== false) {\n\t\tfor (var key in this.origFuncs) {\n\t\t\tObject.defineProperty(this.data, key, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true,\n\t\t\t\tvalue: this.origFuncs.key\n\t\t\t});\n\t\t}\n\t}\n};\n\nReactiveData.prototype.watchRow = function (row) {\n\tvar data = row.getData();\n\n\tthis.blocked = true;\n\n\tfor (var key in data) {\n\t\tthis.watchKey(row, data, key);\n\t}\n\n\tif (this.table.options.dataTree) {\n\t\tthis.watchTreeChildren(row);\n\t}\n\n\tthis.blocked = false;\n};\n\nReactiveData.prototype.watchTreeChildren = function (row) {\n\tvar self = this,\n\t childField = row.getData()[this.table.options.dataTreeChildField],\n\t origFuncs = {};\n\n\tfunction rebuildTree() {\n\t\tself.table.modules.dataTree.initializeRow(row);\n\t\tself.table.modules.dataTree.layoutRow(row);\n\t\tself.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t}\n\n\tif (childField) {\n\n\t\torigFuncs.push = childField.push;\n\n\t\tObject.defineProperty(childField, \"push\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.unshift = childField.unshift;\n\n\t\tObject.defineProperty(childField, \"unshift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.shift = childField.shift;\n\n\t\tObject.defineProperty(childField, \"shift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.shift.call(childField);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.pop = childField.pop;\n\n\t\tObject.defineProperty(childField, \"pop\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.pop.call(childField);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.splice = childField.splice;\n\n\t\tObject.defineProperty(childField, \"splice\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t}\n};\n\nReactiveData.prototype.watchKey = function (row, data, key) {\n\tvar self = this,\n\t props = Object.getOwnPropertyDescriptor(data, key),\n\t value = data[key],\n\t version = this.currentVersion;\n\n\tObject.defineProperty(data, key, {\n\t\tset: function set(newValue) {\n\t\t\tvalue = newValue;\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\tvar update = {};\n\t\t\t\tupdate[key] = newValue;\n\t\t\t\trow.updateData(update);\n\t\t\t}\n\n\t\t\tif (props.set) {\n\t\t\t\tprops.set(newValue);\n\t\t\t}\n\t\t},\n\t\tget: function get() {\n\n\t\t\tif (props.get) {\n\t\t\t\tprops.get();\n\t\t\t}\n\n\t\t\treturn value;\n\t\t}\n\t});\n};\n\nReactiveData.prototype.unwatchRow = function (row) {\n\tvar data = row.getData();\n\n\tfor (var key in data) {\n\t\tObject.defineProperty(data, key, {\n\t\t\tvalue: data[key]\n\t\t});\n\t}\n};\n\nReactiveData.prototype.block = function () {\n\tthis.blocked = true;\n};\n\nReactiveData.prototype.unblock = function () {\n\tthis.blocked = false;\n};\n\nTabulator.prototype.registerModule(\"reactiveData\", ReactiveData);\n\nvar ResizeColumns = function ResizeColumns(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.startColumn = false;\n\tthis.startX = false;\n\tthis.startWidth = false;\n\tthis.handle = null;\n\tthis.prevHandle = null;\n};\n\nResizeColumns.prototype.initializeColumn = function (type, column, element) {\n\tvar self = this,\n\t variableHeight = false,\n\t mode = this.table.options.resizableColumns;\n\n\t//set column resize mode\n\tif (type === \"header\") {\n\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\n\t\tcolumn.modules.resize = { variableHeight: variableHeight };\n\t}\n\n\tif (mode === true || mode == type) {\n\n\t\tvar handle = document.createElement('div');\n\t\thandle.className = \"tabulator-col-resize-handle\";\n\n\t\tvar prevHandle = document.createElement('div');\n\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\n\n\t\thandle.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar handleDown = function handleDown(e) {\n\t\t\tvar nearestColumn = column.getLastColumn();\n\n\t\t\tif (nearestColumn && self._checkResizability(nearestColumn)) {\n\t\t\t\tself.startColumn = column;\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\n\t\t\t}\n\t\t};\n\n\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\thandle.addEventListener(\"touchstart\", handleDown, { passive: true });\n\n\t\t//reszie column on double click\n\t\thandle.addEventListener(\"dblclick\", function (e) {\n\t\t\tvar col = column.getLastColumn();\n\n\t\t\tif (col && self._checkResizability(col)) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tcol.reinitializeWidth(true);\n\t\t\t}\n\t\t});\n\n\t\tprevHandle.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar prevHandleDown = function prevHandleDown(e) {\n\t\t\tvar nearestColumn, colIndex, prevColumn;\n\n\t\t\tnearestColumn = column.getFirstColumn();\n\n\t\t\tif (nearestColumn) {\n\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\n\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\n\n\t\t\t\tif (prevColumn && self._checkResizability(prevColumn)) {\n\t\t\t\t\tself.startColumn = column;\n\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\n\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, { passive: true });\n\n\t\t//resize column on double click\n\t\tprevHandle.addEventListener(\"dblclick\", function (e) {\n\t\t\tvar nearestColumn, colIndex, prevColumn;\n\n\t\t\tnearestColumn = column.getFirstColumn();\n\n\t\t\tif (nearestColumn) {\n\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\n\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\n\n\t\t\t\tif (prevColumn && self._checkResizability(prevColumn)) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tprevColumn.reinitializeWidth(true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\telement.appendChild(handle);\n\t\telement.appendChild(prevHandle);\n\t}\n};\n\nResizeColumns.prototype._checkResizability = function (column) {\n\treturn typeof column.definition.resizable != \"undefined\" ? column.definition.resizable : this.table.options.resizableColumns;\n};\n\nResizeColumns.prototype._mouseDown = function (e, column, handle) {\n\tvar self = this;\n\n\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\tfunction mouseMove(e) {\n\t\t// self.table.columnManager.tempScrollBlock();\n\n\t\tif (self.table.rtl) {\n\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\n\t\t} else {\n\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\n\t\t}\n\n\t\tif (self.table.options.virtualDomHoz) {\n\t\t\tself.table.vdomHoz.reinitialize(true);\n\t\t}\n\n\t\tif (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {\n\t\t\tcolumn.checkCellHeights();\n\t\t}\n\t}\n\n\tfunction mouseUp(e) {\n\n\t\t//block editor from taking action while resizing is taking place\n\t\tif (self.startColumn.modules.edit) {\n\t\t\tself.startColumn.modules.edit.blocked = false;\n\t\t}\n\n\t\tif (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {\n\t\t\tcolumn.checkCellHeights();\n\t\t}\n\n\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tif (self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.columns) {\n\t\t\tself.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tself.table.options.columnResized.call(self.table, column.getComponent());\n\t}\n\n\te.stopPropagation(); //prevent resize from interfereing with movable columns\n\n\t//block editor from taking action while resizing is taking place\n\tif (self.startColumn.modules.edit) {\n\t\tself.startColumn.modules.edit.blocked = true;\n\t}\n\n\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\n\tself.startWidth = column.getWidth();\n\n\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\thandle.addEventListener(\"touchmove\", mouseMove, { passive: true });\n\thandle.addEventListener(\"touchend\", mouseUp);\n};\n\nTabulator.prototype.registerModule(\"resizeColumns\", ResizeColumns);\nvar ResizeRows = function ResizeRows(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.startColumn = false;\n\tthis.startY = false;\n\tthis.startHeight = false;\n\tthis.handle = null;\n\tthis.prevHandle = null;\n};\n\nResizeRows.prototype.initializeRow = function (row) {\n\tvar self = this,\n\t rowEl = row.getElement();\n\n\tvar handle = document.createElement('div');\n\thandle.className = \"tabulator-row-resize-handle\";\n\n\tvar prevHandle = document.createElement('div');\n\tprevHandle.className = \"tabulator-row-resize-handle prev\";\n\n\thandle.addEventListener(\"click\", function (e) {\n\t\te.stopPropagation();\n\t});\n\n\tvar handleDown = function handleDown(e) {\n\t\tself.startRow = row;\n\t\tself._mouseDown(e, row, handle);\n\t};\n\n\thandle.addEventListener(\"mousedown\", handleDown);\n\thandle.addEventListener(\"touchstart\", handleDown, { passive: true });\n\n\tprevHandle.addEventListener(\"click\", function (e) {\n\t\te.stopPropagation();\n\t});\n\n\tvar prevHandleDown = function prevHandleDown(e) {\n\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\n\n\t\tif (prevRow) {\n\t\t\tself.startRow = prevRow;\n\t\t\tself._mouseDown(e, prevRow, prevHandle);\n\t\t}\n\t};\n\n\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\n\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, { passive: true });\n\n\trowEl.appendChild(handle);\n\trowEl.appendChild(prevHandle);\n};\n\nResizeRows.prototype._mouseDown = function (e, row, handle) {\n\tvar self = this;\n\n\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\tfunction mouseMove(e) {\n\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\n\t}\n\n\tfunction mouseUp(e) {\n\n\t\t// //block editor from taking action while resizing is taking place\n\t\t// if(self.startColumn.modules.edit){\n\t\t// \tself.startColumn.modules.edit.blocked = false;\n\t\t// }\n\n\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\n\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tself.table.options.rowResized.call(this.table, row.getComponent());\n\t}\n\n\te.stopPropagation(); //prevent resize from interfereing with movable columns\n\n\t//block editor from taking action while resizing is taking place\n\t// if(self.startColumn.modules.edit){\n\t// \tself.startColumn.modules.edit.blocked = true;\n\t// }\n\n\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\n\tself.startHeight = row.getHeight();\n\n\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\n\thandle.addEventListener(\"touchmove\", mouseMove, { passive: true });\n\thandle.addEventListener(\"touchend\", mouseUp);\n};\n\nTabulator.prototype.registerModule(\"resizeRows\", ResizeRows);\nvar ResizeTable = function ResizeTable(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.binding = false;\n\tthis.observer = false;\n\tthis.containerObserver = false;\n\n\tthis.tableHeight = 0;\n\tthis.tableWidth = 0;\n\tthis.containerHeight = 0;\n\tthis.containerWidth = 0;\n\n\tthis.autoResize = false;\n};\n\nResizeTable.prototype.initialize = function (row) {\n\tvar _this83 = this;\n\n\tvar table = this.table,\n\t tableStyle;\n\n\tthis.tableHeight = table.element.clientHeight;\n\tthis.tableWidth = table.element.clientWidth;\n\n\tif (table.element.parentNode) {\n\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t}\n\n\tif (typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\") {\n\n\t\tthis.autoResize = true;\n\n\t\tthis.observer = new ResizeObserver(function (entry) {\n\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\n\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\n\t\t\t\tif (_this83.tableHeight != nodeHeight || _this83.tableWidth != nodeWidth) {\n\t\t\t\t\t_this83.tableHeight = nodeHeight;\n\t\t\t\t\t_this83.tableWidth = nodeWidth;\n\n\t\t\t\t\tif (table.element.parentNode) {\n\t\t\t\t\t\t_this83.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\t\t\t_this83.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (table.options.virtualDomHoz) {\n\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\n\t\t\t\t\t}\n\n\t\t\t\t\ttable.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.observer.observe(table.element);\n\n\t\ttableStyle = window.getComputedStyle(table.element);\n\n\t\tif (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))) {\n\n\t\t\tthis.containerObserver = new ResizeObserver(function (entry) {\n\t\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\n\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\n\t\t\t\t\tif (_this83.containerHeight != nodeHeight || _this83.containerWidth != nodeWidth) {\n\t\t\t\t\t\t_this83.containerHeight = nodeHeight;\n\t\t\t\t\t\t_this83.containerWidth = nodeWidth;\n\t\t\t\t\t\t_this83.tableHeight = table.element.clientHeight;\n\t\t\t\t\t\t_this83.tableWidth = table.element.clientWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (table.options.virtualDomHoz) {\n\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\n\t\t\t\t\t}\n\n\t\t\t\t\ttable.redraw();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\n\t\t}\n\t} else {\n\t\tthis.binding = function () {\n\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\t\t\t\tif (table.options.virtualDomHoz) {\n\t\t\t\t\ttable.vdomHoz.reinitialize(true);\n\t\t\t\t}\n\n\t\t\t\ttable.redraw();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"resize\", this.binding);\n\t}\n};\n\nResizeTable.prototype.clearBindings = function (row) {\n\tif (this.binding) {\n\t\twindow.removeEventListener(\"resize\", this.binding);\n\t}\n\n\tif (this.observer) {\n\t\tthis.observer.unobserve(this.table.element);\n\t}\n\n\tif (this.containerObserver) {\n\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\n\t}\n};\n\nTabulator.prototype.registerModule(\"resizeTable\", ResizeTable);\nvar ResponsiveLayout = function ResponsiveLayout(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.columns = [];\n\tthis.hiddenColumns = [];\n\tthis.mode = \"\";\n\tthis.index = 0;\n\tthis.collapseFormatter = [];\n\tthis.collapseStartOpen = true;\n\tthis.collapseHandleColumn = false;\n};\n\n//generate resposive columns list\nResponsiveLayout.prototype.initialize = function () {\n\tvar self = this,\n\t columns = [];\n\n\tthis.mode = this.table.options.responsiveLayout;\n\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\n\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\n\tthis.hiddenColumns = [];\n\n\t//detemine level of responsivity for each column\n\tthis.table.columnManager.columnsByIndex.forEach(function (column, i) {\n\t\tif (column.modules.responsive) {\n\t\t\tif (column.modules.responsive.order && column.modules.responsive.visible) {\n\t\t\t\tcolumn.modules.responsive.index = i;\n\t\t\t\tcolumns.push(column);\n\n\t\t\t\tif (!column.visible && self.mode === \"collapse\") {\n\t\t\t\t\tself.hiddenColumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t//sort list by responsivity\n\tcolumns = columns.reverse();\n\tcolumns = columns.sort(function (a, b) {\n\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\n\t\treturn diff || b.modules.responsive.index - a.modules.responsive.index;\n\t});\n\n\tthis.columns = columns;\n\n\tif (this.mode === \"collapse\") {\n\t\tthis.generateCollapsedContent();\n\t}\n\n\t//assign collapse column\n\tfor (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i17 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i17 >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i17++];\n\t\t} else {\n\t\t\t_i17 = _iterator.next();\n\t\t\tif (_i17.done) break;\n\t\t\t_ref = _i17.value;\n\t\t}\n\n\t\tvar col = _ref;\n\n\t\tif (col.definition.formatter == \"responsiveCollapse\") {\n\t\t\tthis.collapseHandleColumn = col;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (this.collapseHandleColumn) {\n\t\tif (this.hiddenColumns.length) {\n\t\t\tthis.collapseHandleColumn.show();\n\t\t} else {\n\t\t\tthis.collapseHandleColumn.hide();\n\t\t}\n\t}\n};\n\n//define layout information\nResponsiveLayout.prototype.initializeColumn = function (column) {\n\tvar def = column.getDefinition();\n\n\tcolumn.modules.responsive = { order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible: def.visible === false ? false : true };\n};\n\nResponsiveLayout.prototype.initializeRow = function (row) {\n\tvar el;\n\n\tif (row.type !== \"calc\") {\n\t\tel = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-responsive-collapse\");\n\n\t\trow.modules.responsiveLayout = {\n\t\t\telement: el,\n\t\t\topen: this.collapseStartOpen\n\t\t};\n\n\t\tif (!this.collapseStartOpen) {\n\t\t\tel.style.display = 'none';\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.layoutRow = function (row) {\n\tvar rowEl = row.getElement();\n\n\tif (row.modules.responsiveLayout) {\n\t\trowEl.appendChild(row.modules.responsiveLayout.element);\n\t\tthis.generateCollapsedRowContent(row);\n\t}\n};\n\n//update column visibility\nResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) {\n\tvar index;\n\tif (column.modules.responsive) {\n\t\tcolumn.modules.responsive.visible = visible;\n\t\tthis.initialize();\n\t}\n};\n\nResponsiveLayout.prototype.hideColumn = function (column) {\n\tvar colCount = this.hiddenColumns.length;\n\n\tcolumn.hide(false, true);\n\n\tif (this.mode === \"collapse\") {\n\t\tthis.hiddenColumns.unshift(column);\n\t\tthis.generateCollapsedContent();\n\n\t\tif (this.collapseHandleColumn && !colCount) {\n\t\t\tthis.collapseHandleColumn.show();\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.showColumn = function (column) {\n\tvar index;\n\n\tcolumn.show(false, true);\n\t//set column width to prevent calculation loops on uninitialized columns\n\tcolumn.setWidth(column.getWidth());\n\n\tif (this.mode === \"collapse\") {\n\t\tindex = this.hiddenColumns.indexOf(column);\n\n\t\tif (index > -1) {\n\t\t\tthis.hiddenColumns.splice(index, 1);\n\t\t}\n\n\t\tthis.generateCollapsedContent();\n\n\t\tif (this.collapseHandleColumn && !this.hiddenColumns.length) {\n\t\t\tthis.collapseHandleColumn.hide();\n\t\t}\n\t}\n};\n\n//redraw columns to fit space\nResponsiveLayout.prototype.update = function () {\n\tvar self = this,\n\t working = true;\n\n\twhile (working) {\n\n\t\tvar width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\n\n\t\tvar diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\n\n\t\tif (diff < 0) {\n\t\t\t//table is too wide\n\t\t\tvar column = self.columns[self.index];\n\n\t\t\tif (column) {\n\t\t\t\tself.hideColumn(column);\n\t\t\t\tself.index++;\n\t\t\t} else {\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t} else {\n\n\t\t\t//table has spare space\n\t\t\tvar _column = self.columns[self.index - 1];\n\n\t\t\tif (_column) {\n\t\t\t\tif (diff > 0) {\n\t\t\t\t\tif (diff >= _column.getWidth()) {\n\t\t\t\t\t\tself.showColumn(_column);\n\t\t\t\t\t\tself.index--;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tif (!self.table.rowManager.activeRowsCount) {\n\t\t\tself.table.rowManager.renderEmptyScroll();\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.generateCollapsedContent = function () {\n\tvar self = this,\n\t rows = this.table.rowManager.getDisplayRows();\n\n\trows.forEach(function (row) {\n\t\tself.generateCollapsedRowContent(row);\n\t});\n};\n\nResponsiveLayout.prototype.generateCollapsedRowContent = function (row) {\n\tvar el, contents;\n\n\tif (row.modules.responsiveLayout) {\n\t\tel = row.modules.responsiveLayout.element;\n\n\t\twhile (el.firstChild) {\n\t\t\tel.removeChild(el.firstChild);\n\t\t}contents = this.collapseFormatter(this.generateCollapsedRowData(row));\n\t\tif (contents) {\n\t\t\tel.appendChild(contents);\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.generateCollapsedRowData = function (row) {\n\tvar self = this,\n\t data = row.getData(),\n\t output = [],\n\t mockCellComponent;\n\n\tthis.hiddenColumns.forEach(function (column) {\n\t\tvar value = column.getFieldValue(data);\n\n\t\tif (column.definition.title && column.field) {\n\t\t\tif (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) {\n\n\t\t\t\tmockCellComponent = {\n\t\t\t\t\tvalue: false,\n\t\t\t\t\tdata: {},\n\t\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tgetData: function getData() {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\t\treturn document.createElement(\"div\");\n\t\t\t\t\t},\n\t\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\t\treturn row.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\toutput.push({\n\t\t\t\t\tfield: column.field,\n\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\toutput.push({\n\t\t\t\t\tfield: column.field,\n\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\tvalue: value\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\treturn output;\n};\n\nResponsiveLayout.prototype.formatCollapsedData = function (data) {\n\tvar list = document.createElement(\"table\");\n\n\tdata.forEach(function (item) {\n\t\tvar row = document.createElement(\"tr\");\n\t\tvar titleData = document.createElement(\"td\");\n\t\tvar valueData = document.createElement(\"td\");\n\t\tvar node_content;\n\n\t\tvar titleHighlight = document.createElement(\"strong\");\n\t\ttitleData.appendChild(titleHighlight);\n\t\tthis.table.modules.localize.bind(\"columns|\" + item.field, function (text) {\n\t\t\ttitleHighlight.innerText = text || item.title;\n\t\t});\n\n\t\tif (item.value instanceof Node) {\n\t\t\tnode_content = document.createElement(\"div\");\n\t\t\tnode_content.appendChild(item.value);\n\t\t\tvalueData.appendChild(node_content);\n\t\t} else {\n\t\t\tvalueData.innerHTML = item.value;\n\t\t}\n\n\t\trow.appendChild(titleData);\n\t\trow.appendChild(valueData);\n\t\tlist.appendChild(row);\n\t}, this);\n\n\treturn Object.keys(data).length ? list : \"\";\n};\n\nTabulator.prototype.registerModule(\"responsiveLayout\", ResponsiveLayout);\n\nvar SelectRow = function SelectRow(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.selecting = false; //flag selecting in progress\n\tthis.lastClickedRow = false; //last clicked row\n\tthis.selectPrev = []; //hold previously selected element for drag drop selection\n\tthis.selectedRows = []; //hold selected rows\n\tthis.headerCheckboxElement = null; // hold header select element\n};\n\nSelectRow.prototype.clearSelectionData = function (silent) {\n\tthis.selecting = false;\n\tthis.lastClickedRow = false;\n\tthis.selectPrev = [];\n\tthis.selectedRows = [];\n\n\tif (!silent) {\n\t\tthis._rowSelectionChanged();\n\t}\n};\n\nSelectRow.prototype.initializeRow = function (row) {\n\tvar self = this,\n\t element = row.getElement();\n\n\t// trigger end of row selection\n\tvar endSelect = function endSelect() {\n\n\t\tsetTimeout(function () {\n\t\t\tself.selecting = false;\n\t\t}, 50);\n\n\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\n\t};\n\n\trow.modules.select = { selected: false };\n\n\t//set row selection class\n\tif (self.table.options.selectableCheck.call(this.table, row.getComponent())) {\n\t\telement.classList.add(\"tabulator-selectable\");\n\t\telement.classList.remove(\"tabulator-unselectable\");\n\n\t\tif (self.table.options.selectable && self.table.options.selectable != \"highlight\") {\n\t\t\tif (self.table.options.selectableRangeMode === \"click\") {\n\t\t\t\telement.addEventListener(\"click\", function (e) {\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\tself.lastClickedRow = self.lastClickedRow || row;\n\n\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\n\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\n\n\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\n\n\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\n\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\n\n\t\t\t\t\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\t\t\t\t\ttoggledRows.forEach(function (toggledRow) {\n\t\t\t\t\t\t\t\tif (toggledRow !== self.lastClickedRow) {\n\n\t\t\t\t\t\t\t\t\tif (self.table.options.selectable !== true && !self.isRowSelected(row)) {\n\t\t\t\t\t\t\t\t\t\tif (self.selectedRows.length < self.table.options.selectable) {\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\n\n\t\t\t\t\t\t\tif (self.table.options.selectable !== true) {\n\t\t\t\t\t\t\t\tif (toggledRows.length > self.table.options.selectable) {\n\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tself.selectRows(toggledRows);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t} else if (e.ctrlKey || e.metaKey) {\n\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.deselectRows(undefined, true);\n\t\t\t\t\t\tself.selectRows(row);\n\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\telement.addEventListener(\"click\", function (e) {\n\t\t\t\t\tif (!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!self.selecting) {\n\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telement.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tself.table._clearSelection();\n\n\t\t\t\t\t\tself.selecting = true;\n\n\t\t\t\t\t\tself.selectPrev = [];\n\n\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\n\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\n\n\t\t\t\t\t\tself.toggleRow(row);\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telement.addEventListener(\"mouseenter\", function (e) {\n\t\t\t\t\tif (self.selecting) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\tself.toggleRow(row);\n\n\t\t\t\t\t\tif (self.selectPrev[1] == row) {\n\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telement.addEventListener(\"mouseout\", function (e) {\n\t\t\t\t\tif (self.selecting) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\tself.selectPrev.unshift(row);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} else {\n\t\telement.classList.add(\"tabulator-unselectable\");\n\t\telement.classList.remove(\"tabulator-selectable\");\n\t}\n};\n\n//toggle row selection\nSelectRow.prototype.toggleRow = function (row) {\n\tif (this.table.options.selectableCheck.call(this.table, row.getComponent())) {\n\t\tif (row.modules.select && row.modules.select.selected) {\n\t\t\tthis._deselectRow(row);\n\t\t} else {\n\t\t\tthis._selectRow(row);\n\t\t}\n\t}\n};\n\n//select a number of rows\nSelectRow.prototype.selectRows = function (rows) {\n\tvar _this84 = this;\n\n\tvar rowMatch;\n\n\tswitch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) {\n\t\tcase \"undefined\":\n\t\t\tthis.table.rowManager.rows.forEach(function (row) {\n\t\t\t\t_this84._selectRow(row, true, true);\n\t\t\t});\n\n\t\t\tthis._rowSelectionChanged();\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\n\t\t\tif (rowMatch) {\n\t\t\t\tthis._selectRow(rowMatch, true, true);\n\t\t\t} else {\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach(function (row) {\n\t\t\t\t\t_this84._selectRow(row, true, true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._rowSelectionChanged();\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tif (Array.isArray(rows)) {\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\t_this84._selectRow(row, true, true);\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged();\n\t\t\t} else {\n\t\t\t\tthis._selectRow(rows, false, true);\n\t\t\t}\n\t\t\tbreak;\n\t}\n};\n\n//select an individual row\nSelectRow.prototype._selectRow = function (rowInfo, silent, force) {\n\tvar index;\n\n\t//handle max row count\n\tif (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) {\n\t\tif (this.selectedRows.length >= this.table.options.selectable) {\n\t\t\tif (this.table.options.selectableRollingSelection) {\n\t\t\t\tthis._deselectRow(this.selectedRows[0]);\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar row = this.table.rowManager.findRow(rowInfo);\n\n\tif (row) {\n\t\tif (this.selectedRows.indexOf(row) == -1) {\n\t\t\trow.getElement().classList.add(\"tabulator-selected\");\n\t\t\tif (!row.modules.select) {\n\t\t\t\trow.modules.select = {};\n\t\t\t}\n\n\t\t\trow.modules.select.selected = true;\n\t\t\tif (row.modules.select.checkboxEl) {\n\t\t\t\trow.modules.select.checkboxEl.checked = true;\n\t\t\t}\n\n\t\t\tthis.selectedRows.push(row);\n\n\t\t\tif (this.table.options.dataTreeSelectPropagate) {\n\t\t\t\tthis.childRowSelection(row, true);\n\t\t\t}\n\n\t\t\tif (!silent) {\n\t\t\t\tthis.table.options.rowSelected.call(this.table, row.getComponent());\n\t\t\t}\n\n\t\t\tthis._rowSelectionChanged(silent);\n\t\t}\n\t} else {\n\t\tif (!silent) {\n\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t}\n\t}\n};\n\nSelectRow.prototype.isRowSelected = function (row) {\n\treturn this.selectedRows.indexOf(row) !== -1;\n};\n\n//deselect a number of rows\nSelectRow.prototype.deselectRows = function (rows, silent) {\n\tvar self = this,\n\t rowCount;\n\n\tif (typeof rows == \"undefined\") {\n\n\t\trowCount = self.selectedRows.length;\n\n\t\tfor (var _i18 = 0; _i18 < rowCount; _i18++) {\n\t\t\tself._deselectRow(self.selectedRows[0], true);\n\t\t}\n\n\t\tself._rowSelectionChanged(silent);\n\t} else {\n\t\tif (Array.isArray(rows)) {\n\t\t\trows.forEach(function (row) {\n\t\t\t\tself._deselectRow(row, true);\n\t\t\t});\n\n\t\t\tself._rowSelectionChanged(silent);\n\t\t} else {\n\t\t\tself._deselectRow(rows, silent);\n\t\t}\n\t}\n};\n\n//deselect an individual row\nSelectRow.prototype._deselectRow = function (rowInfo, silent) {\n\tvar self = this,\n\t row = self.table.rowManager.findRow(rowInfo),\n\t index;\n\n\tif (row) {\n\t\tindex = self.selectedRows.findIndex(function (selectedRow) {\n\t\t\treturn selectedRow == row;\n\t\t});\n\n\t\tif (index > -1) {\n\n\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\n\t\t\tif (!row.modules.select) {\n\t\t\t\trow.modules.select = {};\n\t\t\t}\n\n\t\t\trow.modules.select.selected = false;\n\t\t\tif (row.modules.select.checkboxEl) {\n\t\t\t\trow.modules.select.checkboxEl.checked = false;\n\t\t\t}\n\t\t\tself.selectedRows.splice(index, 1);\n\n\t\t\tif (this.table.options.dataTreeSelectPropagate) {\n\t\t\t\tthis.childRowSelection(row, false);\n\t\t\t}\n\n\t\t\tif (!silent) {\n\t\t\t\tself.table.options.rowDeselected.call(this.table, row.getComponent());\n\t\t\t}\n\n\t\t\tself._rowSelectionChanged(silent);\n\t\t}\n\t} else {\n\t\tif (!silent) {\n\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t}\n\t}\n};\n\nSelectRow.prototype.getSelectedData = function () {\n\tvar data = [];\n\n\tthis.selectedRows.forEach(function (row) {\n\t\tdata.push(row.getData());\n\t});\n\n\treturn data;\n};\n\nSelectRow.prototype.getSelectedRows = function () {\n\n\tvar rows = [];\n\n\tthis.selectedRows.forEach(function (row) {\n\t\trows.push(row.getComponent());\n\t});\n\n\treturn rows;\n};\n\nSelectRow.prototype._rowSelectionChanged = function (silent) {\n\tif (this.headerCheckboxElement) {\n\t\tif (this.selectedRows.length === 0) {\n\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t} else if (this.table.rowManager.rows.length === this.selectedRows.length) {\n\t\t\tthis.headerCheckboxElement.checked = true;\n\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t} else {\n\t\t\tthis.headerCheckboxElement.indeterminate = true;\n\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t}\n\t}\n\n\tif (!silent) {\n\t\tthis.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());\n\t}\n};\n\nSelectRow.prototype.registerRowSelectCheckbox = function (row, element) {\n\tif (!row._row.modules.select) {\n\t\trow._row.modules.select = {};\n\t}\n\n\trow._row.modules.select.checkboxEl = element;\n};\n\nSelectRow.prototype.registerHeaderSelectCheckbox = function (element) {\n\tthis.headerCheckboxElement = element;\n};\n\nSelectRow.prototype.childRowSelection = function (row, select) {\n\tvar children = this.table.modules.dataTree.getChildren(row, true);\n\n\tif (select) {\n\t\tfor (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i19 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n\t\t\tvar _ref2;\n\n\t\t\tif (_isArray2) {\n\t\t\t\tif (_i19 >= _iterator2.length) break;\n\t\t\t\t_ref2 = _iterator2[_i19++];\n\t\t\t} else {\n\t\t\t\t_i19 = _iterator2.next();\n\t\t\t\tif (_i19.done) break;\n\t\t\t\t_ref2 = _i19.value;\n\t\t\t}\n\n\t\t\tvar child = _ref2;\n\n\t\t\tthis._selectRow(child, true);\n\t\t}\n\t} else {\n\t\tfor (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i20 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n\t\t\tvar _ref3;\n\n\t\t\tif (_isArray3) {\n\t\t\t\tif (_i20 >= _iterator3.length) break;\n\t\t\t\t_ref3 = _iterator3[_i20++];\n\t\t\t} else {\n\t\t\t\t_i20 = _iterator3.next();\n\t\t\t\tif (_i20.done) break;\n\t\t\t\t_ref3 = _i20.value;\n\t\t\t}\n\n\t\t\tvar _child = _ref3;\n\n\t\t\tthis._deselectRow(_child, true);\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"selectRow\", SelectRow);\n\nvar Sort = function Sort(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.sortList = []; //holder current sort\n\tthis.changed = false; //has the sort changed since last render\n};\n\n//initialize column header for sorting\nSort.prototype.initializeColumn = function (column, content) {\n\tvar self = this,\n\t sorter = false,\n\t colEl,\n\t arrowEl;\n\n\tswitch (_typeof(column.definition.sorter)) {\n\t\tcase \"string\":\n\t\t\tif (self.sorters[column.definition.sorter]) {\n\t\t\t\tsorter = self.sorters[column.definition.sorter];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tsorter = column.definition.sorter;\n\t\t\tbreak;\n\t}\n\n\tcolumn.modules.sort = {\n\t\tsorter: sorter, dir: \"none\",\n\t\tparams: column.definition.sorterParams || {},\n\t\tstartingDir: column.definition.headerSortStartingDir || \"asc\",\n\t\ttristate: typeof column.definition.headerSortTristate !== \"undefined\" ? column.definition.headerSortTristate : this.table.options.headerSortTristate\n\t};\n\n\tif (typeof column.definition.headerSort === \"undefined\" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) {\n\n\t\tcolEl = column.getElement();\n\n\t\tcolEl.classList.add(\"tabulator-sortable\");\n\n\t\tarrowEl = document.createElement(\"div\");\n\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\n\n\t\tif (_typeof(this.table.options.headerSortElement) == \"object\") {\n\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\n\t\t} else {\n\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\n\t\t}\n\n\t\t//create sorter arrow\n\t\tcontent.appendChild(arrowEl);\n\n\t\tcolumn.modules.sort.element = arrowEl;\n\n\t\t//sort on click\n\t\tcolEl.addEventListener(\"click\", function (e) {\n\t\t\tvar dir = \"\",\n\t\t\t sorters = [],\n\t\t\t match = false;\n\n\t\t\tif (column.modules.sort) {\n\t\t\t\tif (column.modules.sort.tristate) {\n\t\t\t\t\tif (column.modules.sort.dir == \"none\") {\n\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (column.modules.sort.dir == column.modules.sort.startingDir) {\n\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdir = \"none\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch (column.modules.sort.dir) {\n\t\t\t\t\t\tcase \"asc\":\n\t\t\t\t\t\t\tdir = \"desc\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"desc\":\n\t\t\t\t\t\t\tdir = \"asc\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\tsorters = self.getSort();\n\n\t\t\t\t\tmatch = sorters.findIndex(function (sorter) {\n\t\t\t\t\t\treturn sorter.field === column.getField();\n\t\t\t\t\t});\n\n\t\t\t\t\tif (match > -1) {\n\t\t\t\t\t\tsorters[match].dir = dir;\n\n\t\t\t\t\t\tif (match != sorters.length - 1) {\n\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\n\t\t\t\t\t\t\tif (dir != \"none\") {\n\t\t\t\t\t\t\t\tsorters.push(match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (dir != \"none\") {\n\t\t\t\t\t\t\tsorters.push({ column: column, dir: dir });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//add to existing sort\n\t\t\t\t\tself.setSort(sorters);\n\t\t\t\t} else {\n\t\t\t\t\tif (dir == \"none\") {\n\t\t\t\t\t\tself.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//sort by column only\n\t\t\t\t\t\tself.setSort(column, dir);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tself.table.rowManager.sorterRefresh(!self.sortList.length);\n\t\t\t}\n\t\t});\n\t}\n};\n\n//check if the sorters have changed since last use\nSort.prototype.hasChanged = function () {\n\tvar changed = this.changed;\n\tthis.changed = false;\n\treturn changed;\n};\n\n//return current sorters\nSort.prototype.getSort = function () {\n\tvar self = this,\n\t sorters = [];\n\n\tself.sortList.forEach(function (item) {\n\t\tif (item.column) {\n\t\t\tsorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir });\n\t\t}\n\t});\n\n\treturn sorters;\n};\n\n//change sort list and trigger sort\nSort.prototype.setSort = function (sortList, dir) {\n\tvar self = this,\n\t newSortList = [];\n\n\tif (!Array.isArray(sortList)) {\n\t\tsortList = [{ column: sortList, dir: dir }];\n\t}\n\n\tsortList.forEach(function (item) {\n\t\tvar column;\n\n\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\n\t\tif (column) {\n\t\t\titem.column = column;\n\t\t\tnewSortList.push(item);\n\t\t\tself.changed = true;\n\t\t} else {\n\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\n\t\t}\n\t});\n\n\tself.sortList = newSortList;\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.sort) {\n\t\tthis.table.modules.persistence.save(\"sort\");\n\t}\n};\n\n//clear sorters\nSort.prototype.clear = function () {\n\tthis.setSort([]);\n};\n\n//find appropriate sorter for column\nSort.prototype.findSorter = function (column) {\n\tvar row = this.table.rowManager.activeRows[0],\n\t sorter = \"string\",\n\t field,\n\t value;\n\n\tif (row) {\n\t\trow = row.getData();\n\t\tfield = column.getField();\n\n\t\tif (field) {\n\n\t\t\tvalue = column.getFieldValue(row);\n\n\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\t\tcase \"undefined\":\n\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {\n\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this.sorters[sorter];\n};\n\n//work through sort list sorting data\nSort.prototype.sort = function (data) {\n\tvar self = this,\n\t sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\n\t sortListActual = [],\n\t rowComponents = [],\n\t lastSort;\n\n\tif (self.table.options.dataSorting) {\n\t\tself.table.options.dataSorting.call(self.table, self.getSort());\n\t}\n\n\tself.clearColumnHeaders();\n\n\tif (!self.table.options.ajaxSorting) {\n\n\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\n\t\tsortList.forEach(function (item, i) {\n\t\t\tvar sortObj = item.column.modules.sort;\n\n\t\t\tif (item.column && sortObj) {\n\n\t\t\t\t//if no sorter has been defined, take a guess\n\t\t\t\tif (!sortObj.sorter) {\n\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\n\t\t\t\t}\n\n\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\n\t\t\t\tsortListActual.push(item);\n\t\t\t}\n\n\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t});\n\n\t\t//sort data\n\t\tif (sortListActual.length) {\n\t\t\tself._sortItems(data, sortListActual);\n\t\t}\n\t} else {\n\t\tsortList.forEach(function (item, i) {\n\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t});\n\t}\n\n\tif (self.table.options.dataSorted) {\n\t\tdata.forEach(function (row) {\n\t\t\trowComponents.push(row.getComponent());\n\t\t});\n\n\t\tself.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);\n\t}\n};\n\n//clear sort arrows on columns\nSort.prototype.clearColumnHeaders = function () {\n\tthis.table.columnManager.getRealColumns().forEach(function (column) {\n\t\tif (column.modules.sort) {\n\t\t\tcolumn.modules.sort.dir = \"none\";\n\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\n\t\t}\n\t});\n};\n\n//set the column header sort direction\nSort.prototype.setColumnHeader = function (column, dir) {\n\tcolumn.modules.sort.dir = dir;\n\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\n};\n\n//sort each item in sort list\nSort.prototype._sortItems = function (data, sortList) {\n\tvar _this85 = this;\n\n\tvar sorterCount = sortList.length - 1;\n\n\tdata.sort(function (a, b) {\n\t\tvar result;\n\n\t\tfor (var i = sorterCount; i >= 0; i--) {\n\t\t\tvar sortItem = sortList[i];\n\n\t\t\tresult = _this85._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\n\t\t\tif (result !== 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t});\n};\n\n//process individual rows for a sort function on active data\nSort.prototype._sortRow = function (a, b, column, dir, params) {\n\tvar el1Comp, el2Comp, colComp;\n\n\t//switch elements depending on search direction\n\tvar el1 = dir == \"asc\" ? a : b;\n\tvar el2 = dir == \"asc\" ? b : a;\n\n\ta = column.getFieldValue(el1.getData());\n\tb = column.getFieldValue(el2.getData());\n\n\ta = typeof a !== \"undefined\" ? a : \"\";\n\tb = typeof b !== \"undefined\" ? b : \"\";\n\n\tel1Comp = el1.getComponent();\n\tel2Comp = el2.getComponent();\n\n\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\n};\n\n//default data sorters\nSort.prototype.sorters = {\n\n\t//sort numbers\n\tnumber: function number(a, b, aRow, bRow, column, dir, params) {\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar decimal = params.decimalSeparator;\n\t\tvar thousand = params.thousandSeparator;\n\t\tvar emptyAlign = 0;\n\n\t\ta = String(a);\n\t\tb = String(b);\n\n\t\tif (thousand) {\n\t\t\ta = a.split(thousand).join(\"\");\n\t\t\tb = b.split(thousand).join(\"\");\n\t\t}\n\n\t\tif (decimal) {\n\t\t\ta = a.split(decimal).join(\".\");\n\t\t\tb = b.split(decimal).join(\".\");\n\t\t}\n\n\t\ta = parseFloat(a);\n\t\tb = parseFloat(b);\n\n\t\t//handle non numeric values\n\t\tif (isNaN(a)) {\n\t\t\temptyAlign = isNaN(b) ? 0 : -1;\n\t\t} else if (isNaN(b)) {\n\t\t\temptyAlign = 1;\n\t\t} else {\n\t\t\t//compare valid values\n\t\t\treturn a - b;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t},\n\n\t//sort strings\n\tstring: function string(a, b, aRow, bRow, column, dir, params) {\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar emptyAlign = 0;\n\t\tvar locale;\n\n\t\t//handle empty values\n\t\tif (!a) {\n\t\t\temptyAlign = !b ? 0 : -1;\n\t\t} else if (!b) {\n\t\t\temptyAlign = 1;\n\t\t} else {\n\t\t\t//compare valid values\n\t\t\tswitch (_typeof(params.locale)) {\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tif (params.locale) {\n\t\t\t\t\t\tlocale = this.table.modules.localize.getLocale();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"string\":\n\t\t\t\t\tlocale = params.locale;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t},\n\n\t//sort date\n\tdate: function date(a, b, aRow, bRow, column, dir, params) {\n\t\tif (!params.format) {\n\t\t\tparams.format = \"DD/MM/YYYY\";\n\t\t}\n\n\t\treturn this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);\n\t},\n\n\t//sort HH:mm formatted times\n\ttime: function time(a, b, aRow, bRow, column, dir, params) {\n\t\tif (!params.format) {\n\t\t\tparams.format = \"HH:mm\";\n\t\t}\n\n\t\treturn this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);\n\t},\n\n\t//sort datetime\n\tdatetime: function datetime(a, b, aRow, bRow, column, dir, params) {\n\t\tvar format = params.format || \"DD/MM/YYYY HH:mm:ss\",\n\t\t alignEmptyValues = params.alignEmptyValues,\n\t\t emptyAlign = 0;\n\n\t\tif (typeof moment != \"undefined\") {\n\t\t\ta = moment(a, format);\n\t\t\tb = moment(b, format);\n\n\t\t\tif (!a.isValid()) {\n\t\t\t\temptyAlign = !b.isValid() ? 0 : -1;\n\t\t\t} else if (!b.isValid()) {\n\t\t\t\temptyAlign = 1;\n\t\t\t} else {\n\t\t\t\t//compare valid values\n\t\t\t\treturn a - b;\n\t\t\t}\n\n\t\t\t//fix empty values in position\n\t\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\t\temptyAlign *= -1;\n\t\t\t}\n\n\t\t\treturn emptyAlign;\n\t\t} else {\n\t\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on moment.js\");\n\t\t}\n\t},\n\n\t//sort booleans\n\tboolean: function boolean(a, b, aRow, bRow, column, dir, params) {\n\t\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\n\t\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\n\n\t\treturn el1 - el2;\n\t},\n\n\t//sort if element contains any data\n\tarray: function array(a, b, aRow, bRow, column, dir, params) {\n\t\tvar el1 = 0;\n\t\tvar el2 = 0;\n\t\tvar type = params.type || \"length\";\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar emptyAlign = 0;\n\n\t\tfunction calc(value) {\n\n\t\t\tswitch (type) {\n\t\t\t\tcase \"length\":\n\t\t\t\t\treturn value.length;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"sum\":\n\t\t\t\t\treturn value.reduce(function (c, d) {\n\t\t\t\t\t\treturn c + d;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"max\":\n\t\t\t\t\treturn Math.max.apply(null, value);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"min\":\n\t\t\t\t\treturn Math.min.apply(null, value);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"avg\":\n\t\t\t\t\treturn value.reduce(function (c, d) {\n\t\t\t\t\t\treturn c + d;\n\t\t\t\t\t}) / value.length;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//handle non array values\n\t\tif (!Array.isArray(a)) {\n\t\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\n\t\t} else if (!Array.isArray(b)) {\n\t\t\talignEmptyValues = 1;\n\t\t} else {\n\n\t\t\t//compare valid values\n\t\t\tel1 = a ? calc(a) : 0;\n\t\t\tel2 = b ? calc(b) : 0;\n\n\t\t\treturn el1 - el2;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t},\n\n\t//sort if element contains any data\n\texists: function exists(a, b, aRow, bRow, column, dir, params) {\n\t\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\n\t\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\n\n\t\treturn el1 - el2;\n\t},\n\n\t//sort alpha numeric strings\n\talphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) {\n\t\tvar a,\n\t\t b,\n\t\t a1,\n\t\t b1,\n\t\t i = 0,\n\t\t L,\n\t\t rx = /(\\d+)|(\\D+)/g,\n\t\t rd = /\\d/;\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar emptyAlign = 0;\n\n\t\t//handle empty values\n\t\tif (!as && as !== 0) {\n\t\t\temptyAlign = !bs && bs !== 0 ? 0 : -1;\n\t\t} else if (!bs && bs !== 0) {\n\t\t\temptyAlign = 1;\n\t\t} else {\n\n\t\t\tif (isFinite(as) && isFinite(bs)) return as - bs;\n\t\t\ta = String(as).toLowerCase();\n\t\t\tb = String(bs).toLowerCase();\n\t\t\tif (a === b) return 0;\n\t\t\tif (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\t\ta = a.match(rx);\n\t\t\tb = b.match(rx);\n\t\t\tL = a.length > b.length ? b.length : a.length;\n\t\t\twhile (i < L) {\n\t\t\t\ta1 = a[i];\n\t\t\t\tb1 = b[i++];\n\t\t\t\tif (a1 !== b1) {\n\t\t\t\t\tif (isFinite(a1) && isFinite(b1)) {\n\t\t\t\t\t\tif (a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\t\tif (b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\t\treturn a1 - b1;\n\t\t\t\t\t} else return a1 > b1 ? 1 : -1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn a.length > b.length;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t}\n};\n\nTabulator.prototype.registerModule(\"sort\", Sort);\n\nvar Validate = function Validate(table) {\n\tthis.table = table;\n\tthis.invalidCells = [];\n};\n\n//validate\nValidate.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t config = [],\n\t validator;\n\n\tif (column.definition.validator) {\n\n\t\tif (Array.isArray(column.definition.validator)) {\n\t\t\tcolumn.definition.validator.forEach(function (item) {\n\t\t\t\tvalidator = self._extractValidator(item);\n\n\t\t\t\tif (validator) {\n\t\t\t\t\tconfig.push(validator);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalidator = this._extractValidator(column.definition.validator);\n\n\t\t\tif (validator) {\n\t\t\t\tconfig.push(validator);\n\t\t\t}\n\t\t}\n\n\t\tcolumn.modules.validate = config.length ? config : false;\n\t}\n};\n\nValidate.prototype._extractValidator = function (value) {\n\tvar type, params, pos;\n\n\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\tcase \"string\":\n\t\t\tpos = value.indexOf(':');\n\n\t\t\tif (pos > -1) {\n\t\t\t\ttype = value.substring(0, pos);\n\t\t\t\tparams = value.substring(pos + 1);\n\t\t\t} else {\n\t\t\t\ttype = value;\n\t\t\t}\n\n\t\t\treturn this._buildValidator(type, params);\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\treturn this._buildValidator(value);\n\t\t\tbreak;\n\n\t\tcase \"object\":\n\t\t\treturn this._buildValidator(value.type, value.parameters);\n\t\t\tbreak;\n\t}\n};\n\nValidate.prototype._buildValidator = function (type, params) {\n\n\tvar func = typeof type == \"function\" ? type : this.validators[type];\n\n\tif (!func) {\n\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\n\t\treturn false;\n\t} else {\n\t\treturn {\n\t\t\ttype: typeof type == \"function\" ? \"function\" : type,\n\t\t\tfunc: func,\n\t\t\tparams: params\n\t\t};\n\t}\n};\n\nValidate.prototype.validate = function (validators, cell, value) {\n\tvar self = this,\n\t valid = [],\n\t invalidIndex = this.invalidCells.indexOf(cell);\n\n\tif (validators) {\n\t\tvalidators.forEach(function (item) {\n\t\t\tif (!item.func.call(self, cell.getComponent(), value, item.params)) {\n\t\t\t\tvalid.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\tparameters: item.params\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tvalid = valid.length ? valid : true;\n\n\tif (!cell.modules.validate) {\n\t\tcell.modules.validate = {};\n\t}\n\n\tif (valid === true) {\n\t\tcell.modules.validate.invalid = false;\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\n\t\tif (invalidIndex > -1) {\n\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t}\n\t} else {\n\t\tcell.modules.validate.invalid = true;\n\n\t\tif (this.table.options.validationMode !== \"manual\") {\n\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t}\n\n\t\tif (invalidIndex == -1) {\n\t\t\tthis.invalidCells.push(cell);\n\t\t}\n\t}\n\n\treturn valid;\n};\n\nValidate.prototype.getInvalidCells = function () {\n\tvar output = [];\n\n\tthis.invalidCells.forEach(function (cell) {\n\t\toutput.push(cell.getComponent());\n\t});\n\n\treturn output;\n};\n\nValidate.prototype.clearValidation = function (cell) {\n\tvar invalidIndex;\n\n\tif (cell.modules.validate && cell.modules.validate.invalid) {\n\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\tcell.modules.validate.invalid = false;\n\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\n\t\tif (invalidIndex > -1) {\n\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t}\n\t}\n};\n\nValidate.prototype.validators = {\n\n\t//is integer\n\tinteger: function integer(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvalue = Number(value);\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n\t},\n\n\t//is float\n\tfloat: function float(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvalue = Number(value);\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\n\t},\n\n\t//must be a number\n\tnumeric: function numeric(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn !isNaN(value);\n\t},\n\n\t//must be a string\n\tstring: function string(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn isNaN(value);\n\t},\n\n\t//maximum value\n\tmax: function max(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) <= parameters;\n\t},\n\n\t//minimum value\n\tmin: function min(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) >= parameters;\n\t},\n\n\t//starts with value\n\tstarts: function starts(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\n\t},\n\n\t//ends with value\n\tends: function ends(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\n\t},\n\n\t//minimum string length\n\tminLength: function minLength(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length >= parameters;\n\t},\n\n\t//maximum string length\n\tmaxLength: function maxLength(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length <= parameters;\n\t},\n\n\t//in provided value list\n\tin: function _in(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (typeof parameters == \"string\") {\n\t\t\tparameters = parameters.split(\"|\");\n\t\t}\n\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\n\t},\n\n\t//must match provided regex\n\tregex: function regex(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvar reg = new RegExp(parameters);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//value must be unique in this column\n\tunique: function unique(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvar unique = true;\n\n\t\tvar cellData = cell.getData();\n\t\tvar column = cell.getColumn()._getSelf();\n\n\t\tthis.table.rowManager.rows.forEach(function (row) {\n\t\t\tvar data = row.getData();\n\n\t\t\tif (data !== cellData) {\n\t\t\t\tif (value == column.getFieldValue(data)) {\n\t\t\t\t\tunique = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn unique;\n\t},\n\n\t//must have a value\n\trequired: function required(cell, value, parameters) {\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\n\t}\n};\n\nTabulator.prototype.registerModule(\"validate\", Validate);\n\nexport default Tabulator;","/**\n * Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nconst {replace} = '';\n\n// escape\nconst es = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;\nconst ca = /[&<>'\"]/g;\n\nconst esca = {\n '&': '&',\n '<': '<',\n '>': '>',\n \"'\": ''',\n '\"': '"'\n};\nconst pe = m => esca[m];\n\n/**\n * Safely escape HTML entities such as `&`, `<`, `>`, `\"`, and `'`.\n * @param {string} es the input to safely escape\n * @returns {string} the escaped input, and it **throws** an error if\n * the input type is unexpected, except for boolean and numbers,\n * converted as string.\n */\nexport const escape = es => replace.call(es, ca, pe);\n\n\n// unescape\nconst unes = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"'\n};\nconst cape = m => unes[m];\n\n/**\n * Safely unescape previously escaped entities such as `&`, `<`, `>`, `\"`,\n * and `'`.\n * @param {string} un a previously escaped string\n * @returns {string} the unescaped input, and it **throws** an error if\n * the input type is unexpected, except for boolean and numbers,\n * converted as string.\n */\nexport const unescape = un => replace.call(un, es, cape);\n","import { Column, ColumnSorter, ColumnAggregatorFunction } from './table.types';\nimport Tabulator from 'tabulator-tables';\nimport { escape } from 'html-escaper';\nimport { ElementPool } from './element-pool';\nimport { pickBy, negate } from 'lodash-es';\n\nexport class ColumnDefinitionFactory {\n constructor(private pool: ElementPool) {\n this.create = this.create.bind(this);\n }\n\n /**\n * Create Tabulator column definitions from a limel-table column configuration\n *\n * @param column - config describing the column\n * @returns Tabulator column\n */\n public create(column: Column<object>): Tabulator.ColumnDefinition {\n const definition: Tabulator.ColumnDefinition = {\n title: column.title,\n field: column.field,\n hozAlign: column.horizontalAlign,\n headerSort: column.headerSort,\n headerSortStartingDir: 'desc',\n };\n\n if (column.headerComponent) {\n definition.titleFormatter = formatHeader(column);\n }\n\n if (column.component?.name || column.formatter) {\n definition.formatter = createFormatter(column, this.pool);\n definition.formatterParams = column as object;\n }\n\n if (column.aggregator) {\n definition.bottomCalc = getColumnAggregator(column);\n }\n\n return definition;\n }\n}\n\n/**\n * Formats the header of the column\n *\n * @param column - the configuration for the column\n * @returns custom component that renders a column header\n */\nexport const formatHeader = (column: Column) => (): string | HTMLElement => {\n const headerElement = document.createElement('div');\n headerElement.setAttribute('class', 'lime-col-title__custom-component');\n\n const titleElement = document.createElement('span');\n titleElement.setAttribute('class', 'title-component-text');\n titleElement.textContent = column.title;\n\n const customElement = document.createElement(column.headerComponent.name);\n customElement.setAttribute('class', 'title-component-slot');\n\n let props: object = column.headerComponent.props || {};\n if (column.headerComponent.propsFactory) {\n props = {\n ...props,\n // we pass null to propsFactory function because no data in column header\n ...column.headerComponent.propsFactory(null),\n };\n }\n\n setElementProperties(customElement, props);\n\n headerElement.append(titleElement);\n headerElement.append(customElement);\n\n return headerElement;\n};\n\n/**\n * Create a formatter to be used to format values in a column\n *\n * @param column - config describing the column\n * @param pool - pool to get custom components from\n * @returns Tabulator formatter\n */\nexport function createFormatter(\n column: Column,\n pool: ElementPool\n): Tabulator.Formatter {\n if (!column.component?.name) {\n return formatCell;\n }\n\n if (!columnElementExists(column)) {\n console.warn(\n `Failed to render custom component for column \"${column.field.toString()}\". Custom element <${\n column.component.name\n }/> does not exist. Using the default formatter.`\n );\n\n return formatCell;\n }\n\n return (cell: Tabulator.CellComponent) => {\n const value = formatCell(cell, column);\n\n return createCustomComponent(cell, column, value, pool);\n };\n}\n\nfunction columnElementExists(column: Column<any>) {\n const name = column.component.name;\n if (typeof name === 'string') {\n const isNativeElement = !name.includes('-');\n const customElementExists = customElements.get(column.component.name);\n\n return isNativeElement || customElementExists;\n } else {\n return false;\n }\n}\n\n/**\n * Format the value of a cell in the table\n *\n * @param cell - the cell being rendered in the table\n * @param column - configuration for the current column\n * @returns the formatted value\n */\nexport function formatCell(\n cell: Tabulator.CellComponent,\n column: Column\n): string {\n const data = cell.getData();\n let value = cell.getValue();\n\n if (column.formatter) {\n value = column.formatter(value, data);\n }\n\n if (typeof value === 'string' && !column.component) {\n value = escape(value);\n }\n\n return value;\n}\n\n/**\n * Create a custom component that renders a cell value\n *\n * @param cell - Tabulator cell\n * @param column - lime-elements column configuration\n * @param value - the value of the cell being rendered\n * @param pool - pool to get custom components from\n * @returns custom component that renders a value in the table\n */\nexport function createCustomComponent(\n cell: Tabulator.CellComponent,\n column: Column,\n value: string,\n pool: ElementPool\n): HTMLElement {\n const field = cell.getField();\n const data = cell.getData();\n\n const element = pool.get(column.component.name);\n let props: object = column.component.props || {};\n if (column.component.propsFactory) {\n props = {\n ...props,\n ...column.component.propsFactory(data),\n };\n }\n\n props = {\n ...props,\n field: field,\n value: value,\n data: data,\n };\n\n element.style.display = 'inline-block';\n setElementProperties(element, props);\n\n createResizeObserver(element, cell.getColumn());\n\n return element;\n}\n\n/**\n * Set all properties for a custom element, including event listeners\n *\n * @param element - the custom element\n * @param props - object of properties and event listeners\n */\nexport function setElementProperties(element: HTMLElement, props: object) {\n const properties = pickBy(props, negate(isEventListener));\n Object.assign(element, properties);\n\n const listeners = pickBy(props, isEventListener);\n for (const [key, value] of Object.entries(listeners)) {\n const event = getEventName(key);\n element.addEventListener(event, value as any);\n }\n}\n\n/**\n * Check if a property is an event listener.\n *\n * An event listener has to be a function and its property name have to start\n * with \"on\" followed by the name of the event in camel case, e.g. \"onEventName\"\n *\n * @param value - the value to check\n * @param key - name of the property\n * @returns true if the property of the object is an event listener\n */\nfunction isEventListener(value: any, key: string): boolean {\n if (typeof value !== 'function') {\n return false;\n }\n\n return /^on[A-Z]/.test(key);\n}\n\n/**\n * Get the name of an event from the name of an event listener\n *\n * E.g. \"onMyEvent\" will return \"myEvent\"\n *\n * @param eventListener - name of the event listener\n * @returns the name of the event\n */\nfunction getEventName(eventListener: string): string {\n return eventListener.charAt(2).toLowerCase() + eventListener.slice(3);\n}\n\nfunction createResizeObserver(\n element: HTMLElement,\n column: Tabulator.ColumnComponent\n) {\n if (!('ResizeObserver' in window)) {\n return;\n }\n\n const RESIZE_TIMEOUT = 1000;\n const COLUMN_PADDING = 16;\n\n const observer = new ResizeObserver(() => {\n const width = element.getBoundingClientRect().width;\n const newWidth = width + COLUMN_PADDING;\n\n if (newWidth < column.getWidth()) {\n return;\n }\n\n column.setWidth(newWidth);\n });\n observer.observe(element);\n\n // We give the component some time to resize itself before we\n // stop listening for resize events\n setTimeout(() => {\n observer.unobserve(element);\n }, RESIZE_TIMEOUT);\n}\n\n// Tabulator seems to also have this `field` property, that does not appear on\n// the interface for some reason\ninterface TabulatorSorter extends Tabulator.Sorter {\n field: string;\n}\n\n/**\n * Create a column sorter from a tabulator sorter\n *\n * @param columns - all available columns in the table\n * @returns function that creates a sorter from a tabulator sorter\n */\nexport const createColumnSorter =\n (columns: Column[]) =>\n (sorter: TabulatorSorter): ColumnSorter => {\n const column = columns.find((col) => col.field === sorter.field);\n const direction = sorter.dir.toUpperCase() as 'ASC' | 'DESC';\n\n return {\n column: column,\n direction: direction,\n };\n };\n\n/**\n *\n * @param column\n */\nexport function getColumnAggregator(column: Column): Tabulator.ColumnCalc {\n const aggregator = column.aggregator;\n if (isAggregatorFunction(aggregator)) {\n return (values: any[], data: object[]) => {\n return aggregator(column, values, data);\n };\n }\n\n return aggregator;\n}\n\nfunction isAggregatorFunction(value: any): value is ColumnAggregatorFunction {\n return typeof value === 'function';\n}\n","export class ElementPool {\n private pool: Record<string, HTMLElement[]>;\n private usedElements: WeakMap<Element, boolean>;\n private document: Document;\n\n constructor(document: Document) {\n this.document = document;\n this.releaseAll();\n this.clear();\n }\n\n /**\n * Get an element from the pool\n *\n * @param name - tag name of the element\n * @returns the element\n */\n public get(name: string): HTMLElement {\n let element = this.pool[name]?.find(this.isFree);\n if (!element) {\n element = this.createElement(name);\n }\n\n this.usedElements.set(element, true);\n\n return element;\n }\n\n private isFree = (element: HTMLElement) => {\n return !this.usedElements.has(element);\n };\n\n /**\n * Release an element from the pool so that it can be reused\n *\n * @param element - the element to release from the pool\n */\n public release(element: HTMLElement): void {\n this.usedElements.delete(element);\n }\n\n /**\n * Release all elements from the pool so that they can be reused\n */\n public releaseAll() {\n this.usedElements = new WeakMap();\n }\n\n /**\n * Remove all elements from the pool and makes them available for garbage\n * collection\n */\n public clear() {\n this.pool = {};\n }\n\n private createElement(name: string) {\n const element = this.document.createElement(name);\n if (!(name in this.pool)) {\n this.pool[name] = [];\n }\n\n this.pool[name].push(element);\n\n return element;\n }\n}\n","/**\n * Contains changes made to a selection\n */\nexport interface SelectionChangeSet {\n /**\n * Tells whether the items were selected or deselected\n */\n selected: boolean;\n /**\n * Gets the affected items\n */\n items: any[];\n /**\n * Gets the indexes of the affected items\n */\n indexes: number[];\n}\n\n/**\n * Contains a set of selected data objects with methods for adding and removing\n * items to the selection by referring to them by their index/position.\n * Maintains a memory of the last toggled item which can be used to select or\n * deselect a range of items between the last toggled item and a given item.\n */\nexport class Selection {\n private selectedItems: Set<any>;\n private lastToggledIndex: number;\n\n /**\n * Creates an instance of the Selection class.\n * The provided function `getDataByIndex` is used to provide data for the\n * selected items when selection is toggled by using the item index,\n * which can be the row position in a table.\n *\n * @param getDataByIndex - A function that returns the data at the given index\n */\n constructor(private getDataByIndex: (index: number) => any) {\n this.clear();\n }\n\n /**\n * @returns The size of the selection\n */\n get size(): number {\n return this.selectedItems.size;\n }\n\n /**\n * @returns The selected items\n */\n get items(): any[] {\n return [...this.selectedItems];\n }\n\n /**\n * @param items - The selected items\n */\n set items(items: any[]) {\n this.selectedItems = new Set(items);\n this.lastToggledIndex = -1;\n }\n\n /**\n * Checks whether the given item exist in the selection\n *\n * @param data - The data to look up\n * @returns `true` if the given data exist in the selection, otherwise `false`\n */\n public has(data: any) {\n return this.selectedItems.has(data);\n }\n\n /**\n * Toggles the item at the given index in the selection\n *\n * @param index - The index of the item to toggle\n * @returns The changes made to the selection\n */\n public toggleSelection(index: number): SelectionChangeSet {\n return this.toggleRange(index, index);\n }\n\n /**\n * Toggles the items from the last toggled index to the given index in the selection.\n * The toggled items will be toggled as the item at the given index no matter\n * their current state in the selection.\n * Initially, when no last toggled index exist, this function behaves like\n * `toggleSelection`.\n *\n * @param index - The index of the item to toggle\n * @returns The changes made to the selection\n */\n public toggleSelectionFromLastIndex(index: number): SelectionChangeSet {\n if (this.lastToggledIndex < 0) {\n return this.toggleSelection(index);\n }\n\n return this.toggleRange(this.lastToggledIndex, index);\n }\n\n /**\n * Clears the current selection and resets last toggled index\n */\n public clear() {\n this.selectedItems = new Set();\n this.lastToggledIndex = -1;\n }\n\n private toggleRange = (\n fromIndex: number,\n toIndex: number\n ): SelectionChangeSet => {\n const select = !this.selectedItems.has(this.getDataByIndex(toIndex));\n\n const lowerBound = Math.min(fromIndex, toIndex);\n const upperBound = Math.max(fromIndex, toIndex);\n const updatedIndexes = [];\n const updatedItems = [];\n for (let index = lowerBound; index <= upperBound; index++) {\n const data = this.getDataByIndex(index);\n\n if (!data) {\n continue;\n }\n\n const isSelected = this.selectedItems.has(data);\n\n if (isSelected === select) {\n continue;\n }\n\n if (select) {\n this.selectedItems.add(data);\n } else {\n this.selectedItems.delete(data);\n }\n\n updatedIndexes.push(index);\n updatedItems.push(data);\n }\n\n this.lastToggledIndex = toIndex;\n\n return {\n selected: select,\n items: updatedItems,\n indexes: updatedIndexes,\n };\n };\n}\n","import { EventEmitter } from '@stencil/core';\nimport Tabulator from 'tabulator-tables';\nimport { setElementProperties } from './columns';\nimport { ElementPool } from './element-pool';\nimport { Selection, SelectionChangeSet } from './selection';\nimport { RowData } from './table.types';\n\nconst LIMEL_CHECKBOX = 'limel-checkbox';\n\nconst getRowId = (data: RowData) => data.id ?? data;\n\n/**\n * Provides row selection to Tabulator with shift-click support for range selections\n */\nexport class TableSelection {\n private selection: Selection;\n\n /**\n * Creates an instance of the TableSelection class\n *\n * @param getTable - Function that returns the Tabulator instance\n * @param pool - The element pool used to cache the checkbox components\n * @param selectEvent - The event emitter to use when checkboxes are toggled\n * @param getTranslation - Function to get translated strings\n */\n constructor(\n private getTable: () => Tabulator,\n private pool: ElementPool,\n private selectEvent: EventEmitter<RowData[]>,\n private getTranslation: (key: string) => string\n ) {\n this.selection = new Selection((index) =>\n getRowId(this.getRowByIndex(index).getData())\n );\n }\n\n /**\n * @returns Returns `true` when the selection is non-empty, otherwise `false`\n */\n get hasSelection(): boolean {\n return this.selection.size > 0;\n }\n\n /**\n * Clears the selection\n */\n public clear(): void {\n this.selection.clear();\n }\n\n /**\n * Sets the selected items\n *\n * @param data - The selected items\n */\n public setSelection(data: RowData[] = []): void {\n const newItems = data.map(getRowId);\n if (\n this.selection.size === data.length &&\n this.selection.items.every(\n (oldItem, index) => oldItem === newItems[index]\n )\n ) {\n return;\n }\n\n this.selection.items = newItems;\n const rows = this.getActiveRows();\n for (const row of rows)\n this.updateRowSelector(\n row,\n this.selection.has(getRowId(row.getData()))\n );\n }\n\n /**\n * Prepends a checkbox column used for row selection to the given column definitions\n *\n * @param columnDefinitions - The column definition for the table\n * @returns The column definitions with the checkbox column prepended to it\n */\n public getColumnDefinitions(\n columnDefinitions: Tabulator.ColumnDefinition[]\n ): Tabulator.ColumnDefinition[] {\n return [this.getRowSelectorColumnDefinition(), ...columnDefinitions];\n }\n\n private getRowSelectorColumnDefinition(): Tabulator.ColumnDefinition {\n return {\n title: '',\n formatter: this.getRowSelectorFormatter(),\n cellClick: this.rowSelectorCellClick,\n headerClick: this.headerClick,\n headerSort: false,\n cssClass: 'limel-table--row-selector',\n resizable: false,\n htmlOutput: false,\n clipboard: false,\n };\n }\n\n private headerClick(ev: Event): void {\n ev.stopPropagation();\n }\n\n private getRowSelectorFormatter() {\n return (cell: Tabulator.CellComponent) => {\n const element = this.pool.get(LIMEL_CHECKBOX);\n setElementProperties(element, {\n checked: this.selection.has(getRowId(cell.getData())),\n label: this.getTranslation('table.select-row'),\n });\n element.classList.add('hide-label');\n element.style.display = 'inline-block';\n\n return element;\n };\n }\n\n /**\n * Tabulator cell click handler that updates the selection for the clicked\n * row and toggles the selection from the last clicked row if the shift key\n * is pressed down.\n *\n * @param ev - The pointer event\n * @param cell - The clicked cell component\n */\n protected rowSelectorCellClick = (\n ev: PointerEvent,\n cell: Tabulator.CellComponent\n ): void => {\n ev.stopPropagation();\n ev.preventDefault();\n\n const clickedRow = cell.getRow();\n const rowPosition = clickedRow.getPosition(true);\n\n if (ev.shiftKey) {\n this.updateRowSelectors(\n this.selection.toggleSelectionFromLastIndex(rowPosition)\n );\n } else {\n this.updateRowSelectors(\n this.selection.toggleSelection(rowPosition)\n );\n }\n\n this.selectEvent.emit(this.selection.items.map(this.getRowData));\n };\n\n private getRowData = (item: RowData | RowData['id']) => {\n if (typeof item === 'object') {\n return item;\n }\n\n return this.getTable().getRow(item).getData();\n };\n\n private updateRowSelectors = (changeSet: SelectionChangeSet): void => {\n for (const row of changeSet.indexes.map(this.getRowByIndex))\n this.updateRowSelector(row, changeSet.selected);\n };\n\n private updateRowSelector = (\n row: Tabulator.RowComponent,\n checked: boolean\n ): void => {\n const cell = row.getCells()[0];\n if (cell) {\n const checkBox = cell.getElement().querySelector(LIMEL_CHECKBOX);\n checkBox.checked = checked;\n }\n };\n\n private getActiveRows: () => Tabulator.RowComponent[] = () => {\n const table = this.getTable();\n if (!table) {\n return [];\n }\n\n return table.getRows('active');\n };\n\n private getRowByIndex = (index: number) => {\n return this.getTable().getRowFromPosition(index, true);\n };\n}\n","/**\n * Layouts:\n * - default: resizes the table's columns, in a way that each column becomes as wide as the data it holds\n * - stretchLastColumn: works like default, but the last column is stretched to fill any remaining space\n * - stretchColumns: when there is extra space, the columns are stretched to fill it, otherwise, this works just like default\n * - lowDensity: converts the table into an airy list of items\n * @public\n */\nexport type Layout =\n | 'default'\n | 'stretchLastColumn'\n | 'stretchColumns'\n | 'lowDensity';\n\n/**\n * Maps a layout to a Tabulator layout\n * @param layout - the layout to map\n * @returns the Tabulator layout\n * @internal\n */\nexport function mapLayout(layout: Layout) {\n const layouts = {\n stretchLastColumn: 'fitDataStretch',\n stretchColumns: 'fitColumns',\n lowDensity: 'fitData',\n };\n\n return layouts[layout] || 'fitDataFill';\n}\n","import { isEqual } from 'lodash-es';\nimport { RowData } from './table.types';\n\nexport const areRowsEqual = (newData: RowData[], oldData: RowData[]) => {\n // Ensures table updates when a user modifies row content and triggers a refresh,\n // catching edits even if IDs and order remain the same.\n if (newData.length !== oldData.length) {\n return false;\n }\n\n return newData.every((newItem, index) => isEqual(newItem, oldData[index]));\n};\n","@use '../../style/mixins';\n@use '../../style/functions';\n@import '../../../node_modules/tabulator-tables/src/scss/tabulator.scss';\n\n/*\n* @prop --table-max-column-width: defines a maximum width for columns using standard size units, to prevent the table from growing too wide. Set to `auto` if you do not need this limitation. Defaults to `40rem`.\n*/\n\n$width-of-sorter-arrow: 0.5rem;\n$cell-padding: 0.5rem;\n$table--has-interactive-rows--selectable-row--hover: 2;\n$table--limel-table--row-selector: 1;\n$height-of-aggregations-row: 1.5rem;\n\n:host(limel-table) {\n isolation: isolate;\n display: block;\n --table-header-background-color: var(--contrast-500);\n --table-header-background-color--hover: var(--contrast-400);\n --table-header-background-color-when-being-dragged: var(--contrast-100);\n\n --table-row-background-color--odd: var(--contrast-200);\n --table-row-background-color--even: var(--contrast-100);\n --table-row-background-color--hover: var(\n --lime-elevated-surface-background-color\n );\n --table-row-background-color--active: var(--contrast-300);\n\n --table-arrow-color: var(--contrast-800);\n --table-arrow-color--active: var(\n --lime-primary-color,\n var(--limel-theme-primary-color)\n );\n\n --table-text-color: var(--limel-theme-text-primary-on-background-color);\n --limel-chip-size: 1.25rem;\n}\n\n@import './partial-styles/_table-main-layout';\n\n#tabulator-container {\n position: relative;\n}\n\n#tabulator-container,\n#tabulator-table {\n background-color: transparent;\n border: none;\n}\n\n.tabulator {\n .tabulator-header {\n color: var(--table-text-color);\n }\n .tabulator-tableHolder {\n .tabulator-table {\n color: var(--table-text-color);\n background-color: transparent;\n }\n }\n\n .tabulator-header {\n border-bottom: 0;\n background-color: rgb(var(--table-header-background-color));\n\n .tabulator-headers {\n width: fit-content;\n }\n\n .tabulator-col {\n transition: background-color 0.2s ease;\n background-color: rgb(var(--table-header-background-color));\n border-right-color: rgb(var(--contrast-200));\n\n &.tabulator-sortable {\n &:hover {\n background-color: rgb(\n var(--table-header-background-color--hover)\n );\n }\n }\n\n .tabulator-col-content {\n padding: 0 $width-of-sorter-arrow 0 0.25rem;\n }\n }\n\n .tabulator-col-title-holder {\n height: 1.75rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n }\n\n .tabulator-col-sorter {\n order: 1;\n }\n .tabulator-col-title {\n order: 2;\n font-weight: 500;\n padding-right: 0 !important;\n line-height: functions.pxToRem(20);\n }\n }\n}\n\n.tabulator-row {\n height: 2.25rem;\n\n .tabulator-cell {\n border-right: transparent;\n padding: $cell-padding;\n padding-left: $cell-padding + $width-of-sorter-arrow;\n\n height: inherit;\n\n &[style*='text-align: right;'] {\n justify-content: flex-end;\n }\n &[style*='text-align: center;'] {\n justify-content: center;\n }\n }\n\n .tabulator-col-resize-handle {\n display: none;\n }\n}\n\n.tabulator-col,\n.tabulator-cell {\n max-width: var(--table-max-column-width, 40rem);\n}\n\n#tabulator-loader,\n#tabulator-empty-text {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n#tabulator-loader {\n background-color: rgba(var(--contrast-100), 0.6);\n cursor: wait;\n}\n\n#tabulator-empty-text {\n color: rgb(var(--contrast-800));\n font-weight: bold;\n font-size: functions.pxToRem(20);\n pointer-events: none;\n}\n\nlimel-chip {\n transform: translateY(-0.15rem);\n}\n\n@import './partial-styles/tabulator-arrow';\n@import './partial-styles/tabulator-paginator';\n@import './partial-styles/tabulator-loader';\n@import './partial-styles/tabulator-custom-styles';\n@import './partial-styles/header-component';\n@import './partial-styles/movable-columns';\n@import './partial-styles/_tabulator-footer';\n@import './partial-styles/_row-selection';\n","import {\n Component,\n h,\n Prop,\n Element,\n Watch,\n EventEmitter,\n Event,\n Host,\n} from '@stencil/core';\nimport TabulatorTable from 'tabulator-tables';\nimport {\n Column,\n TableParams,\n ColumnSorter,\n ColumnAggregate,\n RowData,\n} from './table.types';\nimport { ColumnDefinitionFactory, createColumnSorter } from './columns';\nimport { isEqual, has } from 'lodash-es';\nimport { ElementPool } from './element-pool';\nimport { TableSelection } from './table-selection';\nimport { mapLayout, Layout } from './layout';\nimport { areRowsEqual } from './utils';\nimport { Languages } from '../date-picker/date.types';\nimport translate from '../../global/translations';\n\nconst FIRST_PAGE = 1;\n\n/**\n * @exampleComponent limel-example-table\n * @exampleComponent limel-example-table-custom-components\n * @exampleComponent limel-example-table-header-menu\n * @exampleComponent limel-example-table-movable-columns\n * @exampleComponent limel-example-table-sorting-disabled\n * @exampleComponent limel-example-table-local\n * @exampleComponent limel-example-table-remote\n * @exampleComponent limel-example-table-activate-row\n * @exampleComponent limel-example-table-selectable-rows\n * @exampleComponent limel-example-table-default-sorted\n * @exampleComponent limel-example-table-layout-default\n * @exampleComponent limel-example-table-layout-stretch-last-column\n * @exampleComponent limel-example-table-layout-stretch-columns\n * @exampleComponent limel-example-table-layout-low-density\n * @exampleComponent limel-example-table-interactive-rows\n */\n@Component({\n tag: 'limel-table',\n styleUrl: 'table.scss',\n shadow: true,\n})\nexport class Table {\n /**\n * Data to be displayed in the table. Provide a stable `id` on each row to keep\n * scroll position, focus, and selections intact across updates.\n */\n @Prop()\n public data: object[] = [];\n\n /**\n * Columns used to display the data\n */\n @Prop()\n public columns: Column[] = [];\n\n /**\n * Set to either `local` or `remote` to change how the table handles the\n * loaded data. When in `local` mode, all sorting and pagination will be\n * done locally with the data given. When in `remote` mode, the consumer\n * is responsible to give the table new data when a `load` event occurs\n */\n @Prop()\n public mode: 'local' | 'remote' = 'local';\n\n /**\n * Defines the layout of the table, based on how width of the columns are calculated.\n *\n * - `default`: makes columns as wide as their contents.\n * - `stretchLastColumn`: makes columns as wide as their contents, stretch the last column to fill up the remaining table width.\n * - `stretchColumns`: stretches all columns to fill the available width when possible.\n * - `lowDensity`: makes columns as wide as their contents, and creates a low density and airy layout.\n */\n @Prop()\n public layout: Layout;\n\n /**\n * Number of rows per page\n */\n @Prop()\n public pageSize: number;\n\n /**\n * The number of total rows available for the data\n */\n @Prop()\n public totalRows: number;\n\n /**\n * The initial sorted columns\n */\n @Prop()\n public sorting: ColumnSorter[] = [];\n\n /**\n * Active row in the table\n */\n @Prop({ mutable: true })\n public activeRow: RowData;\n\n /**\n * Set to `true` to enable reordering of the columns by dragging them\n */\n @Prop()\n public movableColumns: boolean;\n\n /**\n * Set to `false` to disable column sorting through header interactions.\n * Programmatic sorting through the `sorting` prop and `sort` event remains available.\n */\n @Prop()\n public sortableColumns: boolean = true;\n\n /**\n * Set to `true` to trigger loading animation\n */\n @Prop()\n public loading: boolean = false;\n\n /**\n * The page to show\n */\n @Prop()\n public page: number = FIRST_PAGE;\n\n /**\n * Emitted when `mode` is `local` the data is sorted\n */\n @Event()\n public sort: EventEmitter<ColumnSorter[]>;\n\n /**\n * Emitted when a new page has been set\n */\n @Event()\n public changePage: EventEmitter<number>;\n\n /**\n * A message to display when the table has no data\n */\n @Prop()\n public emptyMessage: string;\n\n /**\n * Column aggregates to be displayed in the table\n */\n @Prop()\n public aggregates: ColumnAggregate[];\n\n /**\n * Enables row selection\n */\n @Prop()\n public selectable: boolean;\n\n /**\n * Selected data. Requires `selectable` to be true.\n */\n @Prop()\n public selection: object[];\n\n /**\n * Defines the language for translations.\n */\n @Prop({ reflect: true })\n public language: Languages = 'en';\n\n /**\n * Emitted when `mode` is `remote` and the table is loading new data. The\n * consumer is responsible for giving the table new data\n */\n @Event()\n public load: EventEmitter<TableParams>;\n\n /**\n * Emitted when a row is activated\n */\n @Event()\n public activate: EventEmitter<object>;\n\n /**\n * Emitted when the columns have been changed\n */\n @Event()\n public changeColumns: EventEmitter<Column[]>;\n\n /**\n * Emitted when the row selection has been changed\n */\n @Event()\n public select: EventEmitter<object[]>;\n\n /**\n * Emitted when the select all rows state is toggled\n */\n @Event()\n public selectAll: EventEmitter<boolean>;\n\n @Element()\n private host: HTMLLimelTableElement;\n\n private currentLoad: { page: number; sorters: ColumnSorter[] };\n\n private tabulator: Tabulator;\n\n private pool: ElementPool;\n private columnFactory: ColumnDefinitionFactory;\n private firstRequest: boolean;\n private currentSorting: ColumnSorter[];\n private tableSelection: TableSelection;\n private shouldSort = false;\n\n constructor() {\n this.handleDataSorting = this.handleDataSorting.bind(this);\n this.handlePageLoaded = this.handlePageLoaded.bind(this);\n this.handleRenderComplete = this.handleRenderComplete.bind(this);\n this.handleAjaxRequesting = this.handleAjaxRequesting.bind(this);\n this.requestData = this.requestData.bind(this);\n this.onClickRow = this.onClickRow.bind(this);\n this.formatRow = this.formatRow.bind(this);\n this.formatRows = this.formatRows.bind(this);\n this.updateMaxPage = this.updateMaxPage.bind(this);\n this.initTabulatorComponent = this.initTabulatorComponent.bind(this);\n this.setSelection = this.setSelection.bind(this);\n this.addColumnAggregator = this.addColumnAggregator.bind(this);\n this.pool = new ElementPool(document);\n this.columnFactory = new ColumnDefinitionFactory(this.pool);\n }\n\n public componentWillLoad() {\n this.firstRequest = this.mode === 'remote';\n this.initTableSelection();\n }\n\n public componentDidLoad() {\n this.init();\n }\n\n public disconnectedCallback() {\n this.pool.clear();\n }\n\n @Watch('totalRows')\n protected totalRowsChanged() {\n this.updateMaxPage();\n }\n\n @Watch('pageSize')\n protected pageSizeChanged() {\n this.updateMaxPage();\n }\n\n @Watch('page')\n protected pageChanged() {\n if (!this.tabulator) {\n return;\n }\n\n if (this.tabulator.getPage() === this.page) {\n return;\n }\n\n this.tabulator.setPage(this.page);\n }\n\n @Watch('activeRow')\n protected activeRowChanged() {\n if (!this.tabulator) {\n return;\n }\n\n this.formatRows();\n }\n\n @Watch('data')\n protected updateData(newData: RowData[] = [], oldData: RowData[] = []) {\n const newIds = this.getRowIds(newData);\n const oldIds = this.getRowIds(oldData);\n const shouldReplace = this.shouldReplaceData(newIds, oldIds);\n const hasRowUpdates = !areRowsEqual(newData, oldData);\n\n setTimeout(() => {\n if (!this.tabulator) {\n return;\n }\n\n if (shouldReplace) {\n this.pool.releaseAll();\n this.tabulator.replaceData(newData);\n this.setSelection();\n\n return;\n }\n\n if (hasRowUpdates) {\n this.tabulator.updateData(newData);\n this.setSelection();\n\n return;\n }\n\n this.tabulator.updateOrAddData(newData);\n });\n }\n\n @Watch('columns')\n protected updateColumns(newColumns: Column[], oldColumns: Column[]) {\n if (!this.tabulator) {\n return;\n }\n\n if (this.areSameColumns(newColumns, oldColumns)) {\n return;\n }\n\n const columnsInTable = this.tabulator\n .getColumns()\n .filter((c) => c.getField());\n\n const oldColumnsInTable = columnsInTable.map((c) =>\n oldColumns.find((old) => old.field === c.getField())\n );\n\n if (this.areSameColumns(newColumns, oldColumnsInTable)) {\n return;\n }\n\n this.tabulator.setColumns(this.getColumnDefinitions());\n this.shouldSort = true;\n }\n\n @Watch('aggregates')\n protected updateAggregates(\n newAggregates: ColumnAggregate[],\n oldAggregates: ColumnAggregate[]\n ) {\n if (!this.tabulator) {\n return;\n }\n\n if (isEqual(newAggregates, oldAggregates)) {\n return;\n }\n\n if (!this.haveSameAggregateFields(newAggregates, oldAggregates)) {\n this.init();\n\n return;\n }\n\n this.tabulator.recalc();\n this.tabulator.rowManager.redraw();\n }\n\n @Watch('selection')\n protected updateSelection(newSelection: any[]) {\n if (!this.tableSelection) {\n return;\n }\n\n this.tableSelection.setSelection(newSelection);\n }\n\n @Watch('selectable')\n protected updateSelectable() {\n if (this.tableSelection && !this.selectable) {\n this.tableSelection = null;\n }\n\n this.initTableSelection();\n this.init();\n }\n\n @Watch('sortableColumns')\n protected updateSortableColumns() {\n if (!this.tabulator) {\n return;\n }\n\n this.tabulator.setColumns(this.getColumnDefinitions());\n this.shouldSort = true;\n }\n\n @Watch('sorting')\n protected updateSorting(\n newValue: ColumnSorter[],\n oldValue: ColumnSorter[]\n ) {\n const newSorting = this.getColumnSorter(newValue);\n const oldSorting = this.getColumnSorter(oldValue);\n if (isEqual(newSorting, oldSorting)) {\n return;\n }\n\n this.tabulator.setSort(newSorting);\n }\n\n private shouldReplaceData(\n newIds: Array<string | number>,\n oldIds: Array<string | number>\n ) {\n return (\n !this.areEqualIds(newIds, oldIds) ||\n !this.isSameOrder(newIds, oldIds)\n );\n }\n\n private getRowIds(data: RowData[]): Array<string | number> {\n return data.map((item) => item.id ?? item) as Array<string | number>;\n }\n\n private areEqualIds(\n newIds: Array<string | number>,\n oldIds: Array<string | number>\n ): boolean {\n const newIdSet = new Set(newIds);\n const oldIdSet = new Set(oldIds);\n\n return (\n newIdSet.size === oldIdSet.size &&\n newIds.every((id) => oldIdSet.has(id))\n );\n }\n\n private isSameOrder(\n newIds: Array<string | number>,\n oldIds: Array<string | number>\n ): boolean {\n return newIds.every((id, index) => id === oldIds[index]);\n }\n\n private areSameColumns(newColumns: Column[], oldColumns: Column[]) {\n return (\n newColumns.length === oldColumns.length &&\n newColumns.every((column) => oldColumns.includes(column))\n );\n }\n\n private haveSameAggregateFields(\n newAggregates: ColumnAggregate[],\n oldAggregates: ColumnAggregate[]\n ) {\n const oldAggregateFields = oldAggregates?.map((a) => a.field) || [];\n\n return (\n newAggregates?.length === oldAggregates?.length &&\n !!newAggregates?.every((a) => oldAggregateFields.includes(a.field))\n );\n }\n\n private init() {\n if (this.tabulator) {\n this.pool.releaseAll();\n this.tabulator.destroy();\n }\n\n const table: HTMLElement =\n this.host.shadowRoot.querySelector('#tabulator-table');\n this.initTabulatorComponent(table);\n }\n\n /*\n * Tabulator requires that the html element it's rendered inside\n * has a size before it's created, otherwise it doesn't consider\n * it self renderedy completely. (the callback \"renderComplete\"\n * is never run).\n *\n * @param table {HTMLElement}\n *\n */\n private initTabulatorComponent(table: HTMLElement) {\n // Some browsers do not implement the ResizeObserver API...\n // If that's the case lets just create the table no\n // matter if its rendered or not.\n if (!('ResizeObserver' in window)) {\n this.tabulator = new TabulatorTable(table, this.getOptions());\n this.setSelection();\n\n return;\n }\n\n const observer = new ResizeObserver(() => {\n requestAnimationFrame(() => {\n this.tabulator = new TabulatorTable(table, this.getOptions());\n this.setSelection();\n observer.unobserve(table);\n observer.disconnect();\n });\n });\n observer.observe(table);\n }\n\n private initTableSelection() {\n if (this.selectable) {\n this.tableSelection = new TableSelection(\n () => this.tabulator,\n this.pool,\n this.select,\n (key: string) => this.getTranslation(key)\n );\n this.tableSelection.setSelection(this.selection);\n }\n }\n\n private setSelection() {\n if (!(this.tabulator && this.tableSelection)) {\n return;\n }\n\n this.tableSelection.setSelection(this.selection);\n }\n\n private updateMaxPage() {\n this.tabulator?.setMaxPage(this.calculatePageCount());\n }\n\n private getOptions(): Tabulator.Options {\n const ajaxOptions = this.getAjaxOptions();\n const paginationOptions = this.getPaginationOptions();\n const columnOptions = this.getColumnOptions();\n\n return {\n data: this.data,\n layout: mapLayout(this.layout),\n columns: this.getColumnDefinitions(),\n dataSorting: this.handleDataSorting,\n pageLoaded: this.handlePageLoaded,\n renderComplete: this.handleRenderComplete,\n ...ajaxOptions,\n ...paginationOptions,\n rowClick: this.onClickRow,\n rowFormatter: this.formatRow,\n initialSort: this.getInitialSorting(),\n nestedFieldSeparator: false,\n ...columnOptions,\n };\n }\n\n private getInitialSorting(): Tabulator.Sorter[] {\n if (this.currentSorting && this.currentSorting.length > 0) {\n return this.getColumnSorter(this.currentSorting);\n }\n\n return this.getColumnSorter(this.sorting);\n }\n\n private getColumnSorter(sorting: ColumnSorter[]): Tabulator.Sorter[] {\n return sorting.map((sorter: ColumnSorter) => {\n return {\n column: String(sorter.column.field),\n dir: sorter.direction.toLocaleLowerCase() as Tabulator.SortDirection,\n };\n });\n }\n\n private getColumnDefinitions(): Tabulator.ColumnDefinition[] {\n const columnDefinitions = this.columns\n .map(this.addColumnAggregator)\n .map((column) => {\n const definition = this.columnFactory.create(column);\n const columnSortable = column.headerSort ?? true;\n definition.headerSort = this.sortableColumns && columnSortable;\n\n return definition;\n });\n\n if (this.tableSelection) {\n return this.tableSelection.getColumnDefinitions(columnDefinitions);\n }\n\n return columnDefinitions;\n }\n\n private addColumnAggregator(column: Column<any>): Column<any> {\n if (!this.aggregates?.length || column.aggregator) {\n return column;\n }\n\n const aggregate = this.aggregates.find((a) => a.field === column.field);\n if (aggregate) {\n column.aggregator = (col?: Column) => {\n if (!col) {\n return;\n }\n\n const value = this.aggregates.find(\n (a) => a.field === col.field\n )?.value;\n\n if (col.formatter) {\n return col.formatter(value);\n }\n\n return value;\n };\n }\n\n return column;\n }\n\n private getAjaxOptions(): Tabulator.OptionsData {\n if (!this.isRemoteMode()) {\n return {};\n }\n\n // Tabulator needs a URL to be set, even though this one will never be\n // used since we have our own custom `ajaxRequestFunc`\n const remoteUrl = 'https://localhost';\n\n return {\n ajaxSorting: true,\n ajaxURL: remoteUrl,\n ajaxRequestFunc: this.requestData,\n ajaxRequesting: this.handleAjaxRequesting,\n };\n }\n\n /*\n * The ajaxRequesting callback is triggered when ever an ajax request is made.\n *\n * Tabulator is requesting data with an AJAX request even though it has been\n * given data when it was created.\n *\n * It seems unnecessary for us to emit the `load` event as well when this\n * happens, since we can just initialize the table with the data that has been\n * given to us. Therefore, we abort the request if:\n *\n * * its the first time this method is called and,\n * * data has been sent in to the component as a prop\n *\n */\n private handleAjaxRequesting() {\n const abortRequest = this.firstRequest && !!this.data?.length;\n this.firstRequest = false;\n\n if (abortRequest) {\n setTimeout(() => {\n this.updateMaxPage();\n this.tabulator.replaceData(this.data);\n });\n\n return false;\n }\n\n return true;\n }\n\n private getPaginationOptions(): Tabulator.OptionsPagination {\n if (!this.pageSize) {\n return {};\n }\n\n return {\n pagination: this.isRemoteMode() ? 'remote' : 'local',\n paginationSize: this.pageSize,\n paginationInitialPage: this.page,\n };\n }\n\n private requestData(_, __, params: any): Promise<object> {\n const sorters = params.sorters;\n const currentPage = params.page;\n\n if (this.page !== currentPage) {\n this.changePage.emit(currentPage);\n }\n\n const columnSorters = sorters.map(createColumnSorter(this.columns));\n\n const load = {\n page: currentPage,\n sorters: columnSorters,\n };\n\n // In order to make limel-table behave more like a controlled component,\n // we always return the existing data from this function, therefore\n // relying on the consumer component to handle the loading\n // state via the loading prop, if it actually decides to load new data.\n const resolveExistingData = Promise.resolve({\n last_page: this.calculatePageCount(),\n data: this.data,\n });\n\n if (!isEqual(this.currentLoad, load)) {\n this.currentSorting = columnSorters;\n this.currentLoad = load;\n this.load.emit(load);\n }\n\n return resolveExistingData;\n }\n\n private isRemoteMode(): boolean {\n return this.mode === 'remote';\n }\n\n private handleDataSorting(sorters: Tabulator.Sorter[]): void {\n if (this.isRemoteMode()) {\n return;\n }\n\n const columnSorters = sorters.map(createColumnSorter(this.columns));\n if (columnSorters.length === 0) {\n return;\n }\n\n this.sort.emit(columnSorters);\n }\n\n private handlePageLoaded(page: number): void {\n if (this.isRemoteMode()) {\n return;\n }\n\n this.changePage.emit(page);\n }\n\n private handleRenderComplete(): void {\n if (this.tabulator && this.shouldSort) {\n this.shouldSort = false;\n this.tabulator.setSort(this.getColumnSorter(this.sorting));\n }\n }\n\n private onClickRow(_ev, row: Tabulator.RowComponent): void {\n if (row.getPosition === undefined) {\n // Not a data row, probably a CalcComponent\n return;\n }\n\n if (this.isActiveRow(row)) {\n this.activeRow = null;\n } else {\n this.activeRow = row.getData();\n }\n\n this.activate.emit(this.activeRow);\n }\n\n private getActiveRows: () => Tabulator.RowComponent[] = () => {\n if (!this.tabulator) {\n return [];\n }\n\n return this.tabulator.getRows('active');\n };\n\n private getActiveRowsData: () => object[] = () => {\n // Note: Tabulator.getData() creates copies of each data object\n // and will break this.selection.has checks, hence why this function\n // intentionally retrieves the data using the row components\n return this.getActiveRows().map((row) => row.getData());\n };\n\n private selectAllOnChange = (ev: CustomEvent<boolean>) => {\n const selectAll = ev.detail;\n\n ev.stopPropagation();\n ev.preventDefault();\n\n const newSelection = selectAll ? this.getActiveRowsData() : [];\n this.select.emit(newSelection);\n this.tableSelection.setSelection(newSelection);\n this.selectAll.emit(selectAll);\n };\n\n private formatRows() {\n // eslint-disable-next-line unicorn/no-array-for-each\n this.tabulator.getRows().forEach(this.formatRow);\n }\n\n private formatRow(row: Tabulator.RowComponent) {\n if (this.isActiveRow(row)) {\n row.getElement().classList.add('active');\n } else {\n row.getElement().classList.remove('active');\n }\n\n const interactiveFeedbackElement = row\n .getElement()\n .querySelectorAll('.interactive-feedback');\n if (interactiveFeedbackElement.length === 0) {\n const element = row.getElement().ownerDocument.createElement('div');\n element.classList.add('interactive-feedback');\n row.getElement().prepend(element);\n }\n }\n\n private isActiveRow(row: Tabulator.RowComponent) {\n if (!this.activeRow) {\n return false;\n }\n\n const activeRowId = this.activeRow.id ?? null;\n\n if (activeRowId !== null) {\n return activeRowId === row.getData().id;\n }\n\n return this.activeRow === row.getData();\n }\n\n private calculatePageCount(): number {\n let total = this.totalRows;\n if (!total) {\n total = this.data.length;\n }\n\n return Math.ceil(total / this.pageSize);\n }\n\n private hasAggregation(columns: Column[]): boolean {\n return columns.some((column) => has(column, 'aggregator'));\n }\n\n private getColumnOptions = (): Tabulator.OptionsColumns => {\n if (!this.movableColumns) {\n return {};\n }\n\n return {\n movableColumns: true,\n columnMoved: this.handleMoveColumn,\n };\n };\n\n private handleMoveColumn = (_, components: Tabulator.ColumnComponent[]) => {\n const columns = components.map(this.findColumn).filter(Boolean);\n this.changeColumns.emit(columns);\n };\n\n private findColumn = (component: Tabulator.ColumnComponent): Column => {\n return this.columns.find((column) => {\n return (\n column.field === component.getField() &&\n column.title === component.getDefinition().title\n );\n });\n };\n\n render() {\n return (\n <Host\n class={{\n 'has-low-density': this.layout === 'lowDensity',\n }}\n >\n <div\n id=\"tabulator-container\"\n class={{\n 'has-pagination': this.totalRows > this.pageSize,\n 'has-aggregation': this.hasAggregation(this.columns),\n 'has-movable-columns': this.movableColumns,\n 'has-rowselector': this.selectable,\n 'has-selection': this.tableSelection?.hasSelection,\n }}\n >\n {/* Toggle style instead of removing the loader\n because removing the element will cause a rerender, breaking the\n tabulator table */}\n <div\n id=\"tabulator-loader\"\n style={{ display: this.loading ? 'flex' : 'none' }}\n >\n <limel-spinner size=\"large\" />\n </div>\n {this.renderEmptyMessage()}\n {this.renderSelectAll()}\n <div id=\"tabulator-table\" />\n </div>\n </Host>\n );\n }\n\n private renderSelectAll() {\n if (!this.selectable) {\n return;\n }\n\n const showSelectAll = !this.loading && this.tableSelection;\n\n return (\n <div\n class=\"select-all\"\n style={{ display: showSelectAll ? 'inline-block' : 'none' }}\n >\n <limel-checkbox\n class=\"hide-label\"\n onChange={this.selectAllOnChange}\n disabled={this.data.length === 0}\n checked={this.tableSelection?.hasSelection}\n indeterminate={\n this.tableSelection?.hasSelection &&\n this.selection?.length < this.data.length\n }\n label={this.getTranslation('table.select-all')}\n />\n </div>\n );\n }\n\n private renderEmptyMessage() {\n const showEmptyMessage =\n !this.loading && this.data.length === 0 && this.emptyMessage;\n\n return (\n <div\n id=\"tabulator-empty-text\"\n style={{ display: showEmptyMessage ? 'flex' : 'none' }}\n >\n <span>{this.emptyMessage}</span>\n </div>\n );\n }\n\n private getTranslation = (key: string) => {\n return translate.get(key, this.language);\n };\n}\n"],"mappings":"mnBACA,IAAIA,EAAcC,OAAOC,UAGzB,IAAIC,EAAiBH,EAAYG,eAUjC,SAASC,EAAQC,EAAQC,GACvB,OAAOD,GAAU,MAAQF,EAAeI,KAAKF,EAAQC,EACvD,CCcA,SAASE,EAAIH,EAAQI,GACnB,OAAOJ,GAAU,MAAQK,EAAQL,EAAQI,EAAML,EACjD,CChBA,SAASO,EAAQN,EAAQI,EAAMG,EAAOC,GACpC,IAAKC,EAAST,GAAS,CACrB,OAAOA,CACX,CACEI,EAAOM,EAASN,EAAMJ,GAEtB,IAAIW,GAAS,EACTC,EAASR,EAAKQ,OACdC,EAAYD,EAAS,EACrBE,EAASd,EAEb,MAAOc,GAAU,QAAUH,EAAQC,EAAQ,CACzC,IAAIX,EAAMc,EAAMX,EAAKO,IACjBK,EAAWT,EAEf,GAAIN,IAAQ,aAAeA,IAAQ,eAAiBA,IAAQ,YAAa,CACvE,OAAOD,CACb,CAEI,GAAIW,GAASE,EAAW,CACtB,IAAII,EAAWH,EAAOb,GACtBe,EAAWR,EAAaA,EAAWS,EAAUhB,EAAKa,GAAUI,UAC5D,GAAIF,IAAaE,UAAW,CAC1BF,EAAWP,EAASQ,GAChBA,EACCE,EAAQf,EAAKO,EAAQ,IAAM,GAAK,EAC7C,CACA,CACIS,EAAYN,EAAQb,EAAKe,GACzBF,EAASA,EAAOb,EACpB,CACE,OAAOD,CACT,CCnCA,SAASqB,EAAWrB,EAAQsB,EAAOC,GACjC,IAAIZ,GAAS,EACTC,EAASU,EAAMV,OACfY,EAAS,GAEb,QAASb,EAAQC,EAAQ,CACvB,IAAIR,EAAOkB,EAAMX,GACbJ,EAAQkB,EAAQzB,EAAQI,GAE5B,GAAImB,EAAUhB,EAAOH,GAAO,CAC1BE,EAAQkB,EAAQd,EAASN,EAAMJ,GAASO,EAC9C,CACA,CACE,OAAOiB,CACT,CCJA,SAASE,EAAO1B,EAAQuB,GACtB,GAAIvB,GAAU,KAAM,CAClB,MAAO,EACX,CACE,IAAI2B,EAAQC,EAASC,EAAa7B,IAAS,SAAS8B,GAClD,MAAO,CAACA,EACZ,IACEP,EAAYQ,EAAaR,GACzB,OAAOF,EAAWrB,EAAQ2B,GAAO,SAASpB,EAAOH,GAC/C,OAAOmB,EAAUhB,EAAOH,EAAK,GACjC,GACA,CC5BA,IAAI4B,SAAiBC,SAAW,mBAAqBA,OAAOC,WAAa,SAAW,SAAUC,GAAO,cAAcA,CAAI,EAAK,SAAUA,GAAO,OAAOA,UAAcF,SAAW,YAAcE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOpC,UAAY,gBAAkBsC,CAAI,EAE1Q,IAAKE,MAAMxC,UAAUyC,UAAW,CAE/B1C,OAAO2C,eAAeF,MAAMxC,UAAW,YAAa,CAEnDU,MAAO,SAASA,EAAMgB,GAIrB,GAAIiB,MAAQ,KAAM,CAEjB,MAAM,IAAIC,UAAU,gCACxB,CAEG,IAAIC,EAAI9C,OAAO4C,MAIf,IAAIG,EAAMD,EAAE9B,SAAW,EAIvB,UAAWW,IAAc,WAAY,CAEpC,MAAM,IAAIkB,UAAU,+BACxB,CAIG,IAAIG,EAAUC,UAAU,GAIxB,IAAIC,EAAI,EAIR,MAAOA,EAAIH,EAAK,CAUf,IAAII,EAASL,EAAEI,GAEf,GAAIvB,EAAUrB,KAAK0C,EAASG,EAAQD,EAAGJ,GAAI,CAE1C,OAAOI,CACZ,CAIIA,GACJ,CAIG,OAAQ,CACX,GAGA,CAIA,IAAKT,MAAMxC,UAAUmD,KAAM,CAE1BpD,OAAO2C,eAAeF,MAAMxC,UAAW,OAAQ,CAE9CU,MAAO,SAASA,EAAMgB,GAIrB,GAAIiB,MAAQ,KAAM,CAEjB,MAAM,IAAIC,UAAU,gCACxB,CAEG,IAAIC,EAAI9C,OAAO4C,MAIf,IAAIG,EAAMD,EAAE9B,SAAW,EAIvB,UAAWW,IAAc,WAAY,CAEpC,MAAM,IAAIkB,UAAU,+BACxB,CAIG,IAAIG,EAAUC,UAAU,GAIxB,IAAIC,EAAI,EAIR,MAAOA,EAAIH,EAAK,CAUf,IAAII,EAASL,EAAEI,GAEf,GAAIvB,EAAUrB,KAAK0C,EAASG,EAAQD,EAAGJ,GAAI,CAE1C,OAAOK,CACZ,CAIID,GACJ,CAIG,OAAO5B,SACV,GAGA,CAIA,IAAK+B,OAAOpD,UAAUqD,SAAU,CAE/BD,OAAOpD,UAAUqD,SAAW,SAAUC,EAAQC,GAI7C,GAAID,aAAkBE,OAAQ,CAE7B,MAAMZ,UAAU,sCACnB,CAEE,GAAIW,IAAUlC,UAAW,CACxBkC,EAAQ,CACX,CAEE,OAAOZ,KAAKc,QAAQH,EAAQC,MAAY,CAC1C,CACA,CAIA,IAAKf,MAAMxC,UAAUqD,SAAU,CAE9BtD,OAAO2C,eAAeF,MAAMxC,UAAW,WAAY,CAElDU,MAAO,SAASA,EAAMgD,EAAeC,GAEpC,GAAIhB,MAAQ,KAAM,CAEjB,MAAM,IAAIC,UAAU,gCACxB,CAIG,IAAIC,EAAI9C,OAAO4C,MAIf,IAAIG,EAAMD,EAAE9B,SAAW,EAIvB,GAAI+B,IAAQ,EAAG,CAEd,OAAO,KACX,CAMG,IAAIc,EAAID,EAAY,EAYpB,IAAIV,EAAIY,KAAKC,IAAIF,GAAK,EAAIA,EAAId,EAAMe,KAAKE,IAAIH,GAAI,GAEjD,SAASI,EAAcC,EAAGC,GAEzB,OAAOD,IAAMC,UAAYD,IAAM,iBAAmBC,IAAM,UAAYC,MAAMF,IAAME,MAAMD,EAC1F,CAIG,MAAOjB,EAAIH,EAAK,CAMf,GAAIkB,EAAcnB,EAAEI,GAAIS,GAAgB,CAEvC,OAAO,IACZ,CAIIT,GACJ,CAIG,OAAO,KACV,GAGA,CAIA,UAAWlD,OAAOqE,SAAW,WAAY,CAIxCrE,OAAO2C,eAAe3C,OAAQ,SAAU,CAEvCW,MAAO,SAAS0D,EAAOC,EAAQC,GAK9B,GAAID,IAAW,MAAQA,IAAWhD,UAAW,CAE5C,MAAM,IAAIuB,UAAU,6CACxB,CAEG,IAAI2B,EAAKxE,OAAOsE,GAEhB,IAAK,IAAIvD,EAAQ,EAAGA,EAAQkC,UAAUjC,OAAQD,IAAS,CAEtD,IAAI0D,EAAaxB,UAAUlC,GAE3B,GAAI0D,IAAe,MAAQA,IAAenD,UAAW,CAEpD,IAAK,IAAIoD,KAAWD,EAAY,CAI/B,GAAIzE,OAAOC,UAAUC,eAAeI,KAAKmE,EAAYC,GAAU,CAE9DF,EAAGE,GAAWD,EAAWC,EAChC,CACA,CACA,CACA,CAEG,OAAOF,CACV,EAEEG,SAAU,KAEVC,aAAc,MAGhB,CAEA,IAAIC,EAAgB,SAASA,EAAcC,GAE1ClC,KAAKkC,MAAQA,EAEblC,KAAKmC,oBAAsB,MAE3BnC,KAAKoC,eAAiBpC,KAAKqC,uBAE3BrC,KAAKsC,QAAUtC,KAAKuC,sBAEpBvC,KAAKwC,WAAa,KAElBxC,KAAKyC,QAAU,GAEfzC,KAAK0C,eAAiB,GAEtB1C,KAAK2C,eAAiB,GAEtB3C,KAAK4C,WAAa,EAElB5C,KAAKsC,QAAQO,aAAa7C,KAAKoC,eAAgBpC,KAAKsC,QAAQQ,WAC7D,EAKAb,EAAc5E,UAAUgF,qBAAuB,WAE9C,IAAIU,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,qBAEjB,OAAOJ,CACR,EAEAd,EAAc5E,UAAUkF,oBAAsB,WAE7C,IAAIQ,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,oBAEjB,IAAKnD,KAAKkC,MAAMkB,QAAQC,cAAe,CAEtCN,EAAGG,UAAUC,IAAI,0BACnB,CAEC,OAAOJ,CACR,EAEAd,EAAc5E,UAAUiG,WAAa,WAerC,EAIArB,EAAc5E,UAAUkG,cAAgB,SAAUC,GAEjDxD,KAAKwC,WAAagB,CACnB,EAIAvB,EAAc5E,UAAUoG,WAAa,WAEpC,OAAOzD,KAAKsC,OACb,EAIAL,EAAc5E,UAAUqG,kBAAoB,WAE3C,OAAO1D,KAAKoC,cACb,EAaAH,EAAc5E,UAAUsG,iBAAmB,SAAUC,GAEpD,IAAIC,EAAY,EACZC,EAAc9D,KAAKsC,QAAQwB,YAAc9D,KAAKkC,MAAMI,QAAQyB,YAIhE/D,KAAKsC,QAAQM,WAAagB,EAI1B,GAAIA,EAAOE,EAAa,CAEvBD,EAAYD,EAAOE,EAEnB9D,KAAKsC,QAAQ0B,MAAMC,YAAcJ,EAAY,IAC/C,KAAQ,CAEN7D,KAAKsC,QAAQ0B,MAAMC,WAAa,CAClC,CAOCjE,KAAK4C,WAAagB,EAElB,GAAI5D,KAAKkC,MAAMgC,UAAU,iBAAkB,CAE1ClE,KAAKkC,MAAMiC,QAAQC,cAAcT,kBACnC,CACA,EAKA1B,EAAc5E,UAAUgH,2BAA6B,SAAUC,GAE9D,IAAIC,EAAO,GACPC,EAAcxE,KAAKkC,MAAMkB,QAAQqB,uBACjCC,EACAC,EAEJ,GAAIL,GAAQA,EAAKlG,OAAQ,CAExBsG,EAAMJ,EAAK,GAEX,IAAK,IAAI7G,KAAOiH,EAAK,CAEpB,IAAIE,EAAM,CAETC,MAAOpH,EAEPqH,MAAOrH,GAIR,IAAIM,EAAQ2G,EAAIjH,GAEhB,cAAeM,IAAU,YAAc,YAAcyB,EAAQzB,IAE5D,IAAK,YAEJ4G,EAAS,SAET,MAED,IAAK,UAEJA,EAAS,UAET,MAED,IAAK,SAEJ,GAAI9E,MAAMkF,QAAQhH,GAAQ,CAEzB4G,EAAS,OACf,KAAY,CAENA,EAAS,QACf,CAEK,MAED,QAEC,IAAKnD,MAAMzD,IAAUA,IAAU,GAAI,CAElC4G,EAAS,QACf,KAAY,CAEN,GAAI5G,EAAMiH,MAAM,wCAAyC,CAExDL,EAAS,UAChB,KAAa,CAENA,EAAS,QAChB,CACA,CAEK,MAIFC,EAAID,OAASA,EAEbJ,EAAKU,KAAKL,EACb,CAEE,GAAIJ,EAAa,CAEhB,cAAeA,IAAgB,YAAc,YAAchF,EAAQgF,IAElE,IAAK,WAEJxE,KAAKkC,MAAMkB,QAAQX,QAAU+B,EAAY9G,KAAKsC,KAAKkC,MAAOqC,GAE1D,MAED,IAAK,SAEJ,GAAI1E,MAAMkF,QAAQP,GAAc,CAE/BD,EAAKW,SAAQ,SAAUN,GAEtB,IAAII,EAAQR,EAAYhE,MAAK,SAAU2E,GAEtC,OAAOA,EAAIN,QAAUD,EAAIC,KACjC,IAEO,GAAIG,EAAO,CAEV5H,OAAOqE,OAAOmD,EAAKI,EAC3B,CACA,GACA,KAAY,CAENT,EAAKW,SAAQ,SAAUN,GAEtB,GAAIJ,EAAYI,EAAIC,OAAQ,CAE3BzH,OAAOqE,OAAOmD,EAAKJ,EAAYI,EAAIC,OAC3C,CACA,GACA,CAEK7E,KAAKkC,MAAMkB,QAAQX,QAAU8B,EAE7B,MAGL,KAAS,CAENvE,KAAKkC,MAAMkB,QAAQX,QAAU8B,CAChC,CAEEvE,KAAKoF,WAAWpF,KAAKkC,MAAMkB,QAAQX,QACrC,CACA,EAEAR,EAAc5E,UAAU+H,WAAa,SAAUb,EAAMG,GAEpD,IAAIW,EAAOrF,KAEX,MAAOqF,EAAKjD,eAAeU,WAAY,CACtCuC,EAAKjD,eAAekD,YAAYD,EAAKjD,eAAeU,WACtD,CAAEuC,EAAK5C,QAAU,GAEhB4C,EAAK3C,eAAiB,GAEtB2C,EAAK1C,eAAiB,GAItB,GAAI0C,EAAKnD,MAAMgC,UAAU,iBAAkB,CAE1CmB,EAAKnD,MAAMiC,QAAQC,cAAcmB,OACnC,CAEChB,EAAKW,SAAQ,SAAUC,EAAKK,GAE3BH,EAAKI,WAAWN,EAClB,IAECE,EAAKK,kBAEL,GAAIL,EAAKnD,MAAMkB,QAAQuC,kBAAoBN,EAAKnD,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FmB,EAAKnD,MAAMiC,QAAQwB,iBAAiBrC,YACtC,CAEC,GAAItD,KAAKkC,MAAMkB,QAAQwC,cAAe,CAErC5F,KAAKkC,MAAM2D,QAAQC,aAAa,MAAO,KACzC,CAECT,EAAKU,OAAO,KACb,EAEA9D,EAAc5E,UAAUoI,WAAa,SAAUO,EAAYC,EAAQC,GAElE,IAAIC,EAAS,IAAIC,EAAOJ,EAAYhG,MAChCqG,EAAQF,EAAO1C,aACftF,EAAQ+H,EAAelG,KAAKsG,gBAAgBJ,GAAgBA,EAEhE,GAAIA,GAAgB/H,GAAS,EAAG,CAE/B,IAAIoI,EAAcvG,KAAKyC,QAAQ3B,QAAQoF,EAAaM,gBAEpD,IAAIC,EAASP,EAAazC,aAE1B,GAAIwC,EAAQ,CAEXjG,KAAKyC,QAAQiE,OAAOH,EAAa,EAAGJ,GAEpCM,EAAOE,WAAW9D,aAAawD,EAAOI,EACzC,KAAS,CAENzG,KAAKyC,QAAQiE,OAAOH,EAAc,EAAG,EAAGJ,GAExCM,EAAOE,WAAW9D,aAAawD,EAAOI,EAAOG,YAChD,CACA,KAAQ,CAEN,GAAIX,EAAQ,CAEXjG,KAAKyC,QAAQoE,QAAQV,GAErBnG,KAAKoC,eAAeS,aAAasD,EAAO1C,aAAczD,KAAKoC,eAAeU,WAC7E,KAAS,CAEN9C,KAAKyC,QAAQwC,KAAKkB,GAElBnG,KAAKoC,eAAe0E,YAAYX,EAAO1C,aAC1C,CAEE0C,EAAOY,gBACT,CAEC,OAAOZ,CACR,EAEAlE,EAAc5E,UAAU2J,oBAAsB,SAAUpC,GAEvD,GAAIA,EAAIoB,WAAWnB,MAAO,CAEzB7E,KAAK2C,eAAeiC,EAAIoB,WAAWnB,OAASD,CAC9C,CACA,EAEA3C,EAAc5E,UAAU4J,uBAAyB,SAAUrC,GAE1D5E,KAAK0C,eAAeuC,KAAKL,EAC1B,EAEA3C,EAAc5E,UAAUqI,gBAAkB,WAEzC1F,KAAK0C,eAAiB,GAEtB1C,KAAKyC,QAAQyC,SAAQ,SAAUiB,GAE9BA,EAAOe,oBACT,GACA,EAIAjF,EAAc5E,UAAU8J,sBAAwB,WAE/C,IAAI9B,EAAOrF,KACPoH,EAAY,EAEhB/B,EAAK5C,QAAQyC,SAAQ,SAAUiB,GAE9B,IAAIkB,EAEJlB,EAAOmB,qBAEPD,EAASlB,EAAOoB,YAEhB,GAAIF,EAASD,EAAW,CAEvBA,EAAYC,CACf,CACA,IAEChC,EAAK5C,QAAQyC,SAAQ,SAAUiB,GAE9BA,EAAOqB,cAAcnC,EAAKnD,MAAMkB,QAAQqE,sBAAuBL,EACjE,IAEC/B,EAAK7C,WAAWkF,iBACjB,EAKAzF,EAAc5E,UAAUsK,WAAa,SAAUC,GAE9C,IAAIvC,EAAOrF,KAEX,WAAY4H,IAAY,YAAc,YAAcpI,EAAQoI,KAAa,SAAU,CAElF,GAAIA,aAAmBxB,EAAQ,CAI9B,OAAOwB,CACV,MAAS,GAAIA,aAAmBC,EAAiB,CAI9C,OAAOD,EAAQE,YAAc,KAChC,MAAS,UAAWC,cAAgB,aAAeH,aAAmBG,YAAa,CAIhF,IAAI/C,EAAQK,EAAK5C,QAAQjC,MAAK,SAAU2F,GAEvC,OAAOA,EAAO7D,UAAYsF,CAC9B,IAEG,OAAO5C,GAAS,KACnB,CACA,KAAQ,CAIN,OAAOhF,KAAK2C,eAAeiF,IAAY,KACzC,CAKC,OAAO,KACR,EAEA3F,EAAc5E,UAAU2K,iBAAmB,SAAUnD,GAEpD,OAAO7E,KAAK2C,eAAekC,EAC5B,EAEA5C,EAAc5E,UAAU4K,sBAAwB,SAAUC,GACzD,IAAIC,EAAQnI,KAEZ,IAAIoI,EAAU,GAEdhL,OAAOiL,KAAKrI,KAAK2C,gBAAgBuC,SAAQ,SAAUL,GAElD,IAAIyD,EAAYzD,EAAM0D,MAAM,KAAK,GAEjC,GAAID,IAAcJ,EAAM,CAEvBE,EAAQnD,KAAKkD,EAAMxF,eAAekC,GACrC,CACA,IAEC,OAAOuD,CACR,EAEAnG,EAAc5E,UAAUmL,iBAAmB,SAAUrK,GAEpD,OAAO6B,KAAK0C,eAAevE,EAC5B,EAEA8D,EAAc5E,UAAUoL,uBAAyB,SAAUtK,GAE1D,IAAIA,EAAQ6B,KAAK0C,eAAe5C,WAAU,SAAU8E,GAEnD,OAAOA,EAAI8D,OACb,IAEC,OAAOvK,GAAS,EAAI6B,KAAK0C,eAAevE,GAAS,KAClD,EAEA8D,EAAc5E,UAAUsL,WAAa,WAEpC,OAAO3I,KAAKyC,OACb,EAEAR,EAAc5E,UAAUiJ,gBAAkB,SAAUH,GAEnD,OAAOnG,KAAK0C,eAAe5C,WAAU,SAAU8E,GAE9C,OAAOuB,IAAWvB,CACpB,GACA,EAIA3C,EAAc5E,UAAUuL,eAAiB,WAExC,OAAO5I,KAAK0C,cACb,EAIAT,EAAc5E,UAAUwL,SAAW,SAAUC,GAE5C,IAAIzD,EAAOrF,KAEXqF,EAAK3C,eAAewC,SAAQ,SAAUiB,EAAQX,GAE7CsD,EAAS3C,EAAQX,EACnB,GACA,EAIAvD,EAAc5E,UAAU0L,eAAiB,SAAUC,GAElD,IAAI3D,EAAOrF,KACPiJ,EAAS,GAEb5D,EAAK3C,eAAewC,SAAQ,SAAUiB,GAErC,IAAK6C,GAAUA,GAAU7C,EAAOuC,QAAS,CAExCO,EAAOhE,KAAKkB,EAAO+C,gBACtB,CACA,IAEC,OAAOD,CACR,EAIAhH,EAAc5E,UAAU8L,kBAAoB,WAE3C,IAAI9D,EAAOrF,KACPiJ,EAAS,GAEb5D,EAAK5C,QAAQyC,SAAQ,SAAUiB,GAE9B8C,EAAOhE,KAAKkB,EAAO+C,cAAc,MACnC,IAEC,OAAOD,CACR,EAEAhH,EAAc5E,UAAU+L,cAAgB,SAAUC,GAEjD,IAAIhE,EAAOrF,KACPiJ,EAAS,GACTxG,EAAU4G,EAAahE,EAAK5C,QAAU4C,EAAK3C,eAE/CD,EAAQyC,SAAQ,SAAUiB,GAEzB8C,EAAOhE,KAAKkB,EAAOmD,eACrB,IAEC,OAAOL,CACR,EAEAhH,EAAc5E,UAAUkM,SAAW,WAElC,IAAIC,EAAQ,EAEZxJ,KAAK0C,eAAewC,SAAQ,SAAUiB,GAErC,GAAIA,EAAOuC,QAAS,CAEnBc,GAASrD,EAAOoD,UACnB,CACA,IAEC,OAAOC,CACR,EAEAvH,EAAc5E,UAAUoM,WAAa,SAAUC,EAAM9H,EAAI+H,GAExD3J,KAAK4J,iBAAiBF,EAAM9H,EAAI+H,GAEhC,GAAI3J,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FlE,KAAKkC,MAAMiC,QAAQwB,iBAAiBrC,YACtC,CAEC,GAAItD,KAAKkC,MAAMgC,UAAU,eAAgB,CAExClE,KAAKkC,MAAMiC,QAAQ0F,YAAYC,OAAO9J,KAAKkC,MAAMM,WAAWuH,WAC9D,CAECnI,EAAGU,QAAQqE,WAAW9D,aAAa6G,EAAKpH,QAASV,EAAGU,SAEpD,GAAIqH,EAAO,CAEV/H,EAAGU,QAAQqE,WAAW9D,aAAajB,EAAGU,QAASoH,EAAKpH,QACtD,CAECtC,KAAKmH,wBAELnH,KAAKkC,MAAMM,WAAWsD,cACvB,EAEA7D,EAAc5E,UAAUuM,iBAAmB,SAAUF,EAAM9H,EAAI+H,GAE9D,GAAID,EAAKM,OAAOC,QAAS,CAExBjK,KAAKkK,mBAAmBR,EAAKM,OAAOvH,QAASiH,EAAM9H,EAAI+H,EACzD,KAAQ,CAEN3J,KAAKkK,mBAAmBlK,KAAKyC,QAASiH,EAAM9H,EAAI+H,EAClD,CAEC3J,KAAKkK,mBAAmBlK,KAAK0C,eAAgBgH,EAAM9H,EAAI+H,EAAO,MAE9D,GAAI3J,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FlE,KAAKkC,MAAMiC,QAAQwB,iBAAiBrC,YACtC,CAEC,GAAItD,KAAKkC,MAAMkB,QAAQwC,cAAe,CAErC5F,KAAKkC,MAAM2D,QAAQC,aAAa,KAClC,CAEC,GAAI9F,KAAKkC,MAAMkB,QAAQ+G,YAAa,CAEnCnK,KAAKkC,MAAMkB,QAAQ+G,YAAYzM,KAAKsC,KAAKkC,MAAOwH,EAAKJ,eAAgBtJ,KAAKkC,MAAMkI,cAAchB,gBAChG,CAEC,GAAIpJ,KAAKkC,MAAMkB,QAAQiH,aAAerK,KAAKkC,MAAMgC,UAAU,cAAe,OAASlE,KAAKkC,MAAMiC,QAAQkG,YAAYC,OAAO7H,QAAS,CAEjIzC,KAAKkC,MAAMiC,QAAQkG,YAAYE,KAAK,UACtC,CACA,EAEAtI,EAAc5E,UAAU6M,mBAAqB,SAAUzH,EAASiH,EAAM9H,EAAI+H,EAAOa,GAChF,IAAIC,EAASzK,KAEb,IAAIgB,EAAYyB,EAAQ3B,QAAQ4I,GAC5BgB,EACAC,EAAO,GAEX,GAAI3J,GAAa,EAAG,CAEnByB,EAAQiE,OAAO1F,EAAW,GAE1B0J,EAAUjI,EAAQ3B,QAAQc,GAE1B,GAAI8I,GAAW,EAAG,CAEjB,GAAIf,EAAO,CAEVe,EAAUA,EAAU,CACxB,CACA,KAAS,CAENA,EAAU1J,CACb,CAEEyB,EAAQiE,OAAOgE,EAAS,EAAGhB,GAE3B,GAAIc,EAAY,CAEf,GAAIxK,KAAKkC,MAAMkB,QAAQwH,UAAY5K,KAAKkC,MAAMgC,UAAU,WAAY,MAAO,CAE1ElE,KAAKkC,MAAMM,WAAWmI,KAAKzF,SAAQ,SAAUR,GAE5CiG,EAAOA,EAAKE,OAAOJ,EAAOvI,MAAMiC,QAAQyG,SAASE,gBAAgBpG,EAAK,MAAO,MAClF,GACA,CAEGiG,EAAOA,EAAKE,OAAO7K,KAAKkC,MAAMM,WAAWmI,MAEzCA,EAAKzF,SAAQ,SAAUR,GAEtB,GAAIA,EAAIqG,MAAM3M,OAAQ,CAErB,IAAI4M,EAAOtG,EAAIqG,MAAMrE,OAAO1F,EAAW,GAAG,GAE1C0D,EAAIqG,MAAMrE,OAAOgE,EAAS,EAAGM,EAClC,CACA,GACA,CACA,CACA,EAEA/I,EAAc5E,UAAU4N,eAAiB,SAAU9E,EAAQ+E,EAAUC,GACpE,IAAIC,EAASpL,KAEb,IAAI4D,EAAO,EACPyH,EAAS,EACTC,EAAS,EACTjF,EAAQF,EAAO1C,aAEnB,OAAO,IAAI8H,SAAQ,SAAUC,EAASC,GAErC,UAAWP,IAAa,YAAa,CAEpCA,EAAWE,EAAOlJ,MAAMkB,QAAQsI,sBACnC,CAEE,UAAWP,IAAc,YAAa,CAErCA,EAAYC,EAAOlJ,MAAMkB,QAAQuI,uBACpC,CAEE,GAAIxF,EAAOuC,QAAS,CAInB,OAAQwC,GAEP,IAAK,SAEL,IAAK,SAEJI,GAAUF,EAAO9I,QAAQyB,YAAc,EAEvC,MAED,IAAK,QAEJuH,EAASjF,EAAMtC,YAAcqH,EAAOhJ,eAAe2B,YAEnD,MAMF,IAAKoH,EAAW,CAEfE,EAAShF,EAAMuF,WAEf,GAAIP,EAAS,GAAKA,EAAShF,EAAMwF,YAAcT,EAAO9I,QAAQyB,YAAa,CAE1E,OAAO,KACZ,CACA,CAIGH,EAAOyC,EAAMuF,WAAaN,EAE1B1H,EAAO1C,KAAKC,IAAID,KAAK4K,IAAIlI,EAAMwH,EAAOlJ,MAAMM,WAAWF,QAAQwB,YAAcsH,EAAOlJ,MAAMM,WAAWF,QAAQyB,aAAc,GAE3HqH,EAAOlJ,MAAMM,WAAWmB,iBAAiBC,GAEzCwH,EAAOzH,iBAAiBC,GAExB4H,GACH,KAAS,CAENO,QAAQC,KAAK,qCAEbP,EAAO,oCACV,CACA,GACA,EAKAxJ,EAAc5E,UAAU4O,cAAgB,SAAUvH,GAEjD,IAAIW,EAAOrF,KAEX,IAAI+K,EAAQ,GAEZ1F,EAAK3C,eAAewC,SAAQ,SAAUiB,GAErC4E,EAAM9F,KAAKkB,EAAO+F,aAAaxH,GACjC,IAEC,OAAOqG,CACR,EAKA9I,EAAc5E,UAAU8O,iBAAmB,WAE1C,IAAI9G,EAAOrF,KACPoM,EAAa/G,EAAKnD,MAAMI,QAAQyB,YAGpCsI,EAAa,EAIb,GAAIhH,EAAK7C,WAAWF,QAAQgK,aAAejH,EAAK7C,WAAWF,QAAQiK,aAAc,CAEhFH,GAAc/G,EAAK7C,WAAWF,QAAQuJ,YAAcxG,EAAK7C,WAAWF,QAAQyB,WAC9E,CAEC/D,KAAK0C,eAAewC,SAAQ,SAAUiB,GAErC,IAAIqD,EAAOgD,EAAUC,EAErB,GAAItG,EAAOuC,QAAS,CAEnBc,EAAQrD,EAAOH,WAAWwD,OAAS,EAEnCgD,SAAkBrG,EAAOqG,UAAY,YAAcnH,EAAKnD,MAAMkB,QAAQsJ,eAAiBC,SAASxG,EAAOqG,UAEvG,UAAWhD,GAAS,SAAU,CAE7B,GAAIA,EAAM1I,QAAQ,MAAQ,EAAG,CAE5B2L,EAAWL,EAAa,IAAMO,SAASnD,EAC5C,KAAW,CAENiD,EAAWE,SAASnD,EACzB,CACA,KAAU,CAENiD,EAAWjD,CACf,CAEG6C,GAAcI,EAAWD,EAAWC,EAAWD,CAClD,CACA,IAEC,OAAOH,CACR,EAEApK,EAAc5E,UAAUuP,UAAY,SAAU5G,EAAYC,EAAQC,GACjE,IAAI2G,EAAS7M,KAEb,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GAErC,IAAItF,EAAS0G,EAAOpH,WAAWO,EAAYC,EAAQC,GAEnD2G,EAAOnH,kBAEP,GAAImH,EAAO3K,MAAMkB,QAAQuC,kBAAoBkH,EAAO3K,MAAMgC,UAAU,mBAAoB,MAAO,CAE9F2I,EAAO3K,MAAMiC,QAAQwB,iBAAiBrC,YACzC,CAEE,GAAIuJ,EAAO3K,MAAMgC,UAAU,eAAgB,CAE1C2I,EAAO3K,MAAMiC,QAAQ0F,YAAYC,OAAO+C,EAAO3K,MAAMM,WAAWuH,WACnE,CAEE8C,EAAO9G,OAAO,MAEd,GAAI8G,EAAO3K,MAAMiC,QAAQ2I,OAAOC,WAAa,aAAc,CAE1D5G,EAAO6G,mBACV,CAEEH,EAAO1F,wBAEP0F,EAAO3K,MAAMM,WAAWsD,eAExB,GAAI+G,EAAO3K,MAAMkB,QAAQwC,cAAe,CAEvCiH,EAAO3K,MAAM2D,QAAQC,cACxB,CAEE0F,EAAQrF,EACV,GACA,EAIAlE,EAAc5E,UAAU4P,iBAAmB,SAAU9G,GAEpD,IAAItB,EAAQsB,EAAO+G,WACf/O,EAIJ,GAAI0G,EAAO,QAEH7E,KAAK2C,eAAekC,EAC7B,CAIC1G,EAAQ6B,KAAK0C,eAAe5B,QAAQqF,GAEpC,GAAIhI,GAAS,EAAG,CAEf6B,KAAK0C,eAAegE,OAAOvI,EAAO,EACpC,CAICA,EAAQ6B,KAAKyC,QAAQ3B,QAAQqF,GAE7B,GAAIhI,GAAS,EAAG,CAEf6B,KAAKyC,QAAQiE,OAAOvI,EAAO,EAC7B,CAEC,GAAI6B,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FlE,KAAKkC,MAAMiC,QAAQwB,iBAAiBrC,YACtC,CAECtD,KAAKmH,wBAELnH,KAAK+F,QACN,EAIA9D,EAAc5E,UAAU0I,OAAS,SAAUoH,GAE1C,GAAIA,EAAO,CAEV,GAAIC,EAAU/P,UAAUgQ,QAAQC,UAAUtN,KAAKsC,SAAU,CAExDtC,KAAKmH,uBACR,CAEEnH,KAAKkC,MAAMM,WAAW+K,cAEtBvN,KAAKkC,MAAMM,WAAWsD,cACxB,CAEC,GAAI,CAAC,aAAc,kBAAkBhF,QAAQd,KAAKkC,MAAMiC,QAAQ2I,OAAOC,YAAc,EAAG,CAEvF/M,KAAKkC,MAAMiC,QAAQ2I,OAAOA,QAC5B,KAAQ,CAEN,GAAIK,EAAO,CAEVnN,KAAKkC,MAAMiC,QAAQ2I,OAAOA,QAC7B,KAAS,CAEN,GAAI9M,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FlE,KAAKkC,MAAMiC,QAAQwB,iBAAiB6H,QACxC,CACA,CACA,CAEC,GAAIxN,KAAKkC,MAAMgC,UAAU,iBAAkB,CAE1ClE,KAAKkC,MAAMiC,QAAQC,cAAc0I,QACnC,CAEC,GAAI9M,KAAKkC,MAAMgC,UAAU,eAAgB,CAExClE,KAAKkC,MAAMiC,QAAQ0F,YAAYC,OAAO9J,KAAKkC,MAAMM,WAAWuH,WAC9D,CAEC,GAAIoD,EAAO,CAEV,GAAInN,KAAKkC,MAAMkB,QAAQiH,aAAerK,KAAKkC,MAAMgC,UAAU,cAAe,OAASlE,KAAKkC,MAAMiC,QAAQkG,YAAYC,OAAO7H,QAAS,CAEjIzC,KAAKkC,MAAMiC,QAAQkG,YAAYE,KAAK,UACvC,CAEE,GAAIvK,KAAKkC,MAAMgC,UAAU,eAAgB,CAExClE,KAAKkC,MAAMiC,QAAQ0F,YAAY9D,QAClC,CACA,CAEC/F,KAAKkC,MAAMuL,cAAc1H,QAC1B,EAGA,IAAI8B,EAAkB,SAASA,EAAgB1B,GAC9CnG,KAAK0N,QAAUvH,EACfnG,KAAK2N,KAAO,iBACb,EAEA9F,EAAgBxK,UAAUoG,WAAa,WACtC,OAAOzD,KAAK0N,QAAQjK,YACrB,EAEAoE,EAAgBxK,UAAU6L,cAAgB,WACzC,OAAOlJ,KAAK0N,QAAQxE,eACrB,EAEArB,EAAgBxK,UAAU6P,SAAW,WACpC,OAAOlN,KAAK0N,QAAQR,UACrB,EAEArF,EAAgBxK,UAAUuQ,SAAW,WACpC,IAAI7C,EAAQ,GAEZ/K,KAAK0N,QAAQ3C,MAAM7F,SAAQ,SAAU8F,GACpCD,EAAM9F,KAAK+F,EAAK1B,eAClB,IAEC,OAAOyB,CACR,EAEAlD,EAAgBxK,UAAUwQ,cAAgB,WACzC9B,QAAQC,KAAK,mFACb,OAAOhM,KAAK0N,QAAQhF,OACrB,EAEAb,EAAgBxK,UAAUyQ,UAAY,WACrC,OAAO9N,KAAK0N,QAAQhF,OACrB,EAEAb,EAAgBxK,UAAU0Q,KAAO,WAChC,GAAI/N,KAAK0N,QAAQzD,QAAS,CACzBjK,KAAK0N,QAAQjL,QAAQyC,SAAQ,SAAUiB,GACtCA,EAAO4H,MACV,GACA,KAAQ,CACN/N,KAAK0N,QAAQK,MACf,CACA,EAEAlG,EAAgBxK,UAAU2Q,KAAO,WAChC,GAAIhO,KAAK0N,QAAQzD,QAAS,CACzBjK,KAAK0N,QAAQjL,QAAQyC,SAAQ,SAAUiB,GACtCA,EAAO6H,MACV,GACA,KAAQ,CACNhO,KAAK0N,QAAQM,MACf,CACA,EAEAnG,EAAgBxK,UAAU4Q,OAAS,WAClC,GAAIjO,KAAK0N,QAAQhF,QAAS,CACzB1I,KAAKgO,MACP,KAAQ,CACNhO,KAAK+N,MACP,CACA,EAEAlG,EAAgBxK,UAAU6Q,OAAS,WAClC,OAAOlO,KAAK0N,QAAQQ,QACrB,EAEArG,EAAgBxK,UAAU8Q,cAAgB,WACzC,IAAIlF,EAAS,GAEb,GAAIjJ,KAAK0N,QAAQjL,QAAQrE,OAAQ,CAChC4B,KAAK0N,QAAQjL,QAAQyC,SAAQ,SAAUiB,GACtC8C,EAAOhE,KAAKkB,EAAOmD,eACtB,GACA,CAEC,OAAOL,CACR,EAEApB,EAAgBxK,UAAU+Q,gBAAkB,WAC3C,OAAOpO,KAAK0N,QAAQ1D,kBAAkB5D,EAASpG,KAAK0N,QAAQ1D,OAAOV,eAAiB,KACrF,EAEAzB,EAAgBxK,UAAUyK,SAAW,WACpC,OAAO9H,KAAK0N,OACb,EAEA7F,EAAgBxK,UAAUgR,SAAW,WACpC,OAAOrO,KAAK0N,QAAQxL,MAAMkI,cAAca,eAAejL,KAAK0N,QAC7D,EAEA7F,EAAgBxK,UAAUiR,SAAW,WACpC,OAAOtO,KAAK0N,QAAQxL,KACrB,EAEA2F,EAAgBxK,UAAUkR,kBAAoB,WAC7C,GAAIvO,KAAK0N,QAAQxL,MAAMgC,UAAU,SAAU,MAAO,CACjDlE,KAAK0N,QAAQxL,MAAMiC,QAAQqK,OAAOC,qBAAqBzO,KAAK0N,QAC9D,CACA,EAEA7F,EAAgBxK,UAAUqR,mBAAqB,WAC9C,GAAI1O,KAAK0N,QAAQxL,MAAMgC,UAAU,SAAU,MAAO,CACjDlE,KAAK0N,QAAQxL,MAAMiC,QAAQqK,OAAOE,mBAAmB1O,KAAK0N,QAC5D,CACA,EAEA7F,EAAgBxK,UAAUsR,qBAAuB,WAChD,GAAI3O,KAAK0N,QAAQxL,MAAMgC,UAAU,SAAU,MAAO,CACjD,OAAOlE,KAAK0N,QAAQxL,MAAMiC,QAAQqK,OAAOG,qBAAqB3O,KAAK0N,QACrE,CACA,EAEA7F,EAAgBxK,UAAUuR,qBAAuB,SAAU7Q,GAC1D,GAAIiC,KAAK0N,QAAQxL,MAAMgC,UAAU,SAAU,MAAO,CACjDlE,KAAK0N,QAAQxL,MAAMiC,QAAQqK,OAAOI,qBAAqB5O,KAAK0N,QAAS3P,EACvE,CACA,EAEA8J,EAAgBxK,UAAUwR,KAAO,SAAUjN,EAAI+H,GAC9C,IAAImF,EAAW9O,KAAK0N,QAAQxL,MAAMkI,cAAczC,WAAW/F,GAE3D,GAAIkN,EAAU,CACb9O,KAAK0N,QAAQxL,MAAMkI,cAAcX,WAAWzJ,KAAK0N,QAASoB,EAAUnF,EACtE,KAAQ,CACNoC,QAAQC,KAAK,yCAA0C8C,EACzD,CACA,EAEAjH,EAAgBxK,UAAU0R,cAAgB,WACzC,IAAIC,EAAUhP,KAAK0N,QAAQuB,aAE3B,OAAOD,EAAUA,EAAQ1F,eAAiB,KAC3C,EAEAzB,EAAgBxK,UAAU6R,cAAgB,WACzC,IAAIC,EAAUnP,KAAK0N,QAAQ0B,aAE3B,OAAOD,EAAUA,EAAQ7F,eAAiB,KAC3C,EAEAzB,EAAgBxK,UAAUgS,iBAAmB,SAAUC,GACtD,OAAOtP,KAAK0N,QAAQ2B,iBAAiBC,EACtC,EAEAzH,EAAgBxK,UAAUkM,SAAW,WACpC,OAAOvJ,KAAK0N,QAAQnE,UACrB,EAEA1B,EAAgBxK,UAAUkS,SAAW,SAAU/F,GAC9C,IAAIxK,EAEJ,GAAIwK,IAAU,KAAM,CACnBxK,EAASgB,KAAK0N,QAAQV,kBAAkB,KAC1C,KAAQ,CACNhO,EAASgB,KAAK0N,QAAQ6B,SAAS/F,EACjC,CAEC,GAAIxJ,KAAK0N,QAAQxL,MAAMkB,QAAQwC,cAAe,CAC7C5F,KAAK0N,QAAQxL,MAAM2D,QAAQC,aAAa,KAC1C,CAEC,OAAO9G,CACR,EAEA6I,EAAgBxK,UAAUmS,SAAW,WACpC,OAAOxP,KAAK0N,QAAQ8B,UACrB,EAEA,IAAIpJ,EAAS,SAASA,EAAOjB,EAAK6E,GACjC,IAAI3E,EAAOrF,KAEXA,KAAKkC,MAAQ8H,EAAO9H,MACpBlC,KAAKgG,WAAab,EAClBnF,KAAKgK,OAASA,EACdhK,KAAK2N,KAAO,SACZ3N,KAAKyC,QAAU,GACfzC,KAAK+K,MAAQ,GACb/K,KAAKsC,QAAUtC,KAAKiD,gBACpBjD,KAAKyP,eAAiB,MACtBzP,KAAK0P,mBAAqB,MAC1B1P,KAAK2P,aAAe,MACpB3P,KAAK4P,aAAe5P,KAAK6P,qBACzB7P,KAAKiK,QAAU,MACfjK,KAAK8P,QAAU,MACf9P,KAAK+P,SAAW,GAChB/P,KAAKgQ,UAAY,GAGjBhQ,KAAK6E,MAAQ,GACb7E,KAAKiQ,eAAiB,GACtBjQ,KAAKkQ,cAAgB,GACrBlQ,KAAKmQ,cAAgB,GAErBnQ,KAAKoQ,uBAAyB,MAE9BpQ,KAAKqQ,SAASrQ,KAAKgG,WAAWnB,OAE9B,GAAI7E,KAAKkC,MAAMkB,QAAQkN,sBAAuB,CAC7CtQ,KAAKuQ,iBACP,CAECvQ,KAAKmE,QAAU,GAEfnE,KAAKwQ,WAAa,CACjBC,UAAW,MACXC,aAAc,MACdC,YAAa,MACbC,QAAS,MACTC,WAAY,MACZC,YAAa,MACbC,eAAgB,MAChBC,eAAgB,MAChBC,cAAe,MACfC,aAAc,MACdC,cAAe,OAGhBnR,KAAKwJ,MAAQ,KACbxJ,KAAKoR,YAAc,GACnBpR,KAAKqR,SAAW,KAChBrR,KAAKsR,eAAiB,GACtBtR,KAAKwM,SAAW,KAChBxM,KAAKuR,eAAiB,GACtBvR,KAAKwR,WAAa,MAElBxR,KAAK0I,QAAU,KAEf1I,KAAKyR,UAAY,KAEjBzR,KAAK0R,8BAGL,GAAIvM,EAAI1C,QAAS,CAEhBzC,KAAKiK,QAAU,KAEf9E,EAAI1C,QAAQyC,SAAQ,SAAUC,EAAKK,GAClC,IAAImM,EAAS,IAAIvL,EAAOjB,EAAKE,GAC7BA,EAAKuM,aAAaD,EACrB,IAEEtM,EAAKwM,uBACP,KAAQ,CACN7H,EAAOhD,oBAAoBhH,KAC7B,CAEC,GAAImF,EAAI2M,WAAa9R,KAAKkC,MAAMkB,QAAQ2O,cAAgB,OAAS/R,KAAKkC,MAAMgC,UAAU,WAAY,CACjGlE,KAAKkC,MAAMiC,QAAQ6N,QAAQC,UAAU,KACvC,CAECjS,KAAKkS,eAELlS,KAAKmS,mBACN,EAEA/L,EAAO/I,UAAU4F,cAAgB,WAChC,IAAIF,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,iBACjBJ,EAAGqP,aAAa,OAAQ,gBACxBrP,EAAGqP,aAAa,YAAa,QAE7B,OAAOrP,CACR,EAEAqD,EAAO/I,UAAUwS,mBAAqB,WACrC,IAAI9M,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,4BAEjB,OAAOJ,CACR,EAEAqD,EAAO/I,UAAUkT,gBAAkB,WAClC,IAAI8B,EAASrS,KAEb5C,OAAOiL,KAAKrI,KAAKgG,YAAYd,SAAQ,SAAUzH,GAC9C,GAAI4U,EAAOC,kBAAkBxR,QAAQrD,MAAU,EAAG,CACjDsO,QAAQC,KAAK,yCAA2CqG,EAAOxN,OAASwN,EAAOrM,WAAWlB,OAAS,YAAarH,EACnH,CACA,GACA,EAEA2I,EAAO/I,UAAUgT,SAAW,SAAUxL,GACrC7E,KAAK6E,MAAQA,EACb7E,KAAKiQ,eAAiBpL,EAAQ7E,KAAKkC,MAAMkB,QAAQmP,qBAAuB1N,EAAM0D,MAAMvI,KAAKkC,MAAMkB,QAAQmP,sBAAwB,CAAC1N,GAAS,GACzI7E,KAAKkQ,cAAgBlQ,KAAKiQ,eAAe7R,OAAS,EAAI4B,KAAKwS,eAAiBxS,KAAKyS,aACjFzS,KAAKmQ,cAAgBnQ,KAAKiQ,eAAe7R,OAAS,EAAI4B,KAAK0S,eAAiB1S,KAAK2S,YAClF,EAGAvM,EAAO/I,UAAU4J,uBAAyB,SAAUd,GACnDnG,KAAKgK,OAAO/C,uBAAuBd,EACpC,EAGAC,EAAO/I,UAAU2J,oBAAsB,SAAUb,GAChDnG,KAAKgK,OAAOhD,oBAAoBb,EACjC,EAGAC,EAAO/I,UAAU6J,mBAAqB,WACrC,GAAIlH,KAAKiK,QAAS,CACjBjK,KAAKyC,QAAQyC,SAAQ,SAAUiB,GAC9BA,EAAOe,oBACV,GACA,KAAQ,CACNlH,KAAKiH,uBAAuBjH,KAC9B,CACA,EAEAoG,EAAO/I,UAAUqU,4BAA8B,WAC9C,UAAW1R,KAAKgG,WAAW4M,aAAe,YAAa,CACtD5S,KAAKgG,WAAW6M,YAAc7S,KAAKgG,WAAW4M,WAC9C7G,QAAQC,KAAK,qFACf,CAEC,UAAWhM,KAAKgG,WAAW8M,QAAU,YAAa,CACjD9S,KAAKgG,WAAW+J,SAAW/P,KAAKgG,WAAW8M,MAC3C/G,QAAQC,KAAK,8EACf,CAEC,UAAWhM,KAAKgG,WAAW+M,gBAAkB,YAAa,CACzD/S,KAAKgG,WAAWgN,cAAgBhT,KAAKgG,WAAW+M,cAChDhH,QAAQC,KAAK,oFACf,CACA,EAEA5F,EAAO/I,UAAU4V,WAAa,WAC7B,IAAI5N,EAAOrF,KACPmF,EAAME,EAAKW,WAGf,IAAI8J,EAAU3K,EAAI+N,eAAiB/N,EAAI2K,UAAY,MAAQ3K,EAAI+N,cAAgB7N,EAAKnD,MAAMkB,QAAQ+P,eAElG,GAAIrD,EAAS,CACZ,GAAIA,IAAY,KAAM,CACrB,GAAI3K,EAAIN,MAAO,CACdQ,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,WAAalO,EAAIN,OAAO,SAAU9G,GAClEsH,EAAK/C,QAAQ8P,aAAa,QAASrU,GAASoH,EAAIL,MACrD,GACA,KAAU,CACNO,EAAK/C,QAAQ8P,aAAa,QAASjN,EAAIL,MAC3C,CACA,KAAS,CACN,UAAWgL,GAAW,WAAY,CACjCA,EAAUA,EAAQzK,EAAKiE,gBAEvB,GAAIwG,IAAY,MAAO,CACtBA,EAAU,EACf,CACA,CAEGzK,EAAK/C,QAAQ8P,aAAa,QAAStC,EACtC,CACA,KAAQ,CACNzK,EAAK/C,QAAQ8P,aAAa,QAAS,GACrC,CACA,EAGAhM,EAAO/I,UAAU6U,aAAe,WAC/B,IAAI7M,EAAOrF,KACPmF,EAAME,EAAKW,WAEf,MAAOX,EAAK/C,QAAQQ,WAAY,CAC/BuC,EAAK/C,QAAQgD,YAAYD,EAAK/C,QAAQQ,WACxC,CAAE,GAAIqC,EAAImO,eAAgB,CACxBjO,EAAK/C,QAAQY,UAAUC,IAAI,0BAE3B,GAAIgC,EAAImO,iBAAmB,OAAQ,CAClCjO,EAAK/C,QAAQY,UAAUC,IAAI,8BAC9B,CACA,CAECkC,EAAKoK,eAAiBpK,EAAKkO,cAE3BlO,EAAKoK,eAAiBpK,EAAKmO,4BAE3BnO,EAAK/C,QAAQwE,YAAYzB,EAAKoK,gBAE9B,GAAIpK,EAAK4E,QAAS,CACjB5E,EAAKoO,mBACP,KAAQ,CACNpO,EAAKqO,oBACP,CAECrO,EAAK4N,aAGL,GAAI5N,EAAKnD,MAAMkB,QAAQuQ,kBAAoBtO,EAAKnD,MAAMgC,UAAU,iBAAkB,CACjFmB,EAAKnD,MAAMiC,QAAQyP,cAAcC,iBAAiB,SAAUxO,EAAMA,EAAK/C,QACzE,CAGC,GAAI6C,EAAI2O,cAAgBzO,EAAKnD,MAAMgC,UAAU,WAAamB,EAAKnD,MAAMgC,UAAU,QAAS,CACvF,UAAWiB,EAAI4O,0BAA4B,aAAe5O,EAAIN,MAAO,CACpEQ,EAAKnD,MAAMiC,QAAQiP,SAASY,iCAAiC7O,EAAIN,MAAOM,EAAI4O,wBAC/E,CAEE1O,EAAKnD,MAAMiC,QAAQqK,OAAOqF,iBAAiBxO,EAC7C,CAGC,GAAIA,EAAKnD,MAAMgC,UAAU,iBAAkB,CAC1CmB,EAAKnD,MAAMiC,QAAQC,cAAcyP,iBAAiBxO,EACpD,CAGC,GAAIA,EAAKnD,MAAMkB,QAAQ6Q,iBAAmB5O,EAAK4E,SAAW5E,EAAKnD,MAAMgC,UAAU,cAAe,CAC7FmB,EAAKnD,MAAMiC,QAAQsF,WAAWoK,iBAAiBxO,EACjD,CAGC,IAAKF,EAAI+O,SAAW/O,EAAIgP,aAAe9O,EAAKnD,MAAMgC,UAAU,eAAgB,CAC3EmB,EAAKnD,MAAMiC,QAAQ0F,YAAYgK,iBAAiBxO,EAClD,CAGC,GAAIA,EAAKnD,MAAMgC,UAAU,gBAAkBmB,EAAKnD,MAAMiC,QAAQkG,YAAYC,OAAO7H,QAAS,CACzF4C,EAAKnD,MAAMiC,QAAQkG,YAAYwJ,iBAAiBxO,EAClD,CAGCA,EAAK/C,QAAQ8R,iBAAiB,cAAc,SAAUC,GACrDhP,EAAK4N,YACP,GACA,EAEA7M,EAAO/I,UAAUkW,YAAc,WAE9B,IAAIlO,EAAOrF,KACPmF,EAAME,EAAKW,WACXsO,EACAC,EACAC,EAGJ,UAAWrP,EAAIsP,aAAe,WAAY,CACzCpP,EAAK/C,QAAQ8R,iBAAiB,SAAS,SAAUC,GAChDlP,EAAIsP,YAAYJ,EAAGhP,EAAKiE,eAC3B,GACA,CAEC,UAAWnE,EAAIuP,gBAAkB,WAAY,CAC5CrP,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GACnDlP,EAAIuP,eAAeL,EAAGhP,EAAKiE,eAC9B,GACA,CAEC,UAAWnE,EAAIwP,eAAiB,WAAY,CAC3CtP,EAAK/C,QAAQ8R,iBAAiB,eAAe,SAAUC,GACtDlP,EAAIwP,cAAcN,EAAGhP,EAAKiE,eAC7B,GACA,CAGC,UAAWnE,EAAIyP,WAAa,WAAY,CACvCJ,EAAM,MAENnP,EAAK/C,QAAQ8R,iBAAiB,cAAc,SAAUC,GACrDG,EAAM,IACT,GAAK,CAAEK,QAAS,OAEdxP,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GACnD,GAAIG,EAAK,CACRrP,EAAIyP,UAAUP,EAAGhP,EAAKiE,eAC1B,CAEGkL,EAAM,KACT,GACA,CAEC,UAAWrP,EAAI2P,cAAgB,WAAY,CAC1CR,EAAS,KAETjP,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GAEnD,GAAIC,EAAQ,CACXS,aAAaT,GACbA,EAAS,KAETnP,EAAI2P,aAAaT,EAAGhP,EAAKiE,eAC7B,KAAU,CAENgL,EAASU,YAAW,WACnBD,aAAaT,GACbA,EAAS,IACd,GAAO,IACP,CACA,GACA,CAEC,UAAWnP,EAAI8P,eAAiB,WAAY,CAC3CV,EAAU,KAEVlP,EAAK/C,QAAQ8R,iBAAiB,cAAc,SAAUC,GACrDU,aAAaR,GAEbA,EAAUS,YAAW,WACpBD,aAAaR,GACbA,EAAU,KACVC,EAAM,MACNrP,EAAI8P,cAAcZ,EAAGhP,EAAKiE,eAC9B,GAAM,IACN,GAAK,CAAEuL,QAAS,OAEdxP,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GACnDU,aAAaR,GACbA,EAAU,IACb,GACA,CAGC,UAAWpP,EAAIsL,WAAa,WAAY,CACvCpL,EAAKmL,WAAWC,UAAYtL,EAAIsL,SAClC,CAEC,UAAWtL,EAAIuL,cAAgB,WAAY,CAC1CrL,EAAKmL,WAAWE,aAAevL,EAAIuL,YACrC,CAEC,UAAWvL,EAAIwL,aAAe,WAAY,CACzCtL,EAAKmL,WAAWG,YAAcxL,EAAIwL,WACpC,CAGC,UAAWxL,EAAI4L,gBAAkB,WAAY,CAC5C1L,EAAKmL,WAAWO,eAAiB5L,EAAI4L,cACvC,CAEC,UAAW5L,EAAI6L,gBAAkB,WAAY,CAC5C3L,EAAKmL,WAAWQ,eAAiB7L,EAAI6L,cACvC,CAEC,UAAW7L,EAAI8L,eAAiB,WAAY,CAC3C5L,EAAKmL,WAAWS,cAAgB9L,EAAI8L,aACtC,CAEC,UAAW9L,EAAI+L,cAAgB,WAAY,CAC1C7L,EAAKmL,WAAWU,aAAe/L,EAAI+L,YACrC,CAEC,UAAW/L,EAAIgM,eAAiB,WAAY,CAC3C9L,EAAKmL,WAAWW,cAAgBhM,EAAIgM,aACtC,CAGC,UAAWhM,EAAIyL,SAAW,WAAY,CACrCvL,EAAKmL,WAAWI,QAAUzL,EAAIyL,OAChC,CAEC,UAAWzL,EAAI0L,YAAc,WAAY,CACxCxL,EAAKmL,WAAWK,WAAa1L,EAAI0L,UACnC,CAEC,UAAW1L,EAAI2L,aAAe,WAAY,CACzCzL,EAAKmL,WAAWM,YAAc3L,EAAI2L,WACpC,CAGC,UAAW3L,EAAI+P,YAAc,WAAY,CACxC7P,EAAKmL,WAAW0E,WAAa/P,EAAI+P,UACnC,CAEC,UAAW/P,EAAIgQ,aAAe,WAAY,CACzC9P,EAAKmL,WAAW2E,YAAchQ,EAAIgQ,WACpC,CAEC,UAAWhQ,EAAIiQ,mBAAqB,WAAY,CAC/C/P,EAAKmL,WAAW4E,kBAAoBjQ,EAAIiQ,iBAC1C,CACA,EAGAhP,EAAO/I,UAAUqW,mBAAqB,WACrC,IAAI2B,EAASrV,KAEV,IAACmF,EAAMnF,KAAKgG,WACX9D,EAAQlC,KAAKkC,MAIjB,GAAIA,EAAMgC,UAAU,QAAS,CAC5BhC,EAAMiC,QAAQmR,KAAKzB,iBAAiB7T,KAAMA,KAAK0P,mBACjD,CAGC,IAAKvK,EAAIoQ,mBAAqBpQ,EAAIqQ,iBAAmBrQ,EAAIsQ,aAAevT,EAAMgC,UAAU,QAAS,CAChGhC,EAAMiC,QAAQuR,KAAKC,uBAAuB3V,KAC5C,CAGC,GAAIkC,EAAMgC,UAAU,UAAW,CAC9BhC,EAAMiC,QAAQyR,OAAO/B,iBAAiB7T,KACxC,CAGC,UAAWmF,EAAI0Q,QAAU,aAAe3T,EAAMgC,UAAU,QAAS,CAChEhC,EAAMiC,QAAQ2R,KAAKjC,iBAAiB7T,KACtC,CAGC,UAAWmF,EAAI4Q,WAAa,aAAe7T,EAAMgC,UAAU,YAAa,CACvEhC,EAAMiC,QAAQqL,SAASqE,iBAAiB7T,KAC1C,CAGC,GAAIkC,EAAMgC,UAAU,WAAY,CAC/BhC,EAAMiC,QAAQ6R,QAAQnC,iBAAiB7T,KACzC,CAGC,GAAIkC,EAAMgC,UAAU,YAAa,CAChChC,EAAMiC,QAAQ8R,SAASpC,iBAAiB7T,KAC1C,CAGC,GAAIR,EAAQ0C,EAAMkB,QAAQuC,mBAAqBzD,EAAMgC,UAAU,oBAAqB,CACnFhC,EAAMiC,QAAQwB,iBAAiBkO,iBAAiB7T,KAClD,CAGC,UAAWmF,EAAIuD,SAAW,YAAa,CACtC,GAAIvD,EAAIuD,QAAS,CAChB1I,KAAK+N,KAAK,KACb,KAAS,CACN/N,KAAKgO,KAAK,KACb,CACA,CAGC,GAAI7I,EAAI+Q,SAAU,CACjB,IAAIC,EAAchR,EAAI+Q,SAAS3N,MAAM,KACrC4N,EAAYjR,SAAQ,SAAUkR,GAC7Bf,EAAO/S,QAAQY,UAAUC,IAAIiT,EAChC,GACA,CAEC,GAAIjR,EAAIN,MAAO,CACd7E,KAAKsC,QAAQ8P,aAAa,kBAAmBjN,EAAIN,MACnD,CAGC7E,KAAKqW,mBAAmBlR,EAAIqH,UAAY,YAAcxM,KAAKkC,MAAMkB,QAAQsJ,eAAiBC,SAASxH,EAAIqH,WAEvG,GAAIrH,EAAIkM,UAAYrR,KAAKkC,MAAMkB,QAAQkT,eAAgB,CACtD,GAAInR,EAAIkM,WAAa,MAAO,CAC3BrR,KAAKuW,mBAAmBpR,EAAIkM,UAAY,YAAcrR,KAAKkC,MAAMkB,QAAQkT,eAAiB3J,SAASxH,EAAIkM,UAC1G,CACA,CAECrR,KAAKgN,oBAGLhN,KAAK8P,QAAU9P,KAAKgG,WAAW8J,SAAW9P,KAAKgG,WAAW8J,UAAY,MAAQ9P,KAAKgG,WAAW8J,QAAU9P,KAAKkC,MAAMkB,QAAQoT,SAG3HxW,KAAK+P,gBAAkB/P,KAAKgG,WAAW+J,UAAY,YAAc/P,KAAKkC,MAAMkB,QAAQqT,aAAezW,KAAKgG,WAAW+J,SACnH/P,KAAKgQ,iBAAmBhQ,KAAKgG,WAAWgK,WAAa,YAAchQ,KAAKkC,MAAMkB,QAAQsT,cAAgB1W,KAAKgG,WAAWgK,UAEtHhQ,KAAK2P,aAAa3L,MAAM2S,UAAY3W,KAAKgG,WAAW4Q,gBAAkB5W,KAAKkC,MAAMkB,QAAQwT,cAC1F,EAEAxQ,EAAO/I,UAAUmW,0BAA4B,WAI5C,IAAI/D,EAAiBzM,SAASC,cAAc,OAC5CwM,EAAevM,UAAUC,IAAI,yBAE7BnD,KAAK0P,mBAAqB1M,SAASC,cAAc,OACjDjD,KAAK0P,mBAAmBxM,UAAUC,IAAI,8BAEtCsM,EAAe3I,YAAY9G,KAAK0P,oBAEhC1P,KAAK2P,aAAe3P,KAAK6W,0BAEzB7W,KAAK0P,mBAAmB5I,YAAY9G,KAAK2P,cAEzC,OAAOF,CACR,EAGArJ,EAAO/I,UAAUwZ,wBAA0B,WACvC,IAACxR,EAAOrF,KACPmF,EAAME,EAAKW,WACX9D,EAAQmD,EAAKnD,MAGjB,IAAIwN,EAAqB1M,SAASC,cAAc,OAChDyM,EAAmBxM,UAAUC,IAAI,uBAEjC,GAAIgC,EAAI2R,cAAe,CACtB,IAAInH,EAAe3M,SAASC,cAAc,SAC1C0M,EAAazM,UAAUC,IAAI,0BAE3BwM,EAAayE,iBAAiB,SAAS,SAAUC,GAChDA,EAAE0C,kBACFpH,EAAaqH,OAChB,IAEErH,EAAayE,iBAAiB,UAAU,WACvCjP,EAAIL,MAAQ6K,EAAa5R,MACzBmE,EAAMkB,QAAQ6T,mBAAmBvZ,KAAK2H,EAAKnD,MAAOmD,EAAKiE,eAC1D,IAEEoG,EAAmB5I,YAAY6I,GAE/B,GAAIxK,EAAIN,MAAO,CACd3C,EAAMiC,QAAQiP,SAASC,KAAK,WAAalO,EAAIN,OAAO,SAAUqS,GAC7DvH,EAAa5R,MAAQmZ,GAAQ/R,EAAIL,OAAS,QAC9C,GACA,KAAS,CACN6K,EAAa5R,MAAQoH,EAAIL,OAAS,QACrC,CACA,KAAQ,CACN,GAAIK,EAAIN,MAAO,CACd3C,EAAMiC,QAAQiP,SAASC,KAAK,WAAalO,EAAIN,OAAO,SAAUqS,GAC7D7R,EAAK8R,yBAAyBzH,EAAoBwH,GAAQ/R,EAAIL,OAAS,SAC3E,GACA,KAAS,CACNO,EAAK8R,yBAAyBzH,EAAoBvK,EAAIL,OAAS,SAClE,CACA,CAEC,OAAO4K,CACR,EAEAtJ,EAAO/I,UAAU8Z,yBAA2B,SAAUpU,EAAI+B,GACzD,IAAIsS,EAASpX,KAEb,IAAIqX,EAAWC,EAAUC,EAAQC,EAAUC,EAE3C,GAAIzX,KAAKgG,WAAW0R,gBAAkB1X,KAAKkC,MAAMgC,UAAU,UAAW,CAErEmT,EAAYrX,KAAKkC,MAAMiC,QAAQyR,OAAO+B,aAAa3X,KAAKgG,WAAW0R,gBAEnED,EAAa,SAASA,EAAW3O,GAChCsO,EAAOhH,uBAAyBtH,CACnC,EAEE0O,EAAW,CACVI,SAAU,SAASA,IAClB,OAAO9S,CACX,EACGrB,WAAY,SAASA,IACpB,OAAOV,CACX,GAGEwU,EAASvX,KAAKgG,WAAW6R,sBAAwB,GAEjDN,SAAgBA,IAAW,WAAaA,IAAWA,EAEnDD,EAAWD,EAAU3Z,KAAKsC,KAAKkC,MAAMiC,QAAQyR,OAAQ4B,EAAUD,EAAQE,GAEvE,cAAeH,IAAa,YAAc,YAAc9X,EAAQ8X,IAC/D,IAAK,SACJ,GAAIA,aAAoBQ,KAAM,CAC7B/U,EAAG+D,YAAYwQ,EACpB,KAAW,CACNvU,EAAGgV,UAAY,GACfhM,QAAQC,KAAK,uJAAwJsL,EAC1K,CACI,MACD,IAAK,YACL,IAAK,OACJvU,EAAGgV,UAAY,GACf,MACD,QACChV,EAAGgV,UAAYT,EAEnB,KAAQ,CACNvU,EAAGgV,UAAYjT,CACjB,CACA,EAGAsB,EAAO/I,UAAUoW,kBAAoB,WACpC,IAAIuE,EAAShY,KAEbA,KAAKsC,QAAQY,UAAUC,IAAI,uBAC3BnD,KAAKsC,QAAQ8P,aAAa,OAAQ,eAClCpS,KAAKsC,QAAQ8P,aAAa,aAAcpS,KAAKgG,WAAWlB,OAGxD,GAAI9E,KAAKgG,WAAWkQ,SAAU,CAC7B,IAAIC,EAAcnW,KAAKgG,WAAWkQ,SAAS3N,MAAM,KACjD4N,EAAYjR,SAAQ,SAAUkR,GAC7B4B,EAAO1V,QAAQY,UAAUC,IAAIiT,EAChC,GACA,CAGC,IAAKpW,KAAKgG,WAAWuP,mBAAqBvV,KAAKgG,WAAWyP,aAAezV,KAAKkC,MAAMgC,UAAU,QAAS,CACtGlE,KAAKkC,MAAMiC,QAAQuR,KAAKC,uBAAuB3V,KACjD,CAECA,KAAK2P,aAAa3L,MAAM2S,UAAY3W,KAAKgG,WAAW4Q,gBAAkB5W,KAAKkC,MAAMkB,QAAQwT,eAEzF5W,KAAKsC,QAAQwE,YAAY9G,KAAK4P,aAC/B,EAGAxJ,EAAO/I,UAAUoV,aAAe,SAAUnO,GACzC,OAAOA,EAAKtE,KAAK6E,MAClB,EAGAuB,EAAO/I,UAAUmV,eAAiB,SAAUlO,GAC3C,IAAI2T,EAAU3T,EACV4T,EAAYlY,KAAKiQ,eACjB7R,EAAS8Z,EAAU9Z,OACnB6K,EAEJ,IAAK,IAAIkP,EAAK,EAAGA,EAAK/Z,EAAQ+Z,IAAM,CAEnCF,EAAUA,EAAQC,EAAUC,IAE5BlP,EAASgP,EAET,IAAKA,EAAS,CACb,KACH,CACA,CAEC,OAAOhP,CACR,EAGA7C,EAAO/I,UAAUsV,aAAe,SAAUrO,EAAMvG,GAC/C,GAAIiC,KAAK6E,MAAO,CACfP,EAAKtE,KAAK6E,OAAS9G,CACrB,CACA,EAGAqI,EAAO/I,UAAUqV,eAAiB,SAAUpO,EAAMvG,GACjD,IAAIka,EAAU3T,EACV4T,EAAYlY,KAAKiQ,eACjB7R,EAAS8Z,EAAU9Z,OAEvB,IAAK,IAAIga,EAAM,EAAGA,EAAMha,EAAQga,IAAO,CAEtC,GAAIA,GAAOha,EAAS,EAAG,CACtB6Z,EAAQC,EAAUE,IAAQra,CAC7B,KAAS,CACN,IAAKka,EAAQC,EAAUE,IAAO,CAC7B,UAAWra,IAAU,YAAa,CACjCka,EAAQC,EAAUE,IAAQ,EAC/B,KAAW,CACN,KACL,CACA,CAEGH,EAAUA,EAAQC,EAAUE,GAC/B,CACA,CACA,EAGAhS,EAAO/I,UAAUuU,aAAe,SAAUzL,GACzC,IAAId,EAAOrF,KAEX,GAAIqF,EAAKuK,aAAc,CACtBvK,EAAK5C,QAAQwC,KAAKkB,GAClBd,EAAKuK,aAAa9I,YAAYX,EAAO1C,aACvC,KAAQ,CACNsI,QAAQC,KAAK,mFACf,CACA,EAGA5F,EAAO/I,UAAUmK,cAAgB,SAAU6Q,EAAWhR,GAGrD,IAAIiR,EAAetY,KAAKgK,OAAOC,QAAUjK,KAAKgK,OAAOuO,kBAAkBhM,aAAelF,GAAUrH,KAAKgK,OAAOtG,oBAAoB6I,aAGhIvM,KAAKsC,QAAQ0B,MAAMqD,OAASiR,EAAe,KAE3C,GAAItY,KAAKiK,QAAS,CACjBjK,KAAK4P,aAAa5L,MAAMoD,UAAYkR,EAAetY,KAAKyP,eAAe+I,aAAe,IACxF,CAGC,IAAKxY,KAAKiK,SAAWoO,IAAc,MAAO,CACzC,GAAIA,IAAc,SAAU,CAC3BrY,KAAKsC,QAAQ0B,MAAMyU,WAAazY,KAAKsC,QAAQiK,aAAevM,KAAKyP,eAAe+I,aAAe,IAClG,KAAS,CACNxY,KAAKsC,QAAQ0B,MAAMyU,YAAczY,KAAKsC,QAAQiK,aAAevM,KAAKyP,eAAe+I,cAAgB,EAAI,IACxG,CACA,CAECxY,KAAKyC,QAAQyC,SAAQ,SAAUiB,GAC9BA,EAAOqB,cAAc6Q,EACvB,GACA,EAGAjS,EAAO/I,UAAUiK,mBAAqB,WACrCtH,KAAKsC,QAAQ0B,MAAMyU,WAAa,GAChCzY,KAAKsC,QAAQ0B,MAAMqD,OAAS,GAC5BrH,KAAKsC,QAAQ0B,MAAMoD,UAAY,GAC/BpH,KAAK4P,aAAa5L,MAAMoD,UAAY,GAEpCpH,KAAKyC,QAAQyC,SAAQ,SAAUiB,GAC9BA,EAAOmB,oBACT,GACA,EAEAlB,EAAO/I,UAAU8U,kBAAoB,WAEpC,GAAInS,KAAKgG,WAAWqR,WAAa,SAAU,CAC1CrX,KAAKkC,MAAMM,WAAWkW,aAAe1Y,IACvC,CACA,EAKAoG,EAAO/I,UAAUoG,WAAa,WAC7B,OAAOzD,KAAKsC,OACb,EAGA8D,EAAO/I,UAAUkb,gBAAkB,WAClC,OAAOvY,KAAK4P,YACb,EAGAxJ,EAAO/I,UAAU6P,SAAW,WAC3B,OAAOlN,KAAK6E,KACb,EAGAuB,EAAO/I,UAAUsb,eAAiB,WACjC,IAAK3Y,KAAKiK,QAAS,CAClB,OAAOjK,IACT,KAAQ,CACN,GAAIA,KAAKyC,QAAQrE,OAAQ,CACxB,OAAO4B,KAAKyC,QAAQ,GAAGkW,gBAC1B,KAAS,CACN,OAAO,KACV,CACA,CACA,EAGAvS,EAAO/I,UAAUub,cAAgB,WAChC,IAAK5Y,KAAKiK,QAAS,CAClB,OAAOjK,IACT,KAAQ,CACN,GAAIA,KAAKyC,QAAQrE,OAAQ,CACxB,OAAO4B,KAAKyC,QAAQzC,KAAKyC,QAAQrE,OAAS,GAAGwa,eAChD,KAAS,CACN,OAAO,KACV,CACA,CACA,EAGAxS,EAAO/I,UAAUsL,WAAa,WAC7B,OAAO3I,KAAKyC,OACb,EAGA2D,EAAO/I,UAAUuQ,SAAW,WAC3B,OAAO5N,KAAK+K,KACb,EAGA3E,EAAO/I,UAAUmJ,aAAe,WAC/B,GAAIxG,KAAKgK,OAAOC,QAAS,CACxB,OAAOjK,KAAKgK,OAAOxD,cACrB,KAAQ,CACN,OAAOxG,IACT,CACA,EAGAoG,EAAO/I,UAAU6L,cAAgB,SAAU2P,GAC1C,IAAIC,EAAU,GAEd,GAAI9Y,KAAKiK,SAAW4O,EAAgB,CACnC7Y,KAAKyC,QAAQyC,SAAQ,SAAUiB,GAC9B2S,EAAQ7T,KAAKkB,EAAO+C,cAAc,MACrC,IAEElJ,KAAKgG,WAAWvD,QAAUqW,CAC5B,CAEC,OAAO9Y,KAAKgG,UACb,EAIAI,EAAO/I,UAAUwU,sBAAwB,WACxC,IAAInJ,EAAU,MAEd1I,KAAKyC,QAAQyC,SAAQ,SAAUiB,GAC9B,GAAIA,EAAOuC,QAAS,CACnBA,EAAU,IACb,CACA,IAEC,GAAIA,EAAS,CACZ1I,KAAK+N,OACL/N,KAAKgK,OAAO9H,MAAMkB,QAAQ2V,wBAAwBrb,KAAKsC,KAAKkC,MAAOlC,KAAKsJ,eAAgB,MAC1F,KAAQ,CACNtJ,KAAKgO,MACP,CACA,EAGA5H,EAAO/I,UAAU0Q,KAAO,SAAUiL,EAAQC,GACzC,IAAKjZ,KAAK0I,QAAS,CAClB1I,KAAK0I,QAAU,KAEf1I,KAAKsC,QAAQ0B,MAAMkV,QAAU,GAE7B,GAAIlZ,KAAKgK,OAAOC,QAAS,CACxBjK,KAAKgK,OAAO6H,uBACf,CAEE7R,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAK+C,MACR,IAEE,IAAK/N,KAAKiK,SAAWjK,KAAKwJ,QAAU,KAAM,CACzCxJ,KAAKgN,mBACR,CAEEhN,KAAKkC,MAAMkI,cAAcjD,wBAEzB,GAAInH,KAAKkC,MAAMkB,QAAQiH,aAAerK,KAAKkC,MAAMgC,UAAU,cAAe,OAASlE,KAAKkC,MAAMiC,QAAQkG,YAAYC,OAAO7H,QAAS,CACjIzC,KAAKkC,MAAMiC,QAAQkG,YAAYE,KAAK,UACvC,CAEE,IAAK0O,GAAoBjZ,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAC/GlE,KAAKkC,MAAMiC,QAAQwB,iBAAiBwT,uBAAuBnZ,KAAMA,KAAK0I,QACzE,CAEE,IAAKsQ,EAAQ,CACZhZ,KAAKkC,MAAMkB,QAAQ2V,wBAAwBrb,KAAKsC,KAAKkC,MAAOlC,KAAKsJ,eAAgB,KACpF,CAEE,GAAItJ,KAAKgK,OAAOC,QAAS,CACxBjK,KAAKgK,OAAOoP,kBACf,CAEE,IAAKpZ,KAAKgZ,QAAUhZ,KAAKkC,MAAMkB,QAAQwC,cAAe,CACrD5F,KAAKkC,MAAM2D,QAAQC,cACtB,CACA,CACA,EAGAM,EAAO/I,UAAU2Q,KAAO,SAAUgL,EAAQC,GACzC,GAAIjZ,KAAK0I,QAAS,CACjB1I,KAAK0I,QAAU,MAEf1I,KAAKsC,QAAQ0B,MAAMkV,QAAU,OAE7BlZ,KAAKkC,MAAMkI,cAAcjD,wBAEzB,GAAInH,KAAKgK,OAAOC,QAAS,CACxBjK,KAAKgK,OAAO6H,uBACf,CAEE7R,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKgD,MACR,IAEE,GAAIhO,KAAKkC,MAAMkB,QAAQiH,aAAerK,KAAKkC,MAAMgC,UAAU,cAAe,OAASlE,KAAKkC,MAAMiC,QAAQkG,YAAYC,OAAO7H,QAAS,CACjIzC,KAAKkC,MAAMiC,QAAQkG,YAAYE,KAAK,UACvC,CAEE,IAAK0O,GAAoBjZ,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAC/GlE,KAAKkC,MAAMiC,QAAQwB,iBAAiBwT,uBAAuBnZ,KAAMA,KAAK0I,QACzE,CAEE,IAAKsQ,EAAQ,CACZhZ,KAAKkC,MAAMkB,QAAQ2V,wBAAwBrb,KAAKsC,KAAKkC,MAAOlC,KAAKsJ,eAAgB,MACpF,CAEE,GAAItJ,KAAKgK,OAAOC,QAAS,CACxBjK,KAAKgK,OAAOoP,kBACf,CAEE,IAAKpZ,KAAKgZ,QAAUhZ,KAAKkC,MAAMkB,QAAQwC,cAAe,CACrD5F,KAAKkC,MAAM2D,QAAQC,cACtB,CACA,CACA,EAEAM,EAAO/I,UAAU+b,iBAAmB,WACnC,IAAIC,EAAa,EAEjB,GAAIrZ,KAAKyP,gBAAkBzP,KAAKyC,QAAQrE,OAAQ,CAC/C4B,KAAKyC,QAAQyC,SAAQ,SAAUiB,GAC9B,GAAIA,EAAOuC,QAAS,CACnB2Q,GAAclT,EAAOoD,UACzB,CACA,IAEEvJ,KAAKyP,eAAezL,MAAMqN,SAAWgI,EAAa,EAAI,KAEtD,GAAIrZ,KAAKgK,OAAOC,QAAS,CACxBjK,KAAKgK,OAAOoP,kBACf,CACA,CACA,EAEAhT,EAAO/I,UAAUiI,YAAc,SAAUgU,GACxC,IAAInb,EAAQ6B,KAAKyC,QAAQ3B,QAAQwY,GAEjC,GAAInb,GAAS,EAAG,CACf6B,KAAKyC,QAAQiE,OAAOvI,EAAO,EAC7B,CAEC,IAAK6B,KAAKyC,QAAQrE,OAAQ,CACzB4B,KAAKkO,QACP,CACA,EAEA9H,EAAO/I,UAAUkS,SAAW,SAAU/F,GACrCxJ,KAAKwR,WAAa,KAClBxR,KAAKuZ,eAAe/P,EACrB,EAEApD,EAAO/I,UAAUkc,eAAiB,SAAU/P,GAC3C,GAAIhI,MAAMgI,GAAQ,CACjBA,EAAQtI,KAAKsY,MAAMxZ,KAAKkC,MAAMI,QAAQyB,YAAc,IAAM4I,SAASnD,GACrE,CAECA,EAAQtI,KAAKC,IAAInB,KAAKwM,SAAUhD,GAEhC,GAAIxJ,KAAKqR,SAAU,CAClB7H,EAAQtI,KAAK4K,IAAI9L,KAAKqR,SAAU7H,EAClC,CAECxJ,KAAKwJ,MAAQA,EACbxJ,KAAKoR,YAAc5H,EAAQA,EAAQ,KAAO,GAE1CxJ,KAAKsC,QAAQ0B,MAAMwF,MAAQxJ,KAAKoR,YAEhC,IAAKpR,KAAKiK,QAAS,CAClBjK,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKuE,UACR,GACA,CAEC,GAAIvP,KAAKgK,OAAOC,QAAS,CACxBjK,KAAKgK,OAAOoP,kBACd,CAGC,GAAIpZ,KAAKkC,MAAMgC,UAAU,iBAAkB,CAC1ClE,KAAKkC,MAAMiC,QAAQC,cAAc0I,QACnC,CACA,EAEA1G,EAAO/I,UAAUoc,iBAAmB,WACnC,IAAI9O,EAAO,GAEX3K,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5B,GAAIA,EAAKtG,IAAIgV,kBAAmB,CAC/B,GAAI1O,EAAKtG,IAAIjB,aAAakW,eAAiB,KAAM,CAChDhP,EAAK1F,KAAK+F,EAAKtG,KACfsG,EAAKtG,IAAIkV,iBACb,KAAU,CACN5O,EAAKtG,IAAIgV,kBAAoB,KACjC,CACA,CACA,IAEC/O,EAAKzF,SAAQ,SAAUR,GACtBA,EAAImV,YACN,IAEClP,EAAKzF,SAAQ,SAAUR,GACtBA,EAAIoV,eACN,GACA,EAEA1T,EAAO/I,UAAUkM,SAAW,WAC3B,IAAIC,EAAQ,EAEZ,GAAIxJ,KAAKiK,QAAS,CACjBjK,KAAKyC,QAAQyC,SAAQ,SAAUiB,GAC9B,GAAIA,EAAOuC,QAAS,CACnBc,GAASrD,EAAOoD,UACpB,CACA,GACA,KAAQ,CACNC,EAAQxJ,KAAKwJ,KACf,CAEC,OAAOA,CACR,EAEApD,EAAO/I,UAAUkK,UAAY,WAC5B,OAAOvH,KAAKsC,QAAQkW,YACrB,EAEApS,EAAO/I,UAAUgZ,YAAc,SAAU7J,GACxCxM,KAAKwM,SAAWA,EAChBxM,KAAKuR,eAAiB/E,EAAWA,EAAW,KAAO,GAEnDxM,KAAKsC,QAAQ0B,MAAMwI,SAAWxM,KAAKuR,eAEnCvR,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKqL,aACP,GACA,EAEAjQ,EAAO/I,UAAUkZ,YAAc,SAAUlF,GACxCrR,KAAKqR,SAAWA,EAChBrR,KAAKsR,eAAiBD,EAAWA,EAAW,KAAO,GAEnDrR,KAAKsC,QAAQ0B,MAAMqN,SAAWrR,KAAKsR,eAEnCtR,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKuL,aACP,GACA,EAEAnQ,EAAO/I,UAAU6Q,OAAS,WACzB,IAAI6L,EAAS/Z,KAEb,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GAGrC,GAAIsO,EAAO9P,QAAS,CACnB8P,EAAOtX,QAAQyC,SAAQ,SAAUiB,GAChCA,EAAO+H,QACX,GACA,CAGE,GAAI6L,EAAO7X,MAAMgC,UAAU,QAAS,CACnC,GAAI6V,EAAO7X,MAAMiC,QAAQ2R,KAAKkE,YAAY7T,SAAW4T,EAAQ,CAC5DA,EAAO7X,MAAMiC,QAAQ2R,KAAKmE,YAC9B,CACA,CAEE,IAAIC,EAAYH,EAAOhP,MAAM3M,OAE7B,IAAK,IAAI+b,EAAM,EAAGA,EAAMD,EAAWC,IAAO,CACzCJ,EAAOhP,MAAM,GAAGmD,QACnB,CAEE,GAAI6L,EAAOzX,QAAQqE,WAAY,CAC9BoT,EAAOzX,QAAQqE,WAAWrB,YAAYyU,EAAOzX,QAChD,CAEEyX,EAAOzX,QAAU,MACjByX,EAAOtK,eAAiB,MACxBsK,EAAOpK,aAAe,MACtBoK,EAAOnK,aAAe,MAEtB,GAAImK,EAAO/P,OAAOC,QAAS,CAC1B8P,EAAO/P,OAAO1E,YAAYyU,EAC7B,CAEEA,EAAO7X,MAAMkI,cAAc6C,iBAAiB8M,GAE5C,GAAIA,EAAO7X,MAAMkB,QAAQwC,cAAe,CACvCmU,EAAO7X,MAAM2D,QAAQC,aAAa,KACrC,CAEE0F,GACF,GACA,EAEApF,EAAO/I,UAAU0J,eAAiB,WACjC,GAAI/G,KAAKoQ,uBAAwB,CAChCpQ,KAAKoQ,wBACP,CACA,EAEAhK,EAAO/I,UAAUmS,SAAW,WAC3B,IAAI4K,EAAU,GAEdpa,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5B,IAAKA,EAAKwE,WAAY,CACrB4K,EAAQnV,KAAK+F,EAAK1B,eACrB,CACA,IAEC,OAAO8Q,EAAQhc,OAASgc,EAAU,IACnC,EAKAhU,EAAO/I,UAAU6O,aAAe,SAAUxH,GACzC,IAAIW,EAAOrF,KAEX,IAAIgL,EAAO,IAAIqP,EAAKhV,EAAMX,GAE1B1E,KAAK+K,MAAM9F,KAAK+F,GAEhB,OAAOA,CACR,EAEA5E,EAAO/I,UAAU4R,WAAa,WAC7B,IAAI9Q,EAAQ6B,KAAKkC,MAAMkI,cAAc9D,gBAAgBtG,MACrD,OAAO7B,GAAS,EAAI6B,KAAKsa,mBAAmBnc,EAAQ,GAAK,KAC1D,EAEAiI,EAAO/I,UAAUid,mBAAqB,SAAUnc,GAC/C,IAAIgI,EAASnG,KAAKkC,MAAMkI,cAAc5B,iBAAiBrK,GACvD,OAAQgI,GAAUA,EAAOuC,QAAUvC,EAASnG,KAAKsa,mBAAmBnc,EAAQ,EAC7E,EAEAiI,EAAO/I,UAAU+R,WAAa,WAC7B,IAAIjR,EAAQ6B,KAAKkC,MAAMkI,cAAc9D,gBAAgBtG,MACrD,OAAO7B,GAAS,EAAI6B,KAAKua,mBAAmBpc,EAAQ,GAAK,KAC1D,EAEAiI,EAAO/I,UAAUkd,mBAAqB,SAAUpc,GAC/C,IAAIgI,EAASnG,KAAKkC,MAAMkI,cAAc5B,iBAAiBrK,GACvD,OAAQgI,GAAUA,EAAOuC,QAAUvC,EAASnG,KAAKua,mBAAmBpc,EAAQ,EAC7E,EAEAiI,EAAO/I,UAAU2P,kBAAoB,SAAUG,GAC9CnN,KAAKwR,WAAa,MAGlB,UAAWxR,KAAKgG,WAAWwD,QAAU,cAAgB2D,EAAO,CAC3DnN,KAAKuP,SAASvP,KAAKgG,WAAWwD,MAChC,CAGC,GAAIxJ,KAAKkC,MAAMgC,UAAU,UAAW,CACnClE,KAAKkC,MAAMiC,QAAQqK,OAAOgM,0BAC5B,CAECxa,KAAKya,YAGL,GAAIza,KAAKkC,MAAMgC,UAAU,UAAW,CACnClE,KAAKkC,MAAMiC,QAAQqK,OAAOkM,0BAC5B,CACA,EAGAtU,EAAO/I,UAAUod,UAAY,WAC5B,IAAIpV,EAAOrF,KAEX,IAAKA,KAAKwR,WAAY,CACrBxR,KAAKsC,QAAQ0B,MAAMwF,MAAQ,GAE3BnE,EAAK0F,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAK2P,YACR,GACA,CAEC,IAAItJ,EAAWrR,KAAKsC,QAAQuJ,YAE5B,IAAKxG,EAAKmE,QAAUxJ,KAAKwR,WAAY,CACpCnM,EAAK0F,MAAM7F,SAAQ,SAAU8F,GAC5B,IAAIxB,EAAQwB,EAAKzB,WAEjB,GAAIC,EAAQ6H,EAAU,CACrBA,EAAW7H,CACf,CACA,IAEE,GAAI6H,EAAU,CACbhM,EAAKkU,eAAelI,EAAW,EAClC,CACA,CACA,EAEAjL,EAAO/I,UAAUgS,iBAAmB,SAAUC,GAC7C,IAAIsL,EAAU5a,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAIzF,EAEJ,IAAK4U,EAAQ3Q,QAAS,CACrB,IAAK2Q,EAAQ5Q,OAAOC,QAAS,CAC5BjE,EAAa5I,OAAOqE,OAAO,GAAImZ,EAAQ1R,iBACvClD,EAAa5I,OAAOqE,OAAOuE,EAAYsJ,GAEvCsL,EAAQ1Y,MAAMkI,cAAcwC,UAAU5G,EAAY,MAAO4U,GAASC,MAAK,SAAU1U,GAEhF,GAAIH,EAAWnB,OAAS+V,EAAQ/V,MAAO,CACtC+V,EAAQ/V,MAAQ,KACtB,CAEK+V,EAAQ1M,SAAS2M,MAAK,WACrBrP,EAAQrF,EAAOmD,eACrB,IAAQwR,OAAM,SAAUC,GAClBtP,EAAOsP,EACb,GACA,IAAOD,OAAM,SAAUC,GAClBtP,EAAOsP,EACZ,GACA,KAAU,CACNhP,QAAQC,KAAK,8FACbP,EAAO,sGACX,CACA,KAAS,CACNM,QAAQC,KAAK,8FACbP,EAAO,sGACV,CACA,GACA,EAEArF,EAAO/I,UAAU2d,WAAa,SAAUhQ,GACvC,IAAI7M,EAAQ6B,KAAK+K,MAAMjK,QAAQkK,GAE/B,GAAI7M,GAAS,EAAG,CACf6B,KAAK+K,MAAMrE,OAAOvI,EAAO,EAC3B,CACA,EAEAiI,EAAO/I,UAAUiV,kBAAoB,CAAC,QAAS,QAAS,UAAW,UAAW,QAAS,WAAY,YAAa,QAAS,WAAY,WAAY,YAAa,cAAe,YAAa,SAAU,aAAc,UAAW,WAAY,YAAa,aAAc,QAAS,aAAc,SAAU,eAAgB,YAAa,kBAAmB,iBAAkB,WAAY,SAAU,eAAgB,YAAa,UAAW,gBAAiB,cAAe,oBAAqB,cAAe,oBAAqB,mBAAoB,yBAA0B,WAAY,iBAAkB,eAAgB,qBAAsB,mBAAoB,yBAA0B,oBAAqB,0BAA2B,gBAAiB,sBAAuB,qBAAsB,2BAA4B,YAAa,WAAY,gBAAiB,UAAW,gBAAiB,mBAAoB,yBAA0B,aAAc,mBAAoB,sBAAuB,4BAA6B,YAAa,eAAgB,cAAe,UAAW,aAAc,cAAe,iBAAkB,iBAAkB,gBAAiB,eAAgB,gBAAiB,cAAe,aAAc,oBAAqB,aAAc,wBAAyB,qBAAsB,cAAe,iBAAkB,gBAAiB,YAAa,eAAgB,gBAAiB,gBAAiB,iBAAkB,iBAAkB,gBAAiB,iBAAkB,uBAAwB,eAAgB,0BAA2B,qBAAsB,yBAA0B,mBAAoB,yBAA0B,yBAA0B,QAAS,oBAAqB,aAAc,cAE1qD,YAAa,iBAAkB,uBAAwB,qBAAsB,2BAA4B,sBAAuB,4BAA6B,aAAc,iBAAkB,kBAAmB,iBAKhNlM,EAAO/I,UAAUiM,aAAe,WAC/B,IAAKtJ,KAAKyR,UAAW,CACpBzR,KAAKyR,UAAY,IAAI5J,EAAgB7H,KACvC,CAEC,OAAOA,KAAKyR,SACb,EAEA,IAAIwJ,EAAa,SAASA,EAAW/Y,GAEpClC,KAAKkC,MAAQA,EACblC,KAAKsC,QAAUtC,KAAKkb,sBACpBlb,KAAKmb,aAAenb,KAAKob,qBACzBpb,KAAKqb,YAAcrb,KAAKob,qBACxBpb,KAAKoK,cAAgB,KACrBpK,KAAKqH,OAAS,EAEdrH,KAAKsb,YAAc,MACnBtb,KAAKub,WAAa,UAClBvb,KAAKwb,YAAc,MAEnBxb,KAAK2K,KAAO,GACZ3K,KAAK+J,WAAa,GAClB/J,KAAKyb,gBAAkB,EAEvBzb,KAAK0b,YAAc,GACnB1b,KAAK2b,iBAAmB,EAExB3b,KAAK4b,UAAY,EACjB5b,KAAK4C,WAAa,EAElB5C,KAAK6b,cAAgB,GAErB7b,KAAK8b,QAAU,EACf9b,KAAK+b,WAAa,EAElB/b,KAAKgc,iBAAmB,EACxBhc,KAAKic,oBAAsB,EAE3Bjc,KAAKkc,WAAa,EAClBlc,KAAKmc,cAAgB,EAErBnc,KAAKoc,mBAAqB,GAE1Bpc,KAAKqc,iBAAmB,EAExBrc,KAAKsc,uBAAyB,GAC9Btc,KAAKuc,wBAA0B,EAE/Bvc,KAAKwc,eAAiB,GACtBxc,KAAKyc,kBAAoB,GAEzBzc,KAAK0Y,aAAe,MAEpB1Y,KAAK0c,YAAc,MACnB1c,KAAK2c,yBAA2B,MAChC3c,KAAK4c,2BAA6B,KACnC,EAIA3B,EAAW5d,UAAU6d,oBAAsB,WAC1C,IAAInY,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,yBACjBJ,EAAGqP,aAAa,WAAY,GAE5B,OAAOrP,CACR,EAEAkY,EAAW5d,UAAU+d,mBAAqB,WACzC,IAAIrY,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,mBAEjB,OAAOJ,CACR,EAGAkY,EAAW5d,UAAUoG,WAAa,WACjC,OAAOzD,KAAKsC,OACb,EAGA2Y,EAAW5d,UAAUwf,gBAAkB,WACtC,OAAO7c,KAAKmb,YACb,EAGAF,EAAW5d,UAAUyf,eAAiB,SAAUpY,EAAKsE,GACpD,GAAIA,EAAQ,CACX,OAAOhJ,KAAK+J,WAAWjJ,QAAQ4D,EACjC,KAAQ,CACN,OAAO1E,KAAK2K,KAAK7J,QAAQ4D,EAC3B,CACA,EAGAuW,EAAW5d,UAAU0f,iBAAmB,SAAUvZ,GACjDxD,KAAKoK,cAAgB5G,CACtB,EAEAyX,EAAW5d,UAAUiG,WAAa,WACjC,IAAI+B,EAAOrF,KAEXqF,EAAK2X,gBAGL3X,EAAK/C,QAAQwE,YAAYzB,EAAK8V,cAE9B9V,EAAKiW,YAAc,KAGnBjW,EAAK/C,QAAQ8R,iBAAiB,UAAU,WACvC,IAAIxQ,EAAOyB,EAAK/C,QAAQM,WAGxB,GAAIyC,EAAKzC,YAAcgB,EAAM,CAC5ByB,EAAK+E,cAAczG,iBAAiBC,GAEpC,GAAIyB,EAAKnD,MAAMkB,QAAQ6Z,QAAS,CAC/B5X,EAAKnD,MAAMiC,QAAQ+Y,UAAUC,cAAcvZ,EAC/C,CAEG,GAAIyB,EAAKnD,MAAMgC,UAAU,eAAgB,CACxCmB,EAAKnD,MAAMiC,QAAQ0F,YAAYlG,iBAAiBC,EACpD,CAEGyB,EAAKnD,MAAMkB,QAAQO,iBAAiBC,EACvC,CAEEyB,EAAKzC,WAAagB,CACpB,IAGC,GAAI5D,KAAKub,aAAe,UAAW,CAElClW,EAAK/C,QAAQ8R,iBAAiB,UAAU,WACvC,IAAIgJ,EAAM/X,EAAK/C,QAAQsZ,UACvB,IAAIyB,EAAMhY,EAAKuW,UAAYwB,EAG3B,GAAI/X,EAAKuW,WAAawB,EAAK,CAC1B/X,EAAKuW,UAAYwB,EACjB/X,EAAKiY,eAAeD,GAEpB,GAAIhY,EAAKnD,MAAMkB,QAAQma,qBAAuB,SAAU,CACvDlY,EAAKnD,MAAMiC,QAAQqZ,KAAKC,SAASpY,EAAK/C,QAAQgK,aAAejH,EAAK/C,QAAQiK,aAAe6Q,EAC9F,CAEI/X,EAAKnD,MAAMkB,QAAQka,eAAeF,EACtC,KAAU,CACN/X,EAAKuW,UAAYwB,CACrB,CACA,GACA,CACA,EAIAnC,EAAW5d,UAAUqgB,QAAU,SAAU9V,GACxC,IAAIvC,EAAOrF,KAEX,WAAY4H,IAAY,YAAc,YAAcpI,EAAQoI,KAAa,SAAU,CAElF,GAAIA,aAAmB+V,EAAK,CAE3B,OAAO/V,CACV,MAAS,GAAIA,aAAmBgW,EAAc,CAE3C,OAAOhW,EAAQE,YAAc,KAChC,MAAS,UAAWC,cAAgB,aAAeH,aAAmBG,YAAa,CAEhF,IAAI/C,EAAQK,EAAKsF,KAAKnK,MAAK,SAAUkE,GACpC,OAAOA,EAAIjB,eAAiBmE,CAChC,IAEG,OAAO5C,GAAS,KACnB,CACA,MAAQ,UAAW4C,GAAW,aAAeA,IAAY,KAAM,CAC7D,OAAO,KACT,KAAQ,CAEN,IAAIiW,EAASxY,EAAKsF,KAAKnK,MAAK,SAAUkE,GACrC,OAAOA,EAAIJ,KAAKe,EAAKnD,MAAMkB,QAAQjF,QAAUyJ,CAChD,IAEE,OAAOiW,GAAU,KACnB,CAIC,OAAO,KACR,EAEA5C,EAAW5d,UAAUygB,qBAAuB,SAAUxZ,GACrD,IAAIU,EAAQhF,KAAK2K,KAAKnK,MAAK,SAAUkE,GACpC,OAAOA,EAAIJ,OAASA,CACtB,IAEC,OAAOU,GAAS,KACjB,EAEAiW,EAAW5d,UAAU0gB,mBAAqB,SAAU7S,EAAUlC,GAC7D,GAAIA,EAAQ,CACX,OAAOhJ,KAAK+J,WAAWmB,EACzB,KAAQ,CACN,OAAOlL,KAAK2K,KAAKO,EACnB,CACA,EAEA+P,EAAW5d,UAAU2gB,YAAc,SAAUtZ,EAAKwG,EAAUC,GAC3D,IAAI8S,EAAUje,KAEd,IAAIke,EAAWle,KAAKme,iBAAiBrd,QAAQ4D,GACzC0Z,EAAQ1Z,EAAIjB,aACZ4a,EACAhT,EAAS,EAEb,OAAO,IAAIE,SAAQ,SAAUC,EAASC,GACrC,GAAIyS,GAAY,EAAG,CAElB,UAAWhT,IAAa,YAAa,CACpCA,EAAW+S,EAAQ/b,MAAMkB,QAAQkb,mBACrC,CAEG,UAAWnT,IAAc,YAAa,CACrCA,EAAY8S,EAAQ/b,MAAMkB,QAAQmb,oBACtC,CAEG,GAAIrT,IAAa,UAAW,CAC3B,OAAQ+S,EAAQ1C,YACf,IAAK,UACJ8C,EAASjR,EAAU/P,UAAUgQ,QAAQmR,SAASJ,GAAOhB,IACrDlS,EAAWhK,KAAKE,IAAI6c,EAAQ3b,QAAQsZ,UAAYyC,GAAUnd,KAAKE,IAAI6c,EAAQ3b,QAAQsZ,UAAYqC,EAAQ3b,QAAQiK,aAAe8R,GAAU,SAAW,MACnJ,MACD,IAAK,UACJnT,EAAWhK,KAAKE,IAAI6c,EAAQnC,QAAUoC,GAAYhd,KAAKE,IAAI6c,EAAQlC,WAAamC,GAAY,SAAW,MACvG,MAEN,CAGG,IAAK/S,EAAW,CACf,GAAIiC,EAAU/P,UAAUgQ,QAAQC,UAAU8Q,GAAQ,CACjD/S,EAAS+B,EAAU/P,UAAUgQ,QAAQmR,SAASJ,GAAOhB,IAAMhQ,EAAU/P,UAAUgQ,QAAQmR,SAASP,EAAQ3b,SAAS8a,IAEjH,GAAI/R,EAAS,GAAKA,EAAS4S,EAAQ3b,QAAQiK,aAAe6R,EAAM5F,aAAc,CAC7E,OAAO,KACb,CACA,CACA,CAGG,OAAQyF,EAAQ1C,YACf,IAAK,UACJ0C,EAAQ3b,QAAQsZ,UAAYxO,EAAU/P,UAAUgQ,QAAQmR,SAASJ,GAAOhB,IAAMhQ,EAAU/P,UAAUgQ,QAAQmR,SAASP,EAAQ3b,SAAS8a,IAAMa,EAAQ3b,QAAQsZ,UAC1J,MACD,IAAK,UACJqC,EAAQQ,mBAAmBP,EAAU,MACrC,MAIF,OAAQhT,GACP,IAAK,SACL,IAAK,SAEJ,GAAI+S,EAAQ3b,QAAQgK,aAAe2R,EAAQ3b,QAAQsZ,WAAaqC,EAAQ3b,QAAQiK,aAAc,CAC7F0R,EAAQ3b,QAAQsZ,UAAYqC,EAAQ3b,QAAQsZ,WAAawC,EAAMM,UAAYT,EAAQ3b,QAAQsZ,YAAcqC,EAAQ3b,QAAQgK,aAAe8R,EAAMM,WAAa,CACjK,KAAY,CACNT,EAAQ3b,QAAQsZ,UAAYqC,EAAQ3b,QAAQsZ,UAAYqC,EAAQ3b,QAAQiK,aAAe,CAC7F,CAEK,MAED,IAAK,SAEJ,GAAI0R,EAAQ3b,QAAQgK,aAAe2R,EAAQ3b,QAAQsZ,WAAaqC,EAAQ3b,QAAQiK,aAAc,CAC7F0R,EAAQ3b,QAAQsZ,UAAYqC,EAAQ3b,QAAQsZ,WAAaqC,EAAQ3b,QAAQgK,aAAe8R,EAAMM,WAAaN,EAAM5F,YACvH,KAAY,CACNyF,EAAQ3b,QAAQsZ,UAAYqC,EAAQ3b,QAAQsZ,UAAYqC,EAAQ3b,QAAQiK,aAAe6R,EAAM5F,YACnG,CAEK,MAGFhN,GACH,KAAS,CACNO,QAAQC,KAAK,kCACbP,EAAO,iCACV,CACA,GACA,EAIAwP,EAAW5d,UAAUshB,QAAU,SAAUra,EAAMsa,EAAkBC,GAChE,IAAIC,EAAU9e,KAEd,IAAIqF,EAAOrF,KAEX,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,GAAImT,GAAoBE,EAAQX,iBAAiB/f,OAAQ,CACxD,GAAIiH,EAAKnD,MAAMkB,QAAQ2b,WAAY,CAClC1Z,EAAK2Z,eAAe1a,EAAM,KAC9B,KAAU,CACNwa,EAAQG,oBAAmB,WAC1B5Z,EAAK2Z,eAAe1a,EACzB,GACA,CACA,KAAS,CACN,GAAIwa,EAAQ5c,MAAMkB,QAAQ8b,aAAeL,EAAgB,CACxDC,EAAQ5c,MAAMkI,cAAc/F,2BAA2BC,EAC3D,CACGwa,EAAQvR,cAERuR,EAAQE,eAAe1a,EAC1B,CAEEkH,GACF,GACA,EAEAyP,EAAW5d,UAAU2hB,eAAiB,SAAU1a,EAAMsa,GACrD,IAAIvZ,EAAOrF,KAEXqF,EAAKnD,MAAMkB,QAAQ+b,YAAYzhB,KAAKsC,KAAKkC,MAAOoC,GAEhDtE,KAAKof,gBAEL,GAAIpf,KAAKkC,MAAMkB,QAAQic,SAAWrf,KAAKkC,MAAMgC,UAAU,WAAY,CAClElE,KAAKkC,MAAMiC,QAAQkb,QAAQC,OAC7B,CAEC,GAAIzf,MAAMkF,QAAQT,GAAO,CAExB,GAAItE,KAAKkC,MAAMgC,UAAU,aAAc,CACtClE,KAAKkC,MAAMiC,QAAQob,UAAUC,oBAChC,CAEE,GAAIxf,KAAKkC,MAAMkB,QAAQqc,cAAgBzf,KAAKkC,MAAMgC,UAAU,eAAgB,MAAO,CAClFlE,KAAKkC,MAAMiC,QAAQsb,aAAaC,UAAUpb,EAC7C,CAEEA,EAAKY,SAAQ,SAAUC,EAAKK,GAC3B,GAAIL,WAAeA,IAAQ,YAAc,YAAc3F,EAAQ2F,MAAU,SAAU,CAClF,IAAIT,EAAM,IAAIiZ,EAAIxY,EAAKE,GACvBA,EAAKsF,KAAK1F,KAAKP,EACnB,KAAU,CACNqH,QAAQC,KAAK,+FAAgG7G,EACjH,CACA,IAEEE,EAAKsa,kBAAkB,MAAO,MAAOf,GAErCvZ,EAAKnD,MAAMkB,QAAQwc,WAAWliB,KAAKsC,KAAKkC,MAAOoC,EACjD,KAAQ,CACNyH,QAAQ8T,MAAM,8GAA+Gvb,IAAS,YAAc,YAAc9E,EAAQ8E,GAAO,eAAgBA,EACnM,CACA,EAEA2W,EAAW5d,UAAU+hB,cAAgB,WACpCpf,KAAK2K,KAAKzF,SAAQ,SAAUR,GAC3BA,EAAIob,MACN,IAEC,GAAI9f,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CACpElE,KAAKkC,MAAMiC,QAAQ+Y,UAAU4C,MAC/B,CAEC9f,KAAK2K,KAAO,GACZ3K,KAAK+J,WAAa,GAClB/J,KAAKyb,gBAAkB,EACvBzb,KAAK0b,YAAc,GACnB1b,KAAK2b,iBAAmB,EAExB3b,KAAK0H,iBACN,EAEAuT,EAAW5d,UAAU0iB,UAAY,SAAUrb,EAAKsb,GAC/C,IAAIC,EAAWjgB,KAAK2K,KAAK7J,QAAQ4D,GAC7Bwb,EAAclgB,KAAK+J,WAAWjJ,QAAQ4D,GAE1C,GAAIwb,GAAe,EAAG,CACrBlgB,KAAK+J,WAAWrD,OAAOwZ,EAAa,EACtC,CAEC,GAAID,GAAY,EAAG,CAClBjgB,KAAK2K,KAAKjE,OAAOuZ,EAAU,EAC7B,CAECjgB,KAAKmgB,cAAcngB,KAAK+J,YAExB/J,KAAKogB,oBAAmB,SAAUzV,GACjC,IAAI0V,EAAe1V,EAAK7J,QAAQ4D,GAEhC,GAAI2b,GAAgB,EAAG,CACtB1V,EAAKjE,OAAO2Z,EAAc,EAC7B,CACA,IAEC,IAAKL,EAAa,CACjBhgB,KAAKif,oBACP,CAECjf,KAAKsgB,uBAELtgB,KAAKkC,MAAMkB,QAAQmd,WAAW7iB,KAAKsC,KAAKkC,MAAOwC,EAAI4E,gBAEnD,GAAItJ,KAAKkC,MAAMkB,QAAQod,YAAa,CACnCxgB,KAAKkC,MAAMkB,QAAQod,YAAY9iB,KAAKsC,KAAKkC,MAAOlC,KAAKygB,UACvD,CAEC,GAAIzgB,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CACpElE,KAAKkC,MAAMiC,QAAQ+Y,UAAUwD,gBAAgB,KAC/C,MAAQ,GAAI1gB,KAAKkC,MAAMkB,QAAQ2b,YAAc/e,KAAKkC,MAAMgC,UAAU,QAAS,CACzElE,KAAK2f,kBAAkB,MAAO,MAAO,KACvC,KAAQ,CACN,GAAI3f,KAAKkC,MAAMkB,QAAQ2b,YAAc/e,KAAKkC,MAAMgC,UAAU,QAAS,CAClElE,KAAK2f,kBAAkB,OAC1B,CACA,CACA,EAEA1E,EAAW5d,UAAUsjB,OAAS,SAAUrc,EAAMsc,EAAKziB,EAAO6hB,GAEzD,IAAItb,EAAM1E,KAAK6gB,aAAavc,EAAMsc,EAAKziB,EAAO6hB,GAE9C,GAAIhgB,KAAKkC,MAAMkB,QAAQic,SAAWrf,KAAKkC,MAAMgC,UAAU,WAAY,CAClElE,KAAKkC,MAAMiC,QAAQkb,QAAQyB,OAAO,SAAUpc,EAAK,CAAEJ,KAAMA,EAAMsc,IAAKA,EAAKziB,MAAOA,GAClF,CAEC,OAAOuG,CACR,EAGAuW,EAAW5d,UAAU0jB,QAAU,SAAUzc,EAAMsc,EAAKziB,GACnD,IAAI6iB,EAAUhhB,KAEX,IAACqF,EAAOrF,KAEP2K,EAAO,GAEX,OAAO,IAAIY,SAAQ,SAAUC,EAASC,GACrCmV,EAAMI,EAAQC,cAAcL,GAE5B,IAAK/gB,MAAMkF,QAAQT,GAAO,CACzBA,EAAO,CAACA,EACX,CAIE,UAAWnG,GAAS,aAAeyiB,UAAcziB,IAAU,cAAgByiB,EAAK,CAC/Etc,EAAK4c,SACR,CAEE5c,EAAKY,SAAQ,SAAUic,EAAM3b,GAC5B,IAAId,EAAMW,EAAKsb,OAAOQ,EAAMP,EAAKziB,EAAO,MACxCwM,EAAK1F,KAAKP,EACb,IAEE,GAAIsc,EAAQ9e,MAAMkB,QAAQ6Z,SAAW+D,EAAQ9e,MAAMgC,UAAU,aAAc,CAC1E8c,EAAQ9e,MAAMiC,QAAQ+Y,UAAUwD,gBAAgB,KACnD,MAAS,GAAIM,EAAQ9e,MAAMkB,QAAQ2b,YAAciC,EAAQ9e,MAAMgC,UAAU,QAAS,CAC/E8c,EAAQrB,kBAAkB,MAAO,MAAO,KAC3C,KAAS,CACNqB,EAAQ/B,oBACX,CAGE,GAAI+B,EAAQ9e,MAAMgC,UAAU,eAAgB,CAC3C8c,EAAQ9e,MAAMiC,QAAQ0F,YAAYC,OAAOkX,EAAQ9e,MAAMM,WAAWuH,WACrE,CAEEiX,EAAQV,uBACR9U,EAAQb,EACV,GACA,EAEAsQ,EAAW5d,UAAU4jB,cAAgB,SAAUL,GAC9C,UAAWA,IAAQ,YAAa,CAC/BA,EAAM5gB,KAAKkC,MAAMkB,QAAQge,SAC3B,CAEC,GAAIR,IAAQ,MAAO,CAClBA,EAAM,IACR,CAEC,GAAIA,IAAQ,SAAU,CACrBA,EAAM,KACR,CAEC,OAAOA,CACR,EAEA3F,EAAW5d,UAAUwjB,aAAe,SAAUvc,EAAMsc,EAAKziB,EAAO6hB,GAC/D,IAAItb,EAAMJ,aAAgBqZ,EAAMrZ,EAAO,IAAIqZ,EAAIrZ,GAAQ,GAAItE,MACvDod,EAAMpd,KAAKihB,cAAcL,GACzBX,GAAY,EACZC,EACAmB,EAEJ,IAAKljB,GAAS6B,KAAKkC,MAAMkB,QAAQ2b,YAAc/e,KAAKkC,MAAMkB,QAAQke,kBAAoB,OAAQ,CAC7FD,EAAWrhB,KAAKme,iBAEhB,GAAIf,EAAK,CACR,GAAIiE,EAASjjB,OAAQ,CACpBD,EAAQkjB,EAAS,EACrB,KAAU,CACN,GAAIrhB,KAAK+J,WAAW3L,OAAQ,CAC3BD,EAAQ6B,KAAK+J,WAAW/J,KAAK+J,WAAW3L,OAAS,GACjDgf,EAAM,KACX,CACA,CACA,KAAS,CACN,GAAIiE,EAASjjB,OAAQ,CACpBD,EAAQkjB,EAASA,EAASjjB,OAAS,GACnCgf,EAAMiE,EAASjjB,OAAS4B,KAAKkC,MAAMiC,QAAQod,KAAKC,cAAgB,MAAQ,IAC5E,CACA,CACA,CAEC,UAAWrjB,IAAU,YAAa,CACjCA,EAAQ6B,KAAK0d,QAAQvf,EACvB,CAEC,GAAI6B,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CACpElE,KAAKkC,MAAMiC,QAAQ+Y,UAAUuE,iBAAiB/c,GAE9C,IAAIwY,EAAYxY,EAAIgd,WAAW/W,KAE/B,GAAIuS,EAAU9e,OAAS,EAAG,CAEzB,IAAKD,GAASA,GAAS+e,EAAUpc,QAAQ3C,KAAW,EAAG,CACtD,GAAIif,EAAK,CACR,GAAIF,EAAU,KAAOxY,EAAK,CACzBvG,EAAQ+e,EAAU,GAClBld,KAAK2hB,gBAAgBjd,EAAIgd,WAAW/W,KAAMjG,EAAKvG,GAAQif,EAC7D,CACA,KAAW,CACN,GAAIF,EAAUA,EAAU9e,OAAS,KAAOsG,EAAK,CAC5CvG,EAAQ+e,EAAUA,EAAU9e,OAAS,GACrC4B,KAAK2hB,gBAAgBjd,EAAIgd,WAAW/W,KAAMjG,EAAKvG,GAAQif,EAC7D,CACA,CACA,KAAU,CACNpd,KAAK2hB,gBAAgBjd,EAAIgd,WAAW/W,KAAMjG,EAAKvG,GAAQif,EAC3D,CACA,CACA,CAEC,GAAIjf,EAAO,CACV8hB,EAAWjgB,KAAK2K,KAAK7J,QAAQ3C,EAC/B,CAEC,GAAIA,GAAS8hB,GAAY,EAAG,CAC3BC,EAAclgB,KAAK+J,WAAWjJ,QAAQ3C,GAEtC6B,KAAKogB,oBAAmB,SAAUzV,GACjC,IAAI0V,EAAe1V,EAAK7J,QAAQ3C,GAEhC,GAAIkiB,GAAgB,EAAG,CACtB1V,EAAKjE,OAAO0W,EAAMiD,EAAeA,EAAe,EAAG,EAAG3b,EAC1D,CACA,IAEE,GAAIwb,GAAe,EAAG,CACrBlgB,KAAK+J,WAAWrD,OAAO0W,EAAM8C,EAAcA,EAAc,EAAG,EAAGxb,EAClE,CAEE1E,KAAK2K,KAAKjE,OAAO0W,EAAM6C,EAAWA,EAAW,EAAG,EAAGvb,EACrD,KAAQ,CAEN,GAAI0Y,EAAK,CAERpd,KAAKogB,oBAAmB,SAAUzV,GACjCA,EAAK9D,QAAQnC,EACjB,IAEG1E,KAAK+J,WAAWlD,QAAQnC,GACxB1E,KAAK2K,KAAK9D,QAAQnC,EACrB,KAAS,CACN1E,KAAKogB,oBAAmB,SAAUzV,GACjCA,EAAK1F,KAAKP,EACd,IAEG1E,KAAK+J,WAAW9E,KAAKP,GACrB1E,KAAK2K,KAAK1F,KAAKP,EAClB,CACA,CAEC1E,KAAKmgB,cAAcngB,KAAK+J,YAExB/J,KAAKkC,MAAMkB,QAAQwe,SAASlkB,KAAKsC,KAAKkC,MAAOwC,EAAI4E,gBAEjD,GAAItJ,KAAKkC,MAAMkB,QAAQod,YAAa,CACnCxgB,KAAKkC,MAAMkB,QAAQod,YAAY9iB,KAAKsC,KAAKkC,MAAOlC,KAAKygB,UACvD,CAEC,IAAKT,EAAa,CACjBhgB,KAAKif,oBACP,CAEC,OAAOva,CACR,EAEAuW,EAAW5d,UAAU2U,QAAU,SAAUtI,EAAM9H,EAAI+H,GAClD,GAAI3J,KAAKkC,MAAMkB,QAAQic,SAAWrf,KAAKkC,MAAMgC,UAAU,WAAY,CAClElE,KAAKkC,MAAMiC,QAAQkb,QAAQyB,OAAO,UAAWpX,EAAM,CAAEmY,QAAS7hB,KAAK8c,eAAepT,GAAOoY,MAAO9hB,KAAK8c,eAAelb,GAAKA,GAAIA,EAAI+H,MAAOA,GAC1I,CAEC3J,KAAK+hB,cAAcrY,EAAM9H,EAAI+H,GAE7B3J,KAAKsgB,uBAELtgB,KAAKkC,MAAMkB,QAAQ4e,SAAStkB,KAAKsC,KAAKkC,MAAOwH,EAAKJ,eACnD,EAEA2R,EAAW5d,UAAU0kB,cAAgB,SAAUrY,EAAM9H,EAAI+H,GACxD,IAAIsY,EAAUjiB,KAEdA,KAAK2hB,gBAAgB3hB,KAAK2K,KAAMjB,EAAM9H,EAAI+H,GAC1C3J,KAAK2hB,gBAAgB3hB,KAAK+J,WAAYL,EAAM9H,EAAI+H,GAEhD3J,KAAKogB,oBAAmB,SAAUzV,GACjCsX,EAAQN,gBAAgBhX,EAAMjB,EAAM9H,EAAI+H,EAC1C,IAEC,GAAI3J,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CAEpE,IAAKyF,GAAS/H,aAAcsgB,GAAO,CAClCtgB,EAAK5B,KAAKkC,MAAMM,WAAW2f,eAAezY,IAAS9H,CACtD,CAEE,IAAIwgB,EAAUxgB,EAAG8f,WACjB,IAAIW,EAAY3Y,EAAKgY,WAErB,GAAIU,IAAYC,EAAW,CAC1BriB,KAAK2hB,gBAAgBS,EAAQzX,KAAMjB,EAAM9H,EAAI+H,EAChD,KAAS,CACN,GAAI0Y,EAAW,CACdA,EAAUC,UAAU5Y,EACxB,CAEG0Y,EAAQG,UAAU7Y,EAAM9H,EAAI+H,EAC/B,CACA,CACA,EAEAsR,EAAW5d,UAAUskB,gBAAkB,SAAUhX,EAAMjB,EAAM9H,EAAI+H,GAChE,IAAI3I,EAAW0J,EAAS9J,EAAO4hB,EAE/B,GAAI9Y,IAAS9H,EAAI,CAEhBZ,EAAY2J,EAAK7J,QAAQ4I,GAEzB,GAAI1I,GAAa,EAAG,CAEnB2J,EAAKjE,OAAO1F,EAAW,GAEvB0J,EAAUC,EAAK7J,QAAQc,GAEvB,GAAI8I,GAAW,EAAG,CAEjB,GAAIf,EAAO,CACVgB,EAAKjE,OAAOgE,EAAU,EAAG,EAAGhB,EACjC,KAAW,CACNiB,EAAKjE,OAAOgE,EAAS,EAAGhB,EAC7B,CACA,KAAU,CACNiB,EAAKjE,OAAO1F,EAAW,EAAG0I,EAC9B,CACA,CAGE,GAAIiB,IAAS3K,KAAKme,iBAAkB,CAEnCvd,EAAQI,EAAY0J,EAAU1J,EAAY0J,EAC1C8X,EAAM9X,EAAU1J,EAAY0J,EAAU1J,EAAY,EAElD,IAAK,IAAIyhB,EAAM7hB,EAAO6hB,GAAOD,EAAKC,IAAO,CACxC,GAAI9X,EAAK8X,GAAM,CACdziB,KAAK0iB,SAAS/X,EAAK8X,GAAMA,EAC9B,CACA,CACA,CACA,CACA,EAEAxH,EAAW5d,UAAUslB,UAAY,WAChC3iB,KAAK2e,QAAQ,GACd,EAEA1D,EAAW5d,UAAUulB,YAAc,SAAUle,GAC5C,OAAO1E,KAAK6iB,aAAane,EAAK1E,KAAK2K,KACpC,EAEAsQ,EAAW5d,UAAUylB,mBAAqB,SAAUpe,GACnD,IAAIvG,EAAQ6B,KAAKme,iBAAiBrd,QAAQ4D,GAC1C,OAAOvG,GAAS,EAAIA,EAAQ,KAC7B,EAEA8c,EAAW5d,UAAU0lB,eAAiB,SAAUre,EAAKse,GACpD,IAAI7kB,EAAQ6B,KAAK8iB,mBAAmBpe,GAChCue,EAAU,MAEd,GAAI9kB,IAAU,OAASA,EAAQ6B,KAAK2b,iBAAmB,EAAG,CACzDsH,EAAUjjB,KAAKme,iBAAiBhgB,EAAQ,EAC1C,CAEC,GAAI8kB,MAAcA,aAAmBtF,IAAQsF,EAAQtV,MAAQ,OAAQ,CACpE,OAAO3N,KAAK+iB,eAAeE,EAASD,EACtC,CAEC,OAAOC,CACR,EAEAhI,EAAW5d,UAAU8kB,eAAiB,SAAUzd,EAAKse,GACpD,IAAI7kB,EAAQ6B,KAAK8iB,mBAAmBpe,GAChCwe,EAAU,MAEd,GAAI/kB,EAAO,CACV+kB,EAAUljB,KAAKme,iBAAiBhgB,EAAQ,EAC1C,CAEC,GAAI6kB,GAAWE,MAAcA,aAAmBvF,IAAQuF,EAAQvV,MAAQ,OAAQ,CAC/E,OAAO3N,KAAKmiB,eAAee,EAASF,EACtC,CAEC,OAAOE,CACR,EAEAjI,EAAW5d,UAAUwlB,aAAe,SAAUne,EAAKye,GAClD,IAAIjF,EAEJxZ,EAAM1E,KAAK0d,QAAQhZ,GAEnB,GAAIA,EAAK,CACRwZ,EAAWiF,EAAKriB,QAAQ4D,GAExB,GAAIwZ,GAAY,EAAG,CAClB,OAAOA,CACV,CACA,CAEC,OAAO,KACR,EAEAjD,EAAW5d,UAAUojB,QAAU,SAAUzX,EAAQoa,GAChD,IAAIna,EAAS,GACT0B,EAAO3K,KAAKqjB,QAAQra,GAExB2B,EAAKzF,SAAQ,SAAUR,GACtB,GAAIA,EAAIiJ,MAAQ,MAAO,CACtB1E,EAAOhE,KAAKP,EAAI+b,QAAQ2C,GAAa,QACxC,CACA,IAEC,OAAOna,CACR,EAEAgS,EAAW5d,UAAU+L,cAAgB,SAAUJ,GAC9C,IAAIC,EAAS,GACT0B,EAAO3K,KAAKqjB,QAAQra,GAExB2B,EAAKzF,SAAQ,SAAUR,GACtBuE,EAAOhE,KAAKP,EAAI4E,eAClB,IAEC,OAAOL,CACR,EAEAgS,EAAW5d,UAAUimB,aAAe,SAAUta,GAC7C,IAAI2B,EAAO3K,KAAKqjB,QAAQra,GAExB,OAAO2B,EAAKvM,MACb,EAEA6c,EAAW5d,UAAUkmB,kBAAoB,WACxC,IAAIC,EAAUxjB,KAEd,IAAIkC,EAAQlC,KAAKkC,MACbkB,EAAUlB,EAAMkB,QAChBmU,EAAS,GAEb,GAAIrV,EAAMgC,UAAU,QAAS,CAE5B,GAAId,EAAQqgB,YAAa,CACxB,IAAIC,EAAU1jB,KAAKkC,MAAMiC,QAAQmR,KAAKqO,UAEtCD,EAAQxe,SAAQ,SAAUic,UAClBA,EAAKhb,MAChB,IAEGoR,EAAOvX,KAAKkC,MAAMiC,QAAQod,KAAKqC,wBAAwBF,SAAWA,CACrE,CAGE,GAAItgB,EAAQygB,cAAe,CAC1B,IAAIC,EAAU9jB,KAAKkC,MAAMiC,QAAQqK,OAAOuV,WAAW,KAAM,MAEzDxM,EAAOvX,KAAKkC,MAAMiC,QAAQod,KAAKqC,wBAAwBE,SAAWA,CACrE,CAEE9jB,KAAKkC,MAAMiC,QAAQqZ,KAAKwG,UAAUzM,EAAQ,KAC5C,CAECrV,EAAMiC,QAAQqZ,KAAKyG,cAAcpJ,MAAK,SAAUvW,GAC/Ckf,EAAQxE,eAAe1a,EAAM,KAC/B,IAAIwW,OAAM,SAAUzG,GAAG,GACvB,EAGA4G,EAAW5d,UAAU6mB,cAAgB,WACpC,IAAIhiB,EAAQlC,KAAKkC,MACbkB,EAAUlB,EAAMkB,QAChBQ,EAAO5D,KAAK4C,WAEhB,GAAIQ,EAAQygB,cAAe,CAC1B,GAAIzgB,EAAQ2b,YAAc,UAAY7c,EAAMgC,UAAU,QAAS,CAC9DhC,EAAMiC,QAAQod,KAAKhc,MAAM,MACzBrD,EAAMiC,QAAQod,KAAK4C,QAAQ,GAAGtJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACxE,MAAS,GAAI1X,EAAQma,oBAAqB,CACvCrb,EAAMiC,QAAQqZ,KAAK4G,WAAWvJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACxE,KAAS,CAEN9a,KAAKujB,mBACR,CACA,KAAQ,CACNvjB,KAAK2f,kBAAkB,SACzB,CAEC3f,KAAK2D,iBAAiBC,EACvB,EAGAqX,EAAW5d,UAAUgnB,cAAgB,SAAUC,GAC9C,IAAIpiB,EAAQlC,KAAKkC,MACbkB,EAAUpD,KAAKkC,MAAMkB,QACrBQ,EAAO5D,KAAK4C,WAEhB,GAAIQ,EAAQqgB,YAAa,CACxB,IAAKrgB,EAAQ2b,YAAc,UAAY3b,EAAQmhB,kBAAoBriB,EAAMgC,UAAU,QAAS,CAC3FhC,EAAMiC,QAAQod,KAAKhc,MAAM,MACzBrD,EAAMiC,QAAQod,KAAK4C,QAAQ,GAAGtJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACxE,MAAS,GAAI1X,EAAQma,oBAAqB,CACvCrb,EAAMiC,QAAQqZ,KAAK4G,WAAWvJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACxE,KAAS,CAEN9a,KAAKujB,mBACR,CACA,KAAQ,CACNvjB,KAAK2f,kBAAkB2E,EAAkB,SAAW,OACtD,CAECtkB,KAAK2D,iBAAiBC,EACvB,EAEAqX,EAAW5d,UAAUsG,iBAAmB,SAAUC,GACjD5D,KAAK4C,WAAagB,EAClB5D,KAAKsC,QAAQM,WAAagB,EAE1B,GAAI5D,KAAKkC,MAAMkB,QAAQ6Z,QAAS,CAC/Bjd,KAAKkC,MAAMiC,QAAQ+Y,UAAUC,cAAcvZ,EAC7C,CAEC,GAAI5D,KAAKkC,MAAMgC,UAAU,eAAgB,CACxClE,KAAKkC,MAAMiC,QAAQ0F,YAAYlG,iBAAiBC,EAClD,CACA,EAGAqX,EAAW5d,UAAUsiB,kBAAoB,SAAU6E,EAAOC,EAAW7F,GACpE,IAAIvZ,EAAOrF,KACPkC,EAAQlC,KAAKkC,MACbwiB,EAAe,CAAC,MAAO,SAAU,OAAQ,UAAW,SAAU,QAAS,OAAQ,QAC/ErE,EAEJ,GAAIrgB,KAAK0c,YAAa,CAErB,IAAK1c,KAAK2c,0BAA4B+H,EAAa5jB,QAAQ0jB,GAASE,EAAa5jB,QAAQd,KAAK2c,yBAAyB6H,OAAQ,CAC9HxkB,KAAK2c,yBAA2B,CAC/B6H,MAAOA,EACPC,UAAWA,EACX7F,iBAAkBA,EAEtB,CAEE,MACF,KAAQ,CAEN,GAAIvZ,EAAKnD,MAAMgC,UAAU,QAAS,CACjCmB,EAAKnD,MAAMiC,QAAQ2R,KAAKmE,YAC3B,CAEE,IAAKuK,EAAO,CACXA,EAAQ,KACX,CAEE,GAAItiB,EAAMkB,QAAQuhB,aAAeziB,EAAMkB,QAAQwhB,uBAAyB1iB,EAAMgC,UAAU,aAAc,CACrGhC,EAAMiC,QAAQob,UAAUsF,cAC3B,CAGE,OAAQL,GACP,IAAK,MAEL,IAAK,SACJ,IAAKC,EAAW,CACf,GAAIviB,EAAMgC,UAAU,UAAW,CAC9BmB,EAAK8a,cAAcje,EAAMiC,QAAQqK,OAAOA,OAAOnJ,EAAKsF,MAC1D,KAAY,CACNtF,EAAK8a,cAAc9a,EAAKsF,KAAKma,MAAM,GACzC,CACA,KAAW,CACNL,EAAY,KACjB,CAEG,IAAK,OACJ,IAAKA,EAAW,CACf,GAAIviB,EAAMgC,UAAU,QAAS,CAC5BhC,EAAMiC,QAAQmR,KAAKA,KAAKtV,KAAK+J,WACnC,CACA,KAAW,CACN0a,EAAY,KACjB,CAGIzkB,KAAKsgB,uBAGN,IAAK,UACJtgB,KAAK+kB,mBAEN,IAAK,SACJ,IAAKN,EAAW,CACf,GAAIzkB,KAAKkC,MAAMgC,UAAU,cAAe,CACvC,GAAIhC,EAAMiC,QAAQ6gB,WAAWC,WAAY,CACxC,IAAK/iB,EAAMiC,QAAQ6gB,WAAWE,kBAAmB,CAChDhjB,EAAMiC,QAAQ6gB,WAAWG,gBAAgBnlB,KAAKolB,sBACtD,CAEO/E,EAAene,EAAMiC,QAAQ6gB,WAAWE,kBAExC7E,EAAehb,EAAKggB,eAAenjB,EAAMiC,QAAQ6gB,WAAW3B,QAAQrjB,KAAKme,eAAekC,EAAe,IAAKA,GAE5G,GAAIA,IAAiB,KAAM,CAC1Bne,EAAMiC,QAAQ6gB,WAAWG,gBAAgB9E,EACjD,CACA,CACA,CACA,KAAW,CACNoE,EAAY,KACjB,CAEG,IAAK,QACJ,IAAKA,EAAW,CACf,GAAIviB,EAAMkB,QAAQ6Z,SAAW/a,EAAMgC,UAAU,aAAc,CAE1D,IAAKhC,EAAMiC,QAAQ+Y,UAAUgI,kBAAmB,CAC/ChjB,EAAMiC,QAAQ+Y,UAAUiI,gBAAgBnlB,KAAKolB,sBACpD,CAEM/E,EAAene,EAAMiC,QAAQ+Y,UAAUgI,kBAEvC7E,EAAehb,EAAKggB,eAAenjB,EAAMiC,QAAQ+Y,UAAUmG,QAAQrjB,KAAKme,eAAekC,EAAe,IAAKA,GAE3G,GAAIA,IAAiB,KAAM,CAC1Bne,EAAMiC,QAAQ+Y,UAAUiI,gBAAgB9E,EAC/C,CACA,CACA,KAAW,CACNoE,EAAY,KACjB,CAEG,IAAK,OAEJ,IAAKA,EAAW,CACf,GAAIviB,EAAMkB,QAAQwH,UAAY1I,EAAMgC,UAAU,YAAa,CAC1D,IAAKhC,EAAMiC,QAAQyG,SAASsa,kBAAmB,CAC9ChjB,EAAMiC,QAAQyG,SAASua,gBAAgBnlB,KAAKolB,sBACnD,CAEM/E,EAAene,EAAMiC,QAAQyG,SAASsa,kBAEtC7E,EAAehb,EAAKggB,eAAenjB,EAAMiC,QAAQyG,SAASyY,QAAQrjB,KAAKme,eAAekC,EAAe,IAAKA,GAE1G,GAAIA,IAAiB,KAAM,CAC1Bne,EAAMiC,QAAQyG,SAASua,gBAAgB9E,EAC9C,CACA,CACA,KAAW,CACNoE,EAAY,KACjB,CAEI,GAAIviB,EAAMkB,QAAQ2b,YAAc7c,EAAMgC,UAAU,UAAY0a,EAAkB,CAC7E,GAAI1c,EAAMiC,QAAQod,KAAKxU,WAAa,QAAS,CAC5C7K,EAAMiC,QAAQod,KAAKhc,OACzB,CACA,CAEG,IAAK,OACJ,IAAKkf,EAAW,CACf,GAAIviB,EAAMkB,QAAQ2b,YAAc7c,EAAMgC,UAAU,QAAS,CAExD,IAAKhC,EAAMiC,QAAQod,KAAK2D,kBAAmB,CAC1ChjB,EAAMiC,QAAQod,KAAK4D,gBAAgBnlB,KAAKolB,sBAC/C,CAEM/E,EAAene,EAAMiC,QAAQod,KAAK2D,kBAElC,GAAIhjB,EAAMiC,QAAQod,KAAKxU,WAAa,QAAS,CAC5C7K,EAAMiC,QAAQod,KAAK+D,WAAWtlB,KAAKme,eAAekC,EAAe,GAAGjiB,OAC3E,CAEMiiB,EAAehb,EAAKggB,eAAenjB,EAAMiC,QAAQod,KAAK8B,QAAQrjB,KAAKme,eAAekC,EAAe,IAAKA,GAEtG,GAAIA,IAAiB,KAAM,CAC1Bne,EAAMiC,QAAQod,KAAK4D,gBAAgB9E,EAC1C,CACA,CACA,KAAW,CACNoE,EAAY,KACjB,EAGE,GAAIrX,EAAU/P,UAAUgQ,QAAQC,UAAUjI,EAAK/C,SAAU,CACxD,GAAIsc,EAAkB,CACrBvZ,EAAK4Z,oBACT,KAAU,CAEN,GAAIuF,IAAU,OAASxkB,KAAKkC,MAAMkB,QAAQwC,cAAe,CACxD5F,KAAKkC,MAAM2D,QAAQ0f,YACxB,CAEIlgB,EAAKmgB,cAEL,GAAItjB,EAAMkB,QAAQqiB,uBAAwB,CACzCpgB,EAAKnD,MAAMkI,cAAcrE,OAAO,KACrC,CACA,CACA,CAEE,GAAI7D,EAAMgC,UAAU,eAAgB,CACnChC,EAAMiC,QAAQ0F,YAAYC,OAAO9J,KAAK+J,WACzC,CACA,CACA,EAGAkR,EAAW5d,UAAUijB,qBAAuB,WAC3C,IAAIoF,EAAU1lB,KAEd,GAAIA,KAAK0Y,aAAc,CACtB1Y,KAAK+J,WAAW7E,SAAQ,SAAUR,GACjC,IAAIsG,EAAOtG,EAAIihB,QAAQD,EAAQhN,cAE/B,GAAI1N,EAAM,CACTA,EAAK4a,mBACT,CACA,GACA,CACA,EAEA3K,EAAW5d,UAAU8iB,cAAgB,SAAUpW,GAC9C/J,KAAK+J,WAAaA,EAClB/J,KAAKyb,gBAAkBzb,KAAK+J,WAAW3L,MACxC,EAGA6c,EAAW5d,UAAU0nB,iBAAmB,WACvC/kB,KAAK0b,YAAc,GAEnB1b,KAAK0b,YAAYzW,KAAKjF,KAAK+J,WAAW+a,MAAM,IAE5C9kB,KAAK2b,iBAAmB3b,KAAK0b,YAAY,GAAGtd,OAE5C,GAAI4B,KAAKkC,MAAMgC,UAAU,cAAe,CACvClE,KAAKkC,MAAMiC,QAAQ6gB,WAAWG,gBAAgB,EAChD,CAEC,GAAInlB,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CACpElE,KAAKkC,MAAMiC,QAAQ+Y,UAAUiI,gBAAgB,EAC/C,CAEC,GAAInlB,KAAKkC,MAAMkB,QAAQ2b,YAAc/e,KAAKkC,MAAMgC,UAAU,QAAS,CAClElE,KAAKkC,MAAMiC,QAAQod,KAAK4D,gBAAgB,EAC1C,CACA,EAEAlK,EAAW5d,UAAU+nB,oBAAsB,WAC1C,OAAOplB,KAAK0b,YAAYtd,MACzB,EAGA6c,EAAW5d,UAAUgoB,eAAiB,SAAU3J,EAAavd,GAE5D,IAAI8K,EAAS,KAEb,GAAI9K,UAAgB6B,KAAK0b,YAAYvd,IAAU,YAAa,CAC3D6B,KAAK0b,YAAYvd,GAASud,EAC1BzS,EAAS,IACX,KAAQ,CACNjJ,KAAK0b,YAAYzW,KAAKyW,GACtBzS,EAAS9K,EAAQ6B,KAAK0b,YAAYtd,OAAS,CAC7C,CAEC,GAAID,GAAS6B,KAAK0b,YAAYtd,OAAS,EAAG,CACzC4B,KAAK2b,iBAAmB3b,KAAK0b,YAAY1b,KAAK0b,YAAYtd,OAAS,GAAGA,MACxE,CAEC,OAAO6K,CACR,EAEAgS,EAAW5d,UAAU8gB,eAAiB,SAAUhgB,GAC/C,UAAWA,GAAS,YAAa,CAChC,OAAO6B,KAAK0b,YAAYtd,OAAS4B,KAAK0b,YAAY1b,KAAK0b,YAAYtd,OAAS,GAAK,EACnF,KAAQ,CACN,OAAO4B,KAAK0b,YAAYvd,IAAU,EACpC,CACA,EAEA8c,EAAW5d,UAAUwoB,eAAiB,SAAUC,GAC/C,IAAIC,EAAU/lB,KAAKsC,QAAQsZ,UACvBoK,EAAahmB,KAAKsC,QAAQiK,aAAewZ,EACzCE,EAAW,MACXC,EAAS,EACTC,EAAY,EACZxb,EAAO3K,KAAKme,iBAEhB,GAAI2H,EAAU,CAEb9lB,KAAKme,iBACL,IAAK,IAAI3Y,EAAIxF,KAAK8b,QAAStW,GAAKxF,KAAK+b,WAAYvW,IAAK,CACrD,GAAImF,EAAKnF,GAAI,CACZ,IAAKygB,EAAU,CACd,GAAIF,EAAUpb,EAAKnF,GAAG/B,aAAaib,WAAa,EAAG,CAClDwH,EAAS1gB,CACf,KAAY,CACNygB,EAAW,KAEX,GAAID,EAAarb,EAAKnF,GAAG/B,aAAaib,WAAa,EAAG,CACrDyH,EAAY3gB,CACnB,KAAa,CACN,KACP,CACA,CACA,KAAW,CACN,GAAIwgB,EAAarb,EAAKnF,GAAG/B,aAAaib,WAAa,EAAG,CACrDyH,EAAY3gB,CAClB,KAAY,CACN,KACN,CACA,CACA,CACA,CACA,KAAQ,CACN0gB,EAASlmB,KAAK8b,QACdqK,EAAYnmB,KAAK+b,UACnB,CAEC,OAAOpR,EAAKma,MAAMoB,EAAQC,EAAY,EACvC,EAGAlL,EAAW5d,UAAU+iB,mBAAqB,SAAUtX,GACnD9I,KAAK0b,YAAYxW,QAAQ4D,GAEzB9I,KAAK2b,iBAAmB3b,KAAK0b,YAAY1b,KAAK0b,YAAYtd,OAAS,GAAGA,MACvE,EAGA6c,EAAW5d,UAAUgmB,QAAU,SAAUra,GACxC,IAAI2B,EAEJ,OAAQ3B,GACP,IAAK,SACJ2B,EAAO3K,KAAK+J,WACZ,MAED,IAAK,UACJY,EAAO3K,KAAKkC,MAAMM,WAAW2b,iBAC7B,MAED,IAAK,UACJxT,EAAO3K,KAAK6lB,eAAe,MAC3B,MAED,IAAK,WACJlb,EAAO3K,KAAKkC,MAAMiC,QAAQob,UAAU6G,aACpC,MAED,QACCzb,EAAO3K,KAAK2K,KAGd,OAAOA,CACR,EAKAsQ,EAAW5d,UAAU4hB,mBAAqB,SAAUnW,GACnD,GAAI9I,KAAKqmB,iBAAmB,UAAW,CAEtC,GAAIrmB,KAAK0c,YAAa,CACrB,GAAI5T,EAAU,CACbA,GACJ,KAAU,CACN9I,KAAK4c,2BAA6B,IACtC,CACA,KAAS,CACN,IAAIhB,EAAY5b,KAAKsC,QAAQsZ,UAC7B,IAAIsK,EAAS,MACb,IAAII,EAAY,MAEhB,IAAI1iB,EAAO5D,KAAK4C,WAEhB,IAAI+H,EAAO3K,KAAKme,iBAEhB,IAAK,IAAI3Y,EAAIxF,KAAK8b,QAAStW,GAAKxF,KAAK+b,WAAYvW,IAAK,CAErD,GAAImF,EAAKnF,GAAI,CACZ,IAAI+gB,EAAO3K,EAAYjR,EAAKnF,GAAG/B,aAAaib,UAE5C,GAAI4H,IAAc,OAASplB,KAAKE,IAAImlB,GAAQD,EAAW,CACtDA,EAAYC,EACZL,EAAS1gB,CACf,KAAY,CACN,KACN,CACA,CACA,CAEG,GAAIsD,EAAU,CACbA,GACJ,CAEG9I,KAAKye,mBAAmByH,IAAW,MAAQlmB,KAAK2b,iBAAmB,EAAIuK,EAAQ,KAAMI,GAAa,GAElGtmB,KAAK2D,iBAAiBC,EACzB,CACA,KAAQ,CACN5D,KAAKwlB,cAEL,GAAI1c,EAAU,CACbA,GACH,CACA,CACA,EAEAmS,EAAW5d,UAAU2f,cAAgB,WAEpC,GAAIhd,KAAKkC,MAAMkB,QAAQojB,WAAY,CAElCxmB,KAAKub,WAAa,UAElB,GAAIvb,KAAKkC,MAAMI,QAAQiK,cAAgBvM,KAAKkC,MAAMkB,QAAQiE,OAAQ,CACjErH,KAAKwb,YAAc,IACtB,KAAS,CACNxb,KAAKwb,YAAc,KACtB,CACA,KAAQ,CACNxb,KAAKub,WAAa,SACpB,CACA,EAEAN,EAAW5d,UAAUgpB,cAAgB,WACpC,OAAOrmB,KAAKub,UACb,EAEAN,EAAW5d,UAAUmoB,YAAc,WAElCxlB,KAAKkC,MAAMkB,QAAQqjB,cAAc/oB,KAAKsC,KAAKkC,OAE3ClC,KAAKsC,QAAQsZ,UAAY,EAEzB,OAAQ5b,KAAKub,YACZ,IAAK,UACJvb,KAAK0mB,gBACL,MAED,IAAK,UACJ1mB,KAAKye,qBACL,MAGF,GAAIze,KAAKsb,YAAa,CACrB,GAAItb,KAAK2b,iBAAkB,CAC1B3b,KAAKsb,YAAc,MACnBtb,KAAKkC,MAAMiC,QAAQ2I,OAAOA,QAC7B,KAAS,CACN9M,KAAK2mB,mBACR,CACA,CAEC,GAAI3mB,KAAKkC,MAAMgC,UAAU,iBAAkB,CAC1ClE,KAAKkC,MAAMiC,QAAQC,cAAc0I,QACnC,CAEC,IAAK9M,KAAK2b,iBAAkB,CAC3B,GAAI3b,KAAKkC,MAAMkB,QAAQwjB,YAAa,CAEnC5mB,KAAKkC,MAAMkB,QAAQwjB,YAAYxU,aAAa,wBAAyBpS,KAAKub,YAE1Evb,KAAKyD,aAAaqD,YAAY9G,KAAKkC,MAAMkB,QAAQwjB,aACjD5mB,KAAKkC,MAAMkB,QAAQwjB,YAAY5iB,MAAMwF,MAAQxJ,KAAKkC,MAAMkI,cAAcb,WAAa,IACtF,CACA,CAECvJ,KAAKkC,MAAMkB,QAAQyjB,eAAenpB,KAAKsC,KAAKkC,MAC7C,EAGA+Y,EAAW5d,UAAUqpB,cAAgB,WACpC1mB,KAAK8mB,mBAEL,GAAI9mB,KAAK2b,iBAAkB,CAC1B3b,KAAK+mB,kCACP,KAAQ,CACN/mB,KAAK2mB,mBACP,CACA,EAEA1L,EAAW5d,UAAU0pB,iCAAmC,WACvD,IAAI1hB,EAAOrF,KACPsC,EAAUtC,KAAKmb,aACf6L,EAAmB,KAEvB3hB,EAAK8Y,iBAAiBjZ,SAAQ,SAAUR,EAAKvG,GAC5CkH,EAAKqd,SAAShe,EAAKvG,GACnBmE,EAAQwE,YAAYpC,EAAIjB,cACxBiB,EAAIpB,WAAW,MAEf,GAAIoB,EAAIiJ,OAAS,QAAS,CACzBqZ,EAAmB,KACtB,CACA,IAEC,GAAIA,EAAkB,CACrB1kB,EAAQ0B,MAAMwI,SAAWnH,EAAKnD,MAAMkI,cAAcb,WAAa,IACjE,KAAQ,CACNjH,EAAQ0B,MAAMwI,SAAW,EAC3B,CACA,EAGAyO,EAAW5d,UAAUspB,kBAAoB,WACxC,GAAI3mB,KAAKkC,MAAMkB,QAAQwjB,YAAa,CACnC5mB,KAAKmb,aAAanX,MAAMkV,QAAU,MACpC,KAAQ,CACNlZ,KAAKmb,aAAanX,MAAMwI,SAAWxM,KAAKkC,MAAMkI,cAAcb,WAAa,IAG3E,CACA,EAEA0R,EAAW5d,UAAUypB,iBAAmB,WACvC,IAAIxkB,EAAUtC,KAAKmb,aAEnB,GAAInb,KAAKkC,MAAMkB,QAAQwjB,aAAe5mB,KAAKkC,MAAMkB,QAAQwjB,YAAYjgB,WAAY,CAChF3G,KAAKkC,MAAMkB,QAAQwjB,YAAYjgB,WAAWrB,YAAYtF,KAAKkC,MAAMkB,QAAQwjB,YAC3E,CAGC,MAAOtkB,EAAQQ,WAAY,CAC1BR,EAAQgD,YAAYhD,EAAQQ,WAC9B,CAAER,EAAQ0B,MAAMyU,WAAa,GAC5BnW,EAAQ0B,MAAMijB,cAAgB,GAC9B3kB,EAAQ0B,MAAMwI,SAAW,GACzBlK,EAAQ0B,MAAMoD,UAAY,GAC1B9E,EAAQ0B,MAAMkV,QAAU,GACxB5W,EAAQ0B,MAAMkjB,WAAa,GAE3BlnB,KAAK4b,UAAY,EACjB5b,KAAK4C,WAAa,EAClB5C,KAAK8b,QAAU,EACf9b,KAAK+b,WAAa,EAClB/b,KAAKkc,WAAa,EAClBlc,KAAKmc,cAAgB,CACtB,EAEAlB,EAAW5d,UAAUqlB,SAAW,SAAUhe,EAAKvG,GAC9C,IAAIigB,EAAQ1Z,EAAIjB,aAEhB,GAAItF,EAAQ,EAAG,CACdigB,EAAMlb,UAAUC,IAAI,sBACpBib,EAAMlb,UAAUikB,OAAO,oBACzB,KAAQ,CACN/I,EAAMlb,UAAUC,IAAI,qBACpBib,EAAMlb,UAAUikB,OAAO,qBACzB,CACA,EAGAlM,EAAW5d,UAAUohB,mBAAqB,SAAUvT,EAAUkc,EAAW/b,GACxE,IAAIhG,EAAOrF,KACPsC,EAAU+C,EAAK8V,aACfkM,EAAShiB,EAAK/C,QACdglB,EAAS,EACTC,EAAa,EACbC,EAAe,EACfhiB,EAAI,EACJwhB,EAAmB,KACnBrc,EAAOtF,EAAK8Y,iBAEhBjT,EAAWA,GAAY,EAEvBG,EAASA,GAAU,EAEnB,IAAKH,EAAU,CACd7F,EAAKyhB,kBACP,KAAQ,CACN,MAAOxkB,EAAQQ,WAAY,CAC1BR,EAAQgD,YAAYhD,EAAQQ,WAC/B,CACE,IAAI2kB,GAAkBpiB,EAAKsW,iBAAmBzQ,EAAW,GAAK7F,EAAKwW,cAEnE,GAAI4L,EAAiBpiB,EAAKgC,OAAQ,CACjC6D,GAAYhK,KAAKwmB,MAAMriB,EAAKgC,OAASogB,GAAkBpiB,EAAKwW,eAE5D,GAAI3Q,EAAW,EAAG,CACjBA,EAAW,CACf,CACA,CAGEoc,EAASpmB,KAAK4K,IAAI5K,KAAKC,IAAID,KAAKsY,MAAMnU,EAAKgX,iBAAmBhX,EAAKwW,eAAgBxW,EAAKkX,yBAA0BrR,GAClHA,GAAYoc,CACd,CAEC,GAAIjiB,EAAKsW,kBAAoBvO,EAAU/P,UAAUgQ,QAAQC,UAAUjI,EAAK/C,SAAU,CAEjF+C,EAAKyW,QAAU5Q,EAEf7F,EAAK0W,WAAa7Q,EAAW,EAE7B,OAAQqc,GAAcliB,EAAKgC,OAAShC,EAAKgX,kBAAoB7W,EAAIH,EAAKiX,yBAA2BjX,EAAK0W,WAAa1W,EAAKsW,iBAAmB,EAAG,CAC7I,IAAIxd,EAAQkH,EAAK0W,WAAa,EAC1BrX,EAAMiG,EAAKxM,GACXwpB,EAAY,EAEhBtiB,EAAKqd,SAAShe,EAAKvG,GAEnBmE,EAAQwE,YAAYpC,EAAIjB,cAExBiB,EAAIpB,aAEJ,IAAKoB,EAAIgV,kBAAmB,CAC3BhV,EAAIkjB,gBAAgB,KACxB,CAUGD,EAAYjjB,EAAI6C,YAEhB,GAAI/B,EAAI8hB,EAAQ,CACfE,GAAgBG,CACpB,KAAU,CACNJ,GAAcI,CAClB,CAEG,GAAIA,EAAY3nB,KAAKqc,iBAAkB,CACtCrc,KAAKqc,iBAAmBsL,EAAY,CACxC,CAEG,GAAIjjB,EAAIiJ,OAAS,QAAS,CACzBqZ,EAAmB,KACvB,CAEG3hB,EAAK0W,aACLvW,GACH,CAEE,IAAK0F,EAAU,CACdlL,KAAKkc,WAAa,EAElB7W,EAAKwW,cAAgB3a,KAAKsY,OAAO+N,EAAaC,GAAgBhiB,GAC9DH,EAAK8W,cAAgB9W,EAAKwW,eAAiBxW,EAAKsW,iBAAmBtW,EAAK0W,WAAa,GAErF1W,EAAKwiB,iBAAmBL,EAAeD,EAAaliB,EAAK8W,cAAgB9W,EAAKgC,MACjF,KAAS,CACNhC,EAAK6W,YAAckL,EAAY/hB,EAAKuW,UAAY4L,EAAeniB,EAAKwW,cAAgB7b,KAAK8b,QAAUzQ,EACnGhG,EAAK8W,cAAgB9W,EAAK0W,YAAc1W,EAAKsW,iBAAmB,EAAI,EAAIza,KAAKC,IAAIkE,EAAKwiB,iBAAmBxiB,EAAK6W,WAAaqL,EAAaC,EAAc,EACzJ,CAEEllB,EAAQ0B,MAAMyU,WAAapT,EAAK6W,WAAa,KAC7C5Z,EAAQ0B,MAAMijB,cAAgB5hB,EAAK8W,cAAgB,KAEnD,GAAIiL,EAAW,CACdpnB,KAAK4b,UAAYvW,EAAK6W,WAAasL,EAAenc,GAAUrL,KAAKsC,QAAQwB,YAAc9D,KAAKsC,QAAQyB,YAAc/D,KAAKsC,QAAQkW,aAAexY,KAAKsC,QAAQiK,aAAe,EAC7K,CAEEvM,KAAK4b,UAAY1a,KAAK4K,IAAI9L,KAAK4b,UAAW5b,KAAKsC,QAAQgK,aAAetM,KAAKqH,QAG3E,GAAIrH,KAAKsC,QAAQwB,YAAc9D,KAAKsC,QAAQuJ,aAAeub,EAAW,CACrEpnB,KAAK4b,WAAa5b,KAAKsC,QAAQkW,aAAexY,KAAKsC,QAAQiK,YAC9D,CAEEvM,KAAKgc,iBAAmBhc,KAAK4b,UAC7B5b,KAAKic,oBAAsBjc,KAAK4b,UAEhCyL,EAAOzL,UAAY5b,KAAK4b,UAExBtZ,EAAQ0B,MAAMwI,SAAWwa,EAAmB3hB,EAAKnD,MAAMkI,cAAcb,WAAa,KAAO,GAEzF,GAAIlE,EAAKnD,MAAMkB,QAAQ6Z,QAAS,CAC/B,GAAI5X,EAAKnD,MAAMiC,QAAQ2I,OAAOC,WAAa,eAAiB1H,EAAKsW,kBAAoBtW,EAAKnD,MAAMiC,QAAQ+Y,UAAU4K,cAAe,CAChIziB,EAAK8V,aAAanX,MAAMwI,SAAWnH,EAAKnD,MAAMkI,cAAcb,UAChE,CACA,CACA,KAAQ,CACNvJ,KAAK2mB,mBACP,CAEC,IAAK3mB,KAAKwb,YAAa,CACtBxb,KAAK0H,iBACP,CACA,EAGAuT,EAAW5d,UAAUigB,eAAiB,SAAUD,GAC/C,IAAI0K,EAAU/nB,KAAK4b,UAAY5b,KAAKgc,iBACpC,IAAIgM,EAAahoB,KAAK4b,UAAY5b,KAAKic,oBACvC,IAAIgM,EAASjoB,KAAKqc,iBAAmB,EAErC,IAAK0L,EAAUE,GAAUD,EAAaC,EAAQ,CAE7C,IAAIrkB,EAAO5D,KAAK4C,WAChB5C,KAAKye,mBAAmBvd,KAAKsY,MAAMxZ,KAAKsC,QAAQsZ,UAAY5b,KAAKsC,QAAQgK,aAAetM,KAAK2b,mBAC7F3b,KAAK2D,iBAAiBC,EACxB,KAAQ,CAEN,GAAIyZ,EAAK,CAER,GAAI0K,EAAU,EAAG,CAEhB/nB,KAAKkoB,YAAYH,EACrB,CAEG,GAAIC,EAAa,EAAG,CAGnB,GAAIhoB,KAAK6nB,iBAAmB7nB,KAAK4b,UAAY5b,KAAKqc,iBAAkB,CACnErc,KAAKmoB,kBAAkBH,EAC5B,KAAW,CACNhoB,KAAKic,oBAAsBjc,KAAK4b,SACrC,CACA,CACA,KAAS,CAEN,GAAImM,GAAW,EAAG,CAGjB,GAAI/nB,KAAK4b,UAAY5b,KAAKqc,iBAAkB,CAE3Crc,KAAKooB,cAAcL,EACxB,KAAW,CACN/nB,KAAKgc,iBAAmBhc,KAAK4b,SAClC,CACA,CAEG,GAAIoM,GAAc,EAAG,CAEpBhoB,KAAKqoB,cAAcL,EACvB,CACA,CACA,CACA,EAEA/M,EAAW5d,UAAU6qB,WAAa,SAAUH,GAC3C,IAAIviB,EAAInF,UAAUjC,OAAS,GAAKiC,UAAU,KAAO3B,UAAY2B,UAAU,GAAK,EAE5E,IAAI6B,EAAQlC,KAAKmb,aACbxQ,EAAO3K,KAAKme,iBAEhB,GAAIne,KAAK8b,QAAS,CACjB,IAAI3d,EAAQ6B,KAAK8b,QAAU,EACvBoK,EAASvb,EAAKxM,GACdmqB,EAAepC,EAAO3e,aAAevH,KAAK6b,cAG9C,GAAIkM,GAAWO,EAAc,CAC5BtoB,KAAK0iB,SAASwD,EAAQ/nB,GACtB+D,EAAMW,aAAaqjB,EAAOziB,aAAcvB,EAAMY,YAC9C,IAAKojB,EAAOqC,cAAgBrC,EAAOxM,kBAAmB,CACrD1Z,KAAKwc,eAAevX,KAAKihB,GAEzB,IAAKA,EAAOxM,kBAAmB,CAC9BwM,EAAOtM,iBACZ,CACA,CACGsM,EAAO5iB,aAEPtD,KAAKkc,YAAcoM,EAEnB,GAAItoB,KAAKkc,WAAa,EAAG,CACxBlc,KAAKkc,WAAa/d,EAAQ6B,KAAK6b,aACnC,CAEG,IAAK1d,EAAO,CACX6B,KAAKkc,WAAa,CACtB,CAEGha,EAAM8B,MAAMyU,WAAazY,KAAKkc,WAAa,KAC3Clc,KAAKgc,kBAAoBsM,EACzBtoB,KAAK8b,SACR,CAEEiM,IAAY/nB,KAAK4b,UAAY5b,KAAKgc,kBAElC,GAAIkK,EAAO3e,YAAcvH,KAAKqc,iBAAkB,CAC/Crc,KAAKqc,iBAAmB6J,EAAO3e,YAAc,CAChD,CAEE,GAAI/B,EAAIxF,KAAKoc,oBAAsBpc,KAAK8b,SAAWiM,IAAYpd,EAAK3K,KAAK8b,QAAU,GAAGvU,aAAevH,KAAK6b,eAAgB,CACzH7b,KAAKkoB,WAAWH,EAASviB,EAAI,EAChC,KAAS,CACNxF,KAAKwoB,yBAAyBxoB,KAAKwc,eACtC,CACA,CACA,EAEAvB,EAAW5d,UAAU+qB,cAAgB,SAAUL,GAC9C,IAAI7lB,EAAQlC,KAAKmb,aACb+K,EAASlmB,KAAKme,iBAAiBne,KAAK8b,SACpCwM,EAAepC,EAAO3e,aAAevH,KAAK6b,cAE9C,GAAIkM,GAAWO,EAAc,CAE5B,IAAIlK,EAAQ8H,EAAOziB,aACnB2a,EAAMzX,WAAWrB,YAAY8Y,GAE7Bpe,KAAKkc,YAAcoM,EACnBpmB,EAAM8B,MAAMyU,WAAazY,KAAKkc,WAAa,KAC3Clc,KAAKgc,kBAAoBhc,KAAK8b,QAAUwM,EAAeA,EAAetoB,KAAKqc,iBAC3Erc,KAAK8b,UAELiM,EAAU/nB,KAAK4b,UAAY5b,KAAKgc,iBAEhChc,KAAKooB,cAAcL,EACrB,CACA,EAEA9M,EAAW5d,UAAUgrB,cAAgB,SAAUL,GAC9C,IAAIxiB,EAAInF,UAAUjC,OAAS,GAAKiC,UAAU,KAAO3B,UAAY2B,UAAU,GAAK,EAE5E,IAAI6B,EAAQlC,KAAKmb,aACbxQ,EAAO3K,KAAKme,iBAEhB,GAAIne,KAAK+b,WAAa/b,KAAK2b,iBAAmB,EAAG,CAChD,IAAIxd,EAAQ6B,KAAK+b,WAAa,EAC1BoK,EAAYxb,EAAKxM,GACjBsqB,EAAkBtC,EAAU5e,aAAevH,KAAK6b,cAGpD,GAAImM,GAAcS,EAAiB,CAClCzoB,KAAK0iB,SAASyD,EAAWhoB,GACzB+D,EAAM4E,YAAYqf,EAAU1iB,cAE5B,IAAK0iB,EAAUoC,cAAgBpC,EAAUzM,kBAAmB,CAC3D1Z,KAAKyc,kBAAkBxX,KAAKkhB,GAE5B,IAAKA,EAAUzM,kBAAmB,CACjCyM,EAAUvM,iBACf,CACA,CAEGuM,EAAU7iB,aAEVtD,KAAKmc,eAAiBsM,EAEtB,GAAIzoB,KAAKmc,cAAgB,GAAKhe,GAAS6B,KAAK2b,iBAAmB,EAAG,CACjE3b,KAAKmc,cAAgB,CACzB,CAEGja,EAAM8B,MAAMijB,cAAgBjnB,KAAKmc,cAAgB,KACjDnc,KAAKic,qBAAuBwM,EAC5BzoB,KAAK+b,YACR,CAEEiM,EAAahoB,KAAK4b,UAAY5b,KAAKic,oBAEnC,GAAIkK,EAAU5e,YAAcvH,KAAKqc,iBAAkB,CAClDrc,KAAKqc,iBAAmB8J,EAAU5e,YAAc,CACnD,CAEE,GAAI/B,EAAIxF,KAAKoc,oBAAsBpc,KAAK+b,WAAa/b,KAAK2b,iBAAmB,GAAKqM,IAAerd,EAAK3K,KAAK+b,WAAa,GAAGxU,aAAevH,KAAK6b,eAAgB,CAC9J7b,KAAKqoB,cAAcL,EAAYxiB,EAAI,EACtC,KAAS,CACNxF,KAAKwoB,yBAAyBxoB,KAAKyc,kBACtC,CACA,CACA,EAEAxB,EAAW5d,UAAU8qB,iBAAmB,SAAUH,GACjD,IAAI9lB,EAAQlC,KAAKmb,aACbgL,EAAYnmB,KAAKme,iBAAiBne,KAAK+b,YACvC0M,EAAkBtC,EAAU5e,aAAevH,KAAK6b,cAEpD,GAAImM,GAAcS,EAAiB,CAElC,IAAIrK,EAAQ+H,EAAU1iB,aAEtB,GAAI2a,EAAMzX,WAAY,CACrByX,EAAMzX,WAAWrB,YAAY8Y,EAChC,CAEEpe,KAAKmc,eAAiBsM,EAEtB,GAAIzoB,KAAKmc,cAAgB,EAAG,CAC3Bnc,KAAKmc,cAAgB,CACxB,CAEEja,EAAM8B,MAAMijB,cAAgBjnB,KAAKmc,cAAgB,KACjDnc,KAAKic,qBAAuBwM,EAC5BzoB,KAAK+b,aAELiM,IAAehoB,KAAK4b,UAAY5b,KAAKic,qBAErCjc,KAAKmoB,iBAAiBH,EACxB,CACA,EAEA/M,EAAW5d,UAAUmrB,yBAA2B,SAAU7d,GACzDA,EAAKzF,SAAQ,SAAUR,GACtBA,EAAImV,YACN,IAEClP,EAAKzF,SAAQ,SAAUR,GACtBA,EAAIoV,eACN,IAECnP,EAAKvM,OAAS,CACf,EAGA6c,EAAW5d,UAAUuqB,gBAAkB,WACtC5nB,KAAK+J,WAAW7E,SAAQ,SAAUR,GACjCA,EAAIkjB,iBACN,GACA,EAGA3M,EAAW5d,UAAUqK,gBAAkB,WACtC,IAAIghB,EAAgB1oB,KAAKsC,QAAQiK,aAC7BrI,EAEJ,GAAIlE,KAAKub,aAAe,UAAW,CAElC,IAAIoN,EAAcznB,KAAKsY,MAAMxZ,KAAKoK,cAAc3G,aAAamlB,wBAAwBvhB,QAAUrH,KAAKkC,MAAMuL,eAAiBzN,KAAKkC,MAAMuL,cAAczE,SAAWhJ,KAAKkC,MAAMuL,cAAcob,SAAW7oB,KAAKkC,MAAMuL,cAAchK,aAAamlB,wBAAwBvhB,OAAS,IAE1Q,GAAIrH,KAAKwb,YAAa,CACrBxb,KAAKsC,QAAQ0B,MAAMoD,UAAY,eAAiBuhB,EAAc,MAC9D3oB,KAAKsC,QAAQ0B,MAAMqD,OAAS,eAAiBshB,EAAc,MAC3D3oB,KAAKsC,QAAQ0B,MAAM8kB,UAAY,eAAiBH,EAAc,KACjE,KAAS,CACN3oB,KAAKsC,QAAQ0B,MAAMqD,OAAS,GAC5BrH,KAAKsC,QAAQ0B,MAAMqD,OAASrH,KAAKkC,MAAMI,QAAQiK,aAAeoc,EAAc,KAC5E3oB,KAAKsC,QAAQsZ,UAAY5b,KAAK4b,SACjC,CAEE5b,KAAKqH,OAASrH,KAAKsC,QAAQiK,aAC3BvM,KAAKqc,iBAAmBrc,KAAKkC,MAAMkB,QAAQ2lB,kBAAoB/oB,KAAKqH,OAGpE,IAAKrH,KAAKwb,aAAekN,GAAiB1oB,KAAKsC,QAAQiK,aAAc,CACpErI,EAAYlE,KAAKkC,MAAMgC,UAAU,eAEjC,GAAIA,IAAclE,KAAKkC,MAAMiC,QAAQ6kB,YAAYC,aAAe/kB,EAAW,CAC1ElE,KAAK+F,QACT,CACA,CACA,CACA,EAGAkV,EAAW5d,UAAUyI,aAAe,WACnC9F,KAAK2K,KAAKzF,SAAQ,SAAUR,GAC3BA,EAAIoB,aAAa,KACnB,GACA,EAGAmV,EAAW5d,UAAU2iB,YAAc,WAClChgB,KAAK0c,YAAc,KACnB1c,KAAK2c,yBAA2B,KACjC,EAGA1B,EAAW5d,UAAU6rB,cAAgB,WACpClpB,KAAK0c,YAAc,MAEnB,GAAI1c,KAAK2c,yBAA0B,CAClC3c,KAAK2f,kBAAkB3f,KAAK2c,yBAAyB6H,MAAOxkB,KAAK2c,yBAAyB8H,UAAWzkB,KAAK2c,yBAAyBiC,kBAEnI5e,KAAK2c,yBAA2B,KAClC,KAAQ,CACN,GAAI3c,KAAK4c,2BAA4B,CACpC5c,KAAKif,oBACR,CACA,CAECjf,KAAK4c,2BAA6B,KACnC,EAGA3B,EAAW5d,UAAU0I,OAAS,SAAUoH,GACpC,IACCvJ,EAAO5D,KAAK4C,WAEhB5C,KAAK0H,kBAEL1H,KAAKkC,MAAMinB,WAAanpB,KAAKkC,MAAMI,QAAQyB,YAE3C,IAAKoJ,EAAO,CACX,GAAInN,KAAKub,YAAc,UAAW,CAEjC,GAAIvb,KAAKkC,MAAMkB,QAAQ6Z,QAAS,CAC/Bjd,KAAK2f,kBAAkB,QAAS,MAAO,MAC3C,KAAU,CACN3f,KAAK0mB,eACT,CACA,KAAS,CACN1mB,KAAKif,qBACLjf,KAAK2D,iBAAiBC,EACzB,CAEE,IAAK5D,KAAK2b,iBAAkB,CAC3B,GAAI3b,KAAKkC,MAAMkB,QAAQwjB,YAAa,CACnC5mB,KAAKyD,aAAaqD,YAAY9G,KAAKkC,MAAMkB,QAAQwjB,YACrD,CACA,CACA,KAAQ,CACN5mB,KAAKwlB,aACP,CACA,EAEAvK,EAAW5d,UAAUkQ,YAAc,WAClCvN,KAAKsC,QAAQM,WAAa,EAC1B5C,KAAKsC,QAAQsZ,UAAY,EAEzB,GAAI5b,KAAKkC,MAAMknB,UAAY,KAAM,CAChC,IAAIC,EAAQrmB,SAASsmB,YAAY,SACjCD,EAAME,UAAU,SAAU,MAAO,MACjCvpB,KAAKsC,QAAQknB,cAAcH,EAC7B,KAAQ,CACNrpB,KAAKsC,QAAQknB,cAAc,IAAIC,MAAM,UACvC,CACA,EAEA,IAAIC,EAAU,SAASA,EAAQxnB,GAC9BlC,KAAKkC,MAAQA,EAEblC,KAAKsC,QAAUtC,KAAKkC,MAAMM,WAAW2Y,aACrCnb,KAAK2pB,SAAW3pB,KAAKkC,MAAMM,WAAWF,QAEtCtC,KAAK4pB,QAAU,EACf5pB,KAAK6pB,SAAW,EAChB7pB,KAAK4C,WAAa,EAElB5C,KAAK8pB,kBAAoB,EACzB9pB,KAAK+pB,mBAAqB,EAE1B/pB,KAAKgqB,YAAc,EACnBhqB,KAAKiqB,aAAe,EAEpBjqB,KAAKkqB,cAAgB,EAErBlqB,KAAKmqB,OAAS,IAEdnqB,KAAKuoB,YAAc,MAEnBvoB,KAAKyC,QAAU,GAEf,GAAIzC,KAAKoqB,qBAAsB,CAC9BpqB,KAAKsD,YACP,CACA,EAEAomB,EAAQrsB,UAAU+sB,mBAAqB,WACtC,IAAIhnB,EAAUpD,KAAKkC,MAAMkB,QACrBinB,EAAS,MACTC,EAAK,KAET,GAAIlnB,EAAQ0J,QAAU,eAAgB,CACrCf,QAAQC,KAAK,0EACbse,EAAK,KACP,CAEC,GAAIlnB,EAAQuC,iBAAkB,CAC7BoG,QAAQC,KAAK,oEACbse,EAAK,KACP,CAEC,GAAItqB,KAAKkC,MAAMqoB,IAAK,CACnBxe,QAAQC,KAAK,8EACbse,EAAK,KACP,CAOC,GAAIlnB,EAAQX,QAAS,CACpB4nB,EAASjnB,EAAQX,QAAQjC,MAAK,SAAUoE,GACvC,OAAOA,EAAIylB,MACd,IAEE,GAAIA,EAAQ,CACXte,QAAQC,KAAK,gEACbse,EAAK,KACR,CACA,CAEC,IAAKA,EAAI,CACRlnB,EAAQwC,cAAgB,KAC1B,CAEC,OAAO0kB,CACR,EAEAZ,EAAQrsB,UAAUiG,WAAa,WAC9B,IAAIknB,EAAUxqB,KAEdA,KAAK2pB,SAASvV,iBAAiB,UAAU,WACxC,IAAIxQ,EAAO4mB,EAAQb,SAAS/mB,WAE5B,GAAI4nB,EAAQ5nB,YAAcgB,EAAM,CAC/B4mB,EAAQ5nB,WAAagB,EACrB4mB,EAAQC,OAAO7mB,GAAQ4mB,EAAQV,kBAAoBU,EAAQL,QAC9D,CACA,GACA,EAEAT,EAAQrsB,UAAUqtB,aAAe,WAChC1qB,KAAKuoB,YAAc,KACpB,EAEAmB,EAAQrsB,UAAUiiB,MAAQ,WACzBtf,KAAKyC,QAAU,GAEfzC,KAAK4pB,SAAW,EAChB5pB,KAAK6pB,SAAW,EAEhB7pB,KAAK8pB,kBAAoB,EACzB9pB,KAAK+pB,mBAAqB,EAC1B/pB,KAAKgqB,YAAc,EACnBhqB,KAAKiqB,aAAe,CACrB,EAEAP,EAAQrsB,UAAUkoB,WAAa,WAC9B,IAAIoF,EAAS,MACTC,EAAa,EACbC,EAAS,EACTC,EACApmB,EACA0Z,EAEJ,GAAIpe,KAAKkC,MAAMkB,QAAQ0J,SAAW,UAAW,CAC5C9M,KAAKkC,MAAMkI,cAAc1H,eAAewC,SAAQ,SAAUiB,GACzD,IAAKA,EAAOH,WAAWwD,OAASrD,EAAOuC,QAAS,CAC/CiiB,EAAS,IACb,CACA,IAEE,GAAIA,EAAQ,CACX,GAAIA,GAAU3qB,KAAKkC,MAAMM,WAAW2b,iBAAiB/f,OAAQ,CAG5D4B,KAAK+pB,mBAAqB/pB,KAAK4C,WAAa5C,KAAK2pB,SAAS5lB,YAAc/D,KAAKmqB,OAE7E,GAAInqB,KAAKkC,MAAMkB,QAAQ6Z,QAAS,CAC/B6N,EAAQ9qB,KAAKkC,MAAMiC,QAAQ+Y,UAAU6N,UAAU,OAAO,GAEtDrmB,EAAMomB,EAAMzH,QAAQ,OAAO,EAChC,KAAW,CACN3e,EAAM1E,KAAKkC,MAAMM,WAAW2b,iBAAiB,EAClD,CAEI,GAAIzZ,EAAK,CAER0Z,EAAQ1Z,EAAIjB,aAEZiB,EAAIuH,gBAEJjM,KAAKsC,QAAQwE,YAAYsX,GAEzB,IAAK,IAAIyM,EAAS,EAAGA,EAASnmB,EAAIqG,MAAM3M,OAAQysB,IAAU,CACzD,IAAI7f,EAAOtG,EAAIqG,MAAM8f,GACrBzM,EAAMtX,YAAYkE,EAAKvH,cAEvBuH,EAAK7E,OAAO6G,oBAEZ4d,GAAc5f,EAAK7E,OAAOoD,WAE1B,GAAIqhB,EAAa5qB,KAAK+pB,mBAAoB,CACzC,KACP,CACA,CAEK3L,EAAMzX,WAAWrB,YAAY8Y,GAE7Bpe,KAAKkqB,cAAgBhpB,KAAKsY,MAAMoR,GAAcC,EAAS,IAEvD,IAAKA,EAAQA,EAAS7qB,KAAKkC,MAAMkI,cAAc1H,eAAetE,OAAQysB,IAAU,CAC/E7qB,KAAKkC,MAAMkI,cAAc1H,eAAemoB,GAAQtb,SAASvP,KAAKkqB,cACpE,CAEKlqB,KAAK8F,aAAa,MAAO,KAC9B,CACA,CACA,CACA,KAAQ,CACN,GAAI9F,KAAKkC,MAAMkB,QAAQ0J,SAAW,aAAc,CAC/C9M,KAAKkC,MAAMiC,QAAQ2I,OAAOA,SAC1B9M,KAAKkC,MAAM2D,QAAQC,aAAa,MAAO,KAC1C,CACA,CACA,EAEA4jB,EAAQrsB,UAAU2tB,sBAAwB,WACzC,IAAK,IAAIC,EAAMjrB,KAAK4pB,QAASqB,GAAOjrB,KAAK6pB,SAAUoB,IAAO,CACzDjrB,KAAKyC,QAAQwoB,GAAKje,mBACpB,CACA,EAEA0c,EAAQrsB,UAAUyI,aAAe,SAAU0H,EAAQwS,GAClD,IAAIkL,EAAUlrB,KAEd,IAAImrB,EAAM,CACT5mB,KAAMvE,KAAKyC,QACXmnB,QAAS5pB,KAAK4pB,QACdC,SAAU7pB,KAAK6pB,UAGhB,GAAIrc,IAAWxN,KAAKuoB,YAAa,CAChC,MACF,CAECvoB,KAAKsf,QAELtf,KAAK4C,WAAa5C,KAAK2pB,SAAS/mB,WAEhC5C,KAAK8pB,kBAAoB9pB,KAAK4C,WAAa5C,KAAKmqB,OAChDnqB,KAAK+pB,mBAAqB/pB,KAAK4C,WAAa5C,KAAK2pB,SAAS5lB,YAAc/D,KAAKmqB,OAE7E,IAAIiB,EAAS,EAEbprB,KAAKkC,MAAMkI,cAAc1H,eAAewC,SAAQ,SAAUiB,GACzD,IAAImE,EAAS,GAEb,GAAInE,EAAOuC,QAAS,CACnB,IAAIc,EAAQrD,EAAOoD,WAEnBe,EAAO+gB,QAAUD,EACjB9gB,EAAOghB,SAAWF,EAAS5hB,EAE3B,GAAI4hB,EAAS5hB,EAAQ0hB,EAAQpB,mBAAqBsB,EAASF,EAAQnB,mBAAoB,CAGtF,GAAImB,EAAQtB,UAAY,EAAG,CAC1BsB,EAAQtB,QAAUsB,EAAQzoB,QAAQrE,OAClC8sB,EAAQlB,YAAcoB,CAC3B,CAEIF,EAAQrB,SAAWqB,EAAQzoB,QAAQrE,MACvC,KAAU,CAEN,GAAI8sB,EAAQtB,WAAa,EAAG,CAC3BsB,EAAQjB,cAAgBzgB,CAC7B,CACA,CAEG0hB,EAAQzoB,QAAQwC,KAAKkB,GAErBA,EAAOhC,QAAQ0B,QAAUyE,EAEzB8gB,GAAU5hB,CACb,CACA,IAECxJ,KAAKsC,QAAQ0B,MAAMunB,YAAcvrB,KAAKgqB,YAAc,KACpDhqB,KAAKsC,QAAQ0B,MAAMwnB,aAAexrB,KAAKiqB,aAAe,KAEtDjqB,KAAKuoB,YAAc,KAEnB,IAAKvI,EAAa,CACjB,IAAKxS,GAAUxN,KAAKyrB,cAAcN,GAAM,CACvCnrB,KAAK0rB,iBACR,CACA,CAEC1rB,KAAK2pB,SAAS/mB,WAAa5C,KAAK4C,UACjC,EAEA8mB,EAAQrsB,UAAUouB,cAAgB,SAAUN,GAC3C,IAAIQ,EAAU3rB,KAEd,IAAIgF,EAAQ,KAEZ,GAAImmB,EAAI5mB,KAAKnG,SAAW4B,KAAKyC,QAAQrE,QAAU+sB,EAAIvB,UAAY5pB,KAAK4pB,SAAWuB,EAAItB,WAAa7pB,KAAK6pB,SAAU,CAC9G,OAAO,IACT,CAECsB,EAAI5mB,KAAKW,SAAQ,SAAUN,EAAKY,GAC/B,GAAIZ,IAAQ+mB,EAAQlpB,QAAQ+C,GAAI,CAC/BR,EAAQ,KACX,CACA,IAEC,OAAQA,CACT,EAEA0kB,EAAQrsB,UAAUquB,gBAAkB,WACnC,IAAIE,EAAU5rB,KAEd,IAAI2K,EAAO3K,KAAKkC,MAAMM,WAAWqjB,iBACjClb,EAAKzF,SAAQ,SAAUR,GACtBknB,EAAQC,gBAAgBnnB,EAAK,KAC/B,GACA,EAEAglB,EAAQrsB,UAAUotB,OAAS,SAAUlE,GACpCvmB,KAAK8pB,mBAAqBvD,EAC1BvmB,KAAK+pB,oBAAsBxD,EAE3B,GAAIA,EAAOvmB,KAAK2pB,SAAS5lB,YAAc,GAAI,CAC1C/D,KAAK8F,cACP,KAAQ,CACN,GAAIygB,EAAO,EAAG,CAEbvmB,KAAK8rB,cACL9rB,KAAK+rB,eACR,KAAS,CAEN/rB,KAAKgsB,aACLhsB,KAAKisB,gBACR,CACA,CACA,EAEAvC,EAAQrsB,UAAU6uB,kBAAoB,SAAUtrB,EAAO4hB,EAAK+D,GAC3D,IAAK,IAAI4F,EAAMvrB,EAAOurB,EAAM3J,EAAK2J,IAAO,CACvC,IAAIhmB,EAASnG,KAAKyC,QAAQ0pB,GAE1BhmB,EAAOhC,QAAQ0B,QAAQwlB,SAAW9E,EAClCpgB,EAAOhC,QAAQ0B,QAAQylB,UAAY/E,CACrC,CACA,EAEAmD,EAAQrsB,UAAUyuB,YAAc,WAC/B,IAAI3lB,EAASnG,KAAKyC,QAAQzC,KAAK6pB,SAAW,GACtClf,EACAyhB,EACAC,EAEJ,GAAIlmB,GAAUA,EAAOhC,QAAQ0B,QAAQwlB,SAAWrrB,KAAK+pB,mBAAoB,CAExEpf,EAAO3K,KAAKkC,MAAMM,WAAWqjB,iBAE7Blb,EAAKzF,SAAQ,SAAUR,GACtB,GAAIA,EAAIiJ,OAAS,QAAS,CACzB,IAAI3C,EAAOtG,EAAIihB,QAAQxf,GACvBzB,EAAIjB,aAAaqD,YAAYkE,EAAKvH,cAClCuH,EAAKshB,cACT,CACA,IAEE,GAAItsB,KAAKkqB,cAAe,CAEvBkC,EAAWjmB,EAAOoD,WAElB,GAAI6iB,IAAapsB,KAAKkqB,cAAe,CACpC/jB,EAAO6G,oBAEPqf,EAAYD,EAAWjmB,EAAOoD,WAE9B,GAAI8iB,EAAW,CACdlmB,EAAOhC,QAAQ0B,QAAQylB,UAAYe,EACnCrsB,KAAKksB,kBAAkBlsB,KAAK6pB,SAAW,EAAG7pB,KAAKyC,QAAQrE,OAAQiuB,EACpE,CACA,CACA,CAEErsB,KAAK6pB,WAEL,GAAI7pB,KAAK6pB,UAAY7pB,KAAKyC,QAAQrE,OAAS,EAAG,CAC7C4B,KAAKiqB,aAAe,CACvB,KAAS,CACNjqB,KAAKiqB,cAAgB9jB,EAAOoD,UAC/B,CAEEvJ,KAAKsC,QAAQ0B,MAAMwnB,aAAexrB,KAAKiqB,aAAe,KAEtDjqB,KAAK8rB,aACP,CACA,EAEApC,EAAQrsB,UAAU2uB,WAAa,WAC9B,IAAI7lB,EAASnG,KAAKyC,QAAQzC,KAAK4pB,QAAU,GACrCjf,EAEJ,GAAIxE,GAAUA,EAAOhC,QAAQ0B,QAAQylB,UAAYtrB,KAAK8pB,kBAAmB,CACxE,IAAInf,EAAO3K,KAAKkC,MAAMM,WAAWqjB,iBAEjClb,EAAKzF,SAAQ,SAAUR,GACtB,GAAIA,EAAIiJ,OAAS,QAAS,CACzB,IAAI3C,EAAOtG,EAAIihB,QAAQxf,GACvBzB,EAAIjB,aAAa8oB,QAAQvhB,EAAKvH,cAC9BuH,EAAKshB,cACT,CACA,IAEE,IAAKtsB,KAAK4pB,QAAS,CAClB5pB,KAAKgqB,YAAc,CACtB,KAAS,CACNhqB,KAAKgqB,aAAe7jB,EAAOoD,UAC9B,CAEEvJ,KAAKsC,QAAQ0B,MAAMunB,YAAcvrB,KAAKgqB,YAAc,KAEpDhqB,KAAK4pB,UAEL5pB,KAAKgsB,YACP,CACA,EAEAtC,EAAQrsB,UAAU4uB,eAAiB,SAAU9lB,GAC5C,IAAIA,EAASnG,KAAKyC,QAAQzC,KAAK6pB,UAC3Blf,EAEJ,GAAIxE,GAAUA,EAAOhC,QAAQ0B,QAAQwlB,QAAUrrB,KAAK+pB,mBAAoB,CACvEpf,EAAO3K,KAAKkC,MAAMM,WAAWqjB,iBAE7B1f,EAAOhC,QAAQ0B,QAAQ6C,QAAU,MAEjCiC,EAAKzF,SAAQ,SAAUR,GACtB,GAAIA,EAAIiJ,OAAS,QAAS,CACzB,IAAI3C,EAAOtG,EAAIihB,QAAQxf,GACvBzB,EAAIjB,aAAa6B,YAAY0F,EAAKvH,aACtC,CACA,IAEEzD,KAAKiqB,cAAgB9jB,EAAOoD,WAC5BvJ,KAAKsC,QAAQ0B,MAAMwnB,aAAexrB,KAAKiqB,aAAe,KAEtDjqB,KAAK6pB,WAEL7pB,KAAKisB,gBACP,CACA,EAEAvC,EAAQrsB,UAAU0uB,cAAgB,WACjC,IAAI5lB,EAASnG,KAAKyC,QAAQzC,KAAK4pB,SAC3Bjf,EAEJ,GAAIxE,GAAUA,EAAOhC,QAAQ0B,QAAQylB,SAAWtrB,KAAK8pB,kBAAmB,CAEvEnf,EAAO3K,KAAKkC,MAAMM,WAAWqjB,iBAE7Blb,EAAKzF,SAAQ,SAAUR,GACtB,GAAIA,EAAIiJ,OAAS,QAAS,CACzB,IAAI3C,EAAOtG,EAAIihB,QAAQxf,GACvBzB,EAAIjB,aAAa6B,YAAY0F,EAAKvH,aACtC,CACA,IAEEzD,KAAKgqB,aAAe7jB,EAAOoD,WAC3BvJ,KAAKsC,QAAQ0B,MAAMunB,YAAcvrB,KAAKgqB,YAAc,KAEpDhqB,KAAK4pB,UAEL5pB,KAAK+rB,eACP,CACA,EAEArC,EAAQrsB,UAAUmvB,cAAgB,SAAU9nB,GAC3C,GAAIA,EAAIiJ,OAAS,QAAS,CACzBjJ,EAAIP,QAAQ0B,QAAU,CACrB+jB,QAAS5pB,KAAK4pB,QACdC,SAAU7pB,KAAK6pB,UAGhB,IAAK,IAAI4C,EAAMzsB,KAAK4pB,QAAS6C,GAAOzsB,KAAK6pB,SAAU4C,IAAO,CACzD,IAAItmB,EAASnG,KAAKyC,QAAQgqB,GAE1B,GAAItmB,GAAUA,EAAOuC,QAAS,CAC7B,IAAIsC,EAAOtG,EAAIihB,QAAQxf,GAEvBzB,EAAIjB,aAAaqD,YAAYkE,EAAKvH,cAClCuH,EAAKshB,cACT,CACA,CACA,CACA,EAEA5C,EAAQrsB,UAAUwuB,gBAAkB,SAAUnnB,EAAKyI,GAClD,GAAIzI,EAAIiJ,OAAS,QAAS,CACzB,GAAIR,IAAUzI,EAAIP,QAAQ0B,SAAWnB,EAAIP,QAAQ0B,QAAQ+jB,UAAY5pB,KAAK4pB,SAAWllB,EAAIP,QAAQ0B,QAAQgkB,WAAa7pB,KAAK6pB,SAAU,CACpI,IAAIzL,EAAQ1Z,EAAIjB,aAChB,MAAO2a,EAAMtb,WAAY,CACxBsb,EAAM9Y,YAAY8Y,EAAMtb,WAC5B,CAAI9C,KAAKwsB,cAAc9nB,EACvB,CACA,CACA,EAEA,IAAIkZ,EAAe,SAASA,EAAalZ,GACxC1E,KAAK0sB,KAAOhoB,CACb,EAEAkZ,EAAavgB,UAAUojB,QAAU,SAAU2C,GAC1C,OAAOpjB,KAAK0sB,KAAKjM,QAAQ2C,EAC1B,EAEAxF,EAAavgB,UAAUoG,WAAa,WACnC,OAAOzD,KAAK0sB,KAAKjpB,YAClB,EAEAma,EAAavgB,UAAUuQ,SAAW,WACjC,IAAI7C,EAAQ,GAEZ/K,KAAK0sB,KAAK9e,WAAW1I,SAAQ,SAAU8F,GACtCD,EAAM9F,KAAK+F,EAAK1B,eAClB,IAEC,OAAOyB,CACR,EAEA6S,EAAavgB,UAAUsoB,QAAU,SAAUxf,GAC1C,IAAI6E,EAAOhL,KAAK0sB,KAAK/G,QAAQxf,GAC7B,OAAO6E,EAAOA,EAAK1B,eAAiB,KACrC,EAEAsU,EAAavgB,UAAUsvB,SAAW,WACjC,OAAO3sB,KAAK0sB,KAAKjM,QAAQ,QAAQzgB,KAAK0sB,KAAKxqB,MAAMkB,QAAQjF,MAC1D,EAEAyf,EAAavgB,UAAUuvB,YAAc,SAAU5jB,GAC9C,OAAOhJ,KAAK0sB,KAAKxqB,MAAMM,WAAWsa,eAAe9c,KAAK0sB,KAAM1jB,EAC7D,EAEA4U,EAAavgB,UAAU6Q,OAAS,WAC/B,OAAOlO,KAAK0sB,KAAKxe,QAClB,EAEA0P,EAAavgB,UAAUgR,SAAW,WACjC,OAAOrO,KAAK0sB,KAAKxqB,MAAMM,WAAWwb,YAAYhe,KAAK0sB,KACpD,EAEA9O,EAAavgB,UAAUwvB,OAAS,WAC/B,GAAI7sB,KAAK0sB,KAAKxqB,MAAMgC,UAAU,OAAQ,MAAO,CAC5C,OAAOlE,KAAK0sB,KAAKxqB,MAAMiC,QAAQod,KAAKuL,aAAa9sB,KAAK0sB,KACxD,CACA,EAEA9O,EAAavgB,UAAUwR,KAAO,SAAUjN,EAAI+H,GAC3C3J,KAAK0sB,KAAKK,UAAUnrB,EAAI+H,EACzB,EAEAiU,EAAavgB,UAAUmQ,OAAS,SAAUlJ,GACzC,OAAOtE,KAAK0sB,KAAKM,WAAW1oB,EAC7B,EAEAsZ,EAAavgB,UAAUuqB,gBAAkB,WACxC5nB,KAAK0sB,KAAK9E,gBAAgB,KAC3B,EAEAhK,EAAavgB,UAAU4vB,OAAS,WAC/BjtB,KAAK0sB,KAAKxqB,MAAMiC,QAAQob,UAAU2N,WAAWltB,KAAK0sB,KACnD,EAEA9O,EAAavgB,UAAU8vB,SAAW,WACjCntB,KAAK0sB,KAAKxqB,MAAMiC,QAAQob,UAAUsF,aAAa7kB,KAAK0sB,KACrD,EAEA9O,EAAavgB,UAAU+vB,aAAe,WACrCptB,KAAK0sB,KAAKxqB,MAAMiC,QAAQob,UAAU8N,UAAUrtB,KAAK0sB,KAClD,EAEA9O,EAAavgB,UAAUiwB,WAAa,WACnC,OAAOttB,KAAK0sB,KAAKxqB,MAAMiC,QAAQob,UAAUgO,cAAcvtB,KAAK0sB,KAC7D,EAEA9O,EAAavgB,UAAUyK,SAAW,WACjC,OAAO9H,KAAK0sB,IACb,EAEA9O,EAAavgB,UAAUmS,SAAW,WACjC,OAAOxP,KAAK0sB,KAAKld,UAClB,EAEAoO,EAAavgB,UAAUmwB,OAAS,WAC/B,GAAIxtB,KAAK0sB,KAAKxqB,MAAMgC,UAAU,aAAc,MAAO,CAClDlE,KAAK0sB,KAAKxqB,MAAMiC,QAAQ6gB,WAAWyI,UAAUztB,KAAK0sB,KACpD,CACA,EAEA9O,EAAavgB,UAAUqwB,SAAW,WACjC,GAAI1tB,KAAK0sB,KAAKxqB,MAAMgC,UAAU,aAAc,MAAO,CAClDlE,KAAK0sB,KAAKxqB,MAAMiC,QAAQ6gB,WAAW2I,YAAY3tB,KAAK0sB,KACtD,CACA,EAEA9O,EAAavgB,UAAU4nB,SAAW,WACjC,GAAIjlB,KAAK0sB,KAAKxqB,MAAMgC,UAAU,aAAc,MAAO,CAClD,IAAI/F,EAAQ6B,KAAK0sB,KAAKxqB,MAAMiC,QAAQ6gB,WAAWra,KAAK7J,QAAQd,KAAK0sB,MACjE,OAAOvuB,GAAS,CAClB,CAEC,OAAO,KACR,EAEAyf,EAAavgB,UAAUuwB,aAAe,WACrC,GAAI5tB,KAAK0sB,KAAKxqB,MAAMgC,UAAU,WAAY,MAAO,CAChDlE,KAAK0sB,KAAKxqB,MAAMiC,QAAQyG,SAASijB,YAAY7tB,KAAK0sB,KACpD,CACA,EAEA9O,EAAavgB,UAAUywB,WAAa,WACnC,GAAI9tB,KAAK0sB,KAAKxqB,MAAMgC,UAAU,WAAY,MAAO,CAChDlE,KAAK0sB,KAAKxqB,MAAMiC,QAAQyG,SAASmjB,UAAU/tB,KAAK0sB,KAClD,CACA,EAEA9O,EAAavgB,UAAU2wB,WAAa,WACnC,GAAIhuB,KAAK0sB,KAAKxqB,MAAMgC,UAAU,WAAY,MAAO,CAChDlE,KAAK0sB,KAAKxqB,MAAMiC,QAAQyG,SAASyiB,UAAUrtB,KAAK0sB,KAClD,CACA,EAEA9O,EAAavgB,UAAU4wB,cAAgB,WACtC,GAAIjuB,KAAK0sB,KAAKxqB,MAAMgC,UAAU,WAAY,MAAO,CAChD,OAAOlE,KAAK0sB,KAAKxqB,MAAMiC,QAAQyG,SAASqjB,cAAcjuB,KAAK0sB,KAC7D,CAEC,OAAO,KACR,EAEA9O,EAAavgB,UAAUyN,gBAAkB,WACxC,GAAI9K,KAAK0sB,KAAKxqB,MAAMgC,UAAU,WAAY,MAAO,CAChD,OAAOlE,KAAK0sB,KAAKxqB,MAAMiC,QAAQyG,SAASE,gBAAgB9K,KAAK0sB,KAAM,KACrE,CAEC,OAAO,KACR,EAEA9O,EAAavgB,UAAU6wB,aAAe,SAAU5pB,EAAMsc,EAAKziB,GAC1D,GAAI6B,KAAK0sB,KAAKxqB,MAAMgC,UAAU,WAAY,MAAO,CAChD,OAAOlE,KAAK0sB,KAAKxqB,MAAMiC,QAAQyG,SAASujB,gBAAgBnuB,KAAK0sB,KAAMpoB,EAAMsc,EAAKziB,EAChF,CAEC,OAAO,KACR,EAEAyf,EAAavgB,UAAU+wB,SAAW,WACjC,OAAOpuB,KAAK0sB,KAAK5mB,cAClB,EAEA8X,EAAavgB,UAAUqkB,SAAW,WACjC,OAAO1hB,KAAK0sB,KAAKhL,WAAWpY,cAC7B,EAEAsU,EAAavgB,UAAUiR,SAAW,WACjC,OAAOtO,KAAK0sB,KAAKxqB,KAClB,EAEA0b,EAAavgB,UAAUgxB,WAAa,WACnC,IAAI3pB,EAAM1E,KAAK0sB,KAAKzJ,UACpB,OAAOve,EAAMA,EAAI4E,eAAiB5E,CACnC,EAEAkZ,EAAavgB,UAAUixB,WAAa,WACnC,IAAI5pB,EAAM1E,KAAK0sB,KAAKxJ,UACpB,OAAOxe,EAAMA,EAAI4E,eAAiB5E,CACnC,EAEA,IAAIiZ,EAAM,SAASA,EAAIrZ,EAAM0F,GAC5B,IAAI2D,EAAOtN,UAAUjC,OAAS,GAAKiC,UAAU,KAAO3B,UAAY2B,UAAU,GAAK,MAE/EL,KAAKkC,MAAQ8H,EAAO9H,MACpBlC,KAAKgK,OAASA,EACdhK,KAAKsE,KAAO,GACZtE,KAAK2N,KAAOA,EACZ3N,KAAKsC,QAAU,MACftC,KAAKmE,QAAU,GACfnE,KAAK+K,MAAQ,GACb/K,KAAKqH,OAAS,EACdrH,KAAKuuB,aAAe,GACpBvuB,KAAKwuB,aAAe,MACpBxuB,KAAKyuB,YAAc,EACnBzuB,KAAKuoB,YAAc,MACnBvoB,KAAK0Z,kBAAoB,MAEzB1Z,KAAKyR,UAAY,KAEjBzR,KAAK0uB,QAAU,MAEf1uB,KAAK2e,QAAQra,EACd,EAEAqZ,EAAItgB,UAAUsxB,OAAS,WACtB,IAAK3uB,KAAK0uB,QAAS,CAClB1uB,KAAK0uB,QAAU,KACf1uB,KAAK4uB,iBACP,CACA,EAEAjR,EAAItgB,UAAU4F,cAAgB,WAC7B,IAAIF,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,iBACjBJ,EAAGqP,aAAa,OAAQ,OAExBpS,KAAKsC,QAAUS,CAChB,EAEA4a,EAAItgB,UAAUoG,WAAa,WAC1BzD,KAAK2uB,SACL,OAAO3uB,KAAKsC,OACb,EAEAqb,EAAItgB,UAAUwxB,cAAgB,WAC7B,GAAI7uB,KAAKsC,SAAWtC,KAAKsC,QAAQqE,WAAY,CAC5C3G,KAAKsC,QAAQqE,WAAWrB,YAAYtF,KAAKsC,QAC3C,CACA,EAEAqb,EAAItgB,UAAUuxB,gBAAkB,WAC/B,IAAIvpB,EAAOrF,KACPsU,EACAC,EACAC,EAEJxU,KAAKiD,gBAGL,GAAIoC,EAAKnD,MAAMkB,QAAQuhB,aAAe,OAAStf,EAAKnD,MAAMgC,UAAU,aAAc,CACjFmB,EAAKnD,MAAMiC,QAAQob,UAAUiN,cAAcxsB,KAC7C,CAGC,GAAIqF,EAAKnD,MAAMkB,QAAQ2O,cAAgB,OAAS1M,EAAKnD,MAAMgC,UAAU,WAAY,CAChFmB,EAAKnD,MAAMiC,QAAQ6N,QAAQwa,cAAcxsB,KAC3C,CAGC,GAAIqF,EAAKnD,MAAMkB,QAAQwH,WAAa,OAASvF,EAAKnD,MAAMgC,UAAU,YAAa,CAC9EmB,EAAKnD,MAAMiC,QAAQyG,SAAS4hB,cAAcxsB,KAC5C,CAGC,GAAIqF,EAAKnD,MAAMkB,QAAQuC,mBAAqB,YAAcN,EAAKnD,MAAMgC,UAAU,oBAAqB,CACnGmB,EAAKnD,MAAMiC,QAAQwB,iBAAiB6mB,cAAcxsB,KACpD,CAGC,IAAKqF,EAAKnD,MAAMkB,QAAQ0rB,gBAAkBzpB,EAAKnD,MAAMkB,QAAQ2rB,eAAiB/uB,KAAKkC,MAAMgC,UAAU,QAAS,CAC3GmB,EAAKnD,MAAMiC,QAAQuR,KAAK8W,cAAcxsB,KACxC,CAGC,GAAIqF,EAAKnD,MAAMkB,QAAQ4rB,SAAU,CAChC3pB,EAAK/C,QAAQ8R,iBAAiB,SAAS,SAAUC,GAChDhP,EAAKnD,MAAMkB,QAAQ4rB,SAAS3a,EAAGhP,EAAKiE,eACvC,GACA,CAEC,GAAIjE,EAAKnD,MAAMkB,QAAQ6rB,YAAa,CACnC5pB,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GACnDhP,EAAKnD,MAAMkB,QAAQ6rB,YAAY5a,EAAGhP,EAAKiE,eAC1C,GACA,CAEC,GAAIjE,EAAKnD,MAAMkB,QAAQ8rB,WAAY,CAClC7pB,EAAK/C,QAAQ8R,iBAAiB,eAAe,SAAUC,GACtDhP,EAAKnD,MAAMkB,QAAQ8rB,WAAW7a,EAAGhP,EAAKiE,eACzC,GACA,CAGC,GAAIjE,EAAKnD,MAAMkB,QAAQ+rB,cAAe,CACrC9pB,EAAK/C,QAAQ8R,iBAAiB,cAAc,SAAUC,GACrDhP,EAAKnD,MAAMkB,QAAQ+rB,cAAc9a,EAAGhP,EAAKiE,eAC5C,GACA,CAEC,GAAIjE,EAAKnD,MAAMkB,QAAQgsB,cAAe,CACrC/pB,EAAK/C,QAAQ8R,iBAAiB,cAAc,SAAUC,GACrDhP,EAAKnD,MAAMkB,QAAQgsB,cAAc/a,EAAGhP,EAAKiE,eAC5C,GACA,CAEC,GAAIjE,EAAKnD,MAAMkB,QAAQisB,aAAc,CACpChqB,EAAK/C,QAAQ8R,iBAAiB,aAAa,SAAUC,GACpDhP,EAAKnD,MAAMkB,QAAQisB,aAAahb,EAAGhP,EAAKiE,eAC3C,GACA,CAEC,GAAIjE,EAAKnD,MAAMkB,QAAQksB,YAAa,CACnCjqB,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GACnDhP,EAAKnD,MAAMkB,QAAQksB,YAAYjb,EAAGhP,EAAKiE,eAC1C,GACA,CAEC,GAAIjE,EAAKnD,MAAMkB,QAAQmsB,aAAc,CACpClqB,EAAK/C,QAAQ8R,iBAAiB,aAAa,SAAUC,GACpDhP,EAAKnD,MAAMkB,QAAQmsB,aAAalb,EAAGhP,EAAKiE,eAC3C,GACA,CAEC,GAAIjE,EAAKnD,MAAMkB,QAAQosB,OAAQ,CAE9Bhb,EAAM,MAENnP,EAAK/C,QAAQ8R,iBAAiB,cAAc,SAAUC,GACrDG,EAAM,IACT,GAAK,CAAEK,QAAS,OAEdxP,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GACnD,GAAIG,EAAK,CACRnP,EAAKnD,MAAMkB,QAAQosB,OAAOnb,EAAGhP,EAAKiE,eACtC,CAEGkL,EAAM,KACT,GACA,CAEC,GAAInP,EAAKnD,MAAMkB,QAAQqsB,UAAW,CAEjCnb,EAAS,KAETjP,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GAEnD,GAAIC,EAAQ,CACXS,aAAaT,GACbA,EAAS,KAETjP,EAAKnD,MAAMkB,QAAQqsB,UAAUpb,EAAGhP,EAAKiE,eACzC,KAAU,CAENgL,EAASU,YAAW,WACnBD,aAAaT,GACbA,EAAS,IACd,GAAO,IACP,CACA,GACA,CAEC,GAAIjP,EAAKnD,MAAMkB,QAAQssB,WAAY,CAElCnb,EAAU,KAEVlP,EAAK/C,QAAQ8R,iBAAiB,cAAc,SAAUC,GACrDU,aAAaR,GAEbA,EAAUS,YAAW,WACpBD,aAAaR,GACbA,EAAU,KACVC,EAAM,MACNnP,EAAKnD,MAAMkB,QAAQssB,WAAWrb,EAAGhP,EAAKiE,eAC1C,GAAM,IACN,GAAK,CAAEuL,QAAS,OAEdxP,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GACnDU,aAAaR,GACbA,EAAU,IACb,GACA,CACA,EAEAoJ,EAAItgB,UAAU4O,cAAgB,WAC7BjM,KAAK+K,MAAQ/K,KAAKkC,MAAMkI,cAAc6B,cAAcjM,KACrD,EAGA2d,EAAItgB,UAAUiG,WAAa,SAAU6J,GACpC,IAAIwiB,EAAU3vB,KAEdA,KAAK2uB,SAEL,IAAK3uB,KAAKuoB,aAAepb,EAAO,CAE/BnN,KAAK4vB,cAEL,MAAO5vB,KAAKsC,QAAQQ,WAAY,CAC/B9C,KAAKsC,QAAQgD,YAAYtF,KAAKsC,QAAQQ,WACzC,CACE,GAAI9C,KAAKkC,MAAMgC,UAAU,iBAAkB,CAC1ClE,KAAKkC,MAAMiC,QAAQC,cAAcyrB,UAAU7vB,KAC9C,CAEEA,KAAKiM,gBAEL,GAAIjM,KAAKkC,MAAMkB,QAAQwC,eAAiB5F,KAAKkC,MAAM2D,QAAQ0iB,YAAa,CACvEvoB,KAAKkC,MAAM2D,QAAQ2mB,cAAcxsB,KACpC,KAAS,CACNA,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5B2kB,EAAQrtB,QAAQwE,YAAYkE,EAAKvH,cACjCuH,EAAKshB,cACT,GACA,CAEE,GAAInf,EAAO,CACVnN,KAAK4nB,iBACR,CAGE,GAAI5nB,KAAKkC,MAAMkB,QAAQwH,UAAY5K,KAAKkC,MAAMgC,UAAU,YAAa,CACpElE,KAAKkC,MAAMiC,QAAQyG,SAASilB,UAAU7vB,KACzC,CAGE,GAAIA,KAAKkC,MAAMkB,QAAQuC,mBAAqB,YAAc3F,KAAKkC,MAAMgC,UAAU,oBAAqB,CACnGlE,KAAKkC,MAAMiC,QAAQwB,iBAAiBkqB,UAAU7vB,KACjD,CAEE,GAAIA,KAAKkC,MAAMkB,QAAQ0sB,aAAc,CACpC9vB,KAAKkC,MAAMkB,QAAQ0sB,aAAa9vB,KAAKsJ,eACxC,CAGE,GAAItJ,KAAKkC,MAAMkB,QAAQ2sB,eAAiB/vB,KAAKkC,MAAMgC,UAAU,cAAe,CAC3ElE,KAAKkC,MAAMiC,QAAQ6rB,WAAWxD,cAAcxsB,KAC/C,CAEEA,KAAKuoB,YAAc,IACrB,KAAQ,CACN,GAAIvoB,KAAKkC,MAAMkB,QAAQwC,cAAe,CACrC5F,KAAKkC,MAAM2D,QAAQgmB,gBAAgB7rB,KACtC,CACA,CACA,EAEA2d,EAAItgB,UAAU4yB,mBAAqB,WAClCjwB,KAAK0Z,kBAAoB,MAEzB,GAAI1Z,KAAKsC,SAAWtC,KAAKsC,QAAQqX,eAAiB,KAAM,CACvD3Z,KAAK4nB,gBAAgB,KACvB,CACA,EAEAjK,EAAItgB,UAAUyI,aAAe,SAAUoqB,GACtClwB,KAAKuoB,YAAc,MACnBvoB,KAAK0Z,kBAAoB,MAEzB,IAAK1Z,KAAKwuB,aAAc,CACvBxuB,KAAKqH,OAAS,EACdrH,KAAKuuB,aAAe,EACtB,CAEC,GAAIvuB,KAAKsC,SAAWtC,KAAKsC,QAAQqX,eAAiB,KAAM,CACvD3Z,KAAKsD,WAAW,KAClB,CAEC,GAAItD,KAAKkC,MAAMkB,QAAQwH,UAAY5K,KAAKkC,MAAMgC,UAAU,WAAY,MAAO,CAC1ElE,KAAKkC,MAAMiC,QAAQyG,SAASE,gBAAgB9K,KAAM,MAAO,MAAMkF,SAAQ,SAAUoU,GAChFA,EAAMxT,aAAa,KACtB,GACA,CACA,EAGA6X,EAAItgB,UAAUwc,WAAa,SAAU1M,GAEpC,IAAI2b,EAAY,EACZ1hB,EAAYpH,KAAKkC,MAAMkB,QAAQ2sB,cAAgB/vB,KAAKsC,QAAQiK,aAAe,EAE/EvM,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5B,IAAI3D,EAAS2D,EAAKzD,YAClB,GAAIF,EAASyhB,EAAW,CACvBA,EAAYzhB,CACf,CACA,IAEC,GAAI8F,EAAO,CACVnN,KAAKqH,OAASnG,KAAKC,IAAI2nB,EAAW1hB,EACpC,KAAQ,CACNpH,KAAKqH,OAASrH,KAAKwuB,aAAexuB,KAAKqH,OAASnG,KAAKC,IAAI2nB,EAAW1hB,EACtE,CAECpH,KAAKuuB,aAAevuB,KAAKqH,OAASrH,KAAKqH,OAAS,KAAO,GACvDrH,KAAKyuB,YAAczuB,KAAKsC,QAAQkW,YACjC,EAGAmF,EAAItgB,UAAUyc,cAAgB,WAC7B9Z,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKmlB,WACP,IAECnwB,KAAK0Z,kBAAoB,IAC1B,EAEAiE,EAAItgB,UAAUuc,gBAAkB,WAC/B5Z,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKolB,aACP,GACA,EAGAzS,EAAItgB,UAAUuqB,gBAAkB,SAAUza,GAEzC,GAAIA,EAAO,CACVnN,KAAK4Z,iBACP,CAEC5Z,KAAK6Z,WAAW1M,GAEhBnN,KAAK8Z,eACN,EASA6D,EAAItgB,UAAU8yB,UAAY,SAAU9oB,EAAQ8F,GAC3C,GAAInN,KAAKqH,QAAUA,GAAU8F,EAAO,CAEnCnN,KAAKwuB,aAAe,KAEpBxuB,KAAKqH,OAASA,EACdrH,KAAKuuB,aAAelnB,EAASA,EAAS,KAAO,GAE7CrH,KAAK8Z,gBAGL9Z,KAAKyuB,YAAczuB,KAAKsC,QAAQkW,YAClC,CACA,EAGAmF,EAAItgB,UAAUkK,UAAY,WACzB,OAAOvH,KAAKyuB,WACb,EAGA9Q,EAAItgB,UAAUkM,SAAW,WACxB,OAAOvJ,KAAKsC,QAAQuJ,WACrB,EAIA8R,EAAItgB,UAAU2d,WAAa,SAAUhQ,GACpC,IAAI7M,EAAQ6B,KAAK+K,MAAMjK,QAAQkK,GAE/B,GAAI7M,GAAS,EAAG,CACf6B,KAAK+K,MAAMrE,OAAOvI,EAAO,EAC3B,CACA,EAIAwf,EAAItgB,UAAUshB,QAAU,SAAUra,GACjC,GAAItE,KAAKkC,MAAMgC,UAAU,WAAY,CACpCI,EAAOtE,KAAKkC,MAAMiC,QAAQ6R,QAAQqa,aAAa/rB,EAAM,OACvD,CAECtE,KAAKsE,KAAOA,EAEZ,GAAItE,KAAKkC,MAAMkB,QAAQqc,cAAgBzf,KAAKkC,MAAMgC,UAAU,eAAgB,MAAO,CAClFlE,KAAKkC,MAAMiC,QAAQsb,aAAa6Q,SAAStwB,KAC3C,CACA,EAGA2d,EAAItgB,UAAU2vB,WAAa,SAAUuD,GACpC,IAAIC,EAAUxwB,KAEd,IAAI0I,EAAU1I,KAAKsC,SAAW8K,EAAU/P,UAAUgQ,QAAQC,UAAUtN,KAAKsC,SACrEmuB,EAAW,GACXC,EAEJ,OAAO,IAAInlB,SAAQ,SAAUC,EAASC,GAErC,UAAW8kB,IAAgB,SAAU,CACpCA,EAAcI,KAAKC,MAAML,EAC5B,CAEE,GAAIC,EAAQtuB,MAAMkB,QAAQqc,cAAgB+Q,EAAQtuB,MAAMgC,UAAU,eAAgB,MAAO,CACxFssB,EAAQtuB,MAAMiC,QAAQsb,aAAaoR,OACtC,CAGE,GAAIL,EAAQtuB,MAAMgC,UAAU,WAAY,CAEvCusB,EAAWrzB,OAAOqE,OAAOgvB,EAAUD,EAAQlsB,MAC3CmsB,EAAWrzB,OAAOqE,OAAOgvB,EAAUF,GAEnCG,EAAaF,EAAQtuB,MAAMiC,QAAQ6R,QAAQqa,aAAaI,EAAU,OAAQF,EAC7E,KAAS,CACNG,EAAaH,CAChB,CAGE,IAAK,IAAIO,KAAYJ,EAAY,CAChCF,EAAQlsB,KAAKwsB,GAAYJ,EAAWI,EACvC,CAEE,GAAIN,EAAQtuB,MAAMkB,QAAQqc,cAAgB+Q,EAAQtuB,MAAMgC,UAAU,eAAgB,MAAO,CACxFssB,EAAQtuB,MAAMiC,QAAQsb,aAAasR,SACtC,CAGE,IAAK,IAAID,KAAYP,EAAa,CAEjC,IAAI9tB,EAAU+tB,EAAQtuB,MAAMkI,cAAcnC,sBAAsB6oB,GAEhEruB,EAAQyC,SAAQ,SAAUiB,GACzB,IAAI6E,EAAOwlB,EAAQ7K,QAAQxf,EAAO+G,YAElC,GAAIlC,EAAM,CACT,IAAIjN,EAAQoI,EAAO+J,cAAcwgB,GACjC,GAAI1lB,EAAK4M,YAAc7Z,EAAO,CAC7BiN,EAAKgmB,oBAAoBjzB,GAEzB,GAAI2K,EAAS,CACZsC,EAAKshB,cACZ,CACA,CACA,CACA,GACA,CAEE,GAAIkE,EAAQtuB,MAAMkB,QAAQ6tB,uBAAyBT,EAAQtuB,MAAMkB,QAAQ6Z,SAAWuT,EAAQtuB,MAAMgC,UAAU,aAAc,CACzHssB,EAAQtuB,MAAMiC,QAAQ+Y,UAAUgU,mBAAmBV,EAAQ9rB,IAC9D,CAGE,GAAIgE,EAAS,CACZ8nB,EAAQ5I,gBAAgB,MAExB,GAAI4I,EAAQtuB,MAAMkB,QAAQ0sB,aAAc,CACvCU,EAAQtuB,MAAMkB,QAAQ0sB,aAAaU,EAAQlnB,eAC/C,CACA,KAAS,CACNknB,EAAQjI,YAAc,MACtBiI,EAAQnpB,OAAS,EACjBmpB,EAAQjC,aAAe,EAC1B,CAEE,GAAIiC,EAAQtuB,MAAMkB,QAAQwH,WAAa,OAAS4lB,EAAQtuB,MAAMgC,UAAU,aAAessB,EAAQtuB,MAAMiC,QAAQyG,SAASumB,aAAaZ,GAAc,CAChJC,EAAQtuB,MAAMiC,QAAQyG,SAAS4hB,cAAcgE,GAE7C,GAAI9nB,EAAS,CACZ8nB,EAAQtuB,MAAMiC,QAAQyG,SAASilB,UAAUW,GACzCA,EAAQtuB,MAAMM,WAAWmd,kBAAkB,OAAQ,MAAO,KAC9D,CACA,CAIE6Q,EAAQtuB,MAAMkB,QAAQguB,WAAW1zB,KAAK8yB,EAAQtuB,MAAOsuB,EAAQlnB,gBAE7D,GAAIknB,EAAQtuB,MAAMkB,QAAQod,YAAa,CACtCgQ,EAAQtuB,MAAMkB,QAAQod,YAAY9iB,KAAK8yB,EAAQtuB,MAAOsuB,EAAQtuB,MAAMM,WAAWie,UAClF,CAEEjV,GACF,GACA,EAEAmS,EAAItgB,UAAUojB,QAAU,SAAU2C,GACjC,GAAIA,EAAW,CACd,GAAIpjB,KAAKkC,MAAMgC,UAAU,YAAa,CACrC,OAAOlE,KAAKkC,MAAMiC,QAAQ8R,SAASoa,aAAarwB,KAAMojB,EACzD,CACA,CAEC,OAAOpjB,KAAKsE,IACb,EAEAqZ,EAAItgB,UAAUsoB,QAAU,SAAUxf,GACjC,IAAInB,EAAQ,MAEZmB,EAASnG,KAAKkC,MAAMkI,cAAczC,WAAWxB,GAE7CnB,EAAQhF,KAAK+K,MAAMvK,MAAK,SAAUwK,GACjC,OAAOA,EAAK7E,SAAWA,CACzB,IAEC,OAAOnB,CACR,EAEA2Y,EAAItgB,UAAUg0B,aAAe,SAAUC,GACtC,OAAOtxB,KAAK+K,MAAMjL,WAAU,SAAUkL,GACrC,OAAOA,IAASsmB,CAClB,GACA,EAEA3T,EAAItgB,UAAUk0B,qBAAuB,SAAUpzB,GAC9C,IAAIqzB,EAAW,MAEf,GAAIrzB,EAAQ6B,KAAK+K,MAAM3M,OAAS,EAAG,CAClC,IAAK,IAAIoH,EAAIrH,EAAQ,EAAGqH,EAAIxF,KAAK+K,MAAM3M,OAAQoH,IAAK,CACnD,IAAIwF,EAAOhL,KAAK+K,MAAMvF,GAEtB,GAAIwF,EAAK7E,OAAOhC,QAAQ2R,MAAQ1I,EAAU/P,UAAUgQ,QAAQC,UAAUtC,EAAKvH,cAAe,CACzF,IAAIguB,EAAY,KAEhB,UAAWzmB,EAAK7E,OAAOhC,QAAQ2R,KAAK4b,OAAS,WAAY,CACxDD,EAAYzmB,EAAK7E,OAAOhC,QAAQ2R,KAAK4b,MAAM1mB,EAAK1B,eACrD,CAEI,GAAImoB,EAAW,CACdD,EAAWxmB,EACX,KACL,CACA,CACA,CACA,CAEC,OAAOwmB,CACR,EAEA7T,EAAItgB,UAAUs0B,qBAAuB,SAAUxzB,GAC9C,IAAIyzB,EAAW,MAEf,GAAIzzB,EAAQ,EAAG,CACd,IAAK,IAAIqH,EAAIrH,EAAQ,EAAGqH,GAAK,EAAGA,IAAK,CACpC,IAAIwF,EAAOhL,KAAK+K,MAAMvF,GAClBisB,EAAY,KAEhB,GAAIzmB,EAAK7E,OAAOhC,QAAQ2R,MAAQ1I,EAAU/P,UAAUgQ,QAAQC,UAAUtC,EAAKvH,cAAe,CACzF,UAAWuH,EAAK7E,OAAOhC,QAAQ2R,KAAK4b,OAAS,WAAY,CACxDD,EAAYzmB,EAAK7E,OAAOhC,QAAQ2R,KAAK4b,MAAM1mB,EAAK1B,eACrD,CAEI,GAAImoB,EAAW,CACdG,EAAW5mB,EACX,KACL,CACA,CACA,CACA,CAEC,OAAO4mB,CACR,EAEAjU,EAAItgB,UAAUuQ,SAAW,WACxB,OAAO5N,KAAK+K,KACb,EAEA4S,EAAItgB,UAAU4lB,QAAU,WACvB,IAAIve,EAAM1E,KAAKkC,MAAMM,WAAWugB,eAAe/iB,KAAM,MACrD,OAAO0E,GAAO,KACf,EAEAiZ,EAAItgB,UAAU6lB,QAAU,WACvB,IAAIxe,EAAM1E,KAAKkC,MAAMM,WAAW2f,eAAeniB,KAAM,MACrD,OAAO0E,GAAO,KACf,EAEAiZ,EAAItgB,UAAU0vB,UAAY,SAAUnrB,EAAIqE,GACvC,IAAI4rB,EAAQ7xB,KAAKkC,MAAMM,WAAWkb,QAAQ9b,GAE1C,GAAIiwB,EAAO,CACV7xB,KAAKkC,MAAMM,WAAWuf,cAAc/hB,KAAM6xB,GAAQ5rB,GAClDjG,KAAKkC,MAAMM,WAAWmd,kBAAkB,UAAW,MAAO,KAC5D,KAAQ,CACN5T,QAAQC,KAAK,sCAAuCpK,EACtD,CACA,EAEA+b,EAAItgB,UAAUmS,SAAW,WACxB,IAAI4K,EAAU,GAEdpa,KAAK+K,MAAM7F,SAAQ,SAAU8F,GAC5B,IAAKA,EAAKwE,WAAY,CACrB4K,EAAQnV,KAAK+F,EAAK1B,eACrB,CACA,IAEC,OAAO8Q,EAAQhc,OAASgc,EAAU,IACnC,EAIAuD,EAAItgB,UAAU6Q,OAAS,WACtB,IAAI4jB,EAAU9xB,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAItN,EAAOwM,EAEX,GAAImnB,EAAQ5vB,MAAMkB,QAAQic,SAAWyS,EAAQ5vB,MAAMgC,UAAU,WAAY,CAExE,GAAI4tB,EAAQ5vB,MAAMkB,QAAQ6Z,SAAW6U,EAAQ5vB,MAAMgC,UAAU,aAAc,CAC1EyG,EAAOmnB,EAAQpQ,WAAW/W,KAC1BxM,EAAQwM,EAAK7J,QAAQgxB,GAErB,GAAI3zB,EAAO,CACVA,EAAQwM,EAAKxM,EAAQ,EAC1B,CACA,KAAU,CACNA,EAAQ2zB,EAAQ5vB,MAAMM,WAAWogB,YAAYkP,GAE7C,GAAI3zB,EAAO,CACVA,EAAQ2zB,EAAQ5vB,MAAMM,WAAWmI,KAAKxM,EAAQ,EACnD,CACA,CAEG2zB,EAAQ5vB,MAAMiC,QAAQkb,QAAQyB,OAAO,YAAagR,EAAS,CAAExtB,KAAMwtB,EAAQrR,UAAWG,KAAMziB,EAAOA,MAAOA,GAC7G,CAEE2zB,EAAQC,eAERvmB,GACF,GACA,EAEAmS,EAAItgB,UAAU00B,aAAe,SAAU/R,GAC1BhgB,KAAKkC,MAAMM,WAAWogB,YAAY5iB,MAE9CA,KAAKgyB,iBAOL,GAAIhyB,KAAKkC,MAAMkB,QAAQqc,cAAgBzf,KAAKkC,MAAMgC,UAAU,eAAgB,OAK5E,GAAIlE,KAAKmE,QAAQ2mB,MAAO,CACvB9qB,KAAKmE,QAAQ2mB,MAAMxI,UAAUtiB,KAC/B,CAECA,KAAKkC,MAAMM,WAAWud,UAAU/f,KAAMggB,GAEtChgB,KAAK4vB,cAEL5vB,KAAKuoB,YAAc,MACnBvoB,KAAK0Z,kBAAoB,MACzB1Z,KAAKsC,QAAU,MAEf,GAAItC,KAAKkC,MAAMkB,QAAQwH,UAAY5K,KAAKkC,MAAMgC,UAAU,WAAY,MAAO,CAC1ElE,KAAKkC,MAAMiC,QAAQyG,SAASqnB,UAAUjyB,KACxC,CAGC,GAAIA,KAAKkC,MAAMgC,UAAU,eAAgB,CACxC,GAAIlE,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CACpElE,KAAKkC,MAAMiC,QAAQ0F,YAAYqoB,eAAelyB,KACjD,KAAS,CACNA,KAAKkC,MAAMiC,QAAQ0F,YAAYC,OAAO9J,KAAKkC,MAAMM,WAAWuH,WAC/D,CACA,CACA,EAEA4T,EAAItgB,UAAU20B,eAAiB,WAE9B,GAAIhyB,KAAKkC,MAAMgC,UAAU,aAAc,CACtClE,KAAKkC,MAAMiC,QAAQob,UAAU4S,aAAanyB,KAAM,KAClD,CAGC,GAAIA,KAAKkC,MAAMgC,UAAU,QAAS,CACjC,GAAIlE,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAAYtV,MAAQ1E,KAAM,CACrDA,KAAKkC,MAAMiC,QAAQ2R,KAAKmE,YAC3B,CACA,CAEC,GAAIja,KAAKkC,MAAMgC,UAAU,cAAe,CACvClE,KAAKkC,MAAMiC,QAAQ6gB,WAAWoN,UAAUpyB,KAC1C,CACA,EAEA2d,EAAItgB,UAAUuyB,YAAc,WAC3B,IAAI1V,EAAYla,KAAK+K,MAAM3M,OAE3B,IAAK,IAAIi0B,EAAM,EAAGA,EAAMnY,EAAWmY,IAAO,CACzCryB,KAAK+K,MAAM,GAAGmD,QAChB,CACA,EAEAyP,EAAItgB,UAAUyiB,KAAO,WACpB9f,KAAKgyB,iBACLhyB,KAAK4vB,cAEL,GAAI5vB,KAAKsC,QAAS,CACjB,MAAOtC,KAAKsC,QAAQQ,WAAY,CAC/B9C,KAAKsC,QAAQgD,YAAYtF,KAAKsC,QAAQQ,WACzC,CAAG,GAAI9C,KAAKsC,QAAQqE,WAAY,CAC7B3G,KAAKsC,QAAQqE,WAAWrB,YAAYtF,KAAKsC,QAC5C,CACA,CAECtC,KAAKsC,QAAU,MACftC,KAAKmE,QAAU,EAChB,EAEAwZ,EAAItgB,UAAUqkB,SAAW,WACxB,OAAO1hB,KAAKmE,QAAQ2mB,OAAS,KAC9B,EAGAnN,EAAItgB,UAAUiM,aAAe,WAC5B,IAAKtJ,KAAKyR,UAAW,CACpBzR,KAAKyR,UAAY,IAAImM,EAAa5d,KACpC,CAEC,OAAOA,KAAKyR,SACb,EAGA,IAAI6gB,EAAgB,SAASA,EAActnB,GAC1ChL,KAAKuyB,MAAQvnB,CACd,EAEAsnB,EAAcj1B,UAAUua,SAAW,WAClC,OAAO5X,KAAKuyB,MAAM3a,UACnB,EAEA0a,EAAcj1B,UAAUm1B,YAAc,WACrC,OAAOxyB,KAAKuyB,MAAMC,aACnB,EAEAF,EAAcj1B,UAAUo1B,gBAAkB,WACzC,OAAOzyB,KAAKuyB,MAAMG,YACnB,EAEAJ,EAAcj1B,UAAUoG,WAAa,WACpC,OAAOzD,KAAKuyB,MAAM9uB,YACnB,EAEA6uB,EAAcj1B,UAAUs1B,OAAS,WAChC,OAAO3yB,KAAKuyB,MAAM7tB,IAAI4E,cACvB,EAEAgpB,EAAcj1B,UAAUojB,QAAU,WACjC,OAAOzgB,KAAKuyB,MAAM7tB,IAAI+b,SACvB,EAEA6R,EAAcj1B,UAAU6P,SAAW,WAClC,OAAOlN,KAAKuyB,MAAMpsB,OAAO+G,UAC1B,EAEAolB,EAAcj1B,UAAUu1B,UAAY,WACnC,OAAO5yB,KAAKuyB,MAAMpsB,OAAOmD,cAC1B,EAEAgpB,EAAcj1B,UAAUw1B,SAAW,SAAU90B,EAAO+0B,GACnD,UAAWA,GAAU,YAAa,CACjCA,EAAS,IACX,CAEC9yB,KAAKuyB,MAAMM,SAAS90B,EAAO+0B,EAC5B,EAEAR,EAAcj1B,UAAU01B,gBAAkB,WACzC/yB,KAAKuyB,MAAMS,eAAehzB,KAAKuyB,MAAMC,cACtC,EAEAF,EAAcj1B,UAAU41B,oBAAsB,WAC7CjzB,KAAKuyB,MAAMS,eAAehzB,KAAKuyB,MAAMG,aACtC,EAEAJ,EAAcj1B,UAAUyY,KAAO,SAAU3I,GACxC,OAAOnN,KAAKuyB,MAAMzc,KAAK3I,EACxB,EAEAmlB,EAAcj1B,UAAU4c,WAAa,WACpCja,KAAKuyB,MAAMtY,YACZ,EAEAqY,EAAcj1B,UAAU61B,SAAW,WAClC,QAASlzB,KAAKuyB,MAAMpuB,QAAQ2R,MAAQ9V,KAAKuyB,MAAMpuB,QAAQ2R,KAAKqd,MAC7D,EAEAb,EAAcj1B,UAAU+1B,YAAc,WACrC,GAAI/tB,KAAKnD,MAAMgC,UAAU,OAAQ,MAAO,CACvClE,KAAKuyB,MAAMrwB,MAAMiC,QAAQ2R,KAAKsd,YAAYpzB,KAAKuyB,MACjD,CACA,EAEAD,EAAcj1B,UAAUg2B,QAAU,WACjC,OAAOrzB,KAAKuyB,MAAMpuB,QAAQqL,UAAYxP,KAAKuyB,MAAMpuB,QAAQqL,SAAS4K,QAAU,IAC7E,EAEAkY,EAAcj1B,UAAUmS,SAAW,WAClC,OAAOxP,KAAKuyB,MAAM/iB,UACnB,EAEA8iB,EAAcj1B,UAAUi2B,gBAAkB,WACzC,GAAItzB,KAAKuyB,MAAMrwB,MAAMgC,UAAU,WAAY,MAAO,CACjDlE,KAAKuyB,MAAMrwB,MAAMiC,QAAQqL,SAAS8jB,gBAAgBtzB,KAAKuyB,MACzD,CACA,EAEAD,EAAcj1B,UAAUk2B,IAAM,WAC7B,OAAOvzB,KAAKuyB,MAAMgB,KACnB,EAEAjB,EAAcj1B,UAAUm2B,YAAc,WACrCxzB,KAAKuyB,MAAMiB,aACZ,EAEAlB,EAAcj1B,UAAUiR,SAAW,WAClC,OAAOtO,KAAKuyB,MAAMrwB,KACnB,EAEAowB,EAAcj1B,UAAUyK,SAAW,WAClC,OAAO9H,KAAKuyB,KACb,EAEA,IAAIlY,EAAO,SAASA,EAAKlU,EAAQzB,GAEhC1E,KAAKkC,MAAQiE,EAAOjE,MACpBlC,KAAKmG,OAASA,EACdnG,KAAK0E,IAAMA,EACX1E,KAAKsC,QAAU,KACftC,KAAKjC,MAAQ,KAEbiC,KAAKyzB,SAAW,KAChBzzB,KAAKmE,QAAU,GAEfnE,KAAKqH,OAAS,KACdrH,KAAKwJ,MAAQ,KACbxJ,KAAKwM,SAAW,KAEhBxM,KAAKyR,UAAY,KAEjBzR,KAAK0zB,OAAS,MAEd1zB,KAAK2zB,OACN,EAKAtZ,EAAKhd,UAAUs2B,MAAQ,WACtB3zB,KAAK4uB,kBAEL5uB,KAAKuP,WAELvP,KAAK4zB,iBAEL5zB,KAAKgzB,eAAehzB,KAAKmG,OAAO+J,cAAclQ,KAAK0E,IAAIJ,OAEvDtE,KAAK0yB,aAAe1yB,KAAKjC,KAC1B,EAEAsc,EAAKhd,UAAUuxB,gBAAkB,WAChC5uB,KAAKsC,QAAUU,SAASC,cAAc,OACtCjD,KAAKsC,QAAQ8T,UAAY,iBACzBpW,KAAKsC,QAAQ8P,aAAa,OAAQ,YAClCpS,KAAKsC,QAAUtC,KAAKsC,OACrB,EAEA+X,EAAKhd,UAAUu2B,eAAiB,WAC/B,IAAIvuB,EAAOrF,KACPwQ,EAAanL,EAAKc,OAAOqK,WACzBlO,EAAU+C,EAAK/C,QACfuC,EAAQ7E,KAAKmG,OAAO+G,WACpB2mB,EAAa,CAChBzW,IAAK,aACL0W,OAAQ,WACRC,OAAQ,UAELC,EAAY,CACfpwB,KAAM,aACNqwB,MAAO,WACPC,OAAQ,UAIT5xB,EAAQ0B,MAAM2S,UAAYtR,EAAKc,OAAO4J,SAEtC,GAAI1K,EAAKc,OAAO6J,UAAW,CAC1B1N,EAAQ0B,MAAMkV,QAAU,cAExB5W,EAAQ0B,MAAMmwB,WAAaN,EAAWxuB,EAAKc,OAAO6J,YAAc,GAEhE,GAAI3K,EAAKc,OAAO4J,SAAU,CACzBzN,EAAQ0B,MAAMowB,eAAiBJ,EAAU3uB,EAAKc,OAAO4J,WAAa,EACrE,CACA,CAEC,GAAIlL,EAAO,CACVvC,EAAQ8P,aAAa,kBAAmBvN,EAC1C,CAGC,GAAIQ,EAAKc,OAAOH,WAAWkQ,SAAU,CACpC,IAAIme,EAAahvB,EAAKc,OAAOH,WAAWkQ,SAAS3N,MAAM,KACvD8rB,EAAWnvB,SAAQ,SAAUkR,GAC5B9T,EAAQY,UAAUC,IAAIiT,EACzB,GACA,CAGC,GAAIpW,KAAKkC,MAAMkB,QAAQkxB,wBAA0B,QAAS,CACzDhyB,EAAQ8R,iBAAiB,cAAc,SAAUC,GAChDhP,EAAKkvB,kBACR,GACA,CAEClvB,EAAKmvB,iBAAiBhkB,GAEtBnL,EAAKovB,iBAAiBjkB,GAEtBnL,EAAKqvB,iBAAiBlkB,GAEtB,GAAInL,EAAKc,OAAOhC,QAAQ2R,KAAM,CAC7BzQ,EAAKnD,MAAMiC,QAAQ2R,KAAK6e,WAAWtvB,EACrC,CAEC,GAAIA,EAAKc,OAAOH,WAAW8L,WAAazM,EAAKnD,MAAMkB,QAAQ2O,cAAgB,OAAS1M,EAAKnD,MAAMgC,UAAU,WAAY,CACpHmB,EAAKnD,MAAMiC,QAAQ6N,QAAQ4iB,eAAevvB,EAC5C,CAGC,IAAKA,EAAKc,OAAOuC,QAAS,CACzBrD,EAAK2I,MACP,CACA,EAEAqM,EAAKhd,UAAUm3B,iBAAmB,SAAUhkB,GAC3C,IAAInL,EAAOrF,KACPsC,EAAU+C,EAAK/C,QAGnB,GAAIkO,EAAWC,WAAapL,EAAKnD,MAAMkB,QAAQqN,UAAW,CACzDnO,EAAQ8R,iBAAiB,SAAS,SAAUC,GAC3C,IAAI5C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWC,UAAW,CACzBD,EAAWC,UAAU/S,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAC7C,CAEG,GAAIpM,EAAKnD,MAAMkB,QAAQqN,UAAW,CACjCpL,EAAKnD,MAAMkB,QAAQqN,UAAU/S,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACrD,CACA,GACA,CAEC,GAAIjB,EAAWE,cAAgB1Q,KAAKkC,MAAMkB,QAAQsN,aAAc,CAC/DpO,EAAQ8R,iBAAiB,YAAY,SAAUC,GAC9C,IAAI5C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWE,aAAc,CAC5BF,EAAWE,aAAahT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAChD,CAEG,GAAIpM,EAAKnD,MAAMkB,QAAQsN,aAAc,CACpCrL,EAAKnD,MAAMkB,QAAQsN,aAAahT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACxD,CACA,GACA,KAAQ,CACNnP,EAAQ8R,iBAAiB,YAAY,SAAUC,GAE9C,GAAIhP,EAAKnD,MAAMgC,UAAU,QAAS,CACjC,GAAImB,EAAKnD,MAAMiC,QAAQ2R,KAAKkE,cAAgB3U,EAAM,CACjD,MACL,CACA,CAEGgP,EAAEwgB,iBAEF,IACC,GAAI7xB,SAAS8xB,UAAW,CAEvB,IAAIC,EAAQ/xB,SAASgyB,KAAKC,kBAC1BF,EAAMG,kBAAkB7vB,EAAK/C,SAC7ByyB,EAAM9H,QACX,MAAW,GAAI9C,OAAOgL,aAAc,CAC/B,IAAIJ,EAAQ/xB,SAASoyB,cACrBL,EAAMM,WAAWhwB,EAAK/C,SACtB6nB,OAAOgL,eAAeG,kBACtBnL,OAAOgL,eAAeI,SAASR,EACpC,CACA,CAAK,MAAO1gB,GAAG,CACf,GACA,CAEC,GAAI7D,EAAWG,aAAe3Q,KAAKkC,MAAMkB,QAAQuN,YAAa,CAC7DrO,EAAQ8R,iBAAiB,eAAe,SAAUC,GACjD,IAAI5C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWG,YAAa,CAC3BH,EAAWG,YAAYjT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAC/C,CAEG,GAAIpM,EAAKnD,MAAMkB,QAAQuN,YAAa,CACnCtL,EAAKnD,MAAMkB,QAAQuN,YAAYjT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACvD,CACA,GACA,CACA,EAEA4I,EAAKhd,UAAUq3B,iBAAmB,SAAUlkB,GAC3C,IAAInL,EAAOrF,KACPsC,EAAU+C,EAAK/C,QAEnB,GAAIkO,EAAWO,gBAAkB1L,EAAKnD,MAAMkB,QAAQ2N,eAAgB,CACnEzO,EAAQ8R,iBAAiB,cAAc,SAAUC,GAChD,IAAI5C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWO,eAAgB,CAC9BP,EAAWO,eAAerT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAClD,CAEG,GAAIpM,EAAKnD,MAAMkB,QAAQ2N,eAAgB,CACtC1L,EAAKnD,MAAMkB,QAAQ2N,eAAerT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAC1D,CACA,GACA,CAEC,GAAIjB,EAAWQ,gBAAkB3L,EAAKnD,MAAMkB,QAAQ4N,eAAgB,CACnE1O,EAAQ8R,iBAAiB,cAAc,SAAUC,GAChD,IAAI5C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWQ,eAAgB,CAC9BR,EAAWQ,eAAetT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAClD,CAEG,GAAIpM,EAAKnD,MAAMkB,QAAQ4N,eAAgB,CACtC3L,EAAKnD,MAAMkB,QAAQ4N,eAAetT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAC1D,CACA,GACA,CAEC,GAAIjB,EAAWS,eAAiB5L,EAAKnD,MAAMkB,QAAQ6N,cAAe,CACjE3O,EAAQ8R,iBAAiB,aAAa,SAAUC,GAC/C,IAAI5C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWS,cAAe,CAC7BT,EAAWS,cAAcvT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACjD,CAEG,GAAIpM,EAAKnD,MAAMkB,QAAQ6N,cAAe,CACrC5L,EAAKnD,MAAMkB,QAAQ6N,cAAcvT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACzD,CACA,GACA,CAEC,GAAIjB,EAAWU,cAAgB7L,EAAKnD,MAAMkB,QAAQ8N,aAAc,CAC/D5O,EAAQ8R,iBAAiB,YAAY,SAAUC,GAC9C,IAAI5C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWU,aAAc,CAC5BV,EAAWU,aAAaxT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAChD,CAEG,GAAIpM,EAAKnD,MAAMkB,QAAQ8N,aAAc,CACpC7L,EAAKnD,MAAMkB,QAAQ8N,aAAaxT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACxD,CACA,GACA,CAEC,GAAIjB,EAAWW,eAAiB9L,EAAKnD,MAAMkB,QAAQ+N,cAAe,CACjE7O,EAAQ8R,iBAAiB,aAAa,SAAUC,GAC/C,IAAI5C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWW,cAAe,CAC7BX,EAAWW,cAAczT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACjD,CAEG,GAAIpM,EAAKnD,MAAMkB,QAAQ+N,cAAe,CACrC9L,EAAKnD,MAAMkB,QAAQ+N,cAAczT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACzD,CACA,GACA,CACA,EAEA4I,EAAKhd,UAAUo3B,iBAAmB,SAAUjkB,GAC3C,IAAInL,EAAOrF,KACPsC,EAAU+C,EAAK/C,QACfgS,EACAC,EACAC,EAEJ,GAAIhE,EAAWI,SAAW5Q,KAAKkC,MAAMkB,QAAQwN,QAAS,CACrD4D,EAAM,MAENlS,EAAQ8R,iBAAiB,cAAc,SAAUC,GAChDG,EAAM,IACT,GAAK,CAAEK,QAAS,OAEdvS,EAAQ8R,iBAAiB,YAAY,SAAUC,GAC9C,GAAIG,EAAK,CACR,IAAI/C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWI,QAAS,CACvBJ,EAAWI,QAAQlT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAC5C,CAEI,GAAIpM,EAAKnD,MAAMkB,QAAQwN,QAAS,CAC/BvL,EAAKnD,MAAMkB,QAAQwN,QAAQlT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACpD,CACA,CAEG+C,EAAM,KACT,GACA,CAEC,GAAIhE,EAAWK,YAAc7Q,KAAKkC,MAAMkB,QAAQyN,WAAY,CAC3DyD,EAAS,KAEThS,EAAQ8R,iBAAiB,YAAY,SAAUC,GAE9C,GAAIC,EAAQ,CACXS,aAAaT,GACbA,EAAS,KAET,IAAI7C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWK,WAAY,CAC1BL,EAAWK,WAAWnT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAC/C,CAEI,GAAIpM,EAAKnD,MAAMkB,QAAQyN,WAAY,CAClCxL,EAAKnD,MAAMkB,QAAQyN,WAAWnT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACvD,CACA,KAAU,CAEN6C,EAASU,YAAW,WACnBD,aAAaT,GACbA,EAAS,IACd,GAAO,IACP,CACA,GACA,CAEC,GAAI9D,EAAWM,aAAe9Q,KAAKkC,MAAMkB,QAAQ0N,YAAa,CAC7DyD,EAAU,KAEVjS,EAAQ8R,iBAAiB,cAAc,SAAUC,GAChDU,aAAaR,GAEbA,EAAUS,YAAW,WACpBD,aAAaR,GACbA,EAAU,KACVC,EAAM,MACN,IAAI/C,EAAYpM,EAAKiE,eAErB,GAAIkH,EAAWM,YAAa,CAC3BN,EAAWM,YAAYpT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EAChD,CAEI,GAAIpM,EAAKnD,MAAMkB,QAAQ0N,YAAa,CACnCzL,EAAKnD,MAAMkB,QAAQ0N,YAAYpT,KAAK2H,EAAKnD,MAAOmS,EAAG5C,EACxD,CACA,GAAM,IACN,GAAK,CAAEoD,QAAS,OAEdvS,EAAQ8R,iBAAiB,YAAY,SAAUC,GAC9CU,aAAaR,GACbA,EAAU,IACb,GACA,CACA,EAGA8F,EAAKhd,UAAUuoB,kBAAoB,WAClC,IAAI4P,EAEJ,GAAIx1B,KAAKkC,MAAMgC,UAAU,UAAW,CACnCsxB,EAAMx1B,KAAKkC,MAAMiC,QAAQyR,OAAO6f,YAAYz1B,KAC9C,KAAQ,CACNw1B,EAAMx1B,KAAKsC,QAAQyV,UAAY/X,KAAKjC,KACtC,CAEC,cAAey3B,IAAQ,YAAc,YAAch2B,EAAQg2B,IAC1D,IAAK,SACJ,GAAIA,aAAe1d,KAAM,CAGxB,MAAO9X,KAAKsC,QAAQQ,WAAY,CAC/B9C,KAAKsC,QAAQgD,YAAYtF,KAAKsC,QAAQQ,WAC3C,CAAK9C,KAAKsC,QAAQwE,YAAY0uB,EAC9B,KAAU,CACNx1B,KAAKsC,QAAQyV,UAAY,GAEzB,GAAIyd,GAAO,KAAM,CAChBzpB,QAAQC,KAAK,iJAAkJwpB,EACpK,CACA,CACG,MACD,IAAK,YACL,IAAK,OACJx1B,KAAKsC,QAAQyV,UAAY,GACzB,MACD,QACC/X,KAAKsC,QAAQyV,UAAYyd,EAE5B,EAEAnb,EAAKhd,UAAUivB,aAAe,WAC7B,GAAItsB,KAAKkC,MAAMgC,UAAU,WAAalE,KAAKkC,MAAMiC,QAAQyR,OAAO0W,aAAc,CAC7EtsB,KAAKkC,MAAMiC,QAAQyR,OAAO0W,aAAatsB,KACzC,CACA,EAGAqa,EAAKhd,UAAUk3B,iBAAmB,WACjC,IAAIzkB,EAAU9P,KAAKmG,OAAO2J,QAE1B,GAAIA,EAAS,CACZ,GAAIA,IAAY,KAAM,CACrBA,EAAU9P,KAAKjC,KAClB,MAAS,UAAW+R,GAAW,WAAY,CACxCA,EAAUA,EAAQ9P,KAAKsJ,gBAEvB,GAAIwG,IAAY,MAAO,CACtBA,EAAU,EACd,CACA,CAEE,UAAWA,IAAY,YAAa,CACnCA,EAAU,EACb,CAEE9P,KAAKsC,QAAQ8P,aAAa,QAAStC,EACrC,KAAQ,CACN9P,KAAKsC,QAAQ8P,aAAa,QAAS,GACrC,CACA,EAGAiI,EAAKhd,UAAUoG,WAAa,SAAUiyB,GACrC,IAAK11B,KAAK0zB,OAAQ,CACjB1zB,KAAK0zB,OAAS,KACd,IAAKgC,EAAe,CACnB11B,KAAK21B,eACR,CACA,CAEC,OAAO31B,KAAKsC,OACb,EAEA+X,EAAKhd,UAAUua,SAAW,WACzB,OAAO5X,KAAKjC,KACb,EAEAsc,EAAKhd,UAAUm1B,YAAc,WAC5B,OAAOxyB,KAAKyzB,QACb,EAIApZ,EAAKhd,UAAUw1B,SAAW,SAAU90B,EAAO+0B,GAE1C,IAAI8C,EAAU51B,KAAKgxB,oBAAoBjzB,EAAO+0B,GAC1CrhB,EAEJ,GAAImkB,EAAS,CACZ,GAAI51B,KAAKkC,MAAMkB,QAAQic,SAAWrf,KAAKkC,MAAMgC,UAAU,WAAY,CAClElE,KAAKkC,MAAMiC,QAAQkb,QAAQyB,OAAO,WAAY9gB,KAAM,CAAEyzB,SAAUzzB,KAAKyzB,SAAUj1B,SAAUwB,KAAKjC,OACjG,CAEE0T,EAAYzR,KAAKsJ,eAEjB,GAAItJ,KAAKmG,OAAOqK,WAAW0E,WAAY,CACtClV,KAAKmG,OAAOqK,WAAW0E,WAAWxX,KAAKsC,KAAKkC,MAAOuP,EACtD,CAEE,GAAIzR,KAAKkC,MAAMkB,QAAQ6tB,uBAAyBjxB,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CAChHlE,KAAKkC,MAAMiC,QAAQ+Y,UAAUgU,mBAAmBlxB,KAAK0E,IACxD,CAEE1E,KAAKssB,eAELtsB,KAAKkC,MAAMkB,QAAQ8R,WAAWxX,KAAKsC,KAAKkC,MAAOuP,GAE/C,GAAIzR,KAAKkC,MAAMkB,QAAQod,YAAa,CACnCxgB,KAAKkC,MAAMkB,QAAQod,YAAY9iB,KAAKsC,KAAKkC,MAAOlC,KAAKkC,MAAMM,WAAWie,UACzE,CACA,CACA,EAEApG,EAAKhd,UAAU2zB,oBAAsB,SAAUjzB,EAAO+0B,GACrD,IAAI8C,EAAU,MAEd,GAAI51B,KAAKjC,OAASA,EAAO,CAExB63B,EAAU,KAEV,GAAI9C,EAAQ,CACX,GAAI9yB,KAAKmG,OAAOhC,QAAQ2uB,OAAQ,CAC/B/0B,EAAQiC,KAAKkC,MAAMiC,QAAQ6R,QAAQ6f,cAAc71B,KAAMjC,EAC3D,CACA,CACA,CAECiC,KAAKgzB,eAAej1B,GAEpB,GAAI63B,GAAW51B,KAAKkC,MAAMgC,UAAU,eAAgB,CACnD,GAAIlE,KAAKmG,OAAOH,WAAWkO,SAAWlU,KAAKmG,OAAOH,WAAWmO,WAAY,CACxE,GAAInU,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CAEpE,GAAIlE,KAAKkC,MAAMkB,QAAQyG,aAAe,SAAW7J,KAAKkC,MAAMkB,QAAQyG,aAAe,OAAQ,CAC1F7J,KAAKkC,MAAMiC,QAAQ0F,YAAYC,OAAO9J,KAAKkC,MAAMM,WAAWuH,WACjE,CAEI,GAAI/J,KAAKkC,MAAMkB,QAAQyG,aAAe,QAAS,CAC9C7J,KAAKkC,MAAMiC,QAAQ0F,YAAYqoB,eAAelyB,KAAK0E,IACxD,CACA,KAAU,CACN1E,KAAKkC,MAAMiC,QAAQ0F,YAAYC,OAAO9J,KAAKkC,MAAMM,WAAWuH,WAChE,CACA,CACA,CAEC,OAAO6rB,CACR,EAEAvb,EAAKhd,UAAU21B,eAAiB,SAAUj1B,GACzCiC,KAAKyzB,SAAWzzB,KAAKjC,MAErBiC,KAAKjC,MAAQA,EAEb,GAAIiC,KAAKkC,MAAMkB,QAAQqc,cAAgBzf,KAAKkC,MAAMgC,UAAU,gBAAiB,CAC5ElE,KAAKkC,MAAMiC,QAAQsb,aAAaoR,OAClC,CAEC7wB,KAAKmG,OAAOgK,cAAcnQ,KAAK0E,IAAIJ,KAAMvG,GAEzC,GAAIiC,KAAKkC,MAAMkB,QAAQqc,cAAgBzf,KAAKkC,MAAMgC,UAAU,gBAAiB,CAC5ElE,KAAKkC,MAAMiC,QAAQsb,aAAasR,SAClC,CAEC,GAAI/wB,KAAK0zB,OAAQ,CAChB1zB,KAAK21B,eACP,CACA,EAEAtb,EAAKhd,UAAUs4B,cAAgB,WAC9B31B,KAAK4lB,oBACL5lB,KAAKu0B,mBAGL,GAAIv0B,KAAKkC,MAAMkB,QAAQuQ,kBAAoB3T,KAAKkC,MAAMgC,UAAU,kBAAoBlE,KAAK0E,IAAIiJ,OAAS,MAAO,CAC5G3N,KAAKkC,MAAMiC,QAAQyP,cAAcC,iBAAiB,OAAQ7T,KAAKmG,OAAQnG,KAAKsC,QAC9E,CAEC,IAAKtC,KAAKmG,OAAOH,WAAW8vB,aAAe91B,KAAKmG,OAAOH,WAAW+vB,YAAc/1B,KAAKkC,MAAMgC,UAAU,QAAS,CAC7GlE,KAAKkC,MAAMiC,QAAQuR,KAAKkf,eAAe50B,KACzC,CAGC,GAAIA,KAAKkC,MAAMgC,UAAU,iBAAkB,CAC1ClE,KAAKkC,MAAMiC,QAAQC,cAAcuxB,cAAc31B,KAAKsC,QAAStC,KAAKmG,OACpE,CACA,EAEAkU,EAAKhd,UAAUkS,SAAW,WACzBvP,KAAKwJ,MAAQxJ,KAAKmG,OAAOqD,MACzBxJ,KAAKsC,QAAQ0B,MAAMwF,MAAQxJ,KAAKmG,OAAOiL,WACxC,EAEAiJ,EAAKhd,UAAUsd,WAAa,WAC3B3a,KAAKwJ,MAAQ,GACbxJ,KAAKsC,QAAQ0B,MAAMwF,MAAQ,EAC5B,EAEA6Q,EAAKhd,UAAUkM,SAAW,WACzB,OAAOvJ,KAAKwJ,OAASxJ,KAAKsC,QAAQuJ,WACnC,EAEAwO,EAAKhd,UAAUgZ,YAAc,WAC5BrW,KAAKwM,SAAWxM,KAAKmG,OAAOqG,SAC5BxM,KAAKsC,QAAQ0B,MAAMwI,SAAWxM,KAAKmG,OAAOoL,cAC3C,EAEA8I,EAAKhd,UAAUkZ,YAAc,WAC5BvW,KAAKqR,SAAWrR,KAAKmG,OAAOkL,SAC5BrR,KAAKsC,QAAQ0B,MAAMqN,SAAWrR,KAAKmG,OAAOmL,cAC3C,EAEA+I,EAAKhd,UAAUm2B,YAAc,WAE5BxzB,KAAK0E,IAAIurB,oBACV,EAEA5V,EAAKhd,UAAU+yB,YAAc,WAC5BpwB,KAAKsC,QAAQ0B,MAAMqD,OAAS,GAC5BrH,KAAKqH,OAAS,IACf,EAEAgT,EAAKhd,UAAU8yB,UAAY,WAC1BnwB,KAAKqH,OAASrH,KAAK0E,IAAI2C,OACvBrH,KAAKsC,QAAQ0B,MAAMqD,OAASrH,KAAK0E,IAAI6pB,YACtC,EAEAlU,EAAKhd,UAAUkK,UAAY,WAC1B,OAAOvH,KAAKqH,QAAUrH,KAAKsC,QAAQkW,YACpC,EAEA6B,EAAKhd,UAAU0Q,KAAO,WACrB/N,KAAKsC,QAAQ0B,MAAMkV,QAAUlZ,KAAKmG,OAAO6J,UAAY,cAAgB,EACtE,EAEAqK,EAAKhd,UAAU2Q,KAAO,WACrBhO,KAAKsC,QAAQ0B,MAAMkV,QAAU,MAC9B,EAEAmB,EAAKhd,UAAUyY,KAAO,SAAU3I,GAC/B,GAAInN,KAAKkC,MAAMgC,UAAU,OAAQ,MAAO,CACvC,OAAOlE,KAAKkC,MAAMiC,QAAQ2R,KAAKkgB,SAASh2B,KAAMmN,EAChD,CACA,EAEAkN,EAAKhd,UAAU4c,WAAa,WAC3B,GAAIja,KAAKkC,MAAMgC,UAAU,OAAQ,MAAO,CACvC,IAAI+xB,EAAUj2B,KAAKkC,MAAMiC,QAAQ2R,KAAKogB,iBAEtC,GAAID,GAAWA,EAAQnuB,aAAe9H,KAAM,CAC3CA,KAAKkC,MAAMiC,QAAQ2R,KAAKmE,YAC3B,KAAS,CACNlO,QAAQC,KAAK,iEAChB,CACA,CACA,EAEAqO,EAAKhd,UAAUmS,SAAW,WACzB,GAAIxP,KAAKmG,OAAOhC,QAAQqL,UAAYxP,KAAKkC,MAAMgC,UAAU,WAAY,MAAO,CAC3E,IAAIiyB,EAAQn2B,KAAKkC,MAAMiC,QAAQqL,SAASA,SAASxP,KAAKmG,OAAOhC,QAAQqL,SAAUxP,KAAMA,KAAK4X,YAE1F,OAAOue,IAAU,IACnB,KAAQ,CACN,OAAO,IACT,CACA,EAEA9b,EAAKhd,UAAU6Q,OAAS,WACvB,IAAKlO,KAAKkC,MAAMM,WAAWka,aAAe1c,KAAKsC,QAAQqE,WAAY,CAClE3G,KAAKsC,QAAQqE,WAAWrB,YAAYtF,KAAKsC,QAC3C,CAEC,GAAItC,KAAKmE,QAAQqL,UAAYxP,KAAKmE,QAAQqL,SAAS4K,QAAS,CAC3Dpa,KAAKkC,MAAMiC,QAAQqL,SAAS8jB,gBAAgBtzB,KAC9C,CAEC,GAAIA,KAAKmE,QAAQ2R,MAAQ9V,KAAKmE,QAAQ2R,KAAKqd,OAAQ,CAClDnzB,KAAKkC,MAAMiC,QAAQ2R,KAAKsd,YAAYpzB,KACtC,CAEC,GAAIA,KAAKkC,MAAMkB,QAAQic,QAAS,CAC/Brf,KAAKkC,MAAMiC,QAAQkb,QAAQ+W,sBAAsBp2B,KACnD,CAECA,KAAKsC,QAAU,MACftC,KAAKmG,OAAO6U,WAAWhb,MACvBA,KAAK0E,IAAIsW,WAAWhb,MACpBA,KAAKq2B,MAAQ,EACd,EAIAhc,EAAKhd,UAAUk2B,IAAM,WAEpB,IAAIluB,EAAOrF,KACPwxB,EAAW,MACXrzB,EAAQ6B,KAAK0E,IAAI2sB,aAAarxB,MAElC,MAAO,CACNs2B,KAAM,SAASA,IACd,IAAI9E,EAAWxxB,KAAKi0B,QAChBhR,EAEJ,IAAKuO,EAAU,CACdvO,EAAU5d,EAAKnD,MAAMM,WAAWugB,eAAe1d,EAAKX,IAAK,MAEzD,GAAIue,EAAS,CACZuO,EAAWvO,EAAQsO,sBAAsB,GAEzC,GAAIC,EAAU,CACbA,EAAS1b,OACT,OAAO,IACb,CACA,CACA,KAAU,CACN,OAAO,IACX,CAEG,OAAO,KACV,EACEygB,KAAM,SAASA,IACd,IAAI/E,EAAWxxB,KAAK4D,OAChBsf,EAEJ,IAAKsO,EAAU,CACdtO,EAAU7d,EAAKnD,MAAMM,WAAW2f,eAAe9c,EAAKX,IAAK,MAEzD,GAAIwe,EAAS,CACZsO,EAAWtO,EAAQyO,qBAAqBzO,EAAQnY,MAAM3M,QAEtD,GAAIozB,EAAU,CACbA,EAAS1b,OACT,OAAO,IACb,CACA,CACA,KAAU,CACN,OAAO,IACX,CAEG,OAAO,KACV,EACElS,KAAM,SAASA,IAEd4tB,EAAWnsB,EAAKX,IAAIitB,qBAAqBxzB,GAEzC,GAAIqzB,EAAU,CACbA,EAAS1b,OACT,OAAO,IACX,KAAU,CACN,OAAO,KACX,CACA,EACEme,MAAO,SAASA,IACfzC,EAAWnsB,EAAKX,IAAI6sB,qBAAqBpzB,GAEzC,GAAIqzB,EAAU,CACbA,EAAS1b,OACT,OAAO,IACX,KAAU,CACN,OAAO,KACX,CACA,EACE0gB,GAAI,SAASA,IACZ,IAAIvT,EAAU5d,EAAKnD,MAAMM,WAAW2f,eAAe9c,EAAKX,IAAK,MAE7D,GAAIue,EAAS,CACZA,EAAQlY,MAAM5M,GAAO2X,MACzB,CACA,EACE2gB,KAAM,SAASA,IACd,IAAIxT,EAAU5d,EAAKnD,MAAMM,WAAWugB,eAAe1d,EAAKX,IAAK,MAE7D,GAAIue,EAAS,CACZA,EAAQlY,MAAM5M,GAAO2X,MACzB,CACA,EAGA,EAEAuE,EAAKhd,UAAUsvB,SAAW,WACzB3sB,KAAK0E,IAAI2sB,aAAarxB,KACvB,EAGAqa,EAAKhd,UAAUiM,aAAe,WAE7B,IAAKtJ,KAAKyR,UAAW,CACpBzR,KAAKyR,UAAY,IAAI6gB,EAActyB,KACrC,CAEC,OAAOA,KAAKyR,SACb,EACA,IAAIilB,EAAgB,SAASA,EAAcx0B,GAC1ClC,KAAKkC,MAAQA,EACblC,KAAKgJ,OAAS,MACdhJ,KAAKsC,QAAUtC,KAAKiD,gBACpBjD,KAAK6oB,SAAW,MAChB7oB,KAAK22B,MAAQ,GAEb32B,KAAK42B,aACN,EAEAF,EAAcr5B,UAAU4F,cAAgB,WACvC,IAAIF,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,oBAEjB,OAAOJ,CACR,EAEA2zB,EAAcr5B,UAAUu5B,YAAc,SAAUt0B,GAC/C,GAAItC,KAAKkC,MAAMkB,QAAQyzB,cAAe,CAErC,OAAQr3B,EAAQQ,KAAKkC,MAAMkB,QAAQyzB,gBAClC,IAAK,SAEJ,GAAI72B,KAAKkC,MAAMkB,QAAQyzB,cAAc,KAAO,IAAK,CAChD72B,KAAKsC,QAAQyV,UAAY/X,KAAKkC,MAAMkB,QAAQyzB,aACjD,KAAW,CACN72B,KAAK6oB,SAAW,KAChB7oB,KAAKsC,QAAUU,SAAS8zB,cAAc92B,KAAKkC,MAAMkB,QAAQyzB,cAC9D,CACI,MACD,QACC72B,KAAKsC,QAAUtC,KAAKkC,MAAMkB,QAAQyzB,cAClC,MAEJ,CACA,EAEAH,EAAcr5B,UAAUoG,WAAa,WACpC,OAAOzD,KAAKsC,OACb,EAEAo0B,EAAcr5B,UAAU05B,OAAS,SAAUz0B,EAAS0H,GACnDhK,KAAKg3B,SAAShtB,GAEdhK,KAAKsC,QAAQwE,YAAYxE,GACzBtC,KAAKkC,MAAMM,WAAWkF,iBACvB,EAEAgvB,EAAcr5B,UAAUkvB,QAAU,SAAUjqB,EAAS0H,GACpDhK,KAAKg3B,SAAShtB,GAEdhK,KAAKsC,QAAQO,aAAaP,EAAStC,KAAKsC,QAAQQ,YAChD9C,KAAKkC,MAAMM,WAAWkF,iBACvB,EAEAgvB,EAAcr5B,UAAU8pB,OAAS,SAAU7kB,GAC1CA,EAAQqE,WAAWrB,YAAYhD,GAC/BtC,KAAKi3B,YACN,EAEAP,EAAcr5B,UAAU45B,WAAa,SAAU9pB,GAC9C,IAAKnN,KAAKsC,QAAQQ,YAAcqK,EAAO,CACtC,IAAKnN,KAAK6oB,SAAU,CACnB7oB,KAAKsC,QAAQqE,WAAWrB,YAAYtF,KAAKsC,QAC5C,CACEtC,KAAKgJ,OAAS,KAChB,CAGA,EAEA0tB,EAAcr5B,UAAU25B,SAAW,SAAUhtB,GAC5C,IAAKhK,KAAKgJ,OAAQ,CACjBhJ,KAAKgJ,OAAS,KACd,IAAKhJ,KAAK6oB,SAAU,CACnB7oB,KAAKkC,MAAMI,QAAQwE,YAAY9G,KAAKyD,cACpCzD,KAAKkC,MAAMI,QAAQ0B,MAAMkV,QAAU,EACtC,CACA,CAEC,GAAIlP,EAAQ,CACXhK,KAAK22B,MAAM1xB,KAAK+E,EAClB,CACA,EAEA0sB,EAAcr5B,UAAU0I,OAAS,WAChC/F,KAAK22B,MAAMzxB,SAAQ,SAAUgyB,GAC5BA,EAAKC,cACP,GACA,EAEA,IAAI/pB,EAAY,SAASA,EAAU9K,EAASc,GAE3CpD,KAAKoD,QAAU,GAEfpD,KAAKoK,cAAgB,KACrBpK,KAAKwC,WAAa,KAClBxC,KAAKyN,cAAgB,KACrBzN,KAAK6F,QAAU,KAGf7F,KAAKopB,QAAU,GACfppB,KAAKo3B,YAAc,MACnBp3B,KAAKq3B,cAAgB,MACrBr3B,KAAKuqB,IAAM,MAEXvqB,KAAKmE,QAAU,GAEf,GAAInE,KAAKs3B,kBAAkBh1B,GAAU,CACpCtC,KAAKu3B,kBAAkBn0B,GAAW,IAClCpD,KAAKw3B,SACP,CAECpqB,EAAU/P,UAAUo6B,MAAMC,SAAS13B,KACpC,EAGAoN,EAAU/P,UAAUs6B,eAAiB,CAEpCtwB,OAAQ,MACRD,UAAW,MACX0hB,UAAW,MAEXhc,OAAQ,UACR2Y,uBAAwB,MAExB/Y,eAAgB,GAChB4J,eAAgB,MAChB7O,sBAAuB,MACvBmwB,gBAAiB,MAEjBjkB,iBAAkB,KAClBoc,cAAe,MACf9G,WAAY,KAEZxmB,QAAS,GAETgU,aAAc,GACdC,cAAe,GACfE,eAAgB,GAGhBtS,KAAM,GAEN4a,YAAa,MACbza,uBAAwB,MAExBgb,aAAc,MAEdlN,qBAAsB,IAEtBiE,SAAU,MACVrD,eAAgB,MAChBmhB,sBAAuB,OAEvBuD,YAAa,MACbC,cAAe,MACfC,oBAAqB,MAErBC,sBAAuB,KAEvBC,iBAAkB,MAElBC,WAAY,KACZC,mBAAoB,MACpBC,kBAAmB,sCAEnBvB,cAAe,MAEf14B,MAAO,KAEPk6B,cAAe,OAEfC,YAAa,GAEbC,aAAc,MAEdjoB,sBAAuB,KAEvBkoB,UAAW,MACXC,oBAAqB,KACrBC,oBAAqB,MACrBC,uBAAwB,MACxBC,sBAAuB,SACvBC,qBAAsB,QACtBC,qBAAsB,SAEtBC,gBAAiB,SAASA,IAAkB,EAC5CC,gBAAiB,SAASA,IAAkB,EAC5CC,oBAAqB,SAASA,IAAsB,EAEpDC,sBAAuB,MACvBC,cAAe,SAASA,EAAc70B,EAAM80B,GAC3C,OAAOA,CACT,EACCC,iBAAkB,MAClBC,eAAgB,GAChBC,iBAAkB,SAElB3uB,SAAU,MACV4uB,eAAgB,KAChBC,aAAc,KACdC,sBAAuB,MACvBC,sBAAuB,KACvBC,oBAAqB,EACrBC,mBAAoB,YACpBC,wBAAyB,MACzBC,sBAAuB,MACvBC,sBAAuB,MACvBC,oBAAqB,SAASA,IAAsB,EACpDC,qBAAsB,SAASA,IAAuB,EACtDC,yBAA0B,MAC1BC,wBAAyB,MAEzBC,YAAa,MACbC,eAAgB,MAChBC,YAAa,MACbC,YAAa,MACbC,eAAgB,KAChBC,YAAa,KACbC,iBAAkB,KAClBC,cAAe,UACfC,YAAa,GAEbzZ,UAAW,SAEXuD,WAAY,YACZmW,oBAAqB,OACrBC,2BAA4B,KAC5BnW,sBAAuB,KACvBoW,gBAAiB,SAASA,EAAgB12B,EAAMI,GAC/C,OAAO,IACT,EAECu2B,4BAA6B,IAC7BlnB,wBAAyB,MAEzB1Q,cAAe,KAEfgc,QAAS,MAET6b,OAAQ,MACRC,MAAO,GAEP3U,WAAY,KACZuC,iBAAkB,EAClBnjB,cAAe,MAEfw1B,iBAAkB,MAClBC,eAAgB,MAChBC,iBAAkB,MAClBC,cAAe,GACfC,gBAAiB,KACjBC,sBAAuB,MACvBC,sBAAuB,MAEvBrxB,YAAa,MAEb1E,iBAAkB,MAClBg2B,kCAAmC,KACnCC,sCAAuC,KACvCC,kCAAmC,MAEnC9c,WAAY,MACZ+c,eAAgB,MAChBC,sBAAuB,EACvBC,sBAAuB,EACvBC,uBAAwB,MACxBC,kBAAmB,MACnBC,mBAAoB,GACpBC,uBAAwB,GACxB9a,iBAAkB,OAElB+a,QAAS,MACTC,iBAAkB,MAClBC,WAAY,GACZC,WAAY,MACZC,gBAAiB,OACjBC,gBAAiB,MACjBC,WAAY,KACZC,kBAAmB,MACnBC,gBAAiB,MACjBhZ,cAAe,MACfJ,YAAa,MACblG,oBAAqB,MACrBuf,yBAA0B,EAC1BC,gCAAiC,EAEjC9f,QAAS,MACT+f,eAAgB,KAChBC,YAAa,MACbhM,sBAAuB,MAEvBiM,YAAa,MACbC,iBAAkB,KAClBC,qBAAsB,KACtBC,sBAAuB,KACvBC,oBAAqB,KAErBC,iBAAkB,MAElBtpB,eAAgB,MAEhBlC,YAAa,MACbyrB,2BAA4B,MAC5BC,6BAA8B,MAC9BC,kBAAmB,MACnBC,oBAAqB,SACrBC,wBAAyB,SAASA,IAA0B,EAC5DC,gBAAiB,SAASA,IAAkB,EAC5CC,sBAAuB,SAASA,IAAwB,EACxDC,uBAAwB,SAASA,IAAyB,EAC1DC,0BAA2B,SAASA,IAA4B,EAChEC,oBAAqB,SAASA,IAAsB,EACpDC,0BAA2B,SAASA,IAA4B,EAChEC,yBAA0B,SAASA,IAA2B,EAC9DC,uBAAwB,SAASA,IAAyB,EAE1D9f,oBAAqB,MACrBC,qBAAsB,KAEtB7S,uBAAwB,OACxBC,wBAAyB,KAEzBmkB,aAAc,MACduO,kBAAmB,KACnBC,sBAAuB,KACvBC,uBAAwB,KAExB3X,YAAa,MAGb4X,cAAe,SAASA,IAAgB,EACxCC,WAAY,SAASA,IAAa,EAGlChY,cAAe,SAASA,IAAgB,EACxCI,eAAgB,SAASA,IAAiB,EAG1CmI,SAAU,MACVC,YAAa,MACbC,WAAY,MACZM,OAAQ,MACRC,UAAW,MACXC,WAAY,MACZP,cAAe,MACfC,cAAe,MACfC,aAAc,MACdC,YAAa,MACbC,aAAc,MACdT,eAAgB,MAChBC,aAAc,MACdnN,SAAU,SAASA,IAAW,EAC9BrB,WAAY,SAASA,IAAa,EAClCyB,SAAU,SAASA,IAAW,EAC9BoP,WAAY,SAASA,IAAa,EAClCsN,oBAAqB,SAASA,IAAsB,EACpDC,YAAa,SAASA,IAAc,EACpCC,cAAe,SAASA,IAAgB,EACxCC,WAAY,SAASA,IAAa,EAIlCpuB,UAAW,MACXC,aAAc,MACdC,YAAa,MACbC,QAAS,MACTC,WAAY,MACZC,YAAa,MACbC,eAAgB,MAChBC,eAAgB,MAChBC,cAAe,MACfC,aAAc,MACdC,cAAe,MACfgE,YAAa,SAASA,IAAc,EACpCD,WAAY,SAASA,IAAa,EAClCE,kBAAmB,SAASA,IAAoB,EAGhDjL,YAAa,MACb20B,cAAe,SAASA,IAAgB,EACxC7nB,mBAAoB,SAASA,IAAqB,EAClD8B,wBAAyB,SAASA,IAA0B,EAG5DgmB,cAAe,SAASA,IAAgB,EACxCC,aAAc,SAASA,IAAe,EAGtC7f,YAAa,SAASA,IAAc,EACpCS,WAAY,SAASA,IAAa,EAClCqf,WAAY,MACZze,YAAa,MAGb0e,eAAgB,SAASA,IAAiB,EAC1CC,aAAc,MACdC,UAAW,SAASA,IAAY,EAGhCC,cAAe,MACfC,aAAc,MAGdC,YAAa,SAASA,IAAc,EACpCC,WAAY,SAASA,IAAa,EAGlCC,mBAAoB,QACpBC,qBAAsB,MACtBC,aAAc,SAASA,IAAe,EACtCC,YAAa,MACbC,uBAAwB,SAASA,IAAyB,EAC1DC,WAAY,MACZC,cAAe,MACfC,aAAc,MACdC,iBAAkB,MAClBC,eAAgB,MAChBC,SAAU,MACVC,YAAa,MACbC,aAAc,MAEdx2B,YAAa,KAGby2B,WAAY,SAASA,IAAa,EAGlCC,UAAW,SAASA,IAAY,EAGhCC,eAAgB,WAChBC,iBAAkB,SAASA,IAAmB,EAG9CC,YAAa,SAASA,IAAc,EACpCC,YAAa,SAASA,IAAc,EAGpCh9B,iBAAkB,SAASA,IAAmB,EAC9C2Z,eAAgB,SAASA,IAAiB,GAG3ClQ,EAAU/P,UAAUk6B,kBAAoB,SAAUn0B,GAGjD,GAAIA,EAAQkN,wBAA0B,MAAO,CAC5C,IAAK,IAAI7S,KAAO2F,EAAS,CACxB,UAAWpD,KAAK23B,eAAel6B,KAAS,YAAa,CACpDsO,QAAQC,KAAK,oCAAqCvO,EACtD,CACA,CACA,CAGC,IAAK,IAAIA,KAAOuC,KAAK23B,eAAgB,CACpC,GAAIl6B,KAAO2F,EAAS,CACnBpD,KAAKoD,QAAQ3F,GAAO2F,EAAQ3F,EAC/B,KAAS,CACN,GAAIoC,MAAMkF,QAAQ/E,KAAK23B,eAAel6B,IAAO,CAC5CuC,KAAKoD,QAAQ3F,GAAOL,OAAOqE,OAAO,GAAIzB,KAAK23B,eAAel6B,GAC9D,MAAU,GAAI+B,EAAQQ,KAAK23B,eAAel6B,MAAU,UAAYuC,KAAK23B,eAAel6B,KAAS,KAAM,CAC/FuC,KAAKoD,QAAQ3F,GAAOL,OAAOqE,OAAO,GAAIzB,KAAK23B,eAAel6B,GAC9D,KAAU,CACNuC,KAAKoD,QAAQ3F,GAAOuC,KAAK23B,eAAel6B,EAC5C,CACA,CACA,CACA,EAEA2P,EAAU/P,UAAUi6B,kBAAoB,SAAUh1B,GAEjD,UAAWyF,cAAgB,aAAezF,aAAmByF,YAAa,CACzE/H,KAAKsC,QAAUA,EACf,OAAO,IACT,MAAQ,UAAWA,IAAY,SAAU,CACvCtC,KAAKsC,QAAUU,SAAS8zB,cAAcx0B,GAEtC,GAAItC,KAAKsC,QAAS,CACjB,OAAO,IACV,KAAS,CACNyJ,QAAQ8T,MAAM,kEAAmEvd,GACjF,OAAO,KACV,CACA,KAAQ,CACNyJ,QAAQ8T,MAAM,uDAAwDvd,GACtE,OAAO,KACT,CACA,EAEA8K,EAAU/P,UAAUujC,SAAW,WAC9B,IAAI58B,EAAQmmB,OAAO0W,iBAAiB7gC,KAAKsC,SAEzC,OAAQtC,KAAKoD,QAAQi1B,eACpB,IAAK,OACJ,GAAIr0B,EAAM88B,YAAc,MAAO,CAC9B,KACJ,CAEE,IAAK,MACJ9gC,KAAKsC,QAAQY,UAAUC,IAAI,iBAC3BnD,KAAKuqB,IAAM,KACX,MAED,IAAK,MACJvqB,KAAKsC,QAAQY,UAAUC,IAAI,iBAE5B,QACCnD,KAAKuqB,IAAM,MAEd,EAGAnd,EAAU/P,UAAUqU,4BAA8B,WAGjD,GAAI1R,KAAKoD,QAAQg4B,kBAAoBp7B,KAAKoD,QAAQi4B,gBAAkBr7B,KAAKoD,QAAQk4B,iBAAkB,CAClG,IAAKt7B,KAAKoD,QAAQiH,YAAa,CAC9BrK,KAAKoD,QAAQiH,YAAc,EAC9B,CACA,CAEC,GAAIrK,KAAKoD,QAAQ67B,WAAY,CAC5BlzB,QAAQC,KAAK,0GACbhM,KAAKoD,QAAQod,YAAcxgB,KAAKoD,QAAQ67B,UAC1C,CAEC,GAAIj/B,KAAKoD,QAAQ81B,sBAAuB,CACvCntB,QAAQC,KAAK,yEACf,CAEC,UAAWhM,KAAKoD,QAAQ29B,sBAAwB,YAAa,CAC5D/gC,KAAKoD,QAAQ49B,cAAgBhhC,KAAKoD,QAAQ29B,oBAC1Ch1B,QAAQC,KAAK,gJACf,CAEC,GAAIhM,KAAKoD,QAAQu3B,mBAAqB,KAAM,CAC3C5uB,QAAQC,KAAK,sFAEbhM,KAAKoD,QAAQiH,YAAYuwB,cAAgB,QAC3C,CAEC,GAAI56B,KAAKoD,QAAQq3B,iBAAmB,KAAM,CACzC1uB,QAAQC,KAAK,kFAEbhM,KAAKoD,QAAQiH,YAAYqwB,YAAc16B,KAAKoD,QAAQq3B,cACtD,CAEC,GAAIz6B,KAAKoD,QAAQg4B,iBAAkB,CAClCrvB,QAAQC,KAAK,oFAEb,GAAIhM,KAAKoD,QAAQiH,cAAgB,aAAerK,KAAKoD,QAAQiH,YAAY5H,UAAY,YAAa,CACjGzC,KAAKoD,QAAQiH,YAAY5H,QAAU,IACtC,CACA,CAEC,GAAIzC,KAAKoD,QAAQi4B,eAAgB,CAChCtvB,QAAQC,KAAK,kFAEb,GAAIhM,KAAKoD,QAAQiH,cAAgB,aAAerK,KAAKoD,QAAQiH,YAAYiL,OAAS,YAAa,CAC9FtV,KAAKoD,QAAQiH,YAAYiL,KAAO,IACnC,CACA,CAEC,GAAItV,KAAKoD,QAAQk4B,iBAAkB,CAClCvvB,QAAQC,KAAK,oFAEb,GAAIhM,KAAKoD,QAAQiH,cAAgB,aAAerK,KAAKoD,QAAQiH,YAAYmE,SAAW,YAAa,CAChGxO,KAAKoD,QAAQiH,YAAYmE,OAAS,IACrC,CACA,CAEC,GAAIxO,KAAKoD,QAAQw0B,gBAAiB,CACjC7rB,QAAQC,KAAK,6FAEbhM,KAAKoD,QAAQqE,sBAAwBzH,KAAKoD,QAAQw0B,eACpD,CACA,EAEAxqB,EAAU/P,UAAU4jC,gBAAkB,WAErCjhC,KAAKsC,QAAQY,UAAUC,IAAI,0BAE3B,GAAIgnB,OAAOgL,aAAc,CACxB,GAAIhL,OAAOgL,eAAe+L,MAAO,CAEhC/W,OAAOgL,eAAe+L,OACzB,MAAS,GAAI/W,OAAOgL,eAAeG,gBAAiB,CAEjDnL,OAAOgL,eAAeG,iBACzB,CACA,MAAQ,GAAItyB,SAAS8xB,UAAW,CAE9B9xB,SAAS8xB,UAAUoM,OACrB,CAEClhC,KAAKsC,QAAQY,UAAUikB,OAAO,yBAC/B,EAGA/Z,EAAU/P,UAAUm6B,QAAU,WAC7Bx3B,KAAKmhC,uBAELnhC,KAAK0R,8BAEL1R,KAAKohC,cAELphC,KAAK4gC,WAEL,GAAI5gC,KAAKsC,QAAQ++B,UAAY,QAAS,CACrC,GAAIrhC,KAAKkE,UAAU,kBAAmB,MAAO,CAC5ClE,KAAKmE,QAAQm9B,gBAAgBC,YAChC,CACA,CAECvhC,KAAKoK,cAAgB,IAAInI,EAAcjC,MACvCA,KAAKwC,WAAa,IAAIyY,EAAWjb,MACjCA,KAAKyN,cAAgB,IAAIipB,EAAc12B,MAEvCA,KAAKoK,cAAc7G,cAAcvD,KAAKwC,YACtCxC,KAAKwC,WAAWua,iBAAiB/c,KAAKoK,eAEtC,GAAIpK,KAAKoD,QAAQwC,cAAe,CAC/B5F,KAAK6F,QAAU,IAAI6jB,EAAQ1pB,KAC7B,CAECA,KAAKwhC,gBAELxhC,KAAKyhC,kBACN,EAGAr0B,EAAU/P,UAAU8jC,qBAAuB,WAC1CnhC,KAAKoD,QAAQX,QAAUzC,KAAKoD,QAAQX,QAAQqiB,MAAM,GAElD,IAAK9kB,KAAKoD,QAAQqc,aAAc,CAC/Bzf,KAAKoD,QAAQkB,KAAOtE,KAAKoD,QAAQkB,KAAKwgB,MAAM,EAC9C,CACA,EAGA1X,EAAU/P,UAAUmkC,cAAgB,WACnC,IAAIE,EAAU1hC,KAEd,IAAIsC,EAAUtC,KAAKsC,QACfq/B,EAAM3hC,KAAKmE,QACXf,EAAUpD,KAAKoD,QAEnBA,EAAQo7B,cAAc9gC,KAAKsC,MAE3BsC,EAAQY,UAAUC,IAAI,aACtBb,EAAQ8P,aAAa,OAAQ,QAG7B,MAAO9P,EAAQQ,WAAY,CAC1BR,EAAQgD,YAAYhD,EAAQQ,WAC9B,CACC,GAAIM,EAAQiE,OAAQ,CACnBjE,EAAQiE,OAAS7F,MAAM4B,EAAQiE,QAAUjE,EAAQiE,OAASjE,EAAQiE,OAAS,KAC3E/E,EAAQ0B,MAAMqD,OAASjE,EAAQiE,MACjC,CAGC,GAAIjE,EAAQgE,YAAc,MAAO,CAChChE,EAAQgE,UAAY5F,MAAM4B,EAAQgE,WAAahE,EAAQgE,UAAYhE,EAAQgE,UAAY,KACvF9E,EAAQ0B,MAAMoD,UAAYhE,EAAQgE,SACpC,CAGC,GAAIhE,EAAQ0lB,YAAc,MAAO,CAChC1lB,EAAQ0lB,UAAYtnB,MAAM4B,EAAQ0lB,WAAa1lB,EAAQ0lB,UAAY1lB,EAAQ0lB,UAAY,KACvFxmB,EAAQ0B,MAAM8kB,UAAY1lB,EAAQ0lB,SACpC,CAEC9oB,KAAKoK,cAAc9G,aACnBtD,KAAKwC,WAAWc,aAEhBtD,KAAK4hC,iBAEL,GAAI5hC,KAAKkE,UAAU,SAAU,MAAO,CACnCy9B,EAAI70B,OAAOxJ,WAAWF,EAAQ0J,OAChC,CAIC60B,EAAIvuB,SAAS9P,aAEb,GAAIF,EAAQ2Q,0BAA4B,MAAO,CAC9C4tB,EAAIvuB,SAASyuB,2BAA2Bz+B,EAAQ2Q,wBAClD,CAEC,IAAK,IAAImnB,KAAU93B,EAAQ+3B,MAAO,CACjCwG,EAAIvuB,SAAS0uB,YAAY5G,EAAQ93B,EAAQ+3B,MAAMD,GACjD,CAECyG,EAAIvuB,SAAS2uB,UAAU3+B,EAAQ83B,QAG/B,UAAW93B,EAAQwjB,aAAe,SAAU,CAE3C,IAAI7jB,EAAKC,SAASC,cAAc,OAChCF,EAAGG,UAAUC,IAAI,yBAEjB,IAAI6+B,EAAOh/B,SAASC,cAAc,QAClC++B,EAAKjqB,UAAY3U,EAAQwjB,YAEzB7jB,EAAG+D,YAAYk7B,GAEf5+B,EAAQwjB,YAAc7jB,CACxB,CAGCT,EAAQwE,YAAY9G,KAAKoK,cAAc3G,cACvCnB,EAAQwE,YAAY9G,KAAKwC,WAAWiB,cAEpC,GAAIL,EAAQyzB,cAAe,CAC1B72B,KAAKyN,cAAcupB,UACrB,CAEC,GAAI5zB,EAAQiH,aAAerK,KAAKkE,UAAU,cAAe,MAAO,CAC/Dy9B,EAAIt3B,YAAY/G,YAClB,CAEC,GAAIF,EAAQ2O,aAAe/R,KAAKkE,UAAU,WAAY,CACrDy9B,EAAI3vB,QAAQ1O,YACd,CAEC,GAAIF,EAAQ8b,aAAelf,KAAKoD,QAAQkB,KAAM,CAC7CtE,KAAKoK,cAAc/F,2BAA2BrE,KAAKoD,QAAQkB,KAC7D,CAEC,GAAItE,KAAKkE,UAAU,eAAgB,CAClCy9B,EAAI93B,YAAYvG,YAClB,CAECtD,KAAKoK,cAAchF,WAAWhC,EAAQX,SAEtC,GAAIW,EAAQwH,UAAY5K,KAAKkE,UAAU,WAAY,MAAO,CACzDy9B,EAAI/2B,SAAStH,YACf,CAEC,GAAItD,KAAKkE,UAAU,cAAe,CACjClE,KAAKmE,QAAQ6gB,WAAW1hB,YAC1B,CAEC,IAAKF,EAAQiH,aAAerK,KAAKkE,UAAU,cAAe,OAASy9B,EAAIt3B,YAAYC,OAAOgL,MAAQlS,EAAQy0B,cAAgB73B,KAAKkE,UAAU,OAAQ,MAAO,CACvJ,IAAIwf,EAAU,GAEd,GAAItgB,EAAQiH,aAAerK,KAAKkE,UAAU,cAAe,OAASy9B,EAAIt3B,YAAYC,OAAOgL,KAAM,CAC9FoO,EAAUie,EAAIt3B,YAAY43B,KAAK,QAE/B,GAAIve,IAAY,OAAStgB,EAAQy0B,YAAa,CAC7CnU,EAAUtgB,EAAQy0B,WACtB,CACA,MAAS,GAAIz0B,EAAQy0B,YAAa,CAC/BnU,EAAUtgB,EAAQy0B,WACrB,CAEE8J,EAAIrsB,KAAK4sB,QAAQxe,EACnB,CAEC,IAAKtgB,EAAQiH,aAAerK,KAAKkE,UAAU,cAAe,OAASy9B,EAAIt3B,YAAYC,OAAOkE,QAAUpL,EAAQ00B,gBAAkB93B,KAAKkE,UAAU,SAAU,MAAO,CAC7J,IAAI4f,EAAU,GAEd,GAAI1gB,EAAQiH,aAAerK,KAAKkE,UAAU,cAAe,OAASy9B,EAAIt3B,YAAYC,OAAOkE,OAAQ,CAChGsV,EAAU6d,EAAIt3B,YAAY43B,KAAK,UAE/B,GAAIne,IAAY,OAAS1gB,EAAQ00B,cAAe,CAC/ChU,EAAU1gB,EAAQ00B,aACtB,CACA,MAAS,GAAI10B,EAAQ00B,cAAe,CACjChU,EAAU1gB,EAAQ00B,aACrB,CAEE6J,EAAInzB,OAAO2zB,UAAUre,EACvB,CAEC,GAAI1gB,EAAQ20B,qBAAuB/3B,KAAKkE,UAAU,SAAU,MAAO,CAClEd,EAAQ20B,oBAAoB7yB,SAAQ,SAAUic,GAE7C,IAAIhb,EAASu7B,EAAQt3B,cAAczC,WAAWwZ,EAAKtc,OAEnD,GAAIsB,EAAQ,CACXw7B,EAAInzB,OAAOI,qBAAqBzI,EAAQgb,EAAKpjB,MACjD,KAAU,CACNgO,QAAQC,KAAK,kDAAmDmV,EAAKtc,OACrE,OAAO,KACX,CACA,GACA,CAEC,GAAI7E,KAAKkE,UAAU,QAAS,CAC3By9B,EAAInkB,KAAKla,YACX,CAEC,GAAIF,EAAQ2b,YAAc/e,KAAKkE,UAAU,OAAQ,MAAO,CACvDy9B,EAAIpgB,KAAKje,YACX,CAEC,GAAIF,EAAQ6Z,SAAWjd,KAAKkE,UAAU,YAAa,MAAO,CACzDy9B,EAAIzkB,UAAU5Z,YAChB,CAEC,GAAItD,KAAKkE,UAAU,eAAgB,CAClCy9B,EAAIrJ,YAAYh1B,YAClB,CAEC,GAAItD,KAAKkE,UAAU,aAAc,CAChCy9B,EAAIpiB,UAAUC,mBAAmB,KACnC,CAEC,GAAIpc,EAAQ6lB,YAAcjpB,KAAKkE,UAAU,eAAgB,CACxDy9B,EAAI3Y,YAAY1lB,YAClB,CAEC,GAAItD,KAAKkE,UAAU,aAAc,CAChCy9B,EAAInJ,UAAUl1B,YAChB,CAEC,GAAIF,EAAQi3B,aAAer6B,KAAKkE,UAAU,SAAU,CACnDy9B,EAAIS,MAAM9+B,YACZ,CAECF,EAAQq7B,WAAW/gC,KAAKsC,KACzB,EAEAoN,EAAU/P,UAAUokC,iBAAmB,WACtC,IAAIp8B,EAAOrF,KAEX,GAAIqF,EAAKjC,QAAQ2b,YAAc1Z,EAAKnB,UAAU,QAAS,CACtDmB,EAAKlB,QAAQod,KAAKhc,MAAM,KAAM,MAE9B,GAAIF,EAAKjC,QAAQ2b,YAAc,QAAS,CACvC,GAAI1Z,EAAKjC,QAAQkB,KAAKlG,OAAQ,CAC7BiH,EAAK7C,WAAWmc,QAAQtZ,EAAKjC,QAAQkB,KAAM,MAAO,KACtD,KAAU,CACN,IAAKe,EAAKjC,QAAQi5B,SAAWh3B,EAAKjC,QAAQk5B,mBAAqBj3B,EAAKnB,UAAU,QAAS,CACtFmB,EAAKlB,QAAQqZ,KAAK4G,SAAS,MAAO,MAAMvJ,MAAK,WAAY,IAAIC,OAAM,WAClE,GAAIzV,EAAKjC,QAAQ24B,sBAAuB,CACvC12B,EAAKlB,QAAQod,KAAK4C,QAAQ9e,EAAKjC,QAAQ24B,sBAC9C,CACA,IAEK,MACL,KAAW,CACN12B,EAAK7C,WAAWmc,QAAQtZ,EAAKjC,QAAQkB,KAAM,MAAO,KACvD,CACA,CAEG,GAAIe,EAAKjC,QAAQ24B,sBAAuB,CACvC12B,EAAKlB,QAAQod,KAAK4C,QAAQ9e,EAAKjC,QAAQ24B,sBAC3C,CACA,KAAS,CACN,GAAI12B,EAAKjC,QAAQi5B,QAAS,CACzBh3B,EAAKlB,QAAQod,KAAK4C,QAAQ9e,EAAKjC,QAAQ24B,uBAAuBlhB,MAAK,WAAY,IAAIC,OAAM,WAAY,GACzG,KAAU,CACNzV,EAAK7C,WAAWmc,QAAQ,GAAI,MAAO,KACvC,CACA,CACA,KAAQ,CACN,GAAItZ,EAAKjC,QAAQkB,KAAKlG,OAAQ,CAC7BiH,EAAK7C,WAAWmc,QAAQtZ,EAAKjC,QAAQkB,KACxC,KAAS,CACN,IAAKe,EAAKjC,QAAQi5B,SAAWh3B,EAAKjC,QAAQk5B,mBAAqBj3B,EAAKnB,UAAU,QAAS,CACtFmB,EAAKlB,QAAQqZ,KAAK4G,SAAS,MAAO,MAAMvJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACnF,KAAU,CACNzV,EAAK7C,WAAWmc,QAAQtZ,EAAKjC,QAAQkB,KAAM,MAAO,KACtD,CACA,CACA,CACA,EAGA8I,EAAU/P,UAAUglC,QAAU,WAC7B,IAAI//B,EAAUtC,KAAKsC,QAEnB8K,EAAU/P,UAAUo6B,MAAM6K,WAAWtiC,MAErC,GAAIA,KAAKoD,QAAQqc,cAAgBzf,KAAKkE,UAAU,eAAgB,MAAO,CACtElE,KAAKmE,QAAQsb,aAAa8iB,aAC5B,CAGCviC,KAAKwC,WAAWmI,KAAKzF,SAAQ,SAAUR,GACtCA,EAAIob,MACN,IAEC9f,KAAKwC,WAAWmI,KAAO,GACvB3K,KAAKwC,WAAWuH,WAAa,GAC7B/J,KAAKwC,WAAWkZ,YAAc,GAG9B,GAAI1b,KAAKoD,QAAQ6lB,YAAcjpB,KAAKkE,UAAU,eAAgB,CAC7DlE,KAAKmE,QAAQ6kB,YAAYwZ,eAC3B,CAEC,GAAIxiC,KAAKkE,UAAU,eAAgB,CAClClE,KAAKmE,QAAQm0B,YAAYkK,eAC3B,CAGC,MAAOlgC,EAAQQ,WAAY,CAC1BR,EAAQgD,YAAYhD,EAAQQ,WAC9B,CAAER,EAAQY,UAAUikB,OAAO,YAC3B,EAEA/Z,EAAU/P,UAAUukC,eAAiB,WACpC,IAAIa,EAAKC,UAAUC,WAAaD,UAAUE,QAAUzY,OAAO0Y,MAE3D,GAAIJ,EAAG3hC,QAAQ,YAAc,EAAG,CAC/Bd,KAAKopB,QAAU,KACfppB,KAAKo3B,YAAc,IACrB,MAAQ,GAAIqL,EAAG3hC,QAAQ,SAAW,EAAG,CACnCd,KAAKopB,QAAU,OACfppB,KAAKo3B,YAAc,IACrB,MAAQ,GAAIqL,EAAG3hC,QAAQ,YAAc,EAAG,CACtCd,KAAKopB,QAAU,UACfppB,KAAKo3B,YAAc,KACrB,KAAQ,CACNp3B,KAAKopB,QAAU,QACfppB,KAAKo3B,YAAc,KACrB,CAECp3B,KAAKq3B,cAAgB,sVAAsVyL,KAAKL,IAAO,0kDAA0kDK,KAAKL,EAAGM,OAAO,EAAG,GACp9D,EAKA31B,EAAU/P,UAAU2iB,YAAc,WACjC,OAAOhgB,KAAKwC,WAAWwd,aACxB,EAGA5S,EAAU/P,UAAU6rB,cAAgB,WACnC,OAAOlpB,KAAKwC,WAAW0mB,eACxB,EAGA9b,EAAU/P,UAAU2lC,qBAAuB,SAAUC,GACpD,IAAIC,EAAUljC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAI03B,EAAQngC,SAASC,cAAc,SACnCkgC,EAAMx1B,KAAO,OACbw1B,EAAMC,OAASH,GAAc,yBAE7BE,EAAM/uB,iBAAiB,UAAU,SAAUC,GAC1C,IAAIgvB,EAAOF,EAAMG,MAAM,GACnBC,EAAS,IAAIC,WACbl/B,EAEJi/B,EAAOE,WAAWJ,GAElBE,EAAOG,OAAS,SAAUrvB,GAEzB,IACC/P,EAAOqsB,KAAKC,MAAM2S,EAAOvkC,OAC9B,CAAM,MAAOqV,GACRtI,QAAQC,KAAK,kDAAmDqI,GAChE5I,EAAO4I,GACP,MACL,CAEI6uB,EAAQvkB,QAAQra,GAAMuW,MAAK,SAAUvW,GACpCkH,EAAQlH,EACb,IAAOwW,OAAM,SAAUC,GAClBvP,EAAQuP,EACb,GACA,EAEGwoB,EAAOI,QAAU,SAAUtvB,GAC1BtI,QAAQC,KAAK,yCACbP,GACJ,CACA,IAEE03B,EAAMS,OACR,GACA,EAGAx2B,EAAU/P,UAAUshB,QAAU,SAAUra,EAAMiT,EAAQjN,GACrD,GAAItK,KAAKkE,UAAU,QAAS,CAC3BlE,KAAKmE,QAAQqZ,KAAKqmB,oBACpB,CAEC,OAAO7jC,KAAK8jC,SAASx/B,EAAMiT,EAAQjN,EAAQ,MAAO,KACnD,EAEA8C,EAAU/P,UAAUymC,SAAW,SAAUx/B,EAAMiT,EAAQjN,EAAQy5B,EAAYllB,GAC1E,IAAIxZ,EAAOrF,KAEX,UAAWsE,IAAS,SAAU,CAC7B,GAAIA,EAAKxD,QAAQ,MAAQ,GAAKwD,EAAKxD,QAAQ,MAAQ,EAAG,CAErD,OAAOuE,EAAK7C,WAAWmc,QAAQgS,KAAKC,MAAMtsB,GAAOy/B,EAAYllB,EAChE,KAAS,CAEN,GAAIxZ,EAAKnB,UAAU,OAAQ,MAAO,CACjC,GAAIqT,EAAQ,CACXlS,EAAKlB,QAAQqZ,KAAKwG,UAAUzM,EACjC,CAEI,GAAIjN,EAAQ,CACXjF,EAAKlB,QAAQqZ,KAAKwmB,UAAU15B,EACjC,CAEIjF,EAAKlB,QAAQqZ,KAAKymB,OAAO3/B,GAEzB,GAAIe,EAAKjC,QAAQ2b,YAAc,UAAY1Z,EAAKnB,UAAU,OAAQ,MAAO,CACxEmB,EAAKlB,QAAQod,KAAKhc,MAAM,KAAM,MAC9B,OAAOF,EAAKlB,QAAQod,KAAK4C,QAAQ,EACtC,KAAW,CAEN,OAAO9e,EAAKlB,QAAQqZ,KAAK4G,SAAS2f,EAAYllB,EACnD,CACA,CACA,CACA,KAAQ,CACN,GAAIva,EAAM,CAET,OAAOe,EAAK7C,WAAWmc,QAAQra,EAAMy/B,EAAYllB,EACpD,KAAS,CAGN,GAAIxZ,EAAKnB,UAAU,UAAYmB,EAAKlB,QAAQqZ,KAAK0mB,QAAU7+B,EAAKjC,QAAQk5B,kBAAmB,CAE1F,GAAIj3B,EAAKjC,QAAQ2b,YAAc,UAAY1Z,EAAKnB,UAAU,OAAQ,MAAO,CACxEmB,EAAKlB,QAAQod,KAAKhc,MAAM,KAAM,MAC9B,OAAOF,EAAKlB,QAAQod,KAAK4C,QAAQ,EACtC,KAAW,CACN,OAAO9e,EAAKlB,QAAQqZ,KAAK4G,SAAS2f,EAAYllB,EACnD,CACA,KAAU,CAEN,OAAOxZ,EAAK7C,WAAWmc,QAAQ,GAAIolB,EAAYllB,EACnD,CACA,CACA,CACA,EAGAzR,EAAU/P,UAAUslB,UAAY,WAC/B,GAAI3iB,KAAKkE,UAAU,QAAS,CAC3BlE,KAAKmE,QAAQqZ,KAAKqmB,oBACpB,CAEC7jC,KAAKwC,WAAWmgB,WACjB,EAGAvV,EAAU/P,UAAUojB,QAAU,SAAUzX,GAEvC,GAAIA,IAAW,KAAM,CACpB+C,QAAQC,KAAK,oGACbhD,EAAS,QACX,CAEC,OAAOhJ,KAAKwC,WAAWie,QAAQzX,EAChC,EAGAoE,EAAU/P,UAAUimB,aAAe,SAAUta,GAE5C,GAAIA,IAAW,KAAM,CACpB+C,QAAQC,KAAK,yGACbhD,EAAS,QACX,CAEC,OAAOhJ,KAAKwC,WAAW8gB,aAAata,EACrC,EAGAoE,EAAU/P,UAAU8mC,WAAa,SAAUt/B,EAAO8I,EAAM5P,GACvD,GAAIiC,KAAKkE,UAAU,SAAU,MAAO,CACnC,OAAOlE,KAAKmE,QAAQqK,OAAO7N,OAAO,OAAQkE,EAAO8I,EAAM5P,EACzD,CACA,EAGAqP,EAAU/P,UAAU+mC,WAAa,SAAUv/B,EAAO8I,EAAM5P,GACvD,GAAIiC,KAAKkE,UAAU,SAAU,MAAO,CACnC,OAAOlE,KAAKmE,QAAQqK,OAAO7N,OAAO,OAAQkE,EAAO8I,EAAM5P,EACzD,CACA,EAGAqP,EAAU/P,UAAUgnC,QAAU,SAAU37B,EAAS1E,EAAOsG,GACvD,GAAItK,KAAKkE,UAAU,SAAU,MAAO,CACnC,OAAOlE,KAAKmE,QAAQmgC,OAAOD,QAAQ37B,EAAS1E,EAAOsG,EACrD,CACA,EAGA8C,EAAU/P,UAAU+kC,MAAQ,SAAU15B,EAAS1E,EAAOsG,GACrD,GAAItK,KAAKkE,UAAU,QAAS,MAAO,CAClC,OAAOlE,KAAKmE,QAAQi+B,MAAMmC,gBAAgB77B,EAAS1E,EAAOsG,EAC5D,CACA,EAGA8C,EAAU/P,UAAUmnC,WAAa,WAChC,GAAIxkC,KAAKkE,UAAU,OAAQ,MAAO,CACjC,OAAOlE,KAAKmE,QAAQqZ,KAAK0mB,QAC3B,CACA,EAGA92B,EAAU/P,UAAUonC,YAAc,SAAUngC,EAAMiT,EAAQjN,GACzD,GAAItK,KAAKkE,UAAU,QAAS,CAC3BlE,KAAKmE,QAAQqZ,KAAKqmB,oBACpB,CAEC,OAAO7jC,KAAK8jC,SAASx/B,EAAMiT,EAAQjN,EAAQ,KAC5C,EAGA8C,EAAU/P,UAAU2vB,WAAa,SAAU1oB,GAC1C,IAAIogC,EAAU1kC,KAEd,IAAIqF,EAAOrF,KACX,IAAI2kC,EAAY,EAEhB,OAAO,IAAIp5B,SAAQ,SAAUC,EAASC,GACrC,GAAIi5B,EAAQxgC,UAAU,QAAS,CAC9BwgC,EAAQvgC,QAAQqZ,KAAKqmB,oBACxB,CAEE,UAAWv/B,IAAS,SAAU,CAC7BA,EAAOqsB,KAAKC,MAAMtsB,EACrB,CAEE,GAAIA,EAAM,CACTA,EAAKY,SAAQ,SAAUic,GACtB,IAAIzc,EAAMW,EAAK7C,WAAWkb,QAAQyD,EAAK9b,EAAKjC,QAAQjF,QAEpD,GAAIuG,EAAK,CACRigC,IAEAjgC,EAAIsoB,WAAW7L,GAAMtG,MAAK,WACzB8pB,IAEA,IAAKA,EAAW,CACfn5B,GACP,CACA,GACA,CACA,GACA,KAAS,CACNO,QAAQC,KAAK,mCACbP,EAAO,kCACV,CACA,GACA,EAEA2B,EAAU/P,UAAUunC,QAAU,SAAUtgC,EAAMsc,EAAKziB,GAClD,IAAI0mC,EAAU7kC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,GAAIo5B,EAAQ3gC,UAAU,QAAS,CAC9B2gC,EAAQ1gC,QAAQqZ,KAAKqmB,oBACxB,CAEE,UAAWv/B,IAAS,SAAU,CAC7BA,EAAOqsB,KAAKC,MAAMtsB,EACrB,CAEE,GAAIA,EAAM,CACTugC,EAAQriC,WAAWue,QAAQzc,EAAMsc,EAAKziB,GAAO0c,MAAK,SAAUlQ,GAC3D,IAAI1B,EAAS,GAEb0B,EAAKzF,SAAQ,SAAUR,GACtBuE,EAAOhE,KAAKP,EAAI4E,eACrB,IAEIkC,EAAQvC,EACZ,GACA,KAAS,CACN8C,QAAQC,KAAK,mCACbP,EAAO,kCACV,CACA,GACA,EAGA2B,EAAU/P,UAAUynC,gBAAkB,SAAUxgC,GAC/C,IAAIygC,EAAU/kC,KAEd,IAAIqF,EAAOrF,KACP2K,EAAO,GACPg6B,EAAY,EAEhB,OAAO,IAAIp5B,SAAQ,SAAUC,EAASC,GACrC,GAAIs5B,EAAQ7gC,UAAU,QAAS,CAC9B6gC,EAAQ5gC,QAAQqZ,KAAKqmB,oBACxB,CAEE,UAAWv/B,IAAS,SAAU,CAC7BA,EAAOqsB,KAAKC,MAAMtsB,EACrB,CAEE,GAAIA,EAAM,CACTA,EAAKY,SAAQ,SAAUic,GACtB,IAAIzc,EAAMW,EAAK7C,WAAWkb,QAAQyD,EAAK9b,EAAKjC,QAAQjF,QAEpDwmC,IAEA,GAAIjgC,EAAK,CACRA,EAAIsoB,WAAW7L,GAAMtG,MAAK,WACzB8pB,IACAh6B,EAAK1F,KAAKP,EAAI4E,gBAEd,IAAKq7B,EAAW,CACfn5B,EAAQb,EACf,CACA,GACA,KAAW,CACNtF,EAAK7C,WAAWue,QAAQI,GAAMtG,MAAK,SAAUmqB,GAC5CL,IACAh6B,EAAK1F,KAAK+/B,EAAQ,GAAG17B,gBAErB,IAAKq7B,EAAW,CACfn5B,EAAQb,EACf,CACA,GACA,CACA,GACA,KAAS,CACNoB,QAAQC,KAAK,mCACbP,EAAO,kCACV,CACA,GACA,EAGA2B,EAAU/P,UAAUs1B,OAAS,SAAUx0B,GACtC,IAAIuG,EAAM1E,KAAKwC,WAAWkb,QAAQvf,GAElC,GAAIuG,EAAK,CACR,OAAOA,EAAI4E,cACb,KAAQ,CACNyC,QAAQC,KAAK,sCAAuC7N,GACpD,OAAO,KACT,CACA,EAGAiP,EAAU/P,UAAU0gB,mBAAqB,SAAU7S,EAAUlC,GAC5D,IAAItE,EAAM1E,KAAKwC,WAAWub,mBAAmB7S,EAAUlC,GAEvD,GAAItE,EAAK,CACR,OAAOA,EAAI4E,cACb,KAAQ,CACNyC,QAAQC,KAAK,sCAAuCd,GACpD,OAAO,KACT,CACA,EAGAkC,EAAU/P,UAAU0iB,UAAY,SAAU5hB,GACzC,IAAI8mC,EAAUjlC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAIpG,EAAO4/B,EACPC,EAAQ,EACRC,EAAe,EACfC,EAAY,GAEhB,SAASC,IACRH,IAEA,GAAIA,GAAS/mC,EAAMC,OAAQ,CAC1B,GAAI+mC,EAAc,CACjB9/B,EAAK7C,WAAWyc,qBAChBzT,GACL,CACA,CACA,CAEE,IAAK3L,MAAMkF,QAAQ5G,GAAQ,CAC1BA,EAAQ,CAACA,EACZ,CAGEA,EAAM+G,SAAQ,SAAUic,GACvB,IAAIzc,EAAMugC,EAAQziC,WAAWkb,QAAQyD,EAAM,MAE3C,GAAIzc,EAAK,CACR0gC,EAAUngC,KAAKP,EACnB,KAAU,CACNqH,QAAQC,KAAK,wCAAyCmV,GACtD1V,EAAO,wCACP45B,GACJ,CACA,IAGED,EAAU9vB,MAAK,SAAUgwB,EAAGC,GAC3B,OAAON,EAAQziC,WAAWmI,KAAK7J,QAAQwkC,GAAKL,EAAQziC,WAAWmI,KAAK7J,QAAQykC,GAAK,GAAK,CACzF,IAEEH,EAAUlgC,SAAQ,SAAUR,GAC3BA,EAAIwJ,SAAS2M,MAAK,WACjBsqB,IACAE,GACJ,IAAMvqB,OAAM,SAAUC,GAClBsqB,IACA55B,EAAOsP,EACX,GACA,GACA,GACA,EAGA3N,EAAU/P,UAAUsjB,OAAS,SAAUrc,EAAMsc,EAAKziB,GACjD,IAAIqnC,EAAUxlC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,UAAWnH,IAAS,SAAU,CAC7BA,EAAOqsB,KAAKC,MAAMtsB,EACrB,CAEEkhC,EAAQhjC,WAAWue,QAAQzc,EAAMsc,EAAKziB,GAAO0c,MAAK,SAAUlQ,GAE3D,GAAI66B,EAAQthC,UAAU,eAAgB,CACrCshC,EAAQrhC,QAAQ0F,YAAYC,OAAO07B,EAAQhjC,WAAWuH,WAC1D,CAEGyB,EAAQb,EAAK,GAAGrB,eACnB,GACA,GACA,EAGA8D,EAAU/P,UAAUooC,eAAiB,SAAUtnC,EAAOmG,GACrD,IAAIohC,EAAU1lC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAI/G,EAAMghC,EAAQljC,WAAWkb,QAAQvf,GAErC,UAAWmG,IAAS,SAAU,CAC7BA,EAAOqsB,KAAKC,MAAMtsB,EACrB,CAEE,GAAII,EAAK,CACRA,EAAIsoB,WAAW1oB,GAAMuW,MAAK,WAEzB,GAAI6qB,EAAQxhC,UAAU,eAAgB,CACrCwhC,EAAQvhC,QAAQ0F,YAAYC,OAAO47B,EAAQljC,WAAWuH,WAC3D,CAEIyB,EAAQ9G,EAAI4E,eAChB,IAAMwR,OAAM,SAAUC,GAClBtP,EAAOsP,EACX,GACA,KAAS,CACNrW,EAAMghC,EAAQljC,WAAWue,QAAQzc,GAAMuW,MAAK,SAAUlQ,GAErD,GAAI+6B,EAAQxhC,UAAU,eAAgB,CACrCwhC,EAAQvhC,QAAQ0F,YAAYC,OAAO47B,EAAQljC,WAAWuH,WAC3D,CAEIyB,EAAQb,EAAK,GAAGrB,eACpB,IAAMwR,OAAM,SAAUC,GAClBtP,EAAOsP,EACX,GACA,CACA,GACA,EAGA3N,EAAU/P,UAAUsoC,UAAY,SAAUxnC,EAAOmG,GAChD,IAAIshC,EAAU5lC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAI/G,EAAMkhC,EAAQpjC,WAAWkb,QAAQvf,GAErC,UAAWmG,IAAS,SAAU,CAC7BA,EAAOqsB,KAAKC,MAAMtsB,EACrB,CAEE,GAAII,EAAK,CACRA,EAAIsoB,WAAW1oB,GAAMuW,MAAK,WACzBrP,EAAQ9G,EAAI4E,eAChB,IAAMwR,OAAM,SAAUC,GAClBtP,EAAOsP,EACX,GACA,KAAS,CACNhP,QAAQC,KAAK,wCAAyC7N,GACtDsN,EAAO,uCACV,CACA,GACA,EAGA2B,EAAU/P,UAAU2gB,YAAc,SAAU7f,EAAO+M,EAAUC,GAC5D,IAAI06B,EAAU7lC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAI/G,EAAMmhC,EAAQrjC,WAAWkb,QAAQvf,GAErC,GAAIuG,EAAK,CACRmhC,EAAQrjC,WAAWwb,YAAYtZ,EAAKwG,EAAUC,GAAW0P,MAAK,WAC7DrP,GACJ,IAAMsP,OAAM,SAAUC,GAClBtP,EAAOsP,EACX,GACA,KAAS,CACNhP,QAAQC,KAAK,wCAAyC7N,GACtDsN,EAAO,uCACV,CACA,GACA,EAEA2B,EAAU/P,UAAU2U,QAAU,SAAUtI,EAAM9H,EAAI+H,GACjD,IAAIm8B,EAAU9lC,KAAKwC,WAAWkb,QAAQhU,GAEtC,GAAIo8B,EAAS,CACZA,EAAQ/Y,UAAUnrB,EAAI+H,EACxB,KAAQ,CACNoC,QAAQC,KAAK,sCAAuCtC,EACtD,CACA,EAEA0D,EAAU/P,UAAUgmB,QAAU,SAAUra,GAEvC,GAAIA,IAAW,KAAM,CACpB+C,QAAQC,KAAK,oGACbhD,EAAS,QACX,CAEC,OAAOhJ,KAAKwC,WAAW4G,cAAcJ,EACtC,EAGAoE,EAAU/P,UAAUyf,eAAiB,SAAU3e,EAAO6K,GACrD,IAAItE,EAAM1E,KAAKwC,WAAWkb,QAAQvf,GAElC,GAAIuG,EAAK,CACR,OAAO1E,KAAKwC,WAAWsa,eAAepY,EAAKsE,EAC7C,KAAQ,CACN+C,QAAQC,KAAK,0CAA2C7N,GACxD,OAAO,KACT,CACA,EAGAiP,EAAU/P,UAAU0oC,gBAAkB,SAAUC,GAC/C,GAAIhmC,KAAKkE,UAAU,YAAa,MAAO,CACtClE,KAAKmE,QAAQq0B,UAAUyN,KAAKD,EAC9B,CACA,EAIA54B,EAAU/P,UAAU+H,WAAa,SAAUY,GAC1ChG,KAAKoK,cAAchF,WAAWY,EAC/B,EAEAoH,EAAU/P,UAAUsL,WAAa,SAAUU,GAC1C,OAAOrJ,KAAKoK,cAAchB,cAAcC,EACzC,EAEA+D,EAAU/P,UAAUu1B,UAAY,SAAU/tB,GACzC,IAAID,EAAM5E,KAAKoK,cAAczC,WAAW9C,GAExC,GAAID,EAAK,CACR,OAAOA,EAAI0E,cACb,KAAQ,CACNyC,QAAQC,KAAK,yCAA0CnH,GACvD,OAAO,KACT,CACA,EAEAuI,EAAU/P,UAAU6oC,qBAAuB,WAC1C,OAAOlmC,KAAKoK,cAAcjB,mBAC3B,EAEAiE,EAAU/P,UAAU8oC,gBAAkB,WACrC,GAAInmC,KAAKkE,UAAU,cAAe,MAAO,CACxC,OAAOlE,KAAKmE,QAAQkG,YAAY+7B,aAAapmC,KAAKoK,cAAczB,aAClE,CACA,EAEAyE,EAAU/P,UAAUgpC,gBAAkB,SAAUv5B,GAC/C,GAAI9M,KAAKkE,UAAU,cAAe,MAAO,CACxClE,KAAKoK,cAAchF,WAAWpF,KAAKmE,QAAQkG,YAAYi8B,gBAAgBtmC,KAAKoD,QAAQX,QAASqK,IAC7F,OAAO,IACT,CACC,OAAO,KACR,EAEAM,EAAU/P,UAAUkpC,WAAa,SAAU1hC,GAC1C,IAAIsB,EAASnG,KAAKoK,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACXA,EAAO4H,OAEP,GAAI/N,KAAKoD,QAAQuC,kBAAoB3F,KAAKkE,UAAU,mBAAoB,MAAO,CAC9ElE,KAAKmE,QAAQwB,iBAAiB6H,QACjC,CACA,KAAQ,CACNzB,QAAQC,KAAK,gDAAiDnH,GAC9D,OAAO,KACT,CACA,EAEAuI,EAAU/P,UAAUmpC,WAAa,SAAU3hC,GAC1C,IAAIsB,EAASnG,KAAKoK,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACXA,EAAO6H,OAEP,GAAIhO,KAAKoD,QAAQuC,kBAAoB3F,KAAKkE,UAAU,mBAAoB,MAAO,CAC9ElE,KAAKmE,QAAQwB,iBAAiB6H,QACjC,CACA,KAAQ,CACNzB,QAAQC,KAAK,gDAAiDnH,GAC9D,OAAO,KACT,CACA,EAEAuI,EAAU/P,UAAUopC,aAAe,SAAU5hC,GAC5C,IAAIsB,EAASnG,KAAKoK,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACX,GAAIA,EAAOuC,QAAS,CACnBvC,EAAO6H,MACV,KAAS,CACN7H,EAAO4H,MACV,CACA,KAAQ,CACNhC,QAAQC,KAAK,6DAA8DnH,GAC3E,OAAO,KACT,CACA,EAEAuI,EAAU/P,UAAUuP,UAAY,SAAU5G,EAAYC,EAAQpB,GAC7D,IAAI6hC,EAAU1mC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAItF,EAASugC,EAAQt8B,cAAczC,WAAW9C,GAE9C6hC,EAAQt8B,cAAcwC,UAAU5G,EAAYC,EAAQE,GAAQ0U,MAAK,SAAU1U,GAC1EqF,EAAQrF,EAAOmD,eAClB,IAAKwR,OAAM,SAAUC,GAClBtP,EAAOsP,EACV,GACA,GACA,EAEA3N,EAAU/P,UAAUspC,aAAe,SAAU9hC,GAC5C,IAAI+hC,EAAU5mC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAItF,EAASygC,EAAQx8B,cAAczC,WAAW9C,GAE9C,GAAIsB,EAAQ,CACXA,EAAO+H,SAAS2M,MAAK,WACpBrP,GACJ,IAAMsP,OAAM,SAAUC,GAClBtP,EAAOsP,EACX,GACA,KAAS,CACNhP,QAAQC,KAAK,kDAAmDnH,GAChE4G,GACH,CACA,GACA,EAEA2B,EAAU/P,UAAUwpC,uBAAyB,SAAUhiC,EAAOmB,GAC7D,IAAI8gC,EAAU9mC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAItF,EAAS2gC,EAAQ18B,cAAczC,WAAW9C,GAE9C,GAAIsB,EAAQ,CACXA,EAAOkJ,iBAAiBrJ,GAAY6U,MAAK,SAAUjW,GAClD4G,EAAQ5G,EACZ,IAAMkW,OAAM,SAAUC,GAClBtP,EAAOsP,EACX,GACA,KAAS,CACNhP,QAAQC,KAAK,kDAAmDnH,GAChE4G,GACH,CACA,GACA,EAEA2B,EAAU/P,UAAUoM,WAAa,SAAUC,EAAM9H,EAAI+H,GACpD,IAAIo9B,EAAa/mC,KAAKoK,cAAczC,WAAW+B,GAC/C,IAAIoF,EAAW9O,KAAKoK,cAAczC,WAAW/F,GAE7C,GAAImlC,EAAY,CACf,GAAIj4B,EAAU,CACb9O,KAAKoK,cAAcX,WAAWs9B,EAAYj4B,EAAUnF,EACvD,KAAS,CACNoC,QAAQC,KAAK,yCAA0C8C,EAC1D,CACA,KAAQ,CACN/C,QAAQC,KAAK,yCAA0CtC,EACzD,CACA,EAGA0D,EAAU/P,UAAU4N,eAAiB,SAAUpG,EAAOqG,EAAUC,GAC/D,IAAI67B,EAAUhnC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,IAAItF,EAAS6gC,EAAQ58B,cAAczC,WAAW9C,GAE9C,GAAIsB,EAAQ,CACX6gC,EAAQ58B,cAAca,eAAe9E,EAAQ+E,EAAUC,GAAW0P,MAAK,WACtErP,GACJ,IAAMsP,OAAM,SAAUC,GAClBtP,EAAOsP,EACX,GACA,KAAS,CACNhP,QAAQC,KAAK,2CAA4CnH,GACzD4G,EAAO,0CACV,CACA,GACA,EAGA2B,EAAU/P,UAAU0kC,UAAY,SAAU7G,GACzCl7B,KAAKmE,QAAQiP,SAAS2uB,UAAU7G,EACjC,EAEA9tB,EAAU/P,UAAU4pC,UAAY,WAC/B,OAAOjnC,KAAKmE,QAAQiP,SAAS6zB,WAC9B,EAEA75B,EAAU/P,UAAU6pC,QAAU,SAAUhM,GACvC,OAAOl7B,KAAKmE,QAAQiP,SAAS8zB,QAAQhM,EACtC,EAKA9tB,EAAU/P,UAAU0I,OAAS,SAAUoH,GACtCnN,KAAKoK,cAAcrE,OAAOoH,GAC1BnN,KAAKwC,WAAWuD,OAAOoH,EACxB,EAEAC,EAAU/P,UAAU8yB,UAAY,SAAU9oB,GAEzC,GAAIrH,KAAKwC,WAAW+Y,aAAe,UAAW,CAC7Cvb,KAAKoD,QAAQiE,OAAS7F,MAAM6F,GAAUA,EAASA,EAAS,KACxDrH,KAAKsC,QAAQ0B,MAAMqD,OAASrH,KAAKoD,QAAQiE,OACzCrH,KAAKwC,WAAWwa,gBAChBhd,KAAKwC,WAAWuD,QAClB,KAAQ,CACNgG,QAAQC,KAAK,6DACf,CACA,EAKAoB,EAAU/P,UAAU6kC,QAAU,SAAUiF,EAAU9pB,GACjD,GAAIrd,KAAKkE,UAAU,OAAQ,MAAO,CACjClE,KAAKmE,QAAQmR,KAAK4sB,QAAQiF,EAAU9pB,GACpCrd,KAAKwC,WAAW6hB,eAClB,CACA,EAEAjX,EAAU/P,UAAU+pC,WAAa,WAChC,GAAIpnC,KAAKkE,UAAU,OAAQ,MAAO,CACjC,OAAOlE,KAAKmE,QAAQmR,KAAKqO,SAC3B,CACA,EAEAvW,EAAU/P,UAAUgqC,UAAY,WAC/B,GAAIrnC,KAAKkE,UAAU,OAAQ,MAAO,CACjClE,KAAKmE,QAAQmR,KAAKgK,QAClBtf,KAAKwC,WAAW6hB,eAClB,CACA,EAKAjX,EAAU/P,UAAU8kC,UAAY,SAAUt9B,EAAO8I,EAAM5P,EAAOwZ,GAC7D,GAAIvX,KAAKkE,UAAU,SAAU,MAAO,CACnClE,KAAKmE,QAAQqK,OAAO2zB,UAAUt9B,EAAO8I,EAAM5P,EAAOwZ,GAClDvX,KAAKwC,WAAW0hB,eAClB,CACA,EAGA9W,EAAU/P,UAAUiqC,cAAgB,WACnC,GAAItnC,KAAKkE,UAAU,SAAU,MAAO,CACnClE,KAAKwC,WAAW0hB,eAClB,CACA,EAGA9W,EAAU/P,UAAUkqC,UAAY,SAAU1iC,EAAO8I,EAAM5P,EAAOwZ,GAC7D,GAAIvX,KAAKkE,UAAU,SAAU,MAAO,CACnClE,KAAKmE,QAAQqK,OAAO+4B,UAAU1iC,EAAO8I,EAAM5P,EAAOwZ,GAClDvX,KAAKwC,WAAW0hB,eAClB,CACA,EAGA9W,EAAU/P,UAAU0mB,WAAa,SAAUyjB,GAC1C,GAAIxnC,KAAKkE,UAAU,SAAU,MAAO,CACnC,OAAOlE,KAAKmE,QAAQqK,OAAOuV,WAAWyjB,EACxC,CACA,EAEAp6B,EAAU/P,UAAUoR,qBAAuB,SAAU5J,GACpD,GAAI7E,KAAKkE,UAAU,SAAU,MAAO,CACnC,IAAIiC,EAASnG,KAAKoK,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACXnG,KAAKmE,QAAQqK,OAAOC,qBAAqBtI,EAC5C,KAAS,CACN4F,QAAQC,KAAK,wDAAyDnH,GACtE,OAAO,KACV,CACA,CACA,EAEAuI,EAAU/P,UAAUsR,qBAAuB,SAAU9J,GACpD,GAAI7E,KAAKkE,UAAU,SAAU,MAAO,CACnC,IAAIiC,EAASnG,KAAKoK,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACX,OAAOnG,KAAKmE,QAAQqK,OAAOG,qBAAqBxI,EACnD,KAAS,CACN4F,QAAQC,KAAK,kDAAmDnH,EACnE,CACA,CACA,EAEAuI,EAAU/P,UAAUuR,qBAAuB,SAAU/J,EAAO9G,GAC3D,GAAIiC,KAAKkE,UAAU,SAAU,MAAO,CACnC,IAAIiC,EAASnG,KAAKoK,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACXnG,KAAKmE,QAAQqK,OAAOI,qBAAqBzI,EAAQpI,EACpD,KAAS,CACNgO,QAAQC,KAAK,kDAAmDnH,GAChE,OAAO,KACV,CACA,CACA,EAEAuI,EAAU/P,UAAUoqC,iBAAmB,WACtC,GAAIznC,KAAKkE,UAAU,SAAU,MAAO,CACnC,OAAOlE,KAAKmE,QAAQqK,OAAOi5B,kBAC7B,CACA,EAGAr6B,EAAU/P,UAAUqqC,aAAe,SAAU7iC,EAAO8I,EAAM5P,GACzD,GAAIiC,KAAKkE,UAAU,SAAU,MAAO,CACnClE,KAAKmE,QAAQqK,OAAOk5B,aAAa7iC,EAAO8I,EAAM5P,GAC9CiC,KAAKwC,WAAW0hB,eAClB,CACA,EAGA9W,EAAU/P,UAAUsqC,YAAc,SAAUH,GAC3C,GAAIxnC,KAAKkE,UAAU,SAAU,MAAO,CACnClE,KAAKmE,QAAQqK,OAAOm5B,YAAYH,GAChCxnC,KAAKwC,WAAW0hB,eAClB,CACA,EAGA9W,EAAU/P,UAAUuqC,kBAAoB,WACvC,GAAI5nC,KAAKkE,UAAU,SAAU,MAAO,CACnClE,KAAKmE,QAAQqK,OAAOo5B,oBACpB5nC,KAAKwC,WAAW0hB,eAClB,CACA,EAGA9W,EAAU/P,UAAUkiB,UAAY,SAAU5U,GACzC,GAAI3K,KAAKkE,UAAU,YAAa,MAAO,CACtC,GAAIyG,IAAS,KAAM,CAClBoB,QAAQC,KAAK,+GACbrB,EAAO,QACV,CACE3K,KAAKmE,QAAQob,UAAU2N,WAAWviB,EACpC,CACA,EAEAyC,EAAU/P,UAAUwqC,YAAc,SAAUl9B,GAC3C,GAAI3K,KAAKkE,UAAU,YAAa,MAAO,CACtClE,KAAKmE,QAAQob,UAAUsF,aAAala,EACtC,CACA,EAEAyC,EAAU/P,UAAUyqC,gBAAkB,SAAUpjC,GAC/C,GAAI1E,KAAKkE,UAAU,YAAa,MAAO,CACtClE,KAAKmE,QAAQob,UAAU8N,UAAU3oB,EACnC,CACA,EAEA0I,EAAU/P,UAAU0qC,gBAAkB,WACrC,GAAI/nC,KAAKkE,UAAU,YAAa,MAAO,CACtC,OAAOlE,KAAKmE,QAAQob,UAAUwoB,iBAChC,CACA,EAEA36B,EAAU/P,UAAU2qC,gBAAkB,WACrC,GAAIhoC,KAAKkE,UAAU,YAAa,MAAO,CACtC,OAAOlE,KAAKmE,QAAQob,UAAUyoB,iBAChC,CACA,EAGA56B,EAAU/P,UAAU4qC,gBAAkB,WACrC,GAAIjoC,KAAKkE,UAAU,WAAY,MAAO,CACrC,OAAOlE,KAAKmE,QAAQqL,SAASy4B,iBAC/B,CACA,EAEA76B,EAAU/P,UAAU6qC,oBAAsB,SAAUn9B,GACnD,IAAIo9B,EAAUnoC,KAEd,GAAIA,KAAKkE,UAAU,WAAY,MAAO,CAErC,IAAK6G,EAAO,CACXA,EAAQ/K,KAAKmE,QAAQqL,SAASy4B,iBACjC,CAEE,IAAKpoC,MAAMkF,QAAQgG,GAAQ,CAC1BA,EAAQ,CAACA,EACZ,CAEEA,EAAM7F,SAAQ,SAAU8F,GACvBm9B,EAAQhkC,QAAQqL,SAAS8jB,gBAAgBtoB,EAAKlD,WACjD,GACA,CACA,EAEAsF,EAAU/P,UAAUmS,SAAW,SAAUzE,GACxC,IAAI9B,EAAS,GAGbjJ,KAAKwC,WAAWmI,KAAKzF,SAAQ,SAAUR,GACtC,IAAIyxB,EAAQzxB,EAAI8K,WAEhB,GAAI2mB,IAAU,KAAM,CACnBltB,EAASA,EAAO4B,OAAOsrB,EAC1B,CACA,IAEC,OAAOltB,EAAO7K,OAAS6K,EAAS,IACjC,EAIAmE,EAAU/P,UAAU+qC,WAAa,SAAUjnC,GAC1C,GAAInB,KAAKoD,QAAQ2b,YAAc/e,KAAKkE,UAAU,QAAS,CACtDlE,KAAKmE,QAAQod,KAAK6mB,WAAWjnC,EAC/B,KAAQ,CACN,OAAO,KACT,CACA,EAEAiM,EAAU/P,UAAU8mB,QAAU,SAAU5C,GACvC,GAAIvhB,KAAKoD,QAAQ2b,YAAc/e,KAAKkE,UAAU,QAAS,CACtD,OAAOlE,KAAKmE,QAAQod,KAAK4C,QAAQ5C,EACnC,KAAQ,CACN,OAAO,IAAIhW,SAAQ,SAAUC,EAASC,GACrCA,GACH,GACA,CACA,EAEA2B,EAAU/P,UAAUyvB,aAAe,SAAUpoB,GAC5C,IAAI2jC,EAAUroC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,GAAI48B,EAAQjlC,QAAQ2b,YAAcspB,EAAQnkC,UAAU,QAAS,CAC5DQ,EAAM2jC,EAAQ7lC,WAAWkb,QAAQhZ,GAEjC,GAAIA,EAAK,CACR2jC,EAAQlkC,QAAQod,KAAKuL,aAAapoB,GAAKmW,MAAK,WAC3CrP,GACL,IAAOsP,OAAM,WACRrP,GACL,GACA,KAAU,CACNA,GACJ,CACA,KAAS,CACNA,GACH,CACA,GACA,EAEA2B,EAAU/P,UAAUirC,YAAc,SAAUC,GAC3C,GAAIvoC,KAAKoD,QAAQ2b,YAAc/e,KAAKkE,UAAU,QAAS,CACtDlE,KAAKmE,QAAQod,KAAK+mB,YAAYC,GAC9BvoC,KAAKmE,QAAQod,KAAK4C,QAAQ,GAAGtJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACtE,KAAQ,CACN,OAAO,KACT,CACA,EAEA1N,EAAU/P,UAAUmkB,YAAc,WACjC,GAAIxhB,KAAKoD,QAAQ2b,YAAc/e,KAAKkE,UAAU,OAAQ,MAAO,CAC5D,OAAOlE,KAAKmE,QAAQod,KAAKC,aAC3B,CACA,EAEApU,EAAU/P,UAAUmrC,aAAe,WAClC,GAAIxoC,KAAKoD,QAAQ2b,YAAc/e,KAAKkE,UAAU,QAAS,CACtDlE,KAAKmE,QAAQod,KAAKinB,cACpB,KAAQ,CACN,OAAO,KACT,CACA,EAEAp7B,EAAU/P,UAAUogB,SAAW,WAC9B,GAAIzd,KAAKoD,QAAQ2b,YAAc/e,KAAKkE,UAAU,QAAS,CACtDlE,KAAKmE,QAAQod,KAAK9D,UACpB,KAAQ,CACN,OAAO,KACT,CACA,EAEArQ,EAAU/P,UAAUorC,QAAU,WAC7B,GAAIzoC,KAAKoD,QAAQ2b,YAAc/e,KAAKkE,UAAU,QAAS,CACtD,OAAOlE,KAAKmE,QAAQod,KAAKknB,SAC3B,KAAQ,CACN,OAAO,KACT,CACA,EAEAr7B,EAAU/P,UAAUqrC,WAAa,WAChC,GAAI1oC,KAAKoD,QAAQ2b,YAAc/e,KAAKkE,UAAU,QAAS,CACtD,OAAOlE,KAAKmE,QAAQod,KAAKmnB,YAC3B,KAAQ,CACN,OAAO,KACT,CACA,EAIAt7B,EAAU/P,UAAUsrC,WAAa,SAAUC,GAC1C,GAAI5oC,KAAKkE,UAAU,YAAa,MAAO,CACtClE,KAAKoD,QAAQ6Z,QAAU2rB,EACvB5oC,KAAKmE,QAAQ+Y,UAAU5Z,aACvBtD,KAAKwC,WAAWmd,kBAAkB,WAElC,GAAI3f,KAAKoD,QAAQiH,aAAerK,KAAKkE,UAAU,cAAe,OAASlE,KAAKmE,QAAQkG,YAAYC,OAAOwgB,MAAO,CAC7G9qB,KAAKmE,QAAQkG,YAAYE,KAAK,QACjC,CACA,KAAQ,CACN,OAAO,KACT,CACA,EAEA6C,EAAU/P,UAAUwrC,eAAiB,SAAU5L,GAC9C,GAAIj9B,KAAKkE,UAAU,YAAa,MAAO,CACtClE,KAAKoD,QAAQ65B,YAAcA,EAC3Bj9B,KAAKmE,QAAQ+Y,UAAU5Z,aACvBtD,KAAKwC,WAAWmd,kBAAkB,WAElC,GAAI3f,KAAKoD,QAAQiH,aAAerK,KAAKkE,UAAU,cAAe,OAASlE,KAAKmE,QAAQkG,YAAYC,OAAOwgB,MAAO,CAC7G9qB,KAAKmE,QAAQkG,YAAYE,KAAK,QACjC,CACA,KAAQ,CACN,OAAO,KACT,CACA,EAEA6C,EAAU/P,UAAUyrC,kBAAoB,SAAUC,GACjD,GAAI/oC,KAAKkE,UAAU,YAAa,MAAO,CACtClE,KAAKoD,QAAQ45B,eAAiB+L,EAC9B/oC,KAAKmE,QAAQ+Y,UAAU5Z,aACvB,GAAItD,KAAKoD,QAAQ6Z,QAAS,CACzBjd,KAAKwC,WAAWmd,kBAAkB,SAElC,GAAI3f,KAAKoD,QAAQiH,aAAerK,KAAKkE,UAAU,cAAe,OAASlE,KAAKmE,QAAQkG,YAAYC,OAAOwgB,MAAO,CAC7G9qB,KAAKmE,QAAQkG,YAAYE,KAAK,QAClC,CACA,KAAS,CACNwB,QAAQC,KAAK,+DAChB,CACA,KAAQ,CACN,OAAO,KACT,CACA,EAEAoB,EAAU/P,UAAU2rC,eAAiB,SAAUD,GAC9C,GAAI/oC,KAAKkE,UAAU,YAAa,MAAO,CACtClE,KAAKoD,QAAQ85B,YAAc6L,EAC3B/oC,KAAKmE,QAAQ+Y,UAAU5Z,aACvB,GAAItD,KAAKoD,QAAQ6Z,QAAS,CACzBjd,KAAKwC,WAAWmd,kBAAkB,SAElC,GAAI3f,KAAKoD,QAAQiH,aAAerK,KAAKkE,UAAU,cAAe,OAASlE,KAAKmE,QAAQkG,YAAYC,OAAOwgB,MAAO,CAC7G9qB,KAAKmE,QAAQkG,YAAYE,KAAK,QAClC,CACA,KAAS,CACNwB,QAAQC,KAAK,+DAChB,CACA,KAAQ,CACN,OAAO,KACT,CACA,EAEAoB,EAAU/P,UAAU0tB,UAAY,SAAUge,GACzC,GAAI/oC,KAAKkE,UAAU,YAAa,MAAO,CACtC,OAAOlE,KAAKmE,QAAQ+Y,UAAU6N,UAAU,KAC1C,KAAQ,CACN,OAAO,KACT,CACA,EAGA3d,EAAU/P,UAAU4rC,eAAiB,WACpC,GAAIjpC,KAAKkE,UAAU,YAAa,MAAO,CACtC,OAAOlE,KAAKoD,QAAQ6Z,QAAUjd,KAAKmE,QAAQ+Y,UAAU+rB,iBAAmBjpC,KAAKygB,SAC/E,CACA,EAEArT,EAAU/P,UAAU6rC,eAAiB,WACpC,GAAIlpC,KAAKkE,UAAU,OAAQ,MAAO,CACjC,OAAOlE,KAAKmE,QAAQ2R,KAAKozB,gBAC3B,CACA,EAEA97B,EAAU/P,UAAU8rC,gBAAkB,SAAUp+B,GAC/C,IAAIq+B,EAAUppC,KAEd,GAAIA,KAAKkE,UAAU,OAAQ,MAAO,CAEjC,IAAK6G,EAAO,CACXA,EAAQ/K,KAAKmE,QAAQ2R,KAAKozB,gBAC7B,CAEE,IAAKrpC,MAAMkF,QAAQgG,GAAQ,CAC1BA,EAAQ,CAACA,EACZ,CAEEA,EAAM7F,SAAQ,SAAU8F,GACvBo+B,EAAQjlC,QAAQ2R,KAAKsd,YAAYpoB,EAAKlD,WACzC,GACA,CACA,EAGAsF,EAAU/P,UAAUgsC,eAAiB,WACpC,GAAIrpC,KAAKkE,UAAU,cAAe,MAAO,CACxC,OAAOlE,KAAKmE,QAAQ0F,YAAYy/B,YAClC,KAAQ,CACN,OAAO,KACT,CACA,EAEAl8B,EAAU/P,UAAUyM,OAAS,WAC5B,GAAI9J,KAAKkE,UAAU,cAAe,MAAO,CACxClE,KAAKmE,QAAQ0F,YAAY0/B,UAAUvpC,KAAKwC,WAAWuH,WACrD,CACA,EAIAqD,EAAU/P,UAAUmsC,aAAe,WAClC,IAAIx+B,EAAO,MAEX,GAAIhL,KAAKkE,UAAU,OAAQ,MAAO,CACjC8G,EAAOhL,KAAKmE,QAAQ2R,KAAKkE,YAEzB,GAAIhP,EAAM,CACT,OAAOA,EAAKuoB,MAAMgD,MACrB,CACA,CAEC,OAAO,KACR,EAEAnpB,EAAU/P,UAAUosC,aAAe,WAClC,IAAIz+B,EAAO,MAEX,GAAIhL,KAAKkE,UAAU,OAAQ,MAAO,CACjC8G,EAAOhL,KAAKmE,QAAQ2R,KAAKkE,YAEzB,GAAIhP,EAAM,CACT,OAAOA,EAAKuoB,MAAM+C,MACrB,CACA,CAEC,OAAO,KACR,EAEAlpB,EAAU/P,UAAUqsC,aAAe,WAClC,IAAI1+B,EAAO,MAEX,GAAIhL,KAAKkE,UAAU,OAAQ,MAAO,CACjC8G,EAAOhL,KAAKmE,QAAQ2R,KAAKkE,YAEzB,GAAIhP,EAAM,CACTqJ,EAAEwgB,iBACF,OAAO7pB,EAAKuoB,MAAM3vB,MACrB,CACA,CAEC,OAAO,KACR,EAEAwJ,EAAU/P,UAAUssC,cAAgB,WACnC,IAAI3+B,EAAO,MAEX,GAAIhL,KAAKkE,UAAU,OAAQ,MAAO,CACjC8G,EAAOhL,KAAKmE,QAAQ2R,KAAKkE,YAEzB,GAAIhP,EAAM,CACTqJ,EAAEwgB,iBACF,OAAO7pB,EAAKuoB,MAAMU,OACrB,CACA,CAEC,OAAO,KACR,EAEA7mB,EAAU/P,UAAUusC,WAAa,WAChC,IAAI5+B,EAAO,MAEX,GAAIhL,KAAKkE,UAAU,OAAQ,MAAO,CACjC8G,EAAOhL,KAAKmE,QAAQ2R,KAAKkE,YAEzB,GAAIhP,EAAM,CACTqJ,EAAEwgB,iBACF,OAAO7pB,EAAKuoB,MAAMiD,IACrB,CACA,CAEC,OAAO,KACR,EAEAppB,EAAU/P,UAAUwsC,aAAe,WAClC,IAAI7+B,EAAO,MAEX,GAAIhL,KAAKkE,UAAU,OAAQ,MAAO,CACjC8G,EAAOhL,KAAKmE,QAAQ2R,KAAKkE,YAEzB,GAAIhP,EAAM,CACTqJ,EAAEwgB,iBACF,OAAO7pB,EAAKuoB,MAAMkD,MACrB,CACA,CAEC,OAAO,KACR,EAGArpB,EAAU/P,UAAUysC,KAAO,WAC1B,GAAI9pC,KAAKoD,QAAQic,SAAWrf,KAAKkE,UAAU,UAAW,MAAO,CAC5D,OAAOlE,KAAKmE,QAAQkb,QAAQyqB,MAC9B,KAAQ,CACN,OAAO,KACT,CACA,EAEA18B,EAAU/P,UAAU0sC,KAAO,WAC1B,GAAI/pC,KAAKoD,QAAQic,SAAWrf,KAAKkE,UAAU,UAAW,MAAO,CAC5D,OAAOlE,KAAKmE,QAAQkb,QAAQ0qB,MAC9B,KAAQ,CACN,OAAO,KACT,CACA,EAEA38B,EAAU/P,UAAU2sC,mBAAqB,WACxC,GAAIhqC,KAAKoD,QAAQic,SAAWrf,KAAKkE,UAAU,UAAW,MAAO,CAC5D,OAAOlE,KAAKmE,QAAQkb,QAAQ2qB,oBAC9B,KAAQ,CACN,OAAO,KACT,CACA,EAEA58B,EAAU/P,UAAU4sC,mBAAqB,WACxC,GAAIjqC,KAAKoD,QAAQic,SAAWrf,KAAKkE,UAAU,UAAW,MAAO,CAC5D,OAAOlE,KAAKmE,QAAQkb,QAAQ4qB,oBAC9B,KAAQ,CACN,OAAO,KACT,CACA,EAEA78B,EAAU/P,UAAU6sC,aAAe,WAClC,GAAIlqC,KAAKoD,QAAQic,SAAWrf,KAAKkE,UAAU,UAAW,MAAO,CAC5D,OAAOlE,KAAKmE,QAAQkb,QAAQC,OAC9B,KAAQ,CACN,OAAO,KACT,CACA,EAIAlS,EAAU/P,UAAU8sC,SAAW,SAAUx8B,EAAMy8B,EAAUhnC,EAAS4F,GACjE,GAAIhJ,KAAKkE,UAAU,WAAY,MAAO,CACrClE,KAAKmE,QAAQgmC,SAASA,SAASx8B,EAAMy8B,EAAUhnC,EAAS4F,EAC1D,CACA,EAEAoE,EAAU/P,UAAUgtC,cAAgB,SAAU18B,EAAMy8B,EAAUhnC,EAAS4F,GACtE,GAAIhJ,KAAKkE,UAAU,WAAY,MAAO,CACrClE,KAAKmE,QAAQgmC,SAASA,SAASx8B,EAAMy8B,EAAUhnC,EAAS4F,EAAQ,KAClE,CACA,EAIAoE,EAAU/P,UAAUitC,WAAa,SAAUpoC,EAAOqoC,EAAQzpB,EAAQxc,GACjEtE,KAAKmE,QAAQszB,MAAM+S,QAAQtoC,EAAOqoC,EAAQzpB,EAAQxc,EACnD,EAKA8I,EAAU/P,UAAUotC,eAAiB,GAGrCr9B,EAAU/P,UAAUqtC,aAAe,SAAUC,EAAMC,EAAU7B,GAE5D,GAAI37B,EAAU/P,UAAUotC,eAAeE,GAAO,CAC7C,IAAIE,EAASz9B,EAAU/P,UAAUotC,eAAeE,GAAMttC,UAAUutC,GAEhE,GAAIC,EAAQ,CACX,WAAY9B,IAAW,YAAc,YAAcvpC,EAAQupC,KAAY,SAAU,CAChF,IAAK,IAAItrC,KAAOsrC,EAAQ,CACvB8B,EAAOptC,GAAOsrC,EAAOtrC,EAC1B,CACA,KAAU,CACNsO,QAAQC,KAAK,0DACjB,CACA,KAAS,CACND,QAAQC,KAAK,0CAA2C4+B,EAC3D,CACA,KAAQ,CACN7+B,QAAQC,KAAK,wCAAyC2+B,EACxD,CACA,EAGAv9B,EAAU/P,UAAUytC,eAAiB,SAAUH,EAAMJ,GAEpDn9B,EAAU/P,UAAUotC,eAAeE,GAAQJ,CAC5C,EAGAn9B,EAAU/P,UAAU+jC,YAAc,WACjCphC,KAAKmE,QAAU,GAEf,IAAK,IAAIwmC,KAAQv9B,EAAU/P,UAAUotC,eAAgB,CACpDzqC,KAAKmE,QAAQwmC,GAAQ,IAAIv9B,EAAU/P,UAAUotC,eAAeE,GAAM3qC,KACpE,CACA,EAGAoN,EAAU/P,UAAU6G,UAAY,SAAU6mC,EAAQC,GACjD,GAAIhrC,KAAKmE,QAAQ4mC,GAAS,CACzB,OAAO,IACT,KAAQ,CACN,GAAIC,EAAU,CACbj/B,QAAQ8T,MAAM,mCAAqCkrB,EACtD,CACE,OAAO,KACT,CACA,EAEA39B,EAAU/P,UAAUgQ,QAAU,CAE7BC,UAAW,SAASA,EAAUvK,GAC7B,QAASA,EAAG8I,aAAe,GAAK9I,EAAGyV,cAAgB,EACrD,EAECgG,SAAU,SAASA,EAASzb,GAC3B,IAAIkoC,EAAMloC,EAAG6lB,wBAEb,MAAO,CACNxL,IAAK6tB,EAAI7tB,IAAM+M,OAAO+gB,YAAcloC,SAASmoC,gBAAgBC,UAC7DxnC,KAAMqnC,EAAIrnC,KAAOumB,OAAOkhB,YAAcroC,SAASmoC,gBAAgBG,WAElE,EAECC,UAAW,SAASA,EAAU5rC,GAC7B,IAAI6rC,EAAQpuC,OAAOqE,OAAO5B,MAAMkF,QAAQpF,GAAO,GAAK,GAAIA,GAExD,IAAK,IAAI6F,KAAK7F,EAAK,CAClB,GAAIA,EAAI6F,IAAM,MAAQhG,EAAQG,EAAI6F,MAAQ,SAAU,CACnD,GAAI7F,EAAI6F,aAAcimC,KAAM,CAC3BD,EAAMhmC,GAAK,IAAIimC,KAAK9rC,EAAI6F,GAC7B,KAAW,CACNgmC,EAAMhmC,GAAKxF,KAAKurC,UAAU5rC,EAAI6F,GACnC,CACA,CACA,CACE,OAAOgmC,CACT,GAGAp+B,EAAU/P,UAAUo6B,MAAQ,CAC3BiU,OAAQ,GACRhU,SAAU,SAASA,EAASx1B,GAC3BkL,EAAU/P,UAAUo6B,MAAMiU,OAAOzmC,KAAK/C,EACxC,EACCogC,WAAY,SAASA,EAAWpgC,GAC/B,IAAI/D,EAAQiP,EAAU/P,UAAUo6B,MAAMiU,OAAO5qC,QAAQoB,GAErD,GAAI/D,GAAS,EAAG,CACfiP,EAAU/P,UAAUo6B,MAAMiU,OAAOhlC,OAAOvI,EAAO,EAClD,CACA,EACCwtC,YAAa,SAASA,EAAYC,EAAO5yB,GACxC,IAAI6yB,EAAU,GACVzjC,EACApD,EAEJ,UAAW4mC,IAAU,SAAU,CAC9BxjC,EAAUpF,SAAS8oC,iBAAiBF,GAEpC,GAAIxjC,EAAQhK,OAAQ,CACnB,IAAK,IAAIoH,EAAI,EAAGA,EAAI4C,EAAQhK,OAAQoH,IAAK,CACxCR,EAAQoI,EAAU/P,UAAUo6B,MAAMsU,aAAa3jC,EAAQ5C,IAEvD,GAAIR,EAAO,CACV6mC,EAAQ5mC,KAAKD,EACnB,CACA,CACA,CACA,MAAS,UAAW+C,cAAgB,aAAe6jC,aAAiB7jC,aAAe6jC,aAAiBx+B,EAAW,CAC5GpI,EAAQoI,EAAU/P,UAAUo6B,MAAMsU,aAAaH,GAE/C,GAAI5mC,EAAO,CACV6mC,EAAQ5mC,KAAKD,EACjB,CACA,MAAS,GAAInF,MAAMkF,QAAQ6mC,GAAQ,CAChCA,EAAM1mC,SAAQ,SAAUic,GACvB0qB,EAAUA,EAAQhhC,OAAOuC,EAAU/P,UAAUo6B,MAAMkU,YAAYxqB,GACnE,GACA,KAAS,CACN,IAAKnI,EAAQ,CACZjN,QAAQC,KAAK,4CAA6C4/B,EAC9D,CACA,CAEE,OAAOC,CACT,EACCE,aAAc,SAASA,EAAazpC,GACnC,OAAO8K,EAAU/P,UAAUo6B,MAAMiU,OAAOlrC,MAAK,SAAU0B,GACtD,OAAOI,aAAmB8K,EAAYlL,IAAUI,EAAUJ,EAAMI,UAAYA,CAC/E,GACA,GAGA8K,EAAU/P,UAAU2uC,UAAY,SAAUJ,GACzC,IAAIC,EAAUz+B,EAAU/P,UAAUo6B,MAAMkU,YAAYC,EAAO,MAC3D,OAAO/rC,MAAMkF,QAAQ8mC,KAAaA,EAAQztC,OAAS,MAAQytC,CAC5D,EAEA,IAAII,EAAS,SAASA,EAAO/pC,GAE5BlC,KAAKkC,MAAQA,EAEblC,KAAKksC,KAAO,IACb,EAIAD,EAAO5uC,UAAUiG,WAAa,SAAUwJ,GAEvC,GAAI9M,KAAKmsC,MAAMr/B,GAAS,CAEvB9M,KAAKksC,KAAOp/B,CACd,KAAQ,CAENf,QAAQC,KAAK,8DAAgEc,GAE7E9M,KAAKksC,KAAO,SACd,CAEClsC,KAAKkC,MAAMI,QAAQ8P,aAAa,mBAAoBpS,KAAKksC,KAC1D,EAEAD,EAAO5uC,UAAU0P,QAAU,WAE1B,OAAO/M,KAAKksC,IACb,EAIAD,EAAO5uC,UAAUyP,OAAS,WAEzB9M,KAAKmsC,MAAMnsC,KAAKksC,MAAMxuC,KAAKsC,KAAMA,KAAKkC,MAAMkI,cAAc1H,gBAE1D,GAAI1C,KAAKksC,KAAKprC,QAAQ,aAAe,GAAKd,KAAKkC,MAAMkB,QAAQiH,aAAerK,KAAKkC,MAAMgC,UAAU,cAAe,OAASlE,KAAKkC,MAAMiC,QAAQkG,YAAYC,OAAO7H,QAAS,CAEvKzC,KAAKkC,MAAMiC,QAAQkG,YAAYE,KAAK,UACtC,CACA,EAIA0hC,EAAO5uC,UAAU8uC,MAAQ,CAIxBC,QAAW,SAASA,EAAQ3pC,GAE3B,GAAIzC,KAAKkC,MAAMkB,QAAQwC,cAAe,CAErC5F,KAAKkC,MAAM2D,QAAQmlB,uBACtB,KAAS,CAENvoB,EAAQyC,SAAQ,SAAUiB,GAEzBA,EAAO6G,mBACX,GACA,CAEE,GAAIhN,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FlE,KAAKkC,MAAMiC,QAAQwB,iBAAiB6H,QACvC,CACA,EAIC6+B,YAAe,SAASA,EAAY5pC,GAEnCA,EAAQyC,SAAQ,SAAUiB,GAEzBA,EAAO6G,mBACV,IAEE,GAAIhN,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FlE,KAAKkC,MAAMiC,QAAQwB,iBAAiB6H,QACvC,CACA,EAIC8+B,aAAgB,SAASA,EAAa7pC,GAErCA,EAAQyC,SAAQ,SAAUiB,GAEzBA,EAAO6G,mBACV,IAEE,GAAIhN,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FlE,KAAKkC,MAAMiC,QAAQwB,iBAAiB6H,QACvC,CACA,EAIC++B,eAAkB,SAASA,EAAe9pC,GACzC,IAAI+pC,EAAUxsC,KAEd,IAAIysC,EAAY,EACZtjB,EAAanpB,KAAKkC,MAAMM,WAAWF,QAAQyB,YAC3C2oC,EAAM,EACNC,EAAU,MAEdlqC,EAAQyC,SAAQ,SAAUiB,EAAQX,GAEjC,IAAKW,EAAOqL,WAAY,CAEvBrL,EAAO6G,mBACX,CAEG,GAAIw/B,EAAQtqC,MAAMkB,QAAQuC,iBAAmBQ,EAAOhC,QAAQyoC,WAAWlkC,QAAUvC,EAAOuC,QAAS,CAEhGikC,EAAUxmC,CACd,CAEG,GAAIA,EAAOuC,QAAS,CAEnB+jC,GAAatmC,EAAOoD,UACxB,CACA,IAEE,GAAIojC,EAAS,CAEZD,EAAMvjB,EAAasjB,EAAYE,EAAQpjC,WAEvC,GAAIvJ,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FyoC,EAAQp9B,SAAS,GAEjBvP,KAAKkC,MAAMiC,QAAQwB,iBAAiB6H,QACxC,CAEG,GAAIk/B,EAAM,EAAG,CAEZC,EAAQp9B,SAASm9B,EACrB,KAAU,CAENC,EAAQ3/B,mBACZ,CACA,KAAS,CAEN,GAAIhN,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FlE,KAAKkC,MAAMiC,QAAQwB,iBAAiB6H,QACxC,CACA,CACA,EAICq/B,WAAc,SAASA,EAAWpqC,GAEjC,IAAI4C,EAAOrF,KAEX,IAAIoM,EAAa/G,EAAKnD,MAAMI,QAAQyB,YAEpC,IAAIsI,EAAa,EAEjB,IAAIygC,EAAY,EAEhB,IAAIC,EAAgB,EAEpB,IAAIC,EAAe,EAEnB,IAAIC,EAAc,GAElB,IAAIC,EAAqB,GAEzB,IAAIC,EAAkB,EAEtB,IAAIC,EAAgB,EAEpB,IAAIC,EAAU,EAGd,SAASC,EAAU9jC,GAElB,IAAIiD,EAEJ,UAAWjD,GAAS,SAAU,CAE7B,GAAIA,EAAM1I,QAAQ,MAAQ,EAAG,CAE5B2L,EAAWL,EAAa,IAAMO,SAASnD,EAC5C,KAAW,CAENiD,EAAWE,SAASnD,EACzB,CACA,KAAU,CAENiD,EAAWjD,CACf,CAEG,OAAOiD,CACV,CAIE,SAAS8gC,EAAa9qC,EAAS+qC,EAAW/gC,EAAUghC,GAEnD,IAAIC,EAAe,GACfC,EAAgB,EAChBC,EAAiB,EACjBC,EAAe,EACfC,EAAyBf,EACzBL,EAAM,EACNqB,EAAc,EACdC,EAAgB,GAEpB,SAASC,EAASrpC,GAEjB,OAAO6H,GAAY7H,EAAIuB,OAAOH,WAAWkoC,WAAa,EAC1D,CAEG,SAASC,EAAWvpC,GAEnB,OAAO0oC,EAAU1oC,EAAI4E,OAASiD,GAAY7H,EAAIuB,OAAOH,WAAWooC,aAAe,EACnF,CAEG3rC,EAAQyC,SAAQ,SAAUN,EAAKY,GAE9B,IAAIgE,EAAQikC,EAAaU,EAAWvpC,GAAOqpC,EAASrpC,GAEpD,GAAIA,EAAIuB,OAAOqG,UAAYhD,EAAO,CAEjCkkC,EAAazoC,KAAKL,EACvB,KAAW,CAEN,GAAIA,EAAIuB,OAAOkL,UAAYzM,EAAIuB,OAAOkL,SAAW7H,EAAO,CAEvD5E,EAAI4E,MAAQ5E,EAAIuB,OAAOkL,SAEvBm8B,GAAa5oC,EAAIuB,OAAOkL,SAExBy8B,GAA0BL,EAAa7oC,EAAIuB,OAAOH,WAAWooC,aAAe,EAAIxpC,EAAIuB,OAAOH,WAAWkoC,WAAa,EAEnH,GAAIJ,EAAwB,CAE3BrhC,EAAWvL,KAAKsY,MAAMg0B,EAAYM,EACzC,CACA,KAAY,CAENE,EAAc/oC,KAAKL,GAEnBmpC,GAAeN,EAAa7oC,EAAIuB,OAAOH,WAAWooC,aAAe,EAAIxpC,EAAIuB,OAAOH,WAAWkoC,WAAa,CAC9G,CACA,CACA,IAEG,GAAIR,EAAatvC,OAAQ,CAExBsvC,EAAaxoC,SAAQ,SAAUN,GAE9B+oC,GAAiBF,EAAa7oC,EAAI4E,MAAQ5E,EAAIuB,OAAOqG,SAAW5H,EAAIuB,OAAOqG,SAE3E5H,EAAI4E,MAAQ5E,EAAIuB,OAAOqG,QAC5B,IAEIohC,EAAiBJ,EAAYG,EAE7BE,EAAeE,EAAc7sC,KAAKsY,MAAMo0B,EAAiBG,GAAeH,EAExElB,EAAMkB,EAAiBC,EAAeE,EAEtCrB,GAAOa,EAAaS,EAAeJ,EAAgBC,EAAcJ,EACrE,KAAU,CAENf,EAAMqB,EAAcP,EAAYtsC,KAAKsY,MAAMg0B,EAAYO,GAAeA,EAAcP,EAEpFQ,EAAc9oC,SAAQ,SAAUiB,GAE/BA,EAAOqD,MAAQikC,EAAaU,EAAWhoC,GAAU8nC,EAAS9nC,EAC/D,GACA,CAEG,OAAOumC,CACV,CAEE,GAAI1sC,KAAKkC,MAAMkB,QAAQuC,kBAAoB3F,KAAKkC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FlE,KAAKkC,MAAMiC,QAAQwB,iBAAiB6H,QACvC,CAIE,GAAIxN,KAAKkC,MAAMM,WAAWF,QAAQgK,aAAetM,KAAKkC,MAAMM,WAAWF,QAAQiK,aAAc,CAE5FH,GAAcpM,KAAKkC,MAAMM,WAAWF,QAAQuJ,YAAc7L,KAAKkC,MAAMM,WAAWF,QAAQyB,WAC3F,CAEEtB,EAAQyC,SAAQ,SAAUiB,GAEzB,IAAIqD,EAAOgD,EAAUC,EAErB,GAAItG,EAAOuC,QAAS,CAEnBc,EAAQrD,EAAOH,WAAWwD,MAE1BgD,EAAWG,SAASxG,EAAOqG,UAE3B,GAAIhD,EAAO,CAEViD,EAAW6gC,EAAU9jC,GAErB6C,GAAcI,EAAWD,EAAWC,EAAWD,EAE/C,GAAIrG,EAAOH,WAAWooC,YAAa,CAElClB,EAAmBjoC,KAAK,CAEvBkB,OAAQA,EAERqD,MAAOiD,EAAWD,EAAWC,EAAWD,IAIzC2gC,GAAmBhnC,EAAOH,WAAWooC,WAC3C,CACA,KAAW,CAENnB,EAAYhoC,KAAK,CAEhBkB,OAAQA,EAERqD,MAAO,IAIRujC,GAAiB5mC,EAAOH,WAAWkoC,WAAa,CACrD,CACA,CACA,IAIEpB,EAAY1gC,EAAaC,EAIzB2gC,EAAe9rC,KAAKsY,MAAMszB,EAAYC,GAItC,IAAIM,EAAUE,EAAaN,EAAaH,EAAWE,EAAc,OAIjE,GAAIC,EAAY7uC,QAAUivC,EAAU,EAAG,CAEtCJ,EAAYA,EAAY7uC,OAAS,GAAGoL,QAAU6jC,CACjD,CAIEJ,EAAY/nC,SAAQ,SAAUN,GAE7BkoC,GAAaloC,EAAI4E,KACpB,IAEE4jC,EAAgBlsC,KAAKE,IAAIisC,GAAWP,EAIpC,GAAIM,EAAgB,GAAKD,EAAiB,CAEzCE,EAAUE,EAAaL,EAAoBE,EAAelsC,KAAKsY,MAAM4zB,EAAgBD,GAAkB,KAC1G,CAIE,GAAID,EAAmB9uC,OAAQ,CAE9B8uC,EAAmBA,EAAmB9uC,OAAS,GAAGoL,OAAS6jC,CAC9D,CAEEJ,EAAY/nC,SAAQ,SAAUN,GAE7BA,EAAIuB,OAAOoJ,SAAS3K,EAAI4E,MAC3B,IAEE0jC,EAAmBhoC,SAAQ,SAAUN,GAEpCA,EAAIuB,OAAOoJ,SAAS3K,EAAI4E,MAC3B,GACA,GAIA4D,EAAU/P,UAAUytC,eAAe,SAAUmB,GAC7C,IAAIoC,EAAW,SAASA,EAASnsC,GAChClC,KAAKkC,MAAQA,EACblC,KAAKk7B,OAAS,UACdl7B,KAAKsuC,KAAO,MACZtuC,KAAKuuC,SAAW,GAChBvuC,KAAKwuC,SAAW,EACjB,EAEAH,EAAShxC,UAAUiG,WAAa,WAC/BtD,KAAKwuC,SAAWphC,EAAU/P,UAAUgQ,QAAQk+B,UAAUvrC,KAAKm7B,MAC5D,EAGAkT,EAAShxC,UAAUwkC,2BAA6B,SAAUjb,GACzD5mB,KAAKwuC,SAASC,QAAQC,cAAcD,QAAU7nB,CAC/C,EAGAynB,EAAShxC,UAAU2W,iCAAmC,SAAU7N,EAAQygB,GACvE5mB,KAAKwuC,SAASC,QAAQC,cAAcjsC,QAAQ0D,GAAUygB,EAEtD,GAAI5mB,KAAKsuC,OAAStuC,KAAKsuC,KAAKI,cAAcjsC,QAAQ0D,GAAS,CAC1DnG,KAAKsuC,KAAKI,cAAcjsC,QAAQ0D,GAAUygB,CAC5C,CACA,EAGAynB,EAAShxC,UAAUykC,YAAc,SAAU5G,EAAQoT,GAClD,GAAItuC,KAAKwuC,SAAStT,GAAS,CAC1Bl7B,KAAK2uC,aAAa3uC,KAAKwuC,SAAStT,GAASoT,EAC3C,KAAQ,CACNtuC,KAAKwuC,SAAStT,GAAUoT,CAC1B,CACA,EAEAD,EAAShxC,UAAUsxC,aAAe,SAAUL,EAAMvF,GACjD,IAAK,IAAItrC,KAAOsrC,EAAQ,CACvB,GAAIuF,EAAK7wC,IAAQ+B,EAAQ8uC,EAAK7wC,KAAS,SAAU,CAChDuC,KAAK2uC,aAAaL,EAAK7wC,GAAMsrC,EAAOtrC,GACvC,KAAS,CACN6wC,EAAK7wC,GAAOsrC,EAAOtrC,EACtB,CACA,CACA,EAGA4wC,EAAShxC,UAAU0kC,UAAY,SAAU6M,GACxC,IAAIvpC,EAAOrF,KAEX4uC,EAAgBA,GAAiB,UAGjC,SAASC,EAAaC,EAAOlxC,GAC5B,IAAK,IAAI0B,KAAQwvC,EAAO,CACvB,GAAItvC,EAAQsvC,EAAMxvC,KAAU,SAAU,CACrC,IAAK1B,EAAK0B,GAAO,CAChB1B,EAAK0B,GAAQ,EAClB,CACIuvC,EAAaC,EAAMxvC,GAAO1B,EAAK0B,GACnC,KAAU,CACN1B,EAAK0B,GAAQwvC,EAAMxvC,EACvB,CACA,CACA,CAGC,GAAIsvC,IAAkB,MAAQlM,UAAUqM,SAAU,CAEjDH,EAAgBlM,UAAUqM,SAASC,aACrC,CAEC,GAAIJ,EAAe,CAGlB,IAAKvpC,EAAKmpC,SAASI,GAAgB,CAClC,IAAIK,EAASL,EAAcrmC,MAAM,KAAK,GAEtC,GAAIlD,EAAKmpC,SAASS,GAAS,CAC1BljC,QAAQC,KAAK,8EAA+E4iC,EAAeK,GAC3GL,EAAgBK,CACpB,KAAU,CACNljC,QAAQC,KAAK,kEAAmE4iC,GAChFA,EAAgB,SACpB,CACA,CACA,CAECvpC,EAAK61B,OAAS0T,EAGdvpC,EAAKipC,KAAOlhC,EAAU/P,UAAUgQ,QAAQk+B,UAAUlmC,EAAKmpC,SAASC,SAAW,IAE3E,GAAIG,GAAiB,UAAW,CAC/BC,EAAaxpC,EAAKmpC,SAASI,GAAgBvpC,EAAKipC,KAClD,CAECjpC,EAAKnD,MAAMkB,QAAQm9B,UAAU7iC,KAAK2H,EAAKnD,MAAOmD,EAAK61B,OAAQ71B,EAAKipC,MAEhEjpC,EAAK6pC,kBACN,EAGAb,EAAShxC,UAAU4pC,UAAY,SAAU/L,GACxC,OAAO71B,KAAK61B,MACb,EAGAmT,EAAShxC,UAAU6pC,QAAU,SAAUhM,GACtC,OAAOA,EAASl7B,KAAKwuC,SAAStT,GAAUl7B,KAAKsuC,IAC9C,EAGAD,EAAShxC,UAAU8xC,QAAU,SAAUvxC,EAAMG,GAC5C,IAAIH,EAAOG,EAAQH,EAAO,IAAMG,EAAQH,EACpCwxC,EAAYxxC,EAAK2K,MAAM,KACvB2O,EAAOlX,KAAKqvC,gBAAgBD,EAAWpvC,KAAKk7B,QAMhD,OAAOhkB,GAAQ,EAChB,EAGAm3B,EAAShxC,UAAUgyC,gBAAkB,SAAUzxC,EAAMs9B,GACpD,IAAI71B,EAAOrF,KACX,IAAIkI,EAAO7C,EAAKipC,KAEhB1wC,EAAKsH,SAAQ,SAAUoqC,GACtB,IAAIC,EAEJ,GAAIrnC,EAAM,CACTqnC,EAAWrnC,EAAKonC,GAEhB,UAAWC,GAAY,YAAa,CACnCrnC,EAAOqnC,CACX,KAAU,CACNrnC,EAAO,KACX,CACA,CACA,IAEC,OAAOA,CACR,EAGAmmC,EAAShxC,UAAUgW,KAAO,SAAUzV,EAAMkL,GACzC,IAAK9I,KAAKuuC,SAAS3wC,GAAO,CACzBoC,KAAKuuC,SAAS3wC,GAAQ,EACxB,CAECoC,KAAKuuC,SAAS3wC,GAAMqH,KAAK6D,GAEzBA,EAAS9I,KAAKmvC,QAAQvxC,GAAOoC,KAAKsuC,KACnC,EAGAD,EAAShxC,UAAU6xC,iBAAmB,WACrC,IAAI7pC,EAAOrF,KAEX,IAAIwvC,EAAQ,SAASA,EAAM5xC,GAC1ByH,EAAKkpC,SAAS3wC,GAAMsH,SAAQ,SAAUuqC,GACrCA,EAAQpqC,EAAK8pC,QAAQvxC,GAAOyH,EAAKipC,KACpC,GACA,EAEC,IAAK,IAAI1wC,KAAQyH,EAAKkpC,SAAU,CAC/BiB,EAAM5xC,EACR,CACA,EAGAywC,EAAShxC,UAAU89B,MAAQ,CAC1BsT,QAAW,CACV7F,OAAU,CACTznB,KAAQ,OACRuuB,MAAS,SAEVjtC,QAAW,GACX+a,KAAQ,CACPmyB,QAAW,UACX9vB,MAAS,SAEVd,WAAc,CACb6wB,UAAa,YACbC,WAAc,YACdC,MAAS,QACTC,YAAe,aACfC,KAAQ,OACRC,WAAc,YACd1Z,KAAQ,OACR2Z,WAAc,YACd5Z,KAAQ,OACR6Z,WAAc,YACd3I,IAAO,OAERkH,cAAiB,CAChBD,QAAW,mBACXhsC,QAAW,MAKd2K,EAAU/P,UAAUytC,eAAe,WAAYuD,GAC/C,IAAI+B,EAAQ,SAASA,EAAMluC,GAC1BlC,KAAKkC,MAAQA,CACd,EAEAkuC,EAAM/yC,UAAUgzC,eAAiB,SAAUC,GAC1C,IAAIjrC,EAAOrF,KACPuwC,EAAc,GACdC,EAEJA,EAAapjC,EAAU/P,UAAUo6B,MAAMkU,YAAY2E,GAEnDE,EAAWtrC,SAAQ,SAAUurC,GAC5B,GAAIprC,EAAKnD,QAAUuuC,EAAK,CACvBF,EAAYtrC,KAAKwrC,EACpB,CACA,IAEC,OAAOF,CACR,EAEAH,EAAM/yC,UAAUqzC,KAAO,SAAUJ,EAAW/F,EAAQzpB,EAAQxc,GAC3D,IAAIe,EAAOrF,KACPuwC,EAAcvwC,KAAKqwC,eAAeC,GAEtCC,EAAYrrC,SAAQ,SAAUsrC,GAC7BA,EAAWlG,WAAWjlC,EAAKnD,MAAMI,QAASioC,EAAQzpB,EAAQxc,EAC5D,IAEC,IAAKisC,EAAYnyC,QAAUkyC,EAAW,CACrCvkC,QAAQC,KAAK,6DAA8DskC,EAC7E,CACA,EAEAF,EAAM/yC,UAAUmtC,QAAU,SAAUtoC,EAAOqoC,EAAQzpB,EAAQxc,GAC1D,GAAItE,KAAKkC,MAAMgC,UAAUqmC,GAAS,CACjC,OAAOvqC,KAAKkC,MAAMiC,QAAQomC,GAAQoG,cAAczuC,EAAO4e,EAAQxc,EACjE,KAAQ,CACNyH,QAAQC,KAAK,4CAA6Cu+B,EAC5D,CACA,EAEAn9B,EAAU/P,UAAUytC,eAAe,QAASsF,GAE5C,IAAIQ,EAAW,SAASA,EAAS1uC,GAChClC,KAAKkC,MAAQA,EACblC,KAAK6wC,aAAe,CAAC,GAAI,OAAQ,WAAY,YAAa,QAAS,aACpE,EAGAD,EAASvzC,UAAUwW,iBAAmB,SAAU1N,GAC/C,IAAId,EAAOrF,KACPgF,EAAQ,MACRsF,EAAS,GAEbtK,KAAK6wC,aAAa3rC,SAAQ,SAAUyI,GACnC,IAAIlQ,EAAM,YAAckQ,EAAKmjC,OAAO,GAAGC,cAAgBpjC,EAAKmX,MAAM,IAC9D7O,EAEJ,GAAI9P,EAAOH,WAAWvI,GAAM,CAC3BwY,EAAW5Q,EAAK2rC,eAAe7qC,EAAOH,WAAWvI,IAEjD,GAAIwY,EAAU,CACbjR,EAAQ,KAERsF,EAAO7M,GAAO,CACbwY,SAAUA,EACVsB,OAAQpR,EAAOH,WAAWvI,EAAM,WAAa,GAElD,CACA,CACA,IAEC,GAAIuH,EAAO,CACVmB,EAAOhC,QAAQ8R,SAAW3L,CAC5B,CACA,EAEAsmC,EAASvzC,UAAU2zC,eAAiB,SAAUjzC,GAC7C,IAAIkY,EAAW,MAGf,cAAelY,IAAU,YAAc,YAAcyB,EAAQzB,IAC5D,IAAK,SACJ,GAAIiC,KAAKixC,UAAUlzC,GAAQ,CAC1BkY,EAAWjW,KAAKixC,UAAUlzC,EAC9B,KAAU,CACNgO,QAAQC,KAAK,sDAAuDjO,EACxE,CACG,MAED,IAAK,WACJkY,EAAWlY,EACX,MAGF,OAAOkY,CACR,EAGA26B,EAASvzC,UAAUgzB,aAAe,SAAU3rB,EAAKiJ,GAChD,IAAIlQ,EAAM,YAAckQ,EAAKmjC,OAAO,GAAGC,cAAgBpjC,EAAKmX,MAAM,IAC9DosB,EAAexsC,EAAI4E,eAGvB,IAAIhF,EAAO8I,EAAU/P,UAAUgQ,QAAQk+B,UAAU7mC,EAAIJ,MAAQ,IAE7DtE,KAAKkC,MAAMkI,cAAcvB,UAAS,SAAU1C,GAC3C,IAAIpI,EAAOkY,EAAUsB,EAAQ45B,EAE7B,GAAIhrC,EAAOhC,QAAQ8R,SAAU,CAE5BA,EAAW9P,EAAOhC,QAAQ8R,SAASxY,IAAQ0I,EAAOhC,QAAQ8R,SAASA,UAAY,MAE/E,GAAIA,EAAU,CACblY,EAAQoI,EAAO+J,cAAc5L,GAE7B,GAAIvG,GAAS,YAAa,CACzBozC,EAAchrC,EAAOmD,eACrBiO,SAAgBtB,EAASsB,SAAW,WAAatB,EAASsB,OAAOxZ,EAAOuG,EAAMqJ,EAAMwjC,EAAaD,GAAgBj7B,EAASsB,OAC1HpR,EAAOgK,cAAc7L,EAAM2R,EAASA,SAASlY,EAAOuG,EAAMqJ,EAAM4J,EAAQ45B,EAAaD,GAC1F,CACA,CACA,CACA,IAEC,OAAO5sC,CACR,EAGAssC,EAASvzC,UAAU4zC,UAAY,GAE/B7jC,EAAU/P,UAAUytC,eAAe,WAAY8F,GAC/C,IAAIQ,EAAO,SAASA,EAAKlvC,GAExBlC,KAAKkC,MAAQA,EACblC,KAAKsK,OAAS,MACdtK,KAAKqxC,IAAM,GACXrxC,KAAKsxC,aAAe,MACpBtxC,KAAKuX,OAAS,MAEdvX,KAAKuxC,cAAgBvxC,KAAKwxC,sBAC1BxxC,KAAKyxC,WAAazxC,KAAK0xC,mBACvB1xC,KAAK2xC,eAAiB,MACtB3xC,KAAK4xC,aAAe,MACpB5xC,KAAK6xC,cAAgB,MAErB7xC,KAAKukB,gBAAkB,MACvBvkB,KAAK2vC,QAAU,MAEf3vC,KAAK8xC,aAAe,CACrB,EAGAV,EAAK/zC,UAAUiG,WAAa,WAC3B,IAAIyuC,EAEJ/xC,KAAKuxC,cAAczqC,YAAY9G,KAAKyxC,YAEpC,GAAIzxC,KAAKkC,MAAMkB,QAAQw5B,kBAAmB,CACzC,UAAW58B,KAAKkC,MAAMkB,QAAQw5B,mBAAqB,SAAU,CAC5DmV,EAAW/uC,SAASC,cAAc,YAClC8uC,EAASh6B,UAAY/X,KAAKkC,MAAMkB,QAAQw5B,kBAAkBoV,OAC1DhyC,KAAK2xC,eAAiBI,EAASE,QAAQnvC,UAC1C,KAAS,CACN9C,KAAK2xC,eAAiB3xC,KAAKkC,MAAMkB,QAAQw5B,iBAC5C,CACA,CAEC58B,KAAK6xC,cAAgB7xC,KAAKkC,MAAMkB,QAAQs5B,iBAAmB18B,KAAKkyC,qBAEhElyC,KAAKsxC,aAAetxC,KAAKkC,MAAMkB,QAAQk5B,kBAAoBt8B,KAAKmyC,oBAEhE,GAAInyC,KAAKkC,MAAMkB,QAAQy5B,gBAAiB,CACvC,UAAW78B,KAAKkC,MAAMkB,QAAQy5B,iBAAmB,SAAU,CAC1DkV,EAAW/uC,SAASC,cAAc,YAClC8uC,EAASh6B,UAAY/X,KAAKkC,MAAMkB,QAAQy5B,gBAAgBmV,OACxDhyC,KAAK4xC,aAAeG,EAASE,QAAQnvC,UACxC,KAAS,CACN9C,KAAK4xC,aAAe5xC,KAAKkC,MAAMkB,QAAQy5B,eAC1C,CACA,CAEC,GAAI78B,KAAKkC,MAAMkB,QAAQm5B,WAAY,CAClCv8B,KAAKgkB,UAAUhkB,KAAKkC,MAAMkB,QAAQm5B,WACpC,CAEC,GAAIv8B,KAAKkC,MAAMkB,QAAQo5B,WAAY,CAClCx8B,KAAKgkC,UAAUhkC,KAAKkC,MAAMkB,QAAQo5B,WACpC,CAEC,GAAIx8B,KAAKkC,MAAMkB,QAAQi5B,QAAS,CAC/Br8B,KAAKikC,OAAOjkC,KAAKkC,MAAMkB,QAAQi5B,QACjC,CAEC,GAAIr8B,KAAKkC,MAAMkB,QAAQma,oBAAqB,CAC3C,GAAIvd,KAAKkC,MAAMkB,QAAQ2b,WAAY,CAClC/e,KAAKukB,gBAAkB,MACvBxY,QAAQ8T,MAAM,2FACjB,KAAS,CACN,GAAI7f,KAAKkC,MAAMgC,UAAU,QAAS,CACjClE,KAAKukB,gBAAkBvkB,KAAKkC,MAAMkB,QAAQma,oBAC1Cvd,KAAKkC,MAAMiC,QAAQod,KAAK6wB,sBAAsBpyC,KAAKukB,gBACvD,KAAU,CACNxY,QAAQ8T,MAAM,6DAClB,CACA,CACA,CACA,EAEAuxB,EAAK/zC,UAAUm0C,oBAAsB,WACpC,IAAIzuC,EAAKC,SAASC,cAAc,OAChCF,EAAGG,UAAUC,IAAI,oBACjB,OAAOJ,CACR,EAEAquC,EAAK/zC,UAAUq0C,iBAAmB,WACjC,IAAI3uC,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,wBACjBJ,EAAGqP,aAAa,OAAQ,SAExB,OAAOrP,CACR,EAGAquC,EAAK/zC,UAAU2mB,UAAY,SAAUzM,EAAQ/J,GAC5C,GAAIA,EAAQ,CACXxN,KAAKuX,OAASvX,KAAKuX,QAAU,GAE7B,IAAK,IAAI9Z,KAAO8Z,EAAQ,CACvBvX,KAAKuX,OAAO9Z,GAAO8Z,EAAO9Z,EAC7B,CACA,KAAQ,CACNuC,KAAKuX,OAASA,CAChB,CACA,EAEA65B,EAAK/zC,UAAUg1C,UAAY,WAC1B,OAAOryC,KAAKuX,QAAU,EACvB,EAGA65B,EAAK/zC,UAAU2mC,UAAY,SAAU15B,GACpCtK,KAAKsyC,qBAEL,UAAWhoC,GAAU,SAAU,CAC9BtK,KAAKsK,OAAOioC,OAASjoC,CACvB,KAAQ,CACN,IAAK,IAAI7M,KAAO6M,EAAQ,CACvBtK,KAAKsK,OAAO7M,GAAO6M,EAAO7M,EAC7B,CACA,CACA,EAGA2zC,EAAK/zC,UAAUi1C,mBAAqB,SAAUnlC,GAC7C,IAAI9H,EAAOrF,KACX,IAAKqF,EAAKiF,QAAU6C,EAAO,CAE1B9H,EAAKiF,OAAS,GAGd,IAAK,IAAI7M,KAAO4H,EAAKmtC,cAAe,CACnCntC,EAAKiF,OAAO7M,GAAO4H,EAAKmtC,cAAc/0C,EACzC,CACA,CACA,EAGA2zC,EAAK/zC,UAAU4mC,OAAS,SAAUoN,GACjCrxC,KAAKqxC,IAAMA,CACZ,EAGAD,EAAK/zC,UAAU6mC,OAAS,WACvB,OAAOlkC,KAAKqxC,GACb,EAGAD,EAAK/zC,UAAU+mB,SAAW,SAAU2f,EAAYllB,GAG/C,GAAI7e,KAAKukB,gBAAiB,CACzB,OAAOvkB,KAAKyyC,sBACd,KAAQ,CACN,OAAOzyC,KAAK0yC,kBAAkB3O,EAAYllB,EAC5C,CACA,EAEAuyB,EAAK/zC,UAAUogB,SAAW,SAAU8I,GACnC,IAAI0B,EAEJ,IAAKjoB,KAAK2vC,QAAS,CAElB1nB,EAASjoB,KAAKkC,MAAMkB,QAAQ25B,iCAAmC/8B,KAAKkC,MAAMM,WAAWiB,aAAa8I,aAAe,EAEjH,GAAIga,EAAO0B,EAAQ,CAClBjoB,KAAKkC,MAAMiC,QAAQod,KAAK9D,WAAW5C,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC7E,CACA,CACA,EAEAs2B,EAAK/zC,UAAUwmC,mBAAqB,WACnC7jC,KAAK8xC,cACN,EAEAV,EAAK/zC,UAAUo1C,qBAAuB,WACrCzyC,KAAKkC,MAAMM,WAAWmc,QAAQ,IAC9B,OAAO3e,KAAKkC,MAAMiC,QAAQod,KAAK4C,QAAQ,EACxC,EAEAitB,EAAK/zC,UAAUq1C,kBAAoB,SAAU3O,EAAYllB,GACxD,IAAI8zB,EAAU3yC,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrCknC,EAAQ1uB,YAAY8f,GAAYlpB,MAAK,SAAUvW,GAC9CquC,EAAQzwC,MAAMM,WAAWmc,QAAQra,EAAMy/B,EAAYllB,GAAgBhE,MAAK,WACvErP,GACJ,IAAMsP,OAAM,SAAUzG,GAClB5I,EAAO4I,EACX,GACA,IAAKyG,OAAM,SAAUzG,GAClB5I,EAAO4I,EACV,GACA,GACA,EAEA+8B,EAAK/zC,UAAUu1C,mBAAqB,SAAUtuC,EAAM2qC,GACnD,IAAI5pC,EAAOrF,KACPiJ,EAAS,GAEbgmC,EAASA,GAAU,GAEnB,GAAIpvC,MAAMkF,QAAQT,GAAO,CACxBA,EAAKY,SAAQ,SAAUic,EAAM3b,GAC5ByD,EAASA,EAAO4B,OAAOxF,EAAKutC,mBAAmBzxB,EAAM8tB,EAASA,EAAS,IAAMzpC,EAAI,IAAMA,GAC1F,GACA,MAAQ,WAAYlB,IAAS,YAAc,YAAc9E,EAAQ8E,MAAW,SAAU,CACpF,IAAK,IAAI7G,KAAO6G,EAAM,CACrB2E,EAASA,EAAO4B,OAAOxF,EAAKutC,mBAAmBtuC,EAAK7G,GAAMwxC,EAASA,EAAS,IAAMxxC,EAAM,IAAMA,GACjG,CACA,KAAQ,CACNwL,EAAOhE,KAAK,CAAExH,IAAKwxC,EAAQlxC,MAAOuG,GACpC,CAEC,OAAO2E,CACR,EAEAmoC,EAAK/zC,UAAUw1C,gBAAkB,SAAUt7B,GAC1C,IAAItO,EAASjJ,KAAK4yC,mBAAmBr7B,GACjCu7B,EAAU,GAEd7pC,EAAO/D,SAAQ,SAAUic,GACxB2xB,EAAQ7tC,KAAK8tC,mBAAmB5xB,EAAK1jB,KAAO,IAAMs1C,mBAAmB5xB,EAAKpjB,OAC5E,IAEC,OAAO+0C,EAAQE,KAAK,IACrB,EAGA5B,EAAK/zC,UAAU4mB,YAAc,SAAUjL,GACtC,IAAIi6B,EAAUjzC,KAEX,IAACqF,EAAOrF,KACPqxC,EAAMhsC,EAAKgsC,IACX6B,EAIJ7tC,EAAKysC,eACLoB,EAAY7tC,EAAKysC,aAEjBzsC,EAAKitC,qBAEL,OAAO,IAAI/mC,SAAQ,SAAUC,EAASC,GACrC,GAAIpG,EAAKnD,MAAMkB,QAAQ87B,eAAexhC,KAAKu1C,EAAQ/wC,MAAOmD,EAAKgsC,IAAKhsC,EAAKkS,UAAY,MAAO,CAE3FlS,EAAKsqC,QAAU,KAEf,IAAK32B,EAAQ,CACZ3T,EAAK8tC,YACT,CAEGF,EAAQpB,cAAcR,EAAKhsC,EAAKiF,OAAQjF,EAAKkS,QAAQsD,MAAK,SAAUvW,GACnE,GAAI4uC,IAAc7tC,EAAKysC,aAAc,CACpC,GAAIzsC,EAAKnD,MAAMkB,QAAQ+7B,aAAc,CACpC76B,EAAOe,EAAKnD,MAAMkB,QAAQ+7B,aAAazhC,KAAK2H,EAAKnD,MAAOmD,EAAKgsC,IAAKhsC,EAAKkS,OAAQjT,EACrF,CACKkH,EAAQlH,GAERe,EAAK+tC,aACL/tC,EAAKsqC,QAAU,KACpB,KAAW,CACN5jC,QAAQC,KAAK,iIAClB,CACA,IAAM8O,OAAM,SAAU+E,GAClB9T,QAAQ8T,MAAM,oBAAqBA,GACnCxa,EAAKnD,MAAMkB,QAAQg8B,UAAU1hC,KAAK2H,EAAKnD,MAAO2d,GAE9Cxa,EAAKguC,YAELr+B,YAAW,WACV3P,EAAK+tC,YACV,GAAO,KAEH/tC,EAAKsqC,QAAU,MAEflkC,EAAOoU,EACX,GACA,KAAS,CACNpU,GACH,CACA,GACA,EAEA2lC,EAAK/zC,UAAU81C,WAAa,WAC3B,IAAIG,SAAoBtzC,KAAKkC,MAAMkB,QAAQu5B,aAAe,WAAa38B,KAAKkC,MAAMkB,QAAQu5B,aAAe38B,KAAKkC,MAAMkB,QAAQu5B,WAE5H,GAAI2W,EAAY,CAEftzC,KAAKozC,aAEL,MAAOpzC,KAAKyxC,WAAW3uC,WAAY,CAClC9C,KAAKyxC,WAAWnsC,YAAYtF,KAAKyxC,WAAW3uC,WAC/C,CAAG9C,KAAKyxC,WAAWvuC,UAAUikB,OAAO,mBAClCnnB,KAAKyxC,WAAWvuC,UAAUC,IAAI,qBAE9B,GAAInD,KAAK2xC,eAAgB,CACxB3xC,KAAKyxC,WAAW3qC,YAAY9G,KAAK2xC,eACpC,KAAS,CACN3xC,KAAKyxC,WAAW15B,UAAY/X,KAAKkC,MAAMiC,QAAQiP,SAAS+7B,QAAQ,eACnE,CAEEnvC,KAAKkC,MAAMI,QAAQwE,YAAY9G,KAAKuxC,cACtC,CACA,EAEAH,EAAK/zC,UAAUg2C,UAAY,WAC1BrzC,KAAKozC,aAEL,MAAOpzC,KAAKyxC,WAAW3uC,WAAY,CAClC9C,KAAKyxC,WAAWnsC,YAAYtF,KAAKyxC,WAAW3uC,WAC9C,CAAE9C,KAAKyxC,WAAWvuC,UAAUikB,OAAO,qBAClCnnB,KAAKyxC,WAAWvuC,UAAUC,IAAI,mBAE9B,GAAInD,KAAK4xC,aAAc,CACtB5xC,KAAKyxC,WAAW3qC,YAAY9G,KAAK4xC,aACnC,KAAQ,CACN5xC,KAAKyxC,WAAW15B,UAAY/X,KAAKkC,MAAMiC,QAAQiP,SAAS+7B,QAAQ,aAClE,CAECnvC,KAAKkC,MAAMI,QAAQwE,YAAY9G,KAAKuxC,cACrC,EAEAH,EAAK/zC,UAAU+1C,WAAa,WAC3B,GAAIpzC,KAAKuxC,cAAc5qC,WAAY,CAClC3G,KAAKuxC,cAAc5qC,WAAWrB,YAAYtF,KAAKuxC,cACjD,CACA,EAGAH,EAAK/zC,UAAUm1C,cAAgB,CAC9BD,OAAQ,OAGTnB,EAAK/zC,UAAU80C,oBAAsB,SAAUd,EAAK/mC,EAAQiN,GAE3D,GAAI85B,EAAK,CACR,GAAI95B,GAAUna,OAAOiL,KAAKkP,GAAQnZ,OAAQ,CACzC,IAAKkM,EAAOioC,QAAUjoC,EAAOioC,OAAOvD,eAAiB,MAAO,CAC3D1kC,EAAOioC,OAAS,MAEhBlB,IAAQA,EAAI3wC,SAAS,KAAO,IAAM,KAAOV,KAAKmE,QAAQqZ,KAAKq1B,gBAAgBt7B,EAC/E,CACA,CACA,CAEC,OAAO85B,CACR,EAEAD,EAAK/zC,UAAU60C,qBAAuB,SAAUb,EAAK/mC,EAAQiN,GAC5D,IAAIlS,EAAOrF,KACPuzC,EAEJ,OAAO,IAAIhoC,SAAQ,SAAUC,EAASC,GAGrC4lC,EAAMhsC,EAAKisC,aAAa5zC,KAAK2H,EAAKnD,MAAOmvC,EAAK/mC,EAAQiN,GAGtD,GAAIjN,EAAOioC,OAAOxB,eAAiB,MAAO,CACzCwC,EAAc/zC,EAAQ6F,EAAKnD,MAAMkB,QAAQq5B,mBAAqB,SAAWp3B,EAAKnD,MAAMkB,QAAQq5B,gBAAkBp3B,EAAKmuC,sBAAsBnuC,EAAKnD,MAAMkB,QAAQq5B,iBAC5J,GAAI8W,EAAa,CAEhB,IAAK,IAAI91C,KAAO81C,EAAYE,QAAS,CACpC,IAAKnpC,EAAOmpC,QAAS,CACpBnpC,EAAOmpC,QAAU,EACvB,CAEK,UAAWnpC,EAAOmpC,QAAQh2C,KAAS,YAAa,CAC/C6M,EAAOmpC,QAAQh2C,GAAO81C,EAAYE,QAAQh2C,EAChD,CACA,CAEI6M,EAAO0qB,KAAOue,EAAYve,KAAKt3B,KAAK2H,EAAMgsC,EAAK/mC,EAAQiN,EAC3D,KAAU,CACNxL,QAAQC,KAAK,8CAA+C3G,EAAKnD,MAAMkB,QAAQq5B,gBACnF,CACA,CAEE,GAAI4U,EAAK,CAGR,UAAW/mC,EAAOmpC,UAAY,YAAa,CAC1CnpC,EAAOmpC,QAAU,EACrB,CAEG,UAAWnpC,EAAOmpC,QAAQC,SAAW,YAAa,CACjDppC,EAAOmpC,QAAQC,OAAS,kBAC5B,CAEG,UAAWppC,EAAOmpC,QAAQ,sBAAwB,YAAa,CAC9DnpC,EAAOmpC,QAAQ,oBAAsB,gBACzC,CAEG,UAAWnpC,EAAO4hC,OAAS,YAAa,CACvC5hC,EAAO4hC,KAAO,MAClB,CAEG,GAAI5hC,EAAO4hC,MAAQ,OAAQ,CAE1B,UAAW5hC,EAAOmpC,QAAQ,iCAAmC,YAAa,CACzEnpC,EAAOmpC,QAAQ,+BAAiCtpB,OAAOwpB,SAASC,MACrE,CAEI,UAAWtpC,EAAOupC,cAAgB,YAAa,CAC9CvpC,EAAOupC,YAAc,aAC1B,CACA,KAAU,CACN,UAAWvpC,EAAOupC,cAAgB,YAAa,CAC9CvpC,EAAOupC,YAAc,SAC1B,CACA,CAGGC,MAAMzC,EAAK/mC,GAAQuQ,MAAK,SAAUk5B,GACjC,GAAIA,EAASzpB,GAAI,CAChBypB,EAASC,OAAOn5B,MAAK,SAAUvW,GAC9BkH,EAAQlH,EACd,IAAQwW,OAAM,SAAU+E,GAClBpU,EAAOoU,GACP9T,QAAQC,KAAK,0CAA2C6T,EAC9D,GACA,KAAW,CACN9T,QAAQ8T,MAAM,uCAAyCk0B,EAASE,OAAQF,EAASG,YACjFzoC,EAAOsoC,EACZ,CACA,IAAMj5B,OAAM,SAAU+E,GAClB9T,QAAQ8T,MAAM,uCAAwCA,GACtDpU,EAAOoU,EACX,GACA,KAAS,CACN9T,QAAQC,KAAK,gCACbR,EAAQ,GACX,CACA,GACA,EAEA4lC,EAAK/zC,UAAUm2C,sBAAwB,CACtCQ,KAAQ,CACPP,QAAS,CACR,eAAgB,oBAEjBze,KAAM,SAASA,EAAKqc,EAAK/mC,EAAQiN,GAChC,OAAOoZ,KAAKwjB,UAAU58B,EACzB,GAEC68B,KAAQ,CACPX,QAAS,GACTze,KAAM,SAASA,EAAKqc,EAAK/mC,EAAQiN,GAChC,IAAItO,EAASjJ,KAAK4yC,mBAAmBr7B,GACjC68B,EAAO,IAAIC,SAEfprC,EAAO/D,SAAQ,SAAUic,GACxBizB,EAAKrd,OAAO5V,EAAK1jB,IAAK0jB,EAAKpjB,MAC/B,IAEG,OAAOq2C,CACV,IAIAhnC,EAAU/P,UAAUytC,eAAe,OAAQsG,GAG3C,IAAIkD,EAAgB,SAASA,EAAc5vC,GAC1C1E,KAAK0sB,KAAOhoB,CACb,EAEA4vC,EAAcj3C,UAAUojB,QAAU,SAAU2C,GAC3C,OAAOpjB,KAAK0sB,KAAKjM,QAAQ2C,EAC1B,EAEAkxB,EAAcj3C,UAAUoG,WAAa,WACpC,OAAOzD,KAAK0sB,KAAKjpB,YAClB,EAEA6wC,EAAcj3C,UAAUiR,SAAW,WAClC,OAAOtO,KAAK0sB,KAAKxqB,KAClB,EAEAoyC,EAAcj3C,UAAUuQ,SAAW,WAClC,IAAI7C,EAAQ,GAEZ/K,KAAK0sB,KAAK9e,WAAW1I,SAAQ,SAAU8F,GACtCD,EAAM9F,KAAK+F,EAAK1B,eAClB,IAEC,OAAOyB,CACR,EAEAupC,EAAcj3C,UAAUsoB,QAAU,SAAUxf,GAC3C,IAAI6E,EAAOhL,KAAK0sB,KAAK/G,QAAQxf,GAC7B,OAAO6E,EAAOA,EAAK1B,eAAiB,KACrC,EAEAgrC,EAAcj3C,UAAUyK,SAAW,WAClC,OAAO9H,KAAK0sB,IACb,EAEA,IAAI6nB,EAAc,SAASA,EAAYryC,GACtClC,KAAKkC,MAAQA,EACblC,KAAKw0C,SAAW,GAChBx0C,KAAKy0C,SAAW,GAChBz0C,KAAK00C,UAAY,MACjB10C,KAAK20C,WAAa30C,KAAKiD,gBACvBjD,KAAK40C,WAAa50C,KAAKiD,gBACvBjD,KAAKkmB,OAAS,MACdlmB,KAAK60C,OAAS,MACd70C,KAAK80C,eAAiB,MACtB90C,KAAK+0C,eAAiB,MAEtB/0C,KAAKsD,YACN,EAEAixC,EAAYl3C,UAAU4F,cAAgB,WACrC,IAAIF,EAAKC,SAASC,cAAc,OAChCF,EAAGG,UAAUC,IAAI,0BACjB,OAAOJ,CACR,EAEAwxC,EAAYl3C,UAAUiG,WAAa,WAClCtD,KAAK00C,UAAY,IAAItuC,EAAO,CAAEvB,MAAO,SAAW7E,KACjD,EAGAu0C,EAAYl3C,UAAU2J,oBAAsB,WAAY,EAGxDutC,EAAYl3C,UAAUwW,iBAAmB,SAAU1N,GAClD,IAAIhB,EAAMgB,EAAOH,WAEjB,IAAIsE,EAAS,CACZ0qC,cAAe7vC,EAAI6vC,eAAiB,GACpCC,cAAe9vC,EAAI+vC,kBAAoB,IAGxC,GAAI/vC,EAAI+O,QAAS,CAEhB,OAAQ1U,EAAQ2F,EAAI+O,UACnB,IAAK,SACJ,GAAIlU,KAAKm1C,aAAahwC,EAAI+O,SAAU,CACnC5J,EAAO4J,QAAUlU,KAAKm1C,aAAahwC,EAAI+O,QAC5C,KAAW,CACNnI,QAAQC,KAAK,4DAA6D7G,EAAI+O,QACnF,CACI,MAED,IAAK,WACJ5J,EAAO4J,QAAU/O,EAAI+O,QACrB,MAIF,GAAI5J,EAAO4J,QAAS,CACnB/N,EAAOhC,QAAQ0F,YAAcS,EAC7BtK,KAAKw0C,SAASvvC,KAAKkB,GAEnB,GAAInG,KAAKkC,MAAMkB,QAAQyG,aAAe,QAAS,CAC9C7J,KAAKo1C,kBACT,CACA,CACA,CAEC,GAAIjwC,EAAIgP,WAAY,CACnB,OAAQ3U,EAAQ2F,EAAIgP,aACnB,IAAK,SACJ,GAAInU,KAAKm1C,aAAahwC,EAAIgP,YAAa,CACtC7J,EAAO+qC,QAAUr1C,KAAKm1C,aAAahwC,EAAIgP,WAC5C,KAAW,CACNpI,QAAQC,KAAK,4DAA6D7G,EAAIgP,WACnF,CACI,MAED,IAAK,WACJ7J,EAAO+qC,QAAUlwC,EAAIgP,WACrB,MAIF,GAAI7J,EAAO+qC,QAAS,CACnBlvC,EAAOhC,QAAQ0F,YAAcS,EAC7BtK,KAAKy0C,SAASxvC,KAAKkB,GAEnB,GAAInG,KAAKkC,MAAMkB,QAAQyG,aAAe,QAAS,CAC9C7J,KAAKs1C,qBACT,CACA,CACA,CACA,EAEAf,EAAYl3C,UAAUk4C,YAAc,WACnC,IAAI3f,EAAU,MAEd,GAAI51B,KAAK80C,eAAgB,CACxB90C,KAAK80C,eAAiB,MACtB90C,KAAK20C,WAAWhuC,WAAWrB,YAAYtF,KAAK20C,YAC5C/e,EAAU,IACZ,CAEC,GAAI51B,KAAK+0C,eAAgB,CACxB/0C,KAAK+0C,eAAiB,MACtB/0C,KAAKkC,MAAMuL,cAAc0Z,OAAOnnB,KAAK40C,YACrChf,EAAU,IACZ,CAEC,GAAIA,EAAS,CACZ51B,KAAKkC,MAAMM,WAAWkF,iBACxB,CACA,EAEA6sC,EAAYl3C,UAAU+3C,iBAAmB,WACxC,IAAKp1C,KAAK80C,eAAgB,CACzB90C,KAAKkC,MAAMkI,cAAc3G,aAAaZ,aAAa7C,KAAK20C,WAAY30C,KAAKkC,MAAMkI,cAAchI,eAAewE,aAC5G5G,KAAK80C,eAAiB,IACxB,CACA,EAEAP,EAAYl3C,UAAUi4C,oBAAsB,WAC3C,IAAKt1C,KAAK+0C,eAAgB,CACzB/0C,KAAKkC,MAAMuL,cAAc8e,QAAQvsB,KAAK40C,YACtC50C,KAAK+0C,eAAiB,IACxB,CACA,EAEAR,EAAYl3C,UAAUsG,iBAAmB,SAAUC,GAClD,GAAI5D,KAAK+0C,gBAAkB/0C,KAAK60C,OAAQ,CACvC70C,KAAK60C,OAAOpxC,aAAaO,MAAMC,YAAcL,EAAO,IACtD,CACA,EAEA2wC,EAAYl3C,UAAUyM,OAAS,SAAUa,GACrC,IAAOjG,EAEV,GAAI1E,KAAK80C,gBAAkB90C,KAAK+0C,eAAgB,CACxC/0C,KAAKw1C,WAAW7qC,GAEvB,GAAI3K,KAAK80C,eAAgB,CACxB,GAAI90C,KAAKkmB,OAAQ,CAChBlmB,KAAKkmB,OAAO0J,aAChB,CAEGlrB,EAAM1E,KAAKy1C,YAAY,MAAOz1C,KAAKw1C,WAAW7qC,IAC9C3K,KAAKkmB,OAASxhB,EACd,MAAO1E,KAAK20C,WAAW7xC,WAAY,CAClC9C,KAAK20C,WAAWrvC,YAAYtF,KAAK20C,WAAW7xC,WAChD,CAAI9C,KAAK20C,WAAW7tC,YAAYpC,EAAIjB,cACjCiB,EAAIpB,WAAW,KAClB,CAEE,GAAItD,KAAK+0C,eAAgB,CACxB,GAAI/0C,KAAK60C,OAAQ,CAChB70C,KAAK60C,OAAOjlB,aAChB,CAEGlrB,EAAM1E,KAAKy1C,YAAY,SAAUz1C,KAAKw1C,WAAW7qC,IACjD3K,KAAK60C,OAASnwC,EACd,MAAO1E,KAAK40C,WAAW9xC,WAAY,CAClC9C,KAAK40C,WAAWtvC,YAAYtF,KAAK40C,WAAW9xC,WAChD,CAAI9C,KAAK40C,WAAW9tC,YAAYpC,EAAIjB,cACjCiB,EAAIpB,WAAW,KAClB,CAEEtD,KAAKkC,MAAMM,WAAWkF,kBAGtB,GAAI1H,KAAKkC,MAAMgC,UAAU,iBAAkB,CAC1ClE,KAAKkC,MAAMiC,QAAQC,cAAc0I,QACpC,CACA,CACA,EAEAynC,EAAYl3C,UAAU60B,eAAiB,SAAUxtB,GAChD1E,KAAK01C,YAAY11C,KAAKkC,MAAMiC,QAAQ+Y,UAAUy4B,YAAYjxC,GAC3D,EAEA6vC,EAAYl3C,UAAUksC,UAAY,WACjC,IAAIqM,EAAU51C,KAEd,GAAIA,KAAKw0C,SAASp2C,QAAU4B,KAAKy0C,SAASr2C,OAAQ,CACjD,GAAI4B,KAAKkC,MAAMkB,QAAQyG,cAAgB,QAAS,CAC/C7J,KAAK8J,OAAO9J,KAAKkC,MAAMM,WAAWuH,WACrC,CAEE,GAAI/J,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMkB,QAAQyG,cAAgB,QAAS,CAE7E,IAAI++B,EAAS1mC,MAAMiC,QAAQ+Y,UAAU24B,iBAErCjN,EAAO1jC,SAAQ,SAAU4lB,GACxB8qB,EAAQF,YAAY5qB,EACxB,GACA,CACA,CACA,EAEAypB,EAAYl3C,UAAUq4C,YAAc,SAAU5qB,GAC7C,IAAIxmB,EAAMwxC,EAEV,GAAIhrB,EAAO,CACV,GAAIA,EAAMuL,MAAO,CAChB,GAAIvL,EAAMuL,MAAMvC,OAAQ,CACvBxvB,EAAOtE,KAAKw1C,WAAW1qB,EAAMngB,MAC7BmrC,EAAU91C,KAAK+1C,gBAAgB,SAAUzxC,GAEzCwmB,EAAMuL,MAAMvC,OAAO9G,WAAW8oB,GAC9BhrB,EAAMuL,MAAMvC,OAAOhuB,cACvB,CAEG,GAAIglB,EAAMuL,MAAMjZ,IAAK,CACpB9Y,EAAOtE,KAAKw1C,WAAW1qB,EAAMngB,MAC7BmrC,EAAU91C,KAAK+1C,gBAAgB,MAAOzxC,GAEtCwmB,EAAMuL,MAAMjZ,IAAI4P,WAAW8oB,GAC3BhrB,EAAMuL,MAAMjZ,IAAItX,cACpB,CACA,CACA,CACA,EAGAyuC,EAAYl3C,UAAU24C,eAAiB,SAAUrrC,GAChD,OAAO3K,KAAKy1C,YAAY,MAAOz1C,KAAKw1C,WAAW7qC,GAChD,EAEA4pC,EAAYl3C,UAAU44C,kBAAoB,SAAUtrC,GACnD,OAAO3K,KAAKy1C,YAAY,SAAUz1C,KAAKw1C,WAAW7qC,GACnD,EAEA4pC,EAAYl3C,UAAUm4C,WAAa,SAAU7qC,GAC5C,IAAIurC,EAAUl2C,KAEd,IAAIsE,EAAO,GAEXqG,EAAKzF,SAAQ,SAAUR,GACtBJ,EAAKW,KAAKP,EAAI+b,WAEd,GAAIy1B,EAAQh0C,MAAMkB,QAAQwH,UAAYsrC,EAAQh0C,MAAMkB,QAAQ+2B,yBAA0B,CACrF,GAAIz1B,EAAIP,QAAQyG,SAASurC,KAAM,CAC9B,IAAIjmB,EAAWgmB,EAAQV,WAAWU,EAAQh0C,MAAMiC,QAAQyG,SAASwrC,wBAAwB1xC,IACzFJ,EAAOA,EAAKuG,OAAOqlB,EACvB,CACA,CACA,IAEC,OAAO5rB,CACR,EAGAiwC,EAAYl3C,UAAUo4C,YAAc,SAAU70B,EAAKtc,GAClD,IAAIe,EAAOrF,KACP81C,EAAU91C,KAAK+1C,gBAAgBn1B,EAAKtc,GACpCI,EAEJ,GAAIW,EAAKnD,MAAMgC,UAAU,WAAY,CACpCmB,EAAKnD,MAAMiC,QAAQ6R,QAAQqgC,SAC7B,CAEC3xC,EAAM,IAAIiZ,EAAIm4B,EAAS91C,KAAM,QAE7B,GAAIqF,EAAKnD,MAAMgC,UAAU,WAAY,CACpCmB,EAAKnD,MAAMiC,QAAQ6R,QAAQsgC,QAC7B,CAEC5xC,EAAIjB,aAAaP,UAAUC,IAAI,kBAAmB,mBAAqByd,GAEvElc,EAAI+M,UAAY,MAEhB/M,EAAI4E,aAAe,WAClB,IAAKtJ,KAAKyR,UAAW,CACpBzR,KAAKyR,UAAY,IAAI6iC,EAAct0C,KACtC,CAEE,OAAOA,KAAKyR,SACd,EAEC/M,EAAIuH,cAAgB,WAEnB,IAAIlB,EAAQ,GAEZ1F,EAAKnD,MAAMkI,cAAc1H,eAAewC,SAAQ,SAAUiB,GAGzDd,EAAKqvC,UAAUrkC,SAASlK,EAAO+G,YAC/B7H,EAAKqvC,UAAU3kC,SAAW5J,EAAO4J,SAEjC,GAAI5J,EAAOH,WAAW4a,EAAM,kBAAoBvb,EAAKnD,MAAMgC,UAAU,UAAW,CAC/EmB,EAAKqvC,UAAUvwC,QAAQyR,OAAS,CAC/ByB,UAAWhS,EAAKnD,MAAMiC,QAAQyR,OAAO+B,aAAaxR,EAAOH,WAAW4a,EAAM,kBAC1ErJ,OAAQpR,EAAOH,WAAW4a,EAAM,wBAA0B,GAE/D,KAAU,CACNvb,EAAKqvC,UAAUvwC,QAAQyR,OAAS,CAC/ByB,UAAWhS,EAAKnD,MAAMiC,QAAQyR,OAAO+B,aAAa,aAClDJ,OAAQ,GAEb,CAGGlS,EAAKqvC,UAAU1uC,WAAWkQ,SAAW/P,EAAOH,WAAWkQ,SAGvD,IAAIlL,EAAO,IAAIqP,EAAKhV,EAAKqvC,UAAWhwC,GACpCsG,EAAKvH,aACLuH,EAAK7E,OAASA,EACd6E,EAAKuE,WAELpJ,EAAO4E,MAAM9F,KAAK+F,GAClBD,EAAM9F,KAAK+F,GAEX,IAAK7E,EAAOuC,QAAS,CACpBsC,EAAKgD,MACT,CACA,IAEEhO,KAAK+K,MAAQA,CACf,EAEC,OAAOrG,CACR,EAGA6vC,EAAYl3C,UAAU04C,gBAAkB,SAAUn1B,EAAKtc,GACtD,IAAIwxC,EAAU,GACVzf,EAAQzV,GAAO,MAAQ5gB,KAAKw0C,SAAWx0C,KAAKy0C,SAC5C9mC,EAAOiT,GAAO,MAAQ,UAAY,UAClCrJ,EACAg/B,EAEJlgB,EAAMnxB,SAAQ,SAAUiB,GACvB,IAAI4iC,EAAS,GAEb,GAAI5iC,EAAOhC,QAAQ0F,aAAe1D,EAAOhC,QAAQ0F,YAAY8D,GAAO,CACnErJ,EAAKY,SAAQ,SAAUic,GACtB4nB,EAAO9jC,KAAKkB,EAAO+J,cAAciR,GACrC,IAEGo1B,EAAW5oC,EAAO,SAClB4J,SAAgBpR,EAAOhC,QAAQ0F,YAAY0sC,KAAc,WAAapwC,EAAOhC,QAAQ0F,YAAY0sC,GAAUxN,EAAQzkC,GAAQ6B,EAAOhC,QAAQ0F,YAAY0sC,GAEtJpwC,EAAOgK,cAAc2lC,EAAS3vC,EAAOhC,QAAQ0F,YAAY8D,GAAMo7B,EAAQzkC,EAAMiT,GAChF,CACA,IAEC,OAAOu+B,CACR,EAEAvB,EAAYl3C,UAAUm5C,YAAc,WACnC,QAASx2C,KAAKw0C,SAASp2C,MACxB,EAEAm2C,EAAYl3C,UAAUo5C,eAAiB,WACtC,QAASz2C,KAAKy0C,SAASr2C,MACxB,EAGAm2C,EAAYl3C,UAAU0I,OAAS,WAC9B,GAAI/F,KAAKkmB,OAAQ,CAChBlmB,KAAKkmB,OAAO0B,gBAAgB,KAC9B,CACC,GAAI5nB,KAAK60C,OAAQ,CAChB70C,KAAK60C,OAAOjtB,gBAAgB,KAC9B,CACA,EAGA2sB,EAAYl3C,UAAUisC,WAAa,WAClC,IAAIjkC,EAAOrF,KACP6rC,EAAU,GACVjD,EAEJ,GAAI5oC,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CACpE0kC,EAAS5oC,KAAKkC,MAAMiC,QAAQ+Y,UAAU6N,UAAU,MAEhD6d,EAAO1jC,SAAQ,SAAU4lB,GACxB+gB,EAAQ/gB,EAAM4rB,UAAYrxC,EAAKsxC,gBAAgB7rB,EAClD,GACA,KAAQ,CACN+gB,EAAU,CACTzuB,IAAKpd,KAAKkmB,OAASlmB,KAAKkmB,OAAOzF,UAAY,GAC3CqT,OAAQ9zB,KAAK60C,OAAS70C,KAAK60C,OAAOp0B,UAAY,GAEjD,CAEC,OAAOorB,CACR,EAGA0I,EAAYl3C,UAAUs5C,gBAAkB,SAAU7rB,GACjD,IAAIzlB,EAAOrF,KACP42C,EAAW9rB,EAAMhjB,WACjB+uC,EAAY/rB,EAAMgsB,eAClBC,EAAkB,GAClBlL,EAAU,GAEdgL,EAAU3xC,SAAQ,SAAU8xC,GAC3BD,EAAgBC,EAASN,UAAYrxC,EAAKsxC,gBAAgBK,EAC5D,IAECnL,EAAU,CACTzuB,IAAKw5B,EAASvgB,MAAMjZ,IAAMw5B,EAASvgB,MAAMjZ,IAAIqD,UAAY,GACzDqT,OAAQ8iB,EAASvgB,MAAMvC,OAAS8iB,EAASvgB,MAAMvC,OAAOrT,UAAY,GAClEmoB,OAAQmO,GAGT,OAAOlL,CACR,EAGA0I,EAAYl3C,UAAU83C,aAAe,CACpC8B,IAAO,SAASA,EAAIlO,EAAQzkC,EAAM4yC,GACjC,IAAIjuC,EAAS,EACTkuC,SAAmBD,EAAWC,YAAc,YAAcD,EAAWC,UAAY,EAErF,GAAIpO,EAAO3qC,OAAQ,CAClB6K,EAAS8/B,EAAOqO,QAAO,SAAUC,EAAKt5C,GACrC,OAAOu5C,OAAOD,GAAOC,OAAOv5C,EAChC,IAEGkL,EAASA,EAAS8/B,EAAO3qC,OAEzB6K,EAASkuC,IAAc,MAAQluC,EAAOsuC,QAAQJ,GAAaluC,CAC9D,CAEE,OAAOuuC,WAAWvuC,GAAQwuC,UAC5B,EACCt2C,IAAO,SAASA,EAAI4nC,EAAQzkC,EAAM4yC,GACjC,IAAIjuC,EAAS,KACTkuC,SAAmBD,EAAWC,YAAc,YAAcD,EAAWC,UAAY,MAErFpO,EAAO7jC,SAAQ,SAAUnH,GAExBA,EAAQu5C,OAAOv5C,GAEf,GAAIA,EAAQkL,GAAUA,IAAW,KAAM,CACtCA,EAASlL,CACb,CACA,IAEE,OAAOkL,IAAW,KAAOkuC,IAAc,MAAQluC,EAAOsuC,QAAQJ,GAAaluC,EAAS,EACtF,EACC6C,IAAO,SAASA,EAAIi9B,EAAQzkC,EAAM4yC,GACjC,IAAIjuC,EAAS,KACTkuC,SAAmBD,EAAWC,YAAc,YAAcD,EAAWC,UAAY,MAErFpO,EAAO7jC,SAAQ,SAAUnH,GAExBA,EAAQu5C,OAAOv5C,GAEf,GAAIA,EAAQkL,GAAUA,IAAW,KAAM,CACtCA,EAASlL,CACb,CACA,IAEE,OAAOkL,IAAW,KAAOkuC,IAAc,MAAQluC,EAAOsuC,QAAQJ,GAAaluC,EAAS,EACtF,EACCouC,IAAO,SAASA,EAAItO,EAAQzkC,EAAM4yC,GACjC,IAAIjuC,EAAS,EACTkuC,SAAmBD,EAAWC,YAAc,YAAcD,EAAWC,UAAY,MAErF,GAAIpO,EAAO3qC,OAAQ,CAClB2qC,EAAO7jC,SAAQ,SAAUnH,GACxBA,EAAQu5C,OAAOv5C,GAEfkL,IAAWzH,MAAMzD,GAASu5C,OAAOv5C,GAAS,CAC9C,GACA,CAEE,OAAOo5C,IAAc,MAAQluC,EAAOsuC,QAAQJ,GAAaluC,CAC3D,EACC4B,OAAU,SAASA,EAAOk+B,EAAQzkC,EAAM4yC,GACvC,IAAIjuC,EAAS,EAEb,GAAI8/B,EAAO3qC,OAAQ,CAClB6K,EAAS8/B,EAAOqO,QAAO,SAAUC,EAAKt5C,GACrC,OAAO0C,OAAO42C,GAAO52C,OAAO1C,EAChC,GACA,CAEE,OAAOkL,CACT,EACCi8B,MAAS,SAASA,EAAM6D,EAAQzkC,EAAM4yC,GACrC,IAAIjuC,EAAS,EAEb,GAAI8/B,EAAO3qC,OAAQ,CAClB2qC,EAAO7jC,SAAQ,SAAUnH,GACxB,GAAIA,EAAO,CACVkL,GACL,CACA,GACA,CAEE,OAAOA,CACT,GAGAmE,EAAU/P,UAAUytC,eAAe,cAAeyJ,GAElD,IAAImD,EAAY,SAASA,EAAUx1C,GAClClC,KAAKkC,MAAQA,EACblC,KAAKksC,KAAO,KAEZlsC,KAAK23C,YAAc,WAAY,EAC/B33C,KAAK43C,YAAc,WAAY,EAC/B53C,KAAK63C,gBAAkB,MACvB73C,KAAK83C,SAAW,MAChB93C,KAAK+3C,QAAU,IAChB,EAEAL,EAAUr6C,UAAUiG,WAAa,WAChC,IAAI00C,EAAUh4C,KAEdA,KAAKksC,KAAOlsC,KAAKkC,MAAMkB,QAAQo1B,UAE/Bx4B,KAAK83C,SAAW93C,KAAKkC,MAAMkB,QAAQw1B,sBAEnC,GAAI54B,KAAKksC,OAAS,MAAQlsC,KAAKksC,OAAS,OAAQ,CAC/ClsC,KAAKkC,MAAMI,QAAQ8R,iBAAiB,QAAQ,SAAUC,GACrD,IAAI4jC,EAAOC,EAAM/0B,EAEjB,IAAK60B,EAAQD,QAAS,CACrB1jC,EAAEwgB,iBAEF,GAAImjB,EAAQH,gBAAiB,CAC5BI,EAAQD,EAAQH,gBAEhB,GAAIG,EAAQ91C,MAAMkB,QAAQu1B,uBAAwB,CACjDsf,EAAQD,EAAQ91C,MAAMkB,QAAQu1B,uBAAuB,QAASsf,EACpE,CACA,KAAW,CAEN,IAAI90B,EAAO60B,EAAQ91C,MAAMiC,QAAQmgC,OAAO6T,mBAAmBH,EAAQ91C,MAAMkB,QAAQs1B,oBAAqBsf,EAAQ91C,MAAMkB,QAAQq1B,oBAAqBuf,EAAQF,SAAU,aAEnKI,EAAOF,EAAQ91C,MAAMiC,QAAQmgC,OAAO8T,mBAAmBj1B,GACvD80B,EAAQC,EAAOF,EAAQK,qBAAqBl1B,GAAQ,GAEpD,GAAI60B,EAAQ91C,MAAMkB,QAAQu1B,uBAAwB,CACjDsf,EAAQD,EAAQ91C,MAAMkB,QAAQu1B,uBAAuB,QAASsf,GAC9DC,EAAOF,EAAQ91C,MAAMkB,QAAQu1B,uBAAuB,OAAQuf,EAClE,CACA,CAEI,GAAI/tB,OAAOmuB,eAAiBnuB,OAAOmuB,cAAc35B,QAAS,CACzDwL,OAAOmuB,cAAc35B,QAAQ,OAAQs5B,EAC1C,MAAW,GAAI5jC,EAAEikC,eAAiBjkC,EAAEikC,cAAc35B,QAAS,CACtDtK,EAAEikC,cAAc35B,QAAQ,aAAcs5B,GACtC,GAAIC,EAAM,CACT7jC,EAAEikC,cAAc35B,QAAQ,YAAau5B,EAC3C,CACA,MAAW,GAAI7jC,EAAEkkC,eAAiBlkC,EAAEkkC,cAAcD,cAAc35B,QAAS,CACpEtK,EAAEkkC,cAAcD,cAAc35B,QAAQ,aAAcs5B,GACpD,GAAIC,EAAM,CACT7jC,EAAEkkC,cAAcD,cAAc35B,QAAQ,YAAau5B,EACzD,CACA,CAEIF,EAAQ91C,MAAMkB,QAAQ21B,gBAAgBr7B,KAAKs6C,EAAQ91C,MAAO+1C,EAAOC,GAEjEF,EAAQzyC,OACZ,CACA,GACA,CAEC,GAAIvF,KAAKksC,OAAS,MAAQlsC,KAAKksC,OAAS,QAAS,CAChDlsC,KAAKkC,MAAMI,QAAQ8R,iBAAiB,SAAS,SAAUC,GACtD2jC,EAAQQ,MAAMnkC,EACjB,GACA,CAECrU,KAAKy4C,eAAez4C,KAAKkC,MAAMkB,QAAQy1B,sBACvC74B,KAAK04C,eAAe14C,KAAKkC,MAAMkB,QAAQ01B,qBACxC,EAEA4e,EAAUr6C,UAAUkI,MAAQ,WAC3BvF,KAAK+3C,QAAU,KACf/3C,KAAK63C,gBAAkB,KACxB,EAEAH,EAAUr6C,UAAUg7C,qBAAuB,SAAUl1B,GACpD,IAAIla,EAAS,GAEbka,EAAKje,SAAQ,SAAUR,GACtB,IAAIoxC,EAAU,GAEdpxC,EAAIjC,QAAQyC,SAAQ,SAAUN,GAC7B,IAAI7G,EAAQ,GAEZ,GAAI6G,EAAK,CAER,GAAIF,EAAIiJ,OAAS,QAAS,CACzB/I,EAAI7G,MAAQ6G,EAAI6M,UAAUilC,QAC/B,CAEI,GAAI9xC,EAAI7G,QAAU,KAAM,CACvBA,EAAQ,EACb,KAAW,CACN,OAAQyB,EAAQoF,EAAI7G,QACnB,IAAK,SACJA,EAAQ4yB,KAAKwjB,UAAUvvC,EAAI7G,OAC3B,MAED,IAAK,YACJA,EAAQ,GACR,MAED,QACCA,EAAQ6G,EAAI7G,MAEnB,CACA,CAEG+3C,EAAQ7wC,KAAKlH,EAChB,IAEEkL,EAAOhE,KAAK6wC,EAAQ9C,KAAK,MAC3B,IAEC,OAAO/pC,EAAO+pC,KAAK,KACpB,EAEA0E,EAAUr6C,UAAU4oC,KAAO,SAAUlR,EAAO4jB,GAC3C,IAAI5jB,EAAO6jB,EAAKC,EAChB74C,KAAK+3C,QAAU,MACf/3C,KAAK63C,gBAAkB,MAEvB,GAAI73C,KAAKksC,OAAS,MAAQlsC,KAAKksC,OAAS,OAAQ,CAE/ClsC,KAAK83C,SAAW/iB,GAAS/0B,KAAKkC,MAAMkB,QAAQw1B,sBAE5C,UAAWzO,OAAOgL,cAAgB,oBAAsBnyB,SAASoyB,aAAe,YAAa,CAC5FL,EAAQ/xB,SAASoyB,cACjBL,EAAM+jB,mBAAmB94C,KAAKkC,MAAMI,SACpCs2C,EAAMzuB,OAAOgL,eAEb,GAAIyjB,EAAInB,YAAckB,EAAU,CAC/B34C,KAAK63C,gBAAkBe,EAAInB,UAC/B,CAEGmB,EAAItjB,kBACJsjB,EAAIrjB,SAASR,EAChB,MAAS,UAAW/xB,SAAS8xB,WAAa,oBAAsB9xB,SAASgyB,KAAKC,iBAAmB,YAAa,CAC3G4jB,EAAY71C,SAASgyB,KAAKC,kBAC1B4jB,EAAU3jB,kBAAkBl1B,KAAKkC,MAAMI,SACvCu2C,EAAU5rB,QACb,CAEEjqB,SAAS+1C,YAAY,QAErB,GAAIH,EAAK,CACRA,EAAItjB,iBACP,CACA,CACA,EAIAoiB,EAAUr6C,UAAUq7C,eAAiB,SAAU53B,GAE9C,cAAeA,IAAW,YAAc,YAActhB,EAAQshB,IAC7D,IAAK,SACJ9gB,KAAK43C,YAAc53C,KAAKg5C,aAAal4B,GAErC,IAAK9gB,KAAK43C,YAAa,CACtB7rC,QAAQC,KAAK,gDAAiD8U,EAClE,CACG,MAED,IAAK,WACJ9gB,KAAK43C,YAAc92B,EACnB,MAEH,EAEA42B,EAAUr6C,UAAUo7C,eAAiB,SAAUQ,GAC9C,cAAeA,IAAW,YAAc,YAAcz5C,EAAQy5C,IAC7D,IAAK,SACJj5C,KAAK23C,YAAc33C,KAAKk5C,aAAaD,GAErC,IAAKj5C,KAAK23C,YAAa,CACtB5rC,QAAQC,KAAK,gDAAiDitC,EAClE,CACG,MAED,IAAK,WACJj5C,KAAK23C,YAAcsB,EACnB,MAEH,EAEAvB,EAAUr6C,UAAUm7C,MAAQ,SAAUnkC,GACrC,IAAI/P,EAAMwxC,EAASnrC,EAEnB,GAAI3K,KAAKm5C,gBAAgB9kC,GAAI,CAE5B/P,EAAOtE,KAAKo5C,aAAa/kC,GAEzByhC,EAAU91C,KAAK23C,YAAYj6C,KAAKsC,KAAMsE,GAEtC,GAAIwxC,EAAS,CACZzhC,EAAEwgB,iBAEF,GAAI70B,KAAKkC,MAAMgC,UAAU,WAAY,CACpC4xC,EAAU91C,KAAKq5C,WAAWvD,EAC9B,CAEGnrC,EAAO3K,KAAK43C,YAAYl6C,KAAKsC,KAAM81C,GACnC91C,KAAKkC,MAAMkB,QAAQ41B,gBAAgBt7B,KAAKsC,KAAKkC,MAAOoC,EAAMwxC,EAASnrC,EACtE,KAAS,CACN3K,KAAKkC,MAAMkB,QAAQ61B,oBAAoBv7B,KAAKsC,KAAKkC,MAAOoC,EAC3D,CACA,CACA,EAEAozC,EAAUr6C,UAAUg8C,WAAa,SAAU/0C,GAC1C,IAAIe,EAAOrF,KACPiJ,EAAS,GAEb,GAAIpJ,MAAMkF,QAAQT,GAAO,CACxBA,EAAKY,SAAQ,SAAUR,GACtBuE,EAAOhE,KAAKI,EAAKnD,MAAMiC,QAAQ6R,QAAQqa,aAAa3rB,EAAK,aAC5D,GACA,KAAQ,CACNuE,EAAS3E,CACX,CAEC,OAAO2E,CACR,EAEAyuC,EAAUr6C,UAAU87C,gBAAkB,SAAU9kC,GAC/C,IAAI8hB,EAAQ,KAEZ,GAAI9hB,EAAE3S,OAAO2/B,SAAW,OAASrhC,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAAa,CACrEmc,EAAQ,KACV,CAEC,OAAOA,CACR,EAEAuhB,EAAUr6C,UAAU+7C,aAAe,SAAU/kC,GAC5C,IAAI/P,EAEJ,GAAI6lB,OAAOmuB,eAAiBnuB,OAAOmuB,cAAc73B,QAAS,CACzDnc,EAAO6lB,OAAOmuB,cAAc73B,QAAQ,OACtC,MAAQ,GAAIpM,EAAEikC,eAAiBjkC,EAAEikC,cAAc73B,QAAS,CACtDnc,EAAO+P,EAAEikC,cAAc73B,QAAQ,aACjC,MAAQ,GAAIpM,EAAEkkC,eAAiBlkC,EAAEkkC,cAAcD,cAAc73B,QAAS,CACpEnc,EAAO+P,EAAEkkC,cAAcD,cAAc73B,QAAQ,aAC/C,CAEC,OAAOnc,CACR,EAEAozC,EAAUr6C,UAAU67C,aAAe,CAClCh3C,MAAO,SAASA,EAAMs2B,GAClB,IAACl0B,EAAO,GAEPg1C,EAAoB,KACpB72C,EAAUzC,KAAKkC,MAAMkI,cAAc3H,QACnC82C,EAAY,GACZ5uC,EAAO,GAGX6tB,EAAYA,EAAUjwB,MAAM,MAE5BiwB,EAAUtzB,SAAQ,SAAUR,GAC3BJ,EAAKW,KAAKP,EAAI6D,MAAM,MACvB,IAEE,GAAIjE,EAAKlG,UAAYkG,EAAKlG,SAAW,GAAKkG,EAAK,GAAGlG,OAAS,GAAI,CAI9DkG,EAAK,GAAGY,SAAQ,SAAUnH,GACzB,IAAIoI,EAAS1D,EAAQjC,MAAK,SAAU2F,GACnC,OAAOpI,GAASoI,EAAOH,WAAWlB,OAAS/G,EAAMi0C,QAAU7rC,EAAOH,WAAWlB,MAAMktC,SAAWj0C,EAAMi0C,MACzG,IAEI,GAAI7rC,EAAQ,CACXozC,EAAUt0C,KAAKkB,EACpB,KAAW,CACNmzC,EAAoB,KACzB,CACA,IAGG,IAAKA,EAAmB,CACvBA,EAAoB,KACpBC,EAAY,GAEZj1C,EAAK,GAAGY,SAAQ,SAAUnH,GACzB,IAAIoI,EAAS1D,EAAQjC,MAAK,SAAU2F,GACnC,OAAOpI,GAASoI,EAAOtB,OAAS9G,EAAMi0C,QAAU7rC,EAAOtB,MAAMmtC,SAAWj0C,EAAMi0C,MACpF,IAEK,GAAI7rC,EAAQ,CACXozC,EAAUt0C,KAAKkB,EACrB,KAAY,CACNmzC,EAAoB,KAC1B,CACA,IAEI,IAAKA,EAAmB,CACvBC,EAAYv5C,KAAKkC,MAAMkI,cAAc1H,cAC1C,CACA,CAGG,GAAI42C,EAAmB,CACtBh1C,EAAKk1C,OACT,CAEGl1C,EAAKY,SAAQ,SAAUic,GACtB,IAAIzc,EAAM,GAEVyc,EAAKjc,SAAQ,SAAUnH,EAAOyH,GAC7B,GAAI+zC,EAAU/zC,GAAI,CACjBd,EAAI60C,EAAU/zC,GAAGX,OAAS9G,CAChC,CACA,IAEI4M,EAAK1F,KAAKP,EACd,IAEG,OAAOiG,CACV,KAAS,CACN,OAAO,KACV,CACA,GAGA+sC,EAAUr6C,UAAU27C,aAAe,CAClCS,QAAS,SAASA,EAAQ9uC,GACzB,OAAO3K,KAAKkC,MAAMyc,QAAQhU,EAC5B,EACC6C,OAAQ,SAASA,EAAO7C,GACvB,OAAO3K,KAAKkC,MAAM4iC,gBAAgBn6B,EACpC,EACC+uC,OAAQ,SAASA,EAAO/uC,GACvB,OAAO3K,KAAKkC,MAAM0iC,QAAQj6B,EAC5B,GAGAyC,EAAU/P,UAAUytC,eAAe,YAAa4M,GAEhD,IAAIiC,EAAW,SAASA,EAASz3C,GAChClC,KAAKkC,MAAQA,EACblC,KAAK45C,OAAS,GACd55C,KAAK6E,MAAQ,GACb7E,KAAK65C,WAAa,KAClB75C,KAAK85C,SAAW,KAChB95C,KAAK+5C,SAAW,KAChB/5C,KAAKg6C,aAAe,MAEpBh6C,KAAKi6C,UAAY,WAAY,EAE7Bj6C,KAAKqgB,aAAe,CACrB,EAEAs5B,EAASt8C,UAAUiG,WAAa,WAC/B,IAAI42C,EAAU,KACVC,EAAWn6C,KAAKkC,MAAMkI,cAAc3B,yBACpCrF,EAAUpD,KAAKkC,MAAMkB,QAEzBpD,KAAK6E,MAAQzB,EAAQy2B,mBACrB75B,KAAK45C,OAASx2C,EAAQw2B,oBACtB55B,KAAKg6C,aAAe52C,EAAQs2B,wBAA0BygB,EAAWA,EAASt1C,MAAQ,OAElF,GAAIzB,EAAQu2B,sBAAuB,CAElC,GAAIv2B,EAAQu2B,wBAA0B,KAAM,CAC3C35B,KAAK+5C,SAAW/2C,SAASC,cAAc,OACvCjD,KAAK+5C,SAAS72C,UAAUC,IAAI,6BAC/B,KAAS,CACN,UAAWC,EAAQu2B,wBAA0B,SAAU,CACtDugB,EAAUl3C,SAASC,cAAc,OACjCi3C,EAAQniC,UAAY3U,EAAQu2B,sBAC5B35B,KAAK+5C,SAAWG,EAAQp3C,UAC5B,KAAU,CACN9C,KAAK+5C,SAAW32C,EAAQu2B,qBAC5B,CACA,CACA,CAEC,GAAIv2B,EAAQ02B,wBAAyB,CACpC,UAAW12B,EAAQ02B,0BAA4B,SAAU,CACxDogB,EAAUl3C,SAASC,cAAc,OACjCi3C,EAAQniC,UAAY3U,EAAQ02B,wBAC5B95B,KAAK65C,WAAaK,EAAQp3C,UAC7B,KAAS,CACN9C,KAAK65C,WAAaz2C,EAAQ02B,uBAC7B,CACA,KAAQ,CACN95B,KAAK65C,WAAa72C,SAASC,cAAc,OACzCjD,KAAK65C,WAAW32C,UAAUC,IAAI,+BAC9BnD,KAAK65C,WAAWO,SAAW,EAC3Bp6C,KAAK65C,WAAW9hC,UAAY,0DAC9B,CAEC,GAAI3U,EAAQ22B,sBAAuB,CAClC,UAAW32B,EAAQ22B,wBAA0B,SAAU,CACtDmgB,EAAUl3C,SAASC,cAAc,OACjCi3C,EAAQniC,UAAY3U,EAAQ22B,sBAC5B/5B,KAAK85C,SAAWI,EAAQp3C,UAC3B,KAAS,CACN9C,KAAK85C,SAAW12C,EAAQ22B,qBAC3B,CACA,KAAQ,CACN/5B,KAAK85C,SAAW92C,SAASC,cAAc,OACvCjD,KAAK85C,SAAS52C,UAAUC,IAAI,+BAC5BnD,KAAK85C,SAASM,SAAW,EACzBp6C,KAAK85C,SAAS/hC,UAAY,wDAC5B,CAEC,OAAQvY,EAAQ4D,EAAQ42B,wBACvB,IAAK,UACJh6B,KAAKi6C,UAAY,SAAUv1C,EAAKvG,GAC/B,OAAOiF,EAAQ42B,qBACnB,EACG,MAED,IAAK,WACJh6B,KAAKi6C,UAAY72C,EAAQ42B,sBACzB,MAED,QACCh6B,KAAKi6C,UAAY,SAAUv1C,EAAKvG,GAC/B,OAAOiF,EAAQ42B,sBAAsB77B,EACzC,EACG,MAEH,EAEAw7C,EAASt8C,UAAUmvB,cAAgB,SAAU9nB,GAC5C,IAAI21C,EAAa31C,EAAI+b,UAAUzgB,KAAK6E,OACpC,IAAIE,EAAUlF,MAAMkF,QAAQs1C,GAE5B,IAAInqB,EAAWnrB,IAAYA,WAAmBs1C,IAAe,YAAc,YAAc76C,EAAQ66C,MAAiB,UAAYA,IAAe,KAE7I,IAAKnqB,GAAYxrB,EAAIP,QAAQyG,UAAYlG,EAAIP,QAAQyG,SAASmvC,SAAU,CACvEr1C,EAAIP,QAAQyG,SAASmvC,SAASpzC,WAAWrB,YAAYZ,EAAIP,QAAQyG,SAASmvC,SAC5E,CAEC,IAAK7pB,GAAYxrB,EAAIP,QAAQyG,UAAYlG,EAAIP,QAAQyG,SAAS0vC,UAAW,CACxE51C,EAAIP,QAAQyG,SAAS0vC,UAAU3zC,WAAWrB,YAAYZ,EAAIP,QAAQyG,SAAS0vC,UAC7E,CAEC51C,EAAIP,QAAQyG,SAAW,CACtBzM,MAAOuG,EAAIP,QAAQyG,SAAWlG,EAAIP,QAAQyG,SAASzM,MAAQ,EAC3Dg4C,KAAMjmB,EAAWxrB,EAAIP,QAAQyG,SAAWlG,EAAIP,QAAQyG,SAASurC,KAAOn2C,KAAKi6C,UAAUv1C,EAAI4E,eAAgB,GAAK,MAC5GgxC,UAAW51C,EAAIP,QAAQyG,UAAYslB,EAAWxrB,EAAIP,QAAQyG,SAAS0vC,UAAY,MAC/EP,SAAUr1C,EAAIP,QAAQyG,UAAYslB,EAAWxrB,EAAIP,QAAQyG,SAASmvC,SAAW,MAC7E/vC,OAAQtF,EAAIP,QAAQyG,SAAWlG,EAAIP,QAAQyG,SAASZ,OAAS,MAC7DkmB,SAAUA,EAEZ,EAEAypB,EAASt8C,UAAUwyB,UAAY,SAAUnrB,GACxC,IAAIsG,EAAOhL,KAAKg6C,aAAet1C,EAAIihB,QAAQ3lB,KAAKg6C,cAAgBt1C,EAAIkJ,WAAW,GAC3E7K,EAAKiI,EAAKvH,aACV6G,EAAS5F,EAAIP,QAAQyG,SAEzB,GAAIN,EAAOyvC,SAAU,CACpB,GAAIzvC,EAAOyvC,SAASpzC,WAAY,CAC/B2D,EAAOyvC,SAASpzC,WAAWrB,YAAYgF,EAAOyvC,SACjD,CACEzvC,EAAOyvC,SAAW,KACpB,CAEC,GAAIzvC,EAAOgwC,UAAW,CACrB,GAAIhwC,EAAOgwC,UAAU3zC,WAAY,CAChC2D,EAAOgwC,UAAU3zC,WAAWrB,YAAYgF,EAAOgwC,UAClD,CACEhwC,EAAOgwC,UAAY,KACrB,CAECt6C,KAAKu6C,uBAAuB71C,EAAK3B,GAEjC2B,EAAIjB,aAAaP,UAAUC,IAAI,wBAA0BmH,EAAOnM,OAEhE,GAAImM,EAAOnM,MAAO,CACjB,GAAI6B,KAAK+5C,SAAU,CAClBzvC,EAAOyvC,SAAW/5C,KAAK+5C,SAASS,UAAU,MAC1Cz3C,EAAGF,aAAayH,EAAOyvC,SAAUh3C,EAAGD,YAEpC,GAAI9C,KAAKkC,MAAMqoB,IAAK,CACnBjgB,EAAOyvC,SAAS/1C,MAAMy2C,aAAenwC,EAAOyvC,SAASluC,YAAcvB,EAAOyvC,SAAS/1C,MAAMC,aAAeqG,EAAOnM,MAAQ,GAAKmM,EAAOnM,MAAQ6B,KAAK45C,OAAS,IAC7J,KAAU,CACNtvC,EAAOyvC,SAAS/1C,MAAMC,YAAcqG,EAAOyvC,SAASluC,YAAcvB,EAAOyvC,SAAS/1C,MAAMy2C,cAAgBnwC,EAAOnM,MAAQ,GAAKmM,EAAOnM,MAAQ6B,KAAK45C,OAAS,IAC7J,CACA,KAAS,CAEN,GAAI55C,KAAKkC,MAAMqoB,IAAK,CACnBxnB,EAAGiB,MAAMwnB,aAAe7e,SAASwd,OAAO0W,iBAAiB99B,EAAI,MAAM23C,iBAAiB,kBAAoBpwC,EAAOnM,MAAQ6B,KAAK45C,OAAS,IACzI,KAAU,CACN72C,EAAGiB,MAAMunB,YAAc5e,SAASwd,OAAO0W,iBAAiB99B,EAAI,MAAM23C,iBAAiB,iBAAmBpwC,EAAOnM,MAAQ6B,KAAK45C,OAAS,IACvI,CACA,CACA,CACA,EAEAD,EAASt8C,UAAUk9C,uBAAyB,SAAU71C,EAAK3B,GAC1D,IAAI43C,EAAU36C,KAEd,IAAIsK,EAAS5F,EAAIP,QAAQyG,SACrB7H,EAAKA,GAAM2B,EAAIkJ,WAAW,GAAGnK,aAC7Bm3C,EAAatwC,EAAOgwC,UAExB,GAAIhwC,EAAO4lB,WAAa,MAAO,CAE9B,GAAI5lB,EAAO6rC,KAAM,CAChB7rC,EAAOgwC,UAAYt6C,KAAK65C,WAAWW,UAAU,MAC7ClwC,EAAOgwC,UAAUlmC,iBAAiB,SAAS,SAAUC,GACpDA,EAAE0C,kBACF4jC,EAAQ9sB,YAAYnpB,EACxB,GACA,KAAS,CACN4F,EAAOgwC,UAAYt6C,KAAK85C,SAASU,UAAU,MAC3ClwC,EAAOgwC,UAAUlmC,iBAAiB,SAAS,SAAUC,GACpDA,EAAE0C,kBACF4jC,EAAQ5sB,UAAUrpB,EACtB,GACA,CAEE4F,EAAOgwC,UAAUlmC,iBAAiB,aAAa,SAAUC,GACxDA,EAAE0C,iBACL,IAEE,GAAI6jC,GAAcA,EAAWj0C,aAAe5D,EAAI,CAC/C63C,EAAWj0C,WAAWk0C,aAAavwC,EAAOgwC,UAAWM,EACxD,KAAS,CACN73C,EAAGF,aAAayH,EAAOgwC,UAAWv3C,EAAGD,WACxC,CACA,CACA,EAEA62C,EAASt8C,UAAU8nB,gBAAkB,SAAUhnB,GAC9C6B,KAAKqgB,aAAeliB,CACrB,EAEAw7C,EAASt8C,UAAU6nB,gBAAkB,WACpC,OAAOllB,KAAKqgB,YACb,EAEAs5B,EAASt8C,UAAUgmB,QAAU,SAAU1Y,GACtC,IAAImwC,EAAU96C,KAEd,IAAIiJ,EAAS,GAEb0B,EAAKzF,SAAQ,SAAUR,EAAKc,GAC3B,IAAI8E,EAAQ4lB,EAEZjnB,EAAOhE,KAAKP,GAEZ,GAAIA,aAAeiZ,EAAK,CAEvBjZ,EAAIiqB,SAEJrkB,EAAS5F,EAAIP,QAAQyG,SAASslB,SAE9B,IAAK5lB,EAAOnM,OAASmM,EAAO4lB,WAAa,MAAO,CAC/CA,EAAW4qB,EAAQC,YAAYr2C,GAE/BwrB,EAAShrB,SAAQ,SAAUoU,GAC1BA,EAAMqV,SACN1lB,EAAOhE,KAAKqU,EACjB,GACA,CACA,CACA,IAEC,OAAOrQ,CACR,EAEA0wC,EAASt8C,UAAU09C,YAAc,SAAUr2C,EAAKs2C,GAC/C,IAAIC,EAAUj7C,KAEd,IAAIsK,EAAS5F,EAAIP,QAAQyG,SACrBslB,EAAW,GACXjnB,EAAS,GAEb,GAAIqB,EAAO4lB,WAAa,QAAU5lB,EAAO6rC,MAAQ6E,GAAc,CAC9D,IAAKn7C,MAAMkF,QAAQuF,EAAO4lB,UAAW,CACpC5lB,EAAO4lB,SAAWlwB,KAAKk7C,iBAAiBx2C,EAC3C,CAEE,GAAI1E,KAAKkC,MAAMgC,UAAU,WAAalE,KAAKkC,MAAMkB,QAAQo2B,eAAgB,CACxEtJ,EAAWlwB,KAAKkC,MAAMiC,QAAQqK,OAAOA,OAAOlE,EAAO4lB,SACtD,KAAS,CACNA,EAAW5lB,EAAO4lB,QACrB,CAEE,GAAIlwB,KAAKkC,MAAMgC,UAAU,SAAWlE,KAAKkC,MAAMkB,QAAQq2B,aAAc,CACpEz5B,KAAKkC,MAAMiC,QAAQmR,KAAKA,KAAK4a,EAChC,CAEEA,EAAShrB,SAAQ,SAAUoU,GAC1BrQ,EAAOhE,KAAKqU,GAEZ,IAAI6hC,EAAcF,EAAQF,YAAYzhC,GAEtC6hC,EAAYj2C,SAAQ,SAAUk2C,GAC7BnyC,EAAOhE,KAAKm2C,EAChB,GACA,GACA,CAEC,OAAOnyC,CACR,EAEA0wC,EAASt8C,UAAU69C,iBAAmB,SAAUx2C,GAC/C,IAAI22C,EAAUr7C,KAEd,IAAIkwB,EAAW,GAEf,IAAImqB,EAAa31C,EAAI+b,UAAUzgB,KAAK6E,OAEpC,IAAKhF,MAAMkF,QAAQs1C,GAAa,CAC/BA,EAAa,CAACA,EAChB,CAECA,EAAWn1C,SAAQ,SAAUo2C,GAC5B,IAAIC,EAAW,IAAI59B,EAAI29B,GAAa,GAAID,EAAQn5C,MAAMM,YAEtD+4C,EAAS5sB,SAET4sB,EAASp3C,QAAQyG,SAASzM,MAAQuG,EAAIP,QAAQyG,SAASzM,MAAQ,EAC/Do9C,EAASp3C,QAAQyG,SAASZ,OAAStF,EAEnC,GAAI62C,EAASp3C,QAAQyG,SAASslB,SAAU,CACvCqrB,EAASp3C,QAAQyG,SAASurC,KAAOkF,EAAQpB,UAAUsB,EAASjyC,eAAgBiyC,EAASp3C,QAAQyG,SAASzM,MACzG,CACE+xB,EAASjrB,KAAKs2C,EAChB,IAEC,OAAOrrB,CACR,EAEAypB,EAASt8C,UAAU0wB,UAAY,SAAUrpB,EAAKsU,GAC7C,IAAI1O,EAAS5F,EAAIP,QAAQyG,SAEzB,GAAIN,EAAO4lB,WAAa,MAAO,CAC9B5lB,EAAO6rC,KAAO,KAEdzxC,EAAIoB,eAEJ9F,KAAKkC,MAAMM,WAAWmd,kBAAkB,OAAQ,MAAO,MAEvD3f,KAAKkC,MAAMkB,QAAQ62B,oBAAoBv1B,EAAI4E,eAAgB5E,EAAIP,QAAQyG,SAASzM,MAClF,CACA,EAEAw7C,EAASt8C,UAAUwwB,YAAc,SAAUnpB,GAC1C,IAAI4F,EAAS5F,EAAIP,QAAQyG,SAEzB,GAAIN,EAAO4lB,WAAa,MAAO,CAC9B5lB,EAAO6rC,KAAO,MAEdzxC,EAAIoB,eAEJ9F,KAAKkC,MAAMM,WAAWmd,kBAAkB,OAAQ,MAAO,MAEvD3f,KAAKkC,MAAMkB,QAAQ82B,qBAAqBx1B,EAAI4E,eAAgB5E,EAAIP,QAAQyG,SAASzM,MACnF,CACA,EAEAw7C,EAASt8C,UAAUgwB,UAAY,SAAU3oB,GACxC,IAAI4F,EAAS5F,EAAIP,QAAQyG,SAEzB,GAAIN,EAAO4lB,WAAa,MAAO,CAC9B,GAAI5lB,EAAO6rC,KAAM,CAChBn2C,KAAK6tB,YAAYnpB,EACpB,KAAS,CACN1E,KAAK+tB,UAAUrpB,EAClB,CACA,CACA,EAEAi1C,EAASt8C,UAAU4wB,cAAgB,SAAUvpB,GAC5C,OAAOA,EAAIP,QAAQyG,SAASZ,OAAStF,EAAIP,QAAQyG,SAASZ,OAAOV,eAAiB,KACnF,EAEAqwC,EAASt8C,UAAU+4C,wBAA0B,SAAU1xC,GACtD,IAAI4F,EAAS5F,EAAIP,QAAQyG,SACrB3B,EAAS,GACTinB,EAEJ,GAAI5lB,EAAO4lB,SAAU,CAEpB,IAAKrwB,MAAMkF,QAAQuF,EAAO4lB,UAAW,CACpC5lB,EAAO4lB,SAAWlwB,KAAKk7C,iBAAiBx2C,EAC3C,CAEE,GAAI1E,KAAKkC,MAAMgC,UAAU,WAAalE,KAAKkC,MAAMkB,QAAQo2B,eAAgB,CACxEtJ,EAAWlwB,KAAKkC,MAAMiC,QAAQqK,OAAOA,OAAOlE,EAAO4lB,SACtD,KAAS,CACNA,EAAW5lB,EAAO4lB,QACrB,CAEEA,EAAShrB,SAAQ,SAAUq2C,GAC1B,GAAIA,aAAoB59B,EAAK,CAC5B1U,EAAOhE,KAAKs2C,EAChB,CACA,GACA,CAEC,OAAOtyC,CACR,EAEA0wC,EAASt8C,UAAU40B,UAAY,SAAUvtB,GACxC,IAAIsF,EAAStF,EAAIP,QAAQyG,SAASZ,OAC9BwxC,EAEJ,GAAIxxC,EAAQ,CACXwxC,EAAax7C,KAAKy7C,eAAe/2C,EAAKsF,GAEtC,GAAIwxC,IAAe,MAAO,CACzBxxC,EAAO1F,KAAKtE,KAAK6E,OAAO6B,OAAO80C,EAAY,EAC9C,CAEE,IAAKxxC,EAAO1F,KAAKtE,KAAK6E,OAAOzG,OAAQ,QAC7B4L,EAAO1F,KAAKtE,KAAK6E,MAC3B,CAEE7E,KAAKwsB,cAAcxiB,GACnBhK,KAAK6vB,UAAU7lB,EACjB,CAEChK,KAAKkC,MAAMM,WAAWmd,kBAAkB,OAAQ,MAAO,KACxD,EAEAg6B,EAASt8C,UAAU8wB,gBAAkB,SAAUzpB,EAAKJ,EAAM8Y,EAAKjf,GAC9D,IAAIq9C,EAAa,MAEjB,UAAWl3C,IAAS,SAAU,CAC7BA,EAAOqsB,KAAKC,MAAMtsB,EACpB,CAEC,IAAKzE,MAAMkF,QAAQL,EAAIJ,KAAKtE,KAAK6E,QAAS,CACzCH,EAAIJ,KAAKtE,KAAK6E,OAAS,GAEvBH,EAAIP,QAAQyG,SAASurC,KAAOn2C,KAAKi6C,UAAUv1C,EAAI4E,eAAgB5E,EAAIP,QAAQyG,SAASzM,MACtF,CAEC,UAAWA,IAAU,YAAa,CACjCq9C,EAAax7C,KAAKy7C,eAAet9C,EAAOuG,GAExC,GAAI82C,IAAe,MAAO,CACzB92C,EAAIJ,KAAKtE,KAAK6E,OAAO6B,OAAO0W,EAAMo+B,EAAaA,EAAa,EAAG,EAAGl3C,EACrE,CACA,CAEC,GAAIk3C,IAAe,MAAO,CACzB,GAAIp+B,EAAK,CACR1Y,EAAIJ,KAAKtE,KAAK6E,OAAOgC,QAAQvC,EAChC,KAAS,CACNI,EAAIJ,KAAKtE,KAAK6E,OAAOI,KAAKX,EAC7B,CACA,CAECtE,KAAKwsB,cAAc9nB,GACnB1E,KAAK6vB,UAAUnrB,GAEf1E,KAAKkC,MAAMM,WAAWmd,kBAAkB,OAAQ,MAAO,KACxD,EAEAg6B,EAASt8C,UAAUo+C,eAAiB,SAAU7zC,EAASoC,GACtD,IAAI0xC,EAAU17C,KAEd,IAAIgF,EAAQ,MAEZ,WAAY4C,IAAY,YAAc,YAAcpI,EAAQoI,KAAa,SAAU,CAElF,GAAIA,aAAmB+V,EAAK,CAE3B3Y,EAAQ4C,EAAQtD,IACnB,MAAS,GAAIsD,aAAmBgW,EAAc,CAE3C5Y,EAAQ4C,EAAQE,WAAWxD,IAC9B,MAAS,UAAWyD,cAAgB,aAAeH,aAAmBG,YAAa,CAChF,GAAIiC,EAAO7F,QAAQyG,SAAU,CAC5B5F,EAAQgF,EAAO7F,QAAQyG,SAASslB,SAAS1vB,MAAK,SAAU+6C,GACvD,OAAOA,aAAoB59B,EAAM49B,EAASj5C,UAAYsF,EAAU,KACrE,IAEI,GAAI5C,EAAO,CACVA,EAAQA,EAAMV,IACnB,CACA,CACA,CACA,MAAQ,UAAWsD,GAAW,aAAeA,IAAY,KAAM,CAC7D5C,EAAQ,KACV,KAAQ,CAENA,EAAQgF,EAAO1F,KAAKtE,KAAK6E,OAAOrE,MAAK,SAAUkE,GAC9C,OAAOA,EAAIJ,KAAKo3C,EAAQx5C,MAAMkB,QAAQjF,QAAUyJ,CACnD,GACA,CAEC,GAAI5C,EAAO,CAEV,GAAInF,MAAMkF,QAAQiF,EAAO1F,KAAKtE,KAAK6E,QAAS,CAC3CG,EAAQgF,EAAO1F,KAAKtE,KAAK6E,OAAO/D,QAAQkE,EAC3C,CAEE,GAAIA,IAAU,EAAG,CAChBA,EAAQ,KACX,CACA,CAIC,OAAOA,CACR,EAEA20C,EAASt8C,UAAUyN,gBAAkB,SAAUpG,EAAK+M,EAAWkqC,GAC9D,IAAIC,EAAU57C,KAEd,IAAIsK,EAAS5F,EAAIP,QAAQyG,SACrB3B,EAAS,GAEb,GAAIqB,EAAO4lB,SAAU,CAEpB,IAAKrwB,MAAMkF,QAAQuF,EAAO4lB,UAAW,CACpC5lB,EAAO4lB,SAAWlwB,KAAKk7C,iBAAiBx2C,EAC3C,CAEE4F,EAAO4lB,SAAShrB,SAAQ,SAAUq2C,GACjC,GAAIA,aAAoB59B,EAAK,CAC5B1U,EAAOhE,KAAKwM,EAAY8pC,EAASjyC,eAAiBiyC,GAElD,GAAII,EAAS,CACZ1yC,EAASA,EAAO4B,OAAO+wC,EAAQ9wC,gBAAgBywC,EAAU9pC,EAAWkqC,GACzE,CACA,CACA,GACA,CAEC,OAAO1yC,CACR,EAEA0wC,EAASt8C,UAAUw+C,gBAAkB,SAAU7wC,GAC9C,IAAKA,EAAKtG,IAAIqG,MAAMjK,QAAQkK,GAAO,CAClCA,EAAKtG,IAAIoB,cACX,CACA,EAEA6zC,EAASt8C,UAAUy+C,cAAgB,WAClC,OAAO97C,KAAK6E,KACb,EAEA80C,EAASt8C,UAAU8zB,aAAe,SAAU7sB,GAC3C,OAAQtE,KAAK6E,aAAeP,EAAKtE,KAAK6E,SAAW,YAAc,SAAW7E,KAAKg6C,oBAAsB11C,EAAKtE,KAAKg6C,gBAAkB,YAAc,MAChJ,EAEA5sC,EAAU/P,UAAUytC,eAAe,WAAY6O,GAE/C,IAAIoC,EAAW,SAASA,EAAS75C,GAChClC,KAAKkC,MAAQA,CACd,EAGA65C,EAAS1+C,UAAU8sC,SAAW,SAAUx8B,EAAMy8B,EAAUhnC,EAAS2xB,EAAOinB,GACvE,IAAI32C,EAAOrF,KACPi8C,EAAe,MAEnB,SAASC,EAAU53C,EAAM63C,GACxB,GAAIH,EAAmB,CACtB,GAAIA,IAAsB,KAAM,CAC/B32C,EAAK+2C,gBAAgB93C,EAAM63C,EAAMxuC,EAAMy8B,EAAU,KACrD,KAAU,CACN4R,EAAkB13C,EACtB,CACA,KAAS,CACNe,EAAK+2C,gBAAgB93C,EAAM63C,EAAMxuC,EAAMy8B,EAC1C,CACA,CAEC,UAAWz8B,GAAQ,WAAY,CAC9BsuC,EAAetuC,CACjB,KAAQ,CACN,GAAItI,EAAKg3C,YAAY1uC,GAAO,CAC3BsuC,EAAe52C,EAAKg3C,YAAY1uC,EACnC,KAAS,CACN5B,QAAQC,KAAK,iDAAkD2B,EAClE,CACA,CAEC,GAAIsuC,EAAc,CACjB,IAAI94B,EAAOnjB,KAAKm4C,mBAAmBpjB,GAEnCknB,EAAav+C,KAAKsC,KAAKkC,MAAOihB,EAAM/f,GAAW,GAAI84C,EACrD,CACA,EAEAH,EAAS1+C,UAAU86C,mBAAqB,SAAUpjB,GACjD,IAAI5R,EAAOnjB,KAAKkC,MAAMiC,QAAQmgC,OAAO6T,mBAAmBn4C,KAAKkC,MAAMkB,QAAQk2B,eAAgB,MAAOvE,GAAS/0B,KAAKkC,MAAMkB,QAAQm2B,iBAAkB,YAGhJ,IAAI2D,EAAcl9B,KAAKkC,MAAMkB,QAAQk6B,oBAErC,GAAIJ,IAAgBr9B,MAAMkF,QAAQm4B,GAAc,CAC/CA,EAAc,CAACA,EACjB,CAEC/Z,EAAKje,SAAQ,SAAUR,GACtB,IAAIomB,EAEJ,GAAIpmB,EAAIiJ,OAAS,QAAS,CACzBmd,EAAQpmB,EAAIjC,QAAQ,GAEpB,GAAIy6B,GAAeA,EAAYx4B,EAAIk1C,QAAS,CAC3C9uB,EAAM/sB,MAAQm/B,EAAYx4B,EAAIk1C,QAAQ9uB,EAAM/sB,MAAO2G,EAAI+M,UAAU6qC,OAAOC,cAAe73C,EAAI+M,UAAU6qC,OAAO77B,UAAW/b,EAAI+M,UAC/H,CACA,CACA,IAEC,OAAO0R,CACR,EAEA44B,EAAS1+C,UAAU++C,gBAAkB,SAAU93C,EAAM63C,EAAMxuC,EAAMy8B,EAAUoS,GAC1E,IAAIl6C,EAAUU,SAASC,cAAc,KACjCm2B,EAAO,IAAIqjB,KAAK,CAACn4C,GAAO,CAAEqJ,KAAMwuC,IAChC/R,EAAWA,GAAY,qBAAuBz8B,IAAS,WAAa,MAAQA,GAEhFyrB,EAAOp5B,KAAKkC,MAAMkB,QAAQ+1B,cAAcz7B,KAAKsC,KAAKkC,MAAOoC,EAAM80B,GAE/D,GAAIA,EAAM,CAET,GAAIojB,EAAQ,CACXryB,OAAOgsB,KAAKhsB,OAAOuyB,IAAIC,gBAAgBvjB,GAC1C,KAAS,CACN,GAAIsJ,UAAUka,iBAAkB,CAC/Bla,UAAUka,iBAAiBxjB,EAAMgR,EACrC,KAAU,CACN9nC,EAAQ8P,aAAa,OAAQ+X,OAAOuyB,IAAIC,gBAAgBvjB,IAGxD92B,EAAQ8P,aAAa,WAAYg4B,GAGjC9nC,EAAQ0B,MAAMkV,QAAU,OACxBlW,SAASgyB,KAAKluB,YAAYxE,GAC1BA,EAAQshC,QAGR5gC,SAASgyB,KAAK1vB,YAAYhD,EAC9B,CACA,CAEE,GAAItC,KAAKkC,MAAMkB,QAAQi2B,iBAAkB,CACxCr5B,KAAKkC,MAAMkB,QAAQi2B,kBACtB,CACA,CACA,EAEA0iB,EAAS1+C,UAAUszC,cAAgB,SAAUzuC,EAAO4e,EAAQxc,GAC3D,OAAQwc,GACP,IAAK,YACJ9gB,KAAKmqC,SAAS7lC,EAAKqJ,KAAM,GAAIrJ,EAAKlB,QAASkB,EAAK0E,OAAQ1E,EAAKu4C,WAC7D,MAEH,EAGAd,EAAS1+C,UAAUg/C,YAAc,CAChCS,IAAK,SAASA,EAAI35B,EAAM/f,EAAS25C,GAChC,IAAIC,EAAY55C,GAAWA,EAAQ45C,UAAY55C,EAAQ45C,UAAY,IAC/DC,EAAe,GACfxJ,EAAU,GAEdtwB,EAAKje,SAAQ,SAAUR,GACtB,IAAIyc,EAAO,GAEX,OAAQzc,EAAIiJ,MACX,IAAK,QACJ5B,QAAQC,KAAK,+DACb,MAED,IAAK,OACJD,QAAQC,KAAK,wEACb,MAED,IAAK,SACJtH,EAAIjC,QAAQyC,SAAQ,SAAUN,EAAKY,GAClC,GAAIZ,GAAOA,EAAIs4C,QAAU,EAAG,CAC3BzJ,EAAQjuC,UAAYZ,EAAI7G,OAAS,aAAe6G,EAAI7G,QAAU,KAAO,GAAK,IAAM0C,OAAOmE,EAAI7G,OAAOwK,MAAM,KAAKyqC,KAAK,MAAQ,GACjI,CACA,IACK,MAED,IAAK,MACJtuC,EAAIjC,QAAQyC,SAAQ,SAAUN,GAE7B,GAAIA,EAAK,CAER,OAAQpF,EAAQoF,EAAI7G,QACnB,IAAK,SACJ6G,EAAI7G,MAAQ4yB,KAAKwjB,UAAUvvC,EAAI7G,OAC/B,MAED,IAAK,YACL,IAAK,OACJ6G,EAAI7G,MAAQ,GACZ,MAGFojB,EAAKlc,KAAK,IAAMxE,OAAOmE,EAAI7G,OAAOwK,MAAM,KAAKyqC,KAAK,MAAQ,IACjE,CACA,IAEKiK,EAAah4C,KAAKkc,EAAK6xB,KAAKgK,IAC5B,MAEL,IAEE,GAAIvJ,EAAQr1C,OAAQ,CACnB6+C,EAAap2C,QAAQ4sC,EAAQT,KAAKgK,GACrC,CAEEC,EAAeA,EAAajK,KAAK,MAEjC,GAAI5vC,EAAQ+5C,IAAK,CAChBF,EAAe,SAAWA,CAC7B,CAEEF,EAAgBE,EAAc,WAChC,EAECjJ,KAAM,SAASA,EAAK7wB,EAAM/f,EAAS25C,GAClC,IAAIE,EAAe,GAEnB95B,EAAKje,SAAQ,SAAUR,GACtB,IAAIyc,EAAO,GAEX,OAAQzc,EAAIiJ,MACX,IAAK,SACJ,MAED,IAAK,QACJ5B,QAAQC,KAAK,gEACb,MAED,IAAK,OACJD,QAAQC,KAAK,yEACb,MAED,IAAK,MACJtH,EAAIjC,QAAQyC,SAAQ,SAAUN,GAC7B,GAAIA,EAAK,CACRuc,EAAKvc,EAAI6M,UAAUvE,YAActI,EAAI7G,KAC5C,CACA,IAEKk/C,EAAah4C,KAAKkc,GAClB,MAEL,IAEE87B,EAAetsB,KAAKwjB,UAAU8I,EAAc,KAAM,MAElDF,EAAgBE,EAAc,mBAChC,EAECG,IAAK,SAASA,EAAIj6B,EAAM/f,EAAS25C,GAChC,IAAIM,EAAS,GACTroB,EAAO,GACPsoB,EAAkB,GAClBC,EAAiBn6C,EAAQm6C,gBAAkB,CAC9CC,UAAW,OACXC,SAAU,GACVC,YAAa,EACbC,UAAW,KAERC,EAAgBx6C,EAAQw6C,eAAiB,CAC5CJ,UAAW,OACXC,SAAU,GACVC,YAAa,EACbC,UAAW,KAERE,EAAcz6C,EAAQ06C,OAAS,GAC/Bh5C,EAAQ1B,GAAWA,EAAQ0B,MAAQ1B,EAAQ0B,MAAQ,GAEvD,IAAK+4C,EAAYE,YAAa,CAC7BF,EAAYE,YAAc36C,EAAQ26C,aAAe,WACpD,CAEE,IAAKF,EAAYG,KAAM,CACtBH,EAAYG,KAAO,IACtB,CAGE76B,EAAKje,SAAQ,SAAUR,GAGtB,OAAQA,EAAIiJ,MACX,IAAK,SACJ0vC,EAAOp4C,KAAKg5C,EAASv5C,IACrB,MAED,IAAK,QACJswB,EAAK/vB,KAAKg5C,EAASv5C,EAAK64C,IACxB,MAED,IAAK,OACJvoB,EAAK/vB,KAAKg5C,EAASv5C,EAAKk5C,IACxB,MAED,IAAK,MACJ5oB,EAAK/vB,KAAKg5C,EAASv5C,IACnB,MAEL,IAEE,SAASu5C,EAASv5C,EAAKw5C,GACtB,IAAIpI,EAAU,GAEdpxC,EAAIjC,QAAQyC,SAAQ,SAAUN,GAC7B,IAAIoG,EAEJ,GAAIpG,EAAK,CACR,OAAQpF,EAAQoF,EAAI7G,QACnB,IAAK,SACJ6G,EAAI7G,MAAQ4yB,KAAKwjB,UAAUvvC,EAAI7G,OAC/B,MAED,IAAK,YACL,IAAK,OACJ6G,EAAI7G,MAAQ,GACZ,MAGFiN,EAAO,CACNinC,QAASrtC,EAAI7G,MACbogD,QAASv5C,EAAI4E,MACb40C,QAASx5C,EAAIyC,QAGd,GAAI62C,EAAQ,CACXlzC,EAAKkzC,OAASA,CACpB,CAEKpI,EAAQ7wC,KAAK+F,EAClB,KAAW,CACN8qC,EAAQ7wC,KAAK,GAClB,CACA,IAEG,OAAO6wC,CACV,CAGE,IAAIuI,EAAM,IAAIP,MAAMD,GAEpB,GAAIz6C,GAAWA,EAAQk7C,UAAW,CACjC,UAAWl7C,EAAQk7C,YAAc,WAAY,CAC5ChB,EAAkBl6C,EAAQk7C,UAAUD,IAAQ,EAChD,KAAU,CACNf,EAAkBl6C,EAAQk7C,SAC9B,CACA,CAEE,GAAIx5C,EAAO,CACVw4C,EAAgBiB,eAAiB,SAAUj6C,GAC1C+5C,EAAInnC,KAAKpS,EAAO,GAAI,GACxB,CACA,CAEEw4C,EAAgBkB,KAAOnB,EACvBC,EAAgBtoB,KAAOA,EAEvBqpB,EAAIC,UAAUhB,GAEd,GAAIl6C,GAAWA,EAAQq7C,mBAAoB,CAC1Cr7C,EAAQq7C,mBAAmBJ,EAC9B,CAEEtB,EAAgBsB,EAAIp1C,OAAO,eAAgB,kBAC7C,EAECy1C,KAAM,SAASA,EAAKv7B,EAAM/f,EAAS25C,GAClC,IAAI13C,EAAOrF,KACP2+C,EAAYv7C,EAAQu7C,WAAa,SACjCC,EAAWC,KAAKC,MAAMC,WACtB91C,EAEJ21C,EAASI,WAAa,GACtBJ,EAASK,OAAS,GAElB,SAASC,IACR,IAAIv0C,EAAO,GACPw0C,EAAS,GACTC,EAAY,GACZrqB,EAAQ,CAAEsqB,EAAG,CAAEC,EAAG,EAAGC,EAAG,GAAKlrC,EAAG,CAAEirC,EAAGn8B,EAAK,GAAKA,EAAK,GAAG1gB,QAAQ20C,QAAO,SAAU9R,EAAGC,GACpF,OAAOD,GAAKC,GAAKA,EAAE/7B,MAAQ+7B,EAAE/7B,MAAQ,EAC3C,GAAQ,GAAK,EAAG+1C,EAAGp8B,EAAK/kB,SAGrB+kB,EAAKje,SAAQ,SAAUR,EAAKc,GAC3B,IAAIswC,EAAU,GAEdpxC,EAAIjC,QAAQyC,SAAQ,SAAUN,EAAK46C,GAElC,GAAI56C,EAAK,CACRkxC,EAAQ7wC,OAAOL,EAAI7G,iBAAiB0tC,OAASjsC,EAAQoF,EAAI7G,SAAW,SAAW4yB,KAAKwjB,UAAUvvC,EAAI7G,OAAS6G,EAAI7G,OAE/G,GAAI6G,EAAI4E,MAAQ,GAAK5E,EAAIyC,QAAU,EAAG,CACrC83C,EAAOl6C,KAAK,CAAEo6C,EAAG,CAAEE,EAAMD,EAAGE,GAAKnrC,EAAG,CAAEkrC,EAAG/5C,EAAIZ,EAAIyC,OAAS,EAAGi4C,EAAGE,EAAI56C,EAAI4E,MAAQ,IACvF,CACA,KAAY,CACNssC,EAAQ7wC,KAAK,GACnB,CACA,IAEI0F,EAAK1F,KAAK6wC,EACd,IAGG+I,KAAKC,MAAMW,cAAcL,EAAWz0C,GAEpCy0C,EAAU,QAAUP,KAAKC,MAAMY,aAAa3qB,GAE5C,GAAIoqB,EAAO/gD,OAAQ,CAClBghD,EAAU,WAAaD,CAC3B,CAEG,OAAOC,CACV,CAEE,GAAIh8C,EAAQu8C,UAAW,CACtB5C,EAAgBmC,KAChB,MACH,CAEE,GAAI97C,EAAQw8C,OAAQ,CACnB,IAAK,IAAIC,KAASz8C,EAAQw8C,OAAQ,CAEjC,GAAIx8C,EAAQw8C,OAAOC,KAAW,KAAM,CACnCjB,EAASI,WAAW/5C,KAAK46C,GACzBjB,EAASK,OAAOY,GAASX,GAC9B,KAAW,CAENN,EAASI,WAAW/5C,KAAK46C,GAEzB7/C,KAAKmE,QAAQszB,MAAMiZ,KAAKttC,EAAQw8C,OAAOC,GAAQ,WAAY,YAAa,CACvElyC,KAAM,OACNvK,QAAS,CAAEu8C,UAAW,MACtB32C,OAAQ3D,EAAK2D,OACb6zC,UAAW,SAASA,EAAUv4C,GAC7Bs6C,EAASK,OAAOY,GAASv7C,CAChC,GAEA,CACA,CACA,KAAS,CACNs6C,EAASI,WAAW/5C,KAAK05C,GACzBC,EAASK,OAAON,GAAaO,GAChC,CAEE,GAAI97C,EAAQq7C,mBAAoB,CAC/BG,EAAWx7C,EAAQq7C,mBAAmBG,EACzC,CAGE,SAASkB,EAAKT,GACb,IAAIU,EAAM,IAAIC,YAAYX,EAAEjhD,QAC5B,IAAI6hD,EAAO,IAAIC,WAAWH,GAC1B,IAAK,IAAIv6C,EAAI,EAAGA,GAAK65C,EAAEjhD,SAAUoH,EAAG,CACnCy6C,EAAKz6C,GAAK65C,EAAEc,WAAW36C,GAAK,GAChC,CAAI,OAAOu6C,CACX,CAEE92C,EAAS41C,KAAKuB,MAAMxB,EAAU,CAAEyB,SAAU,OAAQC,QAAS,KAAM3yC,KAAM,WAEvEovC,EAAgB+C,EAAK72C,GAAS,2BAChC,EAECivC,KAAM,SAASA,EAAK/0B,EAAM/f,EAAS25C,GAClC,GAAI/8C,KAAKkE,UAAU,SAAU,MAAO,CACnC64C,EAAgB/8C,KAAKmE,QAAQmgC,OAAO8T,mBAAmBj1B,GAAO,YACjE,CACA,GAIA/V,EAAU/P,UAAUytC,eAAe,WAAYiR,GAE/C,IAAIwE,EAAO,SAASA,EAAKr+C,GACxBlC,KAAKkC,MAAQA,EACblC,KAAKga,YAAc,MACnBha,KAAKwgD,WAAa,MAClBxgD,KAAKygD,eAAiB,MACtBzgD,KAAK0gD,YAAc,MACnB1gD,KAAK2gD,YAAc,EACpB,EAGAJ,EAAKljD,UAAUwW,iBAAmB,SAAU1N,GAC3C,IAAId,EAAOrF,KACPsK,EAAS,CACZuL,OAAQ,MACRkiC,QAAS,MACTrmB,MAAOvrB,EAAOH,WAAW46C,SACzBrpC,OAAQpR,EAAOH,WAAW66C,cAAgB,IAI3C,OAAQrhD,EAAQ2G,EAAOH,WAAW6P,SACjC,IAAK,SAEJ,GAAI1P,EAAOH,WAAW6P,SAAW,OAAQ,CACxC1P,EAAOH,WAAW6P,OAAS,YAC3B9J,QAAQC,KAAK,6FACjB,CAEG,GAAI3G,EAAKy7C,QAAQ36C,EAAOH,WAAW6P,QAAS,CAC3CvL,EAAOuL,OAASxQ,EAAKy7C,QAAQ36C,EAAOH,WAAW6P,OACnD,KAAU,CACN9J,QAAQC,KAAK,wCAAyC7F,EAAOH,WAAW6P,OAC5E,CACG,MAED,IAAK,WACJvL,EAAOuL,OAAS1P,EAAOH,WAAW6P,OAClC,MAED,IAAK,UAEJ,GAAI1P,EAAOH,WAAW6P,SAAW,KAAM,CAEtC,UAAW1P,EAAOH,WAAWqR,YAAc,WAAY,CAEtD,GAAIlR,EAAOH,WAAWqR,YAAc,OAAQ,CAC3ClR,EAAOH,WAAWqR,UAAY,YAC9BtL,QAAQC,KAAK,6FACnB,CAEK,GAAI3G,EAAKy7C,QAAQ36C,EAAOH,WAAWqR,WAAY,CAC9C/M,EAAOuL,OAASxQ,EAAKy7C,QAAQ36C,EAAOH,WAAWqR,UACrD,KAAY,CACN/M,EAAOuL,OAASxQ,EAAKy7C,QAAQ,QACnC,CACA,KAAW,CACN/0C,QAAQC,KAAK,oEAAqE7F,EAAOH,WAAWqR,UACzG,CACA,CACG,MAGF,GAAI/M,EAAOuL,OAAQ,CAClB1P,EAAOhC,QAAQ2R,KAAOxL,CACxB,CACA,EAEAi2C,EAAKljD,UAAU64B,eAAiB,WAC/B,OAAOl2B,KAAKga,YAAcha,KAAKga,YAAY1Q,eAAiB,KAC7D,EAEAi3C,EAAKljD,UAAU0jD,YAAc,SAAUC,GACtC,IAAIh2C,EAAOhL,KAAKga,YACZinC,EAEJjhD,KAAK0gD,YAAc,MAEnB,GAAI11C,EAAM,CACThL,KAAKga,YAAc,MAEnBinC,EAASj2C,EAAKvH,aAEd,GAAIu9C,EAAQ,CACXh2C,EAAKwE,UACR,KAAS,CACNyxC,EAAO/9C,UAAUikB,OAAO,4BAC3B,CAEE85B,EAAO/9C,UAAUikB,OAAO,qBACxB,MAAO85B,EAAOn+C,WAAY,CACzBm+C,EAAO37C,YAAY27C,EAAOn+C,WAC7B,CAAGkI,EAAKtG,IAAIjB,aAAaP,UAAUikB,OAAO,wBAC1C,CACA,EAEAo5B,EAAKljD,UAAU4c,WAAa,WAE3B,GAAIja,KAAKga,YAAa,CACrB,IAAIhP,EAAOhL,KAAKga,YAChB,IAAIvI,EAAYzR,KAAKga,YAAY1Q,eAEjCtJ,KAAK+gD,YAAY,MACjB/1C,EAAKgoB,eAAehoB,EAAK4M,YACzB5M,EAAKshB,eAEL,GAAIthB,EAAK7E,OAAOH,WAAW6P,QAAU,YAAc7K,EAAK7E,OAAOH,WAAWk7C,eAAgB,CACzFl2C,EAAKtG,IAAIkjB,gBAAgB,KAC5B,CAEE,GAAI5c,EAAK7E,OAAOqK,WAAW4E,kBAAmB,CAC7CpK,EAAK7E,OAAOqK,WAAW4E,kBAAkB1X,KAAKsC,KAAKkC,MAAOuP,EAC7D,CAEEzR,KAAKkC,MAAMkB,QAAQgS,kBAAkB1X,KAAKsC,KAAKkC,MAAOuP,EACxD,CACA,EAGA8uC,EAAKljD,UAAUs3B,WAAa,SAAU3pB,GACrC,IAAI3F,EAAOrF,KACPsC,EAAU0I,EAAKvH,WAAW,MAE9BnB,EAAQ8P,aAAa,WAAY,GAEjC9P,EAAQ8R,iBAAiB,SAAS,SAAUC,GAC3C,IAAK/R,EAAQY,UAAUi+C,SAAS,qBAAsB,CACrD7+C,EAAQ0U,MAAM,CAAEoqC,cAAe,MAClC,CACA,IAEC9+C,EAAQ8R,iBAAiB,aAAa,SAAUC,GAC/C,GAAIA,EAAEgtC,SAAW,EAAG,CACnBhtC,EAAEwgB,gBACL,KAAS,CACNxvB,EAAKm7C,WAAa,IACrB,CACA,IAECl+C,EAAQ8R,iBAAiB,SAAS,SAAUC,GAC3C,IAAKhP,EAAKo7C,eAAgB,CACzBp7C,EAAKyQ,KAAK9K,EAAMqJ,EAAG,MACtB,CACA,GACA,EAEAksC,EAAKljD,UAAUikD,iBAAmB,SAAUt2C,EAAM6lB,GACjD7wB,KAAKygD,eAAiB,KACtB,KAAM5vB,GAAS7wB,KAAKkC,MAAMknB,UAAY,MAAO,CAC5Cpe,EAAKvH,aAAauT,MAAM,CAAEoqC,cAAe,MAC3C,CACCphD,KAAKygD,eAAiB,KACvB,EAEAF,EAAKljD,UAAU24B,SAAW,SAAUhrB,EAAMu2C,GACzCvhD,KAAKshD,iBAAiBt2C,GACtBhL,KAAK8V,KAAK9K,EAAM,MAAOu2C,EACxB,EAEAhB,EAAKljD,UAAUmkD,kBAAoB,SAAUx2C,GAC5C,GAAIhL,KAAKkC,MAAMM,WAAW6jB,iBAAmB,UAAW,CACpD,IAACN,EAAU/lB,KAAKkC,MAAMM,WAAWF,QAAQsZ,UACxCoK,EAAahmB,KAAKkC,MAAMM,WAAWF,QAAQiK,aAAevM,KAAKkC,MAAMM,WAAWF,QAAQsZ,UACxFwC,EAAQpT,EAAKtG,IAAIjB,aAGrB,GAAI2a,EAAMM,UAAYqH,EAAS,CAC9B/lB,KAAKkC,MAAMM,WAAWF,QAAQsZ,WAAamK,EAAU3H,EAAMM,SAC9D,KAAS,CACN,GAAIN,EAAMM,UAAYN,EAAM5F,aAAewN,EAAY,CACtDhmB,KAAKkC,MAAMM,WAAWF,QAAQsZ,WAAawC,EAAMM,UAAYN,EAAM5F,aAAewN,CACtF,CACA,CAEK,IAACy7B,EAAWzhD,KAAKkC,MAAMM,WAAWF,QAAQM,WACzC8+C,EAAY1hD,KAAKkC,MAAMM,WAAWF,QAAQyB,YAAc/D,KAAKkC,MAAMM,WAAWF,QAAQM,WACtFq+C,EAASj2C,EAAKvH,aAGlB,GAAIzD,KAAKkC,MAAMgC,UAAU,iBAAkB,CAC1Cu9C,GAAY90C,SAAS3M,KAAKkC,MAAMiC,QAAQC,cAAcu9C,YACtDD,GAAa/0C,SAAS3M,KAAKkC,MAAMiC,QAAQC,cAAcw9C,YAC1D,CAEE,GAAI5hD,KAAKkC,MAAMkB,QAAQwC,cAAe,CACrC67C,GAAY90C,SAAS3M,KAAKkC,MAAM2D,QAAQmkB,aACxC03B,GAAa/0C,SAAS3M,KAAKkC,MAAM2D,QAAQmkB,YAC5C,CAEE,GAAIi3B,EAAOr1C,WAAa61C,EAAU,CAEjCzhD,KAAKkC,MAAMM,WAAWF,QAAQM,YAAc6+C,EAAWR,EAAOr1C,UACjE,KAAS,CACN,GAAIq1C,EAAOr1C,WAAaq1C,EAAOp1C,YAAc61C,EAAW,CACvD1hD,KAAKkC,MAAMM,WAAWF,QAAQM,YAAcq+C,EAAOr1C,WAAaq1C,EAAOp1C,YAAc61C,CACzF,CACA,CACA,CACA,EAEAnB,EAAKljD,UAAUyY,KAAO,SAAU9K,EAAMqJ,EAAGktC,GACxC,IAAIl8C,EAAOrF,KACPyxB,EAAY,KACZowB,EAAW,SAASA,IAAW,EAC/Bv/C,EAAU0I,EAAKvH,aACfq+C,EACArwC,EACA8F,EAGJ,GAAIvX,KAAKga,YAAa,CACrB,IAAKha,KAAK0gD,YAAa,CACtB1gD,KAAKia,YACR,CACE,MACF,CAGC,SAAS8nC,EAAQhkD,GAChB,GAAIsH,EAAK2U,cAAgBhP,EAAM,CAC9B,IAAImrB,EAAQ,KAEZ,GAAInrB,EAAK7E,OAAOhC,QAAQqL,UAAYnK,EAAKnD,MAAMgC,UAAU,aAAemB,EAAKnD,MAAMkB,QAAQo9B,gBAAkB,SAAU,CACtHrK,EAAQ9wB,EAAKnD,MAAMiC,QAAQqL,SAASA,SAASxE,EAAK7E,OAAOhC,QAAQqL,SAAUxE,EAAMjN,EACrF,CAEG,GAAIo4B,IAAU,MAAQ9wB,EAAKnD,MAAMkB,QAAQo9B,iBAAmB,YAAa,CACxEn7B,EAAK07C,cAEL,IAAK/1C,EAAK7G,QAAQ2R,KAAM,CACvB9K,EAAK7G,QAAQ2R,KAAO,EACzB,CAEI9K,EAAK7G,QAAQ2R,KAAKqd,OAAS,KAE3B,GAAI9tB,EAAKs7C,YAAY7/C,QAAQkK,KAAU,EAAG,CACzC3F,EAAKs7C,YAAY17C,KAAK+F,EAC3B,CAEIA,EAAK6nB,SAAS90B,EAAO,MAErB,GAAIsH,EAAKnD,MAAMkB,QAAQwH,UAAYvF,EAAKnD,MAAMgC,UAAU,YAAa,CACpEmB,EAAKnD,MAAMiC,QAAQyG,SAASixC,gBAAgB7wC,EACjD,CAEI,GAAImrB,IAAU,KAAM,CACnB7zB,EAAQY,UAAUC,IAAI,6BACtBkC,EAAKnD,MAAMkB,QAAQq9B,iBAAiB/iC,KAAK2H,EAAKnD,MAAO8I,EAAK1B,eAAgBvL,EAAOo4B,GACjF,OAAO,KACZ,CAEI,OAAO,IACX,KAAU,CACN9wB,EAAKq7C,YAAc,KACnBp+C,EAAQY,UAAUC,IAAI,6BACtBkC,EAAKi8C,iBAAiBt2C,EAAM,MAC5B62C,IACAx8C,EAAKnD,MAAMkB,QAAQq9B,iBAAiB/iC,KAAK2H,EAAKnD,MAAO8I,EAAK1B,eAAgBvL,EAAOo4B,GAEjF,OAAO,KACX,CACA,CAGA,CAGC,SAAS6qB,IACR,GAAI37C,EAAK2U,cAAgBhP,EAAM,CAC9B3F,EAAK4U,aAEL,GAAI5U,EAAKnD,MAAMkB,QAAQwH,UAAYvF,EAAKnD,MAAMgC,UAAU,YAAa,CACpEmB,EAAKnD,MAAMiC,QAAQyG,SAASixC,gBAAgB7wC,EAChD,CACA,CAGA,CAEC,SAASyM,EAAW3O,GACnB+4C,EAAW/4C,CACb,CAEC,IAAKkC,EAAK7E,OAAOhC,QAAQ2R,KAAKiiC,QAAS,CACtC,GAAI1jC,EAAG,CACNA,EAAE0C,iBACL,CAEE,OAAQvX,EAAQwL,EAAK7E,OAAOhC,QAAQ2R,KAAK4b,QACxC,IAAK,WACJD,EAAYzmB,EAAK7E,OAAOhC,QAAQ2R,KAAK4b,MAAM1mB,EAAK1B,gBAChD,MAED,IAAK,UACJmoB,EAAYzmB,EAAK7E,OAAOhC,QAAQ2R,KAAK4b,MACrC,MAGF,GAAID,GAAa8vB,EAAW,CAE3Bl8C,EAAK4U,aAEL5U,EAAK2U,YAAchP,EAEnBhL,KAAKwhD,kBAAkBx2C,GAEvByG,EAAYzG,EAAK1B,eAEjB,GAAItJ,KAAKwgD,WAAY,CACpBxgD,KAAKwgD,WAAa,MAElB,GAAIx1C,EAAK7E,OAAOqK,WAAWC,UAAW,CACrCzF,EAAK7E,OAAOqK,WAAWC,UAAU/S,KAAKsC,KAAKkC,MAAOmS,EAAG5C,EAC1D,CACA,CAEG,GAAIzG,EAAK7E,OAAOqK,WAAW2E,YAAa,CACvCnK,EAAK7E,OAAOqK,WAAW2E,YAAYzX,KAAKsC,KAAKkC,MAAOuP,EACxD,CAEGpM,EAAKnD,MAAMkB,QAAQ+R,YAAYzX,KAAKsC,KAAKkC,MAAOuP,GAEhD8F,SAAgBvM,EAAK7E,OAAOhC,QAAQ2R,KAAKyB,SAAW,WAAavM,EAAK7E,OAAOhC,QAAQ2R,KAAKyB,OAAO9F,GAAazG,EAAK7E,OAAOhC,QAAQ2R,KAAKyB,OAEvIuqC,EAAa92C,EAAK7E,OAAOhC,QAAQ2R,KAAKD,OAAOnY,KAAK2H,EAAMoM,EAAWgG,EAAYsqC,EAASf,EAAQzpC,GAGhG,GAAIuqC,IAAe,MAAO,CAEzB,GAAIA,aAAsBhqC,KAAM,CAC/BxV,EAAQY,UAAUC,IAAI,qBACtB6H,EAAKtG,IAAIjB,aAAaP,UAAUC,IAAI,yBACpC,MAAOb,EAAQQ,WAAY,CAC1BR,EAAQgD,YAAYhD,EAAQQ,WAClC,CAAMR,EAAQwE,YAAYg7C,GAGrBD,IAGA,IAAI3xB,EAAW5tB,EAAQ4tB,SAEvB,IAAK,IAAI1qB,EAAI,EAAGA,EAAI0qB,EAAS9xB,OAAQoH,IAAK,CACzC0qB,EAAS1qB,GAAG4O,iBAAiB,SAAS,SAAUC,GAC/CA,EAAE0C,iBACT,GACA,CACA,KAAW,CACNhL,QAAQC,KAAK,8EAA+E81C,GAC5Fx/C,EAAQ0/C,OACR,OAAO,KACZ,CACA,KAAU,CACN1/C,EAAQ0/C,OACR,OAAO,KACX,CAEG,OAAO,IACV,KAAS,CACNhiD,KAAKwgD,WAAa,MAClBl+C,EAAQ0/C,OACR,OAAO,KACV,CACA,KAAQ,CACNhiD,KAAKwgD,WAAa,MAClBl+C,EAAQ0/C,OACR,OAAO,KACT,CACA,EAEAzB,EAAKljD,UAAU4kD,UAAY,SAAUl/C,EAAIK,GACrC,IAAC8+C,EAAO9+C,EAAQ8+C,KACfC,SAAoB/+C,EAAQg/C,iBAAmB,YAAch/C,EAAQg/C,eAAiB,IACtFC,SAAoBj/C,EAAQk/C,iBAAmB,YAAcl/C,EAAQk/C,eAAiB,IACtFC,SAAsBn/C,EAAQo/C,mBAAqB,YAAcp/C,EAAQo/C,iBAAmB,IAGhG,SAASC,EAAYtkD,GACpB,IAAIukD,EAASR,EAAK/jD,GAClB,UAAWukD,IAAW,aAAeA,IAAWH,GAAgBG,IAAWP,GAAcO,IAAWL,EAAY,CAC/Gt/C,EAAGhF,MAAQgF,EAAGhF,MAAQ,GAAK2kD,EAC3BD,EAAYtkD,EAAQ,EACvB,CACA,CAEC4E,EAAGqR,iBAAiB,WAAW,SAAUC,GACxC,IAAIlW,EAAQ4E,EAAGhF,MAAMK,OACjBukD,EAAOtuC,EAAE5W,IAEb,GAAI4W,EAAEuuC,QAAU,GAAI,CACnB,GAAIzkD,GAAS+jD,EAAK9jD,OAAQ,CACzBiW,EAAEwgB,iBACFxgB,EAAE0C,kBAEF,OAAO,KACX,KAAU,CACN,OAAQmrC,EAAK/jD,IACZ,KAAKgkD,EACJ,GAAIQ,EAAK5R,eAAiB4R,EAAK3T,cAAe,CAC7C36B,EAAEwgB,iBACFxgB,EAAE0C,kBAEF,OAAO,KACd,CACM,MAED,KAAKsrC,EACJ,GAAI7gD,MAAMmhD,GAAO,CAChBtuC,EAAEwgB,iBACFxgB,EAAE0C,kBAEF,OAAO,KACd,CACM,MAED,KAAKwrC,EACJ,MAED,QACC,GAAII,IAAST,EAAK/jD,GAAQ,CACzBkW,EAAEwgB,iBACFxgB,EAAE0C,kBAEF,OAAO,KACd,EAEA,CAGA,CAEE,MACF,IAEChU,EAAGqR,iBAAiB,SAAS,SAAUC,GACtC,GAAIA,EAAEuuC,QAAU,GAAI,CACnB,GAAIx/C,EAAQy/C,aAAc,CACzBJ,EAAY1/C,EAAGhF,MAAMK,OACzB,CACA,CACA,IAEC,IAAK2E,EAAG6jB,YAAa,CACpB7jB,EAAG6jB,YAAcs7B,CACnB,CAEC,GAAI9+C,EAAQy/C,aAAc,CACzBJ,EAAY1/C,EAAGhF,MAAMK,OACvB,CACA,EAEAmiD,EAAKljD,UAAU6rC,eAAiB,WAC/B,IAAIjgC,EAAS,GAEbjJ,KAAK2gD,YAAYz7C,SAAQ,SAAU8F,GAClC/B,EAAOhE,KAAK+F,EAAK1B,eACnB,IAEC,OAAOL,CACR,EAEAs3C,EAAKljD,UAAU+1B,YAAc,SAAUpoB,GACtC,IAAI83C,EAEJ,GAAI93C,EAAK7G,QAAQ2R,MAAQ9K,EAAK7G,QAAQ2R,KAAKqd,OAAQ,CAClDnoB,EAAK7G,QAAQ2R,KAAKqd,OAAS,MAE3B,GAAInoB,EAAK7G,QAAQqL,SAAU,CAC1BxE,EAAK7G,QAAQqL,SAAS4K,QAAU,KACnC,CACA,CAEC0oC,EAAY9iD,KAAK2gD,YAAY7/C,QAAQkK,GAErC,GAAI83C,GAAa,EAAG,CACnB9iD,KAAK2gD,YAAYj6C,OAAOo8C,EAAW,EACrC,CACA,EAGAvC,EAAKljD,UAAUyjD,QAAU,CAGxB3d,MAAO,SAASA,EAAMn4B,EAAMyM,EAAYsqC,EAASf,EAAQH,GAGxD,IAAIkC,EAAY/3C,EAAK4M,WACjBurB,EAAQngC,SAASC,cAAc,SAEnCkgC,EAAM/wB,aAAa,OAAQyuC,EAAalgD,OAAS,SAAW,QAE5DwiC,EAAMn/B,MAAMg/C,QAAU,MACtB7f,EAAMn/B,MAAMwF,MAAQ,OACpB25B,EAAMn/B,MAAMi/C,UAAY,aAExB,GAAIpC,EAAaqC,mBAAqB1jD,EAAQqhD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAIzlD,KAAOojD,EAAaqC,kBAAmB,CAC/C,GAAIzlD,EAAIqzC,OAAO,IAAM,IAAK,CACzBrzC,EAAMA,EAAIqnB,MAAM,GAChBqe,EAAM/wB,aAAa3U,EAAK0lC,EAAMggB,aAAa1lD,GAAOojD,EAAaqC,kBAAkB,IAAMzlD,GAC5F,KAAW,CACN0lC,EAAM/wB,aAAa3U,EAAKojD,EAAaqC,kBAAkBzlD,GAC5D,CACA,CACA,CAEE0lC,EAAMplC,aAAeglD,IAAc,YAAcA,EAAY,GAE7DtrC,GAAW,WACV0rB,EAAMnsB,MAAM,CAAEoqC,cAAe,OAC7Bje,EAAMn/B,MAAMqD,OAAS,MACxB,IAEE,SAAS+7C,EAAS/uC,GACjB,IAAK0uC,IAAc,aAAeA,IAAc,cAAgB5f,EAAMplC,QAAU,IAAMolC,EAAMplC,QAAUglD,EAAW,CAChH,GAAIhB,EAAQ5e,EAAMplC,OAAQ,CACzBglD,EAAY5f,EAAMplC,KACvB,CACA,KAAU,CACNijD,GACJ,CACA,CAGE7d,EAAM/uB,iBAAiB,SAAUgvC,GACjCjgB,EAAM/uB,iBAAiB,OAAQgvC,GAG/BjgB,EAAM/uB,iBAAiB,WAAW,SAAUC,GAC3C,OAAQA,EAAEuuC,SAET,KAAK,GACJQ,IACA,MAED,KAAK,GACJpC,IACA,MAED,KAAK,GACL,KAAK,GACJ3sC,EAAE0C,kBACF,MAEL,IAEE,GAAI8pC,EAAaqB,KAAM,CACtBliD,KAAKkC,MAAMiC,QAAQ2R,KAAKmsC,UAAU9e,EAAO0d,EAC5C,CAEE,OAAO1d,CACT,EAGCkgB,SAAU,SAASA,EAASr4C,EAAMyM,EAAYsqC,EAASf,EAAQH,GAC3D,IACCkC,EAAY/3C,EAAK4M,WACjB0rC,EAAUzC,EAAa0C,oBAAsB,SAC7CxlD,EAAQ0C,OAAOsiD,IAAc,aAAeA,IAAc,YAAcA,EAAY,KAC3EhlD,EAAMiH,MAAM,oBAAsB,IAAI5G,OAAS,EAC9D,IAAM+kC,EAAQngC,SAASC,cAAc,YAC/BqJ,EAAe,EAGnB62B,EAAMn/B,MAAMkV,QAAU,QACtBiqB,EAAMn/B,MAAMg/C,QAAU,MACtB7f,EAAMn/B,MAAMqD,OAAS,OACrB87B,EAAMn/B,MAAMwF,MAAQ,OACpB25B,EAAMn/B,MAAMi/C,UAAY,aACxB9f,EAAMn/B,MAAMw/C,WAAa,WACzBrgB,EAAMn/B,MAAMy/C,OAAS,OAErB,GAAI5C,EAAaqC,mBAAqB1jD,EAAQqhD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAIzlD,KAAOojD,EAAaqC,kBAAmB,CAC/C,GAAIzlD,EAAIqzC,OAAO,IAAM,IAAK,CACzBrzC,EAAMA,EAAIqnB,MAAM,GAChBqe,EAAM/wB,aAAa3U,EAAK0lC,EAAMggB,aAAa1lD,GAAOojD,EAAaqC,kBAAkB,IAAMzlD,GAC5F,KAAW,CACN0lC,EAAM/wB,aAAa3U,EAAKojD,EAAaqC,kBAAkBzlD,GAC5D,CACA,CACA,CAEE0lC,EAAMplC,MAAQA,EAEd0Z,GAAW,WACV0rB,EAAMnsB,MAAM,CAAEoqC,cAAe,OAC7Bje,EAAMn/B,MAAMqD,OAAS,OAGrB87B,EAAMn/B,MAAMqD,OAAS87B,EAAM72B,aAAe,KAC1CtB,EAAK2nB,SAAS/K,iBACjB,IAEE,SAASw7B,EAAS/uC,GAEjB,IAAK0uC,IAAc,aAAeA,IAAc,cAAgB5f,EAAMplC,QAAU,IAAMolC,EAAMplC,QAAUglD,EAAW,CAEhH,GAAIhB,EAAQ5e,EAAMplC,OAAQ,CACzBglD,EAAY5f,EAAMplC,KACvB,CAEIiX,YAAW,WACVhK,EAAK2nB,SAAS/K,iBACnB,GAAO,IACP,KAAU,CACNo5B,GACJ,CACA,CAGE7d,EAAM/uB,iBAAiB,SAAUgvC,GACjCjgB,EAAM/uB,iBAAiB,OAAQgvC,GAE/BjgB,EAAM/uB,iBAAiB,SAAS,WAE/B+uB,EAAMn/B,MAAMqD,OAAS,GAErB,IAAIq8C,EAAYvgB,EAAM72B,aAEtB62B,EAAMn/B,MAAMqD,OAASq8C,EAAY,KAEjC,GAAIA,GAAap3C,EAAc,CAC9BA,EAAeo3C,EACf14C,EAAK2nB,SAAS/K,iBAClB,CACA,IAEEub,EAAM/uB,iBAAiB,WAAW,SAAUC,GAE3C,OAAQA,EAAEuuC,SACT,KAAK,GACJ5B,IACA,MAED,KAAK,GAEJ,GAAIsC,GAAW,UAAYA,GAAW,UAAYngB,EAAMwgB,eAAgB,CACvEtvC,EAAEuvC,2BACFvvC,EAAE0C,iBACR,CAEK,MAED,KAAK,GAEJ,GAAIusC,GAAW,UAAYA,GAAW,UAAYngB,EAAMwgB,iBAAmBxgB,EAAMplC,MAAMK,OAAQ,CAC9FiW,EAAEuvC,2BACFvvC,EAAE0C,iBACR,CACK,MAED,KAAK,GACL,KAAK,GACJ1C,EAAE0C,kBACF,MAEL,IAEE,GAAI8pC,EAAaqB,KAAM,CACtBliD,KAAKkC,MAAMiC,QAAQ2R,KAAKmsC,UAAU9e,EAAO0d,EAC5C,CAEE,OAAO1d,CACT,EAGC0gB,OAAQ,SAASA,EAAO74C,EAAMyM,EAAYsqC,EAASf,EAAQH,GAE1D,IAAIkC,EAAY/3C,EAAK4M,WACjB0rC,EAAUzC,EAAa0C,oBAAsB,SAC7CpgB,EAAQngC,SAASC,cAAc,SAEnCkgC,EAAM/wB,aAAa,OAAQ,UAE3B,UAAWyuC,EAAa1/C,KAAO,YAAa,CAC3CgiC,EAAM/wB,aAAa,MAAOyuC,EAAa1/C,IAC1C,CAEE,UAAW0/C,EAAa/0C,KAAO,YAAa,CAC3Cq3B,EAAM/wB,aAAa,MAAOyuC,EAAa/0C,IAC1C,CAEE,UAAW+0C,EAAaiD,MAAQ,YAAa,CAC5C3gB,EAAM/wB,aAAa,OAAQyuC,EAAaiD,KAC3C,CAGE3gB,EAAMn/B,MAAMg/C,QAAU,MACtB7f,EAAMn/B,MAAMwF,MAAQ,OACpB25B,EAAMn/B,MAAMi/C,UAAY,aAExB,GAAIpC,EAAaqC,mBAAqB1jD,EAAQqhD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAIzlD,KAAOojD,EAAaqC,kBAAmB,CAC/C,GAAIzlD,EAAIqzC,OAAO,IAAM,IAAK,CACzBrzC,EAAMA,EAAIqnB,MAAM,GAChBqe,EAAM/wB,aAAa3U,EAAK0lC,EAAMggB,aAAa1lD,GAAOojD,EAAaqC,kBAAkB,IAAMzlD,GAC5F,KAAW,CACN0lC,EAAM/wB,aAAa3U,EAAKojD,EAAaqC,kBAAkBzlD,GAC5D,CACA,CACA,CAEE0lC,EAAMplC,MAAQglD,EAEd,IAAIgB,EAAW,SAASA,EAAS1vC,GAChC+uC,GACH,EAEE3rC,GAAW,WAEV0rB,EAAM6gB,oBAAoB,OAAQD,GAElC5gB,EAAMnsB,MAAM,CAAEoqC,cAAe,OAC7Bje,EAAMn/B,MAAMqD,OAAS,OAGrB87B,EAAM/uB,iBAAiB,OAAQ2vC,EAClC,IAEE,SAASX,IACR,IAAIrlD,EAAQolC,EAAMplC,MAElB,IAAKyD,MAAMzD,IAAUA,IAAU,GAAI,CAClCA,EAAQu5C,OAAOv5C,EACnB,CAEG,GAAIA,IAAUglD,EAAW,CACxB,GAAIhB,EAAQhkD,GAAQ,CACnBglD,EAAYhlD,CACjB,CACA,KAAU,CACNijD,GACJ,CACA,CAGE7d,EAAM/uB,iBAAiB,WAAW,SAAUC,GAC3C,OAAQA,EAAEuuC,SACT,KAAK,GAEJQ,IACA,MAED,KAAK,GACJpC,IACA,MAED,KAAK,GACL,KAAK,GAEJ,GAAIsC,GAAW,SAAU,CACxBjvC,EAAEuvC,2BACFvvC,EAAE0C,iBACR,CACK,MAED,KAAK,GACL,KAAK,GACJ1C,EAAE0C,kBACF,MAEL,IAEE,GAAI8pC,EAAaqB,KAAM,CACtBliD,KAAKkC,MAAMiC,QAAQ2R,KAAKmsC,UAAU9e,EAAO0d,EAC5C,CAEE,OAAO1d,CACT,EAGCpO,MAAO,SAASA,EAAM/pB,EAAMyM,EAAYsqC,EAASf,EAAQH,GAExD,IAAIkC,EAAY/3C,EAAK4M,WACjBurB,EAAQngC,SAASC,cAAc,SAEnCkgC,EAAM/wB,aAAa,OAAQ,SAE3B,UAAWyuC,EAAa1/C,KAAO,YAAa,CAC3CgiC,EAAM/wB,aAAa,MAAOyuC,EAAa1/C,IAC1C,CAEE,UAAW0/C,EAAa/0C,KAAO,YAAa,CAC3Cq3B,EAAM/wB,aAAa,MAAOyuC,EAAa/0C,IAC1C,CAEE,UAAW+0C,EAAaiD,MAAQ,YAAa,CAC5C3gB,EAAM/wB,aAAa,OAAQyuC,EAAaiD,KAC3C,CAGE3gB,EAAMn/B,MAAMg/C,QAAU,MACtB7f,EAAMn/B,MAAMwF,MAAQ,OACpB25B,EAAMn/B,MAAMi/C,UAAY,aAExB,GAAIpC,EAAaqC,mBAAqB1jD,EAAQqhD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAIzlD,KAAOojD,EAAaqC,kBAAmB,CAC/C,GAAIzlD,EAAIqzC,OAAO,IAAM,IAAK,CACzBrzC,EAAMA,EAAIqnB,MAAM,GAChBqe,EAAM/wB,aAAa3U,EAAK0lC,EAAMggB,aAAa1lD,GAAOojD,EAAaqC,kBAAkB,IAAMzlD,GAC5F,KAAW,CACN0lC,EAAM/wB,aAAa3U,EAAKojD,EAAaqC,kBAAkBzlD,GAC5D,CACA,CACA,CAEE0lC,EAAMplC,MAAQglD,EAEdtrC,GAAW,WACV0rB,EAAMnsB,MAAM,CAAEoqC,cAAe,OAC7Bje,EAAMn/B,MAAMqD,OAAS,MACxB,IAEE,SAAS+7C,IACR,IAAIrlD,EAAQolC,EAAMplC,MAElB,IAAKyD,MAAMzD,IAAUA,IAAU,GAAI,CAClCA,EAAQu5C,OAAOv5C,EACnB,CAEG,GAAIA,GAASglD,EAAW,CACvB,GAAIhB,EAAQhkD,GAAQ,CACnBglD,EAAYhlD,CACjB,CACA,KAAU,CACNijD,GACJ,CACA,CAGE7d,EAAM/uB,iBAAiB,QAAQ,SAAUC,GACxC+uC,GACH,IAGEjgB,EAAM/uB,iBAAiB,WAAW,SAAUC,GAC3C,OAAQA,EAAEuuC,SACT,KAAK,GAEJQ,IACA,MAED,KAAK,GACJpC,IACA,MAEL,IAEE,OAAO7d,CACT,EAGClW,OAAQ,SAASA,EAAOjiB,EAAMyM,EAAYsqC,EAASf,EAAQH,GAC1D,IAAIoD,EAAUjkD,KAEd,IAAIqF,EAAOrF,KACPihD,EAASj2C,EAAKvH,aACdivB,EAAe1nB,EAAK4M,WACpB0rC,EAAUzC,EAAa0C,oBAAsB,SAC7CW,SAA6BxxB,IAAiB,aAAeA,IAAiB,KAAO7yB,MAAMkF,QAAQ2tB,GAAgBA,EAAe,CAACA,UAAuBmuB,EAAasD,eAAiB,YAActD,EAAasD,aAAe,GAClOhhB,EAAQngC,SAASC,cAAc,SAC/BmhD,EAASphD,SAASC,cAAc,OAChCohD,EAAcxD,EAAawD,YAC3BC,EAAY,GACZC,EAAc,GACdC,EAAe,GACfC,EAAe,GACfC,EAAW,KACXC,EAAgB,MAChBC,EAAa,GACbC,EAAoB,KAExB,GAAIhlD,MAAMkF,QAAQ87C,KAAkBhhD,MAAMkF,QAAQ87C,YAAyBA,IAAiB,YAAc,YAAcrhD,EAAQqhD,MAAmB,WAAaA,EAAa9X,OAAQ,CACpLh9B,QAAQC,KAAK,6JACb60C,EAAe,CAAE9X,OAAQ8X,EAC5B,CAEE,SAASiE,EAAsBjgD,GAC9B,IAAIoE,EAAS,GACT3E,EAAOe,EAAKnD,MAAMue,UAClBta,EAEJ,GAAItB,EAAO,CACVsB,EAASd,EAAKnD,MAAMkI,cAAcpC,iBAAiBnD,EACvD,KAAU,CACNsB,EAAS6E,EAAK4nB,YAAY9qB,UAC9B,CAEG,GAAI3B,EAAQ,CACX7B,EAAKY,SAAQ,SAAUR,GACtB,IAAI8wB,EAAMrvB,EAAO+J,cAAcxL,GAE/B,GAAI8wB,IAAQ,aAAeA,IAAQ,aAAeA,IAAQ,GAAI,CAC7DvsB,EAAOusB,GAAO,IACpB,CACA,GACA,KAAU,CACNzpB,QAAQC,KAAK,+DAAgEnH,EACjF,CAEG,OAAOzH,OAAOiL,KAAKY,EACtB,CAEE,SAAS87C,EAAWC,EAAaC,GAChC,IAAIC,EAAW,GACf,IAAIC,EAAc,GAElB,SAASC,EAAuBjkC,GAC/B,IAAIA,EAAO,CACVkkC,MAAOlkC,EAAKkkC,MACZtnD,MAAOojB,EAAKpjB,MACZunD,WAAYnkC,EAAKmkC,WACjBpC,kBAAmB/hC,EAAK+hC,kBACxB5gD,QAAS,OAOV,GAAI2iD,EAAankD,QAAQqgB,EAAKpjB,QAAU,EAAG,CAC1CwnD,EAAQpkC,EACb,CAEI+jC,EAASjgD,KAAKkc,GACdgkC,EAAYlgD,KAAKkc,GAEjB,OAAOA,CACX,CAEG,UAAW6jC,GAAe,WAAY,CACrCA,EAAcA,EAAYh6C,EAC9B,CAEG,GAAInL,MAAMkF,QAAQigD,GAAc,CAC/BA,EAAY9/C,SAAQ,SAAUnH,GAC7B,IAAIojB,EAEJ,WAAYpjB,IAAU,YAAc,YAAcyB,EAAQzB,MAAY,SAAU,CAE/E,GAAIA,EAAMqF,QAAS,CAClB+d,EAAO,CACNkkC,MAAOtnD,EAAMsnD,MACbv6B,MAAO,KACPw6B,WAAYvnD,EAAMunD,WAClBpC,kBAAmBnlD,EAAMmlD,kBACzB5gD,QAAS,OAGV6iD,EAAYlgD,KAAKkc,GAEjBpjB,EAAMqF,QAAQ8B,SAAQ,SAAUic,GAC/BikC,EAAuBjkC,EAC/B,GACA,KAAa,CACNikC,EAAuBrnD,EAC9B,CACA,KAAY,CAENojB,EAAO,CACNkkC,MAAOtnD,EACPA,MAAOA,EACPuE,QAAS,OAOV,GAAI2iD,EAAankD,QAAQqgB,EAAKpjB,QAAU,EAAG,CAC1CwnD,EAAQpkC,EACf,CAEM+jC,EAASjgD,KAAKkc,GACdgkC,EAAYlgD,KAAKkc,EACvB,CACA,GACA,KAAU,CACN,IAAK,IAAI1jB,KAAOunD,EAAa,CAC5B,IAAI7jC,EAAO,CACVkkC,MAAOL,EAAYvnD,GACnBM,MAAON,EACP6E,QAAS,OAOV,GAAI2iD,EAAankD,QAAQqgB,EAAKpjB,QAAU,EAAG,CAC1CwnD,EAAQpkC,EACd,CAEK+jC,EAASjgD,KAAKkc,GACdgkC,EAAYlgD,KAAKkc,EACtB,CACA,CAEG,GAAI0/B,EAAa2E,eAAgB,CAChCN,EAAS5vC,MAAK,SAAUgwB,EAAGC,GAC1B,OAAOD,EAAE+f,MAAQ9f,EAAE8f,OAAS,EAAI/f,EAAE+f,MAAQ9f,EAAE8f,MAAQ,EAAI,CAC7D,IAEIF,EAAY7vC,MAAK,SAAUgwB,EAAGC,GAC7B,OAAOD,EAAE+f,MAAQ9f,EAAE8f,OAAS,EAAI/f,EAAE+f,MAAQ9f,EAAE8f,MAAQ,EAAI,CAC7D,IAEI,GAAIxE,EAAa2E,iBAAmB,MAAO,CAC1CN,EAAShkC,UACTikC,EAAYjkC,SACjB,CACA,CAEGojC,EAAYY,EACZV,EAAeW,EAEfM,GACH,CAEE,SAASA,IACR,MAAOrB,EAAOthD,WAAY,CACzBshD,EAAO9+C,YAAY8+C,EAAOthD,WAC9B,CAAI0hD,EAAat/C,SAAQ,SAAUic,GAE/B,IAAIpe,EAAKoe,EAAK7e,QAEd,IAAKS,EAAI,CACRA,EAAKC,SAASC,cAAc,OAC5Bke,EAAKkkC,MAAQxE,EAAa6E,kBAAoB7E,EAAa6E,kBAAkBvkC,EAAKpjB,MAAOojB,EAAKkkC,MAAOr6C,EAAMjI,EAAIoe,EAAKmkC,YAAcnkC,EAAKkkC,MACvI,GAAIlkC,EAAK2J,MAAO,CACf/nB,EAAGG,UAAUC,IAAI,oCACjBJ,EAAGq3C,SAAW,EACdr3C,EAAGgV,UAAYoJ,EAAKkkC,QAAU,GAAK,SAAWlkC,EAAKkkC,KACzD,KAAY,CACNtiD,EAAGG,UAAUC,IAAI,mCACjBJ,EAAGq3C,SAAW,EACdr3C,EAAGgV,UAAYoJ,EAAKkkC,QAAU,GAAK,SAAWlkC,EAAKkkC,MAEnDtiD,EAAGqR,iBAAiB,SAAS,WAC5BuwC,EAAgB,KAEhB3vC,YAAW,WACV2vC,EAAgB,KACxB,GAAU,IAIH,GAAIN,EAAa,CAChBsB,EAAWxkC,GACXgiB,EAAMnsB,OACd,KAAc,CACN4uC,EAAWzkC,EACnB,CACA,IAMM,GAAIsjC,EAAa3jD,QAAQqgB,IAAS,EAAG,CACpCpe,EAAGG,UAAUC,IAAI,SACxB,CACA,CAEK,GAAIge,EAAK+hC,mBAAqB1jD,EAAQ2hB,EAAK+hC,oBAAsB,SAAU,CAC1E,IAAK,IAAIzlD,KAAO0jB,EAAK+hC,kBAAmB,CACvC,GAAIzlD,EAAIqzC,OAAO,IAAM,IAAK,CACzBrzC,EAAMA,EAAIqnB,MAAM,GAChB/hB,EAAGqP,aAAa3U,EAAK0lC,EAAMggB,aAAa1lD,GAAO0jB,EAAK+hC,kBAAkB,IAAMzlD,GACpF,KAAc,CACNsF,EAAGqP,aAAa3U,EAAK0jB,EAAK+hC,kBAAkBzlD,GACpD,CACA,CACA,CACKsF,EAAGqR,iBAAiB,aAAa,WAChCswC,EAAW,MAEX1vC,YAAW,WACV0vC,EAAW,IAClB,GAAS,GACT,IAEKvjC,EAAK7e,QAAUS,CACpB,CAEIqhD,EAAOt9C,YAAY/D,EACvB,GACA,CAEE,SAAS8iD,EAAe1kC,EAAMnY,GAE7B,IAAKq7C,GAAeE,GAAeA,EAAYjiD,QAAS,CACvDiiD,EAAYjiD,QAAQY,UAAUikB,OAAO,SACzC,CAEG,GAAIo9B,GAAeA,EAAYjiD,QAAS,CACvCiiD,EAAYjiD,QAAQY,UAAUikB,OAAO,UACzC,CAEGo9B,EAAcpjC,EAEd,GAAIA,EAAK7e,QAAS,CACjB6e,EAAK7e,QAAQY,UAAUC,IAAI,WAC3B,GAAI6F,EAAQ,CACXmY,EAAK7e,QAAQY,UAAUC,IAAI,SAChC,CACA,CAEG,GAAIge,GAAQA,EAAK7e,SAAW6e,EAAK7e,QAAQwjD,eAAgB,CACxD3kC,EAAK7e,QAAQwjD,eAAe,CAAEC,SAAU,SAAUl1B,MAAO,UAAWm1B,OAAQ,SAChF,CACA,CAaE,SAAST,EAAQpkC,GAChB,IAAIhjB,EAAQsmD,EAAa3jD,QAAQqgB,GAEjC,GAAIhjB,IAAU,EAAG,CAChBsmD,EAAax/C,KAAKkc,GAClB0kC,EAAe1kC,EAAM,KACzB,CAEG8kC,GACH,CAEE,SAASC,EAAU/nD,GAClB,IAAIgjB,EAAOsjC,EAAatmD,GAExB,GAAIA,GAAS,EAAG,CACfsmD,EAAa/9C,OAAOvI,EAAO,GAC3B,GAAIgjB,EAAK7e,QAAS,CACjB6e,EAAK7e,QAAQY,UAAUikB,OAAO,SACnC,CACA,CACA,CAEE,SAASw+B,EAAWxkC,GACnB,IAAKA,EAAM,CACVA,EAAOojC,CACX,CAEG,IAAIpmD,EAAQsmD,EAAa3jD,QAAQqgB,GAEjC,GAAIhjB,GAAS,EAAG,CACf+nD,EAAU/nD,EACd,KAAU,CACN,GAAIkmD,IAAgB,MAAQI,EAAarmD,QAAUimD,EAAa,CAC/D6B,EAAU,EACf,CAEIX,EAAQpkC,EACZ,CAEG8kC,GACH,CAEE,SAASL,EAAWzkC,GACnBglC,IAEA,IAAKhlC,EAAM,CACVA,EAAOojC,CACX,CAEG,GAAIpjC,EAAM,CACTgiB,EAAMplC,MAAQojB,EAAKkkC,MACnBtD,EAAQ5gC,EAAKpjB,MACjB,CAEGmmD,EAAsB,CAAC/iC,EAAKpjB,MAC/B,CAEE,SAASqoD,EAAYptC,GACpB,IAAKA,EAAQ,CACZmtC,GACJ,CAEG,IAAIl9C,EAAS,GAEbw7C,EAAav/C,SAAQ,SAAUic,GAC9BlY,EAAOhE,KAAKkc,EAAKpjB,MACrB,IAEGmmD,EAAsBj7C,EAEtB84C,EAAQ94C,EACX,CAEE,SAASg9C,IACR,IAAIh9C,EAAS,GAEbw7C,EAAav/C,SAAQ,SAAUic,GAC9BlY,EAAOhE,KAAKkc,EAAKkkC,MACrB,IAEGliB,EAAMplC,MAAQkL,EAAO+pC,KAAK,MAE1B,GAAI3tC,EAAK2U,cAAgB,MAAO,CAC/BosC,EAAY,KAChB,CACA,CAEE,SAASC,IAER,IAAIlmD,EAAMskD,EAAarmD,OAEvB,IAAK,IAAIkoD,EAAM,EAAGA,EAAMnmD,EAAKmmD,IAAO,CACnCJ,EAAU,EACd,CACA,CAEE,SAASK,IACRJ,IACAnF,GACH,CAEE,SAASwF,IACR/B,EAAe,GAEf,IAAKL,EAAOz9C,WAAY,CACvB,GAAIk6C,EAAa9X,SAAW,KAAM,CACjCgc,EAAWD,IAAyBZ,EACzC,MAAW,UAAWrD,EAAa9X,SAAW,SAAU,CACnDgc,EAAWD,EAAsBjE,EAAa9X,QAASmb,EAC5D,KAAW,CACNa,EAAWlE,EAAa9X,QAAU,GAAImb,EAC3C,CAEI,IAAI74C,EAAS+B,EAAU/P,UAAUgQ,QAAQmR,SAASyiC,GAElDmD,EAAOpgD,MAAMwI,SAAWy0C,EAAOp1C,YAAc,KAE7Cu4C,EAAOpgD,MAAMoZ,IAAM/R,EAAO+R,IAAM6jC,EAAOzoC,aAAe,KACtD4rC,EAAOpgD,MAAMJ,KAAOyH,EAAOzH,KAAO,KAElCwgD,EAAOhwC,iBAAiB,aAAa,SAAUC,GAC9CqwC,EAAW,MAEX1vC,YAAW,WACV0vC,EAAW,IACjB,GAAQ,GACR,IAEI1hD,SAASgyB,KAAKluB,YAAYs9C,EAC9B,CACA,CAEE,SAAS+B,IACR,GAAI/B,EAAOz9C,WAAY,CACtBy9C,EAAOz9C,WAAWrB,YAAY8+C,EAClC,CAEGqC,GACH,CAEE,SAASA,IACRphD,EAAKnD,MAAMM,WAAWF,QAAQ0hD,oBAAoB,SAAUuC,EAC/D,CAEE,SAASG,EAAc/D,GAEtB5tC,aAAa8vC,GAEb,IAAI8B,EAAYlmD,OAAOmmD,aAAav9B,MAAMu5B,SAAS5T,cACnD4V,GAAc+B,EAAU3X,cAExB,IAAIhqC,EAAQs/C,EAAU9jD,MAAK,SAAU2gB,GACpC,cAAcA,EAAKkkC,QAAU,aAAelkC,EAAKkkC,MAAMrW,cAAc6X,WAAWjC,EACpF,IAEG,GAAI5/C,EAAO,CACV6gD,EAAe7gD,GAAQq/C,EAC3B,CAEGQ,EAAoB7vC,YAAW,WAC9B4vC,EAAa,EACjB,GAAM,IACN,CAGEzhB,EAAM/wB,aAAa,OAAQ,QAE3B+wB,EAAMn/B,MAAMg/C,QAAU,MACtB7f,EAAMn/B,MAAMwF,MAAQ,OACpB25B,EAAMn/B,MAAMi/C,UAAY,aACxB9f,EAAMn/B,MAAM8iD,OAAS,UACrB3jB,EAAM4jB,SAAW/mD,KAAKga,aAAe,MAErC,GAAI6mC,EAAaqC,mBAAqB1jD,EAAQqhD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAIzlD,KAAOojD,EAAaqC,kBAAmB,CAC/C,GAAIzlD,EAAIqzC,OAAO,IAAM,IAAK,CACzBrzC,EAAMA,EAAIqnB,MAAM,GAChBqe,EAAM/wB,aAAa3U,EAAK0lC,EAAMggB,aAAa1lD,GAAOojD,EAAaqC,kBAAkB,IAAMzlD,GAC5F,KAAW,CACN0lC,EAAM/wB,aAAa3U,EAAKojD,EAAaqC,kBAAkBzlD,GAC5D,CACA,CACA,CAEE0lC,EAAMplC,aAAe20B,IAAiB,aAAeA,IAAiB,KAAOA,EAAe,GAU5FyQ,EAAM/uB,iBAAiB,UAAU,SAAUC,GAC1C,IAAK8uB,EAAMplC,MAAO,CACjBsoD,IACAD,GACJ,CACA,IAGEjjB,EAAM/uB,iBAAiB,WAAW,SAAUC,GAC3C,IAAIlW,EAEJ,OAAQkW,EAAEuuC,SACT,KAAK,GAEJzkD,EAAQmmD,EAAUxjD,QAAQyjD,GAE1B,GAAIjB,GAAW,UAAYA,GAAW,UAAYnlD,EAAO,CACxDkW,EAAEuvC,2BACFvvC,EAAE0C,kBACF1C,EAAEwgB,iBAEF,GAAI12B,EAAQ,EAAG,CACd0nD,EAAevB,EAAUnmD,EAAQ,IAAKkmD,EAC7C,CACA,CACK,MAED,KAAK,GAEJlmD,EAAQmmD,EAAUxjD,QAAQyjD,GAE1B,GAAIjB,GAAW,UAAYA,GAAW,UAAYnlD,EAAQmmD,EAAUlmD,OAAS,EAAG,CAC/EiW,EAAEuvC,2BACFvvC,EAAE0C,kBACF1C,EAAEwgB,iBAEF,GAAI12B,EAAQmmD,EAAUlmD,OAAS,EAAG,CACjC,GAAID,IAAU,EAAG,CAChB0nD,EAAevB,EAAU,IAAKD,EACtC,KAAc,CACNwB,EAAevB,EAAUnmD,EAAQ,IAAKkmD,EAC9C,CACA,CACA,CACK,MAED,KAAK,GACL,KAAK,GAEJhwC,EAAEuvC,2BACFvvC,EAAE0C,kBACF1C,EAAEwgB,iBACF,MAED,KAAK,GAIJ,GAAIwvB,EAAa,CAChBsB,GACN,KAAY,CACNC,GACN,CAEK,MAED,KAAK,GAEJW,IACA,MAED,KAAK,EAEJ,MAED,QACC,GAAIlhD,EAAK2U,cAAgB,MAAO,CAC/B3F,EAAEwgB,gBACR,CAEK,GAAIxgB,EAAEuuC,SAAW,IAAMvuC,EAAEuuC,SAAW,GAAI,CACvC8D,GACN,EAEA,IAEEvjB,EAAM/uB,iBAAiB,QAAQ,SAAUC,GACxC,GAAIqwC,EAAU,CACb,GAAIL,EAAa,CAChB+B,GACL,KAAW,CACNG,GACL,CACA,CACA,IAEEpjB,EAAM/uB,iBAAiB,SAAS,SAAUC,GACzC,IAAKswC,EAAe,CACnB6B,GACJ,CACA,IAGEpC,EAASphD,SAASC,cAAc,OAChCmhD,EAAOlhD,UAAUC,IAAI,8BAErBsU,GAAW,WACV0rB,EAAMn/B,MAAMqD,OAAS,OACrB87B,EAAMnsB,MAAM,CAAEoqC,cAAe,MAChC,IAEEpsC,YAAW,WACVivC,EAAQ/hD,MAAMM,WAAWF,QAAQ8R,iBAAiB,SAAUmyC,EAC/D,GAAK,IAEH,OAAOpjB,CACT,EAGC6jB,aAAc,SAASA,EAAah8C,EAAMyM,EAAYsqC,EAASf,EAAQH,GACtE,IAAIoG,EAAUjnD,KAEX,IAACqF,EAAOrF,KACPihD,EAASj2C,EAAKvH,aACdivB,EAAe1nB,EAAK4M,WACpB0rC,EAAUzC,EAAa0C,oBAAsB,SAC7CW,SAA6BxxB,IAAiB,aAAeA,IAAiB,KAAOA,SAAsBmuB,EAAasD,eAAiB,YAActD,EAAasD,aAAe,GACnLhhB,EAAQngC,SAASC,cAAc,SAC/BmhD,EAASphD,SAASC,cAAc,OAEhCuhD,EAAe,GAEfD,EAAc,MACdG,EAAW,KACXwC,EAAqB,MAGzB/jB,EAAM/wB,aAAa,OAAQ,UAE3B+wB,EAAMn/B,MAAMg/C,QAAU,MACtB7f,EAAMn/B,MAAMwF,MAAQ,OACpB25B,EAAMn/B,MAAMi/C,UAAY,aAExB,GAAIpC,EAAaqC,mBAAqB1jD,EAAQqhD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAIzlD,KAAOojD,EAAaqC,kBAAmB,CAC/C,GAAIzlD,EAAIqzC,OAAO,IAAM,IAAK,CACzBrzC,EAAMA,EAAIqnB,MAAM,GAChBqe,EAAM/wB,aAAa3U,EAAK0lC,EAAMggB,aAAa1lD,GAAOojD,EAAaqC,kBAAkB,IAAMzlD,GAC5F,KAAW,CACN0lC,EAAM/wB,aAAa3U,EAAKojD,EAAaqC,kBAAkBzlD,GAC5D,CACA,CACA,CAGE2mD,EAAOlhD,UAAUC,IAAI,8BAErBihD,EAAOhwC,iBAAiB,aAAa,SAAUC,GAC9CqwC,EAAW,MAEX1vC,YAAW,WACV0vC,EAAW,IACf,GAAM,GACN,IAEE,SAASyC,IACR,GAAItG,EAAa9X,SAAW,KAAM,CACjCme,EAAqBpC,GACzB,MAAU,UAAWjE,EAAa9X,SAAW,SAAU,CACnDme,EAAqBpC,EAAsBjE,EAAa9X,OAC5D,CACA,CAEE,SAAS+b,EAAsBjgD,GAC9B,IAAIoE,EAAS,GACT3E,EAAOe,EAAKnD,MAAMue,UAClBta,EAEJ,GAAItB,EAAO,CACVsB,EAASd,EAAKnD,MAAMkI,cAAcpC,iBAAiBnD,EACvD,KAAU,CACNsB,EAAS6E,EAAK4nB,YAAY9qB,UAC9B,CAEG,GAAI3B,EAAQ,CACX7B,EAAKY,SAAQ,SAAUR,GACtB,IAAI8wB,EAAMrvB,EAAO+J,cAAcxL,GAE/B,GAAI8wB,IAAQ,aAAeA,IAAQ,aAAeA,IAAQ,GAAI,CAC7DvsB,EAAOusB,GAAO,IACpB,CACA,IAEI,GAAIqrB,EAAa2E,eAAgB,CAChC,GAAI3E,EAAa2E,gBAAkB,MAAO,CACzCv8C,EAAS7L,OAAOiL,KAAKY,GAAQqM,MACnC,KAAY,CACNrM,EAAS7L,OAAOiL,KAAKY,GAAQqM,OAAO4L,SAC1C,CACA,KAAW,CACNjY,EAAS7L,OAAOiL,KAAKY,EAC1B,CACA,KAAU,CACN8C,QAAQC,KAAK,qEAAsEnH,EACvF,CAEG,OAAOoE,CACV,CAEE,SAASm+C,EAAWC,EAAMC,GACtB,IAACl/C,EAAU,GACV2gC,EACA2G,EAIJ,GAAIwX,EAAoB,CACvBne,EAASme,CACb,KAAU,CACNne,EAAS8X,EAAa9X,QAAU,EACpC,CAEG,GAAI8X,EAAa0G,WAAY,CAC5Bn/C,EAAUy4C,EAAa0G,WAAWF,EAAMte,GAExC,GAAI3gC,aAAmBmD,QAAS,CAE/Bi8C,SAAiB3G,EAAa4G,uBAAyB,YAAc5G,EAAa4G,qBAAuB,gBAEzGr/C,EAAQyS,MAAK,SAAU7b,GACtB0oD,EAAmB3C,EAAW/lD,GAASsoD,EAC7C,IAAQxsC,OAAM,SAAUC,GAClBhP,QAAQgP,IAAI,wCAAyCA,EAC3D,GACA,KAAW,CACN2sC,EAAmB3C,EAAW38C,GAAUk/C,EAC7C,CACA,KAAU,CACN5X,EAAQqV,EAAWhc,GAEnB,GAAIse,IAAS,GAAI,CAChB,GAAIxG,EAAa8G,gBAAiB,CACjCv/C,EAAUsnC,CAChB,CACA,KAAW,CACNA,EAAMxqC,SAAQ,SAAUic,GACvB,GAAIA,EAAKpjB,QAAU,aAAeojB,EAAKpjB,QAAU,YAAa,CAC7D,GAAI0C,OAAO0gB,EAAKpjB,OAAOixC,cAAcluC,QAAQL,OAAO4mD,GAAMrY,gBAAkB,GAAKvuC,OAAO0gB,EAAKrc,OAAOkqC,cAAcluC,QAAQL,OAAO4mD,GAAMrY,gBAAkB,EAAG,CAC3J5mC,EAAQnD,KAAKkc,EACrB,CACA,CACA,GACA,CAEIumC,EAAmBt/C,EAASk/C,EAChC,CACA,CAEE,SAASE,EAAUI,GAClB,IAAIC,EAAW7kD,SAASC,cAAc,OAEtC6kD,IAEA,GAAIF,IAAW,MAAO,CACrBC,EAAS3kD,UAAUC,IAAI,qCACvB0kD,EAASzN,SAAW,EAEpB,GAAIwN,aAAkB9vC,KAAM,CAC3B+vC,EAAS/gD,YAAY8gD,EAC1B,KAAW,CACNC,EAAS9vC,UAAY6vC,CAC1B,CAEIxD,EAAOt9C,YAAY+gD,EACvB,CACA,CAEE,SAAS9C,EAAWC,GACnB,IAAI+C,EAAW,GAEf,GAAIloD,MAAMkF,QAAQigD,GAAc,CAC/BA,EAAY9/C,SAAQ,SAAUnH,GAE7B,IAAIojB,EAAO,GAEX,WAAYpjB,IAAU,YAAc,YAAcyB,EAAQzB,MAAY,SAAU,CAC/EojB,EAAKrc,MAAQ+7C,EAAa6E,kBAAoB7E,EAAa6E,kBAAkB3nD,EAAMA,MAAOA,EAAMsnD,OAAStnD,EAAMsnD,MAC/GlkC,EAAKpjB,MAAQA,EAAMA,KACzB,KAAY,CACNojB,EAAKrc,MAAQ+7C,EAAa6E,kBAAoB7E,EAAa6E,kBAAkB3nD,EAAOA,GAASA,EAC7FojB,EAAKpjB,MAAQA,CACnB,CAEKgqD,EAAS9iD,KAAKkc,EACnB,GACA,KAAU,CACN,IAAK,IAAI1jB,KAAOunD,EAAa,CAC5B,IAAI7jC,EAAO,CACVrc,MAAO+7C,EAAa6E,kBAAoB7E,EAAa6E,kBAAkBjoD,EAAKunD,EAAYvnD,IAAQunD,EAAYvnD,GAC5GM,MAAON,GAGRsqD,EAAS9iD,KAAKkc,EACnB,CACA,CAEG,OAAO4mC,CACV,CAEE,SAASD,IACR,MAAO1D,EAAOthD,WAAY,CACzBshD,EAAO9+C,YAAY8+C,EAAOthD,WAC9B,CACA,CAEE,SAAS4kD,EAAmBhY,EAAO4X,GAClC,GAAI5X,EAAMtxC,OAAQ,CACjBqnD,EAAS/V,EAAO4X,EACpB,KAAU,CACN,GAAIzG,EAAamH,iBAAkB,CAClCR,EAAU3G,EAAamH,iBAC5B,CACA,CACA,CAEE,SAASvC,EAAS/V,EAAO4X,GACxB,IAAIW,EAAU,MAEdH,IAEAtD,EAAe9U,EAEf8U,EAAat/C,SAAQ,SAAUic,GAC9B,IAAIpe,EAAKoe,EAAK7e,QAEd,IAAKS,EAAI,CACRA,EAAKC,SAASC,cAAc,OAC5BF,EAAGG,UAAUC,IAAI,mCACjBJ,EAAGq3C,SAAW,EACdr3C,EAAGgV,UAAYoJ,EAAKrc,MAEpB/B,EAAGqR,iBAAiB,SAAS,SAAUC,GACtCwxC,EAAe1kC,GACfykC,GACN,IAEK7iD,EAAGqR,iBAAiB,aAAa,SAAUC,GAC1CqwC,EAAW,MAEX1vC,YAAW,WACV0vC,EAAW,IAClB,GAAS,GACT,IAEKvjC,EAAK7e,QAAUS,EAEf,GAAIukD,GAAcnmC,EAAKpjB,OAAS20B,EAAc,CAC7CyQ,EAAMplC,MAAQojB,EAAKrc,MACnBqc,EAAK7e,QAAQY,UAAUC,IAAI,UAC3B8kD,EAAU,IAChB,CAEK,GAAI9mC,IAASojC,EAAa,CACzBpjC,EAAK7e,QAAQY,UAAUC,IAAI,UAC3B8kD,EAAU,IAChB,CACA,CAEI7D,EAAOt9C,YAAY/D,EACvB,IAEG,IAAKklD,EAAS,CACbpC,EAAe,MACnB,CACA,CAEE,SAASD,IACRO,IAEA,GAAI5B,EAAa,CAChB,GAAI7xB,IAAiB6xB,EAAYxmD,MAAO,CACvC20B,EAAe6xB,EAAYxmD,MAC3BolC,EAAMplC,MAAQwmD,EAAYz/C,MAC1Bi9C,EAAQwC,EAAYxmD,MACzB,KAAW,CACNijD,GACL,CACA,KAAU,CACN,GAAIH,EAAaqH,SAAU,CAC1Bx1B,EAAeyQ,EAAMplC,MACrBgkD,EAAQ5e,EAAMplC,MACnB,KAAW,CACN,GAAI8iD,EAAasH,YAAchlB,EAAMplC,QAAU,GAAI,CAClD20B,EAAeyQ,EAAMplC,MACrBgkD,EAAQ5e,EAAMplC,MACpB,KAAY,CACNijD,GACN,CACA,CACA,CACA,CAEE,SAASwF,IACR,IAAKpC,EAAOz9C,WAAY,CAEvBoF,QAAQq8C,IAAI,OAAQlE,GACpB,MAAOE,EAAOthD,WAAY,CACzBshD,EAAO9+C,YAAY8+C,EAAOthD,WAC/B,CAAK,IAAIuI,EAAS+B,EAAU/P,UAAUgQ,QAAQmR,SAASyiC,GAEnDmD,EAAOpgD,MAAMwI,SAAWy0C,EAAOp1C,YAAc,KAE7Cu4C,EAAOpgD,MAAMoZ,IAAM/R,EAAO+R,IAAM6jC,EAAOzoC,aAAe,KACtD4rC,EAAOpgD,MAAMJ,KAAOyH,EAAOzH,KAAO,KAClCZ,SAASgyB,KAAKluB,YAAYs9C,EAC9B,CACA,CAEE,SAASyB,EAAe1kC,EAAMknC,GAC7B,GAAI9D,GAAeA,EAAYjiD,QAAS,CACvCiiD,EAAYjiD,QAAQY,UAAUikB,OAAO,SACzC,CAEGo9B,EAAcpjC,EAEd,GAAIA,GAAQA,EAAK7e,QAAS,CACzB6e,EAAK7e,QAAQY,UAAUC,IAAI,SAC/B,CAEG,GAAIge,GAAQA,EAAK7e,SAAW6e,EAAK7e,QAAQwjD,eAAgB,CACxD3kC,EAAK7e,QAAQwjD,eAAe,CAAEC,SAAU,SAAUl1B,MAAO,UAAWm1B,OAAQ,SAChF,CACA,CAEE,SAASG,IACR,GAAI/B,EAAOz9C,WAAY,CACtBy9C,EAAOz9C,WAAWrB,YAAY8+C,EAClC,CAEGqC,GACH,CAEE,SAASF,IACRJ,IACAnF,GACH,CAEE,SAASyF,IACRphD,EAAKnD,MAAMM,WAAWF,QAAQ0hD,oBAAoB,SAAUuC,EAC/D,CAGEpjB,EAAM/uB,iBAAiB,WAAW,SAAUC,GAC3C,IAAIlW,EAEJ,OAAQkW,EAAEuuC,SACT,KAAK,GAEJzkD,EAAQqmD,EAAa1jD,QAAQyjD,GAE7B,GAAIjB,GAAW,UAAYA,GAAW,UAAYnlD,EAAO,CACxDkW,EAAEuvC,2BACFvvC,EAAE0C,kBACF1C,EAAEwgB,iBAEF,GAAI12B,EAAQ,EAAG,CACd0nD,EAAerB,EAAarmD,EAAQ,GAC3C,KAAa,CACN0nD,EAAe,MACtB,CACA,CACK,MAED,KAAK,GAGJ1nD,EAAQqmD,EAAa1jD,QAAQyjD,GAE7B,GAAIjB,GAAW,UAAYA,GAAW,UAAYnlD,EAAQqmD,EAAapmD,OAAS,EAAG,CAElFiW,EAAEuvC,2BACFvvC,EAAE0C,kBACF1C,EAAEwgB,iBAEF,GAAI12B,EAAQqmD,EAAapmD,OAAS,EAAG,CACpC,GAAID,IAAU,EAAG,CAChB0nD,EAAerB,EAAa,GACpC,KAAc,CACNqB,EAAerB,EAAarmD,EAAQ,GAC5C,CACA,CACA,CACK,MAED,KAAK,GACL,KAAK,GAEJkW,EAAEuvC,2BACFvvC,EAAE0C,kBAEF,MAED,KAAK,GAEJ6uC,IACA,MAED,KAAK,GAEJW,IACA,MAED,KAAK,GACL,KAAK,GAGJlyC,EAAEuvC,2BACF,MAEL,IAEEzgB,EAAM/uB,iBAAiB,SAAS,SAAUC,GAEzC,OAAQA,EAAEuuC,SACT,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GAEJ,MAED,QACCwE,EAAWjkB,EAAMplC,OAEtB,IAEEolC,EAAM/uB,iBAAiB,UAAU,SAAUC,GAC1C+yC,EAAWjkB,EAAMplC,MACpB,IAEEolC,EAAM/uB,iBAAiB,QAAQ,SAAUC,GACxC,GAAIqwC,EAAU,CACbkB,GACJ,CACA,IAEEziB,EAAM/uB,iBAAiB,SAAS,SAAUC,GACzC,IAAItW,EAAQmmD,EACZiD,IACAX,IACArjB,EAAMplC,MAAQA,EACdqpD,EAAWrpD,EAAO,KACrB,IAEE0Z,GAAW,WACV0rB,EAAMn/B,MAAMqD,OAAS,OACrB87B,EAAMnsB,MAAM,CAAEoqC,cAAe,MAChC,IAEE,GAAIP,EAAaqB,KAAM,CACtBliD,KAAKkC,MAAMiC,QAAQ2R,KAAKmsC,UAAU9e,EAAO0d,EAC5C,CAEE7rC,YAAW,WACViyC,EAAQ/kD,MAAMM,WAAWF,QAAQ8R,iBAAiB,SAAUmyC,EAC/D,GAAK,IAEHY,IACAhkB,EAAMplC,MAAQmmD,EACdkD,EAAWlD,EAAqB,MAEhC,OAAO/gB,CACT,EAGCmlB,KAAM,SAASA,EAAKt9C,EAAMyM,EAAYsqC,EAASf,EAAQH,GACtD,IAAIx7C,EAAOrF,KACPsC,EAAU0I,EAAKvH,aACf1F,EAAQiN,EAAK4M,WACb2wC,EAAWjmD,EAAQkmD,qBAAqB,OAAOpqD,QAAU,EACzDmqC,EAAOjmC,EAAQkmD,qBAAqB,OAAO,GAAKlmD,EAAQkmD,qBAAqB,OAAO,GAAGrF,aAAa,SAAW,GAC/GsF,EAAQ,GACRC,EAAc1lD,SAASC,cAAc,OACrCqlD,EAAOtlD,SAAS2lD,gBAAgB,6BAA8B,OAGlE,SAASC,EAAWpzB,GACnBizB,EAAMvjD,SAAQ,SAAUojD,EAAM9iD,GAC7B,GAAIA,EAAIgwB,EAAK,CACZ,GAAInwB,EAAKnD,MAAMknB,SAAW,KAAM,CAC/Bk/B,EAAKl2C,aAAa,QAAS,wBACjC,KAAY,CACNk2C,EAAKplD,UAAUu2C,QAAQ,0BAA2B,wBACxD,CAEK6O,EAAKvwC,UAAY,ySACtB,KAAW,CACN,GAAI1S,EAAKnD,MAAMknB,SAAW,KAAM,CAC/Bk/B,EAAKl2C,aAAa,QAAS,0BACjC,KAAY,CACNk2C,EAAKplD,UAAUu2C,QAAQ,wBAAyB,0BACtD,CAEK6O,EAAKvwC,UAAY,ySACtB,CACA,GACA,CAGE,SAAS8wC,EAAUrjD,GAElB,IAAIsjD,EAAa9lD,SAASC,cAAc,QACxC,IAAI8lD,EAAWT,EAAK9N,UAAU,MAE9BiO,EAAMxjD,KAAK8jD,GAEXD,EAAW10C,iBAAiB,cAAc,SAAUC,GACnDA,EAAE0C,kBACF1C,EAAEuvC,2BACFgF,EAAWpjD,EACf,IAEGsjD,EAAW10C,iBAAiB,aAAa,SAAUC,GAClDA,EAAE0C,kBACF1C,EAAEuvC,0BACN,IAEGkF,EAAW10C,iBAAiB,SAAS,SAAUC,GAC9CA,EAAE0C,kBACF1C,EAAEuvC,2BACF7B,EAAQv8C,GACRlD,EAAQ0/C,MACZ,IAEG8G,EAAWhiD,YAAYiiD,GACvBL,EAAY5hD,YAAYgiD,EAC3B,CAGE,SAASE,EAAYxzB,GACpBz3B,EAAQy3B,EACRozB,EAAWpzB,EACd,CAGElzB,EAAQ0B,MAAMw/C,WAAa,SAC3BlhD,EAAQ0B,MAAMilD,SAAW,SACzB3mD,EAAQ0B,MAAMklD,aAAe,WAG7BR,EAAY1kD,MAAMwD,cAAgB,SAClCkhD,EAAY1kD,MAAMkV,QAAU,eAC5BwvC,EAAY1kD,MAAMg/C,QAAU,MAG5BsF,EAAKl2C,aAAa,QAASm2B,GAC3B+f,EAAKl2C,aAAa,SAAUm2B,GAC5B+f,EAAKl2C,aAAa,UAAW,eAC7Bk2C,EAAKl2C,aAAa,YAAa,YAC/Bk2C,EAAKtkD,MAAMg/C,QAAU,QAErB,GAAInC,EAAaqC,mBAAqB1jD,EAAQqhD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAIzlD,KAAOojD,EAAaqC,kBAAmB,CAC/C,GAAIzlD,EAAIqzC,OAAO,IAAM,IAAK,CACzBrzC,EAAMA,EAAIqnB,MAAM,GAChB4jC,EAAYt2C,aAAa3U,EAAKirD,EAAYvF,aAAa1lD,GAAOojD,EAAaqC,kBAAkB,IAAMzlD,GACxG,KAAW,CACNirD,EAAYt2C,aAAa3U,EAAKojD,EAAaqC,kBAAkBzlD,GAClE,CACA,CACA,CAGE,IAAK,IAAI+H,EAAI,EAAGA,GAAK+iD,EAAU/iD,IAAK,CACnCqjD,EAAUrjD,EACb,CAGEzH,EAAQmD,KAAK4K,IAAIa,SAAS5O,GAAQwqD,GAGlCK,EAAW7qD,GAEX2qD,EAAYt0C,iBAAiB,aAAa,SAAUC,GACnDu0C,EAAW,EACd,IAEEF,EAAYt0C,iBAAiB,SAAS,SAAUC,GAC/C0tC,EAAQ,EACX,IAEEz/C,EAAQ8R,iBAAiB,QAAQ,SAAUC,GAC1C2sC,GACH,IAGE1+C,EAAQ8R,iBAAiB,WAAW,SAAUC,GAC7C,OAAQA,EAAEuuC,SACT,KAAK,GAEJoG,EAAYjrD,EAAQ,GACpB,MAED,KAAK,GAEJirD,EAAYjrD,EAAQ,GACpB,MAED,KAAK,GAEJgkD,EAAQhkD,GACR,MAED,KAAK,GAEJijD,IACA,MAEL,IAEE,OAAO0H,CACT,EAGCS,SAAU,SAASA,EAASn+C,EAAMyM,EAAYsqC,EAASf,EAAQH,GAC9D,IAAIv+C,EAAU0I,EAAKvH,aACftC,SAAa0/C,EAAa1/C,MAAQ,YAAcmB,EAAQkmD,qBAAqB,OAAO,GAAGrF,aAAa,QAAU,IAAMtC,EAAa1/C,IACjI2K,SAAa+0C,EAAa/0C,MAAQ,YAAcxJ,EAAQkmD,qBAAqB,OAAO,GAAGrF,aAAa,QAAU,EAAItC,EAAa/0C,IAC/Hs9C,GAAWjoD,EAAM2K,GAAO,IACxB/N,EAAQiN,EAAK4M,YAAc,EAC3ByxC,EAASrmD,SAASC,cAAc,OAChCqmD,EAAMtmD,SAASC,cAAc,OAC7BsmD,EACAC,EAGJ,SAASC,IACR,IAAIzlD,EAAQmmB,OAAO0W,iBAAiBv+B,EAAS,MAE7C,IAAIonD,EAAUN,EAAUloD,KAAKyoD,MAAML,EAAIz9C,cAAgBvJ,EAAQyB,YAAc4I,SAAS3I,EAAM02C,iBAAiB,iBAAmB/tC,SAAS3I,EAAM02C,iBAAiB,mBAAqB,MAAQ5uC,EAC7Li2C,EAAQ2H,GACRpnD,EAAQ8P,aAAa,gBAAiBs3C,GACtCpnD,EAAQ8P,aAAa,aAAcrU,EACtC,CAGEsrD,EAAOrlD,MAAMkH,SAAW,WACxBm+C,EAAOrlD,MAAMiwB,MAAQ,IACrBo1B,EAAOrlD,MAAMoZ,IAAM,IACnBisC,EAAOrlD,MAAM8vB,OAAS,IACtBu1B,EAAOrlD,MAAMwF,MAAQ,MACrB6/C,EAAOnmD,UAAUC,IAAI,6BAGrBmmD,EAAItlD,MAAMkV,QAAU,eACpBowC,EAAItlD,MAAMkH,SAAW,WAKrBo+C,EAAItlD,MAAMqD,OAAS,OACnBiiD,EAAItlD,MAAM4lD,gBAAkB,UAC5BN,EAAItlD,MAAMqN,SAAW,OACrBi4C,EAAItlD,MAAMwI,SAAW,KAErB,GAAIq0C,EAAaqC,mBAAqB1jD,EAAQqhD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAIzlD,KAAOojD,EAAaqC,kBAAmB,CAC/C,GAAIzlD,EAAIqzC,OAAO,IAAM,IAAK,CACzBrzC,EAAMA,EAAIqnB,MAAM,GAChBwkC,EAAIl3C,aAAa3U,EAAK6rD,EAAInG,aAAa1lD,GAAOojD,EAAaqC,kBAAkB,IAAMzlD,GACxF,KAAW,CACN6rD,EAAIl3C,aAAa3U,EAAKojD,EAAaqC,kBAAkBzlD,GAC1D,CACA,CACA,CAGE6E,EAAQ0B,MAAMg/C,QAAU,UAGxBjlD,EAAQmD,KAAK4K,IAAI0rC,WAAWz5C,GAAQoD,GACpCpD,EAAQmD,KAAKC,IAAIq2C,WAAWz5C,GAAQ+N,GAGpC/N,EAAQmD,KAAKyoD,OAAO5rD,EAAQ+N,GAAOs9C,GAEnCE,EAAItlD,MAAMwF,MAAQzL,EAAQ,IAE1BuE,EAAQ8P,aAAa,gBAAiBtG,GACtCxJ,EAAQ8P,aAAa,gBAAiBjR,GAEtCmoD,EAAIxiD,YAAYuiD,GAEhBA,EAAOj1C,iBAAiB,aAAa,SAAUC,GAC9Ck1C,EAAYl1C,EAAEw1C,QACdL,EAAiBF,EAAIz9C,WACxB,IAEEw9C,EAAOj1C,iBAAiB,aAAa,WACpCi1C,EAAOrlD,MAAM8iD,OAAS,WACzB,IAEExkD,EAAQ8R,iBAAiB,aAAa,SAAUC,GAC/C,GAAIk1C,EAAW,CACdD,EAAItlD,MAAMwF,MAAQggD,EAAiBn1C,EAAEw1C,QAAUN,EAAY,IAC/D,CACA,IAEEjnD,EAAQ8R,iBAAiB,WAAW,SAAUC,GAC7C,GAAIk1C,EAAW,CACdl1C,EAAE0C,kBACF1C,EAAEuvC,2BAEF2F,EAAY,MACZC,EAAiB,MAEjBC,GACJ,CACA,IAGEnnD,EAAQ8R,iBAAiB,WAAW,SAAUC,GAC7C,OAAQA,EAAEuuC,SACT,KAAK,GAEJvuC,EAAEwgB,iBACFy0B,EAAItlD,MAAMwF,MAAQ8/C,EAAIvlD,YAAczB,EAAQyB,YAAc,IAAM,KAChE,MAED,KAAK,GAEJsQ,EAAEwgB,iBACFy0B,EAAItlD,MAAMwF,MAAQ8/C,EAAIvlD,YAAczB,EAAQyB,YAAc,IAAM,KAChE,MAED,KAAK,EACL,KAAK,GAEJ0lD,IACA,MAED,KAAK,GAEJzI,IACA,MAGL,IAEE1+C,EAAQ8R,iBAAiB,QAAQ,WAChC4sC,GACH,IAEE,OAAOsI,CACT,EAGCQ,UAAW,SAASA,EAAU9+C,EAAMyM,EAAYsqC,EAASf,EAAQH,GAChE,IAAI9iD,EAAQiN,EAAK4M,WACburB,EAAQngC,SAASC,cAAc,SAC/B8mD,EAAWlJ,EAAakJ,SACxBC,SAAuBnJ,EAAaoJ,qBAAuB,YAAc,KAAOpJ,EAAaoJ,mBAC7FC,EAAgB,MAEpB/mB,EAAM/wB,aAAa,OAAQ,YAC3B+wB,EAAMn/B,MAAMmmD,UAAY,MACxBhnB,EAAMn/B,MAAMi/C,UAAY,aAExB,GAAIpC,EAAaqC,mBAAqB1jD,EAAQqhD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAIzlD,KAAOojD,EAAaqC,kBAAmB,CAC/C,GAAIzlD,EAAIqzC,OAAO,IAAM,IAAK,CACzBrzC,EAAMA,EAAIqnB,MAAM,GAChBqe,EAAM/wB,aAAa3U,EAAK0lC,EAAMggB,aAAa1lD,GAAOojD,EAAaqC,kBAAkB,IAAMzlD,GAC5F,KAAW,CACN0lC,EAAM/wB,aAAa3U,EAAKojD,EAAaqC,kBAAkBzlD,GAC5D,CACA,CACA,CAEE0lC,EAAMplC,MAAQA,EAEd,GAAIgsD,WAAoBhsD,IAAU,aAAeA,IAAUisD,GAAiBjsD,IAAU,IAAK,CAC1FmsD,EAAgB,KAChB/mB,EAAMinB,cAAgB,IACzB,CAEE,GAAIpqD,KAAKkC,MAAMknB,SAAW,UAAW,CAEpC3R,GAAW,WACV0rB,EAAMnsB,MAAM,CAAEoqC,cAAe,MACjC,GACA,CAEEje,EAAMknB,QAAUtsD,IAAU,MAAQA,IAAU,QAAUA,IAAU,QAAUA,IAAU,EAEpF0Z,GAAW,WACV0rB,EAAMnsB,OACT,IAEE,SAAS6b,EAASmvB,GACjB,GAAI+H,EAAU,CACb,IAAK/H,EAAM,CACV,GAAI7e,EAAMknB,UAAYH,EAAe,CACpC/mB,EAAMknB,QAAU,MAChBlnB,EAAMinB,cAAgB,KACtBF,EAAgB,KAChB,OAAOF,CACb,KAAY,CACNE,EAAgB,MAChB,OAAO/mB,EAAMknB,OACnB,CACA,KAAW,CACN,GAAIH,EAAe,CAClB,OAAOF,CACb,KAAY,CACN,OAAO7mB,EAAMknB,OACnB,CACA,CACA,KAAU,CACN,OAAOlnB,EAAMknB,OACjB,CACA,CAGElnB,EAAM/uB,iBAAiB,UAAU,SAAUC,GAC1C0tC,EAAQlvB,IACX,IAEEsQ,EAAM/uB,iBAAiB,QAAQ,SAAUC,GACxC0tC,EAAQlvB,EAAS,MACpB,IAGEsQ,EAAM/uB,iBAAiB,WAAW,SAAUC,GAC3C,GAAIA,EAAEuuC,SAAW,GAAI,CACpBb,EAAQlvB,IACZ,CACG,GAAIxe,EAAEuuC,SAAW,GAAI,CACpB5B,GACJ,CACA,IAEE,OAAO7d,CACT,GAGA/1B,EAAU/P,UAAUytC,eAAe,OAAQyV,GAE3C,IAAI+J,EAAY,SAASA,EAAU38C,EAAMlL,EAASgP,EAAWmoC,GAC5D55C,KAAK2N,KAAOA,EACZ3N,KAAKyC,QAAUA,EACfzC,KAAKyR,UAAYA,GAAa,MAC9BzR,KAAK45C,OAASA,GAAU,CACzB,EAEA,IAAI2Q,EAAe,SAASA,EAAaxsD,EAAO0T,EAAWjI,EAAOnC,EAAQ61C,GACzEl9C,KAAKjC,MAAQA,EACbiC,KAAKyR,UAAYA,GAAa,MAC9BzR,KAAKwJ,MAAQA,EACbxJ,KAAKqH,OAASA,EACdrH,KAAKk9C,MAAQA,CACd,EAEA,IAAIsN,EAAS,SAASA,EAAOtoD,GAC5BlC,KAAKkC,MAAQA,EACblC,KAAKsK,OAAS,GACdtK,KAAKyqD,gBAAkB,KACvBzqD,KAAK0qD,WAAa,EACnB,EAEAF,EAAOntD,UAAU86C,mBAAqB,SAAU7tC,EAAQtG,EAAO+wB,EAAO21B,GACrE1qD,KAAKyqD,gBAAkBzmD,EACvBhE,KAAKsK,OAASA,GAAU,GACxBtK,KAAK0qD,WAAaA,EAElB,IAAIjX,EAAUzzC,KAAKsK,OAAO02B,gBAAkB,MAAQhhC,KAAK2qD,oBAAoB3qD,KAAK4qD,8BAAgC,GAClH,IAAI51B,EAAOh1B,KAAK6qD,iBAAiB7qD,KAAK8qD,UAAU/1B,IAEhD,OAAO0e,EAAQ5oC,OAAOmqB,EACvB,EAEAw1B,EAAOntD,UAAU0tD,eAAiB,SAAUzgD,EAAQtG,EAAO+wB,EAAO21B,GACjE,IAAIvnC,EAAOnjB,KAAKm4C,mBAAmB7tC,EAAQtG,EAAO+wB,EAAO21B,GAEzD,OAAO1qD,KAAKgrD,sBAAsB7nC,EACnC,EAEAqnC,EAAOntD,UAAUytD,UAAY,SAAU/1B,GACtC,IAAIk2B,EAAUjrD,KAEd,IAAI2K,EAAO,GAEX,UAAWoqB,GAAS,WAAY,CAC/BA,EAAMr3B,KAAKsC,KAAKkC,OAAOgD,SAAQ,SAAUR,GACxCA,EAAMumD,EAAQ/oD,MAAMM,WAAWkb,QAAQhZ,GAEvC,GAAIA,EAAK,CACRiG,EAAK1F,KAAKP,EACd,CACA,GACA,KAAQ,CACN,OAAQqwB,GACP,KAAK,KACL,IAAK,UACJpqB,EAAO3K,KAAKkC,MAAMM,WAAWqjB,eAAe,MAC5C,MAED,IAAK,MACJlb,EAAO3K,KAAKkC,MAAMM,WAAWmI,KAC7B,MAED,IAAK,WACJA,EAAO3K,KAAKkC,MAAMiC,QAAQob,UAAU6G,aACpC,MAED,IAAK,SACL,QACC,GAAIpmB,KAAKkC,MAAMkB,QAAQ2b,WAAY,CAClCpU,EAAO3K,KAAKkC,MAAMM,WAAW2b,eAAene,KAAKkC,MAAMM,WAAWkZ,YAAYtd,OAAS,EAC5F,KAAW,CACNuM,EAAO3K,KAAKkC,MAAMM,WAAW2b,gBAClC,EAEA,CAEC,OAAO/gB,OAAOqE,OAAO,GAAIkJ,EAC1B,EAEA6/C,EAAOntD,UAAUutD,2BAA6B,WAC7C,IAAIM,EAAUlrD,KAEd,IAAIiJ,EAAS,GAEb,IAAIxG,EAAUzC,KAAKsK,OAAO6gD,eAAiB,MAAQnrD,KAAKkC,MAAMkI,cAAc3H,QAAUzC,KAAKkC,MAAMkI,cAAc1H,eAE/GD,EAAQyC,SAAQ,SAAUiB,GACzB,IAAIilD,EAAUF,EAAQG,mBAAmBllD,GAEzC,GAAIilD,EAAS,CACZniD,EAAOhE,KAAKmmD,EACf,CACA,IAEC,OAAOniD,CACR,EAEAuhD,EAAOntD,UAAUguD,mBAAqB,SAAUllD,GAC/C,IAAImlD,EAAUtrD,KAEd,IAAI62C,EAAY1wC,EAAO1D,QACnB8oD,EAAW,EACXzmD,EAAQqB,EAAOH,WAAW,SAAWhG,KAAK0qD,WAAW5Z,OAAO,GAAGC,cAAgB/wC,KAAK0qD,WAAW5lC,MAAM,MAAQ3e,EAAOH,WAAWlB,MAEnI,IAAI0mD,EAAY,CACf1mD,MAAOA,EACPqB,OAAQA,EACR+2C,MAAO,GAGR,GAAIrG,EAAUz4C,OAAQ,CACrBotD,EAAU3U,UAAY,GACtB2U,EAAUhiD,MAAQ,EAElBqtC,EAAU3xC,SAAQ,SAAUumD,GAC3B,IAAIC,EAAeJ,EAAQD,mBAAmBI,GAE9C,GAAIC,EAAc,CACjBF,EAAUhiD,OAASkiD,EAAaliD,MAChCgiD,EAAU3U,UAAU5xC,KAAKymD,GAEzB,GAAIA,EAAaxO,MAAQqO,EAAU,CAClCA,EAAWG,EAAaxO,KAC7B,CACA,CACA,IAEEsO,EAAUtO,OAASqO,EAEnB,IAAKC,EAAUhiD,MAAO,CACrB,OAAO,KACV,CACA,KAAQ,CACN,GAAIxJ,KAAK2rD,eAAexlD,GAAS,CAChCqlD,EAAUhiD,MAAQ,CACrB,KAAS,CACN,OAAO,KACV,CACA,CAEC,OAAOgiD,CACR,EAEAhB,EAAOntD,UAAUsuD,eAAiB,SAAUxlD,GAC3C,OAAOA,EAAOH,WAAWhG,KAAK0qD,cAAgB,QAAUvkD,EAAOuC,UAAYvC,EAAOuC,SAAWvC,EAAOH,WAAWhG,KAAK0qD,YACrH,EAEAF,EAAOntD,UAAUstD,oBAAsB,SAAUloD,GAChD,IAAIgxC,EAAU,GACVmY,EAAc,EACdC,EAAa,GAEjB,SAASC,EAAiB3lD,EAAQmpC,GAEjC,IAAI4N,EAAQ0O,EAActc,EAE1B,UAAWmE,EAAQnE,KAAW,YAAa,CAC1CmE,EAAQnE,GAAS,EACpB,CAEEnpC,EAAOkB,OAASlB,EAAO0wC,UAAY,EAAIqG,EAAQ/2C,EAAO+2C,MAAQ,EAE9DzJ,EAAQnE,GAAOrqC,KAAKkB,GAEpB,GAAIA,EAAOkB,OAAS,EAAG,CACtB,IAAK,IAAI0kD,EAAO,EAAGA,EAAO5lD,EAAOkB,OAAQ0kD,IAAQ,CAEhD,UAAWtY,EAAQnE,EAAQyc,KAAU,YAAa,CACjDtY,EAAQnE,EAAQyc,GAAQ,EAC7B,CAEItY,EAAQnE,EAAQyc,GAAM9mD,KAAK,MAC/B,CACA,CAEE,GAAIkB,EAAOqD,MAAQ,EAAG,CACrB,IAAK,IAAIwiD,EAAO,EAAGA,EAAO7lD,EAAOqD,MAAOwiD,IAAQ,CAC/CvY,EAAQnE,GAAOrqC,KAAK,MACxB,CACA,CAEE,GAAIkB,EAAO0wC,UAAW,CACrB1wC,EAAO0wC,UAAU3xC,SAAQ,SAAUumD,GAClCK,EAAiBL,EAAUnc,EAAQ,EACvC,GACA,CACA,CAGC7sC,EAAQyC,SAAQ,SAAUiB,GACzB,GAAIA,EAAO+2C,MAAQ0O,EAAa,CAC/BA,EAAczlD,EAAO+2C,KACxB,CACA,IAECz6C,EAAQyC,SAAQ,SAAUiB,GACzB2lD,EAAiB3lD,EAAQ,EAC3B,IAECstC,EAAQvuC,SAAQ,SAAUm4C,GACzB,IAAI56C,EAAU,GAEd46C,EAAOn4C,SAAQ,SAAUN,GACxB,GAAIA,EAAK,CACRnC,EAAQwC,KAAK,IAAIslD,EAAa3lD,EAAIE,MAAOF,EAAIuB,OAAOmD,eAAgB1E,EAAI4E,MAAO5E,EAAIyC,OAAQzC,EAAIs4C,OACnG,KAAU,CACNz6C,EAAQwC,KAAK,KACjB,CACA,IAEE4mD,EAAW5mD,KAAK,IAAIqlD,EAAU,SAAU7nD,GAC1C,IAEC,OAAOopD,CACR,EAEArB,EAAOntD,UAAUwtD,iBAAmB,SAAUlgD,GAC7C,IAAIshD,EAAUjsD,KAEd,IAAIyC,EAAU,GACd,IAAIopD,EAAa,GAEjB7rD,KAAKkC,MAAMkI,cAAc1H,eAAewC,SAAQ,SAAUiB,GACzD,GAAI8lD,EAAQN,eAAexlD,GAAS,CACnC1D,EAAQwC,KAAKkB,EAAOmD,eACvB,CACA,IAEC,GAAItJ,KAAKsK,OAAOT,cAAgB,OAAS7J,KAAKkC,MAAMgC,UAAU,eAAgB,CAC7E,GAAIlE,KAAKkC,MAAMiC,QAAQ0F,YAAYirC,eAAgB,CAClDnqC,EAAK9D,QAAQ7G,KAAKkC,MAAMiC,QAAQ0F,YAAYqc,OAC/C,CAEE,GAAIlmB,KAAKkC,MAAMiC,QAAQ0F,YAAYkrC,eAAgB,CAClDpqC,EAAK1F,KAAKjF,KAAKkC,MAAMiC,QAAQ0F,YAAYgrC,OAC5C,CACA,CAEClqC,EAAOA,EAAK6D,QAAO,SAAU9J,GAC5B,OAAQA,EAAIiJ,MACX,IAAK,QACJ,OAAOs+C,EAAQ3hD,OAAO4hD,YAAc,MAGrC,IAAK,OACJ,OAAOD,EAAQ3hD,OAAOT,cAAgB,MAGvC,IAAK,MACJ,QAASoiD,EAAQ/pD,MAAMkB,QAAQwH,UAAYqhD,EAAQ3hD,OAAOM,WAAa,OAASlG,EAAIP,QAAQyG,SAASZ,QAIvG,OAAO,IACT,IAECW,EAAKzF,SAAQ,SAAUR,EAAKc,GAC3B,IAAIswC,EAAUpxC,EAAI+b,QAAQwrC,EAAQvB,YAClC,IAAIyB,EAAa,GACjB,IAAIvS,EAAS,EAEb,OAAQl1C,EAAIiJ,MACX,IAAK,QACJisC,EAASl1C,EAAI4qC,MACb6c,EAAWlnD,KAAK,IAAIslD,EAAa7lD,EAAIjH,IAAKiH,EAAI4E,eAAgB7G,EAAQrE,OAAQ,IAC9E,MAED,IAAK,OACL,IAAK,MACJqE,EAAQyC,SAAQ,SAAUN,GACzBunD,EAAWlnD,KAAK,IAAIslD,EAAa3lD,EAAI8I,QAAQwC,cAAc4lC,GAAUlxC,EAAK,EAAG,GAClF,IAEI,GAAIqnD,EAAQ/pD,MAAMkB,QAAQwH,UAAYqhD,EAAQ3hD,OAAOM,WAAa,MAAO,CACxEgvC,EAASl1C,EAAIP,QAAQyG,SAASzM,KACnC,CACI,MAGF0tD,EAAW5mD,KAAK,IAAIqlD,EAAU5lD,EAAIiJ,KAAMw+C,EAAYznD,EAAI4E,eAAgBswC,GAC1E,IAEC,OAAOiS,CACR,EAEArB,EAAOntD,UAAU2tD,sBAAwB,SAAU7nC,GAClD,IAAIipC,EAAUpsD,KAEd,IAAIkC,EAAQc,SAASC,cAAc,SAC/BopD,EAAWrpD,SAASC,cAAc,SAClCqpD,EAAStpD,SAASC,cAAc,SAChCi7C,EAASl+C,KAAKusD,oBACdz8B,EAAe9vB,KAAKkC,MAAMkB,QAAQ,gBAAkBpD,KAAK0qD,WAAW5Z,OAAO,GAAGC,cAAgB/wC,KAAK0qD,WAAW5lC,MAAM,KACpH0nC,EAAQ,GAEZA,EAAM18B,aAAeA,IAAiB,KAAOA,EAAe9vB,KAAKkC,MAAMkB,QAAQ0sB,aAE/E,GAAI9vB,KAAKkC,MAAMkB,QAAQwH,UAAY5K,KAAKsK,OAAOM,WAAa,OAAS5K,KAAKkC,MAAMgC,UAAU,eAAgB,CACzGsoD,EAAMC,iBAAmBzsD,KAAKkC,MAAMiC,QAAQyG,SAASovC,YACvD,CAGCwS,EAAMtvB,YAAcl9B,KAAKkC,MAAMkB,QAAQ,eAAiBpD,KAAK0qD,WAAW5Z,OAAO,GAAGC,cAAgB/wC,KAAK0qD,WAAW5lC,MAAM,KAExH,GAAI0nC,EAAMtvB,cAAgBr9B,MAAMkF,QAAQynD,EAAMtvB,aAAc,CAC3DsvB,EAAMtvB,YAAc,CAACsvB,EAAMtvB,YAC7B,CAECh7B,EAAMgB,UAAUC,IAAI,yBAEpBnD,KAAK0sD,iBAAiB1sD,KAAKkC,MAAMkI,cAAc1G,oBAAqB2oD,EAAU,CAAC,aAAc,cAAe,eAAgB,gBAAiB,mBAAoB,QAAS,cAAe,cAAe,cAExM,GAAIlpC,EAAK/kB,OAAS,IAAM,CACvB2N,QAAQC,KAAK,2EACf,CAECmX,EAAKje,SAAQ,SAAUR,EAAKc,GAC3B,OAAQd,EAAIiJ,MACX,IAAK,SACJ0+C,EAASvlD,YAAYslD,EAAQO,uBAAuBjoD,EAAK8nD,EAAOtO,IAChE,MAED,IAAK,QACJoO,EAAOxlD,YAAYslD,EAAQQ,sBAAsBloD,EAAK8nD,EAAOtO,IAC7D,MAED,IAAK,OACJoO,EAAOxlD,YAAYslD,EAAQS,qBAAqBnoD,EAAK8nD,EAAOtO,IAC5D,MAED,IAAK,MACJ,IAAI9/B,EAAQguC,EAAQU,oBAAoBpoD,EAAK8nD,EAAOtO,GACpDkO,EAAQM,iBAAiBlnD,EAAI,GAAK04C,EAAO6O,QAAU7O,EAAO6O,QAAU7O,EAAO8O,OAAQ5uC,EAAO,CAAC,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,YAAa,qBAC7MkuC,EAAOxlD,YAAYsX,GACnB,MAEJ,IAEC,GAAIiuC,EAASt0C,UAAW,CACvB7V,EAAM4E,YAAYulD,EACpB,CAECnqD,EAAM4E,YAAYwlD,GAElBtsD,KAAK0sD,iBAAiB1sD,KAAKkC,MAAMI,QAASJ,EAAO,CAAC,aAAc,cAAe,eAAgB,kBAC/F,OAAOA,CACR,EAEAsoD,EAAOntD,UAAUkvD,kBAAoB,WACpC,IAAIrO,EAAS,GAGb,GAAIl+C,KAAKyqD,iBAAmBtgC,OAAO0W,iBAAkB,CACpDqd,EAAO8O,OAAShtD,KAAKkC,MAAMI,QAAQw0B,cAAc,kEACjDonB,EAAO6O,QAAU/sD,KAAKkC,MAAMI,QAAQw0B,cAAc,mEAClDonB,EAAO+O,QAAUjtD,KAAKkC,MAAMI,QAAQw0B,cAAc,kCAClDonB,EAAOgP,SAAWltD,KAAKkC,MAAMI,QAAQw0B,cAAc,8DACnDonB,EAAOiP,WAAantD,KAAKkC,MAAMI,QAAQ8qD,uBAAuB,mBAAmB,GAEjF,GAAIlP,EAAOgP,SAAU,CACpBhP,EAAOmP,WAAanP,EAAOgP,SAASE,uBAAuB,kBAC3DlP,EAAOoP,UAAYpP,EAAOmP,WAAW,GACrCnP,EAAOqP,SAAWrP,EAAOmP,WAAWnP,EAAOmP,WAAWjvD,OAAS,EAClE,CACA,CAEC,OAAO8/C,CACR,EAEAsM,EAAOntD,UAAUsvD,uBAAyB,SAAUjoD,EAAK8nD,EAAOtO,GAC/D,IAAIsP,EAAUxtD,KAEd,IAAIoe,EAAQpb,SAASC,cAAc,MAEnCyB,EAAIjC,QAAQyC,SAAQ,SAAUiB,GAC7B,GAAIA,EAAQ,CACX,IAAI86C,EAASj+C,SAASC,cAAc,MACpC,IAAIoxB,EAAaluB,EAAOsL,UAAU/D,QAAQ1H,WAAWkQ,SAAW/P,EAAOsL,UAAU/D,QAAQ1H,WAAWkQ,SAAS3N,MAAM,KAAO,GAE1H04C,EAAO9C,QAAUh4C,EAAOqD,MACxBy3C,EAAO7C,QAAUj4C,EAAOkB,OAExB45C,EAAOlpC,UAAY5R,EAAOpI,MAE1B,GAAIyvD,EAAQ/C,gBAAiB,CAC5BxJ,EAAOj9C,MAAMi/C,UAAY,YAC7B,CAEG5uB,EAAWnvB,SAAQ,SAAUkR,GAC5B6qC,EAAO/9C,UAAUC,IAAIiT,EACzB,IAEGo3C,EAAQd,iBAAiBvmD,EAAOsL,UAAUhO,aAAcw9C,EAAQ,CAAC,aAAc,aAAc,cAAe,eAAgB,gBAAiB,mBAAoB,QAAS,cAAe,cAAe,cACxMuM,EAAQd,iBAAiBvmD,EAAOsL,UAAU/D,QAAQ+B,eAAgBwxC,EAAQ,CAAC,cAAe,eAAgB,gBAAiB,mBAE3H,GAAI96C,EAAOsL,UAAU/D,QAAQhF,QAAS,CACrC8kD,EAAQd,iBAAiBvmD,EAAOsL,UAAUhO,aAAcw9C,EAAQ,CAAC,SACrE,KAAU,CACN,GAAI96C,EAAOsL,UAAU/D,QAAQ1H,WAAWwD,MAAO,CAC9Cy3C,EAAOj9C,MAAMwF,MAAQrD,EAAOsL,UAAU/D,QAAQ1H,WAAWwD,MAAQ,IACtE,CACA,CAEG,GAAIrD,EAAOsL,UAAU/D,QAAQ1D,OAAQ,CACpCwjD,EAAQd,iBAAiBvmD,EAAOsL,UAAU/D,QAAQ1D,OAAO4F,aAAcqxC,EAAQ,CAAC,cACpF,CAEG7iC,EAAMtX,YAAYm6C,EACrB,CACA,IAEC,OAAO7iC,CACR,EAEAosC,EAAOntD,UAAUuvD,sBAAwB,SAAUloD,EAAK8nD,EAAOtO,GAE9D,IAAI9/B,EAAQpb,SAASC,cAAc,MAC/Bg+C,EAASj+C,SAASC,cAAc,MAChC6nB,EAAQpmB,EAAIjC,QAAQ,GAExB2b,EAAMlb,UAAUC,IAAI,6BAEpB,GAAIqpD,EAAMtvB,aAAesvB,EAAMtvB,YAAYx4B,EAAIk1C,QAAS,CACvD9uB,EAAM/sB,MAAQyuD,EAAMtvB,YAAYx4B,EAAIk1C,QAAQ9uB,EAAM/sB,MAAO2G,EAAI+M,UAAU6qC,OAAOC,cAAe73C,EAAI+M,UAAU6qC,OAAO77B,UAAW/b,EAAI+M,UACnI,KAAQ,CACN,GAAI+6C,EAAMtvB,cAAgB,MAAO,CAChCpS,EAAM/sB,MAAQ+sB,EAAM/sB,KACvB,KAAS,CACN+sB,EAAM/sB,MAAQ2G,EAAI+M,UAAU6qC,OAAOmR,UAAU3iC,EAAM/sB,MAAO2G,EAAI+M,UAAU6qC,OAAOC,cAAe73C,EAAI+M,UAAU6qC,OAAO77B,UAAW/b,EAAI+M,UACrI,CACA,CAECwvC,EAAO9C,QAAUrzB,EAAMthB,MACvBy3C,EAAOlpC,UAAY+S,EAAM/sB,MAEzBqgB,EAAMlb,UAAUC,IAAI,+BACpBib,EAAMlb,UAAUC,IAAI,yBAA2BuB,EAAIk1C,QAEnD,GAAI9uB,EAAMrZ,UAAU3D,YAAa,CAChCsQ,EAAMlb,UAAUC,IAAI,0BACtB,CAECnD,KAAK0sD,iBAAiBxO,EAAOiP,WAAY/uC,EAAO,CAAC,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,YAAa,qBACnKpe,KAAK0sD,iBAAiBxO,EAAOiP,WAAYlM,EAAQ,CAAC,cAAe,eAAgB,gBAAiB,mBAElG7iC,EAAMtX,YAAYm6C,GAElB,OAAO7iC,CACR,EAEAosC,EAAOntD,UAAUwvD,qBAAuB,SAAUnoD,EAAK8nD,EAAOtO,GAC7D,IAAI9/B,EAAQpe,KAAK8sD,oBAAoBpoD,EAAK8nD,EAAOtO,GAEjD9/B,EAAMlb,UAAUC,IAAI,+BACpBnD,KAAK0sD,iBAAiBxO,EAAO+O,QAAS7uC,EAAO,CAAC,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,YAAa,qBAEhK,OAAOA,CACR,EAEAosC,EAAOntD,UAAUyvD,oBAAsB,SAAUpoD,EAAK8nD,EAAOtO,GAC5D,IAAIwP,EAAU1tD,KAEd,IAAIoe,EAAQpb,SAASC,cAAc,MAEnCmb,EAAMlb,UAAUC,IAAI,6BAEpBuB,EAAIjC,QAAQyC,SAAQ,SAAUN,GAE7B,GAAIA,EAAK,CACR,IAAIq8C,EAASj+C,SAASC,cAAc,MAChCkD,EAASvB,EAAI6M,UAAU/D,QACvB3P,EAAQ6G,EAAI7G,MAEhB,IAAI4vD,EAAc,CACjBxpD,QAAS,GACTyT,SAAU,SAASA,IAClB,OAAO7Z,CACZ,EACImP,SAAU,SAASA,IAClB,OAAO/G,EAAOH,WAAWnB,KAC9B,EACIpB,WAAY,SAASA,IACpB,OAAOw9C,CACZ,EACIruB,UAAW,SAASA,IACnB,OAAOzsB,EAAOmD,cACnB,EACImX,QAAS,SAASA,IACjB,OAAO/b,EAAI+M,UAAUgP,SAC1B,EACIkS,OAAQ,SAASA,IAChB,OAAOjuB,EAAI+M,SAChB,EACInI,aAAc,SAASA,IACtB,OAAOqkD,CACZ,EACIxnD,OAAQA,GAGT,IAAIkuB,EAAaluB,EAAOH,WAAWkQ,SAAW/P,EAAOH,WAAWkQ,SAAS3N,MAAM,KAAO,GAEtF8rB,EAAWnvB,SAAQ,SAAUkR,GAC5B6qC,EAAO/9C,UAAUC,IAAIiT,EACzB,IAEG,GAAIs3C,EAAQxrD,MAAMgC,UAAU,WAAawpD,EAAQpjD,OAAOsjD,cAAgB,MAAO,CAC9E7vD,EAAQ2vD,EAAQxrD,MAAMiC,QAAQyR,OAAOi4C,kBAAkBF,EAAaD,EAAQhD,WAChF,KAAU,CACN,cAAe3sD,IAAU,YAAc,YAAcyB,EAAQzB,IAC5D,IAAK,SACJA,EAAQ4yB,KAAKwjB,UAAUp2C,GACvB,MAED,IAAK,YACL,IAAK,OACJA,EAAQ,GACR,MAED,QACCA,EAAQA,EAEd,CAEG,GAAIA,aAAiB+Z,KAAM,CAC1BmpC,EAAOn6C,YAAY/I,EACvB,KAAU,CACNkjD,EAAOlpC,UAAYha,CACvB,CAEG,GAAImgD,EAAOoP,UAAW,CACrBI,EAAQhB,iBAAiBxO,EAAOoP,UAAWrM,EAAQ,CAAC,cAAe,eAAgB,gBAAiB,iBAAkB,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,cAE3N,GAAI96C,EAAOH,WAAW8M,MAAO,CAC5BmuC,EAAOj9C,MAAM2S,UAAYxQ,EAAOH,WAAW8M,KAChD,CACA,CAEG,GAAI46C,EAAQxrD,MAAMkB,QAAQwH,UAAY8iD,EAAQpjD,OAAOM,WAAa,MAAO,CACxE,GAAI4hD,EAAMC,kBAAoBD,EAAMC,kBAAoBtmD,EAAOtB,QAAU2nD,EAAMC,kBAAoBjnD,GAAK,EAAG,CAC1G,GAAId,EAAI+M,UAAUib,KAAKvoB,QAAQyG,SAAS0vC,UAAW,CAClD2G,EAAOp+C,aAAa6B,EAAI+M,UAAUib,KAAKvoB,QAAQyG,SAAS0vC,UAAUE,UAAU,MAAOyG,EAAOn+C,WAChG,CACK,GAAI4B,EAAI+M,UAAUib,KAAKvoB,QAAQyG,SAASmvC,SAAU,CACjDkH,EAAOp+C,aAAa6B,EAAI+M,UAAUib,KAAKvoB,QAAQyG,SAASmvC,SAASS,UAAU,MAAOyG,EAAOn+C,WAC/F,CACA,CACA,CAEGsb,EAAMtX,YAAYm6C,GAElB,GAAI0M,EAAYxpD,QAAQyR,QAAU+3C,EAAYxpD,QAAQyR,OAAOk4C,iBAAkB,CAC9EH,EAAYxpD,QAAQyR,OAAOk4C,kBAC/B,CAEG,GAAItB,EAAM18B,cAAgB49B,EAAQpjD,OAAOsjD,cAAgB,MAAO,CAC/DpB,EAAM18B,aAAaprB,EAAI+M,UAC3B,CACA,CACA,IAEC,OAAO2M,CACR,EAEAosC,EAAOntD,UAAU+6C,mBAAqB,SAAUj1B,GAC/C,IAAIkE,EAASrkB,SAASC,cAAc,OAEpCokB,EAAOvgB,YAAY9G,KAAKgrD,sBAAsB7nC,IAE9C,OAAOkE,EAAOtP,SACf,EAEAyyC,EAAOntD,UAAUgnC,QAAU,SAAU37B,EAAS1E,EAAOsG,EAAQogD,GAC5D,IAAIvnC,EAAOnjB,KAAKm4C,mBAAmB7tC,GAAUtK,KAAKkC,MAAMkB,QAAQm6B,iBAAkBv5B,EAAO0E,EAASgiD,GAAc,cAEhH,OAAO1qD,KAAKo4C,mBAAmBj1B,EAChC,EAEAqnC,EAAOntD,UAAUqvD,iBAAmB,SAAUhjD,EAAM9H,EAAIzC,GACvD,GAAIa,KAAKyqD,iBAAmB/gD,GAAQ9H,EAAI,CAEvC,IAAImsD,EAAS,CACZ,mBAAoB,kBACpBC,MAAS,YACTxkD,MAAS,QACT,cAAe,aACf,cAAe,aACf,YAAa,WACb,aAAc,YACd,aAAc,YACd,cAAe,aACf,eAAgB,cAChB,gBAAiB,eACjB,cAAe,aACf,eAAgB,cAChB,gBAAiB,eACjB,iBAAkB,iBAGnB,GAAI2gB,OAAO0W,iBAAkB,CAC5B,IAAIotB,EAAY9jC,OAAO0W,iBAAiBn3B,GAExCvK,EAAM+F,SAAQ,SAAU5F,GACvBsC,EAAGoC,MAAM+pD,EAAOzuD,IAAS2uD,EAAUvT,iBAAiBp7C,EACxD,GACA,CACA,CACA,EAEA8N,EAAU/P,UAAUytC,eAAe,SAAU0f,GAE7C,IAAI0D,EAAS,SAASA,EAAOhsD,GAE5BlC,KAAKkC,MAAQA,EAEblC,KAAKonD,WAAa,GAClBpnD,KAAK0uC,cAAgB,GACrB1uC,KAAKmuD,oBAAsB,GAE3BnuD,KAAKouD,4BAA8B,GACnCpuD,KAAKouD,4BAA8B,KAEnCpuD,KAAK41B,QAAU,KAChB,EAGAs4B,EAAO7wD,UAAUwW,iBAAmB,SAAU1N,EAAQpI,GAClD,IAACsH,EAAOrF,KACP6E,EAAQsB,EAAO+G,WAInB,SAAS60C,EAAQhkD,GAChB,IAAIswD,EAAaloD,EAAOhC,QAAQqK,OAAO8/C,SAAW,SAAWnoD,EAAOhC,QAAQqK,OAAO+/C,UAAY,QAAUpoD,EAAOhC,QAAQqK,OAAO8/C,SAAW,WAAa,UAAY,QAC/J3gD,EAAO,GACP6gD,EAAoB,GACpBC,EAEJ,UAAWtoD,EAAOhC,QAAQqK,OAAOkgD,cAAgB,aAAevoD,EAAOhC,QAAQqK,OAAOkgD,cAAgB3wD,EAAO,CAE5GoI,EAAOhC,QAAQqK,OAAOkgD,YAAc3wD,EAEpC,IAAKoI,EAAOhC,QAAQqK,OAAOmgD,UAAU5wD,GAAQ,CAC5CoI,EAAOhC,QAAQqK,OAAOzQ,MAAQA,EAE9B,OAAQyB,EAAQ2G,EAAOH,WAAW4oD,mBACjC,IAAK,SACJ,GAAIvpD,EAAKye,QAAQ3d,EAAOH,WAAW4oD,kBAAmB,CACrDjhD,EAAOxH,EAAOH,WAAW4oD,iBACzBH,EAAa,SAASA,EAAWnqD,GAChC,IAAIiT,EAASpR,EAAOH,WAAW6oD,wBAA0B,GACzD,IAAIC,EAAW3oD,EAAO+J,cAAc5L,GAEpCiT,SAAgBA,IAAW,WAAaA,EAAOxZ,EAAO+wD,EAAUxqD,GAAQiT,EAExE,OAAOlS,EAAKye,QAAQ3d,EAAOH,WAAW4oD,kBAAkB7wD,EAAO+wD,EAAUxqD,EAAMiT,EACvF,CACA,KAAa,CACNxL,QAAQC,KAAK,6DAA8D7F,EAAOH,WAAW4oD,iBACpG,CACM,MAED,IAAK,WACJH,EAAa,SAASA,EAAWnqD,GAChC,IAAIiT,EAASpR,EAAOH,WAAW6oD,wBAA0B,GACzD,IAAIC,EAAW3oD,EAAO+J,cAAc5L,GAEpCiT,SAAgBA,IAAW,WAAaA,EAAOxZ,EAAO+wD,EAAUxqD,GAAQiT,EAExE,OAAOpR,EAAOH,WAAW4oD,iBAAiB7wD,EAAO+wD,EAAUxqD,EAAMiT,EACxE,EAEM5J,EAAO8gD,EACP,MAGF,IAAKA,EAAY,CAChB,OAAQJ,GACP,IAAK,UACJI,EAAa,SAASA,EAAWnqD,GAChC,IAAIyqD,EAAS5oD,EAAO+J,cAAc5L,GAElC,UAAWyqD,IAAW,aAAeA,IAAW,KAAM,CACrD,OAAOtuD,OAAOsuD,GAAQ/f,cAAcluC,QAAQL,OAAO1C,GAAOixC,gBAAkB,CACrF,KAAe,CACN,OAAO,KAChB,CACA,EACOrhC,EAAO,OACP,MAED,QACC8gD,EAAa,SAASA,EAAWnqD,GAChC,OAAO6B,EAAO+J,cAAc5L,IAASvG,CAC7C,EACO4P,EAAO,IAEd,CAEItI,EAAKqpC,cAAc7pC,GAAS,CAAE9G,MAAOA,EAAOixD,KAAMP,EAAY9gD,KAAMA,EAAM4J,OAAkB,GAChG,KAAU,QACClS,EAAKqpC,cAAc7pC,EAC9B,CAEG2pD,EAAoB79B,KAAKwjB,UAAU9uC,EAAKqpC,eAExC,GAAIrpC,EAAK+oD,8BAAgCI,EAAmB,CAC3DnpD,EAAK+oD,4BAA8BI,EAEnCnpD,EAAKuwB,QAAU,KACfvwB,EAAKnD,MAAMM,WAAW0hB,eAC1B,CACA,CAEE,OAAO,IACT,CAEC/d,EAAOhC,QAAQqK,OAAS,CACvBuzC,QAASA,EACTwM,SAAU,MACVD,QAAS,MACTK,UAAW,OAGZ3uD,KAAKivD,4BAA4B9oD,EAClC,EAEA+nD,EAAO7wD,UAAU4xD,4BAA8B,SAAU9oD,EAAQusB,EAAc5sB,GAC9E,IAAIopD,EAAUlvD,KAEd,IAAIqF,EAAOrF,KACP+hD,EAAU57C,EAAOhC,QAAQqK,OAAOuzC,QAChCl9C,EAAQsB,EAAO+G,WACfiiD,EACAt5C,EACAu5C,EACAzB,EACA0B,EACAC,EACA/3C,EAGJ,SAASypC,IAAS,CAElB,GAAI76C,EAAOhC,QAAQqK,OAAO+gD,eAAiBppD,EAAOhC,QAAQqK,OAAO+gD,cAAc5oD,WAAY,CAC1FR,EAAOsJ,eAAenK,YAAYa,EAAOhC,QAAQqK,OAAO+gD,cAAc5oD,WACxE,CAEC,GAAI9B,EAAO,CAGVsB,EAAOhC,QAAQqK,OAAOmgD,UAAYxoD,EAAOH,WAAWwpD,wBAA0B,SAAUzxD,GACvF,OAAQA,GAASA,IAAU,KAAOA,IAAU,CAC/C,EAEEoxD,EAAgBnsD,SAASC,cAAc,OACvCksD,EAAcjsD,UAAUC,IAAI,2BAG5B,OAAQ3D,EAAQ2G,EAAOH,WAAW8N,eACjC,IAAK,SACJ,GAAIzO,EAAKnD,MAAMiC,QAAQ2R,KAAKgrC,QAAQ36C,EAAOH,WAAW8N,cAAe,CACpE+B,EAASxQ,EAAKnD,MAAMiC,QAAQ2R,KAAKgrC,QAAQ36C,EAAOH,WAAW8N,cAE3D,IAAK3N,EAAOH,WAAW8N,eAAiB,QAAU3N,EAAOH,WAAW8N,eAAiB,eAAiB3N,EAAOH,WAAWwpD,uBAAwB,CAC/IrpD,EAAOhC,QAAQqK,OAAOmgD,UAAY,SAAU5wD,GAC3C,OAAOA,IAAU,MAAQA,IAAU,KAC1C,CACA,CACA,KAAW,CACNgO,QAAQC,KAAK,oEAAqE7F,EAAOH,WAAW6P,OACzG,CACI,MAED,IAAK,WACJA,EAAS1P,EAAOH,WAAW8N,aAC3B,MAED,IAAK,UACJ,GAAI3N,EAAOhC,QAAQ2R,MAAQ3P,EAAOhC,QAAQ2R,KAAKD,OAAQ,CACtDA,EAAS1P,EAAOhC,QAAQ2R,KAAKD,MAClC,KAAW,CACN,GAAI1P,EAAOH,WAAWqR,WAAahS,EAAKnD,MAAMiC,QAAQ2R,KAAKgrC,QAAQ36C,EAAOH,WAAWqR,WAAY,CAChGxB,EAASxQ,EAAKnD,MAAMiC,QAAQ2R,KAAKgrC,QAAQ36C,EAAOH,WAAWqR,WAE3D,IAAKlR,EAAOH,WAAWqR,YAAc,QAAUlR,EAAOH,WAAWqR,YAAc,eAAiBlR,EAAOH,WAAWwpD,uBAAwB,CACzIrpD,EAAOhC,QAAQqK,OAAOmgD,UAAY,SAAU5wD,GAC3C,OAAOA,IAAU,MAAQA,IAAU,KAC3C,CACA,CACA,KAAY,CACN8X,EAASxQ,EAAKnD,MAAMiC,QAAQ2R,KAAKgrC,QAAQ,QAC/C,CACA,CACI,MAGF,GAAIjrC,EAAQ,CAEX83C,EAAc,CACb/1C,SAAU,SAASA,IAClB,cAAc8a,IAAiB,YAAcA,EAAe,EACjE,EACIxlB,SAAU,SAASA,IAClB,OAAO/G,EAAOH,WAAWnB,KAC9B,EACIpB,WAAY,SAASA,IACpB,OAAO0rD,CACZ,EACIv8B,UAAW,SAASA,IACnB,OAAOzsB,EAAOmD,cACnB,EACIqpB,OAAQ,SAASA,IAChB,MAAO,CACN/K,gBAAiB,SAASA,IAAkB,EAElD,GAGGrQ,EAASpR,EAAOH,WAAWypD,oBAAsB,GAEjDl4C,SAAgBA,IAAW,WAAaA,EAAO7Z,KAAK2H,EAAKnD,OAASqV,EAElE63C,EAAgBv5C,EAAOnY,KAAKsC,KAAKkC,MAAMiC,QAAQ2R,KAAM63C,GAAa,WAAY,GAAI5L,EAASf,EAAQzpC,GAEnG,IAAK63C,EAAe,CACnBrjD,QAAQC,KAAK,uCAAyCnH,EAAQ,6CAC9D,MACJ,CAEG,KAAMuqD,aAAyBt3C,MAAO,CACrC/L,QAAQC,KAAK,uCAAyCnH,EAAQ,0EAA2EuqD,GACzI,MACJ,CAGG,GAAIvqD,EAAO,CACVQ,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,yBAA2BlN,EAAOH,WAAWnB,OAAO,SAAU9G,GAC9FqxD,EAAch9C,aAAa,qBAAsBrU,IAAU,aAAeA,EAAQA,EAAQsH,EAAKnD,MAAMiC,QAAQiP,SAAS+7B,QAAQ,yBACnI,GACA,KAAU,CACN9pC,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,yBAAyB,SAAUtV,GACnEqxD,EAAch9C,aAAa,qBAAsB/M,EAAKc,OAAOH,WAAW+N,0BAA4B,aAAe1O,EAAKc,OAAOH,WAAW+N,wBAA0B1O,EAAKc,OAAOH,WAAW+N,wBAA0BhW,EAC1N,GACA,CAGGqxD,EAAch7C,iBAAiB,SAAS,SAAUC,GACjDA,EAAE0C,kBACFq4C,EAAcp4C,OAClB,IAEGo4C,EAAch7C,iBAAiB,SAAS,SAAUC,GACjD,IAAIzQ,EAAOsrD,EAAQhtD,MAAMkI,cAAc9H,QAAQM,WAE/C,GAAIgB,IAASsrD,EAAQhtD,MAAMM,WAAWF,QAAQM,WAAY,CACzDssD,EAAQhtD,MAAMM,WAAWmB,iBAAiBC,GAC1CsrD,EAAQhtD,MAAMkI,cAAczG,iBAAiBC,EAClD,CACA,IAGGyrD,EAAc,MAEdC,EAAgB,SAASA,EAAcj7C,GACtC,GAAIg7C,EAAa,CAChBt6C,aAAas6C,EAClB,CAEIA,EAAcr6C,YAAW,WACxB+sC,EAAQqN,EAAcrxD,MAC3B,GAAOsH,EAAKnD,MAAMkB,QAAQ63B,4BAC1B,EAEG90B,EAAOhC,QAAQqK,OAAO+gD,cAAgBH,EACtCjpD,EAAOhC,QAAQqK,OAAO+/C,SAAWa,EAAcM,aAAa,QAAUN,EAAcjM,aAAa,QAAQnU,cAAgB,GACzH7oC,EAAOhC,QAAQqK,OAAO8/C,QAAUc,EAAc/tB,QAAQ2N,cAEtD,GAAI7oC,EAAOH,WAAW2pD,yBAA2B,MAAO,CAEvD,KAAMxpD,EAAOH,WAAW8N,eAAiB,gBAAkB3N,EAAOH,WAAW8N,eAAiB,cAAgB3N,EAAOH,WAAW6P,SAAW,gBAAkB1P,EAAOH,WAAW6P,SAAW,cAAgB1P,EAAOH,WAAW8N,eAAiB,MAAO,CACnPs7C,EAAch7C,iBAAiB,QAASk7C,GACxCF,EAAch7C,iBAAiB,SAAUk7C,GAGzC,GAAInpD,EAAOhC,QAAQqK,OAAO+/C,UAAY,SAAU,CAC/Ca,EAAch7C,iBAAiB,UAAU,SAAUC,GAClD0tC,EAAQqN,EAAcrxD,MAC7B,GACA,CAGK,GAAIoI,EAAOhC,QAAQqK,OAAO+/C,UAAY,QAAUvuD,KAAKkC,MAAMknB,UAAY,KAAM,CAC5EgmC,EAAch9C,aAAa,OAAQ,SAEzC,CACA,CAGI,GAAIjM,EAAOhC,QAAQqK,OAAO8/C,SAAW,SAAWnoD,EAAOhC,QAAQqK,OAAO8/C,SAAW,UAAYnoD,EAAOhC,QAAQqK,OAAO8/C,SAAW,WAAY,CACzIc,EAAch7C,iBAAiB,aAAa,SAAUC,GACrDA,EAAE0C,iBACR,GACA,CACA,CAEGo4C,EAAcroD,YAAYsoD,GAE1BjpD,EAAOsJ,eAAe3I,YAAYqoD,GAElC,IAAKrpD,EAAc,CAClBT,EAAK8oD,oBAAoBlpD,KAAKkB,EAClC,CACA,CACA,KAAQ,CACN4F,QAAQC,KAAK,oEAAqE7F,EAAOH,WAAWlB,MACtG,CACA,EAGAopD,EAAO7wD,UAAUmd,yBAA2B,WAC3Cxa,KAAKmuD,oBAAoBjpD,SAAQ,SAAUiB,GAC1C,GAAIA,EAAOhC,QAAQqK,QAAUrI,EAAOhC,QAAQqK,OAAO+gD,cAAe,CACjEppD,EAAOhC,QAAQqK,OAAO+gD,cAAcvrD,MAAMkV,QAAU,MACvD,CACA,GACA,EAGAg1C,EAAO7wD,UAAUqd,yBAA2B,WAC3C1a,KAAKmuD,oBAAoBjpD,SAAQ,SAAUiB,GAC1C,GAAIA,EAAOhC,QAAQqK,QAAUrI,EAAOhC,QAAQqK,OAAO+gD,cAAe,CACjEppD,EAAOhC,QAAQqK,OAAO+gD,cAAcvrD,MAAMkV,QAAU,EACvD,CACA,GACA,EAGAg1C,EAAO7wD,UAAUoR,qBAAuB,SAAUtI,GACjD,GAAIA,EAAOhC,QAAQqK,QAAUrI,EAAOhC,QAAQqK,OAAO+gD,cAAe,CACjEppD,EAAOhC,QAAQqK,OAAO+gD,cAAcv4C,OACtC,KAAQ,CACNjL,QAAQC,KAAK,8DAA+D7F,EAAO+G,WACrF,CACA,EAGAghD,EAAO7wD,UAAUsR,qBAAuB,SAAUxI,GACjD,GAAIA,EAAOhC,QAAQqK,QAAUrI,EAAOhC,QAAQqK,OAAO+gD,cAAe,CACjE,OAAOppD,EAAOhC,QAAQqK,OAAO+gD,cAAcxxD,KAC7C,KAAQ,CACNgO,QAAQC,KAAK,wDAAyD7F,EAAO+G,WAC/E,CACA,EAGAghD,EAAO7wD,UAAUuR,qBAAuB,SAAUzI,EAAQpI,GACzD,GAAIoI,EAAQ,CACX,GAAIA,EAAOhC,QAAQqK,QAAUrI,EAAOhC,QAAQqK,OAAO+gD,cAAe,CACjEvvD,KAAKivD,4BAA4B9oD,EAAQpI,EAAO,MAChDoI,EAAOhC,QAAQqK,OAAOuzC,QAAQhkD,EACjC,KAAS,CACNgO,QAAQC,KAAK,wDAAyD7F,EAAO+G,WAChF,CACA,CACA,EAEAghD,EAAO7wD,UAAUqR,mBAAqB,SAAUvI,GAC/C,GAAIA,EAAQ,CACX,GAAIA,EAAOhC,QAAQqK,QAAUrI,EAAOhC,QAAQqK,OAAO+gD,cAAe,CACjEvvD,KAAKivD,4BAA4B9oD,EAAQA,EAAOhC,QAAQqK,OAAOzQ,MAAO,KACzE,KAAS,CACNgO,QAAQC,KAAK,wDAAyD7F,EAAO+G,WAChF,CACA,CACA,EAGAghD,EAAO7wD,UAAUuyD,WAAa,WAC7B,IAAIh6B,EAAU51B,KAAK41B,QACnB51B,KAAK41B,QAAU,MACf,OAAOA,CACR,EAGAs4B,EAAO7wD,UAAU8kC,UAAY,SAAUt9B,EAAO8I,EAAM5P,EAAOwZ,GAC1D,IAAIlS,EAAOrF,KAEXqF,EAAK+hD,WAAa,GAElB,IAAKvnD,MAAMkF,QAAQF,GAAQ,CAC1BA,EAAQ,CAAC,CAAEA,MAAOA,EAAO8I,KAAMA,EAAM5P,MAAOA,EAAOwZ,OAAQA,GAC7D,CAEClS,EAAKkiC,UAAU1iC,EAChB,EAGAqpD,EAAO7wD,UAAUkqC,UAAY,SAAU1iC,EAAO8I,EAAM5P,EAAOwZ,GAC1D,IAAIlS,EAAOrF,KAEX,IAAKH,MAAMkF,QAAQF,GAAQ,CAC1BA,EAAQ,CAAC,CAAEA,MAAOA,EAAO8I,KAAMA,EAAM5P,MAAOA,EAAOwZ,OAAQA,GAC7D,CAEC1S,EAAMK,SAAQ,SAAUsJ,GAEvBA,EAASnJ,EAAKwqD,WAAWrhD,GAEzB,GAAIA,EAAQ,CACXnJ,EAAK+hD,WAAWniD,KAAKuJ,GAErBnJ,EAAKuwB,QAAU,IAClB,CACA,IAEC,GAAI51B,KAAKkC,MAAMkB,QAAQiH,aAAerK,KAAKkC,MAAMgC,UAAU,cAAe,OAASlE,KAAKkC,MAAMiC,QAAQkG,YAAYC,OAAOkE,OAAQ,CAChIxO,KAAKkC,MAAMiC,QAAQkG,YAAYE,KAAK,SACtC,CACA,EAEA2jD,EAAO7wD,UAAUwyD,WAAa,SAAUrhD,GACvC,IAAInJ,EAAOrF,KACPmG,EAEJ,GAAItG,MAAMkF,QAAQyJ,GAAS,CAC1B,OAAOxO,KAAK8vD,eAAethD,EAC7B,CAEC,IAAIigD,EAAa,MAEjB,UAAWjgD,EAAO3J,OAAS,WAAY,CACtC4pD,EAAa,SAASA,EAAWnqD,GAChC,OAAOkK,EAAO3J,MAAMP,EAAMkK,EAAOb,MAAQ,GAC5C,CACA,KAAQ,CAEN,GAAItI,EAAKye,QAAQtV,EAAOb,MAAO,CAE9BxH,EAASd,EAAKnD,MAAMkI,cAAcpC,iBAAiBwG,EAAO3J,OAE1D,GAAIsB,EAAQ,CACXsoD,EAAa,SAASA,EAAWnqD,GAChC,OAAOe,EAAKye,QAAQtV,EAAOb,MAAMa,EAAOzQ,MAAOoI,EAAO+J,cAAc5L,GAAOA,EAAMkK,EAAO+I,QAAU,GACvG,CACA,KAAU,CACNk3C,EAAa,SAASA,EAAWnqD,GAChC,OAAOe,EAAKye,QAAQtV,EAAOb,MAAMa,EAAOzQ,MAAOuG,EAAKkK,EAAO3J,OAAQP,EAAMkK,EAAO+I,QAAU,GAC/F,CACA,CACA,KAAS,CACNxL,QAAQC,KAAK,uDAAwDwC,EAAOb,KAC/E,CACA,CAECa,EAAOwgD,KAAOP,EAEd,OAAOjgD,EAAOwgD,KAAOxgD,EAAS,KAC/B,EAEA0/C,EAAO7wD,UAAUyyD,eAAiB,SAAUhsC,GAC3C,IAAIze,EAAOrF,KACPiJ,EAAS,GAEb6a,EAAQ5e,SAAQ,SAAUsJ,GACzBA,EAASnJ,EAAKwqD,WAAWrhD,GAEzB,GAAIA,EAAQ,CACXvF,EAAOhE,KAAKuJ,EACf,CACA,IAEC,OAAOvF,EAAO7K,OAAS6K,EAAS,KACjC,EAGAilD,EAAO7wD,UAAU0mB,WAAa,SAAUyjB,EAAKhqB,GAC5C,IAAIvU,EAAS,GAEb,GAAIu+B,EAAK,CACRv+B,EAASjJ,KAAKynC,kBAChB,CAEC,GAAIjqB,EAAM,CACTvU,EAAO/D,SAAQ,SAAUic,GACxB,UAAWA,EAAKxT,MAAQ,WAAY,CACnCwT,EAAKxT,KAAO,UAChB,CACA,GACA,CAEC1E,EAASA,EAAO4B,OAAO7K,KAAK+vD,eAAe/vD,KAAKonD,WAAY5pC,IAE5D,OAAOvU,CACR,EAGAilD,EAAO7wD,UAAU0yD,eAAiB,SAAU3I,EAAY5pC,GACvD,IAAIwyC,EAAUhwD,KAEd,IAAIiJ,EAAS,GAEbm+C,EAAWliD,SAAQ,SAAUsJ,GAC5B,IAAI2S,EAEJ,GAAIthB,MAAMkF,QAAQyJ,GAAS,CAC1BvF,EAAOhE,KAAK+qD,EAAQD,eAAevhD,EAAQgP,GAC9C,KAAS,CACN2D,EAAO,CAAEtc,MAAO2J,EAAO3J,MAAO8I,KAAMa,EAAOb,KAAM5P,MAAOyQ,EAAOzQ,OAE/D,GAAIyf,EAAM,CACT,UAAW2D,EAAKxT,MAAQ,WAAY,CACnCwT,EAAKxT,KAAO,UACjB,CACA,CAEG1E,EAAOhE,KAAKkc,EACf,CACA,IAEC,OAAOlY,CACR,EAGAilD,EAAO7wD,UAAUoqC,iBAAmB,WAChC,IACCx+B,EAAS,GAEb,IAAK,IAAIxL,KAAOuC,KAAK0uC,cAAe,CACnCzlC,EAAOhE,KAAK,CAAEJ,MAAOpH,EAAKkQ,KAAM3N,KAAK0uC,cAAcjxC,GAAKkQ,KAAM5P,MAAOiC,KAAK0uC,cAAcjxC,GAAKM,OAC/F,CAEC,OAAOkL,CACR,EAGAilD,EAAO7wD,UAAUqqC,aAAe,SAAU7iC,EAAO8I,EAAM5P,GACtD,IAAIsH,EAAOrF,KAEX,IAAKH,MAAMkF,QAAQF,GAAQ,CAC1BA,EAAQ,CAAC,CAAEA,MAAOA,EAAO8I,KAAMA,EAAM5P,MAAOA,GAC9C,CAEC8G,EAAMK,SAAQ,SAAUsJ,GACvB,IAAIrQ,GAAS,EAEb,GAAIqB,EAAQgP,EAAO3J,QAAU,SAAU,CACtC1G,EAAQkH,EAAK+hD,WAAWtnD,WAAU,SAAUwC,GAC3C,OAAOkM,IAAWlM,CACtB,GACA,KAAS,CACNnE,EAAQkH,EAAK+hD,WAAWtnD,WAAU,SAAUwC,GAC3C,OAAOkM,EAAO3J,QAAUvC,EAAQuC,OAAS2J,EAAOb,OAASrL,EAAQqL,MAAQa,EAAOzQ,QAAUuE,EAAQvE,KACtG,GACA,CAEE,GAAII,GAAS,EAAG,CACfkH,EAAK+hD,WAAW1gD,OAAOvI,EAAO,GAC9BkH,EAAKuwB,QAAU,IAClB,KAAS,CACN7pB,QAAQC,KAAK,2DAA4DwC,EAAOb,KACnF,CACA,IAEC,GAAI3N,KAAKkC,MAAMkB,QAAQiH,aAAerK,KAAKkC,MAAMgC,UAAU,cAAe,OAASlE,KAAKkC,MAAMiC,QAAQkG,YAAYC,OAAOkE,OAAQ,CAChIxO,KAAKkC,MAAMiC,QAAQkG,YAAYE,KAAK,SACtC,CACA,EAGA2jD,EAAO7wD,UAAUsqC,YAAc,SAAUH,GACxCxnC,KAAKonD,WAAa,GAElB,GAAI5f,EAAK,CACRxnC,KAAK4nC,mBACP,CAEC5nC,KAAK41B,QAAU,KAEf,GAAI51B,KAAKkC,MAAMkB,QAAQiH,aAAerK,KAAKkC,MAAMgC,UAAU,cAAe,OAASlE,KAAKkC,MAAMiC,QAAQkG,YAAYC,OAAOkE,OAAQ,CAChIxO,KAAKkC,MAAMiC,QAAQkG,YAAYE,KAAK,SACtC,CACA,EAGA2jD,EAAO7wD,UAAUuqC,kBAAoB,WACpC,IAAIviC,EAAOrF,KAEXA,KAAK0uC,cAAgB,GACrBrpC,EAAK+oD,4BAA8B,KAEnCpuD,KAAKmuD,oBAAoBjpD,SAAQ,SAAUiB,GAC1C,UAAWA,EAAOhC,QAAQqK,OAAOzQ,QAAU,YAAa,QAChDoI,EAAOhC,QAAQqK,OAAOzQ,KAChC,CACEoI,EAAOhC,QAAQqK,OAAOkgD,YAAchwD,UACpC2G,EAAKqJ,mBAAmBvI,EAC1B,IAECnG,KAAK41B,QAAU,IAChB,EAGAs4B,EAAO7wD,UAAUsD,OAAS,SAAUsvD,EAAYprD,EAAO8I,EAAM5P,GAC5D,IAAIsH,EAAOrF,KACP+J,EAAa,GACbq9C,EAAa,GAEjB,IAAKvnD,MAAMkF,QAAQF,GAAQ,CAC1BA,EAAQ,CAAC,CAAEA,MAAOA,EAAO8I,KAAMA,EAAM5P,MAAOA,GAC9C,CAEC8G,EAAMK,SAAQ,SAAUsJ,GACvBA,EAASnJ,EAAKwqD,WAAWrhD,GAEzB,GAAIA,EAAQ,CACX44C,EAAWniD,KAAKuJ,EACnB,CACA,IAECxO,KAAKkC,MAAMM,WAAWmI,KAAKzF,SAAQ,SAAUR,GAC5C,IAAIM,EAAQ,KAEZoiD,EAAWliD,SAAQ,SAAUsJ,GAC5B,IAAKnJ,EAAK6qD,cAAc1hD,EAAQ9J,EAAI+b,WAAY,CAC/Czb,EAAQ,KACZ,CACA,IAEE,GAAIA,EAAO,CACV+E,EAAW9E,KAAKgrD,IAAe,OAASvrD,EAAI+b,QAAQ,QAAU/b,EAAI4E,eACrE,CACA,IAEC,OAAOS,CACR,EAGAmkD,EAAO7wD,UAAUmR,OAAS,SAAU2hD,EAASrsC,GAC5C,IAAIze,EAAOrF,KACP+J,EAAa,GACbqmD,EAAsB,GAE1B,GAAI/qD,EAAKnD,MAAMkB,QAAQi8B,cAAe,CACrCh6B,EAAKnD,MAAMkB,QAAQi8B,cAAc3hC,KAAK2H,EAAKnD,MAAOmD,EAAK0e,aACzD,CAEC,IAAK1e,EAAKnD,MAAMkB,QAAQygB,gBAAkBxe,EAAK+hD,WAAWhpD,QAAUhB,OAAOiL,KAAKhD,EAAKqpC,eAAetwC,QAAS,CAE5G+xD,EAAQjrD,SAAQ,SAAUR,GACzB,GAAIW,EAAKgrD,UAAU3rD,GAAM,CACxBqF,EAAW9E,KAAKP,EACpB,CACA,GACA,KAAQ,CACNqF,EAAaomD,EAAQrrC,MAAM,EAC7B,CAEC,GAAIzf,EAAKnD,MAAMkB,QAAQk8B,aAAc,CAEpCv1B,EAAW7E,SAAQ,SAAUR,GAC5B0rD,EAAoBnrD,KAAKP,EAAI4E,eAChC,IAEEjE,EAAKnD,MAAMkB,QAAQk8B,aAAa5hC,KAAK2H,EAAKnD,MAAOmD,EAAK0e,aAAcqsC,EACtE,CAEC,OAAOrmD,CACR,EAGAmkD,EAAO7wD,UAAUgzD,UAAY,SAAU3rD,EAAKof,GAC3C,IAAIze,EAAOrF,KACPgF,EAAQ,KACRV,EAAOI,EAAI+b,UAEfpb,EAAK+hD,WAAWliD,SAAQ,SAAUsJ,GACjC,IAAKnJ,EAAK6qD,cAAc1hD,EAAQlK,GAAO,CACtCU,EAAQ,KACX,CACA,IAEC,IAAK,IAAIH,KAASQ,EAAKqpC,cAAe,CACrC,IAAKrpC,EAAKqpC,cAAc7pC,GAAOmqD,KAAK1qD,GAAO,CAC1CU,EAAQ,KACX,CACA,CAEC,OAAOA,CACR,EAEAkpD,EAAO7wD,UAAU6yD,cAAgB,SAAU1hD,EAAQlK,GAClD,IAAIe,EAAOrF,KACPgF,EAAQ,MAEZ,GAAInF,MAAMkF,QAAQyJ,GAAS,CAC1BA,EAAOtJ,SAAQ,SAAUorD,GACxB,GAAIjrD,EAAK6qD,cAAcI,EAAWhsD,GAAO,CACxCU,EAAQ,IACZ,CACA,GACA,KAAQ,CACNA,EAAQwJ,EAAOwgD,KAAK1qD,EACtB,CAEC,OAAOU,CACR,EAGAkpD,EAAO7wD,UAAUymB,QAAU,CAG1B,IAAK,SAASysC,EAAEC,EAAWC,EAAQ3a,EAAS4a,GAC3C,OAAOD,GAAUD,EAAY,KAAO,KACtC,EAGC,IAAK,SAASD,EAAEC,EAAWC,EAAQ3a,EAAS4a,GAC3C,OAAOD,EAASD,EAAY,KAAO,KACrC,EAGC,KAAM,SAASD,EAAEC,EAAWC,EAAQ3a,EAAS4a,GAC5C,OAAOD,GAAUD,EAAY,KAAO,KACtC,EAGC,IAAK,SAASD,EAAEC,EAAWC,EAAQ3a,EAAS4a,GAC3C,OAAOD,EAASD,EAAY,KAAO,KACrC,EAGC,KAAM,SAASD,EAAEC,EAAWC,EAAQ3a,EAAS4a,GAC5C,OAAOD,GAAUD,EAAY,KAAO,KACtC,EAGC,KAAM,SAASD,EAAEC,EAAWC,EAAQ3a,EAAS4a,GAC5C,OAAOD,GAAUD,EAAY,KAAO,KACtC,EAECG,MAAS,SAASA,EAAMH,EAAWC,EAAQ3a,EAAS4a,GAEnD,UAAWF,GAAa,SAAU,CACjCA,EAAY,IAAI3vD,OAAO2vD,EAC1B,CAEE,OAAOA,EAAU1tB,KAAK2tB,EACxB,EAGCG,KAAQ,SAASA,EAAKJ,EAAWC,EAAQ3a,EAAS4a,GACjD,GAAIF,IAAc,aAAeA,IAAc,YAAa,CAC3D,OAAOC,IAAWD,EAAY,KAAO,KACxC,KAAS,CACN,UAAWC,IAAW,aAAeA,IAAW,KAAM,CACrD,OAAOhwD,OAAOgwD,GAAQzhB,cAAcluC,QAAQ0vD,EAAUxhB,gBAAkB,CAC5E,KAAU,CACN,OAAO,KACX,CACA,CACA,EAGC6hB,SAAY,SAASA,EAASL,EAAWC,EAAQ3a,EAAS4a,GACzD,IAAIG,EAAWL,EAAUxhB,cAAczmC,aAAamoD,EAAaI,YAAc,YAAc,IAAMJ,EAAaI,WAC5G/yD,EAAQ0C,OAAOgwD,IAAW,aAAeA,IAAW,YAAc,GAAKA,GAAQzhB,cAC/E5mC,EAAU,GAEdyoD,EAAS3rD,SAAQ,SAAU6rD,GAC1B,GAAIhzD,EAAM2C,SAASqwD,GAAU,CAC5B3oD,EAAQnD,KAAK,KACjB,CACA,IAEE,OAAOyrD,EAAaM,SAAW5oD,EAAQhK,SAAWyyD,EAASzyD,SAAWgK,EAAQhK,MAChF,EAGC6yD,OAAU,SAASA,EAAOT,EAAWC,EAAQ3a,EAAS4a,GACrD,GAAIF,IAAc,aAAeA,IAAc,YAAa,CAC3D,OAAOC,IAAWD,EAAY,KAAO,KACxC,KAAS,CACN,UAAWC,IAAW,aAAeA,IAAW,KAAM,CACrD,OAAOhwD,OAAOgwD,GAAQzhB,cAAc6X,WAAW2J,EAAUxhB,cAC7D,KAAU,CACN,OAAO,KACX,CACA,CACA,EAGCkiB,KAAQ,SAASA,EAAKV,EAAWC,EAAQ3a,EAAS4a,GACjD,GAAIF,IAAc,aAAeA,IAAc,YAAa,CAC3D,OAAOC,IAAWD,EAAY,KAAO,KACxC,KAAS,CACN,UAAWC,IAAW,aAAeA,IAAW,KAAM,CACrD,OAAOhwD,OAAOgwD,GAAQzhB,cAAcmiB,SAASX,EAAUxhB,cAC3D,KAAU,CACN,OAAO,KACX,CACA,CACA,EAGCoiB,GAAM,SAASC,EAAIb,EAAWC,EAAQ3a,EAAS4a,GAC9C,GAAI7wD,MAAMkF,QAAQyrD,GAAY,CAC7B,OAAOA,EAAUpyD,OAASoyD,EAAU1vD,QAAQ2vD,IAAW,EAAI,IAC9D,KAAS,CACN1kD,QAAQC,KAAK,+CAAgDwkD,GAC7D,OAAO,KACV,CACA,GAGApjD,EAAU/P,UAAUytC,eAAe,SAAUojB,GAE7C,IAAIoD,GAAS,SAASA,EAAOpvD,GAC5BlC,KAAKkC,MAAQA,CACd,EAGAovD,GAAOj0D,UAAUwW,iBAAmB,SAAU1N,GAC7CA,EAAOhC,QAAQyR,OAAS5V,KAAKuxD,gBAAgBprD,EAAQ,IAErD,UAAWA,EAAOH,WAAWwrD,iBAAmB,YAAa,CAC5DrrD,EAAOhC,QAAQyR,OAAOwsB,MAAQpiC,KAAKuxD,gBAAgBprD,EAAQ,QAC7D,CAEC,UAAWA,EAAOH,WAAWyrD,qBAAuB,YAAa,CAChEtrD,EAAOhC,QAAQyR,OAAO4iB,UAAYx4B,KAAKuxD,gBAAgBprD,EAAQ,YACjE,CAEC,UAAWA,EAAOH,WAAW0rD,sBAAwB,YAAa,CACjEvrD,EAAOhC,QAAQyR,OAAO/C,WAAa7S,KAAKuxD,gBAAgBprD,EAAQ,aAClE,CACA,EAEAmrD,GAAOj0D,UAAUk0D,gBAAkB,SAAUprD,EAAQwH,GACpD,IAAIrD,EAAS,CAAEiN,OAAQpR,EAAOH,WAAW,YAAc2H,EAAO,WAAa,IACvE0J,EAAYlR,EAAOH,WAAW,YAAc2H,GAGhD,cAAe0J,IAAc,YAAc,YAAc7X,EAAQ6X,IAChE,IAAK,SAEJ,GAAIA,IAAc,OAAQ,CACzBA,EAAY,YAEZ,UAAW/M,EAAOiN,OAAOo6C,cAAgB,YAAa,CACrDrnD,EAAOiN,OAAOo6C,aAAe,KAClC,CAEI5lD,QAAQC,KAAK,4IACjB,CAEG,GAAIhM,KAAK4xD,WAAWv6C,GAAY,CAC/B/M,EAAO+M,UAAYrX,KAAK4xD,WAAWv6C,EACvC,KAAU,CACNtL,QAAQC,KAAK,8CAA+CqL,GAC5D/M,EAAO+M,UAAYrX,KAAK4xD,WAAWC,SACvC,CACG,MAED,IAAK,WACJvnD,EAAO+M,UAAYA,EACnB,MAED,QACC/M,EAAO+M,UAAYrX,KAAK4xD,WAAWC,UACnC,MAGF,OAAOvnD,CACR,EAEAgnD,GAAOj0D,UAAUivB,aAAe,SAAUthB,GACzC,GAAIA,EAAK7G,QAAQyR,QAAU5K,EAAK7G,QAAQyR,OAAOk4C,mBAAqB9iD,EAAK7G,QAAQyR,OAAOisC,SAAU,CACjG72C,EAAK7G,QAAQyR,OAAOk4C,mBACpB9iD,EAAK7G,QAAQyR,OAAOisC,SAAW,IACjC,CACA,EAGAyP,GAAOj0D,UAAUo4B,YAAc,SAAUzqB,GACxC,IAAIyG,EAAYzG,EAAK1B,eACjBiO,SAAgBvM,EAAK7E,OAAOhC,QAAQyR,OAAO2B,SAAW,WAAavM,EAAK7E,OAAOhC,QAAQyR,OAAO2B,OAAO9F,GAAazG,EAAK7E,OAAOhC,QAAQyR,OAAO2B,OAEjJ,SAASE,EAAW3O,GACnB,IAAKkC,EAAK7G,QAAQyR,OAAQ,CACzB5K,EAAK7G,QAAQyR,OAAS,EACzB,CAEE5K,EAAK7G,QAAQyR,OAAOk4C,iBAAmBhlD,EACvCkC,EAAK7G,QAAQyR,OAAOisC,SAAW,KACjC,CAEC,OAAO72C,EAAK7E,OAAOhC,QAAQyR,OAAOyB,UAAU3Z,KAAKsC,KAAMyR,EAAW8F,EAAQE,EAC3E,EAEA65C,GAAOj0D,UAAUwwD,kBAAoB,SAAU7iD,EAAM2C,GACpD,IAAI0J,EAAYrM,EAAK7E,OAAOhC,QAAQyR,OAAOjI,GACvC4J,EAEJ,GAAIF,EAAW,CACd,IAAII,EAAa,SAASA,EAAW3O,GACpC,IAAKkC,EAAK7G,QAAQyR,OAAQ,CACzB5K,EAAK7G,QAAQyR,OAAS,EAC1B,CAEG5K,EAAK7G,QAAQyR,OAAOk4C,iBAAmBhlD,EACvCkC,EAAK7G,QAAQyR,OAAOisC,SAAW,KAClC,EAEEtqC,SAAgBF,EAAUE,SAAW,WAAaF,EAAUE,OAAO9F,WAAa4F,EAAUE,OAE1F,OAAOF,EAAUA,UAAU3Z,KAAKsC,KAAMgL,EAAK1B,eAAgBiO,EAAQE,EACrE,KAAQ,CACN,OAAOzX,KAAKy1B,YAAYzqB,EAC1B,CACA,EAEAsmD,GAAOj0D,UAAUy0D,aAAe,SAAU/zD,GACzC,GAAIA,EAAO,CACV,IAAIg0D,EAAY,CACf,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,UAGN,OAAOtxD,OAAO1C,GAAO07C,QAAQ,gBAAgB,SAAU4F,GACtD,OAAO0S,EAAU1S,EACpB,GACA,KAAQ,CACN,OAAOthD,CACT,CACA,EAEAuzD,GAAOj0D,UAAU20D,aAAe,SAAUj0D,GACzC,OAAOA,IAAU,aAAeA,IAAU,aAAeA,IAAU,GAAK,SAAWA,CACpF,EAGAuzD,GAAOj0D,UAAUsa,aAAe,SAAUN,GACzC,IAAIA,EAEJ,cAAeA,IAAc,YAAc,YAAc7X,EAAQ6X,IAChE,IAAK,SACJ,GAAIrX,KAAK4xD,WAAWv6C,GAAY,CAC/BA,EAAYrX,KAAK4xD,WAAWv6C,EAChC,KAAU,CACNtL,QAAQC,KAAK,8CAA+CqL,GAC5DA,EAAYrX,KAAK4xD,WAAWC,SAChC,CACG,MAED,IAAK,WACJx6C,EAAYA,EACZ,MAED,QACCA,EAAYrX,KAAK4xD,WAAWC,UAC5B,MAGF,OAAOx6C,CACR,EAGAi6C,GAAOj0D,UAAUu0D,WAAa,CAE7BC,UAAW,SAASA,EAAU7mD,EAAMinD,EAAiBx6C,GACpD,OAAOzX,KAAKgyD,aAAahyD,KAAK8xD,aAAa9mD,EAAK4M,YAClD,EAGCsgC,KAAM,SAASA,EAAKltC,EAAMinD,EAAiBx6C,GAC1C,OAAOzM,EAAK4M,UACd,EAGCyrC,SAAU,SAASA,EAASr4C,EAAMinD,EAAiBx6C,GAClDzM,EAAKvH,aAAaO,MAAMw/C,WAAa,WACrC,OAAOxjD,KAAKgyD,aAAahyD,KAAK8xD,aAAa9mD,EAAK4M,YAClD,EAGCs6C,MAAO,SAASA,EAAMlnD,EAAMinD,EAAiBx6C,GAC5C,IAAI06C,EAAW3a,WAAWxsC,EAAK4M,YAC3BisC,EACAuO,EACAC,EACAC,EAEJ,IAAIC,EAAaN,EAAgBI,SAAW,IAC5C,IAAIG,EAAcP,EAAgBQ,UAAY,IAC9C,IAAI/P,EAASuP,EAAgBvP,QAAU,GACvC,IAAI/4C,IAAUsoD,EAAgBS,YAC9B,IAAIvb,SAAmB8a,EAAgB9a,YAAc,YAAc8a,EAAgB9a,UAAY,EAE/F,GAAI31C,MAAM2wD,GAAW,CACpB,OAAOnyD,KAAKgyD,aAAahyD,KAAK8xD,aAAa9mD,EAAK4M,YACnD,CAEEisC,EAAS1M,IAAc,MAAQgb,EAAS5a,QAAQJ,GAAagb,EAC7DtO,EAASpjD,OAAOojD,GAAQt7C,MAAM,KAE9B6pD,EAAUvO,EAAO,GACjBwO,EAAUxO,EAAOzlD,OAAS,EAAIm0D,EAAa1O,EAAO,GAAK,GAEvDyO,EAAM,eAEN,MAAOA,EAAIxvB,KAAKsvB,GAAU,CACzBA,EAAUA,EAAQ3Y,QAAQ6Y,EAAK,KAAOE,EAAc,KACvD,CAEE,OAAO7oD,EAAQyoD,EAAUC,EAAU3P,EAASA,EAAS0P,EAAUC,CACjE,EAGCn7B,KAAM,SAASA,EAAKlsB,EAAMinD,EAAiBx6C,GAC1C,IAAI1Z,EAAQiN,EAAK4M,WACb+6C,EAAYV,EAAgBU,WAAa,GACzCxoB,EAAW8nB,EAAgB9nB,SAC3Bkb,EAAQtnD,EACRgF,EAAKC,SAASC,cAAc,KAC5BqB,EAEJ,GAAI2tD,EAAgBW,WAAY,CAC/BtuD,EAAO0G,EAAKyV,UACZ4kC,EAAQ/gD,EAAK2tD,EAAgBW,WAChC,CAEE,GAAIX,EAAgB5M,MAAO,CAC1B,OAAQ7lD,EAAQyyD,EAAgB5M,QAC/B,IAAK,SACJA,EAAQ4M,EAAgB5M,MACxB,MAED,IAAK,WACJA,EAAQ4M,EAAgB5M,MAAMr6C,GAC9B,MAEL,CAEE,GAAIq6C,EAAO,CACV,GAAI4M,EAAgBY,SAAU,CAC7BvuD,EAAO0G,EAAKyV,UACZ1iB,EAAQuG,EAAK2tD,EAAgBY,SACjC,CAEG,GAAIZ,EAAgB5gB,IAAK,CACxB,OAAQ7xC,EAAQyyD,EAAgB5gB,MAC/B,IAAK,SACJtzC,EAAQk0D,EAAgB5gB,IACxB,MAED,IAAK,WACJtzC,EAAQk0D,EAAgB5gB,IAAIrmC,GAC5B,MAEN,CAEGjI,EAAGqP,aAAa,OAAQugD,EAAY50D,GAEpC,GAAIk0D,EAAgBvwD,OAAQ,CAC3BqB,EAAGqP,aAAa,SAAU6/C,EAAgBvwD,OAC9C,CAEG,GAAIuwD,EAAgB9nB,SAAU,CAE7B,UAAWA,GAAY,WAAY,CAClCA,EAAWA,EAASn/B,EACzB,KAAW,CACNm/B,EAAWA,IAAa,KAAO,GAAKA,CACzC,CAEIpnC,EAAGqP,aAAa,WAAY+3B,EAChC,CAEGpnC,EAAGgV,UAAY/X,KAAKgyD,aAAahyD,KAAK8xD,aAAazM,IAEnD,OAAOtiD,CACV,KAAS,CACN,MAAO,QACV,CACA,EAGC+vD,MAAO,SAASA,EAAM9nD,EAAMinD,EAAiBx6C,GAC5C,IAAI1U,EAAKC,SAASC,cAAc,OAC5B8vD,EAAM/nD,EAAK4M,WAEf,GAAIq6C,EAAgBU,UAAW,CAC9BI,EAAMd,EAAgBU,UAAY3nD,EAAK4M,UAC1C,CAEE,GAAIq6C,EAAgBe,UAAW,CAC9BD,EAAMA,EAAMd,EAAgBe,SAC/B,CAEEjwD,EAAGqP,aAAa,MAAO2gD,GAEvB,OAAQvzD,EAAQyyD,EAAgB5qD,SAC/B,IAAK,SACJtE,EAAGiB,MAAMqD,OAAS4qD,EAAgB5qD,OAAS,KAC3C,MAED,IAAK,SACJtE,EAAGiB,MAAMqD,OAAS4qD,EAAgB5qD,OAClC,MAGF,OAAQ7H,EAAQyyD,EAAgBzoD,QAC/B,IAAK,SACJzG,EAAGiB,MAAMwF,MAAQyoD,EAAgBzoD,MAAQ,KACzC,MAED,IAAK,SACJzG,EAAGiB,MAAMwF,MAAQyoD,EAAgBzoD,MACjC,MAGFzG,EAAGqR,iBAAiB,QAAQ,WAC3BpJ,EAAK2nB,SAAS/K,iBACjB,IAEE,OAAO7kB,CACT,EAGC+mD,UAAW,SAASA,EAAU9+C,EAAMinD,EAAiBx6C,GACpD,IAAI1Z,EAAQiN,EAAK4M,WACbtV,EAAU0I,EAAKvH,aACfy9B,EAAQ+wB,EAAgB9J,WACxB8K,EAAShB,EAAgBiB,YACzBC,SAAclB,EAAgBmB,cAAgB,YAAcnB,EAAgBmB,YAAc,qkBAC1FC,SAAepB,EAAgBN,eAAiB,YAAcM,EAAgBN,aAAe,4rBAEjG,GAAIsB,GAAUl1D,GAASA,IAAU,MAAQA,IAAU,QAAUA,IAAU,QAAUA,IAAU,GAAKA,IAAU,IAAK,CAC9GuE,EAAQ8P,aAAa,eAAgB,MACrC,OAAO+gD,GAAQ,EAClB,KAAS,CACN,GAAIjyB,IAAUnjC,IAAU,QAAUA,IAAU,IAAMA,IAAU,aAAeA,IAAU,aAAc,CAClGuE,EAAQ8P,aAAa,eAAgB,SACrC,MAAO,EACX,KAAU,CACN9P,EAAQ8P,aAAa,eAAgB,OACrC,OAAOihD,GAAS,EACpB,CACA,CACA,EAECC,SAAU,SAASA,EAAStoD,EAAMinD,EAAiBx6C,GAClD,IAAI87C,EAActB,EAAgBsB,aAAe,sBACjD,IAAIC,EAAevB,EAAgBuB,cAAgB,sBACnD,IAAIp5C,SAAiB63C,EAAgBwB,qBAAuB,YAAcxB,EAAgBwB,mBAAqB,GAC/G,IAAI11D,EAAQiN,EAAK4M,WAEjB,IAAI87C,EAAcC,OAAO51D,EAAOw1D,GAEhC,GAAIG,EAAYrgC,UAAW,CAC1B,OAAO4+B,EAAgB2B,SAAWF,EAAYG,GAAG5B,EAAgB2B,UAAUh+C,OAAO49C,GAAgBE,EAAY99C,OAAO49C,EACxH,KAAS,CAEN,GAAIp5C,IAAY,KAAM,CACrB,OAAOrc,CACX,MAAU,UAAWqc,IAAY,WAAY,CACzC,OAAOA,EAAQrc,EACnB,KAAU,CACN,OAAOqc,CACX,CACA,CACA,EAEC05C,aAAc,SAASR,EAAStoD,EAAMinD,EAAiBx6C,GACtD,IAAI87C,EAActB,EAAgBsB,aAAe,sBACjD,IAAIn5C,SAAiB63C,EAAgBwB,qBAAuB,YAAcxB,EAAgBwB,mBAAqB,GAC/G,IAAIM,SAAgB9B,EAAgB8B,SAAW,YAAc9B,EAAgB8B,OAAS,MACtF,IAAI/V,SAAciU,EAAgBjU,OAAS,YAAciU,EAAgBjU,KAAOt/C,UAChF,IAAIs1D,SAAkB/B,EAAgB+B,WAAa,YAAc/B,EAAgB+B,SAAW,MAC5F,IAAIC,SAAchC,EAAgBgC,OAAS,YAAchC,EAAgBgC,KAAON,SAChF,IAAI51D,EAAQiN,EAAK4M,WAEjB,IAAI87C,EAAcC,OAAO51D,EAAOw1D,GAEhC,GAAIG,EAAYrgC,UAAW,CAC1B,GAAI2gC,EAAU,CACb,OAAOL,OAAOO,SAASR,EAAYntC,KAAK0tC,IAAOD,SAASD,EAC5D,KAAU,CACN,OAAOL,EAAYntC,KAAK0tC,EAAMjW,IAAS+V,EAAS,IAAMA,EAAS,GACnE,CACA,KAAS,CAEN,GAAI35C,IAAY,KAAM,CACrB,OAAOrc,CACX,MAAU,UAAWqc,IAAY,WAAY,CACzC,OAAOA,EAAQrc,EACnB,KAAU,CACN,OAAOqc,CACX,CACA,CACA,EAGC2zC,OAAQ,SAASA,EAAO/iD,EAAMinD,EAAiBx6C,GAC9C,IAAI1Z,EAAQiN,EAAK4M,WAEjB,UAAWq6C,EAAgBl0D,KAAW,YAAa,CAClDgO,QAAQC,KAAK,6BAA+BjO,GAC5C,OAAOA,CACV,CAEE,OAAOk0D,EAAgBl0D,EACzB,EAGCuqD,KAAM,SAASA,EAAKt9C,EAAMinD,EAAiBx6C,GAC1C,IAAI1Z,EAAQiN,EAAK4M,WACbtV,EAAU0I,EAAKvH,aACf8kD,EAAW0J,GAAmBA,EAAgBxJ,MAAQwJ,EAAgBxJ,MAAQ,EAC9EA,EAAQzlD,SAASC,cAAc,QAC/BqlD,EAAOtlD,SAAS2lD,gBAAgB,6BAA8B,OAC9DwL,EAAa,0SACbC,EAAe,0SAGnB3L,EAAMzkD,MAAMwD,cAAgB,SAG5B8gD,EAAKl2C,aAAa,QAAS,MAC3Bk2C,EAAKl2C,aAAa,SAAU,MAC5Bk2C,EAAKl2C,aAAa,UAAW,eAC7Bk2C,EAAKl2C,aAAa,YAAa,YAC/Bk2C,EAAKtkD,MAAMg/C,QAAU,QAErBjlD,EAAQA,IAAUyD,MAAMzD,GAAS4O,SAAS5O,GAAS,EAEnDA,EAAQmD,KAAKC,IAAI,EAAGD,KAAK4K,IAAI/N,EAAOwqD,IAEpC,IAAK,IAAI/iD,EAAI,EAAGA,GAAK+iD,EAAU/iD,IAAK,CACnC,IAAIujD,EAAWT,EAAK9N,UAAU,MAC9BuO,EAAShxC,UAAYvS,GAAKzH,EAAQo2D,EAAaC,EAE/C3L,EAAM3hD,YAAYiiD,EACrB,CAEEzmD,EAAQ0B,MAAMw/C,WAAa,SAC3BlhD,EAAQ0B,MAAMilD,SAAW,SACzB3mD,EAAQ0B,MAAMklD,aAAe,WAE7B5mD,EAAQ8P,aAAa,aAAcrU,GAEnC,OAAO0qD,CACT,EAEC4L,QAAS,SAASA,EAAQrpD,EAAMinD,EAAiBx6C,GAChD,IAAI1Z,EAAQiC,KAAK8xD,aAAa9mD,EAAK4M,aAAe,EAC9C7U,EAAKC,SAASC,cAAc,QAC5B9B,EAAM8wD,GAAmBA,EAAgB9wD,IAAM8wD,EAAgB9wD,IAAM,IACrE2K,EAAMmmD,GAAmBA,EAAgBnmD,IAAMmmD,EAAgBnmD,IAAM,EACrEwoD,EAASrC,UAA0BA,EAAgBjE,QAAU,YAAciE,EAAgBjE,MAAQ,CAAC,MAAO,SAAU,SACrHA,EAAQ,UACR5E,EACAmL,EAEJ,GAAI/yD,MAAMzD,WAAiBiN,EAAK4M,aAAe,YAAa,CAC3D,MACH,CAEE7U,EAAGG,UAAUC,IAAI,2BAGjBoxD,EAAe/c,WAAWz5C,IAAUoD,EAAMq2C,WAAWz5C,GAASoD,EAC9DozD,EAAe/c,WAAW+c,IAAiBzoD,EAAM0rC,WAAW+c,GAAgBzoD,EAG5Es9C,GAAWjoD,EAAM2K,GAAO,IACxByoD,EAAerzD,KAAKyoD,OAAO4K,EAAezoD,GAAOs9C,GAGjD,cAAekL,IAAW,YAAc,YAAc90D,EAAQ80D,IAC7D,IAAK,SACJtG,EAAQsG,EACR,MACD,IAAK,WACJtG,EAAQsG,EAAOv2D,GACf,MACD,IAAK,SACJ,GAAI8B,MAAMkF,QAAQuvD,GAAS,CAC1B,IAAItW,EAAO,IAAMsW,EAAOl2D,OACxB,IAAID,EAAQ+C,KAAKsY,MAAM+6C,EAAevW,GAEtC7/C,EAAQ+C,KAAK4K,IAAI3N,EAAOm2D,EAAOl2D,OAAS,GACxCD,EAAQ+C,KAAKC,IAAIhD,EAAO,GACxB6vD,EAAQsG,EAAOn2D,GACf,KACL,EAGE4E,EAAGiB,MAAM4lD,gBAAkBoE,EAE3B,OAAOjrD,CACT,EAGComD,SAAU,SAASA,EAASn+C,EAAMinD,EAAiBx6C,GAE/C,IAAC1Z,EAAQiC,KAAK8xD,aAAa9mD,EAAK4M,aAAe,EAC9CtV,EAAU0I,EAAKvH,aACftC,EAAM8wD,GAAmBA,EAAgB9wD,IAAM8wD,EAAgB9wD,IAAM,IACrE2K,EAAMmmD,GAAmBA,EAAgBnmD,IAAMmmD,EAAgBnmD,IAAM,EACrE0oD,EAAcvC,GAAmBA,EAAgBuC,YAAcvC,EAAgBuC,YAAc,SAC7FpL,EACAmL,EACAvG,EACAyG,EACAC,EAOJH,EAAe/c,WAAWz5C,IAAUoD,EAAMq2C,WAAWz5C,GAASoD,EAC9DozD,EAAe/c,WAAW+c,IAAiBzoD,EAAM0rC,WAAW+c,GAAgBzoD,EAG5Es9C,GAAWjoD,EAAM2K,GAAO,IACxByoD,EAAerzD,KAAKyoD,OAAO4K,EAAezoD,GAAOs9C,GAGjD,OAAQ5pD,EAAQyyD,EAAgBjE,QAC/B,IAAK,SACJA,EAAQiE,EAAgBjE,MACxB,MACD,IAAK,WACJA,EAAQiE,EAAgBjE,MAAMjwD,GAC9B,MACD,IAAK,SACJ,GAAI8B,MAAMkF,QAAQktD,EAAgBjE,OAAQ,CACzC,IAAIhQ,EAAO,IAAMiU,EAAgBjE,MAAM5vD,OACvC,IAAID,EAAQ+C,KAAKsY,MAAM+6C,EAAevW,GAEtC7/C,EAAQ+C,KAAK4K,IAAI3N,EAAO8zD,EAAgBjE,MAAM5vD,OAAS,GACvDD,EAAQ+C,KAAKC,IAAIhD,EAAO,GACxB6vD,EAAQiE,EAAgBjE,MAAM7vD,GAC9B,KACL,CACG,QACC6vD,EAAQ,UAIV,OAAQxuD,EAAQyyD,EAAgBwC,SAC/B,IAAK,SACJA,EAASxC,EAAgBwC,OACzB,MACD,IAAK,WACJA,EAASxC,EAAgBwC,OAAO12D,GAChC,MACD,IAAK,UACJ02D,EAAS12D,EACT,MACD,QACC02D,EAAS,MAIX,OAAQj1D,EAAQyyD,EAAgByC,cAC/B,IAAK,SACJA,EAAczC,EAAgByC,YAC9B,MACD,IAAK,WACJA,EAAczC,EAAgByC,YAAY32D,GAC1C,MACD,IAAK,SACJ,GAAI8B,MAAMkF,QAAQktD,EAAgByC,aAAc,CAC/C,IAAI1W,EAAO,IAAMiU,EAAgByC,YAAYt2D,OAC7C,IAAID,EAAQ+C,KAAKsY,MAAM+6C,EAAevW,GAEtC7/C,EAAQ+C,KAAK4K,IAAI3N,EAAO8zD,EAAgByC,YAAYt2D,OAAS,GAC7DD,EAAQ+C,KAAKC,IAAIhD,EAAO,GACxBu2D,EAAczC,EAAgByC,YAAYv2D,EAC/C,CACI,MACD,QACCu2D,EAAc,OAGhBpyD,EAAQ0B,MAAMwI,SAAW,OACzBlK,EAAQ0B,MAAMkH,SAAW,WAEzB5I,EAAQ8P,aAAa,aAAcmiD,GAEnC,IAAII,EAAQ3xD,SAASC,cAAc,OACnC0xD,EAAM3wD,MAAMkV,QAAU,eACtBy7C,EAAM3wD,MAAMkH,SAAW,WACvBypD,EAAM3wD,MAAMwF,MAAQ+qD,EAAe,IACnCI,EAAM3wD,MAAM4lD,gBAAkBoE,EAC9B2G,EAAM3wD,MAAMqD,OAAS,OAErBstD,EAAMviD,aAAa,WAAYjR,GAC/BwzD,EAAMviD,aAAa,WAAYtG,GAE/B,GAAI2oD,EAAQ,CACX,IAAIG,EAAW5xD,SAASC,cAAc,OACtC2xD,EAAS5wD,MAAMkH,SAAW,WAC1B0pD,EAAS5wD,MAAMoZ,IAAM,MACrBw3C,EAAS5wD,MAAMJ,KAAO,EACtBgxD,EAAS5wD,MAAM2S,UAAY69C,EAC3BI,EAAS5wD,MAAMwF,MAAQ,OACvBorD,EAAS5wD,MAAMgqD,MAAQ0G,EACvBE,EAAS78C,UAAY08C,CACxB,CAEEh9C,GAAW,WAGV,KAAMzM,aAAgBsnB,GAAgB,CACrC,IAAI3I,EAAW3mB,SAASC,cAAc,OACtC0mB,EAAS3lB,MAAMkH,SAAW,WAC1Bye,EAAS3lB,MAAMoZ,IAAM,MACrBuM,EAAS3lB,MAAM8vB,OAAS,MACxBnK,EAAS3lB,MAAMJ,KAAO,MACtB+lB,EAAS3lB,MAAMiwB,MAAQ,MAEvB3xB,EAAQwE,YAAY6iB,GAEpBrnB,EAAUqnB,CACd,CAEGrnB,EAAQwE,YAAY6tD,GAEpB,GAAIF,EAAQ,CACXnyD,EAAQwE,YAAY8tD,EACxB,CACA,IAEE,MAAO,EACT,EAGC5G,MAAO,SAASA,EAAMhjD,EAAMinD,EAAiBx6C,GAC5CzM,EAAKvH,aAAaO,MAAM4lD,gBAAkB5pD,KAAK8xD,aAAa9mD,EAAK4M,YACjE,MAAO,EACT,EAGCi9C,WAAY,SAASA,EAAW7pD,EAAMinD,EAAiBx6C,GACtD,MAAO,okBACT,EAGCq9C,YAAa,SAASA,EAAY9pD,EAAMinD,EAAiBx6C,GACxD,MAAO,0rBACT,EAGCs9C,OAAQ,SAASA,EAAO/pD,EAAMinD,EAAiBx6C,GAC9C,OAAOzX,KAAKkC,MAAMM,WAAWuH,WAAWjJ,QAAQkK,EAAK2nB,SAAS7qB,YAAc,CAC9E,EAGCuhD,OAAQ,SAASA,EAAOr+C,EAAMinD,EAAiBx6C,GAC9CzM,EAAKvH,aAAaP,UAAUC,IAAI,wBAChC,MAAO,kLACT,EAEC6xD,mBAAoB,SAASA,EAAmBhqD,EAAMinD,EAAiBx6C,GACnE,IAEC1U,EAAKC,SAASC,cAAc,OAC5BqH,EAASU,EAAK2nB,SAASjG,KAAKvoB,QAAQwB,iBAExC5C,EAAGG,UAAUC,IAAI,wCACjBJ,EAAGgV,UAAY,oIAEf/M,EAAKvH,aAAaP,UAAUC,IAAI,wBAEhC,SAAS8xD,EAAWC,GACnB,IAAIrb,EAAavvC,EAAOhI,QAExBgI,EAAO6rC,KAAO+e,EAEd,GAAIrb,EAAY,CAEf,GAAIvvC,EAAO6rC,KAAM,CAChBpzC,EAAGG,UAAUC,IAAI,QACjB02C,EAAW71C,MAAMkV,QAAU,EAChC,KAAW,CACNnW,EAAGG,UAAUikB,OAAO,QACpB0yB,EAAW71C,MAAMkV,QAAU,MAChC,CACA,CACA,CAEEnW,EAAGqR,iBAAiB,SAAS,SAAUC,GACtCA,EAAEuvC,2BACFqR,GAAY3qD,EAAO6rC,KACtB,IAEE8e,EAAW3qD,EAAO6rC,MAElB,OAAOpzC,CACT,EAECoyD,aAAc,SAASA,EAAanqD,EAAMinD,EAAiBx6C,GAC1D,IAAI29C,EAAUp1D,KAEd,IAAIq1D,EAAWryD,SAASC,cAAc,SAEtCoyD,EAAS1nD,KAAO,WAEhB,GAAI3N,KAAKkC,MAAMgC,UAAU,YAAa,MAAO,CAE5CmxD,EAASjhD,iBAAiB,SAAS,SAAUC,GAC5CA,EAAE0C,iBACN,IAEG,UAAW/L,EAAK2nB,QAAU,WAAY,CACrC,IAAIjuB,EAAMsG,EAAK2nB,SAEf,GAAIjuB,aAAekZ,EAAc,CAEhCy3C,EAASjhD,iBAAiB,UAAU,SAAUC,GAC7C3P,EAAI0oB,cACV,IAEKioC,EAAShL,QAAU3lD,EAAI4oB,YAAc5oB,EAAI4oB,aACzCttB,KAAKkC,MAAMiC,QAAQob,UAAU+1C,0BAA0B5wD,EAAK2wD,EACjE,KAAW,CACNA,EAAW,EAChB,CACA,KAAU,CACNA,EAASjhD,iBAAiB,UAAU,SAAUC,GAC7C,GAAI+gD,EAAQlzD,MAAMiC,QAAQob,UAAU6G,aAAahoB,OAAQ,CACxDg3D,EAAQlzD,MAAM2lC,aACpB,KAAY,CACNutB,EAAQlzD,MAAMqd,UAAU0yC,EAAgBna,SAC9C,CACA,IAEI93C,KAAKkC,MAAMiC,QAAQob,UAAUg2C,6BAA6BF,EAC9D,CACA,CACE,OAAOA,CACT,GAGAjoD,EAAU/P,UAAUytC,eAAe,SAAUwmB,IAE7C,IAAIkE,GAAgB,SAASA,EAActzD,GAC1ClC,KAAKkC,MAAQA,EACblC,KAAKy1D,YAAc,GACnBz1D,KAAK01D,aAAe,GACpB11D,KAAK2hD,WAAa,EAClB3hD,KAAK4hD,YAAc,EACnB5hD,KAAK21D,aAAe,EACpB31D,KAAK41D,mBAAqB,OAC1B51D,KAAKgJ,OAAS,MACdhJ,KAAK61D,eAAiB,KACvB,EAGAL,GAAcn4D,UAAUkI,MAAQ,WAC/BvF,KAAK41D,mBAAqB,OAC1B51D,KAAKy1D,YAAc,GACnBz1D,KAAK01D,aAAe,GACpB11D,KAAK2hD,WAAa,EAClB3hD,KAAK4hD,YAAc,EACnB5hD,KAAK4hD,YAAc,EACnB5hD,KAAKgJ,OAAS,MAEdhJ,KAAKkC,MAAMkI,cAAchI,eAAe4B,MAAMC,WAAa,EAC3DjE,KAAKkC,MAAMkI,cAAc9H,QAAQ0B,MAAMwnB,aAAe,CACvD,EAGAgqC,GAAcn4D,UAAUwW,iBAAmB,SAAU1N,GACpD,IAAImE,EAAS,CAAE2d,OAAQ,EAAG6tC,KAAM,OAEhC,IAAK3vD,EAAO8D,QAAS,CAEpB,GAAIjK,KAAK+1D,YAAY5vD,GAAS,CAE7BmE,EAAOY,SAAWlL,KAAK41D,mBAEvB,GAAI51D,KAAK41D,oBAAsB,OAAQ,CACtC51D,KAAKy1D,YAAYxwD,KAAKkB,EAC1B,KAAU,CACNnG,KAAK01D,aAAa7uD,QAAQV,EAC9B,CAEGnG,KAAKgJ,OAAS,KAEd7C,EAAOhC,QAAQkmB,OAAS/f,CAC3B,KAAS,CACNtK,KAAK41D,mBAAqB,OAC7B,CACA,CACA,EAEAJ,GAAcn4D,UAAU04D,YAAc,SAAU5vD,GAG/C,GAAIA,EAAO6D,OAAOC,SAAW9D,EAAOH,WAAWqkB,OAAQ,CACtDte,QAAQC,KAAK,wGACf,CAEC,GAAI7F,EAAO6D,OAAOC,QAAS,CAC1B,OAAOjK,KAAK+1D,YAAY5vD,EAAO6D,OACjC,KAAQ,CACN,OAAO7D,EAAOH,WAAWqkB,MAC3B,CAGA,EAGAmrC,GAAcn4D,UAAUsG,iBAAmB,WAC1C,IAAIqyD,EAAUh2D,KAEd,IAAI2K,EAEJ,GAAI3K,KAAKgJ,OAAQ,CAChB+L,aAAa/U,KAAK61D,gBAGlB71D,KAAK61D,eAAiB7gD,YAAW,WAChCghD,EAAQlpD,QACX,GAAK,KAEHnC,EAAO3K,KAAKkC,MAAMM,WAAWqjB,iBAE7B7lB,KAAKi2D,cAELj2D,KAAKk2D,uBAELl2D,KAAKm2D,iBAELxrD,EAAKzF,SAAQ,SAAUR,GACtB,GAAIA,EAAIiJ,OAAS,MAAO,CACvBqoD,EAAQnmC,UAAUnrB,EACtB,CACA,IAEE1E,KAAKkC,MAAMM,WAAW2Y,aAAanX,MAAMy2C,YAAcz6C,KAAK4hD,WAC9D,CACA,EAGA4T,GAAcn4D,UAAU44D,YAAc,WACrCj2D,KAAK2hD,WAAa3hD,KAAKo2D,WAAWp2D,KAAKy1D,YAAaz1D,KAAKy1D,YAAYr3D,QAAU,KAC/E4B,KAAKkC,MAAMkI,cAAchI,eAAe4B,MAAMC,WAAajE,KAAK2hD,WAEhE3hD,KAAK4hD,YAAc5hD,KAAKo2D,WAAWp2D,KAAK01D,aAAc11D,KAAK01D,aAAat3D,QAAU,KAClF4B,KAAKkC,MAAMkI,cAAc9H,QAAQ0B,MAAMwnB,aAAexrB,KAAK4hD,YAG3D5hD,KAAK21D,aAAe31D,KAAKkC,MAAMM,WAAWF,QAAQyB,YAAc/D,KAAKkC,MAAMkI,cAAcxH,UAC1F,EAGA4yD,GAAcn4D,UAAU84D,eAAiB,WACxC,GAAIn2D,KAAKkC,MAAMgC,UAAU,eAAgB,CACxC,GAAIlE,KAAKkC,MAAMiC,QAAQ0F,YAAYirC,gBAAkB90C,KAAKkC,MAAMiC,QAAQ0F,YAAYqc,OAAQ,CAC3FlmB,KAAK6vB,UAAU7vB,KAAKkC,MAAMiC,QAAQ0F,YAAYqc,OACjD,CACE,GAAIlmB,KAAKkC,MAAMiC,QAAQ0F,YAAYkrC,gBAAkB/0C,KAAKkC,MAAMiC,QAAQ0F,YAAYgrC,OAAQ,CAC3F70C,KAAK6vB,UAAU7vB,KAAKkC,MAAMiC,QAAQ0F,YAAYgrC,OACjD,CACA,CACA,EAGA2gB,GAAcn4D,UAAU64D,qBAAuB,SAAUG,GACxD,IAAIC,EAAUt2D,KAEd,IAAIu2D,EAAc,GAElBv2D,KAAKy1D,YAAYvwD,SAAQ,SAAUiB,EAAQX,GAC1CW,EAAOhC,QAAQkmB,OAAOpC,OAASquC,EAAQF,WAAWE,EAAQb,YAAajwD,GAAK8wD,EAAQp0D,MAAMkI,cAAcxH,WAAa,KAErH,GAAI4C,GAAK8wD,EAAQb,YAAYr3D,OAAS,EAAG,CACxC+H,EAAOhC,QAAQkmB,OAAOyrC,KAAO,IAChC,KAAS,CACN3vD,EAAOhC,QAAQkmB,OAAOyrC,KAAO,KAChC,CAEE,GAAI3vD,EAAO6D,OAAOC,QAAS,CAC1B,IAAIusD,EAAWF,EAAQG,yBAAyBtwD,GAChD,IAAKowD,EAAY71D,SAAS81D,GAAW,CACpCF,EAAQ3gC,cAAc6gC,EAAUrwD,GAChCowD,EAAYtxD,KAAKuxD,EACrB,CAEG,GAAIrwD,EAAOhC,QAAQkmB,OAAOyrC,KAAM,CAC/BU,EAAStzD,UAAUC,IAAI,oBAAsBgD,EAAOhC,QAAQkmB,OAAOnf,SACvE,CACA,KAAS,CACNorD,EAAQ3gC,cAAcxvB,EAAO1C,aAAc0C,EAC9C,CAEE,GAAIkwD,EAAU,CACblwD,EAAO4E,MAAM7F,SAAQ,SAAU8F,GAC9BsrD,EAAQ3gC,cAAc3qB,EAAKvH,WAAW,MAAO0C,EACjD,GACA,CACA,IAECnG,KAAK01D,aAAaxwD,SAAQ,SAAUiB,EAAQX,GAC3CW,EAAOhC,QAAQkmB,OAAOpC,OAASquC,EAAQX,aAAeW,EAAQF,WAAWE,EAAQZ,aAAclwD,EAAI,GAAK,KAExG,GAAIA,GAAK8wD,EAAQZ,aAAat3D,OAAS,EAAG,CACzC+H,EAAOhC,QAAQkmB,OAAOyrC,KAAO,IAChC,KAAS,CACN3vD,EAAOhC,QAAQkmB,OAAOyrC,KAAO,KAChC,CAEE,GAAI3vD,EAAO6D,OAAOC,QAAS,CAC1BqsD,EAAQ3gC,cAAc2gC,EAAQG,yBAAyBtwD,GAASA,EACnE,KAAS,CACNmwD,EAAQ3gC,cAAcxvB,EAAO1C,aAAc0C,EAC9C,CAEE,GAAIkwD,EAAU,CACblwD,EAAO4E,MAAM7F,SAAQ,SAAU8F,GAC9BsrD,EAAQ3gC,cAAc3qB,EAAKvH,WAAW,MAAO0C,EACjD,GACA,CACA,GACA,EAEAqvD,GAAcn4D,UAAUo5D,yBAA2B,SAAUtwD,GAC5D,OAAOA,EAAO6D,OAAOC,QAAUjK,KAAKy2D,yBAAyBtwD,EAAO6D,QAAU7D,EAAO1C,YACtF,EAGA+xD,GAAcn4D,UAAUyP,OAAS,WAC7B,IAACzH,EAAOrF,KAGX,GAAIqF,EAAK2D,OAAQ,CAGhBhJ,KAAKi2D,cAOL5wD,EAAKnD,MAAMM,WAAW2b,iBAAiBjZ,SAAQ,SAAUR,GACxD,GAAIA,EAAIiJ,OAAS,MAAO,CACvBtI,EAAKwqB,UAAUnrB,EACnB,CACA,IAGE1E,KAAKm2D,iBAGLn2D,KAAKk2D,qBAAqB,MAM1Bl2D,KAAKkC,MAAMM,WAAW2Y,aAAanX,MAAMy2C,YAAcz6C,KAAK4hD,WAC9D,CACA,EAEA4T,GAAcn4D,UAAUwyB,UAAY,SAAUnrB,GAC7C,IAAIgyD,EAAU12D,KAEd,IAAIoe,EAAQ1Z,EAAIjB,aAEhB2a,EAAMpa,MAAMunB,YAAcvrB,KAAK2hD,WAG/B3hD,KAAKy1D,YAAYvwD,SAAQ,SAAUiB,GAClC,IAAI6E,EAAOtG,EAAIihB,QAAQxf,GAEvB,GAAI6E,EAAM,CACT0rD,EAAQ/gC,cAAc3qB,EAAKvH,WAAW,MAAO0C,EAChD,CACA,IAECnG,KAAK01D,aAAaxwD,SAAQ,SAAUiB,GACnC,IAAI6E,EAAOtG,EAAIihB,QAAQxf,GAEvB,GAAI6E,EAAM,CACT0rD,EAAQ/gC,cAAc3qB,EAAKvH,WAAW,MAAO0C,EAChD,CACA,GACA,EAEAqvD,GAAcn4D,UAAUs4B,cAAgB,SAAUrzB,EAAS6D,GAE1D,GAAIA,EAAOhC,QAAQkmB,OAAQ,CAC1B/nB,EAAQ0B,MAAMkH,SAAW,WACzB5I,EAAQ0B,MAAMJ,KAAOuC,EAAOhC,QAAQkmB,OAAOpC,OAE3C3lB,EAAQY,UAAUC,IAAI,oBAEtB,GAAIgD,EAAOhC,QAAQkmB,OAAOyrC,KAAM,CAC/BxzD,EAAQY,UAAUC,IAAI,oBAAsBgD,EAAOhC,QAAQkmB,OAAOnf,SACrE,CACA,CACA,EAEAsqD,GAAcn4D,UAAU+4D,WAAa,SAAU3zD,EAAStE,GACvD,IAAIqL,EAAQ,EAEZ,IAAK,IAAImtD,EAAO,EAAGA,EAAOx4D,EAAOw4D,IAAQ,CACxC,GAAIl0D,EAAQk0D,GAAMjuD,QAAS,CAC1Bc,GAAS/G,EAAQk0D,GAAMptD,UAC1B,CACA,CAEC,OAAOC,CACR,EAEA4D,EAAU/P,UAAUytC,eAAe,gBAAiB0qB,IACpD,IAAIoB,GAAa,SAASA,EAAW10D,GACpClC,KAAKkC,MAAQA,EACblC,KAAK20C,WAAa3xC,SAASC,cAAc,OACzCjD,KAAK2K,KAAO,GACZ3K,KAAKqgB,aAAe,CACrB,EAEAu2C,GAAWv5D,UAAUiG,WAAa,WACjCtD,KAAK2K,KAAO,GAEZ3K,KAAK20C,WAAWzxC,UAAUC,IAAI,gCAG9BnD,KAAKkC,MAAMkI,cAAc3G,aAAaZ,aAAa7C,KAAK20C,WAAY30C,KAAKkC,MAAMkI,cAAchI,eAAewE,YAC7G,EAEAgwD,GAAWv5D,UAAU8nB,gBAAkB,SAAUhnB,GAChD6B,KAAKqgB,aAAeliB,CACrB,EAEAy4D,GAAWv5D,UAAU6nB,gBAAkB,WACtC,OAAOllB,KAAKqgB,YACb,EAEAu2C,GAAWv5D,UAAU4nB,SAAW,WAC/B,QAASjlB,KAAK2K,KAAKvM,MACpB,EAGAw4D,GAAWv5D,UAAUgmB,QAAU,SAAU1Y,GACrC,IAEC1B,EAAS0B,EAAKma,MAAM,GAExB9kB,KAAK2K,KAAKzF,SAAQ,SAAUR,GAC3B,IAAIvG,EAAQ8K,EAAOnI,QAAQ4D,GAE3B,GAAIvG,GAAS,EAAG,CACf8K,EAAOvC,OAAOvI,EAAO,EACxB,CACA,IAEC,OAAO8K,CACR,EAEA2tD,GAAWv5D,UAAUowB,UAAY,SAAU/oB,GAC1C,IAAKA,EAAIP,QAAQkmB,OAAQ,CACxB3lB,EAAIP,QAAQkmB,OAAS,KACrBrqB,KAAK20C,WAAW7tC,YAAYpC,EAAIjB,cAChCiB,EAAIpB,aACJoB,EAAIkjB,kBACJ5nB,KAAKkC,MAAMM,WAAWkF,kBAEtB1H,KAAK2K,KAAK1F,KAAKP,GAEf1E,KAAKkC,MAAMM,WAAWmd,kBAAkB,WAExC3f,KAAK62D,WACP,KAAQ,CACN9qD,QAAQC,KAAK,uCACf,CACA,EAEA4qD,GAAWv5D,UAAUswB,YAAc,SAAUjpB,GAChC1E,KAAK2K,KAAK7J,QAAQ4D,GAE9B,GAAIA,EAAIP,QAAQkmB,OAAQ,CAEvB3lB,EAAIP,QAAQkmB,OAAS,MAErBrqB,KAAKoyB,UAAU1tB,GAEf1E,KAAKkC,MAAMM,WAAWkF,kBAEtB1H,KAAKkC,MAAMM,WAAWmd,kBAAkB,WAExC,GAAI3f,KAAK2K,KAAKvM,OAAQ,CACrB4B,KAAK62D,WACR,CACA,KAAQ,CACN9qD,QAAQC,KAAK,yCACf,CACA,EAEA4qD,GAAWv5D,UAAU+0B,UAAY,SAAU1tB,GAC1C,IAAIvG,EAAQ6B,KAAK2K,KAAK7J,QAAQ4D,GAE9B,GAAIvG,GAAS,EAAG,CACf,IAAIigB,EAAQ1Z,EAAIjB,aAChB2a,EAAMzX,WAAWrB,YAAY8Y,GAE7Bpe,KAAK2K,KAAKjE,OAAOvI,EAAO,EAC1B,CACA,EAEAy4D,GAAWv5D,UAAUw5D,UAAY,SAAUnyD,GAC1C,IAAIW,EAAOrF,KAEXA,KAAK2K,KAAKzF,SAAQ,SAAUR,EAAKc,GAChCH,EAAKnD,MAAMM,WAAWkgB,SAAShe,EAAKc,EACtC,GACA,EAEA4H,EAAU/P,UAAUytC,eAAe,aAAc8rB,IAGjD,IAAIE,GAAiB,SAASA,EAAehsC,GAC5C9qB,KAAKs8C,OAASxxB,EACd9qB,KAAK2N,KAAO,gBACb,EAEAmpD,GAAez5D,UAAUq5C,OAAS,WACjC,OAAO12C,KAAKs8C,OAAO7+C,GACpB,EAEAq5D,GAAez5D,UAAU6P,SAAW,WACnC,OAAOlN,KAAKs8C,OAAOz3C,KACpB,EAEAiyD,GAAez5D,UAAUoG,WAAa,WACrC,OAAOzD,KAAKs8C,OAAOh6C,OACpB,EAEAw0D,GAAez5D,UAAUgmB,QAAU,WAClC,OAAOrjB,KAAKs8C,OAAOj5B,QAAQ,KAC5B,EAEAyzC,GAAez5D,UAAUy5C,aAAe,WACvC,OAAO92C,KAAKs8C,OAAOxF,aAAa,KACjC,EAEAggB,GAAez5D,UAAU05D,eAAiB,WACzC,OAAO/2D,KAAKs8C,OAAOtyC,OAAShK,KAAKs8C,OAAOtyC,OAAOV,eAAiB,KACjE,EAEAwtD,GAAez5D,UAAUwQ,cAAgB,WACxC9B,QAAQC,KAAK,mFACb,OAAOhM,KAAKs8C,OAAO5zC,OACpB,EAEAouD,GAAez5D,UAAUyQ,UAAY,WACpC,OAAO9N,KAAKs8C,OAAO5zC,OACpB,EAEAouD,GAAez5D,UAAU0Q,KAAO,WAC/B/N,KAAKs8C,OAAOvuC,MACb,EAEA+oD,GAAez5D,UAAU2Q,KAAO,WAC/BhO,KAAKs8C,OAAOtuC,MACb,EAEA8oD,GAAez5D,UAAU4Q,OAAS,WACjCjO,KAAKs8C,OAAO0a,kBACb,EAEAF,GAAez5D,UAAUyK,SAAW,WACnC,OAAO9H,KAAKs8C,MACb,EAEAwa,GAAez5D,UAAUiR,SAAW,WACnC,OAAOtO,KAAKs8C,OAAO2a,aAAa/0D,KACjC,EAMA,IAAIggB,GAAQ,SAASA,EAAM+0C,EAAcjtD,EAAQslC,EAAO7xC,EAAKoH,EAAO4oD,EAAWyJ,GAE9El3D,KAAKi3D,aAAeA,EACpBj3D,KAAKgK,OAASA,EACdhK,KAAKvC,IAAMA,EACXuC,KAAKsvC,MAAQA,EACbtvC,KAAK6E,MAAQA,EACb7E,KAAKm3D,aAAe7nB,EAAQ2nB,EAAaG,eAAeh5D,OAAS,EACjE4B,KAAK2gB,OAAS3gB,KAAKm3D,aAAen3D,KAAKq3D,eAAiBr3D,KAAKs3D,QAC7Dt3D,KAAK2N,KAAO,QACZ3N,KAAKmrB,IAAM+rC,EACXl3D,KAAK2K,KAAO,GACZ3K,KAAK4oC,OAAS,GACd5oC,KAAKu3D,UAAY,GACjBv3D,KAAKytD,UAAYA,EACjBztD,KAAKw3D,gBAAkB,MACvBx3D,KAAKqH,OAAS,EACdrH,KAAKyuB,YAAc,EACnBzuB,KAAKuoB,YAAc,MACnBvoB,KAAKq2B,MAAQ,GACbr2B,KAAKuoB,YAAc,MACnBvoB,KAAKmE,QAAU,GACfnE,KAAKy3D,aAAe,MAEpBz3D,KAAK0I,QAAUwuD,EAAWA,EAASxuD,eAAiBuuD,EAAahd,UAAU3K,KAAW,YAAc2nB,EAAahd,UAAU3K,GAAS2nB,EAAahd,UAAU,GAE3Jj6C,KAAKyR,UAAY,KAEjBzR,KAAK03D,iBACL13D,KAAK23D,cAEL33D,KAAK43D,mBACN,EAEA11C,GAAM7kB,UAAUyiB,KAAO,WACtB,GAAI9f,KAAKu3D,UAAUn5D,OAAQ,CAC1B4B,KAAKu3D,UAAUryD,SAAQ,SAAU4lB,GAChCA,EAAMhL,MACT,GACA,KAAQ,CACN9f,KAAKsC,QAAU,MACftC,KAAKy3D,aAAe,MACpBz3D,KAAKw3D,gBAAkB,KACzB,CACA,EAEAt1C,GAAM7kB,UAAUq6D,eAAiB,WAChC,IAAIG,EAAQ70D,SAASC,cAAc,OACnC40D,EAAM30D,UAAUC,IAAI,mBAEpBnD,KAAKsC,QAAUU,SAASC,cAAc,OACtCjD,KAAKsC,QAAQY,UAAUC,IAAI,iBAC3BnD,KAAKsC,QAAQY,UAAUC,IAAI,mBAC3BnD,KAAKsC,QAAQY,UAAUC,IAAI,yBAA2BnD,KAAKsvC,OAC3DtvC,KAAKsC,QAAQ8P,aAAa,OAAQ,YAElCpS,KAAKy3D,aAAez0D,SAASC,cAAc,OAC3CjD,KAAKy3D,aAAav0D,UAAUC,IAAI,0BAChCnD,KAAKy3D,aAAa3wD,YAAY+wD,GAG9B,GAAI73D,KAAKi3D,aAAa/0D,MAAMkB,QAAQ2O,cAAgB,OAAS/R,KAAKi3D,aAAa/0D,MAAMgC,UAAU,WAAY,CAC1GlE,KAAKi3D,aAAa/0D,MAAMiC,QAAQ6N,QAAQ8lD,sBAAsB93D,KAChE,CACA,EAEAkiB,GAAM7kB,UAAUu6D,kBAAoB,WACnC,IAAIG,EAAU/3D,KAEd,IAAIsvC,EAAQtvC,KAAKsvC,MAAQ,EACzB,GAAItvC,KAAKi3D,aAAae,eAAiBh4D,KAAKi3D,aAAae,cAAc1oB,GAAQ,CAC9EtvC,KAAKi3D,aAAae,cAAc1oB,GAAOpqC,SAAQ,SAAUnH,GACxDg6D,EAAQE,aAAal6D,EAAOuxC,EAC/B,GACA,CACA,EAEAptB,GAAM7kB,UAAUs6D,YAAc,WAC7B,IAAItyD,EAAOrF,KACPsU,EACAC,EACAC,EACA0jD,EAGJ,GAAI7yD,EAAK4xD,aAAa/0D,MAAMkB,QAAQ08B,WAAY,CAC/Cz6B,EAAK/C,QAAQ8R,iBAAiB,SAAS,SAAUC,GAChDhP,EAAK4xD,aAAa/0D,MAAMkB,QAAQ08B,WAAWpiC,KAAK2H,EAAK4xD,aAAa/0D,MAAOmS,EAAGhP,EAAKiE,eACpF,GACA,CAEC,GAAIjE,EAAK4xD,aAAa/0D,MAAMkB,QAAQ28B,cAAe,CAClD16B,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GACnDhP,EAAK4xD,aAAa/0D,MAAMkB,QAAQ28B,cAAcriC,KAAK2H,EAAK4xD,aAAa/0D,MAAOmS,EAAGhP,EAAKiE,eACvF,GACA,CAEC,GAAIjE,EAAK4xD,aAAa/0D,MAAMkB,QAAQ48B,aAAc,CACjD36B,EAAK/C,QAAQ8R,iBAAiB,eAAe,SAAUC,GACtDhP,EAAK4xD,aAAa/0D,MAAMkB,QAAQ48B,aAAatiC,KAAK2H,EAAK4xD,aAAa/0D,MAAOmS,EAAGhP,EAAKiE,eACtF,GACA,CAEC,IAAKjE,EAAK4xD,aAAa/0D,MAAMkB,QAAQ68B,kBAAoB56B,EAAK4xD,aAAa/0D,MAAMkB,QAAQ88B,iBAAmB76B,EAAK4xD,aAAa/0D,MAAMgC,UAAU,QAAS,CACtJmB,EAAK4xD,aAAa/0D,MAAMiC,QAAQuR,KAAKyiD,gBAAgBz6D,KAAK2H,EAAK4xD,aAAa/0D,MAAMiC,QAAQuR,KAAMrQ,EAClG,CAEC,GAAIA,EAAK4xD,aAAa/0D,MAAMkB,QAAQ+8B,SAAU,CAE7C3rB,EAAM,MAENnP,EAAK/C,QAAQ8R,iBAAiB,cAAc,SAAUC,GACrDG,EAAM,IACT,GAAK,CAAEK,QAAS,OAEdxP,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GACnD,GAAIG,EAAK,CACRnP,EAAK4xD,aAAa/0D,MAAMkB,QAAQ+8B,SAAS9rB,EAAGhP,EAAKiE,eACrD,CAEGkL,EAAM,KACT,GACA,CAEC,GAAInP,EAAK4xD,aAAa/0D,MAAMkB,QAAQg9B,YAAa,CAEhD9rB,EAAS,KAETjP,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GAEnD,GAAIC,EAAQ,CACXS,aAAaT,GACbA,EAAS,KAETjP,EAAK4xD,aAAa/0D,MAAMkB,QAAQg9B,YAAY/rB,EAAGhP,EAAKiE,eACxD,KAAU,CAENgL,EAASU,YAAW,WACnBD,aAAaT,GACbA,EAAS,IACd,GAAO,IACP,CACA,GACA,CAEC,GAAIjP,EAAK4xD,aAAa/0D,MAAMkB,QAAQi9B,aAAc,CAEjD9rB,EAAU,KAEVlP,EAAK/C,QAAQ8R,iBAAiB,cAAc,SAAUC,GACrDU,aAAaR,GAEbA,EAAUS,YAAW,WACpBD,aAAaR,GACbA,EAAU,KACVC,EAAM,MACNnP,EAAK4xD,aAAa/0D,MAAMkB,QAAQi9B,aAAahsB,EAAGhP,EAAKiE,eACzD,GAAM,IACN,GAAK,CAAEuL,QAAS,OAEdxP,EAAK/C,QAAQ8R,iBAAiB,YAAY,SAAUC,GACnDU,aAAaR,GACbA,EAAU,IACb,GACA,CAEC,GAAIlP,EAAK4xD,aAAa/0D,MAAMkB,QAAQq8B,mBAAoB,CACvDy4B,EAAgB7yD,EAAK4xD,aAAa/0D,MAAMkB,QAAQq8B,oBAAsB,QAAUp6B,EAAKoyD,aAAepyD,EAAK/C,QAEzG41D,EAAc9jD,iBAAiB,SAAS,SAAUC,GACjDA,EAAE0C,kBACF1C,EAAEuvC,2BACFv+C,EAAK2xD,kBACR,GACA,CACA,EAEA90C,GAAM7kB,UAAU46D,aAAe,SAAUG,EAAS9oB,GACjD,IAAI+oB,EAAW/oB,EAAQ,IAAM8oB,EAC7B,IAAIttC,EAAQ,IAAI5I,GAAMliB,KAAKi3D,aAAcj3D,KAAMsvC,EAAO8oB,EAASp4D,KAAKi3D,aAAaG,eAAe9nB,GAAOzqC,MAAO7E,KAAKi3D,aAAaqB,gBAAgBhpB,IAAUtvC,KAAKi3D,aAAaqB,gBAAgB,GAAIt4D,KAAKmrB,IAAMnrB,KAAKmrB,IAAIyd,OAAOyvB,GAAY,OAEvOr4D,KAAK4oC,OAAOyvB,GAAYvtC,EACxB9qB,KAAKu3D,UAAUtyD,KAAK6lB,EACrB,EAEA5I,GAAM7kB,UAAUg6D,eAAiB,SAAU3yD,GAE1C,IAAI4qC,EAAQtvC,KAAKsvC,MAAQ,EAEzB,GAAItvC,KAAKm3D,aAAc,CACtB,IAAIiB,EAAUp4D,KAAKi3D,aAAaG,eAAe9nB,GAAO0f,KAAKtqD,EAAI+b,WAC3D43C,EAAW/oB,EAAQ,IAAM8oB,EAE7B,GAAIp4D,KAAKi3D,aAAae,eAAiBh4D,KAAKi3D,aAAae,cAAc1oB,GAAQ,CAC9E,GAAItvC,KAAK4oC,OAAOyvB,GAAW,CAC1Br4D,KAAK4oC,OAAOyvB,GAAU13C,OAAOjc,EACjC,CACA,KAAS,CACN,IAAK1E,KAAK4oC,OAAOyvB,GAAW,CAC3Br4D,KAAKi4D,aAAaG,EAAS9oB,EAC/B,CAEGtvC,KAAK4oC,OAAOyvB,GAAU13C,OAAOjc,EAChC,CACA,CACA,EAEAwd,GAAM7kB,UAAUi6D,QAAU,SAAU5yD,GACnC1E,KAAK2K,KAAK1F,KAAKP,GACfA,EAAIP,QAAQ2mB,MAAQ9qB,IACrB,EAEAkiB,GAAM7kB,UAAUklB,UAAY,SAAU7d,EAAK9C,EAAI+H,GAC9C,IAAIrF,EAAOtE,KAAKu4D,eAAe,IAE/B7zD,EAAIsoB,WAAW1oB,GAEf,IAAIoG,EAAU1K,KAAK2K,KAAK7J,QAAQc,GAEhC,GAAI8I,GAAW,EAAG,CACjB,GAAIf,EAAO,CACV3J,KAAK2K,KAAKjE,OAAOgE,EAAU,EAAG,EAAGhG,EACpC,KAAS,CACN1E,KAAK2K,KAAKjE,OAAOgE,EAAS,EAAGhG,EAChC,CACA,KAAQ,CACN,GAAIiF,EAAO,CACV3J,KAAK2K,KAAK1F,KAAKP,EAClB,KAAS,CACN1E,KAAK2K,KAAK9D,QAAQnC,EACrB,CACA,CAECA,EAAIP,QAAQ2mB,MAAQ9qB,KAEpBA,KAAKw4D,8BAEL,GAAIx4D,KAAKi3D,aAAa/0D,MAAMgC,UAAU,gBAAkBlE,KAAKi3D,aAAa/0D,MAAMkB,QAAQyG,aAAe,QAAS,CAC/G7J,KAAKi3D,aAAa/0D,MAAMiC,QAAQ0F,YAAY6rC,YAAY11C,KAC1D,CAECA,KAAKi3D,aAAav2C,gBAAgB,KACnC,EAEAwB,GAAM7kB,UAAUo7D,aAAe,SAAU70D,GACxC5D,KAAKy3D,aAAazzD,MAAMC,WAAaL,EAErC5D,KAAKu3D,UAAUryD,SAAQ,SAAUoU,GAChCA,EAAMm/C,aAAa70D,EACrB,GACA,EAEAse,GAAM7kB,UAAUulB,YAAc,SAAUle,GAAK,EAG7Cwd,GAAM7kB,UAAUk7D,eAAiB,SAAUj0D,GAC1C,GAAItE,KAAK6E,MAAO,CACfP,EAAKtE,KAAK6E,OAAS7E,KAAKvC,GAC1B,KAAQ,CACNsO,QAAQC,KAAK,8FACf,CAEC,GAAIhM,KAAKgK,OAAQ,CAChB1F,EAAOtE,KAAKgK,OAAOuuD,eAAej0D,EACpC,CAEC,OAAOA,CACR,EAEA4d,GAAM7kB,UAAUilB,UAAY,SAAU5d,GACrC,IAAIvG,EAAQ6B,KAAK2K,KAAK7J,QAAQ4D,GAC9B,IAAI3B,EAAK2B,EAAIjB,aAEb,GAAItF,GAAS,EAAG,CACf6B,KAAK2K,KAAKjE,OAAOvI,EAAO,EAC1B,CAEC,IAAK6B,KAAKi3D,aAAa/0D,MAAMkB,QAAQ65B,cAAgBj9B,KAAK2K,KAAKvM,OAAQ,CACtE,GAAI4B,KAAKgK,OAAQ,CAChBhK,KAAKgK,OAAO0uD,YAAY14D,KAC3B,KAAS,CACNA,KAAKi3D,aAAayB,YAAY14D,KACjC,CAEEA,KAAKi3D,aAAav2C,gBAAgB,KACpC,KAAQ,CAEN,GAAI3d,EAAG4D,WAAY,CAClB5D,EAAG4D,WAAWrB,YAAYvC,EAC7B,CAEE/C,KAAKw4D,8BAEL,GAAIx4D,KAAKi3D,aAAa/0D,MAAMgC,UAAU,gBAAkBlE,KAAKi3D,aAAa/0D,MAAMkB,QAAQyG,aAAe,QAAS,CAC/G7J,KAAKi3D,aAAa/0D,MAAMiC,QAAQ0F,YAAY6rC,YAAY11C,KAC3D,CACA,CACA,EAEAkiB,GAAM7kB,UAAUq7D,YAAc,SAAU5tC,GACvC,IAAIutC,EAAWvtC,EAAMwkB,MAAQ,IAAMxkB,EAAMrtB,IACrCU,EAEJ,GAAI6B,KAAK4oC,OAAOyvB,GAAW,QACnBr4D,KAAK4oC,OAAOyvB,GAEnBl6D,EAAQ6B,KAAKu3D,UAAUz2D,QAAQgqB,GAE/B,GAAI3sB,GAAS,EAAG,CACf6B,KAAKu3D,UAAU7wD,OAAOvI,EAAO,EAChC,CAEE,IAAK6B,KAAKu3D,UAAUn5D,OAAQ,CAC3B,GAAI4B,KAAKgK,OAAQ,CAChBhK,KAAKgK,OAAO0uD,YAAY14D,KAC5B,KAAU,CACNA,KAAKi3D,aAAayB,YAAY14D,KAClC,CACA,CACA,CACA,EAEAkiB,GAAM7kB,UAAUs7D,kBAAoB,SAAUC,GAC7C,IAAI3vD,EAAS,GAEbA,EAAOhE,KAAKjF,MAEZA,KAAK64D,UAEL,GAAI74D,KAAK0I,QAAS,CACjB,GAAI1I,KAAKu3D,UAAUn5D,OAAQ,CAC1B4B,KAAKu3D,UAAUryD,SAAQ,SAAU4lB,GAChC7hB,EAASA,EAAO4B,OAAOigB,EAAM6tC,kBAAkBC,GACnD,GACA,KAAS,CACN,IAAKA,GAAU54D,KAAKi3D,aAAa/0D,MAAMkB,QAAQyG,aAAe,SAAW7J,KAAKi3D,aAAa/0D,MAAMgC,UAAU,gBAAkBlE,KAAKi3D,aAAa/0D,MAAMiC,QAAQ0F,YAAY2sC,cAAe,CACvL,GAAIx2C,KAAKq2B,MAAMjZ,IAAK,CACnBpd,KAAKq2B,MAAMjZ,IAAIyR,gBACf7uB,KAAKq2B,MAAMjZ,IAAIwS,aACpB,CAEI5vB,KAAKq2B,MAAMjZ,IAAMpd,KAAKi3D,aAAa/0D,MAAMiC,QAAQ0F,YAAYmsC,eAAeh2C,KAAK2K,MACjF1B,EAAOhE,KAAKjF,KAAKq2B,MAAMjZ,IAC3B,CAEGnU,EAASA,EAAO4B,OAAO7K,KAAK2K,MAE5B,IAAKiuD,GAAU54D,KAAKi3D,aAAa/0D,MAAMkB,QAAQyG,aAAe,SAAW7J,KAAKi3D,aAAa/0D,MAAMgC,UAAU,gBAAkBlE,KAAKi3D,aAAa/0D,MAAMiC,QAAQ0F,YAAY4sC,iBAAkB,CAC1L,GAAIz2C,KAAKq2B,MAAMvC,OAAQ,CACtB9zB,KAAKq2B,MAAMvC,OAAOjF,gBAClB7uB,KAAKq2B,MAAMvC,OAAOlE,aACvB,CAEI5vB,KAAKq2B,MAAMvC,OAAS9zB,KAAKi3D,aAAa/0D,MAAMiC,QAAQ0F,YAAYosC,kBAAkBj2C,KAAK2K,MACvF1B,EAAOhE,KAAKjF,KAAKq2B,MAAMvC,OAC3B,CACA,CACA,KAAQ,CACN,IAAK9zB,KAAKu3D,UAAUn5D,QAAU4B,KAAKi3D,aAAa/0D,MAAMkB,QAAQyG,aAAe,QAAS,CAErF,GAAI7J,KAAKi3D,aAAa/0D,MAAMgC,UAAU,eAAgB,CAErD,IAAK00D,GAAU54D,KAAKi3D,aAAa/0D,MAAMiC,QAAQ0F,YAAY2sC,cAAe,CACzE,GAAIx2C,KAAKq2B,MAAMjZ,IAAK,CACnBpd,KAAKq2B,MAAMjZ,IAAIyR,gBACf7uB,KAAKq2B,MAAMjZ,IAAIwS,aACrB,CAEK,GAAI5vB,KAAKi3D,aAAa/0D,MAAMkB,QAAQs8B,qBAAsB,CACzD1/B,KAAKq2B,MAAMjZ,IAAMpd,KAAKi3D,aAAa/0D,MAAMiC,QAAQ0F,YAAYmsC,eAAeh2C,KAAK2K,MACjF1B,EAAOhE,KAAKjF,KAAKq2B,MAAMjZ,IAC7B,CACA,CAEI,IAAKw7C,GAAU54D,KAAKi3D,aAAa/0D,MAAMiC,QAAQ0F,YAAY4sC,iBAAkB,CAC5E,GAAIz2C,KAAKq2B,MAAMvC,OAAQ,CACtB9zB,KAAKq2B,MAAMvC,OAAOjF,gBAClB7uB,KAAKq2B,MAAMvC,OAAOlE,aACxB,CAEK,GAAI5vB,KAAKi3D,aAAa/0D,MAAMkB,QAAQs8B,qBAAsB,CACzD1/B,KAAKq2B,MAAMvC,OAAS9zB,KAAKi3D,aAAa/0D,MAAMiC,QAAQ0F,YAAYosC,kBAAkBj2C,KAAK2K,MACvF1B,EAAOhE,KAAKjF,KAAKq2B,MAAMvC,OAC7B,CACA,CACA,CACA,CACA,CAEC,OAAO7qB,CACR,EAEAiZ,GAAM7kB,UAAUojB,QAAU,SAAU/X,EAAS0a,GACzC,IACCna,EAAS,GAEbjJ,KAAK64D,UAEL,IAAKnwD,GAAWA,GAAW1I,KAAK0I,QAAS,CACxC1I,KAAK2K,KAAKzF,SAAQ,SAAUR,GAC3BuE,EAAOhE,KAAKP,EAAI+b,QAAQ2C,GAAa,QACxC,GACA,CAEC,OAAOna,CACR,EAQAiZ,GAAM7kB,UAAUk/C,YAAc,WAC7B,IAAIrX,EAAQ,EAEZ,GAAIllC,KAAKu3D,UAAUn5D,OAAQ,CAC1B4B,KAAKu3D,UAAUryD,SAAQ,SAAU4lB,GAChCoa,GAASpa,EAAMyxB,aAClB,GACA,KAAQ,CACNrX,EAAQllC,KAAK2K,KAAKvM,MACpB,CACC,OAAO8mC,CACR,EAEAhjB,GAAM7kB,UAAU25D,iBAAmB,WAClC,GAAIh3D,KAAK0I,QAAS,CACjB1I,KAAKgO,MACP,KAAQ,CACNhO,KAAK+N,MACP,CACA,EAEAmU,GAAM7kB,UAAU2Q,KAAO,WACtBhO,KAAK0I,QAAU,MAEf,GAAI1I,KAAKi3D,aAAa/0D,MAAMM,WAAW6jB,iBAAmB,YAAcrmB,KAAKi3D,aAAa/0D,MAAMkB,QAAQ2b,WAAY,CAEnH/e,KAAKsC,QAAQY,UAAUikB,OAAO,2BAE9B,GAAInnB,KAAKu3D,UAAUn5D,OAAQ,CAC1B4B,KAAKu3D,UAAUryD,SAAQ,SAAU4lB,GAEhC,IAAIngB,EAAOmgB,EAAM6tC,oBAEjBhuD,EAAKzF,SAAQ,SAAUR,GACtBA,EAAImqB,eACT,GACA,GACA,KAAS,CACN7uB,KAAK2K,KAAKzF,SAAQ,SAAUR,GAC3B,IAAI0Z,EAAQ1Z,EAAIjB,aAChB2a,EAAMzX,WAAWrB,YAAY8Y,EACjC,GACA,CAEEpe,KAAKi3D,aAAa/0D,MAAMM,WAAW6iB,eAAerlB,KAAKi3D,aAAav2C,kBAAmB1gB,KAAKi3D,aAAa/xC,mBAEzGllB,KAAKi3D,aAAa/0D,MAAMM,WAAWukB,kCACrC,KAAQ,CACN/mB,KAAKi3D,aAAav2C,gBAAgB,KACpC,CAEC1gB,KAAKi3D,aAAa/0D,MAAMkB,QAAQy8B,uBAAuBniC,KAAKsC,KAAKkC,MAAOlC,KAAKsJ,eAAgB,MAC9F,EAEA4Y,GAAM7kB,UAAU0Q,KAAO,WACtB,IAAI1I,EAAOrF,KAEXqF,EAAKqD,QAAU,KAEf,GAAI1I,KAAKi3D,aAAa/0D,MAAMM,WAAW6jB,iBAAmB,YAAcrmB,KAAKi3D,aAAa/0D,MAAMkB,QAAQ2b,WAAY,CAEnH/e,KAAKsC,QAAQY,UAAUC,IAAI,2BAE3B,IAAIozB,EAAOlxB,EAAK5B,aAEhB,GAAIzD,KAAKu3D,UAAUn5D,OAAQ,CAC1B4B,KAAKu3D,UAAUryD,SAAQ,SAAU4lB,GAChC,IAAIngB,EAAOmgB,EAAM6tC,oBAEjBhuD,EAAKzF,SAAQ,SAAUR,GACtB,IAAI0Z,EAAQ1Z,EAAIjB,aAChB8yB,EAAK5vB,WAAW9D,aAAaub,EAAOmY,EAAK3vB,aACzClC,EAAIpB,aACJizB,EAAOnY,CACZ,GACA,GACA,KAAS,CACN/Y,EAAKsF,KAAKzF,SAAQ,SAAUR,GAC3B,IAAI0Z,EAAQ1Z,EAAIjB,aAChB8yB,EAAK5vB,WAAW9D,aAAaub,EAAOmY,EAAK3vB,aACzClC,EAAIpB,aACJizB,EAAOnY,CACX,GACA,CAEEpe,KAAKi3D,aAAa/0D,MAAMM,WAAW6iB,eAAerlB,KAAKi3D,aAAav2C,kBAAmB1gB,KAAKi3D,aAAa/xC,mBAEzGllB,KAAKi3D,aAAa/0D,MAAMM,WAAWukB,kCACrC,KAAQ,CACN/mB,KAAKi3D,aAAav2C,gBAAgB,KACpC,CAEC1gB,KAAKi3D,aAAa/0D,MAAMkB,QAAQy8B,uBAAuBniC,KAAKsC,KAAKkC,MAAOlC,KAAKsJ,eAAgB,KAC9F,EAEA4Y,GAAM7kB,UAAUw7D,QAAU,WACzB,IAAIv0D,EAAO,GAEX,UAAWtE,KAAK0I,SAAW,WAAY,CAEtC1I,KAAK2K,KAAKzF,SAAQ,SAAUR,GAC3BJ,EAAKW,KAAKP,EAAI+b,UACjB,IAEEzgB,KAAK0I,QAAU1I,KAAK0I,QAAQ1I,KAAKvC,IAAKuC,KAAKu8C,cAAej4C,EAAMtE,KAAKsJ,eACvE,CACA,EAEA4Y,GAAM7kB,UAAUs4C,YAAc,SAAUjxC,GACvC,IAAIM,EAAQ,MACZ,GAAIhF,KAAKu3D,UAAUn5D,OAAQ,CAC1B4B,KAAKu3D,UAAUryD,SAAQ,SAAU4lB,GAChC,IAAI9rB,EAAS8rB,EAAM6qB,YAAYjxC,GAE/B,GAAI1F,EAAQ,CACXgG,EAAQhG,CACZ,CACA,GACA,KAAQ,CACN,GAAIgB,KAAK2K,KAAKnK,MAAK,SAAU2gB,GAC5B,OAAOA,IAASzc,CACnB,IAAM,CACHM,EAAQhF,IACX,CACA,CAEC,OAAOgF,CACR,EAEAkd,GAAM7kB,UAAUy5C,aAAe,SAAUrlC,GACxC,IAAIxI,EAAS,GAEbjJ,KAAKu3D,UAAUryD,SAAQ,SAAUoU,GAChCrQ,EAAOhE,KAAKwM,EAAY6H,EAAMhQ,eAAiBgQ,EACjD,IAEC,OAAOrQ,CACR,EAEAiZ,GAAM7kB,UAAUgmB,QAAU,SAAUy1C,GACnC,IAAI7vD,EAAS,GAEbjJ,KAAK2K,KAAKzF,SAAQ,SAAUR,GAC3BuE,EAAOhE,KAAK6zD,EAAYp0D,EAAI4E,eAAiB5E,EAC/C,IAEC,OAAOuE,CACR,EAEAiZ,GAAM7kB,UAAUm7D,4BAA8B,WAC7C,IAAIl0D,EAAO,GAEXtE,KAAK2K,KAAKzF,SAAQ,SAAUR,GAC3BJ,EAAKW,KAAKP,EAAI+b,UAChB,IAECzgB,KAAKw3D,gBAAkBx3D,KAAKytD,UAAUztD,KAAKvC,IAAKuC,KAAKu8C,cAAej4C,EAAMtE,KAAKsJ,gBAE/E,MAAOtJ,KAAKsC,QAAQQ,WAAY,CAC/B9C,KAAKsC,QAAQgD,YAAYtF,KAAKsC,QAAQQ,WACxC,CAAE,UAAW9C,KAAKw3D,kBAAoB,SAAU,CAC9Cx3D,KAAKsC,QAAQyV,UAAY/X,KAAKw3D,eAChC,KAAQ,CACNx3D,KAAKsC,QAAQwE,YAAY9G,KAAKw3D,gBAChC,CAECx3D,KAAKsC,QAAQO,aAAa7C,KAAKy3D,aAAcz3D,KAAKsC,QAAQQ,WAC3D,EAEAof,GAAM7kB,UAAU07D,QAAU,WACzB,IAAIn7D,EAAOyC,UAAUjC,OAAS,GAAKiC,UAAU,KAAO3B,UAAY2B,UAAU,GAAK,GAE/EzC,EAAKiJ,QAAQ7G,KAAKvC,KAClB,GAAIuC,KAAKgK,OAAQ,CAChBhK,KAAKgK,OAAO+uD,QAAQn7D,EACtB,CACC,OAAOA,CACR,EAGAskB,GAAM7kB,UAAUoG,WAAa,WAC5BzD,KAAKg5D,aAAe,MAEpBh5D,KAAK64D,UAEL,GAAI74D,KAAK0I,QAAS,CACjB1I,KAAKsC,QAAQY,UAAUC,IAAI,0BAC7B,KAAQ,CACNnD,KAAKsC,QAAQY,UAAUikB,OAAO,0BAChC,CAEC,IAAK,IAAI3hB,EAAI,EAAGA,EAAIxF,KAAKsC,QAAQ22D,WAAW76D,SAAUoH,EAAG,CACxDxF,KAAKsC,QAAQ22D,WAAWzzD,GAAGmB,WAAWrB,YAAYtF,KAAKsC,QAAQ22D,WAAWzzD,GAC5E,CAECxF,KAAKw4D,8BAIL,OAAOx4D,KAAKsC,OACb,EAEA4f,GAAM7kB,UAAUwxB,cAAgB,WAC/B,GAAI7uB,KAAKsC,SAAWtC,KAAKsC,QAAQqE,WAAY,CAC5C3G,KAAKsC,QAAQqE,WAAWrB,YAAYtF,KAAKsC,QAC3C,CACA,EAGA4f,GAAM7kB,UAAUuqB,gBAAkB,WACjC5nB,KAAKmwB,UAAUnwB,KAAKsC,QAAQiK,aAC7B,EAEA2V,GAAM7kB,UAAUiG,WAAa,SAAU6J,GACtC,IAAKnN,KAAKuoB,aAAepb,EAAO,CAC/BnN,KAAK4nB,kBACL5nB,KAAKuoB,YAAc,IACrB,CACA,EAEArG,GAAM7kB,UAAUyI,aAAe,WAC9B9F,KAAKuoB,YAAc,MACnBvoB,KAAKqH,OAAS,EAEd,GAAI+F,EAAU/P,UAAUgQ,QAAQC,UAAUtN,KAAKsC,SAAU,CACxDtC,KAAKsD,WAAW,KAClB,CACA,EAEA4e,GAAM7kB,UAAU8yB,UAAY,SAAU9oB,GACrC,GAAIrH,KAAKqH,QAAUA,EAAQ,CAC1BrH,KAAKqH,OAASA,EACdrH,KAAKyuB,YAAczuB,KAAKsC,QAAQkW,YAClC,CACA,EAGA0J,GAAM7kB,UAAUkK,UAAY,WAC3B,OAAOvH,KAAKyuB,WACb,EAEAvM,GAAM7kB,UAAUqkB,SAAW,WAC1B,OAAO1hB,IACR,EAEAkiB,GAAM7kB,UAAU4yB,mBAAqB,WAAY,EACjD/N,GAAM7kB,UAAUwc,WAAa,WAAY,EACzCqI,GAAM7kB,UAAUyc,cAAgB,WAAY,EAC5CoI,GAAM7kB,UAAUuc,gBAAkB,WAAY,EAG9CsI,GAAM7kB,UAAUiM,aAAe,WAC9B,IAAKtJ,KAAKyR,UAAW,CACpBzR,KAAKyR,UAAY,IAAIqlD,GAAe92D,KACtC,CAEC,OAAOA,KAAKyR,SACb,EAMA,IAAIynD,GAAY,SAASA,EAAUh3D,GAElClC,KAAKkC,MAAQA,EAEblC,KAAKo3D,eAAiB,MACtBp3D,KAAKi6C,UAAY,CAAC,WACjB,OAAO,KACT,GACCj6C,KAAKs4D,gBAAkB,CAAC,WACvB,MAAO,EACT,GACCt4D,KAAKu3D,UAAY,GACjBv3D,KAAKg4D,cAAgB,MACrBh4D,KAAK4oC,OAAS,GACd5oC,KAAKqgB,aAAe,CACrB,EAGA64C,GAAU77D,UAAUiG,WAAa,WAChC,IAAI+B,EAAOrF,KACPid,EAAU5X,EAAKnD,MAAMkB,QAAQ6Z,QAC7Bg9B,EAAY50C,EAAKnD,MAAMkB,QAAQ45B,eAC/BE,EAAc73B,EAAKnD,MAAMkB,QAAQ85B,YAErCl9B,KAAKg4D,cAAgB3yD,EAAKnD,MAAMkB,QAAQ65B,YAExC,GAAIp9B,MAAMkF,QAAQkY,IAAYpd,MAAMkF,QAAQm4B,IAAgBjgB,EAAQ7e,OAAS8+B,EAAY9+B,OAAQ,CAChG2N,QAAQC,KAAK,gFACf,CAEC3G,EAAKizD,gBAAkB,CAAC,WACvB,MAAO,EACT,GACCt4D,KAAKi6C,UAAY,CAAC,WACjB,OAAO,KACT,GAEC50C,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,eAAe,SAAU8lD,EAAW7qB,GACpEjpC,EAAKizD,gBAAgB,GAAK,SAAUv6D,EAAOmnC,EAAO5gC,GAEjD,cAAevG,IAAU,YAAc,GAAKA,GAAS,UAAYmnC,EAAQ,KAAOA,IAAU,EAAIi0B,EAAY7qB,EAAK1F,OAAO8G,OAAS,UAClI,CACA,IAEC1vC,KAAKo3D,eAAiB,GAEtB,GAAIv3D,MAAMkF,QAAQkY,IAAYA,EAAS,CACtC,GAAIjd,KAAKkC,MAAMgC,UAAU,gBAAkBlE,KAAKkC,MAAMkB,QAAQyG,aAAe,SAAW7J,KAAKkC,MAAMkB,QAAQyG,aAAe,OAAQ,CACjI7J,KAAKkC,MAAMiC,QAAQ0F,YAAY0rC,aAClC,CACA,KAAQ,CACN,GAAIv1C,KAAKkC,MAAMgC,UAAU,gBAAkBlE,KAAKkC,MAAMkB,QAAQyG,aAAe,QAAS,CAErF,IAAItF,EAAOvE,KAAKkC,MAAMkI,cAAcxB,iBAEpCrE,EAAKW,SAAQ,SAAUN,GACtB,GAAIA,EAAIoB,WAAWkO,QAAS,CAC3B7O,EAAKnD,MAAMiC,QAAQ0F,YAAYurC,kBACpC,CAEI,GAAIxwC,EAAIoB,WAAWmO,WAAY,CAC9B9O,EAAKnD,MAAMiC,QAAQ0F,YAAYyrC,qBACpC,CACA,GACA,CACA,CAEC,IAAKz1C,MAAMkF,QAAQkY,GAAU,CAC5BA,EAAU,CAACA,EACb,CAECA,EAAQ/X,SAAQ,SAAU4lB,EAAOtlB,GAChC,IAAI4zD,EAAYjzD,EAEhB,UAAW2kB,GAAS,WAAY,CAC/BsuC,EAAatuC,CAChB,KAAS,CACN3kB,EAASd,EAAKnD,MAAMkI,cAAcpC,iBAAiB8iB,GAEnD,GAAI3kB,EAAQ,CACXizD,EAAa,SAASA,EAAW90D,GAChC,OAAO6B,EAAO+J,cAAc5L,EACjC,CACA,KAAU,CACN80D,EAAa,SAASA,EAAW90D,GAChC,OAAOA,EAAKwmB,EACjB,CACA,CACA,CAEEzlB,EAAK+xD,eAAenyD,KAAK,CACxBJ,aAAcimB,IAAU,WAAa,MAAQA,EAC7CkkC,KAAMoK,EACNrwB,OAAQ1jC,EAAK2yD,cAAgB3yD,EAAK2yD,cAAcxyD,GAAK,OAExD,IAEC,GAAIy0C,EAAW,CAEd,IAAKp6C,MAAMkF,QAAQk1C,GAAY,CAC9BA,EAAY,CAACA,EAChB,CAEEA,EAAU/0C,SAAQ,SAAUoqC,GAI9B,IAEEjqC,EAAK40C,UAAYA,CACnB,CAEC,GAAI/c,EAAa,CAChB73B,EAAKizD,gBAAkBz4D,MAAMkF,QAAQm4B,GAAeA,EAAc,CAACA,EACrE,CAECl9B,KAAKuoB,YAAc,IACpB,EAEA2wC,GAAU77D,UAAU8nB,gBAAkB,SAAUhnB,GAC/C6B,KAAKqgB,aAAeliB,CACrB,EAEA+6D,GAAU77D,UAAU6nB,gBAAkB,WACrC,OAAOllB,KAAKqgB,YACb,EAGA64C,GAAU77D,UAAUgmB,QAAU,SAAU1Y,GACvC,GAAI3K,KAAKo3D,eAAeh5D,OAAQ,CAE/B4B,KAAKkC,MAAMkB,QAAQu8B,aAAajiC,KAAKsC,KAAKkC,OAE1ClC,KAAKq5D,eAAe1uD,GAEpB,GAAI3K,KAAKkC,MAAMkB,QAAQw8B,YAAa,CACnC5/B,KAAKkC,MAAMkB,QAAQw8B,YAAYliC,KAAKsC,KAAKkC,MAAOlC,KAAK+qB,UAAU,MAClE,CAEE,OAAO/qB,KAAK0gB,iBACd,KAAQ,CACN,OAAO/V,EAAKma,MAAM,EACpB,CACA,EAEAo0C,GAAU77D,UAAU0tB,UAAY,SAAU+tC,GACzC,IAAIQ,EAAkB,GAEtBt5D,KAAKu3D,UAAUryD,SAAQ,SAAU4lB,GAChCwuC,EAAgBr0D,KAAK6zD,EAAYhuC,EAAMxhB,eAAiBwhB,EAC1D,IAEC,OAAOwuC,CACR,EAEAJ,GAAU77D,UAAUw4C,eAAiB,SAAU/qB,GAC9C,IAAIyuC,EAAUv5D,KAEd,IAAIs5D,EAAkB,GAEtB,IAAKxuC,EAAO,CACXA,EAAQ9qB,IACV,CAEC8qB,EAAMysC,UAAUryD,SAAQ,SAAUoU,GACjC,GAAIA,EAAMi+C,UAAUn5D,OAAQ,CAC3Bk7D,EAAkBA,EAAgBzuD,OAAO0uD,EAAQ1jB,eAAev8B,GACnE,KAAS,CACNggD,EAAgBr0D,KAAKqU,EACxB,CACA,IAEC,OAAOggD,CACR,EAEAJ,GAAU77D,UAAUyiB,KAAO,WAC1B9f,KAAKu3D,UAAUryD,SAAQ,SAAU4lB,GAChCA,EAAMhL,MACR,GACA,EAEAo5C,GAAU77D,UAAUm8D,kBAAoB,SAAUjC,GACjD,IAAIlyD,EAAOrF,KACX,IAAIy5D,EAAgB,GAEpBlC,EAAUryD,SAAQ,SAAU4lB,GAC3B,IAAIoS,EAAc,GAClBA,EAAYoS,MAAQ,EACpBpS,EAAYw8B,SAAW,EACvBx8B,EAAYy8B,cAAgB,GAC5B,IAAIre,EAAY,GAEhB,GAAIxwB,EAAMqsC,aAAc,CACvB7b,EAAYj2C,EAAKm0D,kBAAkB1uC,EAAMysC,WAEzCr6B,EAAYoS,MAAQxkB,EAAMwkB,MAC1BpS,EAAYw8B,SAAWpe,EAAUl9C,OAAS0sB,EAAMysC,UAAUn5D,OAC1D8+B,EAAYy8B,cAAgB7uC,EAAM2iC,UAAU3iC,EAAMrtB,IAAKy/B,EAAYw8B,SAAU5uC,EAAMngB,KAAMmgB,GAEzF2uC,EAAcx0D,KAAKi4B,GACnBu8B,EAAgBA,EAAc5uD,OAAOywC,EACxC,KAAS,CACNpe,EAAYoS,MAAQxkB,EAAMwkB,MAC1BpS,EAAYy8B,cAAgB7uC,EAAM2iC,UAAU3iC,EAAMrtB,IAAKqtB,EAAMngB,KAAKvM,OAAQ0sB,EAAMngB,KAAMmgB,GACtFoS,EAAYw8B,SAAW5uC,EAAMzH,UAAUjlB,OAEvCq7D,EAAcx0D,KAAKi4B,GAEnBpS,EAAMzH,UAAUne,SAAQ,SAAUR,GACjC+0D,EAAcx0D,KAAKP,EAAI+b,QAAQ,QACnC,GACA,CACA,IAEC,OAAOg5C,CACR,EAEAP,GAAU77D,UAAU4rC,eAAiB,WAEpC,OAAOjpC,KAAKw5D,kBAAkBx5D,KAAKu3D,UACpC,EAEA2B,GAAU77D,UAAUs4C,YAAc,SAAUjxC,GAC3C,IAAIM,EAAQ,MAEZhF,KAAKu3D,UAAUryD,SAAQ,SAAU4lB,GAChC,IAAI9rB,EAAS8rB,EAAM6qB,YAAYjxC,GAE/B,GAAI1F,EAAQ,CACXgG,EAAQhG,CACX,CACA,IAEC,OAAOgG,CACR,EAEAk0D,GAAU77D,UAAUyqB,YAAc,WACjC,OAAO9nB,KAAKu3D,UAAUn5D,MACvB,EAEA86D,GAAU77D,UAAUg8D,eAAiB,SAAU1uD,GAC9C,IAAItF,EAAOrF,KACP45D,EAAYv0D,EAAKujC,OAErBvjC,EAAKujC,OAAS,GACdvjC,EAAKkyD,UAAY,GAEjB,GAAIv3D,KAAKg4D,eAAiBh4D,KAAKg4D,cAAc,GAAI,CAChDh4D,KAAKg4D,cAAc,GAAG9yD,SAAQ,SAAUnH,GACvCsH,EAAKw0D,YAAY97D,EAAO,EAAG67D,EAC9B,IAEEjvD,EAAKzF,SAAQ,SAAUR,GACtBW,EAAKy0D,yBAAyBp1D,EAAKk1D,EACtC,GACA,KAAQ,CACNjvD,EAAKzF,SAAQ,SAAUR,GACtBW,EAAKoc,iBAAiB/c,EAAKk1D,EAC9B,GACA,CACA,EAEAV,GAAU77D,UAAUw8D,YAAc,SAAUzB,EAAS9oB,EAAOsqB,GAC3D,IAAIvB,EAAW/oB,EAAQ,IAAM8oB,EACzBttC,EAEJ8uC,EAAYA,GAAa,GAEzB9uC,EAAQ,IAAI5I,GAAMliB,KAAM,MAAOsvC,EAAO8oB,EAASp4D,KAAKo3D,eAAe,GAAGvyD,MAAO7E,KAAKs4D,gBAAgB,GAAIsB,EAAUvB,IAEhHr4D,KAAK4oC,OAAOyvB,GAAYvtC,EACxB9qB,KAAKu3D,UAAUtyD,KAAK6lB,EACrB,EAaAouC,GAAU77D,UAAUy8D,yBAA2B,SAAUp1D,EAAKk1D,GAC7D,IAAIxB,EAAUp4D,KAAKo3D,eAAe,GAAGpI,KAAKtqD,EAAI+b,WAC1C43C,EAAW,KAAOD,EAEtB,GAAIp4D,KAAK4oC,OAAOyvB,GAAW,CAC1Br4D,KAAK4oC,OAAOyvB,GAAU13C,OAAOjc,EAC/B,CACA,EAEAw0D,GAAU77D,UAAUokB,iBAAmB,SAAU/c,EAAKk1D,GACrD,IAAIxB,EAAUp4D,KAAKo3D,eAAe,GAAGpI,KAAKtqD,EAAI+b,WAC1Cs5C,GAAkB/5D,KAAK4oC,OAAO,KAAOwvB,GAEzC,GAAI2B,EAAgB,CACnB/5D,KAAK65D,YAAYzB,EAAS,EAAGwB,EAC/B,CAEC55D,KAAK4oC,OAAO,KAAOwvB,GAASz3C,OAAOjc,GAEnC,OAAQq1D,CACT,EAEAb,GAAU77D,UAAU6zB,mBAAqB,SAAUxsB,GAClD,IAAIs1D,EAAct1D,EAAIgd,WAClBu4C,EAAeD,EAAYjB,UAC3BmB,EAAel6D,KAAKm6D,gBAAgBz1D,GACpC01D,EAAW,KAEf,IAAIA,EAAWH,EAAa77D,QAAU87D,EAAa97D,QAAU67D,EAAaI,OAAM,SAAU/3D,EAASnE,GAClG,OAAOmE,IAAY43D,EAAa/7D,EAClC,IAEC,IAAKi8D,EAAU,CACdJ,EAAY13C,UAAU5d,GACtB1E,KAAKyhB,iBAAiB/c,EAAKW,KAAKujC,QAChC5oC,KAAKkC,MAAMM,WAAWmd,kBAAkB,QAAS,MAAO,KAC1D,CACA,EAEAu5C,GAAU77D,UAAU88D,gBAAkB,SAAUz1D,GAC/C,IAAI41D,EAAY,GACZxkB,EAAUpxC,EAAI+b,UAClBzgB,KAAKo3D,eAAelyD,SAAQ,SAAUq1D,GACrCD,EAAUr1D,KAAKs1D,EAAQvL,KAAKlZ,GAC9B,IACC,OAAOwkB,CACR,EAEApB,GAAU77D,UAAUqjB,gBAAkB,SAAUvT,GAC5C,IAAC9H,EAAOrF,KACPiJ,EAAS,GAGb5D,EAAKkyD,UAAUryD,SAAQ,SAAU4lB,GAChC7hB,EAASA,EAAO4B,OAAOigB,EAAM6tC,oBAC/B,IAGC,GAAIxrD,EAAO,CAEV,IAAIkT,EAAehb,EAAKnD,MAAMM,WAAW6iB,eAAepc,EAAQjJ,KAAKklB,mBAErE,GAAI7E,IAAiB,KAAM,CAC1BrgB,KAAKmlB,gBAAgB9E,EACxB,CAEEhb,EAAKnD,MAAMM,WAAWmd,kBAAkB,QAAS,KAAM,KACzD,CAEC,OAAO1W,CACR,EAEAiwD,GAAU77D,UAAU8f,cAAgB,SAAUvZ,GAC7C,GAAI5D,KAAKkC,MAAMkB,QAAQwC,cAAe,CACrChC,GAAQ5D,KAAKkC,MAAM2D,QAAQmkB,WAC7B,CAECpmB,EAAOA,EAAO,KAEd5D,KAAKu3D,UAAUryD,SAAQ,SAAU4lB,GAChCA,EAAM2tC,aAAa70D,EACrB,GACA,EAEAs1D,GAAU77D,UAAUq7D,YAAc,SAAU5tC,GAC3C,IAAIutC,EAAWvtC,EAAMwkB,MAAQ,IAAMxkB,EAAMrtB,IACrCU,EAEJ,GAAI6B,KAAK4oC,OAAOyvB,GAAW,QACnBr4D,KAAK4oC,OAAOyvB,GAEnBl6D,EAAQ6B,KAAKu3D,UAAUz2D,QAAQgqB,GAE/B,GAAI3sB,GAAS,EAAG,CACf6B,KAAKu3D,UAAU7wD,OAAOvI,EAAO,EAChC,CACA,CACA,EAEAiP,EAAU/P,UAAUytC,eAAe,YAAaouB,IAChD,IAAIsB,GAAU,SAASA,EAAQt4D,GAC9BlC,KAAKkC,MAAQA,EAEblC,KAAKqf,QAAU,GACfrf,KAAK7B,OAAS,CACf,EAEAq8D,GAAQn9D,UAAUiiB,MAAQ,WACzBtf,KAAKqf,QAAU,GACfrf,KAAK7B,OAAS,CACf,EAEAq8D,GAAQn9D,UAAUyjB,OAAS,SAAUnT,EAAM8D,EAAWnN,GAErDtE,KAAKqf,QAAUrf,KAAKqf,QAAQyF,MAAM,EAAG9kB,KAAK7B,MAAQ,GAElD6B,KAAKqf,QAAQpa,KAAK,CACjB0I,KAAMA,EACN8D,UAAWA,EACXnN,KAAMA,IAGPtE,KAAK7B,OACN,EAEAq8D,GAAQn9D,UAAU2sC,mBAAqB,WACtC,OAAOhqC,KAAK7B,MAAQ,CACrB,EAEAq8D,GAAQn9D,UAAU4sC,mBAAqB,WACtC,OAAOjqC,KAAKqf,QAAQjhB,QAAU4B,KAAK7B,MAAQ,EAC5C,EAEAq8D,GAAQn9D,UAAU+4B,sBAAwB,SAAU3kB,GACnD,IAAItT,EAAQ6B,KAAKqf,QAAQvf,WAAU,SAAUqhB,GAC5C,OAAOA,EAAK1P,YAAcA,CAC5B,IAEC,GAAItT,GAAS,EAAG,CACf6B,KAAKqf,QAAQ3Y,OAAOvI,EAAO,GAC3B,GAAIA,GAAS6B,KAAK7B,MAAO,CACxB6B,KAAK7B,OACR,CAEE6B,KAAKo2B,sBAAsB3kB,EAC7B,CACA,EAEA+oD,GAAQn9D,UAAUysC,KAAO,WAExB,GAAI9pC,KAAK7B,OAAS,EAAG,CACpB,IAAI2iB,EAAS9gB,KAAKqf,QAAQrf,KAAK7B,OAE/B6B,KAAKy6D,QAAQ35C,EAAOnT,MAAMjQ,KAAKsC,KAAM8gB,GAErC9gB,KAAK7B,QAEL6B,KAAKkC,MAAMkB,QAAQs9B,YAAYhjC,KAAKsC,KAAKkC,MAAO4e,EAAOnT,KAAMmT,EAAOrP,UAAUnI,eAAgBwX,EAAOxc,MAErG,OAAO,IACT,KAAQ,CACNyH,QAAQC,KAAK,gDACb,OAAO,KACT,CACA,EAEAwuD,GAAQn9D,UAAU0sC,KAAO,WACxB,GAAI/pC,KAAKqf,QAAQjhB,OAAS,EAAI4B,KAAK7B,MAAO,CAEzC6B,KAAK7B,QAEL,IAAI2iB,EAAS9gB,KAAKqf,QAAQrf,KAAK7B,OAE/B6B,KAAK06D,QAAQ55C,EAAOnT,MAAMjQ,KAAKsC,KAAM8gB,GAErC9gB,KAAKkC,MAAMkB,QAAQu9B,YAAYjjC,KAAKsC,KAAKkC,MAAO4e,EAAOnT,KAAMmT,EAAOrP,UAAUnI,eAAgBwX,EAAOxc,MAErG,OAAO,IACT,KAAQ,CACNyH,QAAQC,KAAK,gDACb,OAAO,KACT,CACA,EAEAwuD,GAAQn9D,UAAUo9D,QAAU,CAC3BE,SAAU,SAASA,EAAS75C,GAC3BA,EAAOrP,UAAUuf,oBAAoBlQ,EAAOxc,KAAKmvB,SACnD,EAECmnC,OAAQ,SAASA,EAAO95C,GACvBA,EAAOrP,UAAUsgB,cACnB,EAECE,UAAW,SAASA,EAAUnR,GAC7B,IAAI+5C,EAAS76D,KAAKkC,MAAMM,WAAWqe,aAAaC,EAAOxc,KAAKA,KAAMwc,EAAOxc,KAAKsc,IAAKE,EAAOxc,KAAKnG,OAE/F,GAAI6B,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CACpElE,KAAKkC,MAAMiC,QAAQ+Y,UAAUwD,gBAAgB,KAChD,CAEE1gB,KAAK86D,WAAWh6C,EAAOrP,UAAWopD,EACpC,EAECE,QAAS,SAASA,EAAQj6C,GACzB9gB,KAAKkC,MAAMM,WAAWuf,cAAcjB,EAAOrP,UAAWzR,KAAKkC,MAAMM,WAAWmI,KAAKmW,EAAOxc,KAAKud,UAAWf,EAAOxc,KAAKqF,OACpH3J,KAAKkC,MAAMM,WAAWuD,QACxB,GAGAy0D,GAAQn9D,UAAUq9D,QAAU,CAC3BC,SAAU,SAASA,EAAS75C,GAC3BA,EAAOrP,UAAUuf,oBAAoBlQ,EAAOxc,KAAK9F,SACnD,EAECo8D,OAAQ,SAASA,EAAO95C,GACvB,IAAI+5C,EAAS76D,KAAKkC,MAAMM,WAAWqe,aAAaC,EAAOxc,KAAKA,KAAMwc,EAAOxc,KAAKsc,IAAKE,EAAOxc,KAAKnG,OAE/F,GAAI6B,KAAKkC,MAAMkB,QAAQ6Z,SAAWjd,KAAKkC,MAAMgC,UAAU,aAAc,CACpElE,KAAKkC,MAAMiC,QAAQ+Y,UAAUwD,gBAAgB,KAChD,CAEE1gB,KAAK86D,WAAWh6C,EAAOrP,UAAWopD,EACpC,EAEC5oC,UAAW,SAASA,EAAUnR,GAC7BA,EAAOrP,UAAUsgB,cACnB,EAECgpC,QAAS,SAASA,EAAQj6C,GACzB9gB,KAAKkC,MAAMM,WAAWuf,cAAcjB,EAAOrP,UAAWzR,KAAKkC,MAAMM,WAAWmI,KAAKmW,EAAOxc,KAAKwd,OAAQhB,EAAOxc,KAAKqF,OACjH3J,KAAKkC,MAAMM,WAAWuD,QACxB,GAIAy0D,GAAQn9D,UAAUy9D,WAAa,SAAUE,EAAQH,GAChD76D,KAAKqf,QAAQna,SAAQ,SAAU4b,GAC9B,GAAIA,EAAOrP,qBAAqBkM,EAAK,CACpC,GAAImD,EAAOrP,YAAcupD,EAAQ,CAChCl6C,EAAOrP,UAAYopD,CACvB,CACA,MAAS,GAAI/5C,EAAOrP,qBAAqB4I,EAAM,CAC5C,GAAIyG,EAAOrP,UAAU/M,MAAQs2D,EAAQ,CACpC,IAAIn2D,EAAQic,EAAOrP,UAAUtL,OAAO+G,WAEpC,GAAIrI,EAAO,CACVic,EAAOrP,UAAYopD,EAAOl1C,QAAQ9gB,EACvC,CACA,CACA,CACA,GACA,EAEAuI,EAAU/P,UAAUytC,eAAe,UAAW0vB,IAC9C,IAAIS,GAAkB,SAASA,EAAgB/4D,GAC9ClC,KAAKkC,MAAQA,EACblC,KAAKk7D,WAAa,GAClBl7D,KAAKm7D,SAAW,KACjB,EAEAF,GAAgB59D,UAAUkkC,WAAa,WACnC,IAACl8B,EAAOrF,KACPsC,EAAU+C,EAAKnD,MAAMI,QACrBc,EAAUiC,EAAKnD,MAAMkB,QAErBqwC,EAAUnxC,EAAQkmD,qBAAqB,MACvC79C,EAAOrI,EAAQkmD,qBAAqB,SAAS,GAC7ClkD,EAAO,GAGXe,EAAK81D,SAAW,MAEhB91D,EAAKnD,MAAMkB,QAAQ27B,cAAcrhC,KAAKsC,KAAKkC,OAE3CyI,EAAOA,EAAOA,EAAK69C,qBAAqB,MAAQ,GAGhDnjD,EAAK+1D,gBAAgB94D,EAASc,GAE9B,GAAIqwC,EAAQr1C,OAAQ,CACnBiH,EAAKg2D,gBAAgB5nB,EAAS9oC,EAChC,KAAQ,CACNtF,EAAKi2D,sBAAsB7nB,EAAS9oC,EACtC,CAGC,IAAK,IAAIxM,EAAQ,EAAGA,EAAQwM,EAAKvM,OAAQD,IAAS,CACjD,IAAIuG,EAAMiG,EAAKxM,GACX4M,EAAQrG,EAAI8jD,qBAAqB,MACjCrnC,EAAO,GAGX,IAAK9b,EAAK81D,SAAU,CACnBh6C,EAAK/d,EAAQjF,OAASA,CACzB,CAEE,IAAK,IAAIqH,EAAI,EAAGA,EAAIuF,EAAM3M,OAAQoH,IAAK,CACtC,IAAIwF,EAAOD,EAAMvF,GACjB,UAAWxF,KAAKk7D,WAAW11D,KAAO,YAAa,CAC9C2b,EAAKnhB,KAAKk7D,WAAW11D,IAAMwF,EAAK+M,SACpC,CACA,CAGEzT,EAAKW,KAAKkc,EACZ,CAGC,IAAIo6C,EAAav4D,SAASC,cAAc,OAGxC,IAAIu4D,EAAal5D,EAAQk5D,WAIzB,IAAK,IAAIh2D,KAAKg2D,EAAY,CACzB,GAAIh8D,EAAQg8D,EAAWh2D,KAAO,SAAU,CACvC+1D,EAAWnpD,aAAaopD,EAAWh2D,GAAGmlC,KAAM6wB,EAAWh2D,GAAGzH,MAC7D,CACA,CAGCuE,EAAQqE,WAAWk0C,aAAa0gB,EAAYj5D,GAE5Cc,EAAQkB,KAAOA,EAEfe,EAAKnD,MAAMkB,QAAQ47B,aAAathC,KAAKsC,KAAKkC,OAI1ClC,KAAKkC,MAAMI,QAAUi5D,CACtB,EAGAN,GAAgB59D,UAAU+9D,gBAAkB,SAAU94D,EAASc,EAASu0B,GACvE,IAAI6jC,EAAal5D,EAAQk5D,WACzB,IAAIC,EAAa9jC,EAAiBv6B,OAAOqE,OAAO,GAAIk2B,GAAkBv6B,OAAOiL,KAAKjF,GAClF,IAAIs4D,EAAc,GAElBD,EAAWv2D,SAAQ,SAAUic,GAC5Bu6C,EAAYv6C,EAAK6tB,eAAiB7tB,CACpC,IAEC,IAAK,IAAIhjB,KAASq9D,EAAY,CAC7B,IAAIG,EAASH,EAAWr9D,GACxB,IAAIwsC,EAEJ,GAAIgxB,WAAkBA,IAAW,YAAc,YAAcn8D,EAAQm8D,KAAY,UAAYA,EAAOhxB,MAAQgxB,EAAOhxB,KAAK7pC,QAAQ,gBAAkB,EAAG,CACpJ6pC,EAAOgxB,EAAOhxB,KAAK8O,QAAQ,aAAc,IAEzC,UAAWiiB,EAAY/wB,KAAU,YAAa,CAC7CvnC,EAAQs4D,EAAY/wB,IAAS3qC,KAAK47D,aAAaD,EAAO59D,MAC1D,CACA,CACA,CACA,EAGAk9D,GAAgB59D,UAAUu+D,aAAe,SAAU79D,GAClD,GAAIA,IAAU,OAAQ,CACrB,OAAO,IACT,CAEC,GAAIA,IAAU,QAAS,CACtB,OAAO,KACT,CAEC,OAAOA,CACR,EAGAk9D,GAAgB59D,UAAUw+D,SAAW,SAAU/2D,GAC9C,IAAIE,EAAQhF,KAAKkC,MAAMkB,QAAQX,QAAQjC,MAAK,SAAU2F,GACrD,OAAOA,EAAOrB,QAAUA,CAC1B,IAEC,OAAOE,GAAS,KACjB,EAGAi2D,GAAgB59D,UAAUg+D,gBAAkB,SAAU5nB,EAAS9oC,GAC9D,IAAK,IAAIxM,EAAQ,EAAGA,EAAQs1C,EAAQr1C,OAAQD,IAAS,CACjD,IAACk/C,EAAS5J,EAAQt1C,GACjB29D,EAAS,MACTl3D,EAAM5E,KAAK67D,SAASxe,EAAO0e,aAC3BvyD,EAGJ,GAAI5E,EAAK,CACRk3D,EAAS,IACZ,KAAS,CACNl3D,EAAM,CAAEE,MAAOu4C,EAAO0e,YAAY/pB,OACrC,CAEE,IAAKptC,EAAIC,MAAO,CACfD,EAAIC,MAAQw4C,EAAO0e,YAAY/pB,OAAOhD,cAAcyK,QAAQ,IAAK,IACpE,CAEEjwC,EAAQ6zC,EAAO8F,aAAa,SAE5B,GAAI35C,IAAU5E,EAAI4E,MAAO,CACxB5E,EAAI4E,MAAQA,CACf,CAMExJ,KAAKo7D,gBAAgB/d,EAAQz4C,EAAKwB,EAAO/I,UAAUiV,mBAEnDtS,KAAKk7D,WAAW/8D,GAASyG,EAAIC,MAE7B,GAAID,EAAIC,OAAS7E,KAAKkC,MAAMkB,QAAQjF,MAAO,CAC1C6B,KAAKm7D,SAAW,IACnB,CAEE,IAAKW,EAAQ,CACZ97D,KAAKkC,MAAMkB,QAAQX,QAAQwC,KAAKL,EACnC,CACA,CACA,EAGAq2D,GAAgB59D,UAAUi+D,sBAAwB,SAAU7nB,EAAS9oC,GACpE,IAAK,IAAIxM,EAAQ,EAAGA,EAAQs1C,EAAQr1C,OAAQD,IAAS,CACpD,IAAIk/C,EAAS5J,EAAQt1C,GACjByG,EAAM,CAAEE,MAAO,GAAID,MAAO,MAAQ1G,GAEtC6B,KAAKk7D,WAAW/8D,GAASyG,EAAIC,MAE7B,IAAI2E,EAAQ6zC,EAAO8F,aAAa,SAEhC,GAAI35C,EAAO,CACV5E,EAAI4E,MAAQA,CACf,CAEExJ,KAAKkC,MAAMkB,QAAQX,QAAQwC,KAAKL,EAClC,CACA,EAEAwI,EAAU/P,UAAUytC,eAAe,kBAAmBmwB,IACtD,IAAIe,GAAc,SAASA,EAAY95D,GACtClC,KAAKkC,MAAQA,EACblC,KAAKi8D,UAAY,KACjBj8D,KAAKk8D,YAAc,KACnBl8D,KAAKm8D,aAAe,MACpBn8D,KAAKo8D,eAAiB,KACvB,EAEAJ,GAAY3+D,UAAUiG,WAAa,WAClC,IAAIirC,EAAWvuC,KAAKkC,MAAMkB,QAAQk1B,YAC9B+jC,EAAiB,GAErBr8D,KAAKi8D,UAAY,GACjBj8D,KAAKk8D,YAAc,GAEnB,GAAI3tB,IAAa,MAAO,CAEvB,IAAK,IAAI9wC,KAAOuC,KAAKuuC,SAAU,CAC9B8tB,EAAe5+D,GAAOuC,KAAKuuC,SAAS9wC,EACvC,CAEE,GAAIL,OAAOiL,KAAKkmC,GAAUnwC,OAAQ,CAEjC,IAAK,IAAIk+D,KAAQ/tB,EAAU,CAC1B8tB,EAAeC,GAAQ/tB,EAAS+tB,EACpC,CACA,CAEEt8D,KAAKu8D,YAAYF,GACjBr8D,KAAKw8D,YACP,CACA,EAEAR,GAAY3+D,UAAUk/D,YAAc,SAAUhuB,GAC7C,IAAIkuB,EAAUz8D,KAEd,IAAIqF,EAAOrF,KAEX,IAAI08D,EAAS,SAASA,EAAOj/D,GAE5B,GAAIg/D,EAAQE,QAAQl/D,GAAM,CAEzB,GAAI8wC,EAAS9wC,GAAM,CAElB,GAAI+B,EAAQ+uC,EAAS9wC,MAAU,SAAU,CACxC8wC,EAAS9wC,GAAO,CAAC8wC,EAAS9wC,GAC/B,CAEI8wC,EAAS9wC,GAAKyH,SAAQ,SAAUuqC,GAC/BpqC,EAAKu3D,WAAWn/D,EAAKgyC,EAC1B,GACA,CACA,KAAS,CACN1jC,QAAQC,KAAK,sCAAuCvO,EACvD,CACA,EAEC,IAAK,IAAIA,KAAO8wC,EAAU,CACzBmuB,EAAOj/D,EACT,CACA,EAEAu+D,GAAY3+D,UAAUu/D,WAAa,SAAU97C,EAAQ+7C,GACpD,IAAIx3D,EAAOrF,KAEX,IAAIyvC,EAAU,CACb3uB,OAAQ9gB,KAAK28D,QAAQ77C,GACrBzY,KAAM,GACNy0D,KAAM,MACNtjB,MAAO,MACPujB,KAAM,OAGP,IAAIC,EAAUH,EAAYplB,WAAWzI,cAAczmC,MAAM,KAAKyqC,KAAK,IAAIzqC,MAAM,KAE7Ey0D,EAAQ93D,SAAQ,SAAUw9C,GACzB,OAAQA,GACP,IAAK,OACJjT,EAAQqtB,KAAO,KACf,MAED,IAAK,QACJrtB,EAAQ+J,MAAQ,KAChB,MAED,IAAK,OACJ/J,EAAQstB,KAAO,KACf,MAED,QACCra,EAAS/1C,SAAS+1C,GAClBjT,EAAQpnC,KAAKpD,KAAKy9C,GAElB,IAAKr9C,EAAK42D,UAAUvZ,GAAS,CAC5Br9C,EAAK42D,UAAUvZ,GAAU,EAC9B,CAEIr9C,EAAK42D,UAAUvZ,GAAQz9C,KAAKwqC,GAEhC,GACA,EAEAusB,GAAY3+D,UAAUm/D,WAAa,WAClC,IAAIn3D,EAAOrF,KAEXA,KAAKm8D,aAAe,SAAU9nD,GAC7B,IAAI4oD,EAAO5oD,EAAEuuC,QACb,IAAIrU,EAAWlpC,EAAK42D,UAAUgB,GAE9B,GAAI1uB,EAAU,CAEblpC,EAAK62D,YAAYj3D,KAAKg4D,GAEtB1uB,EAASrpC,SAAQ,SAAUuqC,GAC1BpqC,EAAK63D,aAAa7oD,EAAGo7B,EACzB,GACA,CACA,EAECzvC,KAAKo8D,eAAiB,SAAU/nD,GAC/B,IAAI4oD,EAAO5oD,EAAEuuC,QACb,IAAIrU,EAAWlpC,EAAK42D,UAAUgB,GAE9B,GAAI1uB,EAAU,CAEb,IAAIpwC,EAAQkH,EAAK62D,YAAYp7D,QAAQm8D,GAErC,GAAI9+D,GAAS,EAAG,CACfkH,EAAK62D,YAAYx1D,OAAOvI,EAAO,EACnC,CACA,CACA,EAEC6B,KAAKkC,MAAMI,QAAQ8R,iBAAiB,UAAWpU,KAAKm8D,cAEpDn8D,KAAKkC,MAAMI,QAAQ8R,iBAAiB,QAASpU,KAAKo8D,eACnD,EAEAJ,GAAY3+D,UAAUmlC,cAAgB,WACrC,GAAIxiC,KAAKm8D,aAAc,CACtBn8D,KAAKkC,MAAMI,QAAQ0hD,oBAAoB,UAAWhkD,KAAKm8D,aACzD,CAEC,GAAIn8D,KAAKo8D,eAAgB,CACxBp8D,KAAKkC,MAAMI,QAAQ0hD,oBAAoB,QAAShkD,KAAKo8D,eACvD,CACA,EAEAJ,GAAY3+D,UAAU6/D,aAAe,SAAU7oD,EAAGo7B,GACjD,IAAIpqC,EAAOrF,KACPgF,EAAQ,KAEZ,GAAIqP,EAAE8oD,SAAW1tB,EAAQqtB,MAAQzoD,EAAE+oD,UAAY3tB,EAAQ+J,OAASnlC,EAAEgpD,SAAW5tB,EAAQstB,KAAM,CAC1FttB,EAAQpnC,KAAKnD,SAAQ,SAAUzH,GAC9B,IAAIU,EAAQkH,EAAK62D,YAAYp7D,QAAQrD,GAErC,GAAIU,IAAU,EAAG,CAChB6G,EAAQ,KACZ,CACA,IAEE,GAAIA,EAAO,CACVyqC,EAAQ3uB,OAAOpjB,KAAK2H,EAAMgP,EAC7B,CAEE,OAAO,IACT,CAEC,OAAO,KACR,EAGA2nD,GAAY3+D,UAAUkxC,SAAW,CAChC+uB,QAAS,YACTC,QAAS,EACTC,MAAO,GACPC,QAAS,GACTC,aAAc,GACdC,eAAgB,GAChBC,cAAe,GACfC,YAAa,GACb/zB,KAAM,YACNC,KAAM,YACNhE,gBAAiB,aAIlBi2B,GAAY3+D,UAAUs/D,QAAU,CAC/BmB,SAAU,SAASA,EAASzpD,GAC3BA,EAAE0C,kBACF1C,EAAEwgB,gBACJ,EACC6oC,aAAc,SAASA,EAAarpD,GAChC,IAAC7R,EAAaxC,KAAKkC,MAAMM,WACxBu7D,EAASv7D,EAAWoZ,UAAYpZ,EAAW6E,OAG/CgN,EAAEwgB,iBAEF,GAAIryB,EAAWmZ,iBAAkB,CAChC,GAAIoiD,GAAU,EAAG,CAChBv7D,EAAWF,QAAQsZ,UAAYmiD,CACnC,KAAU,CACNv7D,EAAWwb,YAAYxb,EAAW2b,iBAAiB,GACvD,CACA,CAEEne,KAAKkC,MAAMI,QAAQ0U,OACrB,EACC2mD,eAAgB,SAASA,EAAetpD,GACvC,IAAI7R,EAAaxC,KAAKkC,MAAMM,WACxBu7D,EAASv7D,EAAWoZ,UAAYpZ,EAAW6E,OAC3C22D,EAAYx7D,EAAWF,QAAQgK,aAEnC+H,EAAEwgB,iBAEF,GAAIryB,EAAWmZ,iBAAkB,CAChC,GAAIoiD,GAAUC,EAAW,CACxBx7D,EAAWF,QAAQsZ,UAAYmiD,CACnC,KAAU,CACNv7D,EAAWwb,YAAYxb,EAAW2b,iBAAiB3b,EAAWmZ,iBAAmB,GACrF,CACA,CAEE3b,KAAKkC,MAAMI,QAAQ0U,OACrB,EACC4mD,cAAe,SAASA,EAAcvpD,GACrC,IAAI7R,EAAaxC,KAAKkC,MAAMM,WAE5B6R,EAAEwgB,iBAEF,GAAIryB,EAAWmZ,iBAAkB,CAChCnZ,EAAWwb,YAAYxb,EAAW2b,iBAAiB,GACtD,CAEEne,KAAKkC,MAAMI,QAAQ0U,OACrB,EACC6mD,YAAa,SAASA,EAAYxpD,GACjC,IAAI7R,EAAaxC,KAAKkC,MAAMM,WAE5B6R,EAAEwgB,iBAEF,GAAIryB,EAAWmZ,iBAAkB,CAChCnZ,EAAWwb,YAAYxb,EAAW2b,iBAAiB3b,EAAWmZ,iBAAmB,GACpF,CAEE3b,KAAKkC,MAAMI,QAAQ0U,OACrB,EACCsmD,QAAS,SAASA,EAAQjpD,GACzB,IAAIrJ,EAAO,MAEX,GAAIhL,KAAKkC,MAAMgC,UAAU,QAAS,CACjC8G,EAAOhL,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAE/B,GAAIhP,EAAM,CACTqJ,EAAEwgB,iBACF7pB,EAAKuoB,MAAMgD,MACf,CACA,CACA,EAECgnC,QAAS,SAASA,EAAQlpD,GACzB,IAAIrJ,EAAO,MACX,IAAI6vD,EAAS76D,KAAKkC,MAAMkB,QAAQm1B,aAChC,IAAIhF,EAEJ,GAAIvzB,KAAKkC,MAAMgC,UAAU,QAAS,CACjC8G,EAAOhL,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAE/B,GAAIhP,EAAM,CACTqJ,EAAEwgB,iBAEFtB,EAAMvoB,EAAKuoB,MAEX,IAAKA,EAAI+C,OAAQ,CAChB,GAAIukC,EAAQ,CAEX7vD,EAAKvH,aAAaX,WAAWk/C,OAE7B,GAAI6Y,IAAW,KAAM,CACpBA,EAAS76D,KAAKkC,MAAMye,OAAO,GAClC,KAAa,CACN,UAAWk6C,GAAU,WAAY,CAChCA,EAAS76D,KAAKkC,MAAMye,OAAOk6C,EAAO7vD,EAAKtG,IAAI4E,gBACnD,KAAc,CACNuxD,EAAS76D,KAAKkC,MAAMye,OAAOvjB,OAAOqE,OAAO,GAAIo5D,GACrD,CACA,CAEMA,EAAOhgD,MAAK,WACX7F,YAAW,WACVue,EAAI+C,MACZ,GACA,GACA,CACA,CACA,CACA,CACA,EAEC2nC,QAAS,SAASA,EAAQ5pD,GACzB,IAAIrJ,EAAO,MAEX,GAAIhL,KAAKkC,MAAMgC,UAAU,QAAS,CACjC8G,EAAOhL,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAE/B,GAAIhP,EAAM,CACTqJ,EAAEwgB,iBACF7pB,EAAKuoB,MAAM3vB,MACf,CACA,CACA,EAECs6D,SAAU,SAASA,EAAS7pD,GAC3B,IAAIrJ,EAAO,MAEX,GAAIhL,KAAKkC,MAAMgC,UAAU,QAAS,CACjC8G,EAAOhL,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAE/B,GAAIhP,EAAM,CACTqJ,EAAEwgB,iBACF7pB,EAAKuoB,MAAMU,OACf,CACA,CACA,EAECupC,MAAO,SAASA,EAAMnpD,GACrB,IAAIrJ,EAAO,MAEX,GAAIhL,KAAKkC,MAAMgC,UAAU,QAAS,CACjC8G,EAAOhL,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAE/B,GAAIhP,EAAM,CACTqJ,EAAEwgB,iBACF7pB,EAAKuoB,MAAMiD,IACf,CACA,CACA,EAECinC,QAAS,SAASA,EAAQppD,GACzB,IAAIrJ,EAAO,MAEX,GAAIhL,KAAKkC,MAAMgC,UAAU,QAAS,CACjC8G,EAAOhL,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAE/B,GAAIhP,EAAM,CACTqJ,EAAEwgB,iBACF7pB,EAAKuoB,MAAMkD,MACf,CACA,CACA,EAECqT,KAAM,SAASA,EAAKz1B,GACnB,IAAIrJ,EAAO,MACX,GAAIhL,KAAKkC,MAAMkB,QAAQic,SAAWrf,KAAKkC,MAAMgC,UAAU,YAAclE,KAAKkC,MAAMgC,UAAU,QAAS,CAElG8G,EAAOhL,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAE/B,IAAKhP,EAAM,CACVqJ,EAAEwgB,iBACF70B,KAAKkC,MAAMiC,QAAQkb,QAAQyqB,MAC/B,CACA,CACA,EAECC,KAAM,SAASA,EAAK11B,GACnB,IAAIrJ,EAAO,MACX,GAAIhL,KAAKkC,MAAMkB,QAAQic,SAAWrf,KAAKkC,MAAMgC,UAAU,YAAclE,KAAKkC,MAAMgC,UAAU,QAAS,CAElG8G,EAAOhL,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAE/B,IAAKhP,EAAM,CACVqJ,EAAEwgB,iBACF70B,KAAKkC,MAAMiC,QAAQkb,QAAQ0qB,MAC/B,CACA,CACA,EAEChE,gBAAiB,SAASA,EAAgB1xB,GACzC,IAAKrU,KAAKkC,MAAMiC,QAAQ2R,KAAKkE,YAAa,CACzC,GAAIha,KAAKkC,MAAMgC,UAAU,YAAa,MAAO,CAC5ClE,KAAKkC,MAAMiC,QAAQq0B,UAAUyN,KAAK,MAAO,KAC7C,CACA,CACA,GAGA74B,EAAU/P,UAAUytC,eAAe,cAAekxB,IAClD,IAAImC,GAAO,SAASA,EAAKj8D,GACxBlC,KAAKkC,MAAQA,EACblC,KAAKo+D,aAAe,GACpBp+D,KAAKq+D,UAAYr+D,KAAKs+D,SAASjrD,KAAKrT,MACpCA,KAAKu+D,SAAWv+D,KAAKw+D,QAAQnrD,KAAKrT,MAClCA,KAAKy+D,gBAAkB,MACvBz+D,KAAK0+D,kBAAoB,KAC1B,EAEAP,GAAK9gE,UAAUsY,uBAAyB,SAAUxP,GACjD,IAAIw4D,EAAU3+D,KAEd,IAAI4+D,EAEJ,GAAIz4D,EAAOH,WAAWuP,kBAAmB,CACxCpP,EAAO1C,aAAa2Q,iBAAiB,cAAepU,KAAK6+D,cAAcxrD,KAAKrT,KAAMmG,EAAQA,EAAOH,WAAWuP,oBAC5GvV,KAAKuU,QAAQpO,EAAQA,EAAOH,WAAWuP,kBACzC,CAMC,GAAIpP,EAAOH,WAAWyP,WAAY,CAEjCmpD,EAAe57D,SAASC,cAAc,QACtC27D,EAAa17D,UAAUC,IAAI,gCAC3By7D,EAAa7mD,UAAY,WAEzB6mD,EAAaxqD,iBAAiB,SAAS,SAAUC,GAChDA,EAAE0C,kBACF1C,EAAEwgB,iBAEF8pC,EAAQE,cAAc14D,EAAQA,EAAOH,WAAWyP,WAAYpB,EAC/D,IAEElO,EAAOwJ,aAAa9M,aAAa+7D,EAAcz4D,EAAOwJ,aAAa7M,WACrE,CACA,EAEAq7D,GAAK9gE,UAAUwhE,cAAgB,SAAUptD,EAAWiE,EAAMrB,GACzDqB,SAAcA,GAAQ,WAAaA,EAAKhY,KAAKsC,KAAKkC,MAAOuP,EAAUnI,eAAgB+K,GAAKqB,EAMxF1V,KAAK8+D,SAASzqD,EAAG5C,EAAWiE,EAC7B,EAEAyoD,GAAK9gE,UAAUkX,QAAU,SAAU9C,EAAWiE,GAC7C,IAAIqpD,EAAU/+D,KAEd,IAAIsC,EAAUmP,EAAUhO,aACpB8Q,EAAU,KACVmf,EAAS,MAEbpxB,EAAQ8R,iBAAiB,cAAc,SAAUC,GAChDU,aAAaR,GACbmf,EAAS,MAETnf,EAAUS,YAAW,WACpBD,aAAaR,GACbA,EAAU,KACVmf,EAAS,KAETqrC,EAAQF,cAAcptD,EAAWiE,EAAMrB,EAC1C,GAAK,IACL,GAAI,CAAEQ,QAAS,OAEdvS,EAAQ8R,iBAAiB,YAAY,SAAUC,GAC9CU,aAAaR,GACbA,EAAU,KAEV,GAAImf,EAAQ,CACXrf,EAAEwgB,gBACL,CACA,GACA,EAEAspC,GAAK9gE,UAAUu3B,eAAiB,SAAU5pB,GACzC,GAAIA,EAAK7E,OAAOH,WAAW8vB,YAAa,CACvC9qB,EAAKvH,WAAW,MAAM2Q,iBAAiB,cAAepU,KAAK6+D,cAAcxrD,KAAKrT,KAAMgL,EAAMA,EAAK7E,OAAOH,WAAW8vB,cACjH91B,KAAKuU,QAAQvJ,EAAMA,EAAK7E,OAAOH,WAAW8vB,YAC5C,CAEC,GAAI9qB,EAAK7E,OAAOH,WAAW+vB,UAAW,CACrC/qB,EAAKvH,WAAW,MAAM2Q,iBAAiB,QAASpU,KAAK6+D,cAAcxrD,KAAKrT,KAAMgL,EAAMA,EAAK7E,OAAOH,WAAW+vB,WAC7G,CACA,EAEAooC,GAAK9gE,UAAUmvB,cAAgB,SAAU9nB,GACxC,GAAI1E,KAAKkC,MAAMkB,QAAQ0rB,eAAgB,CACtCpqB,EAAIjB,aAAa2Q,iBAAiB,cAAepU,KAAK6+D,cAAcxrD,KAAKrT,KAAM0E,EAAK1E,KAAKkC,MAAMkB,QAAQ0rB,iBACvG9uB,KAAKuU,QAAQ7P,EAAK1E,KAAKkC,MAAMkB,QAAQ0rB,eACvC,CAEC,GAAI9uB,KAAKkC,MAAMkB,QAAQ2rB,aAAc,CACpCrqB,EAAIjB,aAAa2Q,iBAAiB,QAASpU,KAAK6+D,cAAcxrD,KAAKrT,KAAM0E,EAAK1E,KAAKkC,MAAMkB,QAAQ2rB,cACnG,CACA,EAEAovC,GAAK9gE,UAAU86D,gBAAkB,SAAUrtC,GAC1C,GAAI9qB,KAAKkC,MAAMkB,QAAQ68B,iBAAkB,CACxCnV,EAAMrnB,aAAa2Q,iBAAiB,cAAepU,KAAK6+D,cAAcxrD,KAAKrT,KAAM8qB,EAAO9qB,KAAKkC,MAAMkB,QAAQ68B,mBAC3GjgC,KAAKuU,QAAQuW,EAAO9qB,KAAKkC,MAAMkB,QAAQ68B,iBACzC,CAEC,GAAIjgC,KAAKkC,MAAMkB,QAAQ88B,eAAgB,CACtCpV,EAAMrnB,aAAa2Q,iBAAiB,QAASpU,KAAK6+D,cAAcxrD,KAAKrT,KAAM8qB,EAAO9qB,KAAKkC,MAAMkB,QAAQ88B,gBACvG,CACA,EAEAi+B,GAAK9gE,UAAUyhE,SAAW,SAAUzqD,EAAG5C,EAAWiE,EAAM8gD,GACvD,IAAIwI,EAAUh/D,KAEd,IAAIi/D,IAAU5qD,aAAa6qD,YAE3B,IAAIC,EAASn8D,SAASC,cAAc,OACpCk8D,EAAOj8D,UAAUC,IAAI,kBAErB,IAAK87D,EAAO,CACX5qD,EAAEwgB,gBACJ,CAGC,IAAKnf,IAASA,EAAKtX,OAAQ,CAC1B,MACF,CAEC,IAAKo4D,EAAU,CACd,GAAIx2D,KAAKy+D,gBAAiB,CAEzB,GAAIz+D,KAAKk1D,SAAU,CAClB,MACJ,CACA,KAAS,CACNl1D,KAAKy+D,gBAAkBzpD,YAAW,WACjCgqD,EAAQP,gBAAkB,KAC9B,GAAM,IACN,CAEEz+D,KAAKs+D,WACLt+D,KAAKo+D,aAAe,EACtB,CAEC1oD,EAAKxQ,SAAQ,SAAUic,GACtB,IAAIi+C,EAASp8D,SAASC,cAAc,OAChCoiD,EAAQlkC,EAAKkkC,MACbga,EAAWl+C,EAAKk+C,SAEpB,GAAIl+C,EAAK2vC,UAAW,CACnBsO,EAAOl8D,UAAUC,IAAI,2BACxB,KAAS,CACNi8D,EAAOl8D,UAAUC,IAAI,uBAErB,UAAWkiD,GAAS,WAAY,CAC/BA,EAAQA,EAAM3nD,KAAKshE,EAAQ98D,MAAOuP,EAAUnI,eAChD,CAEG,GAAI+7C,aAAiBvtC,KAAM,CAC1BsnD,EAAOt4D,YAAYu+C,EACvB,KAAU,CACN+Z,EAAOrnD,UAAYstC,CACvB,CAEG,UAAWga,GAAY,WAAY,CAClCA,EAAWA,EAAS3hE,KAAKshE,EAAQ98D,MAAOuP,EAAUnI,eACtD,CAEG,GAAI+1D,EAAU,CACbD,EAAOl8D,UAAUC,IAAI,gCACrBi8D,EAAOhrD,iBAAiB,SAAS,SAAUC,GAC1CA,EAAE0C,iBACP,GACA,KAAU,CACN,GAAIoK,EAAKzL,MAAQyL,EAAKzL,KAAKtX,OAAQ,CAClCghE,EAAOhrD,iBAAiB,SAAS,SAAUC,GAC1CA,EAAE0C,kBACFioD,EAAQM,gBAAgBH,GACxBH,EAAQF,SAASzqD,EAAG5C,EAAW0P,EAAKzL,KAAM0pD,EAChD,GACA,KAAW,CACN,GAAIj+C,EAAKL,OAAQ,CAChBs+C,EAAOhrD,iBAAiB,SAAS,SAAUC,GAC1C8M,EAAKL,OAAOzM,EAAG5C,EAAUnI,eAChC,GACA,CACA,CACA,CAEG,GAAI6X,EAAKzL,MAAQyL,EAAKzL,KAAKtX,OAAQ,CAClCghE,EAAOl8D,UAAUC,IAAI,8BACzB,CACA,CAEEg8D,EAAOr4D,YAAYs4D,EACrB,IAECD,EAAO/qD,iBAAiB,SAAS,SAAUC,GAC1C2qD,EAAQV,UACV,IAECt+D,KAAKo+D,aAAan5D,KAAKk6D,GACvBn/D,KAAKu/D,aAAaJ,EAAQ3I,EAAUyI,EAAO5qD,EAC5C,EAEA8pD,GAAK9gE,UAAUiiE,gBAAkB,SAAUH,GAC1C,IAAIhhE,EAAQ6B,KAAKo+D,aAAat9D,QAAQq+D,GAEtC,GAAIhhE,GAAS,EAAG,CACf,IAAK,IAAIqhE,EAAOx/D,KAAKo+D,aAAahgE,OAAS,EAAGohE,EAAOrhE,EAAOqhE,IAAQ,CACnE,IAAIz8D,EAAK/C,KAAKo+D,aAAaoB,GAE3B,GAAIz8D,EAAG4D,WAAY,CAClB5D,EAAG4D,WAAWrB,YAAYvC,EAC9B,CAEG/C,KAAKo+D,aAAaqB,KACrB,CACA,CACA,EAEAtB,GAAK9gE,UAAUkiE,aAAe,SAAUj9D,EAASk0D,EAAUyI,EAAO5qD,GACjE,IAAIqrD,EAAU1/D,KAEd,IAAI2/D,EAAYz+D,KAAKC,IAAI6B,SAASgyB,KAAKxc,aAAc2R,OAAOy1C,aACxDt+D,EACAC,EACAs+D,EAEJ,IAAKrJ,EAAU,CACdl1D,EAAI29D,EAAQ5qD,EAAEyrD,QAAQ,GAAGC,MAAQ1rD,EAAE0rD,MACnCx+D,EAAI09D,EAAQ5qD,EAAEyrD,QAAQ,GAAGE,MAAQ3rD,EAAE2rD,MAEnChgE,KAAK0+D,kBAAoB,KAC3B,KAAQ,CACNmB,EAAezyD,EAAU/P,UAAUgQ,QAAQmR,SAASg4C,GACpDl1D,EAAIu+D,EAAaj8D,KAAO4yD,EAAS3qD,YACjCtK,EAAIs+D,EAAaziD,IAAM,CACzB,CAEC9a,EAAQ0B,MAAMoZ,IAAM7b,EAAI,KACxBe,EAAQ0B,MAAMJ,KAAOtC,EAAI,KAEzB0T,YAAW,WACV0qD,EAAQx9D,MAAMM,WAAWF,QAAQ8R,iBAAiB,SAAUsrD,EAAQrB,WACpEr7D,SAASgyB,KAAK5gB,iBAAiB,QAASsrD,EAAQrB,WAChDr7D,SAASgyB,KAAK5gB,iBAAiB,cAAesrD,EAAQrB,WACtDl0C,OAAO/V,iBAAiB,SAAUsrD,EAAQrB,WAC1Cr7D,SAASgyB,KAAK5gB,iBAAiB,UAAWsrD,EAAQnB,SACpD,GAAI,KAEHv7D,SAASgyB,KAAKluB,YAAYxE,GAG1B,GAAIf,EAAIe,EAAQkW,cAAgBmnD,EAAW,CAC1Cr9D,EAAQ0B,MAAMoZ,IAAM,GAEpB,GAAIo5C,EAAU,CACbl0D,EAAQ0B,MAAM8vB,OAAS6rC,EAAYE,EAAaziD,IAAMo5C,EAASh+C,aAAe,EAAI,IACrF,KAAS,CACNlW,EAAQ0B,MAAM8vB,OAAS6rC,EAAYp+D,EAAI,IAC1C,CACA,CAGC,GAAID,EAAIgB,EAAQuJ,aAAe7I,SAASgyB,KAAKnpB,aAAe7L,KAAK0+D,kBAAmB,CACnFp8D,EAAQ0B,MAAMJ,KAAO,GAErB,GAAI4yD,EAAU,CACbl0D,EAAQ0B,MAAMiwB,MAAQjxB,SAASmoC,gBAAgBt/B,YAAcg0D,EAAaj8D,KAAO,IACpF,KAAS,CACNtB,EAAQ0B,MAAMiwB,MAAQjxB,SAASmoC,gBAAgBt/B,YAAcvK,EAAI,IACpE,CAEEtB,KAAK0+D,kBAAoB,IAC3B,CACA,EAEAP,GAAK9gE,UAAU63D,OAAS,WACvB,QAASl1D,KAAKo+D,aAAahgE,MAC5B,EAEA+/D,GAAK9gE,UAAUmhE,QAAU,SAAUnqD,GAClC,GAAIA,EAAEuuC,SAAW,GAAI,CACpB5iD,KAAKs+D,UACP,CACA,EAEAH,GAAK9gE,UAAUihE,SAAW,WACzBt+D,KAAKo+D,aAAal5D,SAAQ,SAAUi6D,GACnC,GAAIA,EAAOx4D,WAAY,CACtBw4D,EAAOx4D,WAAWrB,YAAY65D,EACjC,CACA,IAECn8D,SAASgyB,KAAKgvB,oBAAoB,UAAWhkD,KAAKu+D,UAClDv7D,SAASgyB,KAAKgvB,oBAAoB,QAAShkD,KAAKq+D,WAChDr7D,SAASgyB,KAAKgvB,oBAAoB,cAAehkD,KAAKq+D,WACtDl0C,OAAO65B,oBAAoB,SAAUhkD,KAAKq+D,WAC1Cr+D,KAAKkC,MAAMM,WAAWF,QAAQ0hD,oBAAoB,SAAUhkD,KAAKq+D,UAClE,EAGAF,GAAK9gE,UAAU4iE,MAAQ,GAEvB7yD,EAAU/P,UAAUytC,eAAe,OAAQqzB,IAC3C,IAAI+B,GAAc,SAASA,EAAYh+D,GACtClC,KAAKkC,MAAQA,EACblC,KAAKmgE,mBAAqBngE,KAAKogE,2BAC/BpgE,KAAKqgE,aAAe,MACpBrgE,KAAKsgE,aAAe,MACpBtgE,KAAKugE,YAAc,IACnBvgE,KAAKwgE,OAAS,MACdxgE,KAAKygE,MAAQ,MACbzgE,KAAK0gE,WAAa,MAClB1gE,KAAK2gE,OAAS,EACd3gE,KAAK4gE,iBAAmB,GACxB5gE,KAAK6gE,eAAiB,EACtB7gE,KAAK8gE,kBAAoB,MACzB9gE,KAAK+gE,UAAY,MAEjB/gE,KAAKghE,UAAYhhE,KAAKghE,UAAU3tD,KAAKrT,MACrCA,KAAKihE,QAAUjhE,KAAKihE,QAAQ5tD,KAAKrT,KAClC,EAEAkgE,GAAY7iE,UAAU+iE,yBAA2B,WAChD,IAAIr9D,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,iBACjBJ,EAAGG,UAAUC,IAAI,6BAEjB,OAAOJ,CACR,EAEAm9D,GAAY7iE,UAAUwW,iBAAmB,SAAU1N,GAClD,IAAId,EAAOrF,KACPsK,EAAS,GACTjE,EAEJ,IAAKF,EAAOhC,QAAQkmB,OAAQ,CAE3BhkB,EAAQF,EAAO1C,aAEf6G,EAAO42D,UAAY,SAAU7sD,GAC5B,GAAIlO,EAAO6D,SAAW3E,EAAKm7D,OAAOx2D,OAAQ,CACzC,IAAK3E,EAAK07D,UAAY1sD,EAAEyrD,QAAQ,GAAGC,MAAQ1rD,EAAE0rD,OAAS3yD,EAAU/P,UAAUgQ,QAAQmR,SAASnY,GAAOzC,KAAOyB,EAAKnD,MAAMkI,cAAc9H,QAAQM,WAAauD,EAAOoD,WAAa,EAAG,CAC7K,GAAIlE,EAAKo7D,QAAUt6D,IAAWd,EAAKq7D,WAAY,CAC9Cr6D,EAAMM,WAAW9D,aAAawC,EAAK86D,mBAAoB95D,EAAMO,aAC7DvB,EAAKoE,WAAWtD,EAAQ,KAC9B,CACA,KAAW,CACN,GAAId,EAAKo7D,QAAUt6D,GAAUd,EAAKq7D,WAAY,CAC7Cr6D,EAAMM,WAAW9D,aAAawC,EAAK86D,mBAAoB95D,GACvDhB,EAAKoE,WAAWtD,EAAQ,MAC9B,CACA,CACA,CACA,EAAIkN,KAAKhO,GAEPgB,EAAM+N,iBAAiB,aAAa,SAAUC,GAC7ChP,EAAK07D,UAAY,MACjB,GAAI1sD,EAAE8sD,QAAU,EAAG,CAClB97D,EAAKi7D,aAAetrD,YAAW,WAC9B3P,EAAK+7D,UAAU/sD,EAAGlO,EACvB,GAAOd,EAAKk7D,YACZ,CACA,IAEEl6D,EAAM+N,iBAAiB,WAAW,SAAUC,GAC3C,GAAIA,EAAE8sD,QAAU,EAAG,CAClB,GAAI97D,EAAKi7D,aAAc,CACtBvrD,aAAa1P,EAAKi7D,aACvB,CACA,CACA,IAEEj7D,EAAKg8D,gBAAgBl7D,EACvB,CAECA,EAAOhC,QAAQsF,WAAaa,CAC7B,EAEA41D,GAAY7iE,UAAUgkE,gBAAkB,SAAUl7D,GAC9C,IAACd,EAAOrF,KACPqG,EAAQF,EAAO1C,aACf69D,EAAa,MAIbtyD,EACAG,EACA0+B,EACA0zB,EACAC,EACAC,EAEJp7D,EAAM+N,iBAAiB,cAAc,SAAUC,GAC9ChP,EAAKi7D,aAAetrD,YAAW,WAC9B3P,EAAK07D,UAAY,KAEjB/xD,EAAU7I,EAAO8I,aACjB4+B,EAAe7+B,EAAUA,EAAQzF,WAAa,EAAI,EAClD4F,EAAUhJ,EAAOiJ,aACjBmyD,EAAepyD,EAAUA,EAAQ5F,WAAa,EAAI,EAClDi4D,EAAmB,EACnBC,EAAmB,EACnBH,EAAa,MAEbj8D,EAAK+7D,UAAU/sD,EAAGlO,EACrB,GAAKd,EAAKk7D,YACV,GAAI,CAAE1rD,QAAS,OAEdxO,EAAM+N,iBAAiB,aAAa,SAAUC,GAC1C,IAAUkS,EAAMm7C,EAEnB,GAAIr8D,EAAKm7D,OAAQ,CAChBn7D,EAAK27D,UAAU3sD,GAEf,IAAKitD,EAAY,CAChBA,EAAajtD,EAAEyrD,QAAQ,GAAGC,KAC9B,CAEGx5C,EAAOlS,EAAEyrD,QAAQ,GAAGC,MAAQuB,EAE5B,GAAI/6C,EAAO,EAAG,CACb,GAAIvX,GAAWuX,EAAOi7C,EAAmB3zB,EAAc,CACtD6zB,EAAY1yD,EAEZ,GAAI0yD,IAAcv7D,EAAQ,CACzBm7D,EAAajtD,EAAEyrD,QAAQ,GAAGC,MAC1B2B,EAAUj+D,aAAakD,WAAW9D,aAAawC,EAAK86D,mBAAoBuB,EAAUj+D,aAAamD,aAC/FvB,EAAKoE,WAAWi4D,EAAW,KACjC,CACA,CACA,KAAU,CACN,GAAIvyD,IAAYoX,EAAOk7C,EAAmBF,EAAc,CACvDG,EAAYvyD,EAEZ,GAAIuyD,IAAcv7D,EAAQ,CACzBm7D,EAAajtD,EAAEyrD,QAAQ,GAAGC,MAC1B2B,EAAUj+D,aAAakD,WAAW9D,aAAawC,EAAK86D,mBAAoBuB,EAAUj+D,cAClF4B,EAAKoE,WAAWi4D,EAAW,MACjC,CACA,CACA,CAEG,GAAIA,EAAW,CAEd1yD,EAAU0yD,EAAUzyD,aACpBuyD,EAAmB3zB,EACnBA,EAAe7+B,EAAUA,EAAQzF,WAAa,EAAI,EAClD4F,EAAUuyD,EAAUtyD,aACpBqyD,EAAmBF,EACnBA,EAAepyD,EAAUA,EAAQ5F,WAAa,EAAI,CACtD,CACA,CACA,GAAI,CAAEsL,QAAS,OAEdxO,EAAM+N,iBAAiB,YAAY,SAAUC,GAC5C,GAAIhP,EAAKi7D,aAAc,CACtBvrD,aAAa1P,EAAKi7D,aACrB,CACE,GAAIj7D,EAAKm7D,OAAQ,CAChBn7D,EAAK47D,QAAQ5sD,EAChB,CACA,GACA,EAEA6rD,GAAY7iE,UAAU+jE,UAAY,SAAU/sD,EAAGlO,GAC9C,IAAI7D,EAAU6D,EAAO1C,aAErBzD,KAAKwgE,OAASr6D,EACdnG,KAAK2gE,QAAU3gE,KAAK+gE,UAAY1sD,EAAEyrD,QAAQ,GAAGC,MAAQ1rD,EAAE0rD,OAAS3yD,EAAU/P,UAAUgQ,QAAQmR,SAASlc,GAASsB,KAE9G5D,KAAKkC,MAAMI,QAAQY,UAAUC,IAAI,0BAGjCnD,KAAKmgE,mBAAmBn8D,MAAMwF,MAAQrD,EAAOoD,WAAa,KAC1DvJ,KAAKmgE,mBAAmBn8D,MAAMqD,OAASlB,EAAOoB,YAAc,KAE5DjF,EAAQqE,WAAW9D,aAAa7C,KAAKmgE,mBAAoB79D,GACzDA,EAAQqE,WAAWrB,YAAYhD,GAG/BtC,KAAKqgE,aAAe/9D,EAAQk4C,UAAU,MACtCx6C,KAAKqgE,aAAan9D,UAAUC,IAAI,oBAEhCnD,KAAKkC,MAAMkI,cAAc3G,aAAaqD,YAAY9G,KAAKqgE,cAEvDrgE,KAAKqgE,aAAar8D,MAAMJ,KAAO,IAC/B5D,KAAKqgE,aAAar8D,MAAM8vB,OAAS,IAEjC,IAAK9zB,KAAK+gE,UAAW,CACpB/gE,KAAK2hE,iBAEL3+D,SAASgyB,KAAK5gB,iBAAiB,YAAapU,KAAKghE,WACjDh+D,SAASgyB,KAAK5gB,iBAAiB,UAAWpU,KAAKihE,QACjD,CAECjhE,KAAKghE,UAAU3sD,EAChB,EAEA6rD,GAAY7iE,UAAUskE,eAAiB,WACtC3hE,KAAKkC,MAAMkI,cAAc1H,eAAewC,SAAQ,SAAUiB,GACzD,GAAIA,EAAOhC,QAAQsF,WAAWy3D,UAAW,CACxC/6D,EAAO1C,aAAa2Q,iBAAiB,YAAajO,EAAOhC,QAAQsF,WAAWy3D,UAC/E,CACA,GACA,EAEAhB,GAAY7iE,UAAUukE,iBAAmB,WACxC5hE,KAAKkC,MAAMkI,cAAc1H,eAAewC,SAAQ,SAAUiB,GACzD,GAAIA,EAAOhC,QAAQsF,WAAWy3D,UAAW,CACxC/6D,EAAO1C,aAAaugD,oBAAoB,YAAa79C,EAAOhC,QAAQsF,WAAWy3D,UAClF,CACA,GACA,EAEAhB,GAAY7iE,UAAUoM,WAAa,SAAUtD,EAAQwD,GACpD,IAAIk4D,EAAc7hE,KAAKwgE,OAAO5yD,WAE9B5N,KAAKygE,MAAQt6D,EACbnG,KAAK0gE,WAAa/2D,EAElB,GAAIA,EAAO,CACVxD,EAAOyH,WAAW1I,SAAQ,SAAU8F,EAAMxF,GACzC,IAAIy7C,EAASj2C,EAAKvH,WAAW,MAC7Bw9C,EAAOt6C,WAAW9D,aAAag/D,EAAYr8D,GAAG/B,aAAcw9C,EAAOr6C,YACtE,GACA,KAAQ,CACNT,EAAOyH,WAAW1I,SAAQ,SAAU8F,EAAMxF,GACzC,IAAIy7C,EAASj2C,EAAKvH,WAAW,MAC7Bw9C,EAAOt6C,WAAW9D,aAAag/D,EAAYr8D,GAAG/B,aAAcw9C,EAC/D,GACA,CACA,EAEAif,GAAY7iE,UAAU4jE,QAAU,SAAU5sD,GACzC,GAAIA,EAAE8sD,QAAU,GAAKnhE,KAAK+gE,UAAW,CACpC/gE,KAAK4hE,mBAEL5hE,KAAKmgE,mBAAmBx5D,WAAW9D,aAAa7C,KAAKwgE,OAAO/8D,aAAczD,KAAKmgE,mBAAmBv5D,aAClG5G,KAAKmgE,mBAAmBx5D,WAAWrB,YAAYtF,KAAKmgE,oBACpDngE,KAAKqgE,aAAa15D,WAAWrB,YAAYtF,KAAKqgE,cAE9CrgE,KAAKkC,MAAMI,QAAQY,UAAUikB,OAAO,0BAEpC,GAAInnB,KAAKygE,MAAO,CACfzgE,KAAKkC,MAAMkI,cAAcR,iBAAiB5J,KAAKwgE,OAAQxgE,KAAKygE,MAAOzgE,KAAK0gE,WAC3E,CAEE1gE,KAAKwgE,OAAS,MACdxgE,KAAKygE,MAAQ,MACbzgE,KAAK0gE,WAAa,MAElB,IAAK1gE,KAAK+gE,UAAW,CACpB/9D,SAASgyB,KAAKgvB,oBAAoB,YAAahkD,KAAKghE,WACpDh+D,SAASgyB,KAAKgvB,oBAAoB,UAAWhkD,KAAKihE,QACrD,CACA,CACA,EAEAf,GAAY7iE,UAAU2jE,UAAY,SAAU3sD,GAC3C,IAAIhP,EAAOrF,KACP8hE,EAAez8D,EAAKnD,MAAMkI,cAAc3G,aACxCb,EAAak/D,EAAal/D,WAC1Bm/D,GAAQ18D,EAAK07D,UAAY1sD,EAAEyrD,QAAQ,GAAGC,MAAQ1rD,EAAE0rD,OAAS3yD,EAAU/P,UAAUgQ,QAAQmR,SAASsjD,GAAcl+D,KAAOhB,EACnHo/D,EAEJ38D,EAAKg7D,aAAar8D,MAAMJ,KAAOm+D,EAAO18D,EAAKs7D,OAAS,KAEpD,GAAIoB,EAAOn/D,EAAayC,EAAKu7D,iBAAkB,CAC9C,IAAKv7D,EAAKy7D,kBAAmB,CAC5Bz7D,EAAKy7D,kBAAoB9rD,YAAW,WACnCgtD,EAAY9gE,KAAKC,IAAI,EAAGyB,EAAa,GACrCyC,EAAKnD,MAAMM,WAAWiB,aAAab,WAAao/D,EAChD38D,EAAKy7D,kBAAoB,KAC7B,GAAM,EACN,CACA,CAEC,GAAIl+D,EAAak/D,EAAa/9D,YAAcg+D,EAAO18D,EAAKu7D,iBAAkB,CACzE,IAAKv7D,EAAKy7D,kBAAmB,CAC5Bz7D,EAAKy7D,kBAAoB9rD,YAAW,WACnCgtD,EAAY9gE,KAAK4K,IAAIg2D,EAAa/9D,YAAanB,EAAa,GAC5DyC,EAAKnD,MAAMM,WAAWiB,aAAab,WAAao/D,EAChD38D,EAAKy7D,kBAAoB,KAC7B,GAAM,EACN,CACA,CACA,EAEA1zD,EAAU/P,UAAUytC,eAAe,aAAco1B,IAEjD,IAAI+B,GAAW,SAASA,EAAS//D,GAEhClC,KAAKkC,MAAQA,EACblC,KAAKmgE,mBAAqBngE,KAAKogE,2BAC/BpgE,KAAKqgE,aAAe,MACpBrgE,KAAKsgE,aAAe,MACpBtgE,KAAKugE,YAAc,IACnBvgE,KAAKwgE,OAAS,MACdxgE,KAAK6xB,MAAQ,MACb7xB,KAAKkiE,WAAa,MAClBliE,KAAKmiE,UAAY,MACjBniE,KAAKoiE,OAAS,EACdpiE,KAAK2gE,OAAS,EAEd3gE,KAAKghE,UAAYhhE,KAAKghE,UAAU3tD,KAAKrT,MACrCA,KAAKihE,QAAUjhE,KAAKihE,QAAQ5tD,KAAKrT,MACjCA,KAAKqiE,kBAAoB,MAEzBriE,KAAK+gE,UAAY,MAEjB/gE,KAAKwwC,WAAa,MAClBxwC,KAAKsiE,0BAA4B,MACjCtiE,KAAKuiE,4BAA8B,MACnCviE,KAAKwiE,mBAAqB,GAC1BxiE,KAAKuwC,YAAc,GAEnBvwC,KAAKyiE,eAAiB,MACtBziE,KAAK0iE,aAAe,KACrB,EAEAT,GAAS5kE,UAAU+iE,yBAA2B,WAC7C,IAAIr9D,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,iBACjBJ,EAAGG,UAAUC,IAAI,6BAEjB,OAAOJ,CACR,EAEAk/D,GAAS5kE,UAAUiG,WAAa,SAAU+lD,GACzCrpD,KAAKsiE,0BAA4BtiE,KAAKkC,MAAMkB,QAAQo6B,2BACpDx9B,KAAKuiE,4BAA8BviE,KAAKkC,MAAMkB,QAAQq6B,6BAEtDz9B,KAAKwwC,WAAaxwC,KAAKsiE,2BAA6BtiE,KAAKuiE,2BAC1D,EAEAN,GAAS5kE,UAAU4U,UAAY,SAAUo3C,GACxCrpD,KAAKmiE,UAAY9Y,CAClB,EAEA4Y,GAAS5kE,UAAUy6D,sBAAwB,SAAUhtC,GACjD,IAACzlB,EAAOrF,KACPsK,EAAS,GAIbA,EAAOq4D,QAAU,SAAUtuD,GAC1BhP,EAAKu9D,aAAavuD,EAAG3P,IACvB,EAAG2O,KAAKhO,GAGPiF,EAAO42D,UAAY,SAAU7sD,GAC5B,GAAIA,EAAE2rD,MAAQ5yD,EAAU/P,UAAUgQ,QAAQmR,SAASsM,EAAMxoB,SAAS8a,IAAM/X,EAAKnD,MAAMM,WAAWF,QAAQsZ,UAAYkP,EAAMvjB,YAAc,EAAG,CACxI,GAAIlC,EAAKwsB,QAAU/G,IAAUzlB,EAAK68D,WAAY,CAC7C,IAAI9jD,EAAQ0M,EAAMrnB,aAClB2a,EAAMzX,WAAW9D,aAAawC,EAAK86D,mBAAoB/hD,EAAMxX,aAC7DvB,EAAK2M,QAAQ8Y,EAAO,KACxB,CACA,KAAS,CACN,GAAIzlB,EAAKwsB,QAAU/G,GAASzlB,EAAK68D,WAAY,CAC5C,IAAI9jD,EAAQ0M,EAAMrnB,aAClB,GAAI2a,EAAMykD,gBAAiB,CAC1BzkD,EAAMzX,WAAW9D,aAAawC,EAAK86D,mBAAoB/hD,GACvD/Y,EAAK2M,QAAQ8Y,EAAO,MACzB,CACA,CACA,CACA,EAAGzX,KAAKhO,GAEPylB,EAAM3mB,QAAQ6N,QAAU1H,CACzB,EAEA23D,GAAS5kE,UAAUmvB,cAAgB,SAAU9nB,GAC5C,IAAIW,EAAOrF,KACPsK,EAAS,GACT8T,EAGJ9T,EAAOq4D,QAAU,SAAUtuD,GAC1BhP,EAAKu9D,aAAavuD,EAAG3P,EACvB,EAAG2O,KAAKhO,GAGPiF,EAAO42D,UAAY,SAAU7sD,GAC5B,IAAI+J,EAAQ1Z,EAAIjB,aAEhB,GAAI4Q,EAAE2rD,MAAQ5yD,EAAU/P,UAAUgQ,QAAQmR,SAASJ,GAAOhB,IAAM/X,EAAKnD,MAAMM,WAAWF,QAAQsZ,UAAYlX,EAAI6C,YAAc,EAAG,CAC9H,GAAIlC,EAAKwsB,QAAUntB,IAAQW,EAAK68D,WAAY,CAC3C9jD,EAAMzX,WAAW9D,aAAawC,EAAK86D,mBAAoB/hD,EAAMxX,aAC7DvB,EAAK2M,QAAQtN,EAAK,KACtB,CACA,KAAS,CACN,GAAIW,EAAKwsB,QAAUntB,GAAOW,EAAK68D,WAAY,CAC1C9jD,EAAMzX,WAAW9D,aAAawC,EAAK86D,mBAAoB/hD,GACvD/Y,EAAK2M,QAAQtN,EAAK,MACtB,CACA,CACA,EAAG2O,KAAKhO,GAEP,IAAKrF,KAAKmiE,UAAW,CAEpB/jD,EAAQ1Z,EAAIjB,aAEZ2a,EAAMhK,iBAAiB,aAAa,SAAUC,GAC7C,GAAIA,EAAE8sD,QAAU,EAAG,CAClB97D,EAAKi7D,aAAetrD,YAAW,WAC9B3P,EAAK+7D,UAAU/sD,EAAG3P,EACvB,GAAOW,EAAKk7D,YACZ,CACA,IAEEniD,EAAMhK,iBAAiB,WAAW,SAAUC,GAC3C,GAAIA,EAAE8sD,QAAU,EAAG,CAClB,GAAI97D,EAAKi7D,aAAc,CACtBvrD,aAAa1P,EAAKi7D,aACvB,CACA,CACA,IAEEtgE,KAAKqhE,gBAAgB38D,EAAKA,EAAIjB,aAChC,CAECiB,EAAIP,QAAQ6N,QAAU1H,CACvB,EAEA23D,GAAS5kE,UAAUu3B,eAAiB,SAAU5pB,GAC7C,IAAI3F,EAAOrF,KACPihD,EAASj2C,EAAKvH,WAAW,MAE7Bw9C,EAAO7sC,iBAAiB,aAAa,SAAUC,GAC9C,GAAIA,EAAE8sD,QAAU,EAAG,CAClB97D,EAAKi7D,aAAetrD,YAAW,WAC9B3P,EAAK+7D,UAAU/sD,EAAGrJ,EAAKtG,IAC3B,GAAMW,EAAKk7D,YACX,CACA,IAECtf,EAAO7sC,iBAAiB,WAAW,SAAUC,GAC5C,GAAIA,EAAE8sD,QAAU,EAAG,CAClB,GAAI97D,EAAKi7D,aAAc,CACtBvrD,aAAa1P,EAAKi7D,aACtB,CACA,CACA,IAECtgE,KAAKqhE,gBAAgBr2D,EAAKtG,IAAKu8C,EAChC,EAEAghB,GAAS5kE,UAAUgkE,gBAAkB,SAAU38D,EAAKpC,GAChD,IAAC+C,EAAOrF,KACP8iE,EAAa,MAIb7/C,EACAC,EACA6/C,EACAC,EACAC,EACAC,EAEJ5gE,EAAQ8R,iBAAiB,cAAc,SAAUC,GAChDhP,EAAKi7D,aAAetrD,YAAW,WAC9B3P,EAAK07D,UAAY,KAEjB99C,EAAUve,EAAIue,UACd8/C,EAAgB9/C,EAAUA,EAAQ1b,YAAc,EAAI,EACpD2b,EAAUxe,EAAIwe,UACd8/C,EAAgB9/C,EAAUA,EAAQ3b,YAAc,EAAI,EACpD07D,EAAoB,EACpBC,EAAoB,EACpBJ,EAAa,MAEbz9D,EAAK+7D,UAAU/sD,EAAG3P,EACrB,GAAKW,EAAKk7D,YACV,GAAI,CAAE1rD,QAAS,OAEdvS,EAAQ8R,iBAAiB,aAAa,SAAUC,GAE5C,IAAUkS,EAAMwG,EAEnB,GAAI1nB,EAAKm7D,OAAQ,CAChBnsD,EAAEwgB,iBAEFxvB,EAAK27D,UAAU3sD,GAEf,IAAKyuD,EAAY,CAChBA,EAAazuD,EAAEyrD,QAAQ,GAAGE,KAC9B,CAEGz5C,EAAOlS,EAAEyrD,QAAQ,GAAGE,MAAQ8C,EAE5B,GAAIv8C,EAAO,EAAG,CACb,GAAItD,GAAWsD,EAAO08C,EAAoBF,EAAe,CACxDh2C,EAAY9J,EAEZ,GAAI8J,IAAcroB,EAAK,CACtBo+D,EAAazuD,EAAEyrD,QAAQ,GAAGE,MAC1BjzC,EAAUtpB,aAAakD,WAAW9D,aAAawC,EAAK86D,mBAAoBpzC,EAAUtpB,aAAamD,aAC/FvB,EAAK2M,QAAQ+a,EAAW,KAC9B,CACA,CACA,KAAU,CACN,GAAI7J,IAAYqD,EAAO28C,EAAoBF,EAAe,CACzDj2C,EAAY7J,EAEZ,GAAI6J,IAAcroB,EAAK,CACtBo+D,EAAazuD,EAAEyrD,QAAQ,GAAGE,MAC1BjzC,EAAUtpB,aAAakD,WAAW9D,aAAawC,EAAK86D,mBAAoBpzC,EAAUtpB,cAClF4B,EAAK2M,QAAQ+a,EAAW,MAC9B,CACA,CACA,CAEG,GAAIA,EAAW,CAEd9J,EAAU8J,EAAU9J,UACpBggD,EAAoBF,EACpBA,EAAgB9/C,EAAUA,EAAQ1b,YAAc,EAAI,EACpD2b,EAAU6J,EAAU7J,UACpBggD,EAAoBF,EACpBA,EAAgB9/C,EAAUA,EAAQ3b,YAAc,EAAI,CACxD,CACA,CACA,IAECjF,EAAQ8R,iBAAiB,YAAY,SAAUC,GAC9C,GAAIhP,EAAKi7D,aAAc,CACtBvrD,aAAa1P,EAAKi7D,aACrB,CACE,GAAIj7D,EAAKm7D,OAAQ,CAChBn7D,EAAK47D,QAAQ5sD,GACbhP,EAAK07D,UAAY,KACpB,CACA,GACA,EAEAkB,GAAS5kE,UAAUskE,eAAiB,WACnC,IAAIt8D,EAAOrF,KAEXqF,EAAKnD,MAAMM,WAAW2b,iBAAiBjZ,SAAQ,SAAUR,GACxD,IAAKA,EAAIiJ,OAAS,OAASjJ,EAAIiJ,OAAS,UAAYjJ,EAAIP,QAAQ6N,QAAQkvD,UAAW,CAClFx8D,EAAIjB,aAAa2Q,iBAAiB,YAAa1P,EAAIP,QAAQ6N,QAAQkvD,UACtE,CACA,GACA,EAEAe,GAAS5kE,UAAUukE,iBAAmB,WACrC,IAAIv8D,EAAOrF,KAEXqF,EAAKnD,MAAMM,WAAW2b,iBAAiBjZ,SAAQ,SAAUR,GACxD,IAAKA,EAAIiJ,OAAS,OAASjJ,EAAIiJ,OAAS,UAAYjJ,EAAIP,QAAQ6N,QAAQkvD,UAAW,CAClFx8D,EAAIjB,aAAaugD,oBAAoB,YAAat/C,EAAIP,QAAQ6N,QAAQkvD,UACzE,CACA,GACA,EAEAe,GAAS5kE,UAAU+jE,UAAY,SAAU/sD,EAAG3P,GAC3C,IAAIpC,EAAUoC,EAAIjB,aAElBzD,KAAKmjE,iBAAiB9uD,EAAG3P,GAEzB1E,KAAKwgE,OAAS97D,EAEd1E,KAAKkC,MAAMI,QAAQY,UAAUC,IAAI,0BAGjCnD,KAAKmgE,mBAAmBn8D,MAAMwF,MAAQ9E,EAAI6E,WAAa,KACvDvJ,KAAKmgE,mBAAmBn8D,MAAMqD,OAAS3C,EAAI6C,YAAc,KAEzD,IAAKvH,KAAKwwC,WAAY,CACrBluC,EAAQqE,WAAW9D,aAAa7C,KAAKmgE,mBAAoB79D,GACzDA,EAAQqE,WAAWrB,YAAYhD,EACjC,KAAQ,CACNtC,KAAKkC,MAAMI,QAAQY,UAAUC,IAAI,+BACjCnD,KAAKojE,gBAAgB1+D,EACvB,CAGC1E,KAAKqgE,aAAe/9D,EAAQk4C,UAAU,MACtCx6C,KAAKqgE,aAAan9D,UAAUC,IAAI,oBAEhC,GAAInD,KAAKwwC,WAAY,CACpBxtC,SAASgyB,KAAKluB,YAAY9G,KAAKqgE,cAC/BrgE,KAAKqgE,aAAar8D,MAAMJ,KAAO,IAC/B5D,KAAKqgE,aAAar8D,MAAMoZ,IAAM,IAC9Bpd,KAAKqgE,aAAar8D,MAAMwF,MAAQxJ,KAAKkC,MAAMI,QAAQyB,YAAc,KACjE/D,KAAKqgE,aAAar8D,MAAMw/C,WAAa,SACrCxjD,KAAKqgE,aAAar8D,MAAMilD,SAAW,SACnCjpD,KAAKqgE,aAAar8D,MAAMq/D,cAAgB,MAC1C,KAAQ,CACNrjE,KAAKkC,MAAMM,WAAWqa,kBAAkB/V,YAAY9G,KAAKqgE,cAEzDrgE,KAAKqgE,aAAar8D,MAAMJ,KAAO,IAC/B5D,KAAKqgE,aAAar8D,MAAMoZ,IAAM,IAE9Bpd,KAAK2hE,gBACP,CAEC3+D,SAASgyB,KAAK5gB,iBAAiB,YAAapU,KAAKghE,WACjDh+D,SAASgyB,KAAK5gB,iBAAiB,UAAWpU,KAAKihE,SAE/CjhE,KAAKghE,UAAU3sD,EAChB,EAEA4tD,GAAS5kE,UAAU8lE,iBAAmB,SAAU9uD,EAAG3P,GAClD,IAAIq7D,EAAQ//D,KAAK+gE,UAAY1sD,EAAEyrD,QAAQ,GAAGC,MAAQ1rD,EAAE0rD,MAChDC,EAAQhgE,KAAK+gE,UAAY1sD,EAAEyrD,QAAQ,GAAGE,MAAQ3rD,EAAE2rD,MAChD19D,EACA4I,EAEJ5I,EAAUoC,EAAIjB,aACd,GAAIzD,KAAKwwC,WAAY,CACpBtlC,EAAW5I,EAAQsmB,wBAEnB5oB,KAAK2gE,OAASz1D,EAAStH,KAAOm8D,EAAQ51C,OAAOkhB,YAC7CrrC,KAAKoiE,OAASl3D,EAASkS,IAAM4iD,EAAQ71C,OAAO+gB,WAC9C,KAAQ,CACNlrC,KAAKoiE,OAASpC,EAAQ19D,EAAQsmB,wBAAwBxL,GACxD,CACA,EAEA6kD,GAAS5kE,UAAU4jE,QAAU,SAAU5sD,GACtC,IAAKA,GAAKA,EAAE8sD,QAAU,GAAKnhE,KAAK+gE,UAAW,CAC1C/gE,KAAK4hE,mBAEL,IAAK5hE,KAAKwwC,WAAY,CACrBxwC,KAAKmgE,mBAAmBx5D,WAAW9D,aAAa7C,KAAKwgE,OAAO/8D,aAAczD,KAAKmgE,mBAAmBv5D,aAClG5G,KAAKmgE,mBAAmBx5D,WAAWrB,YAAYtF,KAAKmgE,mBACvD,CAEEngE,KAAKqgE,aAAa15D,WAAWrB,YAAYtF,KAAKqgE,cAE9CrgE,KAAKkC,MAAMI,QAAQY,UAAUikB,OAAO,0BAEpC,GAAInnB,KAAK6xB,MAAO,CACf7xB,KAAKkC,MAAMM,WAAWwP,QAAQhS,KAAKwgE,OAAQxgE,KAAK6xB,MAAO7xB,KAAKkiE,WAC/D,CAEEliE,KAAKwgE,OAAS,MACdxgE,KAAK6xB,MAAQ,MACb7xB,KAAKkiE,WAAa,MAElBl/D,SAASgyB,KAAKgvB,oBAAoB,YAAahkD,KAAKghE,WACpDh+D,SAASgyB,KAAKgvB,oBAAoB,UAAWhkD,KAAKihE,SAElD,GAAIjhE,KAAKwwC,WAAY,CACpBxwC,KAAKkC,MAAMI,QAAQY,UAAUikB,OAAO,+BACpCnnB,KAAKsjE,sBACR,CACA,CACA,EAEArB,GAAS5kE,UAAU2U,QAAU,SAAUtN,EAAKiF,GAC3C3J,KAAK6xB,MAAQntB,EACb1E,KAAKkiE,WAAav4D,CACnB,EAEAs4D,GAAS5kE,UAAU2jE,UAAY,SAAU3sD,GACxC,GAAIrU,KAAKwwC,WAAY,CACpBxwC,KAAKujE,qBAAqB7lE,KAAKsC,KAAMqU,EACvC,KAAQ,CACNrU,KAAKwjE,eAAe9lE,KAAKsC,KAAMqU,EACjC,CACA,EAEA4tD,GAAS5kE,UAAUmmE,eAAiB,SAAUnvD,GAC1C,IAACovD,EAAYzjE,KAAKkC,MAAMM,WAAWiB,aAClCmY,EAAY6nD,EAAU7nD,UACtB8nD,GAAQ1jE,KAAK+gE,UAAY1sD,EAAEyrD,QAAQ,GAAGE,MAAQ3rD,EAAE2rD,OAASyD,EAAU76C,wBAAwBxL,IAAMxB,EAGrG5b,KAAKqgE,aAAar8D,MAAMoZ,IAAMsmD,EAAO1jE,KAAKoiE,OAAS,IACpD,EAEAH,GAAS5kE,UAAUkmE,qBAAuB,SAAUlvD,GACnDrU,KAAKqgE,aAAar8D,MAAMJ,KAAO5D,KAAK2gE,QAAU3gE,KAAK+gE,UAAY1sD,EAAEyrD,QAAQ,GAAGC,MAAQ1rD,EAAE0rD,OAAS,KAC/F//D,KAAKqgE,aAAar8D,MAAMoZ,IAAMpd,KAAKoiE,QAAUpiE,KAAK+gE,UAAY1sD,EAAEyrD,QAAQ,GAAGE,MAAQ3rD,EAAE2rD,OAAS,IAC/F,EAEAiC,GAAS5kE,UAAUsmE,eAAiB,SAAUtvD,EAAG/R,EAASoC,GACzD,GAAI1E,KAAKkC,MAAMkB,QAAQg7B,uBAAwB,CAC9Cp+B,KAAKkC,MAAMkB,QAAQg7B,uBAAuB/pB,EAAG/R,EAASoC,EAAMA,EAAI4E,eAAiB,MACnF,CACA,EAGA24D,GAAS5kE,UAAU+lE,gBAAkB,SAAU1+D,GAC9C,IAAIk/D,EAAU5jE,KAEd,IAAI6jE,EAEJ,GAAI7jE,KAAKsiE,0BAA2B,CACnCuB,EAAmB7jE,KAAKkC,MAAMiC,QAAQszB,MAAM4Y,eAAerwC,KAAKsiE,2BAEhEtiE,KAAKkC,MAAMkB,QAAQw6B,wBAAwBlgC,KAAKsC,KAAKkC,MAAO2hE,GAE5D7jE,KAAKkC,MAAMiC,QAAQszB,MAAMiZ,KAAK1wC,KAAKsiE,0BAA2B,UAAW,UAAW,CACnF59D,IAAKA,GAER,CAEC,GAAI1E,KAAKuiE,4BAA6B,CAErCviE,KAAKwiE,mBAAqB,GAE1B,IAAK3iE,MAAMkF,QAAQ/E,KAAKuiE,6BAA8B,CACrDviE,KAAKuiE,4BAA8B,CAACviE,KAAKuiE,4BAC5C,CAEEviE,KAAKuiE,4BAA4Br9D,SAAQ,SAAU0mC,GAClD,UAAWA,IAAU,SAAU,CAC9Bg4B,EAAQpB,mBAAqBoB,EAAQpB,mBAAmB33D,OAAOhL,MAAMxC,UAAUynB,MAAMpnB,KAAKsF,SAAS8oC,iBAAiBF,IACxH,KAAU,CACNg4B,EAAQpB,mBAAmBv9D,KAAK2mC,EACpC,CACA,IAEE5rC,KAAKwiE,mBAAmBt9D,SAAQ,SAAU5C,GACzC,IAAIwhE,EAAY,SAASA,EAAUzvD,GAClCuvD,EAAQD,eAAetvD,EAAG/R,EAASshE,EAAQpD,OAC/C,EAEGl+D,EAAQ8R,iBAAiB,UAAW0vD,GACpCxhE,EAAQyhE,0BAA4BD,EAEpCxhE,EAAQY,UAAUC,IAAI,gCACzB,GACA,CACA,EAGA8+D,GAAS5kE,UAAUimE,qBAAuB,WACzC,IAAIO,EAEJ,GAAI7jE,KAAKsiE,0BAA2B,CACnCuB,EAAmB7jE,KAAKkC,MAAMiC,QAAQszB,MAAM4Y,eAAerwC,KAAKsiE,2BAEhEtiE,KAAKkC,MAAMkB,QAAQ26B,uBAAuBrgC,KAAKsC,KAAKkC,MAAO2hE,GAE3D7jE,KAAKkC,MAAMiC,QAAQszB,MAAMiZ,KAAK1wC,KAAKsiE,0BAA2B,UAAW,aAC3E,CAECtiE,KAAKwiE,mBAAmBt9D,SAAQ,SAAU5C,GACzCA,EAAQY,UAAUikB,OAAO,iCACzB7kB,EAAQ0hD,oBAAoB,UAAW1hD,EAAQyhE,kCACxCzhE,EAAQyhE,yBACjB,GACA,EAGA9B,GAAS5kE,UAAU2mE,QAAU,SAAU9hE,EAAOwC,GAC7C,IAAIW,EAAOrF,KACX,IAAKA,KAAKyiE,eAAgB,CACzBziE,KAAKyiE,eAAiBvgE,EACtBlC,KAAK0iE,aAAeh+D,EAEpB1E,KAAKkC,MAAMI,QAAQY,UAAUC,IAAI,iCAEjCkC,EAAKnD,MAAMM,WAAW2b,iBAAiBjZ,SAAQ,SAAUR,GACxD,GAAIA,EAAIiJ,OAAS,OAASjJ,EAAIP,QAAQ6N,SAAWtN,EAAIP,QAAQ6N,QAAQ2wD,QAAS,CAC7Ej+D,EAAIjB,aAAa2Q,iBAAiB,UAAW1P,EAAIP,QAAQ6N,QAAQ2wD,QACrE,CACA,IAEEt9D,EAAKg9D,kBAAoBh9D,EAAKu9D,aAAavvD,KAAKhO,GAEhDA,EAAKnD,MAAMI,QAAQ8R,iBAAiB,UAAW/O,EAAKg9D,mBAEpDriE,KAAKkC,MAAMkB,QAAQ46B,0BAA0BtgC,KAAKsC,KAAKkC,MAAOwC,EAAKxC,GAEnE,OAAO,IACT,KAAQ,CACN6J,QAAQC,KAAK,+EAAgFhM,KAAKyiE,gBAClG,OAAO,KACT,CACA,EAGAR,GAAS5kE,UAAU4mE,WAAa,SAAU/hE,GACzC,IAAImD,EAAOrF,KACX,GAAIkC,IAAUlC,KAAKyiE,eAAgB,CAClCziE,KAAKyiE,eAAiB,MACtBziE,KAAK0iE,aAAe,MAEpB1iE,KAAKkC,MAAMI,QAAQY,UAAUikB,OAAO,iCAEpC9hB,EAAKnD,MAAMM,WAAW2b,iBAAiBjZ,SAAQ,SAAUR,GACxD,GAAIA,EAAIiJ,OAAS,OAASjJ,EAAIP,QAAQ6N,SAAWtN,EAAIP,QAAQ6N,QAAQ2wD,QAAS,CAC7Ej+D,EAAIjB,aAAaugD,oBAAoB,UAAWt/C,EAAIP,QAAQ6N,QAAQ2wD,QACxE,CACA,IAEEt9D,EAAKnD,MAAMI,QAAQ0hD,oBAAoB,UAAW3+C,EAAKg9D,mBAEvDriE,KAAKkC,MAAMkB,QAAQ+6B,yBAAyBzgC,KAAKsC,KAAKkC,MAAOA,EAC/D,KAAQ,CACN6J,QAAQC,KAAK,iEACf,CACA,EAEAi2D,GAAS5kE,UAAU6mE,aAAe,SAAUhiE,EAAOwC,EAAKq9C,GACvD,IAAIoiB,EAAS,MAEb,GAAIpiB,EAAS,CAEZ,OAAQviD,EAAQQ,KAAKkC,MAAMkB,QAAQs6B,oBAClC,IAAK,SACJymC,EAASnkE,KAAKokE,QAAQpkE,KAAKkC,MAAMkB,QAAQs6B,mBACzC,MAED,IAAK,WACJymC,EAASnkE,KAAKkC,MAAMkB,QAAQs6B,kBAC5B,MAGF,GAAIymC,EAAQ,CACXA,EAAOzmE,KAAKsC,KAAMA,KAAKwgE,OAAOl3D,eAAgB5E,EAAMA,EAAI4E,eAAiB5K,UAAWwD,EACvF,KAAS,CACN,GAAIlC,KAAKkC,MAAMkB,QAAQs6B,kBAAmB,CACzC3xB,QAAQC,KAAK,8CAA+ChM,KAAKkC,MAAMkB,QAAQs6B,kBACnF,CACA,CAEE19B,KAAKkC,MAAMkB,QAAQy6B,gBAAgBngC,KAAKsC,KAAKkC,MAAOlC,KAAKwgE,OAAOl3D,eAAgB5E,EAAMA,EAAI4E,eAAiB5K,UAAWwD,EACxH,KAAQ,CACNlC,KAAKkC,MAAMkB,QAAQ06B,sBAAsBpgC,KAAKsC,KAAKkC,MAAOlC,KAAKwgE,OAAOl3D,eAAgB5E,EAAMA,EAAI4E,eAAiB5K,UAAWwD,EAC9H,CAEClC,KAAKihE,SACN,EAEAgB,GAAS5kE,UAAUulE,aAAe,SAAUvuD,EAAG3P,GAC9C,IAAI2/D,EAAW,MACXtiB,EAAU,MAEd1tC,EAAEuvC,2BAEF,OAAQpkD,EAAQQ,KAAKkC,MAAMkB,QAAQu6B,sBAClC,IAAK,SACJ0mC,EAAWrkE,KAAKskE,UAAUtkE,KAAKkC,MAAMkB,QAAQu6B,qBAC7C,MAED,IAAK,WACJ0mC,EAAWrkE,KAAKkC,MAAMkB,QAAQu6B,oBAC9B,MAGF,GAAI0mC,EAAU,CACbtiB,EAAUsiB,EAAS3mE,KAAKsC,KAAMA,KAAK0iE,aAAap5D,eAAgB5E,EAAMA,EAAI4E,eAAiB5K,UAAWsB,KAAKyiE,eAC7G,KAAQ,CACN12D,QAAQC,KAAK,gDAAiDhM,KAAKkC,MAAMkB,QAAQu6B,oBACnF,CAEC,GAAIokB,EAAS,CACZ/hD,KAAKkC,MAAMkB,QAAQ66B,oBAAoBvgC,KAAKsC,KAAKkC,MAAOlC,KAAK0iE,aAAap5D,eAAgB5E,EAAMA,EAAI4E,eAAiB5K,UAAWsB,KAAKyiE,eACvI,KAAQ,CACNziE,KAAKkC,MAAMkB,QAAQ86B,0BAA0BxgC,KAAKsC,KAAKkC,MAAOlC,KAAK0iE,aAAap5D,eAAgB5E,EAAMA,EAAI4E,eAAiB5K,UAAWsB,KAAKyiE,eAC7I,CAECziE,KAAKkC,MAAMiC,QAAQszB,MAAMiZ,KAAK1wC,KAAKyiE,eAAgB,UAAW,eAAgB,CAC7E/9D,IAAKA,EACLq9C,QAASA,GAEX,EAEAkgB,GAAS5kE,UAAUinE,UAAY,CAC9B5qB,OAAQ,SAASA,EAAO5T,EAASjU,EAAO0yC,GACvCvkE,KAAKkC,MAAMye,OAAOmlB,EAAQrlB,UAAW/hB,UAAWmzB,GAChD,OAAO,IACT,EAEC1uB,IAAK,SAASA,EAAI2iC,EAASjU,EAAO0yC,GACjCvkE,KAAKkC,MAAMye,OAAOmlB,EAAQrlB,WAC1B,OAAO,IACT,EAECjT,OAAQ,SAASA,EAAOs4B,EAASjU,EAAO0yC,GACvC,GAAI1yC,EAAO,CACVA,EAAMrkB,OAAOs4B,EAAQrlB,WACrB,OAAO,IACV,CAEE,OAAO,KACT,EAECg5B,QAAS,SAASA,EAAQ3T,EAASjU,EAAO0yC,GACzC,GAAI1yC,EAAO,CACV7xB,KAAKkC,MAAMye,OAAOmlB,EAAQrlB,UAAW/hB,UAAWmzB,GAChDA,EAAM3jB,SACN,OAAO,IACV,CAEE,OAAO,KACT,GAGA+zD,GAAS5kE,UAAU+mE,QAAU,CAC5Bl2D,OAAQ,SAASs2D,EAAQ1+B,EAASjU,EAAO4yC,GACxC3+B,EAAQ53B,QACV,GAGA+zD,GAAS5kE,UAAUszC,cAAgB,SAAUzuC,EAAO4e,EAAQxc,GAC3D,OAAQwc,GACP,IAAK,UACJ,OAAO9gB,KAAKgkE,QAAQ9hE,EAAOoC,EAAKI,KAGjC,IAAK,aACJ,OAAO1E,KAAKikE,WAAW/hE,GAGxB,IAAK,eACJ,OAAOlC,KAAKkkE,aAAahiE,EAAOoC,EAAKI,IAAKJ,EAAKy9C,SAGlD,EAEA30C,EAAU/P,UAAUytC,eAAe,UAAWm3B,IAC9C,IAAIyC,GAAU,SAASA,EAAQxiE,GAC9BlC,KAAKkC,MAAQA,EACblC,KAAK6wC,aAAe,CAAC,GAAI,OAAQ,OAAQ,aACzC7wC,KAAK2kE,QAAU,IAChB,EAGAD,GAAQrnE,UAAUwW,iBAAmB,SAAU1N,GAC9C,IAAId,EAAOrF,KACPgF,EAAQ,MACRsF,EAAS,GAEbtK,KAAK6wC,aAAa3rC,SAAQ,SAAUyI,GACnC,IAAIlQ,EAAM,WAAakQ,EAAKmjC,OAAO,GAAGC,cAAgBpjC,EAAKmX,MAAM,IAC7D9O,EAEJ,GAAI7P,EAAOH,WAAWvI,GAAM,CAC3BuY,EAAU3Q,EAAKu/D,cAAcz+D,EAAOH,WAAWvI,IAE/C,GAAIuY,EAAS,CACZhR,EAAQ,KAERsF,EAAO7M,GAAO,CACbuY,QAASA,EACTuB,OAAQpR,EAAOH,WAAWvI,EAAM,WAAa,GAElD,CACA,CACA,IAEC,GAAIuH,EAAO,CACVmB,EAAOhC,QAAQ2uB,OAASxoB,CAC1B,CACA,EAEAo6D,GAAQrnE,UAAUunE,cAAgB,SAAU7mE,GAC3C,IAAIiY,EAAU,MAGd,cAAejY,IAAU,YAAc,YAAcyB,EAAQzB,IAC5D,IAAK,SACJ,GAAIiC,KAAK6kE,SAAS9mE,GAAQ,CACzBiY,EAAUhW,KAAK6kE,SAAS9mE,EAC5B,KAAU,CACNgO,QAAQC,KAAK,oDAAqDjO,EACtE,CACG,MAED,IAAK,WACJiY,EAAUjY,EACV,MAGF,OAAOiY,CACR,EAGA0uD,GAAQrnE,UAAUgzB,aAAe,SAAU/rB,EAAMqJ,EAAM4iB,GACtD,IAAIlrB,EAAOrF,KACPvC,EAAM,WAAakQ,EAAKmjC,OAAO,GAAGC,cAAgBpjC,EAAKmX,MAAM,IAC7D/mB,EAEJ,GAAIiC,KAAK2kE,QAAS,CAEjBt/D,EAAKnD,MAAMkI,cAAcvB,UAAS,SAAU1C,GAC3C,IAAI6P,EAASuB,EAAQ9F,EAErB,GAAItL,EAAOhC,QAAQ2uB,OAAQ,CAC1B9c,EAAU7P,EAAOhC,QAAQ2uB,OAAOr1B,IAAQ0I,EAAOhC,QAAQ2uB,OAAO9c,SAAW,MAEzE,GAAIA,EAAS,CACZjY,EAAQoI,EAAO+J,qBAAqBqgB,IAAgB,YAAcA,EAAcjsB,GAEhF,GAAIqJ,GAAQ,eAAiB5P,IAAU,YAAa,CACnD0T,EAAYtL,EAAOmD,eACnBiO,SAAgBvB,EAAQuB,SAAW,WAAavB,EAAQuB,OAAOxZ,EAAOuG,EAAMqJ,EAAM8D,GAAauE,EAAQuB,OACvGpR,EAAOgK,cAAc7L,EAAM0R,EAAQA,QAAQjY,EAAOuG,EAAMqJ,EAAM4J,EAAQ9F,GAC5E,CACA,CACA,CACA,GACA,CAEC,OAAOnN,CACR,EAGAogE,GAAQrnE,UAAUw4B,cAAgB,SAAU7qB,EAAMjN,GACjD,IAAIiY,EAAUhL,EAAK7E,OAAOhC,QAAQ2uB,OAAOgyC,aAAe95D,EAAK7E,OAAOhC,QAAQ2uB,OAAO9c,SAAW,MAC1Fya,EAAW,GAEf,GAAIza,EAAS,CACZya,EAAWrzB,OAAOqE,OAAOgvB,EAAUzlB,EAAKtG,IAAI+b,WAC5CzV,EAAK7E,OAAOgK,cAAcsgB,EAAU1yB,GACpC,OAAOiY,EAAQA,QAAQjY,EAAO0yB,EAAU,OAAQza,EAAQuB,OAAQvM,EAAK1B,eACvE,KAAQ,CACN,OAAOvL,CACT,CACA,EAEA2mE,GAAQrnE,UAAUi5C,OAAS,WAC1Bt2C,KAAK2kE,QAAU,IAChB,EAEAD,GAAQrnE,UAAUg5C,QAAU,WAC3Br2C,KAAK2kE,QAAU,KAChB,EAGAD,GAAQrnE,UAAUwnE,SAAW,GAE7Bz3D,EAAU/P,UAAUytC,eAAe,UAAW45B,IAC9C,IAAIK,GAAO,SAASA,EAAK7iE,GAExBlC,KAAKkC,MAAQA,EAEblC,KAAKksC,KAAO,QACZlsC,KAAKukB,gBAAkB,MAEvBvkB,KAAKuoC,KAAO,EACZvoC,KAAKuhB,KAAO,EACZvhB,KAAKklC,MAAQ,EACbllC,KAAKmB,IAAM,EAEXnB,KAAKqgB,aAAe,EAEpBrgB,KAAKglE,YAAc,KAEnBhlE,KAAKilE,UAAY,GAEjBjlE,KAAKklE,kBAAoB,GACzBllE,KAAKmlE,cAAgB,GAErBnlE,KAAK03D,gBACN,EAEAqN,GAAK1nE,UAAUq6D,eAAiB,WAE/B,IAAIrW,EAEJrhD,KAAKsC,QAAUU,SAASC,cAAc,QACtCjD,KAAKsC,QAAQY,UAAUC,IAAI,uBAE3BnD,KAAKolE,aAAepiE,SAASC,cAAc,QAC3CjD,KAAKolE,aAAaliE,UAAUC,IAAI,mBAEhCk+C,EAASr+C,SAASC,cAAc,UAChCo+C,EAAOn+C,UAAUC,IAAI,kBACrBk+C,EAAOjvC,aAAa,OAAQ,UAC5BivC,EAAOjvC,aAAa,OAAQ,UAC5BivC,EAAOjvC,aAAa,aAAc,IAClCivC,EAAOjvC,aAAa,QAAS,IAE7BpS,KAAKqlE,SAAWhkB,EAAO7G,UAAU,MACjCx6C,KAAKqlE,SAASjzD,aAAa,YAAa,SAExCpS,KAAKslE,QAAUjkB,EAAO7G,UAAU,MAChCx6C,KAAKslE,QAAQlzD,aAAa,YAAa,QAEvCpS,KAAKulE,QAAUlkB,EAAO7G,UAAU,MAChCx6C,KAAKulE,QAAQnzD,aAAa,YAAa,QAEvCpS,KAAKwlE,QAAUnkB,EAAO7G,UAAU,MAChCx6C,KAAKwlE,QAAQpzD,aAAa,YAAa,QAEvC,GAAIpS,KAAKkC,MAAMkB,QAAQ64B,uBAAwB,CAC9Cj8B,KAAKylE,eAAiBziE,SAASC,cAAc,UAC7CjD,KAAKylE,eAAeviE,UAAUC,IAAI,sBACpC,CACA,EAEA4hE,GAAK1nE,UAAUqoE,2BAA6B,WAC3C,IAAIC,EAAU3lE,KAEd,IAAIilE,EAAY,GAEhB,GAAIjlE,KAAKylE,eAAgB,CAExB,GAAI5lE,MAAMkF,QAAQ/E,KAAKkC,MAAMkB,QAAQ64B,wBAAyB,CAC7DgpC,EAAYjlE,KAAKkC,MAAMkB,QAAQ64B,uBAC/Bj8B,KAAKilE,UAAYA,EAEjB,GAAIjlE,KAAKilE,UAAUnkE,QAAQd,KAAKuoC,QAAU,EAAG,CAC5C08B,EAAUp+D,QAAQ7G,KAAKuoC,KAC3B,CACA,KAAS,CAEN,GAAIvoC,KAAKilE,UAAUnkE,QAAQd,KAAKuoC,QAAU,EAAG,CAC5C08B,EAAY,GAEZ,IAAK,IAAIW,EAAO,EAAGA,EAAO,EAAGA,IAAQ,CACpCX,EAAUhgE,KAAKjF,KAAKuoC,KAAOq9B,EAChC,CAEI5lE,KAAKilE,UAAYA,CACrB,KAAU,CACNA,EAAYjlE,KAAKilE,SACrB,CACA,CAEE,MAAOjlE,KAAKylE,eAAe3iE,WAAY,CACtC9C,KAAKylE,eAAengE,YAAYtF,KAAKylE,eAAe3iE,WACvD,CAAGmiE,EAAU//D,SAAQ,SAAUic,GAC5B,IAAIi+C,EAASp8D,SAASC,cAAc,UACpCm8D,EAAOrhE,MAAQojB,EAEf,GAAIA,IAAS,KAAM,CAClBwkD,EAAQzjE,MAAMiC,QAAQiP,SAASC,KAAK,kBAAkB,SAAUtV,GAC/DqhE,EAAOrnD,UAAYha,CACxB,GACA,KAAU,CACNqhE,EAAOrnD,UAAYoJ,CACvB,CAEGwkD,EAAQF,eAAe3+D,YAAYs4D,EACtC,IAEEp/D,KAAKylE,eAAe1nE,MAAQiC,KAAKuoC,IACnC,CACA,EAGAw8B,GAAK1nE,UAAUiG,WAAa,SAAUuiE,GACrC,IAAIxgE,EAAOrF,KACP8lE,EACAC,EACAC,EAGJhmE,KAAKmlE,cAAgB/nE,OAAOqE,OAAO,GAAIzB,KAAK4jB,yBAC5C5jB,KAAKmlE,cAAgB/nE,OAAOqE,OAAOzB,KAAKmlE,cAAenlE,KAAKkC,MAAMkB,QAAQ+4B,oBAE1En8B,KAAKklE,kBAAoB9nE,OAAOqE,OAAO,GAAIzB,KAAKimE,6BAChDjmE,KAAKklE,kBAAoB9nE,OAAOqE,OAAOzB,KAAKklE,kBAAmBllE,KAAKkC,MAAMkB,QAAQg5B,wBAKlF/2B,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,oBAAoB,SAAUtV,GAC9DsH,EAAKggE,SAASttD,UAAYha,CAC5B,IAECsH,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,0BAA0B,SAAUtV,GACpEsH,EAAKggE,SAASjzD,aAAa,aAAcrU,GACzCsH,EAAKggE,SAASjzD,aAAa,QAASrU,EACtC,IAECsH,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,mBAAmB,SAAUtV,GAC7DsH,EAAKigE,QAAQvtD,UAAYha,CAC3B,IAECsH,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,yBAAyB,SAAUtV,GACnEsH,EAAKigE,QAAQlzD,aAAa,aAAcrU,GACxCsH,EAAKigE,QAAQlzD,aAAa,QAASrU,EACrC,IAECsH,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,mBAAmB,SAAUtV,GAC7DsH,EAAKkgE,QAAQxtD,UAAYha,CAC3B,IAECsH,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,yBAAyB,SAAUtV,GACnEsH,EAAKkgE,QAAQnzD,aAAa,aAAcrU,GACxCsH,EAAKkgE,QAAQnzD,aAAa,QAASrU,EACrC,IAECsH,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,mBAAmB,SAAUtV,GAC7DsH,EAAKmgE,QAAQztD,UAAYha,CAC3B,IAECsH,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,yBAAyB,SAAUtV,GACnEsH,EAAKmgE,QAAQpzD,aAAa,aAAcrU,GACxCsH,EAAKmgE,QAAQpzD,aAAa,QAASrU,EACrC,IAGCsH,EAAKggE,SAASjxD,iBAAiB,SAAS,WACvC/O,EAAK8e,QAAQ,GAAGtJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACzD,IAECzV,EAAKigE,QAAQlxD,iBAAiB,SAAS,WACtC/O,EAAKmjC,eAAe3tB,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC7D,IAECzV,EAAKkgE,QAAQnxD,iBAAiB,SAAS,WACtC/O,EAAKoY,WAAW5C,MAAK,WAAY,IAAIC,OAAM,WAAY,GACzD,IAECzV,EAAKmgE,QAAQpxD,iBAAiB,SAAS,WACtC/O,EAAK8e,QAAQ9e,EAAKlE,KAAK0Z,MAAK,WAAY,IAAIC,OAAM,WAAY,GAChE,IAEC,GAAIzV,EAAKnD,MAAMkB,QAAQ84B,kBAAmB,CACzC72B,EAAK/C,QAAU+C,EAAKnD,MAAMkB,QAAQ84B,iBACpC,CAEC,GAAIl8B,KAAKylE,eAAgB,CACxBK,EAAkB9iE,SAASC,cAAc,SAEzCoC,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,wBAAwB,SAAUtV,GAClEsH,EAAKogE,eAAerzD,aAAa,aAAcrU,GAC/CsH,EAAKogE,eAAerzD,aAAa,QAASrU,GAC1C+nE,EAAgB/tD,UAAYha,CAC/B,IAEEsH,EAAK/C,QAAQwE,YAAYg/D,GACzBzgE,EAAK/C,QAAQwE,YAAYzB,EAAKogE,gBAE9BpgE,EAAKogE,eAAerxD,iBAAiB,UAAU,SAAUC,GACxDhP,EAAKijC,YAAYjjC,EAAKogE,eAAe1nE,OAAS,OAAS,KAAOsH,EAAKogE,eAAe1nE,OAClFsH,EAAK8e,QAAQ,GAAGtJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC1D,GACA,CAGCzV,EAAK/C,QAAQwE,YAAYzB,EAAKggE,UAC9BhgE,EAAK/C,QAAQwE,YAAYzB,EAAKigE,SAC9BjgE,EAAK/C,QAAQwE,YAAYzB,EAAK+/D,cAC9B//D,EAAK/C,QAAQwE,YAAYzB,EAAKkgE,SAC9BlgE,EAAK/C,QAAQwE,YAAYzB,EAAKmgE,SAE9B,IAAKngE,EAAKnD,MAAMkB,QAAQ84B,oBAAsB2pC,EAAQ,CACrDxgE,EAAKnD,MAAMuL,cAAcspB,OAAO1xB,EAAK/C,QAAS+C,EAChD,CAGCA,EAAK6mC,KAAO7mC,EAAKnD,MAAMkB,QAAQ2b,WAE/B,GAAI1Z,EAAKnD,MAAMkB,QAAQ04B,eAAgB,CACtCz2B,EAAKkjC,KAAOljC,EAAKnD,MAAMkB,QAAQ04B,cACjC,KAAQ,CACNiqC,EAAY/iE,SAASC,cAAc,OACnC8iE,EAAU7iE,UAAUC,IAAI,iBACxB4iE,EAAU/hE,MAAMkjB,WAAa2+C,EAE7BG,EAAahjE,SAASC,cAAc,OACpC+iE,EAAW9iE,UAAUC,IAAI,kBACzB6iE,EAAWjuD,UAAY,gBAEvBguD,EAAUj/D,YAAYk/D,GAEtB3gE,EAAKnD,MAAMM,WAAWqa,kBAAkB/V,YAAYi/D,GAEpD1gE,EAAKkjC,KAAOrnC,KAAKsY,MAAMnU,EAAKnD,MAAMM,WAAWiB,aAAa8I,aAAew5D,EAAUvtD,cAEnFnT,EAAKnD,MAAMM,WAAWqa,kBAAkBvX,YAAYygE,EACtD,CAGC1gE,EAAK6/B,MAAQ7/B,EAAKnD,MAAMkB,QAAQ44B,sBAEhC32B,EAAKqgE,4BACN,EAEAX,GAAK1nE,UAAU+0C,sBAAwB,SAAUlG,GAChDlsC,KAAKsD,WAAW,MAChBtD,KAAKksC,KAAO,eAAiBA,EAC7BlsC,KAAKukB,gBAAkB,IACxB,EAEAwgD,GAAK1nE,UAAU8nB,gBAAkB,SAAUhnB,GAC1C6B,KAAKqgB,aAAeliB,CACrB,EAEA4mE,GAAK1nE,UAAU6nB,gBAAkB,WAChC,OAAOllB,KAAKqgB,YACb,EAGA0kD,GAAK1nE,UAAUioB,WAAa,SAAUo0C,GACrC,IAAKA,EAAU,CACd15D,KAAKmB,IAAM,CACb,KAAQ,CACNnB,KAAKmB,IAAMnB,KAAKuoC,OAAS,KAAO,EAAIrnC,KAAKwmB,KAAKgyC,EAAW15D,KAAKuoC,KAChE,CAEC,GAAIvoC,KAAKuhB,KAAOvhB,KAAKmB,IAAK,CACzBnB,KAAKuhB,KAAOvhB,KAAKmB,GACnB,CACA,EAGA4jE,GAAK1nE,UAAUkI,MAAQ,SAAU4H,EAAO0R,GACvC,GAAI7e,KAAKksC,MAAQ,SAAW/+B,EAAO,CAClCnN,KAAKuhB,KAAO,CACd,CAEC,GAAI1C,EAAgB,CACnB7e,KAAKglE,YAAc,IACrB,CAEC,OAAO,IACR,EAGAD,GAAK1nE,UAAU+qC,WAAa,SAAUjnC,GAErCA,EAAMwL,SAASxL,GAEfnB,KAAKmB,IAAMA,GAAO,EAElB,GAAInB,KAAKuhB,KAAOvhB,KAAKmB,IAAK,CACzBnB,KAAKuhB,KAAOvhB,KAAKmB,IACjBnB,KAAKkmE,SACP,CACA,EAGAnB,GAAK1nE,UAAU8mB,QAAU,SAAU5C,GAClC,IAAI4kD,EAAUnmE,KAEd,IAAIqF,EAAOrF,KAEX,OAAQuhB,GACP,IAAK,QACJ,OAAOvhB,KAAKmkB,QAAQ,GAGrB,IAAK,OACJ,OAAOnkB,KAAKwoC,eAGb,IAAK,OACJ,OAAOxoC,KAAKyd,WAGb,IAAK,OACJ,OAAOzd,KAAKmkB,QAAQnkB,KAAKmB,KAI3B,OAAO,IAAIoK,SAAQ,SAAUC,EAASC,GAErC8V,EAAO5U,SAAS4U,GAEhB,GAAIA,EAAO,GAAKA,GAAQ4kD,EAAQhlE,KAAOglE,EAAQj6B,OAAS,QAAS,CAChEi6B,EAAQ5kD,KAAOA,EACf4kD,EAAQD,UAAUrrD,MAAK,WACtBrP,GACJ,IAAMsP,OAAM,WACRrP,GACJ,IAEG,GAAIpG,EAAKnD,MAAMkB,QAAQiH,aAAehF,EAAKnD,MAAMgC,UAAU,cAAe,OAASmB,EAAKnD,MAAMiC,QAAQkG,YAAYC,OAAOiX,KAAM,CAC9Hlc,EAAKnD,MAAMiC,QAAQkG,YAAYE,KAAK,OACxC,CACA,KAAS,CACNwB,QAAQC,KAAK,4DAA8Dm6D,EAAQhlE,IAAM,IAAKogB,GAC9F9V,GACH,CACA,GACA,EAEAs5D,GAAK1nE,UAAUyvB,aAAe,SAAUpoB,GACvC,IAAI0hE,EAAUpmE,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GAErC,IAAId,EAAOy7D,EAAQlkE,MAAMM,WAAW2b,eAAeioD,EAAQ/lD,aAAe,GAC1E,IAAIliB,EAAQwM,EAAK7J,QAAQ4D,GAEzB,GAAIvG,GAAS,EAAG,CACf,IAAIojB,EAAO6kD,EAAQ79B,OAAS,KAAO,EAAIrnC,KAAKwmB,MAAMvpB,EAAQ,GAAKioE,EAAQ79B,MAEvE69B,EAAQjiD,QAAQ5C,GAAM1G,MAAK,WAC1BrP,GACJ,IAAMsP,OAAM,WACRrP,GACJ,GACA,KAAS,CACNM,QAAQC,KAAK,mDACbP,GACH,CACA,GACA,EAEAs5D,GAAK1nE,UAAUirC,YAAc,SAAUC,GACtC,GAAIA,IAAS,KAAM,CAClBA,EAAO57B,SAAS47B,EAClB,CAEC,GAAIA,EAAO,EAAG,CACbvoC,KAAKuoC,KAAOA,CACd,CAEC,GAAIvoC,KAAKylE,eAAgB,CAExBzlE,KAAK0lE,4BACP,CAEC,GAAI1lE,KAAKkC,MAAMkB,QAAQiH,aAAerK,KAAKkC,MAAMgC,UAAU,cAAe,OAASlE,KAAKkC,MAAMiC,QAAQkG,YAAYC,OAAOiX,KAAM,CAC9HvhB,KAAKkC,MAAMiC,QAAQkG,YAAYE,KAAK,OACtC,CACA,EAGAw6D,GAAK1nE,UAAUgpE,gBAAkB,WAChC,IAAIhhE,EAAOrF,KAEX,IAAIsmE,EAAWplE,KAAKsY,OAAOxZ,KAAKklC,MAAQ,GAAK,GAC7C,IAAIqhC,EAAYrlE,KAAKwmB,MAAM1nB,KAAKklC,MAAQ,GAAK,GAC7C,IAAIp5B,EAAM9L,KAAKmB,IAAMnB,KAAKuhB,KAAO+kD,EAAW,EAAItmE,KAAKklC,MAAQllC,KAAKmB,IAAMnB,KAAKklC,MAAQ,EAAIhkC,KAAKC,IAAInB,KAAKuhB,KAAO+kD,EAAU,GACxH,IAAInlE,EAAMnB,KAAKuhB,MAAQglD,EAAYrlE,KAAK4K,IAAI9L,KAAKklC,MAAOllC,KAAKmB,KAAOD,KAAK4K,IAAI9L,KAAKuhB,KAAOglD,EAAWvmE,KAAKmB,KAEzG,MAAOkE,EAAK+/D,aAAatiE,WAAY,CACpCuC,EAAK+/D,aAAa9/D,YAAYD,EAAK+/D,aAAatiE,WAClD,CAAE,GAAIuC,EAAKkc,MAAQ,EAAG,CACpBlc,EAAKggE,SAAShG,SAAW,KACzBh6D,EAAKigE,QAAQjG,SAAW,IAC1B,KAAQ,CACNh6D,EAAKggE,SAAShG,SAAW,MACzBh6D,EAAKigE,QAAQjG,SAAW,KAC1B,CAEC,GAAIh6D,EAAKkc,MAAQlc,EAAKlE,IAAK,CAC1BkE,EAAKmgE,QAAQnG,SAAW,KACxBh6D,EAAKkgE,QAAQlG,SAAW,IAC1B,KAAQ,CACNh6D,EAAKmgE,QAAQnG,SAAW,MACxBh6D,EAAKkgE,QAAQlG,SAAW,KAC1B,CAEC,IAAK,IAAImH,EAAO16D,EAAK06D,GAAQrlE,EAAKqlE,IAAQ,CACzC,GAAIA,EAAO,GAAKA,GAAQnhE,EAAKlE,IAAK,CACjCkE,EAAK+/D,aAAat+D,YAAYzB,EAAKohE,oBAAoBD,GAC1D,CACA,CAECxmE,KAAKm3B,cACN,EAEA4tC,GAAK1nE,UAAUopE,oBAAsB,SAAUllD,GAC9C,IAAIlc,EAAOrF,KACPqhD,EAASr+C,SAASC,cAAc,UAEpCo+C,EAAOn+C,UAAUC,IAAI,kBACrB,GAAIoe,GAAQlc,EAAKkc,KAAM,CACtB8/B,EAAOn+C,UAAUC,IAAI,SACvB,CAECk+C,EAAOjvC,aAAa,OAAQ,UAC5BivC,EAAOjvC,aAAa,OAAQ,UAE5B/M,EAAKnD,MAAMiC,QAAQiP,SAASC,KAAK,yBAAyB,SAAUtV,GACnEsjD,EAAOjvC,aAAa,aAAcrU,EAAQ,IAAMwjB,GAChD8/B,EAAOjvC,aAAa,QAASrU,EAAQ,IAAMwjB,EAC7C,IAEC8/B,EAAOjvC,aAAa,YAAamP,GACjC8/B,EAAO0a,YAAcx6C,EAErB8/B,EAAOjtC,iBAAiB,SAAS,SAAUC,GAC1ChP,EAAK8e,QAAQ5C,GAAM1G,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC5D,IAEC,OAAOumC,CACR,EAGA0jB,GAAK1nE,UAAUmrC,aAAe,WAC7B,IAAIk+B,EAAU1mE,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,GAAIi7D,EAAQnlD,KAAO,EAAG,CACrBmlD,EAAQnlD,OACRmlD,EAAQR,UAAUrrD,MAAK,WACtBrP,GACJ,IAAMsP,OAAM,WACRrP,GACJ,IAEG,GAAIi7D,EAAQxkE,MAAMkB,QAAQiH,aAAeq8D,EAAQxkE,MAAMgC,UAAU,cAAe,OAASwiE,EAAQxkE,MAAMiC,QAAQkG,YAAYC,OAAOiX,KAAM,CACvImlD,EAAQxkE,MAAMiC,QAAQkG,YAAYE,KAAK,OAC3C,CACA,KAAS,CACNwB,QAAQC,KAAK,8DAA+D,GAC5EP,GACH,CACA,GACA,EAGAs5D,GAAK1nE,UAAUogB,SAAW,WACzB,IAAIkpD,EAAU3mE,KAEd,OAAO,IAAIuL,SAAQ,SAAUC,EAASC,GACrC,GAAIk7D,EAAQplD,KAAOolD,EAAQxlE,IAAK,CAC/BwlE,EAAQplD,OACRolD,EAAQT,UAAUrrD,MAAK,WACtBrP,GACJ,IAAMsP,OAAM,WACRrP,GACJ,IAEG,GAAIk7D,EAAQzkE,MAAMkB,QAAQiH,aAAes8D,EAAQzkE,MAAMgC,UAAU,cAAe,OAASyiE,EAAQzkE,MAAMiC,QAAQkG,YAAYC,OAAOiX,KAAM,CACvIolD,EAAQzkE,MAAMiC,QAAQkG,YAAYE,KAAK,OAC3C,CACA,KAAS,CACN,IAAKo8D,EAAQpiD,gBAAiB,CAC7BxY,QAAQC,KAAK,sEAAwE26D,EAAQxlE,IAAM,IAAKwlE,EAAQxlE,IAAM,EAC1H,CACGsK,GACH,CACA,GACA,EAGAs5D,GAAK1nE,UAAUorC,QAAU,WACxB,OAAOzoC,KAAKuhB,IACb,EAGAwjD,GAAK1nE,UAAUqrC,WAAa,WAC3B,OAAO1oC,KAAKmB,GACb,EAEA4jE,GAAK1nE,UAAUmkB,YAAc,SAAU+mB,GACtC,OAAOvoC,KAAKuoC,IACb,EAEAw8B,GAAK1nE,UAAU0P,QAAU,WACxB,OAAO/M,KAAKksC,IACb,EAGA64B,GAAK1nE,UAAUgmB,QAAU,SAAU/e,GAClC,IAAI2E,EAAQrI,EAAO4hB,EAEnB,GAAIxiB,KAAKksC,MAAQ,QAAS,CACzBjjC,EAAS,GAET,GAAIjJ,KAAKuoC,OAAS,KAAM,CACvB3nC,EAAQ,EACR4hB,EAAMle,EAAKlG,MACd,KAAS,CACNwC,EAAQZ,KAAKuoC,MAAQvoC,KAAKuhB,KAAO,GACjCiB,EAAM5hB,EAAQ+L,SAAS3M,KAAKuoC,KAC/B,CAEEvoC,KAAKqmE,kBAEL,IAAK,IAAIO,EAAOhmE,EAAOgmE,EAAOpkD,EAAKokD,IAAQ,CAC1C,GAAItiE,EAAKsiE,GAAO,CACf39D,EAAOhE,KAAKX,EAAKsiE,GACrB,CACA,CAEE,OAAO39D,CACT,KAAQ,CAENjJ,KAAKqmE,kBAEL,OAAO/hE,EAAKwgB,MAAM,EACpB,CACA,EAEAigD,GAAK1nE,UAAU6oE,QAAU,WACxB,IAAIW,EAAU7mE,KAEd,IAAI4D,EAEJ,OAAO,IAAI2H,SAAQ,SAAUC,EAASC,GAErC,OAAQo7D,EAAQ36B,MACf,IAAK,QACJtoC,EAAOijE,EAAQ3kE,MAAMM,WAAWI,WAEhCikE,EAAQ3kE,MAAMM,WAAWmd,kBAAkB,QAC3CknD,EAAQ3kE,MAAMM,WAAWmB,iBAAiBC,GAE1CijE,EAAQ3kE,MAAMkB,QAAQk9B,WAAW5iC,KAAKmpE,EAAQ3kE,MAAO2kE,EAAQp+B,WAC7Dj9B,IACA,MAED,IAAK,SACL,IAAK,mBACL,IAAK,qBACJq7D,EAAQ3kE,MAAMiC,QAAQqZ,KAAKqmB,qBAC3BgjC,EAAQC,iBAAiBjsD,MAAK,WAC7BrP,GACL,IAAOsP,OAAM,WACRrP,GACL,IACI,MAED,QACCM,QAAQC,KAAK,8CAA+C66D,EAAQ36B,MACpEzgC,IAEJ,GACA,EAEAs5D,GAAK1nE,UAAUypE,eAAiB,WAC/B,IAAIC,EAAU/mE,KAEd,IAAIqF,EAAOrF,KACPgnE,EACAC,EAEJ,OAAO,IAAI17D,SAAQ,SAAUC,EAASC,GAErC,IAAKpG,EAAKnD,MAAMgC,UAAU,OAAQ,MAAO,CACxCuH,GACH,CAGEu7D,EAAY55D,EAAU/P,UAAUgQ,QAAQk+B,UAAUlmC,EAAKnD,MAAMiC,QAAQqZ,KAAK60B,aAAe,IACzF40B,EAAa5hE,EAAKnD,MAAMiC,QAAQqZ,KAAK60B,YAGrC40B,EAAWF,EAAQ5B,cAAc5jD,MAAQlc,EAAKkc,KAG9C,GAAIwlD,EAAQx+B,KAAM,CACjB0+B,EAAWF,EAAQ5B,cAAc58B,MAAQw+B,EAAQx+B,IACpD,CAGE,GAAIw+B,EAAQ7kE,MAAMkB,QAAQqgB,aAAesjD,EAAQ7kE,MAAMgC,UAAU,QAAS,CACzE,IAAIwf,EAAUre,EAAKnD,MAAMiC,QAAQmR,KAAKqO,UAEtCD,EAAQxe,SAAQ,SAAUic,UAClBA,EAAKhb,MAChB,IAEG8gE,EAAWF,EAAQ5B,cAAczhD,SAAWA,CAC/C,CAGE,GAAIqjD,EAAQ7kE,MAAMkB,QAAQygB,eAAiBkjD,EAAQ7kE,MAAMgC,UAAU,UAAW,CAC7E,IAAI4f,EAAUze,EAAKnD,MAAMiC,QAAQqK,OAAOuV,WAAW,KAAM,MACzDkjD,EAAWF,EAAQ5B,cAAcrhD,SAAWA,CAC/C,CAEEze,EAAKnD,MAAMiC,QAAQqZ,KAAKwG,UAAUijD,GAElC5hE,EAAKnD,MAAMiC,QAAQqZ,KAAKyG,YAAY8iD,EAAQxiD,iBAAiB1J,MAAK,SAAUvW,GAC3Ee,EAAK6hE,iBAAiB5iE,GACtBkH,GACH,IAAKsP,OAAM,SAAUzG,GAClB5I,GACH,IAEEpG,EAAKnD,MAAMiC,QAAQqZ,KAAKwG,UAAUgjD,EACpC,GACA,EAEAjC,GAAK1nE,UAAU6pE,iBAAmB,SAAU5iE,GAC3C,IAAIe,EAAOrF,KACP4D,EACAU,EACA2jB,EAEJ,UAAW3jB,EAAKtE,KAAKklE,kBAAkBiC,aAAe,YAAa,CAClEp7D,QAAQC,KAAK,sDAAwDhM,KAAKklE,kBAAkBiC,UAAY,aAC1G,CAEC,GAAI7iE,EAAKtE,KAAKklE,kBAAkB5gE,MAAO,CACtCtE,KAAKmB,IAAMwL,SAASrI,EAAKtE,KAAKklE,kBAAkBiC,aAAe,EAE/D,GAAInnE,KAAKukB,gBAAiB,CACzB,OAAQvkB,KAAKksC,MACZ,IAAK,mBAEJ,GAAIlsC,KAAKuhB,MAAQ,EAAG,CACnBvhB,KAAKkC,MAAMM,WAAWmc,QAAQra,EAAKtE,KAAKklE,kBAAkB5gE,MAAO,MAAOtE,KAAKglE,aAAehlE,KAAKuhB,MAAQ,EAC/G,KAAY,CACNvhB,KAAKkC,MAAMM,WAAWue,QAAQzc,EAAKtE,KAAKklE,kBAAkB5gE,MAChE,CAEK,GAAItE,KAAKuhB,KAAOvhB,KAAKmB,IAAK,CACzB6T,YAAW,WACV3P,EAAKoY,WAAW5C,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC9D,GAASzV,EAAKnD,MAAMkB,QAAQ05B,yBAC5B,CACK,MAED,IAAK,qBACJx4B,EAAOtE,KAAKkC,MAAMM,WAAWie,UAAU5V,OAAOvG,EAAKtE,KAAKklE,kBAAkB5gE,OAE1EtE,KAAKkC,MAAMM,WAAWmc,QAAQra,EAAM,KAAMtE,KAAKglE,aAAehlE,KAAKuhB,MAAQ,GAE3E0G,EAASjoB,KAAKkC,MAAMkB,QAAQ25B,iCAAmC/8B,KAAKkC,MAAMM,WAAWF,QAAQiK,aAAe,EAE5G,GAAIlH,EAAKnD,MAAMM,WAAWF,QAAQgK,cAAgBjH,EAAKnD,MAAMM,WAAWF,QAAQiK,aAAe0b,EAAQ,CACtG5iB,EAAKoY,WAAW5C,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC7D,CACK,MAEL,KAAS,CACNlX,EAAO5D,KAAKkC,MAAMM,WAAWI,WAE7B5C,KAAKkC,MAAMM,WAAWmc,QAAQra,EAAKtE,KAAKklE,kBAAkB5gE,MAAO,MAAOtE,KAAKglE,aAAehlE,KAAKuhB,MAAQ,GAEzGvhB,KAAKkC,MAAMM,WAAWmB,iBAAiBC,GAEvC5D,KAAKkC,MAAMkI,cAAczG,iBAAiBC,GAE1C5D,KAAKkC,MAAMkB,QAAQk9B,WAAW5iC,KAAKsC,KAAKkC,MAAOlC,KAAKyoC,UACvD,CAEEzoC,KAAKglE,YAAc,KACrB,KAAQ,CACNj5D,QAAQC,KAAK,sDAAwDhM,KAAKklE,kBAAkB5gE,KAAO,aACrG,CACA,EAGAygE,GAAK1nE,UAAU85B,aAAe,WAC7B,IAAIiwC,EAASpnE,KAAKkC,MAAMuL,cAAcnL,QAEtC,GAAIpB,KAAKwmB,KAAK0/C,EAAOrjE,aAAeqjE,EAAOtjE,YAAc,EAAG,CAC3D9D,KAAKolE,aAAaphE,MAAMkV,QAAU,MACpC,KAAQ,CACNlZ,KAAKolE,aAAaphE,MAAMkV,QAAU,GAElC,GAAIhY,KAAKwmB,KAAK0/C,EAAOrjE,aAAeqjE,EAAOtjE,YAAc,EAAG,CAC3D9D,KAAKolE,aAAaphE,MAAMkV,QAAU,MACrC,CACA,CACA,EAGA6rD,GAAK1nE,UAAUumB,wBAA0B,CACxCrC,KAAQ,OACRgnB,KAAQ,OACR7kB,QAAW,UAEXI,QAAW,WAMZihD,GAAK1nE,UAAU4oE,4BAA8B,CAC5CoB,aAAgB,eAChBF,UAAa,YACb7iE,KAAQ,QAGT8I,EAAU/P,UAAUytC,eAAe,OAAQi6B,IAE3C,IAAIuC,GAAc,SAASA,EAAYplE,GACtClC,KAAKkC,MAAQA,EACblC,KAAKksC,KAAO,GACZlsC,KAAKunE,GAAK,GAEVvnE,KAAKwnE,gBAAkB,MACvBxnE,KAAKsK,OAAS,GACdtK,KAAKynE,SAAW,MAChBznE,KAAK0nE,UAAY,KAClB,EAGAJ,GAAYjqE,UAAUsqE,iBAAmB,WACxC,IAAIC,EAAU,kBAEd,IACCz9C,OAAO09C,aAAatiB,QAAQqiB,EAASA,GACrCz9C,OAAO09C,aAAaC,WAAWF,GAC/B,OAAO,IACT,CAAG,MAAOvzD,GACR,OAAO,KACT,CACA,EAGAizD,GAAYjqE,UAAUiG,WAAa,WAGlC,IAAI4oC,EAAOlsC,KAAKkC,MAAMkB,QAAQo4B,gBAC1B+rC,EAAKvnE,KAAKkC,MAAMkB,QAAQm4B,cACxBwsC,EAEJ/nE,KAAKksC,KAAOA,IAAS,KAAOA,EAAOlsC,KAAK2nE,mBAAqB,QAAU,SAEvE,GAAI3nE,KAAKkC,MAAMkB,QAAQq4B,sBAAuB,CAC7C,UAAWz7B,KAAKkC,MAAMkB,QAAQq4B,wBAA0B,WAAY,CACnEz7B,KAAKynE,SAAWznE,KAAKkC,MAAMkB,QAAQq4B,qBACtC,KAAS,CACN,GAAIz7B,KAAKgoE,QAAQhoE,KAAKkC,MAAMkB,QAAQq4B,uBAAwB,CAC3Dz7B,KAAKynE,SAAWznE,KAAKgoE,QAAQhoE,KAAKkC,MAAMkB,QAAQq4B,sBACpD,KAAU,CACN1vB,QAAQC,KAAK,8CAA+ChM,KAAKkC,MAAMkB,QAAQq4B,sBACnF,CACA,CACA,KAAQ,CACN,GAAIz7B,KAAKgoE,QAAQhoE,KAAKksC,MAAO,CAC5BlsC,KAAKynE,SAAWznE,KAAKgoE,QAAQhoE,KAAKksC,KACrC,KAAS,CACNngC,QAAQC,KAAK,8CAA+ChM,KAAKksC,KACpE,CACA,CAEC,GAAIlsC,KAAKkC,MAAMkB,QAAQs4B,sBAAuB,CAC7C,UAAW17B,KAAKkC,MAAMkB,QAAQs4B,wBAA0B,WAAY,CACnE17B,KAAK0nE,UAAY1nE,KAAKkC,MAAMkB,QAAQs4B,qBACvC,KAAS,CACN,GAAI17B,KAAKgoE,QAAQhoE,KAAKkC,MAAMkB,QAAQs4B,uBAAwB,CAC3D17B,KAAK0nE,UAAY1nE,KAAKgoE,QAAQhoE,KAAKkC,MAAMkB,QAAQs4B,sBACrD,KAAU,CACN3vB,QAAQC,KAAK,+CAAgDhM,KAAKkC,MAAMkB,QAAQs4B,sBACpF,CACA,CACA,KAAQ,CACN,GAAI17B,KAAKioE,QAAQjoE,KAAKksC,MAAO,CAC5BlsC,KAAK0nE,UAAY1nE,KAAKioE,QAAQjoE,KAAKksC,KACtC,KAAS,CACNngC,QAAQC,KAAK,+CAAgDhM,KAAKksC,KACrE,CACA,CAGClsC,KAAKunE,GAAK,cAAgBA,GAAMvnE,KAAKkC,MAAMI,QAAQ6gD,aAAa,OAAS,IAEzEnjD,KAAKsK,OAAS,CACbgL,KAAMtV,KAAKkC,MAAMkB,QAAQiH,cAAgB,MAAQrK,KAAKkC,MAAMkB,QAAQiH,YAAYiL,KAChF9G,OAAQxO,KAAKkC,MAAMkB,QAAQiH,cAAgB,MAAQrK,KAAKkC,MAAMkB,QAAQiH,YAAYmE,OAClFsc,MAAO9qB,KAAKkC,MAAMkB,QAAQiH,cAAgB,MAAQrK,KAAKkC,MAAMkB,QAAQiH,YAAYygB,MACjFvJ,KAAMvhB,KAAKkC,MAAMkB,QAAQiH,cAAgB,MAAQrK,KAAKkC,MAAMkB,QAAQiH,YAAYkX,KAChF9e,QAASzC,KAAKkC,MAAMkB,QAAQiH,cAAgB,KAAO,CAAC,QAAS,QAAS,WAAarK,KAAKkC,MAAMkB,QAAQiH,YAAY5H,SAInH,GAAIzC,KAAKsK,OAAOiX,KAAM,CACrBwmD,EAAgB/nE,KAAKkoE,aAAa,QAElC,GAAIH,EAAe,CAClB,UAAWA,EAAcjsC,iBAAmB,cAAgB97B,KAAKsK,OAAOiX,OAAS,MAAQvhB,KAAKsK,OAAOiX,KAAKgnB,MAAO,CAChHvoC,KAAKkC,MAAMkB,QAAQ04B,eAAiBisC,EAAcjsC,cACtD,CAEG,UAAWisC,EAAchsC,wBAA0B,cAAgB/7B,KAAKsK,OAAOiX,OAAS,MAAQvhB,KAAKsK,OAAOiX,KAAKA,MAAO,CACvHvhB,KAAKkC,MAAMkB,QAAQ24B,sBAAwBgsC,EAAchsC,qBAC7D,CACA,CACA,CAGC,GAAI/7B,KAAKsK,OAAOwgB,MAAO,CACtBi9C,EAAgB/nE,KAAKkoE,aAAa,SAElC,GAAIH,EAAe,CAClB,UAAWA,EAAc9qD,UAAY,cAAgBjd,KAAKsK,OAAOwgB,QAAU,MAAQ9qB,KAAKsK,OAAOwgB,MAAM7N,SAAU,CAC9Gjd,KAAKkC,MAAMkB,QAAQ6Z,QAAU8qD,EAAc9qD,OAC/C,CACG,UAAW8qD,EAAc/qC,iBAAmB,cAAgBh9B,KAAKsK,OAAOwgB,QAAU,MAAQ9qB,KAAKsK,OAAOwgB,MAAMkS,gBAAiB,CAC5Hh9B,KAAKkC,MAAMkB,QAAQ45B,eAAiB+qC,EAAc/qC,cACtD,CACG,UAAW+qC,EAAc7qC,cAAgB,cAAgBl9B,KAAKsK,OAAOwgB,QAAU,MAAQ9qB,KAAKsK,OAAOwgB,MAAMoS,aAAc,CACtHl9B,KAAKkC,MAAMkB,QAAQ85B,YAAc6qC,EAAc7qC,WACnD,CACA,CACA,CAEC,GAAIl9B,KAAKsK,OAAO7H,QAAS,CACxBzC,KAAKkC,MAAMkB,QAAQX,QAAUzC,KAAKiiC,KAAK,UAAWjiC,KAAKkC,MAAMkB,QAAQX,QACvE,CACA,EAEA6kE,GAAYjqE,UAAUwW,iBAAmB,SAAU1N,GAClD,IAAId,EAAOrF,KACPmF,EACAkD,EAEJ,GAAIrI,KAAKsK,OAAO7H,QAAS,CACxBzC,KAAKwnE,gBAAkB,KAEvBriE,EAAMgB,EAAO+C,gBAEbb,EAAOrI,KAAKsK,OAAO7H,UAAY,KAAOrF,OAAOiL,KAAKlD,GAAOnF,KAAKsK,OAAO7H,QAErE4F,EAAKnD,SAAQ,SAAUzH,GACtB,IAAI0B,EAAQ/B,OAAO+qE,yBAAyBhjE,EAAK1H,GACjD,IAAIM,EAAQoH,EAAI1H,GAChB,GAAI0B,EAAO,CACV/B,OAAO2C,eAAeoF,EAAK1H,EAAK,CAC/B2qE,IAAK,SAASA,EAAI5pE,GACjBT,EAAQS,EAER,IAAK6G,EAAKmiE,gBAAiB,CAC1BniE,EAAKkF,KAAK,UACjB,CAEM,GAAIpL,EAAMipE,IAAK,CACdjpE,EAAMipE,IAAI5pE,EACjB,CACA,EACK6pE,IAAK,SAASA,IACb,GAAIlpE,EAAMkpE,IAAK,CACdlpE,EAAMkpE,KACb,CACM,OAAOtqE,CACb,GAEA,CACA,IAEEiC,KAAKwnE,gBAAkB,KACzB,CACA,EAGAF,GAAYjqE,UAAU4kC,KAAO,SAAUt0B,EAAMs6C,GAC5C,IAAI3jD,EAAOtE,KAAKkoE,aAAav6D,GAE7B,GAAIs6C,EAAS,CACZ3jD,EAAOA,EAAOtE,KAAKsmC,gBAAgB2hB,EAAS3jD,GAAQ2jD,CACtD,CAEC,OAAO3jD,CACR,EAGAgjE,GAAYjqE,UAAU6qE,aAAe,SAAUv6D,GAC9C,OAAO3N,KAAKynE,SAAWznE,KAAKynE,SAASznE,KAAKunE,GAAI55D,GAAQ,KACvD,EAGA25D,GAAYjqE,UAAUipC,gBAAkB,SAAUgiC,EAASC,GAC1D,IAAIljE,EAAOrF,KACPiJ,EAAS,GAGbs/D,EAAUA,GAAW,GAErBA,EAAQrjE,SAAQ,SAAUiB,EAAQvE,GAEjC,IAAI8H,EAAOrE,EAAKmjE,YAAYF,EAASniE,GACjCkC,EAEJ,GAAIqB,EAAM,CAET,GAAIrE,EAAKiF,OAAO7H,UAAY,MAAQ4C,EAAKiF,OAAO7H,SAAW/D,UAAW,CACrE2J,EAAOjL,OAAOiL,KAAKqB,GACnBrB,EAAKpD,KAAK,QACd,KAAU,CACNoD,EAAOhD,EAAKiF,OAAO7H,OACvB,CAEG4F,EAAKnD,SAAQ,SAAUzH,GACtB,GAAIA,IAAQ,kBAAoB0I,EAAO1I,KAAS,YAAa,CAC5DiM,EAAKjM,GAAO0I,EAAO1I,EACxB,CACA,IAEG,GAAIiM,EAAKjH,QAAS,CACjBiH,EAAKjH,QAAU4C,EAAKihC,gBAAgB58B,EAAKjH,QAAS0D,EAAO1D,QAC7D,CAEGwG,EAAOhE,KAAKyE,EACf,CACA,IAEC4+D,EAAQpjE,SAAQ,SAAUiB,EAAQX,GACjC,IAAIkE,EAAOrE,EAAKmjE,YAAYD,EAASpiE,GACrC,IAAKuD,EAAM,CACV,GAAIT,EAAO7K,OAASoH,EAAG,CACtByD,EAAOvC,OAAOlB,EAAG,EAAGW,EACxB,KAAU,CACN8C,EAAOhE,KAAKkB,EAChB,CACA,CACA,IAEC,OAAO8C,CACR,EAGAq+D,GAAYjqE,UAAUmrE,YAAc,SAAU/lE,EAASmF,GACtD,IAAI+F,EAAO/F,EAAQnF,QAAU,QAAUmF,EAAQ/C,MAAQ,QAAU,SAEjE,OAAOpC,EAAQjC,MAAK,SAAUoE,GAC7B,OAAQ+I,GACP,IAAK,QACJ,OAAO/I,EAAIE,QAAU8C,EAAQ9C,OAASF,EAAInC,QAAQrE,SAAWwJ,EAAQnF,QAAQrE,OAG9E,IAAK,QACJ,OAAOwG,EAAIC,QAAU+C,EAAQ/C,MAG9B,IAAK,SACJ,OAAOD,IAAQgD,EAGnB,GACA,EAGA0/D,GAAYjqE,UAAUkN,KAAO,SAAUoD,GACtC,IAAIrJ,EAAO,GAEX,OAAQqJ,GACP,IAAK,UACJrJ,EAAOtE,KAAKomC,aAAapmC,KAAKkC,MAAMkI,cAAczB,cAClD,MAED,IAAK,SACJrE,EAAOtE,KAAKkC,MAAMiC,QAAQqK,OAAOuV,aACjC,MAED,IAAK,OACJzf,EAAOtE,KAAKyoE,gBAAgBzoE,KAAKkC,MAAMiC,QAAQmR,KAAKqO,WACpD,MAED,IAAK,QACJrf,EAAOtE,KAAK0oE,iBACZ,MAED,IAAK,OACJpkE,EAAOtE,KAAK2oE,gBACZ,MAGF,GAAI3oE,KAAK0nE,UAAW,CACnB1nE,KAAK0nE,UAAU1nE,KAAKunE,GAAI55D,EAAMrJ,EAChC,CACA,EAGAgjE,GAAYjqE,UAAUorE,gBAAkB,SAAUnkE,GACjDA,EAAKY,SAAQ,SAAUic,GACtBA,EAAKhb,OAASgb,EAAKtc,aACZsc,EAAKtc,KACd,IAEC,OAAOP,CACR,EAEAgjE,GAAYjqE,UAAUqrE,eAAiB,WACtC,IAAIpkE,EAAO,GAEX,GAAItE,KAAKsK,OAAOwgB,MAAO,CACtB,GAAI9qB,KAAKsK,OAAOwgB,QAAU,MAAQ9qB,KAAKsK,OAAOwgB,MAAM7N,QAAS,CAC5D3Y,EAAK2Y,QAAUjd,KAAKkC,MAAMkB,QAAQ6Z,OACrC,CAEE,GAAIjd,KAAKsK,OAAOwgB,QAAU,MAAQ9qB,KAAKsK,OAAOwgB,MAAMkS,eAAgB,CACnE14B,EAAK04B,eAAiBh9B,KAAKkC,MAAMkB,QAAQ45B,cAC5C,CAEE,GAAIh9B,KAAKsK,OAAOwgB,QAAU,MAAQ9qB,KAAKsK,OAAOwgB,MAAMoS,YAAa,CAChE54B,EAAK44B,YAAcl9B,KAAKkC,MAAMkB,QAAQ85B,WACzC,CACA,CAEC,OAAO54B,CACR,EAEAgjE,GAAYjqE,UAAUsrE,cAAgB,WACrC,IAAIrkE,EAAO,GAEX,GAAItE,KAAKsK,OAAOiX,KAAM,CACrB,GAAIvhB,KAAKsK,OAAOiX,OAAS,MAAQvhB,KAAKsK,OAAOiX,KAAKgnB,KAAM,CACvDjkC,EAAKw3B,eAAiB97B,KAAKkC,MAAMiC,QAAQod,KAAKC,aACjD,CAEE,GAAIxhB,KAAKsK,OAAOiX,OAAS,MAAQvhB,KAAKsK,OAAOiX,KAAKA,KAAM,CACvDjd,EAAKy3B,sBAAwB/7B,KAAKkC,MAAMiC,QAAQod,KAAKknB,SACxD,CACA,CAEC,OAAOnkC,CACR,EAGAgjE,GAAYjqE,UAAU+oC,aAAe,SAAU3jC,GAC9C,IAAI4C,EAAOrF,KACPwE,EAAc,GACdokE,EAAe,CAAC,oBAAqB,aAAc,cAAe,aAEtEnmE,EAAQyC,SAAQ,SAAUiB,GACzB,IAAI0iE,EAAW,GACXC,EAAS3iE,EAAO+C,gBAChBb,EAEJ,GAAIlC,EAAO8D,QAAS,CACnB4+D,EAAS/jE,MAAQgkE,EAAOhkE,MACxB+jE,EAASpmE,QAAU4C,EAAK+gC,aAAajgC,EAAOwC,aAC/C,KAAS,CACNkgE,EAAShkE,MAAQsB,EAAO+G,WAExB,GAAI7H,EAAKiF,OAAO7H,UAAY,MAAQ4C,EAAKiF,OAAO7H,SAAW/D,UAAW,CACrE2J,EAAOjL,OAAOiL,KAAKygE,GACnBzgE,EAAKpD,KAAK,QACd,KAAU,CACNoD,EAAOhD,EAAKiF,OAAO7H,OACvB,CAEG4F,EAAKnD,SAAQ,SAAUzH,GAEtB,OAAQA,GACP,IAAK,QACJorE,EAASr/D,MAAQrD,EAAOoD,WACxB,MACD,IAAK,UACJs/D,EAASngE,QAAUvC,EAAOuC,QAC1B,MAED,QACC,UAAWogE,EAAOrrE,KAAS,YAAcmrE,EAAa9nE,QAAQrD,MAAU,EAAG,CAC1EorE,EAASprE,GAAOqrE,EAAOrrE,EAC9B,EAEA,GACA,CAEE+G,EAAYS,KAAK4jE,EACnB,IAEC,OAAOrkE,CACR,EAGA8iE,GAAYjqE,UAAU2qE,QAAU,CAC/Be,MAAO,SAASA,EAAMxB,EAAI55D,GACzB,IAAIrJ,EAAOujE,aAAamB,QAAQzB,EAAK,IAAM55D,GAE3C,OAAOrJ,EAAOqsB,KAAKC,MAAMtsB,GAAQ,KACnC,EACC2kE,OAAQ,SAASA,EAAO1B,EAAI55D,GAC3B,IAAIs7D,EAASjmE,SAASimE,OAClBxrE,EAAM8pE,EAAK,IAAM55D,EACjBu7D,EAAYD,EAAOnoE,QAAQrD,EAAM,KACjC+kB,EACAle,EAGJ,GAAI4kE,GAAa,EAAG,CACnBD,EAASA,EAAOlmC,OAAOmmC,GAEvB1mD,EAAMymD,EAAOnoE,QAAQ,KAErB,GAAI0hB,GAAO,EAAG,CACbymD,EAASA,EAAOlmC,OAAO,EAAGvgB,EAC9B,CAEGle,EAAO2kE,EAAOxvB,QAAQh8C,EAAM,IAAK,GACpC,CAEE,OAAO6G,EAAOqsB,KAAKC,MAAMtsB,GAAQ,KACnC,GAIAgjE,GAAYjqE,UAAU4qE,QAAU,CAC/Bc,MAAO,SAASA,EAAMxB,EAAI55D,EAAMrJ,GAC/BujE,aAAatiB,QAAQgiB,EAAK,IAAM55D,EAAMgjB,KAAKwjB,UAAU7vC,GACvD,EACC2kE,OAAQ,SAASA,EAAO1B,EAAI55D,EAAMrJ,GACjC,IAAI6kE,EAAa,IAAI19B,KAErB09B,EAAWC,QAAQD,EAAWE,UAAY,KAE1CrmE,SAASimE,OAAS1B,EAAK,IAAM55D,EAAO,IAAMgjB,KAAKwjB,UAAU7vC,GAAQ,aAAe6kE,EAAWG,aAC7F,GAGAl8D,EAAU/P,UAAUytC,eAAe,cAAew8B,IAElD,IAAIiC,GAAQ,SAASA,EAAMrnE,GAC1BlC,KAAKkC,MAAQA,EACblC,KAAKsC,QAAU,MACftC,KAAKwpE,YAAc,KACpB,EAEAD,GAAMlsE,UAAUiG,WAAa,WAC5B6mB,OAAO/V,iBAAiB,cAAepU,KAAKypE,aAAap2D,KAAKrT,OAC9DmqB,OAAO/V,iBAAiB,aAAcpU,KAAK0pE,QAAQr2D,KAAKrT,MACzD,EAEAupE,GAAMlsE,UAAUosE,aAAe,WAC9B,IAAKzpE,KAAKwpE,YAAa,CACtBxpE,KAAKsC,QAAUU,SAASC,cAAc,OACtCjD,KAAKsC,QAAQY,UAAUC,IAAI,yBAE3BnD,KAAKsC,QAAQwE,YAAY9G,KAAKkC,MAAMiC,QAAQmgC,OAAOymB,eAAe/qD,KAAKkC,MAAMkB,QAAQy3B,YAAa76B,KAAKkC,MAAMkB,QAAQs3B,YAAa16B,KAAKkC,MAAMkB,QAAQw3B,cAAe,UAEpK56B,KAAKkC,MAAMI,QAAQ0B,MAAMkV,QAAU,OAEnClZ,KAAKkC,MAAMI,QAAQqE,WAAW9D,aAAa7C,KAAKsC,QAAStC,KAAKkC,MAAMI,QACtE,CACA,EAEAinE,GAAMlsE,UAAUqsE,QAAU,WACzB1mE,SAASgyB,KAAK9xB,UAAUikB,OAAO,mCAE/B,GAAInnB,KAAKsC,SAAWtC,KAAKsC,QAAQqE,WAAY,CAC5C3G,KAAKsC,QAAQqE,WAAWrB,YAAYtF,KAAKsC,SACzCtC,KAAKkC,MAAMI,QAAQ0B,MAAMkV,QAAU,EACrC,CACA,EAEAqwD,GAAMlsE,UAAUknC,gBAAkB,SAAU77B,EAAS1E,EAAOsG,GAC3D,IAAIq/D,EAAUx/C,OAAOw/C,QACjBC,EAAUz/C,OAAOy/C,QACjBvd,EAAWrpD,SAASC,cAAc,OAClC4mE,EAAW7mE,SAASC,cAAc,OAClC6mE,EAAU9pE,KAAKkC,MAAMiC,QAAQmgC,OAAOymB,sBAAsBzgD,GAAU,YAAcA,EAAStK,KAAKkC,MAAMkB,QAAQy3B,mBAAoB72B,GAAS,YAAcA,EAAQhE,KAAKkC,MAAMkB,QAAQs3B,YAAahyB,EAAS,SAC1MixD,EACAoQ,EAEJ/pE,KAAKwpE,YAAc,KAEnBxpE,KAAKsC,QAAUU,SAASC,cAAc,OACtCjD,KAAKsC,QAAQY,UAAUC,IAAI,8BAE3B,GAAInD,KAAKkC,MAAMkB,QAAQm3B,YAAa,CACnC8xB,EAASnpD,UAAUC,IAAI,0BAEvBw2D,SAAuB35D,KAAKkC,MAAMkB,QAAQm3B,aAAe,WAAav6B,KAAKkC,MAAMkB,QAAQm3B,YAAY78B,KAAKsC,KAAKkC,OAASlC,KAAKkC,MAAMkB,QAAQm3B,YAE3I,UAAWo/B,GAAiB,SAAU,CACrCtN,EAASt0C,UAAY4hD,CACxB,KAAS,CACNtN,EAASvlD,YAAY6yD,EACxB,CAEE35D,KAAKsC,QAAQwE,YAAYulD,EAC3B,CAECrsD,KAAKsC,QAAQwE,YAAYgjE,GAEzB,GAAI9pE,KAAKkC,MAAMkB,QAAQo3B,YAAa,CACnCqvC,EAAS3mE,UAAUC,IAAI,0BAEvB4mE,SAAuB/pE,KAAKkC,MAAMkB,QAAQo3B,aAAe,WAAax6B,KAAKkC,MAAMkB,QAAQo3B,YAAY98B,KAAKsC,KAAKkC,OAASlC,KAAKkC,MAAMkB,QAAQo3B,YAE3I,UAAWuvC,GAAiB,SAAU,CACrCF,EAAS9xD,UAAYgyD,CACxB,KAAS,CACNF,EAAS/iE,YAAYijE,EACxB,CAEE/pE,KAAKsC,QAAQwE,YAAY+iE,EAC3B,CAEC7mE,SAASgyB,KAAK9xB,UAAUC,IAAI,mCAC5BH,SAASgyB,KAAKluB,YAAY9G,KAAKsC,SAE/B,GAAItC,KAAKkC,MAAMkB,QAAQk3B,eAAgB,CACtCt6B,KAAKkC,MAAMkB,QAAQk3B,eAAet6B,KAAKsC,QAASwnE,EAClD,CAEC3/C,OAAOiY,QAEPpiC,KAAK0pE,UAELv/C,OAAO9b,SAASs7D,EAASC,GAEzB5pE,KAAKwpE,YAAc,KACpB,EAEAp8D,EAAU/P,UAAUytC,eAAe,QAASy+B,IAC5C,IAAIS,GAAe,SAASA,EAAa9nE,GACxClC,KAAKkC,MAAQA,EACblC,KAAKsE,KAAO,MACZtE,KAAK+3C,QAAU,MACf/3C,KAAKiqE,UAAY,GACjBjqE,KAAKkqE,eAAiB,CACvB,EAEAF,GAAa3sE,UAAUqiB,UAAY,SAAUpb,GACzC,IAACe,EAAOrF,KAEPmqE,EAEJnqE,KAAKkqE,iBAELC,EAAUnqE,KAAKkqE,eAEf7kE,EAAKk9B,cAELl9B,EAAKf,KAAOA,EAGZe,EAAK4kE,UAAUhlE,KAAOX,EAAKW,KAE3B7H,OAAO2C,eAAesF,EAAKf,KAAM,OAAQ,CACxC8lE,WAAY,MACZpoE,aAAc,KACdjE,MAAO,SAASA,IACf,IAAIssE,EAAOxqE,MAAM6J,KAAKrJ,WAEtB,IAAKgF,EAAK0yC,SAAWoyB,IAAY9kE,EAAK6kE,eAAgB,CACrDG,EAAKnlE,SAAQ,SAAUolE,GACtBjlE,EAAKnD,MAAMM,WAAWqe,aAAaypD,EAAK,MAC7C,GACA,CAEG,OAAOjlE,EAAK4kE,UAAUhlE,KAAKslE,MAAMjmE,EAAMjE,UAC1C,IAICgF,EAAK4kE,UAAUpjE,QAAUvC,EAAKuC,QAE9BzJ,OAAO2C,eAAesF,EAAKf,KAAM,UAAW,CAC3C8lE,WAAY,MACZpoE,aAAc,KACdjE,MAAO,SAASA,IACf,IAAIssE,EAAOxqE,MAAM6J,KAAKrJ,WAEtB,IAAKgF,EAAK0yC,SAAWoyB,IAAY9kE,EAAK6kE,eAAgB,CACrDG,EAAKnlE,SAAQ,SAAUolE,GACtBjlE,EAAKnD,MAAMM,WAAWqe,aAAaypD,EAAK,KAC7C,GACA,CAEG,OAAOjlE,EAAK4kE,UAAUpjE,QAAQ0jE,MAAMjmE,EAAMjE,UAC7C,IAICgF,EAAK4kE,UAAUzwB,MAAQl1C,EAAKk1C,MAE5Bp8C,OAAO2C,eAAesF,EAAKf,KAAM,QAAS,CACzC8lE,WAAY,MACZpoE,aAAc,KACdjE,MAAO,SAASA,IACf,IAAI2G,EAEJ,IAAKW,EAAK0yC,SAAWoyB,IAAY9kE,EAAK6kE,eAAgB,CACrD,GAAI7kE,EAAKf,KAAKlG,OAAQ,CACrBsG,EAAMW,EAAKnD,MAAMM,WAAWsb,qBAAqBzY,EAAKf,KAAK,IAE3D,GAAII,EAAK,CACRA,EAAIqtB,cACV,CACA,CACA,CAEG,OAAO1sB,EAAK4kE,UAAUzwB,MAAM97C,KAAK4G,EACpC,IAICe,EAAK4kE,UAAUxK,IAAMn7D,EAAKm7D,IAE1BriE,OAAO2C,eAAesF,EAAKf,KAAM,MAAO,CACvC8lE,WAAY,MACZpoE,aAAc,KACdjE,MAAO,SAASA,IACf,IAAI2G,EACJ,IAAKW,EAAK0yC,SAAWoyB,IAAY9kE,EAAK6kE,eAAgB,CACrD,GAAI7kE,EAAKf,KAAKlG,OAAQ,CACrBsG,EAAMW,EAAKnD,MAAMM,WAAWsb,qBAAqBzY,EAAKf,KAAKe,EAAKf,KAAKlG,OAAS,IAE9E,GAAIsG,EAAK,CACRA,EAAIqtB,cACV,CACA,CACA,CACG,OAAO1sB,EAAK4kE,UAAUxK,IAAI/hE,KAAK4G,EAClC,IAICe,EAAK4kE,UAAUvjE,OAASpC,EAAKoC,OAE7BtJ,OAAO2C,eAAesF,EAAKf,KAAM,SAAU,CAC1C8lE,WAAY,MACZpoE,aAAc,KACdjE,MAAO,SAASA,IACf,IAAIssE,EAAOxqE,MAAM6J,KAAKrJ,WAClBO,EAAQypE,EAAK,GAAK,EAAI/lE,EAAKlG,OAASisE,EAAK,GAAKA,EAAK,GACnD7nD,EAAM6nD,EAAK,GACXrlC,EAAUqlC,EAAK,GAAKA,EAAKvlD,MAAM,GAAK,MACpC0lD,EAEJ,IAAKnlE,EAAK0yC,SAAWoyB,IAAY9kE,EAAK6kE,eAAgB,CAGrD,GAAIllC,EAAS,CACZwlC,EAAWlmE,EAAK1D,GAASyE,EAAKnD,MAAMM,WAAWsb,qBAAqBxZ,EAAK1D,IAAU,MAEnF,GAAI4pE,EAAU,CACbxlC,EAAQ9/B,SAAQ,SAAU4wC,GACzBzwC,EAAKnD,MAAMM,WAAWqe,aAAai1B,EAAS,KAAM00B,EAAU,KACnE,GACA,KAAY,CACNxlC,EAAUA,EAAQlgB,QAAQ5D,UAE1B8jB,EAAQ9/B,SAAQ,SAAU4wC,GACzBzwC,EAAKnD,MAAMM,WAAWqe,aAAai1B,EAAS,KAAM,MAAO,KAChE,GACA,CACA,CAGI,GAAItzB,IAAQ,EAAG,CACd,IAAIioD,EAAUnmE,EAAKwgB,MAAMlkB,SAAcypE,EAAK,KAAO,YAAcA,EAAK,GAAKzpE,EAAQ4hB,GAEnFioD,EAAQvlE,SAAQ,SAAU4wC,EAAStwC,GAClC,IAAId,EAAMW,EAAKnD,MAAMM,WAAWsb,qBAAqBg4B,GAErD,GAAIpxC,EAAK,CACRA,EAAIqtB,aAAavsB,IAAMilE,EAAQrsE,OAAS,EAC/C,CACA,GACA,CAEI,GAAI4mC,GAAWxiB,IAAQ,EAAG,CACzBnd,EAAKnD,MAAMM,WAAWyc,oBAC3B,CACA,CAEG,OAAO5Z,EAAK4kE,UAAUvjE,OAAO6jE,MAAMjmE,EAAMjE,UAC5C,GAEA,EAEA2pE,GAAa3sE,UAAUklC,YAAc,WACpC,GAAIviC,KAAKsE,OAAS,MAAO,CACxB,IAAK,IAAI7G,KAAOuC,KAAKiqE,UAAW,CAC/B7sE,OAAO2C,eAAeC,KAAKsE,KAAM7G,EAAK,CACrC2sE,WAAY,KACZpoE,aAAc,KACdD,SAAU,KACVhE,MAAOiC,KAAKiqE,UAAUxsE,KAE1B,CACA,CACA,EAEAusE,GAAa3sE,UAAUizB,SAAW,SAAU5rB,GAC3C,IAAIJ,EAAOI,EAAI+b,UAEfzgB,KAAK+3C,QAAU,KAEf,IAAK,IAAIt6C,KAAO6G,EAAM,CACrBtE,KAAK0qE,SAAShmE,EAAKJ,EAAM7G,EAC3B,CAEC,GAAIuC,KAAKkC,MAAMkB,QAAQwH,SAAU,CAChC5K,KAAK2qE,kBAAkBjmE,EACzB,CAEC1E,KAAK+3C,QAAU,KAChB,EAEAiyB,GAAa3sE,UAAUstE,kBAAoB,SAAUjmE,GACpD,IAAIW,EAAOrF,KACP4qE,EAAalmE,EAAI+b,UAAUzgB,KAAKkC,MAAMkB,QAAQy2B,oBAC9CowC,EAAY,GAEhB,SAASY,IACRxlE,EAAKnD,MAAMiC,QAAQyG,SAAS4hB,cAAc9nB,GAC1CW,EAAKnD,MAAMiC,QAAQyG,SAASilB,UAAUnrB,GACtCW,EAAKnD,MAAMM,WAAWmd,kBAAkB,OAAQ,MAAO,KACzD,CAEC,GAAIirD,EAAY,CAEfX,EAAUhlE,KAAO2lE,EAAW3lE,KAE5B7H,OAAO2C,eAAe6qE,EAAY,OAAQ,CACzCR,WAAY,MACZpoE,aAAc,KACdjE,MAAO,SAASA,IACf,IAAIiB,EAASirE,EAAUhlE,KAAKslE,MAAMK,EAAYvqE,WAE9CwqE,IAEA,OAAO7rE,CACX,IAGEirE,EAAUpjE,QAAU+jE,EAAW/jE,QAE/BzJ,OAAO2C,eAAe6qE,EAAY,UAAW,CAC5CR,WAAY,MACZpoE,aAAc,KACdjE,MAAO,SAASA,IACf,IAAIiB,EAASirE,EAAUpjE,QAAQ0jE,MAAMK,EAAYvqE,WAEjDwqE,IAEA,OAAO7rE,CACX,IAGEirE,EAAUzwB,MAAQoxB,EAAWpxB,MAE7Bp8C,OAAO2C,eAAe6qE,EAAY,QAAS,CAC1CR,WAAY,MACZpoE,aAAc,KACdjE,MAAO,SAASA,IACf,IAAIiB,EAASirE,EAAUzwB,MAAM97C,KAAKktE,GAElCC,IAEA,OAAO7rE,CACX,IAGEirE,EAAUxK,IAAMmL,EAAWnL,IAE3BriE,OAAO2C,eAAe6qE,EAAY,MAAO,CACxCR,WAAY,MACZpoE,aAAc,KACdjE,MAAO,SAASA,IACf,IAAIiB,EAASirE,EAAUxK,IAAI/hE,KAAKktE,GAEhCC,IAEA,OAAO7rE,CACX,IAGEirE,EAAUvjE,OAASkkE,EAAWlkE,OAE9BtJ,OAAO2C,eAAe6qE,EAAY,SAAU,CAC3CR,WAAY,MACZpoE,aAAc,KACdjE,MAAO,SAASA,IACf,IAAIiB,EAASirE,EAAUvjE,OAAO6jE,MAAMK,EAAYvqE,WAEhDwqE,IAEA,OAAO7rE,CACX,GAEA,CACA,EAEAgrE,GAAa3sE,UAAUqtE,SAAW,SAAUhmE,EAAKJ,EAAM7G,GACtD,IAAI4H,EAAOrF,KACPb,EAAQ/B,OAAO+qE,yBAAyB7jE,EAAM7G,GAC9CM,EAAQuG,EAAK7G,GACb0sE,EAAUnqE,KAAKkqE,eAEnB9sE,OAAO2C,eAAeuE,EAAM7G,EAAK,CAChC2qE,IAAK,SAASA,EAAI5pE,GACjBT,EAAQS,EACR,IAAK6G,EAAK0yC,SAAWoyB,IAAY9kE,EAAK6kE,eAAgB,CACrD,IAAI18D,EAAS,GACbA,EAAO/P,GAAOe,EACdkG,EAAIsoB,WAAWxf,EACnB,CAEG,GAAIrO,EAAMipE,IAAK,CACdjpE,EAAMipE,IAAI5pE,EACd,CACA,EACE6pE,IAAK,SAASA,IAEb,GAAIlpE,EAAMkpE,IAAK,CACdlpE,EAAMkpE,KACV,CAEG,OAAOtqE,CACV,GAEA,EAEAisE,GAAa3sE,UAAUytE,WAAa,SAAUpmE,GAC7C,IAAIJ,EAAOI,EAAI+b,UAEf,IAAK,IAAIhjB,KAAO6G,EAAM,CACrBlH,OAAO2C,eAAeuE,EAAM7G,EAAK,CAChCM,MAAOuG,EAAK7G,IAEf,CACA,EAEAusE,GAAa3sE,UAAUwzB,MAAQ,WAC9B7wB,KAAK+3C,QAAU,IAChB,EAEAiyB,GAAa3sE,UAAU0zB,QAAU,WAChC/wB,KAAK+3C,QAAU,KAChB,EAEA3qC,EAAU/P,UAAUytC,eAAe,eAAgBk/B,IAEnD,IAAIe,GAAgB,SAASA,EAAc7oE,GAC1ClC,KAAKkC,MAAQA,EACblC,KAAKgrE,YAAc,MACnBhrE,KAAK2gE,OAAS,MACd3gE,KAAKirE,WAAa,MAClBjrE,KAAKqpD,OAAS,KACdrpD,KAAKkrE,WAAa,IACnB,EAEAH,GAAc1tE,UAAUwW,iBAAmB,SAAUlG,EAAMxH,EAAQ7D,GAClE,IAAI+C,EAAOrF,KACPkhD,EAAiB,MACjBhV,EAAOlsC,KAAKkC,MAAMkB,QAAQuQ,iBAG9B,GAAIhG,IAAS,SAAU,CACtBuzC,EAAiB/6C,EAAOH,WAAWqR,WAAa,YAAclR,EAAOH,WAAWk7C,eAChF/6C,EAAOhC,QAAQs/C,OAAS,CAAEvC,eAAgBA,EAC5C,CAEC,GAAIhV,IAAS,MAAQA,GAAQv+B,EAAM,CAElC,IAAI07C,EAASrmD,SAASC,cAAc,OACpComD,EAAOjzC,UAAY,8BAEnB,IAAI80D,EAAaloE,SAASC,cAAc,OACxCioE,EAAW90D,UAAY,mCAEvBizC,EAAOj1C,iBAAiB,SAAS,SAAUC,GAC1CA,EAAE0C,iBACL,IAEE,IAAIo0D,EAAa,SAASA,EAAW92D,GACpC,IAAI+2D,EAAgBjlE,EAAOyS,gBAE3B,GAAIwyD,GAAiB/lE,EAAKgmE,mBAAmBD,GAAgB,CAC5D/lE,EAAK2lE,YAAc7kE,EACnBd,EAAKimE,WAAWj3D,EAAG+2D,EAAe/hB,EACtC,CACA,EAEEA,EAAOj1C,iBAAiB,YAAa+2D,GACrC9hB,EAAOj1C,iBAAiB,aAAc+2D,EAAY,CAAEt2D,QAAS,OAG7Dw0C,EAAOj1C,iBAAiB,YAAY,SAAUC,GAC7C,IAAIzP,EAAMuB,EAAOyS,gBAEjB,GAAIhU,GAAOS,EAAKgmE,mBAAmBzmE,GAAM,CACxCyP,EAAE0C,kBACFnS,EAAIoI,kBAAkB,KAC1B,CACA,IAEEk+D,EAAW92D,iBAAiB,SAAS,SAAUC,GAC9CA,EAAE0C,iBACL,IAEE,IAAIw0D,EAAiB,SAASA,EAAel3D,GAC5C,IAAI+2D,EAAeI,EAAUp8D,EAE7Bg8D,EAAgBjlE,EAAOwS,iBAEvB,GAAIyyD,EAAe,CAClBI,EAAWnmE,EAAKnD,MAAMkI,cAAc9D,gBAAgB8kE,GACpDh8D,EAAao8D,EAAW,EAAInmE,EAAKnD,MAAMkI,cAAc5B,iBAAiBgjE,EAAW,GAAK,MAEtF,GAAIp8D,GAAc/J,EAAKgmE,mBAAmBj8D,GAAa,CACtD/J,EAAK2lE,YAAc7kE,EACnBd,EAAKimE,WAAWj3D,EAAGjF,EAAY87D,EACpC,CACA,CACA,EAEEA,EAAW92D,iBAAiB,YAAam3D,GACzCL,EAAW92D,iBAAiB,aAAcm3D,EAAgB,CAAE12D,QAAS,OAGrEq2D,EAAW92D,iBAAiB,YAAY,SAAUC,GACjD,IAAI+2D,EAAeI,EAAUp8D,EAE7Bg8D,EAAgBjlE,EAAOwS,iBAEvB,GAAIyyD,EAAe,CAClBI,EAAWnmE,EAAKnD,MAAMkI,cAAc9D,gBAAgB8kE,GACpDh8D,EAAao8D,EAAW,EAAInmE,EAAKnD,MAAMkI,cAAc5B,iBAAiBgjE,EAAW,GAAK,MAEtF,GAAIp8D,GAAc/J,EAAKgmE,mBAAmBj8D,GAAa,CACtDiF,EAAE0C,kBACF3H,EAAWpC,kBAAkB,KAClC,CACA,CACA,IAEE1K,EAAQwE,YAAYuiD,GACpB/mD,EAAQwE,YAAYokE,EACtB,CACA,EAEAH,GAAc1tE,UAAUguE,mBAAqB,SAAUllE,GACtD,cAAcA,EAAOH,WAAWylE,WAAa,YAActlE,EAAOH,WAAWylE,UAAYzrE,KAAKkC,MAAMkB,QAAQuQ,gBAC7G,EAEAo3D,GAAc1tE,UAAUiuE,WAAa,SAAUj3D,EAAGlO,EAAQkjD,GACzD,IAAIhkD,EAAOrF,KAEXqF,EAAKnD,MAAMI,QAAQY,UAAUC,IAAI,0BAEjC,SAASuoE,EAAUr3D,GAGlB,GAAIhP,EAAKnD,MAAMqoB,IAAK,CACnBpkB,EAAOoJ,SAASlK,EAAK4lE,oBAAsB52D,EAAEw1C,UAAY,YAAcx1C,EAAEyrD,QAAQ,GAAGjW,QAAUx1C,EAAEw1C,SAAWxkD,EAAKs7D,QACnH,KAAS,CACNx6D,EAAOoJ,SAASlK,EAAK4lE,oBAAsB52D,EAAEw1C,UAAY,YAAcx1C,EAAEyrD,QAAQ,GAAGjW,QAAUx1C,EAAEw1C,SAAWxkD,EAAKs7D,QACnH,CAEE,GAAIt7D,EAAKnD,MAAMkB,QAAQwC,cAAe,CACrCP,EAAKnD,MAAM2D,QAAQC,aAAa,KACnC,CAEE,IAAKT,EAAKnD,MAAMk1B,aAAejxB,EAAOhC,QAAQs/C,QAAUt9C,EAAOhC,QAAQs/C,OAAOvC,eAAgB,CAC7F/6C,EAAOsT,kBACV,CACA,CAEC,SAASkyD,EAAQt3D,GAGhB,GAAIhP,EAAK2lE,YAAY7mE,QAAQ2R,KAAM,CAClCzQ,EAAK2lE,YAAY7mE,QAAQ2R,KAAKiiC,QAAU,KAC3C,CAEE,GAAI1yC,EAAKnD,MAAMk1B,aAAejxB,EAAOhC,QAAQs/C,QAAUt9C,EAAOhC,QAAQs/C,OAAOvC,eAAgB,CAC5F/6C,EAAOsT,kBACV,CAEEzW,SAASgyB,KAAKgvB,oBAAoB,UAAW2nB,GAC7C3oE,SAASgyB,KAAKgvB,oBAAoB,YAAa0nB,GAE/CriB,EAAOrF,oBAAoB,YAAa0nB,GACxCriB,EAAOrF,oBAAoB,WAAY2nB,GAEvCtmE,EAAKnD,MAAMI,QAAQY,UAAUikB,OAAO,0BAEpC,GAAI9hB,EAAKnD,MAAMkB,QAAQiH,aAAehF,EAAKnD,MAAMgC,UAAU,cAAe,OAASmB,EAAKnD,MAAMiC,QAAQkG,YAAYC,OAAO7H,QAAS,CACjI4C,EAAKnD,MAAMiC,QAAQkG,YAAYE,KAAK,UACvC,CAEElF,EAAKnD,MAAMkB,QAAQ07B,cAAcphC,KAAK2H,EAAKnD,MAAOiE,EAAOmD,eAC3D,CAEC+K,EAAE0C,kBAGF,GAAI1R,EAAK2lE,YAAY7mE,QAAQ2R,KAAM,CAClCzQ,EAAK2lE,YAAY7mE,QAAQ2R,KAAKiiC,QAAU,IAC1C,CAEC1yC,EAAKs7D,cAAgBtsD,EAAEw1C,UAAY,YAAcx1C,EAAEyrD,QAAQ,GAAGjW,QAAUx1C,EAAEw1C,QAC1ExkD,EAAK4lE,WAAa9kE,EAAOoD,WAEzBvG,SAASgyB,KAAK5gB,iBAAiB,YAAas3D,GAC5C1oE,SAASgyB,KAAK5gB,iBAAiB,UAAWu3D,GAC1CtiB,EAAOj1C,iBAAiB,YAAas3D,EAAW,CAAE72D,QAAS,OAC3Dw0C,EAAOj1C,iBAAiB,WAAYu3D,EACrC,EAEAv+D,EAAU/P,UAAUytC,eAAe,gBAAiBigC,IACpD,IAAIa,GAAa,SAASA,EAAW1pE,GACpClC,KAAKkC,MAAQA,EACblC,KAAKgrE,YAAc,MACnBhrE,KAAKoiE,OAAS,MACdpiE,KAAK6rE,YAAc,MACnB7rE,KAAKqpD,OAAS,KACdrpD,KAAKkrE,WAAa,IACnB,EAEAU,GAAWvuE,UAAUmvB,cAAgB,SAAU9nB,GAC9C,IAAIW,EAAOrF,KACPoe,EAAQ1Z,EAAIjB,aAEhB,IAAI4lD,EAASrmD,SAASC,cAAc,OACpComD,EAAOjzC,UAAY,8BAEnB,IAAI80D,EAAaloE,SAASC,cAAc,OACxCioE,EAAW90D,UAAY,mCAEvBizC,EAAOj1C,iBAAiB,SAAS,SAAUC,GAC1CA,EAAE0C,iBACJ,IAEC,IAAIo0D,EAAa,SAASA,EAAW92D,GACpChP,EAAKmlE,SAAW9lE,EAChBW,EAAKimE,WAAWj3D,EAAG3P,EAAK2kD,EAC1B,EAECA,EAAOj1C,iBAAiB,YAAa+2D,GACrC9hB,EAAOj1C,iBAAiB,aAAc+2D,EAAY,CAAEt2D,QAAS,OAE7Dq2D,EAAW92D,iBAAiB,SAAS,SAAUC,GAC9CA,EAAE0C,iBACJ,IAEC,IAAIw0D,EAAiB,SAASA,EAAel3D,GAC5C,IAAI6O,EAAU7d,EAAKnD,MAAMM,WAAW2f,eAAezd,GAEnD,GAAIwe,EAAS,CACZ7d,EAAKmlE,SAAWtnD,EAChB7d,EAAKimE,WAAWj3D,EAAG6O,EAASgoD,EAC/B,CACA,EAECA,EAAW92D,iBAAiB,YAAam3D,GACzCL,EAAW92D,iBAAiB,aAAcm3D,EAAgB,CAAE12D,QAAS,OAErEuJ,EAAMtX,YAAYuiD,GAClBjrC,EAAMtX,YAAYokE,EACnB,EAEAU,GAAWvuE,UAAUiuE,WAAa,SAAUj3D,EAAG3P,EAAK2kD,GACnD,IAAIhkD,EAAOrF,KAEXqF,EAAKnD,MAAMI,QAAQY,UAAUC,IAAI,0BAEjC,SAASuoE,EAAUr3D,GAClB3P,EAAIyrB,UAAU9qB,EAAKwmE,qBAAuBx3D,EAAEy3D,UAAY,YAAcz3D,EAAEyrD,QAAQ,GAAGgM,QAAUz3D,EAAEy3D,SAAWzmE,EAAK+8D,QACjH,CAEC,SAASuJ,EAAQt3D,GAOhBrR,SAASgyB,KAAKgvB,oBAAoB,UAAW0nB,GAC7C1oE,SAASgyB,KAAKgvB,oBAAoB,YAAa0nB,GAE/CriB,EAAOrF,oBAAoB,YAAa0nB,GACxCriB,EAAOrF,oBAAoB,WAAY2nB,GAEvCtmE,EAAKnD,MAAMI,QAAQY,UAAUikB,OAAO,0BAEpC9hB,EAAKnD,MAAMkB,QAAQy7B,WAAWnhC,KAAKsC,KAAKkC,MAAOwC,EAAI4E,eACrD,CAEC+K,EAAE0C,kBAOF1R,EAAK+8D,cAAgB/tD,EAAEy3D,UAAY,YAAcz3D,EAAEyrD,QAAQ,GAAGgM,QAAUz3D,EAAEy3D,QAC1EzmE,EAAKwmE,YAAcnnE,EAAI6C,YAEvBvE,SAASgyB,KAAK5gB,iBAAiB,YAAas3D,GAC5C1oE,SAASgyB,KAAK5gB,iBAAiB,UAAWu3D,GAE1CtiB,EAAOj1C,iBAAiB,YAAas3D,EAAW,CAAE72D,QAAS,OAC3Dw0C,EAAOj1C,iBAAiB,WAAYu3D,EACrC,EAEAv+D,EAAU/P,UAAUytC,eAAe,aAAc8gC,IACjD,IAAIG,GAAc,SAASA,EAAY7pE,GACtClC,KAAKkC,MAAQA,EACblC,KAAKyvC,QAAU,MACfzvC,KAAKgsE,SAAW,MAChBhsE,KAAKisE,kBAAoB,MAEzBjsE,KAAKksE,YAAc,EACnBlsE,KAAKmpB,WAAa,EAClBnpB,KAAKmsE,gBAAkB,EACvBnsE,KAAKosE,eAAiB,EAEtBpsE,KAAKipB,WAAa,KACnB,EAEA8iD,GAAY1uE,UAAUiG,WAAa,SAAUoB,GAC5C,IAAI2nE,EAAUrsE,KAEd,IAAIkC,EAAQlC,KAAKkC,MACboqE,EAEJtsE,KAAKksE,YAAchqE,EAAMI,QAAQiK,aACjCvM,KAAKmpB,WAAajnB,EAAMI,QAAQyB,YAEhC,GAAI7B,EAAMI,QAAQqE,WAAY,CAC7B3G,KAAKmsE,gBAAkBjqE,EAAMI,QAAQqE,WAAW4F,aAChDvM,KAAKosE,eAAiBlqE,EAAMI,QAAQqE,WAAW5C,WACjD,CAEC,UAAWwoE,iBAAmB,aAAerqE,EAAMM,WAAW6jB,kBAAoB,UAAW,CAE5FrmB,KAAKipB,WAAa,KAElBjpB,KAAKgsE,SAAW,IAAIO,gBAAe,SAAUC,GAC5C,IAAKtqE,EAAMm1B,eAAiBn1B,EAAMm1B,gBAAkBn1B,EAAMiC,QAAQ2R,KAAKkE,YAAa,CAEnF,IAAIyyD,EAAavrE,KAAKsY,MAAMgzD,EAAM,GAAGE,YAAYrlE,QACjD,IAAIslE,EAAYzrE,KAAKsY,MAAMgzD,EAAM,GAAGE,YAAYljE,OAEhD,GAAI6iE,EAAQH,aAAeO,GAAcJ,EAAQljD,YAAcwjD,EAAW,CACzEN,EAAQH,YAAcO,EACtBJ,EAAQljD,WAAawjD,EAErB,GAAIzqE,EAAMI,QAAQqE,WAAY,CAC7B0lE,EAAQF,gBAAkBjqE,EAAMI,QAAQqE,WAAW4F,aACnD8/D,EAAQD,eAAiBlqE,EAAMI,QAAQqE,WAAW5C,WACxD,CAEK,GAAI7B,EAAMkB,QAAQwC,cAAe,CAChC1D,EAAM2D,QAAQC,aAAa,KACjC,CAEK5D,EAAM6D,QACX,CACA,CACA,IAEE/F,KAAKgsE,SAASY,QAAQ1qE,EAAMI,SAE5BgqE,EAAaniD,OAAO0W,iBAAiB3+B,EAAMI,SAE3C,GAAItC,KAAKkC,MAAMI,QAAQqE,aAAe3G,KAAKkC,MAAMM,WAAWgZ,cAAgB8wD,EAAW5xB,iBAAiB,eAAiB4xB,EAAW5xB,iBAAiB,eAAgB,CAEpK16C,KAAKisE,kBAAoB,IAAIM,gBAAe,SAAUC,GACrD,IAAKtqE,EAAMm1B,eAAiBn1B,EAAMm1B,gBAAkBn1B,EAAMiC,QAAQ2R,KAAKkE,YAAa,CAEnF,IAAIyyD,EAAavrE,KAAKsY,MAAMgzD,EAAM,GAAGE,YAAYrlE,QACjD,IAAIslE,EAAYzrE,KAAKsY,MAAMgzD,EAAM,GAAGE,YAAYljE,OAEhD,GAAI6iE,EAAQF,iBAAmBM,GAAcJ,EAAQD,gBAAkBO,EAAW,CACjFN,EAAQF,gBAAkBM,EAC1BJ,EAAQD,eAAiBO,EACzBN,EAAQH,YAAchqE,EAAMI,QAAQiK,aACpC8/D,EAAQljD,WAAajnB,EAAMI,QAAQyB,WACzC,CAEK,GAAI7B,EAAMkB,QAAQwC,cAAe,CAChC1D,EAAM2D,QAAQC,aAAa,KACjC,CAEK5D,EAAM6D,QACX,CACA,IAEG/F,KAAKisE,kBAAkBW,QAAQ5sE,KAAKkC,MAAMI,QAAQqE,WACrD,CACA,KAAQ,CACN3G,KAAKyvC,QAAU,WACd,IAAKvtC,EAAMm1B,eAAiBn1B,EAAMm1B,gBAAkBn1B,EAAMiC,QAAQ2R,KAAKkE,YAAa,CACnF,GAAI9X,EAAMkB,QAAQwC,cAAe,CAChC1D,EAAM2D,QAAQC,aAAa,KAChC,CAEI5D,EAAM6D,QACV,CACA,EAEEokB,OAAO/V,iBAAiB,SAAUpU,KAAKyvC,QACzC,CACA,EAEAs8B,GAAY1uE,UAAUmlC,cAAgB,SAAU99B,GAC/C,GAAI1E,KAAKyvC,QAAS,CACjBtlB,OAAO65B,oBAAoB,SAAUhkD,KAAKyvC,QAC5C,CAEC,GAAIzvC,KAAKgsE,SAAU,CAClBhsE,KAAKgsE,SAASa,UAAU7sE,KAAKkC,MAAMI,QACrC,CAEC,GAAItC,KAAKisE,kBAAmB,CAC3BjsE,KAAKisE,kBAAkBY,UAAU7sE,KAAKkC,MAAMI,QAAQqE,WACtD,CACA,EAEAyG,EAAU/P,UAAUytC,eAAe,cAAeihC,IAClD,IAAIe,GAAmB,SAASA,EAAiB5qE,GAChDlC,KAAKkC,MAAQA,EACblC,KAAKyC,QAAU,GACfzC,KAAK+sE,cAAgB,GACrB/sE,KAAKksC,KAAO,GACZlsC,KAAK7B,MAAQ,EACb6B,KAAKgtE,kBAAoB,GACzBhtE,KAAKitE,kBAAoB,KACzBjtE,KAAKktE,qBAAuB,KAC7B,EAGAJ,GAAiBzvE,UAAUiG,WAAa,WACvC,IAAI+B,EAAOrF,KACPyC,EAAU,GAEdzC,KAAKksC,KAAOlsC,KAAKkC,MAAMkB,QAAQuC,iBAC/B3F,KAAKgtE,kBAAoBhtE,KAAKkC,MAAMkB,QAAQy4B,mCAAqC77B,KAAKmtE,oBACtFntE,KAAKitE,kBAAoBjtE,KAAKkC,MAAMkB,QAAQu4B,kCAC5C37B,KAAK+sE,cAAgB,GAGrB/sE,KAAKkC,MAAMkI,cAAc1H,eAAewC,SAAQ,SAAUiB,EAAQX,GACjE,GAAIW,EAAOhC,QAAQyoC,WAAY,CAC9B,GAAIzmC,EAAOhC,QAAQyoC,WAAWwgC,OAASjnE,EAAOhC,QAAQyoC,WAAWlkC,QAAS,CACzEvC,EAAOhC,QAAQyoC,WAAWzuC,MAAQqH,EAClC/C,EAAQwC,KAAKkB,GAEb,IAAKA,EAAOuC,SAAWrD,EAAK6mC,OAAS,WAAY,CAChD7mC,EAAK0nE,cAAc9nE,KAAKkB,EAC7B,CACA,CACA,CACA,IAGC1D,EAAUA,EAAQye,UAClBze,EAAUA,EAAQ6S,MAAK,SAAUgwB,EAAGC,GACnC,IAAIhf,EAAOgf,EAAEphC,QAAQyoC,WAAWwgC,MAAQ9nC,EAAEnhC,QAAQyoC,WAAWwgC,MAC7D,OAAO7mD,GAAQgf,EAAEphC,QAAQyoC,WAAWzuC,MAAQmnC,EAAEnhC,QAAQyoC,WAAWzuC,KACnE,IAEC6B,KAAKyC,QAAUA,EAEf,GAAIzC,KAAKksC,OAAS,WAAY,CAC7BlsC,KAAKqtE,0BACP,CAGC,IAAK,IAAIC,EAAYttE,KAAKkC,MAAMkI,cAAc1H,eAAgB6qE,EAAW1tE,MAAMkF,QAAQuoE,GAAYE,EAAO,EAAGF,EAAYC,EAAWD,EAAYA,EAAU7tE,OAAOC,cAAe,CAC/K,IAAI+tE,EAEJ,GAAIF,EAAU,CACb,GAAIC,GAAQF,EAAUlvE,OAAQ,MAC9BqvE,EAAOH,EAAUE,IACpB,KAAS,CACNA,EAAOF,EAAUh3C,OACjB,GAAIk3C,EAAKE,KAAM,MACfD,EAAOD,EAAKzvE,KACf,CAEE,IAAI6G,EAAM6oE,EAEV,GAAI7oE,EAAIoB,WAAWqR,WAAa,qBAAsB,CACrDrX,KAAKktE,qBAAuBtoE,EAC5B,KACH,CACA,CAEC,GAAI5E,KAAKktE,qBAAsB,CAC9B,GAAIltE,KAAK+sE,cAAc3uE,OAAQ,CAC9B4B,KAAKktE,qBAAqBn/D,MAC7B,KAAS,CACN/N,KAAKktE,qBAAqBl/D,MAC7B,CACA,CACA,EAGA8+D,GAAiBzvE,UAAUwW,iBAAmB,SAAU1N,GACvD,IAAIhB,EAAMgB,EAAO+C,gBAEjB/C,EAAOhC,QAAQyoC,WAAa,CAAEwgC,aAAcjoE,EAAIynC,aAAe,YAAc,EAAIznC,EAAIynC,WAAYlkC,QAASvD,EAAIuD,UAAY,MAAQ,MAAQ,KAC3I,EAEAokE,GAAiBzvE,UAAUmvB,cAAgB,SAAU9nB,GACpD,IAAI3B,EAEJ,GAAI2B,EAAIiJ,OAAS,OAAQ,CACxB5K,EAAKC,SAASC,cAAc,OAC5BF,EAAGG,UAAUC,IAAI,iCAEjBuB,EAAIP,QAAQwB,iBAAmB,CAC9BrD,QAASS,EACTozC,KAAMn2C,KAAKitE,mBAGZ,IAAKjtE,KAAKitE,kBAAmB,CAC5BlqE,EAAGiB,MAAMkV,QAAU,MACtB,CACA,CACA,EAEA4zD,GAAiBzvE,UAAUwyB,UAAY,SAAUnrB,GAChD,IAAI0Z,EAAQ1Z,EAAIjB,aAEhB,GAAIiB,EAAIP,QAAQwB,iBAAkB,CACjCyY,EAAMtX,YAAYpC,EAAIP,QAAQwB,iBAAiBrD,SAC/CtC,KAAK2tE,4BAA4BjpE,EACnC,CACA,EAGAooE,GAAiBzvE,UAAU8b,uBAAyB,SAAUhT,EAAQuC,GAErE,GAAIvC,EAAOhC,QAAQyoC,WAAY,CAC9BzmC,EAAOhC,QAAQyoC,WAAWlkC,QAAUA,EACpC1I,KAAKsD,YACP,CACA,EAEAwpE,GAAiBzvE,UAAUmpC,WAAa,SAAUrgC,GACjD,IAAIynE,EAAW5tE,KAAK+sE,cAAc3uE,OAElC+H,EAAO6H,KAAK,MAAO,MAEnB,GAAIhO,KAAKksC,OAAS,WAAY,CAC7BlsC,KAAK+sE,cAAclmE,QAAQV,GAC3BnG,KAAKqtE,2BAEL,GAAIrtE,KAAKktE,uBAAyBU,EAAU,CAC3C5tE,KAAKktE,qBAAqBn/D,MAC7B,CACA,CACA,EAEA++D,GAAiBzvE,UAAUkpC,WAAa,SAAUpgC,GACjD,IAAIhI,EAEJgI,EAAO4H,KAAK,MAAO,MAEnB5H,EAAOoJ,SAASpJ,EAAOoD,YAEvB,GAAIvJ,KAAKksC,OAAS,WAAY,CAC7B/tC,EAAQ6B,KAAK+sE,cAAcjsE,QAAQqF,GAEnC,GAAIhI,GAAS,EAAG,CACf6B,KAAK+sE,cAAcrmE,OAAOvI,EAAO,EACpC,CAEE6B,KAAKqtE,2BAEL,GAAIrtE,KAAKktE,uBAAyBltE,KAAK+sE,cAAc3uE,OAAQ,CAC5D4B,KAAKktE,qBAAqBl/D,MAC7B,CACA,CACA,EAGA8+D,GAAiBzvE,UAAUmQ,OAAS,WACnC,IAAInI,EAAOrF,KACP6tE,EAAU,KAEd,MAAOA,EAAS,CAEf,IAAIrkE,EAAQnE,EAAKnD,MAAMiC,QAAQ2I,OAAOC,WAAa,aAAe1H,EAAKnD,MAAMkI,cAAc+B,mBAAqB9G,EAAKnD,MAAMkI,cAAcb,WAEzI,IAAIgd,GAAQlhB,EAAKnD,MAAMkB,QAAQC,cAAgBgC,EAAKnD,MAAMkI,cAAc9H,QAAQyB,YAAcsB,EAAKnD,MAAMI,QAAQyB,aAAeyF,EAEhI,GAAI+c,EAAO,EAAG,CAEb,IAAIpgB,EAASd,EAAK5C,QAAQ4C,EAAKlH,OAE/B,GAAIgI,EAAQ,CACXd,EAAKmhC,WAAWrgC,GAChBd,EAAKlH,OACT,KAAU,CACN0vE,EAAU,KACd,CACA,KAAS,CAGN,IAAIngE,EAAUrI,EAAK5C,QAAQ4C,EAAKlH,MAAQ,GAExC,GAAIuP,EAAS,CACZ,GAAI6Y,EAAO,EAAG,CACb,GAAIA,GAAQ7Y,EAAQnE,WAAY,CAC/BlE,EAAKkhC,WAAW74B,GAChBrI,EAAKlH,OACX,KAAY,CACN0vE,EAAU,KAChB,CACA,KAAW,CACNA,EAAU,KACf,CACA,KAAU,CACNA,EAAU,KACd,CACA,CAEE,IAAKxoE,EAAKnD,MAAMM,WAAWiZ,gBAAiB,CAC3CpW,EAAKnD,MAAMM,WAAWmkB,mBACzB,CACA,CACA,EAEAmmD,GAAiBzvE,UAAUgwE,yBAA2B,WACrD,IAAIhoE,EAAOrF,KACP2K,EAAO3K,KAAKkC,MAAMM,WAAW2b,iBAEjCxT,EAAKzF,SAAQ,SAAUR,GACtBW,EAAKsoE,4BAA4BjpE,EACnC,GACA,EAEAooE,GAAiBzvE,UAAUswE,4BAA8B,SAAUjpE,GAClE,IAAI3B,EAAIuU,EAER,GAAI5S,EAAIP,QAAQwB,iBAAkB,CACjC5C,EAAK2B,EAAIP,QAAQwB,iBAAiBrD,QAElC,MAAOS,EAAGD,WAAY,CACrBC,EAAGuC,YAAYvC,EAAGD,WACrB,CAAGwU,EAAWtX,KAAKgtE,kBAAkBhtE,KAAK8tE,yBAAyBppE,IACjE,GAAI4S,EAAU,CACbvU,EAAG+D,YAAYwQ,EAClB,CACA,CACA,EAEAw1D,GAAiBzvE,UAAUywE,yBAA2B,SAAUppE,GAC/D,IAAIW,EAAOrF,KACPsE,EAAOI,EAAI+b,UACXxX,EAAS,GACT8kE,EAEJ/tE,KAAK+sE,cAAc7nE,SAAQ,SAAUiB,GACpC,IAAIpI,EAAQoI,EAAO+J,cAAc5L,GAEjC,GAAI6B,EAAOH,WAAWlB,OAASqB,EAAOtB,MAAO,CAC5C,GAAIsB,EAAOhC,QAAQyR,QAAUvQ,EAAKnD,MAAMkB,QAAQw4B,sCAAuC,CAEtFmyC,EAAoB,CACnBhwE,MAAO,MACPuG,KAAM,GACNsT,SAAU,SAASA,IAClB,OAAO7Z,CACb,EACK0iB,QAAS,SAASA,IACjB,OAAOnc,CACb,EACKb,WAAY,SAASA,IACpB,OAAOT,SAASC,cAAc,MACpC,EACK0vB,OAAQ,SAASA,IAChB,OAAOjuB,EAAI4E,cACjB,EACKspB,UAAW,SAASA,IACnB,OAAOzsB,EAAOmD,cACpB,GAGIL,EAAOhE,KAAK,CACXJ,MAAOsB,EAAOtB,MACdC,MAAOqB,EAAOH,WAAWlB,MACzB/G,MAAOoI,EAAOhC,QAAQyR,OAAOyB,UAAU3Z,KAAK2H,EAAKnD,MAAMiC,QAAQyR,OAAQm4D,EAAmB5nE,EAAOhC,QAAQyR,OAAO2B,SAErH,KAAU,CACNtO,EAAOhE,KAAK,CACXJ,MAAOsB,EAAOtB,MACdC,MAAOqB,EAAOH,WAAWlB,MACzB/G,MAAOA,GAEZ,CACA,CACA,IAEC,OAAOkL,CACR,EAEA6jE,GAAiBzvE,UAAU8vE,oBAAsB,SAAU7oE,GAC1D,IAAI6e,EAAOngB,SAASC,cAAc,SAElCqB,EAAKY,SAAQ,SAAUic,GACtB,IAAIzc,EAAM1B,SAASC,cAAc,MACjC,IAAI+qE,EAAYhrE,SAASC,cAAc,MACvC,IAAIgrE,EAAYjrE,SAASC,cAAc,MACvC,IAAIirE,EAEJ,IAAIC,EAAiBnrE,SAASC,cAAc,UAC5C+qE,EAAUlnE,YAAYqnE,GACtBnuE,KAAKkC,MAAMiC,QAAQiP,SAASC,KAAK,WAAa8N,EAAKtc,OAAO,SAAUqS,GACnEi3D,EAAeC,UAAYl3D,GAAQiK,EAAKrc,KAC3C,IAEE,GAAIqc,EAAKpjB,iBAAiB+Z,KAAM,CAC/Bo2D,EAAelrE,SAASC,cAAc,OACtCirE,EAAapnE,YAAYqa,EAAKpjB,OAC9BkwE,EAAUnnE,YAAYonE,EACzB,KAAS,CACND,EAAUl2D,UAAYoJ,EAAKpjB,KAC9B,CAEE2G,EAAIoC,YAAYknE,GAChBtpE,EAAIoC,YAAYmnE,GAChB9qD,EAAKrc,YAAYpC,EACnB,GAAI1E,MAEH,OAAO5C,OAAOiL,KAAK/D,GAAMlG,OAAS+kB,EAAO,EAC1C,EAEA/V,EAAU/P,UAAUytC,eAAe,mBAAoBgiC,IAEvD,IAAIuB,GAAY,SAASA,EAAUnsE,GAClClC,KAAKkC,MAAQA,EACblC,KAAKsuE,UAAY,MACjBtuE,KAAKuuE,eAAiB,MACtBvuE,KAAKwuE,WAAa,GAClBxuE,KAAKomB,aAAe,GACpBpmB,KAAKyuE,sBAAwB,IAC9B,EAEAJ,GAAUhxE,UAAUmiB,mBAAqB,SAAUxG,GAClDhZ,KAAKsuE,UAAY,MACjBtuE,KAAKuuE,eAAiB,MACtBvuE,KAAKwuE,WAAa,GAClBxuE,KAAKomB,aAAe,GAEpB,IAAKpN,EAAQ,CACZhZ,KAAK0uE,sBACP,CACA,EAEAL,GAAUhxE,UAAUmvB,cAAgB,SAAU9nB,GAC7C,IAAIW,EAAOrF,KACPsC,EAAUoC,EAAIjB,aAGlB,IAAIkrE,EAAY,SAASA,IAExB35D,YAAW,WACV3P,EAAKipE,UAAY,KACpB,GAAK,IAEHtrE,SAASgyB,KAAKgvB,oBAAoB,UAAW2qB,EAC/C,EAECjqE,EAAIP,QAAQ8oB,OAAS,CAAE2hD,SAAU,OAGjC,GAAIvpE,EAAKnD,MAAMkB,QAAQ43B,gBAAgBt9B,KAAKsC,KAAKkC,MAAOwC,EAAI4E,gBAAiB,CAC5EhH,EAAQY,UAAUC,IAAI,wBACtBb,EAAQY,UAAUikB,OAAO,0BAEzB,GAAI9hB,EAAKnD,MAAMkB,QAAQuhB,YAActf,EAAKnD,MAAMkB,QAAQuhB,YAAc,YAAa,CAClF,GAAItf,EAAKnD,MAAMkB,QAAQ03B,sBAAwB,QAAS,CACvDx4B,EAAQ8R,iBAAiB,SAAS,SAAUC,GAC3C,GAAIA,EAAE+oD,SAAU,CACf/3D,EAAKnD,MAAM++B,kBACX57B,EAAKkpE,eAAiBlpE,EAAKkpE,gBAAkB7pE,EAE7C,IAAImqE,EAAoBxpE,EAAKnD,MAAMM,WAAWsgB,mBAAmBzd,EAAKkpE,gBACtE,IAAIO,EAASzpE,EAAKnD,MAAMM,WAAWsgB,mBAAmBpe,GAEtD,IAAIqqE,EAAaF,GAAqBC,EAASD,EAAoBC,EACnE,IAAIE,EAAWH,GAAqBC,EAASD,EAAoBC,EAEjE,IAAInkE,EAAOtF,EAAKnD,MAAMM,WAAW2b,iBAAiB2G,MAAM,GACxD,IAAImqD,EAActkE,EAAKjE,OAAOqoE,EAAYC,EAAWD,EAAa,GAElE,GAAI16D,EAAE8oD,SAAW9oD,EAAEgpD,QAAS,CAC3B4R,EAAY/pE,SAAQ,SAAUgqE,GAC7B,GAAIA,IAAe7pE,EAAKkpE,eAAgB,CAEvC,GAAIlpE,EAAKnD,MAAMkB,QAAQuhB,aAAe,OAAStf,EAAKkoB,cAAc7oB,GAAM,CACvE,GAAIW,EAAK+gB,aAAahoB,OAASiH,EAAKnD,MAAMkB,QAAQuhB,WAAY,CAC7Dtf,EAAKgoB,UAAU6hD,EAC1B,CACA,KAAgB,CACN7pE,EAAKgoB,UAAU6hD,EACzB,CACA,CACA,IACO7pE,EAAKkpE,eAAiB7pE,CAC7B,KAAa,CACNW,EAAKwf,aAAanmB,UAAW,MAE7B,GAAI2G,EAAKnD,MAAMkB,QAAQuhB,aAAe,KAAM,CAC3C,GAAIsqD,EAAY7wE,OAASiH,EAAKnD,MAAMkB,QAAQuhB,WAAY,CACvDsqD,EAAcA,EAAYnqD,MAAM,EAAGzf,EAAKnD,MAAMkB,QAAQuhB,WAC/D,CACA,CAEOtf,EAAK6nB,WAAW+hD,EACvB,CACM5pE,EAAKnD,MAAM++B,iBACjB,MAAY,GAAI5sB,EAAE8oD,SAAW9oD,EAAEgpD,QAAS,CAClCh4D,EAAKgoB,UAAU3oB,GACfW,EAAKkpE,eAAiB7pE,CAC5B,KAAY,CACNW,EAAKwf,aAAanmB,UAAW,MAC7B2G,EAAK6nB,WAAWxoB,GAChBW,EAAKkpE,eAAiB7pE,CAC5B,CACA,GACA,KAAU,CACNpC,EAAQ8R,iBAAiB,SAAS,SAAUC,GAC3C,IAAKhP,EAAKnD,MAAMgC,UAAU,UAAYmB,EAAKnD,MAAMiC,QAAQ2R,KAAKogB,iBAAkB,CAC/E7wB,EAAKnD,MAAM++B,iBACjB,CAEK,IAAK57B,EAAKipE,UAAW,CACpBjpE,EAAKgoB,UAAU3oB,EACrB,CACA,IAEIpC,EAAQ8R,iBAAiB,aAAa,SAAUC,GAC/C,GAAIA,EAAE+oD,SAAU,CACf/3D,EAAKnD,MAAM++B,kBAEX57B,EAAKipE,UAAY,KAEjBjpE,EAAKmpE,WAAa,GAElBxrE,SAASgyB,KAAK5gB,iBAAiB,UAAWu6D,GAC1C3rE,SAASgyB,KAAK5gB,iBAAiB,QAASu6D,GAExCtpE,EAAKgoB,UAAU3oB,GAEf,OAAO,KACb,CACA,IAEIpC,EAAQ8R,iBAAiB,cAAc,SAAUC,GAChD,GAAIhP,EAAKipE,UAAW,CACnBjpE,EAAKnD,MAAM++B,kBACX57B,EAAKgoB,UAAU3oB,GAEf,GAAIW,EAAKmpE,WAAW,IAAM9pE,EAAK,CAC9BW,EAAKgoB,UAAUhoB,EAAKmpE,WAAW,GACtC,CACA,CACA,IAEIlsE,EAAQ8R,iBAAiB,YAAY,SAAUC,GAC9C,GAAIhP,EAAKipE,UAAW,CACnBjpE,EAAKnD,MAAM++B,kBACX57B,EAAKmpE,WAAW3nE,QAAQnC,EAC9B,CACA,GACA,CACA,CACA,KAAQ,CACNpC,EAAQY,UAAUC,IAAI,0BACtBb,EAAQY,UAAUikB,OAAO,uBAC3B,CACA,EAGAknD,GAAUhxE,UAAUgwB,UAAY,SAAU3oB,GACzC,GAAI1E,KAAKkC,MAAMkB,QAAQ43B,gBAAgBt9B,KAAKsC,KAAKkC,MAAOwC,EAAI4E,gBAAiB,CAC5E,GAAI5E,EAAIP,QAAQ8oB,QAAUvoB,EAAIP,QAAQ8oB,OAAO2hD,SAAU,CACtD5uE,KAAKmyB,aAAaztB,EACrB,KAAS,CACN1E,KAAKmvE,WAAWzqE,EACnB,CACA,CACA,EAGA2pE,GAAUhxE,UAAU6vB,WAAa,SAAUviB,GAC1C,IAAIykE,EAAUpvE,KAEd,IAAIqvE,EAEJ,cAAe1kE,IAAS,YAAc,YAAcnL,EAAQmL,IAC3D,IAAK,YACJ3K,KAAKkC,MAAMM,WAAWmI,KAAKzF,SAAQ,SAAUR,GAC5C0qE,EAAQD,WAAWzqE,EAAK,KAAM,KAClC,IAEG1E,KAAK0uE,uBACL,MAED,IAAK,SAEJW,EAAWrvE,KAAKkC,MAAMM,WAAWkb,QAAQ/S,GAEzC,GAAI0kE,EAAU,CACbrvE,KAAKmvE,WAAWE,EAAU,KAAM,KACpC,KAAU,CACNrvE,KAAKkC,MAAMM,WAAW6gB,QAAQ1Y,GAAMzF,SAAQ,SAAUR,GACrD0qE,EAAQD,WAAWzqE,EAAK,KAAM,KACnC,GACA,CAEG1E,KAAK0uE,uBACL,MAED,QACC,GAAI7uE,MAAMkF,QAAQ4F,GAAO,CACxBA,EAAKzF,SAAQ,SAAUR,GACtB0qE,EAAQD,WAAWzqE,EAAK,KAAM,KACnC,IAEI1E,KAAK0uE,sBACT,KAAU,CACN1uE,KAAKmvE,WAAWxkE,EAAM,MAAO,KACjC,CACG,MAEH,EAGA0jE,GAAUhxE,UAAU8xE,WAAa,SAAUG,EAASt2D,EAAQ7L,GAI3D,IAAK3L,MAAMxB,KAAKkC,MAAMkB,QAAQuhB,aAAe3kB,KAAKkC,MAAMkB,QAAQuhB,aAAe,OAASxX,EAAO,CAC9F,GAAInN,KAAKomB,aAAahoB,QAAU4B,KAAKkC,MAAMkB,QAAQuhB,WAAY,CAC9D,GAAI3kB,KAAKkC,MAAMkB,QAAQ23B,2BAA4B,CAClD/6B,KAAKmyB,aAAanyB,KAAKomB,aAAa,GACxC,KAAU,CACN,OAAO,KACX,CACA,CACA,CAEC,IAAI1hB,EAAM1E,KAAKkC,MAAMM,WAAWkb,QAAQ4xD,GAExC,GAAI5qE,EAAK,CACR,GAAI1E,KAAKomB,aAAatlB,QAAQ4D,KAAS,EAAG,CACzCA,EAAIjB,aAAaP,UAAUC,IAAI,sBAC/B,IAAKuB,EAAIP,QAAQ8oB,OAAQ,CACxBvoB,EAAIP,QAAQ8oB,OAAS,EACzB,CAEGvoB,EAAIP,QAAQ8oB,OAAO2hD,SAAW,KAC9B,GAAIlqE,EAAIP,QAAQ8oB,OAAOsiD,WAAY,CAClC7qE,EAAIP,QAAQ8oB,OAAOsiD,WAAWllB,QAAU,IAC5C,CAEGrqD,KAAKomB,aAAanhB,KAAKP,GAEvB,GAAI1E,KAAKkC,MAAMkB,QAAQg3B,wBAAyB,CAC/Cp6B,KAAKwvE,kBAAkB9qE,EAAK,KAChC,CAEG,IAAKsU,EAAQ,CACZhZ,KAAKkC,MAAMkB,QAAQu7B,YAAYjhC,KAAKsC,KAAKkC,MAAOwC,EAAI4E,eACxD,CAEGtJ,KAAK0uE,qBAAqB11D,EAC7B,CACA,KAAQ,CACN,IAAKA,EAAQ,CACZjN,QAAQC,KAAK,2DAA6DsjE,EAC7E,CACA,CACA,EAEAjB,GAAUhxE,UAAUkwB,cAAgB,SAAU7oB,GAC7C,OAAO1E,KAAKomB,aAAatlB,QAAQ4D,MAAU,CAC5C,EAGA2pE,GAAUhxE,UAAUwnB,aAAe,SAAUla,EAAMqO,GAClD,IAAI3T,EAAOrF,KACP05D,EAEJ,UAAW/uD,GAAQ,YAAa,CAE/B+uD,EAAWr0D,EAAK+gB,aAAahoB,OAE7B,IAAK,IAAIqxE,EAAO,EAAGA,EAAO/V,EAAU+V,IAAQ,CAC3CpqE,EAAK8sB,aAAa9sB,EAAK+gB,aAAa,GAAI,KAC3C,CAEE/gB,EAAKqpE,qBAAqB11D,EAC5B,KAAQ,CACN,GAAInZ,MAAMkF,QAAQ4F,GAAO,CACxBA,EAAKzF,SAAQ,SAAUR,GACtBW,EAAK8sB,aAAaztB,EAAK,KAC3B,IAEGW,EAAKqpE,qBAAqB11D,EAC7B,KAAS,CACN3T,EAAK8sB,aAAaxnB,EAAMqO,EAC3B,CACA,CACA,EAGAq1D,GAAUhxE,UAAU80B,aAAe,SAAUm9C,EAASt2D,GACrD,IAAI3T,EAAOrF,KACP0E,EAAMW,EAAKnD,MAAMM,WAAWkb,QAAQ4xD,GACpCnxE,EAEJ,GAAIuG,EAAK,CACRvG,EAAQkH,EAAK+gB,aAAatmB,WAAU,SAAU4vE,GAC7C,OAAOA,GAAehrE,CACzB,IAEE,GAAIvG,GAAS,EAAG,CAEfuG,EAAIjB,aAAaP,UAAUikB,OAAO,sBAClC,IAAKziB,EAAIP,QAAQ8oB,OAAQ,CACxBvoB,EAAIP,QAAQ8oB,OAAS,EACzB,CAEGvoB,EAAIP,QAAQ8oB,OAAO2hD,SAAW,MAC9B,GAAIlqE,EAAIP,QAAQ8oB,OAAOsiD,WAAY,CAClC7qE,EAAIP,QAAQ8oB,OAAOsiD,WAAWllB,QAAU,KAC5C,CACGhlD,EAAK+gB,aAAa1f,OAAOvI,EAAO,GAEhC,GAAI6B,KAAKkC,MAAMkB,QAAQg3B,wBAAyB,CAC/Cp6B,KAAKwvE,kBAAkB9qE,EAAK,MAChC,CAEG,IAAKsU,EAAQ,CACZ3T,EAAKnD,MAAMkB,QAAQw7B,cAAclhC,KAAKsC,KAAKkC,MAAOwC,EAAI4E,eAC1D,CAEGjE,EAAKqpE,qBAAqB11D,EAC7B,CACA,KAAQ,CACN,IAAKA,EAAQ,CACZjN,QAAQC,KAAK,6DAA+DsjE,EAC/E,CACA,CACA,EAEAjB,GAAUhxE,UAAU2qC,gBAAkB,WACrC,IAAI1jC,EAAO,GAEXtE,KAAKomB,aAAalhB,SAAQ,SAAUR,GACnCJ,EAAKW,KAAKP,EAAI+b,UAChB,IAEC,OAAOnc,CACR,EAEA+pE,GAAUhxE,UAAU0qC,gBAAkB,WAErC,IAAIp9B,EAAO,GAEX3K,KAAKomB,aAAalhB,SAAQ,SAAUR,GACnCiG,EAAK1F,KAAKP,EAAI4E,eAChB,IAEC,OAAOqB,CACR,EAEA0jE,GAAUhxE,UAAUqxE,qBAAuB,SAAU11D,GACpD,GAAIhZ,KAAKyuE,sBAAuB,CAC/B,GAAIzuE,KAAKomB,aAAahoB,SAAW,EAAG,CACnC4B,KAAKyuE,sBAAsBpkB,QAAU,MACrCrqD,KAAKyuE,sBAAsBrkB,cAAgB,KAC9C,MAAS,GAAIpqD,KAAKkC,MAAMM,WAAWmI,KAAKvM,SAAW4B,KAAKomB,aAAahoB,OAAQ,CAC1E4B,KAAKyuE,sBAAsBpkB,QAAU,KACrCrqD,KAAKyuE,sBAAsBrkB,cAAgB,KAC9C,KAAS,CACNpqD,KAAKyuE,sBAAsBrkB,cAAgB,KAC3CpqD,KAAKyuE,sBAAsBpkB,QAAU,KACxC,CACA,CAEC,IAAKrxC,EAAQ,CACZhZ,KAAKkC,MAAMkB,QAAQs7B,oBAAoBhhC,KAAKsC,KAAKkC,MAAOlC,KAAKgoC,kBAAmBhoC,KAAK+nC,kBACvF,CACA,EAEAsmC,GAAUhxE,UAAUi4D,0BAA4B,SAAU5wD,EAAKpC,GAC9D,IAAKoC,EAAIgoB,KAAKvoB,QAAQ8oB,OAAQ,CAC7BvoB,EAAIgoB,KAAKvoB,QAAQ8oB,OAAS,EAC5B,CAECvoB,EAAIgoB,KAAKvoB,QAAQ8oB,OAAOsiD,WAAajtE,CACtC,EAEA+rE,GAAUhxE,UAAUk4D,6BAA+B,SAAUjzD,GAC5DtC,KAAKyuE,sBAAwBnsE,CAC9B,EAEA+rE,GAAUhxE,UAAUmyE,kBAAoB,SAAU9qE,EAAKuoB,GACtD,IAAIiD,EAAWlwB,KAAKkC,MAAMiC,QAAQyG,SAASmwC,YAAYr2C,EAAK,MAE5D,GAAIuoB,EAAQ,CACX,IAAK,IAAI0iD,EAAaz/C,EAAU0/C,EAAY/vE,MAAMkF,QAAQ4qE,GAAaE,EAAO,EAAGF,EAAaC,EAAYD,EAAaA,EAAWlwE,OAAOC,cAAe,CACvJ,IAAIowE,EAEJ,GAAIF,EAAW,CACd,GAAIC,GAAQF,EAAWvxE,OAAQ,MAC/B0xE,EAAQH,EAAWE,IACvB,KAAU,CACNA,EAAOF,EAAWr5C,OAClB,GAAIu5C,EAAKnC,KAAM,MACfoC,EAAQD,EAAK9xE,KACjB,CAEG,IAAIub,EAAQw2D,EAEZ9vE,KAAKmvE,WAAW71D,EAAO,KAC1B,CACA,KAAQ,CACN,IAAK,IAAIy2D,EAAa7/C,EAAU8/C,EAAYnwE,MAAMkF,QAAQgrE,GAAaE,EAAO,EAAGF,EAAaC,EAAYD,EAAaA,EAAWtwE,OAAOC,cAAe,CACvJ,IAAIwwE,EAEJ,GAAIF,EAAW,CACd,GAAIC,GAAQF,EAAW3xE,OAAQ,MAC/B8xE,EAAQH,EAAWE,IACvB,KAAU,CACNA,EAAOF,EAAWz5C,OAClB,GAAI25C,EAAKvC,KAAM,MACfwC,EAAQD,EAAKlyE,KACjB,CAEG,IAAIoyE,EAASD,EAEblwE,KAAKmyB,aAAag+C,EAAQ,KAC7B,CACA,CACA,EAEA/iE,EAAU/P,UAAUytC,eAAe,YAAaujC,IAEhD,IAAI+B,GAAO,SAASA,EAAKluE,GACxBlC,KAAKkC,MAAQA,EACblC,KAAKmnC,SAAW,GAChBnnC,KAAK41B,QAAU,KAChB,EAGAw6C,GAAK/yE,UAAUwW,iBAAmB,SAAU1N,EAAQ8rC,GACnD,IAAI5sC,EAAOrF,KACP2E,EAAS,MACT0B,EACAgqE,EAEJ,OAAQ7wE,EAAQ2G,EAAOH,WAAWrB,SACjC,IAAK,SACJ,GAAIU,EAAKqe,QAAQvd,EAAOH,WAAWrB,QAAS,CAC3CA,EAASU,EAAKqe,QAAQvd,EAAOH,WAAWrB,OAC5C,KAAU,CACNoH,QAAQC,KAAK,sCAAuC7F,EAAOH,WAAWrB,OAC1E,CACG,MAED,IAAK,WACJA,EAASwB,EAAOH,WAAWrB,OAC3B,MAGFwB,EAAOhC,QAAQmR,KAAO,CACrB3Q,OAAQA,EAAQ0Y,IAAK,OACrB9F,OAAQpR,EAAOH,WAAWsqE,cAAgB,GAC1CC,YAAapqE,EAAOH,WAAWwqE,uBAAyB,MACxDzmB,gBAAiB5jD,EAAOH,WAAWmyB,qBAAuB,YAAchyB,EAAOH,WAAWmyB,mBAAqBn4B,KAAKkC,MAAMkB,QAAQ+0B,oBAGnI,UAAWhyB,EAAOH,WAAWkyB,aAAe,YAAcl4B,KAAKkC,MAAMkB,QAAQ80B,aAAe,MAAQ/xB,EAAOH,WAAWkyB,aAAe,MAAO,CAE3I7xB,EAAQF,EAAO1C,aAEf4C,EAAMnD,UAAUC,IAAI,sBAEpBktE,EAAUrtE,SAASC,cAAc,OACjCotE,EAAQntE,UAAUC,IAAI,wBAEtB,GAAI3D,EAAQQ,KAAKkC,MAAMkB,QAAQg1B,oBAAsB,SAAU,CAC9Di4C,EAAQvpE,YAAY9G,KAAKkC,MAAMkB,QAAQg1B,kBAC1C,KAAS,CACNi4C,EAAQt4D,UAAY/X,KAAKkC,MAAMkB,QAAQg1B,iBAC1C,CAGE6Z,EAAQnrC,YAAYupE,GAEpBlqE,EAAOhC,QAAQmR,KAAKhT,QAAU+tE,EAG9BhqE,EAAM+N,iBAAiB,SAAS,SAAUC,GACzC,IAAIgJ,EAAM,GACNqG,EAAU,GACV1e,EAAQ,MAEZ,GAAImB,EAAOhC,QAAQmR,KAAM,CACxB,GAAInP,EAAOhC,QAAQmR,KAAKy0C,SAAU,CACjC,GAAI5jD,EAAOhC,QAAQmR,KAAK+H,KAAO,OAAQ,CACtCA,EAAMlX,EAAOhC,QAAQmR,KAAKi7D,WAChC,KAAY,CACN,GAAIpqE,EAAOhC,QAAQmR,KAAK+H,KAAOlX,EAAOhC,QAAQmR,KAAKi7D,YAAa,CAC/DlzD,EAAMlX,EAAOhC,QAAQmR,KAAK+H,KAAO,MAAQ,OAAS,KACzD,KAAa,CACNA,EAAM,MACb,CACA,CACA,KAAW,CACN,OAAQlX,EAAOhC,QAAQmR,KAAK+H,KAC3B,IAAK,MACJA,EAAM,OACN,MAED,IAAK,OACJA,EAAM,MACN,MAED,QACCA,EAAMlX,EAAOhC,QAAQmR,KAAKi7D,YAEjC,CAEI,GAAIlrE,EAAKnD,MAAMkB,QAAQ40B,wBAA0B3jB,EAAE+oD,UAAY/oD,EAAE8oD,SAAU,CAC1Ez5C,EAAUre,EAAKse,UAEf3e,EAAQ0e,EAAQ5jB,WAAU,SAAU6E,GACnC,OAAOA,EAAOE,QAAUsB,EAAO+G,UACrC,IAEK,GAAIlI,GAAS,EAAG,CACf0e,EAAQ1e,GAAOqY,IAAMA,EAErB,GAAIrY,GAAS0e,EAAQtlB,OAAS,EAAG,CAChC4G,EAAQ0e,EAAQhd,OAAO1B,EAAO,GAAG,GACjC,GAAIqY,GAAO,OAAQ,CAClBqG,EAAQze,KAAKD,EACrB,CACA,CACA,KAAY,CACN,GAAIqY,GAAO,OAAQ,CAClBqG,EAAQze,KAAK,CAAEkB,OAAQA,EAAQkX,IAAKA,GAC3C,CACA,CAGKhY,EAAK68B,QAAQxe,EAClB,KAAW,CACN,GAAIrG,GAAO,OAAQ,CAClBhY,EAAKia,OACX,KAAY,CAENja,EAAK68B,QAAQ/7B,EAAQkX,EAC3B,CACA,CAEIhY,EAAKnD,MAAMM,WAAW6hB,eAAehf,EAAK8hC,SAAS/oC,OACvD,CACA,GACA,CACA,EAGAgyE,GAAK/yE,UAAUuyD,WAAa,WAC3B,IAAIh6B,EAAU51B,KAAK41B,QACnB51B,KAAK41B,QAAU,MACf,OAAOA,CACR,EAGAw6C,GAAK/yE,UAAUsmB,QAAU,WACxB,IAAIte,EAAOrF,KACP0jB,EAAU,GAEdre,EAAK8hC,SAASjiC,SAAQ,SAAUic,GAC/B,GAAIA,EAAKhb,OAAQ,CAChBud,EAAQze,KAAK,CAAEkB,OAAQgb,EAAKhb,OAAOmD,eAAgBzE,MAAOsc,EAAKhb,OAAO+G,WAAYmQ,IAAK8D,EAAK9D,KAC/F,CACA,IAEC,OAAOqG,CACR,EAGA0sD,GAAK/yE,UAAU6kC,QAAU,SAAUiF,EAAU9pB,GAC5C,IAAIhY,EAAOrF,KACPywE,EAAc,GAElB,IAAK5wE,MAAMkF,QAAQoiC,GAAW,CAC7BA,EAAW,CAAC,CAAEhhC,OAAQghC,EAAU9pB,IAAKA,GACvC,CAEC8pB,EAASjiC,SAAQ,SAAUic,GAC1B,IAAIhb,EAEJA,EAASd,EAAKnD,MAAMkI,cAAczC,WAAWwZ,EAAKhb,QAElD,GAAIA,EAAQ,CACXgb,EAAKhb,OAASA,EACdsqE,EAAYxrE,KAAKkc,GACjB9b,EAAKuwB,QAAU,IAClB,KAAS,CACN7pB,QAAQC,KAAK,kEAAmEmV,EAAKhb,OACxF,CACA,IAECd,EAAK8hC,SAAWspC,EAEhB,GAAIzwE,KAAKkC,MAAMkB,QAAQiH,aAAerK,KAAKkC,MAAMgC,UAAU,cAAe,OAASlE,KAAKkC,MAAMiC,QAAQkG,YAAYC,OAAOgL,KAAM,CAC9HtV,KAAKkC,MAAMiC,QAAQkG,YAAYE,KAAK,OACtC,CACA,EAGA6lE,GAAK/yE,UAAUiiB,MAAQ,WACtBtf,KAAKkiC,QAAQ,GACd,EAGAkuC,GAAK/yE,UAAUqzE,WAAa,SAAUvqE,GACrC,IAAIzB,EAAM1E,KAAKkC,MAAMM,WAAWuH,WAAW,GACvCpF,EAAS,SACTE,EACA9G,EAEJ,GAAI2G,EAAK,CACRA,EAAMA,EAAI+b,UACV5b,EAAQsB,EAAO+G,WAEf,GAAIrI,EAAO,CAEV9G,EAAQoI,EAAO+J,cAAcxL,GAE7B,cAAe3G,IAAU,YAAc,YAAcyB,EAAQzB,IAC5D,IAAK,YACJ4G,EAAS,SACT,MAED,IAAK,UACJA,EAAS,UACT,MAED,QACC,IAAKnD,MAAMzD,IAAUA,IAAU,GAAI,CAClC4G,EAAS,QACf,KAAY,CACN,GAAI5G,EAAMiH,MAAM,wCAAyC,CACxDL,EAAS,UAChB,CACA,CACK,MAEL,CACA,CAEC,OAAO3E,KAAK0jB,QAAQ/e,EACrB,EAGAyrE,GAAK/yE,UAAUiY,KAAO,SAAUhR,GAC5B,IAACe,EAAOrF,KACPmnC,EAAWnnC,KAAKkC,MAAMkB,QAAQ60B,iBAAmB5yB,EAAK8hC,SAASriB,QAAQ5D,UAAY7b,EAAK8hC,SACxFwpC,EAAiB,GACjBC,EAAgB,GAGpB,GAAIvrE,EAAKnD,MAAMkB,QAAQm8B,YAAa,CACnCl6B,EAAKnD,MAAMkB,QAAQm8B,YAAY7hC,KAAK2H,EAAKnD,MAAOmD,EAAKse,UACvD,CAECte,EAAKwrE,qBAEL,IAAKxrE,EAAKnD,MAAMkB,QAAQqgB,YAAa,CAGpC0jB,EAASjiC,SAAQ,SAAUic,EAAM3b,GAChC,IAAIsrE,EAAU3vD,EAAKhb,OAAOhC,QAAQmR,KAElC,GAAI6L,EAAKhb,QAAU2qE,EAAS,CAG3B,IAAKA,EAAQnsE,OAAQ,CACpBmsE,EAAQnsE,OAASU,EAAKqrE,WAAWvvD,EAAKhb,OAC3C,CAEIgb,EAAK5J,cAAgBu5D,EAAQv5D,SAAW,WAAau5D,EAAQv5D,OAAO4J,EAAKhb,OAAOmD,eAAgB6X,EAAK9D,KAAOyzD,EAAQv5D,OAEpHo5D,EAAe1rE,KAAKkc,EACxB,CAEG9b,EAAK0rE,gBAAgB5vD,EAAKhb,OAAQgb,EAAK9D,IAC1C,IAGE,GAAIszD,EAAevyE,OAAQ,CAC1BiH,EAAK2rE,WAAW1sE,EAAMqsE,EACzB,CACA,KAAQ,CACNxpC,EAASjiC,SAAQ,SAAUic,EAAM3b,GAChCH,EAAK0rE,gBAAgB5vD,EAAKhb,OAAQgb,EAAK9D,IAC1C,GACA,CAEC,GAAIhY,EAAKnD,MAAMkB,QAAQo8B,WAAY,CAClCl7B,EAAKY,SAAQ,SAAUR,GACtBksE,EAAc3rE,KAAKP,EAAI4E,eAC1B,IAEEjE,EAAKnD,MAAMkB,QAAQo8B,WAAW9hC,KAAK2H,EAAKnD,MAAOmD,EAAKse,UAAWitD,EACjE,CACA,EAGAR,GAAK/yE,UAAUwzE,mBAAqB,WACnC7wE,KAAKkC,MAAMkI,cAAcxB,iBAAiB1D,SAAQ,SAAUiB,GAC3D,GAAIA,EAAOhC,QAAQmR,KAAM,CACxBnP,EAAOhC,QAAQmR,KAAK+H,IAAM,OAC1BlX,EAAO1C,aAAa2O,aAAa,YAAa,OACjD,CACA,GACA,EAGAg+D,GAAK/yE,UAAU0zE,gBAAkB,SAAU5qE,EAAQkX,GAClDlX,EAAOhC,QAAQmR,KAAK+H,IAAMA,EAC1BlX,EAAO1C,aAAa2O,aAAa,YAAaiL,EAC/C,EAGA+yD,GAAK/yE,UAAU2zE,WAAa,SAAU1sE,EAAM6iC,GAC3C,IAAI8pC,EAAUjxE,KAEd,IAAIkxE,EAAc/pC,EAAS/oC,OAAS,EAEpCkG,EAAKgR,MAAK,SAAUgwB,EAAGC,GACtB,IAAIvmC,EAEJ,IAAK,IAAIwG,EAAI0rE,EAAa1rE,GAAK,EAAGA,IAAK,CACtC,IAAI2rE,EAAWhqC,EAAS3hC,GAExBxG,EAASiyE,EAAQG,SAAS9rC,EAAGC,EAAG4rC,EAAShrE,OAAQgrE,EAAS9zD,IAAK8zD,EAAS55D,QAExE,GAAIvY,IAAW,EAAG,CACjB,KACJ,CACA,CAEE,OAAOA,CACT,GACA,EAGAoxE,GAAK/yE,UAAU+zE,SAAW,SAAU9rC,EAAGC,EAAGp/B,EAAQkX,EAAK9F,GACnD,IAAC85D,EAASC,EAGb,IAAIC,EAAMl0D,GAAO,MAAQioB,EAAIC,EAC7B,IAAIisC,EAAMn0D,GAAO,MAAQkoB,EAAID,EAE7BA,EAAIn/B,EAAO+J,cAAcqhE,EAAI9wD,WAC7B8kB,EAAIp/B,EAAO+J,cAAcshE,EAAI/wD,WAE7B6kB,SAAWA,IAAM,YAAcA,EAAI,GACnCC,SAAWA,IAAM,YAAcA,EAAI,GAEnC8rC,EAAUE,EAAIjoE,eACdgoE,EAAUE,EAAIloE,eAEd,OAAOnD,EAAOhC,QAAQmR,KAAK3Q,OAAOjH,KAAKsC,KAAMslC,EAAGC,EAAG8rC,EAASC,EAASnrE,EAAOmD,eAAgB+T,EAAK9F,EAClG,EAGA64D,GAAK/yE,UAAUqmB,QAAU,CAGxBmgC,OAAQ,SAASA,EAAOve,EAAGC,EAAGksC,EAAMC,EAAMvrE,EAAQkX,EAAK9F,GACtD,IAAIo6D,EAAmBp6D,EAAOo6D,iBAC9B,IAAItf,EAAU96C,EAAOq6D,iBACrB,IAAInf,EAAWl7C,EAAOs6D,kBACtB,IAAIC,EAAa,EAEjBxsC,EAAI7kC,OAAO6kC,GACXC,EAAI9kC,OAAO8kC,GAEX,GAAIktB,EAAU,CACbntB,EAAIA,EAAE/8B,MAAMkqD,GAAUzf,KAAK,IAC3BzN,EAAIA,EAAEh9B,MAAMkqD,GAAUzf,KAAK,GAC9B,CAEE,GAAIqf,EAAS,CACZ/sB,EAAIA,EAAE/8B,MAAM8pD,GAASrf,KAAK,KAC1BzN,EAAIA,EAAEh9B,MAAM8pD,GAASrf,KAAK,IAC7B,CAEE1N,EAAIkS,WAAWlS,GACfC,EAAIiS,WAAWjS,GAGf,GAAI/jC,MAAM8jC,GAAI,CACbwsC,EAAatwE,MAAM+jC,GAAK,GAAK,CAChC,MAAS,GAAI/jC,MAAM+jC,GAAI,CACpBusC,EAAa,CAChB,KAAS,CAEN,OAAOxsC,EAAIC,CACd,CAGE,GAAIosC,IAAqB,OAASt0D,IAAQ,QAAUs0D,IAAqB,UAAYt0D,IAAQ,MAAO,CACnGy0D,IAAe,CAClB,CAEE,OAAOA,CACT,EAGCC,OAAQ,SAASA,EAAOzsC,EAAGC,EAAGksC,EAAMC,EAAMvrE,EAAQkX,EAAK9F,GACtD,IAAIo6D,EAAmBp6D,EAAOo6D,iBAC9B,IAAIG,EAAa,EACjB,IAAI52C,EAGJ,IAAKoK,EAAG,CACPwsC,GAAcvsC,EAAI,GAAK,CAC1B,MAAS,IAAKA,EAAG,CACdusC,EAAa,CAChB,KAAS,CAEN,OAAQtyE,EAAQ+X,EAAO2jB,SACtB,IAAK,UACJ,GAAI3jB,EAAO2jB,OAAQ,CAClBA,EAASl7B,KAAKkC,MAAMiC,QAAQiP,SAAS6zB,WAC3C,CACK,MACD,IAAK,SACJ/L,EAAS3jB,EAAO2jB,OAChB,MAGF,OAAOz6B,OAAO6kC,GAAG0J,cAAcgjC,cAAcvxE,OAAO8kC,GAAGyJ,cAAe9T,EACzE,CAGE,GAAIy2C,IAAqB,OAASt0D,IAAQ,QAAUs0D,IAAqB,UAAYt0D,IAAQ,MAAO,CACnGy0D,IAAe,CAClB,CAEE,OAAOA,CACT,EAGC7d,KAAM,SAASA,EAAK3uB,EAAGC,EAAGksC,EAAMC,EAAMvrE,EAAQkX,EAAK9F,GAClD,IAAKA,EAAO3B,OAAQ,CACnB2B,EAAO3B,OAAS,YACnB,CAEE,OAAO5V,KAAK0jB,QAAQ4vC,SAAS51D,KAAKsC,KAAMslC,EAAGC,EAAGksC,EAAMC,EAAMvrE,EAAQkX,EAAK9F,EACzE,EAGC06D,KAAM,SAASA,EAAK3sC,EAAGC,EAAGksC,EAAMC,EAAMvrE,EAAQkX,EAAK9F,GAClD,IAAKA,EAAO3B,OAAQ,CACnB2B,EAAO3B,OAAS,OACnB,CAEE,OAAO5V,KAAK0jB,QAAQ4vC,SAAS51D,KAAKsC,KAAMslC,EAAGC,EAAGksC,EAAMC,EAAMvrE,EAAQkX,EAAK9F,EACzE,EAGC+7C,SAAU,SAASA,EAAShuB,EAAGC,EAAGksC,EAAMC,EAAMvrE,EAAQkX,EAAK9F,GAC1D,IAAI3B,EAAS2B,EAAO3B,QAAU,sBAC1B+7D,EAAmBp6D,EAAOo6D,iBAC1BG,EAAa,EAEjB,UAAWne,QAAU,YAAa,CACjCruB,EAAIquB,OAAOruB,EAAG1vB,GACd2vB,EAAIouB,OAAOpuB,EAAG3vB,GAEd,IAAK0vB,EAAEjS,UAAW,CACjBy+C,GAAcvsC,EAAElS,UAAY,GAAK,CACrC,MAAU,IAAKkS,EAAElS,UAAW,CACxBy+C,EAAa,CACjB,KAAU,CAEN,OAAOxsC,EAAIC,CACf,CAGG,GAAIosC,IAAqB,OAASt0D,IAAQ,QAAUs0D,IAAqB,UAAYt0D,IAAQ,MAAO,CACnGy0D,IAAe,CACnB,CAEG,OAAOA,CACV,KAAS,CACN/lE,QAAQ8T,MAAM,2DACjB,CACA,EAGCqyD,QAAS,SAASA,EAAQ5sC,EAAGC,EAAGksC,EAAMC,EAAMvrE,EAAQkX,EAAK9F,GACxD,IAAIg6D,EAAMjsC,IAAM,MAAQA,IAAM,QAAUA,IAAM,QAAUA,IAAM,EAAI,EAAI,EACtE,IAAIksC,EAAMjsC,IAAM,MAAQA,IAAM,QAAUA,IAAM,QAAUA,IAAM,EAAI,EAAI,EAEtE,OAAOgsC,EAAMC,CACf,EAGCW,MAAO,SAASA,EAAM7sC,EAAGC,EAAGksC,EAAMC,EAAMvrE,EAAQkX,EAAK9F,GACpD,IAAIg6D,EAAM,EACV,IAAIC,EAAM,EACV,IAAI7jE,EAAO4J,EAAO5J,MAAQ,SAC1B,IAAIgkE,EAAmBp6D,EAAOo6D,iBAC9B,IAAIG,EAAa,EAEjB,SAASM,EAAKr0E,GAEb,OAAQ4P,GACP,IAAK,SACJ,OAAO5P,EAAMK,OAGd,IAAK,MACJ,OAAOL,EAAMq5C,QAAO,SAAUkI,EAAG+yB,GAChC,OAAO/yB,EAAI+yB,CACjB,IAGI,IAAK,MACJ,OAAOnxE,KAAKC,IAAIopE,MAAM,KAAMxsE,GAG7B,IAAK,MACJ,OAAOmD,KAAK4K,IAAIy+D,MAAM,KAAMxsE,GAG7B,IAAK,MACJ,OAAOA,EAAMq5C,QAAO,SAAUkI,EAAG+yB,GAChC,OAAO/yB,EAAI+yB,CACjB,IAAUt0E,EAAMK,OAGhB,CAGE,IAAKyB,MAAMkF,QAAQugC,GAAI,CACtBqsC,GAAoB9xE,MAAMkF,QAAQwgC,GAAK,GAAK,CAC/C,MAAS,IAAK1lC,MAAMkF,QAAQwgC,GAAI,CAC7BosC,EAAmB,CACtB,KAAS,CAGNJ,EAAMjsC,EAAI8sC,EAAK9sC,GAAK,EACpBksC,EAAMjsC,EAAI6sC,EAAK7sC,GAAK,EAEpB,OAAOgsC,EAAMC,CAChB,CAGE,GAAIG,IAAqB,OAASt0D,IAAQ,QAAUs0D,IAAqB,UAAYt0D,IAAQ,MAAO,CACnGy0D,IAAe,CAClB,CAEE,OAAOA,CACT,EAGChW,OAAQ,SAASA,EAAOx2B,EAAGC,EAAGksC,EAAMC,EAAMvrE,EAAQkX,EAAK9F,GACtD,IAAIg6D,SAAajsC,GAAK,YAAc,EAAI,EACxC,IAAIksC,SAAajsC,GAAK,YAAc,EAAI,EAExC,OAAOgsC,EAAMC,CACf,EAGCc,SAAU,SAASA,EAASC,EAAIC,EAAIf,EAAMC,EAAMvrE,EAAQkX,EAAK9F,GAC5D,IAAI+tB,EACAC,EACAktC,EACAC,EACAltE,EAAI,EACJmtE,EACAC,EAAK,eACLC,EAAK,KACT,IAAIlB,EAAmBp6D,EAAOo6D,iBAC9B,IAAIG,EAAa,EAGjB,IAAKS,GAAMA,IAAO,EAAG,CACpBT,GAAcU,GAAMA,IAAO,EAAI,GAAK,CACvC,MAAS,IAAKA,GAAMA,IAAO,EAAG,CAC3BV,EAAa,CAChB,KAAS,CAEN,GAAIgB,SAASP,IAAOO,SAASN,GAAK,OAAOD,EAAKC,EAC9CltC,EAAI7kC,OAAO8xE,GAAIvjC,cACfzJ,EAAI9kC,OAAO+xE,GAAIxjC,cACf,GAAI1J,IAAMC,EAAG,OAAO,EACpB,KAAMstC,EAAG/vC,KAAKwC,IAAMutC,EAAG/vC,KAAKyC,IAAK,OAAOD,EAAIC,EAAI,GAAK,EACrDD,EAAIA,EAAEtgC,MAAM4tE,GACZrtC,EAAIA,EAAEvgC,MAAM4tE,GACZD,EAAIrtC,EAAElnC,OAASmnC,EAAEnnC,OAASmnC,EAAEnnC,OAASknC,EAAElnC,OACvC,MAAOoH,EAAImtE,EAAG,CACbF,EAAKntC,EAAE9/B,GACPktE,EAAKntC,EAAE//B,KACP,GAAIitE,IAAOC,EAAI,CACd,GAAII,SAASL,IAAOK,SAASJ,GAAK,CACjC,GAAID,EAAG3hC,OAAO,KAAO,IAAK2hC,EAAK,IAAMA,EACrC,GAAIC,EAAG5hC,OAAO,KAAO,IAAK4hC,EAAK,IAAMA,EACrC,OAAOD,EAAKC,CAClB,MAAY,OAAOD,EAAKC,EAAK,GAAK,CAClC,CACA,CAEG,OAAOptC,EAAElnC,OAASmnC,EAAEnnC,MACvB,CAGE,GAAIuzE,IAAqB,OAASt0D,IAAQ,QAAUs0D,IAAqB,UAAYt0D,IAAQ,MAAO,CACnGy0D,IAAe,CAClB,CAEE,OAAOA,CACT,GAGA1kE,EAAU/P,UAAUytC,eAAe,OAAQslC,IAE3C,IAAI2C,GAAW,SAASA,EAAS7wE,GAChClC,KAAKkC,MAAQA,EACblC,KAAKgzE,aAAe,EACrB,EAGAD,GAAS11E,UAAUwW,iBAAmB,SAAU1N,GAC/C,IAAId,EAAOrF,KACPsK,EAAS,GACTyL,EAEJ,GAAI5P,EAAOH,WAAW+P,UAAW,CAEhC,GAAIlW,MAAMkF,QAAQoB,EAAOH,WAAW+P,WAAY,CAC/C5P,EAAOH,WAAW+P,UAAU7Q,SAAQ,SAAUic,GAC7CpL,EAAY1Q,EAAK4tE,kBAAkB9xD,GAEnC,GAAIpL,EAAW,CACdzL,EAAOrF,KAAK8Q,EACjB,CACA,GACA,KAAS,CACNA,EAAY/V,KAAKizE,kBAAkB9sE,EAAOH,WAAW+P,WAErD,GAAIA,EAAW,CACdzL,EAAOrF,KAAK8Q,EAChB,CACA,CAEE5P,EAAOhC,QAAQqL,SAAWlF,EAAOlM,OAASkM,EAAS,KACrD,CACA,EAEAyoE,GAAS11E,UAAU41E,kBAAoB,SAAUl1E,GAChD,IAAI4P,EAAM4J,EAAQqJ,EAElB,cAAe7iB,IAAU,YAAc,YAAcyB,EAAQzB,IAC5D,IAAK,SACJ6iB,EAAM7iB,EAAM+C,QAAQ,KAEpB,GAAI8f,GAAO,EAAG,CACbjT,EAAO5P,EAAMm1E,UAAU,EAAGtyD,GAC1BrJ,EAASxZ,EAAMm1E,UAAUtyD,EAAM,EACnC,KAAU,CACNjT,EAAO5P,CACX,CAEG,OAAOiC,KAAKmzE,gBAAgBxlE,EAAM4J,GAGnC,IAAK,WACJ,OAAOvX,KAAKmzE,gBAAgBp1E,GAG7B,IAAK,SACJ,OAAOiC,KAAKmzE,gBAAgBp1E,EAAM4P,KAAM5P,EAAMq1E,YAGjD,EAEAL,GAAS11E,UAAU81E,gBAAkB,SAAUxlE,EAAM4J,GAEpD,IAAIy3C,SAAcrhD,GAAQ,WAAaA,EAAO3N,KAAKqzE,WAAW1lE,GAE9D,IAAKqhD,EAAM,CACVjjD,QAAQC,KAAK,uDAAwD2B,GACrE,OAAO,KACT,KAAQ,CACN,MAAO,CACNA,YAAaA,GAAQ,WAAa,WAAaA,EAC/CqhD,KAAMA,EACNz3C,OAAQA,EAEX,CACA,EAEAw7D,GAAS11E,UAAUmS,SAAW,SAAU6jE,EAAYroE,EAAMjN,GACzD,IAAIsH,EAAOrF,KACPm2B,EAAQ,GACRm9C,EAAetzE,KAAKgzE,aAAalyE,QAAQkK,GAE7C,GAAIqoE,EAAY,CACfA,EAAWnuE,SAAQ,SAAUic,GAC5B,IAAKA,EAAK6tC,KAAKtxD,KAAK2H,EAAM2F,EAAK1B,eAAgBvL,EAAOojB,EAAK5J,QAAS,CACnE4e,EAAMlxB,KAAK,CACV0I,KAAMwT,EAAKxT,KACXylE,WAAYjyD,EAAK5J,QAEtB,CACA,GACA,CAEC4e,EAAQA,EAAM/3B,OAAS+3B,EAAQ,KAE/B,IAAKnrB,EAAK7G,QAAQqL,SAAU,CAC3BxE,EAAK7G,QAAQqL,SAAW,EAC1B,CAEC,GAAI2mB,IAAU,KAAM,CACnBnrB,EAAK7G,QAAQqL,SAAS4K,QAAU,MAChCpP,EAAKvH,aAAaP,UAAUikB,OAAO,6BAEnC,GAAImsD,GAAgB,EAAG,CACtBtzE,KAAKgzE,aAAatsE,OAAO4sE,EAAc,EAC1C,CACA,KAAQ,CACNtoE,EAAK7G,QAAQqL,SAAS4K,QAAU,KAEhC,GAAIpa,KAAKkC,MAAMkB,QAAQo9B,iBAAmB,SAAU,CACnDx1B,EAAKvH,aAAaP,UAAUC,IAAI,4BACnC,CAEE,GAAImwE,IAAiB,EAAG,CACvBtzE,KAAKgzE,aAAa/tE,KAAK+F,EAC1B,CACA,CAEC,OAAOmrB,CACR,EAEA48C,GAAS11E,UAAU4qC,gBAAkB,WACpC,IAAIh/B,EAAS,GAEbjJ,KAAKgzE,aAAa9tE,SAAQ,SAAU8F,GACnC/B,EAAOhE,KAAK+F,EAAK1B,eACnB,IAEC,OAAOL,CACR,EAEA8pE,GAAS11E,UAAUi2B,gBAAkB,SAAUtoB,GAC9C,IAAIsoE,EAEJ,GAAItoE,EAAK7G,QAAQqL,UAAYxE,EAAK7G,QAAQqL,SAAS4K,QAAS,CAE3DpP,EAAKvH,aAAaP,UAAUikB,OAAO,6BACnCnc,EAAK7G,QAAQqL,SAAS4K,QAAU,MAEhCk5D,EAAetzE,KAAKgzE,aAAalyE,QAAQkK,GAEzC,GAAIsoE,GAAgB,EAAG,CACtBtzE,KAAKgzE,aAAatsE,OAAO4sE,EAAc,EAC1C,CACA,CACA,EAEAP,GAAS11E,UAAUg2E,WAAa,CAG/BjhB,QAAS,SAASA,EAAQpnD,EAAMjN,EAAOq1E,GACtC,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACEA,EAAQu5C,OAAOv5C,GACf,cAAcA,IAAU,UAAY+0E,SAAS/0E,IAAUmD,KAAKsY,MAAMzb,KAAWA,CAC/E,EAGCw1E,MAAO,SAASA,EAAMvoE,EAAMjN,EAAOq1E,GAClC,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACEA,EAAQu5C,OAAOv5C,GACf,cAAcA,IAAU,UAAY+0E,SAAS/0E,IAAUA,EAAQ,IAAM,CACvE,EAGCy1E,QAAS,SAASA,EAAQxoE,EAAMjN,EAAOq1E,GACtC,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAQyD,MAAMzD,EAChB,EAGCg0E,OAAQ,SAASA,EAAO/mE,EAAMjN,EAAOq1E,GACpC,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAOyD,MAAMzD,EACf,EAGCoD,IAAK,SAASA,EAAI6J,EAAMjN,EAAOq1E,GAC9B,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAOy5C,WAAWz5C,IAAUq1E,CAC9B,EAGCtnE,IAAK,SAASA,EAAId,EAAMjN,EAAOq1E,GAC9B,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAOy5C,WAAWz5C,IAAUq1E,CAC9B,EAGCniB,OAAQ,SAASA,EAAOjmD,EAAMjN,EAAOq1E,GACpC,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAO0C,OAAO1C,GAAOixC,cAAc6X,WAAWpmD,OAAO2yE,GAAYpkC,cACnE,EAGCkiB,KAAM,SAASA,EAAKlmD,EAAMjN,EAAOq1E,GAChC,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAO0C,OAAO1C,GAAOixC,cAAcmiB,SAAS1wD,OAAO2yE,GAAYpkC,cACjE,EAGCykC,UAAW,SAASA,EAAUzoE,EAAMjN,EAAOq1E,GAC1C,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAO0C,OAAO1C,GAAOK,QAAUg1E,CACjC,EAGCM,UAAW,SAASA,EAAU1oE,EAAMjN,EAAOq1E,GAC1C,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAO0C,OAAO1C,GAAOK,QAAUg1E,CACjC,EAGChiB,GAAI,SAASC,EAAIrmD,EAAMjN,EAAOq1E,GAC7B,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,UAAWq1E,GAAc,SAAU,CAClCA,EAAaA,EAAW7qE,MAAM,IACjC,CAEE,OAAOxK,IAAU,IAAMq1E,EAAWtyE,QAAQ/C,IAAU,CACtD,EAGC4yD,MAAO,SAASA,EAAM3lD,EAAMjN,EAAOq1E,GAClC,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,IAAI41E,EAAM,IAAI9yE,OAAOuyE,GAErB,OAAOO,EAAI7wC,KAAK/kC,EAClB,EAGC61E,OAAQ,SAASA,EAAO5oE,EAAMjN,EAAOq1E,GACpC,GAAIr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,IAAI61E,EAAS,KAEb,IAAIC,EAAW7oE,EAAKyV,UACpB,IAAIta,EAAS6E,EAAK4nB,YAAY9qB,WAE9B9H,KAAKkC,MAAMM,WAAWmI,KAAKzF,SAAQ,SAAUR,GAC5C,IAAIJ,EAAOI,EAAI+b,UAEf,GAAInc,IAASuvE,EAAU,CACtB,GAAI91E,GAASoI,EAAO+J,cAAc5L,GAAO,CACxCsvE,EAAS,KACd,CACA,CACA,IAEE,OAAOA,CACT,EAGC5oC,SAAU,SAASA,EAAShgC,EAAMjN,EAAOq1E,GACxC,OAAOr1E,IAAU,IAAMA,IAAU,aAAeA,IAAU,WAC5D,GAGAqP,EAAU/P,UAAUytC,eAAe,WAAYioC,ICnluB/C,MAAMt5B,QAACA,IAAW,GAIlB,MAAMq6B,GAAK,WAEX,MAAMC,GAAO,CACX,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,UAEP,MAAMC,GAAKC,GAAKF,GAAKE,GASd,MAAMC,GAASC,GAAM16B,GAAQ/7C,KAAKy2E,EAAIL,GAAIE,I,MCtCpCI,GACTx0E,YAAoBy0E,GAAAr0E,KAAAq0E,OAChBr0E,KAAK2uB,OAAS3uB,KAAK2uB,OAAOtb,KAAKrT,K,CAS5B2uB,OAAOxoB,G,MACV,MAAMH,EAAyC,CAC3ClB,MAAOqB,EAAOrB,MACdD,MAAOsB,EAAOtB,MACdkL,SAAU5J,EAAOmuE,gBACjBp8C,WAAY/xB,EAAO+xB,WACnBs4C,sBAAuB,QAG3B,GAAIrqE,EAAOouE,gBAAiB,CACxBvuE,EAAW0R,eAAiB88D,GAAaruE,E,CAG7C,KAAIsuE,EAAAtuE,EAAOsL,aAAS,MAAAgjE,SAAA,SAAAA,EAAE9pC,OAAQxkC,EAAOkR,UAAW,CAC5CrR,EAAWqR,UAAYq9D,GAAgBvuE,EAAQnG,KAAKq0E,MACpDruE,EAAWisD,gBAAkB9rD,C,CAGjC,GAAIA,EAAOwuE,WAAY,CACnB3uE,EAAWmO,WAAaygE,GAAoBzuE,E,CAGhD,OAAOH,C,EAUR,MAAMwuE,GAAgBruE,GAAmB,KAC5C,MAAMopD,EAAgBvsD,SAASC,cAAc,OAC7CssD,EAAcn9C,aAAa,QAAS,oCAEpC,MAAMzC,EAAe3M,SAASC,cAAc,QAC5C0M,EAAayC,aAAa,QAAS,wBACnCzC,EAAaosD,YAAc51D,EAAOrB,MAElC,MAAM+vE,EAAgB7xE,SAASC,cAAckD,EAAOouE,gBAAgB5pC,MACpEkqC,EAAcziE,aAAa,QAAS,wBAEpC,IAAIjT,EAAgBgH,EAAOouE,gBAAgBp1E,OAAS,GACpD,GAAIgH,EAAOouE,gBAAgBO,aAAc,CACrC31E,EAAK/B,OAAAqE,OAAArE,OAAAqE,OAAA,GACEtC,GAEAgH,EAAOouE,gBAAgBO,aAAa,M,CAI/CC,GAAqBF,EAAe11E,GAEpCowD,EAAcx4B,OAAOpnB,GACrB4/C,EAAcx4B,OAAO89C,GAErB,OAAOtlB,CAAa,E,SAURmlB,GACZvuE,EACAkuE,G,MAEA,MAAKI,EAAAtuE,EAAOsL,aAAS,MAAAgjE,SAAA,SAAAA,EAAE9pC,MAAM,CACzB,OAAOqqC,E,CAGX,IAAKC,GAAoB9uE,GAAS,CAC9B4F,QAAQC,KACJ,iDAAiD7F,EAAOtB,MAAM4yC,gCAC1DtxC,EAAOsL,UAAUk5B,uDAIzB,OAAOqqC,E,CAGX,OAAQhqE,IACJ,MAAMjN,EAAQi3E,GAAWhqE,EAAM7E,GAE/B,OAAO+uE,GAAsBlqE,EAAM7E,EAAQpI,EAAOs2E,EAAK,CAE/D,CAEA,SAASY,GAAoB9uE,GACzB,MAAMwkC,EAAOxkC,EAAOsL,UAAUk5B,KAC9B,UAAWA,IAAS,SAAU,CAC1B,MAAMwqC,GAAmBxqC,EAAKjqC,SAAS,KACvC,MAAM00E,EAAsBC,eAAehN,IAAIliE,EAAOsL,UAAUk5B,MAEhE,OAAOwqC,GAAmBC,C,KACvB,CACH,OAAO,K,CAEf,C,SASgBJ,GACZhqE,EACA7E,GAEA,MAAM7B,EAAO0G,EAAKyV,UAClB,IAAI1iB,EAAQiN,EAAK4M,WAEjB,GAAIzR,EAAOkR,UAAW,CAClBtZ,EAAQoI,EAAOkR,UAAUtZ,EAAOuG,E,CAGpC,UAAWvG,IAAU,WAAaoI,EAAOsL,UAAW,CAChD1T,EAAQm2E,GAAOn2E,E,CAGnB,OAAOA,CACX,C,SAWgBm3E,GACZlqE,EACA7E,EACApI,EACAs2E,GAEA,MAAMxvE,EAAQmG,EAAKkC,WACnB,MAAM5I,EAAO0G,EAAKyV,UAElB,MAAMne,EAAU+xE,EAAKhM,IAAIliE,EAAOsL,UAAUk5B,MAC1C,IAAIxrC,EAAgBgH,EAAOsL,UAAUtS,OAAS,GAC9C,GAAIgH,EAAOsL,UAAUqjE,aAAc,CAC/B31E,EAAK/B,OAAAqE,OAAArE,OAAAqE,OAAA,GACEtC,GACAgH,EAAOsL,UAAUqjE,aAAaxwE,G,CAIzCnF,EAAK/B,OAAAqE,OAAArE,OAAAqE,OAAA,GACEtC,GAAK,CACR0F,MAAOA,EACP9G,MAAOA,EACPuG,KAAMA,IAGVhC,EAAQ0B,MAAMkV,QAAU,eACxB67D,GAAqBzyE,EAASnD,GAE9Bm2E,GAAqBhzE,EAAS0I,EAAK4nB,aAEnC,OAAOtwB,CACX,C,SAQgByyE,GAAqBzyE,EAAsBnD,GACvD,MAAMo2E,EAAar2E,EAAOC,EAAOq2E,EAAOC,KACxCr4E,OAAOqE,OAAOa,EAASizE,GAEvB,MAAMG,EAAYx2E,EAAOC,EAAOs2E,IAChC,IAAK,MAAOh4E,EAAKM,KAAUX,OAAOu4E,QAAQD,GAAY,CAClD,MAAMrsD,EAAQusD,GAAan4E,GAC3B6E,EAAQ8R,iBAAiBiV,EAAOtrB,E,CAExC,CAYA,SAAS03E,GAAgB13E,EAAYN,GACjC,UAAWM,IAAU,WAAY,CAC7B,OAAO,K,CAGX,MAAO,WAAW+kC,KAAKrlC,EAC3B,CAUA,SAASm4E,GAAaC,GAClB,OAAOA,EAAc/kC,OAAO,GAAG9B,cAAgB6mC,EAAc/wD,MAAM,EACvE,CAEA,SAASwwD,GACLhzE,EACA6D,GAEA,KAAM,mBAAoBgkB,QAAS,CAC/B,M,CAGJ,MAAM2rD,EAAiB,IACvB,MAAMC,EAAiB,GAEvB,MAAM/J,EAAW,IAAIO,gBAAe,KAChC,MAAM/iE,EAAQlH,EAAQsmB,wBAAwBpf,MAC9C,MAAMwsE,EAAWxsE,EAAQusE,EAEzB,GAAIC,EAAW7vE,EAAOoD,WAAY,CAC9B,M,CAGJpD,EAAOoJ,SAASymE,EAAS,IAE7BhK,EAASY,QAAQtqE,GAIjB0S,YAAW,KACPg3D,EAASa,UAAUvqE,EAAQ,GAC5BwzE,EACP,CAcO,MAAMG,GACRxzE,GACAkC,IACG,MAAMwB,EAAS1D,EAAQjC,MAAMoE,GAAQA,EAAIC,QAAUF,EAAOE,QAC1D,MAAMi8B,EAAYn8B,EAAO0Y,IAAI0zB,cAE7B,MAAO,CACH5qC,OAAQA,EACR26B,UAAWA,EACd,E,SAOO8zC,GAAoBzuE,GAChC,MAAMwuE,EAAaxuE,EAAOwuE,WAC1B,GAAIuB,GAAqBvB,GAAa,CAClC,MAAO,CAAC5rC,EAAezkC,IACZqwE,EAAWxuE,EAAQ4iC,EAAQzkC,E,CAI1C,OAAOqwE,CACX,CAEA,SAASuB,GAAqBn4E,GAC1B,cAAcA,IAAU,UAC5B,C,MClTao4E,GAKTv2E,YAAYoD,GAuBJhD,KAAAo2E,OAAU9zE,IACNtC,KAAKq2E,aAAa14E,IAAI2E,GAvB9BtC,KAAKgD,SAAWA,EAChBhD,KAAKs2E,aACLt2E,KAAKsf,O,CASF+oD,IAAI19B,G,MACP,IAAIroC,GAAUmyE,EAAAz0E,KAAKq0E,KAAK1pC,MAAK,MAAA8pC,SAAA,SAAAA,EAAEj0E,KAAKR,KAAKo2E,QACzC,IAAK9zE,EAAS,CACVA,EAAUtC,KAAKiD,cAAc0nC,E,CAGjC3qC,KAAKq2E,aAAajO,IAAI9lE,EAAS,MAE/B,OAAOA,C,CAYJi0E,QAAQj0E,GACXtC,KAAKq2E,aAAanoE,OAAO5L,E,CAMtBg0E,aACHt2E,KAAKq2E,aAAe,IAAIG,O,CAOrBl3D,QACHtf,KAAKq0E,KAAO,E,CAGRpxE,cAAc0nC,GAClB,MAAMroC,EAAUtC,KAAKgD,SAASC,cAAc0nC,GAC5C,KAAMA,KAAQ3qC,KAAKq0E,MAAO,CACtBr0E,KAAKq0E,KAAK1pC,GAAQ,E,CAGtB3qC,KAAKq0E,KAAK1pC,GAAM1lC,KAAK3C,GAErB,OAAOA,C,QCxCFm0E,GAYT72E,YAAoB82E,GAAA12E,KAAA02E,iBAwEZ12E,KAAA22E,YAAc,CAClB31E,EACA0J,KAEA,MAAMuiB,GAAUjtB,KAAK42E,cAAcj5E,IAAIqC,KAAK02E,eAAehsE,IAE3D,MAAMmsE,EAAa31E,KAAK4K,IAAI9K,EAAW0J,GACvC,MAAMosE,EAAa51E,KAAKC,IAAIH,EAAW0J,GACvC,MAAMqsE,EAAiB,GACvB,MAAMC,EAAe,GACrB,IAAK,IAAI74E,EAAQ04E,EAAY14E,GAAS24E,EAAY34E,IAAS,CACvD,MAAMmG,EAAOtE,KAAK02E,eAAev4E,GAEjC,IAAKmG,EAAM,CACP,Q,CAGJ,MAAMgpB,EAAattB,KAAK42E,cAAcj5E,IAAI2G,GAE1C,GAAIgpB,IAAeL,EAAQ,CACvB,Q,CAGJ,GAAIA,EAAQ,CACRjtB,KAAK42E,cAAczzE,IAAImB,E,KACpB,CACHtE,KAAK42E,cAAc1oE,OAAO5J,E,CAG9ByyE,EAAe9xE,KAAK9G,GACpB64E,EAAa/xE,KAAKX,E,CAGtBtE,KAAKi3E,iBAAmBvsE,EAExB,MAAO,CACHkkE,SAAU3hD,EACVyiB,MAAOsnC,EACPE,QAASH,EACZ,EA9GD/2E,KAAKsf,O,CAMLipB,WACA,OAAOvoC,KAAK42E,cAAcruC,I,CAM1BmH,YACA,MAAO,IAAI1vC,KAAK42E,c,CAMhBlnC,UAAMA,GACN1vC,KAAK42E,cAAgB,IAAIO,IAAIznC,GAC7B1vC,KAAKi3E,kBAAoB,C,CAStBt5E,IAAI2G,GACP,OAAOtE,KAAK42E,cAAcj5E,IAAI2G,E,CAS3B8yE,gBAAgBj5E,GACnB,OAAO6B,KAAK22E,YAAYx4E,EAAOA,E,CAa5Bk5E,6BAA6Bl5E,GAChC,GAAI6B,KAAKi3E,iBAAmB,EAAG,CAC3B,OAAOj3E,KAAKo3E,gBAAgBj5E,E,CAGhC,OAAO6B,KAAK22E,YAAY32E,KAAKi3E,iBAAkB94E,E,CAM5CmhB,QACHtf,KAAK42E,cAAgB,IAAIO,IACzBn3E,KAAKi3E,kBAAoB,C,EClGjC,MAAMK,GAAiB,iBAEvB,MAAMC,GAAYjzE,IAAa,IAAAmwE,EAAK,OAAAA,EAAAnwE,EAAKijE,MAAE,MAAAkN,SAAA,EAAAA,EAAInwE,CAAI,E,MAKtCkzE,GAWT53E,YACY0O,EACA+lE,EACAoD,EACAC,GAHA13E,KAAAsO,WACAtO,KAAAq0E,OACAr0E,KAAAy3E,cACAz3E,KAAA03E,iBAkGF13E,KAAA23E,qBAAuB,CAC7BC,EACA5sE,KAEA4sE,EAAG7gE,kBACH6gE,EAAG/iD,iBAEH,MAAMgjD,EAAa7sE,EAAK2nB,SACxB,MAAMmlD,EAAcD,EAAWjrD,YAAY,MAE3C,GAAIgrD,EAAGxa,SAAU,CACbp9D,KAAK+3E,mBACD/3E,KAAK80B,UAAUuiD,6BAA6BS,G,KAE7C,CACH93E,KAAK+3E,mBACD/3E,KAAK80B,UAAUsiD,gBAAgBU,G,CAIvC93E,KAAKy3E,YAAYO,KAAKh4E,KAAK80B,UAAU4a,MAAMuoC,IAAIj4E,KAAKk4E,YAAY,EAG5Dl4E,KAAAk4E,WAAc/2D,IAClB,UAAWA,IAAS,SAAU,CAC1B,OAAOA,C,CAGX,OAAOnhB,KAAKsO,WAAWqkB,OAAOxR,GAAMV,SAAS,EAGzCzgB,KAAA+3E,mBAAsBI,IAC1B,IAAK,MAAMzzE,KAAOyzE,EAAUjB,QAAQe,IAAIj4E,KAAKo4E,eACzCp4E,KAAKq4E,kBAAkB3zE,EAAKyzE,EAAUvJ,SAAS,EAG/C5uE,KAAAq4E,kBAAoB,CACxB3zE,EACA2lD,KAEA,MAAMr/C,EAAOtG,EAAIkJ,WAAW,GAC5B,GAAI5C,EAAM,CACN,MAAMstE,EAAWttE,EAAKvH,aAAaqzB,cAAcwgD,IACjDgB,EAASjuB,QAAUA,C,GAInBrqD,KAAAu4E,cAAgD,KACpD,MAAMr2E,EAAQlC,KAAKsO,WACnB,IAAKpM,EAAO,CACR,MAAO,E,CAGX,OAAOA,EAAMmhB,QAAQ,SAAS,EAG1BrjB,KAAAo4E,cAAiBj6E,GACd6B,KAAKsO,WAAWyP,mBAAmB5f,EAAO,MAzJjD6B,KAAK80B,UAAY,IAAI2hD,IAAWt4E,GAC5Bo5E,GAASv3E,KAAKo4E,cAAcj6E,GAAOsiB,Y,CAOvC+3D,mBACA,OAAOx4E,KAAK80B,UAAUyT,KAAO,C,CAM1BjpB,QACHtf,KAAK80B,UAAUxV,O,CAQZm5D,aAAan0E,EAAkB,IAClC,MAAMo0E,EAAWp0E,EAAK2zE,IAAIV,IAC1B,GACIv3E,KAAK80B,UAAUyT,OAASjkC,EAAKlG,QAC7B4B,KAAK80B,UAAU4a,MAAM2qB,OACjB,CAACse,EAASx6E,IAAUw6E,IAAYD,EAASv6E,KAE/C,CACE,M,CAGJ6B,KAAK80B,UAAU4a,MAAQgpC,EACvB,MAAM/tE,EAAO3K,KAAKu4E,gBAClB,IAAK,MAAM7zE,KAAOiG,EACd3K,KAAKq4E,kBACD3zE,EACA1E,KAAK80B,UAAUn3B,IAAI45E,GAAS7yE,EAAI+b,Y,CAUrCylB,qBACH0yC,GAEA,MAAO,CAAC54E,KAAK64E,oCAAqCD,E,CAG9CC,iCACJ,MAAO,CACH/zE,MAAO,GACPuS,UAAWrX,KAAK84E,0BAChBroE,UAAWzQ,KAAK23E,qBAChBljE,YAAazU,KAAKyU,YAClByjB,WAAY,MACZhiB,SAAU,4BACVu1D,UAAW,MACX54D,WAAY,MACZ2lB,UAAW,M,CAIX/jB,YAAYmjE,GAChBA,EAAG7gE,iB,CAGC+hE,0BACJ,OAAQ9tE,IACJ,MAAM1I,EAAUtC,KAAKq0E,KAAKhM,IAAIiP,IAC9BvC,GAAqBzyE,EAAS,CAC1B+nD,QAASrqD,KAAK80B,UAAUn3B,IAAI45E,GAASvsE,EAAKyV,YAC1C4kC,MAAOrlD,KAAK03E,eAAe,sBAE/Bp1E,EAAQY,UAAUC,IAAI,cACtBb,EAAQ0B,MAAMkV,QAAU,eAExB,OAAO5W,CAAO,C,WC/FVy2E,GAAUjsE,GACtB,MAAMksE,EAAU,CACZC,kBAAmB,iBACnBC,eAAgB,aAChBC,WAAY,WAGhB,OAAOH,EAAQlsE,IAAW,aAC9B,CCzBO,MAAMssE,GAAe,CAACC,EAAoBC,KAG7C,GAAID,EAAQj7E,SAAWk7E,EAAQl7E,OAAQ,CACnC,OAAO,K,CAGX,OAAOi7E,EAAQhf,OAAM,CAACkf,EAASp7E,IAAUq7E,EAAQD,EAASD,EAAQn7E,KAAQ,ECV9E,MAAMs7E,GAAW,+muCC2BjB,MAAMC,GAAa,E,MAwBNC,GAAK,MA0Kd/5E,YAAAg6E,G,2PAFQ55E,KAAA65E,WAAa,MAihBb75E,KAAAu4E,cAAgD,KACpD,IAAKv4E,KAAK85E,UAAW,CACjB,MAAO,E,CAGX,OAAO95E,KAAK85E,UAAUz2D,QAAQ,SAAS,EAGnCrjB,KAAA+5E,kBAAoC,IAIjC/5E,KAAKu4E,gBAAgBN,KAAKvzE,GAAQA,EAAI+b,YAGzCzgB,KAAAg6E,kBAAqBpC,IACzB,MAAMqC,EAAYrC,EAAGsC,OAErBtC,EAAG7gE,kBACH6gE,EAAG/iD,iBAEH,MAAMslD,EAAeF,EAAYj6E,KAAK+5E,oBAAsB,GAC5D/5E,KAAKitB,OAAO+qD,KAAKmC,GACjBn6E,KAAKo6E,eAAe3B,aAAa0B,GACjCn6E,KAAKi6E,UAAUjC,KAAKiC,EAAU,EAoD1Bj6E,KAAAq6E,iBAAmB,KACvB,IAAKr6E,KAAKiU,eAAgB,CACtB,MAAO,E,CAGX,MAAO,CACHA,eAAgB,KAChB9J,YAAanK,KAAKs6E,iBACrB,EAGGt6E,KAAAs6E,iBAAmB,CAAC/pB,EAAGgqB,KAC3B,MAAM93E,EAAU83E,EAAWtC,IAAIj4E,KAAK2H,YAAY6G,OAAOgsE,SACvDx6E,KAAKy6E,cAAczC,KAAKv1E,EAAQ,EAG5BzC,KAAA2H,WAAc8J,GACXzR,KAAKyC,QAAQjC,MAAM2F,GAElBA,EAAOtB,QAAU4M,EAAUvE,YAC3B/G,EAAOrB,QAAU2M,EAAUvI,gBAAgBpE,QAgF/C9E,KAAA03E,eAAkBj6E,GACfi9E,EAAUrS,IAAI5qE,EAAKuC,KAAK+uC,U,UAp2BX,G,aAMG,G,UASO,Q,oFA6BD,G,4EAmBC,K,aAMR,M,UAMJ2qC,G,uHA0CO,KAgDzB15E,KAAK26E,kBAAoB36E,KAAK26E,kBAAkBtnE,KAAKrT,MACrDA,KAAK46E,iBAAmB56E,KAAK46E,iBAAiBvnE,KAAKrT,MACnDA,KAAK66E,qBAAuB76E,KAAK66E,qBAAqBxnE,KAAKrT,MAC3DA,KAAK86E,qBAAuB96E,KAAK86E,qBAAqBznE,KAAKrT,MAC3DA,KAAK+6E,YAAc/6E,KAAK+6E,YAAY1nE,KAAKrT,MACzCA,KAAKg7E,WAAah7E,KAAKg7E,WAAW3nE,KAAKrT,MACvCA,KAAKi7E,UAAYj7E,KAAKi7E,UAAU5nE,KAAKrT,MACrCA,KAAKk7E,WAAal7E,KAAKk7E,WAAW7nE,KAAKrT,MACvCA,KAAKm7E,cAAgBn7E,KAAKm7E,cAAc9nE,KAAKrT,MAC7CA,KAAKo7E,uBAAyBp7E,KAAKo7E,uBAAuB/nE,KAAKrT,MAC/DA,KAAKy4E,aAAez4E,KAAKy4E,aAAaplE,KAAKrT,MAC3CA,KAAKq7E,oBAAsBr7E,KAAKq7E,oBAAoBhoE,KAAKrT,MACzDA,KAAKq0E,KAAO,IAAI8B,GAAYnzE,UAC5BhD,KAAKs7E,cAAgB,IAAIlH,GAAwBp0E,KAAKq0E,K,CAGnDkH,oBACHv7E,KAAKw7E,aAAex7E,KAAKksC,OAAS,SAClClsC,KAAKy7E,oB,CAGFC,mBACH17E,KAAK27E,M,CAGFC,uBACH57E,KAAKq0E,KAAK/0D,O,CAIJu8D,mBACN77E,KAAKm7E,e,CAICW,kBACN97E,KAAKm7E,e,CAICY,cACN,IAAK/7E,KAAK85E,UAAW,CACjB,M,CAGJ,GAAI95E,KAAK85E,UAAUrxC,YAAczoC,KAAKuhB,KAAM,CACxC,M,CAGJvhB,KAAK85E,UAAU31D,QAAQnkB,KAAKuhB,K,CAItBy6D,mBACN,IAAKh8E,KAAK85E,UAAW,CACjB,M,CAGJ95E,KAAKk7E,Y,CAICluD,WAAWqsD,EAAqB,GAAIC,EAAqB,IAC/D,MAAM2C,EAASj8E,KAAKk8E,UAAU7C,GAC9B,MAAM8C,EAASn8E,KAAKk8E,UAAU5C,GAC9B,MAAM8C,EAAgBp8E,KAAKq8E,kBAAkBJ,EAAQE,GACrD,MAAMG,GAAiBlD,GAAaC,EAASC,GAE7CtkE,YAAW,KACP,IAAKhV,KAAK85E,UAAW,CACjB,M,CAGJ,GAAIsC,EAAe,CACfp8E,KAAKq0E,KAAKiC,aACVt2E,KAAK85E,UAAUr1C,YAAY40C,GAC3Br5E,KAAKy4E,eAEL,M,CAGJ,GAAI6D,EAAe,CACft8E,KAAK85E,UAAU9sD,WAAWqsD,GAC1Br5E,KAAKy4E,eAEL,M,CAGJz4E,KAAK85E,UAAUh1C,gBAAgBu0C,EAAQ,G,CAKrCkD,cAAcC,EAAsBC,GAC1C,IAAKz8E,KAAK85E,UAAW,CACjB,M,CAGJ,GAAI95E,KAAK08E,eAAeF,EAAYC,GAAa,CAC7C,M,CAGJ,MAAME,EAAiB38E,KAAK85E,UACvBnxE,aACA6F,QAAQ8wC,GAAMA,EAAEpyC,aAErB,MAAM0vE,EAAoBD,EAAe1E,KAAK34B,GAC1Cm9B,EAAWj8E,MAAM2qB,GAAQA,EAAItmB,QAAUy6C,EAAEpyC,eAG7C,GAAIlN,KAAK08E,eAAeF,EAAYI,GAAoB,CACpD,M,CAGJ58E,KAAK85E,UAAU10E,WAAWpF,KAAKkmC,wBAC/BlmC,KAAK65E,WAAa,I,CAIZgD,iBACNC,EACAC,GAEA,IAAK/8E,KAAK85E,UAAW,CACjB,M,CAGJ,GAAIN,EAAQsD,EAAeC,GAAgB,CACvC,M,CAGJ,IAAK/8E,KAAKg9E,wBAAwBF,EAAeC,GAAgB,CAC7D/8E,KAAK27E,OAEL,M,CAGJ37E,KAAK85E,UAAUhwE,SACf9J,KAAK85E,UAAUt3E,WAAWuD,Q,CAIpBk3E,gBAAgB9C,GACtB,IAAKn6E,KAAKo6E,eAAgB,CACtB,M,CAGJp6E,KAAKo6E,eAAe3B,aAAa0B,E,CAI3B+C,mBACN,GAAIl9E,KAAKo6E,iBAAmBp6E,KAAK2kB,WAAY,CACzC3kB,KAAKo6E,eAAiB,I,CAG1Bp6E,KAAKy7E,qBACLz7E,KAAK27E,M,CAICwB,wBACN,IAAKn9E,KAAK85E,UAAW,CACjB,M,CAGJ95E,KAAK85E,UAAU10E,WAAWpF,KAAKkmC,wBAC/BlmC,KAAK65E,WAAa,I,CAIZuD,cACN5+E,EACAi1B,GAEA,MAAM4pD,EAAar9E,KAAKs9E,gBAAgB9+E,GACxC,MAAM++E,EAAav9E,KAAKs9E,gBAAgB7pD,GACxC,GAAI+lD,EAAQ6D,EAAYE,GAAa,CACjC,M,CAGJv9E,KAAK85E,UAAU53C,QAAQm7C,E,CAGnBhB,kBACJJ,EACAE,GAEA,OACKn8E,KAAKw9E,YAAYvB,EAAQE,KACzBn8E,KAAKy9E,YAAYxB,EAAQE,E,CAI1BD,UAAU53E,GACd,OAAOA,EAAK2zE,KAAK92D,IAAI,IAAAszD,EAAK,OAAAA,EAAAtzD,EAAKomD,MAAE,MAAAkN,SAAA,EAAAA,EAAItzD,CAAI,G,CAGrCq8D,YACJvB,EACAE,GAEA,MAAMuB,EAAW,IAAIvG,IAAI8E,GACzB,MAAM0B,EAAW,IAAIxG,IAAIgF,GAEzB,OACIuB,EAASn1C,OAASo1C,EAASp1C,MAC3B0zC,EAAO5hB,OAAOkN,GAAOoW,EAAShgF,IAAI4pE,I,CAIlCkW,YACJxB,EACAE,GAEA,OAAOF,EAAO5hB,OAAM,CAACkN,EAAIppE,IAAUopE,IAAO4U,EAAOh+E,I,CAG7Cu+E,eAAeF,EAAsBC,GACzC,OACID,EAAWp+E,SAAWq+E,EAAWr+E,QACjCo+E,EAAWniB,OAAOl0D,GAAWs2E,EAAW/7E,SAASyF,I,CAIjD62E,wBACJF,EACAC,GAEA,MAAMa,GAAqBb,IAAa,MAAbA,SAAa,SAAbA,EAAe9E,KAAK3yC,GAAMA,EAAEzgC,UAAU,GAEjE,OACIi4E,IAAa,MAAbA,SAAa,SAAbA,EAAe1+E,WAAW2+E,IAAa,MAAbA,SAAa,SAAbA,EAAe3+E,YACvC0+E,IAAa,MAAbA,SAAa,SAAbA,EAAeziB,OAAO/0B,GAAMs4C,EAAmBl9E,SAAS4kC,EAAEzgC,S,CAI5D82E,OACJ,GAAI37E,KAAK85E,UAAW,CAChB95E,KAAKq0E,KAAKiC,aACVt2E,KAAK85E,UAAUz3C,S,CAGnB,MAAMngC,EACFlC,KAAK69E,KAAKC,WAAWhnD,cAAc,oBACvC92B,KAAKo7E,uBAAuBl5E,E,CAYxBk5E,uBAAuBl5E,GAI3B,KAAM,mBAAoBioB,QAAS,CAC/BnqB,KAAK85E,UAAY,IAAIiE,EAAe77E,EAAOlC,KAAKg+E,cAChDh+E,KAAKy4E,eAEL,M,CAGJ,MAAMzM,EAAW,IAAIO,gBAAe,KAChC0R,uBAAsB,KAClBj+E,KAAK85E,UAAY,IAAIiE,EAAe77E,EAAOlC,KAAKg+E,cAChDh+E,KAAKy4E,eACLzM,EAASa,UAAU3qE,GACnB8pE,EAAS/H,YAAY,GACvB,IAEN+H,EAASY,QAAQ1qE,E,CAGbu5E,qBACJ,GAAIz7E,KAAK2kB,WAAY,CACjB3kB,KAAKo6E,eAAiB,IAAI5C,IACtB,IAAMx3E,KAAK85E,WACX95E,KAAKq0E,KACLr0E,KAAKitB,QACJxvB,GAAgBuC,KAAK03E,eAAej6E,KAEzCuC,KAAKo6E,eAAe3B,aAAaz4E,KAAK80B,U,EAItC2jD,eACJ,KAAMz4E,KAAK85E,WAAa95E,KAAKo6E,gBAAiB,CAC1C,M,CAGJp6E,KAAKo6E,eAAe3B,aAAaz4E,KAAK80B,U,CAGlCqmD,gB,OACJ1G,EAAAz0E,KAAK85E,aAAS,MAAArF,SAAA,SAAAA,EAAErsC,WAAWpoC,KAAKk+E,qB,CAG5BF,aACJ,MAAMG,EAAcn+E,KAAKo+E,iBACzB,MAAMC,EAAoBr+E,KAAKs+E,uBAC/B,MAAMC,EAAgBv+E,KAAKq6E,mBAE3B,OAAAj9E,OAAAqE,OAAArE,OAAAqE,OAAArE,OAAAqE,OAAArE,OAAAqE,OAAA,CACI6C,KAAMtE,KAAKsE,KACXwI,OAAQisE,GAAU/4E,KAAK8M,QACvBrK,QAASzC,KAAKkmC,uBACd3G,YAAav/B,KAAK26E,kBAClBr6C,WAAYtgC,KAAK46E,iBACjB/zD,eAAgB7mB,KAAK66E,sBAClBsD,GACAE,GAAiB,CACpBrvD,SAAUhvB,KAAKg7E,WACflrD,aAAc9vB,KAAKi7E,UACnBpjD,YAAa73B,KAAKw+E,oBAClBjsE,qBAAsB,QACnBgsE,E,CAIHC,oBACJ,GAAIx+E,KAAKy+E,gBAAkBz+E,KAAKy+E,eAAergF,OAAS,EAAG,CACvD,OAAO4B,KAAKs9E,gBAAgBt9E,KAAKy+E,e,CAGrC,OAAOz+E,KAAKs9E,gBAAgBt9E,KAAK0+E,Q,CAG7BpB,gBAAgBoB,GACpB,OAAOA,EAAQzG,KAAKtzE,IACT,CACHwB,OAAQ1F,OAAOkE,EAAOwB,OAAOtB,OAC7BwY,IAAK1Y,EAAOm8B,UAAU69C,uB,CAK1Bz4C,uBACJ,MAAM0yC,EAAoB54E,KAAKyC,QAC1Bw1E,IAAIj4E,KAAKq7E,qBACTpD,KAAK9xE,I,MACF,MAAMH,EAAahG,KAAKs7E,cAAc3sD,OAAOxoB,GAC7C,MAAMy4E,GAAiBnK,EAAAtuE,EAAO+xB,cAAU,MAAAu8C,SAAA,EAAAA,EAAI,KAC5CzuE,EAAWkyB,WAAal4B,KAAK6+E,iBAAmBD,EAEhD,OAAO54E,CAAU,IAGzB,GAAIhG,KAAKo6E,eAAgB,CACrB,OAAOp6E,KAAKo6E,eAAel0C,qBAAqB0yC,E,CAGpD,OAAOA,C,CAGHyC,oBAAoBl1E,G,MACxB,MAAKsuE,EAAAz0E,KAAK8+E,cAAU,MAAArK,SAAA,SAAAA,EAAEr2E,SAAU+H,EAAOwuE,WAAY,CAC/C,OAAOxuE,C,CAGX,MAAM44E,EAAY/+E,KAAK8+E,WAAWt+E,MAAM8kC,GAAMA,EAAEzgC,QAAUsB,EAAOtB,QACjE,GAAIk6E,EAAW,CACX54E,EAAOwuE,WAAc/vE,I,MACjB,IAAKA,EAAK,CACN,M,CAGJ,MAAM7G,GAAQ02E,EAAAz0E,KAAK8+E,WAAWt+E,MACzB8kC,GAAMA,EAAEzgC,QAAUD,EAAIC,WAC1B,MAAA4vE,SAAA,SAAAA,EAAE12E,MAEH,GAAI6G,EAAIyS,UAAW,CACf,OAAOzS,EAAIyS,UAAUtZ,E,CAGzB,OAAOA,CAAK,C,CAIpB,OAAOoI,C,CAGHi4E,iBACJ,IAAKp+E,KAAKg/E,eAAgB,CACtB,MAAO,E,CAKX,MAAMC,EAAY,oBAElB,MAAO,CACHx7D,YAAa,KACb4Y,QAAS4iD,EACTviD,gBAAiB18B,KAAK+6E,YACtB77C,eAAgBl/B,KAAK86E,qB,CAkBrBA,uB,MACJ,MAAMoE,EAAel/E,KAAKw7E,kBAAkB/G,EAAAz0E,KAAKsE,QAAI,MAAAmwE,SAAA,SAAAA,EAAEr2E,QACvD4B,KAAKw7E,aAAe,MAEpB,GAAI0D,EAAc,CACdlqE,YAAW,KACPhV,KAAKm7E,gBACLn7E,KAAK85E,UAAUr1C,YAAYzkC,KAAKsE,KAAK,IAGzC,OAAO,K,CAGX,OAAO,I,CAGHg6E,uBACJ,IAAKt+E,KAAKm/E,SAAU,CAChB,MAAO,E,CAGX,MAAO,CACHpgE,WAAY/e,KAAKg/E,eAAiB,SAAW,QAC7CljD,eAAgB97B,KAAKm/E,SACrBpjD,sBAAuB/7B,KAAKuhB,K,CAI5Bw5D,YAAYxqB,EAAG6uB,EAAI7nE,GACvB,MAAMmM,EAAUnM,EAAOmM,QACvB,MAAM27D,EAAc9nE,EAAOgK,KAE3B,GAAIvhB,KAAKuhB,OAAS89D,EAAa,CAC3Br/E,KAAKs/E,WAAWtH,KAAKqH,E,CAGzB,MAAME,EAAgB77D,EAAQu0D,IAAIhC,GAAmBj2E,KAAKyC,UAE1D,MAAMw/B,EAAO,CACT1gB,KAAM89D,EACN37D,QAAS67D,GAOb,MAAMC,EAAsBj0E,QAAQC,QAAQ,CACxC27D,UAAWnnE,KAAKk+E,qBAChB55E,KAAMtE,KAAKsE,OAGf,IAAKk1E,EAAQx5E,KAAKy/E,YAAax9C,GAAO,CAClCjiC,KAAKy+E,eAAiBc,EACtBv/E,KAAKy/E,YAAcx9C,EACnBjiC,KAAKiiC,KAAK+1C,KAAK/1C,E,CAGnB,OAAOu9C,C,CAGHR,eACJ,OAAOh/E,KAAKksC,OAAS,Q,CAGjByuC,kBAAkBj3D,GACtB,GAAI1jB,KAAKg/E,eAAgB,CACrB,M,CAGJ,MAAMO,EAAgB77D,EAAQu0D,IAAIhC,GAAmBj2E,KAAKyC,UAC1D,GAAI88E,EAAcnhF,SAAW,EAAG,CAC5B,M,CAGJ4B,KAAKsV,KAAK0iE,KAAKuH,E,CAGX3E,iBAAiBr5D,GACrB,GAAIvhB,KAAKg/E,eAAgB,CACrB,M,CAGJh/E,KAAKs/E,WAAWtH,KAAKz2D,E,CAGjBs5D,uBACJ,GAAI76E,KAAK85E,WAAa95E,KAAK65E,WAAY,CACnC75E,KAAK65E,WAAa,MAClB75E,KAAK85E,UAAU53C,QAAQliC,KAAKs9E,gBAAgBt9E,KAAK0+E,S,EAIjD1D,WAAW0E,EAAKh7E,GACpB,GAAIA,EAAIkoB,cAAgBluB,UAAW,CAE/B,M,CAGJ,GAAIsB,KAAK2/E,YAAYj7E,GAAM,CACvB1E,KAAK4/E,UAAY,I,KACd,CACH5/E,KAAK4/E,UAAYl7E,EAAI+b,S,CAGzBzgB,KAAKg3B,SAASghD,KAAKh4E,KAAK4/E,U,CA8BpB1E,aAEJl7E,KAAK85E,UAAUz2D,UAAUne,QAAQlF,KAAKi7E,U,CAGlCA,UAAUv2E,GACd,GAAI1E,KAAK2/E,YAAYj7E,GAAM,CACvBA,EAAIjB,aAAaP,UAAUC,IAAI,S,KAC5B,CACHuB,EAAIjB,aAAaP,UAAUikB,OAAO,S,CAGtC,MAAM04D,EAA6Bn7E,EAC9BjB,aACAqoC,iBAAiB,yBACtB,GAAI+zC,EAA2BzhF,SAAW,EAAG,CACzC,MAAMkE,EAAUoC,EAAIjB,aAAaq8E,cAAc78E,cAAc,OAC7DX,EAAQY,UAAUC,IAAI,wBACtBuB,EAAIjB,aAAa8oB,QAAQjqB,E,EAIzBq9E,YAAYj7E,G,MAChB,IAAK1E,KAAK4/E,UAAW,CACjB,OAAO,K,CAGX,MAAMG,GAActL,EAAAz0E,KAAK4/E,UAAUrY,MAAE,MAAAkN,SAAA,EAAAA,EAAI,KAEzC,GAAIsL,IAAgB,KAAM,CACtB,OAAOA,IAAgBr7E,EAAI+b,UAAU8mD,E,CAGzC,OAAOvnE,KAAK4/E,YAAcl7E,EAAI+b,S,CAG1By9D,qBACJ,IAAI8B,EAAQhgF,KAAKigF,UACjB,IAAKD,EAAO,CACRA,EAAQhgF,KAAKsE,KAAKlG,M,CAGtB,OAAO8C,KAAKwmB,KAAKs4D,EAAQhgF,KAAKm/E,S,CAG1Be,eAAez9E,GACnB,OAAOA,EAAQ09E,MAAMh6E,GAAWxI,EAAIwI,EAAQ,e,CA4BhDi6E,S,MACI,OACIC,EAACC,EAAI,CACDC,MAAO,CACH,kBAAmBvgF,KAAK8M,SAAW,eAGvCuzE,EAAA,OACI9Y,GAAG,sBACHgZ,MAAO,CACH,iBAAkBvgF,KAAKigF,UAAYjgF,KAAKm/E,SACxC,kBAAmBn/E,KAAKkgF,eAAelgF,KAAKyC,SAC5C,sBAAuBzC,KAAKiU,eAC5B,kBAAmBjU,KAAK2kB,WACxB,iBAAiB8vD,EAAAz0E,KAAKo6E,kBAAc,MAAA3F,SAAA,SAAAA,EAAE+D,eAM1C6H,EAAA,OACI9Y,GAAG,mBACHvjE,MAAO,CAAEkV,QAASlZ,KAAK2vC,QAAU,OAAS,SAE1C0wC,EAAA,iBAAe93C,KAAK,WAEvBvoC,KAAKwgF,qBACLxgF,KAAKygF,kBACNJ,EAAA,OAAK9Y,GAAG,qB,CAMhBkZ,kB,UACJ,IAAKzgF,KAAK2kB,WAAY,CAClB,M,CAGJ,MAAM+7D,GAAiB1gF,KAAK2vC,SAAW3vC,KAAKo6E,eAE5C,OACIiG,EAAA,OACIE,MAAM,aACNv8E,MAAO,CAAEkV,QAASwnE,EAAgB,eAAiB,SAEnDL,EAAA,kBACIE,MAAM,aACNn9B,SAAUpjD,KAAKg6E,kBACf3a,SAAUr/D,KAAKsE,KAAKlG,SAAW,EAC/BisD,SAASoqB,EAAAz0E,KAAKo6E,kBAAc,MAAA3F,SAAA,SAAAA,EAAE+D,aAC9BpuB,gBACIu2B,EAAA3gF,KAAKo6E,kBAAc,MAAAuG,SAAA,SAAAA,EAAEnI,iBACrBoI,EAAA5gF,KAAK80B,aAAS,MAAA8rD,SAAA,SAAAA,EAAExiF,QAAS4B,KAAKsE,KAAKlG,OAEvCinD,MAAOrlD,KAAK03E,eAAe,sB,CAMnC8I,qBACJ,MAAMK,GACD7gF,KAAK2vC,SAAW3vC,KAAKsE,KAAKlG,SAAW,GAAK4B,KAAK8gF,aAEpD,OACIT,EAAA,OACI9Y,GAAG,uBACHvjE,MAAO,CAAEkV,QAAS2nE,EAAmB,OAAS,SAE9CR,EAAA,YAAOrgF,KAAK8gF,c"}
|